@terra.gl/core 0.0.1-alpha.32 → 0.0.1-alpha.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -216,6 +216,13 @@ export declare const author: any;
216
216
  declare class Base {
217
217
  }
218
218
 
219
+ declare type BaseDrawToolOptions = MapToolOptions & {
220
+ /** 模式名称,例如 'line' / 'polygon' / 'point' */
221
+ mode: string;
222
+ /** 是否在一次绘制结束后自动禁用工具 */
223
+ once?: boolean;
224
+ };
225
+
219
226
  export declare interface BaseEventMap<Target = any> {
220
227
  /** 触发事件的目标对象(泛型) */
221
228
  target?: Target;
@@ -854,6 +861,12 @@ export declare class DrawTool extends MapTool {
854
861
  * 设置绘制模式:会清空当前绘制状态
855
862
  */
856
863
  setMode(mode: string): this;
864
+ /**
865
+ * 设置绘制样式(仅影响后续新开始的绘制)
866
+ * - geometryStyle:主几何样式(点/线/面)
867
+ * - vertexStyle:顶点样式,传 null 可关闭锚点显示
868
+ */
869
+ setStyle(style: DrawToolStyleOptions): this;
857
870
  /**
858
871
  * 子类实现:返回需要绑定到 Map 的事件映射
859
872
  */
@@ -910,17 +923,19 @@ export declare class DrawTool extends MapTool {
910
923
  private _destroyDraftLayer;
911
924
  }
912
925
 
926
+ declare type DrawToolOptions = BaseDrawToolOptions & DrawToolStyleOptions;
927
+
913
928
  /**
914
- * DrawTool 的配置项
929
+ * 样式配置类型
915
930
  */
916
- declare type DrawToolOptions = MapToolOptions & {
917
- /** 模式名称,例如 'line' / 'polygon' / 'point' */
918
- mode: string;
919
- /** 是否在一次绘制结束后自动禁用工具 */
920
- once?: boolean;
921
- /** 主几何的样式(线 / 面) */
931
+ declare type DrawToolStyleOptions = {
932
+ /** 主几何样式(点 / 线 / 面) */
922
933
  geometryStyle?: StyleInput;
923
- /** 锚点样式 */
934
+ /**
935
+ * 顶点(锚点)样式
936
+ * - 传 null 表示不绘制锚点
937
+ * - 不传该字段则保持当前设置
938
+ */
924
939
  vertexStyle?: StyleInput | null;
925
940
  };
926
941
 
@@ -2584,7 +2599,7 @@ export declare type LineStringOptions = LineOptions & {};
2584
2599
  /**
2585
2600
  * 面样式联合类型
2586
2601
  */
2587
- export declare type LineStyle = PipelineStyle | PipelineStyle;
2602
+ export declare type LineStyle = BaseLineStyle | PipelineStyle;
2588
2603
 
2589
2604
  /**
2590
2605
  * Factory for loader
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as ft from "three";
2
2
  import { REVISION as zd, TrianglesDrawMode as x_, TriangleFanDrawMode as Gl, TriangleStripDrawMode as Dd, Mesh as yt, Vector3 as Y, Color as be, FrontSide as Oo, Plane as Kd, Matrix4 as Se, Vector4 as pn, PerspectiveCamera as kr, WebGLRenderTarget as T_, UniformsUtils as Eo, UniformsLib as Ao, ShaderMaterial as Ul, MOUSE as ar, TOUCH as lr, Spherical as Xh, Quaternion as cn, OrthographicCamera as ss, Vector2 as Me, Ray as L_, Loader as Bl, LoaderUtils as fi, FileLoader as gr, MeshPhysicalMaterial as Zn, SpotLight as kd, PointLight as Rl, DirectionalLight as Vo, InstancedMesh as jl, InstancedBufferAttribute as Il, Object3D as hn, TextureLoader as zo, ImageBitmapLoader as S_, BufferAttribute as un, InterleavedBuffer as M_, InterleavedBufferAttribute as zr, LinearMipmapLinearFilter as us, NearestMipmapLinearFilter as P_, LinearMipmapNearestFilter as Z_, NearestMipmapNearestFilter as W_, LinearFilter as yi, NearestFilter as Nd, RepeatWrapping as Kn, MirroredRepeatWrapping as G_, ClampToEdgeWrapping as Cl, PointsMaterial as Do, Material as sl, LineBasicMaterial as Yd, MeshStandardMaterial as hs, DoubleSide as Jl, MeshBasicMaterial as Ln, PropertyBinding as ls, BufferGeometry as Sn, SkinnedMesh as Hd, LineSegments as R_, Line as Ud, LineLoop as I_, Points as ds, Group as dn, MathUtils as gt, Skeleton as Bd, AnimationClip as jd, Bone as El, InterpolateDiscrete as C_, InterpolateLinear as Jd, Texture as vi, VectorKeyframeTrack as Al, NumberKeyframeTrack as Vl, QuaternionKeyframeTrack as Fl, Interpolant as E_, Box3 as Yr, Sphere as Ql, Curve as A_, MeshPhongMaterial as ol, MeshLambertMaterial as Qd, EquirectangularReflectionMapping as V_, AmbientLight as $d, Float32BufferAttribute as cr, Uint16BufferAttribute as F_, Matrix3 as X_, Euler as qi, DataTextureLoader as O_, HalfFloatType as lo, FloatType as Ro, DataUtils as co, InstancedBufferGeometry as qd, InstancedInterleavedBuffer as Xl, WireframeGeometry as z_, Line3 as D_, EventDispatcher as ef, Clock as $l, Scene as K_, FogExp2 as Oh, CubeTextureLoader as k_, WebGLRenderer as N_, PCFSoftShadowMap as Y_, ACESFilmicToneMapping as H_, SRGBColorSpace as Ko, CameraHelper as U_, CubicBezierCurve3 as B_, PlaneGeometry as pi, Frustum as j_, Raycaster as ql, CanvasTexture as fs, SpriteMaterial as ps, Sprite as _i, DynamicDrawUsage as zh, NormalBlending as tf, BackSide as J_, Shape as Q_, ShapeGeometry as $_, CylinderGeometry as q_, AdditiveBlending as eb, AnimationMixer as tb, LoopRepeat as nb, LoopOnce as rb, LoadingManager as ib, Box2 as sb, ImageLoader as nf } from "three";
3
- const ob = "0.0.1-alpha.32", al = {
3
+ const ob = "0.0.1-alpha.34", al = {
4
4
  name: "Criska"
5
5
  };
6
6
  var os = function() {
@@ -16232,7 +16232,7 @@ function SS(i, e) {
16232
16232
  }
16233
16233
  const MS = `{
16234
16234
  "name": "@terra.gl/core",
16235
- "version": "0.0.1-alpha.32",
16235
+ "version": "0.0.1-alpha.34",
16236
16236
  "type": "module",
16237
16237
  "files": [
16238
16238
  "dist"
@@ -20128,6 +20128,14 @@ class vs extends e2 {
20128
20128
  setMode(e) {
20129
20129
  return this._finishDrawingSilently(), this.options.mode = e, this._ensureMode(), this;
20130
20130
  }
20131
+ /**
20132
+ * 设置绘制样式(仅影响后续新开始的绘制)
20133
+ * - geometryStyle:主几何样式(点/线/面)
20134
+ * - vertexStyle:顶点样式,传 null 可关闭锚点显示
20135
+ */
20136
+ setStyle(e) {
20137
+ return e.geometryStyle !== void 0 && (this.options.geometryStyle = e.geometryStyle), Object.prototype.hasOwnProperty.call(e, "vertexStyle") && (this.options.vertexStyle = e.vertexStyle ?? null), this;
20138
+ }
20131
20139
  /**
20132
20140
  * 子类实现:返回需要绑定到 Map 的事件映射
20133
20141
  */
@@ -1,4 +1,4 @@
1
- (function(q,m){typeof exports=="object"&&typeof module<"u"?m(exports,require("three")):typeof define=="function"&&define.amd?define(["exports","three"],m):(q=typeof globalThis<"u"?globalThis:q||self,m(q["terra-gl"]={},q.THREE))})(this,function(q,m){"use strict";function Dd(i){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(i){for(const t in i)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(i,t);Object.defineProperty(e,t,n.get?n:{enumerable:!0,get:()=>i[t]})}}return e.default=i,Object.freeze(e)}const lt=Dd(m),Kd="0.0.1-alpha.32",so={name:"Criska"};var ti=function(){var i=0,e=document.createElement("div");e.style.cssText="position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000",e.addEventListener("click",function(p){p.preventDefault(),n(++i%e.children.length)},!1);function t(p){return e.appendChild(p.dom),p}function n(p){for(var f=0;f<e.children.length;f++)e.children[f].style.display=f===p?"block":"none";i=p}var r=(performance||Date).now(),o=r,l=0,u=t(new ti.Panel("FPS","#0ff","#002")),c=t(new ti.Panel("MS","#0f0","#020"));if(self.performance&&self.performance.memory)var d=t(new ti.Panel("MB","#f08","#201"));return n(0),{REVISION:16,dom:e,addPanel:t,showPanel:n,begin:function(){r=(performance||Date).now()},end:function(){l++;var p=(performance||Date).now();if(c.update(p-r,200),p>=o+1e3&&(u.update(l*1e3/(p-o),100),o=p,l=0,d)){var f=performance.memory;d.update(f.usedJSHeapSize/1048576,f.jsHeapSizeLimit/1048576)}return p},update:function(){r=this.end()},domElement:e,setMode:n}};ti.Panel=function(i,e,t){var n=1/0,r=0,o=Math.round,l=o(window.devicePixelRatio||1),u=80*l,c=48*l,d=3*l,p=2*l,f=3*l,y=15*l,v=74*l,_=30*l,S=document.createElement("canvas");S.width=u,S.height=c,S.style.cssText="width:80px;height:48px";var x=S.getContext("2d");return x.font="bold "+9*l+"px Helvetica,Arial,sans-serif",x.textBaseline="top",x.fillStyle=t,x.fillRect(0,0,u,c),x.fillStyle=e,x.fillText(i,d,p),x.fillRect(f,y,v,_),x.fillStyle=t,x.globalAlpha=.9,x.fillRect(f,y,v,_),{dom:S,update:function(P,L){n=Math.min(n,P),r=Math.max(r,P),x.fillStyle=t,x.globalAlpha=1,x.fillRect(0,0,u,y),x.fillStyle=e,x.fillText(o(P)+" "+i+" ("+o(n)+"-"+o(r)+")",d,p),x.drawImage(S,f+l,y,v-l,_,f,y,v-l,_),x.fillRect(f+v-l,y,l,_),x.fillStyle=t,x.globalAlpha=.9,x.fillRect(f+v-l,y,l,o((1-P/L)*_))}}};const ki=parseInt(m.REVISION.replace(/\D+/g,"")),oo=ki>=125?"uv1":"uv2";function vl(i,e){if(e===m.TrianglesDrawMode)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),i;if(e===m.TriangleFanDrawMode||e===m.TriangleStripDrawMode){let t=i.getIndex();if(t===null){const l=[],u=i.getAttribute("position");if(u!==void 0){for(let c=0;c<u.count;c++)l.push(c);i.setIndex(l),t=i.getIndex()}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),i}const n=t.count-2,r=[];if(t)if(e===m.TriangleFanDrawMode)for(let l=1;l<=n;l++)r.push(t.getX(0)),r.push(t.getX(l)),r.push(t.getX(l+1));else for(let l=0;l<n;l++)l%2===0?(r.push(t.getX(l)),r.push(t.getX(l+1)),r.push(t.getX(l+2))):(r.push(t.getX(l+2)),r.push(t.getX(l+1)),r.push(t.getX(l)));r.length/3!==n&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const o=i.clone();return o.setIndex(r),o.clearGroups(),o}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",e),i}var Ft=Uint8Array,In=Uint16Array,ao=Uint32Array,wl=new Ft([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),_l=new Ft([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),kd=new Ft([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),bl=function(i,e){for(var t=new In(31),n=0;n<31;++n)t[n]=e+=1<<i[n-1];for(var r=new ao(t[30]),n=1;n<30;++n)for(var o=t[n];o<t[n+1];++o)r[o]=o-t[n]<<5|n;return[t,r]},xl=bl(wl,2),Ll=xl[0],Rd=xl[1];Ll[28]=258,Rd[258]=28;for(var Nd=bl(_l,0),Ud=Nd[0],lo=new In(32768),Ce=0;Ce<32768;++Ce){var Vn=(Ce&43690)>>>1|(Ce&21845)<<1;Vn=(Vn&52428)>>>2|(Vn&13107)<<2,Vn=(Vn&61680)>>>4|(Vn&3855)<<4,lo[Ce]=((Vn&65280)>>>8|(Vn&255)<<8)>>>1}for(var ni=function(i,e,t){for(var n=i.length,r=0,o=new In(e);r<n;++r)++o[i[r]-1];var l=new In(e);for(r=0;r<e;++r)l[r]=l[r-1]+o[r-1]<<1;var u;if(t){u=new In(1<<e);var c=15-e;for(r=0;r<n;++r)if(i[r])for(var d=r<<4|i[r],p=e-i[r],f=l[i[r]-1]++<<p,y=f|(1<<p)-1;f<=y;++f)u[lo[f]>>>c]=d}else for(u=new In(n),r=0;r<n;++r)i[r]&&(u[r]=lo[l[i[r]-1]++]>>>15-i[r]);return u},ri=new Ft(288),Ce=0;Ce<144;++Ce)ri[Ce]=8;for(var Ce=144;Ce<256;++Ce)ri[Ce]=9;for(var Ce=256;Ce<280;++Ce)ri[Ce]=7;for(var Ce=280;Ce<288;++Ce)ri[Ce]=8;for(var Ml=new Ft(32),Ce=0;Ce<32;++Ce)Ml[Ce]=5;var Yd=ni(ri,9,1),Bd=ni(Ml,5,1),co=function(i){for(var e=i[0],t=1;t<i.length;++t)i[t]>e&&(e=i[t]);return e},Qt=function(i,e,t){var n=e/8|0;return(i[n]|i[n+1]<<8)>>(e&7)&t},uo=function(i,e){var t=e/8|0;return(i[t]|i[t+1]<<8|i[t+2]<<16)>>(e&7)},jd=function(i){return(i/8|0)+(i&7&&1)},Jd=function(i,e,t){(t==null||t>i.length)&&(t=i.length);var n=new(i instanceof In?In:i instanceof ao?ao:Ft)(t-e);return n.set(i.subarray(e,t)),n},Qd=function(i,e,t){var n=i.length;if(!n||t&&!t.l&&n<5)return e||new Ft(0);var r=!e||t,o=!t||t.i;t||(t={}),e||(e=new Ft(n*3));var l=function(ut){var Je=e.length;if(ut>Je){var Ue=new Ft(Math.max(Je*2,ut));Ue.set(e),e=Ue}},u=t.f||0,c=t.p||0,d=t.b||0,p=t.l,f=t.d,y=t.m,v=t.n,_=n*8;do{if(!p){t.f=u=Qt(i,c,1);var S=Qt(i,c+1,3);if(c+=3,S)if(S==1)p=Yd,f=Bd,y=9,v=5;else if(S==2){var T=Qt(i,c,31)+257,W=Qt(i,c+10,15)+4,K=T+Qt(i,c+5,31)+1;c+=14;for(var O=new Ft(K),D=new Ft(19),V=0;V<W;++V)D[kd[V]]=Qt(i,c+V*3,7);c+=W*3;for(var R=co(D),C=(1<<R)-1,X=ni(D,R,1),V=0;V<K;){var Y=X[Qt(i,c,C)];c+=Y&15;var x=Y>>>4;if(x<16)O[V++]=x;else{var Q=0,j=0;for(x==16?(j=3+Qt(i,c,3),c+=2,Q=O[V-1]):x==17?(j=3+Qt(i,c,7),c+=3):x==18&&(j=11+Qt(i,c,127),c+=7);j--;)O[V++]=Q}}var H=O.subarray(0,T),J=O.subarray(T);y=co(H),v=co(J),p=ni(H,y,1),f=ni(J,v,1)}else throw"invalid block type";else{var x=jd(c)+4,P=i[x-4]|i[x-3]<<8,L=x+P;if(L>n){if(o)throw"unexpected EOF";break}r&&l(d+P),e.set(i.subarray(x,L),d),t.b=d+=P,t.p=c=L*8;continue}if(c>_){if(o)throw"unexpected EOF";break}}r&&l(d+131072);for(var ie=(1<<y)-1,re=(1<<v)-1,le=c;;le=c){var Q=p[uo(i,c)&ie],de=Q>>>4;if(c+=Q&15,c>_){if(o)throw"unexpected EOF";break}if(!Q)throw"invalid length/literal";if(de<256)e[d++]=de;else if(de==256){le=c,p=null;break}else{var ge=de-254;if(de>264){var V=de-257,fe=wl[V];ge=Qt(i,c,(1<<fe)-1)+Ll[V],c+=fe}var Me=f[uo(i,c)&re],nt=Me>>>4;if(!Me)throw"invalid distance";c+=Me&15;var J=Ud[nt];if(nt>3){var fe=_l[nt];J+=uo(i,c)&(1<<fe)-1,c+=fe}if(c>_){if(o)throw"unexpected EOF";break}r&&l(d+131072);for(var rt=d+ge;d<rt;d+=4)e[d]=e[d-J],e[d+1]=e[d+1-J],e[d+2]=e[d+2-J],e[d+3]=e[d+3-J];d=rt}}t.l=p,t.p=le,t.b=d,p&&(u=1,t.m=y,t.d=f,t.n=v)}while(!u);return d==e.length?e:Jd(e,0,d)},Hd=new Ft(0),Ed=function(i){if((i[0]&15)!=8||i[0]>>>4>7||(i[0]<<8|i[1])%31)throw"invalid zlib data";if(i[1]&32)throw"invalid zlib data: preset dictionaries not supported"};function $d(i,e){return Qd((Ed(i),i.subarray(2,-4)),e)}var qd=typeof TextDecoder<"u"&&new TextDecoder,ef=0;try{qd.decode(Hd,{stream:!0}),ef=1}catch{}class tf extends m.Mesh{constructor(e,t={}){super(e),this.isWater=!0;const n=this,r=t.textureWidth!==void 0?t.textureWidth:512,o=t.textureHeight!==void 0?t.textureHeight:512,l=t.clipBias!==void 0?t.clipBias:0,u=t.alpha!==void 0?t.alpha:1,c=t.time!==void 0?t.time:0,d=t.waterNormals!==void 0?t.waterNormals:null,p=t.sunDirection!==void 0?t.sunDirection:new m.Vector3(.70707,.70707,0),f=new m.Color(t.sunColor!==void 0?t.sunColor:16777215),y=new m.Color(t.waterColor!==void 0?t.waterColor:8355711),v=t.eye!==void 0?t.eye:new m.Vector3(0,0,0),_=t.distortionScale!==void 0?t.distortionScale:20,S=t.side!==void 0?t.side:m.FrontSide,x=t.fog!==void 0?t.fog:!1,P=new m.Plane,L=new m.Vector3,T=new m.Vector3,W=new m.Vector3,K=new m.Matrix4,O=new m.Vector3(0,0,-1),D=new m.Vector4,V=new m.Vector3,R=new m.Vector3,C=new m.Vector4,X=new m.Matrix4,Y=new m.PerspectiveCamera,Q=new m.WebGLRenderTarget(r,o),j={uniforms:m.UniformsUtils.merge([m.UniformsLib.fog,m.UniformsLib.lights,{normalSampler:{value:null},mirrorSampler:{value:null},alpha:{value:1},time:{value:0},size:{value:1},distortionScale:{value:20},textureMatrix:{value:new m.Matrix4},sunColor:{value:new m.Color(8355711)},sunDirection:{value:new m.Vector3(.70707,.70707,0)},eye:{value:new m.Vector3},waterColor:{value:new m.Color(5592405)}}]),vertexShader:`
1
+ (function(q,m){typeof exports=="object"&&typeof module<"u"?m(exports,require("three")):typeof define=="function"&&define.amd?define(["exports","three"],m):(q=typeof globalThis<"u"?globalThis:q||self,m(q["terra-gl"]={},q.THREE))})(this,function(q,m){"use strict";function Dd(i){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(i){for(const t in i)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(i,t);Object.defineProperty(e,t,n.get?n:{enumerable:!0,get:()=>i[t]})}}return e.default=i,Object.freeze(e)}const lt=Dd(m),Kd="0.0.1-alpha.34",so={name:"Criska"};var ti=function(){var i=0,e=document.createElement("div");e.style.cssText="position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000",e.addEventListener("click",function(p){p.preventDefault(),n(++i%e.children.length)},!1);function t(p){return e.appendChild(p.dom),p}function n(p){for(var f=0;f<e.children.length;f++)e.children[f].style.display=f===p?"block":"none";i=p}var r=(performance||Date).now(),o=r,l=0,u=t(new ti.Panel("FPS","#0ff","#002")),c=t(new ti.Panel("MS","#0f0","#020"));if(self.performance&&self.performance.memory)var d=t(new ti.Panel("MB","#f08","#201"));return n(0),{REVISION:16,dom:e,addPanel:t,showPanel:n,begin:function(){r=(performance||Date).now()},end:function(){l++;var p=(performance||Date).now();if(c.update(p-r,200),p>=o+1e3&&(u.update(l*1e3/(p-o),100),o=p,l=0,d)){var f=performance.memory;d.update(f.usedJSHeapSize/1048576,f.jsHeapSizeLimit/1048576)}return p},update:function(){r=this.end()},domElement:e,setMode:n}};ti.Panel=function(i,e,t){var n=1/0,r=0,o=Math.round,l=o(window.devicePixelRatio||1),u=80*l,c=48*l,d=3*l,p=2*l,f=3*l,y=15*l,v=74*l,_=30*l,S=document.createElement("canvas");S.width=u,S.height=c,S.style.cssText="width:80px;height:48px";var x=S.getContext("2d");return x.font="bold "+9*l+"px Helvetica,Arial,sans-serif",x.textBaseline="top",x.fillStyle=t,x.fillRect(0,0,u,c),x.fillStyle=e,x.fillText(i,d,p),x.fillRect(f,y,v,_),x.fillStyle=t,x.globalAlpha=.9,x.fillRect(f,y,v,_),{dom:S,update:function(P,L){n=Math.min(n,P),r=Math.max(r,P),x.fillStyle=t,x.globalAlpha=1,x.fillRect(0,0,u,y),x.fillStyle=e,x.fillText(o(P)+" "+i+" ("+o(n)+"-"+o(r)+")",d,p),x.drawImage(S,f+l,y,v-l,_,f,y,v-l,_),x.fillRect(f+v-l,y,l,_),x.fillStyle=t,x.globalAlpha=.9,x.fillRect(f+v-l,y,l,o((1-P/L)*_))}}};const ki=parseInt(m.REVISION.replace(/\D+/g,"")),oo=ki>=125?"uv1":"uv2";function vl(i,e){if(e===m.TrianglesDrawMode)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),i;if(e===m.TriangleFanDrawMode||e===m.TriangleStripDrawMode){let t=i.getIndex();if(t===null){const l=[],u=i.getAttribute("position");if(u!==void 0){for(let c=0;c<u.count;c++)l.push(c);i.setIndex(l),t=i.getIndex()}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),i}const n=t.count-2,r=[];if(t)if(e===m.TriangleFanDrawMode)for(let l=1;l<=n;l++)r.push(t.getX(0)),r.push(t.getX(l)),r.push(t.getX(l+1));else for(let l=0;l<n;l++)l%2===0?(r.push(t.getX(l)),r.push(t.getX(l+1)),r.push(t.getX(l+2))):(r.push(t.getX(l+2)),r.push(t.getX(l+1)),r.push(t.getX(l)));r.length/3!==n&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const o=i.clone();return o.setIndex(r),o.clearGroups(),o}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",e),i}var Ft=Uint8Array,In=Uint16Array,ao=Uint32Array,wl=new Ft([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),_l=new Ft([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),kd=new Ft([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),bl=function(i,e){for(var t=new In(31),n=0;n<31;++n)t[n]=e+=1<<i[n-1];for(var r=new ao(t[30]),n=1;n<30;++n)for(var o=t[n];o<t[n+1];++o)r[o]=o-t[n]<<5|n;return[t,r]},xl=bl(wl,2),Ll=xl[0],Rd=xl[1];Ll[28]=258,Rd[258]=28;for(var Nd=bl(_l,0),Ud=Nd[0],lo=new In(32768),Ce=0;Ce<32768;++Ce){var Vn=(Ce&43690)>>>1|(Ce&21845)<<1;Vn=(Vn&52428)>>>2|(Vn&13107)<<2,Vn=(Vn&61680)>>>4|(Vn&3855)<<4,lo[Ce]=((Vn&65280)>>>8|(Vn&255)<<8)>>>1}for(var ni=function(i,e,t){for(var n=i.length,r=0,o=new In(e);r<n;++r)++o[i[r]-1];var l=new In(e);for(r=0;r<e;++r)l[r]=l[r-1]+o[r-1]<<1;var u;if(t){u=new In(1<<e);var c=15-e;for(r=0;r<n;++r)if(i[r])for(var d=r<<4|i[r],p=e-i[r],f=l[i[r]-1]++<<p,y=f|(1<<p)-1;f<=y;++f)u[lo[f]>>>c]=d}else for(u=new In(n),r=0;r<n;++r)i[r]&&(u[r]=lo[l[i[r]-1]++]>>>15-i[r]);return u},ri=new Ft(288),Ce=0;Ce<144;++Ce)ri[Ce]=8;for(var Ce=144;Ce<256;++Ce)ri[Ce]=9;for(var Ce=256;Ce<280;++Ce)ri[Ce]=7;for(var Ce=280;Ce<288;++Ce)ri[Ce]=8;for(var Ml=new Ft(32),Ce=0;Ce<32;++Ce)Ml[Ce]=5;var Yd=ni(ri,9,1),Bd=ni(Ml,5,1),co=function(i){for(var e=i[0],t=1;t<i.length;++t)i[t]>e&&(e=i[t]);return e},Qt=function(i,e,t){var n=e/8|0;return(i[n]|i[n+1]<<8)>>(e&7)&t},uo=function(i,e){var t=e/8|0;return(i[t]|i[t+1]<<8|i[t+2]<<16)>>(e&7)},jd=function(i){return(i/8|0)+(i&7&&1)},Jd=function(i,e,t){(t==null||t>i.length)&&(t=i.length);var n=new(i instanceof In?In:i instanceof ao?ao:Ft)(t-e);return n.set(i.subarray(e,t)),n},Qd=function(i,e,t){var n=i.length;if(!n||t&&!t.l&&n<5)return e||new Ft(0);var r=!e||t,o=!t||t.i;t||(t={}),e||(e=new Ft(n*3));var l=function(ut){var Je=e.length;if(ut>Je){var Ue=new Ft(Math.max(Je*2,ut));Ue.set(e),e=Ue}},u=t.f||0,c=t.p||0,d=t.b||0,p=t.l,f=t.d,y=t.m,v=t.n,_=n*8;do{if(!p){t.f=u=Qt(i,c,1);var S=Qt(i,c+1,3);if(c+=3,S)if(S==1)p=Yd,f=Bd,y=9,v=5;else if(S==2){var T=Qt(i,c,31)+257,W=Qt(i,c+10,15)+4,K=T+Qt(i,c+5,31)+1;c+=14;for(var O=new Ft(K),D=new Ft(19),V=0;V<W;++V)D[kd[V]]=Qt(i,c+V*3,7);c+=W*3;for(var R=co(D),C=(1<<R)-1,X=ni(D,R,1),V=0;V<K;){var Y=X[Qt(i,c,C)];c+=Y&15;var x=Y>>>4;if(x<16)O[V++]=x;else{var Q=0,j=0;for(x==16?(j=3+Qt(i,c,3),c+=2,Q=O[V-1]):x==17?(j=3+Qt(i,c,7),c+=3):x==18&&(j=11+Qt(i,c,127),c+=7);j--;)O[V++]=Q}}var H=O.subarray(0,T),J=O.subarray(T);y=co(H),v=co(J),p=ni(H,y,1),f=ni(J,v,1)}else throw"invalid block type";else{var x=jd(c)+4,P=i[x-4]|i[x-3]<<8,L=x+P;if(L>n){if(o)throw"unexpected EOF";break}r&&l(d+P),e.set(i.subarray(x,L),d),t.b=d+=P,t.p=c=L*8;continue}if(c>_){if(o)throw"unexpected EOF";break}}r&&l(d+131072);for(var ie=(1<<y)-1,re=(1<<v)-1,le=c;;le=c){var Q=p[uo(i,c)&ie],de=Q>>>4;if(c+=Q&15,c>_){if(o)throw"unexpected EOF";break}if(!Q)throw"invalid length/literal";if(de<256)e[d++]=de;else if(de==256){le=c,p=null;break}else{var ge=de-254;if(de>264){var V=de-257,fe=wl[V];ge=Qt(i,c,(1<<fe)-1)+Ll[V],c+=fe}var Me=f[uo(i,c)&re],nt=Me>>>4;if(!Me)throw"invalid distance";c+=Me&15;var J=Ud[nt];if(nt>3){var fe=_l[nt];J+=uo(i,c)&(1<<fe)-1,c+=fe}if(c>_){if(o)throw"unexpected EOF";break}r&&l(d+131072);for(var rt=d+ge;d<rt;d+=4)e[d]=e[d-J],e[d+1]=e[d+1-J],e[d+2]=e[d+2-J],e[d+3]=e[d+3-J];d=rt}}t.l=p,t.p=le,t.b=d,p&&(u=1,t.m=y,t.d=f,t.n=v)}while(!u);return d==e.length?e:Jd(e,0,d)},Hd=new Ft(0),Ed=function(i){if((i[0]&15)!=8||i[0]>>>4>7||(i[0]<<8|i[1])%31)throw"invalid zlib data";if(i[1]&32)throw"invalid zlib data: preset dictionaries not supported"};function $d(i,e){return Qd((Ed(i),i.subarray(2,-4)),e)}var qd=typeof TextDecoder<"u"&&new TextDecoder,ef=0;try{qd.decode(Hd,{stream:!0}),ef=1}catch{}class tf extends m.Mesh{constructor(e,t={}){super(e),this.isWater=!0;const n=this,r=t.textureWidth!==void 0?t.textureWidth:512,o=t.textureHeight!==void 0?t.textureHeight:512,l=t.clipBias!==void 0?t.clipBias:0,u=t.alpha!==void 0?t.alpha:1,c=t.time!==void 0?t.time:0,d=t.waterNormals!==void 0?t.waterNormals:null,p=t.sunDirection!==void 0?t.sunDirection:new m.Vector3(.70707,.70707,0),f=new m.Color(t.sunColor!==void 0?t.sunColor:16777215),y=new m.Color(t.waterColor!==void 0?t.waterColor:8355711),v=t.eye!==void 0?t.eye:new m.Vector3(0,0,0),_=t.distortionScale!==void 0?t.distortionScale:20,S=t.side!==void 0?t.side:m.FrontSide,x=t.fog!==void 0?t.fog:!1,P=new m.Plane,L=new m.Vector3,T=new m.Vector3,W=new m.Vector3,K=new m.Matrix4,O=new m.Vector3(0,0,-1),D=new m.Vector4,V=new m.Vector3,R=new m.Vector3,C=new m.Vector4,X=new m.Matrix4,Y=new m.PerspectiveCamera,Q=new m.WebGLRenderTarget(r,o),j={uniforms:m.UniformsUtils.merge([m.UniformsLib.fog,m.UniformsLib.lights,{normalSampler:{value:null},mirrorSampler:{value:null},alpha:{value:1},time:{value:0},size:{value:1},distortionScale:{value:20},textureMatrix:{value:new m.Matrix4},sunColor:{value:new m.Color(8355711)},sunDirection:{value:new m.Vector3(.70707,.70707,0)},eye:{value:new m.Vector3},waterColor:{value:new m.Color(5592405)}}]),vertexShader:`
2
2
  uniform mat4 textureMatrix;
3
3
  uniform float time;
4
4
 
@@ -685,7 +685,7 @@ function print() { __p += __j.call(arguments, '') }
685
685
  }
686
686
  `)}setDiffusionFromObject(e){if(!this.shaderOption.effects?.diffusion)return;const t=new lt.Box3().setFromObject(e);if(t.isEmpty())return;const n=new lt.Vector3;t.getCenter(n);const r=[new lt.Vector3(t.min.x,t.min.y,t.min.z),new lt.Vector3(t.max.x,t.max.y,t.max.z)];let o=0;r.forEach(l=>{const u=n.distanceTo(l);u>o&&(o=u)}),this.shaderOption.effects.diffusion={...this.shaderOption.effects.diffusion,center:n,maxDistance:o},this.needsUpdate=!0}updateBoundingBox(e,t){this.shaderOption.minY=e,this.shaderOption.maxY=t,this.needsUpdate=!0}updateEffects(e){this.shaderOption.effects={...this.shaderOption.effects,...e},this.needsUpdate=!0}animate(){requestAnimationFrame(()=>this.animate()),this.time.value=this.clock.getElapsedTime(),this.startTime.value<1&&(this.startTime.value+=.01)}}var ng=Object.defineProperty,rg=(i,e,t)=>e in i?ng(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Ht=(i,e,t)=>rg(i,typeof e!="symbol"?e+"":e,t);const ig={emissive:!1,emissiveIntensity:1,emissiveColor:"#ffffff"};class Gc extends pi{constructor(e){super(e),Ht(this,"_type","Model"),Ht(this,"_emissive",!1),Ht(this,"_emissiveIntensity",1),Ht(this,"_emissiveColor","#ffffff"),Ht(this,"_mixer",null),Ht(this,"_currentAction",null),Ht(this,"_animations",[]),Ht(this,"_clock",new m.Clock),Ht(this,"_autoUpdate",!0),Ht(this,"_animationRequestId",null),Ht(this,"_iscity",!1),this._emissive=e.emissive||!1,this._emissiveIntensity=e.emissiveIntensity||1,this._emissiveColor=e.emissiveColor||"#ffffff",this.castShadow=e.castShadow||!1,this.receiveShadow=e.receiveShadow||!1,this._iscity=e.iscity||!1}async _toThreeJSGeometry(){this._position=this._coordsTransform(),this._style&&(this._threeGeometry&&this._disposeGeometry(),this.modelunino=await this._createObject(this._style),this._threeGeometry=this.modelunino.model,this._threeGeometry.userData._type="Model",this.modelunino.animations&&this.modelunino.animations.length>0&&(this._animations=this.modelunino.animations,this._mixer=new m.AnimationMixer(this._threeGeometry),this._startAnimationLoop(),this.playAnimation({name:this._animations[0].name,loop:!0,speed:1.5,fadeInDuration:.5,fadeOutDuration:.3})),this._updateGeometry(),this.setShadows({cast:this.castShadow,receive:this.receiveShadow}),this._applyEmissionProperties(),this._iscity&&this._rendercity())}async _createObject(e){switch(e.config.type){case"fbx":case"gltf":return wm(e.config,this._position);default:throw new Error(`不支持的样式类型: ${e.config.type}`)}}_applyEmissionProperties(){this._threeGeometry&&this._threeGeometry.traverse(e=>{if("material"in e){const t=e.material;t&&(t.emissiveIntensity=this._emissive?this._emissiveIntensity:0,t.emissive&&t.emissive.setStyle(this._emissiveColor))}})}get emissive(){return this._emissive}set emissive(e){this._emissive=e,this._applyEmissionProperties()}get emissiveIntensity(){return this._emissiveIntensity}set emissiveIntensity(e){this._emissiveIntensity=e,this._applyEmissionProperties()}get emissiveColor(){return this._emissiveColor}set emissiveColor(e){this._emissiveColor=e,this._applyEmissionProperties()}setEmission(e,t,n){this._emissive=e,t!==void 0&&(this._emissiveIntensity=t),n!==void 0&&(this._emissiveColor=n),this._applyEmissionProperties()}async setShadows(e){this.castShadow=e.cast,this.receiveShadow=e.receive,this._threeGeometry&&this._threeGeometry.traverse(t=>{t.isMesh&&t.material&&(t.castShadow=e.cast,t.receiveShadow=e.receive)})}playAnimation(e){if(!this._mixer||this._animations.length===0){console.warn("模型没有可用的动画");return}this._currentAction&&(e.fadeOutDuration&&e.fadeOutDuration>0?this._currentAction.fadeOut(e.fadeOutDuration):this._currentAction.stop());const t=typeof e.name=="number"?this._animations[e.name]:this._animations.find(n=>n.name===e.name);if(!t){console.warn(`找不到动画: ${e.name}`);return}this._currentAction=this._mixer.clipAction(t),this._currentAction.setLoop(e.loop?m.LoopRepeat:m.LoopOnce,e.loop?1/0:1),this._currentAction.timeScale=e.speed||1,this._currentAction.time=e.startAt||0,this._currentAction.setEffectiveWeight(e.weight||1),e.fadeInDuration&&e.fadeInDuration>0&&this._currentAction.fadeIn(e.fadeInDuration),this._currentAction.play(),this._autoUpdate&&this._animationRequestId===null&&this._startAnimationLoop()}stopAnimation(e={}){this._currentAction&&(e.fadeDuration&&e.fadeDuration>0?(this._currentAction.fadeOut(e.fadeDuration),setTimeout(()=>{this._currentAction&&(this._currentAction.stop(),this._currentAction=null)},e.fadeDuration*1e3)):(this._currentAction.stop(),this._currentAction=null))}setAnimationPaused(e){this._currentAction&&(this._currentAction.paused=e.paused)}setAnimationSpeed(e){this._currentAction&&(this._currentAction.timeScale=e.speed)}updateAnimation(e){this._mixer&&this._mixer.update(e.deltaTime)}getAnimationNames(){return this._animations.map(e=>e.name)}getCurrentAnimationName(){return this._currentAction?this._currentAction.getClip().name:null}getAnimationDuration(e){let t;return typeof e.name=="number"?t=this._animations[e.name]:t=this._animations.find(n=>n.name===e.name),t?t.duration:null}dispose(){this._stopAnimationLoop(),this._mixer&&(this._mixer.stopAllAction(),this._mixer.uncacheRoot(this._threeGeometry)),super.dispose()}_startAnimationLoop(){if(!this._autoUpdate||this._animationRequestId!==null)return;const e=()=>{if(this._mixer){const t=this._clock.getDelta();this._mixer.update(t)}this._animationRequestId=requestAnimationFrame(e)};this._clock.start(),this._animationRequestId=requestAnimationFrame(e)}_stopAnimationLoop(){this._animationRequestId!==null&&(cancelAnimationFrame(this._animationRequestId),this._animationRequestId=null),this._clock.stop()}setAutoUpdate(e){this._autoUpdate=e,e?this._startAnimationLoop():this._stopAnimationLoop()}_computeOverlayVertices(e){const t=e.feature;if(t&&Array.isArray(t._vertexPoints)&&t._vertexPoints.length>=6){const c=t.getMap?.()||this.getMap();if(c&&c.prjcenter){const d=c.prjcenter,p=t._vertexPoints,f=[];for(let y=0;y+2<p.length;y+=3){const v=p[y],_=p[y+2],S=d.x+v,x=d.z+_;f.push(new m.Vector2(S,x))}if(f.length>=3)return f}}const n=this.getMap();if(!n||!e.geometry)return null;const r=e.geometry;let o;if(r.type==="Polygon")o=r.coordinates;else if(r.type==="MultiPolygon"){if(!r.coordinates.length)return null;o=r.coordinates[0]}else return null;if(!o.length||!o[0].length)return null;const l=o[0],u=[];for(const c of l){const d=c[0],p=c[1],f=n.geo2world(new m.Vector3(d,p,0));u.push(new m.Vector2(f.x,f.z))}return u.length<3?null:u}_rendercity(){const e=this.getLayer();let t=null;if(e&&e.getRegionOverlays){const n=e.getRegionOverlays()||[];if(n.length){const r=n.filter(l=>(l.mode??"overlay")==="overlay").sort((l,u)=>(l.zIndex??0)-(u.zIndex??0)),o=r[r.length-1];if(o&&(o.geometry||o.feature)){const l=this._computeOverlayVertices(o);l&&l.length>=3&&(t={color:new m.Color(o.color??"#00FF88"),opacity:o.opacity??.3,vertices:l})}}}this.traverse(async n=>{if(n instanceof m.Mesh&&n.material){if(n.castShadow=!0,n.name==="building"){const r=new tg({color:new m.Color("#6BA7EC").multiplyScalar(1.8),opacity:.9,shaderOption:{minY:0,maxY:50,minRate:.3,maxRate:1.5,effects:{diffusion:{enabled:!0,color:new m.Color("#FFFFF"),width:300,speed:.05},flow:{enabled:!1,color:new m.Color("#FFFFF"),range:1e3,speed:3e3},sweep:{enabled:!0,color:new m.Color("#ffffff"),width:3,speed:5}}},regionOverlay:t||void 0}),o=new m.Box3().setFromObject(n);r.updateBoundingBox(o.min.y,o.max.y),r.setDiffusionFromObject(n),n.receiveShadow=!1,n.material=r,n.material.needsUpdate=!0}n.name==="grass"&&(n.castShadow=!1,n.receiveShadow=!0,n.material.color=new m.Color("#81e4d8ff)").multiplyScalar(.7),n.material.metalness=.2,n.material.roughness=.8,["metalnessMap","normalMap","roughnessMap","specularColorMap"].forEach(r=>{const o=n.material[r];o&&(o.wrapS=o.wrapT=m.RepeatWrapping,o.repeat.set(.3,.3),o.needsUpdate=!0)}),n.material.normalScale=new m.Vector2(3,3))}})}}Gc.mergeOptions(ig);var sg=Object.defineProperty,og=(i,e,t)=>e in i?sg(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,ag=(i,e,t)=>og(i,e+"",t);const lg={};class Wc extends pi{constructor(e){super(e),ag(this,"_type","Cloud")}async _toThreeJSGeometry(){this._position=this._coordsTransform(),this._style&&(this._threeGeometry&&this._disposeGeometry(),this._threeGeometry=await this._createObject(this._style),this._updateGeometry())}_updateGeometry(){this._disposeGeometry();const e=this.getLayer();this._threeGeometry&&(this._threeGeometry.position.copy(this._position),this._threeGeometry.renderOrder=99,e&&(e._clouds.add(this._threeGeometry),e._clouds.updateMatrixWorld()))}async _createObject(e){switch(e.config.type){case"cloud":return Mm(e.config,this._position);default:throw new Error(`不支持的样式类型: ${e.config.type}`)}}}Wc.mergeOptions(lg);var cg=Object.defineProperty,ug=(i,e,t)=>e in i?cg(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,hg=(i,e,t)=>ug(i,e+"",t);const dg={};class Cc extends pi{constructor(e){super(e),hg(this,"_type","Label")}async _toThreeJSGeometry(){this._position=this._coordsTransform(),this._style&&(this._threeGeometry&&this._disposeGeometry(),this._threeGeometry=await this._createObject(this._style),this._updateGeometry())}async _createObject(e){switch(e.config.type){case"canvas-label-fixed":return Pm(e.config,new m.Vector3(0,0,0),this.getMap());case"canvas-label":return Sm(e.config,new m.Vector3(0,0,0));default:throw new Error(`不支持的样式类型: ${e.config.type}`)}}}Cc.mergeOptions(dg);var fg=Object.defineProperty,pg=(i,e,t)=>e in i?fg(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Ic=(i,e,t)=>pg(i,typeof e!="symbol"?e+"":e,t);const mg={};class Vc extends pi{constructor(e){super(e),Ic(this,"_type","TPoints"),Ic(this,"_geometries"),this._geometries=e.geometries}async _toThreeJSGeometry(){this._position=this._coordsTransform(),this._style&&(this._threeGeometry&&this._disposeGeometry(),this._threeGeometry=await this._createObject(this._style),this._updateGeometry())}_updateGeometry(){this._threeGeometry&&(this._threeGeometry.points&&this.add(this._threeGeometry.points),this._threeGeometry.InstancedCol&&this.add(this._threeGeometry.InstancedCol),this.updateMatrixWorld(!0))}async _createObject(e){switch(e.config.type){case"light":return Fm(e.config,this._geometries,this.getMap());default:throw new Error(`不支持的样式类型: ${e.config.type}`)}}}Vc.mergeOptions(mg);function ss(i,e){if(!i||i===!0)return!0;if(!Array.isArray(i))return!!i;switch(i[0]){case"all":return i.slice(1).every(n=>ss(n,e));case"any":return i.slice(1).some(n=>ss(n,e));case"!":return!ss(i[1],e);case"==":{const n=ct(i[1],e),r=ct(i[2],e);return os(n)==os(r)}case"!=":{const n=ct(i[1],e),r=ct(i[2],e);return os(n)!=os(r)}case">":{const n=ct(i[1],e),r=ct(i[2],e);return Kn(n)>Kn(r)}case"<":{const n=ct(i[1],e),r=ct(i[2],e);return Kn(n)<Kn(r)}case">=":{const n=ct(i[1],e),r=ct(i[2],e);return Kn(n)>=Kn(r)}case"<=":{const n=ct(i[1],e),r=ct(i[2],e);return Kn(n)<=Kn(r)}case"in":{const n=ct(i[1],e);return i.slice(2).map(o=>ct(o,e)).includes(n)}case"!in":{const n=ct(i[1],e);return!i.slice(2).map(o=>ct(o,e)).includes(n)}case"has":{const n=i[1];return e!=null&&Object.prototype.hasOwnProperty.call(e,n)}case"!has":{const n=i[1];return!(e!=null&&Object.prototype.hasOwnProperty.call(e,n))}default:return!0}}function ct(i,e){if(Array.isArray(i))switch(i[0]){case"get":return e?e[i[1]]:void 0;default:return i}return i}function os(i){if(i==null)return null;if(typeof i=="string"){const e=Number(i);if(!isNaN(e)&&i.trim()!=="")return e}return typeof i=="boolean"?i?1:0:i}function Kn(i){if(i==null)return 0;if(typeof i=="number")return i;if(typeof i=="boolean")return i?1:0;if(typeof i=="string"){const e=Number(i);return isNaN(e)?0:e}return Number(i)}var gg=Object.defineProperty,yg=(i,e,t)=>e in i?gg(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,gi=(i,e,t)=>yg(i,typeof e!="symbol"?e+"":e,t);class Ro extends zn{constructor(e,t){super(e,t),gi(this,"TILE_SIZE"),gi(this,"EXTENT"),gi(this,"style"),gi(this,"_tileFeatureMap",new Map),gi(this,"_activeFeatureFilter"),this.TILE_SIZE=t.tileSize??256,this.EXTENT=t.extent??4096,this.style=t.style||[],this._onMapUpdate=this._onMapUpdate.bind(this)}processTileData(e,t){const n=this.getMap(),r=`${e.z}-${e.x}-${e.y}`,o=this._tileFeatureMap.get(r);if(o&&o.length>0){o.forEach(d=>{d.visible=!0,this.children.some(p=>p&&d&&p.uuid===d.uuid)||d.addTo(this)});return}const l=t.vectorData;if(!l||!l.layers||!n||this.style.length===0)return;const u=[],c=this.style;Object.keys(l.layers).forEach(d=>{const p=l.layers[d];for(let f=0;f<p.length;f++){const y=p[f],v=y.geometry;if(this._activeFeatureFilter&&!this._activeFeatureFilter(y.properties))continue;let _=null;for(const S of c)if(this._evaluateFilter(S.filter,y.properties,d,y.geometry.type)){_=S.style;break}if(_){const S={isVectorTile:!0,tileZ:e.z,tileX:e.x,tileY:e.y,rawCoordinates:v,extent:this.EXTENT,tileSize:this.TILE_SIZE},x=this._createFeatureInstance(y.geometry,y.geometry.type,_,y.properties);x&&(x.userData.tileData=S,x.style=Ot.create(_),x.addTo(this),x.initializeGeometry(),u.push(x))}}}),this._tileFeatureMap.set(r,u)}_evaluateFilter(e,t,n,r){if(!e||e===!0)return!0;const o={...t,$layer:n,$type:r};return ss(e,o)}hideFeaturesByTileKey(e){const t=this._tileFeatureMap.get(e);t&&t.forEach(n=>{n.visible=!1})}removeFeaturesByTileKey(e){this._removeFeaturesByTileKey(e)}_removeFeaturesByTileKey(e){const t=this._tileFeatureMap.get(e);t&&(t.forEach(n=>{n._remove()}),this._tileFeatureMap.delete(e))}_createFeatureInstance(e,t,n,r){const l={geometry:{ismvt:!0,...e},style:n,userData:r};switch(t){case"Point":return new bn(l);case"LineString":return new lr(l);default:return null}}setFeatureFilter(e){this._activeFeatureFilter=e}clearFeatureFilter(){this._activeFeatureFilter=void 0}setOpacity(e){this.opacity=e,this._tileFeatureMap.forEach(t=>{t.forEach(n=>{n.material&&(n.material.opacity=e,n.material.transparent=e<1)})})}_onMapUpdate(){}validateFeature(e){return e instanceof _n}dispose(){this._tileFeatureMap.forEach((e,t)=>{this._removeFeaturesByTileKey(t)}),super.dispose()}}var vg=Object.defineProperty,wg=(i,e,t)=>e in i?vg(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,_t=(i,e,t)=>wg(i,typeof e!="symbol"?e+"":e,t);class Ac extends qi{constructor(e,t){super(e,t),this.layerId=e,_t(this,"isTileLayer",!0),_t(this,"layerType","base"),_t(this,"isBaseLayer",!1),_t(this,"_enabled",!0),_t(this,"_visible",!0),_t(this,"_rootTile"),_t(this,"_loader"),_t(this,"_LODThreshold",1),_t(this,"isSceneLayer",!1),_t(this,"opacity",1),_t(this,"source"),_t(this,"projection"),_t(this,"minLevel",2),_t(this,"maxLevel",19),this.source=t.source,this.projection=t.projection,this.minLevel=t.minLevel??2,this.maxLevel=t.maxLevel??19,this._LODThreshold=t.LODThreshold??1,this.opacity=t.opacity??1,this.name=`Layer-${e}`,this._loader=this.createLoader(),this._rootTile=new Xn,this._rootTile.matrixAutoUpdate=!0,this._rootTile.scale.set(this.projection.mapWidth,this.projection.mapHeight,1),this.add(this._rootTile),this._rootTile.updateMatrix(),this.layerId=e,this.name==="Layer-label-layer"&&this.position.set(0,0,1)}get LODThreshold(){return this._LODThreshold}set LODThreshold(e){this._LODThreshold=e}get loader(){return this._loader}get enabled(){return this._enabled}set enabled(e){this._enabled=e,this._rootTile&&(this._rootTile.visible=e&&this._visible)}get ivisible(){return this._visible&&super._visible}set ivisible(e){this._visible=e,this._rootTile&&(this._rootTile.visible=e&&this._enabled)}update(e){if(!(!this._enabled||!this._visible)){try{this._rootTile.update({camera:e,loader:this._loader,minLevel:this.minLevel,maxLevel:this.maxLevel,LODThreshold:this.LODThreshold})}catch{}console.groupEnd()}}_debugTileTree(){this._rootTile.traverse(e=>{e.isTile&&(e.loaded,e.visible,e.inFrustum,e.loaded)})}_getLODThreshold(){return 1}_getCurrentTileLevel(){let e=0;return this._rootTile.traverse(t=>{t.isTile&&t.loaded&&(e=Math.max(e,t.z))}),`最大层级: ${e}`}dispose(){this.remove(this._rootTile),this._rootTile.reload(this._loader)}reload(){this._rootTile.reload(this._loader)}setElevation(e){this.position.y=e,this.updateMatrix(),this.updateMatrixWorld(!0)}raiseElevation(e){this.position.z+=e,this.updateMatrix(),this.updateMatrixWorld(!0)}getElevation(){return this.position.y}}var _g=Object.defineProperty,bg=(i,e,t)=>e in i?_g(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,xg=(i,e,t)=>bg(i,e+"",t);class Fc extends m.LoadingManager{constructor(){super(...arguments),xg(this,"onParseEnd")}parseEnd(e){this.onParseEnd&&this.onParseEnd(e)}}const Fe={manager:new Fc,demLoaderMap:new Map,meshLoaderMap:new Map,imgLoaderMap:new Map,registerMaterialLoader(i){Fe.imgLoaderMap.set(i.dataType,i),i.info.author=i.info.author??so.name},registerGeometryLoader(i){Fe.demLoaderMap.set(i.dataType,i),i.info.author=i.info.author??so.name},registerMeshLoader(i){Fe.meshLoaderMap.set(i.dataType,i),i.info.author=i.info.author??so.name},getMaterialLoader(i){const e=Fe.imgLoaderMap.get(i.dataType);if(e)return e;throw`Source dataType "${i.dataType}" is not support!`},getGeometryLoader(i){const e=Fe.demLoaderMap.get(i.dataType);if(e)return e;throw`Source dataType "${i.dataType}" is not support!`},getMeshLoader(i){const e=Fe.meshLoaderMap.get(i.dataType);if(e)return e;throw`Source dataType "${i.dataType}" is not support!`}};var Lg=Object.defineProperty,Mg=(i,e,t)=>e in i?Lg(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Sg=(i,e,t)=>Mg(i,e+"",t);class Pg{constructor(e){Sg(this,"worker"),this.worker=e()}async run(e,t){return new Promise(n=>{this.worker.onmessage=r=>{n(r.data)},this.worker.postMessage(e,t)})}terminate(){this.worker.terminate()}}const Tg=4096,Xc=Math.PI;function No(i,e){const t=Math.floor(i[0]*e),n=Math.floor(i[1]*e),r=Math.floor((i[2]-i[0])*e),o=Math.floor((i[3]-i[1])*e);return{sx:t,sy:n,sw:r,sh:o}}function Uo(i,e,t,n){if(n<i.minLevel)return{url:void 0,clipBounds:[0,0,1,1]};if(n<=i.maxLevel)return{url:i._getUrl(e,t,n),clipBounds:[0,0,1,1]};const r=Zg(e,t,n,i.maxLevel),o=r.parentNO;return{url:i._getUrl(o.x,o.y,o.z),clipBounds:r.bounds}}function Zg(i,e,t,n){const r=t-n,o={x:i>>r,y:e>>r,z:t-r},l=Math.pow(2,r),u=Math.pow(.5,r),c=i%l/l-.5+u/2,d=e%l/l-.5+u/2,p=new m.Vector2(c,d),f=new m.Box2().setFromCenterAndSize(p,new m.Vector2(u,u)),y=[f.min.x+.5,f.min.y+.5,f.max.x+.5,f.max.y+.5];return{parentNO:o,bounds:y}}function Yo(i,e,t,n,r=Tg){const{x:o,y:l}=i,u=(e+o/r)/Math.pow(2,n),c=(t+l/r)/Math.pow(2,n),d=u*360-180,f=Math.atan(Math.sinh(Xc*(1-2*c)))*180/Xc;return[parseFloat(d.toFixed(8)),parseFloat(f.toFixed(8))]}function Gg(i,e,t,n){if(!i||!i.coordinates)throw new Error("无效的geometry数据格式");const r={type:i.type,coordinates:null};function o(l){if(typeof l=="object"&&l.x!==void 0&&l.y!==void 0)return Yo(l,e,t,n);if(Array.isArray(l)&&l.length>0){const u=l[0];return typeof u=="object"&&u.x!==void 0&&u.y!==void 0?l.map(c=>Yo(c,e,t,n)):l.map(c=>o(c))}return l}return r.coordinates=o(i.coordinates),r}var Wg=Object.defineProperty,Cg=(i,e,t)=>e in i?Wg(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,as=(i,e,t)=>Cg(i,typeof e!="symbol"?e+"":e,t);class ls{constructor(){as(this,"_imgSource",[]),as(this,"_demSource"),as(this,"_vtSource"),as(this,"manager",Fe.manager)}get imgSource(){return this._imgSource}set imgSource(e){this._imgSource=e}get demSource(){return this._demSource}set demSource(e){this._demSource=e}get vtSource(){return this._vtSource}set vtSource(e){this._vtSource=e}async load(e){const t=await this.loadGeometry(e),n=await this.loadMaterial(e);console.assert(!!n&&!!t);for(let r=0;r<n.length;r++)t.addGroup(0,1/0,r);return{materials:n,geometry:t}}unload(e){const t=e.material,n=e.geometry;for(let r=0;r<t.length;r++)t[r].dispose();n.dispose()}async loadGeometry(e){let t;if(this.demSource&&e.z>=this.demSource.minLevel&&this._isBoundsInSourceBounds(this.demSource,e.bounds)){const n=Fe.getGeometryLoader(this.demSource),r=this.demSource;t=await n.load({source:r,...e}).catch(o=>(console.error("Load material error",r.dataType,e.x,e.y,e.z),new m.PlaneGeometry)),t.addEventListener("dispose",()=>{n.unload&&n.unload(t)})}else if(this.vtSource&&e.z>=this.vtSource.minLevel&&this._isBoundsInSourceBounds(this.vtSource,e.bounds)){const n=Fe.getMeshLoader(this.vtSource),r=this.vtSource;t=await n.load({source:r,...e}).catch(o=>(console.error("Load geometry error",r.dataType,e.x,e.y,e.z),new m.PlaneGeometry)),t.addEventListener("dispose",()=>{n.unload&&n.unload(t)})}else t=new m.PlaneGeometry;return t}async loadMaterial(e){const n=this.imgSource.filter(r=>e.z>=r.minLevel&&this._isBoundsInSourceBounds(r,e.bounds)).map(async r=>{const o=Fe.getMaterialLoader(r),l=await o.load({source:r,...e}).catch(c=>(console.error("Load material error",r.dataType,e.x,e.y,e.z),new m.MeshBasicMaterial)),u=c=>{o.unload&&o.unload(c.target),c.target.removeEventListener("dispose",u)};return l instanceof m.MeshBasicMaterial||l.addEventListener("dispose",u),l});return Promise.all(n)}_isBoundsInSourceBounds(e,t){const n=e._projectionBounds;return!(t[2]<n[0]||t[3]<n[1]||t[0]>n[2]||t[1]>n[3])}}function yi(...i){const e=i,t=e&&e.length>1&&e[0].constructor||null;if(!t)throw new Error("concatenateTypedArrays - incorrect quantity of arguments or arguments have incompatible data types");const n=e.reduce((l,u)=>l+u.length,0),r=new t(n);let o=0;for(const l of e)r.set(l,o),o+=l.length;return r}function Oc(i,e,t,n){const r=n?Vg(n,i.position.value):Ig(e),o=r.length,l=new Float32Array(o*6),u=new Float32Array(o*4),c=new e.constructor(o*6),d=new Float32Array(o*6);for(let f=0;f<o;f++)Ag({edge:r[f],edgeIndex:f,attributes:i,skirtHeight:t,newPosition:l,newTexcoord0:u,newTriangles:c,newNormals:d});i.position.value=yi(i.position.value,l),i.texcoord.value=yi(i.texcoord.value,u),i.normal.value=yi(i.normal.value,d);const p=yi(e,c);return{attributes:i,indices:p}}function Ig(i){const e=[],t=Array.isArray(i)?i:Array.from(i);for(let r=0;r<t.length;r+=3){const o=t[r],l=t[r+1],u=t[r+2];e.push([o,l],[l,u],[u,o])}e.sort(([r,o],[l,u])=>{const c=Math.min(r,o),d=Math.min(l,u);return c!==d?c-d:Math.max(r,o)-Math.max(l,u)});const n=[];for(let r=0;r<e.length;r++)r+1<e.length&&e[r][0]===e[r+1][1]&&e[r][1]===e[r+1][0]?r++:n.push(e[r]);return n}function Vg(i,e){const t=(r,o)=>{r.sort(o)};t(i.westIndices,(r,o)=>e[3*r+1]-e[3*o+1]),t(i.eastIndices,(r,o)=>e[3*o+1]-e[3*r+1]),t(i.southIndices,(r,o)=>e[3*o]-e[3*r]),t(i.northIndices,(r,o)=>e[3*r]-e[3*o]);const n=[];return Object.values(i).forEach(r=>{if(r.length>1)for(let o=0;o<r.length-1;o++)n.push([r[o],r[o+1]])}),n}function Ag({edge:i,edgeIndex:e,attributes:t,skirtHeight:n,newPosition:r,newTexcoord0:o,newTriangles:l,newNormals:u}){const c=t.position.value.length,d=e*2,p=d+1;r.set(t.position.value.subarray(i[0]*3,i[0]*3+3),d*3),r[d*3+2]=r[d*3+2]-n,r.set(t.position.value.subarray(i[1]*3,i[1]*3+3),p*3),r[p*3+2]=r[p*3+2]-n,o.set(t.texcoord.value.subarray(i[0]*2,i[0]*2+2),d*2),o.set(t.texcoord.value.subarray(i[1]*2,i[1]*2+2),p*2);const f=e*2*3;l[f]=i[0],l[f+1]=c/3+p,l[f+2]=i[1],l[f+3]=c/3+p,l[f+4]=i[0],l[f+5]=c/3+d,u[f]=0,u[f+1]=0,u[f+2]=1,u[f+3]=0,u[f+4]=0,u[f+5]=1}function zc(i){if(i.length<4)throw new Error(`DEM数组长度必须大于4,当前长度: ${i.length}!`);const e=Math.floor(Math.sqrt(i.length)),t=e,n=e,r=Bo(n,t);return{attributes:Fg(i,n,t),indices:r}}function Fg(i,e,t){const n=t*e,r=new Float32Array(n*3),o=new Float32Array(n*2);let l=0;for(let u=0;u<e;u++)for(let c=0;c<t;c++){const d=c/(t-1),p=u/(e-1);o[l*2]=d,o[l*2+1]=p,r[l*3]=d-.5,r[l*3+1]=p-.5,r[l*3+2]=i[(e-u-1)*t+c],l++}return{position:{value:r,size:3},texcoord:{value:o,size:2},normal:{value:jo(r,Bo(e,t)),size:3}}}function Bo(i,e){const t=6*(e-1)*(i-1),n=new Uint16Array(t);let r=0;for(let o=0;o<i-1;o++)for(let l=0;l<e-1;l++){const u=o*e+l,c=u+1,d=u+e,p=d+1,f=r*6;n[f]=u,n[f+1]=c,n[f+2]=d,n[f+3]=d,n[f+4]=c,n[f+5]=p,r++}return n}function jo(i,e){const t=new Float32Array(i.length);for(let n=0;n<e.length;n+=3){const r=e[n]*3,o=e[n+1]*3,l=e[n+2]*3,u=i[r],c=i[r+1],d=i[r+2],p=i[o],f=i[o+1],y=i[o+2],v=i[l],_=i[l+1],S=i[l+2],x=p-u,P=f-c,L=y-d,T=v-u,W=_-c,K=S-d,O=P*K-L*W,D=L*T-x*K,V=x*W-P*T,R=Math.sqrt(O*O+D*D+V*V),C=[0,0,1];if(R>0){const X=1/R;C[0]=O*X,C[1]=D*X,C[2]=V*X}for(let X=0;X<3;X++)t[r+X]=t[o+X]=t[l+X]=C[X]}return t}var Xg=Object.defineProperty,Og=(i,e,t)=>e in i?Xg(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,zg=(i,e,t)=>Og(i,e+"",t);class Vr extends m.PlaneGeometry{constructor(){super(...arguments),zg(this,"type","TileGeometry")}setData(e,t=1e3){let n=e instanceof Float32Array?zc(e):e;n=Oc(n.attributes,n.indices,t);const{attributes:r,indices:o}=n;return this.setIndex(new m.BufferAttribute(o,1)),this.setAttribute("position",new m.BufferAttribute(r.position.value,r.position.size)),this.setAttribute("uv",new m.BufferAttribute(r.texcoord.value,r.texcoord.size)),this.setAttribute("normal",new m.BufferAttribute(r.normal.value,r.normal.size)),this.computeBoundingBox(),this.computeBoundingSphere(),this}}var Dg=Object.defineProperty,Kg=(i,e,t)=>e in i?Dg(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,kn=(i,e,t)=>Kg(i,typeof e!="symbol"?e+"":e,t);class Dc{constructor(e=257){kn(this,"gridSize"),kn(this,"numTriangles"),kn(this,"numParentTriangles"),kn(this,"indices"),kn(this,"coords"),this.gridSize=e;const t=e-1;if(t&t-1)throw new Error(`Expected grid size to be 2^n+1, got ${e}.`);this.numTriangles=t*t*2-2,this.numParentTriangles=this.numTriangles-t*t,this.indices=new Uint32Array(this.gridSize*this.gridSize),this.coords=new Uint16Array(this.numTriangles*4);for(let n=0;n<this.numTriangles;n++){let r=n+2,o=0,l=0,u=0,c=0,d=0,p=0;for(r&1?u=c=d=t:o=l=p=t;(r>>=1)>1;){const y=o+u>>1,v=l+c>>1;r&1?(u=o,c=l,o=d,l=p):(o=u,l=c,u=d,c=p),d=y,p=v}const f=n*4;this.coords[f+0]=o,this.coords[f+1]=l,this.coords[f+2]=u,this.coords[f+3]=c}}createTile(e){return new kg(e,this)}}class kg{constructor(e,t){kn(this,"martini"),kn(this,"terrain"),kn(this,"errors");const n=t.gridSize;if(e.length!==n*n)throw new Error(`Expected terrain data of length ${n*n} (${n} x ${n}), got ${e.length}.`);this.terrain=e,this.martini=t,this.errors=new Float32Array(e.length),this.update()}update(){const{numTriangles:e,numParentTriangles:t,coords:n,gridSize:r}=this.martini,{terrain:o,errors:l}=this;for(let u=e-1;u>=0;u--){const c=u*4,d=n[c+0],p=n[c+1],f=n[c+2],y=n[c+3],v=d+f>>1,_=p+y>>1,S=v+_-p,x=_+d-v,P=(o[p*r+d]+o[y*r+f])/2,L=_*r+v,T=Math.abs(P-o[L]);if(l[L]=Math.max(l[L],T),u<t){const W=(p+x>>1)*r+(d+S>>1),K=(y+x>>1)*r+(f+S>>1);l[L]=Math.max(l[L],l[W],l[K])}}}getGeometryData(e=0){const{gridSize:t,indices:n}=this.martini,{errors:r}=this;let o=0,l=0;const u=t-1;let c,d,p=0;n.fill(0);function f(L,T,W,K,O,D){const V=L+W>>1,R=T+K>>1;Math.abs(L-O)+Math.abs(T-D)>1&&r[R*t+V]>e?(f(O,D,L,T,V,R),f(W,K,O,D,V,R)):(c=T*t+L,d=K*t+W,p=D*t+O,n[c]===0&&(n[c]=++o),n[d]===0&&(n[d]=++o),n[p]===0&&(n[p]=++o),l++)}f(0,0,u,u,u,0),f(u,u,0,0,0,u);const y=o*2,v=l*3,_=new Uint16Array(y),S=new Uint32Array(v);let x=0;function P(L,T,W,K,O,D){const V=L+W>>1,R=T+K>>1;if(Math.abs(L-O)+Math.abs(T-D)>1&&r[R*t+V]>e)P(O,D,L,T,V,R),P(W,K,O,D,V,R);else{const C=n[T*t+L]-1,X=n[K*t+W]-1,Y=n[D*t+O]-1;_[2*C]=L,_[2*C+1]=T,_[2*X]=W,_[2*X+1]=K,_[2*Y]=O,_[2*Y+1]=D,S[x++]=C,S[x++]=X,S[x++]=Y}}return P(0,0,u,u,u,0),P(u,u,0,0,0,u),{attributes:this._getMeshAttributes(this.terrain,_,S),indices:S}}_getMeshAttributes(e,t,n){const r=Math.floor(Math.sqrt(e.length)),o=r-1,l=t.length/2,u=new Float32Array(l*3),c=new Float32Array(l*2);for(let p=0;p<l;p++){const f=t[p*2],y=t[p*2+1],v=y*r+f;u[3*p+0]=f/o-.5,u[3*p+1]=.5-y/o,u[3*p+2]=e[v],c[2*p+0]=f/o,c[2*p+1]=1-y/o}const d=jo(u,n);return{position:{value:u,size:3},texcoord:{value:c,size:2},normal:{value:d,size:3}}}}var Rg=Object.defineProperty,Ng=(i,e,t)=>e in i?Rg(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Kc=(i,e,t)=>Ng(i,typeof e!="symbol"?e+"":e,t);class Jo{constructor(){Kc(this,"info",{version:"0.10.0",description:"Terrain loader base class"}),Kc(this,"dataType","")}async load(e){const{source:t,x:n,y:r,z:o}=e,{url:l,clipBounds:u}=Uo(t,n,r,o);if(!l)return new Vr;const c=await this.doLoad(l,{source:t,x:n,y:r,z:o,bounds:u});return Fe.manager.parseEnd(l),c}}class Qo extends m.MeshStandardMaterial{constructor(e={}){super({transparent:!0,side:m.FrontSide,...e})}setTexture(e){this.map=e,this.needsUpdate=!0}dispose(){const e=this.map;e&&(e.image instanceof ImageBitmap&&e.image.close(),e.dispose())}}var tt=(i=>(i[i.Unknown=0]="Unknown",i[i.Point=1]="Point",i[i.Linestring=2]="Linestring",i[i.Polygon=3]="Polygon",i))(tt||{});class kc{render(e,t,n,r,o=1){switch(e.lineCap="round",e.lineJoin="round",(r.shadowBlur??0)>0&&(e.shadowBlur=r.shadowBlur??2,e.shadowColor=r.shadowColor??"black",e.shadowOffsetX=r.shadowOffset?r.shadowOffset[0]:0,e.shadowOffsetY=r.shadowOffset?r.shadowOffset[1]:0),t){case tt.Point:e.textAlign="center",e.textBaseline="middle",e.font=r.font??"14px Arial",e.fillStyle=r.fontColor??"white",this._renderPointText(e,n,o,r.textField??"name",r.fontOffset??[0,-8]);break;case tt.Linestring:this._renderLineString(e,n,o);break;case tt.Polygon:this._renderPolygon(e,n,o);break;default:console.warn(`Unknown feature type: ${t}`)}(r.fill||t===tt.Point)&&(e.globalAlpha=r.fillOpacity||.5,e.fillStyle=r.fillColor||r.color||"#3388ff",e.fill(r.fillRule||"evenodd")),(r.stroke??!0)&&(r.weight??1)>0&&(e.globalAlpha=r.opacity||1,e.lineWidth=r.weight||1,e.strokeStyle=r.color||"#3388ff",e.setLineDash(r.dashArray||[]),e.stroke())}_renderPointText(e,t,n=1,r="name",o=[0,0]){const l=t.geometry;e.beginPath();for(const c of l)for(let d=0;d<c.length;d++){const p=c[d];e.arc(p.x*n,p.y*n,2,0,2*Math.PI)}const u=t.properties;u&&u[r]&&e.fillText(u[r],l[0][0].x*n+o[0],l[0][0].y*n+o[1])}_renderLineString(e,t,n){const r=t.geometry;e.beginPath();for(const o of r)for(let l=0;l<o.length;l++){const{x:u,y:c}=o[l];l===0?e.moveTo(u*n,c*n):e.lineTo(u*n,c*n)}}_renderPolygon(e,t,n){const r=t.geometry;e.beginPath();for(let o=0;o<r.length;o++){const l=r[o];for(let u=0;u<l.length;u++){const{x:c,y:d}=l[u];u===0?e.moveTo(c*n,d*n):e.lineTo(c*n,d*n)}e.closePath()}}}var Ug=Object.defineProperty,Yg=(i,e,t)=>e in i?Ug(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Rc=(i,e,t)=>Yg(i,typeof e!="symbol"?e+"":e,t);class Ho{constructor(){Rc(this,"info",{version:"0.10.0",description:"Image loader base class"}),Rc(this,"dataType","")}async load(e){const{source:t,x:n,y:r,z:o}=e,l=new Qo,{url:u,clipBounds:c}=Uo(t,n,r,o);if(u){const d=await this.doLoad(u,{source:t,x:n,y:r,z:o,bounds:c});l.map=d,Fe.manager.parseEnd(u)}return l}}var Bg=Object.defineProperty,jg=(i,e,t)=>e in i?Bg(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Nc=(i,e,t)=>jg(i,typeof e!="symbol"?e+"":e,t);class Jg{constructor(){Nc(this,"info",{version:"0.10.0",description:"Canvas tile abstract loader"}),Nc(this,"dataType","")}async load(e){const t=this._creatCanvasContext(256,256);this.drawTile(t,e);const n=new m.CanvasTexture(t.canvas.transferToImageBitmap());return new Qo({transparent:!0,map:n,opacity:e.source.opacity})}_creatCanvasContext(e,t){const r=new OffscreenCanvas(e,t).getContext("2d");if(!r)throw new Error("create canvas context failed");return r.scale(1,-1),r.translate(0,-t),r}}var Qg=Object.defineProperty,Hg=(i,e,t)=>e in i?Qg(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Eo=(i,e,t)=>Hg(i,typeof e!="symbol"?e+"":e,t);class Eg extends Ho{constructor(){super(...arguments),Eo(this,"info",{version:"0.10.0",description:"Tile image loader. It can load xyz tile image."}),Eo(this,"dataType","image"),Eo(this,"loader",new m.ImageLoader(Fe.manager))}async doLoad(e,t){const n=await this.loader.loadAsync(e).catch(l=>new Image(1,1)),r=new m.Texture;r.colorSpace=m.SRGBColorSpace;const{bounds:o}=t;return o[2]-o[0]<1?r.image=$g(n,o):r.image=n,r.needsUpdate=!0,r}}function $g(i,e){const t=i.width,n=new OffscreenCanvas(t,t),r=n.getContext("2d"),{sx:o,sy:l,sw:u,sh:c}=No(e,i.width);return r.drawImage(i,o,l,u,c,0,0,t,t),n}const qg=`{
687
687
  "name": "@terra.gl/core",
688
- "version": "0.0.1-alpha.32",
688
+ "version": "0.0.1-alpha.34",
689
689
  "type": "module",
690
690
  "files": [
691
691
  "dist"
@@ -747,4 +747,4 @@ function print() { __p += __j.call(arguments, '') }
747
747
  "vue": "^3.5.18"
748
748
  }
749
749
  }
750
- `;var ey=Object.defineProperty,ty=(i,e,t)=>e in i?ey(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Pt=(i,e,t)=>ty(i,typeof e!="symbol"?e+"":e,t);class Et{constructor(e){Pt(this,"dataType","image"),Pt(this,"attribution","isource"),Pt(this,"minLevel",0),Pt(this,"maxLevel",18),Pt(this,"projectionID","3857"),Pt(this,"url",""),Pt(this,"subdomains",[]),Pt(this,"s",""),Pt(this,"opacity",1),Pt(this,"isTMS",!1),Pt(this,"bounds",[-180,-85,180,85]),Pt(this,"_projectionBounds",[-1/0,-1/0,1/0,1/0]),Pt(this,"tileMaterial"),Object.assign(this,e)}getUrl(e,t,n){const r={...this,x:e,y:t,z:n};return ny(this.url,r)}_getUrl(e,t,n){const r=this.subdomains.length;if(r>0){const l=Math.floor(Math.random()*r);this.s=this.subdomains[l]}const o=this.isTMS?Math.pow(2,n)-1-t:t;return this.getUrl(e,o,n)}static create(e){return new Et(e)}}function ny(i,e){const t=/\{ *([\w_-]+) *\}/g;return i.replace(t,(n,r)=>{const o=e[r]??(()=>{throw new Error(`source url template error, No value provided for variable: ${n}`)})();return typeof o=="function"?o(e):o})}const{version:ry,author:iy}=JSON.parse(qg);function sy(i,e=100){return new Promise(t=>{const n=setInterval(()=>{i&&(clearInterval(n),t())},e)})}function $o(i){return Fe.registerMaterialLoader(i),i}function qo(i){return Fe.registerGeometryLoader(i),i}function Uc(i){return Fe.registerMeshLoader(i),i}$o(new Eg);const Yc="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEsoayxkKXtjb25zdCB5PW5ldyBGbG9hdDMyQXJyYXkoay5sZW5ndGgpO2ZvcihsZXQgVj0wO1Y8ZC5sZW5ndGg7Vis9Myl7Y29uc3QgYT1kW1ZdKjMsZT1kW1YrMV0qMyxyPWRbVisyXSozLHM9a1thXSx0PWtbYSsxXSxuPWtbYSsyXSxoPWtbZV0saT1rW2UrMV0sbz1rW2UrMl0sYz1rW3JdLHU9a1tyKzFdLG09a1tyKzJdLHc9aC1zLGw9aS10LGY9by1uLGc9Yy1zLE09dS10LEQ9bS1uLHA9bCpELWYqTSxVPWYqZy13KkQsST13Kk0tbCpnLHo9TWF0aC5zcXJ0KHAqcCtVKlUrSSpJKSx4PVswLDAsMV07aWYoej4wKXtjb25zdCB2PTEvejt4WzBdPXAqdix4WzFdPVUqdix4WzJdPUkqdn1mb3IobGV0IHY9MDt2PDM7disrKXlbYSt2XT15W2Urdl09eVtyK3ZdPXhbdl19cmV0dXJuIHl9dmFyIFc9T2JqZWN0LmRlZmluZVByb3BlcnR5LFA9KGssZCx5KT0+ZCBpbiBrP1coayxkLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp5fSk6a1tkXT15LF89KGssZCx5KT0+UChrLHR5cGVvZiBkIT0ic3ltYm9sIj9kKyIiOmQseSk7Y2xhc3MgZWV7Y29uc3RydWN0b3IoZD0yNTcpe18odGhpcywiZ3JpZFNpemUiKSxfKHRoaXMsIm51bVRyaWFuZ2xlcyIpLF8odGhpcywibnVtUGFyZW50VHJpYW5nbGVzIiksXyh0aGlzLCJpbmRpY2VzIiksXyh0aGlzLCJjb29yZHMiKSx0aGlzLmdyaWRTaXplPWQ7Y29uc3QgeT1kLTE7aWYoeSZ5LTEpdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBncmlkIHNpemUgdG8gYmUgMl5uKzEsIGdvdCAke2R9LmApO3RoaXMubnVtVHJpYW5nbGVzPXkqeSoyLTIsdGhpcy5udW1QYXJlbnRUcmlhbmdsZXM9dGhpcy5udW1UcmlhbmdsZXMteSp5LHRoaXMuaW5kaWNlcz1uZXcgVWludDMyQXJyYXkodGhpcy5ncmlkU2l6ZSp0aGlzLmdyaWRTaXplKSx0aGlzLmNvb3Jkcz1uZXcgVWludDE2QXJyYXkodGhpcy5udW1UcmlhbmdsZXMqNCk7Zm9yKGxldCBWPTA7Vjx0aGlzLm51bVRyaWFuZ2xlcztWKyspe2xldCBhPVYrMixlPTAscj0wLHM9MCx0PTAsbj0wLGg9MDtmb3IoYSYxP3M9dD1uPXk6ZT1yPWg9eTsoYT4+PTEpPjE7KXtjb25zdCBvPWUrcz4+MSxjPXIrdD4+MTthJjE/KHM9ZSx0PXIsZT1uLHI9aCk6KGU9cyxyPXQscz1uLHQ9aCksbj1vLGg9Y31jb25zdCBpPVYqNDt0aGlzLmNvb3Jkc1tpKzBdPWUsdGhpcy5jb29yZHNbaSsxXT1yLHRoaXMuY29vcmRzW2krMl09cyx0aGlzLmNvb3Jkc1tpKzNdPXR9fWNyZWF0ZVRpbGUoZCl7cmV0dXJuIG5ldyByZShkLHRoaXMpfX1jbGFzcyByZXtjb25zdHJ1Y3RvcihkLHkpe18odGhpcywibWFydGluaSIpLF8odGhpcywidGVycmFpbiIpLF8odGhpcywiZXJyb3JzIik7Y29uc3QgVj15LmdyaWRTaXplO2lmKGQubGVuZ3RoIT09VipWKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgdGVycmFpbiBkYXRhIG9mIGxlbmd0aCAke1YqVn0gKCR7Vn0geCAke1Z9KSwgZ290ICR7ZC5sZW5ndGh9LmApO3RoaXMudGVycmFpbj1kLHRoaXMubWFydGluaT15LHRoaXMuZXJyb3JzPW5ldyBGbG9hdDMyQXJyYXkoZC5sZW5ndGgpLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7Y29uc3R7bnVtVHJpYW5nbGVzOmQsbnVtUGFyZW50VHJpYW5nbGVzOnksY29vcmRzOlYsZ3JpZFNpemU6YX09dGhpcy5tYXJ0aW5pLHt0ZXJyYWluOmUsZXJyb3JzOnJ9PXRoaXM7Zm9yKGxldCBzPWQtMTtzPj0wO3MtLSl7Y29uc3QgdD1zKjQsbj1WW3QrMF0saD1WW3QrMV0saT1WW3QrMl0sbz1WW3QrM10sYz1uK2k+PjEsdT1oK28+PjEsbT1jK3UtaCx3PXUrbi1jLGw9KGVbaCphK25dK2VbbyphK2ldKS8yLGY9dSphK2MsZz1NYXRoLmFicyhsLWVbZl0pO2lmKHJbZl09TWF0aC5tYXgocltmXSxnKSxzPHkpe2NvbnN0IE09KGgrdz4+MSkqYSsobittPj4xKSxEPShvK3c+PjEpKmErKGkrbT4+MSk7cltmXT1NYXRoLm1heChyW2ZdLHJbTV0scltEXSl9fX1nZXRHZW9tZXRyeURhdGEoZD0wKXtjb25zdHtncmlkU2l6ZTp5LGluZGljZXM6Vn09dGhpcy5tYXJ0aW5pLHtlcnJvcnM6YX09dGhpcztsZXQgZT0wLHI9MDtjb25zdCBzPXktMTtsZXQgdCxuLGg9MDtWLmZpbGwoMCk7ZnVuY3Rpb24gaShmLGcsTSxELHAsVSl7Y29uc3QgST1mK00+PjEsej1nK0Q+PjE7TWF0aC5hYnMoZi1wKStNYXRoLmFicyhnLVUpPjEmJmFbeip5K0ldPmQ/KGkocCxVLGYsZyxJLHopLGkoTSxELHAsVSxJLHopKToodD1nKnkrZixuPUQqeStNLGg9VSp5K3AsVlt0XT09PTAmJihWW3RdPSsrZSksVltuXT09PTAmJihWW25dPSsrZSksVltoXT09PTAmJihWW2hdPSsrZSkscisrKX1pKDAsMCxzLHMscywwKSxpKHMscywwLDAsMCxzKTtjb25zdCBvPWUqMixjPXIqMyx1PW5ldyBVaW50MTZBcnJheShvKSxtPW5ldyBVaW50MzJBcnJheShjKTtsZXQgdz0wO2Z1bmN0aW9uIGwoZixnLE0sRCxwLFUpe2NvbnN0IEk9ZitNPj4xLHo9ZytEPj4xO2lmKE1hdGguYWJzKGYtcCkrTWF0aC5hYnMoZy1VKT4xJiZhW3oqeStJXT5kKWwocCxVLGYsZyxJLHopLGwoTSxELHAsVSxJLHopO2Vsc2V7Y29uc3QgeD1WW2cqeStmXS0xLHY9VltEKnkrTV0tMSxBPVZbVSp5K3BdLTE7dVsyKnhdPWYsdVsyKngrMV09Zyx1WzIqdl09TSx1WzIqdisxXT1ELHVbMipBXT1wLHVbMipBKzFdPVUsbVt3KytdPXgsbVt3KytdPXYsbVt3KytdPUF9fXJldHVybiBsKDAsMCxzLHMscywwKSxsKHMscywwLDAsMCxzKSx7YXR0cmlidXRlczp0aGlzLl9nZXRNZXNoQXR0cmlidXRlcyh0aGlzLnRlcnJhaW4sdSxtKSxpbmRpY2VzOm19fV9nZXRNZXNoQXR0cmlidXRlcyhkLHksVil7Y29uc3QgYT1NYXRoLmZsb29yKE1hdGguc3FydChkLmxlbmd0aCkpLGU9YS0xLHI9eS5sZW5ndGgvMixzPW5ldyBGbG9hdDMyQXJyYXkociozKSx0PW5ldyBGbG9hdDMyQXJyYXkocioyKTtmb3IobGV0IGg9MDtoPHI7aCsrKXtjb25zdCBpPXlbaCoyXSxvPXlbaCoyKzFdLGM9byphK2k7c1szKmgrMF09aS9lLS41LHNbMypoKzFdPS41LW8vZSxzWzMqaCsyXT1kW2NdLHRbMipoKzBdPWkvZSx0WzIqaCsxXT0xLW8vZX1jb25zdCBuPUsocyxWKTtyZXR1cm57cG9zaXRpb246e3ZhbHVlOnMsc2l6ZTozfSx0ZXhjb29yZDp7dmFsdWU6dCxzaXplOjJ9LG5vcm1hbDp7dmFsdWU6bixzaXplOjN9fX19Y29uc3QgbmU9ZnVuY3Rpb24oKXt2YXIgaz17fTtrLmRlZmF1bHROb0RhdGFWYWx1ZT0tMzQwMjc5OTkzODc5MDE0ODRlMjIsay5kZWNvZGU9ZnVuY3Rpb24ocixzKXtzPXN8fHt9O3ZhciB0PXMuZW5jb2RlZE1hc2tEYXRhfHxzLmVuY29kZWRNYXNrRGF0YT09PW51bGwsbj1hKHIscy5pbnB1dE9mZnNldHx8MCx0KSxoPXMubm9EYXRhVmFsdWUhPT1udWxsP3Mubm9EYXRhVmFsdWU6ay5kZWZhdWx0Tm9EYXRhVmFsdWUsaT1kKG4scy5waXhlbFR5cGV8fEZsb2F0MzJBcnJheSxzLmVuY29kZWRNYXNrRGF0YSxoLHMucmV0dXJuTWFzayksbz17d2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQscGl4ZWxEYXRhOmkucmVzdWx0UGl4ZWxzLG1pblZhbHVlOmkubWluVmFsdWUsbWF4VmFsdWU6bi5waXhlbHMubWF4VmFsdWUsbm9EYXRhVmFsdWU6aH07cmV0dXJuIGkucmVzdWx0TWFzayYmKG8ubWFza0RhdGE9aS5yZXN1bHRNYXNrKSxzLnJldHVybkVuY29kZWRNYXNrJiZuLm1hc2smJihvLmVuY29kZWRNYXNrRGF0YT1uLm1hc2suYml0c2V0P24ubWFzay5iaXRzZXQ6bnVsbCkscy5yZXR1cm5GaWxlSW5mbyYmKG8uZmlsZUluZm89eShuKSxzLmNvbXB1dGVVc2VkQml0RGVwdGhzJiYoby5maWxlSW5mby5iaXREZXB0aHM9VihuKSkpLG99O3ZhciBkPWZ1bmN0aW9uKHIscyx0LG4saCl7dmFyIGk9MCxvPXIucGl4ZWxzLm51bUJsb2Nrc1gsYz1yLnBpeGVscy5udW1CbG9ja3NZLHU9TWF0aC5mbG9vcihyLndpZHRoL28pLG09TWF0aC5mbG9vcihyLmhlaWdodC9jKSx3PTIqci5tYXhaRXJyb3IsbD1OdW1iZXIuTUFYX1ZBTFVFLGY7dD10fHwoci5tYXNrP3IubWFzay5iaXRzZXQ6bnVsbCk7dmFyIGcsTTtnPW5ldyBzKHIud2lkdGgqci5oZWlnaHQpLGgmJnQmJihNPW5ldyBVaW50OEFycmF5KHIud2lkdGgqci5oZWlnaHQpKTtmb3IodmFyIEQ9bmV3IEZsb2F0MzJBcnJheSh1Km0pLHAsVSxJPTA7STw9YztJKyspe3ZhciB6PUkhPT1jP206ci5oZWlnaHQlYztpZih6IT09MClmb3IodmFyIHg9MDt4PD1vO3grKyl7dmFyIHY9eCE9PW8/dTpyLndpZHRoJW87aWYodiE9PTApe3ZhciBBPUkqci53aWR0aCptK3gqdSxUPXIud2lkdGgtdixTPXIucGl4ZWxzLmJsb2Nrc1tpXSxiLEwsRjtTLmVuY29kaW5nPDI/KFMuZW5jb2Rpbmc9PT0wP2I9Uy5yYXdEYXRhOihlKFMuc3R1ZmZlZERhdGEsUy5iaXRzUGVyUGl4ZWwsUy5udW1WYWxpZFBpeGVscyxTLm9mZnNldCx3LEQsci5waXhlbHMubWF4VmFsdWUpLGI9RCksTD0wKTpTLmVuY29kaW5nPT09Mj9GPTA6Rj1TLm9mZnNldDt2YXIgQjtpZih0KWZvcihVPTA7VTx6O1UrKyl7Zm9yKEEmNyYmKEI9dFtBPj4zXSxCPDw9QSY3KSxwPTA7cDx2O3ArKylBJjd8fChCPXRbQT4+M10pLEImMTI4PyhNJiYoTVtBXT0xKSxmPVMuZW5jb2Rpbmc8Mj9iW0wrK106RixsPWw+Zj9mOmwsZ1tBKytdPWYpOihNJiYoTVtBXT0wKSxnW0ErK109biksQjw8PTE7QSs9VH1lbHNlIGlmKFMuZW5jb2Rpbmc8Milmb3IoVT0wO1U8ejtVKyspe2ZvcihwPTA7cDx2O3ArKylmPWJbTCsrXSxsPWw+Zj9mOmwsZ1tBKytdPWY7QSs9VH1lbHNlIGZvcihsPWw+Rj9GOmwsVT0wO1U8ejtVKyspe2ZvcihwPTA7cDx2O3ArKylnW0ErK109RjtBKz1UfWlmKFMuZW5jb2Rpbmc9PT0xJiZMIT09Uy5udW1WYWxpZFBpeGVscyl0aHJvdyJCbG9jayBhbmQgTWFzayBkbyBub3QgbWF0Y2giO2krK319fXJldHVybntyZXN1bHRQaXhlbHM6ZyxyZXN1bHRNYXNrOk0sbWluVmFsdWU6bH19LHk9ZnVuY3Rpb24ocil7cmV0dXJue2ZpbGVJZGVudGlmaWVyU3RyaW5nOnIuZmlsZUlkZW50aWZpZXJTdHJpbmcsZmlsZVZlcnNpb246ci5maWxlVmVyc2lvbixpbWFnZVR5cGU6ci5pbWFnZVR5cGUsaGVpZ2h0OnIuaGVpZ2h0LHdpZHRoOnIud2lkdGgsbWF4WkVycm9yOnIubWF4WkVycm9yLGVvZk9mZnNldDpyLmVvZk9mZnNldCxtYXNrOnIubWFzaz97bnVtQmxvY2tzWDpyLm1hc2subnVtQmxvY2tzWCxudW1CbG9ja3NZOnIubWFzay5udW1CbG9ja3NZLG51bUJ5dGVzOnIubWFzay5udW1CeXRlcyxtYXhWYWx1ZTpyLm1hc2subWF4VmFsdWV9Om51bGwscGl4ZWxzOntudW1CbG9ja3NYOnIucGl4ZWxzLm51bUJsb2Nrc1gsbnVtQmxvY2tzWTpyLnBpeGVscy5udW1CbG9ja3NZLG51bUJ5dGVzOnIucGl4ZWxzLm51bUJ5dGVzLG1heFZhbHVlOnIucGl4ZWxzLm1heFZhbHVlLG5vRGF0YVZhbHVlOnIubm9EYXRhVmFsdWV9fX0sVj1mdW5jdGlvbihyKXtmb3IodmFyIHM9ci5waXhlbHMubnVtQmxvY2tzWCpyLnBpeGVscy5udW1CbG9ja3NZLHQ9e30sbj0wO248cztuKyspe3ZhciBoPXIucGl4ZWxzLmJsb2Nrc1tuXTtoLmVuY29kaW5nPT09MD90LmZsb2F0MzI9ITA6aC5lbmNvZGluZz09PTE/dFtoLmJpdHNQZXJQaXhlbF09ITA6dFswXT0hMH1yZXR1cm4gT2JqZWN0LmtleXModCl9LGE9ZnVuY3Rpb24ocixzLHQpe3ZhciBuPXt9LGg9bmV3IFVpbnQ4QXJyYXkocixzLDEwKTtpZihuLmZpbGVJZGVudGlmaWVyU3RyaW5nPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxoKSxuLmZpbGVJZGVudGlmaWVyU3RyaW5nLnRyaW0oKSE9PSJDbnRaSW1hZ2UiKXRocm93IlVuZXhwZWN0ZWQgZmlsZSBpZGVudGlmaWVyIHN0cmluZzogIituLmZpbGVJZGVudGlmaWVyU3RyaW5nO3MrPTEwO3ZhciBpPW5ldyBEYXRhVmlldyhyLHMsMjQpO2lmKG4uZmlsZVZlcnNpb249aS5nZXRJbnQzMigwLCEwKSxuLmltYWdlVHlwZT1pLmdldEludDMyKDQsITApLG4uaGVpZ2h0PWkuZ2V0VWludDMyKDgsITApLG4ud2lkdGg9aS5nZXRVaW50MzIoMTIsITApLG4ubWF4WkVycm9yPWkuZ2V0RmxvYXQ2NCgxNiwhMCkscys9MjQsIXQpaWYoaT1uZXcgRGF0YVZpZXcocixzLDE2KSxuLm1hc2s9e30sbi5tYXNrLm51bUJsb2Nrc1k9aS5nZXRVaW50MzIoMCwhMCksbi5tYXNrLm51bUJsb2Nrc1g9aS5nZXRVaW50MzIoNCwhMCksbi5tYXNrLm51bUJ5dGVzPWkuZ2V0VWludDMyKDgsITApLG4ubWFzay5tYXhWYWx1ZT1pLmdldEZsb2F0MzIoMTIsITApLHMrPTE2LG4ubWFzay5udW1CeXRlcz4wKXt2YXIgbz1uZXcgVWludDhBcnJheShNYXRoLmNlaWwobi53aWR0aCpuLmhlaWdodC84KSk7aT1uZXcgRGF0YVZpZXcocixzLG4ubWFzay5udW1CeXRlcyk7dmFyIGM9aS5nZXRJbnQxNigwLCEwKSx1PTIsbT0wO2Rve2lmKGM+MClmb3IoO2MtLTspb1ttKytdPWkuZ2V0VWludDgodSsrKTtlbHNle3ZhciB3PWkuZ2V0VWludDgodSsrKTtmb3IoYz0tYztjLS07KW9bbSsrXT13fWM9aS5nZXRJbnQxNih1LCEwKSx1Kz0yfXdoaWxlKHU8bi5tYXNrLm51bUJ5dGVzKTtpZihjIT09LTMyNzY4fHxtPG8ubGVuZ3RoKXRocm93IlVuZXhwZWN0ZWQgZW5kIG9mIG1hc2sgUkxFIGVuY29kaW5nIjtuLm1hc2suYml0c2V0PW8scys9bi5tYXNrLm51bUJ5dGVzfWVsc2Ugbi5tYXNrLm51bUJ5dGVzfG4ubWFzay5udW1CbG9ja3NZfG4ubWFzay5tYXhWYWx1ZXx8KG4ubWFzay5iaXRzZXQ9bmV3IFVpbnQ4QXJyYXkoTWF0aC5jZWlsKG4ud2lkdGgqbi5oZWlnaHQvOCkpKTtpPW5ldyBEYXRhVmlldyhyLHMsMTYpLG4ucGl4ZWxzPXt9LG4ucGl4ZWxzLm51bUJsb2Nrc1k9aS5nZXRVaW50MzIoMCwhMCksbi5waXhlbHMubnVtQmxvY2tzWD1pLmdldFVpbnQzMig0LCEwKSxuLnBpeGVscy5udW1CeXRlcz1pLmdldFVpbnQzMig4LCEwKSxuLnBpeGVscy5tYXhWYWx1ZT1pLmdldEZsb2F0MzIoMTIsITApLHMrPTE2O3ZhciBsPW4ucGl4ZWxzLm51bUJsb2Nrc1gsZj1uLnBpeGVscy5udW1CbG9ja3NZLGc9bCsobi53aWR0aCVsPjA/MTowKSxNPWYrKG4uaGVpZ2h0JWY+MD8xOjApO24ucGl4ZWxzLmJsb2Nrcz1uZXcgQXJyYXkoZypNKTtmb3IodmFyIEQ9MCxwPTA7cDxNO3ArKylmb3IodmFyIFU9MDtVPGc7VSsrKXt2YXIgST0wLHo9ci5ieXRlTGVuZ3RoLXM7aT1uZXcgRGF0YVZpZXcocixzLE1hdGgubWluKDEwLHopKTt2YXIgeD17fTtuLnBpeGVscy5ibG9ja3NbRCsrXT14O3ZhciB2PWkuZ2V0VWludDgoMCk7aWYoSSsrLHguZW5jb2Rpbmc9diY2Myx4LmVuY29kaW5nPjMpdGhyb3ciSW52YWxpZCBibG9jayBlbmNvZGluZyAoIit4LmVuY29kaW5nKyIpIjtpZih4LmVuY29kaW5nPT09Mil7cysrO2NvbnRpbnVlfWlmKHYhPT0wJiZ2IT09Mil7aWYodj4+PTYseC5vZmZzZXRUeXBlPXYsdj09PTIpeC5vZmZzZXQ9aS5nZXRJbnQ4KDEpLEkrKztlbHNlIGlmKHY9PT0xKXgub2Zmc2V0PWkuZ2V0SW50MTYoMSwhMCksSSs9MjtlbHNlIGlmKHY9PT0wKXgub2Zmc2V0PWkuZ2V0RmxvYXQzMigxLCEwKSxJKz00O2Vsc2UgdGhyb3ciSW52YWxpZCBibG9jayBvZmZzZXQgdHlwZSI7aWYoeC5lbmNvZGluZz09PTEpaWYodj1pLmdldFVpbnQ4KEkpLEkrKyx4LmJpdHNQZXJQaXhlbD12JjYzLHY+Pj02LHgubnVtVmFsaWRQaXhlbHNUeXBlPXYsdj09PTIpeC5udW1WYWxpZFBpeGVscz1pLmdldFVpbnQ4KEkpLEkrKztlbHNlIGlmKHY9PT0xKXgubnVtVmFsaWRQaXhlbHM9aS5nZXRVaW50MTYoSSwhMCksSSs9MjtlbHNlIGlmKHY9PT0wKXgubnVtVmFsaWRQaXhlbHM9aS5nZXRVaW50MzIoSSwhMCksSSs9NDtlbHNlIHRocm93IkludmFsaWQgdmFsaWQgcGl4ZWwgY291bnQgdHlwZSJ9aWYocys9SSx4LmVuY29kaW5nIT09Myl7dmFyIEEsVDtpZih4LmVuY29kaW5nPT09MCl7dmFyIFM9KG4ucGl4ZWxzLm51bUJ5dGVzLTEpLzQ7aWYoUyE9PU1hdGguZmxvb3IoUykpdGhyb3cidW5jb21wcmVzc2VkIGJsb2NrIGhhcyBpbnZhbGlkIGxlbmd0aCI7QT1uZXcgQXJyYXlCdWZmZXIoUyo0KSxUPW5ldyBVaW50OEFycmF5KEEpLFQuc2V0KG5ldyBVaW50OEFycmF5KHIscyxTKjQpKTt2YXIgYj1uZXcgRmxvYXQzMkFycmF5KEEpO3gucmF3RGF0YT1iLHMrPVMqNH1lbHNlIGlmKHguZW5jb2Rpbmc9PT0xKXt2YXIgTD1NYXRoLmNlaWwoeC5udW1WYWxpZFBpeGVscyp4LmJpdHNQZXJQaXhlbC84KSxGPU1hdGguY2VpbChMLzQpO0E9bmV3IEFycmF5QnVmZmVyKEYqNCksVD1uZXcgVWludDhBcnJheShBKSxULnNldChuZXcgVWludDhBcnJheShyLHMsTCkpLHguc3R1ZmZlZERhdGE9bmV3IFVpbnQzMkFycmF5KEEpLHMrPUx9fX1yZXR1cm4gbi5lb2ZPZmZzZXQ9cyxufSxlPWZ1bmN0aW9uKHIscyx0LG4saCxpLG8pe3ZhciBjPSgxPDxzKS0xLHU9MCxtLHc9MCxsLGYsZz1NYXRoLmNlaWwoKG8tbikvaCksTT1yLmxlbmd0aCo0LU1hdGguY2VpbChzKnQvOCk7Zm9yKHJbci5sZW5ndGgtMV08PD04Kk0sbT0wO208dDttKyspe2lmKHc9PT0wJiYoZj1yW3UrK10sdz0zMiksdz49cylsPWY+Pj53LXMmYyx3LT1zO2Vsc2V7dmFyIEQ9cy13O2w9KGYmYyk8PEQmYyxmPXJbdSsrXSx3PTMyLUQsbCs9Zj4+Pnd9aVttXT1sPGc/bitsKmg6b31yZXR1cm4gaX07cmV0dXJuIGt9KCksaWU9ZnVuY3Rpb24oKXt2YXIgaz17dW5zdHVmZjpmdW5jdGlvbihhLGUscixzLHQsbixoLGkpe3ZhciBvPSgxPDxyKS0xLGM9MCx1LG09MCx3LGwsZixnLE09YS5sZW5ndGgqNC1NYXRoLmNlaWwocipzLzgpO2lmKGFbYS5sZW5ndGgtMV08PD04Kk0sdClmb3IodT0wO3U8czt1KyspbT09PTAmJihsPWFbYysrXSxtPTMyKSxtPj1yPyh3PWw+Pj5tLXImbyxtLT1yKTooZj1yLW0sdz0obCZvKTw8ZiZvLGw9YVtjKytdLG09MzItZix3Kz1sPj4+bSksZVt1XT10W3ddO2Vsc2UgZm9yKGc9TWF0aC5jZWlsKChpLW4pL2gpLHU9MDt1PHM7dSsrKW09PT0wJiYobD1hW2MrK10sbT0zMiksbT49cj8odz1sPj4+bS1yJm8sbS09cik6KGY9ci1tLHc9KGwmbyk8PGYmbyxsPWFbYysrXSxtPTMyLWYsdys9bD4+Pm0pLGVbdV09dzxnP24rdypoOml9LHVuc3R1ZmZMVVQ6ZnVuY3Rpb24oYSxlLHIscyx0LG4pe3ZhciBoPSgxPDxlKS0xLGk9MCxvPTAsYz0wLHU9MCxtPTAsdyxsPVtdLGY9YS5sZW5ndGgqNC1NYXRoLmNlaWwoZSpyLzgpO2FbYS5sZW5ndGgtMV08PD04KmY7dmFyIGc9TWF0aC5jZWlsKChuLXMpL3QpO2ZvcihvPTA7bzxyO28rKyl1PT09MCYmKHc9YVtpKytdLHU9MzIpLHU+PWU/KG09dz4+PnUtZSZoLHUtPWUpOihjPWUtdSxtPSh3JmgpPDxjJmgsdz1hW2krK10sdT0zMi1jLG0rPXc+Pj51KSxsW29dPW08Zz9zK20qdDpuO3JldHVybiBsLnVuc2hpZnQocyksbH0sdW5zdHVmZjI6ZnVuY3Rpb24oYSxlLHIscyx0LG4saCxpKXt2YXIgbz0oMTw8ciktMSxjPTAsdSxtPTAsdz0wLGwsZixnO2lmKHQpZm9yKHU9MDt1PHM7dSsrKW09PT0wJiYoZj1hW2MrK10sbT0zMix3PTApLG0+PXI/KGw9Zj4+PncmbyxtLT1yLHcrPXIpOihnPXItbSxsPWY+Pj53Jm8sZj1hW2MrK10sbT0zMi1nLGx8PShmJigxPDxnKS0xKTw8ci1nLHc9ZyksZVt1XT10W2xdO2Vsc2V7dmFyIE09TWF0aC5jZWlsKChpLW4pL2gpO2Zvcih1PTA7dTxzO3UrKyltPT09MCYmKGY9YVtjKytdLG09MzIsdz0wKSxtPj1yPyhsPWY+Pj53Jm8sbS09cix3Kz1yKTooZz1yLW0sbD1mPj4+dyZvLGY9YVtjKytdLG09MzItZyxsfD0oZiYoMTw8ZyktMSk8PHItZyx3PWcpLGVbdV09bDxNP24rbCpoOml9cmV0dXJuIGV9LHVuc3R1ZmZMVVQyOmZ1bmN0aW9uKGEsZSxyLHMsdCxuKXt2YXIgaD0oMTw8ZSktMSxpPTAsbz0wLGM9MCx1PTAsbT0wLHc9MCxsLGY9W10sZz1NYXRoLmNlaWwoKG4tcykvdCk7Zm9yKG89MDtvPHI7bysrKXU9PT0wJiYobD1hW2krK10sdT0zMix3PTApLHU+PWU/KG09bD4+PncmaCx1LT1lLHcrPWUpOihjPWUtdSxtPWw+Pj53JmgsbD1hW2krK10sdT0zMi1jLG18PShsJigxPDxjKS0xKTw8ZS1jLHc9YyksZltvXT1tPGc/cyttKnQ6bjtyZXR1cm4gZi51bnNoaWZ0KHMpLGZ9LG9yaWdpbmFsVW5zdHVmZjpmdW5jdGlvbihhLGUscixzKXt2YXIgdD0oMTw8ciktMSxuPTAsaCxpPTAsbyxjLHUsbT1hLmxlbmd0aCo0LU1hdGguY2VpbChyKnMvOCk7Zm9yKGFbYS5sZW5ndGgtMV08PD04Km0saD0wO2g8cztoKyspaT09PTAmJihjPWFbbisrXSxpPTMyKSxpPj1yPyhvPWM+Pj5pLXImdCxpLT1yKToodT1yLWksbz0oYyZ0KTw8dSZ0LGM9YVtuKytdLGk9MzItdSxvKz1jPj4+aSksZVtoXT1vO3JldHVybiBlfSxvcmlnaW5hbFVuc3R1ZmYyOmZ1bmN0aW9uKGEsZSxyLHMpe3ZhciB0PSgxPDxyKS0xLG49MCxoLGk9MCxvPTAsYyx1LG07Zm9yKGg9MDtoPHM7aCsrKWk9PT0wJiYodT1hW24rK10saT0zMixvPTApLGk+PXI/KGM9dT4+Pm8mdCxpLT1yLG8rPXIpOihtPXItaSxjPXU+Pj5vJnQsdT1hW24rK10saT0zMi1tLGN8PSh1JigxPDxtKS0xKTw8ci1tLG89bSksZVtoXT1jO3JldHVybiBlfX0sZD17SFVGRk1BTl9MVVRfQklUU19NQVg6MTIsY29tcHV0ZUNoZWNrc3VtRmxldGNoZXIzMjpmdW5jdGlvbihhKXtmb3IodmFyIGU9NjU1MzUscj02NTUzNSxzPWEubGVuZ3RoLHQ9TWF0aC5mbG9vcihzLzIpLG49MDt0Oyl7dmFyIGg9dD49MzU5PzM1OTp0O3QtPWg7ZG8gZSs9YVtuKytdPDw4LHIrPWUrPWFbbisrXTt3aGlsZSgtLWgpO2U9KGUmNjU1MzUpKyhlPj4+MTYpLHI9KHImNjU1MzUpKyhyPj4+MTYpfXJldHVybiBzJjEmJihyKz1lKz1hW25dPDw4KSxlPShlJjY1NTM1KSsoZT4+PjE2KSxyPShyJjY1NTM1KSsocj4+PjE2KSwocjw8MTZ8ZSk+Pj4wfSxyZWFkSGVhZGVySW5mbzpmdW5jdGlvbihhLGUpe3ZhciByPWUucHRyLHM9bmV3IFVpbnQ4QXJyYXkoYSxyLDYpLHQ9e307aWYodC5maWxlSWRlbnRpZmllclN0cmluZz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwscyksdC5maWxlSWRlbnRpZmllclN0cmluZy5sYXN0SW5kZXhPZigiTGVyYzIiLDApIT09MCl0aHJvdyJVbmV4cGVjdGVkIGZpbGUgaWRlbnRpZmllciBzdHJpbmcgKGV4cGVjdCBMZXJjMiApOiAiK3QuZmlsZUlkZW50aWZpZXJTdHJpbmc7cis9Njt2YXIgbj1uZXcgRGF0YVZpZXcoYSxyLDgpLGg9bi5nZXRJbnQzMigwLCEwKTt0LmZpbGVWZXJzaW9uPWgscis9NCxoPj0zJiYodC5jaGVja3N1bT1uLmdldFVpbnQzMig0LCEwKSxyKz00KSxuPW5ldyBEYXRhVmlldyhhLHIsMTIpLHQuaGVpZ2h0PW4uZ2V0VWludDMyKDAsITApLHQud2lkdGg9bi5nZXRVaW50MzIoNCwhMCkscis9OCxoPj00Pyh0Lm51bURpbXM9bi5nZXRVaW50MzIoOCwhMCkscis9NCk6dC5udW1EaW1zPTEsbj1uZXcgRGF0YVZpZXcoYSxyLDQwKSx0Lm51bVZhbGlkUGl4ZWw9bi5nZXRVaW50MzIoMCwhMCksdC5taWNyb0Jsb2NrU2l6ZT1uLmdldEludDMyKDQsITApLHQuYmxvYlNpemU9bi5nZXRJbnQzMig4LCEwKSx0LmltYWdlVHlwZT1uLmdldEludDMyKDEyLCEwKSx0Lm1heFpFcnJvcj1uLmdldEZsb2F0NjQoMTYsITApLHQuek1pbj1uLmdldEZsb2F0NjQoMjQsITApLHQuek1heD1uLmdldEZsb2F0NjQoMzIsITApLHIrPTQwLGUuaGVhZGVySW5mbz10LGUucHRyPXI7dmFyIGksbztpZihoPj0zJiYobz1oPj00PzUyOjQ4LGk9dGhpcy5jb21wdXRlQ2hlY2tzdW1GbGV0Y2hlcjMyKG5ldyBVaW50OEFycmF5KGEsci1vLHQuYmxvYlNpemUtMTQpKSxpIT09dC5jaGVja3N1bSkpdGhyb3ciQ2hlY2tzdW0gZmFpbGVkLiI7cmV0dXJuITB9LGNoZWNrTWluTWF4UmFuZ2VzOmZ1bmN0aW9uKGEsZSl7dmFyIHI9ZS5oZWFkZXJJbmZvLHM9dGhpcy5nZXREYXRhVHlwZUFycmF5KHIuaW1hZ2VUeXBlKSx0PXIubnVtRGltcyp0aGlzLmdldERhdGFUeXBlU2l6ZShyLmltYWdlVHlwZSksbj10aGlzLnJlYWRTdWJBcnJheShhLGUucHRyLHMsdCksaD10aGlzLnJlYWRTdWJBcnJheShhLGUucHRyK3Qscyx0KTtlLnB0cis9Mip0O3ZhciBpLG89ITA7Zm9yKGk9MDtpPHIubnVtRGltcztpKyspaWYobltpXSE9PWhbaV0pe289ITE7YnJlYWt9cmV0dXJuIHIubWluVmFsdWVzPW4sci5tYXhWYWx1ZXM9aCxvfSxyZWFkU3ViQXJyYXk6ZnVuY3Rpb24oYSxlLHIscyl7dmFyIHQ7aWYocj09PVVpbnQ4QXJyYXkpdD1uZXcgVWludDhBcnJheShhLGUscyk7ZWxzZXt2YXIgbj1uZXcgQXJyYXlCdWZmZXIocyksaD1uZXcgVWludDhBcnJheShuKTtoLnNldChuZXcgVWludDhBcnJheShhLGUscykpLHQ9bmV3IHIobil9cmV0dXJuIHR9LHJlYWRNYXNrOmZ1bmN0aW9uKGEsZSl7dmFyIHI9ZS5wdHIscz1lLmhlYWRlckluZm8sdD1zLndpZHRoKnMuaGVpZ2h0LG49cy5udW1WYWxpZFBpeGVsLGg9bmV3IERhdGFWaWV3KGEsciw0KSxpPXt9O2lmKGkubnVtQnl0ZXM9aC5nZXRVaW50MzIoMCwhMCkscis9NCwobj09PTB8fHQ9PT1uKSYmaS5udW1CeXRlcyE9PTApdGhyb3ciaW52YWxpZCBtYXNrIjt2YXIgbyxjO2lmKG49PT0wKW89bmV3IFVpbnQ4QXJyYXkoTWF0aC5jZWlsKHQvOCkpLGkuYml0c2V0PW8sYz1uZXcgVWludDhBcnJheSh0KSxlLnBpeGVscy5yZXN1bHRNYXNrPWMscis9aS5udW1CeXRlcztlbHNlIGlmKGkubnVtQnl0ZXM+MCl7bz1uZXcgVWludDhBcnJheShNYXRoLmNlaWwodC84KSksaD1uZXcgRGF0YVZpZXcoYSxyLGkubnVtQnl0ZXMpO3ZhciB1PWguZ2V0SW50MTYoMCwhMCksbT0yLHc9MCxsPTA7ZG97aWYodT4wKWZvcig7dS0tOylvW3crK109aC5nZXRVaW50OChtKyspO2Vsc2UgZm9yKGw9aC5nZXRVaW50OChtKyspLHU9LXU7dS0tOylvW3crK109bDt1PWguZ2V0SW50MTYobSwhMCksbSs9Mn13aGlsZShtPGkubnVtQnl0ZXMpO2lmKHUhPT0tMzI3Njh8fHc8by5sZW5ndGgpdGhyb3ciVW5leHBlY3RlZCBlbmQgb2YgbWFzayBSTEUgZW5jb2RpbmciO2M9bmV3IFVpbnQ4QXJyYXkodCk7dmFyIGY9MCxnPTA7Zm9yKGc9MDtnPHQ7ZysrKWcmNz8oZj1vW2c+PjNdLGY8PD1nJjcpOmY9b1tnPj4zXSxmJjEyOCYmKGNbZ109MSk7ZS5waXhlbHMucmVzdWx0TWFzaz1jLGkuYml0c2V0PW8scis9aS5udW1CeXRlc31yZXR1cm4gZS5wdHI9cixlLm1hc2s9aSwhMH0scmVhZERhdGFPbmVTd2VlcDpmdW5jdGlvbihhLGUscixzKXt2YXIgdD1lLnB0cixuPWUuaGVhZGVySW5mbyxoPW4ubnVtRGltcyxpPW4ud2lkdGgqbi5oZWlnaHQsbz1uLmltYWdlVHlwZSxjPW4ubnVtVmFsaWRQaXhlbCpkLmdldERhdGFUeXBlU2l6ZShvKSpoLHUsbT1lLnBpeGVscy5yZXN1bHRNYXNrO2lmKHI9PT1VaW50OEFycmF5KXU9bmV3IFVpbnQ4QXJyYXkoYSx0LGMpO2Vsc2V7dmFyIHc9bmV3IEFycmF5QnVmZmVyKGMpLGw9bmV3IFVpbnQ4QXJyYXkodyk7bC5zZXQobmV3IFVpbnQ4QXJyYXkoYSx0LGMpKSx1PW5ldyByKHcpfWlmKHUubGVuZ3RoPT09aSpoKXM/ZS5waXhlbHMucmVzdWx0UGl4ZWxzPWQuc3dhcERpbWVuc2lvbk9yZGVyKHUsaSxoLHIsITApOmUucGl4ZWxzLnJlc3VsdFBpeGVscz11O2Vsc2V7ZS5waXhlbHMucmVzdWx0UGl4ZWxzPW5ldyByKGkqaCk7dmFyIGY9MCxnPTAsTT0wLEQ9MDtpZihoPjEpe2lmKHMpe2ZvcihnPTA7ZzxpO2crKylpZihtW2ddKWZvcihEPWcsTT0wO008aDtNKyssRCs9aSllLnBpeGVscy5yZXN1bHRQaXhlbHNbRF09dVtmKytdfWVsc2UgZm9yKGc9MDtnPGk7ZysrKWlmKG1bZ10pZm9yKEQ9ZypoLE09MDtNPGg7TSsrKWUucGl4ZWxzLnJlc3VsdFBpeGVsc1tEK01dPXVbZisrXX1lbHNlIGZvcihnPTA7ZzxpO2crKyltW2ddJiYoZS5waXhlbHMucmVzdWx0UGl4ZWxzW2ddPXVbZisrXSl9cmV0dXJuIHQrPWMsZS5wdHI9dCwhMH0scmVhZEh1ZmZtYW5UcmVlOmZ1bmN0aW9uKGEsZSl7dmFyIHI9dGhpcy5IVUZGTUFOX0xVVF9CSVRTX01BWCxzPW5ldyBEYXRhVmlldyhhLGUucHRyLDE2KTtlLnB0cis9MTY7dmFyIHQ9cy5nZXRJbnQzMigwLCEwKTtpZih0PDIpdGhyb3cidW5zdXBwb3J0ZWQgSHVmZm1hbiB2ZXJzaW9uIjt2YXIgbj1zLmdldEludDMyKDQsITApLGg9cy5nZXRJbnQzMig4LCEwKSxpPXMuZ2V0SW50MzIoMTIsITApO2lmKGg+PWkpcmV0dXJuITE7dmFyIG89bmV3IFVpbnQzMkFycmF5KGktaCk7ZC5kZWNvZGVCaXRzKGEsZSxvKTt2YXIgYz1bXSx1LG0sdyxsO2Zvcih1PWg7dTxpO3UrKyltPXUtKHU8bj8wOm4pLGNbbV09e2ZpcnN0Om9bdS1oXSxzZWNvbmQ6bnVsbH07dmFyIGY9YS5ieXRlTGVuZ3RoLWUucHRyLGc9TWF0aC5jZWlsKGYvNCksTT1uZXcgQXJyYXlCdWZmZXIoZyo0KSxEPW5ldyBVaW50OEFycmF5KE0pO0Quc2V0KG5ldyBVaW50OEFycmF5KGEsZS5wdHIsZikpO3ZhciBwPW5ldyBVaW50MzJBcnJheShNKSxVPTAsSSx6PTA7Zm9yKEk9cFswXSx1PWg7dTxpO3UrKyltPXUtKHU8bj8wOm4pLGw9Y1ttXS5maXJzdCxsPjAmJihjW21dLnNlY29uZD1JPDxVPj4+MzItbCwzMi1VPj1sPyhVKz1sLFU9PT0zMiYmKFU9MCx6KyssST1wW3pdKSk6KFUrPWwtMzIseisrLEk9cFt6XSxjW21dLnNlY29uZHw9ST4+PjMyLVUpKTt2YXIgeD0wLHY9MCxBPW5ldyB5O2Zvcih1PTA7dTxjLmxlbmd0aDt1KyspY1t1XSE9PXZvaWQgMCYmKHg9TWF0aC5tYXgoeCxjW3VdLmZpcnN0KSk7eD49cj92PXI6dj14O3ZhciBUPVtdLFMsYixMLEYsQixDO2Zvcih1PWg7dTxpO3UrKylpZihtPXUtKHU8bj8wOm4pLGw9Y1ttXS5maXJzdCxsPjApaWYoUz1bbCxtXSxsPD12KWZvcihiPWNbbV0uc2Vjb25kPDx2LWwsTD0xPDx2LWwsdz0wO3c8TDt3KyspVFtifHddPVM7ZWxzZSBmb3IoYj1jW21dLnNlY29uZCxDPUEsRj1sLTE7Rj49MDtGLS0pQj1iPj4+RiYxLEI/KEMucmlnaHR8fChDLnJpZ2h0PW5ldyB5KSxDPUMucmlnaHQpOihDLmxlZnR8fChDLmxlZnQ9bmV3IHkpLEM9Qy5sZWZ0KSxGPT09MCYmIUMudmFsJiYoQy52YWw9U1sxXSk7cmV0dXJue2RlY29kZUx1dDpULG51bUJpdHNMVVRRaWNrOnYsbnVtQml0c0xVVDp4LHRyZWU6QSxzdHVmZmVkRGF0YTpwLHNyY1B0cjp6LGJpdFBvczpVfX0scmVhZEh1ZmZtYW46ZnVuY3Rpb24oYSxlLHIscyl7dmFyIHQ9ZS5oZWFkZXJJbmZvLG49dC5udW1EaW1zLGg9ZS5oZWFkZXJJbmZvLmhlaWdodCxpPWUuaGVhZGVySW5mby53aWR0aCxvPWkqaCxjPXRoaXMucmVhZEh1ZmZtYW5UcmVlKGEsZSksdT1jLmRlY29kZUx1dCxtPWMudHJlZSx3PWMuc3R1ZmZlZERhdGEsbD1jLnNyY1B0cixmPWMuYml0UG9zLGc9Yy5udW1CaXRzTFVUUWljayxNPWMubnVtQml0c0xVVCxEPWUuaGVhZGVySW5mby5pbWFnZVR5cGU9PT0wPzEyODowLHAsVSxJLHo9ZS5waXhlbHMucmVzdWx0TWFzayx4LHYsQSxULFMsYixMLEY9MDtmPjAmJihsKyssZj0wKTt2YXIgQj13W2xdLEM9ZS5lbmNvZGVNb2RlPT09MSxIPW5ldyByKG8qbiksTz1ILFg7aWYobjwyfHxDKXtmb3IoWD0wO1g8bjtYKyspaWYobj4xJiYoTz1uZXcgcihILmJ1ZmZlcixvKlgsbyksRj0wKSxlLmhlYWRlckluZm8ubnVtVmFsaWRQaXhlbD09PWkqaClmb3IoYj0wLFQ9MDtUPGg7VCsrKWZvcihTPTA7UzxpO1MrKyxiKyspe2lmKFU9MCx4PUI8PGY+Pj4zMi1nLHY9eCwzMi1mPGcmJih4fD13W2wrMV0+Pj42NC1mLWcsdj14KSx1W3ZdKVU9dVt2XVsxXSxmKz11W3ZdWzBdO2Vsc2UgZm9yKHg9Qjw8Zj4+PjMyLU0sdj14LDMyLWY8TSYmKHh8PXdbbCsxXT4+PjY0LWYtTSx2PXgpLHA9bSxMPTA7TDxNO0wrKylpZihBPXg+Pj5NLUwtMSYxLHA9QT9wLnJpZ2h0OnAubGVmdCwhKHAubGVmdHx8cC5yaWdodCkpe1U9cC52YWwsZj1mK0wrMTticmVha31mPj0zMiYmKGYtPTMyLGwrKyxCPXdbbF0pLEk9VS1ELEM/KFM+MD9JKz1GOlQ+MD9JKz1PW2ItaV06SSs9RixJJj0yNTUsT1tiXT1JLEY9SSk6T1tiXT1JfWVsc2UgZm9yKGI9MCxUPTA7VDxoO1QrKylmb3IoUz0wO1M8aTtTKyssYisrKWlmKHpbYl0pe2lmKFU9MCx4PUI8PGY+Pj4zMi1nLHY9eCwzMi1mPGcmJih4fD13W2wrMV0+Pj42NC1mLWcsdj14KSx1W3ZdKVU9dVt2XVsxXSxmKz11W3ZdWzBdO2Vsc2UgZm9yKHg9Qjw8Zj4+PjMyLU0sdj14LDMyLWY8TSYmKHh8PXdbbCsxXT4+PjY0LWYtTSx2PXgpLHA9bSxMPTA7TDxNO0wrKylpZihBPXg+Pj5NLUwtMSYxLHA9QT9wLnJpZ2h0OnAubGVmdCwhKHAubGVmdHx8cC5yaWdodCkpe1U9cC52YWwsZj1mK0wrMTticmVha31mPj0zMiYmKGYtPTMyLGwrKyxCPXdbbF0pLEk9VS1ELEM/KFM+MCYmeltiLTFdP0krPUY6VD4wJiZ6W2ItaV0/SSs9T1tiLWldOkkrPUYsSSY9MjU1LE9bYl09SSxGPUkpOk9bYl09SX19ZWxzZSBmb3IoYj0wLFQ9MDtUPGg7VCsrKWZvcihTPTA7UzxpO1MrKylpZihiPVQqaStTLCF6fHx6W2JdKWZvcihYPTA7WDxuO1grKyxiKz1vKXtpZihVPTAseD1CPDxmPj4+MzItZyx2PXgsMzItZjxnJiYoeHw9d1tsKzFdPj4+NjQtZi1nLHY9eCksdVt2XSlVPXVbdl1bMV0sZis9dVt2XVswXTtlbHNlIGZvcih4PUI8PGY+Pj4zMi1NLHY9eCwzMi1mPE0mJih4fD13W2wrMV0+Pj42NC1mLU0sdj14KSxwPW0sTD0wO0w8TTtMKyspaWYoQT14Pj4+TS1MLTEmMSxwPUE/cC5yaWdodDpwLmxlZnQsIShwLmxlZnR8fHAucmlnaHQpKXtVPXAudmFsLGY9ZitMKzE7YnJlYWt9Zj49MzImJihmLT0zMixsKyssQj13W2xdKSxJPVUtRCxPW2JdPUl9ZS5wdHI9ZS5wdHIrKGwrMSkqNCsoZj4wPzQ6MCksZS5waXhlbHMucmVzdWx0UGl4ZWxzPUgsbj4xJiYhcyYmKGUucGl4ZWxzLnJlc3VsdFBpeGVscz1kLnN3YXBEaW1lbnNpb25PcmRlcihILG8sbixyKSl9LGRlY29kZUJpdHM6ZnVuY3Rpb24oYSxlLHIscyx0KXt7dmFyIG49ZS5oZWFkZXJJbmZvLGg9bi5maWxlVmVyc2lvbixpPTAsbz1hLmJ5dGVMZW5ndGgtZS5wdHI+PTU/NTphLmJ5dGVMZW5ndGgtZS5wdHIsYz1uZXcgRGF0YVZpZXcoYSxlLnB0cixvKSx1PWMuZ2V0VWludDgoMCk7aSsrO3ZhciBtPXU+PjYsdz1tPT09MD80OjMtbSxsPSh1JjMyKT4wLGY9dSYzMSxnPTA7aWYodz09PTEpZz1jLmdldFVpbnQ4KGkpLGkrKztlbHNlIGlmKHc9PT0yKWc9Yy5nZXRVaW50MTYoaSwhMCksaSs9MjtlbHNlIGlmKHc9PT00KWc9Yy5nZXRVaW50MzIoaSwhMCksaSs9NDtlbHNlIHRocm93IkludmFsaWQgdmFsaWQgcGl4ZWwgY291bnQgdHlwZSI7dmFyIE09MipuLm1heFpFcnJvcixELHAsVSxJLHoseCx2LEEsVCxTPW4ubnVtRGltcz4xP24ubWF4VmFsdWVzW3RdOm4uek1heDtpZihsKXtmb3IoZS5jb3VudGVyLmx1dCsrLEE9Yy5nZXRVaW50OChpKSxpKyssST1NYXRoLmNlaWwoKEEtMSkqZi84KSx6PU1hdGguY2VpbChJLzQpLHA9bmV3IEFycmF5QnVmZmVyKHoqNCksVT1uZXcgVWludDhBcnJheShwKSxlLnB0cis9aSxVLnNldChuZXcgVWludDhBcnJheShhLGUucHRyLEkpKSx2PW5ldyBVaW50MzJBcnJheShwKSxlLnB0cis9SSxUPTA7QS0xPj4+VDspVCsrO0k9TWF0aC5jZWlsKGcqVC84KSx6PU1hdGguY2VpbChJLzQpLHA9bmV3IEFycmF5QnVmZmVyKHoqNCksVT1uZXcgVWludDhBcnJheShwKSxVLnNldChuZXcgVWludDhBcnJheShhLGUucHRyLEkpKSxEPW5ldyBVaW50MzJBcnJheShwKSxlLnB0cis9SSxoPj0zP3g9ay51bnN0dWZmTFVUMih2LGYsQS0xLHMsTSxTKTp4PWsudW5zdHVmZkxVVCh2LGYsQS0xLHMsTSxTKSxoPj0zP2sudW5zdHVmZjIoRCxyLFQsZyx4KTprLnVuc3R1ZmYoRCxyLFQsZyx4KX1lbHNlIGUuY291bnRlci5iaXRzdHVmZmVyKyssVD1mLGUucHRyKz1pLFQ+MCYmKEk9TWF0aC5jZWlsKGcqVC84KSx6PU1hdGguY2VpbChJLzQpLHA9bmV3IEFycmF5QnVmZmVyKHoqNCksVT1uZXcgVWludDhBcnJheShwKSxVLnNldChuZXcgVWludDhBcnJheShhLGUucHRyLEkpKSxEPW5ldyBVaW50MzJBcnJheShwKSxlLnB0cis9SSxoPj0zP3M9PW51bGw/ay5vcmlnaW5hbFVuc3R1ZmYyKEQscixULGcpOmsudW5zdHVmZjIoRCxyLFQsZywhMSxzLE0sUyk6cz09bnVsbD9rLm9yaWdpbmFsVW5zdHVmZihELHIsVCxnKTprLnVuc3R1ZmYoRCxyLFQsZywhMSxzLE0sUykpfX0scmVhZFRpbGVzOmZ1bmN0aW9uKGEsZSxyLHMpe3ZhciB0PWUuaGVhZGVySW5mbyxuPXQud2lkdGgsaD10LmhlaWdodCxpPW4qaCxvPXQubWljcm9CbG9ja1NpemUsYz10LmltYWdlVHlwZSx1PWQuZ2V0RGF0YVR5cGVTaXplKGMpLG09TWF0aC5jZWlsKG4vbyksdz1NYXRoLmNlaWwoaC9vKTtlLnBpeGVscy5udW1CbG9ja3NZPXcsZS5waXhlbHMubnVtQmxvY2tzWD1tLGUucGl4ZWxzLnB0cj0wO3ZhciBsPTAsZj0wLGc9MCxNPTAsRD0wLHA9MCxVPTAsST0wLHo9MCx4PTAsdj0wLEE9MCxUPTAsUz0wLGI9MCxMPTAsRixCLEMsSCxPLFgsJD1uZXcgcihvKm8pLGhlPWglb3x8byxjZT1uJW98fG8sUSxSLHE9dC5udW1EaW1zLGosRT1lLnBpeGVscy5yZXN1bHRNYXNrLFk9ZS5waXhlbHMucmVzdWx0UGl4ZWxzLG1lPXQuZmlsZVZlcnNpb24sSj1tZT49NT8xNDoxNSxaLEc9dC56TWF4LE47Zm9yKGc9MDtnPHc7ZysrKWZvcihEPWchPT13LTE/bzpoZSxNPTA7TTxtO00rKylmb3IocD1NIT09bS0xP286Y2Usdj1nKm4qbytNKm8sQT1uLXAsaj0wO2o8cTtqKyspe2lmKHE+MT8oTj1ZLHY9ZypuKm8rTSpvLFk9bmV3IHIoZS5waXhlbHMucmVzdWx0UGl4ZWxzLmJ1ZmZlcixpKmoqdSxpKSxHPXQubWF4VmFsdWVzW2pdKTpOPW51bGwsVT1hLmJ5dGVMZW5ndGgtZS5wdHIsRj1uZXcgRGF0YVZpZXcoYSxlLnB0cixNYXRoLm1pbigxMCxVKSksQj17fSxMPTAsST1GLmdldFVpbnQ4KDApLEwrKyxaPXQuZmlsZVZlcnNpb24+PTU/SSY0OjAsej1JPj42JjI1NSx4PUk+PjImSix4IT09KE0qbz4+MyZKKXx8WiYmaj09PTApdGhyb3ciaW50ZWdyaXR5IGlzc3VlIjtpZihYPUkmMyxYPjMpdGhyb3cgZS5wdHIrPUwsIkludmFsaWQgYmxvY2sgZW5jb2RpbmcgKCIrWCsiKSI7aWYoWD09PTIpe2lmKFopaWYoRSlmb3IobD0wO2w8RDtsKyspZm9yKGY9MDtmPHA7ZisrKUVbdl0mJihZW3ZdPU5bdl0pLHYrKztlbHNlIGZvcihsPTA7bDxEO2wrKylmb3IoZj0wO2Y8cDtmKyspWVt2XT1OW3ZdLHYrKztlLmNvdW50ZXIuY29uc3RhbnQrKyxlLnB0cis9TDtjb250aW51ZX1lbHNlIGlmKFg9PT0wKXtpZihaKXRocm93ImludGVncml0eSBpc3N1ZSI7aWYoZS5jb3VudGVyLnVuY29tcHJlc3NlZCsrLGUucHRyKz1MLFQ9RCpwKnUsUz1hLmJ5dGVMZW5ndGgtZS5wdHIsVD1UPFM/VDpTLEM9bmV3IEFycmF5QnVmZmVyKFQldT09PTA/VDpUK3UtVCV1KSxIPW5ldyBVaW50OEFycmF5KEMpLEguc2V0KG5ldyBVaW50OEFycmF5KGEsZS5wdHIsVCkpLE89bmV3IHIoQyksYj0wLEUpZm9yKGw9MDtsPEQ7bCsrKXtmb3IoZj0wO2Y8cDtmKyspRVt2XSYmKFlbdl09T1tiKytdKSx2Kys7dis9QX1lbHNlIGZvcihsPTA7bDxEO2wrKyl7Zm9yKGY9MDtmPHA7ZisrKVlbdisrXT1PW2IrK107dis9QX1lLnB0cis9Yip1fWVsc2UgaWYoUT1kLmdldERhdGFUeXBlVXNlZChaJiZjPDY/NDpjLHopLFI9ZC5nZXRPbmVQaXhlbChCLEwsUSxGKSxMKz1kLmdldERhdGFUeXBlU2l6ZShRKSxYPT09MylpZihlLnB0cis9TCxlLmNvdW50ZXIuY29uc3RhbnRvZmZzZXQrKyxFKWZvcihsPTA7bDxEO2wrKyl7Zm9yKGY9MDtmPHA7ZisrKUVbdl0mJihZW3ZdPVo/TWF0aC5taW4oRyxOW3ZdK1IpOlIpLHYrKzt2Kz1BfWVsc2UgZm9yKGw9MDtsPEQ7bCsrKXtmb3IoZj0wO2Y8cDtmKyspWVt2XT1aP01hdGgubWluKEcsTlt2XStSKTpSLHYrKzt2Kz1BfWVsc2UgaWYoZS5wdHIrPUwsZC5kZWNvZGVCaXRzKGEsZSwkLFIsaiksTD0wLFopaWYoRSlmb3IobD0wO2w8RDtsKyspe2ZvcihmPTA7ZjxwO2YrKylFW3ZdJiYoWVt2XT0kW0wrK10rTlt2XSksdisrO3YrPUF9ZWxzZSBmb3IobD0wO2w8RDtsKyspe2ZvcihmPTA7ZjxwO2YrKylZW3ZdPSRbTCsrXStOW3ZdLHYrKzt2Kz1BfWVsc2UgaWYoRSlmb3IobD0wO2w8RDtsKyspe2ZvcihmPTA7ZjxwO2YrKylFW3ZdJiYoWVt2XT0kW0wrK10pLHYrKzt2Kz1BfWVsc2UgZm9yKGw9MDtsPEQ7bCsrKXtmb3IoZj0wO2Y8cDtmKyspWVt2KytdPSRbTCsrXTt2Kz1BfX1xPjEmJiFzJiYoZS5waXhlbHMucmVzdWx0UGl4ZWxzPWQuc3dhcERpbWVuc2lvbk9yZGVyKGUucGl4ZWxzLnJlc3VsdFBpeGVscyxpLHEscikpfSxmb3JtYXRGaWxlSW5mbzpmdW5jdGlvbihhKXtyZXR1cm57ZmlsZUlkZW50aWZpZXJTdHJpbmc6YS5oZWFkZXJJbmZvLmZpbGVJZGVudGlmaWVyU3RyaW5nLGZpbGVWZXJzaW9uOmEuaGVhZGVySW5mby5maWxlVmVyc2lvbixpbWFnZVR5cGU6YS5oZWFkZXJJbmZvLmltYWdlVHlwZSxoZWlnaHQ6YS5oZWFkZXJJbmZvLmhlaWdodCx3aWR0aDphLmhlYWRlckluZm8ud2lkdGgsbnVtVmFsaWRQaXhlbDphLmhlYWRlckluZm8ubnVtVmFsaWRQaXhlbCxtaWNyb0Jsb2NrU2l6ZTphLmhlYWRlckluZm8ubWljcm9CbG9ja1NpemUsYmxvYlNpemU6YS5oZWFkZXJJbmZvLmJsb2JTaXplLG1heFpFcnJvcjphLmhlYWRlckluZm8ubWF4WkVycm9yLHBpeGVsVHlwZTpkLmdldFBpeGVsVHlwZShhLmhlYWRlckluZm8uaW1hZ2VUeXBlKSxlb2ZPZmZzZXQ6YS5lb2ZPZmZzZXQsbWFzazphLm1hc2s/e251bUJ5dGVzOmEubWFzay5udW1CeXRlc306bnVsbCxwaXhlbHM6e251bUJsb2Nrc1g6YS5waXhlbHMubnVtQmxvY2tzWCxudW1CbG9ja3NZOmEucGl4ZWxzLm51bUJsb2Nrc1ksbWF4VmFsdWU6YS5oZWFkZXJJbmZvLnpNYXgsbWluVmFsdWU6YS5oZWFkZXJJbmZvLnpNaW4sbm9EYXRhVmFsdWU6YS5ub0RhdGFWYWx1ZX19fSxjb25zdHJ1Y3RDb25zdGFudFN1cmZhY2U6ZnVuY3Rpb24oYSxlKXt2YXIgcj1hLmhlYWRlckluZm8uek1heCxzPWEuaGVhZGVySW5mby56TWluLHQ9YS5oZWFkZXJJbmZvLm1heFZhbHVlcyxuPWEuaGVhZGVySW5mby5udW1EaW1zLGg9YS5oZWFkZXJJbmZvLmhlaWdodCphLmhlYWRlckluZm8ud2lkdGgsaT0wLG89MCxjPTAsdT1hLnBpeGVscy5yZXN1bHRNYXNrLG09YS5waXhlbHMucmVzdWx0UGl4ZWxzO2lmKHUpaWYobj4xKXtpZihlKWZvcihpPTA7aTxuO2krKylmb3IoYz1pKmgscj10W2ldLG89MDtvPGg7bysrKXVbb10mJihtW2Mrb109cik7ZWxzZSBmb3Iobz0wO288aDtvKyspaWYodVtvXSlmb3IoYz1vKm4saT0wO2k8bjtpKyspbVtjK25dPXRbaV19ZWxzZSBmb3Iobz0wO288aDtvKyspdVtvXSYmKG1bb109cik7ZWxzZSBpZihuPjEmJnMhPT1yKWlmKGUpZm9yKGk9MDtpPG47aSsrKWZvcihjPWkqaCxyPXRbaV0sbz0wO288aDtvKyspbVtjK29dPXI7ZWxzZSBmb3Iobz0wO288aDtvKyspZm9yKGM9bypuLGk9MDtpPG47aSsrKW1bYytpXT10W2ldO2Vsc2UgZm9yKG89MDtvPGgqbjtvKyspbVtvXT1yfSxnZXREYXRhVHlwZUFycmF5OmZ1bmN0aW9uKGEpe3ZhciBlO3N3aXRjaChhKXtjYXNlIDA6ZT1JbnQ4QXJyYXk7YnJlYWs7Y2FzZSAxOmU9VWludDhBcnJheTticmVhaztjYXNlIDI6ZT1JbnQxNkFycmF5O2JyZWFrO2Nhc2UgMzplPVVpbnQxNkFycmF5O2JyZWFrO2Nhc2UgNDplPUludDMyQXJyYXk7YnJlYWs7Y2FzZSA1OmU9VWludDMyQXJyYXk7YnJlYWs7Y2FzZSA2OmU9RmxvYXQzMkFycmF5O2JyZWFrO2Nhc2UgNzplPUZsb2F0NjRBcnJheTticmVhaztkZWZhdWx0OmU9RmxvYXQzMkFycmF5fXJldHVybiBlfSxnZXRQaXhlbFR5cGU6ZnVuY3Rpb24oYSl7dmFyIGU7c3dpdGNoKGEpe2Nhc2UgMDplPSJTOCI7YnJlYWs7Y2FzZSAxOmU9IlU4IjticmVhaztjYXNlIDI6ZT0iUzE2IjticmVhaztjYXNlIDM6ZT0iVTE2IjticmVhaztjYXNlIDQ6ZT0iUzMyIjticmVhaztjYXNlIDU6ZT0iVTMyIjticmVhaztjYXNlIDY6ZT0iRjMyIjticmVhaztjYXNlIDc6ZT0iRjY0IjticmVhaztkZWZhdWx0OmU9IkYzMiJ9cmV0dXJuIGV9LGlzVmFsaWRQaXhlbFZhbHVlOmZ1bmN0aW9uKGEsZSl7aWYoZT09bnVsbClyZXR1cm4hMTt2YXIgcjtzd2l0Y2goYSl7Y2FzZSAwOnI9ZT49LTEyOCYmZTw9MTI3O2JyZWFrO2Nhc2UgMTpyPWU+PTAmJmU8PTI1NTticmVhaztjYXNlIDI6cj1lPj0tMzI3NjgmJmU8PTMyNzY3O2JyZWFrO2Nhc2UgMzpyPWU+PTAmJmU8PTY1NTM2O2JyZWFrO2Nhc2UgNDpyPWU+PS0yMTQ3NDgzNjQ4JiZlPD0yMTQ3NDgzNjQ3O2JyZWFrO2Nhc2UgNTpyPWU+PTAmJmU8PTQyOTQ5NjcyOTY7YnJlYWs7Y2FzZSA2OnI9ZT49LTM0MDI3OTk5Mzg3OTAxNDg0ZTIyJiZlPD0zNDAyNzk5OTM4NzkwMTQ4NGUyMjticmVhaztjYXNlIDc6cj1lPj0tMTc5NzY5MzEzNDg2MjMxNTdlMjkyJiZlPD0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7YnJlYWs7ZGVmYXVsdDpyPSExfXJldHVybiByfSxnZXREYXRhVHlwZVNpemU6ZnVuY3Rpb24oYSl7dmFyIGU9MDtzd2l0Y2goYSl7Y2FzZSAwOmNhc2UgMTplPTE7YnJlYWs7Y2FzZSAyOmNhc2UgMzplPTI7YnJlYWs7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6ZT00O2JyZWFrO2Nhc2UgNzplPTg7YnJlYWs7ZGVmYXVsdDplPWF9cmV0dXJuIGV9LGdldERhdGFUeXBlVXNlZDpmdW5jdGlvbihhLGUpe3ZhciByPWE7c3dpdGNoKGEpe2Nhc2UgMjpjYXNlIDQ6cj1hLWU7YnJlYWs7Y2FzZSAzOmNhc2UgNTpyPWEtMiplO2JyZWFrO2Nhc2UgNjplPT09MD9yPWE6ZT09PTE/cj0yOnI9MTticmVhaztjYXNlIDc6ZT09PTA/cj1hOnI9YS0yKmUrMTticmVhaztkZWZhdWx0OnI9YTticmVha31yZXR1cm4gcn0sZ2V0T25lUGl4ZWw6ZnVuY3Rpb24oYSxlLHIscyl7dmFyIHQ9MDtzd2l0Y2gocil7Y2FzZSAwOnQ9cy5nZXRJbnQ4KGUpO2JyZWFrO2Nhc2UgMTp0PXMuZ2V0VWludDgoZSk7YnJlYWs7Y2FzZSAyOnQ9cy5nZXRJbnQxNihlLCEwKTticmVhaztjYXNlIDM6dD1zLmdldFVpbnQxNihlLCEwKTticmVhaztjYXNlIDQ6dD1zLmdldEludDMyKGUsITApO2JyZWFrO2Nhc2UgNTp0PXMuZ2V0VUludDMyKGUsITApO2JyZWFrO2Nhc2UgNjp0PXMuZ2V0RmxvYXQzMihlLCEwKTticmVhaztjYXNlIDc6dD1zLmdldEZsb2F0NjQoZSwhMCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJ0aGUgZGVjb2RlciBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoaXMgcGl4ZWwgdHlwZSJ9cmV0dXJuIHR9LHN3YXBEaW1lbnNpb25PcmRlcjpmdW5jdGlvbihhLGUscixzLHQpe3ZhciBuPTAsaD0wLGk9MCxvPTAsYz1hO2lmKHI+MSlpZihjPW5ldyBzKGUqciksdClmb3Iobj0wO248ZTtuKyspZm9yKG89bixpPTA7aTxyO2krKyxvKz1lKWNbb109YVtoKytdO2Vsc2UgZm9yKG49MDtuPGU7bisrKWZvcihvPW4saT0wO2k8cjtpKyssbys9ZSljW2grK109YVtvXTtyZXR1cm4gY319LHk9ZnVuY3Rpb24oYSxlLHIpe3RoaXMudmFsPWEsdGhpcy5sZWZ0PWUsdGhpcy5yaWdodD1yfSxWPXtkZWNvZGU6ZnVuY3Rpb24oYSxlKXtlPWV8fHt9O3ZhciByPWUubm9EYXRhVmFsdWUscz0wLHQ9e307aWYodC5wdHI9ZS5pbnB1dE9mZnNldHx8MCx0LnBpeGVscz17fSwhIWQucmVhZEhlYWRlckluZm8oYSx0KSl7dmFyIG49dC5oZWFkZXJJbmZvLGg9bi5maWxlVmVyc2lvbixpPWQuZ2V0RGF0YVR5cGVBcnJheShuLmltYWdlVHlwZSk7aWYoaD41KXRocm93InVuc3VwcG9ydGVkIGxlcmMgdmVyc2lvbiAyLiIraDtkLnJlYWRNYXNrKGEsdCksbi5udW1WYWxpZFBpeGVsIT09bi53aWR0aCpuLmhlaWdodCYmIXQucGl4ZWxzLnJlc3VsdE1hc2smJih0LnBpeGVscy5yZXN1bHRNYXNrPWUubWFza0RhdGEpO3ZhciBvPW4ud2lkdGgqbi5oZWlnaHQ7dC5waXhlbHMucmVzdWx0UGl4ZWxzPW5ldyBpKG8qbi5udW1EaW1zKSx0LmNvdW50ZXI9e29uZXN3ZWVwOjAsdW5jb21wcmVzc2VkOjAsbHV0OjAsYml0c3R1ZmZlcjowLGNvbnN0YW50OjAsY29uc3RhbnRvZmZzZXQ6MH07dmFyIGM9IWUucmV0dXJuUGl4ZWxJbnRlcmxlYXZlZERpbXM7aWYobi5udW1WYWxpZFBpeGVsIT09MClpZihuLnpNYXg9PT1uLnpNaW4pZC5jb25zdHJ1Y3RDb25zdGFudFN1cmZhY2UodCxjKTtlbHNlIGlmKGg+PTQmJmQuY2hlY2tNaW5NYXhSYW5nZXMoYSx0KSlkLmNvbnN0cnVjdENvbnN0YW50U3VyZmFjZSh0LGMpO2Vsc2V7dmFyIHU9bmV3IERhdGFWaWV3KGEsdC5wdHIsMiksbT11LmdldFVpbnQ4KDApO2lmKHQucHRyKyssbSlkLnJlYWREYXRhT25lU3dlZXAoYSx0LGksYyk7ZWxzZSBpZihoPjEmJm4uaW1hZ2VUeXBlPD0xJiZNYXRoLmFicyhuLm1heFpFcnJvci0uNSk8MWUtNSl7dmFyIHc9dS5nZXRVaW50OCgxKTtpZih0LnB0cisrLHQuZW5jb2RlTW9kZT13LHc+Mnx8aDw0JiZ3PjEpdGhyb3ciSW52YWxpZCBIdWZmbWFuIGZsYWcgIit3O3c/ZC5yZWFkSHVmZm1hbihhLHQsaSxjKTpkLnJlYWRUaWxlcyhhLHQsaSxjKX1lbHNlIGQucmVhZFRpbGVzKGEsdCxpLGMpfXQuZW9mT2Zmc2V0PXQucHRyO3ZhciBsO2UuaW5wdXRPZmZzZXQ/KGw9dC5oZWFkZXJJbmZvLmJsb2JTaXplK2UuaW5wdXRPZmZzZXQtdC5wdHIsTWF0aC5hYnMobCk+PTEmJih0LmVvZk9mZnNldD1lLmlucHV0T2Zmc2V0K3QuaGVhZGVySW5mby5ibG9iU2l6ZSkpOihsPXQuaGVhZGVySW5mby5ibG9iU2l6ZS10LnB0cixNYXRoLmFicyhsKT49MSYmKHQuZW9mT2Zmc2V0PXQuaGVhZGVySW5mby5ibG9iU2l6ZSkpO3ZhciBmPXt3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCxwaXhlbERhdGE6dC5waXhlbHMucmVzdWx0UGl4ZWxzLG1pblZhbHVlOm4uek1pbixtYXhWYWx1ZTpuLnpNYXgsdmFsaWRQaXhlbENvdW50Om4ubnVtVmFsaWRQaXhlbCxkaW1Db3VudDpuLm51bURpbXMsZGltU3RhdHM6e21pblZhbHVlczpuLm1pblZhbHVlcyxtYXhWYWx1ZXM6bi5tYXhWYWx1ZXN9LG1hc2tEYXRhOnQucGl4ZWxzLnJlc3VsdE1hc2t9O2lmKHQucGl4ZWxzLnJlc3VsdE1hc2smJmQuaXNWYWxpZFBpeGVsVmFsdWUobi5pbWFnZVR5cGUscikpe3ZhciBnPXQucGl4ZWxzLnJlc3VsdE1hc2s7Zm9yKHM9MDtzPG87cysrKWdbc118fChmLnBpeGVsRGF0YVtzXT1yKTtmLm5vRGF0YVZhbHVlPXJ9cmV0dXJuIHQubm9EYXRhVmFsdWU9cixlLnJldHVybkZpbGVJbmZvJiYoZi5maWxlSW5mbz1kLmZvcm1hdEZpbGVJbmZvKHQpKSxmfX0sZ2V0QmFuZENvdW50OmZ1bmN0aW9uKGEpe3ZhciBlPTAscj0wLHM9e307Zm9yKHMucHRyPTAscy5waXhlbHM9e307cjxhLmJ5dGVMZW5ndGgtNTg7KWQucmVhZEhlYWRlckluZm8oYSxzKSxyKz1zLmhlYWRlckluZm8uYmxvYlNpemUsZSsrLHMucHRyPXI7cmV0dXJuIGV9fTtyZXR1cm4gVn0oKTt2YXIgdGU9ZnVuY3Rpb24oKXt2YXIgaz1uZXcgQXJyYXlCdWZmZXIoNCksZD1uZXcgVWludDhBcnJheShrKSx5PW5ldyBVaW50MzJBcnJheShrKTtyZXR1cm4geVswXT0xLGRbMF09PT0xfSgpLGFlPXtkZWNvZGU6ZnVuY3Rpb24oayxkKXtpZighdGUpdGhyb3ciQmlnIGVuZGlhbiBzeXN0ZW0gaXMgbm90IHN1cHBvcnRlZC4iO2Q9ZHx8e307dmFyIHk9ZC5pbnB1dE9mZnNldHx8MCxWPW5ldyBVaW50OEFycmF5KGsseSwxMCksYT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsViksZSxyO2lmKGEudHJpbSgpPT09IkNudFpJbWFnZSIpZT1uZSxyPTE7ZWxzZSBpZihhLnN1YnN0cmluZygwLDUpPT09IkxlcmMyIillPWllLHI9MjtlbHNlIHRocm93IlVuZXhwZWN0ZWQgZmlsZSBpZGVudGlmaWVyIHN0cmluZzogIithO2Zvcih2YXIgcz0wLHQ9ay5ieXRlTGVuZ3RoLTEwLG4saD1bXSxpLG8sYz17d2lkdGg6MCxoZWlnaHQ6MCxwaXhlbHM6W10scGl4ZWxUeXBlOmQucGl4ZWxUeXBlLG1hc2s6bnVsbCxzdGF0aXN0aWNzOltdfSx1PTA7eTx0Oyl7dmFyIG09ZS5kZWNvZGUoayx7aW5wdXRPZmZzZXQ6eSxlbmNvZGVkTWFza0RhdGE6bixtYXNrRGF0YTpvLHJldHVybk1hc2s6cz09PTAscmV0dXJuRW5jb2RlZE1hc2s6cz09PTAscmV0dXJuRmlsZUluZm86ITAscmV0dXJuUGl4ZWxJbnRlcmxlYXZlZERpbXM6ZC5yZXR1cm5QaXhlbEludGVybGVhdmVkRGltcyxwaXhlbFR5cGU6ZC5waXhlbFR5cGV8fG51bGwsbm9EYXRhVmFsdWU6ZC5ub0RhdGFWYWx1ZXx8bnVsbH0pO3k9bS5maWxlSW5mby5lb2ZPZmZzZXQsbz1tLm1hc2tEYXRhLHM9PT0wJiYobj1tLmVuY29kZWRNYXNrRGF0YSxjLndpZHRoPW0ud2lkdGgsYy5oZWlnaHQ9bS5oZWlnaHQsYy5kaW1Db3VudD1tLmRpbUNvdW50fHwxLGMucGl4ZWxUeXBlPW0ucGl4ZWxUeXBlfHxtLmZpbGVJbmZvLnBpeGVsVHlwZSxjLm1hc2s9bykscj4xJiYobyYmaC5wdXNoKG8pLG0uZmlsZUluZm8ubWFzayYmbS5maWxlSW5mby5tYXNrLm51bUJ5dGVzPjAmJnUrKykscysrLGMucGl4ZWxzLnB1c2gobS5waXhlbERhdGEpLGMuc3RhdGlzdGljcy5wdXNoKHttaW5WYWx1ZTptLm1pblZhbHVlLG1heFZhbHVlOm0ubWF4VmFsdWUsbm9EYXRhVmFsdWU6bS5ub0RhdGFWYWx1ZSxkaW1TdGF0czptLmRpbVN0YXRzfSl9dmFyIHcsbCxmO2lmKHI+MSYmdT4xKXtmb3IoZj1jLndpZHRoKmMuaGVpZ2h0LGMuYmFuZE1hc2tzPWgsbz1uZXcgVWludDhBcnJheShmKSxvLnNldChoWzBdKSx3PTE7dzxoLmxlbmd0aDt3KyspZm9yKGk9aFt3XSxsPTA7bDxmO2wrKylvW2xdPW9bbF0maVtsXTtjLm1hc2tEYXRhPW99cmV0dXJuIGN9fTtjb25zdCBzZT17MDo3ZTMsMTo2ZTMsMjo1ZTMsMzo0ZTMsNDozZTMsNToyNTAwLDY6MmUzLDc6MTUwMCw4OjgwMCw5OjUwMCwxMDoyMDAsMTE6MTAwLDEyOjQwLDEzOjEyLDE0OjUsMTU6MiwxNjoxLDE3Oi41LDE4Oi4yLDE5Oi4xLDIwOi4wMX07ZnVuY3Rpb24gZmUoayl7Y29uc3R7aGVpZ2h0OmQsd2lkdGg6eSxwaXhlbHM6Vn09YWUuZGVjb2RlKGspLGE9bmV3IEZsb2F0MzJBcnJheShkKnkpO2ZvcihsZXQgZT0wO2U8YS5sZW5ndGg7ZSsrKWFbZV09VlswXVtlXTtyZXR1cm57YXJyYXk6YSx3aWR0aDp5LGhlaWdodDpkfX1mdW5jdGlvbiBvZShrLGQseSl7bGV0IFY9ZmUoayk7eVsyXS15WzBdPDEmJihWPWxlKFYseSkpO2NvbnN0e2FycmF5OmEsd2lkdGg6ZX09VixzPW5ldyBlZShlKS5jcmVhdGVUaWxlKGEpLHQ9c2VbZF18fDA7cmV0dXJuIHMuZ2V0R2VvbWV0cnlEYXRhKHQpfWZ1bmN0aW9uIGxlKGssZCl7ZnVuY3Rpb24geShzLHQsbixoLGksbyxjLHUpe2NvbnN0IG09bmV3IEZsb2F0MzJBcnJheShpKm8pO2ZvcihsZXQgbD0wO2w8bztsKyspZm9yKGxldCBmPTA7ZjxpO2YrKyl7Y29uc3QgZz0obCtoKSp0KyhmK24pLE09bCppK2Y7bVtNXT1zW2ddfWNvbnN0IHc9bmV3IEZsb2F0MzJBcnJheSh1KmMpO2ZvcihsZXQgbD0wO2w8dTtsKyspZm9yKGxldCBmPTA7ZjxjO2YrKyl7Y29uc3QgZz1sKnUrZixNPU1hdGgucm91bmQoZipvL3UpLHA9TWF0aC5yb3VuZChsKmkvYykqaStNO3dbZ109bVtwXX1yZXR1cm4gd31jb25zdCBWPXVlKGQsay53aWR0aCksYT1WLnN3KzEsZT1WLnNoKzE7cmV0dXJue2FycmF5Onkoay5hcnJheSxrLndpZHRoLFYuc3gsVi5zeSxWLnN3LFYuc2gsYSxlKSx3aWR0aDphLGhlaWdodDplfX1mdW5jdGlvbiB1ZShrLGQpe2NvbnN0IHk9TWF0aC5mbG9vcihrWzBdKmQpLFY9TWF0aC5mbG9vcihrWzFdKmQpLGE9TWF0aC5mbG9vcigoa1syXS1rWzBdKSpkKSxlPU1hdGguZmxvb3IoKGtbM10ta1sxXSkqZCk7cmV0dXJue3N4Onksc3k6VixzdzphLHNoOmV9fXNlbGYub25tZXNzYWdlPWs9Pntjb25zdCBkPWsuZGF0YSx5PW9lKGQuZGVtRGF0YSxkLnosZC5jbGlwQm91bmRzKTtzZWxmLnBvc3RNZXNzYWdlKHkpfX0pKCk7Cg==",oy=i=>Uint8Array.from(atob(i),e=>e.charCodeAt(0)),Bc=typeof self<"u"&&self.Blob&&new Blob([oy(Yc)],{type:"text/javascript;charset=utf-8"});function ay(i){let e;try{if(e=Bc&&(self.URL||self.webkitURL).createObjectURL(Bc),!e)throw"";const t=new Worker(e,{name:i?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;base64,"+Yc,{name:i?.name})}finally{e&&(self.URL||self.webkitURL).revokeObjectURL(e)}}const ly=function(){var i={};i.defaultNoDataValue=-34027999387901484e22,i.decode=function(l,u){u=u||{};var c=u.encodedMaskData||u.encodedMaskData===null,d=r(l,u.inputOffset||0,c),p=u.noDataValue!==null?u.noDataValue:i.defaultNoDataValue,f=e(d,u.pixelType||Float32Array,u.encodedMaskData,p,u.returnMask),y={width:d.width,height:d.height,pixelData:f.resultPixels,minValue:f.minValue,maxValue:d.pixels.maxValue,noDataValue:p};return f.resultMask&&(y.maskData=f.resultMask),u.returnEncodedMask&&d.mask&&(y.encodedMaskData=d.mask.bitset?d.mask.bitset:null),u.returnFileInfo&&(y.fileInfo=t(d),u.computeUsedBitDepths&&(y.fileInfo.bitDepths=n(d))),y};var e=function(l,u,c,d,p){var f=0,y=l.pixels.numBlocksX,v=l.pixels.numBlocksY,_=Math.floor(l.width/y),S=Math.floor(l.height/v),x=2*l.maxZError,P=Number.MAX_VALUE,L;c=c||(l.mask?l.mask.bitset:null);var T,W;T=new u(l.width*l.height),p&&c&&(W=new Uint8Array(l.width*l.height));for(var K=new Float32Array(_*S),O,D,V=0;V<=v;V++){var R=V!==v?S:l.height%v;if(R!==0)for(var C=0;C<=y;C++){var X=C!==y?_:l.width%y;if(X!==0){var Y=V*l.width*S+C*_,Q=l.width-X,j=l.pixels.blocks[f],H,J,ie;j.encoding<2?(j.encoding===0?H=j.rawData:(o(j.stuffedData,j.bitsPerPixel,j.numValidPixels,j.offset,x,K,l.pixels.maxValue),H=K),J=0):j.encoding===2?ie=0:ie=j.offset;var re;if(c)for(D=0;D<R;D++){for(Y&7&&(re=c[Y>>3],re<<=Y&7),O=0;O<X;O++)Y&7||(re=c[Y>>3]),re&128?(W&&(W[Y]=1),L=j.encoding<2?H[J++]:ie,P=P>L?L:P,T[Y++]=L):(W&&(W[Y]=0),T[Y++]=d),re<<=1;Y+=Q}else if(j.encoding<2)for(D=0;D<R;D++){for(O=0;O<X;O++)L=H[J++],P=P>L?L:P,T[Y++]=L;Y+=Q}else for(P=P>ie?ie:P,D=0;D<R;D++){for(O=0;O<X;O++)T[Y++]=ie;Y+=Q}if(j.encoding===1&&J!==j.numValidPixels)throw"Block and Mask do not match";f++}}}return{resultPixels:T,resultMask:W,minValue:P}},t=function(l){return{fileIdentifierString:l.fileIdentifierString,fileVersion:l.fileVersion,imageType:l.imageType,height:l.height,width:l.width,maxZError:l.maxZError,eofOffset:l.eofOffset,mask:l.mask?{numBlocksX:l.mask.numBlocksX,numBlocksY:l.mask.numBlocksY,numBytes:l.mask.numBytes,maxValue:l.mask.maxValue}:null,pixels:{numBlocksX:l.pixels.numBlocksX,numBlocksY:l.pixels.numBlocksY,numBytes:l.pixels.numBytes,maxValue:l.pixels.maxValue,noDataValue:l.noDataValue}}},n=function(l){for(var u=l.pixels.numBlocksX*l.pixels.numBlocksY,c={},d=0;d<u;d++){var p=l.pixels.blocks[d];p.encoding===0?c.float32=!0:p.encoding===1?c[p.bitsPerPixel]=!0:c[0]=!0}return Object.keys(c)},r=function(l,u,c){var d={},p=new Uint8Array(l,u,10);if(d.fileIdentifierString=String.fromCharCode.apply(null,p),d.fileIdentifierString.trim()!=="CntZImage")throw"Unexpected file identifier string: "+d.fileIdentifierString;u+=10;var f=new DataView(l,u,24);if(d.fileVersion=f.getInt32(0,!0),d.imageType=f.getInt32(4,!0),d.height=f.getUint32(8,!0),d.width=f.getUint32(12,!0),d.maxZError=f.getFloat64(16,!0),u+=24,!c)if(f=new DataView(l,u,16),d.mask={},d.mask.numBlocksY=f.getUint32(0,!0),d.mask.numBlocksX=f.getUint32(4,!0),d.mask.numBytes=f.getUint32(8,!0),d.mask.maxValue=f.getFloat32(12,!0),u+=16,d.mask.numBytes>0){var y=new Uint8Array(Math.ceil(d.width*d.height/8));f=new DataView(l,u,d.mask.numBytes);var v=f.getInt16(0,!0),_=2,S=0;do{if(v>0)for(;v--;)y[S++]=f.getUint8(_++);else{var x=f.getUint8(_++);for(v=-v;v--;)y[S++]=x}v=f.getInt16(_,!0),_+=2}while(_<d.mask.numBytes);if(v!==-32768||S<y.length)throw"Unexpected end of mask RLE encoding";d.mask.bitset=y,u+=d.mask.numBytes}else d.mask.numBytes|d.mask.numBlocksY|d.mask.maxValue||(d.mask.bitset=new Uint8Array(Math.ceil(d.width*d.height/8)));f=new DataView(l,u,16),d.pixels={},d.pixels.numBlocksY=f.getUint32(0,!0),d.pixels.numBlocksX=f.getUint32(4,!0),d.pixels.numBytes=f.getUint32(8,!0),d.pixels.maxValue=f.getFloat32(12,!0),u+=16;var P=d.pixels.numBlocksX,L=d.pixels.numBlocksY,T=P+(d.width%P>0?1:0),W=L+(d.height%L>0?1:0);d.pixels.blocks=new Array(T*W);for(var K=0,O=0;O<W;O++)for(var D=0;D<T;D++){var V=0,R=l.byteLength-u;f=new DataView(l,u,Math.min(10,R));var C={};d.pixels.blocks[K++]=C;var X=f.getUint8(0);if(V++,C.encoding=X&63,C.encoding>3)throw"Invalid block encoding ("+C.encoding+")";if(C.encoding===2){u++;continue}if(X!==0&&X!==2){if(X>>=6,C.offsetType=X,X===2)C.offset=f.getInt8(1),V++;else if(X===1)C.offset=f.getInt16(1,!0),V+=2;else if(X===0)C.offset=f.getFloat32(1,!0),V+=4;else throw"Invalid block offset type";if(C.encoding===1)if(X=f.getUint8(V),V++,C.bitsPerPixel=X&63,X>>=6,C.numValidPixelsType=X,X===2)C.numValidPixels=f.getUint8(V),V++;else if(X===1)C.numValidPixels=f.getUint16(V,!0),V+=2;else if(X===0)C.numValidPixels=f.getUint32(V,!0),V+=4;else throw"Invalid valid pixel count type"}if(u+=V,C.encoding!==3){var Y,Q;if(C.encoding===0){var j=(d.pixels.numBytes-1)/4;if(j!==Math.floor(j))throw"uncompressed block has invalid length";Y=new ArrayBuffer(j*4),Q=new Uint8Array(Y),Q.set(new Uint8Array(l,u,j*4));var H=new Float32Array(Y);C.rawData=H,u+=j*4}else if(C.encoding===1){var J=Math.ceil(C.numValidPixels*C.bitsPerPixel/8),ie=Math.ceil(J/4);Y=new ArrayBuffer(ie*4),Q=new Uint8Array(Y),Q.set(new Uint8Array(l,u,J)),C.stuffedData=new Uint32Array(Y),u+=J}}}return d.eofOffset=u,d},o=function(l,u,c,d,p,f,y){var v=(1<<u)-1,_=0,S,x=0,P,L,T=Math.ceil((y-d)/p),W=l.length*4-Math.ceil(u*c/8);for(l[l.length-1]<<=8*W,S=0;S<c;S++){if(x===0&&(L=l[_++],x=32),x>=u)P=L>>>x-u&v,x-=u;else{var K=u-x;P=(L&v)<<K&v,L=l[_++],x=32-K,P+=L>>>x}f[S]=P<T?d+P*p:y}return f};return i}(),cy=function(){var i={unstuff:function(r,o,l,u,c,d,p,f){var y=(1<<l)-1,v=0,_,S=0,x,P,L,T,W=r.length*4-Math.ceil(l*u/8);if(r[r.length-1]<<=8*W,c)for(_=0;_<u;_++)S===0&&(P=r[v++],S=32),S>=l?(x=P>>>S-l&y,S-=l):(L=l-S,x=(P&y)<<L&y,P=r[v++],S=32-L,x+=P>>>S),o[_]=c[x];else for(T=Math.ceil((f-d)/p),_=0;_<u;_++)S===0&&(P=r[v++],S=32),S>=l?(x=P>>>S-l&y,S-=l):(L=l-S,x=(P&y)<<L&y,P=r[v++],S=32-L,x+=P>>>S),o[_]=x<T?d+x*p:f},unstuffLUT:function(r,o,l,u,c,d){var p=(1<<o)-1,f=0,y=0,v=0,_=0,S=0,x,P=[],L=r.length*4-Math.ceil(o*l/8);r[r.length-1]<<=8*L;var T=Math.ceil((d-u)/c);for(y=0;y<l;y++)_===0&&(x=r[f++],_=32),_>=o?(S=x>>>_-o&p,_-=o):(v=o-_,S=(x&p)<<v&p,x=r[f++],_=32-v,S+=x>>>_),P[y]=S<T?u+S*c:d;return P.unshift(u),P},unstuff2:function(r,o,l,u,c,d,p,f){var y=(1<<l)-1,v=0,_,S=0,x=0,P,L,T;if(c)for(_=0;_<u;_++)S===0&&(L=r[v++],S=32,x=0),S>=l?(P=L>>>x&y,S-=l,x+=l):(T=l-S,P=L>>>x&y,L=r[v++],S=32-T,P|=(L&(1<<T)-1)<<l-T,x=T),o[_]=c[P];else{var W=Math.ceil((f-d)/p);for(_=0;_<u;_++)S===0&&(L=r[v++],S=32,x=0),S>=l?(P=L>>>x&y,S-=l,x+=l):(T=l-S,P=L>>>x&y,L=r[v++],S=32-T,P|=(L&(1<<T)-1)<<l-T,x=T),o[_]=P<W?d+P*p:f}return o},unstuffLUT2:function(r,o,l,u,c,d){var p=(1<<o)-1,f=0,y=0,v=0,_=0,S=0,x=0,P,L=[],T=Math.ceil((d-u)/c);for(y=0;y<l;y++)_===0&&(P=r[f++],_=32,x=0),_>=o?(S=P>>>x&p,_-=o,x+=o):(v=o-_,S=P>>>x&p,P=r[f++],_=32-v,S|=(P&(1<<v)-1)<<o-v,x=v),L[y]=S<T?u+S*c:d;return L.unshift(u),L},originalUnstuff:function(r,o,l,u){var c=(1<<l)-1,d=0,p,f=0,y,v,_,S=r.length*4-Math.ceil(l*u/8);for(r[r.length-1]<<=8*S,p=0;p<u;p++)f===0&&(v=r[d++],f=32),f>=l?(y=v>>>f-l&c,f-=l):(_=l-f,y=(v&c)<<_&c,v=r[d++],f=32-_,y+=v>>>f),o[p]=y;return o},originalUnstuff2:function(r,o,l,u){var c=(1<<l)-1,d=0,p,f=0,y=0,v,_,S;for(p=0;p<u;p++)f===0&&(_=r[d++],f=32,y=0),f>=l?(v=_>>>y&c,f-=l,y+=l):(S=l-f,v=_>>>y&c,_=r[d++],f=32-S,v|=(_&(1<<S)-1)<<l-S,y=S),o[p]=v;return o}},e={HUFFMAN_LUT_BITS_MAX:12,computeChecksumFletcher32:function(r){for(var o=65535,l=65535,u=r.length,c=Math.floor(u/2),d=0;c;){var p=c>=359?359:c;c-=p;do o+=r[d++]<<8,l+=o+=r[d++];while(--p);o=(o&65535)+(o>>>16),l=(l&65535)+(l>>>16)}return u&1&&(l+=o+=r[d]<<8),o=(o&65535)+(o>>>16),l=(l&65535)+(l>>>16),(l<<16|o)>>>0},readHeaderInfo:function(r,o){var l=o.ptr,u=new Uint8Array(r,l,6),c={};if(c.fileIdentifierString=String.fromCharCode.apply(null,u),c.fileIdentifierString.lastIndexOf("Lerc2",0)!==0)throw"Unexpected file identifier string (expect Lerc2 ): "+c.fileIdentifierString;l+=6;var d=new DataView(r,l,8),p=d.getInt32(0,!0);c.fileVersion=p,l+=4,p>=3&&(c.checksum=d.getUint32(4,!0),l+=4),d=new DataView(r,l,12),c.height=d.getUint32(0,!0),c.width=d.getUint32(4,!0),l+=8,p>=4?(c.numDims=d.getUint32(8,!0),l+=4):c.numDims=1,d=new DataView(r,l,40),c.numValidPixel=d.getUint32(0,!0),c.microBlockSize=d.getInt32(4,!0),c.blobSize=d.getInt32(8,!0),c.imageType=d.getInt32(12,!0),c.maxZError=d.getFloat64(16,!0),c.zMin=d.getFloat64(24,!0),c.zMax=d.getFloat64(32,!0),l+=40,o.headerInfo=c,o.ptr=l;var f,y;if(p>=3&&(y=p>=4?52:48,f=this.computeChecksumFletcher32(new Uint8Array(r,l-y,c.blobSize-14)),f!==c.checksum))throw"Checksum failed.";return!0},checkMinMaxRanges:function(r,o){var l=o.headerInfo,u=this.getDataTypeArray(l.imageType),c=l.numDims*this.getDataTypeSize(l.imageType),d=this.readSubArray(r,o.ptr,u,c),p=this.readSubArray(r,o.ptr+c,u,c);o.ptr+=2*c;var f,y=!0;for(f=0;f<l.numDims;f++)if(d[f]!==p[f]){y=!1;break}return l.minValues=d,l.maxValues=p,y},readSubArray:function(r,o,l,u){var c;if(l===Uint8Array)c=new Uint8Array(r,o,u);else{var d=new ArrayBuffer(u),p=new Uint8Array(d);p.set(new Uint8Array(r,o,u)),c=new l(d)}return c},readMask:function(r,o){var l=o.ptr,u=o.headerInfo,c=u.width*u.height,d=u.numValidPixel,p=new DataView(r,l,4),f={};if(f.numBytes=p.getUint32(0,!0),l+=4,(d===0||c===d)&&f.numBytes!==0)throw"invalid mask";var y,v;if(d===0)y=new Uint8Array(Math.ceil(c/8)),f.bitset=y,v=new Uint8Array(c),o.pixels.resultMask=v,l+=f.numBytes;else if(f.numBytes>0){y=new Uint8Array(Math.ceil(c/8)),p=new DataView(r,l,f.numBytes);var _=p.getInt16(0,!0),S=2,x=0,P=0;do{if(_>0)for(;_--;)y[x++]=p.getUint8(S++);else for(P=p.getUint8(S++),_=-_;_--;)y[x++]=P;_=p.getInt16(S,!0),S+=2}while(S<f.numBytes);if(_!==-32768||x<y.length)throw"Unexpected end of mask RLE encoding";v=new Uint8Array(c);var L=0,T=0;for(T=0;T<c;T++)T&7?(L=y[T>>3],L<<=T&7):L=y[T>>3],L&128&&(v[T]=1);o.pixels.resultMask=v,f.bitset=y,l+=f.numBytes}return o.ptr=l,o.mask=f,!0},readDataOneSweep:function(r,o,l,u){var c=o.ptr,d=o.headerInfo,p=d.numDims,f=d.width*d.height,y=d.imageType,v=d.numValidPixel*e.getDataTypeSize(y)*p,_,S=o.pixels.resultMask;if(l===Uint8Array)_=new Uint8Array(r,c,v);else{var x=new ArrayBuffer(v),P=new Uint8Array(x);P.set(new Uint8Array(r,c,v)),_=new l(x)}if(_.length===f*p)u?o.pixels.resultPixels=e.swapDimensionOrder(_,f,p,l,!0):o.pixels.resultPixels=_;else{o.pixels.resultPixels=new l(f*p);var L=0,T=0,W=0,K=0;if(p>1){if(u){for(T=0;T<f;T++)if(S[T])for(K=T,W=0;W<p;W++,K+=f)o.pixels.resultPixels[K]=_[L++]}else for(T=0;T<f;T++)if(S[T])for(K=T*p,W=0;W<p;W++)o.pixels.resultPixels[K+W]=_[L++]}else for(T=0;T<f;T++)S[T]&&(o.pixels.resultPixels[T]=_[L++])}return c+=v,o.ptr=c,!0},readHuffmanTree:function(r,o){var l=this.HUFFMAN_LUT_BITS_MAX,u=new DataView(r,o.ptr,16);o.ptr+=16;var c=u.getInt32(0,!0);if(c<2)throw"unsupported Huffman version";var d=u.getInt32(4,!0),p=u.getInt32(8,!0),f=u.getInt32(12,!0);if(p>=f)return!1;var y=new Uint32Array(f-p);e.decodeBits(r,o,y);var v=[],_,S,x,P;for(_=p;_<f;_++)S=_-(_<d?0:d),v[S]={first:y[_-p],second:null};var L=r.byteLength-o.ptr,T=Math.ceil(L/4),W=new ArrayBuffer(T*4),K=new Uint8Array(W);K.set(new Uint8Array(r,o.ptr,L));var O=new Uint32Array(W),D=0,V,R=0;for(V=O[0],_=p;_<f;_++)S=_-(_<d?0:d),P=v[S].first,P>0&&(v[S].second=V<<D>>>32-P,32-D>=P?(D+=P,D===32&&(D=0,R++,V=O[R])):(D+=P-32,R++,V=O[R],v[S].second|=V>>>32-D));var C=0,X=0,Y=new t;for(_=0;_<v.length;_++)v[_]!==void 0&&(C=Math.max(C,v[_].first));C>=l?X=l:X=C;var Q=[],j,H,J,ie,re,le;for(_=p;_<f;_++)if(S=_-(_<d?0:d),P=v[S].first,P>0)if(j=[P,S],P<=X)for(H=v[S].second<<X-P,J=1<<X-P,x=0;x<J;x++)Q[H|x]=j;else for(H=v[S].second,le=Y,ie=P-1;ie>=0;ie--)re=H>>>ie&1,re?(le.right||(le.right=new t),le=le.right):(le.left||(le.left=new t),le=le.left),ie===0&&!le.val&&(le.val=j[1]);return{decodeLut:Q,numBitsLUTQick:X,numBitsLUT:C,tree:Y,stuffedData:O,srcPtr:R,bitPos:D}},readHuffman:function(r,o,l,u){var c=o.headerInfo,d=c.numDims,p=o.headerInfo.height,f=o.headerInfo.width,y=f*p,v=this.readHuffmanTree(r,o),_=v.decodeLut,S=v.tree,x=v.stuffedData,P=v.srcPtr,L=v.bitPos,T=v.numBitsLUTQick,W=v.numBitsLUT,K=o.headerInfo.imageType===0?128:0,O,D,V,R=o.pixels.resultMask,C,X,Y,Q,j,H,J,ie=0;L>0&&(P++,L=0);var re=x[P],le=o.encodeMode===1,de=new l(y*d),ge=de,fe;if(d<2||le){for(fe=0;fe<d;fe++)if(d>1&&(ge=new l(de.buffer,y*fe,y),ie=0),o.headerInfo.numValidPixel===f*p)for(H=0,Q=0;Q<p;Q++)for(j=0;j<f;j++,H++){if(D=0,C=re<<L>>>32-T,X=C,32-L<T&&(C|=x[P+1]>>>64-L-T,X=C),_[X])D=_[X][1],L+=_[X][0];else for(C=re<<L>>>32-W,X=C,32-L<W&&(C|=x[P+1]>>>64-L-W,X=C),O=S,J=0;J<W;J++)if(Y=C>>>W-J-1&1,O=Y?O.right:O.left,!(O.left||O.right)){D=O.val,L=L+J+1;break}L>=32&&(L-=32,P++,re=x[P]),V=D-K,le?(j>0?V+=ie:Q>0?V+=ge[H-f]:V+=ie,V&=255,ge[H]=V,ie=V):ge[H]=V}else for(H=0,Q=0;Q<p;Q++)for(j=0;j<f;j++,H++)if(R[H]){if(D=0,C=re<<L>>>32-T,X=C,32-L<T&&(C|=x[P+1]>>>64-L-T,X=C),_[X])D=_[X][1],L+=_[X][0];else for(C=re<<L>>>32-W,X=C,32-L<W&&(C|=x[P+1]>>>64-L-W,X=C),O=S,J=0;J<W;J++)if(Y=C>>>W-J-1&1,O=Y?O.right:O.left,!(O.left||O.right)){D=O.val,L=L+J+1;break}L>=32&&(L-=32,P++,re=x[P]),V=D-K,le?(j>0&&R[H-1]?V+=ie:Q>0&&R[H-f]?V+=ge[H-f]:V+=ie,V&=255,ge[H]=V,ie=V):ge[H]=V}}else for(H=0,Q=0;Q<p;Q++)for(j=0;j<f;j++)if(H=Q*f+j,!R||R[H])for(fe=0;fe<d;fe++,H+=y){if(D=0,C=re<<L>>>32-T,X=C,32-L<T&&(C|=x[P+1]>>>64-L-T,X=C),_[X])D=_[X][1],L+=_[X][0];else for(C=re<<L>>>32-W,X=C,32-L<W&&(C|=x[P+1]>>>64-L-W,X=C),O=S,J=0;J<W;J++)if(Y=C>>>W-J-1&1,O=Y?O.right:O.left,!(O.left||O.right)){D=O.val,L=L+J+1;break}L>=32&&(L-=32,P++,re=x[P]),V=D-K,ge[H]=V}o.ptr=o.ptr+(P+1)*4+(L>0?4:0),o.pixels.resultPixels=de,d>1&&!u&&(o.pixels.resultPixels=e.swapDimensionOrder(de,y,d,l))},decodeBits:function(r,o,l,u,c){{var d=o.headerInfo,p=d.fileVersion,f=0,y=r.byteLength-o.ptr>=5?5:r.byteLength-o.ptr,v=new DataView(r,o.ptr,y),_=v.getUint8(0);f++;var S=_>>6,x=S===0?4:3-S,P=(_&32)>0,L=_&31,T=0;if(x===1)T=v.getUint8(f),f++;else if(x===2)T=v.getUint16(f,!0),f+=2;else if(x===4)T=v.getUint32(f,!0),f+=4;else throw"Invalid valid pixel count type";var W=2*d.maxZError,K,O,D,V,R,C,X,Y,Q,j=d.numDims>1?d.maxValues[c]:d.zMax;if(P){for(o.counter.lut++,Y=v.getUint8(f),f++,V=Math.ceil((Y-1)*L/8),R=Math.ceil(V/4),O=new ArrayBuffer(R*4),D=new Uint8Array(O),o.ptr+=f,D.set(new Uint8Array(r,o.ptr,V)),X=new Uint32Array(O),o.ptr+=V,Q=0;Y-1>>>Q;)Q++;V=Math.ceil(T*Q/8),R=Math.ceil(V/4),O=new ArrayBuffer(R*4),D=new Uint8Array(O),D.set(new Uint8Array(r,o.ptr,V)),K=new Uint32Array(O),o.ptr+=V,p>=3?C=i.unstuffLUT2(X,L,Y-1,u,W,j):C=i.unstuffLUT(X,L,Y-1,u,W,j),p>=3?i.unstuff2(K,l,Q,T,C):i.unstuff(K,l,Q,T,C)}else o.counter.bitstuffer++,Q=L,o.ptr+=f,Q>0&&(V=Math.ceil(T*Q/8),R=Math.ceil(V/4),O=new ArrayBuffer(R*4),D=new Uint8Array(O),D.set(new Uint8Array(r,o.ptr,V)),K=new Uint32Array(O),o.ptr+=V,p>=3?u==null?i.originalUnstuff2(K,l,Q,T):i.unstuff2(K,l,Q,T,!1,u,W,j):u==null?i.originalUnstuff(K,l,Q,T):i.unstuff(K,l,Q,T,!1,u,W,j))}},readTiles:function(r,o,l,u){var c=o.headerInfo,d=c.width,p=c.height,f=d*p,y=c.microBlockSize,v=c.imageType,_=e.getDataTypeSize(v),S=Math.ceil(d/y),x=Math.ceil(p/y);o.pixels.numBlocksY=x,o.pixels.numBlocksX=S,o.pixels.ptr=0;var P=0,L=0,T=0,W=0,K=0,O=0,D=0,V=0,R=0,C=0,X=0,Y=0,Q=0,j=0,H=0,J=0,ie,re,le,de,ge,fe,Me=new l(y*y),nt=p%y||y,rt=d%y||y,ut,Je,Ue=c.numDims,Ye,it=o.pixels.resultMask,Xe=o.pixels.resultPixels,Tt=c.fileVersion,Dt=Tt>=5?14:15,Te,st=c.zMax,ht;for(T=0;T<x;T++)for(K=T!==x-1?y:nt,W=0;W<S;W++)for(O=W!==S-1?y:rt,X=T*d*y+W*y,Y=d-O,Ye=0;Ye<Ue;Ye++){if(Ue>1?(ht=Xe,X=T*d*y+W*y,Xe=new l(o.pixels.resultPixels.buffer,f*Ye*_,f),st=c.maxValues[Ye]):ht=null,D=r.byteLength-o.ptr,ie=new DataView(r,o.ptr,Math.min(10,D)),re={},J=0,V=ie.getUint8(0),J++,Te=c.fileVersion>=5?V&4:0,R=V>>6&255,C=V>>2&Dt,C!==(W*y>>3&Dt)||Te&&Ye===0)throw"integrity issue";if(fe=V&3,fe>3)throw o.ptr+=J,"Invalid block encoding ("+fe+")";if(fe===2){if(Te)if(it)for(P=0;P<K;P++)for(L=0;L<O;L++)it[X]&&(Xe[X]=ht[X]),X++;else for(P=0;P<K;P++)for(L=0;L<O;L++)Xe[X]=ht[X],X++;o.counter.constant++,o.ptr+=J;continue}else if(fe===0){if(Te)throw"integrity issue";if(o.counter.uncompressed++,o.ptr+=J,Q=K*O*_,j=r.byteLength-o.ptr,Q=Q<j?Q:j,le=new ArrayBuffer(Q%_===0?Q:Q+_-Q%_),de=new Uint8Array(le),de.set(new Uint8Array(r,o.ptr,Q)),ge=new l(le),H=0,it)for(P=0;P<K;P++){for(L=0;L<O;L++)it[X]&&(Xe[X]=ge[H++]),X++;X+=Y}else for(P=0;P<K;P++){for(L=0;L<O;L++)Xe[X++]=ge[H++];X+=Y}o.ptr+=H*_}else if(ut=e.getDataTypeUsed(Te&&v<6?4:v,R),Je=e.getOnePixel(re,J,ut,ie),J+=e.getDataTypeSize(ut),fe===3)if(o.ptr+=J,o.counter.constantoffset++,it)for(P=0;P<K;P++){for(L=0;L<O;L++)it[X]&&(Xe[X]=Te?Math.min(st,ht[X]+Je):Je),X++;X+=Y}else for(P=0;P<K;P++){for(L=0;L<O;L++)Xe[X]=Te?Math.min(st,ht[X]+Je):Je,X++;X+=Y}else if(o.ptr+=J,e.decodeBits(r,o,Me,Je,Ye),J=0,Te)if(it)for(P=0;P<K;P++){for(L=0;L<O;L++)it[X]&&(Xe[X]=Me[J++]+ht[X]),X++;X+=Y}else for(P=0;P<K;P++){for(L=0;L<O;L++)Xe[X]=Me[J++]+ht[X],X++;X+=Y}else if(it)for(P=0;P<K;P++){for(L=0;L<O;L++)it[X]&&(Xe[X]=Me[J++]),X++;X+=Y}else for(P=0;P<K;P++){for(L=0;L<O;L++)Xe[X++]=Me[J++];X+=Y}}Ue>1&&!u&&(o.pixels.resultPixels=e.swapDimensionOrder(o.pixels.resultPixels,f,Ue,l))},formatFileInfo:function(r){return{fileIdentifierString:r.headerInfo.fileIdentifierString,fileVersion:r.headerInfo.fileVersion,imageType:r.headerInfo.imageType,height:r.headerInfo.height,width:r.headerInfo.width,numValidPixel:r.headerInfo.numValidPixel,microBlockSize:r.headerInfo.microBlockSize,blobSize:r.headerInfo.blobSize,maxZError:r.headerInfo.maxZError,pixelType:e.getPixelType(r.headerInfo.imageType),eofOffset:r.eofOffset,mask:r.mask?{numBytes:r.mask.numBytes}:null,pixels:{numBlocksX:r.pixels.numBlocksX,numBlocksY:r.pixels.numBlocksY,maxValue:r.headerInfo.zMax,minValue:r.headerInfo.zMin,noDataValue:r.noDataValue}}},constructConstantSurface:function(r,o){var l=r.headerInfo.zMax,u=r.headerInfo.zMin,c=r.headerInfo.maxValues,d=r.headerInfo.numDims,p=r.headerInfo.height*r.headerInfo.width,f=0,y=0,v=0,_=r.pixels.resultMask,S=r.pixels.resultPixels;if(_)if(d>1){if(o)for(f=0;f<d;f++)for(v=f*p,l=c[f],y=0;y<p;y++)_[y]&&(S[v+y]=l);else for(y=0;y<p;y++)if(_[y])for(v=y*d,f=0;f<d;f++)S[v+d]=c[f]}else for(y=0;y<p;y++)_[y]&&(S[y]=l);else if(d>1&&u!==l)if(o)for(f=0;f<d;f++)for(v=f*p,l=c[f],y=0;y<p;y++)S[v+y]=l;else for(y=0;y<p;y++)for(v=y*d,f=0;f<d;f++)S[v+f]=c[f];else for(y=0;y<p*d;y++)S[y]=l},getDataTypeArray:function(r){var o;switch(r){case 0:o=Int8Array;break;case 1:o=Uint8Array;break;case 2:o=Int16Array;break;case 3:o=Uint16Array;break;case 4:o=Int32Array;break;case 5:o=Uint32Array;break;case 6:o=Float32Array;break;case 7:o=Float64Array;break;default:o=Float32Array}return o},getPixelType:function(r){var o;switch(r){case 0:o="S8";break;case 1:o="U8";break;case 2:o="S16";break;case 3:o="U16";break;case 4:o="S32";break;case 5:o="U32";break;case 6:o="F32";break;case 7:o="F64";break;default:o="F32"}return o},isValidPixelValue:function(r,o){if(o==null)return!1;var l;switch(r){case 0:l=o>=-128&&o<=127;break;case 1:l=o>=0&&o<=255;break;case 2:l=o>=-32768&&o<=32767;break;case 3:l=o>=0&&o<=65536;break;case 4:l=o>=-2147483648&&o<=2147483647;break;case 5:l=o>=0&&o<=4294967296;break;case 6:l=o>=-34027999387901484e22&&o<=34027999387901484e22;break;case 7:l=o>=-17976931348623157e292&&o<=17976931348623157e292;break;default:l=!1}return l},getDataTypeSize:function(r){var o=0;switch(r){case 0:case 1:o=1;break;case 2:case 3:o=2;break;case 4:case 5:case 6:o=4;break;case 7:o=8;break;default:o=r}return o},getDataTypeUsed:function(r,o){var l=r;switch(r){case 2:case 4:l=r-o;break;case 3:case 5:l=r-2*o;break;case 6:o===0?l=r:o===1?l=2:l=1;break;case 7:o===0?l=r:l=r-2*o+1;break;default:l=r;break}return l},getOnePixel:function(r,o,l,u){var c=0;switch(l){case 0:c=u.getInt8(o);break;case 1:c=u.getUint8(o);break;case 2:c=u.getInt16(o,!0);break;case 3:c=u.getUint16(o,!0);break;case 4:c=u.getInt32(o,!0);break;case 5:c=u.getUInt32(o,!0);break;case 6:c=u.getFloat32(o,!0);break;case 7:c=u.getFloat64(o,!0);break;default:throw"the decoder does not understand this pixel type"}return c},swapDimensionOrder:function(r,o,l,u,c){var d=0,p=0,f=0,y=0,v=r;if(l>1)if(v=new u(o*l),c)for(d=0;d<o;d++)for(y=d,f=0;f<l;f++,y+=o)v[y]=r[p++];else for(d=0;d<o;d++)for(y=d,f=0;f<l;f++,y+=o)v[p++]=r[y];return v}},t=function(r,o,l){this.val=r,this.left=o,this.right=l},n={decode:function(r,o){o=o||{};var l=o.noDataValue,u=0,c={};if(c.ptr=o.inputOffset||0,c.pixels={},!!e.readHeaderInfo(r,c)){var d=c.headerInfo,p=d.fileVersion,f=e.getDataTypeArray(d.imageType);if(p>5)throw"unsupported lerc version 2."+p;e.readMask(r,c),d.numValidPixel!==d.width*d.height&&!c.pixels.resultMask&&(c.pixels.resultMask=o.maskData);var y=d.width*d.height;c.pixels.resultPixels=new f(y*d.numDims),c.counter={onesweep:0,uncompressed:0,lut:0,bitstuffer:0,constant:0,constantoffset:0};var v=!o.returnPixelInterleavedDims;if(d.numValidPixel!==0)if(d.zMax===d.zMin)e.constructConstantSurface(c,v);else if(p>=4&&e.checkMinMaxRanges(r,c))e.constructConstantSurface(c,v);else{var _=new DataView(r,c.ptr,2),S=_.getUint8(0);if(c.ptr++,S)e.readDataOneSweep(r,c,f,v);else if(p>1&&d.imageType<=1&&Math.abs(d.maxZError-.5)<1e-5){var x=_.getUint8(1);if(c.ptr++,c.encodeMode=x,x>2||p<4&&x>1)throw"Invalid Huffman flag "+x;x?e.readHuffman(r,c,f,v):e.readTiles(r,c,f,v)}else e.readTiles(r,c,f,v)}c.eofOffset=c.ptr;var P;o.inputOffset?(P=c.headerInfo.blobSize+o.inputOffset-c.ptr,Math.abs(P)>=1&&(c.eofOffset=o.inputOffset+c.headerInfo.blobSize)):(P=c.headerInfo.blobSize-c.ptr,Math.abs(P)>=1&&(c.eofOffset=c.headerInfo.blobSize));var L={width:d.width,height:d.height,pixelData:c.pixels.resultPixels,minValue:d.zMin,maxValue:d.zMax,validPixelCount:d.numValidPixel,dimCount:d.numDims,dimStats:{minValues:d.minValues,maxValues:d.maxValues},maskData:c.pixels.resultMask};if(c.pixels.resultMask&&e.isValidPixelValue(d.imageType,l)){var T=c.pixels.resultMask;for(u=0;u<y;u++)T[u]||(L.pixelData[u]=l);L.noDataValue=l}return c.noDataValue=l,o.returnFileInfo&&(L.fileInfo=e.formatFileInfo(c)),L}},getBandCount:function(r){var o=0,l=0,u={};for(u.ptr=0,u.pixels={};l<r.byteLength-58;)e.readHeaderInfo(r,u),l+=u.headerInfo.blobSize,o++,u.ptr=l;return o}};return n}();var uy=function(){var i=new ArrayBuffer(4),e=new Uint8Array(i),t=new Uint32Array(i);return t[0]=1,e[0]===1}(),hy={decode:function(i,e){if(!uy)throw"Big endian system is not supported.";e=e||{};var t=e.inputOffset||0,n=new Uint8Array(i,t,10),r=String.fromCharCode.apply(null,n),o,l;if(r.trim()==="CntZImage")o=ly,l=1;else if(r.substring(0,5)==="Lerc2")o=cy,l=2;else throw"Unexpected file identifier string: "+r;for(var u=0,c=i.byteLength-10,d,p=[],f,y,v={width:0,height:0,pixels:[],pixelType:e.pixelType,mask:null,statistics:[]},_=0;t<c;){var S=o.decode(i,{inputOffset:t,encodedMaskData:d,maskData:y,returnMask:u===0,returnEncodedMask:u===0,returnFileInfo:!0,returnPixelInterleavedDims:e.returnPixelInterleavedDims,pixelType:e.pixelType||null,noDataValue:e.noDataValue||null});t=S.fileInfo.eofOffset,y=S.maskData,u===0&&(d=S.encodedMaskData,v.width=S.width,v.height=S.height,v.dimCount=S.dimCount||1,v.pixelType=S.pixelType||S.fileInfo.pixelType,v.mask=y),l>1&&(y&&p.push(y),S.fileInfo.mask&&S.fileInfo.mask.numBytes>0&&_++),u++,v.pixels.push(S.pixelData),v.statistics.push({minValue:S.minValue,maxValue:S.maxValue,noDataValue:S.noDataValue,dimStats:S.dimStats})}var x,P,L;if(l>1&&_>1){for(L=v.width*v.height,v.bandMasks=p,y=new Uint8Array(L),y.set(p[0]),x=1;x<p.length;x++)for(f=p[x],P=0;P<L;P++)y[P]=y[P]&f[P];v.maskData=y}return v}};const dy={0:7e3,1:6e3,2:5e3,3:4e3,4:3e3,5:2500,6:2e3,7:1500,8:800,9:500,10:200,11:100,12:40,13:12,14:5,15:2,16:1,17:.5,18:.2,19:.1,20:.01};function fy(i){const{height:e,width:t,pixels:n}=hy.decode(i),r=new Float32Array(e*t);for(let o=0;o<r.length;o++)r[o]=n[0][o];return{array:r,width:t,height:e}}function py(i,e,t){let n=fy(i);t[2]-t[0]<1&&(n=my(n,t));const{array:r,width:o}=n,u=new Dc(o).createTile(r),c=dy[e]||0;return u.getGeometryData(c)}function my(i,e){function t(u,c,d,p,f,y,v,_){const S=new Float32Array(f*y);for(let P=0;P<y;P++)for(let L=0;L<f;L++){const T=(P+p)*c+(L+d),W=P*f+L;S[W]=u[T]}const x=new Float32Array(_*v);for(let P=0;P<_;P++)for(let L=0;L<v;L++){const T=P*_+L,W=Math.round(L*y/_),O=Math.round(P*f/v)*f+W;x[T]=S[O]}return x}const n=gy(e,i.width),r=n.sw+1,o=n.sh+1;return{array:t(i.array,i.width,n.sx,n.sy,n.sw,n.sh,r,o),width:r,height:o}}function gy(i,e){const t=Math.floor(i[0]*e),n=Math.floor(i[1]*e),r=Math.floor((i[2]-i[0])*e),o=Math.floor((i[3]-i[1])*e);return{sx:t,sy:n,sw:r,sh:o}}var yy=Object.defineProperty,vy=(i,e,t)=>e in i?yy(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,cs=(i,e,t)=>vy(i,typeof e!="symbol"?e+"":e,t);const wy=10;class _y extends Jo{constructor(){super(),cs(this,"info",{version:"0.10.0",description:"Tile LERC terrain loader. It can load ArcGis-lerc format terrain data."}),cs(this,"dataType","lerc"),cs(this,"fileLoader",new m.FileLoader(Fe.manager)),cs(this,"_workerPool",new Ao(0)),this.fileLoader.setResponseType("arraybuffer"),this._workerPool.setWorkerCreator(()=>new ay)}async doLoad(e,t){this._workerPool.pool===0&&this._workerPool.setWorkerLimit(wy);const{z:n,bounds:r}=t,o=await this.fileLoader.loadAsync(e).catch(()=>new Float32Array(256*256)),l=py(o,n,r);return new Vr().setData(l)}}qo(new _y);const jc="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGModCl7cmV0dXJuIGEodC5kYXRhKX1mdW5jdGlvbiBhKHQpe2Z1bmN0aW9uIG4oZSx1KXtjb25zdCByPXUqNCxbaSxmLGcsbF09ZS5zbGljZShyLHIrNCk7cmV0dXJuIGw9PT0wPzA6LTFlNCsoaTw8MTZ8Zjw8OHxnKSouMX1jb25zdCBvPXQubGVuZ3RoPj4+MixzPW5ldyBGbG9hdDMyQXJyYXkobyk7Zm9yKGxldCBlPTA7ZTxvO2UrKylzW2VdPW4odCxlKTtyZXR1cm4gc31zZWxmLm9ubWVzc2FnZT10PT57Y29uc3Qgbj1jKHQuZGF0YS5pbWdEYXRhKTtzZWxmLnBvc3RNZXNzYWdlKG4pfX0pKCk7Cg==",by=i=>Uint8Array.from(atob(i),e=>e.charCodeAt(0)),Jc=typeof self<"u"&&self.Blob&&new Blob([by(jc)],{type:"text/javascript;charset=utf-8"});function xy(i){let e;try{if(e=Jc&&(self.URL||self.webkitURL).createObjectURL(Jc),!e)throw"";const t=new Worker(e,{name:i?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;base64,"+jc,{name:i?.name})}finally{e&&(self.URL||self.webkitURL).revokeObjectURL(e)}}var Ly=Object.defineProperty,My=(i,e,t)=>e in i?Ly(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,us=(i,e,t)=>My(i,typeof e!="symbol"?e+"":e,t);const Sy=10;class Py extends Jo{constructor(){super(),us(this,"info",{version:"0.10.0",description:"Mapbox-RGB terrain loader, It can load Mapbox-RGB terrain data."}),us(this,"dataType","terrain-rgb"),us(this,"imageLoader",new m.ImageLoader(Fe.manager)),us(this,"_workerPool",new Ao(0)),this._workerPool.setWorkerCreator(()=>new xy)}async doLoad(e,t){const n=await this.imageLoader.loadAsync(e).catch(c=>new Image),r=m.MathUtils.clamp((t.z+2)*3,2,64),o=Ty(n,t.bounds,r);let l;this._workerPool.pool===0&&this._workerPool.setWorkerLimit(Sy),l=(await this._workerPool.postMessage({imgData:o},[o.data.buffer])).data;const u=new Vr;return u.setData(l),u}}function Ty(i,e,t){const n=No(e,i.width);t=Math.min(t,n.sw);const o=new OffscreenCanvas(t,t).getContext("2d");return o.imageSmoothingEnabled=!1,o.drawImage(i,n.sx,n.sy,n.sw,n.sh,0,0,t,t),o.getImageData(0,0,t,t)}qo(new Py);function Rn(i,e){this.x=i,this.y=e}Rn.prototype={clone(){return new Rn(this.x,this.y)},add(i){return this.clone()._add(i)},sub(i){return this.clone()._sub(i)},multByPoint(i){return this.clone()._multByPoint(i)},divByPoint(i){return this.clone()._divByPoint(i)},mult(i){return this.clone()._mult(i)},div(i){return this.clone()._div(i)},rotate(i){return this.clone()._rotate(i)},rotateAround(i,e){return this.clone()._rotateAround(i,e)},matMult(i){return this.clone()._matMult(i)},unit(){return this.clone()._unit()},perp(){return this.clone()._perp()},round(){return this.clone()._round()},mag(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals(i){return this.x===i.x&&this.y===i.y},dist(i){return Math.sqrt(this.distSqr(i))},distSqr(i){const e=i.x-this.x,t=i.y-this.y;return e*e+t*t},angle(){return Math.atan2(this.y,this.x)},angleTo(i){return Math.atan2(this.y-i.y,this.x-i.x)},angleWith(i){return this.angleWithSep(i.x,i.y)},angleWithSep(i,e){return Math.atan2(this.x*e-this.y*i,this.x*i+this.y*e)},_matMult(i){const e=i[0]*this.x+i[1]*this.y,t=i[2]*this.x+i[3]*this.y;return this.x=e,this.y=t,this},_add(i){return this.x+=i.x,this.y+=i.y,this},_sub(i){return this.x-=i.x,this.y-=i.y,this},_mult(i){return this.x*=i,this.y*=i,this},_div(i){return this.x/=i,this.y/=i,this},_multByPoint(i){return this.x*=i.x,this.y*=i.y,this},_divByPoint(i){return this.x/=i.x,this.y/=i.y,this},_unit(){return this._div(this.mag()),this},_perp(){const i=this.y;return this.y=this.x,this.x=-i,this},_rotate(i){const e=Math.cos(i),t=Math.sin(i),n=e*this.x-t*this.y,r=t*this.x+e*this.y;return this.x=n,this.y=r,this},_rotateAround(i,e){const t=Math.cos(i),n=Math.sin(i),r=e.x+t*(this.x-e.x)-n*(this.y-e.y),o=e.y+n*(this.x-e.x)+t*(this.y-e.y);return this.x=r,this.y=o,this},_round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},constructor:Rn},Rn.convert=function(i){if(i instanceof Rn)return i;if(Array.isArray(i))return new Rn(+i[0],+i[1]);if(i.x!==void 0&&i.y!==void 0)return new Rn(+i.x,+i.y);throw new Error("Expected [x, y] or {x, y} point format")};class Qc{constructor(e,t,n,r,o){this.properties={},this.extent=n,this.type=0,this.id=void 0,this._pbf=e,this._geometry=-1,this._keys=r,this._values=o,e.readFields(Zy,this,t)}loadGeometry(){const e=this._pbf;e.pos=this._geometry;const t=e.readVarint()+e.pos,n=[];let r,o=1,l=0,u=0,c=0;for(;e.pos<t;){if(l<=0){const d=e.readVarint();o=d&7,l=d>>3}if(l--,o===1||o===2)u+=e.readSVarint(),c+=e.readSVarint(),o===1&&(r&&n.push(r),r=[]),r&&r.push(new Rn(u,c));else if(o===7)r&&r.push(r[0].clone());else throw new Error(`unknown command ${o}`)}return r&&n.push(r),n}bbox(){const e=this._pbf;e.pos=this._geometry;const t=e.readVarint()+e.pos;let n=1,r=0,o=0,l=0,u=1/0,c=-1/0,d=1/0,p=-1/0;for(;e.pos<t;){if(r<=0){const f=e.readVarint();n=f&7,r=f>>3}if(r--,n===1||n===2)o+=e.readSVarint(),l+=e.readSVarint(),o<u&&(u=o),o>c&&(c=o),l<d&&(d=l),l>p&&(p=l);else if(n!==7)throw new Error(`unknown command ${n}`)}return[u,d,c,p]}toGeoJSON(e,t,n){const r=this.extent*Math.pow(2,n),o=this.extent*e,l=this.extent*t,u=this.loadGeometry();function c(y){return[(y.x+o)*360/r-180,360/Math.PI*Math.atan(Math.exp((1-(y.y+l)*2/r)*Math.PI))-90]}function d(y){return y.map(c)}let p;if(this.type===1){const y=[];for(const _ of u)y.push(_[0]);const v=d(y);p=y.length===1?{type:"Point",coordinates:v[0]}:{type:"MultiPoint",coordinates:v}}else if(this.type===2){const y=u.map(d);p=y.length===1?{type:"LineString",coordinates:y[0]}:{type:"MultiLineString",coordinates:y}}else if(this.type===3){const y=Wy(u),v=[];for(const _ of y)v.push(_.map(d));p=v.length===1?{type:"Polygon",coordinates:v[0]}:{type:"MultiPolygon",coordinates:v}}else throw new Error("unknown feature type");const f={type:"Feature",geometry:p,properties:this.properties};return this.id!=null&&(f.id=this.id),f}}Qc.types=["Unknown","Point","LineString","Polygon"];function Zy(i,e,t){i===1?e.id=t.readVarint():i===2?Gy(t,e):i===3?e.type=t.readVarint():i===4&&(e._geometry=t.pos)}function Gy(i,e){const t=i.readVarint()+i.pos;for(;i.pos<t;){const n=e._keys[i.readVarint()],r=e._values[i.readVarint()];e.properties[n]=r}}function Wy(i){const e=i.length;if(e<=1)return[i];const t=[];let n,r;for(let o=0;o<e;o++){const l=Cy(i[o]);l!==0&&(r===void 0&&(r=l<0),r===l<0?(n&&t.push(n),n=[i[o]]):n&&n.push(i[o]))}return n&&t.push(n),t}function Cy(i){let e=0;for(let t=0,n=i.length,r=n-1,o,l;t<n;r=t++)o=i[t],l=i[r],e+=(l.x-o.x)*(o.y+l.y);return e}let Iy=class{constructor(e,t){this.version=1,this.name="",this.extent=4096,this.length=0,this._pbf=e,this._keys=[],this._values=[],this._features=[],e.readFields(Vy,this,t),this.length=this._features.length}feature(e){if(e<0||e>=this._features.length)throw new Error("feature index out of bounds");this._pbf.pos=this._features[e];const t=this._pbf.readVarint()+this._pbf.pos;return new Qc(this._pbf,t,this.extent,this._keys,this._values)}};function Vy(i,e,t){i===15?e.version=t.readVarint():i===1?e.name=t.readString():i===5?e.extent=t.readVarint():i===2?e._features.push(t.pos):i===3?e._keys.push(t.readString()):i===4&&e._values.push(Ay(t))}function Ay(i){let e=null;const t=i.readVarint()+i.pos;for(;i.pos<t;){const n=i.readVarint()>>3;e=n===1?i.readString():n===2?i.readFloat():n===3?i.readDouble():n===4?i.readVarint64():n===5?i.readVarint():n===6?i.readSVarint():n===7?i.readBoolean():null}if(e==null)throw new Error("unknown feature value");return e}class Fy{constructor(e,t){this.layers=e.readFields(Xy,{},t)}}function Xy(i,e,t){if(i===3){const n=new Iy(t,t.readVarint()+t.pos);n.length&&(e[n.name]=n)}}const ea=65536*65536,Hc=1/ea,Oy=12,Ec=typeof TextDecoder>"u"?null:new TextDecoder("utf-8"),ta=0,hs=1,vi=2,ds=5;class zy{constructor(e=new Uint8Array(16)){this.buf=ArrayBuffer.isView(e)?e:new Uint8Array(e),this.dataView=new DataView(this.buf.buffer),this.pos=0,this.type=0,this.length=this.buf.length}readFields(e,t,n=this.length){for(;this.pos<n;){const r=this.readVarint(),o=r>>3,l=this.pos;this.type=r&7,e(o,t,this),this.pos===l&&this.skip(r)}return t}readMessage(e,t){return this.readFields(e,t,this.readVarint()+this.pos)}readFixed32(){const e=this.dataView.getUint32(this.pos,!0);return this.pos+=4,e}readSFixed32(){const e=this.dataView.getInt32(this.pos,!0);return this.pos+=4,e}readFixed64(){const e=this.dataView.getUint32(this.pos,!0)+this.dataView.getUint32(this.pos+4,!0)*ea;return this.pos+=8,e}readSFixed64(){const e=this.dataView.getUint32(this.pos,!0)+this.dataView.getInt32(this.pos+4,!0)*ea;return this.pos+=8,e}readFloat(){const e=this.dataView.getFloat32(this.pos,!0);return this.pos+=4,e}readDouble(){const e=this.dataView.getFloat64(this.pos,!0);return this.pos+=8,e}readVarint(e){const t=this.buf;let n,r;return r=t[this.pos++],n=r&127,r<128||(r=t[this.pos++],n|=(r&127)<<7,r<128)||(r=t[this.pos++],n|=(r&127)<<14,r<128)||(r=t[this.pos++],n|=(r&127)<<21,r<128)?n:(r=t[this.pos],n|=(r&15)<<28,Dy(n,e,this))}readVarint64(){return this.readVarint(!0)}readSVarint(){const e=this.readVarint();return e%2===1?(e+1)/-2:e/2}readBoolean(){return!!this.readVarint()}readString(){const e=this.readVarint()+this.pos,t=this.pos;return this.pos=e,e-t>=Oy&&Ec?Ec.decode(this.buf.subarray(t,e)):$y(this.buf,t,e)}readBytes(){const e=this.readVarint()+this.pos,t=this.buf.subarray(this.pos,e);return this.pos=e,t}readPackedVarint(e=[],t){const n=this.readPackedEnd();for(;this.pos<n;)e.push(this.readVarint(t));return e}readPackedSVarint(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readSVarint());return e}readPackedBoolean(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readBoolean());return e}readPackedFloat(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readFloat());return e}readPackedDouble(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readDouble());return e}readPackedFixed32(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readFixed32());return e}readPackedSFixed32(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readSFixed32());return e}readPackedFixed64(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readFixed64());return e}readPackedSFixed64(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readSFixed64());return e}readPackedEnd(){return this.type===vi?this.readVarint()+this.pos:this.pos+1}skip(e){const t=e&7;if(t===ta)for(;this.buf[this.pos++]>127;);else if(t===vi)this.pos=this.readVarint()+this.pos;else if(t===ds)this.pos+=4;else if(t===hs)this.pos+=8;else throw new Error(`Unimplemented type: ${t}`)}writeTag(e,t){this.writeVarint(e<<3|t)}realloc(e){let t=this.length||16;for(;t<this.pos+e;)t*=2;if(t!==this.length){const n=new Uint8Array(t);n.set(this.buf),this.buf=n,this.dataView=new DataView(n.buffer),this.length=t}}finish(){return this.length=this.pos,this.pos=0,this.buf.subarray(0,this.length)}writeFixed32(e){this.realloc(4),this.dataView.setInt32(this.pos,e,!0),this.pos+=4}writeSFixed32(e){this.realloc(4),this.dataView.setInt32(this.pos,e,!0),this.pos+=4}writeFixed64(e){this.realloc(8),this.dataView.setInt32(this.pos,e&-1,!0),this.dataView.setInt32(this.pos+4,Math.floor(e*Hc),!0),this.pos+=8}writeSFixed64(e){this.realloc(8),this.dataView.setInt32(this.pos,e&-1,!0),this.dataView.setInt32(this.pos+4,Math.floor(e*Hc),!0),this.pos+=8}writeVarint(e){if(e=+e||0,e>268435455||e<0){Ky(e,this);return}this.realloc(4),this.buf[this.pos++]=e&127|(e>127?128:0),!(e<=127)&&(this.buf[this.pos++]=(e>>>=7)&127|(e>127?128:0),!(e<=127)&&(this.buf[this.pos++]=(e>>>=7)&127|(e>127?128:0),!(e<=127)&&(this.buf[this.pos++]=e>>>7&127)))}writeSVarint(e){this.writeVarint(e<0?-e*2-1:e*2)}writeBoolean(e){this.writeVarint(+e)}writeString(e){e=String(e),this.realloc(e.length*4),this.pos++;const t=this.pos;this.pos=qy(this.buf,e,this.pos);const n=this.pos-t;n>=128&&$c(t,n,this),this.pos=t-1,this.writeVarint(n),this.pos+=n}writeFloat(e){this.realloc(4),this.dataView.setFloat32(this.pos,e,!0),this.pos+=4}writeDouble(e){this.realloc(8),this.dataView.setFloat64(this.pos,e,!0),this.pos+=8}writeBytes(e){const t=e.length;this.writeVarint(t),this.realloc(t);for(let n=0;n<t;n++)this.buf[this.pos++]=e[n]}writeRawMessage(e,t){this.pos++;const n=this.pos;e(t,this);const r=this.pos-n;r>=128&&$c(n,r,this),this.pos=n-1,this.writeVarint(r),this.pos+=r}writeMessage(e,t,n){this.writeTag(e,vi),this.writeRawMessage(t,n)}writePackedVarint(e,t){t.length&&this.writeMessage(e,Ny,t)}writePackedSVarint(e,t){t.length&&this.writeMessage(e,Uy,t)}writePackedBoolean(e,t){t.length&&this.writeMessage(e,jy,t)}writePackedFloat(e,t){t.length&&this.writeMessage(e,Yy,t)}writePackedDouble(e,t){t.length&&this.writeMessage(e,By,t)}writePackedFixed32(e,t){t.length&&this.writeMessage(e,Jy,t)}writePackedSFixed32(e,t){t.length&&this.writeMessage(e,Qy,t)}writePackedFixed64(e,t){t.length&&this.writeMessage(e,Hy,t)}writePackedSFixed64(e,t){t.length&&this.writeMessage(e,Ey,t)}writeBytesField(e,t){this.writeTag(e,vi),this.writeBytes(t)}writeFixed32Field(e,t){this.writeTag(e,ds),this.writeFixed32(t)}writeSFixed32Field(e,t){this.writeTag(e,ds),this.writeSFixed32(t)}writeFixed64Field(e,t){this.writeTag(e,hs),this.writeFixed64(t)}writeSFixed64Field(e,t){this.writeTag(e,hs),this.writeSFixed64(t)}writeVarintField(e,t){this.writeTag(e,ta),this.writeVarint(t)}writeSVarintField(e,t){this.writeTag(e,ta),this.writeSVarint(t)}writeStringField(e,t){this.writeTag(e,vi),this.writeString(t)}writeFloatField(e,t){this.writeTag(e,ds),this.writeFloat(t)}writeDoubleField(e,t){this.writeTag(e,hs),this.writeDouble(t)}writeBooleanField(e,t){this.writeVarintField(e,+t)}}function Dy(i,e,t){const n=t.buf;let r,o;if(o=n[t.pos++],r=(o&112)>>4,o<128||(o=n[t.pos++],r|=(o&127)<<3,o<128)||(o=n[t.pos++],r|=(o&127)<<10,o<128)||(o=n[t.pos++],r|=(o&127)<<17,o<128)||(o=n[t.pos++],r|=(o&127)<<24,o<128)||(o=n[t.pos++],r|=(o&1)<<31,o<128))return Ar(i,r,e);throw new Error("Expected varint not more than 10 bytes")}function Ar(i,e,t){return t?e*4294967296+(i>>>0):(e>>>0)*4294967296+(i>>>0)}function Ky(i,e){let t,n;if(i>=0?(t=i%4294967296|0,n=i/4294967296|0):(t=~(-i%4294967296),n=~(-i/4294967296),t^4294967295?t=t+1|0:(t=0,n=n+1|0)),i>=18446744073709552e3||i<-18446744073709552e3)throw new Error("Given varint doesn't fit into 10 bytes");e.realloc(10),ky(t,n,e),Ry(n,e)}function ky(i,e,t){t.buf[t.pos++]=i&127|128,i>>>=7,t.buf[t.pos++]=i&127|128,i>>>=7,t.buf[t.pos++]=i&127|128,i>>>=7,t.buf[t.pos++]=i&127|128,i>>>=7,t.buf[t.pos]=i&127}function Ry(i,e){const t=(i&7)<<4;e.buf[e.pos++]|=t|((i>>>=3)?128:0),i&&(e.buf[e.pos++]=i&127|((i>>>=7)?128:0),i&&(e.buf[e.pos++]=i&127|((i>>>=7)?128:0),i&&(e.buf[e.pos++]=i&127|((i>>>=7)?128:0),i&&(e.buf[e.pos++]=i&127|((i>>>=7)?128:0),i&&(e.buf[e.pos++]=i&127)))))}function $c(i,e,t){const n=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(Math.LN2*7));t.realloc(n);for(let r=t.pos-1;r>=i;r--)t.buf[r+n]=t.buf[r]}function Ny(i,e){for(let t=0;t<i.length;t++)e.writeVarint(i[t])}function Uy(i,e){for(let t=0;t<i.length;t++)e.writeSVarint(i[t])}function Yy(i,e){for(let t=0;t<i.length;t++)e.writeFloat(i[t])}function By(i,e){for(let t=0;t<i.length;t++)e.writeDouble(i[t])}function jy(i,e){for(let t=0;t<i.length;t++)e.writeBoolean(i[t])}function Jy(i,e){for(let t=0;t<i.length;t++)e.writeFixed32(i[t])}function Qy(i,e){for(let t=0;t<i.length;t++)e.writeSFixed32(i[t])}function Hy(i,e){for(let t=0;t<i.length;t++)e.writeFixed64(i[t])}function Ey(i,e){for(let t=0;t<i.length;t++)e.writeSFixed64(i[t])}function $y(i,e,t){let n="",r=e;for(;r<t;){const o=i[r];let l=null,u=o>239?4:o>223?3:o>191?2:1;if(r+u>t)break;let c,d,p;u===1?o<128&&(l=o):u===2?(c=i[r+1],(c&192)===128&&(l=(o&31)<<6|c&63,l<=127&&(l=null))):u===3?(c=i[r+1],d=i[r+2],(c&192)===128&&(d&192)===128&&(l=(o&15)<<12|(c&63)<<6|d&63,(l<=2047||l>=55296&&l<=57343)&&(l=null))):u===4&&(c=i[r+1],d=i[r+2],p=i[r+3],(c&192)===128&&(d&192)===128&&(p&192)===128&&(l=(o&15)<<18|(c&63)<<12|(d&63)<<6|p&63,(l<=65535||l>=1114112)&&(l=null))),l===null?(l=65533,u=1):l>65535&&(l-=65536,n+=String.fromCharCode(l>>>10&1023|55296),l=56320|l&1023),n+=String.fromCharCode(l),r+=u}return n}function qy(i,e,t){for(let n=0,r,o;n<e.length;n++){if(r=e.charCodeAt(n),r>55295&&r<57344)if(o)if(r<56320){i[t++]=239,i[t++]=191,i[t++]=189,o=r;continue}else r=o-55296<<10|r-56320|65536,o=null;else{r>56319||n+1===e.length?(i[t++]=239,i[t++]=191,i[t++]=189):o=r;continue}else o&&(i[t++]=239,i[t++]=191,i[t++]=189,o=null);r<128?i[t++]=r:(r<2048?i[t++]=r>>6|192:(r<65536?i[t++]=r>>12|224:(i[t++]=r>>18|240,i[t++]=r>>12&63|128),i[t++]=r>>6&63|128),i[t++]=r&63|128)}return t}var ev=Object.defineProperty,tv=(i,e,t)=>e in i?ev(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,na=(i,e,t)=>tv(i,typeof e!="symbol"?e+"":e,t);class nv extends Ho{constructor(){super(),na(this,"dataType","mvt"),na(this,"_loader",new m.FileLoader(Fe.manager)),na(this,"_render",new kc),console.log("MVTLoader constructor"),this._loader.setResponseType("arraybuffer")}async doLoad(e,t){const n=await this._loader.loadAsync(e),r=new Fy(new zy(n)),o=this.drawTile(r,t.source.style,t.z);return console.log("drawTile",o),new m.CanvasTexture(o)}drawTile(e,t,n){const u=new OffscreenCanvas(256,256).getContext("2d");if(u){if(t)for(const c in t.layer){const d=t.layer[c];if(t&&(n<(d.minLevel??1)||n>(d.maxLevel??20)))continue;const p=e.layers[c];if(p){const f=256/p.extent;this._renderLayer(u,p,d,f)}}else for(const c in e.layers){const d=e.layers[c],p=256/d.extent;this._renderLayer(u,d,void 0,p)}return u.canvas}else throw new Error("Canvas context is not available")}_renderLayer(e,t,n,r=1){e.save();for(let o=0;o<t.length;o++){const l=t.feature(o);this._renderFeature(e,l,n,r)}return e.restore(),this}_renderFeature(e,t,n={},r=1){const o=[tt.Unknown,tt.Point,tt.Linestring,tt.Polygon][t.type],l={geometry:t.loadGeometry(),properties:t.properties};this._render.render(e,o,l,n,r)}_convertToGeoJSONFeature(e,t){const n=this._convertGeometryToGeoJSON(e.geometry,t);return n?{type:"Feature",geometry:n,properties:e.properties||{},id:e.id}:null}_convertGeometryToGeoJSON(e,t){switch(t){case tt.Point:return this._convertPointGeometry(e);case tt.Linestring:return this._convertLineGeometry(e);case tt.Polygon:return this._convertPolygonGeometry(e);default:return console.warn("未知的几何类型:",t),null}}_convertPointGeometry(e){const t=[];for(const n of e)for(const r of n)t.push([r.x,r.y]);return t.length===0?null:t.length===1?{type:"Point",coordinates:t[0]}:{type:"MultiPoint",coordinates:t}}_convertLineGeometry(e){const t=[];for(const n of e){const r=[];for(const o of n)r.push([o.x,o.y]);r.length>=2&&t.push(r)}return t.length===0?null:t.length===1?{type:"LineString",coordinates:t[0]}:{type:"MultiLineString",coordinates:t}}_convertPolygonGeometry(e){const t=[];let n=[];for(const r of e){const o=[];for(const l of r)o.push([l.x,l.y]);o.length>=4&&(this._isRingClockwise(o)||n.length===0?(n.length>0&&t.push(n),n=[o]):n.push(o))}return n.length>0&&t.push(n),t.length===0?null:t.length===1?{type:"Polygon",coordinates:t[0]}:{type:"MultiPolygon",coordinates:t}}_isRingClockwise(e){let t=0;for(let n=0;n<e.length-1;n++){const[r,o]=e[n],[l,u]=e[n+1];t+=(l-r)*(u+o)}return t>0}convertVectorTileToGeoJSON(e){const t=[];for(const n in e.layers){const r=e.layers[n];for(let o=0;o<r.length;o++){const l=r.feature(o),u=[tt.Unknown,tt.Point,tt.Linestring,tt.Polygon][l.type],c={geometry:l.loadGeometry(),properties:l.properties},d=this._convertToGeoJSONFeature(c,u);d&&(d.properties._layer=n,t.push(d))}}return{type:"FeatureCollection",features:t}}}$o(new nv);const qc="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0IF89MjMyODMwNjQzNjUzODY5NjNlLTI2LG09MTIsUD10eXBlb2YgVGV4dERlY29kZXI+InUiP251bGw6bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpLGc9MCx5PTEsRj0yLHA9NTtjbGFzcyBNe2NvbnN0cnVjdG9yKHQ9bmV3IFVpbnQ4QXJyYXkoMTYpKXt0aGlzLmJ1Zj1BcnJheUJ1ZmZlci5pc1ZpZXcodCk/dDpuZXcgVWludDhBcnJheSh0KSx0aGlzLmRhdGFWaWV3PW5ldyBEYXRhVmlldyh0aGlzLmJ1Zi5idWZmZXIpLHRoaXMucG9zPTAsdGhpcy50eXBlPTAsdGhpcy5sZW5ndGg9dGhpcy5idWYubGVuZ3RofXJlYWRGaWVsZHModCxlLHI9dGhpcy5sZW5ndGgpe2Zvcig7dGhpcy5wb3M8cjspe2NvbnN0IHM9dGhpcy5yZWFkVmFyaW50KCksbj1zPj4zLG89dGhpcy5wb3M7dGhpcy50eXBlPXMmNyx0KG4sZSx0aGlzKSx0aGlzLnBvcz09PW8mJnRoaXMuc2tpcChzKX1yZXR1cm4gZX1yZWFkTWVzc2FnZSh0LGUpe3JldHVybiB0aGlzLnJlYWRGaWVsZHModCxlLHRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zKX1yZWFkRml4ZWQzMigpe2NvbnN0IHQ9dGhpcy5kYXRhVmlldy5nZXRVaW50MzIodGhpcy5wb3MsITApO3JldHVybiB0aGlzLnBvcys9NCx0fXJlYWRTRml4ZWQzMigpe2NvbnN0IHQ9dGhpcy5kYXRhVmlldy5nZXRJbnQzMih0aGlzLnBvcywhMCk7cmV0dXJuIHRoaXMucG9zKz00LHR9cmVhZEZpeGVkNjQoKXtjb25zdCB0PXRoaXMuZGF0YVZpZXcuZ2V0VWludDMyKHRoaXMucG9zLCEwKSt0aGlzLmRhdGFWaWV3LmdldFVpbnQzMih0aGlzLnBvcys0LCEwKSo0Mjk0OTY3Mjk2O3JldHVybiB0aGlzLnBvcys9OCx0fXJlYWRTRml4ZWQ2NCgpe2NvbnN0IHQ9dGhpcy5kYXRhVmlldy5nZXRVaW50MzIodGhpcy5wb3MsITApK3RoaXMuZGF0YVZpZXcuZ2V0SW50MzIodGhpcy5wb3MrNCwhMCkqNDI5NDk2NzI5NjtyZXR1cm4gdGhpcy5wb3MrPTgsdH1yZWFkRmxvYXQoKXtjb25zdCB0PXRoaXMuZGF0YVZpZXcuZ2V0RmxvYXQzMih0aGlzLnBvcywhMCk7cmV0dXJuIHRoaXMucG9zKz00LHR9cmVhZERvdWJsZSgpe2NvbnN0IHQ9dGhpcy5kYXRhVmlldy5nZXRGbG9hdDY0KHRoaXMucG9zLCEwKTtyZXR1cm4gdGhpcy5wb3MrPTgsdH1yZWFkVmFyaW50KHQpe2NvbnN0IGU9dGhpcy5idWY7bGV0IHIscztyZXR1cm4gcz1lW3RoaXMucG9zKytdLHI9cyYxMjcsczwxMjh8fChzPWVbdGhpcy5wb3MrK10scnw9KHMmMTI3KTw8NyxzPDEyOCl8fChzPWVbdGhpcy5wb3MrK10scnw9KHMmMTI3KTw8MTQsczwxMjgpfHwocz1lW3RoaXMucG9zKytdLHJ8PShzJjEyNyk8PDIxLHM8MTI4KT9yOihzPWVbdGhpcy5wb3NdLHJ8PShzJjE1KTw8MjgsRShyLHQsdGhpcykpfXJlYWRWYXJpbnQ2NCgpe3JldHVybiB0aGlzLnJlYWRWYXJpbnQoITApfXJlYWRTVmFyaW50KCl7Y29uc3QgdD10aGlzLnJlYWRWYXJpbnQoKTtyZXR1cm4gdCUyPT09MT8odCsxKS8tMjp0LzJ9cmVhZEJvb2xlYW4oKXtyZXR1cm4hIXRoaXMucmVhZFZhcmludCgpfXJlYWRTdHJpbmcoKXtjb25zdCB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9dGhpcy5wb3M7cmV0dXJuIHRoaXMucG9zPXQsdC1lPj1tJiZQP1AuZGVjb2RlKHRoaXMuYnVmLnN1YmFycmF5KGUsdCkpOlIodGhpcy5idWYsZSx0KX1yZWFkQnl0ZXMoKXtjb25zdCB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9dGhpcy5idWYuc3ViYXJyYXkodGhpcy5wb3MsdCk7cmV0dXJuIHRoaXMucG9zPXQsZX1yZWFkUGFja2VkVmFyaW50KHQ9W10sZSl7Y29uc3Qgcj10aGlzLnJlYWRQYWNrZWRFbmQoKTtmb3IoO3RoaXMucG9zPHI7KXQucHVzaCh0aGlzLnJlYWRWYXJpbnQoZSkpO3JldHVybiB0fXJlYWRQYWNrZWRTVmFyaW50KHQ9W10pe2NvbnN0IGU9dGhpcy5yZWFkUGFja2VkRW5kKCk7Zm9yKDt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU1ZhcmludCgpKTtyZXR1cm4gdH1yZWFkUGFja2VkQm9vbGVhbih0PVtdKXtjb25zdCBlPXRoaXMucmVhZFBhY2tlZEVuZCgpO2Zvcig7dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEJvb2xlYW4oKSk7cmV0dXJuIHR9cmVhZFBhY2tlZEZsb2F0KHQ9W10pe2NvbnN0IGU9dGhpcy5yZWFkUGFja2VkRW5kKCk7Zm9yKDt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkRmxvYXQoKSk7cmV0dXJuIHR9cmVhZFBhY2tlZERvdWJsZSh0PVtdKXtjb25zdCBlPXRoaXMucmVhZFBhY2tlZEVuZCgpO2Zvcig7dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZERvdWJsZSgpKTtyZXR1cm4gdH1yZWFkUGFja2VkRml4ZWQzMih0PVtdKXtjb25zdCBlPXRoaXMucmVhZFBhY2tlZEVuZCgpO2Zvcig7dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEZpeGVkMzIoKSk7cmV0dXJuIHR9cmVhZFBhY2tlZFNGaXhlZDMyKHQ9W10pe2NvbnN0IGU9dGhpcy5yZWFkUGFja2VkRW5kKCk7Zm9yKDt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7cmV0dXJuIHR9cmVhZFBhY2tlZEZpeGVkNjQodD1bXSl7Y29uc3QgZT10aGlzLnJlYWRQYWNrZWRFbmQoKTtmb3IoO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRGaXhlZDY0KCkpO3JldHVybiB0fXJlYWRQYWNrZWRTRml4ZWQ2NCh0PVtdKXtjb25zdCBlPXRoaXMucmVhZFBhY2tlZEVuZCgpO2Zvcig7dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZFNGaXhlZDY0KCkpO3JldHVybiB0fXJlYWRQYWNrZWRFbmQoKXtyZXR1cm4gdGhpcy50eXBlPT09Rj90aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvczp0aGlzLnBvcysxfXNraXAodCl7Y29uc3QgZT10Jjc7aWYoZT09PWcpZm9yKDt0aGlzLmJ1Zlt0aGlzLnBvcysrXT4xMjc7KTtlbHNlIGlmKGU9PT1GKXRoaXMucG9zPXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zO2Vsc2UgaWYoZT09PXApdGhpcy5wb3MrPTQ7ZWxzZSBpZihlPT09eSl0aGlzLnBvcys9ODtlbHNlIHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZCB0eXBlOiAke2V9YCl9d3JpdGVUYWcodCxlKXt0aGlzLndyaXRlVmFyaW50KHQ8PDN8ZSl9cmVhbGxvYyh0KXtsZXQgZT10aGlzLmxlbmd0aHx8MTY7Zm9yKDtlPHRoaXMucG9zK3Q7KWUqPTI7aWYoZSE9PXRoaXMubGVuZ3RoKXtjb25zdCByPW5ldyBVaW50OEFycmF5KGUpO3Iuc2V0KHRoaXMuYnVmKSx0aGlzLmJ1Zj1yLHRoaXMuZGF0YVZpZXc9bmV3IERhdGFWaWV3KHIuYnVmZmVyKSx0aGlzLmxlbmd0aD1lfX1maW5pc2goKXtyZXR1cm4gdGhpcy5sZW5ndGg9dGhpcy5wb3MsdGhpcy5wb3M9MCx0aGlzLmJ1Zi5zdWJhcnJheSgwLHRoaXMubGVuZ3RoKX13cml0ZUZpeGVkMzIodCl7dGhpcy5yZWFsbG9jKDQpLHRoaXMuZGF0YVZpZXcuc2V0SW50MzIodGhpcy5wb3MsdCwhMCksdGhpcy5wb3MrPTR9d3JpdGVTRml4ZWQzMih0KXt0aGlzLnJlYWxsb2MoNCksdGhpcy5kYXRhVmlldy5zZXRJbnQzMih0aGlzLnBvcyx0LCEwKSx0aGlzLnBvcys9NH13cml0ZUZpeGVkNjQodCl7dGhpcy5yZWFsbG9jKDgpLHRoaXMuZGF0YVZpZXcuc2V0SW50MzIodGhpcy5wb3MsdCYtMSwhMCksdGhpcy5kYXRhVmlldy5zZXRJbnQzMih0aGlzLnBvcys0LE1hdGguZmxvb3IodCpfKSwhMCksdGhpcy5wb3MrPTh9d3JpdGVTRml4ZWQ2NCh0KXt0aGlzLnJlYWxsb2MoOCksdGhpcy5kYXRhVmlldy5zZXRJbnQzMih0aGlzLnBvcyx0Ji0xLCEwKSx0aGlzLmRhdGFWaWV3LnNldEludDMyKHRoaXMucG9zKzQsTWF0aC5mbG9vcih0Kl8pLCEwKSx0aGlzLnBvcys9OH13cml0ZVZhcmludCh0KXtpZih0PSt0fHwwLHQ+MjY4NDM1NDU1fHx0PDApe0IodCx0aGlzKTtyZXR1cm59dGhpcy5yZWFsbG9jKDQpLHRoaXMuYnVmW3RoaXMucG9zKytdPXQmMTI3fCh0PjEyNz8xMjg6MCksISh0PD0xMjcpJiYodGhpcy5idWZbdGhpcy5wb3MrK109KHQ+Pj49NykmMTI3fCh0PjEyNz8xMjg6MCksISh0PD0xMjcpJiYodGhpcy5idWZbdGhpcy5wb3MrK109KHQ+Pj49NykmMTI3fCh0PjEyNz8xMjg6MCksISh0PD0xMjcpJiYodGhpcy5idWZbdGhpcy5wb3MrK109dD4+PjcmMTI3KSkpfXdyaXRlU1ZhcmludCh0KXt0aGlzLndyaXRlVmFyaW50KHQ8MD8tdCoyLTE6dCoyKX13cml0ZUJvb2xlYW4odCl7dGhpcy53cml0ZVZhcmludCgrdCl9d3JpdGVTdHJpbmcodCl7dD1TdHJpbmcodCksdGhpcy5yZWFsbG9jKHQubGVuZ3RoKjQpLHRoaXMucG9zKys7Y29uc3QgZT10aGlzLnBvczt0aGlzLnBvcz1xKHRoaXMuYnVmLHQsdGhpcy5wb3MpO2NvbnN0IHI9dGhpcy5wb3MtZTtyPj0xMjgmJlMoZSxyLHRoaXMpLHRoaXMucG9zPWUtMSx0aGlzLndyaXRlVmFyaW50KHIpLHRoaXMucG9zKz1yfXdyaXRlRmxvYXQodCl7dGhpcy5yZWFsbG9jKDQpLHRoaXMuZGF0YVZpZXcuc2V0RmxvYXQzMih0aGlzLnBvcyx0LCEwKSx0aGlzLnBvcys9NH13cml0ZURvdWJsZSh0KXt0aGlzLnJlYWxsb2MoOCksdGhpcy5kYXRhVmlldy5zZXRGbG9hdDY0KHRoaXMucG9zLHQsITApLHRoaXMucG9zKz04fXdyaXRlQnl0ZXModCl7Y29uc3QgZT10Lmxlbmd0aDt0aGlzLndyaXRlVmFyaW50KGUpLHRoaXMucmVhbGxvYyhlKTtmb3IobGV0IHI9MDtyPGU7cisrKXRoaXMuYnVmW3RoaXMucG9zKytdPXRbcl19d3JpdGVSYXdNZXNzYWdlKHQsZSl7dGhpcy5wb3MrKztjb25zdCByPXRoaXMucG9zO3QoZSx0aGlzKTtjb25zdCBzPXRoaXMucG9zLXI7cz49MTI4JiZTKHIscyx0aGlzKSx0aGlzLnBvcz1yLTEsdGhpcy53cml0ZVZhcmludChzKSx0aGlzLnBvcys9c313cml0ZU1lc3NhZ2UodCxlLHIpe3RoaXMud3JpdGVUYWcodCxGKSx0aGlzLndyaXRlUmF3TWVzc2FnZShlLHIpfXdyaXRlUGFja2VkVmFyaW50KHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsSSxlKX13cml0ZVBhY2tlZFNWYXJpbnQodCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxDLGUpfXdyaXRlUGFja2VkQm9vbGVhbih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LFUsZSl9d3JpdGVQYWNrZWRGbG9hdCh0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LEwsZSl9d3JpdGVQYWNrZWREb3VibGUodCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxBLGUpfXdyaXRlUGFja2VkRml4ZWQzMih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LHYsZSl9d3JpdGVQYWNrZWRTRml4ZWQzMih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LE4sZSl9d3JpdGVQYWNrZWRGaXhlZDY0KHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsRyxlKX13cml0ZVBhY2tlZFNGaXhlZDY0KHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsSCxlKX13cml0ZUJ5dGVzRmllbGQodCxlKXt0aGlzLndyaXRlVGFnKHQsRiksdGhpcy53cml0ZUJ5dGVzKGUpfXdyaXRlRml4ZWQzMkZpZWxkKHQsZSl7dGhpcy53cml0ZVRhZyh0LHApLHRoaXMud3JpdGVGaXhlZDMyKGUpfXdyaXRlU0ZpeGVkMzJGaWVsZCh0LGUpe3RoaXMud3JpdGVUYWcodCxwKSx0aGlzLndyaXRlU0ZpeGVkMzIoZSl9d3JpdGVGaXhlZDY0RmllbGQodCxlKXt0aGlzLndyaXRlVGFnKHQseSksdGhpcy53cml0ZUZpeGVkNjQoZSl9d3JpdGVTRml4ZWQ2NEZpZWxkKHQsZSl7dGhpcy53cml0ZVRhZyh0LHkpLHRoaXMud3JpdGVTRml4ZWQ2NChlKX13cml0ZVZhcmludEZpZWxkKHQsZSl7dGhpcy53cml0ZVRhZyh0LGcpLHRoaXMud3JpdGVWYXJpbnQoZSl9d3JpdGVTVmFyaW50RmllbGQodCxlKXt0aGlzLndyaXRlVGFnKHQsZyksdGhpcy53cml0ZVNWYXJpbnQoZSl9d3JpdGVTdHJpbmdGaWVsZCh0LGUpe3RoaXMud3JpdGVUYWcodCxGKSx0aGlzLndyaXRlU3RyaW5nKGUpfXdyaXRlRmxvYXRGaWVsZCh0LGUpe3RoaXMud3JpdGVUYWcodCxwKSx0aGlzLndyaXRlRmxvYXQoZSl9d3JpdGVEb3VibGVGaWVsZCh0LGUpe3RoaXMud3JpdGVUYWcodCx5KSx0aGlzLndyaXRlRG91YmxlKGUpfXdyaXRlQm9vbGVhbkZpZWxkKHQsZSl7dGhpcy53cml0ZVZhcmludEZpZWxkKHQsK2UpfX1mdW5jdGlvbiBFKGksdCxlKXtjb25zdCByPWUuYnVmO2xldCBzLG47aWYobj1yW2UucG9zKytdLHM9KG4mMTEyKT4+NCxuPDEyOHx8KG49cltlLnBvcysrXSxzfD0obiYxMjcpPDwzLG48MTI4KXx8KG49cltlLnBvcysrXSxzfD0obiYxMjcpPDwxMCxuPDEyOCl8fChuPXJbZS5wb3MrK10sc3w9KG4mMTI3KTw8MTcsbjwxMjgpfHwobj1yW2UucG9zKytdLHN8PShuJjEyNyk8PDI0LG48MTI4KXx8KG49cltlLnBvcysrXSxzfD0obiYxKTw8MzEsbjwxMjgpKXJldHVybiBmKGkscyx0KTt0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHZhcmludCBub3QgbW9yZSB0aGFuIDEwIGJ5dGVzIil9ZnVuY3Rpb24gZihpLHQsZSl7cmV0dXJuIGU/dCo0Mjk0OTY3Mjk2KyhpPj4+MCk6KHQ+Pj4wKSo0Mjk0OTY3Mjk2KyhpPj4+MCl9ZnVuY3Rpb24gQihpLHQpe2xldCBlLHI7aWYoaT49MD8oZT1pJTQyOTQ5NjcyOTZ8MCxyPWkvNDI5NDk2NzI5NnwwKTooZT1+KC1pJTQyOTQ5NjcyOTYpLHI9figtaS80Mjk0OTY3Mjk2KSxlXjQyOTQ5NjcyOTU/ZT1lKzF8MDooZT0wLHI9cisxfDApKSxpPj0xODQ0Njc0NDA3MzcwOTU1MmUzfHxpPC0xODQ0Njc0NDA3MzcwOTU1MmUzKXRocm93IG5ldyBFcnJvcigiR2l2ZW4gdmFyaW50IGRvZXNuJ3QgZml0IGludG8gMTAgYnl0ZXMiKTt0LnJlYWxsb2MoMTApLFQoZSxyLHQpLEQocix0KX1mdW5jdGlvbiBUKGksdCxlKXtlLmJ1ZltlLnBvcysrXT1pJjEyN3wxMjgsaT4+Pj03LGUuYnVmW2UucG9zKytdPWkmMTI3fDEyOCxpPj4+PTcsZS5idWZbZS5wb3MrK109aSYxMjd8MTI4LGk+Pj49NyxlLmJ1ZltlLnBvcysrXT1pJjEyN3wxMjgsaT4+Pj03LGUuYnVmW2UucG9zXT1pJjEyN31mdW5jdGlvbiBEKGksdCl7Y29uc3QgZT0oaSY3KTw8NDt0LmJ1Zlt0LnBvcysrXXw9ZXwoKGk+Pj49Myk/MTI4OjApLGkmJih0LmJ1Zlt0LnBvcysrXT1pJjEyN3woKGk+Pj49Nyk/MTI4OjApLGkmJih0LmJ1Zlt0LnBvcysrXT1pJjEyN3woKGk+Pj49Nyk/MTI4OjApLGkmJih0LmJ1Zlt0LnBvcysrXT1pJjEyN3woKGk+Pj49Nyk/MTI4OjApLGkmJih0LmJ1Zlt0LnBvcysrXT1pJjEyN3woKGk+Pj49Nyk/MTI4OjApLGkmJih0LmJ1Zlt0LnBvcysrXT1pJjEyNykpKSkpfWZ1bmN0aW9uIFMoaSx0LGUpe2NvbnN0IHI9dDw9MTYzODM/MTp0PD0yMDk3MTUxPzI6dDw9MjY4NDM1NDU1PzM6TWF0aC5mbG9vcihNYXRoLmxvZyh0KS8oTWF0aC5MTjIqNykpO2UucmVhbGxvYyhyKTtmb3IobGV0IHM9ZS5wb3MtMTtzPj1pO3MtLSllLmJ1ZltzK3JdPWUuYnVmW3NdfWZ1bmN0aW9uIEkoaSx0KXtmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl0LndyaXRlVmFyaW50KGlbZV0pfWZ1bmN0aW9uIEMoaSx0KXtmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl0LndyaXRlU1ZhcmludChpW2VdKX1mdW5jdGlvbiBMKGksdCl7Zm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspdC53cml0ZUZsb2F0KGlbZV0pfWZ1bmN0aW9uIEEoaSx0KXtmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl0LndyaXRlRG91YmxlKGlbZV0pfWZ1bmN0aW9uIFUoaSx0KXtmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl0LndyaXRlQm9vbGVhbihpW2VdKX1mdW5jdGlvbiB2KGksdCl7Zm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspdC53cml0ZUZpeGVkMzIoaVtlXSl9ZnVuY3Rpb24gTihpLHQpe2ZvcihsZXQgZT0wO2U8aS5sZW5ndGg7ZSsrKXQud3JpdGVTRml4ZWQzMihpW2VdKX1mdW5jdGlvbiBHKGksdCl7Zm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspdC53cml0ZUZpeGVkNjQoaVtlXSl9ZnVuY3Rpb24gSChpLHQpe2ZvcihsZXQgZT0wO2U8aS5sZW5ndGg7ZSsrKXQud3JpdGVTRml4ZWQ2NChpW2VdKX1mdW5jdGlvbiBSKGksdCxlKXtsZXQgcj0iIixzPXQ7Zm9yKDtzPGU7KXtjb25zdCBuPWlbc107bGV0IG89bnVsbCxoPW4+MjM5PzQ6bj4yMjM/MzpuPjE5MT8yOjE7aWYocytoPmUpYnJlYWs7bGV0IGEsZCx1O2g9PT0xP248MTI4JiYobz1uKTpoPT09Mj8oYT1pW3MrMV0sKGEmMTkyKT09PTEyOCYmKG89KG4mMzEpPDw2fGEmNjMsbzw9MTI3JiYobz1udWxsKSkpOmg9PT0zPyhhPWlbcysxXSxkPWlbcysyXSwoYSYxOTIpPT09MTI4JiYoZCYxOTIpPT09MTI4JiYobz0obiYxNSk8PDEyfChhJjYzKTw8NnxkJjYzLChvPD0yMDQ3fHxvPj01NTI5NiYmbzw9NTczNDMpJiYobz1udWxsKSkpOmg9PT00JiYoYT1pW3MrMV0sZD1pW3MrMl0sdT1pW3MrM10sKGEmMTkyKT09PTEyOCYmKGQmMTkyKT09PTEyOCYmKHUmMTkyKT09PTEyOCYmKG89KG4mMTUpPDwxOHwoYSY2Myk8PDEyfChkJjYzKTw8Nnx1JjYzLChvPD02NTUzNXx8bz49MTExNDExMikmJihvPW51bGwpKSksbz09PW51bGw/KG89NjU1MzMsaD0xKTpvPjY1NTM1JiYoby09NjU1MzYscis9U3RyaW5nLmZyb21DaGFyQ29kZShvPj4+MTAmMTAyM3w1NTI5Niksbz01NjMyMHxvJjEwMjMpLHIrPVN0cmluZy5mcm9tQ2hhckNvZGUobykscys9aH1yZXR1cm4gcn1mdW5jdGlvbiBxKGksdCxlKXtmb3IobGV0IHI9MCxzLG47cjx0Lmxlbmd0aDtyKyspe2lmKHM9dC5jaGFyQ29kZUF0KHIpLHM+NTUyOTUmJnM8NTczNDQpaWYobilpZihzPDU2MzIwKXtpW2UrK109MjM5LGlbZSsrXT0xOTEsaVtlKytdPTE4OSxuPXM7Y29udGludWV9ZWxzZSBzPW4tNTUyOTY8PDEwfHMtNTYzMjB8NjU1MzYsbj1udWxsO2Vsc2V7cz41NjMxOXx8cisxPT09dC5sZW5ndGg/KGlbZSsrXT0yMzksaVtlKytdPTE5MSxpW2UrK109MTg5KTpuPXM7Y29udGludWV9ZWxzZSBuJiYoaVtlKytdPTIzOSxpW2UrK109MTkxLGlbZSsrXT0xODksbj1udWxsKTtzPDEyOD9pW2UrK109czooczwyMDQ4P2lbZSsrXT1zPj42fDE5Mjooczw2NTUzNj9pW2UrK109cz4+MTJ8MjI0OihpW2UrK109cz4+MTh8MjQwLGlbZSsrXT1zPj4xMiY2M3wxMjgpLGlbZSsrXT1zPj42JjYzfDEyOCksaVtlKytdPXMmNjN8MTI4KX1yZXR1cm4gZX1mdW5jdGlvbiB4KGksdCl7dGhpcy54PWksdGhpcy55PXR9eC5wcm90b3R5cGU9e2Nsb25lKCl7cmV0dXJuIG5ldyB4KHRoaXMueCx0aGlzLnkpfSxhZGQoaSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fYWRkKGkpfSxzdWIoaSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fc3ViKGkpfSxtdWx0QnlQb2ludChpKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0QnlQb2ludChpKX0sZGl2QnlQb2ludChpKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9kaXZCeVBvaW50KGkpfSxtdWx0KGkpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHQoaSl9LGRpdihpKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9kaXYoaSl9LHJvdGF0ZShpKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3RhdGUoaSl9LHJvdGF0ZUFyb3VuZChpLHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZUFyb3VuZChpLHQpfSxtYXRNdWx0KGkpe3JldHVybiB0aGlzLmNsb25lKCkuX21hdE11bHQoaSl9LHVuaXQoKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl91bml0KCl9LHBlcnAoKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9wZXJwKCl9LHJvdW5kKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcm91bmQoKX0sbWFnKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfSxlcXVhbHMoaSl7cmV0dXJuIHRoaXMueD09PWkueCYmdGhpcy55PT09aS55fSxkaXN0KGkpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0U3FyKGkpKX0sZGlzdFNxcihpKXtjb25zdCB0PWkueC10aGlzLngsZT1pLnktdGhpcy55O3JldHVybiB0KnQrZSplfSxhbmdsZSgpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueSx0aGlzLngpfSxhbmdsZVRvKGkpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueS1pLnksdGhpcy54LWkueCl9LGFuZ2xlV2l0aChpKXtyZXR1cm4gdGhpcy5hbmdsZVdpdGhTZXAoaS54LGkueSl9LGFuZ2xlV2l0aFNlcChpLHQpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueCp0LXRoaXMueSppLHRoaXMueCppK3RoaXMueSp0KX0sX21hdE11bHQoaSl7Y29uc3QgdD1pWzBdKnRoaXMueCtpWzFdKnRoaXMueSxlPWlbMl0qdGhpcy54K2lbM10qdGhpcy55O3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzfSxfYWRkKGkpe3JldHVybiB0aGlzLngrPWkueCx0aGlzLnkrPWkueSx0aGlzfSxfc3ViKGkpe3JldHVybiB0aGlzLngtPWkueCx0aGlzLnktPWkueSx0aGlzfSxfbXVsdChpKXtyZXR1cm4gdGhpcy54Kj1pLHRoaXMueSo9aSx0aGlzfSxfZGl2KGkpe3JldHVybiB0aGlzLngvPWksdGhpcy55Lz1pLHRoaXN9LF9tdWx0QnlQb2ludChpKXtyZXR1cm4gdGhpcy54Kj1pLngsdGhpcy55Kj1pLnksdGhpc30sX2RpdkJ5UG9pbnQoaSl7cmV0dXJuIHRoaXMueC89aS54LHRoaXMueS89aS55LHRoaXN9LF91bml0KCl7cmV0dXJuIHRoaXMuX2Rpdih0aGlzLm1hZygpKSx0aGlzfSxfcGVycCgpe2NvbnN0IGk9dGhpcy55O3JldHVybiB0aGlzLnk9dGhpcy54LHRoaXMueD0taSx0aGlzfSxfcm90YXRlKGkpe2NvbnN0IHQ9TWF0aC5jb3MoaSksZT1NYXRoLnNpbihpKSxyPXQqdGhpcy54LWUqdGhpcy55LHM9ZSp0aGlzLngrdCp0aGlzLnk7cmV0dXJuIHRoaXMueD1yLHRoaXMueT1zLHRoaXN9LF9yb3RhdGVBcm91bmQoaSx0KXtjb25zdCBlPU1hdGguY29zKGkpLHI9TWF0aC5zaW4oaSkscz10LngrZSoodGhpcy54LXQueCktcioodGhpcy55LXQueSksbj10LnkrcioodGhpcy54LXQueCkrZSoodGhpcy55LXQueSk7cmV0dXJuIHRoaXMueD1zLHRoaXMueT1uLHRoaXN9LF9yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc30sY29uc3RydWN0b3I6eH0seC5jb252ZXJ0PWZ1bmN0aW9uKGkpe2lmKGkgaW5zdGFuY2VvZiB4KXJldHVybiBpO2lmKEFycmF5LmlzQXJyYXkoaSkpcmV0dXJuIG5ldyB4KCtpWzBdLCtpWzFdKTtpZihpLnghPT12b2lkIDAmJmkueSE9PXZvaWQgMClyZXR1cm4gbmV3IHgoK2kueCwraS55KTt0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIFt4LCB5XSBvciB7eCwgeX0gcG9pbnQgZm9ybWF0Iil9O2NsYXNzIGt7Y29uc3RydWN0b3IodCxlLHIscyxuKXt0aGlzLnByb3BlcnRpZXM9e30sdGhpcy5leHRlbnQ9cix0aGlzLnR5cGU9MCx0aGlzLmlkPXZvaWQgMCx0aGlzLl9wYmY9dCx0aGlzLl9nZW9tZXRyeT0tMSx0aGlzLl9rZXlzPXMsdGhpcy5fdmFsdWVzPW4sdC5yZWFkRmllbGRzKGosdGhpcyxlKX1sb2FkR2VvbWV0cnkoKXtjb25zdCB0PXRoaXMuX3BiZjt0LnBvcz10aGlzLl9nZW9tZXRyeTtjb25zdCBlPXQucmVhZFZhcmludCgpK3QucG9zLHI9W107bGV0IHMsbj0xLG89MCxoPTAsYT0wO2Zvcig7dC5wb3M8ZTspe2lmKG88PTApe2NvbnN0IGQ9dC5yZWFkVmFyaW50KCk7bj1kJjcsbz1kPj4zfWlmKG8tLSxuPT09MXx8bj09PTIpaCs9dC5yZWFkU1ZhcmludCgpLGErPXQucmVhZFNWYXJpbnQoKSxuPT09MSYmKHMmJnIucHVzaChzKSxzPVtdKSxzJiZzLnB1c2gobmV3IHgoaCxhKSk7ZWxzZSBpZihuPT09NylzJiZzLnB1c2goc1swXS5jbG9uZSgpKTtlbHNlIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBjb21tYW5kICR7bn1gKX1yZXR1cm4gcyYmci5wdXNoKHMpLHJ9YmJveCgpe2NvbnN0IHQ9dGhpcy5fcGJmO3QucG9zPXRoaXMuX2dlb21ldHJ5O2NvbnN0IGU9dC5yZWFkVmFyaW50KCkrdC5wb3M7bGV0IHI9MSxzPTAsbj0wLG89MCxoPTEvMCxhPS0xLzAsZD0xLzAsdT0tMS8wO2Zvcig7dC5wb3M8ZTspe2lmKHM8PTApe2NvbnN0IHc9dC5yZWFkVmFyaW50KCk7cj13Jjcscz13Pj4zfWlmKHMtLSxyPT09MXx8cj09PTIpbis9dC5yZWFkU1ZhcmludCgpLG8rPXQucmVhZFNWYXJpbnQoKSxuPGgmJihoPW4pLG4+YSYmKGE9biksbzxkJiYoZD1vKSxvPnUmJih1PW8pO2Vsc2UgaWYociE9PTcpdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIGNvbW1hbmQgJHtyfWApfXJldHVybltoLGQsYSx1XX10b0dlb0pTT04odCxlLHIpe2NvbnN0IHM9dGhpcy5leHRlbnQqTWF0aC5wb3coMixyKSxuPXRoaXMuZXh0ZW50KnQsbz10aGlzLmV4dGVudCplLGg9dGhpcy5sb2FkR2VvbWV0cnkoKTtmdW5jdGlvbiBhKGwpe3JldHVyblsobC54K24pKjM2MC9zLTE4MCwzNjAvTWF0aC5QSSpNYXRoLmF0YW4oTWF0aC5leHAoKDEtKGwueStvKSoyL3MpKk1hdGguUEkpKS05MF19ZnVuY3Rpb24gZChsKXtyZXR1cm4gbC5tYXAoYSl9bGV0IHU7aWYodGhpcy50eXBlPT09MSl7Y29uc3QgbD1bXTtmb3IoY29uc3QgViBvZiBoKWwucHVzaChWWzBdKTtjb25zdCBjPWQobCk7dT1sLmxlbmd0aD09PTE/e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpjWzBdfTp7dHlwZToiTXVsdGlQb2ludCIsY29vcmRpbmF0ZXM6Y319ZWxzZSBpZih0aGlzLnR5cGU9PT0yKXtjb25zdCBsPWgubWFwKGQpO3U9bC5sZW5ndGg9PT0xP3t0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpsWzBdfTp7dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczpsfX1lbHNlIGlmKHRoaXMudHlwZT09PTMpe2NvbnN0IGw9VyhoKSxjPVtdO2Zvcihjb25zdCBWIG9mIGwpYy5wdXNoKFYubWFwKGQpKTt1PWMubGVuZ3RoPT09MT97dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6Y1swXX06e3R5cGU6Ik11bHRpUG9seWdvbiIsY29vcmRpbmF0ZXM6Y319ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInVua25vd24gZmVhdHVyZSB0eXBlIik7Y29uc3Qgdz17dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6dSxwcm9wZXJ0aWVzOnRoaXMucHJvcGVydGllc307cmV0dXJuIHRoaXMuaWQhPW51bGwmJih3LmlkPXRoaXMuaWQpLHd9fWsudHlwZXM9WyJVbmtub3duIiwiUG9pbnQiLCJMaW5lU3RyaW5nIiwiUG9seWdvbiJdO2Z1bmN0aW9uIGooaSx0LGUpe2k9PT0xP3QuaWQ9ZS5yZWFkVmFyaW50KCk6aT09PTI/TyhlLHQpOmk9PT0zP3QudHlwZT1lLnJlYWRWYXJpbnQoKTppPT09NCYmKHQuX2dlb21ldHJ5PWUucG9zKX1mdW5jdGlvbiBPKGksdCl7Y29uc3QgZT1pLnJlYWRWYXJpbnQoKStpLnBvcztmb3IoO2kucG9zPGU7KXtjb25zdCByPXQuX2tleXNbaS5yZWFkVmFyaW50KCldLHM9dC5fdmFsdWVzW2kucmVhZFZhcmludCgpXTt0LnByb3BlcnRpZXNbcl09c319ZnVuY3Rpb24gVyhpKXtjb25zdCB0PWkubGVuZ3RoO2lmKHQ8PTEpcmV0dXJuW2ldO2NvbnN0IGU9W107bGV0IHIscztmb3IobGV0IG49MDtuPHQ7bisrKXtjb25zdCBvPUooaVtuXSk7byE9PTAmJihzPT09dm9pZCAwJiYocz1vPDApLHM9PT1vPDA/KHImJmUucHVzaChyKSxyPVtpW25dXSk6ciYmci5wdXNoKGlbbl0pKX1yZXR1cm4gciYmZS5wdXNoKHIpLGV9ZnVuY3Rpb24gSihpKXtsZXQgdD0wO2ZvcihsZXQgZT0wLHI9aS5sZW5ndGgscz1yLTEsbixvO2U8cjtzPWUrKyluPWlbZV0sbz1pW3NdLHQrPShvLngtbi54KSoobi55K28ueSk7cmV0dXJuIHR9Y2xhc3MgWHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMudmVyc2lvbj0xLHRoaXMubmFtZT0iIix0aGlzLmV4dGVudD00MDk2LHRoaXMubGVuZ3RoPTAsdGhpcy5fcGJmPXQsdGhpcy5fa2V5cz1bXSx0aGlzLl92YWx1ZXM9W10sdGhpcy5fZmVhdHVyZXM9W10sdC5yZWFkRmllbGRzKCQsdGhpcyxlKSx0aGlzLmxlbmd0aD10aGlzLl9mZWF0dXJlcy5sZW5ndGh9ZmVhdHVyZSh0KXtpZih0PDB8fHQ+PXRoaXMuX2ZlYXR1cmVzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImZlYXR1cmUgaW5kZXggb3V0IG9mIGJvdW5kcyIpO3RoaXMuX3BiZi5wb3M9dGhpcy5fZmVhdHVyZXNbdF07Y29uc3QgZT10aGlzLl9wYmYucmVhZFZhcmludCgpK3RoaXMuX3BiZi5wb3M7cmV0dXJuIG5ldyBrKHRoaXMuX3BiZixlLHRoaXMuZXh0ZW50LHRoaXMuX2tleXMsdGhpcy5fdmFsdWVzKX19ZnVuY3Rpb24gJChpLHQsZSl7aT09PTE1P3QudmVyc2lvbj1lLnJlYWRWYXJpbnQoKTppPT09MT90Lm5hbWU9ZS5yZWFkU3RyaW5nKCk6aT09PTU/dC5leHRlbnQ9ZS5yZWFkVmFyaW50KCk6aT09PTI/dC5fZmVhdHVyZXMucHVzaChlLnBvcyk6aT09PTM/dC5fa2V5cy5wdXNoKGUucmVhZFN0cmluZygpKTppPT09NCYmdC5fdmFsdWVzLnB1c2goYihlKSl9ZnVuY3Rpb24gYihpKXtsZXQgdD1udWxsO2NvbnN0IGU9aS5yZWFkVmFyaW50KCkraS5wb3M7Zm9yKDtpLnBvczxlOyl7Y29uc3Qgcj1pLnJlYWRWYXJpbnQoKT4+Mzt0PXI9PT0xP2kucmVhZFN0cmluZygpOnI9PT0yP2kucmVhZEZsb2F0KCk6cj09PTM/aS5yZWFkRG91YmxlKCk6cj09PTQ/aS5yZWFkVmFyaW50NjQoKTpyPT09NT9pLnJlYWRWYXJpbnQoKTpyPT09Nj9pLnJlYWRTVmFyaW50KCk6cj09PTc/aS5yZWFkQm9vbGVhbigpOm51bGx9aWYodD09bnVsbCl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gZmVhdHVyZSB2YWx1ZSIpO3JldHVybiB0fWNsYXNzIHp7Y29uc3RydWN0b3IodCxlKXt0aGlzLmxheWVycz10LnJlYWRGaWVsZHMoWSx7fSxlKX19ZnVuY3Rpb24gWShpLHQsZSl7aWYoaT09PTMpe2NvbnN0IHI9bmV3IFgoZSxlLnJlYWRWYXJpbnQoKStlLnBvcyk7ci5sZW5ndGgmJih0W3IubmFtZV09cil9fWFzeW5jIGZ1bmN0aW9uIEsoaSx0LGUscil7dHJ5e2NvbnN0IHM9UShpLHQsZSxyKTtyZXR1cm57eDp0LHk6ZSx6OnIsbGF5ZXJzOnMsdGltZXN0YW1wOkRhdGUubm93KCksZGF0YUZvcm1hdDoibXZ0In19Y2F0Y2gocyl7dGhyb3cgY29uc29sZS5lcnJvcigi6Kej5p6Q55+i6YeP55Om54mH5pWw5o2u5pe25Ye66ZSZOiIscyksc319ZnVuY3Rpb24gUShpLHQsZSxyKXtjb25zdCBzPW5ldyBNKGkpLG49bmV3IHoocyksbz17fTtmb3IoY29uc3QgaCBpbiBuLmxheWVycyl7Y29uc3QgYT1uLmxheWVyc1toXSxkPVtdO2ZvcihsZXQgdT0wO3U8YS5sZW5ndGg7dSsrKXtjb25zdCBsPWEuZmVhdHVyZSh1KS50b0dlb0pTT04odCxlLHIpO2QucHVzaChsKX1vW2hdPWR9cmV0dXJuIG99c2VsZi5vbm1lc3NhZ2U9YXN5bmMgaT0+e2NvbnN0IHQ9aS5kYXRhO3RyeXtjb25zdCBlPWF3YWl0IEsodC5hcnJheUJ1ZmZlcix0LngsdC55LHQueik7c2VsZi5wb3N0TWVzc2FnZShlKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKCJXb3JrZXIgTVZUIOino+aekOWksei0pToiLGUpLHNlbGYucG9zdE1lc3NhZ2Uoe2Vycm9yOmUubWVzc2FnZX0pfX19KSgpOwo=",rv=i=>Uint8Array.from(atob(i),e=>e.charCodeAt(0)),eu=typeof self<"u"&&self.Blob&&new Blob([rv(qc)],{type:"text/javascript;charset=utf-8"});function iv(i){let e;try{if(e=eu&&(self.URL||self.webkitURL).createObjectURL(eu),!e)throw"";const t=new Worker(e,{name:i?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;base64,"+qc,{name:i?.name})}finally{e&&(self.URL||self.webkitURL).revokeObjectURL(e)}}var sv=Object.defineProperty,ov=(i,e,t)=>e in i?sv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,fs=(i,e,t)=>ov(i,typeof e!="symbol"?e+"":e,t);const av=10;class lv{constructor(){fs(this,"info",{version:"1.0.0",description:"Vector Tile loader for Mapbox Vector Tile format. It can load and parse MVT data."}),fs(this,"dataType","VectorTile"),fs(this,"fileLoader",new m.FileLoader(Fe.manager)),fs(this,"_workerPool",new Ao(0)),this.fileLoader.setResponseType("arraybuffer"),this._workerPool.setWorkerCreator(()=>new iv)}async load(e){const{source:t,x:n,y:r,z:o}=e,l=typeof t._getUrl=="function"?t._getUrl(n,r,o):this.buildTileUrl(t.url,n,r,o);if(!l)return this.createErrorGeometry(n,r,o,new Error("VectorTileLoader: source._getUrl 返回空 URL"));this._workerPool.pool===0&&this._workerPool.setWorkerLimit(av);try{const u=await this.fetchVectorData(l),c={arrayBuffer:u,x:n,y:r,z:o},p=(await this._workerPool.postMessage(c,[u])).data;if(p.error)throw new Error(p.error);const f=this.createGeometryWithVectorData(p,e);return Fe.manager.parseEnd(l),f}catch(u){return this.createErrorGeometry(n,r,o,u)}}async fetchVectorData(e){try{const t=await this.fileLoader.loadAsync(e);if(!t||t.byteLength===0)throw new Error("Empty response");return t}catch(t){throw new Error(`Failed to fetch vector tile: ${t.message}`)}}calculateTileBounds(e,t,n){const r=4007501668557849e-8/Math.pow(2,n),o=-20037508342789244e-9+e*r,l=o+r,u=20037508342789244e-9-(t+1)*r,c=u+r;return{min:new m.Vector2(o,u),max:new m.Vector2(l,c),world:new m.Vector2(r,r)}}buildTileUrl(e,t,n,r){return e.replace("{x}",t.toString()).replace("{y}",n.toString()).replace("{z}",r.toString()).replace("{-y}",(Math.pow(2,r)-1-n).toString())}createGeometryWithVectorData(e,t){const n=new Vr;return n.userData={vectorData:e,tileInfo:{x:t.x,y:t.y,z:t.z,bounds:t.bounds},metadata:{dataType:"vector-tile",version:"1.0.0",loadedAt:Date.now()}},n}createErrorGeometry(e,t,n,r){const o=new Vr;return o.userData={vectorData:{x:e,y:t,z:n,layers:{},totalFeatures:0,bounds:this.calculateTileBounds(e,t,n),error:r.message,timestamp:Date.now(),dataFormat:"error"},tileInfo:{x:e,y:t,z:n,bounds:[0,0,0,0]},metadata:{dataType:"vector-tile-error",error:!0,errorMessage:r.message}},o}unload(e){e.userData?.vectorData&&(e.userData.vectorData=null),e.dispose&&e.dispose()}static getVectorData(e){return e.userData?.vectorData||null}static hasValidVectorData(e){const t=this.getVectorData(e);return t&&!t.error&&t.totalFeatures>0}static getLayerNames(e){const t=this.getVectorData(e);return t?Object.keys(t.layers||{}):[]}static getFeaturesByLayer(e,t){return this.getVectorData(e)?.layers?.[t]?.convertedFeatures||[]}}Uc(new lv);var cv=Object.defineProperty,uv=(i,e,t)=>e in i?cv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,cr=(i,e,t)=>uv(i,typeof e!="symbol"?e+"":e,t);class ra extends Ac{constructor(e,t){if(super(e,t),cr(this,"layerType","vector"),cr(this,"_tileDataMap",new Map),cr(this,"_renderer"),cr(this,"_style"),cr(this,"_feaList",[]),cr(this,"_collision",!1),cr(this,"_renderAltitude",0),!t.style)throw new Error("VectorTileLayer 必须提供样式配置");this._style=t.style,this._collision=t.collision||!1,this._featureFilter=t.featureFilter,this._renderAltitude=t.altitude||0,this._rootTile.setDataOnlyMode(!0),this._setupDataModeAndListenersForChildren(),this._setupLifeCycleListeners()}_setupDataModeAndListenersForChildren(){const e=t=>{t!==this._rootTile&&t.setDataOnlyMode(!0),this._addShownListenerToTile(t),this._addUnloadListenerToTile(t)};this._rootTile.addEventListener("tile-created",t=>{const n=t.tile;e(n)}),this._rootTile.traverse(t=>{t.isTile&&e(t)})}_addShownListenerToTile(e){const t=n=>{const r=n.tile,o=`${r.z}-${r.x}-${r.y}`,l=!!this._renderer,u=this._tileDataMap.get(o);l&&u&&this._renderer.processTileData(r,u.data)};e.addEventListener("tile-shown",t)}_addUnloadListenerToTile(e){const t=n=>{const r=n.tile||n.target,o=`${r.z}-${r.x}-${r.y}`;if(this._renderer)try{this._renderer.removeFeaturesByTileKey(o)}catch{}this._tileDataMap.delete(o)};e.addEventListener("unload",t)}setAltitude(e){return super.setAltitude(0),this._renderAltitude=e,this._renderer&&this._renderer.setAltitude(e),this}getAltitude(){return this._renderAltitude}_addHiddenListenerToTile(e){const t=n=>{const r=n.tile,o=`${r.z}-${r.x}-${r.y}`;if(this._renderer)try{this._renderer.hideFeaturesByTileKey(o)}catch{}};e.addEventListener("tile-hidden",t)}_setupLifeCycleListeners(){this._rootTile.addEventListener("tile-loaded",e=>{const t=e.tile,n=`${t.z}-${t.x}-${t.y}`,r=this.getVectorDataFromTile(t);if(!r){console.warn(`[VectorTileLayer] Tile ${n} loaded but has no vector data.`);return}if(r.vectorData?.dataFormat==="mvt"&&this._tileDataMap.set(n,{data:r,tile:t,timestamp:Date.now(),pending:!1}),t.showing&&this._renderer&&r.vectorData?.dataFormat==="mvt")try{this._renderer.processTileData(t,r)}catch{}})}getVectorDataFromTile(e){return!e.geometry||!e.getVectorData()?null:e.getVectorData()}createLoader(){const e=new ls;return e.vtSource=this.source,e}getVisibleVectorTiles(){const e=[];return this._rootTile.traverse(t=>{if(t.isTile&&t.loaded&&t.inFrustum){const n=`${t.z}-${t.x}-${t.y}`,r=this._tileDataMap.get(n);r&&e.push({tileKey:n,data:r.data,tile:r.tile})}}),e}getAllVectorData(){return new Map(this._tileDataMap)}getVectorData(e,t,n){const r=`${n}-${e}-${t}`,o=this._tileDataMap.get(r);return o?o.data:null}setFeatureFilter(e){this._featureFilter=e,this._renderer&&this._renderer.setFeatureFilter(e)}clearFeatureFilter(){this._featureFilter=void 0,this._renderer&&this._renderer.clearFeatureFilter()}setOpacity(e){this.opacity=e,this._renderer&&this._renderer.setOpacity(e)}update(e){!this.enabled||!this.visible||super.update(e)}dispose(){this._renderer&&this._renderer.dispose(),super.dispose()}_setRenderer(e){this._renderer=e}_getRenderer(){return this._renderer||null}getStyle(){return this._style}}var hv=Object.defineProperty,dv=(i,e,t)=>e in i?hv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Re=(i,e,t)=>dv(i,typeof e!="symbol"?e+"":e,t);class fv{constructor(...e){}}const pv={};let ur=class zd extends Io(Cr(Ir(fv))){constructor(e,t){Po(e,"container","Map container element must be specified");const n=["center","basemap"];for(const W of n)Hl(t,W);const o={...t,viewer:{...{viewer:{antialias:!0,stencil:!0,logarithmicDepthBuffer:!0}}.viewer,...t.viewer}};super(o),Re(this,"viewer"),Re(this,"tilemap"),Re(this,"center"),Re(this,"prjcenter"),Re(this,"_layerContainer"),Re(this,"_EventMap",{loaded:{listened:!1}}),Re(this,"_canvasManager",new $m),Re(this,"collisionEngine"),Re(this,"_onLoadHooks"),Re(this,"_minZoom",0),Re(this,"_maxZoom",22),Re(this,"_ZOOM_MIN_CONST",0),Re(this,"_ZOOM_MAX_CONST",22),Re(this,"_minZoomDistance",500),Re(this,"_maxZoomDistance",8e4),Re(this,"_isZooming",!1),Re(this,"_zoomStartValue",0),Re(this,"_lastZoomForControls",0),Re(this,"_overZoom",0),Re(this,"_lastCameraDistance",0),this.tilemap=this.initTileMap(o.basemap),this.center=this.options.center,this.viewer=new El(e,{...o.viewer,map:this}),this.tilemap.receiveShadow=!0,this.viewer.scene.add(this.tilemap);const l=this.tilemap.geo2world(new m.Vector3(this.center[0],this.center[1],0));this.prjcenter=l;const u=this.options.viewer??{};this.viewer.flyToPoint({center:this.center,distance:typeof this.center[2]=="number"?this.center[2]:void 0,polarDeg:typeof u.polarDeg=="number"?u.polarDeg:void 0,azimuthDeg:typeof u.azimuthDeg=="number"?u.azimuthDeg:void 0,polarAngle:u.polarAngle,azimuthAngle:u.azimuthAngle,duration:0,curvePath:!1}),this._minZoomDistance=this.viewer.controls.minDistance,this._maxZoomDistance=this.viewer.controls.maxDistance;const c=this._getCameraDistance();this._lastCameraDistance=c,this._layerContainer=new Jm,this.viewer.scene.add(this._layerContainer);const d=this.viewer.controls;this._minZoomDistance=typeof d?.minDistance=="number"?d.minDistance:500,this._maxZoomDistance=typeof d?.maxDistance=="number"?d.maxDistance:8e4;const f=this.tilemap.getLayers().find(W=>W.isBaseLayer===!0)?.minLevel??this.tilemap.minLevel;this._minZoom=Math.max(this._ZOOM_MIN_CONST,Math.min(this._ZOOM_MAX_CONST,f)),this._maxZoom=this._ZOOM_MAX_CONST;const y=this.prjcenter,_=this.viewer.camera.position.clone().clone().sub(y).normalize(),x=$i(t.zoom)?13:t.zoom,P=Math.max(this._minZoom,Math.min(this._maxZoom,x)),L=this._computeDistanceFromZoom(P);l.clone().addScaledVector(_,L);const T=this.getZoom();this._lastZoomForControls=T,this._zoomStartValue=T,this.collisionEngine=new Z0(this.viewer.renderer,{padding:8,updateInterval:16,animationDuration:200,maxFeaturesPerFrame:2e4,strategies:{priority:!0,grouping:!0,proximity:!0}}),this.on("control-change",G0.debounce(W=>{const K=this.tilemap,O=K.getDataZoom(),V=K.getLayers().find(H=>H.isBaseLayer===!0)?.maxLevel??K.maxLevel,R=this._getCameraDistance(),C=R-this._lastCameraDistance;this._lastCameraDistance=R;const{max:X}=this._getViewZoomRange(),Y=Math.max(0,X-V);O<V?this._overZoom=0:C<-.001?this._overZoom=Math.min(this._overZoom+1,Y):C>.001&&(this._overZoom=Math.max(this._overZoom-1,0));const Q=this.getZoom();Math.abs(Q-this._lastZoomForControls)>.001&&(this._isZooming?this.trigger("zooming",{from:this._zoomStartValue,to:Q}):(this._isZooming=!0,this._zoomStartValue=this._lastZoomForControls,this.trigger("zoomstart",{from:this._zoomStartValue,to:Q})),this._lastZoomForControls=Q),this.collisionEngine.update(W.camera)},10,{leading:!1,trailing:!0})),this.on("control-end",()=>{this._isZooming&&(this._isZooming=!1,this.trigger("zoomend",{from:this._zoomStartValue,to:this.getZoom()}))}),this._callOnLoadHooks()}static addOnLoadHook(e,...t){const n=typeof e=="function"?e:function(){this[e].apply(this,t)},r=this.prototype;return r._onLoadHooks=r._onLoadHooks||[],r._onLoadHooks.push(n),this}_callOnLoadHooks(){const e=zd.prototype;if(e._onLoadHooks)for(let t=0,n=e._onLoadHooks.length;t<n;t++)e._onLoadHooks[t].call(this)}getZoom(){const e=this.tilemap,t=e.getDataZoom(),r=e.getLayers().find(o=>o.isBaseLayer===!0)?.maxLevel??e.maxLevel;return t<r?t:r+this._overZoom}getDataZoom(){return this.tilemap.getDataZoom()}getMinZoom(){return this._minZoom}getMaxZoom(){return this._maxZoom}setZoomRange(e,t){if(e>t){const r=e;e=t,t=r}this._minZoom=e,this._maxZoom=t;const n=this.viewer.controls;if(n){const r=this._computeDistanceFromZoom(this._maxZoom),o=this._computeDistanceFromZoom(this._minZoom);n.minDistance=r,n.maxDistance=o}return this}setMinZoom(e){return this.setZoomRange(e,this._maxZoom)}setMaxZoom(e){return this.setZoomRange(this._minZoom,e)}setZoom(e){const t=this.getMinZoom(),n=this.getMaxZoom(),r=Math.max(t,Math.min(n,e)),o=this.getZoom(),l=this._computeDistanceFromZoom(r),u=this.viewer.controls,c=u?.target??this.prjcenter,d=this.viewer.camera,p=d.position.clone().sub(c).normalize();return d.position.copy(c).addScaledVector(p,l),d.updateProjectionMatrix(),typeof u?.update=="function"&&u.update(),this._lastZoomForControls=r,this.trigger("zoomend",{from:o,to:this.getZoom()}),this}zoomIn(e=1){return this.setZoom(this.getZoom()+e)}zoomOut(e=1){return this.setZoom(this.getZoom()-e)}_computeDistanceFromZoom(e){const t=this._ZOOM_MIN_CONST,n=this._ZOOM_MAX_CONST,r=this._minZoomDistance,o=this._maxZoomDistance;if(r<=0||r>=o){const p=Math.max(t,Math.min(n,e)),f=(n-p)/(n-t);return r+f*(o-r)}const u=(Math.max(t,Math.min(n,e))-t)/(n-t),c=r/o;return o*Math.pow(c,u)}initTileMap(e){const t=new Ei({...e});try{if(e.Baselayers?.length)for(const n of e.Baselayers)n.isBaseLayer=!0,t.addLayer(n)}catch(n){console.error("💥 诊断失败:",n)}return t.rotateX(-Math.PI/2),t.receiveShadow=!0,setTimeout(()=>{const n={timestamp:$p(),targrt:this};this._EventMap.loaded={listened:!0},this.trigger("loaded",n)},0),t}addLayer(e,...t){if(!e)return this;Array.isArray(e)||(e=[e]),t?.length&&(e=e.concat(t)),t?.length&&(e=e.concat(t));for(let n=0,r=e.length;n<r;n++){const o=e[n],l=o.getId();if($i(l))throw new Error("Invalid id for the layer: "+l);o.isTileLayer?this.addTileLayer(o):this.addRegularLayer(o)}return this}removeLayer(e){const t=this.tilemap.getLayer(e);if(t){if(t instanceof ra){const r=t._getRenderer();r&&this._layerContainer.remove(r)}return this.tilemap.removeLayer(e),!0}const n=this._layerContainer.getLayerById(e);return n?(this._layerContainer.remove(n),n instanceof zn&&n?._collision,!0):(console.warn(`⚠️ 图层不存在: ${e}`),!1)}addRegularLayer(e){const t=e.getId();this._layerContainer.add(e),e._bindMap(this),e instanceof zn&&e?._collision&&(this.collisionEngine.registerLayer(e),e.setCollisionEngine(this.collisionEngine)),console.log(`📁 普通图层已添加到场景: ${t}`)}addTileLayer(e){if(this.tilemap.addLayer(e),e._bindMap(this),e instanceof ra){const t=e.options||{},n=new Ro(e.getId()+"-vtrender",{altitude:e.getAltitude(),style:e.getStyle(),collision:e._collision,zIndex:typeof t.zIndex=="number"?t.zIndex:void 0,depthOffset:typeof t.depthOffset=="number"?t.depthOffset:void 0});e._setRenderer(n),this.addRegularLayer(n)}return this}clearLayers(){return this._layerContainer.clear(),this.tilemap.clearLayers(),this}getLayers(){const e=this._layerContainer.getLayers().filter(n=>!(n instanceof Ro)),t=this.tilemap.getLayers();return[...e,...t]}getLayerById(e){const t=this._layerContainer.getLayerById(e);return t?t instanceof Ro?void 0:t:this.tilemap.getLayer(e)}geo2world(e){return this.tilemap.geo2world(e)}world2geo(e){return this.tilemap.world2geo(e)}geo2map(e){return this.tilemap.geo2map(e)}_getCanvas(e=40,t=30,n){return this._canvasManager.getCanvas(e,t,1,n)}getContainer(){return this.viewer.container}getRenderer(){return this.viewer.renderer}getCamera(){return this.viewer.camera}_findFeaturesAt(e){const t=this,n=t.getRenderer(),r=t.getCamera(),o=n.domElement.getBoundingClientRect(),l=e.x/o.width*2-1,u=-(e.y/o.height)*2+1,c=new m.Raycaster;c.setFromCamera(new m.Vector2(l,u),r);const d=t.getLayers().filter(y=>!y?.isSceneLayer),f=c.intersectObjects(d,!0).map(y=>{let v=y.object,_=null;for(;v;){if(v instanceof _n){_=v;break}v=v.parent}return _?{feature:_,distance:y.distance,object:y.object}:null}).filter(y=>!!y);return f.length?f.sort((y,v)=>y.distance-v.distance):[]}getCenter(){const e=this.viewer.controls.target.clone(),t=this.world2geo(e);return[t.x,t.y,t.z]}_getEventPosition(e){let t,n;if("touches"in e){if(e.touches.length===0)return null;t=e.touches[0].clientX,n=e.touches[0].clientY}else t=e.clientX,n=e.clientY;const r=this.getContainer();if(!r)return null;const o=r.getBoundingClientRect();return{x:t-o.left,y:n-o.top}}get isInteracting(){return this.viewer.isInteracting}_getCameraDistance(){const e=this.viewer.controls,t=this.viewer.camera,n=e?.target??this.prjcenter;return e&&typeof e.getDistance=="function"?e.getDistance():t.position.distanceTo(n)}_getViewZoomRange(){const e=this.viewer.controls,t=typeof e?.minDistance=="number"?e.minDistance:this._minZoomDistance,n=typeof e?.maxDistance=="number"?e.maxDistance:this._maxZoomDistance;if(t<=0||t>=n){const f=this.tilemap.getDataZoom();return{min:f,max:f}}const r=n/t,o=Math.log2(r),l=this.tilemap.getLayers().find(f=>f.isBaseLayer===!0),u=l?.minLevel??this.tilemap.minLevel,c=l?.maxLevel??this.tilemap.maxLevel,d=u,p=c+o;return{min:d,max:p}}flyTo(e){this.viewer.flyToAdvanced(e)}flyToPoint(e){this.viewer.flyToPoint(e)}};ur.mergeOptions(pv);function tu(i,e,t){const{currentTarget:n,clientX:r,clientY:o}=i;if(n instanceof HTMLElement){const l=n.clientWidth,u=n.clientHeight,c=new m.Vector2(r/l*2-1,-(o/u)*2+1);return e.getLocalInfoFromScreen(t,c)?.location}else return}const mv=["click","dblclick","mousedown","mouseup","mousemove","mouseenter","mouseleave","mouseover","mouseout"];ur.prototype._removeDomEvents=function(){console.log("removeDomEvents",this)},ur.prototype._registerDomEvents=function(){const i=this.viewer.container;if(i){let t=null;mv.forEach(n=>{i.addEventListener(n,r=>{if(n==="mousedown"&&(t={x:r.clientX,y:r.clientY}),n==="click"&&t){const u=r.clientX-t.x,c=r.clientY-t.y;if(Math.sqrt(u*u+c*c)>5)return}let o=tu(r,this.tilemap,this.viewer.camera),l={target:this,originEvent:r,eventName:n,screenXY:{X:r.screenX,Y:r.screenY}};if(o){let u=[o.x,o.y,o.z];l={target:this,originEvent:r,coordinate:u,eventName:n,screenXY:{X:r.screenX,Y:r.screenY}}}this.trigger(n,l)})})}},ur.addOnLoadHook("_registerDomEvents");var gv=Object.defineProperty,yv=(i,e,t)=>e in i?gv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,nu=(i,e,t)=>yv(i,typeof e!="symbol"?e+"":e,t);const vv=["click","dblclick","mousedown","mouseup","mousemove","mouseenter","mouseleave","mouseover","mouseout","contextmenu","touchstart","touchmove","touchend"];class wv extends ic{constructor(){super(...arguments),nu(this,"_registeredEvents",[]),nu(this,"_eventCommon",e=>{(e.type==="mousedown"||e.type==="touchstart")&&(this._mouseDownTime=Date.now()),!(e.type==="click"&&Date.now()-this._mouseDownTime>300)&&this._handleEvent(e,e.type)})}addHooks(){const t=this.target.getContainer();t&&vv.forEach(n=>{t.addEventListener(n,this._eventCommon),this._registeredEvents.push(n)})}removeHooks(){const t=this.target.getContainer();t&&this._registeredEvents.length>0&&(this._registeredEvents.forEach(n=>{const r=n;t.removeEventListener(r,this._eventCommon)}),this._registeredEvents=[])}_handleEvent(e,t){const n=this.target;if(this._shouldIgnoreEvent()||(t==="mousemove"||t==="mouseenter"||t==="mouseleave"||t==="mouseover"||t==="mouseout"||t==="touchmove")&&!n.getLayers().some(c=>!c.isSceneLayer&&c._feaList?.length>0))return;const r=n._getEventPosition(e);if(!r)return;const o=n._findFeaturesAt(r);if(o.length===0)return;const l=o[0].feature;switch(t){case"click":this._handleClickEvent(l,e);break;case"mousemove":case"mouseenter":case"mouseleave":case"mouseover":case"mouseout":case"touchmove":this.handleMoveEvent(l,e);break;default:if(l){this._fireFeatureEvent(l,t,e);const u=l.getLayer();u&&u.trigger("feature"+t,{feature:l,domEvent:e,type:"feature"+t})}}}_handleClickEvent(e,t){if(!e)return;this._fireFeatureEvent(e,"click",t);const n=e.getLayer();n&&n.trigger("featureclick",{feature:e,domEvent:t,type:"featureclick"})}handleMoveEvent(e,t){if(!e)return;this._fireFeatureEvent(e,t.type,t);const n=e.getLayer();n&&n.trigger("feature"+t.type,{feature:e,domEvent:t,type:"feature"+t.type})}_fireFeatureEvent(e,t,n){const r=this.target;let o=n,l,u;if("touches"in n){const f=n.touches[0]||n.changedTouches[0];if(!f)return;o={currentTarget:n.currentTarget,clientX:f.clientX,clientY:f.clientY},l=f.screenX,u=f.screenY}else{const f=n;o=f,l=f.screenX,u=f.screenY}const c=tu(o,r.tilemap,r.viewer.camera);if(!c)return;const d=[c.x,c.y,c.z],p={target:e,originEvent:n,coordinate:d,eventName:t,screenXY:{X:l,Y:u}};e.trigger(t,p)}_shouldIgnoreEvent(){return!!this.target.isInteracting}}ur.mergeOptions({FeatureEvents:!0,onlyVisibleFeatureEvents:!0}),ur.addOnLoadHook("addHandler","FeatureEvents",wv);var _v=Object.defineProperty,bv=(i,e,t)=>e in i?_v(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,fn=(i,e,t)=>bv(i,typeof e!="symbol"?e+"":e,t);let xv=class{constructor(...e){}};const ru=class io extends Cr(Ir(xv)){constructor(e={}){super(e),fn(this,"_owner"),fn(this,"_map"),fn(this,"_worldPosition"),fn(this,"_coordinate"),fn(this,"_dom"),fn(this,"_visible",!1),fn(this,"_boundMapHandlers",new Map),fn(this,"_viewerUpdateHandler"),fn(this,"_positionedOnce",!1)}_getClassName(){return"UIComponent"}getOffset(){return{x:this.options.dx??0,y:this.options.dy??0}}addTo(e){if(!e)return this;this._owner=e;const t=typeof e.getMap=="function"?e.getMap():e;return t?(this._map=t,this._bindMapEvents(!0),this.options.single&&(io._singletons.forEach(n=>{n!==this&&n.options.single&&n._map===t&&n.hide()}),io._singletons.add(this)),this.onAdd&&this.onAdd(),this.trigger("add",{owner:e,map:t}),this):this}remove(){const e=this._map;return this.hideDom(),this._bindMapEvents(!1),this.options.single&&io._singletons.delete(this),this.onRemove&&this.onRemove(),this.trigger("remove",{owner:this._owner,map:e}),this._owner=void 0,this._map=void 0,this}show(e){const t=this._map??(this._owner&&typeof this._owner.getMap=="function"?this._owner.getMap():void 0);if(!t)return this;if(this._map=t,!this._dom){const n=this.buildOn();this._dom=n,n.style.position="absolute",typeof this.options.zIndex=="number"&&(n.style.zIndex=String(this.options.zIndex));const r=t.getContainer();if(!r)return this;r.appendChild(n)}return this._coordinate=e?[...e]:void 0,this._visible=!0,this._positionedOnce=!1,this._dom&&(this._dom.style.display="none"),this.trigger("show",{owner:this._owner,map:t}),this}hide(){return this._visible=!1,this._dom&&(this._dom.style.display="none"),this._coordinate=void 0,this.trigger("hide",{owner:this._owner,map:this._map}),this}hideDom(){return this._dom&&this._dom.parentElement&&(this._dom.parentElement.removeChild(this._dom),this.onDomRemove&&this.onDomRemove()),this._dom=void 0,this._visible=!1,this._coordinate=void 0,this}getMap(){return this._map}isVisible(){return this._visible}_bindMapEvents(e){const t=this._map;if(!t)return;const n=t,r=e?"on":"off",o=(l,u)=>{e?this._boundMapHandlers.set(l,u):this._boundMapHandlers.delete(l)};if(e){const l=()=>{this._visible&&this._updatePosition()};n[r]("control-change",l),o("control-change",l);const u=t.viewer;if(u&&!this._viewerUpdateHandler){const c=()=>{this._visible&&this._updatePosition()};this._viewerUpdateHandler=c,u.addEventListener("update",c)}}else{this._boundMapHandlers.forEach((u,c)=>{n[r](c,u)}),this._boundMapHandlers.clear();const l=t.viewer;l&&this._viewerUpdateHandler&&(l.removeEventListener("update",this._viewerUpdateHandler),this._viewerUpdateHandler=void 0)}}_resolveWorldPosition(){const e=this._map;if(!e)return;if(this._coordinate){const[n,r,o=0]=this._coordinate,l=new m.Vector3(n,r,o);return e.geo2world(l)}const t=this._owner;if(t&&t._geometry){const n=t._geometry;if(n&&(n.type==="Point"||n.type==="MultiPoint")){let r;if(n.type==="Point"?r=n.coordinates:n.type==="MultiPoint"&&Array.isArray(n.coordinates)&&n.coordinates.length>0&&(r=n.coordinates[0]),r&&r.length>=2){const o=new m.Vector3(r[0],r[1],r[2]??0);return e.geo2world(o)}}if(t._threeGeometry&&typeof t._threeGeometry.getWorldPosition=="function"){const r=new m.Vector3;if(t._threeGeometry.getWorldPosition(r),!(r.x===0&&r.y===0&&r.z===0))return r}if(t._position instanceof m.Vector3){const r=t._position;if(!(r.x===0&&r.y===0&&r.z===0))return r.clone()}}if(t&&typeof t.getWorldPosition=="function"){const n=new m.Vector3;return t.getWorldPosition(n),n}return e.prjcenter?.clone?.()??void 0}_updatePosition(){if(!this._dom||!this._map)return;if(this._visible){const d=this._resolveWorldPosition();if(!d){this._dom.style.display="none";return}this._worldPosition=d}if(!this._worldPosition)return;const e=this._map.viewer,t=e.camera,n=e.renderer,r=this._worldPosition.clone().project(t);if(r.x<-1.1||r.x>1.1||r.y<-1.1||r.y>1.1||r.z<-1||r.z>1){this._dom.style.display="none";return}const o=new m.Vector2;n.getSize(o);const l=(r.x*.5+.5)*o.width,u=(-r.y*.5+.5)*o.height,c=this.getOffset();if(this._dom.style.left=`${l+c.x}px`,this._dom.style.top=`${u+c.y}px`,!this._positionedOnce){this._positionedOnce=!0;return}this._dom.style.display=""}};fn(ru,"_singletons",new Set);let Lv=ru;var Mv=Object.defineProperty,Sv=(i,e,t)=>e in i?Mv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,iu=(i,e,t)=>Sv(i,typeof e!="symbol"?e+"":e,t);class su extends Lv{constructor(e){super({single:!0,...e}),iu(this,"_titleEl"),iu(this,"_contentEl")}_getClassName(){return"InfoWindow"}buildOn(){if(this.options.custom){let u;this.options.content instanceof HTMLElement?u=this.options.content:(u=document.createElement("div"),typeof this.options.content=="string"&&(u.innerHTML=this.options.content));const c=this.options.containerClass;return c&&(Array.isArray(c)?c:[c]).forEach(p=>{u.classList.add(p)}),this.options.minWidth&&(u.style.minWidth=`${this.options.minWidth}px`),this.options.minHeight&&(u.style.minHeight=`${this.options.minHeight}px`),this._titleEl=void 0,this._contentEl=u,u}const e=document.createElement("div");e.className="terra-infowindow";const t=this.options.containerClass;t&&(Array.isArray(t)?t:[t]).forEach(c=>{e.classList.add(c)}),typeof this.options.zIndex=="number"&&(e.style.zIndex=String(this.options.zIndex)),this.options.minWidth&&(e.style.minWidth=`${this.options.minWidth}px`),this.options.minHeight&&(e.style.minHeight=`${this.options.minHeight}px`);const n=document.createElement("div");n.className="terra-infowindow-header";const r=document.createElement("div");r.className="terra-infowindow-title",this.options.title&&(r.innerText=this.options.title);const o=document.createElement("span");o.className="terra-infowindow-close",o.innerHTML="×",o.title="关闭",o.addEventListener("click",u=>{u.stopPropagation(),u.preventDefault(),this.close()}),o.addEventListener("mousedown",u=>{u.preventDefault()}),o.style.cursor="pointer",o.style.userSelect="none",n.appendChild(r),n.appendChild(o);const l=document.createElement("div");return l.className="terra-infowindow-content",this.options.content instanceof HTMLElement?l.appendChild(this.options.content):typeof this.options.content=="string"&&(l.innerHTML=this.options.content),e.appendChild(n),e.appendChild(l),this._titleEl=r,this._contentEl=l,e}getOffset(){const e=super.getOffset(),t=this._dom;if(!t)return e;const n=t.offsetWidth,r=t.offsetHeight;return{x:e.x-n/2,y:e.y-r-10}}setTitle(e){return this.options.title=e,this._titleEl&&(this._titleEl.innerText=e??""),this}setContent(e){return this.options.content=e,this._contentEl?(this._contentEl.innerHTML="",e instanceof HTMLElement?this._contentEl.appendChild(e):this._contentEl.innerHTML=e,this):this}open(e){super.show(e);const t=this,n=()=>{!t._dom||!t._map||!t._visible||(t._positionedOnce=!0,t._updatePosition())},o=this.getMap()?.viewer;if(o&&typeof o.addEventListener=="function"){const l=()=>{o.removeEventListener("update",l),n()};o.addEventListener("update",l)}else requestAnimationFrame(n);return this}close(){return this.hide()}}_n.include({setInfoWindow(i){this.removeInfoWindow();let e;return i instanceof su?e=i:e=new su(i),this._infoWindow=e,this.getMap()&&e.addTo(this),this},getInfoWindow(){return this._infoWindow},openInfoWindow(i){const e=this._infoWindow;return e?(e.getMap()||this.getMap()&&e.addTo(this),requestAnimationFrame(()=>{e.open(i)}),this):this},closeInfoWindow(){return this._infoWindow&&this._infoWindow.close(),this},removeInfoWindow(){return this._infoWindow&&(this._infoWindow.remove(),this._infoWindow=void 0),this}});var Pv=Object.defineProperty,Tv=(i,e,t)=>e in i?Pv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,ia=(i,e,t)=>Tv(i,typeof e!="symbol"?e+"":e,t);class Zv{constructor(...e){}}class ou extends Cr(Ir(Zv)){constructor(e={}){super(e),ia(this,"_map"),ia(this,"_enabled",!1),ia(this,"_boundHandlers",new Map)}addTo(e){if(!e)return this;const t=e;return t._activeMapTool&&t._activeMapTool!==this&&t._activeMapTool.disable(),t._activeMapTool=this,this._map=e,this.onAdd&&this.onAdd(),this.enable(),this.trigger("add",{map:e}),this}getMap(){return this._map}enable(){return!this._map||this._enabled?this:(this._enabled=!0,this._bindEvents(),this.onEnable&&this.onEnable(),this.trigger("enable",{map:this._map}),this)}disable(){return!this._map||!this._enabled?this:(this._enabled=!1,this._unbindEvents(),this.onDisable&&this.onDisable(),this.trigger("disable",{map:this._map}),this)}isEnabled(){return!!this._enabled}remove(){if(!this._map)return this;this.disable();const e=this._map;return e._activeMapTool===this&&delete e._activeMapTool,this._map=void 0,this.trigger("remove"),this}_bindEvents(){const e=this._map;if(!e)return;const t=this.getEvents()||{};Object.keys(t).forEach(n=>{const r=t[n];if(!r)return;const o=l=>r.call(this,l);this._boundHandlers.set(n,o),e.on(n,o)})}_unbindEvents(){const e=this._map;e&&(this._boundHandlers.forEach((t,n)=>{e.off(n,t)}),this._boundHandlers.clear())}}var Gv=Object.defineProperty,Wv=(i,e,t)=>e in i?Gv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,wi=(i,e,t)=>Wv(i,typeof e!="symbol"?e+"":e,t);class Cv extends zn{constructor(e){super(e,{altitude:1})}validateFeature(e){return!!e}}const au={};class Fr extends ou{constructor(e){super(e),wi(this,"_modeDef"),wi(this,"_clickCoords",[]),wi(this,"_isDrawing",!1),wi(this,"_geometry"),wi(this,"_draftLayer"),this.options.once=this.options.once??!1,this._ensureMode()}static registerMode(e,t){au[e.toLowerCase()]=t}static getModeDefinition(e){return au[e.toLowerCase()]}getMode(){return(this.options.mode||"").toLowerCase()}setMode(e){return this._finishDrawingSilently(),this.options.mode=e,this._ensureMode(),this}getEvents(){return{click:this._handleClick.bind(this),mousemove:this._handleMouseMove.bind(this),dblclick:this._handleDblClick.bind(this)}}onEnable(){this._ensureMode()}onDisable(){this._finishDrawingSilently(),this._destroyDraftLayer()}_ensureMode(){const e=this.getMode(),t=Fr.getModeDefinition(e);if(!t)throw new Error(`DrawTool: mode "${e}" 未注册,请先调用 DrawTool.registerMode`);this._modeDef=t}_handleClick(e){if(!this._modeDef||!e.coordinate)return;const t=e.coordinate,n=this._modeDef,r={...e,drawTool:this};this._isDrawing?(this._clickCoords.push(t),n.update(this._clickCoords,this._geometry,r),this.trigger("drawvertex",{coordinate:t,geometry:this._geometry,coords:[...this._clickCoords],originEvent:r})):(this._isDrawing=!0,this._clickCoords=[t],this._geometry=n.create(t,r),this.trigger("drawstart",{coordinate:t,geometry:this._geometry,coords:[...this._clickCoords],originEvent:r})),n.clickLimit&&this._clickCoords.length>=n.clickLimit&&this._finishDrawing(r)}_handleMouseMove(e){if(!this._modeDef||!this._isDrawing||!e.coordinate)return;const t=this._modeDef,n=[...this._clickCoords,e.coordinate],r={...e,drawTool:this};t.update(n,this._geometry,r),this.trigger("drawing",{coordinate:e.coordinate,geometry:this._geometry,coords:n,originEvent:r})}_handleDblClick(e){if(!this._modeDef||!this._isDrawing)return;const t={...e,drawTool:this};this._finishDrawing(t)}_finishDrawing(e){if(!this._modeDef||!this._isDrawing)return;const n=this._modeDef.generate(this._geometry,[...this._clickCoords]);this.trigger("drawend",{geometry:n,coords:[...this._clickCoords],originEvent:e}),this._isDrawing=!1,this._clickCoords=[],this._geometry=void 0,this.options.once&&this.disable()}_finishDrawingSilently(){this._isDrawing=!1,this._clickCoords=[],this._geometry=void 0}_getOrCreateDraftLayer(){if(this._draftLayer)return this._draftLayer;const e=this.getMap();if(!e)throw new Error("DrawTool: 尚未绑定地图,请先调用 addTo(map)");const t=`__draw_draft_${Date.now().toString(36)}`,n=new Cv(t);return e.addLayer(n),this._draftLayer=n,n}_destroyDraftLayer(){const e=this.getMap();e&&this._draftLayer&&e.removeLayer(this._draftLayer.getId()),this._draftLayer=void 0}}const Iv={actions:["click","mousemove"],create(i,e){const t=e.drawTool,n=t._getOrCreateDraftLayer(),r=Nn(t.options.geometryStyle,{type:"basic-point",size:10,color:"#00ffff"}),o={type:"Point",coordinates:i},l=new bn({geometry:o,style:r});return l.addTo(n),l.initializeGeometry(),{tool:t,draftLayer:n,draftMarker:l}},update(i,e,t){const n=e?.draftMarker;if(!n)return;const r=i[i.length-1];n._geometry={type:"Point",coordinates:r},n._position=n._coordsTransform(),n._toThreeJSGeometry&&n._toThreeJSGeometry()},generate(i,e){const t=i.tool;if(!e.length)return null;i.draftMarker&&(i.draftMarker._remove(),i.draftMarker=null);const n=Nn(t.options.geometryStyle,{type:"basic-point",size:10,color:"#00ffff"}),r=e[e.length-1];return new bn({geometry:{type:"Point",coordinates:r},style:n})},clickLimit:1},Vv={actions:["click","mousemove","dblclick"],create(i,e){const t=e.drawTool,n=t._getOrCreateDraftLayer(),r=Nn(t.options.geometryStyle,{type:"basic-line",color:"#ff0000",width:2}),o=t.options.vertexStyle===null?void 0:Nn(t.options.vertexStyle,{type:"basic-point",size:8,color:"#00ffff"}),l={type:"LineString",coordinates:[i]},u=new lr({geometry:l,style:r});u.addTo(n);const c=[];if(o){const d={type:"Point",coordinates:i},p=new bn({geometry:d,style:o});p.addTo(n),c.push(p)}return{tool:t,draftLayer:n,draftLine:u,draftAnchors:c,lineStyle:r,vertexStyle:o}},update(i,e,t){if(!e)return;const n=e.draftLayer;if(!i||i.length<2)return;e.draftLine&&(e.draftLine._remove(),e.draftLine=null);const r={type:"LineString",coordinates:i},o=new lr({geometry:r,style:e.lineStyle});if(o.addTo(n),e.draftLine=o,t.eventName==="click"&&e.vertexStyle){const u={type:"Point",coordinates:i[i.length-1]},c=new bn({geometry:u,style:e.vertexStyle});c.addTo(n),e.draftAnchors.push(c)}},generate(i,e){const t=i.tool;if(!e.length)return null;if(i.draftLine&&(i.draftLine._remove(),i.draftLine=null),Array.isArray(i.draftAnchors)){for(const o of i.draftAnchors)o?._remove();i.draftAnchors=[]}const n=Nn(t.options.geometryStyle,{type:"basic-line",color:"#ff0000",width:2});return new lr({geometry:{type:"LineString",coordinates:e},style:n})}},Av={actions:["click","mousemove","dblclick"],create(i,e){const t=e.drawTool,n=t._getOrCreateDraftLayer(),r=Nn(t.options.geometryStyle,{type:"basic-polygon",color:"#00ff00",opacity:.5}),o=t.options.vertexStyle===null?void 0:Nn(t.options.vertexStyle,{type:"basic-point",size:8,color:"#00ffff"}),l=[];if(o){const u={type:"Point",coordinates:i},c=new bn({geometry:u,style:o});c.addTo(n),c.initializeGeometry(),l.push(c)}return{tool:t,draftLayer:n,draftPolygon:null,draftEdgeLine:null,draftAnchors:l,polygonStyle:r,vertexStyle:o}},update(i,e,t){if(!e)return;const n=e.draftLayer;if(t.eventName==="click"&&e.vertexStyle){const p={type:"Point",coordinates:i[i.length-1]},f=new bn({geometry:p,style:e.vertexStyle});f.addTo(n),f.initializeGeometry(),e.draftAnchors.push(f)}if(!i||i.length<2){e.draftEdgeLine&&(e.draftEdgeLine._remove(),e.draftEdgeLine=null),e.draftPolygon&&(e.draftPolygon._remove(),e.draftPolygon=null);return}if(i.length===2){e.draftPolygon&&(e.draftPolygon._remove(),e.draftPolygon=null),e.draftEdgeLine&&(e.draftEdgeLine._remove(),e.draftEdgeLine=null);const d={type:"LineString",coordinates:i},p=e.polygonStyle?.config&&e.polygonStyle.config.color||"#00ff00",f=new Ot({type:"basic-line",color:p,width:2}),y=new lr({geometry:d,style:f});y.addTo(n),e.draftEdgeLine=y;return}e.draftEdgeLine&&(e.draftEdgeLine._remove(),e.draftEdgeLine=null);const r=i.slice(),o=r[0],l=r[r.length-1];(o[0]!==l[0]||o[1]!==l[1]||(o[2]||0)!==(l[2]||0))&&r.push(o),e.draftPolygon&&(e.draftPolygon._remove(),e.draftPolygon=null);const u={type:"Polygon",coordinates:[r]},c=new is({geometry:u,style:e.polygonStyle});c.addTo(n),e.draftPolygon=c},generate(i,e){const t=i.tool;if(e.length<3)return null;if(i.draftPolygon&&(i.draftPolygon._remove(),i.draftPolygon=null),i.draftEdgeLine&&(i.draftEdgeLine._remove(),i.draftEdgeLine=null),Array.isArray(i.draftAnchors)){for(const c of i.draftAnchors)c?._remove();i.draftAnchors=[]}const n=Nn(t.options.geometryStyle,{type:"basic-polygon",color:"#00ff00",opacity:.5}),r=e.slice(),o=r[0],l=r[r.length-1];return(o[0]!==l[0]||o[1]!==l[1]||(o[2]||0)!==(l[2]||0))&&r.push(o),new is({geometry:{type:"Polygon",coordinates:[r]},style:n})}};Fr.registerMode("point",Iv),Fr.registerMode("line",Vv),Fr.registerMode("polygon",Av);function Nn(i,e){return Ot.create(i||e)}var Fv=Object.defineProperty,Xv=(i,e,t)=>e in i?Fv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,$t=(i,e,t)=>Xv(i,typeof e!="symbol"?e+"":e,t);class Ov extends Et{constructor(e){if(super(e),$t(this,"dataType","image"),$t(this,"attribution","天地图"),$t(this,"token",""),$t(this,"style","img_w"),$t(this,"subdomains","01234"),$t(this,"url","https://t{s}.tianditu.gov.cn/DataServer?T={style}&x={x}&y={y}&l={z}&tk={token}"),Object.assign(this,e),!this.token)throw new Error("天地图访问令牌(token)是必填参数")}}class zv extends Et{constructor(e){if(super(e),$t(this,"dataType","quantized-mesh"),$t(this,"attribution","天地图"),$t(this,"token",""),$t(this,"subdomains","01234"),$t(this,"url","https://t{s}.tianditu.gov.cn/mapservice/swdx?T=elv_c&tk={token}&x={x}&y={y}&l={z}"),Object.assign(this,e),!this.token)throw new Error("天地图访问令牌(token)是必填参数")}}var Dv=Object.defineProperty,Kv=(i,e,t)=>e in i?Dv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,lu=(i,e,t)=>Kv(i,typeof e!="symbol"?e+"":e,t);class kv extends Et{constructor(e){super({...e,url:e.urlTemplate,isTMS:e.isTMS||!1}),lu(this,"minLevel",2),lu(this,"maxLevel",24)}getUrl(e,t,n){const r=this.isTMS?Math.pow(2,n)-1-t:t;return Ep(this.url,{...this,x:e,y:r,z:n,tileMatrix:n,tileRow:r,tileCol:e})}}var Rv=Object.defineProperty,Nv=(i,e,t)=>e in i?Rv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,xn=(i,e,t)=>Nv(i,typeof e!="symbol"?e+"":e,t);class Uv extends Et{constructor(e){super(e),xn(this,"dataType","image"),xn(this,"attribution","ArcGIS"),xn(this,"style","World_Imagery"),xn(this,"url","https://services.arcgisonline.com/arcgis/rest/services/{style}/MapServer/tile/{z}/{y}/{x}"),Object.assign(this,e)}}class Yv extends Et{constructor(e){super(e),xn(this,"dataType","lerc"),xn(this,"attribution","ArcGIS"),xn(this,"minLevel",6),xn(this,"maxLevel",13),xn(this,"url","https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer/tile/{z}/{y}/{x}"),Object.assign(this,e)}}var Bv=Object.defineProperty,jv=(i,e,t)=>e in i?Bv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Xr=(i,e,t)=>jv(i,typeof e!="symbol"?e+"":e,t);class Jv extends Et{constructor(e){if(super(e),Xr(this,"token",""),Xr(this,"format","webp"),Xr(this,"style","cm2myr6qx001t01pi0sf7estf"),Xr(this,"attribution","MapBox"),Xr(this,"maxLevel",25),Xr(this,"url","https://api.mapbox.com/styles/v1/criska/cm2myr6qx001t01pi0sf7estf/tiles/256/{z}/{x}/{y}?access_token={token}&format={format}"),Object.assign(this,e),!this.token)throw new Error("MapBox访问令牌(token)是必填参数")}}var Qv=Object.defineProperty,Hv=(i,e,t)=>e in i?Qv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,cu=(i,e,t)=>Hv(i,typeof e!="symbol"?e+"":e,t);class Ev extends Et{constructor(e){super(e),cu(this,"dataType","mvt"),cu(this,"style",{layer:[]}),Object.assign(this,e)}}var $v=Object.defineProperty,qv=(i,e,t)=>e in i?$v(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,_i=(i,e,t)=>qv(i,typeof e!="symbol"?e+"":e,t);class ew extends Et{constructor(e){super(e),_i(this,"dataType","VectorTile"),_i(this,"attribution","ArcGIS"),_i(this,"minLevel",1),_i(this,"maxLevel",21),_i(this,"url","https://api.maptiler.com/tiles/v3/{z}/{x}/{y}.pbf?key=uKYsZQZpm72WlbSgH9B7"),Object.assign(this,e)}}class tw extends zn{constructor(e,t){super(e,t)}validateFeature(e){return e._baseType==="Line"}}class nw extends zn{constructor(e,t){super(e,t)}validateFeature(e){return e._baseType==="Point"}}class rw extends zn{constructor(e,t){super(e,t)}validateFeature(e){return e._baseType==="Surface"}}var iw=Object.defineProperty,sw=(i,e,t)=>e in i?iw(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,ow=(i,e,t)=>sw(i,e+"",t);class aw extends zn{constructor(e,t){super(e,t),ow(this,"_clouds",null);const n=["texture"];for(const r of n)Hl(t,r);this._createClouds(t.texture)}async _createClouds(e){const t=await Ot._loadTexture(e),n=new mm({texture:t,material:m.MeshBasicMaterial});n.castShadow=!0,this._clouds=n}validateFeature(e){return e._type==="Cloud"}animate(e,t){this._clouds&&this._clouds.update(this.map.viewer.camera,t,e)}}var lw=Object.defineProperty,cw=(i,e,t)=>e in i?lw(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,uw=(i,e,t)=>cw(i,e+"",t);class hw extends Ac{constructor(e,t){super(e,t),uw(this,"layerType","raster")}createLoader(){const e=new ls;return Array.isArray(this.source)?e.imgSource=this.source:e.imgSource=[this.source],e}}var dw=Object.defineProperty,fw=(i,e,t)=>e in i?dw(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,ps=(i,e,t)=>fw(i,typeof e!="symbol"?e+"":e,t);class pw extends hw{constructor(e,t){super(e,t),ps(this,"layerType","wmts"),ps(this,"_layerName"),ps(this,"_style"),ps(this,"_matrixSet"),this._layerName=t.layerName,this._style=t.style||"default",this._matrixSet=t.matrixSet||"GoogleMapsCompatible"}get layerName(){return this._layerName}get style(){return this._style}get matrixSet(){return this._matrixSet}createLoader(){const e=new ls;return Array.isArray(this.source)?e.imgSource=this.source:e.imgSource=[this.source],e}update(e){this.loader&&super.update(e)}}console.log("%c✨ terra.gl V"+Kd+" ","color:rgb(255, 255, 255); font-weight: bold; background: linear-gradient(90deg, #ffb6c1, #ff69b4); padding: 5px; border-radius: 5px;"),q.ArcGisDemSource=Yv,q.ArcGisSource=Uv,q.CloudsLayer=aw,q.DrawTool=Fr,q.EventClass=Go,q.ICloud=Wc,q.Label=Cc,q.LineLayer=tw,q.LineString=lr,q.LoaderFactory=Fe,q.MVTGeoSource=ew,q.MVTSource=Ev,q.Maker=bn,q.Map=ur,q.MapBoxSource=Jv,q.MapTool=ou,q.Martini=Dc,q.Model=Gc,q.MultiLineString=Zc,q.PointLayer=nw,q.Polygon=is,q.PolygonLayer=rw,q.ProjectFactory=Up,q.PromiseWorker=Pg,q.Style=Ot,q.TDTQMSource=zv,q.TDTSource=Ov,q.TPoints=Vc,q.Tile=Xn,q.TileCanvasLoader=Jg,q.TileGeometry=Vr,q.TileGeometryLoader=Jo,q.TileLoader=ls,q.TileLoadingManager=Fc,q.TileMap=Ei,q.TileMaterial=Qo,q.TileMaterialLoader=Ho,q.TileSource=Et,q.VectorFeatureTypes=tt,q.VectorTileLayer=ra,q.VectorTileRender=kc,q.Viewer=El,q.WMTSSource=kv,q.WMTSTileLayer=pw,q.addSkirt=Oc,q.author=iy,q.concatenateTypedArrays=yi,q.convertGeometryToWGS84=Gg,q.createBillboards=Bp,q.getBoundsCoord=No,q.getGeometryDataFromDem=zc,q.getGridIndices=Bo,q.getLocalInfoFromRay=To,q.getLocalInfoFromScreen=nc,q.getLocalInfoFromWorld=Zo,q.getNormals=jo,q.getSafeTileUrlAndBounds=Uo,q.registerDEMLoader=qo,q.registerImgLoader=$o,q.registerMeshLoader=Uc,q.vector2ToWGS84=Yo,q.version=ry,q.waitFor=sy,Object.defineProperty(q,Symbol.toStringTag,{value:"Module"})});
750
+ `;var ey=Object.defineProperty,ty=(i,e,t)=>e in i?ey(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Pt=(i,e,t)=>ty(i,typeof e!="symbol"?e+"":e,t);class Et{constructor(e){Pt(this,"dataType","image"),Pt(this,"attribution","isource"),Pt(this,"minLevel",0),Pt(this,"maxLevel",18),Pt(this,"projectionID","3857"),Pt(this,"url",""),Pt(this,"subdomains",[]),Pt(this,"s",""),Pt(this,"opacity",1),Pt(this,"isTMS",!1),Pt(this,"bounds",[-180,-85,180,85]),Pt(this,"_projectionBounds",[-1/0,-1/0,1/0,1/0]),Pt(this,"tileMaterial"),Object.assign(this,e)}getUrl(e,t,n){const r={...this,x:e,y:t,z:n};return ny(this.url,r)}_getUrl(e,t,n){const r=this.subdomains.length;if(r>0){const l=Math.floor(Math.random()*r);this.s=this.subdomains[l]}const o=this.isTMS?Math.pow(2,n)-1-t:t;return this.getUrl(e,o,n)}static create(e){return new Et(e)}}function ny(i,e){const t=/\{ *([\w_-]+) *\}/g;return i.replace(t,(n,r)=>{const o=e[r]??(()=>{throw new Error(`source url template error, No value provided for variable: ${n}`)})();return typeof o=="function"?o(e):o})}const{version:ry,author:iy}=JSON.parse(qg);function sy(i,e=100){return new Promise(t=>{const n=setInterval(()=>{i&&(clearInterval(n),t())},e)})}function $o(i){return Fe.registerMaterialLoader(i),i}function qo(i){return Fe.registerGeometryLoader(i),i}function Uc(i){return Fe.registerMeshLoader(i),i}$o(new Eg);const Yc="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEsoayxkKXtjb25zdCB5PW5ldyBGbG9hdDMyQXJyYXkoay5sZW5ndGgpO2ZvcihsZXQgVj0wO1Y8ZC5sZW5ndGg7Vis9Myl7Y29uc3QgYT1kW1ZdKjMsZT1kW1YrMV0qMyxyPWRbVisyXSozLHM9a1thXSx0PWtbYSsxXSxuPWtbYSsyXSxoPWtbZV0saT1rW2UrMV0sbz1rW2UrMl0sYz1rW3JdLHU9a1tyKzFdLG09a1tyKzJdLHc9aC1zLGw9aS10LGY9by1uLGc9Yy1zLE09dS10LEQ9bS1uLHA9bCpELWYqTSxVPWYqZy13KkQsST13Kk0tbCpnLHo9TWF0aC5zcXJ0KHAqcCtVKlUrSSpJKSx4PVswLDAsMV07aWYoej4wKXtjb25zdCB2PTEvejt4WzBdPXAqdix4WzFdPVUqdix4WzJdPUkqdn1mb3IobGV0IHY9MDt2PDM7disrKXlbYSt2XT15W2Urdl09eVtyK3ZdPXhbdl19cmV0dXJuIHl9dmFyIFc9T2JqZWN0LmRlZmluZVByb3BlcnR5LFA9KGssZCx5KT0+ZCBpbiBrP1coayxkLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp5fSk6a1tkXT15LF89KGssZCx5KT0+UChrLHR5cGVvZiBkIT0ic3ltYm9sIj9kKyIiOmQseSk7Y2xhc3MgZWV7Y29uc3RydWN0b3IoZD0yNTcpe18odGhpcywiZ3JpZFNpemUiKSxfKHRoaXMsIm51bVRyaWFuZ2xlcyIpLF8odGhpcywibnVtUGFyZW50VHJpYW5nbGVzIiksXyh0aGlzLCJpbmRpY2VzIiksXyh0aGlzLCJjb29yZHMiKSx0aGlzLmdyaWRTaXplPWQ7Y29uc3QgeT1kLTE7aWYoeSZ5LTEpdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBncmlkIHNpemUgdG8gYmUgMl5uKzEsIGdvdCAke2R9LmApO3RoaXMubnVtVHJpYW5nbGVzPXkqeSoyLTIsdGhpcy5udW1QYXJlbnRUcmlhbmdsZXM9dGhpcy5udW1UcmlhbmdsZXMteSp5LHRoaXMuaW5kaWNlcz1uZXcgVWludDMyQXJyYXkodGhpcy5ncmlkU2l6ZSp0aGlzLmdyaWRTaXplKSx0aGlzLmNvb3Jkcz1uZXcgVWludDE2QXJyYXkodGhpcy5udW1UcmlhbmdsZXMqNCk7Zm9yKGxldCBWPTA7Vjx0aGlzLm51bVRyaWFuZ2xlcztWKyspe2xldCBhPVYrMixlPTAscj0wLHM9MCx0PTAsbj0wLGg9MDtmb3IoYSYxP3M9dD1uPXk6ZT1yPWg9eTsoYT4+PTEpPjE7KXtjb25zdCBvPWUrcz4+MSxjPXIrdD4+MTthJjE/KHM9ZSx0PXIsZT1uLHI9aCk6KGU9cyxyPXQscz1uLHQ9aCksbj1vLGg9Y31jb25zdCBpPVYqNDt0aGlzLmNvb3Jkc1tpKzBdPWUsdGhpcy5jb29yZHNbaSsxXT1yLHRoaXMuY29vcmRzW2krMl09cyx0aGlzLmNvb3Jkc1tpKzNdPXR9fWNyZWF0ZVRpbGUoZCl7cmV0dXJuIG5ldyByZShkLHRoaXMpfX1jbGFzcyByZXtjb25zdHJ1Y3RvcihkLHkpe18odGhpcywibWFydGluaSIpLF8odGhpcywidGVycmFpbiIpLF8odGhpcywiZXJyb3JzIik7Y29uc3QgVj15LmdyaWRTaXplO2lmKGQubGVuZ3RoIT09VipWKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgdGVycmFpbiBkYXRhIG9mIGxlbmd0aCAke1YqVn0gKCR7Vn0geCAke1Z9KSwgZ290ICR7ZC5sZW5ndGh9LmApO3RoaXMudGVycmFpbj1kLHRoaXMubWFydGluaT15LHRoaXMuZXJyb3JzPW5ldyBGbG9hdDMyQXJyYXkoZC5sZW5ndGgpLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7Y29uc3R7bnVtVHJpYW5nbGVzOmQsbnVtUGFyZW50VHJpYW5nbGVzOnksY29vcmRzOlYsZ3JpZFNpemU6YX09dGhpcy5tYXJ0aW5pLHt0ZXJyYWluOmUsZXJyb3JzOnJ9PXRoaXM7Zm9yKGxldCBzPWQtMTtzPj0wO3MtLSl7Y29uc3QgdD1zKjQsbj1WW3QrMF0saD1WW3QrMV0saT1WW3QrMl0sbz1WW3QrM10sYz1uK2k+PjEsdT1oK28+PjEsbT1jK3UtaCx3PXUrbi1jLGw9KGVbaCphK25dK2VbbyphK2ldKS8yLGY9dSphK2MsZz1NYXRoLmFicyhsLWVbZl0pO2lmKHJbZl09TWF0aC5tYXgocltmXSxnKSxzPHkpe2NvbnN0IE09KGgrdz4+MSkqYSsobittPj4xKSxEPShvK3c+PjEpKmErKGkrbT4+MSk7cltmXT1NYXRoLm1heChyW2ZdLHJbTV0scltEXSl9fX1nZXRHZW9tZXRyeURhdGEoZD0wKXtjb25zdHtncmlkU2l6ZTp5LGluZGljZXM6Vn09dGhpcy5tYXJ0aW5pLHtlcnJvcnM6YX09dGhpcztsZXQgZT0wLHI9MDtjb25zdCBzPXktMTtsZXQgdCxuLGg9MDtWLmZpbGwoMCk7ZnVuY3Rpb24gaShmLGcsTSxELHAsVSl7Y29uc3QgST1mK00+PjEsej1nK0Q+PjE7TWF0aC5hYnMoZi1wKStNYXRoLmFicyhnLVUpPjEmJmFbeip5K0ldPmQ/KGkocCxVLGYsZyxJLHopLGkoTSxELHAsVSxJLHopKToodD1nKnkrZixuPUQqeStNLGg9VSp5K3AsVlt0XT09PTAmJihWW3RdPSsrZSksVltuXT09PTAmJihWW25dPSsrZSksVltoXT09PTAmJihWW2hdPSsrZSkscisrKX1pKDAsMCxzLHMscywwKSxpKHMscywwLDAsMCxzKTtjb25zdCBvPWUqMixjPXIqMyx1PW5ldyBVaW50MTZBcnJheShvKSxtPW5ldyBVaW50MzJBcnJheShjKTtsZXQgdz0wO2Z1bmN0aW9uIGwoZixnLE0sRCxwLFUpe2NvbnN0IEk9ZitNPj4xLHo9ZytEPj4xO2lmKE1hdGguYWJzKGYtcCkrTWF0aC5hYnMoZy1VKT4xJiZhW3oqeStJXT5kKWwocCxVLGYsZyxJLHopLGwoTSxELHAsVSxJLHopO2Vsc2V7Y29uc3QgeD1WW2cqeStmXS0xLHY9VltEKnkrTV0tMSxBPVZbVSp5K3BdLTE7dVsyKnhdPWYsdVsyKngrMV09Zyx1WzIqdl09TSx1WzIqdisxXT1ELHVbMipBXT1wLHVbMipBKzFdPVUsbVt3KytdPXgsbVt3KytdPXYsbVt3KytdPUF9fXJldHVybiBsKDAsMCxzLHMscywwKSxsKHMscywwLDAsMCxzKSx7YXR0cmlidXRlczp0aGlzLl9nZXRNZXNoQXR0cmlidXRlcyh0aGlzLnRlcnJhaW4sdSxtKSxpbmRpY2VzOm19fV9nZXRNZXNoQXR0cmlidXRlcyhkLHksVil7Y29uc3QgYT1NYXRoLmZsb29yKE1hdGguc3FydChkLmxlbmd0aCkpLGU9YS0xLHI9eS5sZW5ndGgvMixzPW5ldyBGbG9hdDMyQXJyYXkociozKSx0PW5ldyBGbG9hdDMyQXJyYXkocioyKTtmb3IobGV0IGg9MDtoPHI7aCsrKXtjb25zdCBpPXlbaCoyXSxvPXlbaCoyKzFdLGM9byphK2k7c1szKmgrMF09aS9lLS41LHNbMypoKzFdPS41LW8vZSxzWzMqaCsyXT1kW2NdLHRbMipoKzBdPWkvZSx0WzIqaCsxXT0xLW8vZX1jb25zdCBuPUsocyxWKTtyZXR1cm57cG9zaXRpb246e3ZhbHVlOnMsc2l6ZTozfSx0ZXhjb29yZDp7dmFsdWU6dCxzaXplOjJ9LG5vcm1hbDp7dmFsdWU6bixzaXplOjN9fX19Y29uc3QgbmU9ZnVuY3Rpb24oKXt2YXIgaz17fTtrLmRlZmF1bHROb0RhdGFWYWx1ZT0tMzQwMjc5OTkzODc5MDE0ODRlMjIsay5kZWNvZGU9ZnVuY3Rpb24ocixzKXtzPXN8fHt9O3ZhciB0PXMuZW5jb2RlZE1hc2tEYXRhfHxzLmVuY29kZWRNYXNrRGF0YT09PW51bGwsbj1hKHIscy5pbnB1dE9mZnNldHx8MCx0KSxoPXMubm9EYXRhVmFsdWUhPT1udWxsP3Mubm9EYXRhVmFsdWU6ay5kZWZhdWx0Tm9EYXRhVmFsdWUsaT1kKG4scy5waXhlbFR5cGV8fEZsb2F0MzJBcnJheSxzLmVuY29kZWRNYXNrRGF0YSxoLHMucmV0dXJuTWFzayksbz17d2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQscGl4ZWxEYXRhOmkucmVzdWx0UGl4ZWxzLG1pblZhbHVlOmkubWluVmFsdWUsbWF4VmFsdWU6bi5waXhlbHMubWF4VmFsdWUsbm9EYXRhVmFsdWU6aH07cmV0dXJuIGkucmVzdWx0TWFzayYmKG8ubWFza0RhdGE9aS5yZXN1bHRNYXNrKSxzLnJldHVybkVuY29kZWRNYXNrJiZuLm1hc2smJihvLmVuY29kZWRNYXNrRGF0YT1uLm1hc2suYml0c2V0P24ubWFzay5iaXRzZXQ6bnVsbCkscy5yZXR1cm5GaWxlSW5mbyYmKG8uZmlsZUluZm89eShuKSxzLmNvbXB1dGVVc2VkQml0RGVwdGhzJiYoby5maWxlSW5mby5iaXREZXB0aHM9VihuKSkpLG99O3ZhciBkPWZ1bmN0aW9uKHIscyx0LG4saCl7dmFyIGk9MCxvPXIucGl4ZWxzLm51bUJsb2Nrc1gsYz1yLnBpeGVscy5udW1CbG9ja3NZLHU9TWF0aC5mbG9vcihyLndpZHRoL28pLG09TWF0aC5mbG9vcihyLmhlaWdodC9jKSx3PTIqci5tYXhaRXJyb3IsbD1OdW1iZXIuTUFYX1ZBTFVFLGY7dD10fHwoci5tYXNrP3IubWFzay5iaXRzZXQ6bnVsbCk7dmFyIGcsTTtnPW5ldyBzKHIud2lkdGgqci5oZWlnaHQpLGgmJnQmJihNPW5ldyBVaW50OEFycmF5KHIud2lkdGgqci5oZWlnaHQpKTtmb3IodmFyIEQ9bmV3IEZsb2F0MzJBcnJheSh1Km0pLHAsVSxJPTA7STw9YztJKyspe3ZhciB6PUkhPT1jP206ci5oZWlnaHQlYztpZih6IT09MClmb3IodmFyIHg9MDt4PD1vO3grKyl7dmFyIHY9eCE9PW8/dTpyLndpZHRoJW87aWYodiE9PTApe3ZhciBBPUkqci53aWR0aCptK3gqdSxUPXIud2lkdGgtdixTPXIucGl4ZWxzLmJsb2Nrc1tpXSxiLEwsRjtTLmVuY29kaW5nPDI/KFMuZW5jb2Rpbmc9PT0wP2I9Uy5yYXdEYXRhOihlKFMuc3R1ZmZlZERhdGEsUy5iaXRzUGVyUGl4ZWwsUy5udW1WYWxpZFBpeGVscyxTLm9mZnNldCx3LEQsci5waXhlbHMubWF4VmFsdWUpLGI9RCksTD0wKTpTLmVuY29kaW5nPT09Mj9GPTA6Rj1TLm9mZnNldDt2YXIgQjtpZih0KWZvcihVPTA7VTx6O1UrKyl7Zm9yKEEmNyYmKEI9dFtBPj4zXSxCPDw9QSY3KSxwPTA7cDx2O3ArKylBJjd8fChCPXRbQT4+M10pLEImMTI4PyhNJiYoTVtBXT0xKSxmPVMuZW5jb2Rpbmc8Mj9iW0wrK106RixsPWw+Zj9mOmwsZ1tBKytdPWYpOihNJiYoTVtBXT0wKSxnW0ErK109biksQjw8PTE7QSs9VH1lbHNlIGlmKFMuZW5jb2Rpbmc8Milmb3IoVT0wO1U8ejtVKyspe2ZvcihwPTA7cDx2O3ArKylmPWJbTCsrXSxsPWw+Zj9mOmwsZ1tBKytdPWY7QSs9VH1lbHNlIGZvcihsPWw+Rj9GOmwsVT0wO1U8ejtVKyspe2ZvcihwPTA7cDx2O3ArKylnW0ErK109RjtBKz1UfWlmKFMuZW5jb2Rpbmc9PT0xJiZMIT09Uy5udW1WYWxpZFBpeGVscyl0aHJvdyJCbG9jayBhbmQgTWFzayBkbyBub3QgbWF0Y2giO2krK319fXJldHVybntyZXN1bHRQaXhlbHM6ZyxyZXN1bHRNYXNrOk0sbWluVmFsdWU6bH19LHk9ZnVuY3Rpb24ocil7cmV0dXJue2ZpbGVJZGVudGlmaWVyU3RyaW5nOnIuZmlsZUlkZW50aWZpZXJTdHJpbmcsZmlsZVZlcnNpb246ci5maWxlVmVyc2lvbixpbWFnZVR5cGU6ci5pbWFnZVR5cGUsaGVpZ2h0OnIuaGVpZ2h0LHdpZHRoOnIud2lkdGgsbWF4WkVycm9yOnIubWF4WkVycm9yLGVvZk9mZnNldDpyLmVvZk9mZnNldCxtYXNrOnIubWFzaz97bnVtQmxvY2tzWDpyLm1hc2subnVtQmxvY2tzWCxudW1CbG9ja3NZOnIubWFzay5udW1CbG9ja3NZLG51bUJ5dGVzOnIubWFzay5udW1CeXRlcyxtYXhWYWx1ZTpyLm1hc2subWF4VmFsdWV9Om51bGwscGl4ZWxzOntudW1CbG9ja3NYOnIucGl4ZWxzLm51bUJsb2Nrc1gsbnVtQmxvY2tzWTpyLnBpeGVscy5udW1CbG9ja3NZLG51bUJ5dGVzOnIucGl4ZWxzLm51bUJ5dGVzLG1heFZhbHVlOnIucGl4ZWxzLm1heFZhbHVlLG5vRGF0YVZhbHVlOnIubm9EYXRhVmFsdWV9fX0sVj1mdW5jdGlvbihyKXtmb3IodmFyIHM9ci5waXhlbHMubnVtQmxvY2tzWCpyLnBpeGVscy5udW1CbG9ja3NZLHQ9e30sbj0wO248cztuKyspe3ZhciBoPXIucGl4ZWxzLmJsb2Nrc1tuXTtoLmVuY29kaW5nPT09MD90LmZsb2F0MzI9ITA6aC5lbmNvZGluZz09PTE/dFtoLmJpdHNQZXJQaXhlbF09ITA6dFswXT0hMH1yZXR1cm4gT2JqZWN0LmtleXModCl9LGE9ZnVuY3Rpb24ocixzLHQpe3ZhciBuPXt9LGg9bmV3IFVpbnQ4QXJyYXkocixzLDEwKTtpZihuLmZpbGVJZGVudGlmaWVyU3RyaW5nPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxoKSxuLmZpbGVJZGVudGlmaWVyU3RyaW5nLnRyaW0oKSE9PSJDbnRaSW1hZ2UiKXRocm93IlVuZXhwZWN0ZWQgZmlsZSBpZGVudGlmaWVyIHN0cmluZzogIituLmZpbGVJZGVudGlmaWVyU3RyaW5nO3MrPTEwO3ZhciBpPW5ldyBEYXRhVmlldyhyLHMsMjQpO2lmKG4uZmlsZVZlcnNpb249aS5nZXRJbnQzMigwLCEwKSxuLmltYWdlVHlwZT1pLmdldEludDMyKDQsITApLG4uaGVpZ2h0PWkuZ2V0VWludDMyKDgsITApLG4ud2lkdGg9aS5nZXRVaW50MzIoMTIsITApLG4ubWF4WkVycm9yPWkuZ2V0RmxvYXQ2NCgxNiwhMCkscys9MjQsIXQpaWYoaT1uZXcgRGF0YVZpZXcocixzLDE2KSxuLm1hc2s9e30sbi5tYXNrLm51bUJsb2Nrc1k9aS5nZXRVaW50MzIoMCwhMCksbi5tYXNrLm51bUJsb2Nrc1g9aS5nZXRVaW50MzIoNCwhMCksbi5tYXNrLm51bUJ5dGVzPWkuZ2V0VWludDMyKDgsITApLG4ubWFzay5tYXhWYWx1ZT1pLmdldEZsb2F0MzIoMTIsITApLHMrPTE2LG4ubWFzay5udW1CeXRlcz4wKXt2YXIgbz1uZXcgVWludDhBcnJheShNYXRoLmNlaWwobi53aWR0aCpuLmhlaWdodC84KSk7aT1uZXcgRGF0YVZpZXcocixzLG4ubWFzay5udW1CeXRlcyk7dmFyIGM9aS5nZXRJbnQxNigwLCEwKSx1PTIsbT0wO2Rve2lmKGM+MClmb3IoO2MtLTspb1ttKytdPWkuZ2V0VWludDgodSsrKTtlbHNle3ZhciB3PWkuZ2V0VWludDgodSsrKTtmb3IoYz0tYztjLS07KW9bbSsrXT13fWM9aS5nZXRJbnQxNih1LCEwKSx1Kz0yfXdoaWxlKHU8bi5tYXNrLm51bUJ5dGVzKTtpZihjIT09LTMyNzY4fHxtPG8ubGVuZ3RoKXRocm93IlVuZXhwZWN0ZWQgZW5kIG9mIG1hc2sgUkxFIGVuY29kaW5nIjtuLm1hc2suYml0c2V0PW8scys9bi5tYXNrLm51bUJ5dGVzfWVsc2Ugbi5tYXNrLm51bUJ5dGVzfG4ubWFzay5udW1CbG9ja3NZfG4ubWFzay5tYXhWYWx1ZXx8KG4ubWFzay5iaXRzZXQ9bmV3IFVpbnQ4QXJyYXkoTWF0aC5jZWlsKG4ud2lkdGgqbi5oZWlnaHQvOCkpKTtpPW5ldyBEYXRhVmlldyhyLHMsMTYpLG4ucGl4ZWxzPXt9LG4ucGl4ZWxzLm51bUJsb2Nrc1k9aS5nZXRVaW50MzIoMCwhMCksbi5waXhlbHMubnVtQmxvY2tzWD1pLmdldFVpbnQzMig0LCEwKSxuLnBpeGVscy5udW1CeXRlcz1pLmdldFVpbnQzMig4LCEwKSxuLnBpeGVscy5tYXhWYWx1ZT1pLmdldEZsb2F0MzIoMTIsITApLHMrPTE2O3ZhciBsPW4ucGl4ZWxzLm51bUJsb2Nrc1gsZj1uLnBpeGVscy5udW1CbG9ja3NZLGc9bCsobi53aWR0aCVsPjA/MTowKSxNPWYrKG4uaGVpZ2h0JWY+MD8xOjApO24ucGl4ZWxzLmJsb2Nrcz1uZXcgQXJyYXkoZypNKTtmb3IodmFyIEQ9MCxwPTA7cDxNO3ArKylmb3IodmFyIFU9MDtVPGc7VSsrKXt2YXIgST0wLHo9ci5ieXRlTGVuZ3RoLXM7aT1uZXcgRGF0YVZpZXcocixzLE1hdGgubWluKDEwLHopKTt2YXIgeD17fTtuLnBpeGVscy5ibG9ja3NbRCsrXT14O3ZhciB2PWkuZ2V0VWludDgoMCk7aWYoSSsrLHguZW5jb2Rpbmc9diY2Myx4LmVuY29kaW5nPjMpdGhyb3ciSW52YWxpZCBibG9jayBlbmNvZGluZyAoIit4LmVuY29kaW5nKyIpIjtpZih4LmVuY29kaW5nPT09Mil7cysrO2NvbnRpbnVlfWlmKHYhPT0wJiZ2IT09Mil7aWYodj4+PTYseC5vZmZzZXRUeXBlPXYsdj09PTIpeC5vZmZzZXQ9aS5nZXRJbnQ4KDEpLEkrKztlbHNlIGlmKHY9PT0xKXgub2Zmc2V0PWkuZ2V0SW50MTYoMSwhMCksSSs9MjtlbHNlIGlmKHY9PT0wKXgub2Zmc2V0PWkuZ2V0RmxvYXQzMigxLCEwKSxJKz00O2Vsc2UgdGhyb3ciSW52YWxpZCBibG9jayBvZmZzZXQgdHlwZSI7aWYoeC5lbmNvZGluZz09PTEpaWYodj1pLmdldFVpbnQ4KEkpLEkrKyx4LmJpdHNQZXJQaXhlbD12JjYzLHY+Pj02LHgubnVtVmFsaWRQaXhlbHNUeXBlPXYsdj09PTIpeC5udW1WYWxpZFBpeGVscz1pLmdldFVpbnQ4KEkpLEkrKztlbHNlIGlmKHY9PT0xKXgubnVtVmFsaWRQaXhlbHM9aS5nZXRVaW50MTYoSSwhMCksSSs9MjtlbHNlIGlmKHY9PT0wKXgubnVtVmFsaWRQaXhlbHM9aS5nZXRVaW50MzIoSSwhMCksSSs9NDtlbHNlIHRocm93IkludmFsaWQgdmFsaWQgcGl4ZWwgY291bnQgdHlwZSJ9aWYocys9SSx4LmVuY29kaW5nIT09Myl7dmFyIEEsVDtpZih4LmVuY29kaW5nPT09MCl7dmFyIFM9KG4ucGl4ZWxzLm51bUJ5dGVzLTEpLzQ7aWYoUyE9PU1hdGguZmxvb3IoUykpdGhyb3cidW5jb21wcmVzc2VkIGJsb2NrIGhhcyBpbnZhbGlkIGxlbmd0aCI7QT1uZXcgQXJyYXlCdWZmZXIoUyo0KSxUPW5ldyBVaW50OEFycmF5KEEpLFQuc2V0KG5ldyBVaW50OEFycmF5KHIscyxTKjQpKTt2YXIgYj1uZXcgRmxvYXQzMkFycmF5KEEpO3gucmF3RGF0YT1iLHMrPVMqNH1lbHNlIGlmKHguZW5jb2Rpbmc9PT0xKXt2YXIgTD1NYXRoLmNlaWwoeC5udW1WYWxpZFBpeGVscyp4LmJpdHNQZXJQaXhlbC84KSxGPU1hdGguY2VpbChMLzQpO0E9bmV3IEFycmF5QnVmZmVyKEYqNCksVD1uZXcgVWludDhBcnJheShBKSxULnNldChuZXcgVWludDhBcnJheShyLHMsTCkpLHguc3R1ZmZlZERhdGE9bmV3IFVpbnQzMkFycmF5KEEpLHMrPUx9fX1yZXR1cm4gbi5lb2ZPZmZzZXQ9cyxufSxlPWZ1bmN0aW9uKHIscyx0LG4saCxpLG8pe3ZhciBjPSgxPDxzKS0xLHU9MCxtLHc9MCxsLGYsZz1NYXRoLmNlaWwoKG8tbikvaCksTT1yLmxlbmd0aCo0LU1hdGguY2VpbChzKnQvOCk7Zm9yKHJbci5sZW5ndGgtMV08PD04Kk0sbT0wO208dDttKyspe2lmKHc9PT0wJiYoZj1yW3UrK10sdz0zMiksdz49cylsPWY+Pj53LXMmYyx3LT1zO2Vsc2V7dmFyIEQ9cy13O2w9KGYmYyk8PEQmYyxmPXJbdSsrXSx3PTMyLUQsbCs9Zj4+Pnd9aVttXT1sPGc/bitsKmg6b31yZXR1cm4gaX07cmV0dXJuIGt9KCksaWU9ZnVuY3Rpb24oKXt2YXIgaz17dW5zdHVmZjpmdW5jdGlvbihhLGUscixzLHQsbixoLGkpe3ZhciBvPSgxPDxyKS0xLGM9MCx1LG09MCx3LGwsZixnLE09YS5sZW5ndGgqNC1NYXRoLmNlaWwocipzLzgpO2lmKGFbYS5sZW5ndGgtMV08PD04Kk0sdClmb3IodT0wO3U8czt1KyspbT09PTAmJihsPWFbYysrXSxtPTMyKSxtPj1yPyh3PWw+Pj5tLXImbyxtLT1yKTooZj1yLW0sdz0obCZvKTw8ZiZvLGw9YVtjKytdLG09MzItZix3Kz1sPj4+bSksZVt1XT10W3ddO2Vsc2UgZm9yKGc9TWF0aC5jZWlsKChpLW4pL2gpLHU9MDt1PHM7dSsrKW09PT0wJiYobD1hW2MrK10sbT0zMiksbT49cj8odz1sPj4+bS1yJm8sbS09cik6KGY9ci1tLHc9KGwmbyk8PGYmbyxsPWFbYysrXSxtPTMyLWYsdys9bD4+Pm0pLGVbdV09dzxnP24rdypoOml9LHVuc3R1ZmZMVVQ6ZnVuY3Rpb24oYSxlLHIscyx0LG4pe3ZhciBoPSgxPDxlKS0xLGk9MCxvPTAsYz0wLHU9MCxtPTAsdyxsPVtdLGY9YS5sZW5ndGgqNC1NYXRoLmNlaWwoZSpyLzgpO2FbYS5sZW5ndGgtMV08PD04KmY7dmFyIGc9TWF0aC5jZWlsKChuLXMpL3QpO2ZvcihvPTA7bzxyO28rKyl1PT09MCYmKHc9YVtpKytdLHU9MzIpLHU+PWU/KG09dz4+PnUtZSZoLHUtPWUpOihjPWUtdSxtPSh3JmgpPDxjJmgsdz1hW2krK10sdT0zMi1jLG0rPXc+Pj51KSxsW29dPW08Zz9zK20qdDpuO3JldHVybiBsLnVuc2hpZnQocyksbH0sdW5zdHVmZjI6ZnVuY3Rpb24oYSxlLHIscyx0LG4saCxpKXt2YXIgbz0oMTw8ciktMSxjPTAsdSxtPTAsdz0wLGwsZixnO2lmKHQpZm9yKHU9MDt1PHM7dSsrKW09PT0wJiYoZj1hW2MrK10sbT0zMix3PTApLG0+PXI/KGw9Zj4+PncmbyxtLT1yLHcrPXIpOihnPXItbSxsPWY+Pj53Jm8sZj1hW2MrK10sbT0zMi1nLGx8PShmJigxPDxnKS0xKTw8ci1nLHc9ZyksZVt1XT10W2xdO2Vsc2V7dmFyIE09TWF0aC5jZWlsKChpLW4pL2gpO2Zvcih1PTA7dTxzO3UrKyltPT09MCYmKGY9YVtjKytdLG09MzIsdz0wKSxtPj1yPyhsPWY+Pj53Jm8sbS09cix3Kz1yKTooZz1yLW0sbD1mPj4+dyZvLGY9YVtjKytdLG09MzItZyxsfD0oZiYoMTw8ZyktMSk8PHItZyx3PWcpLGVbdV09bDxNP24rbCpoOml9cmV0dXJuIGV9LHVuc3R1ZmZMVVQyOmZ1bmN0aW9uKGEsZSxyLHMsdCxuKXt2YXIgaD0oMTw8ZSktMSxpPTAsbz0wLGM9MCx1PTAsbT0wLHc9MCxsLGY9W10sZz1NYXRoLmNlaWwoKG4tcykvdCk7Zm9yKG89MDtvPHI7bysrKXU9PT0wJiYobD1hW2krK10sdT0zMix3PTApLHU+PWU/KG09bD4+PncmaCx1LT1lLHcrPWUpOihjPWUtdSxtPWw+Pj53JmgsbD1hW2krK10sdT0zMi1jLG18PShsJigxPDxjKS0xKTw8ZS1jLHc9YyksZltvXT1tPGc/cyttKnQ6bjtyZXR1cm4gZi51bnNoaWZ0KHMpLGZ9LG9yaWdpbmFsVW5zdHVmZjpmdW5jdGlvbihhLGUscixzKXt2YXIgdD0oMTw8ciktMSxuPTAsaCxpPTAsbyxjLHUsbT1hLmxlbmd0aCo0LU1hdGguY2VpbChyKnMvOCk7Zm9yKGFbYS5sZW5ndGgtMV08PD04Km0saD0wO2g8cztoKyspaT09PTAmJihjPWFbbisrXSxpPTMyKSxpPj1yPyhvPWM+Pj5pLXImdCxpLT1yKToodT1yLWksbz0oYyZ0KTw8dSZ0LGM9YVtuKytdLGk9MzItdSxvKz1jPj4+aSksZVtoXT1vO3JldHVybiBlfSxvcmlnaW5hbFVuc3R1ZmYyOmZ1bmN0aW9uKGEsZSxyLHMpe3ZhciB0PSgxPDxyKS0xLG49MCxoLGk9MCxvPTAsYyx1LG07Zm9yKGg9MDtoPHM7aCsrKWk9PT0wJiYodT1hW24rK10saT0zMixvPTApLGk+PXI/KGM9dT4+Pm8mdCxpLT1yLG8rPXIpOihtPXItaSxjPXU+Pj5vJnQsdT1hW24rK10saT0zMi1tLGN8PSh1JigxPDxtKS0xKTw8ci1tLG89bSksZVtoXT1jO3JldHVybiBlfX0sZD17SFVGRk1BTl9MVVRfQklUU19NQVg6MTIsY29tcHV0ZUNoZWNrc3VtRmxldGNoZXIzMjpmdW5jdGlvbihhKXtmb3IodmFyIGU9NjU1MzUscj02NTUzNSxzPWEubGVuZ3RoLHQ9TWF0aC5mbG9vcihzLzIpLG49MDt0Oyl7dmFyIGg9dD49MzU5PzM1OTp0O3QtPWg7ZG8gZSs9YVtuKytdPDw4LHIrPWUrPWFbbisrXTt3aGlsZSgtLWgpO2U9KGUmNjU1MzUpKyhlPj4+MTYpLHI9KHImNjU1MzUpKyhyPj4+MTYpfXJldHVybiBzJjEmJihyKz1lKz1hW25dPDw4KSxlPShlJjY1NTM1KSsoZT4+PjE2KSxyPShyJjY1NTM1KSsocj4+PjE2KSwocjw8MTZ8ZSk+Pj4wfSxyZWFkSGVhZGVySW5mbzpmdW5jdGlvbihhLGUpe3ZhciByPWUucHRyLHM9bmV3IFVpbnQ4QXJyYXkoYSxyLDYpLHQ9e307aWYodC5maWxlSWRlbnRpZmllclN0cmluZz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwscyksdC5maWxlSWRlbnRpZmllclN0cmluZy5sYXN0SW5kZXhPZigiTGVyYzIiLDApIT09MCl0aHJvdyJVbmV4cGVjdGVkIGZpbGUgaWRlbnRpZmllciBzdHJpbmcgKGV4cGVjdCBMZXJjMiApOiAiK3QuZmlsZUlkZW50aWZpZXJTdHJpbmc7cis9Njt2YXIgbj1uZXcgRGF0YVZpZXcoYSxyLDgpLGg9bi5nZXRJbnQzMigwLCEwKTt0LmZpbGVWZXJzaW9uPWgscis9NCxoPj0zJiYodC5jaGVja3N1bT1uLmdldFVpbnQzMig0LCEwKSxyKz00KSxuPW5ldyBEYXRhVmlldyhhLHIsMTIpLHQuaGVpZ2h0PW4uZ2V0VWludDMyKDAsITApLHQud2lkdGg9bi5nZXRVaW50MzIoNCwhMCkscis9OCxoPj00Pyh0Lm51bURpbXM9bi5nZXRVaW50MzIoOCwhMCkscis9NCk6dC5udW1EaW1zPTEsbj1uZXcgRGF0YVZpZXcoYSxyLDQwKSx0Lm51bVZhbGlkUGl4ZWw9bi5nZXRVaW50MzIoMCwhMCksdC5taWNyb0Jsb2NrU2l6ZT1uLmdldEludDMyKDQsITApLHQuYmxvYlNpemU9bi5nZXRJbnQzMig4LCEwKSx0LmltYWdlVHlwZT1uLmdldEludDMyKDEyLCEwKSx0Lm1heFpFcnJvcj1uLmdldEZsb2F0NjQoMTYsITApLHQuek1pbj1uLmdldEZsb2F0NjQoMjQsITApLHQuek1heD1uLmdldEZsb2F0NjQoMzIsITApLHIrPTQwLGUuaGVhZGVySW5mbz10LGUucHRyPXI7dmFyIGksbztpZihoPj0zJiYobz1oPj00PzUyOjQ4LGk9dGhpcy5jb21wdXRlQ2hlY2tzdW1GbGV0Y2hlcjMyKG5ldyBVaW50OEFycmF5KGEsci1vLHQuYmxvYlNpemUtMTQpKSxpIT09dC5jaGVja3N1bSkpdGhyb3ciQ2hlY2tzdW0gZmFpbGVkLiI7cmV0dXJuITB9LGNoZWNrTWluTWF4UmFuZ2VzOmZ1bmN0aW9uKGEsZSl7dmFyIHI9ZS5oZWFkZXJJbmZvLHM9dGhpcy5nZXREYXRhVHlwZUFycmF5KHIuaW1hZ2VUeXBlKSx0PXIubnVtRGltcyp0aGlzLmdldERhdGFUeXBlU2l6ZShyLmltYWdlVHlwZSksbj10aGlzLnJlYWRTdWJBcnJheShhLGUucHRyLHMsdCksaD10aGlzLnJlYWRTdWJBcnJheShhLGUucHRyK3Qscyx0KTtlLnB0cis9Mip0O3ZhciBpLG89ITA7Zm9yKGk9MDtpPHIubnVtRGltcztpKyspaWYobltpXSE9PWhbaV0pe289ITE7YnJlYWt9cmV0dXJuIHIubWluVmFsdWVzPW4sci5tYXhWYWx1ZXM9aCxvfSxyZWFkU3ViQXJyYXk6ZnVuY3Rpb24oYSxlLHIscyl7dmFyIHQ7aWYocj09PVVpbnQ4QXJyYXkpdD1uZXcgVWludDhBcnJheShhLGUscyk7ZWxzZXt2YXIgbj1uZXcgQXJyYXlCdWZmZXIocyksaD1uZXcgVWludDhBcnJheShuKTtoLnNldChuZXcgVWludDhBcnJheShhLGUscykpLHQ9bmV3IHIobil9cmV0dXJuIHR9LHJlYWRNYXNrOmZ1bmN0aW9uKGEsZSl7dmFyIHI9ZS5wdHIscz1lLmhlYWRlckluZm8sdD1zLndpZHRoKnMuaGVpZ2h0LG49cy5udW1WYWxpZFBpeGVsLGg9bmV3IERhdGFWaWV3KGEsciw0KSxpPXt9O2lmKGkubnVtQnl0ZXM9aC5nZXRVaW50MzIoMCwhMCkscis9NCwobj09PTB8fHQ9PT1uKSYmaS5udW1CeXRlcyE9PTApdGhyb3ciaW52YWxpZCBtYXNrIjt2YXIgbyxjO2lmKG49PT0wKW89bmV3IFVpbnQ4QXJyYXkoTWF0aC5jZWlsKHQvOCkpLGkuYml0c2V0PW8sYz1uZXcgVWludDhBcnJheSh0KSxlLnBpeGVscy5yZXN1bHRNYXNrPWMscis9aS5udW1CeXRlcztlbHNlIGlmKGkubnVtQnl0ZXM+MCl7bz1uZXcgVWludDhBcnJheShNYXRoLmNlaWwodC84KSksaD1uZXcgRGF0YVZpZXcoYSxyLGkubnVtQnl0ZXMpO3ZhciB1PWguZ2V0SW50MTYoMCwhMCksbT0yLHc9MCxsPTA7ZG97aWYodT4wKWZvcig7dS0tOylvW3crK109aC5nZXRVaW50OChtKyspO2Vsc2UgZm9yKGw9aC5nZXRVaW50OChtKyspLHU9LXU7dS0tOylvW3crK109bDt1PWguZ2V0SW50MTYobSwhMCksbSs9Mn13aGlsZShtPGkubnVtQnl0ZXMpO2lmKHUhPT0tMzI3Njh8fHc8by5sZW5ndGgpdGhyb3ciVW5leHBlY3RlZCBlbmQgb2YgbWFzayBSTEUgZW5jb2RpbmciO2M9bmV3IFVpbnQ4QXJyYXkodCk7dmFyIGY9MCxnPTA7Zm9yKGc9MDtnPHQ7ZysrKWcmNz8oZj1vW2c+PjNdLGY8PD1nJjcpOmY9b1tnPj4zXSxmJjEyOCYmKGNbZ109MSk7ZS5waXhlbHMucmVzdWx0TWFzaz1jLGkuYml0c2V0PW8scis9aS5udW1CeXRlc31yZXR1cm4gZS5wdHI9cixlLm1hc2s9aSwhMH0scmVhZERhdGFPbmVTd2VlcDpmdW5jdGlvbihhLGUscixzKXt2YXIgdD1lLnB0cixuPWUuaGVhZGVySW5mbyxoPW4ubnVtRGltcyxpPW4ud2lkdGgqbi5oZWlnaHQsbz1uLmltYWdlVHlwZSxjPW4ubnVtVmFsaWRQaXhlbCpkLmdldERhdGFUeXBlU2l6ZShvKSpoLHUsbT1lLnBpeGVscy5yZXN1bHRNYXNrO2lmKHI9PT1VaW50OEFycmF5KXU9bmV3IFVpbnQ4QXJyYXkoYSx0LGMpO2Vsc2V7dmFyIHc9bmV3IEFycmF5QnVmZmVyKGMpLGw9bmV3IFVpbnQ4QXJyYXkodyk7bC5zZXQobmV3IFVpbnQ4QXJyYXkoYSx0LGMpKSx1PW5ldyByKHcpfWlmKHUubGVuZ3RoPT09aSpoKXM/ZS5waXhlbHMucmVzdWx0UGl4ZWxzPWQuc3dhcERpbWVuc2lvbk9yZGVyKHUsaSxoLHIsITApOmUucGl4ZWxzLnJlc3VsdFBpeGVscz11O2Vsc2V7ZS5waXhlbHMucmVzdWx0UGl4ZWxzPW5ldyByKGkqaCk7dmFyIGY9MCxnPTAsTT0wLEQ9MDtpZihoPjEpe2lmKHMpe2ZvcihnPTA7ZzxpO2crKylpZihtW2ddKWZvcihEPWcsTT0wO008aDtNKyssRCs9aSllLnBpeGVscy5yZXN1bHRQaXhlbHNbRF09dVtmKytdfWVsc2UgZm9yKGc9MDtnPGk7ZysrKWlmKG1bZ10pZm9yKEQ9ZypoLE09MDtNPGg7TSsrKWUucGl4ZWxzLnJlc3VsdFBpeGVsc1tEK01dPXVbZisrXX1lbHNlIGZvcihnPTA7ZzxpO2crKyltW2ddJiYoZS5waXhlbHMucmVzdWx0UGl4ZWxzW2ddPXVbZisrXSl9cmV0dXJuIHQrPWMsZS5wdHI9dCwhMH0scmVhZEh1ZmZtYW5UcmVlOmZ1bmN0aW9uKGEsZSl7dmFyIHI9dGhpcy5IVUZGTUFOX0xVVF9CSVRTX01BWCxzPW5ldyBEYXRhVmlldyhhLGUucHRyLDE2KTtlLnB0cis9MTY7dmFyIHQ9cy5nZXRJbnQzMigwLCEwKTtpZih0PDIpdGhyb3cidW5zdXBwb3J0ZWQgSHVmZm1hbiB2ZXJzaW9uIjt2YXIgbj1zLmdldEludDMyKDQsITApLGg9cy5nZXRJbnQzMig4LCEwKSxpPXMuZ2V0SW50MzIoMTIsITApO2lmKGg+PWkpcmV0dXJuITE7dmFyIG89bmV3IFVpbnQzMkFycmF5KGktaCk7ZC5kZWNvZGVCaXRzKGEsZSxvKTt2YXIgYz1bXSx1LG0sdyxsO2Zvcih1PWg7dTxpO3UrKyltPXUtKHU8bj8wOm4pLGNbbV09e2ZpcnN0Om9bdS1oXSxzZWNvbmQ6bnVsbH07dmFyIGY9YS5ieXRlTGVuZ3RoLWUucHRyLGc9TWF0aC5jZWlsKGYvNCksTT1uZXcgQXJyYXlCdWZmZXIoZyo0KSxEPW5ldyBVaW50OEFycmF5KE0pO0Quc2V0KG5ldyBVaW50OEFycmF5KGEsZS5wdHIsZikpO3ZhciBwPW5ldyBVaW50MzJBcnJheShNKSxVPTAsSSx6PTA7Zm9yKEk9cFswXSx1PWg7dTxpO3UrKyltPXUtKHU8bj8wOm4pLGw9Y1ttXS5maXJzdCxsPjAmJihjW21dLnNlY29uZD1JPDxVPj4+MzItbCwzMi1VPj1sPyhVKz1sLFU9PT0zMiYmKFU9MCx6KyssST1wW3pdKSk6KFUrPWwtMzIseisrLEk9cFt6XSxjW21dLnNlY29uZHw9ST4+PjMyLVUpKTt2YXIgeD0wLHY9MCxBPW5ldyB5O2Zvcih1PTA7dTxjLmxlbmd0aDt1KyspY1t1XSE9PXZvaWQgMCYmKHg9TWF0aC5tYXgoeCxjW3VdLmZpcnN0KSk7eD49cj92PXI6dj14O3ZhciBUPVtdLFMsYixMLEYsQixDO2Zvcih1PWg7dTxpO3UrKylpZihtPXUtKHU8bj8wOm4pLGw9Y1ttXS5maXJzdCxsPjApaWYoUz1bbCxtXSxsPD12KWZvcihiPWNbbV0uc2Vjb25kPDx2LWwsTD0xPDx2LWwsdz0wO3c8TDt3KyspVFtifHddPVM7ZWxzZSBmb3IoYj1jW21dLnNlY29uZCxDPUEsRj1sLTE7Rj49MDtGLS0pQj1iPj4+RiYxLEI/KEMucmlnaHR8fChDLnJpZ2h0PW5ldyB5KSxDPUMucmlnaHQpOihDLmxlZnR8fChDLmxlZnQ9bmV3IHkpLEM9Qy5sZWZ0KSxGPT09MCYmIUMudmFsJiYoQy52YWw9U1sxXSk7cmV0dXJue2RlY29kZUx1dDpULG51bUJpdHNMVVRRaWNrOnYsbnVtQml0c0xVVDp4LHRyZWU6QSxzdHVmZmVkRGF0YTpwLHNyY1B0cjp6LGJpdFBvczpVfX0scmVhZEh1ZmZtYW46ZnVuY3Rpb24oYSxlLHIscyl7dmFyIHQ9ZS5oZWFkZXJJbmZvLG49dC5udW1EaW1zLGg9ZS5oZWFkZXJJbmZvLmhlaWdodCxpPWUuaGVhZGVySW5mby53aWR0aCxvPWkqaCxjPXRoaXMucmVhZEh1ZmZtYW5UcmVlKGEsZSksdT1jLmRlY29kZUx1dCxtPWMudHJlZSx3PWMuc3R1ZmZlZERhdGEsbD1jLnNyY1B0cixmPWMuYml0UG9zLGc9Yy5udW1CaXRzTFVUUWljayxNPWMubnVtQml0c0xVVCxEPWUuaGVhZGVySW5mby5pbWFnZVR5cGU9PT0wPzEyODowLHAsVSxJLHo9ZS5waXhlbHMucmVzdWx0TWFzayx4LHYsQSxULFMsYixMLEY9MDtmPjAmJihsKyssZj0wKTt2YXIgQj13W2xdLEM9ZS5lbmNvZGVNb2RlPT09MSxIPW5ldyByKG8qbiksTz1ILFg7aWYobjwyfHxDKXtmb3IoWD0wO1g8bjtYKyspaWYobj4xJiYoTz1uZXcgcihILmJ1ZmZlcixvKlgsbyksRj0wKSxlLmhlYWRlckluZm8ubnVtVmFsaWRQaXhlbD09PWkqaClmb3IoYj0wLFQ9MDtUPGg7VCsrKWZvcihTPTA7UzxpO1MrKyxiKyspe2lmKFU9MCx4PUI8PGY+Pj4zMi1nLHY9eCwzMi1mPGcmJih4fD13W2wrMV0+Pj42NC1mLWcsdj14KSx1W3ZdKVU9dVt2XVsxXSxmKz11W3ZdWzBdO2Vsc2UgZm9yKHg9Qjw8Zj4+PjMyLU0sdj14LDMyLWY8TSYmKHh8PXdbbCsxXT4+PjY0LWYtTSx2PXgpLHA9bSxMPTA7TDxNO0wrKylpZihBPXg+Pj5NLUwtMSYxLHA9QT9wLnJpZ2h0OnAubGVmdCwhKHAubGVmdHx8cC5yaWdodCkpe1U9cC52YWwsZj1mK0wrMTticmVha31mPj0zMiYmKGYtPTMyLGwrKyxCPXdbbF0pLEk9VS1ELEM/KFM+MD9JKz1GOlQ+MD9JKz1PW2ItaV06SSs9RixJJj0yNTUsT1tiXT1JLEY9SSk6T1tiXT1JfWVsc2UgZm9yKGI9MCxUPTA7VDxoO1QrKylmb3IoUz0wO1M8aTtTKyssYisrKWlmKHpbYl0pe2lmKFU9MCx4PUI8PGY+Pj4zMi1nLHY9eCwzMi1mPGcmJih4fD13W2wrMV0+Pj42NC1mLWcsdj14KSx1W3ZdKVU9dVt2XVsxXSxmKz11W3ZdWzBdO2Vsc2UgZm9yKHg9Qjw8Zj4+PjMyLU0sdj14LDMyLWY8TSYmKHh8PXdbbCsxXT4+PjY0LWYtTSx2PXgpLHA9bSxMPTA7TDxNO0wrKylpZihBPXg+Pj5NLUwtMSYxLHA9QT9wLnJpZ2h0OnAubGVmdCwhKHAubGVmdHx8cC5yaWdodCkpe1U9cC52YWwsZj1mK0wrMTticmVha31mPj0zMiYmKGYtPTMyLGwrKyxCPXdbbF0pLEk9VS1ELEM/KFM+MCYmeltiLTFdP0krPUY6VD4wJiZ6W2ItaV0/SSs9T1tiLWldOkkrPUYsSSY9MjU1LE9bYl09SSxGPUkpOk9bYl09SX19ZWxzZSBmb3IoYj0wLFQ9MDtUPGg7VCsrKWZvcihTPTA7UzxpO1MrKylpZihiPVQqaStTLCF6fHx6W2JdKWZvcihYPTA7WDxuO1grKyxiKz1vKXtpZihVPTAseD1CPDxmPj4+MzItZyx2PXgsMzItZjxnJiYoeHw9d1tsKzFdPj4+NjQtZi1nLHY9eCksdVt2XSlVPXVbdl1bMV0sZis9dVt2XVswXTtlbHNlIGZvcih4PUI8PGY+Pj4zMi1NLHY9eCwzMi1mPE0mJih4fD13W2wrMV0+Pj42NC1mLU0sdj14KSxwPW0sTD0wO0w8TTtMKyspaWYoQT14Pj4+TS1MLTEmMSxwPUE/cC5yaWdodDpwLmxlZnQsIShwLmxlZnR8fHAucmlnaHQpKXtVPXAudmFsLGY9ZitMKzE7YnJlYWt9Zj49MzImJihmLT0zMixsKyssQj13W2xdKSxJPVUtRCxPW2JdPUl9ZS5wdHI9ZS5wdHIrKGwrMSkqNCsoZj4wPzQ6MCksZS5waXhlbHMucmVzdWx0UGl4ZWxzPUgsbj4xJiYhcyYmKGUucGl4ZWxzLnJlc3VsdFBpeGVscz1kLnN3YXBEaW1lbnNpb25PcmRlcihILG8sbixyKSl9LGRlY29kZUJpdHM6ZnVuY3Rpb24oYSxlLHIscyx0KXt7dmFyIG49ZS5oZWFkZXJJbmZvLGg9bi5maWxlVmVyc2lvbixpPTAsbz1hLmJ5dGVMZW5ndGgtZS5wdHI+PTU/NTphLmJ5dGVMZW5ndGgtZS5wdHIsYz1uZXcgRGF0YVZpZXcoYSxlLnB0cixvKSx1PWMuZ2V0VWludDgoMCk7aSsrO3ZhciBtPXU+PjYsdz1tPT09MD80OjMtbSxsPSh1JjMyKT4wLGY9dSYzMSxnPTA7aWYodz09PTEpZz1jLmdldFVpbnQ4KGkpLGkrKztlbHNlIGlmKHc9PT0yKWc9Yy5nZXRVaW50MTYoaSwhMCksaSs9MjtlbHNlIGlmKHc9PT00KWc9Yy5nZXRVaW50MzIoaSwhMCksaSs9NDtlbHNlIHRocm93IkludmFsaWQgdmFsaWQgcGl4ZWwgY291bnQgdHlwZSI7dmFyIE09MipuLm1heFpFcnJvcixELHAsVSxJLHoseCx2LEEsVCxTPW4ubnVtRGltcz4xP24ubWF4VmFsdWVzW3RdOm4uek1heDtpZihsKXtmb3IoZS5jb3VudGVyLmx1dCsrLEE9Yy5nZXRVaW50OChpKSxpKyssST1NYXRoLmNlaWwoKEEtMSkqZi84KSx6PU1hdGguY2VpbChJLzQpLHA9bmV3IEFycmF5QnVmZmVyKHoqNCksVT1uZXcgVWludDhBcnJheShwKSxlLnB0cis9aSxVLnNldChuZXcgVWludDhBcnJheShhLGUucHRyLEkpKSx2PW5ldyBVaW50MzJBcnJheShwKSxlLnB0cis9SSxUPTA7QS0xPj4+VDspVCsrO0k9TWF0aC5jZWlsKGcqVC84KSx6PU1hdGguY2VpbChJLzQpLHA9bmV3IEFycmF5QnVmZmVyKHoqNCksVT1uZXcgVWludDhBcnJheShwKSxVLnNldChuZXcgVWludDhBcnJheShhLGUucHRyLEkpKSxEPW5ldyBVaW50MzJBcnJheShwKSxlLnB0cis9SSxoPj0zP3g9ay51bnN0dWZmTFVUMih2LGYsQS0xLHMsTSxTKTp4PWsudW5zdHVmZkxVVCh2LGYsQS0xLHMsTSxTKSxoPj0zP2sudW5zdHVmZjIoRCxyLFQsZyx4KTprLnVuc3R1ZmYoRCxyLFQsZyx4KX1lbHNlIGUuY291bnRlci5iaXRzdHVmZmVyKyssVD1mLGUucHRyKz1pLFQ+MCYmKEk9TWF0aC5jZWlsKGcqVC84KSx6PU1hdGguY2VpbChJLzQpLHA9bmV3IEFycmF5QnVmZmVyKHoqNCksVT1uZXcgVWludDhBcnJheShwKSxVLnNldChuZXcgVWludDhBcnJheShhLGUucHRyLEkpKSxEPW5ldyBVaW50MzJBcnJheShwKSxlLnB0cis9SSxoPj0zP3M9PW51bGw/ay5vcmlnaW5hbFVuc3R1ZmYyKEQscixULGcpOmsudW5zdHVmZjIoRCxyLFQsZywhMSxzLE0sUyk6cz09bnVsbD9rLm9yaWdpbmFsVW5zdHVmZihELHIsVCxnKTprLnVuc3R1ZmYoRCxyLFQsZywhMSxzLE0sUykpfX0scmVhZFRpbGVzOmZ1bmN0aW9uKGEsZSxyLHMpe3ZhciB0PWUuaGVhZGVySW5mbyxuPXQud2lkdGgsaD10LmhlaWdodCxpPW4qaCxvPXQubWljcm9CbG9ja1NpemUsYz10LmltYWdlVHlwZSx1PWQuZ2V0RGF0YVR5cGVTaXplKGMpLG09TWF0aC5jZWlsKG4vbyksdz1NYXRoLmNlaWwoaC9vKTtlLnBpeGVscy5udW1CbG9ja3NZPXcsZS5waXhlbHMubnVtQmxvY2tzWD1tLGUucGl4ZWxzLnB0cj0wO3ZhciBsPTAsZj0wLGc9MCxNPTAsRD0wLHA9MCxVPTAsST0wLHo9MCx4PTAsdj0wLEE9MCxUPTAsUz0wLGI9MCxMPTAsRixCLEMsSCxPLFgsJD1uZXcgcihvKm8pLGhlPWglb3x8byxjZT1uJW98fG8sUSxSLHE9dC5udW1EaW1zLGosRT1lLnBpeGVscy5yZXN1bHRNYXNrLFk9ZS5waXhlbHMucmVzdWx0UGl4ZWxzLG1lPXQuZmlsZVZlcnNpb24sSj1tZT49NT8xNDoxNSxaLEc9dC56TWF4LE47Zm9yKGc9MDtnPHc7ZysrKWZvcihEPWchPT13LTE/bzpoZSxNPTA7TTxtO00rKylmb3IocD1NIT09bS0xP286Y2Usdj1nKm4qbytNKm8sQT1uLXAsaj0wO2o8cTtqKyspe2lmKHE+MT8oTj1ZLHY9ZypuKm8rTSpvLFk9bmV3IHIoZS5waXhlbHMucmVzdWx0UGl4ZWxzLmJ1ZmZlcixpKmoqdSxpKSxHPXQubWF4VmFsdWVzW2pdKTpOPW51bGwsVT1hLmJ5dGVMZW5ndGgtZS5wdHIsRj1uZXcgRGF0YVZpZXcoYSxlLnB0cixNYXRoLm1pbigxMCxVKSksQj17fSxMPTAsST1GLmdldFVpbnQ4KDApLEwrKyxaPXQuZmlsZVZlcnNpb24+PTU/SSY0OjAsej1JPj42JjI1NSx4PUk+PjImSix4IT09KE0qbz4+MyZKKXx8WiYmaj09PTApdGhyb3ciaW50ZWdyaXR5IGlzc3VlIjtpZihYPUkmMyxYPjMpdGhyb3cgZS5wdHIrPUwsIkludmFsaWQgYmxvY2sgZW5jb2RpbmcgKCIrWCsiKSI7aWYoWD09PTIpe2lmKFopaWYoRSlmb3IobD0wO2w8RDtsKyspZm9yKGY9MDtmPHA7ZisrKUVbdl0mJihZW3ZdPU5bdl0pLHYrKztlbHNlIGZvcihsPTA7bDxEO2wrKylmb3IoZj0wO2Y8cDtmKyspWVt2XT1OW3ZdLHYrKztlLmNvdW50ZXIuY29uc3RhbnQrKyxlLnB0cis9TDtjb250aW51ZX1lbHNlIGlmKFg9PT0wKXtpZihaKXRocm93ImludGVncml0eSBpc3N1ZSI7aWYoZS5jb3VudGVyLnVuY29tcHJlc3NlZCsrLGUucHRyKz1MLFQ9RCpwKnUsUz1hLmJ5dGVMZW5ndGgtZS5wdHIsVD1UPFM/VDpTLEM9bmV3IEFycmF5QnVmZmVyKFQldT09PTA/VDpUK3UtVCV1KSxIPW5ldyBVaW50OEFycmF5KEMpLEguc2V0KG5ldyBVaW50OEFycmF5KGEsZS5wdHIsVCkpLE89bmV3IHIoQyksYj0wLEUpZm9yKGw9MDtsPEQ7bCsrKXtmb3IoZj0wO2Y8cDtmKyspRVt2XSYmKFlbdl09T1tiKytdKSx2Kys7dis9QX1lbHNlIGZvcihsPTA7bDxEO2wrKyl7Zm9yKGY9MDtmPHA7ZisrKVlbdisrXT1PW2IrK107dis9QX1lLnB0cis9Yip1fWVsc2UgaWYoUT1kLmdldERhdGFUeXBlVXNlZChaJiZjPDY/NDpjLHopLFI9ZC5nZXRPbmVQaXhlbChCLEwsUSxGKSxMKz1kLmdldERhdGFUeXBlU2l6ZShRKSxYPT09MylpZihlLnB0cis9TCxlLmNvdW50ZXIuY29uc3RhbnRvZmZzZXQrKyxFKWZvcihsPTA7bDxEO2wrKyl7Zm9yKGY9MDtmPHA7ZisrKUVbdl0mJihZW3ZdPVo/TWF0aC5taW4oRyxOW3ZdK1IpOlIpLHYrKzt2Kz1BfWVsc2UgZm9yKGw9MDtsPEQ7bCsrKXtmb3IoZj0wO2Y8cDtmKyspWVt2XT1aP01hdGgubWluKEcsTlt2XStSKTpSLHYrKzt2Kz1BfWVsc2UgaWYoZS5wdHIrPUwsZC5kZWNvZGVCaXRzKGEsZSwkLFIsaiksTD0wLFopaWYoRSlmb3IobD0wO2w8RDtsKyspe2ZvcihmPTA7ZjxwO2YrKylFW3ZdJiYoWVt2XT0kW0wrK10rTlt2XSksdisrO3YrPUF9ZWxzZSBmb3IobD0wO2w8RDtsKyspe2ZvcihmPTA7ZjxwO2YrKylZW3ZdPSRbTCsrXStOW3ZdLHYrKzt2Kz1BfWVsc2UgaWYoRSlmb3IobD0wO2w8RDtsKyspe2ZvcihmPTA7ZjxwO2YrKylFW3ZdJiYoWVt2XT0kW0wrK10pLHYrKzt2Kz1BfWVsc2UgZm9yKGw9MDtsPEQ7bCsrKXtmb3IoZj0wO2Y8cDtmKyspWVt2KytdPSRbTCsrXTt2Kz1BfX1xPjEmJiFzJiYoZS5waXhlbHMucmVzdWx0UGl4ZWxzPWQuc3dhcERpbWVuc2lvbk9yZGVyKGUucGl4ZWxzLnJlc3VsdFBpeGVscyxpLHEscikpfSxmb3JtYXRGaWxlSW5mbzpmdW5jdGlvbihhKXtyZXR1cm57ZmlsZUlkZW50aWZpZXJTdHJpbmc6YS5oZWFkZXJJbmZvLmZpbGVJZGVudGlmaWVyU3RyaW5nLGZpbGVWZXJzaW9uOmEuaGVhZGVySW5mby5maWxlVmVyc2lvbixpbWFnZVR5cGU6YS5oZWFkZXJJbmZvLmltYWdlVHlwZSxoZWlnaHQ6YS5oZWFkZXJJbmZvLmhlaWdodCx3aWR0aDphLmhlYWRlckluZm8ud2lkdGgsbnVtVmFsaWRQaXhlbDphLmhlYWRlckluZm8ubnVtVmFsaWRQaXhlbCxtaWNyb0Jsb2NrU2l6ZTphLmhlYWRlckluZm8ubWljcm9CbG9ja1NpemUsYmxvYlNpemU6YS5oZWFkZXJJbmZvLmJsb2JTaXplLG1heFpFcnJvcjphLmhlYWRlckluZm8ubWF4WkVycm9yLHBpeGVsVHlwZTpkLmdldFBpeGVsVHlwZShhLmhlYWRlckluZm8uaW1hZ2VUeXBlKSxlb2ZPZmZzZXQ6YS5lb2ZPZmZzZXQsbWFzazphLm1hc2s/e251bUJ5dGVzOmEubWFzay5udW1CeXRlc306bnVsbCxwaXhlbHM6e251bUJsb2Nrc1g6YS5waXhlbHMubnVtQmxvY2tzWCxudW1CbG9ja3NZOmEucGl4ZWxzLm51bUJsb2Nrc1ksbWF4VmFsdWU6YS5oZWFkZXJJbmZvLnpNYXgsbWluVmFsdWU6YS5oZWFkZXJJbmZvLnpNaW4sbm9EYXRhVmFsdWU6YS5ub0RhdGFWYWx1ZX19fSxjb25zdHJ1Y3RDb25zdGFudFN1cmZhY2U6ZnVuY3Rpb24oYSxlKXt2YXIgcj1hLmhlYWRlckluZm8uek1heCxzPWEuaGVhZGVySW5mby56TWluLHQ9YS5oZWFkZXJJbmZvLm1heFZhbHVlcyxuPWEuaGVhZGVySW5mby5udW1EaW1zLGg9YS5oZWFkZXJJbmZvLmhlaWdodCphLmhlYWRlckluZm8ud2lkdGgsaT0wLG89MCxjPTAsdT1hLnBpeGVscy5yZXN1bHRNYXNrLG09YS5waXhlbHMucmVzdWx0UGl4ZWxzO2lmKHUpaWYobj4xKXtpZihlKWZvcihpPTA7aTxuO2krKylmb3IoYz1pKmgscj10W2ldLG89MDtvPGg7bysrKXVbb10mJihtW2Mrb109cik7ZWxzZSBmb3Iobz0wO288aDtvKyspaWYodVtvXSlmb3IoYz1vKm4saT0wO2k8bjtpKyspbVtjK25dPXRbaV19ZWxzZSBmb3Iobz0wO288aDtvKyspdVtvXSYmKG1bb109cik7ZWxzZSBpZihuPjEmJnMhPT1yKWlmKGUpZm9yKGk9MDtpPG47aSsrKWZvcihjPWkqaCxyPXRbaV0sbz0wO288aDtvKyspbVtjK29dPXI7ZWxzZSBmb3Iobz0wO288aDtvKyspZm9yKGM9bypuLGk9MDtpPG47aSsrKW1bYytpXT10W2ldO2Vsc2UgZm9yKG89MDtvPGgqbjtvKyspbVtvXT1yfSxnZXREYXRhVHlwZUFycmF5OmZ1bmN0aW9uKGEpe3ZhciBlO3N3aXRjaChhKXtjYXNlIDA6ZT1JbnQ4QXJyYXk7YnJlYWs7Y2FzZSAxOmU9VWludDhBcnJheTticmVhaztjYXNlIDI6ZT1JbnQxNkFycmF5O2JyZWFrO2Nhc2UgMzplPVVpbnQxNkFycmF5O2JyZWFrO2Nhc2UgNDplPUludDMyQXJyYXk7YnJlYWs7Y2FzZSA1OmU9VWludDMyQXJyYXk7YnJlYWs7Y2FzZSA2OmU9RmxvYXQzMkFycmF5O2JyZWFrO2Nhc2UgNzplPUZsb2F0NjRBcnJheTticmVhaztkZWZhdWx0OmU9RmxvYXQzMkFycmF5fXJldHVybiBlfSxnZXRQaXhlbFR5cGU6ZnVuY3Rpb24oYSl7dmFyIGU7c3dpdGNoKGEpe2Nhc2UgMDplPSJTOCI7YnJlYWs7Y2FzZSAxOmU9IlU4IjticmVhaztjYXNlIDI6ZT0iUzE2IjticmVhaztjYXNlIDM6ZT0iVTE2IjticmVhaztjYXNlIDQ6ZT0iUzMyIjticmVhaztjYXNlIDU6ZT0iVTMyIjticmVhaztjYXNlIDY6ZT0iRjMyIjticmVhaztjYXNlIDc6ZT0iRjY0IjticmVhaztkZWZhdWx0OmU9IkYzMiJ9cmV0dXJuIGV9LGlzVmFsaWRQaXhlbFZhbHVlOmZ1bmN0aW9uKGEsZSl7aWYoZT09bnVsbClyZXR1cm4hMTt2YXIgcjtzd2l0Y2goYSl7Y2FzZSAwOnI9ZT49LTEyOCYmZTw9MTI3O2JyZWFrO2Nhc2UgMTpyPWU+PTAmJmU8PTI1NTticmVhaztjYXNlIDI6cj1lPj0tMzI3NjgmJmU8PTMyNzY3O2JyZWFrO2Nhc2UgMzpyPWU+PTAmJmU8PTY1NTM2O2JyZWFrO2Nhc2UgNDpyPWU+PS0yMTQ3NDgzNjQ4JiZlPD0yMTQ3NDgzNjQ3O2JyZWFrO2Nhc2UgNTpyPWU+PTAmJmU8PTQyOTQ5NjcyOTY7YnJlYWs7Y2FzZSA2OnI9ZT49LTM0MDI3OTk5Mzg3OTAxNDg0ZTIyJiZlPD0zNDAyNzk5OTM4NzkwMTQ4NGUyMjticmVhaztjYXNlIDc6cj1lPj0tMTc5NzY5MzEzNDg2MjMxNTdlMjkyJiZlPD0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7YnJlYWs7ZGVmYXVsdDpyPSExfXJldHVybiByfSxnZXREYXRhVHlwZVNpemU6ZnVuY3Rpb24oYSl7dmFyIGU9MDtzd2l0Y2goYSl7Y2FzZSAwOmNhc2UgMTplPTE7YnJlYWs7Y2FzZSAyOmNhc2UgMzplPTI7YnJlYWs7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6ZT00O2JyZWFrO2Nhc2UgNzplPTg7YnJlYWs7ZGVmYXVsdDplPWF9cmV0dXJuIGV9LGdldERhdGFUeXBlVXNlZDpmdW5jdGlvbihhLGUpe3ZhciByPWE7c3dpdGNoKGEpe2Nhc2UgMjpjYXNlIDQ6cj1hLWU7YnJlYWs7Y2FzZSAzOmNhc2UgNTpyPWEtMiplO2JyZWFrO2Nhc2UgNjplPT09MD9yPWE6ZT09PTE/cj0yOnI9MTticmVhaztjYXNlIDc6ZT09PTA/cj1hOnI9YS0yKmUrMTticmVhaztkZWZhdWx0OnI9YTticmVha31yZXR1cm4gcn0sZ2V0T25lUGl4ZWw6ZnVuY3Rpb24oYSxlLHIscyl7dmFyIHQ9MDtzd2l0Y2gocil7Y2FzZSAwOnQ9cy5nZXRJbnQ4KGUpO2JyZWFrO2Nhc2UgMTp0PXMuZ2V0VWludDgoZSk7YnJlYWs7Y2FzZSAyOnQ9cy5nZXRJbnQxNihlLCEwKTticmVhaztjYXNlIDM6dD1zLmdldFVpbnQxNihlLCEwKTticmVhaztjYXNlIDQ6dD1zLmdldEludDMyKGUsITApO2JyZWFrO2Nhc2UgNTp0PXMuZ2V0VUludDMyKGUsITApO2JyZWFrO2Nhc2UgNjp0PXMuZ2V0RmxvYXQzMihlLCEwKTticmVhaztjYXNlIDc6dD1zLmdldEZsb2F0NjQoZSwhMCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJ0aGUgZGVjb2RlciBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoaXMgcGl4ZWwgdHlwZSJ9cmV0dXJuIHR9LHN3YXBEaW1lbnNpb25PcmRlcjpmdW5jdGlvbihhLGUscixzLHQpe3ZhciBuPTAsaD0wLGk9MCxvPTAsYz1hO2lmKHI+MSlpZihjPW5ldyBzKGUqciksdClmb3Iobj0wO248ZTtuKyspZm9yKG89bixpPTA7aTxyO2krKyxvKz1lKWNbb109YVtoKytdO2Vsc2UgZm9yKG49MDtuPGU7bisrKWZvcihvPW4saT0wO2k8cjtpKyssbys9ZSljW2grK109YVtvXTtyZXR1cm4gY319LHk9ZnVuY3Rpb24oYSxlLHIpe3RoaXMudmFsPWEsdGhpcy5sZWZ0PWUsdGhpcy5yaWdodD1yfSxWPXtkZWNvZGU6ZnVuY3Rpb24oYSxlKXtlPWV8fHt9O3ZhciByPWUubm9EYXRhVmFsdWUscz0wLHQ9e307aWYodC5wdHI9ZS5pbnB1dE9mZnNldHx8MCx0LnBpeGVscz17fSwhIWQucmVhZEhlYWRlckluZm8oYSx0KSl7dmFyIG49dC5oZWFkZXJJbmZvLGg9bi5maWxlVmVyc2lvbixpPWQuZ2V0RGF0YVR5cGVBcnJheShuLmltYWdlVHlwZSk7aWYoaD41KXRocm93InVuc3VwcG9ydGVkIGxlcmMgdmVyc2lvbiAyLiIraDtkLnJlYWRNYXNrKGEsdCksbi5udW1WYWxpZFBpeGVsIT09bi53aWR0aCpuLmhlaWdodCYmIXQucGl4ZWxzLnJlc3VsdE1hc2smJih0LnBpeGVscy5yZXN1bHRNYXNrPWUubWFza0RhdGEpO3ZhciBvPW4ud2lkdGgqbi5oZWlnaHQ7dC5waXhlbHMucmVzdWx0UGl4ZWxzPW5ldyBpKG8qbi5udW1EaW1zKSx0LmNvdW50ZXI9e29uZXN3ZWVwOjAsdW5jb21wcmVzc2VkOjAsbHV0OjAsYml0c3R1ZmZlcjowLGNvbnN0YW50OjAsY29uc3RhbnRvZmZzZXQ6MH07dmFyIGM9IWUucmV0dXJuUGl4ZWxJbnRlcmxlYXZlZERpbXM7aWYobi5udW1WYWxpZFBpeGVsIT09MClpZihuLnpNYXg9PT1uLnpNaW4pZC5jb25zdHJ1Y3RDb25zdGFudFN1cmZhY2UodCxjKTtlbHNlIGlmKGg+PTQmJmQuY2hlY2tNaW5NYXhSYW5nZXMoYSx0KSlkLmNvbnN0cnVjdENvbnN0YW50U3VyZmFjZSh0LGMpO2Vsc2V7dmFyIHU9bmV3IERhdGFWaWV3KGEsdC5wdHIsMiksbT11LmdldFVpbnQ4KDApO2lmKHQucHRyKyssbSlkLnJlYWREYXRhT25lU3dlZXAoYSx0LGksYyk7ZWxzZSBpZihoPjEmJm4uaW1hZ2VUeXBlPD0xJiZNYXRoLmFicyhuLm1heFpFcnJvci0uNSk8MWUtNSl7dmFyIHc9dS5nZXRVaW50OCgxKTtpZih0LnB0cisrLHQuZW5jb2RlTW9kZT13LHc+Mnx8aDw0JiZ3PjEpdGhyb3ciSW52YWxpZCBIdWZmbWFuIGZsYWcgIit3O3c/ZC5yZWFkSHVmZm1hbihhLHQsaSxjKTpkLnJlYWRUaWxlcyhhLHQsaSxjKX1lbHNlIGQucmVhZFRpbGVzKGEsdCxpLGMpfXQuZW9mT2Zmc2V0PXQucHRyO3ZhciBsO2UuaW5wdXRPZmZzZXQ/KGw9dC5oZWFkZXJJbmZvLmJsb2JTaXplK2UuaW5wdXRPZmZzZXQtdC5wdHIsTWF0aC5hYnMobCk+PTEmJih0LmVvZk9mZnNldD1lLmlucHV0T2Zmc2V0K3QuaGVhZGVySW5mby5ibG9iU2l6ZSkpOihsPXQuaGVhZGVySW5mby5ibG9iU2l6ZS10LnB0cixNYXRoLmFicyhsKT49MSYmKHQuZW9mT2Zmc2V0PXQuaGVhZGVySW5mby5ibG9iU2l6ZSkpO3ZhciBmPXt3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCxwaXhlbERhdGE6dC5waXhlbHMucmVzdWx0UGl4ZWxzLG1pblZhbHVlOm4uek1pbixtYXhWYWx1ZTpuLnpNYXgsdmFsaWRQaXhlbENvdW50Om4ubnVtVmFsaWRQaXhlbCxkaW1Db3VudDpuLm51bURpbXMsZGltU3RhdHM6e21pblZhbHVlczpuLm1pblZhbHVlcyxtYXhWYWx1ZXM6bi5tYXhWYWx1ZXN9LG1hc2tEYXRhOnQucGl4ZWxzLnJlc3VsdE1hc2t9O2lmKHQucGl4ZWxzLnJlc3VsdE1hc2smJmQuaXNWYWxpZFBpeGVsVmFsdWUobi5pbWFnZVR5cGUscikpe3ZhciBnPXQucGl4ZWxzLnJlc3VsdE1hc2s7Zm9yKHM9MDtzPG87cysrKWdbc118fChmLnBpeGVsRGF0YVtzXT1yKTtmLm5vRGF0YVZhbHVlPXJ9cmV0dXJuIHQubm9EYXRhVmFsdWU9cixlLnJldHVybkZpbGVJbmZvJiYoZi5maWxlSW5mbz1kLmZvcm1hdEZpbGVJbmZvKHQpKSxmfX0sZ2V0QmFuZENvdW50OmZ1bmN0aW9uKGEpe3ZhciBlPTAscj0wLHM9e307Zm9yKHMucHRyPTAscy5waXhlbHM9e307cjxhLmJ5dGVMZW5ndGgtNTg7KWQucmVhZEhlYWRlckluZm8oYSxzKSxyKz1zLmhlYWRlckluZm8uYmxvYlNpemUsZSsrLHMucHRyPXI7cmV0dXJuIGV9fTtyZXR1cm4gVn0oKTt2YXIgdGU9ZnVuY3Rpb24oKXt2YXIgaz1uZXcgQXJyYXlCdWZmZXIoNCksZD1uZXcgVWludDhBcnJheShrKSx5PW5ldyBVaW50MzJBcnJheShrKTtyZXR1cm4geVswXT0xLGRbMF09PT0xfSgpLGFlPXtkZWNvZGU6ZnVuY3Rpb24oayxkKXtpZighdGUpdGhyb3ciQmlnIGVuZGlhbiBzeXN0ZW0gaXMgbm90IHN1cHBvcnRlZC4iO2Q9ZHx8e307dmFyIHk9ZC5pbnB1dE9mZnNldHx8MCxWPW5ldyBVaW50OEFycmF5KGsseSwxMCksYT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsViksZSxyO2lmKGEudHJpbSgpPT09IkNudFpJbWFnZSIpZT1uZSxyPTE7ZWxzZSBpZihhLnN1YnN0cmluZygwLDUpPT09IkxlcmMyIillPWllLHI9MjtlbHNlIHRocm93IlVuZXhwZWN0ZWQgZmlsZSBpZGVudGlmaWVyIHN0cmluZzogIithO2Zvcih2YXIgcz0wLHQ9ay5ieXRlTGVuZ3RoLTEwLG4saD1bXSxpLG8sYz17d2lkdGg6MCxoZWlnaHQ6MCxwaXhlbHM6W10scGl4ZWxUeXBlOmQucGl4ZWxUeXBlLG1hc2s6bnVsbCxzdGF0aXN0aWNzOltdfSx1PTA7eTx0Oyl7dmFyIG09ZS5kZWNvZGUoayx7aW5wdXRPZmZzZXQ6eSxlbmNvZGVkTWFza0RhdGE6bixtYXNrRGF0YTpvLHJldHVybk1hc2s6cz09PTAscmV0dXJuRW5jb2RlZE1hc2s6cz09PTAscmV0dXJuRmlsZUluZm86ITAscmV0dXJuUGl4ZWxJbnRlcmxlYXZlZERpbXM6ZC5yZXR1cm5QaXhlbEludGVybGVhdmVkRGltcyxwaXhlbFR5cGU6ZC5waXhlbFR5cGV8fG51bGwsbm9EYXRhVmFsdWU6ZC5ub0RhdGFWYWx1ZXx8bnVsbH0pO3k9bS5maWxlSW5mby5lb2ZPZmZzZXQsbz1tLm1hc2tEYXRhLHM9PT0wJiYobj1tLmVuY29kZWRNYXNrRGF0YSxjLndpZHRoPW0ud2lkdGgsYy5oZWlnaHQ9bS5oZWlnaHQsYy5kaW1Db3VudD1tLmRpbUNvdW50fHwxLGMucGl4ZWxUeXBlPW0ucGl4ZWxUeXBlfHxtLmZpbGVJbmZvLnBpeGVsVHlwZSxjLm1hc2s9bykscj4xJiYobyYmaC5wdXNoKG8pLG0uZmlsZUluZm8ubWFzayYmbS5maWxlSW5mby5tYXNrLm51bUJ5dGVzPjAmJnUrKykscysrLGMucGl4ZWxzLnB1c2gobS5waXhlbERhdGEpLGMuc3RhdGlzdGljcy5wdXNoKHttaW5WYWx1ZTptLm1pblZhbHVlLG1heFZhbHVlOm0ubWF4VmFsdWUsbm9EYXRhVmFsdWU6bS5ub0RhdGFWYWx1ZSxkaW1TdGF0czptLmRpbVN0YXRzfSl9dmFyIHcsbCxmO2lmKHI+MSYmdT4xKXtmb3IoZj1jLndpZHRoKmMuaGVpZ2h0LGMuYmFuZE1hc2tzPWgsbz1uZXcgVWludDhBcnJheShmKSxvLnNldChoWzBdKSx3PTE7dzxoLmxlbmd0aDt3KyspZm9yKGk9aFt3XSxsPTA7bDxmO2wrKylvW2xdPW9bbF0maVtsXTtjLm1hc2tEYXRhPW99cmV0dXJuIGN9fTtjb25zdCBzZT17MDo3ZTMsMTo2ZTMsMjo1ZTMsMzo0ZTMsNDozZTMsNToyNTAwLDY6MmUzLDc6MTUwMCw4OjgwMCw5OjUwMCwxMDoyMDAsMTE6MTAwLDEyOjQwLDEzOjEyLDE0OjUsMTU6MiwxNjoxLDE3Oi41LDE4Oi4yLDE5Oi4xLDIwOi4wMX07ZnVuY3Rpb24gZmUoayl7Y29uc3R7aGVpZ2h0OmQsd2lkdGg6eSxwaXhlbHM6Vn09YWUuZGVjb2RlKGspLGE9bmV3IEZsb2F0MzJBcnJheShkKnkpO2ZvcihsZXQgZT0wO2U8YS5sZW5ndGg7ZSsrKWFbZV09VlswXVtlXTtyZXR1cm57YXJyYXk6YSx3aWR0aDp5LGhlaWdodDpkfX1mdW5jdGlvbiBvZShrLGQseSl7bGV0IFY9ZmUoayk7eVsyXS15WzBdPDEmJihWPWxlKFYseSkpO2NvbnN0e2FycmF5OmEsd2lkdGg6ZX09VixzPW5ldyBlZShlKS5jcmVhdGVUaWxlKGEpLHQ9c2VbZF18fDA7cmV0dXJuIHMuZ2V0R2VvbWV0cnlEYXRhKHQpfWZ1bmN0aW9uIGxlKGssZCl7ZnVuY3Rpb24geShzLHQsbixoLGksbyxjLHUpe2NvbnN0IG09bmV3IEZsb2F0MzJBcnJheShpKm8pO2ZvcihsZXQgbD0wO2w8bztsKyspZm9yKGxldCBmPTA7ZjxpO2YrKyl7Y29uc3QgZz0obCtoKSp0KyhmK24pLE09bCppK2Y7bVtNXT1zW2ddfWNvbnN0IHc9bmV3IEZsb2F0MzJBcnJheSh1KmMpO2ZvcihsZXQgbD0wO2w8dTtsKyspZm9yKGxldCBmPTA7ZjxjO2YrKyl7Y29uc3QgZz1sKnUrZixNPU1hdGgucm91bmQoZipvL3UpLHA9TWF0aC5yb3VuZChsKmkvYykqaStNO3dbZ109bVtwXX1yZXR1cm4gd31jb25zdCBWPXVlKGQsay53aWR0aCksYT1WLnN3KzEsZT1WLnNoKzE7cmV0dXJue2FycmF5Onkoay5hcnJheSxrLndpZHRoLFYuc3gsVi5zeSxWLnN3LFYuc2gsYSxlKSx3aWR0aDphLGhlaWdodDplfX1mdW5jdGlvbiB1ZShrLGQpe2NvbnN0IHk9TWF0aC5mbG9vcihrWzBdKmQpLFY9TWF0aC5mbG9vcihrWzFdKmQpLGE9TWF0aC5mbG9vcigoa1syXS1rWzBdKSpkKSxlPU1hdGguZmxvb3IoKGtbM10ta1sxXSkqZCk7cmV0dXJue3N4Onksc3k6VixzdzphLHNoOmV9fXNlbGYub25tZXNzYWdlPWs9Pntjb25zdCBkPWsuZGF0YSx5PW9lKGQuZGVtRGF0YSxkLnosZC5jbGlwQm91bmRzKTtzZWxmLnBvc3RNZXNzYWdlKHkpfX0pKCk7Cg==",oy=i=>Uint8Array.from(atob(i),e=>e.charCodeAt(0)),Bc=typeof self<"u"&&self.Blob&&new Blob([oy(Yc)],{type:"text/javascript;charset=utf-8"});function ay(i){let e;try{if(e=Bc&&(self.URL||self.webkitURL).createObjectURL(Bc),!e)throw"";const t=new Worker(e,{name:i?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;base64,"+Yc,{name:i?.name})}finally{e&&(self.URL||self.webkitURL).revokeObjectURL(e)}}const ly=function(){var i={};i.defaultNoDataValue=-34027999387901484e22,i.decode=function(l,u){u=u||{};var c=u.encodedMaskData||u.encodedMaskData===null,d=r(l,u.inputOffset||0,c),p=u.noDataValue!==null?u.noDataValue:i.defaultNoDataValue,f=e(d,u.pixelType||Float32Array,u.encodedMaskData,p,u.returnMask),y={width:d.width,height:d.height,pixelData:f.resultPixels,minValue:f.minValue,maxValue:d.pixels.maxValue,noDataValue:p};return f.resultMask&&(y.maskData=f.resultMask),u.returnEncodedMask&&d.mask&&(y.encodedMaskData=d.mask.bitset?d.mask.bitset:null),u.returnFileInfo&&(y.fileInfo=t(d),u.computeUsedBitDepths&&(y.fileInfo.bitDepths=n(d))),y};var e=function(l,u,c,d,p){var f=0,y=l.pixels.numBlocksX,v=l.pixels.numBlocksY,_=Math.floor(l.width/y),S=Math.floor(l.height/v),x=2*l.maxZError,P=Number.MAX_VALUE,L;c=c||(l.mask?l.mask.bitset:null);var T,W;T=new u(l.width*l.height),p&&c&&(W=new Uint8Array(l.width*l.height));for(var K=new Float32Array(_*S),O,D,V=0;V<=v;V++){var R=V!==v?S:l.height%v;if(R!==0)for(var C=0;C<=y;C++){var X=C!==y?_:l.width%y;if(X!==0){var Y=V*l.width*S+C*_,Q=l.width-X,j=l.pixels.blocks[f],H,J,ie;j.encoding<2?(j.encoding===0?H=j.rawData:(o(j.stuffedData,j.bitsPerPixel,j.numValidPixels,j.offset,x,K,l.pixels.maxValue),H=K),J=0):j.encoding===2?ie=0:ie=j.offset;var re;if(c)for(D=0;D<R;D++){for(Y&7&&(re=c[Y>>3],re<<=Y&7),O=0;O<X;O++)Y&7||(re=c[Y>>3]),re&128?(W&&(W[Y]=1),L=j.encoding<2?H[J++]:ie,P=P>L?L:P,T[Y++]=L):(W&&(W[Y]=0),T[Y++]=d),re<<=1;Y+=Q}else if(j.encoding<2)for(D=0;D<R;D++){for(O=0;O<X;O++)L=H[J++],P=P>L?L:P,T[Y++]=L;Y+=Q}else for(P=P>ie?ie:P,D=0;D<R;D++){for(O=0;O<X;O++)T[Y++]=ie;Y+=Q}if(j.encoding===1&&J!==j.numValidPixels)throw"Block and Mask do not match";f++}}}return{resultPixels:T,resultMask:W,minValue:P}},t=function(l){return{fileIdentifierString:l.fileIdentifierString,fileVersion:l.fileVersion,imageType:l.imageType,height:l.height,width:l.width,maxZError:l.maxZError,eofOffset:l.eofOffset,mask:l.mask?{numBlocksX:l.mask.numBlocksX,numBlocksY:l.mask.numBlocksY,numBytes:l.mask.numBytes,maxValue:l.mask.maxValue}:null,pixels:{numBlocksX:l.pixels.numBlocksX,numBlocksY:l.pixels.numBlocksY,numBytes:l.pixels.numBytes,maxValue:l.pixels.maxValue,noDataValue:l.noDataValue}}},n=function(l){for(var u=l.pixels.numBlocksX*l.pixels.numBlocksY,c={},d=0;d<u;d++){var p=l.pixels.blocks[d];p.encoding===0?c.float32=!0:p.encoding===1?c[p.bitsPerPixel]=!0:c[0]=!0}return Object.keys(c)},r=function(l,u,c){var d={},p=new Uint8Array(l,u,10);if(d.fileIdentifierString=String.fromCharCode.apply(null,p),d.fileIdentifierString.trim()!=="CntZImage")throw"Unexpected file identifier string: "+d.fileIdentifierString;u+=10;var f=new DataView(l,u,24);if(d.fileVersion=f.getInt32(0,!0),d.imageType=f.getInt32(4,!0),d.height=f.getUint32(8,!0),d.width=f.getUint32(12,!0),d.maxZError=f.getFloat64(16,!0),u+=24,!c)if(f=new DataView(l,u,16),d.mask={},d.mask.numBlocksY=f.getUint32(0,!0),d.mask.numBlocksX=f.getUint32(4,!0),d.mask.numBytes=f.getUint32(8,!0),d.mask.maxValue=f.getFloat32(12,!0),u+=16,d.mask.numBytes>0){var y=new Uint8Array(Math.ceil(d.width*d.height/8));f=new DataView(l,u,d.mask.numBytes);var v=f.getInt16(0,!0),_=2,S=0;do{if(v>0)for(;v--;)y[S++]=f.getUint8(_++);else{var x=f.getUint8(_++);for(v=-v;v--;)y[S++]=x}v=f.getInt16(_,!0),_+=2}while(_<d.mask.numBytes);if(v!==-32768||S<y.length)throw"Unexpected end of mask RLE encoding";d.mask.bitset=y,u+=d.mask.numBytes}else d.mask.numBytes|d.mask.numBlocksY|d.mask.maxValue||(d.mask.bitset=new Uint8Array(Math.ceil(d.width*d.height/8)));f=new DataView(l,u,16),d.pixels={},d.pixels.numBlocksY=f.getUint32(0,!0),d.pixels.numBlocksX=f.getUint32(4,!0),d.pixels.numBytes=f.getUint32(8,!0),d.pixels.maxValue=f.getFloat32(12,!0),u+=16;var P=d.pixels.numBlocksX,L=d.pixels.numBlocksY,T=P+(d.width%P>0?1:0),W=L+(d.height%L>0?1:0);d.pixels.blocks=new Array(T*W);for(var K=0,O=0;O<W;O++)for(var D=0;D<T;D++){var V=0,R=l.byteLength-u;f=new DataView(l,u,Math.min(10,R));var C={};d.pixels.blocks[K++]=C;var X=f.getUint8(0);if(V++,C.encoding=X&63,C.encoding>3)throw"Invalid block encoding ("+C.encoding+")";if(C.encoding===2){u++;continue}if(X!==0&&X!==2){if(X>>=6,C.offsetType=X,X===2)C.offset=f.getInt8(1),V++;else if(X===1)C.offset=f.getInt16(1,!0),V+=2;else if(X===0)C.offset=f.getFloat32(1,!0),V+=4;else throw"Invalid block offset type";if(C.encoding===1)if(X=f.getUint8(V),V++,C.bitsPerPixel=X&63,X>>=6,C.numValidPixelsType=X,X===2)C.numValidPixels=f.getUint8(V),V++;else if(X===1)C.numValidPixels=f.getUint16(V,!0),V+=2;else if(X===0)C.numValidPixels=f.getUint32(V,!0),V+=4;else throw"Invalid valid pixel count type"}if(u+=V,C.encoding!==3){var Y,Q;if(C.encoding===0){var j=(d.pixels.numBytes-1)/4;if(j!==Math.floor(j))throw"uncompressed block has invalid length";Y=new ArrayBuffer(j*4),Q=new Uint8Array(Y),Q.set(new Uint8Array(l,u,j*4));var H=new Float32Array(Y);C.rawData=H,u+=j*4}else if(C.encoding===1){var J=Math.ceil(C.numValidPixels*C.bitsPerPixel/8),ie=Math.ceil(J/4);Y=new ArrayBuffer(ie*4),Q=new Uint8Array(Y),Q.set(new Uint8Array(l,u,J)),C.stuffedData=new Uint32Array(Y),u+=J}}}return d.eofOffset=u,d},o=function(l,u,c,d,p,f,y){var v=(1<<u)-1,_=0,S,x=0,P,L,T=Math.ceil((y-d)/p),W=l.length*4-Math.ceil(u*c/8);for(l[l.length-1]<<=8*W,S=0;S<c;S++){if(x===0&&(L=l[_++],x=32),x>=u)P=L>>>x-u&v,x-=u;else{var K=u-x;P=(L&v)<<K&v,L=l[_++],x=32-K,P+=L>>>x}f[S]=P<T?d+P*p:y}return f};return i}(),cy=function(){var i={unstuff:function(r,o,l,u,c,d,p,f){var y=(1<<l)-1,v=0,_,S=0,x,P,L,T,W=r.length*4-Math.ceil(l*u/8);if(r[r.length-1]<<=8*W,c)for(_=0;_<u;_++)S===0&&(P=r[v++],S=32),S>=l?(x=P>>>S-l&y,S-=l):(L=l-S,x=(P&y)<<L&y,P=r[v++],S=32-L,x+=P>>>S),o[_]=c[x];else for(T=Math.ceil((f-d)/p),_=0;_<u;_++)S===0&&(P=r[v++],S=32),S>=l?(x=P>>>S-l&y,S-=l):(L=l-S,x=(P&y)<<L&y,P=r[v++],S=32-L,x+=P>>>S),o[_]=x<T?d+x*p:f},unstuffLUT:function(r,o,l,u,c,d){var p=(1<<o)-1,f=0,y=0,v=0,_=0,S=0,x,P=[],L=r.length*4-Math.ceil(o*l/8);r[r.length-1]<<=8*L;var T=Math.ceil((d-u)/c);for(y=0;y<l;y++)_===0&&(x=r[f++],_=32),_>=o?(S=x>>>_-o&p,_-=o):(v=o-_,S=(x&p)<<v&p,x=r[f++],_=32-v,S+=x>>>_),P[y]=S<T?u+S*c:d;return P.unshift(u),P},unstuff2:function(r,o,l,u,c,d,p,f){var y=(1<<l)-1,v=0,_,S=0,x=0,P,L,T;if(c)for(_=0;_<u;_++)S===0&&(L=r[v++],S=32,x=0),S>=l?(P=L>>>x&y,S-=l,x+=l):(T=l-S,P=L>>>x&y,L=r[v++],S=32-T,P|=(L&(1<<T)-1)<<l-T,x=T),o[_]=c[P];else{var W=Math.ceil((f-d)/p);for(_=0;_<u;_++)S===0&&(L=r[v++],S=32,x=0),S>=l?(P=L>>>x&y,S-=l,x+=l):(T=l-S,P=L>>>x&y,L=r[v++],S=32-T,P|=(L&(1<<T)-1)<<l-T,x=T),o[_]=P<W?d+P*p:f}return o},unstuffLUT2:function(r,o,l,u,c,d){var p=(1<<o)-1,f=0,y=0,v=0,_=0,S=0,x=0,P,L=[],T=Math.ceil((d-u)/c);for(y=0;y<l;y++)_===0&&(P=r[f++],_=32,x=0),_>=o?(S=P>>>x&p,_-=o,x+=o):(v=o-_,S=P>>>x&p,P=r[f++],_=32-v,S|=(P&(1<<v)-1)<<o-v,x=v),L[y]=S<T?u+S*c:d;return L.unshift(u),L},originalUnstuff:function(r,o,l,u){var c=(1<<l)-1,d=0,p,f=0,y,v,_,S=r.length*4-Math.ceil(l*u/8);for(r[r.length-1]<<=8*S,p=0;p<u;p++)f===0&&(v=r[d++],f=32),f>=l?(y=v>>>f-l&c,f-=l):(_=l-f,y=(v&c)<<_&c,v=r[d++],f=32-_,y+=v>>>f),o[p]=y;return o},originalUnstuff2:function(r,o,l,u){var c=(1<<l)-1,d=0,p,f=0,y=0,v,_,S;for(p=0;p<u;p++)f===0&&(_=r[d++],f=32,y=0),f>=l?(v=_>>>y&c,f-=l,y+=l):(S=l-f,v=_>>>y&c,_=r[d++],f=32-S,v|=(_&(1<<S)-1)<<l-S,y=S),o[p]=v;return o}},e={HUFFMAN_LUT_BITS_MAX:12,computeChecksumFletcher32:function(r){for(var o=65535,l=65535,u=r.length,c=Math.floor(u/2),d=0;c;){var p=c>=359?359:c;c-=p;do o+=r[d++]<<8,l+=o+=r[d++];while(--p);o=(o&65535)+(o>>>16),l=(l&65535)+(l>>>16)}return u&1&&(l+=o+=r[d]<<8),o=(o&65535)+(o>>>16),l=(l&65535)+(l>>>16),(l<<16|o)>>>0},readHeaderInfo:function(r,o){var l=o.ptr,u=new Uint8Array(r,l,6),c={};if(c.fileIdentifierString=String.fromCharCode.apply(null,u),c.fileIdentifierString.lastIndexOf("Lerc2",0)!==0)throw"Unexpected file identifier string (expect Lerc2 ): "+c.fileIdentifierString;l+=6;var d=new DataView(r,l,8),p=d.getInt32(0,!0);c.fileVersion=p,l+=4,p>=3&&(c.checksum=d.getUint32(4,!0),l+=4),d=new DataView(r,l,12),c.height=d.getUint32(0,!0),c.width=d.getUint32(4,!0),l+=8,p>=4?(c.numDims=d.getUint32(8,!0),l+=4):c.numDims=1,d=new DataView(r,l,40),c.numValidPixel=d.getUint32(0,!0),c.microBlockSize=d.getInt32(4,!0),c.blobSize=d.getInt32(8,!0),c.imageType=d.getInt32(12,!0),c.maxZError=d.getFloat64(16,!0),c.zMin=d.getFloat64(24,!0),c.zMax=d.getFloat64(32,!0),l+=40,o.headerInfo=c,o.ptr=l;var f,y;if(p>=3&&(y=p>=4?52:48,f=this.computeChecksumFletcher32(new Uint8Array(r,l-y,c.blobSize-14)),f!==c.checksum))throw"Checksum failed.";return!0},checkMinMaxRanges:function(r,o){var l=o.headerInfo,u=this.getDataTypeArray(l.imageType),c=l.numDims*this.getDataTypeSize(l.imageType),d=this.readSubArray(r,o.ptr,u,c),p=this.readSubArray(r,o.ptr+c,u,c);o.ptr+=2*c;var f,y=!0;for(f=0;f<l.numDims;f++)if(d[f]!==p[f]){y=!1;break}return l.minValues=d,l.maxValues=p,y},readSubArray:function(r,o,l,u){var c;if(l===Uint8Array)c=new Uint8Array(r,o,u);else{var d=new ArrayBuffer(u),p=new Uint8Array(d);p.set(new Uint8Array(r,o,u)),c=new l(d)}return c},readMask:function(r,o){var l=o.ptr,u=o.headerInfo,c=u.width*u.height,d=u.numValidPixel,p=new DataView(r,l,4),f={};if(f.numBytes=p.getUint32(0,!0),l+=4,(d===0||c===d)&&f.numBytes!==0)throw"invalid mask";var y,v;if(d===0)y=new Uint8Array(Math.ceil(c/8)),f.bitset=y,v=new Uint8Array(c),o.pixels.resultMask=v,l+=f.numBytes;else if(f.numBytes>0){y=new Uint8Array(Math.ceil(c/8)),p=new DataView(r,l,f.numBytes);var _=p.getInt16(0,!0),S=2,x=0,P=0;do{if(_>0)for(;_--;)y[x++]=p.getUint8(S++);else for(P=p.getUint8(S++),_=-_;_--;)y[x++]=P;_=p.getInt16(S,!0),S+=2}while(S<f.numBytes);if(_!==-32768||x<y.length)throw"Unexpected end of mask RLE encoding";v=new Uint8Array(c);var L=0,T=0;for(T=0;T<c;T++)T&7?(L=y[T>>3],L<<=T&7):L=y[T>>3],L&128&&(v[T]=1);o.pixels.resultMask=v,f.bitset=y,l+=f.numBytes}return o.ptr=l,o.mask=f,!0},readDataOneSweep:function(r,o,l,u){var c=o.ptr,d=o.headerInfo,p=d.numDims,f=d.width*d.height,y=d.imageType,v=d.numValidPixel*e.getDataTypeSize(y)*p,_,S=o.pixels.resultMask;if(l===Uint8Array)_=new Uint8Array(r,c,v);else{var x=new ArrayBuffer(v),P=new Uint8Array(x);P.set(new Uint8Array(r,c,v)),_=new l(x)}if(_.length===f*p)u?o.pixels.resultPixels=e.swapDimensionOrder(_,f,p,l,!0):o.pixels.resultPixels=_;else{o.pixels.resultPixels=new l(f*p);var L=0,T=0,W=0,K=0;if(p>1){if(u){for(T=0;T<f;T++)if(S[T])for(K=T,W=0;W<p;W++,K+=f)o.pixels.resultPixels[K]=_[L++]}else for(T=0;T<f;T++)if(S[T])for(K=T*p,W=0;W<p;W++)o.pixels.resultPixels[K+W]=_[L++]}else for(T=0;T<f;T++)S[T]&&(o.pixels.resultPixels[T]=_[L++])}return c+=v,o.ptr=c,!0},readHuffmanTree:function(r,o){var l=this.HUFFMAN_LUT_BITS_MAX,u=new DataView(r,o.ptr,16);o.ptr+=16;var c=u.getInt32(0,!0);if(c<2)throw"unsupported Huffman version";var d=u.getInt32(4,!0),p=u.getInt32(8,!0),f=u.getInt32(12,!0);if(p>=f)return!1;var y=new Uint32Array(f-p);e.decodeBits(r,o,y);var v=[],_,S,x,P;for(_=p;_<f;_++)S=_-(_<d?0:d),v[S]={first:y[_-p],second:null};var L=r.byteLength-o.ptr,T=Math.ceil(L/4),W=new ArrayBuffer(T*4),K=new Uint8Array(W);K.set(new Uint8Array(r,o.ptr,L));var O=new Uint32Array(W),D=0,V,R=0;for(V=O[0],_=p;_<f;_++)S=_-(_<d?0:d),P=v[S].first,P>0&&(v[S].second=V<<D>>>32-P,32-D>=P?(D+=P,D===32&&(D=0,R++,V=O[R])):(D+=P-32,R++,V=O[R],v[S].second|=V>>>32-D));var C=0,X=0,Y=new t;for(_=0;_<v.length;_++)v[_]!==void 0&&(C=Math.max(C,v[_].first));C>=l?X=l:X=C;var Q=[],j,H,J,ie,re,le;for(_=p;_<f;_++)if(S=_-(_<d?0:d),P=v[S].first,P>0)if(j=[P,S],P<=X)for(H=v[S].second<<X-P,J=1<<X-P,x=0;x<J;x++)Q[H|x]=j;else for(H=v[S].second,le=Y,ie=P-1;ie>=0;ie--)re=H>>>ie&1,re?(le.right||(le.right=new t),le=le.right):(le.left||(le.left=new t),le=le.left),ie===0&&!le.val&&(le.val=j[1]);return{decodeLut:Q,numBitsLUTQick:X,numBitsLUT:C,tree:Y,stuffedData:O,srcPtr:R,bitPos:D}},readHuffman:function(r,o,l,u){var c=o.headerInfo,d=c.numDims,p=o.headerInfo.height,f=o.headerInfo.width,y=f*p,v=this.readHuffmanTree(r,o),_=v.decodeLut,S=v.tree,x=v.stuffedData,P=v.srcPtr,L=v.bitPos,T=v.numBitsLUTQick,W=v.numBitsLUT,K=o.headerInfo.imageType===0?128:0,O,D,V,R=o.pixels.resultMask,C,X,Y,Q,j,H,J,ie=0;L>0&&(P++,L=0);var re=x[P],le=o.encodeMode===1,de=new l(y*d),ge=de,fe;if(d<2||le){for(fe=0;fe<d;fe++)if(d>1&&(ge=new l(de.buffer,y*fe,y),ie=0),o.headerInfo.numValidPixel===f*p)for(H=0,Q=0;Q<p;Q++)for(j=0;j<f;j++,H++){if(D=0,C=re<<L>>>32-T,X=C,32-L<T&&(C|=x[P+1]>>>64-L-T,X=C),_[X])D=_[X][1],L+=_[X][0];else for(C=re<<L>>>32-W,X=C,32-L<W&&(C|=x[P+1]>>>64-L-W,X=C),O=S,J=0;J<W;J++)if(Y=C>>>W-J-1&1,O=Y?O.right:O.left,!(O.left||O.right)){D=O.val,L=L+J+1;break}L>=32&&(L-=32,P++,re=x[P]),V=D-K,le?(j>0?V+=ie:Q>0?V+=ge[H-f]:V+=ie,V&=255,ge[H]=V,ie=V):ge[H]=V}else for(H=0,Q=0;Q<p;Q++)for(j=0;j<f;j++,H++)if(R[H]){if(D=0,C=re<<L>>>32-T,X=C,32-L<T&&(C|=x[P+1]>>>64-L-T,X=C),_[X])D=_[X][1],L+=_[X][0];else for(C=re<<L>>>32-W,X=C,32-L<W&&(C|=x[P+1]>>>64-L-W,X=C),O=S,J=0;J<W;J++)if(Y=C>>>W-J-1&1,O=Y?O.right:O.left,!(O.left||O.right)){D=O.val,L=L+J+1;break}L>=32&&(L-=32,P++,re=x[P]),V=D-K,le?(j>0&&R[H-1]?V+=ie:Q>0&&R[H-f]?V+=ge[H-f]:V+=ie,V&=255,ge[H]=V,ie=V):ge[H]=V}}else for(H=0,Q=0;Q<p;Q++)for(j=0;j<f;j++)if(H=Q*f+j,!R||R[H])for(fe=0;fe<d;fe++,H+=y){if(D=0,C=re<<L>>>32-T,X=C,32-L<T&&(C|=x[P+1]>>>64-L-T,X=C),_[X])D=_[X][1],L+=_[X][0];else for(C=re<<L>>>32-W,X=C,32-L<W&&(C|=x[P+1]>>>64-L-W,X=C),O=S,J=0;J<W;J++)if(Y=C>>>W-J-1&1,O=Y?O.right:O.left,!(O.left||O.right)){D=O.val,L=L+J+1;break}L>=32&&(L-=32,P++,re=x[P]),V=D-K,ge[H]=V}o.ptr=o.ptr+(P+1)*4+(L>0?4:0),o.pixels.resultPixels=de,d>1&&!u&&(o.pixels.resultPixels=e.swapDimensionOrder(de,y,d,l))},decodeBits:function(r,o,l,u,c){{var d=o.headerInfo,p=d.fileVersion,f=0,y=r.byteLength-o.ptr>=5?5:r.byteLength-o.ptr,v=new DataView(r,o.ptr,y),_=v.getUint8(0);f++;var S=_>>6,x=S===0?4:3-S,P=(_&32)>0,L=_&31,T=0;if(x===1)T=v.getUint8(f),f++;else if(x===2)T=v.getUint16(f,!0),f+=2;else if(x===4)T=v.getUint32(f,!0),f+=4;else throw"Invalid valid pixel count type";var W=2*d.maxZError,K,O,D,V,R,C,X,Y,Q,j=d.numDims>1?d.maxValues[c]:d.zMax;if(P){for(o.counter.lut++,Y=v.getUint8(f),f++,V=Math.ceil((Y-1)*L/8),R=Math.ceil(V/4),O=new ArrayBuffer(R*4),D=new Uint8Array(O),o.ptr+=f,D.set(new Uint8Array(r,o.ptr,V)),X=new Uint32Array(O),o.ptr+=V,Q=0;Y-1>>>Q;)Q++;V=Math.ceil(T*Q/8),R=Math.ceil(V/4),O=new ArrayBuffer(R*4),D=new Uint8Array(O),D.set(new Uint8Array(r,o.ptr,V)),K=new Uint32Array(O),o.ptr+=V,p>=3?C=i.unstuffLUT2(X,L,Y-1,u,W,j):C=i.unstuffLUT(X,L,Y-1,u,W,j),p>=3?i.unstuff2(K,l,Q,T,C):i.unstuff(K,l,Q,T,C)}else o.counter.bitstuffer++,Q=L,o.ptr+=f,Q>0&&(V=Math.ceil(T*Q/8),R=Math.ceil(V/4),O=new ArrayBuffer(R*4),D=new Uint8Array(O),D.set(new Uint8Array(r,o.ptr,V)),K=new Uint32Array(O),o.ptr+=V,p>=3?u==null?i.originalUnstuff2(K,l,Q,T):i.unstuff2(K,l,Q,T,!1,u,W,j):u==null?i.originalUnstuff(K,l,Q,T):i.unstuff(K,l,Q,T,!1,u,W,j))}},readTiles:function(r,o,l,u){var c=o.headerInfo,d=c.width,p=c.height,f=d*p,y=c.microBlockSize,v=c.imageType,_=e.getDataTypeSize(v),S=Math.ceil(d/y),x=Math.ceil(p/y);o.pixels.numBlocksY=x,o.pixels.numBlocksX=S,o.pixels.ptr=0;var P=0,L=0,T=0,W=0,K=0,O=0,D=0,V=0,R=0,C=0,X=0,Y=0,Q=0,j=0,H=0,J=0,ie,re,le,de,ge,fe,Me=new l(y*y),nt=p%y||y,rt=d%y||y,ut,Je,Ue=c.numDims,Ye,it=o.pixels.resultMask,Xe=o.pixels.resultPixels,Tt=c.fileVersion,Dt=Tt>=5?14:15,Te,st=c.zMax,ht;for(T=0;T<x;T++)for(K=T!==x-1?y:nt,W=0;W<S;W++)for(O=W!==S-1?y:rt,X=T*d*y+W*y,Y=d-O,Ye=0;Ye<Ue;Ye++){if(Ue>1?(ht=Xe,X=T*d*y+W*y,Xe=new l(o.pixels.resultPixels.buffer,f*Ye*_,f),st=c.maxValues[Ye]):ht=null,D=r.byteLength-o.ptr,ie=new DataView(r,o.ptr,Math.min(10,D)),re={},J=0,V=ie.getUint8(0),J++,Te=c.fileVersion>=5?V&4:0,R=V>>6&255,C=V>>2&Dt,C!==(W*y>>3&Dt)||Te&&Ye===0)throw"integrity issue";if(fe=V&3,fe>3)throw o.ptr+=J,"Invalid block encoding ("+fe+")";if(fe===2){if(Te)if(it)for(P=0;P<K;P++)for(L=0;L<O;L++)it[X]&&(Xe[X]=ht[X]),X++;else for(P=0;P<K;P++)for(L=0;L<O;L++)Xe[X]=ht[X],X++;o.counter.constant++,o.ptr+=J;continue}else if(fe===0){if(Te)throw"integrity issue";if(o.counter.uncompressed++,o.ptr+=J,Q=K*O*_,j=r.byteLength-o.ptr,Q=Q<j?Q:j,le=new ArrayBuffer(Q%_===0?Q:Q+_-Q%_),de=new Uint8Array(le),de.set(new Uint8Array(r,o.ptr,Q)),ge=new l(le),H=0,it)for(P=0;P<K;P++){for(L=0;L<O;L++)it[X]&&(Xe[X]=ge[H++]),X++;X+=Y}else for(P=0;P<K;P++){for(L=0;L<O;L++)Xe[X++]=ge[H++];X+=Y}o.ptr+=H*_}else if(ut=e.getDataTypeUsed(Te&&v<6?4:v,R),Je=e.getOnePixel(re,J,ut,ie),J+=e.getDataTypeSize(ut),fe===3)if(o.ptr+=J,o.counter.constantoffset++,it)for(P=0;P<K;P++){for(L=0;L<O;L++)it[X]&&(Xe[X]=Te?Math.min(st,ht[X]+Je):Je),X++;X+=Y}else for(P=0;P<K;P++){for(L=0;L<O;L++)Xe[X]=Te?Math.min(st,ht[X]+Je):Je,X++;X+=Y}else if(o.ptr+=J,e.decodeBits(r,o,Me,Je,Ye),J=0,Te)if(it)for(P=0;P<K;P++){for(L=0;L<O;L++)it[X]&&(Xe[X]=Me[J++]+ht[X]),X++;X+=Y}else for(P=0;P<K;P++){for(L=0;L<O;L++)Xe[X]=Me[J++]+ht[X],X++;X+=Y}else if(it)for(P=0;P<K;P++){for(L=0;L<O;L++)it[X]&&(Xe[X]=Me[J++]),X++;X+=Y}else for(P=0;P<K;P++){for(L=0;L<O;L++)Xe[X++]=Me[J++];X+=Y}}Ue>1&&!u&&(o.pixels.resultPixels=e.swapDimensionOrder(o.pixels.resultPixels,f,Ue,l))},formatFileInfo:function(r){return{fileIdentifierString:r.headerInfo.fileIdentifierString,fileVersion:r.headerInfo.fileVersion,imageType:r.headerInfo.imageType,height:r.headerInfo.height,width:r.headerInfo.width,numValidPixel:r.headerInfo.numValidPixel,microBlockSize:r.headerInfo.microBlockSize,blobSize:r.headerInfo.blobSize,maxZError:r.headerInfo.maxZError,pixelType:e.getPixelType(r.headerInfo.imageType),eofOffset:r.eofOffset,mask:r.mask?{numBytes:r.mask.numBytes}:null,pixels:{numBlocksX:r.pixels.numBlocksX,numBlocksY:r.pixels.numBlocksY,maxValue:r.headerInfo.zMax,minValue:r.headerInfo.zMin,noDataValue:r.noDataValue}}},constructConstantSurface:function(r,o){var l=r.headerInfo.zMax,u=r.headerInfo.zMin,c=r.headerInfo.maxValues,d=r.headerInfo.numDims,p=r.headerInfo.height*r.headerInfo.width,f=0,y=0,v=0,_=r.pixels.resultMask,S=r.pixels.resultPixels;if(_)if(d>1){if(o)for(f=0;f<d;f++)for(v=f*p,l=c[f],y=0;y<p;y++)_[y]&&(S[v+y]=l);else for(y=0;y<p;y++)if(_[y])for(v=y*d,f=0;f<d;f++)S[v+d]=c[f]}else for(y=0;y<p;y++)_[y]&&(S[y]=l);else if(d>1&&u!==l)if(o)for(f=0;f<d;f++)for(v=f*p,l=c[f],y=0;y<p;y++)S[v+y]=l;else for(y=0;y<p;y++)for(v=y*d,f=0;f<d;f++)S[v+f]=c[f];else for(y=0;y<p*d;y++)S[y]=l},getDataTypeArray:function(r){var o;switch(r){case 0:o=Int8Array;break;case 1:o=Uint8Array;break;case 2:o=Int16Array;break;case 3:o=Uint16Array;break;case 4:o=Int32Array;break;case 5:o=Uint32Array;break;case 6:o=Float32Array;break;case 7:o=Float64Array;break;default:o=Float32Array}return o},getPixelType:function(r){var o;switch(r){case 0:o="S8";break;case 1:o="U8";break;case 2:o="S16";break;case 3:o="U16";break;case 4:o="S32";break;case 5:o="U32";break;case 6:o="F32";break;case 7:o="F64";break;default:o="F32"}return o},isValidPixelValue:function(r,o){if(o==null)return!1;var l;switch(r){case 0:l=o>=-128&&o<=127;break;case 1:l=o>=0&&o<=255;break;case 2:l=o>=-32768&&o<=32767;break;case 3:l=o>=0&&o<=65536;break;case 4:l=o>=-2147483648&&o<=2147483647;break;case 5:l=o>=0&&o<=4294967296;break;case 6:l=o>=-34027999387901484e22&&o<=34027999387901484e22;break;case 7:l=o>=-17976931348623157e292&&o<=17976931348623157e292;break;default:l=!1}return l},getDataTypeSize:function(r){var o=0;switch(r){case 0:case 1:o=1;break;case 2:case 3:o=2;break;case 4:case 5:case 6:o=4;break;case 7:o=8;break;default:o=r}return o},getDataTypeUsed:function(r,o){var l=r;switch(r){case 2:case 4:l=r-o;break;case 3:case 5:l=r-2*o;break;case 6:o===0?l=r:o===1?l=2:l=1;break;case 7:o===0?l=r:l=r-2*o+1;break;default:l=r;break}return l},getOnePixel:function(r,o,l,u){var c=0;switch(l){case 0:c=u.getInt8(o);break;case 1:c=u.getUint8(o);break;case 2:c=u.getInt16(o,!0);break;case 3:c=u.getUint16(o,!0);break;case 4:c=u.getInt32(o,!0);break;case 5:c=u.getUInt32(o,!0);break;case 6:c=u.getFloat32(o,!0);break;case 7:c=u.getFloat64(o,!0);break;default:throw"the decoder does not understand this pixel type"}return c},swapDimensionOrder:function(r,o,l,u,c){var d=0,p=0,f=0,y=0,v=r;if(l>1)if(v=new u(o*l),c)for(d=0;d<o;d++)for(y=d,f=0;f<l;f++,y+=o)v[y]=r[p++];else for(d=0;d<o;d++)for(y=d,f=0;f<l;f++,y+=o)v[p++]=r[y];return v}},t=function(r,o,l){this.val=r,this.left=o,this.right=l},n={decode:function(r,o){o=o||{};var l=o.noDataValue,u=0,c={};if(c.ptr=o.inputOffset||0,c.pixels={},!!e.readHeaderInfo(r,c)){var d=c.headerInfo,p=d.fileVersion,f=e.getDataTypeArray(d.imageType);if(p>5)throw"unsupported lerc version 2."+p;e.readMask(r,c),d.numValidPixel!==d.width*d.height&&!c.pixels.resultMask&&(c.pixels.resultMask=o.maskData);var y=d.width*d.height;c.pixels.resultPixels=new f(y*d.numDims),c.counter={onesweep:0,uncompressed:0,lut:0,bitstuffer:0,constant:0,constantoffset:0};var v=!o.returnPixelInterleavedDims;if(d.numValidPixel!==0)if(d.zMax===d.zMin)e.constructConstantSurface(c,v);else if(p>=4&&e.checkMinMaxRanges(r,c))e.constructConstantSurface(c,v);else{var _=new DataView(r,c.ptr,2),S=_.getUint8(0);if(c.ptr++,S)e.readDataOneSweep(r,c,f,v);else if(p>1&&d.imageType<=1&&Math.abs(d.maxZError-.5)<1e-5){var x=_.getUint8(1);if(c.ptr++,c.encodeMode=x,x>2||p<4&&x>1)throw"Invalid Huffman flag "+x;x?e.readHuffman(r,c,f,v):e.readTiles(r,c,f,v)}else e.readTiles(r,c,f,v)}c.eofOffset=c.ptr;var P;o.inputOffset?(P=c.headerInfo.blobSize+o.inputOffset-c.ptr,Math.abs(P)>=1&&(c.eofOffset=o.inputOffset+c.headerInfo.blobSize)):(P=c.headerInfo.blobSize-c.ptr,Math.abs(P)>=1&&(c.eofOffset=c.headerInfo.blobSize));var L={width:d.width,height:d.height,pixelData:c.pixels.resultPixels,minValue:d.zMin,maxValue:d.zMax,validPixelCount:d.numValidPixel,dimCount:d.numDims,dimStats:{minValues:d.minValues,maxValues:d.maxValues},maskData:c.pixels.resultMask};if(c.pixels.resultMask&&e.isValidPixelValue(d.imageType,l)){var T=c.pixels.resultMask;for(u=0;u<y;u++)T[u]||(L.pixelData[u]=l);L.noDataValue=l}return c.noDataValue=l,o.returnFileInfo&&(L.fileInfo=e.formatFileInfo(c)),L}},getBandCount:function(r){var o=0,l=0,u={};for(u.ptr=0,u.pixels={};l<r.byteLength-58;)e.readHeaderInfo(r,u),l+=u.headerInfo.blobSize,o++,u.ptr=l;return o}};return n}();var uy=function(){var i=new ArrayBuffer(4),e=new Uint8Array(i),t=new Uint32Array(i);return t[0]=1,e[0]===1}(),hy={decode:function(i,e){if(!uy)throw"Big endian system is not supported.";e=e||{};var t=e.inputOffset||0,n=new Uint8Array(i,t,10),r=String.fromCharCode.apply(null,n),o,l;if(r.trim()==="CntZImage")o=ly,l=1;else if(r.substring(0,5)==="Lerc2")o=cy,l=2;else throw"Unexpected file identifier string: "+r;for(var u=0,c=i.byteLength-10,d,p=[],f,y,v={width:0,height:0,pixels:[],pixelType:e.pixelType,mask:null,statistics:[]},_=0;t<c;){var S=o.decode(i,{inputOffset:t,encodedMaskData:d,maskData:y,returnMask:u===0,returnEncodedMask:u===0,returnFileInfo:!0,returnPixelInterleavedDims:e.returnPixelInterleavedDims,pixelType:e.pixelType||null,noDataValue:e.noDataValue||null});t=S.fileInfo.eofOffset,y=S.maskData,u===0&&(d=S.encodedMaskData,v.width=S.width,v.height=S.height,v.dimCount=S.dimCount||1,v.pixelType=S.pixelType||S.fileInfo.pixelType,v.mask=y),l>1&&(y&&p.push(y),S.fileInfo.mask&&S.fileInfo.mask.numBytes>0&&_++),u++,v.pixels.push(S.pixelData),v.statistics.push({minValue:S.minValue,maxValue:S.maxValue,noDataValue:S.noDataValue,dimStats:S.dimStats})}var x,P,L;if(l>1&&_>1){for(L=v.width*v.height,v.bandMasks=p,y=new Uint8Array(L),y.set(p[0]),x=1;x<p.length;x++)for(f=p[x],P=0;P<L;P++)y[P]=y[P]&f[P];v.maskData=y}return v}};const dy={0:7e3,1:6e3,2:5e3,3:4e3,4:3e3,5:2500,6:2e3,7:1500,8:800,9:500,10:200,11:100,12:40,13:12,14:5,15:2,16:1,17:.5,18:.2,19:.1,20:.01};function fy(i){const{height:e,width:t,pixels:n}=hy.decode(i),r=new Float32Array(e*t);for(let o=0;o<r.length;o++)r[o]=n[0][o];return{array:r,width:t,height:e}}function py(i,e,t){let n=fy(i);t[2]-t[0]<1&&(n=my(n,t));const{array:r,width:o}=n,u=new Dc(o).createTile(r),c=dy[e]||0;return u.getGeometryData(c)}function my(i,e){function t(u,c,d,p,f,y,v,_){const S=new Float32Array(f*y);for(let P=0;P<y;P++)for(let L=0;L<f;L++){const T=(P+p)*c+(L+d),W=P*f+L;S[W]=u[T]}const x=new Float32Array(_*v);for(let P=0;P<_;P++)for(let L=0;L<v;L++){const T=P*_+L,W=Math.round(L*y/_),O=Math.round(P*f/v)*f+W;x[T]=S[O]}return x}const n=gy(e,i.width),r=n.sw+1,o=n.sh+1;return{array:t(i.array,i.width,n.sx,n.sy,n.sw,n.sh,r,o),width:r,height:o}}function gy(i,e){const t=Math.floor(i[0]*e),n=Math.floor(i[1]*e),r=Math.floor((i[2]-i[0])*e),o=Math.floor((i[3]-i[1])*e);return{sx:t,sy:n,sw:r,sh:o}}var yy=Object.defineProperty,vy=(i,e,t)=>e in i?yy(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,cs=(i,e,t)=>vy(i,typeof e!="symbol"?e+"":e,t);const wy=10;class _y extends Jo{constructor(){super(),cs(this,"info",{version:"0.10.0",description:"Tile LERC terrain loader. It can load ArcGis-lerc format terrain data."}),cs(this,"dataType","lerc"),cs(this,"fileLoader",new m.FileLoader(Fe.manager)),cs(this,"_workerPool",new Ao(0)),this.fileLoader.setResponseType("arraybuffer"),this._workerPool.setWorkerCreator(()=>new ay)}async doLoad(e,t){this._workerPool.pool===0&&this._workerPool.setWorkerLimit(wy);const{z:n,bounds:r}=t,o=await this.fileLoader.loadAsync(e).catch(()=>new Float32Array(256*256)),l=py(o,n,r);return new Vr().setData(l)}}qo(new _y);const jc="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGModCl7cmV0dXJuIGEodC5kYXRhKX1mdW5jdGlvbiBhKHQpe2Z1bmN0aW9uIG4oZSx1KXtjb25zdCByPXUqNCxbaSxmLGcsbF09ZS5zbGljZShyLHIrNCk7cmV0dXJuIGw9PT0wPzA6LTFlNCsoaTw8MTZ8Zjw8OHxnKSouMX1jb25zdCBvPXQubGVuZ3RoPj4+MixzPW5ldyBGbG9hdDMyQXJyYXkobyk7Zm9yKGxldCBlPTA7ZTxvO2UrKylzW2VdPW4odCxlKTtyZXR1cm4gc31zZWxmLm9ubWVzc2FnZT10PT57Y29uc3Qgbj1jKHQuZGF0YS5pbWdEYXRhKTtzZWxmLnBvc3RNZXNzYWdlKG4pfX0pKCk7Cg==",by=i=>Uint8Array.from(atob(i),e=>e.charCodeAt(0)),Jc=typeof self<"u"&&self.Blob&&new Blob([by(jc)],{type:"text/javascript;charset=utf-8"});function xy(i){let e;try{if(e=Jc&&(self.URL||self.webkitURL).createObjectURL(Jc),!e)throw"";const t=new Worker(e,{name:i?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;base64,"+jc,{name:i?.name})}finally{e&&(self.URL||self.webkitURL).revokeObjectURL(e)}}var Ly=Object.defineProperty,My=(i,e,t)=>e in i?Ly(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,us=(i,e,t)=>My(i,typeof e!="symbol"?e+"":e,t);const Sy=10;class Py extends Jo{constructor(){super(),us(this,"info",{version:"0.10.0",description:"Mapbox-RGB terrain loader, It can load Mapbox-RGB terrain data."}),us(this,"dataType","terrain-rgb"),us(this,"imageLoader",new m.ImageLoader(Fe.manager)),us(this,"_workerPool",new Ao(0)),this._workerPool.setWorkerCreator(()=>new xy)}async doLoad(e,t){const n=await this.imageLoader.loadAsync(e).catch(c=>new Image),r=m.MathUtils.clamp((t.z+2)*3,2,64),o=Ty(n,t.bounds,r);let l;this._workerPool.pool===0&&this._workerPool.setWorkerLimit(Sy),l=(await this._workerPool.postMessage({imgData:o},[o.data.buffer])).data;const u=new Vr;return u.setData(l),u}}function Ty(i,e,t){const n=No(e,i.width);t=Math.min(t,n.sw);const o=new OffscreenCanvas(t,t).getContext("2d");return o.imageSmoothingEnabled=!1,o.drawImage(i,n.sx,n.sy,n.sw,n.sh,0,0,t,t),o.getImageData(0,0,t,t)}qo(new Py);function Rn(i,e){this.x=i,this.y=e}Rn.prototype={clone(){return new Rn(this.x,this.y)},add(i){return this.clone()._add(i)},sub(i){return this.clone()._sub(i)},multByPoint(i){return this.clone()._multByPoint(i)},divByPoint(i){return this.clone()._divByPoint(i)},mult(i){return this.clone()._mult(i)},div(i){return this.clone()._div(i)},rotate(i){return this.clone()._rotate(i)},rotateAround(i,e){return this.clone()._rotateAround(i,e)},matMult(i){return this.clone()._matMult(i)},unit(){return this.clone()._unit()},perp(){return this.clone()._perp()},round(){return this.clone()._round()},mag(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals(i){return this.x===i.x&&this.y===i.y},dist(i){return Math.sqrt(this.distSqr(i))},distSqr(i){const e=i.x-this.x,t=i.y-this.y;return e*e+t*t},angle(){return Math.atan2(this.y,this.x)},angleTo(i){return Math.atan2(this.y-i.y,this.x-i.x)},angleWith(i){return this.angleWithSep(i.x,i.y)},angleWithSep(i,e){return Math.atan2(this.x*e-this.y*i,this.x*i+this.y*e)},_matMult(i){const e=i[0]*this.x+i[1]*this.y,t=i[2]*this.x+i[3]*this.y;return this.x=e,this.y=t,this},_add(i){return this.x+=i.x,this.y+=i.y,this},_sub(i){return this.x-=i.x,this.y-=i.y,this},_mult(i){return this.x*=i,this.y*=i,this},_div(i){return this.x/=i,this.y/=i,this},_multByPoint(i){return this.x*=i.x,this.y*=i.y,this},_divByPoint(i){return this.x/=i.x,this.y/=i.y,this},_unit(){return this._div(this.mag()),this},_perp(){const i=this.y;return this.y=this.x,this.x=-i,this},_rotate(i){const e=Math.cos(i),t=Math.sin(i),n=e*this.x-t*this.y,r=t*this.x+e*this.y;return this.x=n,this.y=r,this},_rotateAround(i,e){const t=Math.cos(i),n=Math.sin(i),r=e.x+t*(this.x-e.x)-n*(this.y-e.y),o=e.y+n*(this.x-e.x)+t*(this.y-e.y);return this.x=r,this.y=o,this},_round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},constructor:Rn},Rn.convert=function(i){if(i instanceof Rn)return i;if(Array.isArray(i))return new Rn(+i[0],+i[1]);if(i.x!==void 0&&i.y!==void 0)return new Rn(+i.x,+i.y);throw new Error("Expected [x, y] or {x, y} point format")};class Qc{constructor(e,t,n,r,o){this.properties={},this.extent=n,this.type=0,this.id=void 0,this._pbf=e,this._geometry=-1,this._keys=r,this._values=o,e.readFields(Zy,this,t)}loadGeometry(){const e=this._pbf;e.pos=this._geometry;const t=e.readVarint()+e.pos,n=[];let r,o=1,l=0,u=0,c=0;for(;e.pos<t;){if(l<=0){const d=e.readVarint();o=d&7,l=d>>3}if(l--,o===1||o===2)u+=e.readSVarint(),c+=e.readSVarint(),o===1&&(r&&n.push(r),r=[]),r&&r.push(new Rn(u,c));else if(o===7)r&&r.push(r[0].clone());else throw new Error(`unknown command ${o}`)}return r&&n.push(r),n}bbox(){const e=this._pbf;e.pos=this._geometry;const t=e.readVarint()+e.pos;let n=1,r=0,o=0,l=0,u=1/0,c=-1/0,d=1/0,p=-1/0;for(;e.pos<t;){if(r<=0){const f=e.readVarint();n=f&7,r=f>>3}if(r--,n===1||n===2)o+=e.readSVarint(),l+=e.readSVarint(),o<u&&(u=o),o>c&&(c=o),l<d&&(d=l),l>p&&(p=l);else if(n!==7)throw new Error(`unknown command ${n}`)}return[u,d,c,p]}toGeoJSON(e,t,n){const r=this.extent*Math.pow(2,n),o=this.extent*e,l=this.extent*t,u=this.loadGeometry();function c(y){return[(y.x+o)*360/r-180,360/Math.PI*Math.atan(Math.exp((1-(y.y+l)*2/r)*Math.PI))-90]}function d(y){return y.map(c)}let p;if(this.type===1){const y=[];for(const _ of u)y.push(_[0]);const v=d(y);p=y.length===1?{type:"Point",coordinates:v[0]}:{type:"MultiPoint",coordinates:v}}else if(this.type===2){const y=u.map(d);p=y.length===1?{type:"LineString",coordinates:y[0]}:{type:"MultiLineString",coordinates:y}}else if(this.type===3){const y=Wy(u),v=[];for(const _ of y)v.push(_.map(d));p=v.length===1?{type:"Polygon",coordinates:v[0]}:{type:"MultiPolygon",coordinates:v}}else throw new Error("unknown feature type");const f={type:"Feature",geometry:p,properties:this.properties};return this.id!=null&&(f.id=this.id),f}}Qc.types=["Unknown","Point","LineString","Polygon"];function Zy(i,e,t){i===1?e.id=t.readVarint():i===2?Gy(t,e):i===3?e.type=t.readVarint():i===4&&(e._geometry=t.pos)}function Gy(i,e){const t=i.readVarint()+i.pos;for(;i.pos<t;){const n=e._keys[i.readVarint()],r=e._values[i.readVarint()];e.properties[n]=r}}function Wy(i){const e=i.length;if(e<=1)return[i];const t=[];let n,r;for(let o=0;o<e;o++){const l=Cy(i[o]);l!==0&&(r===void 0&&(r=l<0),r===l<0?(n&&t.push(n),n=[i[o]]):n&&n.push(i[o]))}return n&&t.push(n),t}function Cy(i){let e=0;for(let t=0,n=i.length,r=n-1,o,l;t<n;r=t++)o=i[t],l=i[r],e+=(l.x-o.x)*(o.y+l.y);return e}let Iy=class{constructor(e,t){this.version=1,this.name="",this.extent=4096,this.length=0,this._pbf=e,this._keys=[],this._values=[],this._features=[],e.readFields(Vy,this,t),this.length=this._features.length}feature(e){if(e<0||e>=this._features.length)throw new Error("feature index out of bounds");this._pbf.pos=this._features[e];const t=this._pbf.readVarint()+this._pbf.pos;return new Qc(this._pbf,t,this.extent,this._keys,this._values)}};function Vy(i,e,t){i===15?e.version=t.readVarint():i===1?e.name=t.readString():i===5?e.extent=t.readVarint():i===2?e._features.push(t.pos):i===3?e._keys.push(t.readString()):i===4&&e._values.push(Ay(t))}function Ay(i){let e=null;const t=i.readVarint()+i.pos;for(;i.pos<t;){const n=i.readVarint()>>3;e=n===1?i.readString():n===2?i.readFloat():n===3?i.readDouble():n===4?i.readVarint64():n===5?i.readVarint():n===6?i.readSVarint():n===7?i.readBoolean():null}if(e==null)throw new Error("unknown feature value");return e}class Fy{constructor(e,t){this.layers=e.readFields(Xy,{},t)}}function Xy(i,e,t){if(i===3){const n=new Iy(t,t.readVarint()+t.pos);n.length&&(e[n.name]=n)}}const ea=65536*65536,Hc=1/ea,Oy=12,Ec=typeof TextDecoder>"u"?null:new TextDecoder("utf-8"),ta=0,hs=1,vi=2,ds=5;class zy{constructor(e=new Uint8Array(16)){this.buf=ArrayBuffer.isView(e)?e:new Uint8Array(e),this.dataView=new DataView(this.buf.buffer),this.pos=0,this.type=0,this.length=this.buf.length}readFields(e,t,n=this.length){for(;this.pos<n;){const r=this.readVarint(),o=r>>3,l=this.pos;this.type=r&7,e(o,t,this),this.pos===l&&this.skip(r)}return t}readMessage(e,t){return this.readFields(e,t,this.readVarint()+this.pos)}readFixed32(){const e=this.dataView.getUint32(this.pos,!0);return this.pos+=4,e}readSFixed32(){const e=this.dataView.getInt32(this.pos,!0);return this.pos+=4,e}readFixed64(){const e=this.dataView.getUint32(this.pos,!0)+this.dataView.getUint32(this.pos+4,!0)*ea;return this.pos+=8,e}readSFixed64(){const e=this.dataView.getUint32(this.pos,!0)+this.dataView.getInt32(this.pos+4,!0)*ea;return this.pos+=8,e}readFloat(){const e=this.dataView.getFloat32(this.pos,!0);return this.pos+=4,e}readDouble(){const e=this.dataView.getFloat64(this.pos,!0);return this.pos+=8,e}readVarint(e){const t=this.buf;let n,r;return r=t[this.pos++],n=r&127,r<128||(r=t[this.pos++],n|=(r&127)<<7,r<128)||(r=t[this.pos++],n|=(r&127)<<14,r<128)||(r=t[this.pos++],n|=(r&127)<<21,r<128)?n:(r=t[this.pos],n|=(r&15)<<28,Dy(n,e,this))}readVarint64(){return this.readVarint(!0)}readSVarint(){const e=this.readVarint();return e%2===1?(e+1)/-2:e/2}readBoolean(){return!!this.readVarint()}readString(){const e=this.readVarint()+this.pos,t=this.pos;return this.pos=e,e-t>=Oy&&Ec?Ec.decode(this.buf.subarray(t,e)):$y(this.buf,t,e)}readBytes(){const e=this.readVarint()+this.pos,t=this.buf.subarray(this.pos,e);return this.pos=e,t}readPackedVarint(e=[],t){const n=this.readPackedEnd();for(;this.pos<n;)e.push(this.readVarint(t));return e}readPackedSVarint(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readSVarint());return e}readPackedBoolean(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readBoolean());return e}readPackedFloat(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readFloat());return e}readPackedDouble(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readDouble());return e}readPackedFixed32(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readFixed32());return e}readPackedSFixed32(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readSFixed32());return e}readPackedFixed64(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readFixed64());return e}readPackedSFixed64(e=[]){const t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readSFixed64());return e}readPackedEnd(){return this.type===vi?this.readVarint()+this.pos:this.pos+1}skip(e){const t=e&7;if(t===ta)for(;this.buf[this.pos++]>127;);else if(t===vi)this.pos=this.readVarint()+this.pos;else if(t===ds)this.pos+=4;else if(t===hs)this.pos+=8;else throw new Error(`Unimplemented type: ${t}`)}writeTag(e,t){this.writeVarint(e<<3|t)}realloc(e){let t=this.length||16;for(;t<this.pos+e;)t*=2;if(t!==this.length){const n=new Uint8Array(t);n.set(this.buf),this.buf=n,this.dataView=new DataView(n.buffer),this.length=t}}finish(){return this.length=this.pos,this.pos=0,this.buf.subarray(0,this.length)}writeFixed32(e){this.realloc(4),this.dataView.setInt32(this.pos,e,!0),this.pos+=4}writeSFixed32(e){this.realloc(4),this.dataView.setInt32(this.pos,e,!0),this.pos+=4}writeFixed64(e){this.realloc(8),this.dataView.setInt32(this.pos,e&-1,!0),this.dataView.setInt32(this.pos+4,Math.floor(e*Hc),!0),this.pos+=8}writeSFixed64(e){this.realloc(8),this.dataView.setInt32(this.pos,e&-1,!0),this.dataView.setInt32(this.pos+4,Math.floor(e*Hc),!0),this.pos+=8}writeVarint(e){if(e=+e||0,e>268435455||e<0){Ky(e,this);return}this.realloc(4),this.buf[this.pos++]=e&127|(e>127?128:0),!(e<=127)&&(this.buf[this.pos++]=(e>>>=7)&127|(e>127?128:0),!(e<=127)&&(this.buf[this.pos++]=(e>>>=7)&127|(e>127?128:0),!(e<=127)&&(this.buf[this.pos++]=e>>>7&127)))}writeSVarint(e){this.writeVarint(e<0?-e*2-1:e*2)}writeBoolean(e){this.writeVarint(+e)}writeString(e){e=String(e),this.realloc(e.length*4),this.pos++;const t=this.pos;this.pos=qy(this.buf,e,this.pos);const n=this.pos-t;n>=128&&$c(t,n,this),this.pos=t-1,this.writeVarint(n),this.pos+=n}writeFloat(e){this.realloc(4),this.dataView.setFloat32(this.pos,e,!0),this.pos+=4}writeDouble(e){this.realloc(8),this.dataView.setFloat64(this.pos,e,!0),this.pos+=8}writeBytes(e){const t=e.length;this.writeVarint(t),this.realloc(t);for(let n=0;n<t;n++)this.buf[this.pos++]=e[n]}writeRawMessage(e,t){this.pos++;const n=this.pos;e(t,this);const r=this.pos-n;r>=128&&$c(n,r,this),this.pos=n-1,this.writeVarint(r),this.pos+=r}writeMessage(e,t,n){this.writeTag(e,vi),this.writeRawMessage(t,n)}writePackedVarint(e,t){t.length&&this.writeMessage(e,Ny,t)}writePackedSVarint(e,t){t.length&&this.writeMessage(e,Uy,t)}writePackedBoolean(e,t){t.length&&this.writeMessage(e,jy,t)}writePackedFloat(e,t){t.length&&this.writeMessage(e,Yy,t)}writePackedDouble(e,t){t.length&&this.writeMessage(e,By,t)}writePackedFixed32(e,t){t.length&&this.writeMessage(e,Jy,t)}writePackedSFixed32(e,t){t.length&&this.writeMessage(e,Qy,t)}writePackedFixed64(e,t){t.length&&this.writeMessage(e,Hy,t)}writePackedSFixed64(e,t){t.length&&this.writeMessage(e,Ey,t)}writeBytesField(e,t){this.writeTag(e,vi),this.writeBytes(t)}writeFixed32Field(e,t){this.writeTag(e,ds),this.writeFixed32(t)}writeSFixed32Field(e,t){this.writeTag(e,ds),this.writeSFixed32(t)}writeFixed64Field(e,t){this.writeTag(e,hs),this.writeFixed64(t)}writeSFixed64Field(e,t){this.writeTag(e,hs),this.writeSFixed64(t)}writeVarintField(e,t){this.writeTag(e,ta),this.writeVarint(t)}writeSVarintField(e,t){this.writeTag(e,ta),this.writeSVarint(t)}writeStringField(e,t){this.writeTag(e,vi),this.writeString(t)}writeFloatField(e,t){this.writeTag(e,ds),this.writeFloat(t)}writeDoubleField(e,t){this.writeTag(e,hs),this.writeDouble(t)}writeBooleanField(e,t){this.writeVarintField(e,+t)}}function Dy(i,e,t){const n=t.buf;let r,o;if(o=n[t.pos++],r=(o&112)>>4,o<128||(o=n[t.pos++],r|=(o&127)<<3,o<128)||(o=n[t.pos++],r|=(o&127)<<10,o<128)||(o=n[t.pos++],r|=(o&127)<<17,o<128)||(o=n[t.pos++],r|=(o&127)<<24,o<128)||(o=n[t.pos++],r|=(o&1)<<31,o<128))return Ar(i,r,e);throw new Error("Expected varint not more than 10 bytes")}function Ar(i,e,t){return t?e*4294967296+(i>>>0):(e>>>0)*4294967296+(i>>>0)}function Ky(i,e){let t,n;if(i>=0?(t=i%4294967296|0,n=i/4294967296|0):(t=~(-i%4294967296),n=~(-i/4294967296),t^4294967295?t=t+1|0:(t=0,n=n+1|0)),i>=18446744073709552e3||i<-18446744073709552e3)throw new Error("Given varint doesn't fit into 10 bytes");e.realloc(10),ky(t,n,e),Ry(n,e)}function ky(i,e,t){t.buf[t.pos++]=i&127|128,i>>>=7,t.buf[t.pos++]=i&127|128,i>>>=7,t.buf[t.pos++]=i&127|128,i>>>=7,t.buf[t.pos++]=i&127|128,i>>>=7,t.buf[t.pos]=i&127}function Ry(i,e){const t=(i&7)<<4;e.buf[e.pos++]|=t|((i>>>=3)?128:0),i&&(e.buf[e.pos++]=i&127|((i>>>=7)?128:0),i&&(e.buf[e.pos++]=i&127|((i>>>=7)?128:0),i&&(e.buf[e.pos++]=i&127|((i>>>=7)?128:0),i&&(e.buf[e.pos++]=i&127|((i>>>=7)?128:0),i&&(e.buf[e.pos++]=i&127)))))}function $c(i,e,t){const n=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(Math.LN2*7));t.realloc(n);for(let r=t.pos-1;r>=i;r--)t.buf[r+n]=t.buf[r]}function Ny(i,e){for(let t=0;t<i.length;t++)e.writeVarint(i[t])}function Uy(i,e){for(let t=0;t<i.length;t++)e.writeSVarint(i[t])}function Yy(i,e){for(let t=0;t<i.length;t++)e.writeFloat(i[t])}function By(i,e){for(let t=0;t<i.length;t++)e.writeDouble(i[t])}function jy(i,e){for(let t=0;t<i.length;t++)e.writeBoolean(i[t])}function Jy(i,e){for(let t=0;t<i.length;t++)e.writeFixed32(i[t])}function Qy(i,e){for(let t=0;t<i.length;t++)e.writeSFixed32(i[t])}function Hy(i,e){for(let t=0;t<i.length;t++)e.writeFixed64(i[t])}function Ey(i,e){for(let t=0;t<i.length;t++)e.writeSFixed64(i[t])}function $y(i,e,t){let n="",r=e;for(;r<t;){const o=i[r];let l=null,u=o>239?4:o>223?3:o>191?2:1;if(r+u>t)break;let c,d,p;u===1?o<128&&(l=o):u===2?(c=i[r+1],(c&192)===128&&(l=(o&31)<<6|c&63,l<=127&&(l=null))):u===3?(c=i[r+1],d=i[r+2],(c&192)===128&&(d&192)===128&&(l=(o&15)<<12|(c&63)<<6|d&63,(l<=2047||l>=55296&&l<=57343)&&(l=null))):u===4&&(c=i[r+1],d=i[r+2],p=i[r+3],(c&192)===128&&(d&192)===128&&(p&192)===128&&(l=(o&15)<<18|(c&63)<<12|(d&63)<<6|p&63,(l<=65535||l>=1114112)&&(l=null))),l===null?(l=65533,u=1):l>65535&&(l-=65536,n+=String.fromCharCode(l>>>10&1023|55296),l=56320|l&1023),n+=String.fromCharCode(l),r+=u}return n}function qy(i,e,t){for(let n=0,r,o;n<e.length;n++){if(r=e.charCodeAt(n),r>55295&&r<57344)if(o)if(r<56320){i[t++]=239,i[t++]=191,i[t++]=189,o=r;continue}else r=o-55296<<10|r-56320|65536,o=null;else{r>56319||n+1===e.length?(i[t++]=239,i[t++]=191,i[t++]=189):o=r;continue}else o&&(i[t++]=239,i[t++]=191,i[t++]=189,o=null);r<128?i[t++]=r:(r<2048?i[t++]=r>>6|192:(r<65536?i[t++]=r>>12|224:(i[t++]=r>>18|240,i[t++]=r>>12&63|128),i[t++]=r>>6&63|128),i[t++]=r&63|128)}return t}var ev=Object.defineProperty,tv=(i,e,t)=>e in i?ev(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,na=(i,e,t)=>tv(i,typeof e!="symbol"?e+"":e,t);class nv extends Ho{constructor(){super(),na(this,"dataType","mvt"),na(this,"_loader",new m.FileLoader(Fe.manager)),na(this,"_render",new kc),console.log("MVTLoader constructor"),this._loader.setResponseType("arraybuffer")}async doLoad(e,t){const n=await this._loader.loadAsync(e),r=new Fy(new zy(n)),o=this.drawTile(r,t.source.style,t.z);return console.log("drawTile",o),new m.CanvasTexture(o)}drawTile(e,t,n){const u=new OffscreenCanvas(256,256).getContext("2d");if(u){if(t)for(const c in t.layer){const d=t.layer[c];if(t&&(n<(d.minLevel??1)||n>(d.maxLevel??20)))continue;const p=e.layers[c];if(p){const f=256/p.extent;this._renderLayer(u,p,d,f)}}else for(const c in e.layers){const d=e.layers[c],p=256/d.extent;this._renderLayer(u,d,void 0,p)}return u.canvas}else throw new Error("Canvas context is not available")}_renderLayer(e,t,n,r=1){e.save();for(let o=0;o<t.length;o++){const l=t.feature(o);this._renderFeature(e,l,n,r)}return e.restore(),this}_renderFeature(e,t,n={},r=1){const o=[tt.Unknown,tt.Point,tt.Linestring,tt.Polygon][t.type],l={geometry:t.loadGeometry(),properties:t.properties};this._render.render(e,o,l,n,r)}_convertToGeoJSONFeature(e,t){const n=this._convertGeometryToGeoJSON(e.geometry,t);return n?{type:"Feature",geometry:n,properties:e.properties||{},id:e.id}:null}_convertGeometryToGeoJSON(e,t){switch(t){case tt.Point:return this._convertPointGeometry(e);case tt.Linestring:return this._convertLineGeometry(e);case tt.Polygon:return this._convertPolygonGeometry(e);default:return console.warn("未知的几何类型:",t),null}}_convertPointGeometry(e){const t=[];for(const n of e)for(const r of n)t.push([r.x,r.y]);return t.length===0?null:t.length===1?{type:"Point",coordinates:t[0]}:{type:"MultiPoint",coordinates:t}}_convertLineGeometry(e){const t=[];for(const n of e){const r=[];for(const o of n)r.push([o.x,o.y]);r.length>=2&&t.push(r)}return t.length===0?null:t.length===1?{type:"LineString",coordinates:t[0]}:{type:"MultiLineString",coordinates:t}}_convertPolygonGeometry(e){const t=[];let n=[];for(const r of e){const o=[];for(const l of r)o.push([l.x,l.y]);o.length>=4&&(this._isRingClockwise(o)||n.length===0?(n.length>0&&t.push(n),n=[o]):n.push(o))}return n.length>0&&t.push(n),t.length===0?null:t.length===1?{type:"Polygon",coordinates:t[0]}:{type:"MultiPolygon",coordinates:t}}_isRingClockwise(e){let t=0;for(let n=0;n<e.length-1;n++){const[r,o]=e[n],[l,u]=e[n+1];t+=(l-r)*(u+o)}return t>0}convertVectorTileToGeoJSON(e){const t=[];for(const n in e.layers){const r=e.layers[n];for(let o=0;o<r.length;o++){const l=r.feature(o),u=[tt.Unknown,tt.Point,tt.Linestring,tt.Polygon][l.type],c={geometry:l.loadGeometry(),properties:l.properties},d=this._convertToGeoJSONFeature(c,u);d&&(d.properties._layer=n,t.push(d))}}return{type:"FeatureCollection",features:t}}}$o(new nv);const qc="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0IF89MjMyODMwNjQzNjUzODY5NjNlLTI2LG09MTIsUD10eXBlb2YgVGV4dERlY29kZXI+InUiP251bGw6bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpLGc9MCx5PTEsRj0yLHA9NTtjbGFzcyBNe2NvbnN0cnVjdG9yKHQ9bmV3IFVpbnQ4QXJyYXkoMTYpKXt0aGlzLmJ1Zj1BcnJheUJ1ZmZlci5pc1ZpZXcodCk/dDpuZXcgVWludDhBcnJheSh0KSx0aGlzLmRhdGFWaWV3PW5ldyBEYXRhVmlldyh0aGlzLmJ1Zi5idWZmZXIpLHRoaXMucG9zPTAsdGhpcy50eXBlPTAsdGhpcy5sZW5ndGg9dGhpcy5idWYubGVuZ3RofXJlYWRGaWVsZHModCxlLHI9dGhpcy5sZW5ndGgpe2Zvcig7dGhpcy5wb3M8cjspe2NvbnN0IHM9dGhpcy5yZWFkVmFyaW50KCksbj1zPj4zLG89dGhpcy5wb3M7dGhpcy50eXBlPXMmNyx0KG4sZSx0aGlzKSx0aGlzLnBvcz09PW8mJnRoaXMuc2tpcChzKX1yZXR1cm4gZX1yZWFkTWVzc2FnZSh0LGUpe3JldHVybiB0aGlzLnJlYWRGaWVsZHModCxlLHRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zKX1yZWFkRml4ZWQzMigpe2NvbnN0IHQ9dGhpcy5kYXRhVmlldy5nZXRVaW50MzIodGhpcy5wb3MsITApO3JldHVybiB0aGlzLnBvcys9NCx0fXJlYWRTRml4ZWQzMigpe2NvbnN0IHQ9dGhpcy5kYXRhVmlldy5nZXRJbnQzMih0aGlzLnBvcywhMCk7cmV0dXJuIHRoaXMucG9zKz00LHR9cmVhZEZpeGVkNjQoKXtjb25zdCB0PXRoaXMuZGF0YVZpZXcuZ2V0VWludDMyKHRoaXMucG9zLCEwKSt0aGlzLmRhdGFWaWV3LmdldFVpbnQzMih0aGlzLnBvcys0LCEwKSo0Mjk0OTY3Mjk2O3JldHVybiB0aGlzLnBvcys9OCx0fXJlYWRTRml4ZWQ2NCgpe2NvbnN0IHQ9dGhpcy5kYXRhVmlldy5nZXRVaW50MzIodGhpcy5wb3MsITApK3RoaXMuZGF0YVZpZXcuZ2V0SW50MzIodGhpcy5wb3MrNCwhMCkqNDI5NDk2NzI5NjtyZXR1cm4gdGhpcy5wb3MrPTgsdH1yZWFkRmxvYXQoKXtjb25zdCB0PXRoaXMuZGF0YVZpZXcuZ2V0RmxvYXQzMih0aGlzLnBvcywhMCk7cmV0dXJuIHRoaXMucG9zKz00LHR9cmVhZERvdWJsZSgpe2NvbnN0IHQ9dGhpcy5kYXRhVmlldy5nZXRGbG9hdDY0KHRoaXMucG9zLCEwKTtyZXR1cm4gdGhpcy5wb3MrPTgsdH1yZWFkVmFyaW50KHQpe2NvbnN0IGU9dGhpcy5idWY7bGV0IHIscztyZXR1cm4gcz1lW3RoaXMucG9zKytdLHI9cyYxMjcsczwxMjh8fChzPWVbdGhpcy5wb3MrK10scnw9KHMmMTI3KTw8NyxzPDEyOCl8fChzPWVbdGhpcy5wb3MrK10scnw9KHMmMTI3KTw8MTQsczwxMjgpfHwocz1lW3RoaXMucG9zKytdLHJ8PShzJjEyNyk8PDIxLHM8MTI4KT9yOihzPWVbdGhpcy5wb3NdLHJ8PShzJjE1KTw8MjgsRShyLHQsdGhpcykpfXJlYWRWYXJpbnQ2NCgpe3JldHVybiB0aGlzLnJlYWRWYXJpbnQoITApfXJlYWRTVmFyaW50KCl7Y29uc3QgdD10aGlzLnJlYWRWYXJpbnQoKTtyZXR1cm4gdCUyPT09MT8odCsxKS8tMjp0LzJ9cmVhZEJvb2xlYW4oKXtyZXR1cm4hIXRoaXMucmVhZFZhcmludCgpfXJlYWRTdHJpbmcoKXtjb25zdCB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9dGhpcy5wb3M7cmV0dXJuIHRoaXMucG9zPXQsdC1lPj1tJiZQP1AuZGVjb2RlKHRoaXMuYnVmLnN1YmFycmF5KGUsdCkpOlIodGhpcy5idWYsZSx0KX1yZWFkQnl0ZXMoKXtjb25zdCB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9dGhpcy5idWYuc3ViYXJyYXkodGhpcy5wb3MsdCk7cmV0dXJuIHRoaXMucG9zPXQsZX1yZWFkUGFja2VkVmFyaW50KHQ9W10sZSl7Y29uc3Qgcj10aGlzLnJlYWRQYWNrZWRFbmQoKTtmb3IoO3RoaXMucG9zPHI7KXQucHVzaCh0aGlzLnJlYWRWYXJpbnQoZSkpO3JldHVybiB0fXJlYWRQYWNrZWRTVmFyaW50KHQ9W10pe2NvbnN0IGU9dGhpcy5yZWFkUGFja2VkRW5kKCk7Zm9yKDt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU1ZhcmludCgpKTtyZXR1cm4gdH1yZWFkUGFja2VkQm9vbGVhbih0PVtdKXtjb25zdCBlPXRoaXMucmVhZFBhY2tlZEVuZCgpO2Zvcig7dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEJvb2xlYW4oKSk7cmV0dXJuIHR9cmVhZFBhY2tlZEZsb2F0KHQ9W10pe2NvbnN0IGU9dGhpcy5yZWFkUGFja2VkRW5kKCk7Zm9yKDt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkRmxvYXQoKSk7cmV0dXJuIHR9cmVhZFBhY2tlZERvdWJsZSh0PVtdKXtjb25zdCBlPXRoaXMucmVhZFBhY2tlZEVuZCgpO2Zvcig7dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZERvdWJsZSgpKTtyZXR1cm4gdH1yZWFkUGFja2VkRml4ZWQzMih0PVtdKXtjb25zdCBlPXRoaXMucmVhZFBhY2tlZEVuZCgpO2Zvcig7dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEZpeGVkMzIoKSk7cmV0dXJuIHR9cmVhZFBhY2tlZFNGaXhlZDMyKHQ9W10pe2NvbnN0IGU9dGhpcy5yZWFkUGFja2VkRW5kKCk7Zm9yKDt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7cmV0dXJuIHR9cmVhZFBhY2tlZEZpeGVkNjQodD1bXSl7Y29uc3QgZT10aGlzLnJlYWRQYWNrZWRFbmQoKTtmb3IoO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRGaXhlZDY0KCkpO3JldHVybiB0fXJlYWRQYWNrZWRTRml4ZWQ2NCh0PVtdKXtjb25zdCBlPXRoaXMucmVhZFBhY2tlZEVuZCgpO2Zvcig7dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZFNGaXhlZDY0KCkpO3JldHVybiB0fXJlYWRQYWNrZWRFbmQoKXtyZXR1cm4gdGhpcy50eXBlPT09Rj90aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvczp0aGlzLnBvcysxfXNraXAodCl7Y29uc3QgZT10Jjc7aWYoZT09PWcpZm9yKDt0aGlzLmJ1Zlt0aGlzLnBvcysrXT4xMjc7KTtlbHNlIGlmKGU9PT1GKXRoaXMucG9zPXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zO2Vsc2UgaWYoZT09PXApdGhpcy5wb3MrPTQ7ZWxzZSBpZihlPT09eSl0aGlzLnBvcys9ODtlbHNlIHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZCB0eXBlOiAke2V9YCl9d3JpdGVUYWcodCxlKXt0aGlzLndyaXRlVmFyaW50KHQ8PDN8ZSl9cmVhbGxvYyh0KXtsZXQgZT10aGlzLmxlbmd0aHx8MTY7Zm9yKDtlPHRoaXMucG9zK3Q7KWUqPTI7aWYoZSE9PXRoaXMubGVuZ3RoKXtjb25zdCByPW5ldyBVaW50OEFycmF5KGUpO3Iuc2V0KHRoaXMuYnVmKSx0aGlzLmJ1Zj1yLHRoaXMuZGF0YVZpZXc9bmV3IERhdGFWaWV3KHIuYnVmZmVyKSx0aGlzLmxlbmd0aD1lfX1maW5pc2goKXtyZXR1cm4gdGhpcy5sZW5ndGg9dGhpcy5wb3MsdGhpcy5wb3M9MCx0aGlzLmJ1Zi5zdWJhcnJheSgwLHRoaXMubGVuZ3RoKX13cml0ZUZpeGVkMzIodCl7dGhpcy5yZWFsbG9jKDQpLHRoaXMuZGF0YVZpZXcuc2V0SW50MzIodGhpcy5wb3MsdCwhMCksdGhpcy5wb3MrPTR9d3JpdGVTRml4ZWQzMih0KXt0aGlzLnJlYWxsb2MoNCksdGhpcy5kYXRhVmlldy5zZXRJbnQzMih0aGlzLnBvcyx0LCEwKSx0aGlzLnBvcys9NH13cml0ZUZpeGVkNjQodCl7dGhpcy5yZWFsbG9jKDgpLHRoaXMuZGF0YVZpZXcuc2V0SW50MzIodGhpcy5wb3MsdCYtMSwhMCksdGhpcy5kYXRhVmlldy5zZXRJbnQzMih0aGlzLnBvcys0LE1hdGguZmxvb3IodCpfKSwhMCksdGhpcy5wb3MrPTh9d3JpdGVTRml4ZWQ2NCh0KXt0aGlzLnJlYWxsb2MoOCksdGhpcy5kYXRhVmlldy5zZXRJbnQzMih0aGlzLnBvcyx0Ji0xLCEwKSx0aGlzLmRhdGFWaWV3LnNldEludDMyKHRoaXMucG9zKzQsTWF0aC5mbG9vcih0Kl8pLCEwKSx0aGlzLnBvcys9OH13cml0ZVZhcmludCh0KXtpZih0PSt0fHwwLHQ+MjY4NDM1NDU1fHx0PDApe0IodCx0aGlzKTtyZXR1cm59dGhpcy5yZWFsbG9jKDQpLHRoaXMuYnVmW3RoaXMucG9zKytdPXQmMTI3fCh0PjEyNz8xMjg6MCksISh0PD0xMjcpJiYodGhpcy5idWZbdGhpcy5wb3MrK109KHQ+Pj49NykmMTI3fCh0PjEyNz8xMjg6MCksISh0PD0xMjcpJiYodGhpcy5idWZbdGhpcy5wb3MrK109KHQ+Pj49NykmMTI3fCh0PjEyNz8xMjg6MCksISh0PD0xMjcpJiYodGhpcy5idWZbdGhpcy5wb3MrK109dD4+PjcmMTI3KSkpfXdyaXRlU1ZhcmludCh0KXt0aGlzLndyaXRlVmFyaW50KHQ8MD8tdCoyLTE6dCoyKX13cml0ZUJvb2xlYW4odCl7dGhpcy53cml0ZVZhcmludCgrdCl9d3JpdGVTdHJpbmcodCl7dD1TdHJpbmcodCksdGhpcy5yZWFsbG9jKHQubGVuZ3RoKjQpLHRoaXMucG9zKys7Y29uc3QgZT10aGlzLnBvczt0aGlzLnBvcz1xKHRoaXMuYnVmLHQsdGhpcy5wb3MpO2NvbnN0IHI9dGhpcy5wb3MtZTtyPj0xMjgmJlMoZSxyLHRoaXMpLHRoaXMucG9zPWUtMSx0aGlzLndyaXRlVmFyaW50KHIpLHRoaXMucG9zKz1yfXdyaXRlRmxvYXQodCl7dGhpcy5yZWFsbG9jKDQpLHRoaXMuZGF0YVZpZXcuc2V0RmxvYXQzMih0aGlzLnBvcyx0LCEwKSx0aGlzLnBvcys9NH13cml0ZURvdWJsZSh0KXt0aGlzLnJlYWxsb2MoOCksdGhpcy5kYXRhVmlldy5zZXRGbG9hdDY0KHRoaXMucG9zLHQsITApLHRoaXMucG9zKz04fXdyaXRlQnl0ZXModCl7Y29uc3QgZT10Lmxlbmd0aDt0aGlzLndyaXRlVmFyaW50KGUpLHRoaXMucmVhbGxvYyhlKTtmb3IobGV0IHI9MDtyPGU7cisrKXRoaXMuYnVmW3RoaXMucG9zKytdPXRbcl19d3JpdGVSYXdNZXNzYWdlKHQsZSl7dGhpcy5wb3MrKztjb25zdCByPXRoaXMucG9zO3QoZSx0aGlzKTtjb25zdCBzPXRoaXMucG9zLXI7cz49MTI4JiZTKHIscyx0aGlzKSx0aGlzLnBvcz1yLTEsdGhpcy53cml0ZVZhcmludChzKSx0aGlzLnBvcys9c313cml0ZU1lc3NhZ2UodCxlLHIpe3RoaXMud3JpdGVUYWcodCxGKSx0aGlzLndyaXRlUmF3TWVzc2FnZShlLHIpfXdyaXRlUGFja2VkVmFyaW50KHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsSSxlKX13cml0ZVBhY2tlZFNWYXJpbnQodCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxDLGUpfXdyaXRlUGFja2VkQm9vbGVhbih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LFUsZSl9d3JpdGVQYWNrZWRGbG9hdCh0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LEwsZSl9d3JpdGVQYWNrZWREb3VibGUodCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxBLGUpfXdyaXRlUGFja2VkRml4ZWQzMih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LHYsZSl9d3JpdGVQYWNrZWRTRml4ZWQzMih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LE4sZSl9d3JpdGVQYWNrZWRGaXhlZDY0KHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsRyxlKX13cml0ZVBhY2tlZFNGaXhlZDY0KHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsSCxlKX13cml0ZUJ5dGVzRmllbGQodCxlKXt0aGlzLndyaXRlVGFnKHQsRiksdGhpcy53cml0ZUJ5dGVzKGUpfXdyaXRlRml4ZWQzMkZpZWxkKHQsZSl7dGhpcy53cml0ZVRhZyh0LHApLHRoaXMud3JpdGVGaXhlZDMyKGUpfXdyaXRlU0ZpeGVkMzJGaWVsZCh0LGUpe3RoaXMud3JpdGVUYWcodCxwKSx0aGlzLndyaXRlU0ZpeGVkMzIoZSl9d3JpdGVGaXhlZDY0RmllbGQodCxlKXt0aGlzLndyaXRlVGFnKHQseSksdGhpcy53cml0ZUZpeGVkNjQoZSl9d3JpdGVTRml4ZWQ2NEZpZWxkKHQsZSl7dGhpcy53cml0ZVRhZyh0LHkpLHRoaXMud3JpdGVTRml4ZWQ2NChlKX13cml0ZVZhcmludEZpZWxkKHQsZSl7dGhpcy53cml0ZVRhZyh0LGcpLHRoaXMud3JpdGVWYXJpbnQoZSl9d3JpdGVTVmFyaW50RmllbGQodCxlKXt0aGlzLndyaXRlVGFnKHQsZyksdGhpcy53cml0ZVNWYXJpbnQoZSl9d3JpdGVTdHJpbmdGaWVsZCh0LGUpe3RoaXMud3JpdGVUYWcodCxGKSx0aGlzLndyaXRlU3RyaW5nKGUpfXdyaXRlRmxvYXRGaWVsZCh0LGUpe3RoaXMud3JpdGVUYWcodCxwKSx0aGlzLndyaXRlRmxvYXQoZSl9d3JpdGVEb3VibGVGaWVsZCh0LGUpe3RoaXMud3JpdGVUYWcodCx5KSx0aGlzLndyaXRlRG91YmxlKGUpfXdyaXRlQm9vbGVhbkZpZWxkKHQsZSl7dGhpcy53cml0ZVZhcmludEZpZWxkKHQsK2UpfX1mdW5jdGlvbiBFKGksdCxlKXtjb25zdCByPWUuYnVmO2xldCBzLG47aWYobj1yW2UucG9zKytdLHM9KG4mMTEyKT4+NCxuPDEyOHx8KG49cltlLnBvcysrXSxzfD0obiYxMjcpPDwzLG48MTI4KXx8KG49cltlLnBvcysrXSxzfD0obiYxMjcpPDwxMCxuPDEyOCl8fChuPXJbZS5wb3MrK10sc3w9KG4mMTI3KTw8MTcsbjwxMjgpfHwobj1yW2UucG9zKytdLHN8PShuJjEyNyk8PDI0LG48MTI4KXx8KG49cltlLnBvcysrXSxzfD0obiYxKTw8MzEsbjwxMjgpKXJldHVybiBmKGkscyx0KTt0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHZhcmludCBub3QgbW9yZSB0aGFuIDEwIGJ5dGVzIil9ZnVuY3Rpb24gZihpLHQsZSl7cmV0dXJuIGU/dCo0Mjk0OTY3Mjk2KyhpPj4+MCk6KHQ+Pj4wKSo0Mjk0OTY3Mjk2KyhpPj4+MCl9ZnVuY3Rpb24gQihpLHQpe2xldCBlLHI7aWYoaT49MD8oZT1pJTQyOTQ5NjcyOTZ8MCxyPWkvNDI5NDk2NzI5NnwwKTooZT1+KC1pJTQyOTQ5NjcyOTYpLHI9figtaS80Mjk0OTY3Mjk2KSxlXjQyOTQ5NjcyOTU/ZT1lKzF8MDooZT0wLHI9cisxfDApKSxpPj0xODQ0Njc0NDA3MzcwOTU1MmUzfHxpPC0xODQ0Njc0NDA3MzcwOTU1MmUzKXRocm93IG5ldyBFcnJvcigiR2l2ZW4gdmFyaW50IGRvZXNuJ3QgZml0IGludG8gMTAgYnl0ZXMiKTt0LnJlYWxsb2MoMTApLFQoZSxyLHQpLEQocix0KX1mdW5jdGlvbiBUKGksdCxlKXtlLmJ1ZltlLnBvcysrXT1pJjEyN3wxMjgsaT4+Pj03LGUuYnVmW2UucG9zKytdPWkmMTI3fDEyOCxpPj4+PTcsZS5idWZbZS5wb3MrK109aSYxMjd8MTI4LGk+Pj49NyxlLmJ1ZltlLnBvcysrXT1pJjEyN3wxMjgsaT4+Pj03LGUuYnVmW2UucG9zXT1pJjEyN31mdW5jdGlvbiBEKGksdCl7Y29uc3QgZT0oaSY3KTw8NDt0LmJ1Zlt0LnBvcysrXXw9ZXwoKGk+Pj49Myk/MTI4OjApLGkmJih0LmJ1Zlt0LnBvcysrXT1pJjEyN3woKGk+Pj49Nyk/MTI4OjApLGkmJih0LmJ1Zlt0LnBvcysrXT1pJjEyN3woKGk+Pj49Nyk/MTI4OjApLGkmJih0LmJ1Zlt0LnBvcysrXT1pJjEyN3woKGk+Pj49Nyk/MTI4OjApLGkmJih0LmJ1Zlt0LnBvcysrXT1pJjEyN3woKGk+Pj49Nyk/MTI4OjApLGkmJih0LmJ1Zlt0LnBvcysrXT1pJjEyNykpKSkpfWZ1bmN0aW9uIFMoaSx0LGUpe2NvbnN0IHI9dDw9MTYzODM/MTp0PD0yMDk3MTUxPzI6dDw9MjY4NDM1NDU1PzM6TWF0aC5mbG9vcihNYXRoLmxvZyh0KS8oTWF0aC5MTjIqNykpO2UucmVhbGxvYyhyKTtmb3IobGV0IHM9ZS5wb3MtMTtzPj1pO3MtLSllLmJ1ZltzK3JdPWUuYnVmW3NdfWZ1bmN0aW9uIEkoaSx0KXtmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl0LndyaXRlVmFyaW50KGlbZV0pfWZ1bmN0aW9uIEMoaSx0KXtmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl0LndyaXRlU1ZhcmludChpW2VdKX1mdW5jdGlvbiBMKGksdCl7Zm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspdC53cml0ZUZsb2F0KGlbZV0pfWZ1bmN0aW9uIEEoaSx0KXtmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl0LndyaXRlRG91YmxlKGlbZV0pfWZ1bmN0aW9uIFUoaSx0KXtmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKyl0LndyaXRlQm9vbGVhbihpW2VdKX1mdW5jdGlvbiB2KGksdCl7Zm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspdC53cml0ZUZpeGVkMzIoaVtlXSl9ZnVuY3Rpb24gTihpLHQpe2ZvcihsZXQgZT0wO2U8aS5sZW5ndGg7ZSsrKXQud3JpdGVTRml4ZWQzMihpW2VdKX1mdW5jdGlvbiBHKGksdCl7Zm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspdC53cml0ZUZpeGVkNjQoaVtlXSl9ZnVuY3Rpb24gSChpLHQpe2ZvcihsZXQgZT0wO2U8aS5sZW5ndGg7ZSsrKXQud3JpdGVTRml4ZWQ2NChpW2VdKX1mdW5jdGlvbiBSKGksdCxlKXtsZXQgcj0iIixzPXQ7Zm9yKDtzPGU7KXtjb25zdCBuPWlbc107bGV0IG89bnVsbCxoPW4+MjM5PzQ6bj4yMjM/MzpuPjE5MT8yOjE7aWYocytoPmUpYnJlYWs7bGV0IGEsZCx1O2g9PT0xP248MTI4JiYobz1uKTpoPT09Mj8oYT1pW3MrMV0sKGEmMTkyKT09PTEyOCYmKG89KG4mMzEpPDw2fGEmNjMsbzw9MTI3JiYobz1udWxsKSkpOmg9PT0zPyhhPWlbcysxXSxkPWlbcysyXSwoYSYxOTIpPT09MTI4JiYoZCYxOTIpPT09MTI4JiYobz0obiYxNSk8PDEyfChhJjYzKTw8NnxkJjYzLChvPD0yMDQ3fHxvPj01NTI5NiYmbzw9NTczNDMpJiYobz1udWxsKSkpOmg9PT00JiYoYT1pW3MrMV0sZD1pW3MrMl0sdT1pW3MrM10sKGEmMTkyKT09PTEyOCYmKGQmMTkyKT09PTEyOCYmKHUmMTkyKT09PTEyOCYmKG89KG4mMTUpPDwxOHwoYSY2Myk8PDEyfChkJjYzKTw8Nnx1JjYzLChvPD02NTUzNXx8bz49MTExNDExMikmJihvPW51bGwpKSksbz09PW51bGw/KG89NjU1MzMsaD0xKTpvPjY1NTM1JiYoby09NjU1MzYscis9U3RyaW5nLmZyb21DaGFyQ29kZShvPj4+MTAmMTAyM3w1NTI5Niksbz01NjMyMHxvJjEwMjMpLHIrPVN0cmluZy5mcm9tQ2hhckNvZGUobykscys9aH1yZXR1cm4gcn1mdW5jdGlvbiBxKGksdCxlKXtmb3IobGV0IHI9MCxzLG47cjx0Lmxlbmd0aDtyKyspe2lmKHM9dC5jaGFyQ29kZUF0KHIpLHM+NTUyOTUmJnM8NTczNDQpaWYobilpZihzPDU2MzIwKXtpW2UrK109MjM5LGlbZSsrXT0xOTEsaVtlKytdPTE4OSxuPXM7Y29udGludWV9ZWxzZSBzPW4tNTUyOTY8PDEwfHMtNTYzMjB8NjU1MzYsbj1udWxsO2Vsc2V7cz41NjMxOXx8cisxPT09dC5sZW5ndGg/KGlbZSsrXT0yMzksaVtlKytdPTE5MSxpW2UrK109MTg5KTpuPXM7Y29udGludWV9ZWxzZSBuJiYoaVtlKytdPTIzOSxpW2UrK109MTkxLGlbZSsrXT0xODksbj1udWxsKTtzPDEyOD9pW2UrK109czooczwyMDQ4P2lbZSsrXT1zPj42fDE5Mjooczw2NTUzNj9pW2UrK109cz4+MTJ8MjI0OihpW2UrK109cz4+MTh8MjQwLGlbZSsrXT1zPj4xMiY2M3wxMjgpLGlbZSsrXT1zPj42JjYzfDEyOCksaVtlKytdPXMmNjN8MTI4KX1yZXR1cm4gZX1mdW5jdGlvbiB4KGksdCl7dGhpcy54PWksdGhpcy55PXR9eC5wcm90b3R5cGU9e2Nsb25lKCl7cmV0dXJuIG5ldyB4KHRoaXMueCx0aGlzLnkpfSxhZGQoaSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fYWRkKGkpfSxzdWIoaSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fc3ViKGkpfSxtdWx0QnlQb2ludChpKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0QnlQb2ludChpKX0sZGl2QnlQb2ludChpKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9kaXZCeVBvaW50KGkpfSxtdWx0KGkpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHQoaSl9LGRpdihpKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9kaXYoaSl9LHJvdGF0ZShpKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3RhdGUoaSl9LHJvdGF0ZUFyb3VuZChpLHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZUFyb3VuZChpLHQpfSxtYXRNdWx0KGkpe3JldHVybiB0aGlzLmNsb25lKCkuX21hdE11bHQoaSl9LHVuaXQoKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl91bml0KCl9LHBlcnAoKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9wZXJwKCl9LHJvdW5kKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcm91bmQoKX0sbWFnKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfSxlcXVhbHMoaSl7cmV0dXJuIHRoaXMueD09PWkueCYmdGhpcy55PT09aS55fSxkaXN0KGkpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0U3FyKGkpKX0sZGlzdFNxcihpKXtjb25zdCB0PWkueC10aGlzLngsZT1pLnktdGhpcy55O3JldHVybiB0KnQrZSplfSxhbmdsZSgpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueSx0aGlzLngpfSxhbmdsZVRvKGkpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueS1pLnksdGhpcy54LWkueCl9LGFuZ2xlV2l0aChpKXtyZXR1cm4gdGhpcy5hbmdsZVdpdGhTZXAoaS54LGkueSl9LGFuZ2xlV2l0aFNlcChpLHQpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueCp0LXRoaXMueSppLHRoaXMueCppK3RoaXMueSp0KX0sX21hdE11bHQoaSl7Y29uc3QgdD1pWzBdKnRoaXMueCtpWzFdKnRoaXMueSxlPWlbMl0qdGhpcy54K2lbM10qdGhpcy55O3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzfSxfYWRkKGkpe3JldHVybiB0aGlzLngrPWkueCx0aGlzLnkrPWkueSx0aGlzfSxfc3ViKGkpe3JldHVybiB0aGlzLngtPWkueCx0aGlzLnktPWkueSx0aGlzfSxfbXVsdChpKXtyZXR1cm4gdGhpcy54Kj1pLHRoaXMueSo9aSx0aGlzfSxfZGl2KGkpe3JldHVybiB0aGlzLngvPWksdGhpcy55Lz1pLHRoaXN9LF9tdWx0QnlQb2ludChpKXtyZXR1cm4gdGhpcy54Kj1pLngsdGhpcy55Kj1pLnksdGhpc30sX2RpdkJ5UG9pbnQoaSl7cmV0dXJuIHRoaXMueC89aS54LHRoaXMueS89aS55LHRoaXN9LF91bml0KCl7cmV0dXJuIHRoaXMuX2Rpdih0aGlzLm1hZygpKSx0aGlzfSxfcGVycCgpe2NvbnN0IGk9dGhpcy55O3JldHVybiB0aGlzLnk9dGhpcy54LHRoaXMueD0taSx0aGlzfSxfcm90YXRlKGkpe2NvbnN0IHQ9TWF0aC5jb3MoaSksZT1NYXRoLnNpbihpKSxyPXQqdGhpcy54LWUqdGhpcy55LHM9ZSp0aGlzLngrdCp0aGlzLnk7cmV0dXJuIHRoaXMueD1yLHRoaXMueT1zLHRoaXN9LF9yb3RhdGVBcm91bmQoaSx0KXtjb25zdCBlPU1hdGguY29zKGkpLHI9TWF0aC5zaW4oaSkscz10LngrZSoodGhpcy54LXQueCktcioodGhpcy55LXQueSksbj10LnkrcioodGhpcy54LXQueCkrZSoodGhpcy55LXQueSk7cmV0dXJuIHRoaXMueD1zLHRoaXMueT1uLHRoaXN9LF9yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc30sY29uc3RydWN0b3I6eH0seC5jb252ZXJ0PWZ1bmN0aW9uKGkpe2lmKGkgaW5zdGFuY2VvZiB4KXJldHVybiBpO2lmKEFycmF5LmlzQXJyYXkoaSkpcmV0dXJuIG5ldyB4KCtpWzBdLCtpWzFdKTtpZihpLnghPT12b2lkIDAmJmkueSE9PXZvaWQgMClyZXR1cm4gbmV3IHgoK2kueCwraS55KTt0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIFt4LCB5XSBvciB7eCwgeX0gcG9pbnQgZm9ybWF0Iil9O2NsYXNzIGt7Y29uc3RydWN0b3IodCxlLHIscyxuKXt0aGlzLnByb3BlcnRpZXM9e30sdGhpcy5leHRlbnQ9cix0aGlzLnR5cGU9MCx0aGlzLmlkPXZvaWQgMCx0aGlzLl9wYmY9dCx0aGlzLl9nZW9tZXRyeT0tMSx0aGlzLl9rZXlzPXMsdGhpcy5fdmFsdWVzPW4sdC5yZWFkRmllbGRzKGosdGhpcyxlKX1sb2FkR2VvbWV0cnkoKXtjb25zdCB0PXRoaXMuX3BiZjt0LnBvcz10aGlzLl9nZW9tZXRyeTtjb25zdCBlPXQucmVhZFZhcmludCgpK3QucG9zLHI9W107bGV0IHMsbj0xLG89MCxoPTAsYT0wO2Zvcig7dC5wb3M8ZTspe2lmKG88PTApe2NvbnN0IGQ9dC5yZWFkVmFyaW50KCk7bj1kJjcsbz1kPj4zfWlmKG8tLSxuPT09MXx8bj09PTIpaCs9dC5yZWFkU1ZhcmludCgpLGErPXQucmVhZFNWYXJpbnQoKSxuPT09MSYmKHMmJnIucHVzaChzKSxzPVtdKSxzJiZzLnB1c2gobmV3IHgoaCxhKSk7ZWxzZSBpZihuPT09NylzJiZzLnB1c2goc1swXS5jbG9uZSgpKTtlbHNlIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBjb21tYW5kICR7bn1gKX1yZXR1cm4gcyYmci5wdXNoKHMpLHJ9YmJveCgpe2NvbnN0IHQ9dGhpcy5fcGJmO3QucG9zPXRoaXMuX2dlb21ldHJ5O2NvbnN0IGU9dC5yZWFkVmFyaW50KCkrdC5wb3M7bGV0IHI9MSxzPTAsbj0wLG89MCxoPTEvMCxhPS0xLzAsZD0xLzAsdT0tMS8wO2Zvcig7dC5wb3M8ZTspe2lmKHM8PTApe2NvbnN0IHc9dC5yZWFkVmFyaW50KCk7cj13Jjcscz13Pj4zfWlmKHMtLSxyPT09MXx8cj09PTIpbis9dC5yZWFkU1ZhcmludCgpLG8rPXQucmVhZFNWYXJpbnQoKSxuPGgmJihoPW4pLG4+YSYmKGE9biksbzxkJiYoZD1vKSxvPnUmJih1PW8pO2Vsc2UgaWYociE9PTcpdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIGNvbW1hbmQgJHtyfWApfXJldHVybltoLGQsYSx1XX10b0dlb0pTT04odCxlLHIpe2NvbnN0IHM9dGhpcy5leHRlbnQqTWF0aC5wb3coMixyKSxuPXRoaXMuZXh0ZW50KnQsbz10aGlzLmV4dGVudCplLGg9dGhpcy5sb2FkR2VvbWV0cnkoKTtmdW5jdGlvbiBhKGwpe3JldHVyblsobC54K24pKjM2MC9zLTE4MCwzNjAvTWF0aC5QSSpNYXRoLmF0YW4oTWF0aC5leHAoKDEtKGwueStvKSoyL3MpKk1hdGguUEkpKS05MF19ZnVuY3Rpb24gZChsKXtyZXR1cm4gbC5tYXAoYSl9bGV0IHU7aWYodGhpcy50eXBlPT09MSl7Y29uc3QgbD1bXTtmb3IoY29uc3QgViBvZiBoKWwucHVzaChWWzBdKTtjb25zdCBjPWQobCk7dT1sLmxlbmd0aD09PTE/e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpjWzBdfTp7dHlwZToiTXVsdGlQb2ludCIsY29vcmRpbmF0ZXM6Y319ZWxzZSBpZih0aGlzLnR5cGU9PT0yKXtjb25zdCBsPWgubWFwKGQpO3U9bC5sZW5ndGg9PT0xP3t0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpsWzBdfTp7dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczpsfX1lbHNlIGlmKHRoaXMudHlwZT09PTMpe2NvbnN0IGw9VyhoKSxjPVtdO2Zvcihjb25zdCBWIG9mIGwpYy5wdXNoKFYubWFwKGQpKTt1PWMubGVuZ3RoPT09MT97dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6Y1swXX06e3R5cGU6Ik11bHRpUG9seWdvbiIsY29vcmRpbmF0ZXM6Y319ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInVua25vd24gZmVhdHVyZSB0eXBlIik7Y29uc3Qgdz17dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6dSxwcm9wZXJ0aWVzOnRoaXMucHJvcGVydGllc307cmV0dXJuIHRoaXMuaWQhPW51bGwmJih3LmlkPXRoaXMuaWQpLHd9fWsudHlwZXM9WyJVbmtub3duIiwiUG9pbnQiLCJMaW5lU3RyaW5nIiwiUG9seWdvbiJdO2Z1bmN0aW9uIGooaSx0LGUpe2k9PT0xP3QuaWQ9ZS5yZWFkVmFyaW50KCk6aT09PTI/TyhlLHQpOmk9PT0zP3QudHlwZT1lLnJlYWRWYXJpbnQoKTppPT09NCYmKHQuX2dlb21ldHJ5PWUucG9zKX1mdW5jdGlvbiBPKGksdCl7Y29uc3QgZT1pLnJlYWRWYXJpbnQoKStpLnBvcztmb3IoO2kucG9zPGU7KXtjb25zdCByPXQuX2tleXNbaS5yZWFkVmFyaW50KCldLHM9dC5fdmFsdWVzW2kucmVhZFZhcmludCgpXTt0LnByb3BlcnRpZXNbcl09c319ZnVuY3Rpb24gVyhpKXtjb25zdCB0PWkubGVuZ3RoO2lmKHQ8PTEpcmV0dXJuW2ldO2NvbnN0IGU9W107bGV0IHIscztmb3IobGV0IG49MDtuPHQ7bisrKXtjb25zdCBvPUooaVtuXSk7byE9PTAmJihzPT09dm9pZCAwJiYocz1vPDApLHM9PT1vPDA/KHImJmUucHVzaChyKSxyPVtpW25dXSk6ciYmci5wdXNoKGlbbl0pKX1yZXR1cm4gciYmZS5wdXNoKHIpLGV9ZnVuY3Rpb24gSihpKXtsZXQgdD0wO2ZvcihsZXQgZT0wLHI9aS5sZW5ndGgscz1yLTEsbixvO2U8cjtzPWUrKyluPWlbZV0sbz1pW3NdLHQrPShvLngtbi54KSoobi55K28ueSk7cmV0dXJuIHR9Y2xhc3MgWHtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMudmVyc2lvbj0xLHRoaXMubmFtZT0iIix0aGlzLmV4dGVudD00MDk2LHRoaXMubGVuZ3RoPTAsdGhpcy5fcGJmPXQsdGhpcy5fa2V5cz1bXSx0aGlzLl92YWx1ZXM9W10sdGhpcy5fZmVhdHVyZXM9W10sdC5yZWFkRmllbGRzKCQsdGhpcyxlKSx0aGlzLmxlbmd0aD10aGlzLl9mZWF0dXJlcy5sZW5ndGh9ZmVhdHVyZSh0KXtpZih0PDB8fHQ+PXRoaXMuX2ZlYXR1cmVzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImZlYXR1cmUgaW5kZXggb3V0IG9mIGJvdW5kcyIpO3RoaXMuX3BiZi5wb3M9dGhpcy5fZmVhdHVyZXNbdF07Y29uc3QgZT10aGlzLl9wYmYucmVhZFZhcmludCgpK3RoaXMuX3BiZi5wb3M7cmV0dXJuIG5ldyBrKHRoaXMuX3BiZixlLHRoaXMuZXh0ZW50LHRoaXMuX2tleXMsdGhpcy5fdmFsdWVzKX19ZnVuY3Rpb24gJChpLHQsZSl7aT09PTE1P3QudmVyc2lvbj1lLnJlYWRWYXJpbnQoKTppPT09MT90Lm5hbWU9ZS5yZWFkU3RyaW5nKCk6aT09PTU/dC5leHRlbnQ9ZS5yZWFkVmFyaW50KCk6aT09PTI/dC5fZmVhdHVyZXMucHVzaChlLnBvcyk6aT09PTM/dC5fa2V5cy5wdXNoKGUucmVhZFN0cmluZygpKTppPT09NCYmdC5fdmFsdWVzLnB1c2goYihlKSl9ZnVuY3Rpb24gYihpKXtsZXQgdD1udWxsO2NvbnN0IGU9aS5yZWFkVmFyaW50KCkraS5wb3M7Zm9yKDtpLnBvczxlOyl7Y29uc3Qgcj1pLnJlYWRWYXJpbnQoKT4+Mzt0PXI9PT0xP2kucmVhZFN0cmluZygpOnI9PT0yP2kucmVhZEZsb2F0KCk6cj09PTM/aS5yZWFkRG91YmxlKCk6cj09PTQ/aS5yZWFkVmFyaW50NjQoKTpyPT09NT9pLnJlYWRWYXJpbnQoKTpyPT09Nj9pLnJlYWRTVmFyaW50KCk6cj09PTc/aS5yZWFkQm9vbGVhbigpOm51bGx9aWYodD09bnVsbCl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gZmVhdHVyZSB2YWx1ZSIpO3JldHVybiB0fWNsYXNzIHp7Y29uc3RydWN0b3IodCxlKXt0aGlzLmxheWVycz10LnJlYWRGaWVsZHMoWSx7fSxlKX19ZnVuY3Rpb24gWShpLHQsZSl7aWYoaT09PTMpe2NvbnN0IHI9bmV3IFgoZSxlLnJlYWRWYXJpbnQoKStlLnBvcyk7ci5sZW5ndGgmJih0W3IubmFtZV09cil9fWFzeW5jIGZ1bmN0aW9uIEsoaSx0LGUscil7dHJ5e2NvbnN0IHM9UShpLHQsZSxyKTtyZXR1cm57eDp0LHk6ZSx6OnIsbGF5ZXJzOnMsdGltZXN0YW1wOkRhdGUubm93KCksZGF0YUZvcm1hdDoibXZ0In19Y2F0Y2gocyl7dGhyb3cgY29uc29sZS5lcnJvcigi6Kej5p6Q55+i6YeP55Om54mH5pWw5o2u5pe25Ye66ZSZOiIscyksc319ZnVuY3Rpb24gUShpLHQsZSxyKXtjb25zdCBzPW5ldyBNKGkpLG49bmV3IHoocyksbz17fTtmb3IoY29uc3QgaCBpbiBuLmxheWVycyl7Y29uc3QgYT1uLmxheWVyc1toXSxkPVtdO2ZvcihsZXQgdT0wO3U8YS5sZW5ndGg7dSsrKXtjb25zdCBsPWEuZmVhdHVyZSh1KS50b0dlb0pTT04odCxlLHIpO2QucHVzaChsKX1vW2hdPWR9cmV0dXJuIG99c2VsZi5vbm1lc3NhZ2U9YXN5bmMgaT0+e2NvbnN0IHQ9aS5kYXRhO3RyeXtjb25zdCBlPWF3YWl0IEsodC5hcnJheUJ1ZmZlcix0LngsdC55LHQueik7c2VsZi5wb3N0TWVzc2FnZShlKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKCJXb3JrZXIgTVZUIOino+aekOWksei0pToiLGUpLHNlbGYucG9zdE1lc3NhZ2Uoe2Vycm9yOmUubWVzc2FnZX0pfX19KSgpOwo=",rv=i=>Uint8Array.from(atob(i),e=>e.charCodeAt(0)),eu=typeof self<"u"&&self.Blob&&new Blob([rv(qc)],{type:"text/javascript;charset=utf-8"});function iv(i){let e;try{if(e=eu&&(self.URL||self.webkitURL).createObjectURL(eu),!e)throw"";const t=new Worker(e,{name:i?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;base64,"+qc,{name:i?.name})}finally{e&&(self.URL||self.webkitURL).revokeObjectURL(e)}}var sv=Object.defineProperty,ov=(i,e,t)=>e in i?sv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,fs=(i,e,t)=>ov(i,typeof e!="symbol"?e+"":e,t);const av=10;class lv{constructor(){fs(this,"info",{version:"1.0.0",description:"Vector Tile loader for Mapbox Vector Tile format. It can load and parse MVT data."}),fs(this,"dataType","VectorTile"),fs(this,"fileLoader",new m.FileLoader(Fe.manager)),fs(this,"_workerPool",new Ao(0)),this.fileLoader.setResponseType("arraybuffer"),this._workerPool.setWorkerCreator(()=>new iv)}async load(e){const{source:t,x:n,y:r,z:o}=e,l=typeof t._getUrl=="function"?t._getUrl(n,r,o):this.buildTileUrl(t.url,n,r,o);if(!l)return this.createErrorGeometry(n,r,o,new Error("VectorTileLoader: source._getUrl 返回空 URL"));this._workerPool.pool===0&&this._workerPool.setWorkerLimit(av);try{const u=await this.fetchVectorData(l),c={arrayBuffer:u,x:n,y:r,z:o},p=(await this._workerPool.postMessage(c,[u])).data;if(p.error)throw new Error(p.error);const f=this.createGeometryWithVectorData(p,e);return Fe.manager.parseEnd(l),f}catch(u){return this.createErrorGeometry(n,r,o,u)}}async fetchVectorData(e){try{const t=await this.fileLoader.loadAsync(e);if(!t||t.byteLength===0)throw new Error("Empty response");return t}catch(t){throw new Error(`Failed to fetch vector tile: ${t.message}`)}}calculateTileBounds(e,t,n){const r=4007501668557849e-8/Math.pow(2,n),o=-20037508342789244e-9+e*r,l=o+r,u=20037508342789244e-9-(t+1)*r,c=u+r;return{min:new m.Vector2(o,u),max:new m.Vector2(l,c),world:new m.Vector2(r,r)}}buildTileUrl(e,t,n,r){return e.replace("{x}",t.toString()).replace("{y}",n.toString()).replace("{z}",r.toString()).replace("{-y}",(Math.pow(2,r)-1-n).toString())}createGeometryWithVectorData(e,t){const n=new Vr;return n.userData={vectorData:e,tileInfo:{x:t.x,y:t.y,z:t.z,bounds:t.bounds},metadata:{dataType:"vector-tile",version:"1.0.0",loadedAt:Date.now()}},n}createErrorGeometry(e,t,n,r){const o=new Vr;return o.userData={vectorData:{x:e,y:t,z:n,layers:{},totalFeatures:0,bounds:this.calculateTileBounds(e,t,n),error:r.message,timestamp:Date.now(),dataFormat:"error"},tileInfo:{x:e,y:t,z:n,bounds:[0,0,0,0]},metadata:{dataType:"vector-tile-error",error:!0,errorMessage:r.message}},o}unload(e){e.userData?.vectorData&&(e.userData.vectorData=null),e.dispose&&e.dispose()}static getVectorData(e){return e.userData?.vectorData||null}static hasValidVectorData(e){const t=this.getVectorData(e);return t&&!t.error&&t.totalFeatures>0}static getLayerNames(e){const t=this.getVectorData(e);return t?Object.keys(t.layers||{}):[]}static getFeaturesByLayer(e,t){return this.getVectorData(e)?.layers?.[t]?.convertedFeatures||[]}}Uc(new lv);var cv=Object.defineProperty,uv=(i,e,t)=>e in i?cv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,cr=(i,e,t)=>uv(i,typeof e!="symbol"?e+"":e,t);class ra extends Ac{constructor(e,t){if(super(e,t),cr(this,"layerType","vector"),cr(this,"_tileDataMap",new Map),cr(this,"_renderer"),cr(this,"_style"),cr(this,"_feaList",[]),cr(this,"_collision",!1),cr(this,"_renderAltitude",0),!t.style)throw new Error("VectorTileLayer 必须提供样式配置");this._style=t.style,this._collision=t.collision||!1,this._featureFilter=t.featureFilter,this._renderAltitude=t.altitude||0,this._rootTile.setDataOnlyMode(!0),this._setupDataModeAndListenersForChildren(),this._setupLifeCycleListeners()}_setupDataModeAndListenersForChildren(){const e=t=>{t!==this._rootTile&&t.setDataOnlyMode(!0),this._addShownListenerToTile(t),this._addUnloadListenerToTile(t)};this._rootTile.addEventListener("tile-created",t=>{const n=t.tile;e(n)}),this._rootTile.traverse(t=>{t.isTile&&e(t)})}_addShownListenerToTile(e){const t=n=>{const r=n.tile,o=`${r.z}-${r.x}-${r.y}`,l=!!this._renderer,u=this._tileDataMap.get(o);l&&u&&this._renderer.processTileData(r,u.data)};e.addEventListener("tile-shown",t)}_addUnloadListenerToTile(e){const t=n=>{const r=n.tile||n.target,o=`${r.z}-${r.x}-${r.y}`;if(this._renderer)try{this._renderer.removeFeaturesByTileKey(o)}catch{}this._tileDataMap.delete(o)};e.addEventListener("unload",t)}setAltitude(e){return super.setAltitude(0),this._renderAltitude=e,this._renderer&&this._renderer.setAltitude(e),this}getAltitude(){return this._renderAltitude}_addHiddenListenerToTile(e){const t=n=>{const r=n.tile,o=`${r.z}-${r.x}-${r.y}`;if(this._renderer)try{this._renderer.hideFeaturesByTileKey(o)}catch{}};e.addEventListener("tile-hidden",t)}_setupLifeCycleListeners(){this._rootTile.addEventListener("tile-loaded",e=>{const t=e.tile,n=`${t.z}-${t.x}-${t.y}`,r=this.getVectorDataFromTile(t);if(!r){console.warn(`[VectorTileLayer] Tile ${n} loaded but has no vector data.`);return}if(r.vectorData?.dataFormat==="mvt"&&this._tileDataMap.set(n,{data:r,tile:t,timestamp:Date.now(),pending:!1}),t.showing&&this._renderer&&r.vectorData?.dataFormat==="mvt")try{this._renderer.processTileData(t,r)}catch{}})}getVectorDataFromTile(e){return!e.geometry||!e.getVectorData()?null:e.getVectorData()}createLoader(){const e=new ls;return e.vtSource=this.source,e}getVisibleVectorTiles(){const e=[];return this._rootTile.traverse(t=>{if(t.isTile&&t.loaded&&t.inFrustum){const n=`${t.z}-${t.x}-${t.y}`,r=this._tileDataMap.get(n);r&&e.push({tileKey:n,data:r.data,tile:r.tile})}}),e}getAllVectorData(){return new Map(this._tileDataMap)}getVectorData(e,t,n){const r=`${n}-${e}-${t}`,o=this._tileDataMap.get(r);return o?o.data:null}setFeatureFilter(e){this._featureFilter=e,this._renderer&&this._renderer.setFeatureFilter(e)}clearFeatureFilter(){this._featureFilter=void 0,this._renderer&&this._renderer.clearFeatureFilter()}setOpacity(e){this.opacity=e,this._renderer&&this._renderer.setOpacity(e)}update(e){!this.enabled||!this.visible||super.update(e)}dispose(){this._renderer&&this._renderer.dispose(),super.dispose()}_setRenderer(e){this._renderer=e}_getRenderer(){return this._renderer||null}getStyle(){return this._style}}var hv=Object.defineProperty,dv=(i,e,t)=>e in i?hv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Re=(i,e,t)=>dv(i,typeof e!="symbol"?e+"":e,t);class fv{constructor(...e){}}const pv={};let ur=class zd extends Io(Cr(Ir(fv))){constructor(e,t){Po(e,"container","Map container element must be specified");const n=["center","basemap"];for(const W of n)Hl(t,W);const o={...t,viewer:{...{viewer:{antialias:!0,stencil:!0,logarithmicDepthBuffer:!0}}.viewer,...t.viewer}};super(o),Re(this,"viewer"),Re(this,"tilemap"),Re(this,"center"),Re(this,"prjcenter"),Re(this,"_layerContainer"),Re(this,"_EventMap",{loaded:{listened:!1}}),Re(this,"_canvasManager",new $m),Re(this,"collisionEngine"),Re(this,"_onLoadHooks"),Re(this,"_minZoom",0),Re(this,"_maxZoom",22),Re(this,"_ZOOM_MIN_CONST",0),Re(this,"_ZOOM_MAX_CONST",22),Re(this,"_minZoomDistance",500),Re(this,"_maxZoomDistance",8e4),Re(this,"_isZooming",!1),Re(this,"_zoomStartValue",0),Re(this,"_lastZoomForControls",0),Re(this,"_overZoom",0),Re(this,"_lastCameraDistance",0),this.tilemap=this.initTileMap(o.basemap),this.center=this.options.center,this.viewer=new El(e,{...o.viewer,map:this}),this.tilemap.receiveShadow=!0,this.viewer.scene.add(this.tilemap);const l=this.tilemap.geo2world(new m.Vector3(this.center[0],this.center[1],0));this.prjcenter=l;const u=this.options.viewer??{};this.viewer.flyToPoint({center:this.center,distance:typeof this.center[2]=="number"?this.center[2]:void 0,polarDeg:typeof u.polarDeg=="number"?u.polarDeg:void 0,azimuthDeg:typeof u.azimuthDeg=="number"?u.azimuthDeg:void 0,polarAngle:u.polarAngle,azimuthAngle:u.azimuthAngle,duration:0,curvePath:!1}),this._minZoomDistance=this.viewer.controls.minDistance,this._maxZoomDistance=this.viewer.controls.maxDistance;const c=this._getCameraDistance();this._lastCameraDistance=c,this._layerContainer=new Jm,this.viewer.scene.add(this._layerContainer);const d=this.viewer.controls;this._minZoomDistance=typeof d?.minDistance=="number"?d.minDistance:500,this._maxZoomDistance=typeof d?.maxDistance=="number"?d.maxDistance:8e4;const f=this.tilemap.getLayers().find(W=>W.isBaseLayer===!0)?.minLevel??this.tilemap.minLevel;this._minZoom=Math.max(this._ZOOM_MIN_CONST,Math.min(this._ZOOM_MAX_CONST,f)),this._maxZoom=this._ZOOM_MAX_CONST;const y=this.prjcenter,_=this.viewer.camera.position.clone().clone().sub(y).normalize(),x=$i(t.zoom)?13:t.zoom,P=Math.max(this._minZoom,Math.min(this._maxZoom,x)),L=this._computeDistanceFromZoom(P);l.clone().addScaledVector(_,L);const T=this.getZoom();this._lastZoomForControls=T,this._zoomStartValue=T,this.collisionEngine=new Z0(this.viewer.renderer,{padding:8,updateInterval:16,animationDuration:200,maxFeaturesPerFrame:2e4,strategies:{priority:!0,grouping:!0,proximity:!0}}),this.on("control-change",G0.debounce(W=>{const K=this.tilemap,O=K.getDataZoom(),V=K.getLayers().find(H=>H.isBaseLayer===!0)?.maxLevel??K.maxLevel,R=this._getCameraDistance(),C=R-this._lastCameraDistance;this._lastCameraDistance=R;const{max:X}=this._getViewZoomRange(),Y=Math.max(0,X-V);O<V?this._overZoom=0:C<-.001?this._overZoom=Math.min(this._overZoom+1,Y):C>.001&&(this._overZoom=Math.max(this._overZoom-1,0));const Q=this.getZoom();Math.abs(Q-this._lastZoomForControls)>.001&&(this._isZooming?this.trigger("zooming",{from:this._zoomStartValue,to:Q}):(this._isZooming=!0,this._zoomStartValue=this._lastZoomForControls,this.trigger("zoomstart",{from:this._zoomStartValue,to:Q})),this._lastZoomForControls=Q),this.collisionEngine.update(W.camera)},10,{leading:!1,trailing:!0})),this.on("control-end",()=>{this._isZooming&&(this._isZooming=!1,this.trigger("zoomend",{from:this._zoomStartValue,to:this.getZoom()}))}),this._callOnLoadHooks()}static addOnLoadHook(e,...t){const n=typeof e=="function"?e:function(){this[e].apply(this,t)},r=this.prototype;return r._onLoadHooks=r._onLoadHooks||[],r._onLoadHooks.push(n),this}_callOnLoadHooks(){const e=zd.prototype;if(e._onLoadHooks)for(let t=0,n=e._onLoadHooks.length;t<n;t++)e._onLoadHooks[t].call(this)}getZoom(){const e=this.tilemap,t=e.getDataZoom(),r=e.getLayers().find(o=>o.isBaseLayer===!0)?.maxLevel??e.maxLevel;return t<r?t:r+this._overZoom}getDataZoom(){return this.tilemap.getDataZoom()}getMinZoom(){return this._minZoom}getMaxZoom(){return this._maxZoom}setZoomRange(e,t){if(e>t){const r=e;e=t,t=r}this._minZoom=e,this._maxZoom=t;const n=this.viewer.controls;if(n){const r=this._computeDistanceFromZoom(this._maxZoom),o=this._computeDistanceFromZoom(this._minZoom);n.minDistance=r,n.maxDistance=o}return this}setMinZoom(e){return this.setZoomRange(e,this._maxZoom)}setMaxZoom(e){return this.setZoomRange(this._minZoom,e)}setZoom(e){const t=this.getMinZoom(),n=this.getMaxZoom(),r=Math.max(t,Math.min(n,e)),o=this.getZoom(),l=this._computeDistanceFromZoom(r),u=this.viewer.controls,c=u?.target??this.prjcenter,d=this.viewer.camera,p=d.position.clone().sub(c).normalize();return d.position.copy(c).addScaledVector(p,l),d.updateProjectionMatrix(),typeof u?.update=="function"&&u.update(),this._lastZoomForControls=r,this.trigger("zoomend",{from:o,to:this.getZoom()}),this}zoomIn(e=1){return this.setZoom(this.getZoom()+e)}zoomOut(e=1){return this.setZoom(this.getZoom()-e)}_computeDistanceFromZoom(e){const t=this._ZOOM_MIN_CONST,n=this._ZOOM_MAX_CONST,r=this._minZoomDistance,o=this._maxZoomDistance;if(r<=0||r>=o){const p=Math.max(t,Math.min(n,e)),f=(n-p)/(n-t);return r+f*(o-r)}const u=(Math.max(t,Math.min(n,e))-t)/(n-t),c=r/o;return o*Math.pow(c,u)}initTileMap(e){const t=new Ei({...e});try{if(e.Baselayers?.length)for(const n of e.Baselayers)n.isBaseLayer=!0,t.addLayer(n)}catch(n){console.error("💥 诊断失败:",n)}return t.rotateX(-Math.PI/2),t.receiveShadow=!0,setTimeout(()=>{const n={timestamp:$p(),targrt:this};this._EventMap.loaded={listened:!0},this.trigger("loaded",n)},0),t}addLayer(e,...t){if(!e)return this;Array.isArray(e)||(e=[e]),t?.length&&(e=e.concat(t)),t?.length&&(e=e.concat(t));for(let n=0,r=e.length;n<r;n++){const o=e[n],l=o.getId();if($i(l))throw new Error("Invalid id for the layer: "+l);o.isTileLayer?this.addTileLayer(o):this.addRegularLayer(o)}return this}removeLayer(e){const t=this.tilemap.getLayer(e);if(t){if(t instanceof ra){const r=t._getRenderer();r&&this._layerContainer.remove(r)}return this.tilemap.removeLayer(e),!0}const n=this._layerContainer.getLayerById(e);return n?(this._layerContainer.remove(n),n instanceof zn&&n?._collision,!0):(console.warn(`⚠️ 图层不存在: ${e}`),!1)}addRegularLayer(e){const t=e.getId();this._layerContainer.add(e),e._bindMap(this),e instanceof zn&&e?._collision&&(this.collisionEngine.registerLayer(e),e.setCollisionEngine(this.collisionEngine)),console.log(`📁 普通图层已添加到场景: ${t}`)}addTileLayer(e){if(this.tilemap.addLayer(e),e._bindMap(this),e instanceof ra){const t=e.options||{},n=new Ro(e.getId()+"-vtrender",{altitude:e.getAltitude(),style:e.getStyle(),collision:e._collision,zIndex:typeof t.zIndex=="number"?t.zIndex:void 0,depthOffset:typeof t.depthOffset=="number"?t.depthOffset:void 0});e._setRenderer(n),this.addRegularLayer(n)}return this}clearLayers(){return this._layerContainer.clear(),this.tilemap.clearLayers(),this}getLayers(){const e=this._layerContainer.getLayers().filter(n=>!(n instanceof Ro)),t=this.tilemap.getLayers();return[...e,...t]}getLayerById(e){const t=this._layerContainer.getLayerById(e);return t?t instanceof Ro?void 0:t:this.tilemap.getLayer(e)}geo2world(e){return this.tilemap.geo2world(e)}world2geo(e){return this.tilemap.world2geo(e)}geo2map(e){return this.tilemap.geo2map(e)}_getCanvas(e=40,t=30,n){return this._canvasManager.getCanvas(e,t,1,n)}getContainer(){return this.viewer.container}getRenderer(){return this.viewer.renderer}getCamera(){return this.viewer.camera}_findFeaturesAt(e){const t=this,n=t.getRenderer(),r=t.getCamera(),o=n.domElement.getBoundingClientRect(),l=e.x/o.width*2-1,u=-(e.y/o.height)*2+1,c=new m.Raycaster;c.setFromCamera(new m.Vector2(l,u),r);const d=t.getLayers().filter(y=>!y?.isSceneLayer),f=c.intersectObjects(d,!0).map(y=>{let v=y.object,_=null;for(;v;){if(v instanceof _n){_=v;break}v=v.parent}return _?{feature:_,distance:y.distance,object:y.object}:null}).filter(y=>!!y);return f.length?f.sort((y,v)=>y.distance-v.distance):[]}getCenter(){const e=this.viewer.controls.target.clone(),t=this.world2geo(e);return[t.x,t.y,t.z]}_getEventPosition(e){let t,n;if("touches"in e){if(e.touches.length===0)return null;t=e.touches[0].clientX,n=e.touches[0].clientY}else t=e.clientX,n=e.clientY;const r=this.getContainer();if(!r)return null;const o=r.getBoundingClientRect();return{x:t-o.left,y:n-o.top}}get isInteracting(){return this.viewer.isInteracting}_getCameraDistance(){const e=this.viewer.controls,t=this.viewer.camera,n=e?.target??this.prjcenter;return e&&typeof e.getDistance=="function"?e.getDistance():t.position.distanceTo(n)}_getViewZoomRange(){const e=this.viewer.controls,t=typeof e?.minDistance=="number"?e.minDistance:this._minZoomDistance,n=typeof e?.maxDistance=="number"?e.maxDistance:this._maxZoomDistance;if(t<=0||t>=n){const f=this.tilemap.getDataZoom();return{min:f,max:f}}const r=n/t,o=Math.log2(r),l=this.tilemap.getLayers().find(f=>f.isBaseLayer===!0),u=l?.minLevel??this.tilemap.minLevel,c=l?.maxLevel??this.tilemap.maxLevel,d=u,p=c+o;return{min:d,max:p}}flyTo(e){this.viewer.flyToAdvanced(e)}flyToPoint(e){this.viewer.flyToPoint(e)}};ur.mergeOptions(pv);function tu(i,e,t){const{currentTarget:n,clientX:r,clientY:o}=i;if(n instanceof HTMLElement){const l=n.clientWidth,u=n.clientHeight,c=new m.Vector2(r/l*2-1,-(o/u)*2+1);return e.getLocalInfoFromScreen(t,c)?.location}else return}const mv=["click","dblclick","mousedown","mouseup","mousemove","mouseenter","mouseleave","mouseover","mouseout"];ur.prototype._removeDomEvents=function(){console.log("removeDomEvents",this)},ur.prototype._registerDomEvents=function(){const i=this.viewer.container;if(i){let t=null;mv.forEach(n=>{i.addEventListener(n,r=>{if(n==="mousedown"&&(t={x:r.clientX,y:r.clientY}),n==="click"&&t){const u=r.clientX-t.x,c=r.clientY-t.y;if(Math.sqrt(u*u+c*c)>5)return}let o=tu(r,this.tilemap,this.viewer.camera),l={target:this,originEvent:r,eventName:n,screenXY:{X:r.screenX,Y:r.screenY}};if(o){let u=[o.x,o.y,o.z];l={target:this,originEvent:r,coordinate:u,eventName:n,screenXY:{X:r.screenX,Y:r.screenY}}}this.trigger(n,l)})})}},ur.addOnLoadHook("_registerDomEvents");var gv=Object.defineProperty,yv=(i,e,t)=>e in i?gv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,nu=(i,e,t)=>yv(i,typeof e!="symbol"?e+"":e,t);const vv=["click","dblclick","mousedown","mouseup","mousemove","mouseenter","mouseleave","mouseover","mouseout","contextmenu","touchstart","touchmove","touchend"];class wv extends ic{constructor(){super(...arguments),nu(this,"_registeredEvents",[]),nu(this,"_eventCommon",e=>{(e.type==="mousedown"||e.type==="touchstart")&&(this._mouseDownTime=Date.now()),!(e.type==="click"&&Date.now()-this._mouseDownTime>300)&&this._handleEvent(e,e.type)})}addHooks(){const t=this.target.getContainer();t&&vv.forEach(n=>{t.addEventListener(n,this._eventCommon),this._registeredEvents.push(n)})}removeHooks(){const t=this.target.getContainer();t&&this._registeredEvents.length>0&&(this._registeredEvents.forEach(n=>{const r=n;t.removeEventListener(r,this._eventCommon)}),this._registeredEvents=[])}_handleEvent(e,t){const n=this.target;if(this._shouldIgnoreEvent()||(t==="mousemove"||t==="mouseenter"||t==="mouseleave"||t==="mouseover"||t==="mouseout"||t==="touchmove")&&!n.getLayers().some(c=>!c.isSceneLayer&&c._feaList?.length>0))return;const r=n._getEventPosition(e);if(!r)return;const o=n._findFeaturesAt(r);if(o.length===0)return;const l=o[0].feature;switch(t){case"click":this._handleClickEvent(l,e);break;case"mousemove":case"mouseenter":case"mouseleave":case"mouseover":case"mouseout":case"touchmove":this.handleMoveEvent(l,e);break;default:if(l){this._fireFeatureEvent(l,t,e);const u=l.getLayer();u&&u.trigger("feature"+t,{feature:l,domEvent:e,type:"feature"+t})}}}_handleClickEvent(e,t){if(!e)return;this._fireFeatureEvent(e,"click",t);const n=e.getLayer();n&&n.trigger("featureclick",{feature:e,domEvent:t,type:"featureclick"})}handleMoveEvent(e,t){if(!e)return;this._fireFeatureEvent(e,t.type,t);const n=e.getLayer();n&&n.trigger("feature"+t.type,{feature:e,domEvent:t,type:"feature"+t.type})}_fireFeatureEvent(e,t,n){const r=this.target;let o=n,l,u;if("touches"in n){const f=n.touches[0]||n.changedTouches[0];if(!f)return;o={currentTarget:n.currentTarget,clientX:f.clientX,clientY:f.clientY},l=f.screenX,u=f.screenY}else{const f=n;o=f,l=f.screenX,u=f.screenY}const c=tu(o,r.tilemap,r.viewer.camera);if(!c)return;const d=[c.x,c.y,c.z],p={target:e,originEvent:n,coordinate:d,eventName:t,screenXY:{X:l,Y:u}};e.trigger(t,p)}_shouldIgnoreEvent(){return!!this.target.isInteracting}}ur.mergeOptions({FeatureEvents:!0,onlyVisibleFeatureEvents:!0}),ur.addOnLoadHook("addHandler","FeatureEvents",wv);var _v=Object.defineProperty,bv=(i,e,t)=>e in i?_v(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,fn=(i,e,t)=>bv(i,typeof e!="symbol"?e+"":e,t);let xv=class{constructor(...e){}};const ru=class io extends Cr(Ir(xv)){constructor(e={}){super(e),fn(this,"_owner"),fn(this,"_map"),fn(this,"_worldPosition"),fn(this,"_coordinate"),fn(this,"_dom"),fn(this,"_visible",!1),fn(this,"_boundMapHandlers",new Map),fn(this,"_viewerUpdateHandler"),fn(this,"_positionedOnce",!1)}_getClassName(){return"UIComponent"}getOffset(){return{x:this.options.dx??0,y:this.options.dy??0}}addTo(e){if(!e)return this;this._owner=e;const t=typeof e.getMap=="function"?e.getMap():e;return t?(this._map=t,this._bindMapEvents(!0),this.options.single&&(io._singletons.forEach(n=>{n!==this&&n.options.single&&n._map===t&&n.hide()}),io._singletons.add(this)),this.onAdd&&this.onAdd(),this.trigger("add",{owner:e,map:t}),this):this}remove(){const e=this._map;return this.hideDom(),this._bindMapEvents(!1),this.options.single&&io._singletons.delete(this),this.onRemove&&this.onRemove(),this.trigger("remove",{owner:this._owner,map:e}),this._owner=void 0,this._map=void 0,this}show(e){const t=this._map??(this._owner&&typeof this._owner.getMap=="function"?this._owner.getMap():void 0);if(!t)return this;if(this._map=t,!this._dom){const n=this.buildOn();this._dom=n,n.style.position="absolute",typeof this.options.zIndex=="number"&&(n.style.zIndex=String(this.options.zIndex));const r=t.getContainer();if(!r)return this;r.appendChild(n)}return this._coordinate=e?[...e]:void 0,this._visible=!0,this._positionedOnce=!1,this._dom&&(this._dom.style.display="none"),this.trigger("show",{owner:this._owner,map:t}),this}hide(){return this._visible=!1,this._dom&&(this._dom.style.display="none"),this._coordinate=void 0,this.trigger("hide",{owner:this._owner,map:this._map}),this}hideDom(){return this._dom&&this._dom.parentElement&&(this._dom.parentElement.removeChild(this._dom),this.onDomRemove&&this.onDomRemove()),this._dom=void 0,this._visible=!1,this._coordinate=void 0,this}getMap(){return this._map}isVisible(){return this._visible}_bindMapEvents(e){const t=this._map;if(!t)return;const n=t,r=e?"on":"off",o=(l,u)=>{e?this._boundMapHandlers.set(l,u):this._boundMapHandlers.delete(l)};if(e){const l=()=>{this._visible&&this._updatePosition()};n[r]("control-change",l),o("control-change",l);const u=t.viewer;if(u&&!this._viewerUpdateHandler){const c=()=>{this._visible&&this._updatePosition()};this._viewerUpdateHandler=c,u.addEventListener("update",c)}}else{this._boundMapHandlers.forEach((u,c)=>{n[r](c,u)}),this._boundMapHandlers.clear();const l=t.viewer;l&&this._viewerUpdateHandler&&(l.removeEventListener("update",this._viewerUpdateHandler),this._viewerUpdateHandler=void 0)}}_resolveWorldPosition(){const e=this._map;if(!e)return;if(this._coordinate){const[n,r,o=0]=this._coordinate,l=new m.Vector3(n,r,o);return e.geo2world(l)}const t=this._owner;if(t&&t._geometry){const n=t._geometry;if(n&&(n.type==="Point"||n.type==="MultiPoint")){let r;if(n.type==="Point"?r=n.coordinates:n.type==="MultiPoint"&&Array.isArray(n.coordinates)&&n.coordinates.length>0&&(r=n.coordinates[0]),r&&r.length>=2){const o=new m.Vector3(r[0],r[1],r[2]??0);return e.geo2world(o)}}if(t._threeGeometry&&typeof t._threeGeometry.getWorldPosition=="function"){const r=new m.Vector3;if(t._threeGeometry.getWorldPosition(r),!(r.x===0&&r.y===0&&r.z===0))return r}if(t._position instanceof m.Vector3){const r=t._position;if(!(r.x===0&&r.y===0&&r.z===0))return r.clone()}}if(t&&typeof t.getWorldPosition=="function"){const n=new m.Vector3;return t.getWorldPosition(n),n}return e.prjcenter?.clone?.()??void 0}_updatePosition(){if(!this._dom||!this._map)return;if(this._visible){const d=this._resolveWorldPosition();if(!d){this._dom.style.display="none";return}this._worldPosition=d}if(!this._worldPosition)return;const e=this._map.viewer,t=e.camera,n=e.renderer,r=this._worldPosition.clone().project(t);if(r.x<-1.1||r.x>1.1||r.y<-1.1||r.y>1.1||r.z<-1||r.z>1){this._dom.style.display="none";return}const o=new m.Vector2;n.getSize(o);const l=(r.x*.5+.5)*o.width,u=(-r.y*.5+.5)*o.height,c=this.getOffset();if(this._dom.style.left=`${l+c.x}px`,this._dom.style.top=`${u+c.y}px`,!this._positionedOnce){this._positionedOnce=!0;return}this._dom.style.display=""}};fn(ru,"_singletons",new Set);let Lv=ru;var Mv=Object.defineProperty,Sv=(i,e,t)=>e in i?Mv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,iu=(i,e,t)=>Sv(i,typeof e!="symbol"?e+"":e,t);class su extends Lv{constructor(e){super({single:!0,...e}),iu(this,"_titleEl"),iu(this,"_contentEl")}_getClassName(){return"InfoWindow"}buildOn(){if(this.options.custom){let u;this.options.content instanceof HTMLElement?u=this.options.content:(u=document.createElement("div"),typeof this.options.content=="string"&&(u.innerHTML=this.options.content));const c=this.options.containerClass;return c&&(Array.isArray(c)?c:[c]).forEach(p=>{u.classList.add(p)}),this.options.minWidth&&(u.style.minWidth=`${this.options.minWidth}px`),this.options.minHeight&&(u.style.minHeight=`${this.options.minHeight}px`),this._titleEl=void 0,this._contentEl=u,u}const e=document.createElement("div");e.className="terra-infowindow";const t=this.options.containerClass;t&&(Array.isArray(t)?t:[t]).forEach(c=>{e.classList.add(c)}),typeof this.options.zIndex=="number"&&(e.style.zIndex=String(this.options.zIndex)),this.options.minWidth&&(e.style.minWidth=`${this.options.minWidth}px`),this.options.minHeight&&(e.style.minHeight=`${this.options.minHeight}px`);const n=document.createElement("div");n.className="terra-infowindow-header";const r=document.createElement("div");r.className="terra-infowindow-title",this.options.title&&(r.innerText=this.options.title);const o=document.createElement("span");o.className="terra-infowindow-close",o.innerHTML="×",o.title="关闭",o.addEventListener("click",u=>{u.stopPropagation(),u.preventDefault(),this.close()}),o.addEventListener("mousedown",u=>{u.preventDefault()}),o.style.cursor="pointer",o.style.userSelect="none",n.appendChild(r),n.appendChild(o);const l=document.createElement("div");return l.className="terra-infowindow-content",this.options.content instanceof HTMLElement?l.appendChild(this.options.content):typeof this.options.content=="string"&&(l.innerHTML=this.options.content),e.appendChild(n),e.appendChild(l),this._titleEl=r,this._contentEl=l,e}getOffset(){const e=super.getOffset(),t=this._dom;if(!t)return e;const n=t.offsetWidth,r=t.offsetHeight;return{x:e.x-n/2,y:e.y-r-10}}setTitle(e){return this.options.title=e,this._titleEl&&(this._titleEl.innerText=e??""),this}setContent(e){return this.options.content=e,this._contentEl?(this._contentEl.innerHTML="",e instanceof HTMLElement?this._contentEl.appendChild(e):this._contentEl.innerHTML=e,this):this}open(e){super.show(e);const t=this,n=()=>{!t._dom||!t._map||!t._visible||(t._positionedOnce=!0,t._updatePosition())},o=this.getMap()?.viewer;if(o&&typeof o.addEventListener=="function"){const l=()=>{o.removeEventListener("update",l),n()};o.addEventListener("update",l)}else requestAnimationFrame(n);return this}close(){return this.hide()}}_n.include({setInfoWindow(i){this.removeInfoWindow();let e;return i instanceof su?e=i:e=new su(i),this._infoWindow=e,this.getMap()&&e.addTo(this),this},getInfoWindow(){return this._infoWindow},openInfoWindow(i){const e=this._infoWindow;return e?(e.getMap()||this.getMap()&&e.addTo(this),requestAnimationFrame(()=>{e.open(i)}),this):this},closeInfoWindow(){return this._infoWindow&&this._infoWindow.close(),this},removeInfoWindow(){return this._infoWindow&&(this._infoWindow.remove(),this._infoWindow=void 0),this}});var Pv=Object.defineProperty,Tv=(i,e,t)=>e in i?Pv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,ia=(i,e,t)=>Tv(i,typeof e!="symbol"?e+"":e,t);class Zv{constructor(...e){}}class ou extends Cr(Ir(Zv)){constructor(e={}){super(e),ia(this,"_map"),ia(this,"_enabled",!1),ia(this,"_boundHandlers",new Map)}addTo(e){if(!e)return this;const t=e;return t._activeMapTool&&t._activeMapTool!==this&&t._activeMapTool.disable(),t._activeMapTool=this,this._map=e,this.onAdd&&this.onAdd(),this.enable(),this.trigger("add",{map:e}),this}getMap(){return this._map}enable(){return!this._map||this._enabled?this:(this._enabled=!0,this._bindEvents(),this.onEnable&&this.onEnable(),this.trigger("enable",{map:this._map}),this)}disable(){return!this._map||!this._enabled?this:(this._enabled=!1,this._unbindEvents(),this.onDisable&&this.onDisable(),this.trigger("disable",{map:this._map}),this)}isEnabled(){return!!this._enabled}remove(){if(!this._map)return this;this.disable();const e=this._map;return e._activeMapTool===this&&delete e._activeMapTool,this._map=void 0,this.trigger("remove"),this}_bindEvents(){const e=this._map;if(!e)return;const t=this.getEvents()||{};Object.keys(t).forEach(n=>{const r=t[n];if(!r)return;const o=l=>r.call(this,l);this._boundHandlers.set(n,o),e.on(n,o)})}_unbindEvents(){const e=this._map;e&&(this._boundHandlers.forEach((t,n)=>{e.off(n,t)}),this._boundHandlers.clear())}}var Gv=Object.defineProperty,Wv=(i,e,t)=>e in i?Gv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,wi=(i,e,t)=>Wv(i,typeof e!="symbol"?e+"":e,t);class Cv extends zn{constructor(e){super(e,{altitude:1})}validateFeature(e){return!!e}}const au={};class Fr extends ou{constructor(e){super(e),wi(this,"_modeDef"),wi(this,"_clickCoords",[]),wi(this,"_isDrawing",!1),wi(this,"_geometry"),wi(this,"_draftLayer"),this.options.once=this.options.once??!1,this._ensureMode()}static registerMode(e,t){au[e.toLowerCase()]=t}static getModeDefinition(e){return au[e.toLowerCase()]}getMode(){return(this.options.mode||"").toLowerCase()}setMode(e){return this._finishDrawingSilently(),this.options.mode=e,this._ensureMode(),this}setStyle(e){return e.geometryStyle!==void 0&&(this.options.geometryStyle=e.geometryStyle),Object.prototype.hasOwnProperty.call(e,"vertexStyle")&&(this.options.vertexStyle=e.vertexStyle??null),this}getEvents(){return{click:this._handleClick.bind(this),mousemove:this._handleMouseMove.bind(this),dblclick:this._handleDblClick.bind(this)}}onEnable(){this._ensureMode()}onDisable(){this._finishDrawingSilently(),this._destroyDraftLayer()}_ensureMode(){const e=this.getMode(),t=Fr.getModeDefinition(e);if(!t)throw new Error(`DrawTool: mode "${e}" 未注册,请先调用 DrawTool.registerMode`);this._modeDef=t}_handleClick(e){if(!this._modeDef||!e.coordinate)return;const t=e.coordinate,n=this._modeDef,r={...e,drawTool:this};this._isDrawing?(this._clickCoords.push(t),n.update(this._clickCoords,this._geometry,r),this.trigger("drawvertex",{coordinate:t,geometry:this._geometry,coords:[...this._clickCoords],originEvent:r})):(this._isDrawing=!0,this._clickCoords=[t],this._geometry=n.create(t,r),this.trigger("drawstart",{coordinate:t,geometry:this._geometry,coords:[...this._clickCoords],originEvent:r})),n.clickLimit&&this._clickCoords.length>=n.clickLimit&&this._finishDrawing(r)}_handleMouseMove(e){if(!this._modeDef||!this._isDrawing||!e.coordinate)return;const t=this._modeDef,n=[...this._clickCoords,e.coordinate],r={...e,drawTool:this};t.update(n,this._geometry,r),this.trigger("drawing",{coordinate:e.coordinate,geometry:this._geometry,coords:n,originEvent:r})}_handleDblClick(e){if(!this._modeDef||!this._isDrawing)return;const t={...e,drawTool:this};this._finishDrawing(t)}_finishDrawing(e){if(!this._modeDef||!this._isDrawing)return;const n=this._modeDef.generate(this._geometry,[...this._clickCoords]);this.trigger("drawend",{geometry:n,coords:[...this._clickCoords],originEvent:e}),this._isDrawing=!1,this._clickCoords=[],this._geometry=void 0,this.options.once&&this.disable()}_finishDrawingSilently(){this._isDrawing=!1,this._clickCoords=[],this._geometry=void 0}_getOrCreateDraftLayer(){if(this._draftLayer)return this._draftLayer;const e=this.getMap();if(!e)throw new Error("DrawTool: 尚未绑定地图,请先调用 addTo(map)");const t=`__draw_draft_${Date.now().toString(36)}`,n=new Cv(t);return e.addLayer(n),this._draftLayer=n,n}_destroyDraftLayer(){const e=this.getMap();e&&this._draftLayer&&e.removeLayer(this._draftLayer.getId()),this._draftLayer=void 0}}const Iv={actions:["click","mousemove"],create(i,e){const t=e.drawTool,n=t._getOrCreateDraftLayer(),r=Nn(t.options.geometryStyle,{type:"basic-point",size:10,color:"#00ffff"}),o={type:"Point",coordinates:i},l=new bn({geometry:o,style:r});return l.addTo(n),l.initializeGeometry(),{tool:t,draftLayer:n,draftMarker:l}},update(i,e,t){const n=e?.draftMarker;if(!n)return;const r=i[i.length-1];n._geometry={type:"Point",coordinates:r},n._position=n._coordsTransform(),n._toThreeJSGeometry&&n._toThreeJSGeometry()},generate(i,e){const t=i.tool;if(!e.length)return null;i.draftMarker&&(i.draftMarker._remove(),i.draftMarker=null);const n=Nn(t.options.geometryStyle,{type:"basic-point",size:10,color:"#00ffff"}),r=e[e.length-1];return new bn({geometry:{type:"Point",coordinates:r},style:n})},clickLimit:1},Vv={actions:["click","mousemove","dblclick"],create(i,e){const t=e.drawTool,n=t._getOrCreateDraftLayer(),r=Nn(t.options.geometryStyle,{type:"basic-line",color:"#ff0000",width:2}),o=t.options.vertexStyle===null?void 0:Nn(t.options.vertexStyle,{type:"basic-point",size:8,color:"#00ffff"}),l={type:"LineString",coordinates:[i]},u=new lr({geometry:l,style:r});u.addTo(n);const c=[];if(o){const d={type:"Point",coordinates:i},p=new bn({geometry:d,style:o});p.addTo(n),c.push(p)}return{tool:t,draftLayer:n,draftLine:u,draftAnchors:c,lineStyle:r,vertexStyle:o}},update(i,e,t){if(!e)return;const n=e.draftLayer;if(!i||i.length<2)return;e.draftLine&&(e.draftLine._remove(),e.draftLine=null);const r={type:"LineString",coordinates:i},o=new lr({geometry:r,style:e.lineStyle});if(o.addTo(n),e.draftLine=o,t.eventName==="click"&&e.vertexStyle){const u={type:"Point",coordinates:i[i.length-1]},c=new bn({geometry:u,style:e.vertexStyle});c.addTo(n),e.draftAnchors.push(c)}},generate(i,e){const t=i.tool;if(!e.length)return null;if(i.draftLine&&(i.draftLine._remove(),i.draftLine=null),Array.isArray(i.draftAnchors)){for(const o of i.draftAnchors)o?._remove();i.draftAnchors=[]}const n=Nn(t.options.geometryStyle,{type:"basic-line",color:"#ff0000",width:2});return new lr({geometry:{type:"LineString",coordinates:e},style:n})}},Av={actions:["click","mousemove","dblclick"],create(i,e){const t=e.drawTool,n=t._getOrCreateDraftLayer(),r=Nn(t.options.geometryStyle,{type:"basic-polygon",color:"#00ff00",opacity:.5}),o=t.options.vertexStyle===null?void 0:Nn(t.options.vertexStyle,{type:"basic-point",size:8,color:"#00ffff"}),l=[];if(o){const u={type:"Point",coordinates:i},c=new bn({geometry:u,style:o});c.addTo(n),c.initializeGeometry(),l.push(c)}return{tool:t,draftLayer:n,draftPolygon:null,draftEdgeLine:null,draftAnchors:l,polygonStyle:r,vertexStyle:o}},update(i,e,t){if(!e)return;const n=e.draftLayer;if(t.eventName==="click"&&e.vertexStyle){const p={type:"Point",coordinates:i[i.length-1]},f=new bn({geometry:p,style:e.vertexStyle});f.addTo(n),f.initializeGeometry(),e.draftAnchors.push(f)}if(!i||i.length<2){e.draftEdgeLine&&(e.draftEdgeLine._remove(),e.draftEdgeLine=null),e.draftPolygon&&(e.draftPolygon._remove(),e.draftPolygon=null);return}if(i.length===2){e.draftPolygon&&(e.draftPolygon._remove(),e.draftPolygon=null),e.draftEdgeLine&&(e.draftEdgeLine._remove(),e.draftEdgeLine=null);const d={type:"LineString",coordinates:i},p=e.polygonStyle?.config&&e.polygonStyle.config.color||"#00ff00",f=new Ot({type:"basic-line",color:p,width:2}),y=new lr({geometry:d,style:f});y.addTo(n),e.draftEdgeLine=y;return}e.draftEdgeLine&&(e.draftEdgeLine._remove(),e.draftEdgeLine=null);const r=i.slice(),o=r[0],l=r[r.length-1];(o[0]!==l[0]||o[1]!==l[1]||(o[2]||0)!==(l[2]||0))&&r.push(o),e.draftPolygon&&(e.draftPolygon._remove(),e.draftPolygon=null);const u={type:"Polygon",coordinates:[r]},c=new is({geometry:u,style:e.polygonStyle});c.addTo(n),e.draftPolygon=c},generate(i,e){const t=i.tool;if(e.length<3)return null;if(i.draftPolygon&&(i.draftPolygon._remove(),i.draftPolygon=null),i.draftEdgeLine&&(i.draftEdgeLine._remove(),i.draftEdgeLine=null),Array.isArray(i.draftAnchors)){for(const c of i.draftAnchors)c?._remove();i.draftAnchors=[]}const n=Nn(t.options.geometryStyle,{type:"basic-polygon",color:"#00ff00",opacity:.5}),r=e.slice(),o=r[0],l=r[r.length-1];return(o[0]!==l[0]||o[1]!==l[1]||(o[2]||0)!==(l[2]||0))&&r.push(o),new is({geometry:{type:"Polygon",coordinates:[r]},style:n})}};Fr.registerMode("point",Iv),Fr.registerMode("line",Vv),Fr.registerMode("polygon",Av);function Nn(i,e){return Ot.create(i||e)}var Fv=Object.defineProperty,Xv=(i,e,t)=>e in i?Fv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,$t=(i,e,t)=>Xv(i,typeof e!="symbol"?e+"":e,t);class Ov extends Et{constructor(e){if(super(e),$t(this,"dataType","image"),$t(this,"attribution","天地图"),$t(this,"token",""),$t(this,"style","img_w"),$t(this,"subdomains","01234"),$t(this,"url","https://t{s}.tianditu.gov.cn/DataServer?T={style}&x={x}&y={y}&l={z}&tk={token}"),Object.assign(this,e),!this.token)throw new Error("天地图访问令牌(token)是必填参数")}}class zv extends Et{constructor(e){if(super(e),$t(this,"dataType","quantized-mesh"),$t(this,"attribution","天地图"),$t(this,"token",""),$t(this,"subdomains","01234"),$t(this,"url","https://t{s}.tianditu.gov.cn/mapservice/swdx?T=elv_c&tk={token}&x={x}&y={y}&l={z}"),Object.assign(this,e),!this.token)throw new Error("天地图访问令牌(token)是必填参数")}}var Dv=Object.defineProperty,Kv=(i,e,t)=>e in i?Dv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,lu=(i,e,t)=>Kv(i,typeof e!="symbol"?e+"":e,t);class kv extends Et{constructor(e){super({...e,url:e.urlTemplate,isTMS:e.isTMS||!1}),lu(this,"minLevel",2),lu(this,"maxLevel",24)}getUrl(e,t,n){const r=this.isTMS?Math.pow(2,n)-1-t:t;return Ep(this.url,{...this,x:e,y:r,z:n,tileMatrix:n,tileRow:r,tileCol:e})}}var Rv=Object.defineProperty,Nv=(i,e,t)=>e in i?Rv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,xn=(i,e,t)=>Nv(i,typeof e!="symbol"?e+"":e,t);class Uv extends Et{constructor(e){super(e),xn(this,"dataType","image"),xn(this,"attribution","ArcGIS"),xn(this,"style","World_Imagery"),xn(this,"url","https://services.arcgisonline.com/arcgis/rest/services/{style}/MapServer/tile/{z}/{y}/{x}"),Object.assign(this,e)}}class Yv extends Et{constructor(e){super(e),xn(this,"dataType","lerc"),xn(this,"attribution","ArcGIS"),xn(this,"minLevel",6),xn(this,"maxLevel",13),xn(this,"url","https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer/tile/{z}/{y}/{x}"),Object.assign(this,e)}}var Bv=Object.defineProperty,jv=(i,e,t)=>e in i?Bv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,Xr=(i,e,t)=>jv(i,typeof e!="symbol"?e+"":e,t);class Jv extends Et{constructor(e){if(super(e),Xr(this,"token",""),Xr(this,"format","webp"),Xr(this,"style","cm2myr6qx001t01pi0sf7estf"),Xr(this,"attribution","MapBox"),Xr(this,"maxLevel",25),Xr(this,"url","https://api.mapbox.com/styles/v1/criska/cm2myr6qx001t01pi0sf7estf/tiles/256/{z}/{x}/{y}?access_token={token}&format={format}"),Object.assign(this,e),!this.token)throw new Error("MapBox访问令牌(token)是必填参数")}}var Qv=Object.defineProperty,Hv=(i,e,t)=>e in i?Qv(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,cu=(i,e,t)=>Hv(i,typeof e!="symbol"?e+"":e,t);class Ev extends Et{constructor(e){super(e),cu(this,"dataType","mvt"),cu(this,"style",{layer:[]}),Object.assign(this,e)}}var $v=Object.defineProperty,qv=(i,e,t)=>e in i?$v(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,_i=(i,e,t)=>qv(i,typeof e!="symbol"?e+"":e,t);class ew extends Et{constructor(e){super(e),_i(this,"dataType","VectorTile"),_i(this,"attribution","ArcGIS"),_i(this,"minLevel",1),_i(this,"maxLevel",21),_i(this,"url","https://api.maptiler.com/tiles/v3/{z}/{x}/{y}.pbf?key=uKYsZQZpm72WlbSgH9B7"),Object.assign(this,e)}}class tw extends zn{constructor(e,t){super(e,t)}validateFeature(e){return e._baseType==="Line"}}class nw extends zn{constructor(e,t){super(e,t)}validateFeature(e){return e._baseType==="Point"}}class rw extends zn{constructor(e,t){super(e,t)}validateFeature(e){return e._baseType==="Surface"}}var iw=Object.defineProperty,sw=(i,e,t)=>e in i?iw(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,ow=(i,e,t)=>sw(i,e+"",t);class aw extends zn{constructor(e,t){super(e,t),ow(this,"_clouds",null);const n=["texture"];for(const r of n)Hl(t,r);this._createClouds(t.texture)}async _createClouds(e){const t=await Ot._loadTexture(e),n=new mm({texture:t,material:m.MeshBasicMaterial});n.castShadow=!0,this._clouds=n}validateFeature(e){return e._type==="Cloud"}animate(e,t){this._clouds&&this._clouds.update(this.map.viewer.camera,t,e)}}var lw=Object.defineProperty,cw=(i,e,t)=>e in i?lw(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,uw=(i,e,t)=>cw(i,e+"",t);class hw extends Ac{constructor(e,t){super(e,t),uw(this,"layerType","raster")}createLoader(){const e=new ls;return Array.isArray(this.source)?e.imgSource=this.source:e.imgSource=[this.source],e}}var dw=Object.defineProperty,fw=(i,e,t)=>e in i?dw(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,ps=(i,e,t)=>fw(i,typeof e!="symbol"?e+"":e,t);class pw extends hw{constructor(e,t){super(e,t),ps(this,"layerType","wmts"),ps(this,"_layerName"),ps(this,"_style"),ps(this,"_matrixSet"),this._layerName=t.layerName,this._style=t.style||"default",this._matrixSet=t.matrixSet||"GoogleMapsCompatible"}get layerName(){return this._layerName}get style(){return this._style}get matrixSet(){return this._matrixSet}createLoader(){const e=new ls;return Array.isArray(this.source)?e.imgSource=this.source:e.imgSource=[this.source],e}update(e){this.loader&&super.update(e)}}console.log("%c✨ terra.gl V"+Kd+" ","color:rgb(255, 255, 255); font-weight: bold; background: linear-gradient(90deg, #ffb6c1, #ff69b4); padding: 5px; border-radius: 5px;"),q.ArcGisDemSource=Yv,q.ArcGisSource=Uv,q.CloudsLayer=aw,q.DrawTool=Fr,q.EventClass=Go,q.ICloud=Wc,q.Label=Cc,q.LineLayer=tw,q.LineString=lr,q.LoaderFactory=Fe,q.MVTGeoSource=ew,q.MVTSource=Ev,q.Maker=bn,q.Map=ur,q.MapBoxSource=Jv,q.MapTool=ou,q.Martini=Dc,q.Model=Gc,q.MultiLineString=Zc,q.PointLayer=nw,q.Polygon=is,q.PolygonLayer=rw,q.ProjectFactory=Up,q.PromiseWorker=Pg,q.Style=Ot,q.TDTQMSource=zv,q.TDTSource=Ov,q.TPoints=Vc,q.Tile=Xn,q.TileCanvasLoader=Jg,q.TileGeometry=Vr,q.TileGeometryLoader=Jo,q.TileLoader=ls,q.TileLoadingManager=Fc,q.TileMap=Ei,q.TileMaterial=Qo,q.TileMaterialLoader=Ho,q.TileSource=Et,q.VectorFeatureTypes=tt,q.VectorTileLayer=ra,q.VectorTileRender=kc,q.Viewer=El,q.WMTSSource=kv,q.WMTSTileLayer=pw,q.addSkirt=Oc,q.author=iy,q.concatenateTypedArrays=yi,q.convertGeometryToWGS84=Gg,q.createBillboards=Bp,q.getBoundsCoord=No,q.getGeometryDataFromDem=zc,q.getGridIndices=Bo,q.getLocalInfoFromRay=To,q.getLocalInfoFromScreen=nc,q.getLocalInfoFromWorld=Zo,q.getNormals=jo,q.getSafeTileUrlAndBounds=Uo,q.registerDEMLoader=qo,q.registerImgLoader=$o,q.registerMeshLoader=Uc,q.vector2ToWGS84=Yo,q.version=ry,q.waitFor=sy,Object.defineProperty(q,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@terra.gl/core",
3
- "version": "0.0.1-alpha.32",
3
+ "version": "0.0.1-alpha.34",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"