胶州空管前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

2 lines
3.1 MiB

!function(){"use strict";var e,t,i,r=window.CLOUD=window.CLOUD||{};e=1,t=1,function(e){function t(r){if(i[r])return i[r].exports;var n=i[r]={exports:{},id:r,loaded:!1};return e[r].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var i={};t.m=e,t.c=i,t.p="",t(0)}([function(e,t,i){i(1),i(50),i(51),i(52),i(54),i(55),i(58),i(59),i(60),i(61),i(62),i(63),i(64),i(65),i(66),i(68),i(70),i(72),i(74),i(77),i(78),i(79),i(83),i(86),i(87),i(88),i(89),i(91),i(92),i(93),i(94),i(95),i(97),i(99),i(100),i(101),i(103),i(104),i(105),i(107),i(108),i(109),i(111),i(112),i(113),i(114),i(115),i(116),i(117),i(118),i(119),i(120),i(121),i(122),i(123),i(124),i(126),i(130),i(131),i(132),i(133),i(137),i(139),i(140),i(141),i(142),i(143),i(144),i(145),i(146),i(147),i(148),i(149),i(150),i(151),i(152),i(158),i(159),i(161),i(162),i(163),i(167),i(168),i(169),i(170),i(171),i(173),i(174),i(175),i(176),i(179),i(181),i(182),i(183),i(185),i(187),i(189),i(190),i(191),i(193),i(194),i(195),i(196),i(203),i(206),i(207),i(209),i(210),i(211),i(212),i(213),i(214),i(215),i(216),i(217),i(218),i(219),i(220),i(222),i(223),i(224),i(225),i(226),i(227),i(228),i(229),i(231),i(234),i(235),i(237),i(238),i(239),i(240),i(241),i(242),i(243),i(244),i(245),i(246),i(247),i(249),i(250),i(251),i(252),i(253),i(254),i(255),i(256),i(258),i(259),i(261),i(262),i(263),i(264),i(267),i(268),i(269),i(270),i(271),i(272),i(273),i(274),i(276),i(277),i(278),i(279),i(280),i(281),i(282),i(283),i(284),i(285),i(286),i(287),i(288),i(291),i(156),i(293),i(292),i(294),i(295),i(296),i(297),i(298),i(300),i(301),i(302),i(304),e.exports=i(305)},function(e,t,r){var n=r(2),a=r(3),s=r(4),o=r(6),l=r(16),d=r(20).KEY,h=r(5),c=r(21),u=r(22),p=r(17),m=r(23),f=r(24),g=r(25),v=r(27),y=r(40),M=r(43),E=r(10),b=r(30),x=r(14),I=r(15),T=r(44),C=r(47),w=r(49),S=r(9),A=r(28),B=w.f,R=S.f,D=C.f,O=n.Symbol,L=n.JSON,P=L&&L.stringify,N="prototype",H=m("_hidden"),F=m("toPrimitive"),k={}.propertyIsEnumerable,U=c("symbol-registry"),G=c("symbols"),z=c("op-symbols"),V=Object[N],j="function"==typeof O,_=n.QObject,W=!_||!_[N]||!_[N].findChild,Y=s&&h((function(){return 7!=T(R({},"a",{get:function(){return R(this,"a",{value:7}).a}})).a}))?function(e,t,i){var r=B(V,t);r&&delete V[t],R(e,t,i),r&&e!==V&&R(V,t,r)}:R,Z=function(e){var t=G[e]=T(O[N]);return t._k=e,t},Q=j&&"symbol"==typeof O.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof O},J=function(e,t,i){return e===V&&J(z,t,i),E(e),t=x(t,!0),E(i),a(G,t)?(i.enumerable?(a(e,H)&&e[H][t]&&(e[H][t]=!1),i=T(i,{enumerable:I(0,!1)})):(a(e,H)||R(e,H,I(1,{})),e[H][t]=!0),Y(e,t,i)):R(e,t,i)},X=function(e,t){E(e);for(var i,r=y(t=b(t)),n=0,a=r.length;a>n;)J(e,i=r[n++],t[i]);return e},K=function(e){var t=k.call(this,e=x(e,!0));return!(this===V&&a(G,e)&&!a(z,e))&&(!(t||!a(this,e)||!a(G,e)||a(this,H)&&this[H][e])||t)},q=function(e,t){if(e=b(e),t=x(t,!0),e!==V||!a(G,t)||a(z,t)){var i=B(e,t);return!i||!a(G,t)||a(e,H)&&e[H][t]||(i.enumerable=!0),i}},$=function(e){for(var t,i=D(b(e)),r=[],n=0;i.length>n;)a(G,t=i[n++])||t==H||t==d||r.push(t);return r},ee=function(e){for(var t,i=e===V,r=D(i?z:b(e)),n=[],s=0;r.length>s;)!a(G,t=r[s++])||i&&!a(V,t)||n.push(G[t]);return n};j||(l((O=function(){if(this instanceof O)throw TypeError("Symbol is not a constructor!");var e=p(arguments.length>0?arguments[0]:i),t=function(i){this===V&&t.call(z,i),a(this,H)&&a(this[H],e)&&(this[H][e]=!1),Y(this,e,I(1,i))};return s&&W&&Y(V,e,{configurable:!0,set:t}),Z(e)})[N],"toString",(function(){return this._k})),w.f=q,S.f=J,r(48).f=C.f=$,r(42).f=K,r(41).f=ee,s&&!r(26)&&l(V,"propertyIsEnumerable",K,!0),f.f=function(e){return Z(m(e))}),o(o.G+o.W+o.F*!j,{Symbol:O});for(var te="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ie=0;te.length>ie;)m(te[ie++]);for(te=A(m.store),ie=0;te.length>ie;)g(te[ie++]);o(o.S+o.F*!j,"Symbol",{for:function(e){return a(U,e+="")?U[e]:U[e]=O(e)},keyFor:function(e){if(Q(e))return v(U,e);throw TypeError(e+" is not a symbol!")},useSetter:function(){W=!0},useSimple:function(){W=!1}}),o(o.S+o.F*!j,"Object",{create:function(e,t){return t===i?T(e):X(T(e),t)},defineProperty:J,defineProperties:X,getOwnPropertyDescriptor:q,getOwnPropertyNames:$,getOwnPropertySymbols:ee}),L&&o(o.S+o.F*(!j||h((function(){var e=O();return"[null]"!=P([e])||"{}"!=P({a:e})||"{}"!=P(Object(e))}))),"JSON",{stringify:function(e){if(e!==i&&!Q(e)){for(var t,r,n=[e],a=1;arguments.length>a;)n.push(arguments[a++]);return"function"==typeof(t=n[1])&&(r=t),!r&&M(t)||(t=function(e,t){if(r&&(t=r.call(this,e,t)),!Q(t))return t}),n[1]=t,P.apply(L,n)}}}),O[N][F]||r(8)(O[N],F,O[N].valueOf),u(O,"Symbol"),u(Math,"Math",!0),u(n.JSON,"JSON",!0)},function(e,i){var r=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof t&&(t=r)},function(e,t){var i={}.hasOwnProperty;e.exports=function(e,t){return i.call(e,t)}},function(e,t,i){e.exports=!i(5)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,r){var n=r(2),a=r(7),s=r(8),o=r(16),l=r(18),d="prototype",h=function(e,t,r){var c,u,p,m,f=e&h.F,g=e&h.G,v=e&h.S,y=e&h.P,M=e&h.B,E=g?n:v?n[t]||(n[t]={}):(n[t]||{})[d],b=g?a:a[t]||(a[t]={}),x=b[d]||(b[d]={});for(c in g&&(r=t),r)p=((u=!f&&E&&E[c]!==i)?E:r)[c],m=M&&u?l(p,n):y&&"function"==typeof p?l(Function.call,p):p,E&&o(E,c,p,e&h.U),b[c]!=p&&s(b,c,m),y&&x[c]!=p&&(x[c]=p)};n.core=a,h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,h.U=64,h.R=128,e.exports=h},function(t,i){var r=t.exports={version:"2.4.0"};"number"==typeof e&&(e=r)},function(e,t,i){var r=i(9),n=i(15);e.exports=i(4)?function(e,t,i){return r.f(e,t,n(1,i))}:function(e,t,i){return e[t]=i,e}},function(e,t,i){var r=i(10),n=i(12),a=i(14),s=Object.defineProperty;t.f=i(4)?Object.defineProperty:function(e,t,i){if(r(e),t=a(t,!0),r(i),n)try{return s(e,t,i)}catch(e){}if("get"in i||"set"in i)throw TypeError("Accessors not supported!");return"value"in i&&(e[t]=i.value),e}},function(e,t,i){var r=i(11);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,i){e.exports=!i(4)&&!i(5)((function(){return 7!=Object.defineProperty(i(13)("div"),"a",{get:function(){return 7}}).a}))},function(e,t,i){var r=i(11),n=i(2).document,a=r(n)&&r(n.createElement);e.exports=function(e){return a?n.createElement(e):{}}},function(e,t,i){var r=i(11);e.exports=function(e,t){if(!r(e))return e;var i,n;if(t&&"function"==typeof(i=e.toString)&&!r(n=i.call(e)))return n;if("function"==typeof(i=e.valueOf)&&!r(n=i.call(e)))return n;if(!t&&"function"==typeof(i=e.toString)&&!r(n=i.call(e)))return n;throw TypeError("Can't convert object to primitive value")}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,i){var r=i(2),n=i(8),a=i(3),s=i(17)("src"),o="toString",l=Function[o],d=(""+l).split(o);i(7).inspectSource=function(e){return l.call(e)},(e.exports=function(e,t,i,o){var l="function"==typeof i;l&&(a(i,"name")||n(i,"name",t)),e[t]!==i&&(l&&(a(i,s)||n(i,s,e[t]?""+e[t]:d.join(String(t)))),e===r?e[t]=i:o?e[t]?e[t]=i:n(e,t,i):(delete e[t],n(e,t,i)))})(Function.prototype,o,(function(){return"function"==typeof this&&this[s]||l.call(this)}))},function(e,t){var r=0,n=Math.random();e.exports=function(e){return"Symbol(".concat(e===i?"":e,")_",(++r+n).toString(36))}},function(e,t,r){var n=r(19);e.exports=function(e,t,r){if(n(e),t===i)return e;switch(r){case 1:return function(i){return e.call(t,i)};case 2:return function(i,r){return e.call(t,i,r)};case 3:return function(i,r,n){return e.call(t,i,r,n)}}return function(){return e.apply(t,arguments)}}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t,i){var r=i(17)("meta"),n=i(11),a=i(3),s=i(9).f,o=0,l=Object.isExtensible||function(){return!0},d=!i(5)((function(){return l(Object.preventExtensions({}))})),h=function(e){s(e,r,{value:{i:"O"+ ++o,w:{}}})},c=e.exports={KEY:r,NEED:!1,fastKey:function(e,t){if(!n(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!a(e,r)){if(!l(e))return"F";if(!t)return"E";h(e)}return e[r].i},getWeak:function(e,t){if(!a(e,r)){if(!l(e))return!0;if(!t)return!1;h(e)}return e[r].w},onFreeze:function(e){return d&&c.NEED&&l(e)&&!a(e,r)&&h(e),e}}},function(e,t,i){var r=i(2),n="__core-js_shared__",a=r[n]||(r[n]={});e.exports=function(e){return a[e]||(a[e]={})}},function(e,t,i){var r=i(9).f,n=i(3),a=i(23)("toStringTag");e.exports=function(e,t,i){e&&!n(e=i?e:e.prototype,a)&&r(e,a,{configurable:!0,value:t})}},function(e,t,i){var r=i(21)("wks"),n=i(17),a=i(2).Symbol,s="function"==typeof a;(e.exports=function(e){return r[e]||(r[e]=s&&a[e]||(s?a:n)("Symbol."+e))}).store=r},function(e,t,i){t.f=i(23)},function(e,t,i){var r=i(2),n=i(7),a=i(26),s=i(24),o=i(9).f;e.exports=function(e){var t=n.Symbol||(n.Symbol=a?{}:r.Symbol||{});"_"==e.charAt(0)||e in t||o(t,e,{value:s.f(e)})}},function(e,t){e.exports=!1},function(e,t,i){var r=i(28),n=i(30);e.exports=function(e,t){for(var i,a=n(e),s=r(a),o=s.length,l=0;o>l;)if(a[i=s[l++]]===t)return i}},function(e,t,i){var r=i(29),n=i(39);e.exports=Object.keys||function(e){return r(e,n)}},function(e,t,i){var r=i(3),n=i(30),a=i(34)(!1),s=i(38)("IE_PROTO");e.exports=function(e,t){var i,o=n(e),l=0,d=[];for(i in o)i!=s&&r(o,i)&&d.push(i);for(;t.length>l;)r(o,i=t[l++])&&(~a(d,i)||d.push(i));return d}},function(e,t,i){var r=i(31),n=i(33);e.exports=function(e){return r(n(e))}},function(e,t,i){var r=i(32);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,t){var i={}.toString;e.exports=function(e){return i.call(e).slice(8,-1)}},function(e,t){e.exports=function(e){if(e==i)throw TypeError("Can't call method on "+e);return e}},function(e,t,i){var r=i(30),n=i(35),a=i(37);e.exports=function(e){return function(t,i,s){var o,l=r(t),d=n(l.length),h=a(s,d);if(e&&i!=i){for(;d>h;)if((o=l[h++])!=o)return!0}else for(;d>h;h++)if((e||h in l)&&l[h]===i)return e||h||0;return!e&&-1}}},function(e,t,i){var r=i(36),n=Math.min;e.exports=function(e){return e>0?n(r(e),9007199254740991):0}},function(e,t){var i=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:i)(e)}},function(e,t,i){var r=i(36),n=Math.max,a=Math.min;e.exports=function(e,t){return(e=r(e))<0?n(e+t,0):a(e,t)}},function(e,t,i){var r=i(21)("keys"),n=i(17);e.exports=function(e){return r[e]||(r[e]=n(e))}},function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t,i){var r=i(28),n=i(41),a=i(42);e.exports=function(e){var t=r(e),i=n.f;if(i)for(var s,o=i(e),l=a.f,d=0;o.length>d;)l.call(e,s=o[d++])&&t.push(s);return t}},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t){t.f={}.propertyIsEnumerable},function(e,t,i){var r=i(32);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,t,r){var n=r(10),a=r(45),s=r(39),o=r(38)("IE_PROTO"),l=function(){},d="prototype",h=function(){var e,t=r(13)("iframe"),i=s.length;for(t.style.display="none",r(46).appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),h=e.F;i--;)delete h[d][s[i]];return h()};e.exports=Object.create||function(e,t){var r;return null!==e?(l[d]=n(e),r=new l,l[d]=null,r[o]=e):r=h(),t===i?r:a(r,t)}},function(e,t,i){var r=i(9),n=i(10),a=i(28);e.exports=i(4)?Object.defineProperties:function(e,t){n(e);for(var i,s=a(t),o=s.length,l=0;o>l;)r.f(e,i=s[l++],t[i]);return e}},function(e,t,i){e.exports=i(2).document&&document.documentElement},function(e,t,i){var r=i(30),n=i(48).f,a={}.toString,s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return s&&"[object Window]"==a.call(e)?function(e){try{return n(e)}catch(e){return s.slice()}}(e):n(r(e))}},function(e,t,i){var r=i(29),n=i(39).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,n)}},function(e,t,i){var r=i(42),n=i(15),a=i(30),s=i(14),o=i(3),l=i(12),d=Object.getOwnPropertyDescriptor;t.f=i(4)?d:function(e,t){if(e=a(e),t=s(t,!0),l)try{return d(e,t)}catch(e){}if(o(e,t))return n(!r.f.call(e,t),e[t])}},function(e,t,i){var r=i(6);r(r.S+r.F*!i(4),"Object",{defineProperty:i(9).f})},function(e,t,i){var r=i(6);r(r.S+r.F*!i(4),"Object",{defineProperties:i(45)})},function(e,t,i){var r=i(30),n=i(49).f;i(53)("getOwnPropertyDescriptor",(function(){return function(e,t){return n(r(e),t)}}))},function(e,t,i){var r=i(6),n=i(7),a=i(5);e.exports=function(e,t){var i=(n.Object||{})[e]||Object[e],s={};s[e]=t(i),r(r.S+r.F*a((function(){i(1)})),"Object",s)}},function(e,t,i){var r=i(6);r(r.S,"Object",{create:i(44)})},function(e,t,i){var r=i(56),n=i(57);i(53)("getPrototypeOf",(function(){return function(e){return n(r(e))}}))},function(e,t,i){var r=i(33);e.exports=function(e){return Object(r(e))}},function(e,t,i){var r=i(3),n=i(56),a=i(38)("IE_PROTO"),s=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=n(e),r(e,a)?e[a]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?s:null}},function(e,t,i){var r=i(56),n=i(28);i(53)("keys",(function(){return function(e){return n(r(e))}}))},function(e,t,i){i(53)("getOwnPropertyNames",(function(){return i(47).f}))},function(e,t,i){var r=i(11),n=i(20).onFreeze;i(53)("freeze",(function(e){return function(t){return e&&r(t)?e(n(t)):t}}))},function(e,t,i){var r=i(11),n=i(20).onFreeze;i(53)("seal",(function(e){return function(t){return e&&r(t)?e(n(t)):t}}))},function(e,t,i){var r=i(11),n=i(20).onFreeze;i(53)("preventExtensions",(function(e){return function(t){return e&&r(t)?e(n(t)):t}}))},function(e,t,i){var r=i(11);i(53)("isFrozen",(function(e){return function(t){return!r(t)||!!e&&e(t)}}))},function(e,t,i){var r=i(11);i(53)("isSealed",(function(e){return function(t){return!r(t)||!!e&&e(t)}}))},function(e,t,i){var r=i(11);i(53)("isExtensible",(function(e){return function(t){return!!r(t)&&(!e||e(t))}}))},function(e,t,i){var r=i(6);r(r.S+r.F,"Object",{assign:i(67)})},function(e,t,i){var r=i(28),n=i(41),a=i(42),s=i(56),o=i(31),l=Object.assign;e.exports=!l||i(5)((function(){var e={},t={},i=Symbol(),r="abcdefghijklmnopqrst";return e[i]=7,r.split("").forEach((function(e){t[e]=e})),7!=l({},e)[i]||Object.keys(l({},t)).join("")!=r}))?function(e,t){for(var i=s(e),l=arguments.length,d=1,h=n.f,c=a.f;l>d;)for(var u,p=o(arguments[d++]),m=h?r(p).concat(h(p)):r(p),f=m.length,g=0;f>g;)c.call(p,u=m[g++])&&(i[u]=p[u]);return i}:l},function(e,t,i){var r=i(6);r(r.S,"Object",{is:i(69)})},function(e,t){e.exports=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}},function(e,t,i){var r=i(6);r(r.S,"Object",{setPrototypeOf:i(71).set})},function(e,t,r){var n=r(11),a=r(10),s=function(e,t){if(a(e),!n(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,i){try{(i=r(18)(Function.call,r(49).f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,r){return s(e,r),t?e.__proto__=r:i(e,r),e}}({},!1):i),check:s}},function(e,t,i){var r=i(73),n={};n[i(23)("toStringTag")]="z",n+""!="[object z]"&&i(16)(Object.prototype,"toString",(function(){return"[object "+r(this)+"]"}),!0)},function(e,t,r){var n=r(32),a=r(23)("toStringTag"),s="Arguments"==n(function(){return arguments}());e.exports=function(e){var t,r,o;return e===i?"Undefined":null===e?"Null":"string"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),a))?r:s?n(t):"Object"==(o=n(t))&&"function"==typeof t.callee?"Arguments":o}},function(e,t,i){var r=i(6);r(r.P,"Function",{bind:i(75)})},function(e,t,i){var r=i(19),n=i(11),a=i(76),s=[].slice,o={},l=function(e,t,i){if(!(t in o)){for(var r=[],n=0;n<t;n++)r[n]="a["+n+"]";o[t]=Function("F,a","return new F("+r.join(",")+")")}return o[t](e,i)};e.exports=Function.bind||function(e){var t=r(this),i=s.call(arguments,1),o=function(){var r=i.concat(s.call(arguments));return this instanceof o?l(t,r.length,r):a(t,r,e)};return n(t.prototype)&&(o.prototype=t.prototype),o}},function(e,t){e.exports=function(e,t,r){var n=r===i;switch(t.length){case 0:return n?e():e.call(r);case 1:return n?e(t[0]):e.call(r,t[0]);case 2:return n?e(t[0],t[1]):e.call(r,t[0],t[1]);case 3:return n?e(t[0],t[1],t[2]):e.call(r,t[0],t[1],t[2]);case 4:return n?e(t[0],t[1],t[2],t[3]):e.call(r,t[0],t[1],t[2],t[3])}return e.apply(r,t)}},function(e,t,i){var r=i(9).f,n=i(15),a=i(3),s=Function.prototype,o=/^\s*function ([^ (]*)/,l="name",d=Object.isExtensible||function(){return!0};l in s||i(4)&&r(s,l,{configurable:!0,get:function(){try{var e=this,t=(""+e).match(o)[1];return a(e,l)||!d(e)||r(e,l,n(5,t)),t}catch(e){return""}}})},function(e,t,i){var r=i(11),n=i(57),a=i(23)("hasInstance"),s=Function.prototype;a in s||i(9).f(s,a,{value:function(e){if("function"!=typeof this||!r(e))return!1;if(!r(this.prototype))return e instanceof this;for(;e=n(e);)if(this.prototype===e)return!0;return!1}})},function(e,t,i){var r=i(2),n=i(3),a=i(32),s=i(80),o=i(14),l=i(5),d=i(48).f,h=i(49).f,c=i(9).f,u=i(81).trim,p="Number",m=r[p],f=m,g=m.prototype,v=a(i(44)(g))==p,y="trim"in String.prototype,M=function(e){var t=o(e,!1);if("string"==typeof t&&t.length>2){var i,r,n,a=(t=y?t.trim():u(t,3)).charCodeAt(0);if(43===a||45===a){if(88===(i=t.charCodeAt(2))||120===i)return NaN}else if(48===a){switch(t.charCodeAt(1)){case 66:case 98:r=2,n=49;break;case 79:case 111:r=8,n=55;break;default:return+t}for(var s,l=t.slice(2),d=0,h=l.length;d<h;d++)if((s=l.charCodeAt(d))<48||s>n)return NaN;return parseInt(l,r)}}return+t};if(!m(" 0o1")||!m("0b1")||m("+0x1")){m=function(e){var t=arguments.length<1?0:e,i=this;return i instanceof m&&(v?l((function(){g.valueOf.call(i)})):a(i)!=p)?s(new f(M(t)),i,m):M(t)};for(var E,b=i(4)?d(f):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),x=0;b.length>x;x++)n(f,E=b[x])&&!n(m,E)&&c(m,E,h(f,E));m.prototype=g,g.constructor=m,i(16)(r,p,m)}},function(e,t,i){var r=i(11),n=i(71).set;e.exports=function(e,t,i){var a,s=t.constructor;return s!==i&&"function"==typeof s&&(a=s.prototype)!==i.prototype&&r(a)&&n&&n(e,a),e}},function(e,t,i){var r=i(6),n=i(33),a=i(5),s=i(82),o="["+s+"]",l=RegExp("^"+o+o+"*"),d=RegExp(o+o+"*$"),h=function(e,t,i){var n={},o=a((function(){return!!s[e]()||"…"!="…"[e]()})),l=n[e]=o?t(c):s[e];i&&(n[i]=l),r(r.P+r.F*o,"String",n)},c=h.trim=function(e,t){return e=String(n(e)),1&t&&(e=e.replace(l,"")),2&t&&(e=e.replace(d,"")),e};e.exports=h},function(e,t){e.exports="\t\n\v\f\r    \u2028\u2029\ufeff"},function(e,t,i){var r=i(6),n=i(36),a=i(84),s=i(85),o=1..toFixed,l=Math.floor,d=[0,0,0,0,0,0],h="Number.toFixed: incorrect invocation!",c="0",u=function(e,t){for(var i=-1,r=t;++i<6;)r+=e*d[i],d[i]=r%1e7,r=l(r/1e7)},p=function(e){for(var t=6,i=0;--t>=0;)i+=d[t],d[t]=l(i/e),i=i%e*1e7},m=function(){for(var e=6,t="";--e>=0;)if(""!==t||0===e||0!==d[e]){var i=String(d[e]);t=""===t?i:t+s.call(c,7-i.length)+i}return t},f=function(e,t,i){return 0===t?i:t%2==1?f(e,t-1,i*e):f(e*e,t/2,i)};r(r.P+r.F*(!!o&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!i(5)((function(){o.call({})}))),"Number",{toFixed:function(e){var t,i,r,o,l=a(this,h),d=n(e),g="",v=c;if(d<0||d>20)throw RangeError(h);if(l!=l)return"NaN";if(l<=-1e21||l>=1e21)return String(l);if(l<0&&(g="-",l=-l),l>1e-21)if(t=function(e){for(var t=0,i=e;i>=4096;)t+=12,i/=4096;for(;i>=2;)t+=1,i/=2;return t}(l*f(2,69,1))-69,i=t<0?l*f(2,-t,1):l/f(2,t,1),i*=4503599627370496,(t=52-t)>0){for(u(0,i),r=d;r>=7;)u(1e7,0),r-=7;for(u(f(10,r,1),0),r=t-1;r>=23;)p(1<<23),r-=23;p(1<<r),u(1,1),p(2),v=m()}else u(0,i),u(1<<-t,0),v=m()+s.call(c,d);return v=d>0?g+((o=v.length)<=d?"0."+s.call(c,d-o)+v:v.slice(0,o-d)+"."+v.slice(o-d)):g+v}})},function(e,t,i){var r=i(32);e.exports=function(e,t){if("number"!=typeof e&&"Number"!=r(e))throw TypeError(t);return+e}},function(e,t,i){var r=i(36),n=i(33);e.exports=function(e){var t=String(n(this)),i="",a=r(e);if(a<0||a==1/0)throw RangeError("Count can't be negative");for(;a>0;(a>>>=1)&&(t+=t))1&a&&(i+=t);return i}},function(e,t,r){var n=r(6),a=r(5),s=r(84),o=1..toPrecision;n(n.P+n.F*(a((function(){return"1"!==o.call(1,i)}))||!a((function(){o.call({})}))),"Number",{toPrecision:function(e){var t=s(this,"Number#toPrecision: incorrect invocation!");return e===i?o.call(t):o.call(t,e)}})},function(e,t,i){var r=i(6);r(r.S,"Number",{EPSILON:Math.pow(2,-52)})},function(e,t,i){var r=i(6),n=i(2).isFinite;r(r.S,"Number",{isFinite:function(e){return"number"==typeof e&&n(e)}})},function(e,t,i){var r=i(6);r(r.S,"Number",{isInteger:i(90)})},function(e,t,i){var r=i(11),n=Math.floor;e.exports=function(e){return!r(e)&&isFinite(e)&&n(e)===e}},function(e,t,i){var r=i(6);r(r.S,"Number",{isNaN:function(e){return e!=e}})},function(e,t,i){var r=i(6),n=i(90),a=Math.abs;r(r.S,"Number",{isSafeInteger:function(e){return n(e)&&a(e)<=9007199254740991}})},function(e,t,i){var r=i(6);r(r.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},function(e,t,i){var r=i(6);r(r.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},function(e,t,i){var r=i(6),n=i(96);r(r.S+r.F*(Number.parseFloat!=n),"Number",{parseFloat:n})},function(e,t,i){var r=i(2).parseFloat,n=i(81).trim;e.exports=1/r(i(82)+"-0")!=-1/0?function(e){var t=n(String(e),3),i=r(t);return 0===i&&"-"==t.charAt(0)?-0:i}:r},function(e,t,i){var r=i(6),n=i(98);r(r.S+r.F*(Number.parseInt!=n),"Number",{parseInt:n})},function(e,t,i){var r=i(2).parseInt,n=i(81).trim,a=i(82),s=/^[\-+]?0[xX]/;e.exports=8!==r(a+"08")||22!==r(a+"0x16")?function(e,t){var i=n(String(e),3);return r(i,t>>>0||(s.test(i)?16:10))}:r},function(e,t,i){var r=i(6),n=i(98);r(r.G+r.F*(parseInt!=n),{parseInt:n})},function(e,t,i){var r=i(6),n=i(96);r(r.G+r.F*(parseFloat!=n),{parseFloat:n})},function(e,t,i){var r=i(6),n=i(102),a=Math.sqrt,s=Math.acosh;r(r.S+r.F*!(s&&710==Math.floor(s(Number.MAX_VALUE))&&s(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:n(e-1+a(e-1)*a(e+1))}})},function(e,t){e.exports=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)}},function(e,t,i){var r=i(6),n=Math.asinh;r(r.S+r.F*!(n&&1/n(0)>0),"Math",{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}})},function(e,t,i){var r=i(6),n=Math.atanh;r(r.S+r.F*!(n&&1/n(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}})},function(e,t,i){var r=i(6),n=i(106);r(r.S,"Math",{cbrt:function(e){return n(e=+e)*Math.pow(Math.abs(e),1/3)}})},function(e,t){e.exports=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1}},function(e,t,i){var r=i(6);r(r.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}})},function(e,t,i){var r=i(6),n=Math.exp;r(r.S,"Math",{cosh:function(e){return(n(e=+e)+n(-e))/2}})},function(e,t,i){var r=i(6),n=i(110);r(r.S+r.F*(n!=Math.expm1),"Math",{expm1:n})},function(e,t){var i=Math.expm1;e.exports=!i||i(10)>22025.465794806718||i(10)<22025.465794806718||-2e-17!=i(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:i},function(e,t,i){var r=i(6),n=i(106),a=Math.pow,s=a(2,-52),o=a(2,-23),l=a(2,127)*(2-o),d=a(2,-126);r(r.S,"Math",{fround:function(e){var t,i,r=Math.abs(e),a=n(e);return r<d?a*function(e){return e+1/s-1/s}(r/d/o)*d*o:(i=(t=(1+o/s)*r)-(t-r))>l||i!=i?a*(1/0):a*i}})},function(e,t,i){var r=i(6),n=Math.abs;r(r.S,"Math",{hypot:function(e,t){for(var i,r,a=0,s=0,o=arguments.length,l=0;s<o;)l<(i=n(arguments[s++]))?(a=a*(r=l/i)*r+1,l=i):a+=i>0?(r=i/l)*r:i;return l===1/0?1/0:l*Math.sqrt(a)}})},function(e,t,i){var r=i(6),n=Math.imul;r(r.S+r.F*i(5)((function(){return-5!=n(4294967295,5)||2!=n.length})),"Math",{imul:function(e,t){var i=65535,r=+e,n=+t,a=i&r,s=i&n;return 0|a*s+((i&r>>>16)*s+a*(i&n>>>16)<<16>>>0)}})},function(e,t,i){var r=i(6);r(r.S,"Math",{log10:function(e){return Math.log(e)/Math.LN10}})},function(e,t,i){var r=i(6);r(r.S,"Math",{log1p:i(102)})},function(e,t,i){var r=i(6);r(r.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}})},function(e,t,i){var r=i(6);r(r.S,"Math",{sign:i(106)})},function(e,t,i){var r=i(6),n=i(110),a=Math.exp;r(r.S+r.F*i(5)((function(){return-2e-17!=!Math.sinh(-2e-17)})),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(n(e)-n(-e))/2:(a(e-1)-a(-e-1))*(Math.E/2)}})},function(e,t,i){var r=i(6),n=i(110),a=Math.exp;r(r.S,"Math",{tanh:function(e){var t=n(e=+e),i=n(-e);return t==1/0?1:i==1/0?-1:(t-i)/(a(e)+a(-e))}})},function(e,t,i){var r=i(6);r(r.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}})},function(e,t,i){var r=i(6),n=i(37),a=String.fromCharCode,s=String.fromCodePoint;r(r.S+r.F*(!!s&&1!=s.length),"String",{fromCodePoint:function(e){for(var t,i=[],r=arguments.length,s=0;r>s;){if(t=+arguments[s++],n(t,1114111)!==t)throw RangeError(t+" is not a valid code point");i.push(t<65536?a(t):a(55296+((t-=65536)>>10),t%1024+56320))}return i.join("")}})},function(e,t,i){var r=i(6),n=i(30),a=i(35);r(r.S,"String",{raw:function(e){for(var t=n(e.raw),i=a(t.length),r=arguments.length,s=[],o=0;i>o;)s.push(String(t[o++])),o<r&&s.push(String(arguments[o]));return s.join("")}})},function(e,t,i){i(81)("trim",(function(e){return function(){return e(this,3)}}))},function(e,t,i){var r=i(6),n=i(125)(!1);r(r.P,"String",{codePointAt:function(e){return n(this,e)}})},function(e,t,r){var n=r(36),a=r(33);e.exports=function(e){return function(t,r){var s,o,l=String(a(t)),d=n(r),h=l.length;return d<0||d>=h?e?"":i:(s=l.charCodeAt(d))<55296||s>56319||d+1===h||(o=l.charCodeAt(d+1))<56320||o>57343?e?l.charAt(d):s:e?l.slice(d,d+2):o-56320+(s-55296<<10)+65536}}},function(e,t,r){var n=r(6),a=r(35),s=r(127),o="endsWith",l=""[o];n(n.P+n.F*r(129)(o),"String",{endsWith:function(e){var t=s(this,e,o),r=arguments.length>1?arguments[1]:i,n=a(t.length),d=r===i?n:Math.min(a(r),n),h=String(e);return l?l.call(t,h,d):t.slice(d-h.length,d)===h}})},function(e,t,i){var r=i(128),n=i(33);e.exports=function(e,t,i){if(r(t))throw TypeError("String#"+i+" doesn't accept regex!");return String(n(e))}},function(e,t,r){var n=r(11),a=r(32),s=r(23)("match");e.exports=function(e){var t;return n(e)&&((t=e[s])!==i?!!t:"RegExp"==a(e))}},function(e,t,i){var r=i(23)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(i){try{return t[r]=!1,!"/./"[e](t)}catch(e){}}return!0}},function(e,t,r){var n=r(6),a=r(127),s="includes";n(n.P+n.F*r(129)(s),"String",{includes:function(e){return!!~a(this,e,s).indexOf(e,arguments.length>1?arguments[1]:i)}})},function(e,t,i){var r=i(6);r(r.P,"String",{repeat:i(85)})},function(e,t,r){var n=r(6),a=r(35),s=r(127),o="startsWith",l=""[o];n(n.P+n.F*r(129)(o),"String",{startsWith:function(e){var t=s(this,e,o),r=a(Math.min(arguments.length>1?arguments[1]:i,t.length)),n=String(e);return l?l.call(t,n,r):t.slice(r,r+n.length)===n}})},function(e,t,r){var n=r(125)(!0);r(134)(String,"String",(function(e){this._t=String(e),this._i=0}),(function(){var e,t=this._t,r=this._i;return r>=t.length?{value:i,done:!0}:(e=n(t,r),this._i+=e.length,{value:e,done:!1})}))},function(e,t,r){var n=r(26),a=r(6),s=r(16),o=r(8),l=r(3),d=r(135),h=r(136),c=r(22),u=r(57),p=r(23)("iterator"),m=!([].keys&&"next"in[].keys()),f="keys",g="values",v=function(){return this};e.exports=function(e,t,r,y,M,E,b){h(r,t,y);var x,I,T,C=function(e){if(!m&&e in B)return B[e];switch(e){case f:case g:return function(){return new r(this,e)}}return function(){return new r(this,e)}},w=t+" Iterator",S=M==g,A=!1,B=e.prototype,R=B[p]||B["@@iterator"]||M&&B[M],D=R||C(M),O=M?S?C("entries"):D:i,L="Array"==t&&B.entries||R;if(L&&(T=u(L.call(new e)))!==Object.prototype&&(c(T,w,!0),n||l(T,p)||o(T,p,v)),S&&R&&R.name!==g&&(A=!0,D=function(){return R.call(this)}),n&&!b||!m&&!A&&B[p]||o(B,p,D),d[t]=D,d[w]=v,M)if(x={values:S?D:C(g),keys:E?D:C(f),entries:O},b)for(I in x)I in B||s(B,I,x[I]);else a(a.P+a.F*(m||A),t,x);return x}},function(e,t){e.exports={}},function(e,t,i){var r=i(44),n=i(15),a=i(22),s={};i(8)(s,i(23)("iterator"),(function(){return this})),e.exports=function(e,t,i){e.prototype=r(s,{next:n(1,i)}),a(e,t+" Iterator")}},function(e,t,i){i(138)("anchor",(function(e){return function(t){return e(this,"a","name",t)}}))},function(e,t,i){var r=i(6),n=i(5),a=i(33),s=/"/g,o=function(e,t,i,r){var n=String(a(e)),o="<"+t;return""!==i&&(o+=" "+i+'="'+String(r).replace(s,"&quot;")+'"'),o+">"+n+"</"+t+">"};e.exports=function(e,t){var i={};i[e]=t(o),r(r.P+r.F*n((function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3})),"String",i)}},function(e,t,i){i(138)("big",(function(e){return function(){return e(this,"big","","")}}))},function(e,t,i){i(138)("blink",(function(e){return function(){return e(this,"blink","","")}}))},function(e,t,i){i(138)("bold",(function(e){return function(){return e(this,"b","","")}}))},function(e,t,i){i(138)("fixed",(function(e){return function(){return e(this,"tt","","")}}))},function(e,t,i){i(138)("fontcolor",(function(e){return function(t){return e(this,"font","color",t)}}))},function(e,t,i){i(138)("fontsize",(function(e){return function(t){return e(this,"font","size",t)}}))},function(e,t,i){i(138)("italics",(function(e){return function(){return e(this,"i","","")}}))},function(e,t,i){i(138)("link",(function(e){return function(t){return e(this,"a","href",t)}}))},function(e,t,i){i(138)("small",(function(e){return function(){return e(this,"small","","")}}))},function(e,t,i){i(138)("strike",(function(e){return function(){return e(this,"strike","","")}}))},function(e,t,i){i(138)("sub",(function(e){return function(){return e(this,"sub","","")}}))},function(e,t,i){i(138)("sup",(function(e){return function(){return e(this,"sup","","")}}))},function(e,t,i){var r=i(6);r(r.S,"Array",{isArray:i(43)})},function(e,t,r){var n=r(18),a=r(6),s=r(56),o=r(153),l=r(154),d=r(35),h=r(155),c=r(156);a(a.S+a.F*!r(157)((function(e){})),"Array",{from:function(e){var t,r,a,u,p=s(e),m="function"==typeof this?this:Array,f=arguments.length,g=f>1?arguments[1]:i,v=g!==i,y=0,M=c(p);if(v&&(g=n(g,f>2?arguments[2]:i,2)),M==i||m==Array&&l(M))for(r=new m(t=d(p.length));t>y;y++)h(r,y,v?g(p[y],y):p[y]);else for(u=M.call(p),r=new m;!(a=u.next()).done;y++)h(r,y,v?o(u,g,[a.value,y],!0):a.value);return r.length=y,r}})},function(e,t,r){var n=r(10);e.exports=function(e,t,r,a){try{return a?t(n(r)[0],r[1]):t(r)}catch(t){var s=e.return;throw s!==i&&n(s.call(e)),t}}},function(e,t,r){var n=r(135),a=r(23)("iterator"),s=Array.prototype;e.exports=function(e){return e!==i&&(n.Array===e||s[a]===e)}},function(e,t,i){var r=i(9),n=i(15);e.exports=function(e,t,i){t in e?r.f(e,t,n(0,i)):e[t]=i}},function(e,t,r){var n=r(73),a=r(23)("iterator"),s=r(135);e.exports=r(7).getIteratorMethod=function(e){if(e!=i)return e[a]||e["@@iterator"]||s[n(e)]}},function(e,t,i){var r=i(23)("iterator"),n=!1;try{var a=[7][r]();a.return=function(){n=!0},Array.from(a,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!n)return!1;var i=!1;try{var a=[7],s=a[r]();s.next=function(){return{done:i=!0}},a[r]=function(){return s},e(a)}catch(e){}return i}},function(e,t,i){var r=i(6),n=i(155);r(r.S+r.F*i(5)((function(){function e(){}return!(Array.of.call(e)instanceof e)})),"Array",{of:function(){for(var e=0,t=arguments.length,i=new("function"==typeof this?this:Array)(t);t>e;)n(i,e,arguments[e++]);return i.length=t,i}})},function(e,t,r){var n=r(6),a=r(30),s=[].join;n(n.P+n.F*(r(31)!=Object||!r(160)(s)),"Array",{join:function(e){return s.call(a(this),e===i?",":e)}})},function(e,t,i){var r=i(5);e.exports=function(e,t){return!!e&&r((function(){t?e.call(null,(function(){}),1):e.call(null)}))}},function(e,t,r){var n=r(6),a=r(46),s=r(32),o=r(37),l=r(35),d=[].slice;n(n.P+n.F*r(5)((function(){a&&d.call(a)})),"Array",{slice:function(e,t){var r=l(this.length),n=s(this);if(t=t===i?r:t,"Array"==n)return d.call(this,e,t);for(var a=o(e,r),h=o(t,r),c=l(h-a),u=Array(c),p=0;p<c;p++)u[p]="String"==n?this.charAt(a+p):this[a+p];return u}})},function(e,t,r){var n=r(6),a=r(19),s=r(56),o=r(5),l=[].sort,d=[1,2,3];n(n.P+n.F*(o((function(){d.sort(i)}))||!o((function(){d.sort(null)}))||!r(160)(l)),"Array",{sort:function(e){return e===i?l.call(s(this)):l.call(s(this),a(e))}})},function(e,t,i){var r=i(6),n=i(164)(0),a=i(160)([].forEach,!0);r(r.P+r.F*!a,"Array",{forEach:function(e){return n(this,e,arguments[1])}})},function(e,t,r){var n=r(18),a=r(31),s=r(56),o=r(35),l=r(165);e.exports=function(e,t){var r=1==e,d=2==e,h=3==e,c=4==e,u=6==e,p=5==e||u,m=t||l;return function(t,l,f){for(var g,v,y=s(t),M=a(y),E=n(l,f,3),b=o(M.length),x=0,I=r?m(t,b):d?m(t,0):i;b>x;x++)if((p||x in M)&&(v=E(g=M[x],x,y),e))if(r)I[x]=v;else if(v)switch(e){case 3:return!0;case 5:return g;case 6:return x;case 2:I.push(g)}else if(c)return!1;return u?-1:h||c?c:I}}},function(e,t,i){var r=i(166);e.exports=function(e,t){return new(r(e))(t)}},function(e,t,r){var n=r(11),a=r(43),s=r(23)("species");e.exports=function(e){var t;return a(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!a(t.prototype)||(t=i),n(t)&&null===(t=t[s])&&(t=i)),t===i?Array:t}},function(e,t,i){var r=i(6),n=i(164)(1);r(r.P+r.F*!i(160)([].map,!0),"Array",{map:function(e){return n(this,e,arguments[1])}})},function(e,t,i){var r=i(6),n=i(164)(2);r(r.P+r.F*!i(160)([].filter,!0),"Array",{filter:function(e){return n(this,e,arguments[1])}})},function(e,t,i){var r=i(6),n=i(164)(3);r(r.P+r.F*!i(160)([].some,!0),"Array",{some:function(e){return n(this,e,arguments[1])}})},function(e,t,i){var r=i(6),n=i(164)(4);r(r.P+r.F*!i(160)([].every,!0),"Array",{every:function(e){return n(this,e,arguments[1])}})},function(e,t,i){var r=i(6),n=i(172);r(r.P+r.F*!i(160)([].reduce,!0),"Array",{reduce:function(e){return n(this,e,arguments.length,arguments[1],!1)}})},function(e,t,i){var r=i(19),n=i(56),a=i(31),s=i(35);e.exports=function(e,t,i,o,l){r(t);var d=n(e),h=a(d),c=s(d.length),u=l?c-1:0,p=l?-1:1;if(i<2)for(;;){if(u in h){o=h[u],u+=p;break}if(u+=p,l?u<0:c<=u)throw TypeError("Reduce of empty array with no initial value")}for(;l?u>=0:c>u;u+=p)u in h&&(o=t(o,h[u],u,d));return o}},function(e,t,i){var r=i(6),n=i(172);r(r.P+r.F*!i(160)([].reduceRight,!0),"Array",{reduceRight:function(e){return n(this,e,arguments.length,arguments[1],!0)}})},function(e,t,i){var r=i(6),n=i(34)(!1),a=[].indexOf,s=!!a&&1/[1].indexOf(1,-0)<0;r(r.P+r.F*(s||!i(160)(a)),"Array",{indexOf:function(e){return s?a.apply(this,arguments)||0:n(this,e,arguments[1])}})},function(e,t,i){var r=i(6),n=i(30),a=i(36),s=i(35),o=[].lastIndexOf,l=!!o&&1/[1].lastIndexOf(1,-0)<0;r(r.P+r.F*(l||!i(160)(o)),"Array",{lastIndexOf:function(e){if(l)return o.apply(this,arguments)||0;var t=n(this),i=s(t.length),r=i-1;for(arguments.length>1&&(r=Math.min(r,a(arguments[1]))),r<0&&(r=i+r);r>=0;r--)if(r in t&&t[r]===e)return r||0;return-1}})},function(e,t,i){var r=i(6);r(r.P,"Array",{copyWithin:i(177)}),i(178)("copyWithin")},function(e,t,r){var n=r(56),a=r(37),s=r(35);e.exports=[].copyWithin||function(e,t){var r=n(this),o=s(r.length),l=a(e,o),d=a(t,o),h=arguments.length>2?arguments[2]:i,c=Math.min((h===i?o:a(h,o))-d,o-l),u=1;for(d<l&&l<d+c&&(u=-1,d+=c-1,l+=c-1);c-- >0;)d in r?r[l]=r[d]:delete r[l],l+=u,d+=u;return r}},function(e,t,r){var n=r(23)("unscopables"),a=Array.prototype;a[n]==i&&r(8)(a,n,{}),e.exports=function(e){a[n][e]=!0}},function(e,t,i){var r=i(6);r(r.P,"Array",{fill:i(180)}),i(178)("fill")},function(e,t,r){var n=r(56),a=r(37),s=r(35);e.exports=function(e){for(var t=n(this),r=s(t.length),o=arguments.length,l=a(o>1?arguments[1]:i,r),d=o>2?arguments[2]:i,h=d===i?r:a(d,r);h>l;)t[l++]=e;return t}},function(e,t,r){var n=r(6),a=r(164)(5),s="find",o=!0;s in[]&&Array(1)[s]((function(){o=!1})),n(n.P+n.F*o,"Array",{find:function(e){return a(this,e,arguments.length>1?arguments[1]:i)}}),r(178)(s)},function(e,t,r){var n=r(6),a=r(164)(6),s="findIndex",o=!0;s in[]&&Array(1)[s]((function(){o=!1})),n(n.P+n.F*o,"Array",{findIndex:function(e){return a(this,e,arguments.length>1?arguments[1]:i)}}),r(178)(s)},function(e,t,r){var n=r(178),a=r(184),s=r(135),o=r(30);e.exports=r(134)(Array,"Array",(function(e,t){this._t=o(e),this._i=0,this._k=t}),(function(){var e=this._t,t=this._k,r=this._i++;return!e||r>=e.length?(this._t=i,a(1)):a(0,"keys"==t?r:"values"==t?e[r]:[r,e[r]])}),"values"),s.Arguments=s.Array,n("keys"),n("values"),n("entries")},function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t,i){i(186)("Array")},function(e,t,i){var r=i(2),n=i(9),a=i(4),s=i(23)("species");e.exports=function(e){var t=r[e];a&&t&&!t[s]&&n.f(t,s,{configurable:!0,get:function(){return this}})}},function(e,t,r){var n=r(2),a=r(80),s=r(9).f,o=r(48).f,l=r(128),d=r(188),h=n.RegExp,c=h,u=h.prototype,p=/a/g,m=/a/g,f=new h(p)!==p;if(r(4)&&(!f||r(5)((function(){return m[r(23)("match")]=!1,h(p)!=p||h(m)==m||"/a/i"!=h(p,"i")})))){h=function(e,t){var r=this instanceof h,n=l(e),s=t===i;return!r&&n&&e.constructor===h&&s?e:a(f?new c(n&&!s?e.source:e,t):c((n=e instanceof h)?e.source:e,n&&s?d.call(e):t),r?this:u,h)};for(var g=function(e){e in h||s(h,e,{configurable:!0,get:function(){return c[e]},set:function(t){c[e]=t}})},v=o(c),y=0;v.length>y;)g(v[y++]);u.constructor=h,h.prototype=u,r(16)(n,"RegExp",h)}r(186)("RegExp")},function(e,t,i){var r=i(10);e.exports=function(){var e=r(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}},function(e,t,r){r(190);var n=r(10),a=r(188),s=r(4),o="toString",l=/./[o],d=function(e){r(16)(RegExp.prototype,o,e,!0)};r(5)((function(){return"/a/b"!=l.call({source:"a",flags:"b"})}))?d((function(){var e=n(this);return"/".concat(e.source,"/","flags"in e?e.flags:!s&&e instanceof RegExp?a.call(e):i)})):l.name!=o&&d((function(){return l.call(this)}))},function(e,t,i){i(4)&&"g"!=/./g.flags&&i(9).f(RegExp.prototype,"flags",{configurable:!0,get:i(188)})},function(e,t,r){r(192)("match",1,(function(e,t,r){return[function(r){var n=e(this),a=r==i?i:r[t];return a!==i?a.call(r,n):new RegExp(r)[t](String(n))},r]}))},function(e,t,i){var r=i(8),n=i(16),a=i(5),s=i(33),o=i(23);e.exports=function(e,t,i){var l=o(e),d=i(s,l,""[e]),h=d[0],c=d[1];a((function(){var t={};return t[l]=function(){return 7},7!=""[e](t)}))&&(n(String.prototype,e,h),r(RegExp.prototype,l,2==t?function(e,t){return c.call(e,this,t)}:function(e){return c.call(e,this)}))}},function(e,t,r){r(192)("replace",2,(function(e,t,r){return[function(n,a){var s=e(this),o=n==i?i:n[t];return o!==i?o.call(n,s,a):r.call(String(s),n,a)},r]}))},function(e,t,r){r(192)("search",1,(function(e,t,r){return[function(r){var n=e(this),a=r==i?i:r[t];return a!==i?a.call(r,n):new RegExp(r)[t](String(n))},r]}))},function(e,t,r){r(192)("split",2,(function(e,t,n){var a=r(128),s=n,o=[].push,l="split",d="length",h="lastIndex";if("c"=="abbc"[l](/(b)*/)[1]||4!="test"[l](/(?:)/,-1)[d]||2!="ab"[l](/(?:ab)*/)[d]||4!="."[l](/(.?)(.?)/)[d]||"."[l](/()()/)[d]>1||""[l](/.?/)[d]){var c=/()??/.exec("")[1]===i;n=function(e,t){var r=String(this);if(e===i&&0===t)return[];if(!a(e))return s.call(r,e,t);var n,l,u,p,m,f=[],g=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),v=0,y=t===i?4294967295:t>>>0,M=new RegExp(e.source,g+"g");for(c||(n=new RegExp("^"+M.source+"$(?!\\s)",g));(l=M.exec(r))&&!((u=l.index+l[0][d])>v&&(f.push(r.slice(v,l.index)),!c&&l[d]>1&&l[0].replace(n,(function(){for(m=1;m<arguments[d]-2;m++)arguments[m]===i&&(l[m]=i)})),l[d]>1&&l.index<r[d]&&o.apply(f,l.slice(1)),p=l[0][d],v=u,f[d]>=y));)M[h]===l.index&&M[h]++;return v===r[d]?!p&&M.test("")||f.push(""):f.push(r.slice(v)),f[d]>y?f.slice(0,y):f}}else"0"[l](i,0)[d]&&(n=function(e,t){return e===i&&0===t?[]:s.call(this,e,t)});return[function(r,a){var s=e(this),o=r==i?i:r[t];return o!==i?o.call(r,s,a):n.call(String(s),r,a)},n]}))},function(e,t,r){var n,a,s,o=r(26),l=r(2),d=r(18),h=r(73),c=r(6),u=r(11),p=r(19),m=r(197),f=r(198),g=r(199),v=r(200).set,y=r(201)(),M="Promise",E=l.TypeError,b=l.process,x=l[M],I="process"==h(b=l.process),T=function(){},C=!!function(){try{var e=x.resolve(1),t=(e.constructor={})[r(23)("species")]=function(e){e(T,T)};return(I||"function"==typeof PromiseRejectionEvent)&&e.then(T)instanceof t}catch(e){}}(),w=function(e,t){return e===t||e===x&&t===s},S=function(e){var t;return!(!u(e)||"function"!=typeof(t=e.then))&&t},A=function(e){return w(x,e)?new B(e):new a(e)},B=a=function(e){var t,r;this.promise=new e((function(e,n){if(t!==i||r!==i)throw E("Bad Promise constructor");t=e,r=n})),this.resolve=p(t),this.reject=p(r)},R=function(e){try{e()}catch(e){return{error:e}}},D=function(e,t){if(!e._n){e._n=!0;var i=e._c;y((function(){for(var r=e._v,n=1==e._s,a=0,s=function(t){var i,a,s=n?t.ok:t.fail,o=t.resolve,l=t.reject,d=t.domain;try{s?(n||(2==e._h&&P(e),e._h=1),!0===s?i=r:(d&&d.enter(),i=s(r),d&&d.exit()),i===t.promise?l(E("Promise-chain cycle")):(a=S(i))?a.call(i,o,l):o(i)):l(r)}catch(e){l(e)}};i.length>a;)s(i[a++]);e._c=[],e._n=!1,t&&!e._h&&O(e)}))}},O=function(e){v.call(l,(function(){var t,r,n,a=e._v;if(L(e)&&(t=R((function(){I?b.emit("unhandledRejection",a,e):(r=l.onunhandledrejection)?r({promise:e,reason:a}):(n=l.console)&&n.error&&n.error("Unhandled promise rejection",a)})),e._h=I||L(e)?2:1),e._a=i,t)throw t.error}))},L=function(e){if(1==e._h)return!1;for(var t,i=e._a||e._c,r=0;i.length>r;)if((t=i[r++]).fail||!L(t.promise))return!1;return!0},P=function(e){v.call(l,(function(){var t;I?b.emit("rejectionHandled",e):(t=l.onrejectionhandled)&&t({promise:e,reason:e._v})}))},N=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),D(t,!0))},H=function(e){var t,i=this;if(!i._d){i._d=!0,i=i._w||i;try{if(i===e)throw E("Promise can't be resolved itself");(t=S(e))?y((function(){var r={_w:i,_d:!1};try{t.call(e,d(H,r,1),d(N,r,1))}catch(e){N.call(r,e)}})):(i._v=e,i._s=1,D(i,!1))}catch(e){N.call({_w:i,_d:!1},e)}}};C||(x=function(e){m(this,x,M,"_h"),p(e),n.call(this);try{e(d(H,this,1),d(N,this,1))}catch(e){N.call(this,e)}},(n=function(e){this._c=[],this._a=i,this._s=0,this._d=!1,this._v=i,this._h=0,this._n=!1}).prototype=r(202)(x.prototype,{then:function(e,t){var r=A(g(this,x));return r.ok="function"!=typeof e||e,r.fail="function"==typeof t&&t,r.domain=I?b.domain:i,this._c.push(r),this._a&&this._a.push(r),this._s&&D(this,!1),r.promise},catch:function(e){return this.then(i,e)}}),B=function(){var e=new n;this.promise=e,this.resolve=d(H,e,1),this.reject=d(N,e,1)}),c(c.G+c.W+c.F*!C,{Promise:x}),r(22)(x,M),r(186)(M),s=r(7)[M],c(c.S+c.F*!C,M,{reject:function(e){var t=A(this);return(0,t.reject)(e),t.promise}}),c(c.S+c.F*(o||!C),M,{resolve:function(e){if(e instanceof x&&w(e.constructor,this))return e;var t=A(this);return(0,t.resolve)(e),t.promise}}),c(c.S+c.F*!(C&&r(157)((function(e){x.all(e).catch(T)}))),M,{all:function(e){var t=this,r=A(t),n=r.resolve,a=r.reject,s=R((function(){var r=[],s=0,o=1;f(e,!1,(function(e){var l=s++,d=!1;r.push(i),o++,t.resolve(e).then((function(e){d||(d=!0,r[l]=e,--o||n(r))}),a)})),--o||n(r)}));return s&&a(s.error),r.promise},race:function(e){var t=this,i=A(t),r=i.reject,n=R((function(){f(e,!1,(function(e){t.resolve(e).then(i.resolve,r)}))}));return n&&r(n.error),i.promise}})},function(e,t){e.exports=function(e,t,r,n){if(!(e instanceof t)||n!==i&&n in e)throw TypeError(r+": incorrect invocation!");return e}},function(e,t,i){var r=i(18),n=i(153),a=i(154),s=i(10),o=i(35),l=i(156),d={},h={};(t=e.exports=function(e,t,i,c,u){var p,m,f,g,v=u?function(){return e}:l(e),y=r(i,c,t?2:1),M=0;if("function"!=typeof v)throw TypeError(e+" is not iterable!");if(a(v)){for(p=o(e.length);p>M;M++)if((g=t?y(s(m=e[M])[0],m[1]):y(e[M]))===d||g===h)return g}else for(f=v.call(e);!(m=f.next()).done;)if((g=n(f,y,m.value,t))===d||g===h)return g}).BREAK=d,t.RETURN=h},function(e,t,r){var n=r(10),a=r(19),s=r(23)("species");e.exports=function(e,t){var r,o=n(e).constructor;return o===i||(r=n(o)[s])==i?t:a(r)}},function(e,t,i){var r,n,a,s=i(18),o=i(76),l=i(46),d=i(13),h=i(2),c=h.process,u=h.setImmediate,p=h.clearImmediate,m=h.MessageChannel,f=0,g={},v="onreadystatechange",y=function(){var e=+this;if(g.hasOwnProperty(e)){var t=g[e];delete g[e],t()}},M=function(e){y.call(e.data)};u&&p||(u=function(e){for(var t=[],i=1;arguments.length>i;)t.push(arguments[i++]);return g[++f]=function(){o("function"==typeof e?e:Function(e),t)},r(f),f},p=function(e){delete g[e]},"process"==i(32)(c)?r=function(e){c.nextTick(s(y,e,1))}:m?(a=(n=new m).port2,n.port1.onmessage=M,r=s(a.postMessage,a,1)):h.addEventListener&&"function"==typeof postMessage&&!h.importScripts?(r=function(e){h.postMessage(e+"","*")},h.addEventListener("message",M,!1)):r=v in d("script")?function(e){l.appendChild(d("script"))[v]=function(){l.removeChild(this),y.call(e)}}:function(e){setTimeout(s(y,e,1),0)}),e.exports={set:u,clear:p}},function(e,t,r){var n=r(2),a=r(200).set,s=n.MutationObserver||n.WebKitMutationObserver,o=n.process,l=n.Promise,d="process"==r(32)(o);e.exports=function(){var e,t,r,h=function(){var n,a;for(d&&(n=o.domain)&&n.exit();e;){a=e.fn,e=e.next;try{a()}catch(n){throw e?r():t=i,n}}t=i,n&&n.enter()};if(d)r=function(){o.nextTick(h)};else if(s){var c=!0,u=document.createTextNode("");new s(h).observe(u,{characterData:!0}),r=function(){u.data=c=!c}}else if(l&&l.resolve){var p=l.resolve();r=function(){p.then(h)}}else r=function(){a.call(n,h)};return function(n){var a={fn:n,next:i};t&&(t.next=a),e||(e=a,r()),t=a}}},function(e,t,i){var r=i(16);e.exports=function(e,t,i){for(var n in t)r(e,n,t[n],i);return e}},function(e,t,r){var n=r(204);e.exports=r(205)("Map",(function(e){return function(){return e(this,arguments.length>0?arguments[0]:i)}}),{get:function(e){var t=n.getEntry(this,e);return t&&t.v},set:function(e,t){return n.def(this,0===e?0:e,t)}},n,!0)},function(e,t,r){var n=r(9).f,a=r(44),s=r(202),o=r(18),l=r(197),d=r(33),h=r(198),c=r(134),u=r(184),p=r(186),m=r(4),f=r(20).fastKey,g=m?"_s":"size",v=function(e,t){var i,r=f(t);if("F"!==r)return e._i[r];for(i=e._f;i;i=i.n)if(i.k==t)return i};e.exports={getConstructor:function(e,t,r,c){var u=e((function(e,n){l(e,u,t,"_i"),e._i=a(null),e._f=i,e._l=i,e[g]=0,n!=i&&h(n,r,e[c],e)}));return s(u.prototype,{clear:function(){for(var e=this,t=e._i,r=e._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=i),delete t[r.i];e._f=e._l=i,e[g]=0},delete:function(e){var t=this,i=v(t,e);if(i){var r=i.n,n=i.p;delete t._i[i.i],i.r=!0,n&&(n.n=r),r&&(r.p=n),t._f==i&&(t._f=r),t._l==i&&(t._l=n),t[g]--}return!!i},forEach:function(e){l(this,u,"forEach");for(var t,r=o(e,arguments.length>1?arguments[1]:i,3);t=t?t.n:this._f;)for(r(t.v,t.k,this);t&&t.r;)t=t.p},has:function(e){return!!v(this,e)}}),m&&n(u.prototype,"size",{get:function(){return d(this[g])}}),u},def:function(e,t,r){var n,a,s=v(e,t);return s?s.v=r:(e._l=s={i:a=f(t,!0),k:t,v:r,p:n=e._l,n:i,r:!1},e._f||(e._f=s),n&&(n.n=s),e[g]++,"F"!==a&&(e._i[a]=s)),e},getEntry:v,setStrong:function(e,t,r){c(e,t,(function(e,t){this._t=e,this._k=t,this._l=i}),(function(){for(var e=this,t=e._k,r=e._l;r&&r.r;)r=r.p;return e._t&&(e._l=r=r?r.n:e._t._f)?u(0,"keys"==t?r.k:"values"==t?r.v:[r.k,r.v]):(e._t=i,u(1))}),r?"entries":"values",!r,!0),p(t)}}},function(e,t,r){var n=r(2),a=r(6),s=r(16),o=r(202),l=r(20),d=r(198),h=r(197),c=r(11),u=r(5),p=r(157),m=r(22),f=r(80);e.exports=function(e,t,r,g,v,y){var M=n[e],E=M,b=v?"set":"add",x=E&&E.prototype,I={},T=function(e){var t=x[e];s(x,e,"delete"==e||"has"==e?function(e){return!(y&&!c(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return y&&!c(e)?i:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,i){return t.call(this,0===e?0:e,i),this})};if("function"==typeof E&&(y||x.forEach&&!u((function(){(new E).entries().next()})))){var C=new E,w=C[b](y?{}:-0,1)!=C,S=u((function(){C.has(1)})),A=p((function(e){new E(e)})),B=!y&&u((function(){for(var e=new E,t=5;t--;)e[b](t,t);return!e.has(-0)}));A||((E=t((function(t,r){h(t,E,e);var n=f(new M,t,E);return r!=i&&d(r,v,n[b],n),n}))).prototype=x,x.constructor=E),(S||B)&&(T("delete"),T("has"),v&&T("get")),(B||w)&&T(b),y&&x.clear&&delete x.clear}else E=g.getConstructor(t,e,v,b),o(E.prototype,r),l.NEED=!0;return m(E,e),I[e]=E,a(a.G+a.W+a.F*(E!=M),I),y||g.setStrong(E,e,v),E}},function(e,t,r){var n=r(204);e.exports=r(205)("Set",(function(e){return function(){return e(this,arguments.length>0?arguments[0]:i)}}),{add:function(e){return n.def(this,e=0===e?0:e,e)}},n)},function(e,t,r){var n,a=r(164)(0),s=r(16),o=r(20),l=r(67),d=r(208),h=r(11),c=o.getWeak,u=Object.isExtensible,p=d.ufstore,m={},f=function(e){return function(){return e(this,arguments.length>0?arguments[0]:i)}},g={get:function(e){if(h(e)){var t=c(e);return!0===t?p(this).get(e):t?t[this._i]:i}},set:function(e,t){return d.def(this,e,t)}},v=e.exports=r(205)("WeakMap",f,g,d,!0,!0);7!=(new v).set((Object.freeze||Object)(m),7).get(m)&&(l((n=d.getConstructor(f)).prototype,g),o.NEED=!0,a(["delete","has","get","set"],(function(e){var t=v.prototype,i=t[e];s(t,e,(function(t,r){if(h(t)&&!u(t)){this._f||(this._f=new n);var a=this._f[e](t,r);return"set"==e?this:a}return i.call(this,t,r)}))})))},function(e,t,r){var n=r(202),a=r(20).getWeak,s=r(10),o=r(11),l=r(197),d=r(198),h=r(164),c=r(3),u=h(5),p=h(6),m=0,f=function(e){return e._l||(e._l=new g)},g=function(){this.a=[]},v=function(e,t){return u(e.a,(function(e){return e[0]===t}))};g.prototype={get:function(e){var t=v(this,e);if(t)return t[1]},has:function(e){return!!v(this,e)},set:function(e,t){var i=v(this,e);i?i[1]=t:this.a.push([e,t])},delete:function(e){var t=p(this.a,(function(t){return t[0]===e}));return~t&&this.a.splice(t,1),!!~t}},e.exports={getConstructor:function(e,t,r,s){var h=e((function(e,n){l(e,h,t,"_i"),e._i=m++,e._l=i,n!=i&&d(n,r,e[s],e)}));return n(h.prototype,{delete:function(e){if(!o(e))return!1;var t=a(e);return!0===t?f(this).delete(e):t&&c(t,this._i)&&delete t[this._i]},has:function(e){if(!o(e))return!1;var t=a(e);return!0===t?f(this).has(e):t&&c(t,this._i)}}),h},def:function(e,t,i){var r=a(s(t),!0);return!0===r?f(e).set(t,i):r[e._i]=i,e},ufstore:f}},function(e,t,r){var n=r(208);r(205)("WeakSet",(function(e){return function(){return e(this,arguments.length>0?arguments[0]:i)}}),{add:function(e){return n.def(this,e,!0)}},n,!1,!0)},function(e,t,i){var r=i(6),n=i(19),a=i(10),s=(i(2).Reflect||{}).apply,o=Function.apply;r(r.S+r.F*!i(5)((function(){s((function(){}))})),"Reflect",{apply:function(e,t,i){var r=n(e),l=a(i);return s?s(r,t,l):o.call(r,t,l)}})},function(e,t,i){var r=i(6),n=i(44),a=i(19),s=i(10),o=i(11),l=i(5),d=i(75),h=(i(2).Reflect||{}).construct,c=l((function(){function e(){}return!(h((function(){}),[],e)instanceof e)})),u=!l((function(){h((function(){}))}));r(r.S+r.F*(c||u),"Reflect",{construct:function(e,t){a(e),s(t);var i=arguments.length<3?e:a(arguments[2]);if(u&&!c)return h(e,t,i);if(e==i){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var r=[null];return r.push.apply(r,t),new(d.apply(e,r))}var l=i.prototype,p=n(o(l)?l:Object.prototype),m=Function.apply.call(e,p,t);return o(m)?m:p}})},function(e,t,i){var r=i(9),n=i(6),a=i(10),s=i(14);n(n.S+n.F*i(5)((function(){Reflect.defineProperty(r.f({},1,{value:1}),1,{value:2})})),"Reflect",{defineProperty:function(e,t,i){a(e),t=s(t,!0),a(i);try{return r.f(e,t,i),!0}catch(e){return!1}}})},function(e,t,i){var r=i(6),n=i(49).f,a=i(10);r(r.S,"Reflect",{deleteProperty:function(e,t){var i=n(a(e),t);return!(i&&!i.configurable)&&delete e[t]}})},function(e,t,r){var n=r(6),a=r(10),s=function(e){this._t=a(e),this._i=0;var t,i=this._k=[];for(t in e)i.push(t)};r(136)(s,"Object",(function(){var e,t=this,r=t._k;do{if(t._i>=r.length)return{value:i,done:!0}}while(!((e=r[t._i++])in t._t));return{value:e,done:!1}})),n(n.S,"Reflect",{enumerate:function(e){return new s(e)}})},function(e,t,r){var n=r(49),a=r(57),s=r(3),o=r(6),l=r(11),d=r(10);o(o.S,"Reflect",{get:function e(t,r){var o,h,c=arguments.length<3?t:arguments[2];return d(t)===c?t[r]:(o=n.f(t,r))?s(o,"value")?o.value:o.get!==i?o.get.call(c):i:l(h=a(t))?e(h,r,c):void 0}})},function(e,t,i){var r=i(49),n=i(6),a=i(10);n(n.S,"Reflect",{getOwnPropertyDescriptor:function(e,t){return r.f(a(e),t)}})},function(e,t,i){var r=i(6),n=i(57),a=i(10);r(r.S,"Reflect",{getPrototypeOf:function(e){return n(a(e))}})},function(e,t,i){var r=i(6);r(r.S,"Reflect",{has:function(e,t){return t in e}})},function(e,t,i){var r=i(6),n=i(10),a=Object.isExtensible;r(r.S,"Reflect",{isExtensible:function(e){return n(e),!a||a(e)}})},function(e,t,i){var r=i(6);r(r.S,"Reflect",{ownKeys:i(221)})},function(e,t,i){var r=i(48),n=i(41),a=i(10),s=i(2).Reflect;e.exports=s&&s.ownKeys||function(e){var t=r.f(a(e)),i=n.f;return i?t.concat(i(e)):t}},function(e,t,i){var r=i(6),n=i(10),a=Object.preventExtensions;r(r.S,"Reflect",{preventExtensions:function(e){n(e);try{return a&&a(e),!0}catch(e){return!1}}})},function(e,t,r){var n=r(9),a=r(49),s=r(57),o=r(3),l=r(6),d=r(15),h=r(10),c=r(11);l(l.S,"Reflect",{set:function e(t,r,l){var u,p,m=arguments.length<4?t:arguments[3],f=a.f(h(t),r);if(!f){if(c(p=s(t)))return e(p,r,l,m);f=d(0)}return o(f,"value")?!(!1===f.writable||!c(m)||(u=a.f(m,r)||d(0),u.value=l,n.f(m,r,u),0)):f.set!==i&&(f.set.call(m,l),!0)}})},function(e,t,i){var r=i(6),n=i(71);n&&r(r.S,"Reflect",{setPrototypeOf:function(e,t){n.check(e,t);try{return n.set(e,t),!0}catch(e){return!1}}})},function(e,t,i){var r=i(6);r(r.S,"Date",{now:function(){return(new Date).getTime()}})},function(e,t,i){var r=i(6),n=i(56),a=i(14);r(r.P+r.F*i(5)((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})})),"Date",{toJSON:function(e){var t=n(this),i=a(t);return"number"!=typeof i||isFinite(i)?t.toISOString():null}})},function(e,t,i){var r=i(6),n=i(5),a=Date.prototype.getTime,s=function(e){return e>9?e:"0"+e};r(r.P+r.F*(n((function(){return"0385-07-25T07:06:39.999Z"!=new Date(-50000000000001).toISOString()}))||!n((function(){new Date(NaN).toISOString()}))),"Date",{toISOString:function(){if(!isFinite(a.call(this)))throw RangeError("Invalid time value");var e=this,t=e.getUTCFullYear(),i=e.getUTCMilliseconds(),r=t<0?"-":t>9999?"+":"";return r+("00000"+Math.abs(t)).slice(r?-6:-4)+"-"+s(e.getUTCMonth()+1)+"-"+s(e.getUTCDate())+"T"+s(e.getUTCHours())+":"+s(e.getUTCMinutes())+":"+s(e.getUTCSeconds())+"."+(i>99?i:"0"+s(i))+"Z"}})},function(e,t,i){var r=Date.prototype,n="Invalid Date",a="toString",s=r[a],o=r.getTime;new Date(NaN)+""!=n&&i(16)(r,a,(function(){var e=o.call(this);return e==e?s.call(this):n}))},function(e,t,i){var r=i(23)("toPrimitive"),n=Date.prototype;r in n||i(8)(n,r,i(230))},function(e,t,i){var r=i(10),n=i(14),a="number";e.exports=function(e){if("string"!==e&&e!==a&&"default"!==e)throw TypeError("Incorrect hint");return n(r(this),e!=a)}},function(e,t,r){var n=r(6),a=r(232),s=r(233),o=r(10),l=r(37),d=r(35),h=r(11),c=r(2).ArrayBuffer,u=r(199),p=s.ArrayBuffer,m=s.DataView,f=a.ABV&&c.isView,g=p.prototype.slice,v=a.VIEW,y="ArrayBuffer";n(n.G+n.W+n.F*(c!==p),{ArrayBuffer:p}),n(n.S+n.F*!a.CONSTR,y,{isView:function(e){return f&&f(e)||h(e)&&v in e}}),n(n.P+n.U+n.F*r(5)((function(){return!new p(2).slice(1,i).byteLength})),y,{slice:function(e,t){if(g!==i&&t===i)return g.call(o(this),e);for(var r=o(this).byteLength,n=l(e,r),a=l(t===i?r:t,r),s=new(u(this,p))(d(a-n)),h=new m(this),c=new m(s),f=0;n<a;)c.setUint8(f++,h.getUint8(n++));return s}}),r(186)(y)},function(e,t,i){for(var r,n=i(2),a=i(8),s=i(17),o=s("typed_array"),l=s("view"),d=!(!n.ArrayBuffer||!n.DataView),h=d,c=0,u="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");c<9;)(r=n[u[c++]])?(a(r.prototype,o,!0),a(r.prototype,l,!0)):h=!1;e.exports={ABV:d,CONSTR:h,TYPED:o,VIEW:l}},function(e,t,r){var n=r(2),a=r(4),s=r(26),o=r(232),l=r(8),d=r(202),h=r(5),c=r(197),u=r(36),p=r(35),m=r(48).f,f=r(9).f,g=r(180),v=r(22),y="ArrayBuffer",M="DataView",E="prototype",b="Wrong length!",x="Wrong index!",I=n[y],T=n[M],C=n.Math,w=n.RangeError,S=n.Infinity,A=I,B=C.abs,R=C.pow,D=C.floor,O=C.log,L=C.LN2,P="buffer",N="byteLength",H="byteOffset",F=a?"_b":P,k=a?"_l":N,U=a?"_o":H,G=function(e,t,i){var r,n,a,s=Array(i),o=8*i-t-1,l=(1<<o)-1,d=l>>1,h=23===t?R(2,-24)-R(2,-77):0,c=0,u=e<0||0===e&&1/e<0?1:0;for((e=B(e))!=e||e===S?(n=e!=e?1:0,r=l):(r=D(O(e)/L),e*(a=R(2,-r))<1&&(r--,a*=2),(e+=r+d>=1?h/a:h*R(2,1-d))*a>=2&&(r++,a/=2),r+d>=l?(n=0,r=l):r+d>=1?(n=(e*a-1)*R(2,t),r+=d):(n=e*R(2,d-1)*R(2,t),r=0));t>=8;s[c++]=255&n,n/=256,t-=8);for(r=r<<t|n,o+=t;o>0;s[c++]=255&r,r/=256,o-=8);return s[--c]|=128*u,s},z=function(e,t,i){var r,n=8*i-t-1,a=(1<<n)-1,s=a>>1,o=n-7,l=i-1,d=e[l--],h=127&d;for(d>>=7;o>0;h=256*h+e[l],l--,o-=8);for(r=h&(1<<-o)-1,h>>=-o,o+=t;o>0;r=256*r+e[l],l--,o-=8);if(0===h)h=1-s;else{if(h===a)return r?NaN:d?-S:S;r+=R(2,t),h-=s}return(d?-1:1)*r*R(2,h-t)},V=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},j=function(e){return[255&e]},_=function(e){return[255&e,e>>8&255]},W=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},Y=function(e){return G(e,52,8)},Z=function(e){return G(e,23,4)},Q=function(e,t,i){f(e[E],t,{get:function(){return this[i]}})},J=function(e,t,i,r){var n=+i,a=u(n);if(n!=a||a<0||a+t>e[k])throw w(x);var s=e[F]._b,o=a+e[U],l=s.slice(o,o+t);return r?l:l.reverse()},X=function(e,t,i,r,n,a){var s=+i,o=u(s);if(s!=o||o<0||o+t>e[k])throw w(x);for(var l=e[F]._b,d=o+e[U],h=r(+n),c=0;c<t;c++)l[d+c]=h[a?c:t-c-1]},K=function(e,t){c(e,I,y);var i=+t,r=p(i);if(i!=r)throw w(b);return r};if(o.ABV){if(!h((function(){new I}))||!h((function(){new I(.5)}))){for(var q,$=(I=function(e){return new A(K(this,e))})[E]=A[E],ee=m(A),te=0;ee.length>te;)(q=ee[te++])in I||l(I,q,A[q]);s||($.constructor=I)}var ie=new T(new I(2)),re=T[E].setInt8;ie.setInt8(0,2147483648),ie.setInt8(1,2147483649),!ie.getInt8(0)&&ie.getInt8(1)||d(T[E],{setInt8:function(e,t){re.call(this,e,t<<24>>24)},setUint8:function(e,t){re.call(this,e,t<<24>>24)}},!0)}else I=function(e){var t=K(this,e);this._b=g.call(Array(t),0),this[k]=t},T=function(e,t,r){c(this,T,M),c(e,I,M);var n=e[k],a=u(t);if(a<0||a>n)throw w("Wrong offset!");if(a+(r=r===i?n-a:p(r))>n)throw w(b);this[F]=e,this[U]=a,this[k]=r},a&&(Q(I,N,"_l"),Q(T,P,"_b"),Q(T,N,"_l"),Q(T,H,"_o")),d(T[E],{getInt8:function(e){return J(this,1,e)[0]<<24>>24},getUint8:function(e){return J(this,1,e)[0]},getInt16:function(e){var t=J(this,2,e,arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=J(this,2,e,arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return V(J(this,4,e,arguments[1]))},getUint32:function(e){return V(J(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return z(J(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return z(J(this,8,e,arguments[1]),52,8)},setInt8:function(e,t){X(this,1,e,j,t)},setUint8:function(e,t){X(this,1,e,j,t)},setInt16:function(e,t){X(this,2,e,_,t,arguments[2])},setUint16:function(e,t){X(this,2,e,_,t,arguments[2])},setInt32:function(e,t){X(this,4,e,W,t,arguments[2])},setUint32:function(e,t){X(this,4,e,W,t,arguments[2])},setFloat32:function(e,t){X(this,4,e,Z,t,arguments[2])},setFloat64:function(e,t){X(this,8,e,Y,t,arguments[2])}});v(I,y),v(T,M),l(T[E],o.VIEW,!0),t[y]=I,t[M]=T},function(e,t,i){var r=i(6);r(r.G+r.W+r.F*!i(232).ABV,{DataView:i(233).DataView})},function(e,t,i){i(236)("Int8",1,(function(e){return function(t,i,r){return e(this,t,i,r)}}))},function(e,t,r){if(r(4)){var n=r(26),a=r(2),s=r(5),o=r(6),l=r(232),d=r(233),h=r(18),c=r(197),u=r(15),p=r(8),m=r(202),f=r(36),g=r(35),v=r(37),y=r(14),M=r(3),E=r(69),b=r(73),x=r(11),I=r(56),T=r(154),C=r(44),w=r(57),S=r(48).f,A=r(156),B=r(17),R=r(23),D=r(164),O=r(34),L=r(199),P=r(183),N=r(135),H=r(157),F=r(186),k=r(180),U=r(177),G=r(9),z=r(49),V=G.f,j=z.f,_=a.RangeError,W=a.TypeError,Y=a.Uint8Array,Z="ArrayBuffer",Q="Shared"+Z,J="BYTES_PER_ELEMENT",X="prototype",K=Array[X],q=d.ArrayBuffer,$=d.DataView,ee=D(0),te=D(2),ie=D(3),re=D(4),ne=D(5),ae=D(6),se=O(!0),oe=O(!1),le=P.values,de=P.keys,he=P.entries,ce=K.lastIndexOf,ue=K.reduce,pe=K.reduceRight,me=K.join,fe=K.sort,ge=K.slice,ve=K.toString,ye=K.toLocaleString,Me=R("iterator"),Ee=R("toStringTag"),be=B("typed_constructor"),xe=B("def_constructor"),Ie=l.CONSTR,Te=l.TYPED,Ce=l.VIEW,we="Wrong length!",Se=D(1,(function(e,t){return Le(L(e,e[xe]),t)})),Ae=s((function(){return 1===new Y(new Uint16Array([1]).buffer)[0]})),Be=!!Y&&!!Y[X].set&&s((function(){new Y(1).set({})})),Re=function(e,t){if(e===i)throw W(we);var r=+e,n=g(e);if(t&&!E(r,n))throw _(we);return n},De=function(e,t){var i=f(e);if(i<0||i%t)throw _("Wrong offset!");return i},Oe=function(e){if(x(e)&&Te in e)return e;throw W(e+" is not a typed array!")},Le=function(e,t){if(!x(e)||!(be in e))throw W("It is not a typed array constructor!");return new e(t)},Pe=function(e,t){return Ne(L(e,e[xe]),t)},Ne=function(e,t){for(var i=0,r=t.length,n=Le(e,r);r>i;)n[i]=t[i++];return n},He=function(e,t,i){V(e,t,{get:function(){return this._d[i]}})},Fe=function(e){var t,r,n,a,s,o,l=I(e),d=arguments.length,c=d>1?arguments[1]:i,u=c!==i,p=A(l);if(p!=i&&!T(p)){for(o=p.call(l),n=[],t=0;!(s=o.next()).done;t++)n.push(s.value);l=n}for(u&&d>2&&(c=h(c,arguments[2],2)),t=0,r=g(l.length),a=Le(this,r);r>t;t++)a[t]=u?c(l[t],t):l[t];return a},ke=function(){for(var e=0,t=arguments.length,i=Le(this,t);t>e;)i[e]=arguments[e++];return i},Ue=!!Y&&s((function(){ye.call(new Y(1))})),Ge=function(){return ye.apply(Ue?ge.call(Oe(this)):Oe(this),arguments)},ze={copyWithin:function(e,t){return U.call(Oe(this),e,t,arguments.length>2?arguments[2]:i)},every:function(e){return re(Oe(this),e,arguments.length>1?arguments[1]:i)},fill:function(e){return k.apply(Oe(this),arguments)},filter:function(e){return Pe(this,te(Oe(this),e,arguments.length>1?arguments[1]:i))},find:function(e){return ne(Oe(this),e,arguments.length>1?arguments[1]:i)},findIndex:function(e){return ae(Oe(this),e,arguments.length>1?arguments[1]:i)},forEach:function(e){ee(Oe(this),e,arguments.length>1?arguments[1]:i)},indexOf:function(e){return oe(Oe(this),e,arguments.length>1?arguments[1]:i)},includes:function(e){return se(Oe(this),e,arguments.length>1?arguments[1]:i)},join:function(e){return me.apply(Oe(this),arguments)},lastIndexOf:function(e){return ce.apply(Oe(this),arguments)},map:function(e){return Se(Oe(this),e,arguments.length>1?arguments[1]:i)},reduce:function(e){return ue.apply(Oe(this),arguments)},reduceRight:function(e){return pe.apply(Oe(this),arguments)},reverse:function(){for(var e,t=this,i=Oe(t).length,r=Math.floor(i/2),n=0;n<r;)e=t[n],t[n++]=t[--i],t[i]=e;return t},some:function(e){return ie(Oe(this),e,arguments.length>1?arguments[1]:i)},sort:function(e){return fe.call(Oe(this),e)},subarray:function(e,t){var r=Oe(this),n=r.length,a=v(e,n);return new(L(r,r[xe]))(r.buffer,r.byteOffset+a*r.BYTES_PER_ELEMENT,g((t===i?n:v(t,n))-a))}},Ve=function(e,t){return Pe(this,ge.call(Oe(this),e,t))},je=function(e){Oe(this);var t=De(arguments[1],1),i=this.length,r=I(e),n=g(r.length),a=0;if(n+t>i)throw _(we);for(;a<n;)this[t+a]=r[a++]},_e={entries:function(){return he.call(Oe(this))},keys:function(){return de.call(Oe(this))},values:function(){return le.call(Oe(this))}},We=function(e,t){return x(e)&&e[Te]&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},Ye=function(e,t){return We(e,t=y(t,!0))?u(2,e[t]):j(e,t)},Ze=function(e,t,i){return!(We(e,t=y(t,!0))&&x(i)&&M(i,"value"))||M(i,"get")||M(i,"set")||i.configurable||M(i,"writable")&&!i.writable||M(i,"enumerable")&&!i.enumerable?V(e,t,i):(e[t]=i.value,e)};Ie||(z.f=Ye,G.f=Ze),o(o.S+o.F*!Ie,"Object",{getOwnPropertyDescriptor:Ye,defineProperty:Ze}),s((function(){ve.call({})}))&&(ve=ye=function(){return me.call(this)});var Qe=m({},ze);m(Qe,_e),p(Qe,Me,_e.values),m(Qe,{slice:Ve,set:je,constructor:function(){},toString:ve,toLocaleString:Ge}),He(Qe,"buffer","b"),He(Qe,"byteOffset","o"),He(Qe,"byteLength","l"),He(Qe,"length","e"),V(Qe,Ee,{get:function(){return this[Te]}}),e.exports=function(e,t,r,d){var h=e+((d=!!d)?"Clamped":"")+"Array",u="Uint8Array"!=h,m="get"+e,f="set"+e,v=a[h],y=v||{},M=v&&w(v),E=!v||!l.ABV,I={},T=v&&v[X],A=function(e,i){var r=e._d;return r.v[m](i*t+r.o,Ae)},B=function(e,i,r){var n=e._d;d&&(r=(r=Math.round(r))<0?0:r>255?255:255&r),n.v[f](i*t+n.o,r,Ae)},R=function(e,t){V(e,t,{get:function(){return A(this,t)},set:function(e){return B(this,t,e)},enumerable:!0})};E?(v=r((function(e,r,n,a){c(e,v,h,"_d");var s,o,l,d,u=0,m=0;if(x(r)){if(!(r instanceof q||(d=b(r))==Z||d==Q))return Te in r?Ne(v,r):Fe.call(v,r);s=r,m=De(n,t);var f=r.byteLength;if(a===i){if(f%t)throw _(we);if((o=f-m)<0)throw _(we)}else if((o=g(a)*t)+m>f)throw _(we);l=o/t}else l=Re(r,!0),s=new q(o=l*t);for(p(e,"_d",{b:s,o:m,l:o,e:l,v:new $(s)});u<l;)R(e,u++)})),T=v[X]=C(Qe),p(T,"constructor",v)):H((function(e){new v(null),new v(e)}),!0)||(v=r((function(e,r,n,a){var s;return c(e,v,h),x(r)?r instanceof q||(s=b(r))==Z||s==Q?a!==i?new y(r,De(n,t),a):n!==i?new y(r,De(n,t)):new y(r):Te in r?Ne(v,r):Fe.call(v,r):new y(Re(r,u))})),ee(M!==Function.prototype?S(y).concat(S(M)):S(y),(function(e){e in v||p(v,e,y[e])})),v[X]=T,n||(T.constructor=v));var D=T[Me],O=!!D&&("values"==D.name||D.name==i),L=_e.values;p(v,be,!0),p(T,Te,h),p(T,Ce,!0),p(T,xe,v),(d?new v(1)[Ee]==h:Ee in T)||V(T,Ee,{get:function(){return h}}),I[h]=v,o(o.G+o.W+o.F*(v!=y),I),o(o.S,h,{BYTES_PER_ELEMENT:t,from:Fe,of:ke}),J in T||p(T,J,t),o(o.P,h,ze),F(h),o(o.P+o.F*Be,h,{set:je}),o(o.P+o.F*!O,h,_e),o(o.P+o.F*(T.toString!=ve),h,{toString:ve}),o(o.P+o.F*s((function(){new v(1).slice()})),h,{slice:Ve}),o(o.P+o.F*(s((function(){return[1,2].toLocaleString()!=new v([1,2]).toLocaleString()}))||!s((function(){T.toLocaleString.call([1,2])}))),h,{toLocaleString:Ge}),N[h]=O?D:L,n||O||p(T,Me,L)}}else e.exports=function(){}},function(e,t,i){i(236)("Uint8",1,(function(e){return function(t,i,r){return e(this,t,i,r)}}))},function(e,t,i){i(236)("Uint8",1,(function(e){return function(t,i,r){return e(this,t,i,r)}}),!0)},function(e,t,i){i(236)("Int16",2,(function(e){return function(t,i,r){return e(this,t,i,r)}}))},function(e,t,i){i(236)("Uint16",2,(function(e){return function(t,i,r){return e(this,t,i,r)}}))},function(e,t,i){i(236)("Int32",4,(function(e){return function(t,i,r){return e(this,t,i,r)}}))},function(e,t,i){i(236)("Uint32",4,(function(e){return function(t,i,r){return e(this,t,i,r)}}))},function(e,t,i){i(236)("Float32",4,(function(e){return function(t,i,r){return e(this,t,i,r)}}))},function(e,t,i){i(236)("Float64",8,(function(e){return function(t,i,r){return e(this,t,i,r)}}))},function(e,t,r){var n=r(6),a=r(34)(!0);n(n.P,"Array",{includes:function(e){return a(this,e,arguments.length>1?arguments[1]:i)}}),r(178)("includes")},function(e,t,i){var r=i(6),n=i(125)(!0);r(r.P,"String",{at:function(e){return n(this,e)}})},function(e,t,r){var n=r(6),a=r(248);n(n.P,"String",{padStart:function(e){return a(this,e,arguments.length>1?arguments[1]:i,!0)}})},function(e,t,r){var n=r(35),a=r(85),s=r(33);e.exports=function(e,t,r,o){var l=String(s(e)),d=l.length,h=r===i?" ":String(r),c=n(t);if(c<=d||""==h)return l;var u=c-d,p=a.call(h,Math.ceil(u/h.length));return p.length>u&&(p=p.slice(0,u)),o?p+l:l+p}},function(e,t,r){var n=r(6),a=r(248);n(n.P,"String",{padEnd:function(e){return a(this,e,arguments.length>1?arguments[1]:i,!1)}})},function(e,t,i){i(81)("trimLeft",(function(e){return function(){return e(this,1)}}),"trimStart")},function(e,t,i){i(81)("trimRight",(function(e){return function(){return e(this,2)}}),"trimEnd")},function(e,t,i){var r=i(6),n=i(33),a=i(35),s=i(128),o=i(188),l=RegExp.prototype,d=function(e,t){this._r=e,this._s=t};i(136)(d,"RegExp String",(function(){var e=this._r.exec(this._s);return{value:e,done:null===e}})),r(r.P,"String",{matchAll:function(e){if(n(this),!s(e))throw TypeError(e+" is not a regexp!");var t=String(this),i="flags"in l?String(e.flags):o.call(e),r=new RegExp(e.source,~i.indexOf("g")?i:"g"+i);return r.lastIndex=a(e.lastIndex),new d(r,t)}})},function(e,t,i){i(25)("asyncIterator")},function(e,t,i){i(25)("observable")},function(e,t,i){var r=i(6),n=i(221),a=i(30),s=i(49),o=i(155);r(r.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,i=a(e),r=s.f,l=n(i),d={},h=0;l.length>h;)o(d,t=l[h++],r(i,t));return d}})},function(e,t,i){var r=i(6),n=i(257)(!1);r(r.S,"Object",{values:function(e){return n(e)}})},function(e,t,i){var r=i(28),n=i(30),a=i(42).f;e.exports=function(e){return function(t){for(var i,s=n(t),o=r(s),l=o.length,d=0,h=[];l>d;)a.call(s,i=o[d++])&&h.push(e?[i,s[i]]:s[i]);return h}}},function(e,t,i){var r=i(6),n=i(257)(!0);r(r.S,"Object",{entries:function(e){return n(e)}})},function(e,t,i){var r=i(6),n=i(56),a=i(19),s=i(9);i(4)&&r(r.P+i(260),"Object",{__defineGetter__:function(e,t){s.f(n(this),e,{get:a(t),enumerable:!0,configurable:!0})}})},function(e,t,i){e.exports=i(26)||!i(5)((function(){var e=Math.random();__defineSetter__.call(null,e,(function(){})),delete i(2)[e]}))},function(e,t,i){var r=i(6),n=i(56),a=i(19),s=i(9);i(4)&&r(r.P+i(260),"Object",{__defineSetter__:function(e,t){s.f(n(this),e,{set:a(t),enumerable:!0,configurable:!0})}})},function(e,t,i){var r=i(6),n=i(56),a=i(14),s=i(57),o=i(49).f;i(4)&&r(r.P+i(260),"Object",{__lookupGetter__:function(e){var t,i=n(this),r=a(e,!0);do{if(t=o(i,r))return t.get}while(i=s(i))}})},function(e,t,i){var r=i(6),n=i(56),a=i(14),s=i(57),o=i(49).f;i(4)&&r(r.P+i(260),"Object",{__lookupSetter__:function(e){var t,i=n(this),r=a(e,!0);do{if(t=o(i,r))return t.set}while(i=s(i))}})},function(e,t,i){var r=i(6);r(r.P+r.R,"Map",{toJSON:i(265)("Map")})},function(e,t,i){var r=i(73),n=i(266);e.exports=function(e){return function(){if(r(this)!=e)throw TypeError(e+"#toJSON isn't generic");return n(this)}}},function(e,t,i){var r=i(198);e.exports=function(e,t){var i=[];return r(e,!1,i.push,i,t),i}},function(e,t,i){var r=i(6);r(r.P+r.R,"Set",{toJSON:i(265)("Set")})},function(e,t,i){var r=i(6);r(r.S,"System",{global:i(2)})},function(e,t,i){var r=i(6),n=i(32);r(r.S,"Error",{isError:function(e){return"Error"===n(e)}})},function(e,t,i){var r=i(6);r(r.S,"Math",{iaddh:function(e,t,i,r){var n=e>>>0,a=i>>>0;return(t>>>0)+(r>>>0)+((n&a|(n|a)&~(n+a>>>0))>>>31)|0}})},function(e,t,i){var r=i(6);r(r.S,"Math",{isubh:function(e,t,i,r){var n=e>>>0,a=i>>>0;return(t>>>0)-(r>>>0)-((~n&a|~(n^a)&n-a>>>0)>>>31)|0}})},function(e,t,i){var r=i(6);r(r.S,"Math",{imulh:function(e,t){var i=65535,r=+e,n=+t,a=r&i,s=n&i,o=r>>16,l=n>>16,d=(o*s>>>0)+(a*s>>>16);return o*l+(d>>16)+((a*l>>>0)+(d&i)>>16)}})},function(e,t,i){var r=i(6);r(r.S,"Math",{umulh:function(e,t){var i=65535,r=+e,n=+t,a=r&i,s=n&i,o=r>>>16,l=n>>>16,d=(o*s>>>0)+(a*s>>>16);return o*l+(d>>>16)+((a*l>>>0)+(d&i)>>>16)}})},function(e,t,i){var r=i(275),n=i(10),a=r.key,s=r.set;r.exp({defineMetadata:function(e,t,i,r){s(e,t,n(i),a(r))}})},function(e,t,r){var n=r(203),a=r(6),s=r(21)("metadata"),o=s.store||(s.store=new(r(207))),l=function(e,t,r){var a=o.get(e);if(!a){if(!r)return i;o.set(e,a=new n)}var s=a.get(t);if(!s){if(!r)return i;a.set(t,s=new n)}return s};e.exports={store:o,map:l,has:function(e,t,r){var n=l(t,r,!1);return n!==i&&n.has(e)},get:function(e,t,r){var n=l(t,r,!1);return n===i?i:n.get(e)},set:function(e,t,i,r){l(i,r,!0).set(e,t)},keys:function(e,t){var i=l(e,t,!1),r=[];return i&&i.forEach((function(e,t){r.push(t)})),r},key:function(e){return e===i||"symbol"==typeof e?e:String(e)},exp:function(e){a(a.S,"Reflect",e)}}},function(e,t,r){var n=r(275),a=r(10),s=n.key,o=n.map,l=n.store;n.exp({deleteMetadata:function(e,t){var r=arguments.length<3?i:s(arguments[2]),n=o(a(t),r,!1);if(n===i||!n.delete(e))return!1;if(n.size)return!0;var d=l.get(t);return d.delete(r),!!d.size||l.delete(t)}})},function(e,t,r){var n=r(275),a=r(10),s=r(57),o=n.has,l=n.get,d=n.key,h=function(e,t,r){if(o(e,t,r))return l(e,t,r);var n=s(t);return null!==n?h(e,n,r):i};n.exp({getMetadata:function(e,t){return h(e,a(t),arguments.length<3?i:d(arguments[2]))}})},function(e,t,r){var n=r(206),a=r(266),s=r(275),o=r(10),l=r(57),d=s.keys,h=s.key,c=function(e,t){var i=d(e,t),r=l(e);if(null===r)return i;var s=c(r,t);return s.length?i.length?a(new n(i.concat(s))):s:i};s.exp({getMetadataKeys:function(e){return c(o(e),arguments.length<2?i:h(arguments[1]))}})},function(e,t,r){var n=r(275),a=r(10),s=n.get,o=n.key;n.exp({getOwnMetadata:function(e,t){return s(e,a(t),arguments.length<3?i:o(arguments[2]))}})},function(e,t,r){var n=r(275),a=r(10),s=n.keys,o=n.key;n.exp({getOwnMetadataKeys:function(e){return s(a(e),arguments.length<2?i:o(arguments[1]))}})},function(e,t,r){var n=r(275),a=r(10),s=r(57),o=n.has,l=n.key,d=function(e,t,i){if(o(e,t,i))return!0;var r=s(t);return null!==r&&d(e,r,i)};n.exp({hasMetadata:function(e,t){return d(e,a(t),arguments.length<3?i:l(arguments[2]))}})},function(e,t,r){var n=r(275),a=r(10),s=n.has,o=n.key;n.exp({hasOwnMetadata:function(e,t){return s(e,a(t),arguments.length<3?i:o(arguments[2]))}})},function(e,t,r){var n=r(275),a=r(10),s=r(19),o=n.key,l=n.set;n.exp({metadata:function(e,t){return function(r,n){l(e,t,(n!==i?a:s)(r),o(n))}}})},function(e,t,i){var r=i(6),n=i(201)(),a=i(2).process,s="process"==i(32)(a);r(r.G,{asap:function(e){var t=s&&a.domain;n(t?t.bind(e):e)}})},function(e,t,r){var n=r(6),a=r(2),s=r(7),o=r(201)(),l=r(23)("observable"),d=r(19),h=r(10),c=r(197),u=r(202),p=r(8),m=r(198),f=m.RETURN,g=function(e){return null==e?i:d(e)},v=function(e){var t=e._c;t&&(e._c=i,t())},y=function(e){return e._o===i},M=function(e){y(e)||(e._o=i,v(e))},E=function(e,t){h(e),this._c=i,this._o=e,e=new b(this);try{var r=t(e),n=r;null!=r&&("function"==typeof r.unsubscribe?r=function(){n.unsubscribe()}:d(r),this._c=r)}catch(t){return void e.error(t)}y(this)&&v(this)};E.prototype=u({},{unsubscribe:function(){M(this)}});var b=function(e){this._s=e};b.prototype=u({},{next:function(e){var t=this._s;if(!y(t)){var i=t._o;try{var r=g(i.next);if(r)return r.call(i,e)}catch(e){try{M(t)}finally{throw e}}}},error:function(e){var t=this._s;if(y(t))throw e;var r=t._o;t._o=i;try{var n=g(r.error);if(!n)throw e;e=n.call(r,e)}catch(e){try{v(t)}finally{throw e}}return v(t),e},complete:function(e){var t=this._s;if(!y(t)){var r=t._o;t._o=i;try{var n=g(r.complete);e=n?n.call(r,e):i}catch(e){try{v(t)}finally{throw e}}return v(t),e}}});var x=function(e){c(this,x,"Observable","_f")._f=d(e)};u(x.prototype,{subscribe:function(e){return new E(e,this._f)},forEach:function(e){var t=this;return new(s.Promise||a.Promise)((function(i,r){d(e);var n=t.subscribe({next:function(t){try{return e(t)}catch(e){r(e),n.unsubscribe()}},error:r,complete:i})}))}}),u(x,{from:function(e){var t="function"==typeof this?this:x,i=g(h(e)[l]);if(i){var r=h(i.call(e));return r.constructor===t?r:new t((function(e){return r.subscribe(e)}))}return new t((function(t){var i=!1;return o((function(){if(!i){try{if(m(e,!1,(function(e){if(t.next(e),i)return f}))===f)return}catch(e){if(i)throw e;return void t.error(e)}t.complete()}})),function(){i=!0}}))},of:function(){for(var e=0,t=arguments.length,i=Array(t);e<t;)i[e]=arguments[e++];return new("function"==typeof this?this:x)((function(e){var t=!1;return o((function(){if(!t){for(var r=0;r<i.length;++r)if(e.next(i[r]),t)return;e.complete()}})),function(){t=!0}}))}}),p(x.prototype,l,(function(){return this})),n(n.G,{Observable:x}),r(186)("Observable")},function(e,t,i){var r=i(6),n=i(200);r(r.G+r.B,{setImmediate:n.set,clearImmediate:n.clear})},function(e,t,i){for(var r=i(183),n=i(16),a=i(2),s=i(8),o=i(135),l=i(23),d=l("iterator"),h=l("toStringTag"),c=o.Array,u=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],p=0;p<5;p++){var m,f=u[p],g=a[f],v=g&&g.prototype;if(v)for(m in v[d]||s(v,d,c),v[h]||s(v,h,f),o[f]=c,r)v[m]||n(v,m,r[m],!0)}},function(e,t,i){var r=i(2),n=i(6),a=i(76),s=i(289),o=r.navigator,l=!!o&&/MSIE .\./.test(o.userAgent),d=function(e){return l?function(t,i){return e(a(s,[].slice.call(arguments,2),"function"==typeof t?t:Function(t)),i)}:e};n(n.G+n.B+n.F*l,{setTimeout:d(r.setTimeout),setInterval:d(r.setInterval)})},function(e,t,i){var r=i(290),n=i(76),a=i(19);e.exports=function(){for(var e=a(this),t=arguments.length,i=Array(t),s=0,o=r._,l=!1;t>s;)(i[s]=arguments[s++])===o&&(l=!0);return function(){var r,a=this,s=arguments.length,d=0,h=0;if(!l&&!s)return n(e,i,a);if(r=i.slice(),l)for(;t>d;d++)r[d]===o&&(r[d]=arguments[h++]);for(;s>h;)r.push(arguments[h++]);return n(e,r,a)}}},function(e,t,i){e.exports=i(2)},function(e,t,r){function n(e){var t=d(null);return e!=i&&(g(e)?f(e,!0,(function(e,i){t[e]=i})):l(t,e)),t}var a=r(18),s=r(6),o=r(15),l=r(67),d=r(44),h=r(57),c=r(28),u=r(9),p=r(27),m=r(19),f=r(198),g=r(292),v=r(136),y=r(184),M=r(11),E=r(30),b=r(4),x=r(3),I=function(e){var t=1==e,r=4==e;return function(s,o,l){var d,h,c,u=a(o,l,3),p=E(s),m=t||7==e||2==e?new("function"==typeof this?this:n):i;for(d in p)if(x(p,d)&&(c=u(h=p[d],d,s),e))if(t)m[d]=c;else if(c)switch(e){case 2:m[d]=h;break;case 3:return!0;case 5:return h;case 6:return d;case 7:m[c[0]]=c[1]}else if(r)return!1;return 3==e||r?r:m}},T=I(6),C=function(e){return function(t){return new w(t,e)}},w=function(e,t){this._t=E(e),this._a=c(e),this._i=0,this._k=t};v(w,"Dict",(function(){var e,t=this,r=t._t,n=t._a,a=t._k;do{if(t._i>=n.length)return t._t=i,y(1)}while(!x(r,e=n[t._i++]));return y(0,"keys"==a?e:"values"==a?r[e]:[e,r[e]])})),n.prototype=null,s(s.G+s.F,{Dict:n}),s(s.S,"Dict",{keys:C("keys"),values:C("values"),entries:C("entries"),forEach:I(0),map:I(1),filter:I(2),some:I(3),every:I(4),find:I(5),findKey:T,mapPairs:I(7),reduce:function(e,t,i){m(t);var r,n,a=E(e),s=c(a),o=s.length,l=0;if(arguments.length<3){if(!o)throw TypeError("Reduce of empty object with no initial value");r=a[s[l++]]}else r=Object(i);for(;o>l;)x(a,n=s[l++])&&(r=t(r,a[n],n,e));return r},keyOf:p,includes:function(e,t){return(t==t?p(e,t):T(e,(function(e){return e!=e})))!==i},has:x,get:function(e,t){if(x(e,t))return e[t]},set:function(e,t,i){return b&&t in Object?u.f(e,t,o(0,i)):e[t]=i,e},isDict:function(e){return M(e)&&h(e)===n.prototype}})},function(e,t,r){var n=r(73),a=r(23)("iterator"),s=r(135);e.exports=r(7).isIterable=function(e){var t=Object(e);return t[a]!==i||"@@iterator"in t||s.hasOwnProperty(n(t))}},function(e,t,i){var r=i(10),n=i(156);e.exports=i(7).getIterator=function(e){var t=n(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return r(t.call(e))}},function(e,t,i){var r=i(2),n=i(7),a=i(6),s=i(289);a(a.G+a.F,{delay:function(e){return new(n.Promise||r.Promise)((function(t){setTimeout(s.call(t,!0),e)}))}})},function(e,t,i){var r=i(290),n=i(6);i(7)._=r._=r._||{},n(n.P+n.F,"Function",{part:i(289)})},function(e,t,i){var r=i(6);r(r.S+r.F,"Object",{isObject:i(11)})},function(e,t,i){var r=i(6);r(r.S+r.F,"Object",{classof:i(73)})},function(e,t,i){var r=i(6),n=i(299);r(r.S+r.F,"Object",{define:n})},function(e,t,i){var r=i(9),n=i(49),a=i(221),s=i(30);e.exports=function(e,t){for(var i,o=a(s(t)),l=o.length,d=0;l>d;)r.f(e,i=o[d++],n.f(t,i));return e}},function(e,t,i){var r=i(6),n=i(299),a=i(44);r(r.S+r.F,"Object",{make:function(e,t){return n(a(e),t)}})},function(e,t,r){r(134)(Number,"Number",(function(e){this._l=+e,this._i=0}),(function(){var e=this._i++,t=!(e<this._l);return{done:t,value:t?i:e}}))},function(e,t,i){var r=i(6),n=i(303)(/[\\^$*+?.()|[\]{}]/g,"\\$&");r(r.S,"RegExp",{escape:function(e){return n(e)}})},function(e,t){e.exports=function(e,t){var i=t===Object(t)?function(e){return t[e]}:t;return function(t){return String(t).replace(e,i)}}},function(e,t,i){var r=i(6),n=i(303)(/[&<>"']/g,{"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&apos;"});r(r.P+r.F,"String",{escapeHTML:function(){return n(this)}})},function(e,t,i){var r=i(6),n=i(303)(/&(?:amp|lt|gt|quot|apos);/g,{"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&apos;":"'"});r(r.P+r.F,"String",{unescapeHTML:function(){return n(this)}})}]),"undefined"!=typeof module&&module.exports?module.exports=e:"function"==typeof define&&define.amd?define((function(){return e})):t.core=e;r.CollisionManager=class{constructor(){this.condition=[{categoryId:"-2000011"}],this.distance=15}setCondition(e){e instanceof Array&&(this.condition=e)}getCondition(){return this.condition}getDistance(){return this.distance}setDistance(e){this.distance=e}matchConditions(e){var t=this.condition;if(0==t.length)return!1;for(var i=!0,r=0,n=t.length;r<n;r++){var a=t[r];for(var s in a)if(!e.hasOwnProperty(s)||e[s]!=a[s]){i=!1;break}if(1==i)break;r<t.length-1&&(i=!0)}return i}hasCollision(e,t){if(!e)return!1;var i=this.matchConditions(e),r=t<=this.distance;return!(!i||!r)}},function(){let e=new THREE.Vector3,t=new THREE.Vector3,i=new THREE.Vector2,n=new THREE.Vector3,a=new THREE.Vector3,s=new THREE.Plane,o=new THREE.Vector3,l=new THREE.Vector3,d=new THREE.Vector3,h=!1,c=new THREE.Vector3,u=new THREE.Matrix4;r.UserInputHelper=class{constructor(e,t){this.camera=e.camera,this.cameraControl=e,this.domElement=t,this.intersectContext=new r.IntersectContext,this.rayCaster=new r.Raycaster,this._lastTrackingPoint=new THREE.Vector3,this.viewer=e.viewer,this._rotatePivot=new THREE.Vector3,this.pivot=null,this._assistGroundPlane=new r.Ground,this.boundaryLimitFactor=2,this._planIntersect=new THREE.Vector3,this.intersectHelper=e.intersector,this._minObjectOffset=.5}getWorldDimension(t,i,n){var s=this.camera.position,o=this.camera.direction(a).normalize(),l=this.getTrackingPoint(t,i,!0),d=e.subVectors(l,s),h=Math.abs(o.dot(d)),c=r.DomUtil.getContainerOffsetToClient(this.domElement),u=c.width/c.height,p=2*h*Math.tan(THREE.Math.degToRad(.5*this.camera.fov)),m=p*u;return r.Utils.isDefined(n)||(console.warn("result is needed for function UserInputHelper.getWorldDimension()"),n=new THREE.Vector2),n.set(m,p),n}getTrackingPoint(t,i,n){e.set(t,i),this.getIntersectContext(e);let o=null;if(o=!0===n&&r.GlobalData.ZoomHitByBox?this.intersectHelper.hitTestByBox(this.intersectContext):this.intersectHelper.hitTest(this.intersectContext),o)this._lastTrackingPoint.copy(o),h=!0;else{const e=this.getRayCaster(t,i).ray;if(h){const t=this.camera.direction(a).normalize();if(s.setFromNormalAndCoplanarPoint(t,this._lastTrackingPoint),o=e.intersectPlane(s,this._planIntersect),o){const t=this.camera.position;o.distanceTo(t)<r.Math.EPSILON1&&(o=this._getTrackingPointFromScene(e),h=!1)}else o=this._getTrackingPointFromScene(e),h=!1}else o=this._getTrackingPointFromScene(e)}return o}getRotatePivot(t,i){var n=null;let a=this.viewer.getRotationCenter();if(r.Utils.isDefined(a))return a;switch(t){case r.RotatePivotMode.SELECTION:n=this._getRotatePivotFromSelection(i,this._rotatePivot);break;case r.RotatePivotMode.CENTER:n=this.viewer.getScene().getBoundingBox().getCenter(e);break;case r.RotatePivotMode.CAMERA:n=null;break;default:n=this._getRotatePivotFromIntersect(i)}return this.cameraControl.dirtyCamera(!0),this.cameraControl.setCameraChanging(!0),this.pivot=n,n}getPanOffset(e,t,i,n){var a=r.DomUtil.getContainerOffsetToClient(this.domElement),s=e.x-a.left,h=e.y-a.top;o.x=s/a.width,o.y=h/a.height,s=t.x-a.left,h=t.y-a.top,l.x=s/a.width,l.y=h/a.height,d.subVectors(l,o);var c=-d.x*i.x,u=d.y*i.y,p=this.cameraControl.getWorldRight().multiplyScalar(c),m=this.cameraControl.getWorldUp().multiplyScalar(u);return this.cameraControl.dirtyCamera(!0),this.cameraControl.setCameraChanging(!0),n.addVectors(p,m),n}adjustCameraForPan(t){if(!this.lockPan){var i=this.camera;if(e.copy(i.position),e.add(t),!(null!=i.minimumElevation&&t.y<0&&e.y<i.minimumElevation)){if(this._limitWorldScalar&&this.cameraControl._checkZoomNearBoundary(e,-1)){if(e.x<0&&t.x<0||e.z<0&&t.z<0)return;if(e.x>0&&t.x>0||e.z>0&&t.z>0)return}this.cameraControl.dirtyCamera(!0),this.cameraControl.setCameraChanging(!0),i.target.add(t),i.position.add(t)}}}adjustCameraForZoom(i,n){if(Math.abs(i)<r.Math.EPSILON6)return!1;const s=this.camera,o=s.position,l=s.direction(a);if(n?t.subVectors(n,o):t.copy(l),e.copy(t),t.multiplyScalar(i),s.isPerspective){const r=e.length()*(1-i),n=this.viewer.modelManager.isMeterUnit()?1:.001;var d=this.viewer.getScene().getMatrixGlobal();u.copy(d).invert(),e.applyMatrix4(u);e.length()*(1-i)*n<this._minObjectOffset&&(this.cameraControl.setTrackPointChanging(!0),t.normalize().multiplyScalar(r+.1))}else s.orthoScale*=i+1,s.setZoom(s.orthoScale);t.add(o),r.Utils.isDefined(s.minimumElevation)&&t.y<s.minimumElevation||this._checkCameraLimitBoundary(s,t,i)||(s.position.copy(t),s.target.copy(l.add(t)),this.cameraControl.dirtyCamera(!0),this.cameraControl.setCameraChanging(!0))}clientToViewport(e,t,i){var n=r.DomUtil.getContainerOffsetToClient(this.domElement),a=i||new THREE.Vector2;return a.x=(e-n.left)/n.width*2-1,a.y=-(t-n.top)/n.height*2+1,a}viewportToClient(e,t,i){var n=r.DomUtil.getContainerOffsetToClient(this.domElement),a=i||new THREE.Vector2;return a.x=(e+1)/2*n.width+n.left,a.y=(1-t)/2*n.height+n.top,a}getIntersectContext(e){var t=this.viewer.modelManager;return this.intersectContext.scene=this.viewer.getScene(),this.intersectContext.camera=this.camera,r.Utils.isDefined(e)&&this.clientToViewport(e.x,e.y,this.intersectContext.mouse),this.intersectContext.viewportSize=this.viewer.getViewportSize(),this.intersectContext.octreeRoots=t.getOctreeRoots(),this.intersectContext.octantMap=t.getOctantMap(),this.intersectContext}getRayCaster(e,t){return this.clientToViewport(e,t,i),this.rayCaster.setFromCamera(i,this.camera),this.rayCaster}_getTrackingPointFromScene(t){let i=1/0;const r=t.origin,a=this.viewer.getScene().getBoundingBox();if(t.intersectBox(a,n))return n;e.set(0,0,-1),s.setFromNormalAndCoplanarPoint(e,a.max);let o=0;return t.intersectPlane(s,this._planIntersect)&&(o=r.distanceTo(this._planIntersect),o<i&&(i=o,n.copy(this._planIntersect))),e.set(0,-1,0),s.setFromNormalAndCoplanarPoint(e,a.max),t.intersectPlane(s,this._planIntersect)&&(o=r.distanceTo(this._planIntersect),o<i&&(i=o,n.copy(this._planIntersect))),e.set(-1,0,0),s.setFromNormalAndCoplanarPoint(e,a.max),t.intersectPlane(s,this._planIntersect)&&(o=r.distanceTo(this._planIntersect),o<i&&(i=o,n.copy(this._planIntersect))),e.set(0,0,-1),s.setFromNormalAndCoplanarPoint(e,a.min),t.intersectPlane(s,this._planIntersect)&&(o=r.distanceTo(this._planIntersect),o<i&&(i=o,n.copy(this._planIntersect))),e.set(0,-1,0),s.setFromNormalAndCoplanarPoint(e,a.min),t.intersectPlane(s,this._planIntersect)&&(o=r.distanceTo(this._planIntersect),o<i&&(i=o,n.copy(this._planIntersect))),e.set(0,0,-1),s.setFromNormalAndCoplanarPoint(e,a.min),t.intersectPlane(s,this._planIntersect)&&(o=r.distanceTo(this._planIntersect),o<i&&(i=o,n.copy(this._planIntersect))),n}_getRotatePivotFromIntersect(e){var t=this.getIntersectContext(e);let i;if(i=r.GlobalData.ZoomHitByBox?this.intersectHelper.hitTestByBox(t):this.intersectHelper.hitTest(t),e&&i)return i;return this.viewer.getScene().getBoundingBox().getCenter(c)}_getRotatePivotFromSelection(t,i){const n=this.viewer,a=n.getScene();let s;if(a.hasClipPlanes()){const e=r.ClipPlaneManager.getInstance(a);if(e.isEnabled()&&(s=e.getClipBoundingBox(),r.Utils.isDefined(s)&&!s.isEmpty()&&e.isVisible()))return i.copy(s.getCenter(c)),i}const o=n.getFilter().getVisibleComponentSet(n.modelManager.sceneState.getSelectionSet()),l=n.getBoundingBoxByIds(o);if(!l||l.isEmpty())i.copy(this._getRotatePivotFromIntersect(t));else{if(r.Utils.isDefined(s))l.intersect(s);else if(a.hasFillClipPlanes()){const e=r.FillClipPlaneManager.getInstance(a);if(e.isEnabled()){const t=e.getFillClipBoundingBox();r.Utils.isDefined(t)&&l.intersect(t)}}i.copy(l.getCenter(e))}return i}_checkCameraLimitBoundary(t,i,n){if(!t.isPerspective||!r.GlobalData.ConstraintZoom)return!1;const a=this.viewer.getScene().getBoundingBox();if(r.Utils.isDefined(n)&&n>0)return!t.getFrustum().intersectsBox(a);const s=.5*a.getSize(e).length()/Math.tan(THREE.Math.degToRad(.5*t.fov))*this.boundaryLimitFactor,o=a.getCenter(e);return!(i.distanceTo(o)<s)}}}(),function(){const e=new THREE.Vector3(0,1,0);let t=new THREE.Vector3(0,0,1),i=new THREE.Vector3,n=new THREE.Quaternion,a=new THREE.Matrix4,s=new THREE.Vector3,o=new THREE.Quaternion,l=new THREE.Vector3,d=new THREE.Vector3,h=new THREE.Vector3,c=new THREE.Matrix4,u=new THREE.Matrix4,p=new THREE.Box3,m=new THREE.Vector3,f=!1;function g(e,t,i,r){a.copy(t).invert();var n=new THREE.Vector3(e.position.x,e.position.y,e.position.z),s=n.clone();s.applyMatrix4(a);var o=new THREE.Vector3(i.x,i.y,i.z);o.add(n),o.applyMatrix4(a),o.sub(s).normalize().multiplyScalar(r);var l=o.clone();return o.add(s),o.applyMatrix4(t),o.sub(n),{stepDiffWorld:l,stepDiffDrawing:o}}function v(e){if(e.viewer.getRotationCenter())return e.viewer.getRotationCenter();var t=e.viewer.modelManager.sceneState;if(t.hasSelection()){var i=e.viewer.getFilter().getVisibleComponentSet(t.getSelectionSet()),r=viewer.getBoundingBoxByIds(i);if(r&&!r.isEmpty())return r.getCenter(d)}return e.pivot?e.pivot:e.scene.getBoundingBox().getCenter(d)}function y(i,r,n,a){if(null==a||void 0===a)return!0;const s=a[0],o=a[1];var l=i.position;let d=new THREE.Vector3;i.getWorldDirection(d);var h=i.realUp||i.up,c=d.clone().cross(h).normalize(),u=(new THREE.Quaternion).setFromAxisAngle(c,r);l.clone().sub(n).normalize();var p=d.clone().negate(),m=p.angleTo(e.clone()),f=p.clone().projectOnPlane(e.clone()),g=f.angleTo(t.clone());f.x<0&&(g=2*Math.PI-g),d.applyQuaternion(u).normalize();var v=d.clone().negate(),y=v.angleTo(e.clone()),M=v.clone().projectOnPlane(e.clone()),E=M.angleTo(t.clone());if(M.x<0&&(E=2*Math.PI-E),Math.abs(E-g)>.001)return!1;if(m>s&&m<o){if(y>o||y<s)return!1}else if((m>o?y-m:m-y)>0)return!1;return!0}r.CameraControl=class{constructor(e,t,i,n,a,s){this.viewer=e,this.camera=i,this.domElement=n,this.scene=t,this.intersector=new r.IntersectHelper(e),this._ground=new r.Ground,this.collisionManager=new r.CollisionManager,this.pivotBallGroup=null,this.minDollyDistance=5,this.gravity=0,this.farFactor=2,this.maxPitch=void 0,this.minPitch=void 0,this._cameraChanging=!1,s=r.Utils.defaultValue(s,{}),this._enableDamping=r.Utils.defaultValue(s.enableDamping,!1),this._dynamicDampingFactor=r.Utils.defaultValue(s.dynamicDampingFactor,.1),this._limitWorldScalar=!0,this.lockPan=!1,this.userInputWorking=!1,this._changeCallBack=a,this._planIntersect=new THREE.Vector3,this.userInputHelper=new r.UserInputHelper(this,n),this._lastTrackPoint=new THREE.Vector3,this._lastZoomCxy=new THREE.Vector2}destroy(){this.viewer=null,this.camera=null,this.domElement=null,this.scene=null,this.intersector.destroy(),this.intersector=null,this.collisionManager=null,this.pivotBallGroup=null}enableDamping(){this._enableDamping=!0;const e=this.viewer.editorManager.userInputEditor;r.Utils.isDefined(e)&&e.resetDynamicMoving()}disableDamping(){this._enableDamping=!1;const e=this.viewer.editorManager.userInputEditor;r.Utils.isDefined(e)&&e.resetDynamicMoving()}isEnableDamping(){return this._enableDamping}dynamicDampingFactor(e){return r.Utils.isDefined(e)&&(this._dynamicDampingFactor=e),this._dynamicDampingFactor}enableLimitWorldScalar(e){this._limitWorldScalar=e}isCameraChanging(){return this._cameraChanging}setCameraChanging(e){this._cameraChanging=e,this.camera.dirty=e}setCamera(e){this.camera=e}getCamera(){return this.camera.updateMVP(),this.camera}dirtyCamera(e){this.camera.dirty=e}getFrustum(){return this.camera.getFrustum()}lockAxisZ(e){r.EditorConfig.LockAxisZ=e}isLockedAxisZ(){return r.EditorConfig.LockAxisZ}setLockAxisZRange(e){r.EditorConfig.LockAxisZRange=e}getLockAxisZRange(){return r.EditorConfig.LockAxisZRange}updateMaxPitch(e){this.maxPitch=e}updateMinPitch(e){this.minPitch=e}processRotate(e,t){var i=this.viewer.getClientSize(),r=-2*Math.PI*e.x/i.x,n=-2*Math.PI*e.y/i.y;this.handleRotation(r,n,t)}handleRotation(t,i,n){var a=this.camera,s=a.position,o=a.target;a.getWorldDirection(l);var d,h=o.clone().sub(s),c=h.length(),u=null,p=function(e,t=!1){var i,r,d,u=new THREE.Vector3;if(n){if(r=(i=s.clone().sub(n)).length(),i.normalize(),d=i.clone().applyQuaternion(e).normalize(),t&&null!=a.minimumElevation){let e=s.clone();if(e.copy(n).add(d.clone().multiplyScalar(r)),e.y<a.minimumElevation)return!1}s.copy(n).add(d.multiplyScalar(r)),l.applyQuaternion(e).normalize(),u.copy(s).add(l.multiplyScalar(c)),o.copy(u)}else i=h.clone(),r=c,i.normalize(),d=i.clone().applyQuaternion(e).normalize(),u.copy(s).add(d.multiplyScalar(r)),o.copy(u);return!0},m=a.up,f=l.clone().cross(m).normalize().clone().cross(l).normalize();if(a.realUp.copy(f),r.EditorConfig.LockAxisZ){if(Math.abs(t)>Math.abs(i))d=e,p(u=(new THREE.Quaternion).setFromAxisAngle(d,t)),a.realUp.applyQuaternion(u).normalize(),this.adjustCameraUp();else if(null!=r.EditorConfig.LockAxisZRange&&Math.abs(i)>1e-4){const e=r.EditorConfig.LockAxisZRange;y(this.camera,i,n,e)&&(d=l.clone().cross(m).normalize(),p(u=(new THREE.Quaternion).setFromAxisAngle(d,i)),a.realUp.applyQuaternion(u).normalize(),this.adjustCameraUp())}}else if(Math.abs(t)>Math.abs(i))(Math.abs(l.y+1)<1e-4||Math.abs(l.y-1)<1e-4)&&(d=l.clone().cross(a.realUp).normalize(),p(u=(new THREE.Quaternion).setFromAxisAngle(d,.1)),a.realUp.applyQuaternion(u).normalize(),this.adjustCameraUp()),d=l.y>0&&a.realUp.y<0?new THREE.Vector3(0,-1,0):new THREE.Vector3(0,1,0),p(u=(new THREE.Quaternion).setFromAxisAngle(d,t)),a.realUp.applyQuaternion(u).normalize();else if(Math.abs(i)>1e-4){if(null!=this.maxPitch&&null!=this.minPitch){const e=a.target.clone().sub(a.position);let t=new THREE.Vector2(Math.sqrt(e.x*e.x+e.z*e.z)*(a.realUp.y>0?1:-1),e.y).angle();if(t-Math.PI>0&&(t-=2*Math.PI),t=-t,i<0){if(t-i*(a.realUp.y>0?1:-1)>=this.maxPitch)return}else if(null!=a.minimumElevation&&a.position.y<a.minimumElevation||t-i<=this.minPitch)return}if(d=l.clone().cross(a.realUp).normalize(),!p(u=(new THREE.Quaternion).setFromAxisAngle(d,i),i>0))return;a.realUp.applyQuaternion(u).normalize(),this.adjustCameraUp()}this.updateCamera(),this.dirtyCamera(!0),this.setCameraChanging(!0)}updateCamera(){var e=this.camera;e.dirty&&(e.lookAt(e.target),e.updateMVP())}update(e,t){this.updateCamera();var a=this.camera;e?(void 0!==t&&this.needUpdateRenderList(t),!1!==r.GlobalData.BatchMergeEnabled&&r.GlobalData.Renderer!==r.EnumRendererType.INCREMENT||this.viewer.render(),i.copy(a.position),n.copy(a.quaternion)):(i.distanceToSquared(a.position)>r.Math.EPSILON6||8*(1-n.dot(a.quaternion))>r.Math.EPSILON6)&&(i.copy(a.position),n.copy(a.quaternion))}updateView(e){void 0!==e&&this.needUpdateRenderList(e),this._changeCallBack()}updateHighlight(){this._changeCallBack(!0)}needUpdateRenderList(e){this.viewer.editorManager.isUpdateRenderList=e,this.setCameraChanging(e)}pan(e,t){var i=this.domElement===document?this.domElement.body:this.domElement,n=new THREE.Vector3;const a=this;function s(e){var t=a.camera.matrix.elements;n.set(t[0],t[1],t[2]),n.multiplyScalar(-e),a.camera.target.add(n),a.camera.position.add(n)}function o(e){var t=a.camera.matrix.elements;n.set(t[4],t[5],t[6]),n.multiplyScalar(e),a.camera.target.add(n),a.camera.position.add(n)}if(this.camera.isPerspective){var l=this.camera.position.clone().sub(this.camera.target).length();s(2*e*(l*=Math.tan(this.camera.fov/2*Math.PI/180))/i.clientHeight),o(2*t*l/i.clientHeight)}else void 0!==this.camera.top?(s(e*(this.camera.right-this.camera.left)/i.clientWidth),o(t*(this.camera.top-this.camera.bottom)/i.clientHeight)):r.Logger.warn("WARNING: CloudPickEditor.js encountered an unknown camera type - pan disabled.")}_checkZoomNearBoundary(e,t){if(t<0){d.copy(e);var i=this.scene.getOriginalBoundingBoxWorld(),r=.5*i.getSize(d).length()/Math.tan(THREE.Math.degToRad(.5*this.camera.fov)),n=this.scene.getMatrixWorldGlobal();a.copy(n).invert(),d.applyMatrix4(a);var s=20*r,o=i.getCenter(d);if(d.distanceTo(o)>s)return!0}return!1}endOperation(){this.intersector.lastIntersect=null}onUserInputFinished(){this.userInputWorking=!1,this.viewer.render()}setTrackPointChanging(e){this._trackPointChanging=e}isTrackPointChanging(){return this._trackPointChanging}zoom(e,t,i){let n=null;this._lastZoomCxy.x!==t||this._lastZoomCxy.y!==i||this.isTrackPointChanging()?r.Utils.isDefined(t)&&r.Utils.isDefined(i)&&(n=this.userInputHelper.getTrackingPoint(t,i,!0),this._lastZoomCxy.x=t,this._lastZoomCxy.y=i,this._lastTrackPoint=n,this.setTrackPointChanging(!1)):n=this._lastTrackPoint,this.userInputHelper.adjustCameraForZoom(e,n),this.update()}touchDolly(e,t,i){const r=.5*i;var n=new THREE.Vector2(e,t),a=this.getIntersectContext(n),s=this.intersector.hitTest(a);null!=s?this.userInputHelper.adjustCameraForZoom(r,s):this.userInputHelper.adjustCameraForZoom(r,null)}zoomWithCenter(e,t){let i=e>0?e/(1-e):e;this.userInputHelper.adjustCameraForZoom(i,this.scene.worldToDrawing(t)),this.update()}getContainerDimensions(){return r.DomUtil.getContainerOffsetToClient(this.domElement)}screenToCanvas(e,t){var i=this.getContainerDimensions();return{x:e-i.left,y:t-i.top}}calculatePivot(e,t){return this.userInputHelper.getRotatePivot(e,t)}mapWindowToViewport(e,t,i){var r=this.getContainerDimensions(),n=i||new THREE.Vector2;return n.x=(e-r.left)/r.width*2-1,n.y=-(t-r.top)/r.height*2+1,n}mapViewportToWindow(e,t,i){var r=this.getContainerDimensions(),n=i||new THREE.Vector2;return n.x=(e+1)/2*r.width+r.left,n.y=(1-t)/2*r.height+r.top,n}computeFrustum(e,t,i,r,n,a){var s=this.camera,o=s.near*Math.tan(THREE.Math.degToRad(.5*s.fov)),l=o*s.aspect,d=(e-a.left)/a.width*2-1,h=(t-a.left)/a.width*2-1,p=-(i-a.top)/a.height*2+1,m=-(r-a.top)/a.height*2+1;if(s.isPerspective?c.makePerspective(d*l,h*l,p*o,m*o,s.near,s.far):c.makeOrthographic(d*l,h*l,p*o,m*o,s.near,s.far),s.updateMatrixWorld(),s.matrixWorldInverse.copy(s.matrixWorld).invert(),u.multiplyMatrices(c,s.matrixWorldInverse),n.setFromProjectionMatrix(u),!s.isPerspective){const a=(e,t,i,r,a)=>{const s=[this.viewer.worldToDrawing(this.viewer.clientToWorld({x:t,y:i,z:0})),this.viewer.worldToDrawing(this.viewer.clientToWorld({x:r,y:a,z:0})),this.viewer.worldToDrawing(this.viewer.clientToWorld({x:r,y:a,z:1}))];n.planes[e].setFromCoplanarPoints(...s)};a(0,e,i,e,r),a(1,t,r,t,i),a(2,e,r,t,r),a(3,t,i,e,i)}}getCameraName(){return this.camera===this.viewer.defaultCamera?this.camera.isPerspective?"persp":"orth":this.camera.name}getCameraInfo(){var e=new r.CameraInfo(this.getCameraName(),this.camera.position,this.camera.target,this.camera.up);return JSON.stringify(e)}adjustCameraUp(){this.camera.realUp.y>0?this.camera.up.set(0,1,0):this.camera.realUp.y<0?this.camera.up.set(0,-1,0):this.camera.realUp.x>0?this.camera.up.set(1,0,0):this.camera.realUp.x<0?this.camera.up.set(-1,0,0):this.camera.realUp.z>0?this.camera.up.set(0,0,1):this.camera.realUp.z<0&&this.camera.up.set(0,0,-1)}getWorldRight(){var e=new THREE.Vector3,t=this.camera.up,i=this.camera.direction(h);return e.crossVectors(i,t),0===e.lengthSq()&&(t.z>t.y?i.y-=1e-4:i.z+=1e-4,e.crossVectors(i,t)),e.normalize()}getWorldRightByRealUp(){var e=new THREE.Vector3,t=this.camera.realUp,i=this.camera.direction(h);return e.crossVectors(i,t),0===e.lengthSq()&&(t.z>t.y?i.y-=1e-4:i.z+=1e-4,e.crossVectors(i,t)),e.normalize()}getWorldUp(){var e=this.getWorldRight(),t=this.camera.direction(h);return e.cross(t).normalize()}getWorldPointFromNearPlane(e,t){var i=new THREE.Vector3(e,t,0);return i.unproject(this.camera),i}setCameraPosition(e){var t=this.camera,i=this.camera.direction(),r=i.length(),n=i.clone();n.normalize(),n.setLength(r),t.position.copy(e),t.target.addVectors(t.position,n),this.dirtyCamera(!0),this.setCameraChanging(!0)}moveStraight(e,t){var i=this.camera.position,r=this.camera.target;if(t){var n=new THREE.Vector3(r.x-i.x,0,r.z-i.z),a=e/n.length(),s=new THREE.Vector3(n.x*a,0,n.z*a);i.add(s),r.add(s)}else{var o=r.clone().sub(i);this.camera.translateZ(-e),r.addVectors(i,o)}}getIntersectContext(e){return this.userInputHelper.getIntersectContext(e)}getLastIntersect(){return this.intersector.lastIntersect}touchUpdateRotationInPersonView(t,i){this.dirtyCamera(!0),this.setCameraChanging(!0);var n=this,a=this.camera.position,s=this.camera.target.clone().sub(a).length();this.camera.getWorldDirection(l);var o=this.camera.realUp||this.camera.up,d=l.clone().cross(o).normalize(),h=d.clone().cross(l).normalize();this.camera.realUp.copy(h);const c=r.EditorConfig.LockAxisZRange;var u,p;if(Math.abs(t)>Math.abs(i))u=e,p=t;else{if(r.EditorConfig.LockAxisZ&&!y(this.camera,i,this.camera.target,c))return;u=d;var m=new THREE.Vector3(0,1,0).clone().cross(o),f=m.dot(d),g=Math.asin(m.length());f<0&&(g=-g),g+i>Math.PI/4-r.Math.EPSILON6?i=Math.PI/4-r.Math.EPSILON6-g:g+i<-Math.PI/4+r.Math.EPSILON6&&(i=-Math.PI/4+r.Math.EPSILON6-g),p=i}var v,M,E=(new THREE.Quaternion).setFromAxisAngle(u,p);v=E,M=new THREE.Vector3,l.applyQuaternion(v).normalize(),M.copy(a).add(l.multiplyScalar(s)),n.camera.target.copy(M),this.camera.realUp.applyQuaternion(E).normalize()}touchUpdateRotationInModelView(t,i,n){this.dirtyCamera(!0),this.setCameraChanging(!0);var a=n||this.scene.getBoundingBox().getCenter(d),s=this.camera.position,o=this.camera.target.clone().sub(s).length(),h=s.clone().sub(a),c=h.length(),u=null;this.camera.getWorldDirection(l),h.normalize();const p=this;var m,f=function(e){var t=new THREE.Vector3,i=h.clone().applyQuaternion(e).normalize();s.copy(a).add(i.multiplyScalar(c)),l.applyQuaternion(e).normalize(),t.copy(s).add(l.multiplyScalar(o)),p.camera.target.copy(t)},g=this.camera.up,M=l.clone().cross(g).normalize(),E=M.clone().cross(l).normalize();if(this.camera.realUp.copy(E),r.EditorConfig.LockAxisZ){if(Math.abs(t)>Math.abs(i))m=e,f(u=(new THREE.Quaternion).setFromAxisAngle(m,t)),this.camera.realUp.applyQuaternion(u).normalize();else if(null!=r.EditorConfig.LockAxisZRange&&Math.abs(i)>1e-4){const e=r.EditorConfig.LockAxisZRange;y(this.camera,i,a,e)&&(m=l.clone().cross(g).normalize(),f(u=(new THREE.Quaternion).setFromAxisAngle(m,i)),this.camera.realUp.applyQuaternion(u).normalize(),this.adjustCameraUp())}}else if(Math.abs(t)>Math.abs(i))(Math.abs(l.y+1)<1e-4||Math.abs(l.y-1)<1e-4)&&(m=l.clone().cross(this.camera.realUp).normalize(),f(u=(new THREE.Quaternion).setFromAxisAngle(m,.1)),this.camera.realUp.applyQuaternion(u).normalize(),this.adjustCameraUp()),m=l.y>0&&this.camera.realUp.y<0?new THREE.Vector3(0,-1,0):new THREE.Vector3(0,1,0),f(u=(new THREE.Quaternion).setFromAxisAngle(m,t)),this.camera.realUp.applyQuaternion(u).normalize();else if(Math.abs(i)>.01){m=l.clone().cross(this.camera.realUp).normalize();var b=new THREE.Vector3(0,1,0).clone().cross(g),x=b.dot(M),I=Math.asin(b.length());x<0&&(I=-I),I+i>Math.PI/2-r.Math.EPSILON6?i=Math.PI/2-r.Math.EPSILON6-I:I+i<-Math.PI/2+r.Math.EPSILON6&&(i=-Math.PI/2+r.Math.EPSILON6-I),f(u=(new THREE.Quaternion).setFromAxisAngle(m,i)),this.camera.realUp.applyQuaternion(u).normalize(),this.adjustCameraUp()}this.pivotBallGroup||function(e){e.pivotBallGroup=e.scene.getOrCreateObjectGroup(r.ObjectGroupType.PIVOTBALL,{priority:10,globalSpace:!1});var t=new THREE.SphereBufferGeometry(15,64,64),i=new THREE.Mesh(t,new r.PhongLightingMaterial({color:16777215,depthTest:!1,opacity:.5,transparent:!0,side:THREE.DoubleSide}));t=new THREE.SphereBufferGeometry(1,64,64);var n=new THREE.Mesh(t,new r.PhongLightingMaterial({color:16711680,depthTest:!1,opacity:.5,transparent:!0,side:THREE.DoubleSide}));e.pivotBallGroup.add(i),e.pivotBallGroup.add(n)}(this),this.pivotBallGroup.visible=!0;for(var T=function(e){var t=e.camera,i=t.position,r=e.camera.target.clone().sub(i);r.normalize();var n=new THREE.Plane;n.setFromNormalAndCoplanarPoint(r.clone().negate(),v(e)),n.normalize();var a=n.distanceToPoint(i)*Math.tan(.5*t.fov),s=e.getContainerDimensions();return 2*a/(s.height-s.top)}(this),C=v(this),w=0;w<this.pivotBallGroup.children.length;w++){var S=this.pivotBallGroup.children[w];S.position.copy(C),S.scale.set(T,T,T),S.updateMatrixWorld()}}touchUpdateRotation(e,t){var i=this.camera.position;this.scene.getBoundingBox().containsPoint(i)?this.touchUpdateRotationInPersonView(e,t):this.touchUpdateRotationInModelView(e,t,v(this))}clearTouchRotateState(){this.pivotBallGroup&&(this.pivotBallGroup.visible=!1)}touchEndHandler(){this.viewer.editorManager.cameraChange=!1,this.clearTouchRotateState(),this.touchUpdate()}touchUpdate(){var e=new THREE.Vector3;e.copy(this.camera.up),this.camera.up.copy(this.camera.realUp),this.camera.lookAt(this.camera.target),this.camera.up.copy(e),this.camera.updateMVP(),(s.distanceToSquared(this.camera.position)>r.Math.EPSILON6||8*(1-o.dot(this.camera.quaternion))>r.Math.EPSILON6)&&(this._changeCallBack(),this.dirtyCamera(!1),s.copy(this.camera.position),o.copy(this.camera.quaternion))}goTurnForWalk(e){var t=this.getCamera(),i=t.position,r=t.target,n=new THREE.Vector3(r.x-i.x,0,r.z-i.z),a=Math.cos(e),s=Math.sin(e),o=new THREE.Vector3(n.x*a-n.z*s,0,n.x*s+n.z*a);r.x=i.x+o.x,r.z=i.z+o.z,this.dirtyCamera(!0),this.setCameraChanging(!0)}goPitchForWalk(e){var t=this.getCamera(),i=t.position,r=t.target,n=r.x-i.x,a=r.z-i.z,s=Math.sqrt(n*n+a*a),o=new THREE.Vector3(s,r.y-i.y,0),l=Math.cos(e),d=Math.sin(e),h=new THREE.Vector3(o.x*l-o.y*d,o.x*d+o.y*l,0);r.y=i.y+h.y,this.dirtyCamera(!0),this.setCameraChanging(!0)}goUpDownForWalk(e,t){var i=this.getCamera(),r=i.position,n=i.target,a=i.up,s=g(i,this.scene.getMatrixGlobal(),a,e);t&&(t.position.z+=s.stepDiffWorld.z,t.box.min.z+=s.stepDiffWorld.z,t.box.max.z+=s.stepDiffWorld.z),r.y+=s.stepDiffDrawing.y,n.y+=s.stepDiffDrawing.y,this.dirtyCamera(!0),this.setCameraChanging(!0)}stepCameraForWalk(e,t,i){var n,a=this.getCamera(),s=a.position,o=a.target,l=new THREE.Vector3(o.x-s.x,0,o.z-s.z).normalize(),d=new THREE.Vector3(0,1,0),h=l.clone().cross(d),c=this.scene.getMatrixGlobal();switch(e){case r.MoveDirection.FORWARD:n=g(a,c,l,t);break;case r.MoveDirection.BACK:l.multiplyScalar(-1),n=g(a,c,l,t);break;case r.MoveDirection.LEFT:h.multiplyScalar(-1),n=g(a,c,h,t);break;case r.MoveDirection.RIGHT:n=g(a,c,h,t)}if(n.stepDiffDrawing.y=0,n.stepDiffWorld.z=0,i)return n;s.add(n.stepDiffDrawing),o.add(n.stepDiffDrawing),this.dirtyCamera(!0),this.setCameraChanging(!0)}hitTestWithGround(e){var t=this.getCamera(),i=t.up.clone().multiplyScalar(-1);if(e){let t=e.position;d.set(t.x,t.y,e.box.max.z)}var r=e?this.scene.worldToDrawing(d):t.position.clone(),n=new THREE.Ray(r,i),a=this.getIntersectContext(null),s=this.intersector.byGravity;this.intersector.byGravity=!0;var o=this.intersector.intersect(a,n,!1);return this.intersector.byGravity=s,o}hitTestForward(e,t){var i=this.getCamera(),r=this.camera.direction();r.normalize(),r=r.multiplyScalar(e);let n,a=[];const s=this.getIntersectContext(null);if(t)a=this.intersector.intersectByBox(s,t);else{n=i.position.clone();const e=new THREE.Ray(n,r),t=this.intersector.intersect(s,e,!1);t&&a.push(t)}return a}hitTestRight(e,t){//!!
var i=this.getCamera(),r=this.camera.direction();r.normalize();var n=i.up,a=r.cross(n).normalize();let s;a=a.multiplyScalar(e);let o=[];var l=this.getIntersectContext(null);if(t)o=this.intersector.intersectByBox(l,t);else{s=i.position.clone();const e=new THREE.Ray(s,a),t=this.intersector.intersect(l,e,!1);t&&o.push(t)}return o}computeGravity(e){this.gravity=0;var t=this.hitTestWithGround(e);if(null==t){var i=this.scene.getMatrixGlobal();a.copy(i).invert();var r=this.camera.position.clone();r.applyMatrix4(a),r.z=0,r.applyMatrix4(i),this.distanceToGround=Math.abs(this.camera.position.y-r.y),null!=this.hitNullCount&&0!=this.hitNullCount||(this.hitNullCount=1)}else this.hitNullCount=0;if(1!=this.hitNullCount)if(void 0===this.manHeight)this.computeManHeight(e);else{var n=t?t.distance-this.manHeight:this.distanceToGround-this.manHeight;if(n/=this.scene.getGlobalScaleFactor(),Math.abs(n)<.1)return;this.gravity=n}else this.gravity=0}computeManHeight(e){let t;if(t=this.viewer.modelManager.isMeterUnit()?.001:1,!this.manHeight){var i=this.hitTestWithGround(e),r=e?.94*e.box.getSize(d).z:1650*t,n=this.scene.getMatrixGlobal();if(a.copy(n).invert(),null!=i){var s=i.point.clone();s.applyMatrix4(a),s.z+=r,s.applyMatrix4(n),this.manHeight=Math.abs(i.point.y-s.y)}else{var o=e?e.box.min.clone():this.camera.position.clone();o.applyMatrix4(a),o.z=0;var l=o.clone();l.z+=r,o.applyMatrix4(n),l.applyMatrix4(n),this.manHeight=Math.abs(l.y-o.y)}}}walkWithParallelEye(){var e=this.camera,t=this.camera.direction().length(),i=this.scene.getBoundingBox().getCenter(d),r=new THREE.Vector3;r.subVectors(i,e.position);var n=r.length();r.y=0,r.normalize(),r.multiplyScalar(n),e.position.subVectors(i,r),e.target.addVectors(e.position,r.normalize().multiplyScalar(t));var a=new THREE.Vector3(0,1,0);e.up.copy(a),e.realUp.copy(a),this.dirtyCamera(!0),this.setCameraChanging(!0),this.update(!0)}updateFlyMove(e,t){var i=this.camera;this.dirtyCamera(!0),this.setCameraChanging(!0);var n=r.MoveDirection;e&n.FORWARD&&i.translateZ(-t),e&n.BACK&&i.translateZ(t),e&n.LEFT&&i.translateX(-t),e&n.RIGHT&&i.translateX(t),e&n.UP&&i.translateY(t),e&n.DOWN&&i.translateY(-t),this.flyOnWorld()}flyOnWorld(e){var t=this.camera,r=t.up.clone();(e=!1!==e)&&t.realUp&&(t.up.copy(t.realUp),t.lookAt(t.target),t.up.copy(r)),this._changeCallBack(),this.dirtyCamera(!1),i.copy(t.position),n.copy(t.quaternion)}rotateForFly(e,t,i,n){var a=this.camera,s=a.position,o=a.target,l=o.clone().sub(s),d=new THREE.Vector3(0,1,0),h=a.realUp||a.up,c=l.clone().cross(h).normalize();if(this.dirtyCamera(!0),this.setCameraChanging(!0),r.EditorConfig.LockAxisZ&&(t=0),0!=t){var u=(new THREE.Quaternion).setFromAxisAngle(c,-t),p=l.clone();p.applyQuaternion(u);var m=p.angleTo(d);(m-=.5*Math.PI)>=i&&m<=n&&l.applyQuaternion(u)}if(0!=e){var f=(new THREE.Quaternion).setFromAxisAngle(d,-e);l.applyQuaternion(f)}o.addVectors(s,l),this.flyOnWorld()}fitAndRotateBySelection(){this.viewer.zoomToSelection()}flyToPointWithParallelEye(e){var t=this.camera.direction(),i=t.length(),r=t.clone();r.y=0,r.normalize(),r.setLength(i);var n=new THREE.Vector3(0,1,0);this.camera.up=n,this.camera.realUp=n.clone(),this.camera.position.copy(e),this.camera.target.addVectors(this.camera.position,r),this.update(!0)}flyToPoint(e){var t=this.camera.direction();this.camera.position.copy(e),this.camera.target.addVectors(this.camera.position,t),this.update(!0)}setCameraHeight(e,t){this.cameraAbsoluteHeightEnabled=!1,this.cameraRelativeHeight=t,void 0===this.cameraConstraintHeights?this.cameraConstraintHeights=[]:this.cameraConstraintHeights.length=0;for(var i=0,r=e.length;i<r;++i)this.cameraConstraintHeights[i]=e[i]}updateCameraHeight(){var e,t,i=this.scene,n=this.getCamera(),a=i.drawingToWorld(n.position),s=a.z;if(this.cameraAbsoluteHeightEnabled)void 0===this.cameraAbsoluteHeight&&(this.cameraAbsoluteHeight=s),e=this.cameraAbsoluteHeight;else if(void 0===this.cameraConstraintHeights)e=s;else{var o=r.Utils.findRange(this.cameraConstraintHeights,s);if(e=this.cameraConstraintHeights[o],e+=this.cameraRelativeHeight,o<this.cameraConstraintHeights.length-1){var l=this.cameraConstraintHeights[o+1];e>l&&(e=l)}}e!==s&&(t=i.worldToDrawing({x:a.x,y:a.y,z:e}),this.setCameraPosition(t))}getRaycaster(e,t){var i=new r.Raycaster,n=new THREE.Vector2;return this.userInputHelper.clientToViewport(e,t,n),i.setFromCamera(n,this.camera),i}translateCameraForWalk(e,t){var i=this.collisionManager;if(0!==e.x){if(!1===r.GlobalData.EnableHitDetection)return void this.stepCameraForWalk(r.MoveDirection.RIGHT,e.x*t);var n=1;e.x<0&&(n=-1);var a=this.hitTestRight(n);if(0==a.length)this.stepCameraForWalk(r.MoveDirection.RIGHT,e.x*t);else{var s=(h=this.viewer.modelManager.getNodeInfosByUserId(a[0].userId))?h[0].userData:null;0==i.hasCollision(s,a[0].distance)&&this.stepCameraForWalk(r.MoveDirection.RIGHT,e.x*t)}}if(0!==e.y)this.goUpDownForWalk(e.y*t*.5);else if(r.GlobalData.WalkingWithGravity){var o=t;if(0!=this.gravity){var l=Math.abs(this.gravity);o=o>=l?l:.2*l}this.gravity>0?this.goUpDownForWalk(-o):this.gravity<0&&this.goUpDownForWalk(o)}if(0!==e.z){if(!1===r.GlobalData.EnableHitDetection)return void this.stepCameraForWalk(r.MoveDirection.BACK,e.z*t);n=1;e.z>0&&(n=-1);var d=this.hitTestForward(n);if(0==d.length)this.stepCameraForWalk(r.MoveDirection.BACK,e.z*t);else{var h;s=(h=this.viewer.modelManager.getNodeInfosByUserId(d[0].userId))?h[0].userData:null;0==i.hasCollision(s,d[0].distance)&&this.stepCameraForWalk(r.MoveDirection.BACK,e.z*t)}}}translateCameraForThirdpersonWalk(e,t,i,n){var a=this.collisionManager;if(i.box.getSize(m),p.set(i.box.min,i.box.max),p.min.z+=.5*m.z,p.max.z-=.2*m.z,0!==e.x){let d=this.stepCameraForWalk(r.MoveDirection.RIGHT,e.x*t,i);var s=1;if(e.x<0&&(s=-1),p.min.add(d.stepDiffWorld),p.max.add(d.stepDiffWorld),!1===r.GlobalData.EnableHitDetection)return void this.stepObjectForWalk(d,i,p,n,0);var o=this.hitTestRight(s,p);let h=!1;for(let e=0;e<o.length;e++){let t=o[e];var l=(u=this.viewer.modelManager.getNodeInfosByUserId(t))?u[0].userData:null;if(h=a.hasCollision(l,0),h)break}h||this.stepObjectForWalk(d,i,p,n,0)}if(0!==e.y)this.goUpDownForWalk(e.y*t*.5,i);else if(r.GlobalData.WalkingWithGravity){var d=t;if(0!=this.gravity){var h=Math.abs(this.gravity);d=d>=h?h:.2*h}this.gravity>0?this.goUpDownForWalk(-d,i):this.gravity<0&&this.goUpDownForWalk(d,i)}if(0!==e.z){let o=this.stepCameraForWalk(r.MoveDirection.BACK,e.z*t,i);s=1;if(e.z>0&&(s=-1),p.min.add(o.stepDiffWorld),p.max.add(o.stepDiffWorld),!1===r.GlobalData.EnableHitDetection)return void this.stepObjectForWalk(o,i,p,n,s);var c=this.hitTestForward(s,p);let d=!1;for(let e=0;e<c.length;e++){let t=c[e];var u;l=(u=this.viewer.modelManager.getNodeInfosByUserId(t))?u[0].userData:null;if(d=a.hasCollision(l,0),d)break}d||this.stepObjectForWalk(o,i,p,n,s)}}checkCollisionInCameraAndObject(e){if(!e)return null;var t=this.getCamera();let i=e.position;d.set(i.x,i.y,i.z);var r=this.scene.worldToDrawing(d);let n=new THREE.Vector3;n.subVectors(t.position,r),n.normalize();const a=this.getIntersectContext(null),s=new THREE.Ray(r,n),o=this.intersector.intersect(a,s,!1);if(o){var l=t.position.distanceTo(r);if(o.distance<l&&o.userId!=e.name)return o.point.addVectors(o.point,n.multiplyScalar(-1))}return null}stepObjectForWalk(e,t,i,r,n){function a(e,t){return!(t.x<e.min.x||t.x>e.max.x||t.y<e.min.y||t.y>e.max.y)}var s=this.scene.getBoundingBoxWorld();if(!a(s,i.min)||!a(s,i.max))return;t.box.min.add(e.stepDiffWorld),t.box.max.add(e.stepDiffWorld),t.position.add(e.stepDiffWorld);var o=this.getCamera(),l=o.position,h=o.target;let c=0,u=t.position;switch(n>=0?(this.checkCollisionInCameraAndObject(t)?c=1:1==n&&(d.set(u.x,u.y,t.box.max.z),o.getDistanceByPos(d,this.scene.getMatrixGlobal())<r&&(c=2)),f=!1):(l.add(e.stepDiffDrawing),h.add(e.stepDiffDrawing),c=2,this.checkCollisionInCameraAndObject(t)?(c=-1,f=!0):f&&(f=!1,c=3)),c){case 0:l.add(e.stepDiffDrawing),h.add(e.stepDiffDrawing);break;case 1:var p=this.camera.direction();d.set(u.x,u.y,t.box.max.z);var m=this.scene.worldToDrawing(d);l.set(m.x,m.y,m.z),h.addVectors(l,p);break;case 2:break;case 3:d.set(u.x,u.y,t.box.max.z);let i=new THREE.Vector3;i.copy(e.stepDiffWorld),i.normalize();let n=this.scene.worldToDrawing(d),a=this.scene.worldToDrawing(d.addVectors(d,i.multiplyScalar(r)));l.set(a.x,a.y,a.z),h.set(n.x,n.y,n.z);var g=this.checkCollisionInCameraAndObject(t);g&&l.set(g.x,g.y,g.z);break;case-1:l.sub(e.stepDiffDrawing),h.sub(e.stepDiffDrawing)}this.dirtyCamera(!0),this.setCameraChanging(!0)}rotateCameraForWalk(e,t){0!==e.y&&(this.goTurnForWalk(-e.y*Math.PI*t),e.y=0),0!==e.x&&(this.goPitchForWalk(e.x*Math.PI),e.x=0)}movePlane(e,t,i,r,n){if(null==n){var a=new THREE.Plane;a.setComponents(e.x,e.y,e.z,e.w),n=new THREE.Vector3,a.coplanarPoint(n)}var s=new THREE.Vector3(e.x,e.y,e.z),o=this.camera.getWorldDirection(d),l=new THREE.Plane;l.setFromNormalAndCoplanarPoint(o,n);var h=this.getRaycaster(t.clientX,t.clientY),c=new THREE.Vector3,u=this.getRaycaster(i.x,i.y),p=new THREE.Vector3;if(h.ray.intersectPlane(l,c)&&u.ray.intersectPlane(l,p)){c.subVectors(c,p),c.projectOnVector(s);var m=c.length();if(c.dot(s)<0&&(m=-m),0!=m)return r&&(s.multiplyScalar(m),m=s.x+s.y+s.z),m}return null}getZenith(){var t=this.camera.position,i=this.viewer.getBoundingBox().getCenter(d);return t.clone().sub(i.clone()).clone().angleTo(e.clone())}getAzimuth(){var i=camera.position,r=this.viewer.getBoundingBox().getCenter(d),n=i.clone().sub(r.clone()).clone().projectOnPlane(e.clone()),a=n.angleTo(t.clone());return n.x<0&&(a=360-a),a}getCurrentRangeofCamera(){var e=this.viewer,t=this.camera,i=e.getBoundingBox(),r=t.position,n=.5*i.getSize(d).length()/Math.tan(THREE.Math.degToRad(.5*t.fov));return i.getCenter(d).distanceTo(r)/n}setMaximalRangeofCamera(e=2){this.farFactor=e,this.userInputHelper.boundaryLimitFactor=e}getMaximalRangeofCamera(){return this.farFactor}cameraWithinMaximumRange(e){var t=e||this.farFactor;return!(this.getCurrentRangeofCamera()>t)}resetCameraToMaximumRange(e){const t=this.viewer,i=this.camera,r=t.getBoundingBox(),n=i.position;var a=e||this.farFactor,s=.5*r.getSize(d).length()/Math.tan(THREE.Math.degToRad(.5*i.fov));const o=r.getCenter(d);var l=(new THREE.Vector3).subVectors(o,n);l.setLength(a*s);var h=o.clone().sub(l),c=this.camera.direction();this.camera.position.copy(h),this.camera.target.copy(c.add(h)),this.updateView(!0)}zoomToHeight(e){const t=e.destination;if(!r.Utils.isDefined(t))return void console.log("destination is required");if(!r.Utils.isDefined(e.globe))return void console.log("globe object is required");const i=r.Tile.TileMath.fromDegreesYUp(t.lon,t.lat,t.height,e.globe.radius),n=this.camera;var a={position:n.position.clone(),target:n.target.clone(),up:n.realUp.clone()||n.up.clone(),zoom:n.zoom};const s={position:i,target:n.target.clone(),up:n.realUp.clone()||n.up.clone(),zoom:n.zoom},o=this.viewer,l=this;return new Promise(((e,t)=>{const i=new r.CameraAnimator;i.setDuration(2e3),i.active(a,s,o,(function(e){l.update(!0,!0)}),(function(){e()}))}))}setObjectOffset(e){if(!r.Utils.isDefined(e))return void console.warn("The parameter offset is undefined.");if("number"!=typeof e)return void console.warn("The parameter offset is not a number.");let t=r.Math.clamp(e,.2,100);this.userInputHelper._minObjectOffset=t}getObjectOffset(){return this.userInputHelper._minObjectOffset}}}(),(()=>{let e=new THREE.Matrix4,t=new THREE.Matrix4;r.PickUtil=class{constructor(){}static pickByRect(e,t,i,n,a,s,o){var l;l=s&&o?o.x>s.x?"window":"cross":"window";var d={},h=n.modelManager,c=h.getOctreeRoots(),u=h.getOctantMap(),p=h.getSceneState(),m=e.getMatrixGlobal(),f=new THREE.Box3,g=new THREE.Vector3(Math.min(s.x,o.x),Math.min(s.y,o.y),0),v=new THREE.Vector3(Math.max(s.x,o.x),Math.max(s.y,o.y),0),y=new THREE.Box3(g,v);function M(e){for(var t=new THREE.Vector3,i=0;i<8;++i)if(t.x=i<4?e.min.x:e.max.x,t.y=i/2<2?e.min.y:e.max.y,t.z=i%2==0?e.min.z:e.max.z,!n.clipPoint(t))return!1;return!0}function E(e,i){if(f.set(e.min,e.max),t.intersectsBox(f)){i.push(e);for(var r=0,n=e.childOctants.length;r<n;++r){E(e.childOctants[r],i)}}}function b(e,i){if(a=i,s=h.isHiddenSourceObjectUserId(a.userId),S&&!w._isVisible(a)||A&&!w._isPickable(a)||s)return;var a,s;let o=new THREE.Box3;o.copy(i.boundingBox),o.applyMatrix4(N).applyMatrix4(m),M(o)||("window"!==l||H[i.userId]?"cross"!==l||F[i.userId]||("in"===r.GeomUtil.intersectBox(t,o)||"intersect"===r.GeomUtil.intersectBox(t,o)&&function(e,t){var i=[];n.modelManager.traverseModels((function(t){i=i.concat(t.getGeometryBuffersByUserId(e))})),i.sort(((e,t)=>e.index.length-t.index.length));for(var a=0;a<i.length;a++)for(var s=i[a].position,o=i[a].index,l=i[a].matrix,d=0;d<o.length;d+=3){var h=new THREE.Vector3(s[3*o[d]],s[3*o[d]+1],s[3*o[d]+2]),c=new THREE.Vector3(s[3*o[d+1]],s[3*o[d+1]+1],s[3*o[d+1]+2]),u=new THREE.Vector3(s[3*o[d+2]],s[3*o[d+2]+1],s[3*o[d+2]+2]);l&&(h.applyMatrix4(l),c.applyMatrix4(l),u.applyMatrix4(l)),t&&(h.applyMatrix4(t),c.applyMatrix4(t),u.applyMatrix4(t));var p=n.worldToClient(h),m=n.worldToClient(c),f=n.worldToClient(u),g=new THREE.Vector3(p.x,p.y,0),v=new THREE.Vector3(m.x,m.y,0),M=new THREE.Vector3(f.x,f.y,0),E=new THREE.Triangle(g,v,M);if(r.GeomUtil.boxIntersectsTriangle(y,E))return!0}return!1}(i.userId,N))&&(e[i.userId]=!0,F[i.userId]=!0):"in"===r.GeomUtil.intersectBox(t,o)||"intersect"===r.GeomUtil.intersectBox(t,o)&&function(e,i){var r=[],a=[];n.modelManager.traverseModels((function(t){r=r.concat(t.getGeometryBuffersByUserId(e))}));for(var s=0;s<r.length;s++)for(var o=r[s].position,l=r[s].matrix,d=0;d<o.length;d+=3){var h=new THREE.Vector3(o[d],o[d+1],o[d+2]);l&&h.applyMatrix4(l),i&&h.applyMatrix4(i),h.applyMatrix4(m),a.push(h)}var c=!0;return a.every((e=>(t.containsPoint(e)||(c=!1),c))),c}(i.userId,N)?e[i.userId]=!0:(H[i.userId]=!0,delete e[i.userId]))}function x(e,t,n){let s=[];return Object.keys(t).map((t=>{const i=e.getRealUserId(t);i&&s.push(i)})),s.length>0&&!1!==a&&(r.OPSELECTIONTYPE.Remove===i&&n.removeSelection(s,e.id),r.OPSELECTIONTYPE.Add===i&&n.addSelection(s,e.id)),s}var I,T,C,w=h.getFilter(),S=w._hasVisibleFilter(),A=w._hasPickableFilter();function B(e){const i=e.getUserIdMapByFrustum(t),r=e.getAllNodeInfos();for(const e in i){const t=r[e];if(t)for(var n=0,a=t.length;n<a;n++){const e=t[n];b(d,e)}}return x(e,d,p)}if(i===r.OPSELECTIONTYPE.Clear)return void p.clearSelection();let R=[];for(var D in c){I=[],d={},C=u[D],T=c[D];var O=n.modelManager.modelCollection.getById(D);if(O){var L,P,N=O.transformMatrix.clone(),H={},F={};for(O.tilesLoader&&B(O),L=0,P=T.length;L<P;L++)E(T[L],I);for(L=0,P=I.length;L<P;L++){var k=C.info[I[L].octantId];if(k)for(var U=0,G=k.length;U<G;U++){var z=k[U];b(d,z)}}R=R.concat(x(O,d,p))}}function V(e){for(var t=e.geometry.attributes.position.array,i=e.matrix,a=0;a<t.length;a+=9){var s=new THREE.Vector3(t[a],t[a+1],t[a+2]),o=new THREE.Vector3(t[a+3],t[a+4],t[a+5]),l=new THREE.Vector3(t[a+6],t[a+7],t[a+8]);i&&(s.applyMatrix4(i),o.applyMatrix4(i),l.applyMatrix4(i));var d=n.worldToClient(s),h=n.worldToClient(o),c=n.worldToClient(l),u=new THREE.Vector3(d.x,d.y,0),p=new THREE.Vector3(h.x,h.y,0),m=new THREE.Vector3(c.x,c.y,0),f=new THREE.Triangle(u,p,m);if(r.GeomUtil.boxIntersectsTriangle(y,f))return!0}return!1}function j(e){for(var i=[],r=e.geometry.attributes.position.array,n=e.matrix,a=0;a<r.length;a+=3){var s=new THREE.Vector3(r[a],r[a+1],r[a+2]);n&&s.applyMatrix4(n),s.applyMatrix4(m),i.push(s)}var o=!0;return i.every((e=>(t.containsPoint(e)||(o=!1),o))),o}const _=n.getScene().getObjectGroup(r.ObjectGroupType.EXTRUDEBODYMANAGER),W=[];if(_){for(let e=0;e<_.children.length;e++){let i=_.children[e];if(i.name.indexOf("wireframe_")<0&&i.visible){let e=new THREE.Box3;if(e.copy(i.geometry.boundingBox),e.applyMatrix4(i.matrix).applyMatrix4(m),M(e))return;"window"===l?("in"===r.GeomUtil.intersectBox(t,e)||"intersect"===r.GeomUtil.intersectBox(t,e)&&j(i))&&W.push(i.name):"cross"===l&&("in"===r.GeomUtil.intersectBox(t,e)||"intersect"===r.GeomUtil.intersectBox(t,e)&&V(i))&&W.push(i.name)}}W.length>0&&!1!==a&&(r.OPSELECTIONTYPE.Remove===i&&p.removeSelection(W),r.OPSELECTIONTYPE.Add===i&&p.addSelection(W)),R=[...R,...W]}return R}static getObjectsInBox(e,t,i,n){var a={},s=i.getOctreeRoots(),o=i.getOctantMap(),l=e.getMatrixGlobal(),d=new THREE.Box3;function h(e){for(var t=new THREE.Vector3,i=0;i<8;++i)if(t.x=i<4?e.min.x:e.max.x,t.y=i/2<2?e.min.y:e.max.y,t.z=i%2==0?e.min.z:e.max.z,!n.clipPoint(t))return!1;return!0}function c(e){return!(e.max.x<t.min.x||e.min.x>t.max.x||e.max.y<t.min.y||e.min.y>t.max.y||e.max.z<t.min.z||e.min.z>t.max.z)}function u(e){return e.max.x>=t.max.x&&e.min.x<=t.min.x&&e.max.y>=t.max.y&&e.min.y<=t.min.y&&e.max.z>=t.max.z&&e.min.z<=t.min.z}function p(e,t){if(d.set(e.min,e.max),c(d)){t.push(e);for(var i=0,r=e.childOctants.length;i<r;++i){p(e.childOctants[i],t)}}}let m=e=>{let i=(e,i,r)=>{const n=e.clone().applyMatrix4(i).applyMatrix4(r);return!!t.intersectsBox(n)&&(u(n)?1:2)};const n=e.tilesLoader.tileReader.getSearchTreeBuffer(),s=e.getTransformMatrix();for(const t in n){const o=n[t].searchTreeBlob,d=n[t].box;if(!i(d,s,l))continue;const h=o.getNodeIdsList(),c=o.getOctreeList(),u=o.getOctreeList()[0];let p=function(t,n){const o=r.TilesUtil.getBox(n.getBboxList());if(!i(o,s,l))return;let d=n.getNodesList();const c=d.length;for(let t=0;t<c;++t){const n=d[t],o=h[n],c=r.TilesUtil.getBox(o.getBboxList());if(2!==i(c,s,l))continue;const u=o.getUserId(),p=e.getRealUserId(u);a[p]=!0}n.getChildrenList().map((e=>{const i=t[e];p(t,i)}))};p(c,u)}};var f,g,v=i.getFilter(),y=v._hasVisibleFilter(),M=v._hasPickableFilter();for(var E in s){var b,x,I=[],T=o[E],C=s[E],w=n.modelManager.modelCollection.getById(E).transformMatrix.clone();for(b=0,x=C.length;b<x;b++)p(C[b],I);for(b=0,x=I.length;b<x;b++){var S=T.info[I[b].octantId];if(S)for(var A=0,B=S.length;A<B;A++){var R=S[A];(f=R,g=void 0,g=i.isHiddenSourceObjectUserId(f.userId),y&&!v._isVisible(f)||M&&!v._isPickable(f)||g)||(d.copy(R.boundingBox),d.applyMatrix4(w).applyMatrix4(l),!c(d)||u(d)||h(d)||(a[R.userId]=!0))}}const e=n.modelManager.getModel(E);e.tilesLoader&&m(e)}return Object.keys(a)}},r.IntersectContext=class{constructor(){this.scene=null,this.camera=null,this.octreeRoots=null,this.octantMap=null,this.mouse=new THREE.Vector2}},r.IntersectHelper=class{constructor(e){this.viewer=e,this.filter=e.getFilter(),this.raycaster=new r.Raycaster,this.lastIntersect=null,this.highPriorities=[r.ObjectGroupType.EXTRUDEBODYMANAGER],this._ground=null,this._pickedLocalPos=null,this._pickedWorldPos=null}destroy(){this.viewer=null,this.filter=null,this.raycaster=null,this.lastIntersect=null,this.highPriorities=null,this._ground=null,this._pickedLocalPos=null,this._pickedWorldPos=null}defaultIntersect(e,t,i,n,a){if(e.visible||a){var s=[];e.raycast(this.raycaster,s);var o=[];if(s.length>0)for(var l=0;l<s.length;l++)s[l].distance<=i.far&&s[l].distance>=i.near&&(e.name==r.GlobalData.TilePlaneGroupName||!this.viewer.clipPoint(s[l].point))&&null!=s[l]&&o.push(s[l]);return n?o:(o.sort((function(e,t){return e.distance-t.distance})),o.length>0?o[0]:null)}}intersectMeshesWithDistance(e,t,i){const{pickable:n,distanceScope:a,isExploded:s,bIsGetAllIntersects:o,modelTransform:l,modelId:d,hitBox:h}=i;if(!t||!t.mesh)return null;var c,u=r.Utils.MinusEpsilon,p=this.raycaster,m=[];const f=this.viewer.modelManager,g=f.getModel(d).filter,v=g._hasVisibleFilter(),y=g._hasPickableFilter();var M=function(e,t){var i=f.isHiddenSourceObjectUserId(e.userId);if(t){if(v&&!g._isVisible(e)||y&&!g._isPickable(e)||i)return!0}else if(v&&!g._isVisible(e)||i)return!0;return!1};1==this.byGravity?a.near=0:a.near+=u;var E,b,x=t.info,I=t.mesh,T=[],C=this.viewer.modelManager.getMatrixWorldGlobal();if(s){function w(e,t){if(t.push(e),e.childOctants)for(var i=0,r=e.childOctants.length;i<r;i++)w(e.childOctants[i],t)}for(E=0,b=e.length;E<b;E++)w(e[E],T)}else for(E=0,b=e.length;E<b;E++)p.intersectOctantForNode(e[E],T);for(E=0,b=T.length;E<b;E++){var S=x[T[E].octantId];if(S)for(var A=0,B=S.length;A<B;A++){var R=S[A];if(!M(R,n)){var D=R.boundingBox.clone();if(D.applyMatrix4(l),D.applyMatrix4(C),!((c=p.ray.intersectBoxWithDistance(D))<a.near||c>a.far)){var O=I[r.ModelView.BaseDescriptor.getMeshIdFromOctantMap(R)];if(O)for(var L=0,P=O.length;L<P;L++)m.push({object:O[L],distance:c,nodeInfo:R})}}}}if(m.sort((function(e,t){return e.distance-t.distance})),h){let e=p.ray.origin.clone(),t=p.ray.direction.clone();if(0===m.length)return null;let i=m[0].distance;return i=0===i?3:i,m[0].point=e.add(t.multiplyScalar(i)),m[0].object=m[0].object.object,m[0]}var N=[];const H=g.getLocalClippingList();for(E=0;E<m.length;E++)m[E].distance>a.far||m[E].distance<a.near||m[E].object.raycast(p,m[E].nodeInfo,a,this.viewer,N,o,H);if(N.sort((function(e,t){return e.distance-t.distance})),o){var F=[];for(E=0,b=N.length;E<b;E++){var k=N[E];F.push({object:k.object.object,distance:k.distance,matrix:k.object.matrix,userId:k.userId,face:k.face,point:k.point})}return F}return N.length>0?N[0]:null}intersect(e,t,i,n){var a=this.raycaster;if(n=!0===n,null===t)a.setFromCamera(e.mouse,e.camera);else{var s=t.origin,o=t.direction;a.set(s,o)}a.camera=e.camera,a.viewportSize=e.viewportSize;var l={near:0,far:1/0};e.scene.shrinkScopeByClipPlane(a,l);var d=[],h=e.scene.getObjectGroups(),c=this.viewer.terrainOperationManager;const u=this.viewer.holesManager;var p=new THREE.Vector2;this.viewer.cameraControl.mapViewportToWindow(e.mouse.x,e.mouse.y,p);for(var m=0;m<h.length;m++){if(!h[m].isPickable()||0===h[m].children.length)continue;if(h[m].name==r.GlobalData.TilePlaneGroupName&&c.pickExcavation(p))continue;if(u.pickExcavation(p))continue;var f=null,g=e.scene.getObjectGroupType(h[m].name);if(this.highPriorities.indexOf(g.groupType)>-1){let e=this.defaultIntersect(h[m],i,l,!0,!0);e=e.filter((e=>{if(!0===e.object.isMesh)return e})),e.sort(((e,t)=>e.distance-t.distance)),(f=e[0])&&(f.objectType=h[m].pickableType,f.hoverEnabled=h[m].hoverEnabled,d.push(f));continue}const t=this.viewer.modelManager;let a=t.getModel(g.databagId),s=a?a.getTransformMatrix():new THREE.Matrix4,o=!1;switch(o=!!(a&&a.id&&t.explosionManager.isExploded(a.id)),g.groupType){case r.ObjectGroupType.MODEL:var v=g.databagId;if(e.octreeRoots[v]&&e.octantMap[v]){const t={pickable:i,distanceScope:l,isExploded:o,bIsGetAllIntersects:!1,modelTransform:s,modelId:a.id,hitBox:n};(f=this.intersectMeshesWithDistance(e.octreeRoots[v],e.octantMap[v],t))&&(f.objectType=h[m].pickableType,f.hoverEnabled=h[m].hoverEnabled,d.push(f))}break;case r.ObjectGroupType.GEOMETRY:for(var v in e.octreeRoots){const t={pickable:i,distanceScope:l,isExploded:o,bIsGetAllIntersects:!1,modelTransform:s,modelId:v,hitBox:n};(f=this.intersectMeshesWithDistance(e.octreeRoots[v],e.octantMap[v],t))&&(f.objectType=h[m].pickableType,f.hoverEnabled=h[m].hoverEnabled,d.push(f))}break;case r.ObjectGroupType.BIMTILESGROUP:if(a){const e=a.config.metadata.content,t=a.config.metadata.enableSelect;if(!0===r.TilesUtil.PICK_EFFECT_MODEL_TYPE[e]||t){const e={pickable:i,distanceScope:l,isExploded:o,bIsGetAllIntersects:!1,modelTransform:s,hitBox:n};f=this.intersectBimTile(a,e)}else f=this.defaultIntersect(h[m],i,l);if(f){const e=a.tilesLoader.tileReader.getUserIdByIndex(f.userId);f.userId=e,f.objectType=h[m].pickableType,f.hoverEnabled=h[m].hoverEnabled,d.push(f)}}break;default:(f=this.defaultIntersect(h[m],i,l))&&(f.objectType=h[m].pickableType,f.hoverEnabled=h[m].hoverEnabled,d.push(f))}}d.sort((function(e,t){return e.distance-t.distance}));var y=d.length;if(y>0){let e=null;for(var M=0;M<y;++M){var E=(f=d[M]).object;if(E.geometry){if(f.objectType===r.PICKABLETYPE.Marker3d?f.userId=f.id:void 0===f.userId&&(f.userId=E.userId||E.name),f.databagId=E.databagId,f.fileId=E.fileId,e)return e.intersectWithoutMap=f,e;if(this.lastIntersect={intersect:f,pickable:i},!(f.objectType===r.PICKABLETYPE.Map&&M<y-1))return f;e=f}}}return this.lastIntersect=null,null}_intersectOctantForNodeByBox(e,t,i){var r=new THREE.Box3;!function t(n){var a,s;if(r.set(n.min,n.max),e.intersectsBox(r)&&(i.push(n),n.childOctants))for(a=0,s=n.childOctants.length;a<s;a++)t(n.childOctants[a])}(t)}intersectMeshByBox(e,t,i,n,a){if(!t||!t.mesh)return null;r.Utils.MinusEpsilon,this.raycaster;var s,o,l=[],d=this.filter,h=d._hasVisibleFilter(),c=(d._hasPickableFilter(),this.viewer.modelManager),u=function(e){var t=c.isHiddenSourceObjectUserId(e.userId);return!!(h&&!d._isVisible(e)||t)},p=t.info,m=t.mesh,f=[],g=this.viewer.modelManager.getMatrixWorldGlobal();if(i){function v(e,t){if(t.push(e),e.childOctants)for(var i=0,r=e.childOctants.length;i<r;i++)v(e.childOctants[i],t)}for(s=0,o=e.length;s<o;s++)v(e[s],f)}else{var y=a.clone().applyMatrix4(g);for(s=0,o=e.length;s<o;s++)this._intersectOctantForNodeByBox(y,e[s],f)}for(s=0,o=f.length;s<o;s++){var M=p[f[s].octantId];if(M)for(var E=0,b=M.length;E<b;E++){var x=M[E];if(u(x))continue;var I=x.boundingBox.clone();if(I.applyMatrix4(n),a.intersectsBox(I)){var T=m[r.ModelView.BaseDescriptor.getMeshIdFromOctantMap(x)];if(T)for(var C=0,w=T.length;C<w;C++)T[C].intersectByBox(a,l,x)&&(l[l.length-1].userId=x.userId)}}}return l}intersectByBox(e,t){var i={},n=e.scene.getObjectGroups(),a=this.viewer.terrainOperationManager,s=new THREE.Vector2;this.viewer.cameraControl.mapViewportToWindow(e.mouse.x,e.mouse.y,s);for(var o=0;o<n.length;o++){if(!n[o].isPickable()||0===n[o].children.length)continue;if(n[o].name==r.GlobalData.TilePlaneGroupName&&a.pickExcavation(s))continue;var l=null,d=e.scene.getObjectGroupType(n[o].name);const c=this.viewer.modelManager;let u=c.getModel(d.databagId),p=u?u.getTransformMatrix():new THREE.Matrix4,m=!1;switch(m=!!(u&&u.id&&c.explosionManager.isExploded(u.id)),d.groupType){case r.ObjectGroupType.MODEL:var h=d.databagId;if(e.octreeRoots[h]&&e.octantMap[h]){if(!(l=this.intersectMeshByBox(e.octreeRoots[h],e.octantMap[h],m,p,t)))break;l.forEach((e=>{i[e.userId]=!0}))}break;case r.ObjectGroupType.GEOMETRY:for(var h in e.octreeRoots){if(!(l=this.intersectMeshByBox(e.octreeRoots[h],e.octantMap[h],m,p,t)))break;l.forEach((e=>{i[e.userId]=!0}))}break;case r.ObjectGroupType.BIMTILESGROUP:if(u){const e=u.config.metadata.content,n=u.config.metadata.enableSelect;if(!0===r.TilesUtil.PICK_EFFECT_MODEL_TYPE[e]||n){const e={pickable:!1,distanceScope:{near:0,far:1/0},isExploded:m,bIsGetAllIntersects:!0,modelTransform:p,intersectBox:t};l=this.intersectBimTile(u,e)}if(!l)break;const a=u.tilesLoader.tileReader;l.forEach((e=>{const t=a.getUserIdByIndex(e.userId);i[t]=!0}))}}}return Object.keys(i)}getObjectsByClientCoordinates(e){var t=this.viewer.cameraControl.getIntersectContext(e),i=this.raycaster;return i.setFromCamera(t.mouse,t.camera),i.camera=t.camera,i.viewportSize=t.viewportSize,this.getObjectsByRaycaster(t,i)}getObjectsByRaycaster(e,t,i){this.raycaster=t;var n={near:i?0:e.camera.near,far:Infinity};e.scene.shrinkScopeByClipPlane(t,n);for(var a=[],s=e.scene.getObjectGroups(),o=0;o<s.length;o++){if(!s[o].isPickable()||0===s[o].children.length)continue;var l=[],d=e.scene.getObjectGroupType(s[o].name);const t=this.viewer.modelManager;let i=t.getModel(d.databagId),c=i?i.getTransformMatrix():new THREE.Matrix4,u=!1;switch(u=!!(i&&i.id&&t.explosionManager.isExploded(i.id)),d.groupType){case r.ObjectGroupType.MODEL:var h=d.databagId;if(e.octreeRoots[h]&&e.octantMap[h]){const t={pickable:!1,distanceScope:n,isExploded:u,bIsGetAllIntersects:!0,modelTransform:c,modelId:i.id};null!=(l=this.intersectMeshesWithDistance(e.octreeRoots[h],e.octantMap[h],t))&&(l.forEach((e=>e.modelId=i.id)),a=a.concat(l))}break;case r.ObjectGroupType.GEOMETRY:for(var h in e.octreeRoots){const t={pickable:!1,distanceScope:n,isExploded:u,bIsGetAllIntersects:!0,modelTransform:c,modelId:h};null!=(l=this.intersectMeshesWithDistance(e.octreeRoots[h],e.octantMap[h],t))&&(a=a.concat(l))}break;case r.ObjectGroupType.BIMTILESGROUP:const t=i.config.metadata.content;if(!0===r.TilesUtil.PICK_EFFECT_MODEL_TYPE[t]){const e={pickable:!0,distanceScope:n,isExploded:u,bIsGetAllIntersects:!0,modelTransform:c};let t=(l=this.intersectBimTile(i,e)).length;for(let e=0;e<t;++e){let t=l[e];const r=i.tilesLoader.tileReader.getUserIdByIndex(t.userId);t.userId=r}}else l=this.defaultIntersect(s[o],!1,n,!0);null!=l&&(l.forEach((e=>e.modelId=i.id)),a=a.concat(l));break;default:null!=(l=this.defaultIntersect(s[o],!1,n,!0))&&(a=a.concat(l))}}a.sort((function(e,t){return e.distance-t.distance}));let c=new Map;for(let e of a){const t=`${e.modelId}${e.userId}`;c.has(t)||c.set(t,e)}return a=[...c.values()]}hitTest(e){var t=this.intersect(e,null,!1);return null!==t?t.point:null}hitTestByBox(e){const t=this.intersect(e,null,!1,!0);return null!==t?t.point:null}pick(e,t){var i=this.intersect(e,null,!0);return t&&t(i),i}pickGlobe(e,t){var i=this.raycaster,n=e.scene.getObjectGroup(r.GlobalData.TilePlaneGroupName);if(!n||!n.visible)return null;i.setFromCamera(e.mouse,e.camera),i.camera=e.camera,i.viewportSize=e.viewportSize;var a={near:0,far:1/0};e.scene.shrinkScopeByClipPlane(i,a);var s=[];n.raycast(this.raycaster,s),s.sort((function(e,t){return e.distance-t.distance}));var o=s.length>0?s[0]:null;return o&&(o.objectType=n.pickableType,o.hoverEnabled=n.hoverEnabled),o}pickGround(t,i){const r=t.viewer.ground;if(!r)return console.log("there is no ground in current viewer"),null;if(!t.camera)return console.log("camera have not been initialized"),null;const n=this.raycaster;let a;n.setFromCamera(t.mouse,t.camera),n.camera=t.camera,n.viewportSize=t.viewportSize;const s=r.intersect(n.ray);if(s){const i=t.scene.getMatrixGlobal();this._pickedWorldPos||(this._pickedWorldPos=new THREE.Vector3),e.copy(i).invert(),this._pickedWorldPos.setX(s.x),this._pickedWorldPos.setY(s.y),this._pickedWorldPos.setZ(s.z),this._pickedWorldPos.applyMatrix4(e),a={point:s,worldPosition:this._pickedWorldPos.setZ(r.elevation),pickFromReferencePlane:!0}}return i&&i(a),a}getIntersectByRay(e,t){return this.intersect(e,t,!0)}intersectBimTile(e,i){const{pickable:n,distanceScope:a,isExploded:s,bIsGetAllIntersects:o,modelTransform:l,intersectBox:d,hitBox:h}=i;let c=this.raycaster;const u=e.getAllNodeInfos(),p=this.viewer.modelManager.getMatrixWorldGlobal(),m=this.viewer.getScene().getInverseMatrixGlobal();t.copy(l).invert();const f=e.tilesLoader.tileReader.getSearchTreeBuffer(),g=this.viewer.modelManager,v=e.getFilter(),y=v._hasVisibleFilter(),M=v._hasPickableFilter(),E="Meter"===g.getSceneUnit()?.001:1,b=c.ray.clone().applyMatrix4(m).applyMatrix4(t);let x=function(e,t,i){let r=e.clone();return r.applyMatrix4(t),r.applyMatrix4(i),c.ray.intersectBoxWithDistance(r)},I=d?function(e,t,i){let r=e.clone();return r.applyMatrix4(t),d.intersectsBox(r)?1:-1}:function(e){return b.intersectBoxWithDistance(e)},T=e=>!e||!e.parent||!1===e.visible||!1===e.parent.visible;function C(e,t){let i=g.isHiddenSourceObjectUserId(e.userId);if(t){if(y&&!v._isVisible(e)||M&&!v._isPickable(e)||i)return!0}else if(y&&!v._isVisible(e)||i)return!0;return!1}let w={};for(const e in f){const t=f[e].searchTreeBlob,i=f[e].box,n=I(i,l,p);if(!s&&n<0)continue;const a=t.getNodeIdsList(),o=t.getOctreeList(),d=t.getOctreeList()[0];let h=function(e,t){const i=r.TilesUtil.getBox(t.getBboxList()),n=I(i,l,p);if(!s&&n<0)return;let o=t.getNodesList();const d=o.length;for(let e=0;e<d;++e){const t=o[e],i=a[t],n=r.TilesUtil.getBox(i.getBboxList()),d=I(n,l,p);if(!s&&d<0)continue;const h=`${i.getTileId()}_${i.getBlockId()}_${i.getNodeId()}`;void 0===w[i.getUserId()]?w[i.getUserId()]=[h]:w[i.getUserId()].push(h)}t.getChildrenList().map((t=>{const i=e[t];h(e,i)}))};h(o,d)}let S=[];for(const t in w){const i=u[t];if(i)for(var A=0,B=i.length;A<B;A++){const t=i[A];if(C(t,n))continue;let r=x(t.boundingBox,l,p);if(r<a.near||r>a.far)continue;let s=t.parent||t.nodeId;if(t.instanceOrNot){const i=e.tilesLoader.getInstanceMeshNodeById(s);if(!i)continue;if(void 0===t.matrix)continue;for(const e in i){i[e].matrix;const n=i[e].mesh;if(T(n))continue;let a=Object.create(t),o=a.matrix.clone();a.matrix=o,S.push({meshNode:n,distance:r,nodeInfo:a,meshId:s})}continue}const o=e.tilesLoader.getMeshNodeById(s);if(T(o))continue;const d=o.indexGroups;for(const e in d){const i=d[e];for(let n=0,a=i.length;n<a;++n){const a=i[n];a.meshId===t.nodeId&&(a.userId=e,S.push({meshNode:o,distance:r,nodeInfo:a,meshId:s}))}}}}if(S.sort(((e,t)=>e.distance-t.distance)),h){let e=c.ray.origin.clone(),t=c.ray.direction.clone();if(0===S.length)return null;let i=S[0].distance;return i=0===i?3:i,S[0].point=e.add(t.multiplyScalar(i)),S[0].object=S[0].meshNode,S[0]}let R=[],D=this,O=d?function(e,t,i,r){return e.intersectByBox(d,t,i,r),t}:function(e,t,i,r){return e.raycastByIndices(c,t,i,r,E),(t=t.filter((e=>!D.viewer.clipPoint(e.point)&&e))).sort(((e,t)=>e.distance-t.distance)),t};for(let e=0;e<S.length&&null!==S[e];e++){let t=[],i=S[e].nodeInfo,r=null;if(i.instanceOrNot&&(r=i.matrix),t=O(S[e].meshNode,t,i,r),0===t.length)continue;if(t[0].userId=i.userId,t[0].indexInfo=i,t[0].meshId=S[e].meshId,R.push(t[0]),o)continue;let n=t[0].distance;t.map((e=>{e.distance<n&&(n=e.distance)}));for(let t=e+1;t<S.length&&null!==S[t];t++)S[t].distance<=n||(S[t]=null)}return R.sort(((e,t)=>e.distance-t.distance)),o?R:R[0]}}})(),function(){let e=new THREE.Matrix4;r.PickHelper=class{constructor(e){this.cameraControl=e,this.scene=e.scene,this.timerId=null,this.lastIntersected=null,this._pickObjectByHover=!1}destroy(){this.cameraControl=null,this.scene=null,this.lastIntersected=null,this.timerId&&(clearTimeout(this.timerId),this.timerId=null)}click(e,t){var i=this;function r(){t&&!1===t.pickable&&(t=null),i.handleMousePick(e,!1,t)}e.button!==THREE.MOUSE.RIGHT?(this.timerId&&clearTimeout(this.timerId),this.timerId=setTimeout(r,500)):r()}doubleClick(e){e.preventDefault(),this.timerId&&clearTimeout(this.timerId),this.handleMousePick(e,!0,null)}handleMousePick(e,t,i){if(this._canPick()||e.button!==THREE.MOUSE.LEFT){var n=this.cameraControl,a=n.viewer.modelManager.sceneState,s=new THREE.Vector2(e.clientX,e.clientY),o=n.screenToCanvas(e.clientX,e.clientY),l=n.viewer.modelManager,d=null;if(i)i.pickable&&(d=i.intersect);else{var h=n.getIntersectContext(s);d=n.intersector.pick(h,null)}if(d){var c=d.userId;if(r.Utils.isMobileDevice()&&(n.pivot=d.point),this.scene.intersectToWorld(d,n.viewer),d.intersectWithoutMap&&this.scene.intersectToWorld(d.intersectWithoutMap,n.viewer),d.innnerDebugging=e.altKey,d.cx=s.x,d.cy=s.y,d.face&&d.face.normal){var u=d.face.normal;for(var p in u)u[p]=u[p]==-u[p]?Math.abs(u[p]):u[p]}if(e.button!==THREE.MOUSE.RIGHT)if(t)r.GlobalData.EnableDemolishByDClick?(a.setSelection([c],d.databagId),g(d,!0),n.updateView(!0)):(a.setSelection([c],d.databagId),n.fitAndRotateBySelection(),g(d,!0));else{const t=a.isSelected(c,d.databagId);e.ctrlKey?t?a.removeSelection([c],d.databagId):a.addSelection([c],d.databagId):t?a.clearSelection():(a.clearSelection(void 0,!1),a.setSelection([c],d.databagId)),g(d,!0),n.updateView(!0)}else g(d,!1)}else{var m=a.getSelection();if(e.ctrlKey)return;if(e.button!=THREE.MOUSE.RIGHT&&m.length>0&&(a.clearSelection(),n.updateView(!0)),i&&!i.pickable)(d=i.intersect).cx=s.x,d.cy=s.y,g(d,!1);else{var f=n.getIntersectContext(s);n.viewer.ground?(f.viewer=n.viewer,g(d=n.intersector.pickGround(f))):g(null)}}}function g(i,n){var a=null;if(i&&i.objectType==r.PICKABLETYPE.Room){var s=i.face.contourIndex,d=i.object.geometry.contour;a=s?{startPoint:d[s.st],endPoint:d[s.ed]}:null}const h=e=>e?{selectedObjectId:r.Utils.isDefined(e.userId)?e.userId:null,objectType:r.Utils.isDefined(e.objectType)?e.objectType:null,selectable:r.Utils.isDefined(e.selectable)?n:null,modelId:r.Utils.isDefined(e.databagId)?e.databagId:null,fileId:r.Utils.isDefined(e.fileId)?e.fileId:null,unit:r.Utils.isDefined(e.unit)?e.unit:null,worldPosition:r.Utils.isDefined(e.worldPosition)?e.worldPosition:null,worldBoundingBox:r.Utils.isDefined(e.worldBoundingBox)?e.worldBoundingBox:null,point:r.Utils.isDefined(e.point)?e.point:null,innnerDebugging:r.Utils.isDefined(e.innnerDebugging)?e.innnerDebugging:null,normal:r.Utils.isDefined(e.face)&&r.Utils.isDefined(e.face.normal)?e.face.normal:null,boundaryPoints:r.Utils.isDefined(e.boundaryPoints)?a:null}:null;l.dispatchEvent({type:i&&i.objectType===r.PICKABLETYPE.Marker3d?r.EVENTS.ON_CLICK_MARKER3D_PICK:r.EVENTS.ON_CLICK_PICK,event:e,doubleClick:t,canvasPos:{x:o.x,y:o.y},intersectInfo:h(i),intersectInfoWithoutMap:i&&h(i.intersectWithoutMap)})}}handleMouseMeasure(e,t,i,n){if(this._canPick()){var a=this.cameraControl,s=a.scene,o=n||r.EVENTS.ON_MEASURE_PICK,l={x:e.clientX,y:e.clientY},d=this.pickToPoint(l,5);null!=d?(t&&i.copy(d.pickPoint),h(d.pickPoint,d.pickLine,d.pickPlane,d.face.normal,d.userId,d.modelId)):(s.hasObjectGroup(r.ObjectGroupType.MEASUREPLANE)&&s.removeObjectGroupByName(r.ObjectGroupType.MEASUREPLANE),h(null,null,!1))}function h(i,r,n,s,l,d){var h=a.viewer.modelManager;if(null!=i){var c=a.scene.drawingToWorld(i);i.copy(c)}if(null!=r){var u=a.scene.drawingToWorld(r[0]),p=a.scene.drawingToWorld(r[1]);r[0].copy(u),r[1].copy(p)}h.dispatchEvent({type:o,event:e,pick:t,pickPoint:i,pickLine:r,pickPlane:n,normal:s,userId:l,modelId:d})}}handleMouseMovePick(e){if(!r.GlobalData.MouseMovePick)return;if(!this._canPick())return;const t=this.cameraControl,i=t.screenToCanvas(e.clientX,e.clientY),n=this,a=new THREE.Vector2(e.clientX,e.clientY),s=t.getIntersectContext(a);if(s.viewer=t.viewer,this._pickObjectByHover)if(this.lastIntersected)o(this.lastIntersected,!0,!1);else{o(t.intersector.pickGround(s),!1,!0)}else t.intersector.pick(s,(e=>{if(e)n.scene.intersectToWorld(e,t.viewer),o(e,!0,!1);else{o(t.intersector.pickGround(s),!1,!0)}}));function o(n,a,s){if(null==n)return;const o=t.viewer.modelManager,l={type:r.EVENTS.ON_MOUSE_MOVE_PICK,event:e,selectable:a,canvasPos:{x:i.x,y:i.y},intersectInfo:{}};l.intersectInfo.pickFromReferencePlane=s,void 0!==n.userId&&(l.intersectInfo.selectedObjectId=n.userId),void 0!==n.objectType&&(l.intersectInfo.objectType=n.objectType),void 0!==n.databagId&&(l.intersectInfo.modelId=n.databagId),void 0!==n.worldPosition&&(l.intersectInfo.worldPosition=n.worldPosition),void 0!==n.worldBoundingBox&&(l.intersectInfo.worldBoundingBox=n.worldBoundingBox),void 0!==n.point&&(l.intersectInfo.point=n.point),void 0!==n.innnerDebugging&&(l.intersectInfo.innnerDebugging=n.innnerDebugging),l.intersectInfo.fileId=r.Utils.isDefined(n.fileId)?n.fileId:null,l.intersectInfo.unit=r.Utils.isDefined(n.unit)?n.unit:null,o.dispatchEvent(l)}this._pickObjectByHover=!1}handleMouseHover(e){if(this._canPick()){var t=this.cameraControl,i=t.viewer.modelManager.sceneState,n=this;if(function(){if(0==n.scene.hasObjectGroup(r.ObjectGroupType.AXISGRIDMANAGER))return!1;var e=0,t=n.scene.axisGridEnableHover;if(t){for(var i in n.scene.axisGridManagerMap){e+=r.AxisGridManager.getInstance(n.scene,i).getElements().length}0===e&&(t=!1)}return t}()){var a=this.scene.getMatrixGlobal(),s=new THREE.Vector2(e.clientX,e.clientY),o=t.getRaycaster(s.x,s.y),l=[];for(var d in this.scene.axisGridManagerMap){var h=r.AxisGridManager.getInstance(this.scene,d),c=h.getIntersectPoints(o,a);h.snapOnFloors(c).forEach((e=>{e.modelId=d,l.push(e)}))}t.viewer.modelManager.dispatchEvent({type:r.EVENTS.ON_AXIS_GRID_HOVER,snaps:l})}if(r.GlobalData.Hover||function(){let e=!1;return n.scene.children[0].children.some((t=>{if(t.name&&t.name.indexOf(r.ObjectGroupType.MARKER3D)>=0&&t.children.length>0)return e=!0})),e}()){var u=t.screenToCanvas(e.clientX,e.clientY),p=new THREE.Vector2(e.clientX,e.clientY),m=t.getIntersectContext(p);t.intersector.pick(m,(function(e){function a(e){switch(e.objectType){case r.PICKABLETYPE.Marker3d:e.object.setAttributeSize(e.index,e.object.initSize||e.currentSize);break;default:i.clearHover()}}if(n._pickObjectByHover=!0,e){var s=r.GlobalData.Hover||e.hoverEnabled;n.lastIntersected&&(n.lastIntersected.userId!=e.userId&&a(n.lastIntersected),n.lastIntersected.hoverEnabled&&f(null)),s?(n.lastIntersected&&n.lastIntersected.userId==e.userId||(!function(e){switch(e.objectType){case r.PICKABLETYPE.Marker3d:var t=e.object;e.currentSize=t.getAttributeSize(e.index),t.initSize=t.initSize||e.currentSize,t.getAttributeHoverAnimation(e.index)&&e.currentSize===t.initSize&&t.setAttributeSize(e.index,Math.floor(1.5*e.currentSize));break;default:i.setHoverId(e.userId)}}(e),n.lastIntersected=e),f(e,!0)):n.lastIntersected=e,t.updateHighlight()}else n.lastIntersected&&(a(n.lastIntersected),n.lastIntersected=null,f(null),t.updateHighlight())}))}}function f(i,a){var s=t.viewer.modelManager;null!=i&&n.scene.intersectToWorld(i,t.viewer),s.dispatchEvent({type:r.EVENTS.ON_HOVER_PICK,event:e,canvasPos:{x:u.x,y:u.y},intersectInfo:i?{selectedObjectId:i.userId,objectType:i.objectType,selectable:a,modelId:i.databagId,fileId:i.fileId,unit:i.unit,worldPosition:i.worldPosition,worldBoundingBox:i.worldBoundingBox,point:i.point,innnerDebugging:i.innnerDebugging}:null})}}_canPick(){return!!this.cameraControl.viewer.modelManager.hasModelDataReady()}pickToPoint(t,i){r.Utils.defaultValue(i,5);var n=this.cameraControl,a=n.scene,s=new THREE.Vector2(t.x,t.y),o=n.getIntersectContext(s),l=n.intersector.pick(o);if(l){if(l.object.parent instanceof r.ExtrudeBodyManager)return null;var d,h=l.point,c=l.object.geometry,u=l.object.matrixWorld.clone(),p=n.camera.projScreenMatrix,m=o.mouse,f=o.viewportSize;if(void 0!==l.indexInfo&&(d=l.indexInfo),!c.attributes&&!c._bufferGeometry)return null;l.unit=n.viewer.getModelManager().getSceneUnit();var g=c.attributes?c:c._bufferGeometry;if("MeshLineGeometry"===g.type){var v={};return e.copy(u).invert(),(z=new THREE.Vector3(h.x,h.y,h.z)).applyMatrix4(e),v.pickPoint=z,v.pickLine=l.object,v.pickPlane=null,v.type="Line",v.face=l.face,v.userId=l.userId,v.modelId=l.databagId,v.fileId=l.fileId,v.unit=l.unit,v}if(!g.index||!r.Utils.isDefined(g.attributes.normal)&&!r.Utils.isDefined(g.attributes.cNormal))return null;var y=g.attributes.position.array,M=[],E=0,b=0;d?(M=g.index.array,E=d.indexStart,b=d.indexStart+d.indexCount):(r.GlobalData.BatchMergeEnabled&&l.matrix&&u.multiply(l.matrix),b=(M=r.RemoveDuplicateVertex(g.attributes.position.array,g.index.array)).length);for(var x=1/0,I=(t=new THREE.Vector3,[]),T=[],C=r.Utils.getMin(M.slice(E,b)),w=E;w<b;++w){var S=new THREE.Vector3(y[3*M[w]],y[3*M[w]+1],y[3*M[w]+2]);S.applyMatrix4(u),(s=S.clone()).applyMatrix4(p);var A=.5*(s.x-m.x)*f.width,B=.5*(s.y-m.y)*f.height;(G=Math.sqrt(A*A+B*B))<x&&(x=G,t.copy(S)),d&&T.push(M[w]-C)}var R=h.clone(),D=null,O=!1;if(x<i)a.hasObjectGroup(r.ObjectGroupType.MEASUREPICKPLANE)&&a.removeObjectGroupByName(r.ObjectGroupType.MEASUREPICKPLANE),R=t.clone();else{function L(e,t,i){var r=new THREE.Vector3;r.subVectors(t,e);var n=new THREE.Vector3;n.subVectors(i,e);var a=r.dot(n);if(a<0)return e;var s=r.dot(r);if(a>s)return t;a/=s;var o=e.clone();return o.addScaledVector(r,a),o}x=1/0;var P=new THREE.Vector3,N=new THREE.Vector3,H=(t=new THREE.Vector3,[]);d?(I=y.slice(d.positionStart,d.positionStart+d.positionCount),H=r.BuildEdge(I,T)):(I=y,H=r.BuildEdge(g.attributes.position.array,g.index.array));for(w=0;w<H.length;w+=2){var F=new THREE.Vector3(I[3*H[w]],I[3*H[w]+1],I[3*H[w]+2]);F.applyMatrix4(u);var k=new THREE.Vector3(I[3*H[w+1]],I[3*H[w+1]+1],I[3*H[w+1]+2]);k.applyMatrix4(u);var U=L(F,k,h);(s=U.clone()).applyMatrix4(p);var G;A=.5*(s.x-m.x)*f.width,B=.5*(s.y-m.y)*f.height;(G=Math.sqrt(A*A+B*B))<x&&(x=G,P.copy(F),N.copy(k),t.copy(U))}if(I=null,T=null,x<i)a.hasObjectGroup(r.ObjectGroupType.MEASUREPLANE)&&a.removeObjectGroupByName(r.ObjectGroupType.MEASUREPLANE),(D=new Array).push(P),D.push(N),R=t.clone();else{if(r.GlobalData.MeasureHighlightPlane){var z;let t;M=g.index.array,e.copy(u).invert(),(z=new THREE.Vector3(h.x,h.y,h.z)).applyMatrix4(e);let i=!1;r.Utils.isDefined(g.attributes.cNormal)?(t=g.attributes.cNormal.array,i=!0):r.Utils.isDefined(g.attributes.normal)&&(t=g.attributes.normal.array);var V=r.GetFaceIndex(y,t,M,z,l.face.normal,i),j=new THREE.BufferGeometry;j.setIndex(V),j.setAttribute("position",g.attributes.position,3);var _=r.BuildEdge(y,V),W=new THREE.BufferGeometry;W.setIndex(_),W.setAttribute("position",g.attributes.position,3),a.hasObjectGroup(r.ObjectGroupType.MEASUREPLANE)&&a.removeObjectGroupByName(r.ObjectGroupType.MEASUREPLANE);var Y=a.getOrCreateObjectGroup(r.ObjectGroupType.MEASUREPLANE,{priority:1,globalSpace:!0}),Z=new THREE.Mesh(j,new THREE.MeshBasicMaterial({color:1170103,opacity:.1,transparent:!0}));Z.applyMatrix4(l.object.matrix),Y.add(Z);var Q=new THREE.LineSegments(W,new THREE.LineBasicMaterial({color:1170103}));Q.applyMatrix4(l.object.matrix),Y.add(Q),Y.updateMatrixWorld(!0),n.updateHighlight()}O=!0}}var J=null;return O?J="Plane":D?J="Line":R&&(J="Point"),(v={}).pickPoint=R,v.pickLine=D,v.pickPlane=O,v.type=J,v.face=l.face,v.userId=l.userId,v.modelId=l.databagId,v.fileId=l.fileId,v.unit=l.unit,v}return null}handleTabs(e){var t=this.cameraControl.viewer.modelManager.sceneState;null!=e&&null!=e.userId&&t.setSelection([e.userId],e.databagId)}pickAllObjectsByPosition(e){var t=new THREE.Vector2(e.clientX,e.clientY);return this.cameraControl.intersector.getObjectsByClientCoordinates(t)}}}(),r.EditTool=class{constructor(e){this.name=e,this._mousePressed=!1}getName(){return this.name}onExit(){}destroy(){}processMouseDown(e){return!1}processMouseMove(e){return!1}processMouseUp(e){return!1}processMouseWheel(e){return!1}processMouseDoubleClick(e){return!1}processKeyDown(e){return!1}processKeyUp(e){switch(e.keyCode){case r.Keys.ESC:this._mousePressed=!1}return!1}processTouchstart(e){return!1}processTouchmove(e){return!1}processTouchend(e){return!1}processHover(e){return!1}onEvent(e){var t=!1;switch(e.type){case"touchmove":t=this.processTouchmove(e);break;case"touchstart":t=this.processTouchstart(e);break;case"touchend":t=this.processTouchend(e);break;case"keydown":t=this.processKeyDown(e);break;case"keyup":t=this.processKeyUp(e);break;case"mousewheel":case"DOMMouseScroll":t=this.processMouseWheel(e);break;case"mousedown":this._mousePressed=!0,t=this.processMouseDown(e);break;case"mousemove":t=this._mousePressed?this.processMouseMove(e):this.processHover(e);break;case"mouseup":this._mousePressed=!1,t=this.processMouseUp(e);break;case"dblclick":t=this.processMouseDoubleClick(e)}return t}},(()=>{class e extends r.EditTool{constructor(e,t,i){super(e),this.cameraControl=t,this.frustum=new THREE.Frustum,this.startPt=new THREE.Vector2,this.endPt=new THREE.Vector2,this.eventDispatcher=i}destroy(){super.destroy(),this.cameraControl=null,this.frustum=null,this.startPt=null,this.endPt=null,this.eventDispatcher=null}onUpdateUI(e){this.eventDispatcher.dispatchEvent({type:r.EVENTS.ON_EDITOR_UPDATEUI,data:e,editor:this.name})}updateFrustum(e,t){var i=this.startPt.x,r=this.endPt.x,n=this.startPt.y,a=this.endPt.y;if(i>r){var s=i;i=r,r=s}if(n>a){var o=n;n=a,a=o}if(r-i==0||a-n==0)return!1;var l=this.cameraControl,d=l.getContainerDimensions();return e&&l.computeFrustum(i,r,n,a,this.frustum,d),t&&this.onUpdateUI({visible:!0,dir:this.startPt.x<this.endPt.x,left:i-d.left,top:n-d.top,width:r-i,height:a-n}),!0}computeFrustum(){var e=this.startPt.x,t=this.endPt.x,i=this.startPt.y,r=this.endPt.y;let n=new THREE.Vector3(e,i),a=new THREE.Vector3(e,r),s=new THREE.Vector3(t,r),o=new THREE.Vector3(t,i),l=[];l.push(n,a,s,o);let d=this.cameraControl.viewer,h=[];for(let e=0;e<l.length;e++){let t=[];t.push(l[e]),t.push(l[(e+1)%l.length]),t.push(l[e].clone().setZ(1)),h.push(m(p(d,t)))}let c=[];c.push(n,o,s),h.push(m(p(d,c)));let u=[];function p(e,t){let i=[];for(const r of t){let t=e.clientToWorld(r.clone()),n=e.worldToDrawing(t);i.push(new THREE.Vector3(n.x,n.y,n.z))}return i}function m(e){return(new THREE.Plane).setFromCoplanarPoints(e[0],e[1],e[2])}u.push(n.setZ(1),a.setZ(1),s.setZ(1)),h.push(m(p(d,u)));let f=new THREE.Frustum;for(let e=0;e<h.length;e++)f.planes[e].copy(h[e]);return f}}r.RectOpTool=e})(),(()=>{class e extends r.RectOpTool{constructor(e){super(r.EditToolMode.PICK_BY_RECT,e.cameraControl,e.modelManager),this.viewer=e,this.scene=e.getScene(),this.pickHelper=new r.PickHelper(this.cameraControl),this.activatePick=!1,this.pickPoint=new THREE.Vector3,this.snapIsEnabled=!1}destroy(){super.destroy(),this.pickHelper.destroy(),this.pickHelper=null,this.viewer=null,this.scene=null,this.pickPoint=null}processMouseDown(e){if(!r.EditorConfig.NoKey){e.preventDefault();var t=["pickByMeasure"],i=this.viewer.editorManager.tools,n=!0;return i.some((e=>{if(t.indexOf(e.name)>=0)return n=!1,!0})),this.activatePick=n&&(e.ctrlKey||e.altKey),this.activatePick&&e.button===THREE.MOUSE.LEFT?(this.startPt.set(e.clientX,e.clientY),!0):super.processMouseDown(e)}}processMouseMove(e){if(!r.EditorConfig.NoKey)return this.activatePick&&e.button===THREE.MOUSE.LEFT?(this.endPt.set(e.clientX,e.clientY),this.updateFrustum(!1,!0),!0):super.processMouseMove(e)}processMouseUp(e){if(!r.EditorConfig.NoKey){if(this.onUpdateUI({visible:!1}),this.activatePick&&e.button===THREE.MOUSE.LEFT){if(this.activatePick=!1,Math.abs(this.startPt.x-e.clientX)<2&&Math.abs(this.startPt.y-e.clientY)<2)return this.pickHelper.click(e,null),!0;if(this.endPt.set(e.clientX,e.clientY),!this.updateFrustum(!0,!1))return this.pickHelper.click(e),!0;var t=r.OPSELECTIONTYPE.Clear;return e.ctrlKey?t=r.OPSELECTIONTYPE.Add:e.altKey&&(t=r.OPSELECTIONTYPE.Remove),r.PickUtil.pickByRect(this.scene,this.frustum,t,this.viewer,void 0,this.startPt,this.endPt),this.pickHelper.lastPickedUserId="",this.cameraControl.updateView(!0),!0}return super.processMouseUp(e)}}processHover(e){if(this.snapIsEnabled)return r.GlobalData.IsMobile||this.pickHelper.handleMouseMeasure(e,!1,this.pickPoint,r.EVENTS.ON_HOVER_SNAP),!0}enableSnap(e){this.snapIsEnabled=e}}r.RectPickTool=e})(),(()=>{let e=new THREE.Vector3;class t extends r.RectOpTool{constructor(e){super(r.EditToolMode.ZOOM_BY_RECT,e.cameraControl,e.modelManager),this.scene=e.getScene(),this.camera=e.camera,this.activateZoom=!1}destroy(){super.destroy(),this.scene=null}processMouseDown(e){return e.button===THREE.MOUSE.LEFT?(this.startPt.set(e.clientX,e.clientY),this.activateZoom=!0,!0):super.processMouseDown(e)}processMouseMove(e){return this.activateZoom?(this.endPt.set(e.clientX,e.clientY),this.updateFrustum(!1,!0),!0):super.processMouseMove(e)}processMouseUp(e){if(this.activateZoom){if(this.activateZoom=!1,this.onUpdateUI({visible:!1}),this.endPt.set(e.clientX,e.clientY),this.updateFrustum(!0,!1)){this.zoomToRectangle()&&!0!==this.camera.isPerspective&&this.orthoCameraZoom()}return!0}return super.processMouseUp(e)}orthoCameraZoom(){let e=this.cameraControl.getContainerDimensions(),t=e.width/e.height;var i=Math.abs(this.endPt.x-this.startPt.x),r=Math.abs(this.endPt.y-this.startPt.y);let n=1;n=t<i/r?i/e.width:r/e.height;let a=this.cameraControl.camera;a.orthoScale/=n,this.cameraControl.dirtyCamera(!0),a.setZoom(a.orthoScale),this.cameraControl.setCameraChanging(!0),this.cameraControl.update(!0,!0)}zoomToRectangle(){var t=this.cameraControl.camera,i=this.cameraControl.camera.target,n=this.cameraControl.getContainerDimensions(),a=this.startPt.x,s=this.startPt.y,o=this.endPt.x,l=this.endPt.y,d=Math.abs(o-a),h=Math.abs(s-l);if(0===d||0===h)return;var c=new THREE.Vector2((a+o)/2,(s+l)/2),u=this.cameraControl.getIntersectContext(c),p=this.cameraControl.intersector.hitTest(u);if(!p){let t=this.cameraControl.viewer,i=new r.RectPickTool(t);i.startPt.set(a,o),i.endPt.set(s,l);let n=r.PickUtil.pickByRect(this.scene,this.computeFrustum(),r.OPSELECTIONTYPE.Add,t,!1);var m=new THREE.Box3;for(const e of n){const i=t.getComponentInfoByUserId(e);if(!i)continue;const r=i.boundingBox;m.expandByPoint(r.min),m.expandByPoint(r.max)}if(!1===m.isEmpty()){let i=t.worldToDrawing(m.getCenter(e));p=new THREE.Vector3(i.x,i.y,i.z)}}if(!p)return!1;let f=t.position.clone();var g=d/h>n.width/n.height?d/n.width:h/n.height,v=p.distanceTo(f)*g,y=i.clone().sub(f),M=y.length();y.normalize();let E=y.clone().negate().multiplyScalar(v);return f=p.clone().add(E),t.position.copy(f),i.copy(f).sub(E.clone().normalize().multiplyScalar(M)),this.cameraControl.updateView(!0),!0}worldToClient(e){var t=this.cameraControl.camera,i=new THREE.Vector3(e.x,e.y,e.z);return i.project(t),i}clientToWorld(e){var t=this.cameraControl.getContainerDimensions(),i=this.cameraControl.camera,r=new THREE.Vector3;return r.x=e.x/t.width*2-1,r.y=-e.y/t.height*2+1,r.z=e.z,r.unproject(i),r}}r.RectZoomTool=t})(),(()=>{class e extends r.EditTool{constructor(e){super(r.EditToolMode.PICK_BY_MEASURE),this.editorManager=e.editorManager,this.viewer=e,this.pickHelper=new r.PickHelper(e.cameraControl),this.mouseDown=new THREE.Vector2,this.lastEvent=null,this.pick=!1,this.pickPoint=new THREE.Vector3}destroy(){super.destroy(),this.editorManager=null,this.mouseDown=null,this.lastEvent=null,this.pickPoint=null,this.pickHelper.destroy(),this.pickHelper=null}processMouseDown(e){return!!r.GlobalData.IsMobile||(e.button===THREE.MOUSE.LEFT||e.button===THREE.MOUSE.RIGHT?(this.mouseDown.x=e.clientX,this.mouseDown.y=e.clientY,!1):super.processMouseDown(e))}processMouseMove(e){return!1}processMouseUp(e){if(r.GlobalData.IsMobile)return!0;var t=new THREE.Vector2(e.clientX,e.clientY).distanceTo(this.mouseDown);if(e.button===THREE.MOUSE.LEFT){if(t<=2){this.editorManager.isUpdateRenderList=!0;var i=this.pickPoint.clone();e.shiftKey?this.pickHelper.handleShiftMeasure(e,!0,i):this.pickHelper.handleMouseMeasure(e,!0,i),i.equals(this.pickPoint)||(this.pick=!this.pick,this.pickPoint.copy(i))}return this.dispatchEvent({type:r.EVENTS.ON_TOOL_END}),!0}if(e.button===THREE.MOUSE.RIGHT){if(t<=2){i=this.pickPoint.clone();this.pickHelper.handleMouseMeasure(e,!0,i,r.EVENTS.ON_MEASURE_RESET)}return!0}return super.processMouseUp(e)}processHover(e){return r.GlobalData.IsMobile||(e.shiftKey?this.pickHelper.handleShiftMeasure(e,!1,this.pickPoint):this.pickHelper.handleMouseMeasure(e,!1,this.pickPoint)),!0}processTouchstart(e){return this.mouseDown.x=e.touches[0].clientX,this.mouseDown.y=e.touches[0].clientY,e.clientX=e.touches[0].clientX,e.clientY=e.touches[0].clientY,this.lastEvent=e,super.processTouchstart(e)}processTouchmove(e){const t=this.mouseDown.x,i=this.mouseDown.y,r=e.touches[0].clientX,n=e.touches[0].clientY;return Math.pow(r-t,2)+Math.pow(n-i,2)>25&&(this.lastEvent=null),super.processTouchmove(e)}processTouchend(e){return null!=this.lastEvent&&(this.pickHelper.handleMouseMeasure(this.lastEvent,!0,this.pickPoint),this.editorManager.isUpdateRenderList=!0),super.processTouchend(e)}onExit(e){var t=this.pickHelper.scene;t.hasObjectGroup(r.ObjectGroupType.MEASUREPICKPLANE)&&t.removeObjectGroupByName(r.ObjectGroupType.MEASUREPICKPLANE)}dispatchEvent(e){this.viewer.modelManager.dispatchEvent(e)}}r.MeasureTool=e})(),r.ActionTool=class{constructor(e){this.cameraControl=e,this.action=[],this.editorMap={}}destroy(){}addEditor(e,t,i){this.editorMap[t]||(this.editorMap[t]=[]);const n={editor:e,event:i};this.editorMap[t].push(n),this.cameraControl.setCameraChanging(!0),!1!==r.GlobalData.BatchMergeEnabled&&r.GlobalData.Renderer!==r.EnumRendererType.INCREMENT||(e[t](i),this.cameraControl.updateCamera(!0),this.cameraControl.viewer.render())}clearEditorMap(){this.editorMap={}}setEvent(e){this.event=e}MethodToEditorMethod(){for(const e in this.editorMap){const t=this.editorMap[e].pop(),{editor:i,event:r}=t;i[e](r)}}execute(){this.MethodToEditorMethod(),this.clearEditorMap()}isProcessingMouse(){return Object.keys(this.editorMap).length>0}},(()=>{r.Keys={ALT:18,BACKSPACE:8,LEFT:37,UP:38,RIGHT:39,DOWN:40,A:65,D:68,E:69,Q:81,S:83,W:87,PLUS:187,SUB:189,ZERO:48,ESC:27,TAB:9},r.EditorConfig={ReverseWheelDirection:!1,MovementSpeedRate:1,WalkSpeedRate:1,RotatePivotMode:0,NoPan:!1,NoRotate:!1,NoZoom:!1,NoKey:!1,LockAxisZ:!1,LockAxisZRange:null};r.BaseEditor=class{constructor(e,t){this.name=e,this.cameraControl=t,this.mouseButtons={ORBIT:THREE.MOUSE.RIGHT,PAN2:THREE.MOUSE.MIDDLE,PAN:THREE.MOUSE.LEFT},this.StateType={NONE:-1,ROTATE:0,DOLLY:1,PAN:2},this.state=this.StateType.NONE,this.zoomSpeed=Math.pow(.95,.2),this.defaultMovementSpeed=.005*r.GlobalData.SceneSize,this.movementSpeed=this.defaultMovementSpeed,this.minMovementSpeed=.001,this.defaultKeyPanSpeed=2,this.keyPanSpeed=this.defaultKeyPanSpeed,this.minKeyPanSpeed=.01,this.wheelZoomFactor=45e-5}getName(){return this.name}destroy(){this.scene=null,this.cameraControl=null,this.mouseButtons=null,this.StateType=null}onExit(){}onEnter(){}processMouseDown(e){}processMouseMove(e){}processMouseUp(e){}processMouseWheel(e){}processMouseDoubleClick(e){}processKeyDown(e){}processKeyUp(e){}processTouchstart(e){}processTouchmove(e){}processTouchend(e){}processHover(e){}update(){}moveTo(e,t,i){}rotateTo(e){}dispatchEvent(e){this.cameraControl.viewer.modelManager.dispatchEvent(e)}updateButtons(e){void 0!==e.ORBIT&&(this.mouseButtons.ORBIT=e.ORBIT),void 0!==e.PAN&&(this.mouseButtons.PAN=e.PAN),void 0!==e.PAN2&&(this.mouseButtons.PAN2=e.PAN2),void 0!==e.ZOOM&&(this.mouseButtons.ZOOM=e.ZOOM)}isUserInputEditor(){return this.name===r.EditorMode.PAN||this.name===r.EditorMode.ZOOM||this.name===r.EditorMode.ORBIT}}})(),(()=>{class e extends r.BaseEditor{constructor(e,t){super(e,t),this.oldMouseX=-1,this.oldMouseY=-1,this.modelManager=t.viewer.modelManager,this._worldDimension=new THREE.Vector2,this.pickHelper=new r.PickHelper(t),this.longTapFlag=!1,r.Utils.isMobileDevice()?this.selectPad=new r.SelectPad(this):this.selectPad=null,this.startPt=new THREE.Vector2,this.viewer=t.viewer}destroy(){super.destroy(),this.modelManager=null,this._worldDimension=null,this.startPt=null,this.pickHelper.destroy(),this.pickHelper=null,this.selectPad&&(this.selectPad.destroy(),this.selectPad=null),this.viewer=null}longTap(){this.longTapFlag=!0,r.Logger.log("long tap"),this.selectPad&&this.selectPad.showOverlay(this.startPt)}beginPan(e,t){this._panStart.set(e,t),this.cameraControl.userInputHelper.getWorldDimension(e,t,this._worldDimension)}moveTo(e){if(void 0!==e){var t=this.cameraControl;if(!r.EditorConfig.NoKey&&!r.EditorConfig.NoPan){var i=this.movementSpeed*r.EditorConfig.MovementSpeedRate,n=this.keyPanSpeed*r.EditorConfig.MovementSpeedRate,a=r.MoveDirection;switch(e){case a.FORWARD:t.moveForward(i,!0);break;case a.BACK:t.moveBackward(i,!0);break;case a.LEFT:t.pan(n,0);break;case a.RIGHT:t.pan(-n,0);break;case a.UP:t.pan(0,n);break;case a.DOWN:t.pan(0,-n);break;default:e=a.NONE}e!==a.NONE&&t.update(!0,!0)}}}onExit(){r.GlobalData.BatchMergeEnabled&&this.animationStarted&&(this._stop(),this.animationStarted=!1)}}r.NormalEditor=e})(),function(){class e extends r.NormalEditor{constructor(e,t=r.EditorMode.ORBIT){super(t,e),this.mouseButtons={ORBIT:THREE.MOUSE.RIGHT,PAN2:THREE.MOUSE.MIDDLE,PAN:THREE.MOUSE.LEFT},this._rotateStart=new THREE.Vector2,this._rotateEnd=new THREE.Vector2,this._rotateDelta=new THREE.Vector2,this._lastDampingOffset=new THREE.Vector2,this._curDampingOffset=new THREE.Vector2,this.rotatePivot=null,this.enable=!0,this.rotateSpeed=.2;"windows"===r.Utils.getOS()&&(this.rotateSpeed=.8)}processMouseDown(e,t){e.preventDefault(),e.button===this.mouseButtons.ORBIT&&!r.EditorConfig.NoRotate&&this.enable&&(this.oldMouseX=e.clientX,this.oldMouseY=e.clientY,t.addEditor(this,"processMouseDownOnRender",e))}processMouseDownOnRender(e){const t=this.cameraControl;this.rotatePivot=t.userInputHelper.getRotatePivot(r.EditorConfig.RotatePivotMode,{x:e.clientX,y:e.clientY}),this._rotateStart.set(e.clientX,e.clientY),this._rotateEnd.set(e.clientX,e.clientY),this.resetDynamicRotate(),this.dispatchEvent({type:r.EVENTS.ON_EDITOR_BEGIN,name:r.EditorMode.ORBIT,editor:this.name,startPt:this._rotateStart}),this.state=this.StateType.ROTATE}processMouseMove(e,t){if(this.state!==this.StateType.ROTATE)return!1;t.addEditor(this,"processMouseMoveOnRender",e)}processMouseMoveOnRender(e){const t=this.cameraControl;e.preventDefault(),t.userInputWorking||(t.userInputWorking=!0),this._rotateEnd.set(e.clientX,e.clientY),this.cameraControl.isEnableDamping()||(this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart),Math.abs(this._rotateDelta.x)<r.Math.EPSILON2&&Math.abs(this._rotateDelta.y)<r.Math.EPSILON2||(this._rotateStart.copy(this._rotateEnd),this._processRotate(this._rotateDelta,this.rotatePivot),this.dispatchEvent({type:r.EVENTS.ON_EDITOR_ROTATING,editor:this.name})))}processMouseUp(e,t){if(this.state!==this.StateType.ROTATE)return!1;t.addEditor(this,"processMouseMoveUpRender",e)}processMouseMoveUpRender(e){const t=this.cameraControl;return this.state=this.StateType.NONE,t.endOperation(),t.onUserInputFinished(),this.dispatchEvent({type:r.EVENTS.ON_EDITOR_END,name:r.EditorMode.ORBIT,editor:this.name}),!0}processTouchstart(e,t){1===e.touches.length&&t.addEditor(this,"processOrbitTouchstartOnRender",e)}processOrbitTouchstartOnRender(e){const t=this.cameraControl;r.EditorConfig.NoRotate||(this.rotatePivot=t.userInputHelper.getRotatePivot(r.EditorConfig.RotatePivotMode,{x:e.touches[0].clientX,y:e.touches[0].clientY}),this._rotateStart.set(e.touches[0].clientX,e.touches[0].clientY),this.state=this.StateType.ROTATE)}processTouchmove(e,t){if(this.state!==this.StateType.ROTATE)return!1;e.preventDefault(),1===e.touches.length&&t.addEditor(this,"processOrbitTouchmoveOnRender",e)}processOrbitTouchmoveOnRender(e){this._rotateEnd.set(e.touches[0].clientX,e.touches[0].clientY),this._rotateDelta.subVectors(this._rotateStart,this._rotateEnd);const t=this.viewer.getClientSize(),i=2*Math.PI*this._rotateDelta.x/t.x*this.rotateSpeed,n=2*Math.PI*this._rotateDelta.y/t.y*this.rotateSpeed,a=this.cameraControl;a.touchUpdateRotation(i,n),this._rotateStart.copy(this._rotateEnd),this.modelManager.dispatchEvent({type:r.EVENTS.ON_EDITOR_ROTATING}),a.touchUpdate()}processTouchend(e,t){if(this.state!==this.StateType.ROTATE)return!1;t.addEditor(this,"processOrbitTouchendOnRender",e)}processOrbitTouchendOnRender(e){const t=this.cameraControl;switch(e.touches.length){case 0:this.state=this.StateType.NONE,t.touchEndHandler(e);break;case 1:if(r.EditorConfig.NoRotate)return;this._rotateStart.set(e.touches[0].clientX,e.touches[0].clientY),this.state=this.StateType.ROTATE}this.dispatchEvent({type:r.EVENTS.ON_EDITOR_END,name:r.EditorMode.ORBIT,editor:this.name})}dynamicRotate(){this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart);let e=!1;if((Math.abs(this._rotateDelta.x)>r.Math.EPSILON4||Math.abs(this._rotateDelta.y)>r.Math.EPSILON4)&&(e=!0),this._lastDampingOffset.length()>r.Math.EPSILON4&&(e=!0),e){const e=this.viewer.getClientSize(),t=-2*Math.PI*this._rotateDelta.x/e.x,i=-2*Math.PI*this._rotateDelta.y/e.y;this._lastDampingOffset.add(new THREE.Vector2(t,i)),this._curDampingOffset.copy(this._lastDampingOffset);const r=this._curDampingOffset.multiplyScalar(this.cameraControl.dynamicDampingFactor());this.cameraControl.handleRotation(r.x,r.y,this.rotatePivot),this._rotateStart.copy(this._rotateEnd),this._lastDampingOffset.multiplyScalar(1-this.cameraControl.dynamicDampingFactor())}}resetDynamicRotate(){this._lastDampingOffset.set(0,0),this._curDampingOffset.set(0,0)}_processRotate(e,t){var i=this.viewer.getClientSize(),r=-2*Math.PI*e.x/i.x,n=-2*Math.PI*e.y/i.y;this.cameraControl.handleRotation(r,n,t)}}r.OrbitEditor=e}(),(()=>{class e extends r.NormalEditor{constructor(e){super(r.EditorMode.PICK,e),this.tabIndex=0,this.intersectOfMouseDown=null,this.pickObjects=[],this._touchStartTime=null}destroy(){super.destroy(),this.pickObjects=null}processMouseDown(e){this.intersectOfMouseDown=null,e.preventDefault();Math.abs(this.oldMouseX-e.clientX)<=1&&Math.abs(this.oldMouseY-e.clientY)<=1&&(this.intersectOfMouseDown=this.cameraControl.getLastIntersect()),this.oldMouseX=e.clientX,this.oldMouseY=e.clientY}processMouseUp(e){e.preventDefault();const t=Math.abs(this.oldMouseX-e.clientX)<=1&&Math.abs(this.oldMouseY-e.clientY)<=1,i=t;return e.button!==THREE.MOUSE.LEFT&&e.button!==THREE.MOUSE.RIGHT||!t?(this.intersectOfMouseDown=null,this.oldMouseX=e.clientX,this.oldMouseY=e.clientY,!1):(this.viewer.hasBimtilesModel()||(this.pickObjects=this.pickHelper.pickAllObjectsByPosition(e)),this.pickHelper.click(e,this.intersectOfMouseDown),this.cameraControl.update(!0),this.intersectOfMouseDown=null,i)}processMouseDoubleClick(e){e.button===THREE.MOUSE.LEFT&&this.pickHelper.doubleClick(e)}processMouseMove(){this.pickObjects=[]}processMouseWheel(){this.pickObjects=[]}processKeyDown(e){if(super.processKeyDown(e),e.preventDefault(),this.state=this.StateType.NONE,!(r.EditorConfig.NoKey||this.pickObjects.length<=0)){var t=r.Keys;switch(e.keyCode){case t.TAB:e.shiftKey?(--this.tabIndex,this.tabIndex<0?(this.tabIndex=this.pickObjects.length+this.tabIndex,this.pickHelper.handleTabs(this.pickObjects[this.tabIndex])):this.pickHelper.handleTabs(this.pickObjects[this.tabIndex])):(++this.tabIndex,this.tabIndex>=this.pickObjects.length&&(this.tabIndex=0),this.pickHelper.handleTabs(this.pickObjects[this.tabIndex]))}this.cameraControl.update(!0)}}processKeyUp(e){switch(e.keyCode){case r.Keys.ESC:this.cameraControl.viewer.clearSelection(),this.pickHelper.lastPickedUserId=void 0,this.cameraControl.updateView(!0)}}processHover(e){this.pickHelper.handleMouseHover(e),this.pickHelper.handleMouseMovePick(e)}processTouchstart(e){if(1!==e.touches.length)return;this.intersectOfMouseDown=null,e.preventDefault();const t=e.touches[0].clientX,i=e.touches[0].clientY;Math.abs(this.oldMouseX-t)<=1&&Math.abs(this.oldMouseY-i)<=1&&(this.intersectOfMouseDown=this.cameraControl.getLastIntersect()),this.oldMouseX=t,this.oldMouseY=i;const r=new Date;this._touchStartTime=r.getTime()}processTouchend(e){if(0!==e.touches.length)return;if((new Date).getTime()-this._touchStartTime>400)return;e.preventDefault();const t=e.changedTouches[0].clientX,i=e.changedTouches[0].clientY;if(Math.abs(this.oldMouseX-t)<=1&&Math.abs(this.oldMouseY-i)<=1){let e={clientX:t,clientY:i,button:THREE.MOUSE.LEFT};return this.pickHelper.click(e,this.intersectOfMouseDown),this.cameraControl.update(!0),this.intersectOfMouseDown=null,!0}return this.intersectOfMouseDown=null,this.oldMouseX=t,this.oldMouseY=i,!1}}r.PickEditor=e})(),function(){class e extends r.EditTool{constructor(e){super(r.EditToolMode.VOLUME_MEASURE),this._viewer=e,this._externalObjectConverter=new r.ExternalObjectConverter(this._viewer),this._measuredObject={},this._lastMousePos=new THREE.Vector2,this._pickHelper=new r.PickHelper(e.cameraControl),this._pickPoint=new THREE.Vector3,this._touchMoved=!1}destroy(){super.destroy(),this._measuredObject=null,this._externalObjectConverter=null,this._viewer=null,this._pickHelper=null}processMouseDown(e){return!!r.GlobalData.IsMobile||(e.button===THREE.MOUSE.LEFT?(this._lastMousePos.x=e.clientX,this._lastMousePos.y=e.clientY,!1):super.processMouseDown(e))}processMouseUp(e){if(r.GlobalData.IsMobile)return!0;const i=new THREE.Vector2(e.clientX,e.clientY).distanceTo(this._lastMousePos);if(e.button===THREE.MOUSE.LEFT){if(i<=2){let i={x:e.clientX,y:e.clientY},n=t.call(this,i);r.Utils.isDefined(n)&&this.dispatchEvent(n)}return!0}}processTouchstart(e){return this._touchMoved=!1,this._lastMousePos.x=e.touches[0].clientX,this._lastMousePos.y=e.touches[0].clientY,super.processTouchstart(e)}processTouchmove(e){return this._touchMoved=!0,super.processTouchmove(e)}processTouchend(e){if(!this._touchMoved){let e=t.call(this,this.s);r.Utils.isDefined(e)&&this.dispatchEvent(e)}return super.processTouchend(e)}onExit(e){this.destroy()}dispatchEvent(e){this._viewer.modelManager.dispatchEvent(e)}}function t(e){var t=this._pickHelper.pickToPoint(e,5);if(!r.Utils.isDefined(t))return null;if(!t.userId||!t.modelId)return null;let i=0;const n=`volumeMeasureObject_${t.userId}`;let a;if(void 0!==this._measuredObject[n])i=this._measuredObject[n].volume,a="m"===this._measuredObject[n].unit?"m³":"mm³";else{const e=this._externalObjectConverter.convertToExternalObject(n,t.userId,!1),s=r.GeomUtil.geometryVolume(e,this._viewer);i=s.volume,this._measuredObject[n]=s,a="m"===s.unit?"m³":"mm³"}return{volume:i,position:t.pickPoint,unit:a,objectId:t.userId,modelId:t.modelId,type:r.EVENTS.ON_VOLUME_MEASURE_END}}r.VolumeMeasureTool=e}(),function(){class e extends r.NormalEditor{constructor(e){super(r.EditorMode.ZOOM,e),this.mouseButtons={},this.enable=!0,this._dollyStart=new THREE.Vector2,this._dollyEnd=new THREE.Vector2,this._dollyDelta=new THREE.Vector2,this.zoomSpeed=Math.pow(.95,.2),this.touchZoomSpeed=.24,this._curZoomFactor={}}destroy(){super.destroy(),this.mouseButtons=null,this._dollyStart=null,this._dollyEnd=null,this._dollyDelta=null,this._curZoomFactor=null}processMouseWheel(e,t){if(!r.EditorConfig.NoZoom&&this.enable){e.preventDefault(),e.stopPropagation();var i=0;e.wheelDelta?i=e.wheelDelta:e.detail&&(i=40*-e.detail),Math.abs(i)>720&&(i=i>0?720:-720),i*=this.wheelZoomFactor,((i=r.EditorConfig.ReverseWheelDirection?-i:i)>0&&this._curZoomFactor.scale<0||i<0&&this._curZoomFactor.scale>0)&&this.cameraControl.setTrackPointChanging(!0),this._curZoomFactor.scale=i,this._curZoomFactor.clientX=e.clientX,this._curZoomFactor.clientY=e.clientY,t.addEditor(this,"processMouseWheelOnRender",e)}}processMouseWheelOnRender(e){this.cameraControl.isEnableDamping()||this._zoom(this._curZoomFactor.scale)}processMouseDown(e,t){e.preventDefault(),e.button!==this.mouseButtons.ZOOM||r.EditorConfig.NoZoom||t.addEditor(this,"processMouseDownOnRender",e)}processMouseDownOnRender(e){this.state=this.StateType.NONE,this.state=this.StateType.DOLLY,this._dollyStart.set(e.clientX,e.clientY),this._dollyEnd.set(e.clientX,e.clientY),this.dispatchEvent({type:r.EVENTS.ON_EDITOR_BEGIN,name:r.EditorMode.ZOOM,editor:this.name,startPt:this._dollyStart})}processMouseMove(e,t){this.state===this.StateType.DOLLY&&t.addEditor(this,"processMouseMoveOnRender",e)}processMouseMoveOnRender(e){const t=this.cameraControl;if(e.preventDefault(),t.userInputWorking||(t.userInputWorking=!0),this._dollyEnd.set(e.clientX,e.clientY),this.cameraControl.isEnableDamping())return;if(this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),Math.abs(this._dollyDelta.y)<r.Math.EPSILON2)return;let i=this._dollyDelta.y>0?this.zoomSpeed:1/this.zoomSpeed;this._zoom(i-1),this._dollyStart.copy(this._dollyEnd),this.dispatchEvent({type:r.EVENTS.ON_EDITOR_ZOOM,editor:this.name})}processMouseUp(e,t){this.state===this.StateType.DOLLY&&t.addEditor(this,"processMouseMoveUpRender",e)}processMouseMoveUpRender(e){const t=this.cameraControl;return this.state=this.StateType.NONE,t.onUserInputFinished(),this.dispatchEvent({type:r.EVENTS.ON_EDITOR_END,name:r.EditorMode.ZOOM,editor:this.name}),!0}processTouchstart(e,t){2===e.touches.length&&(r.EditorConfig.NoZoom||2===e.touches.length&&t.addEditor(this,"processZoomTouchstartOnRender",e))}processZoomTouchstartOnRender(e){const t=e.touches[0].clientX-e.touches[1].clientX,i=e.touches[0].clientY-e.touches[1].clientY;this._dollyStart.set(0,Math.sqrt(t*t+i*i)),this.state=this.StateType.DOLLY}processTouchmove(e,t){this.state===this.StateType.DOLLY&&(e.preventDefault(),2===e.touches.length&&t.addEditor(this,"processZoomTouchmoveOnRender",e))}processZoomTouchmoveOnRender(e){const t=this.cameraControl,i=e.touches[0].clientX-e.touches[1].clientX,n=e.touches[0].clientY-e.touches[1].clientY,a=Math.sqrt(i*i+n*n);if(this._dollyEnd.set(0,a),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),Math.abs(this._dollyDelta.y)>3){const i=(.01*this.touchZoomSpeed+1e-4)*this._dollyDelta.y;this._dollyStart.copy(this._dollyEnd);const n=.5*(e.touches[0].clientX+e.touches[1].clientX),a=.5*(e.touches[0].clientY+e.touches[1].clientY);t.touchDolly(n,a,i),this.state=this.StateType.DOLLY,this.modelManager.dispatchEvent({type:r.EVENTS.ON_EDITOR_ZOOM})}t.touchUpdate()}processTouchend(e,t){if(this.state!==this.StateType.DOLLY)return!1;t.addEditor(this,"processZoomTouchendOnRender",e)}processZoomTouchendOnRender(e){this.state=this.StateType.NONE,this.cameraControl.viewer.editorManager.cameraChange=!1,this.cameraControl.touchUpdate()}dynamicZoom(){let e=!1;Math.abs(this._curZoomFactor.scale)>r.Math.EPSILON2?e=!0:this._curZoomFactor.scale=0,e&&(this._curZoomFactor.scale*=1-this.cameraControl.dynamicDampingFactor(),this._zoom(this._curZoomFactor.scale))}resetDynamicZoom(){this._curZoomFactor.scale=0}resetMobileParamsByBox(e){if(!r.GlobalData.IsMobile)return;let t=new THREE.Vector3;e.getSize(t);let i=this.cameraControl.viewer.modelManager.isMeterUnit()?100:1e5;(t.x>i||t.y>i)&&(this.touchZoomSpeed=.3)}setZoomSpeed(e){if(!r.Utils.isDefined(e))return void console.warn("The parameter speed is undefined.");if("number"!=typeof e)return void console.warn("The parameter speed is not a number.");let t=r.Math.clamp(e,0,1);return r.GlobalData.IsMobile?(this.touchZoomSpeed=t,t):(this.wheelZoomFactor=t/1e3,t)}getZoomSpeed(){return r.GlobalData.IsMobile?this.touchZoomSpeed:1e3*this.wheelZoomFactor}_zoom(e){this.cameraControl.zoom(e,this._curZoomFactor.clientX,this._curZoomFactor.clientY),this.modelManager.dispatchEvent({type:r.EVENTS.ON_EDITOR_ZOOM})}}r.ZoomEditor=e}(),function(){class e extends r.NormalEditor{constructor(e){super(r.EditorMode.PAN,e),this.mouseButtons={PAN2:THREE.MOUSE.MIDDLE,PAN:THREE.MOUSE.LEFT},this._panStart=new THREE.Vector3,this._panEnd=new THREE.Vector3,this._panDelta=new THREE.Vector3,this._panOffset=new THREE.Vector3,this._lastDampingOffset=new THREE.Vector3,this._curDampingOffset=new THREE.Vector3,this._worldDimension=new THREE.Vector3,this.enable=!0,this._moving=!1}destroy(){super.destroy(),this.mouseButtons=null,this._panStart=null,this._panEnd=null,this._panDelta=null,this._panOffset=null,this._lastDampingOffset=null,this._curDampingOffset=null,this._worldDimension=null}processMouseDown(e,t){e.button!==this.mouseButtons.PAN&&e.button!==this.mouseButtons.PAN2||r.EditorConfig.NoPan||!this.enable||t.addEditor(this,"processMouseDownOnRender",e)}processMouseDownOnRender(e){const t=this.cameraControl;t.userInputWorking||(t.userInputWorking=!0),this.oldMouseX=e.clientX,this.oldMouseY=e.clientY,this._panStart.set(e.clientX,e.clientY),this._panEnd.set(e.clientX,e.clientY),this._panOffset.set(0,0,0),this.resetDynamicPan();let i=this._panStart;t.userInputHelper.getWorldDimension(e.clientX,e.clientY,this._worldDimension);let n=r.EditorMode.PAN;this.dispatchEvent({type:r.EVENTS.ON_EDITOR_BEGIN,name:n,editor:this.name,startPt:i}),this.state=this.StateType.PAN}processMouseUp(e,t){if(this.state!==this.StateType.PAN)return!1;t.addEditor(this,"processMouseMoveUpOnRender",e)}processMouseMoveUpOnRender(e){return this.cameraControl.endOperation(),this.cameraControl.onUserInputFinished(),this.dispatchEvent({type:r.EVENTS.ON_EDITOR_END,name:r.EditorMode.PAN,editor:this.name}),this.state=this.StateType.NONE,!0}processMouseMove(e,t){if(this.state!==this.StateType.PAN)return!1;t.addEditor(this,"processMouseMoveOnRender",e)}processMouseMoveOnRender(e){this._panEnd.set(e.clientX,e.clientY),this.cameraControl.isEnableDamping()||(this._panDelta.subVectors(this._panEnd,this._panStart),Math.abs(this._panDelta.x)<r.Math.EPSILON2&&Math.abs(this._panDelta.y)<r.Math.EPSILON2||(this.cameraControl.userInputHelper.getPanOffset(this._panStart,this._panEnd,this._worldDimension,this._panOffset),this.cameraControl.userInputHelper.adjustCameraForPan(this._panOffset),this._panStart.copy(this._panEnd),this.dispatchEvent({type:r.EVENTS.ON_EDITOR_PANING,editor:this.name})))}processKeyDown(e,t){r.EditorConfig.NoKey||r.EditorConfig.NoPan||t.addEditor(this,"processKeyDownOnRender",e)}processKeyDownOnRender(e){const t=this.cameraControl;this._moving=!0;let i=!1,n=this.movementSpeed*r.EditorConfig.MovementSpeedRate,a=this.keyPanSpeed*r.EditorConfig.MovementSpeedRate;switch(e.keyCode){case r.Keys.ZERO:this.keyPanSpeed=this.defaultKeyPanSpeed,this.movementSpeed=this.defaultMovementSpeed;break;case r.Keys.PLUS:this.keyPanSpeed*=1.1,this.movementSpeed*=1.1;break;case r.Keys.SUB:this.keyPanSpeed*=.9,this.keyPanSpeed=this.keyPanSpeed<this.minKeyPanSpeed?this.minKeyPanSpeed:this.keyPanSpeed,this.movementSpeed*=.9,this.movementSpeed=this.movementSpeed<this.minMovementSpeed?this.minMovementSpeed:this.movementSpeed;break;case r.Keys.Q:t.pan(0,a),i=!0;break;case r.Keys.E:t.pan(0,-a),i=!0;break;case r.Keys.LEFT:case r.Keys.A:t.pan(a,0),i=!0;break;case r.Keys.RIGHT:case r.Keys.D:t.pan(-a,0),i=!0;break;case r.Keys.UP:case r.Keys.W:t.moveStraight(n,!e.shiftKey),i=!0;break;case r.Keys.DOWN:case r.Keys.S:t.moveStraight(-n,!e.shiftKey),i=!0}i&&(this.cameraControl.userInputWorking||(this.cameraControl.userInputWorking=!0))}processKeyUp(e){if(!r.EditorConfig.NoKey&&!r.EditorConfig.NoPan)switch(e.keyCode){case r.Keys.Q:case r.Keys.E:case r.Keys.LEFT:case r.Keys.A:case r.Keys.RIGHT:case r.Keys.D:case r.Keys.UP:case r.Keys.W:case r.Keys.DOWN:case r.Keys.S:this.cameraControl.onUserInputFinished()}}processTouchstart(e,t){this.startPt.set(e.touches[0].clientX,e.touches[0].clientY),this.timeId&&clearTimeout(this.timeId),this.timeId=setTimeout(this.longTap,400),this.selectPad&&this.selectPad.hideOverlay(),2===e.touches.length&&t.addEditor(this,"processPanTouchstartOnRender",e)}processPanTouchstartOnRender(e){if(r.EditorConfig.NoPan)return;let t=.5*(e.touches[0].clientX+e.touches[1].clientX),i=.5*(e.touches[0].clientY+e.touches[1].clientY);this.cameraControl.userInputHelper.getWorldDimension(t,i,this._worldDimension),this._panStart.set(t,i),this.state=this.StateType.PAN}processTouchmove(e,t){if(this.state!==this.StateType.PAN)return!1;this.timeId&&clearTimeout(this.timeId),e.preventDefault(),2===e.touches.length&&t.addEditor(this,"processPanTouchmoveOnRender",e)}processPanTouchmoveOnRender(e){const t=this.cameraControl;let i=.5*(e.touches[0].clientX+e.touches[1].clientX),n=.5*(e.touches[0].clientY+e.touches[1].clientY);if(this._panEnd.set(i,n),this._panDelta.subVectors(this._panEnd,this._panStart),Math.abs(this._panDelta.x)<r.Math.EPSILON1&&Math.abs(this._panDelta.y)<r.Math.EPSILON1)return!1;t.userInputHelper.getPanOffset(this._panStart,this._panEnd,this._worldDimension,this._panOffset),t.userInputHelper.adjustCameraForPan(this._panOffset),this._panStart.copy(this._panEnd),this.state=this.StateType.PAN,this.modelManager.dispatchEvent({type:r.EVENTS.ON_EDITOR_PANING}),t.touchUpdate()}processTouchend(e,t){if(this.state!==this.StateType.PAN)return!1;this.timeId&&clearTimeout(this.timeId),this.longTapFlag&&(this.longTapFlag=!1,e.preventDefault()),t.addEditor(this,"processPanTouchendOnRender",e)}processPanTouchendOnRender(e){this.state=this.StateType.NONE,this.cameraControl.viewer.editorManager.cameraChange=!1,this.cameraControl.touchUpdate()}dynamicPan(){this._panDelta.subVectors(this._panEnd,this._panStart);let e=!1;if((Math.abs(this._panDelta.x)>r.Math.EPSILON2||Math.abs(this._panDelta.y)>r.Math.EPSILON2)&&(e=!0),this._lastDampingOffset.length()>r.Math.EPSILON2&&(e=!0),e){this._lastDampingOffset.add(this._panOffset),this._curDampingOffset.copy(this._lastDampingOffset);const e=this._curDampingOffset.multiplyScalar(this.cameraControl.dynamicDampingFactor());this.cameraControl.userInputHelper.adjustCameraForPan(e),this.cameraControl.userInputHelper.getPanOffset(this._panStart,this._panEnd,this._worldDimension,this._panOffset),this._panStart.copy(this._panEnd),this._lastDampingOffset.multiplyScalar(1-this.cameraControl.dynamicDampingFactor())}}resetDynamicPan(){this._lastDampingOffset.set(0,0,0),this._curDampingOffset.set(0,0,0)}}r.PanEditor=e}(),(()=>{class e extends r.BaseEditor{constructor(e){super(r.EditorMode.FLY,e),this.lookSpeed=.001,this.constrainPitch=!0,this.pitchMin=THREE.Math.degToRad(5)-.5*Math.PI,this.pitchMax=.5*Math.PI-this.pitchMin,this.pitchDeltaTotal=0,this.moveState=r.MoveDirection.NONE,this.rotateStart=new THREE.Vector2,this.rotateEnd=new THREE.Vector2,this.rotateDelta=new THREE.Vector2,this._panStart=new THREE.Vector2,this._panEnd=new THREE.Vector2,this._panDelta=new THREE.Vector2,this._pan=new THREE.Vector3,this._worldDimension=new THREE.Vector2,this.lastMousePoint=new THREE.Vector2,this.isLockHeight=!1,this.lockedHeight=0,this.pickHelper=new r.PickHelper(e),this.intersectOfMouseDown=null}destroy(){super.destroy(),this.rotateStart=null,this.rotateEnd=null,this.rotateDelta=null,this._panStart=null,this._panEnd=null,this._panDelta=null,this._pan=null,this._worldDimension=null,this.lastMousePoint=null,this.intersectOfMouseDown=null,this.pickHelper.destroy(),this.pickHelper=null}processMouseDown(e){e.preventDefault(),e.stopPropagation(),this.lastMousePoint.set(e.clientX,e.clientY);const t=this.cameraControl;if(this.intersectOfMouseDown=null,e.button===this.mouseButtons.ORBIT){if(r.EditorConfig.NoRotate)return;this.rotateStart.set(e.clientX,e.clientY),this.state=this.StateType.ROTATE,this.dispatchEvent({type:r.EVENTS.ON_EDITOR_BEGIN,name:"look",editor:this.name})}else if(e.button===this.mouseButtons.PAN||e.button===this.mouseButtons.PAN2){if(r.EditorConfig.NoPan)return;this._panStart.set(e.clientX,e.clientY),t.userInputHelper.getWorldDimension(e.clientX,e.clientY,this._worldDimension),this.intersectOfMouseDown=t.getLastIntersect(),this.state=this.StateType.PAN,this.isLockHeight&&(this.lockedHeight=e.clientY)}}doPan(e,t){var i=this.cameraControl;this._panEnd.set(e,this.isLockHeight?this.lockedHeight:t),this._panDelta.subVectors(this._panEnd,this._panStart),0===this._panDelta.x&&0===this._panDelta.y||(i.userInputHelper.getPanOffset(this._panStart,this._panEnd,this._worldDimension,this._pan),i.userInputHelper.adjustCameraForPan(this._pan),this._panStart.copy(this._panEnd),i.update(!0))}processMouseMove(e){var t=this.cameraControl;if(e.preventDefault(),this.state===this.StateType.ROTATE){if(this.rotateEnd.set(e.clientX,e.clientY),this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart),this.rotateStart.copy(this.rotateEnd),0!=this.rotateDelta.x||0!=this.rotateDelta.y){var i=this.rotateDelta.x*this.lookSpeed,r=this.rotateDelta.y*this.lookSpeed;t.rotateForFly(i,r,this.pitchMin,this.pitchMax)}}else this.state===this.StateType.PAN&&this.doPan(e.clientX,e.clientY)}processMouseUp(e){if(e.preventDefault(),e.stopPropagation(),e.button!==THREE.MOUSE.LEFT||this.lastMousePoint.x!==e.clientX||this.lastMousePoint.y!==e.clientY){this.intersectOfMouseDown=null;var t=this.cameraControl;switch(this.state){case this.StateType.ROTATE:this.rotateDelta.set(0,0);t.rotateForFly(0,0,this.pitchMin,this.pitchMax),this.dispatchEvent({type:r.EVENTS.ON_EDITOR_END,name:"look",editor:this.name});break;case this.StateType.PAN:this.doPan(e.clientX,e.clientY)}t.endOperation(),this.state=this.StateType.NONE}else this.pickHelper.click(e,this.intersectOfMouseDown)}processHover(e){this.pickHelper.handleMouseHover(e)}processMouseWheel(e){e.preventDefault(),e.stopPropagation();var t=this.cameraControl;if(!r.EditorConfig.NoZoom){var i=e.wheelDelta||e.detail;i=Math.abs(i)>10?i:40*-i,i*=5e-4,r.EditorConfig.ReverseWheelDirection&&(i*=-1);var n=t.getContainerDimensions(),a=n.left+.5*n.width,s=n.top+.5*n.height;t.zoom(i,a,s)}}processKeyDown(e){if(!r.EditorConfig.NoKey&&!e.altKey){var t=r.MoveDirection,i=t.NONE;switch(e.keyCode){case r.Keys.ZERO:this.movementSpeed=this.defaultMovementSpeed;break;case r.Keys.PLUS:this.movementSpeed*=1.1;break;case r.Keys.SUB:this.movementSpeed*=.9,this.movementSpeed<this.minMovementSpeed&&(this.movementSpeed=this.minMovementSpeed);break;case r.Keys.UP:case r.Keys.W:i=t.FORWARD;break;case r.Keys.DOWN:case r.Keys.S:i=t.BACK;break;case r.Keys.LEFT:case r.Keys.A:i=t.LEFT;break;case r.Keys.RIGHT:case r.Keys.D:i=t.RIGHT;break;case r.Keys.Q:i=t.UP;break;case r.Keys.E:i=t.DOWN}i!==t.NONE&&(this.moveState|=i,this.dispatchEvent({type:r.EVENTS.ON_EDITOR_KEYDOWN,event:e,state:i,direction:t,editor:this.name}),this.cameraControl.updateFlyMove(this.moveState,this.movementSpeed*r.EditorConfig.MovementSpeedRate))}}processKeyUp(e){if(!r.EditorConfig.NoKey){var t=r.MoveDirection,i=t.NONE;switch(e.keyCode){case r.Keys.UP:case r.Keys.W:i=t.FORWARD;break;case r.Keys.DOWN:case r.Keys.S:i=t.BACK;break;case r.Keys.LEFT:case r.Keys.A:i=t.LEFT;break;case r.Keys.RIGHT:case r.Keys.D:i=t.RIGHT;break;case r.Keys.Q:i=t.UP;break;case r.Keys.E:i=t.DOWN}i!==t.NONE&&(this.dispatchEvent({type:r.EVENTS.ON_EDITOR_KEYUP,event:e,state:i,direction:t,editor:this.name}),this.moveState&=~i)}}moveTo(e){this.cameraControl.updateFlyMove(e,this.movementSpeed*r.EditorConfig.MovementSpeedRate)}}r.FlyEditor=e})(),(()=>{class e extends r.BaseEditor{constructor(e){super(r.EditorMode.WALK,e),this.mouseButtons={ORBIT:THREE.MOUSE.LEFT,PAN2:THREE.MOUSE.MIDDLE,PAN:THREE.MOUSE.RIGHT},this.pickHelper=new r.PickHelper(e),this.lastMousePoint=new THREE.Vector2,this._reqid=0,this._animateBinded=this._animate.bind(this),this._clock=new THREE.Clock,this.moveState={up:0,down:0,left:0,right:0,forward:0,back:0,pitchUp:0,pitchDown:0,yawLeft:0,yawRight:0,rollLeft:0,rollRight:0},this.startPt=new THREE.Vector2,this.timeId=null,this.rotateSpeed=1,this._rotateStart=new THREE.Vector2,this._rotateEnd=new THREE.Vector2,this._rotateDelta=new THREE.Vector2,this._dollyStart=new THREE.Vector2,this._dollyEnd=new THREE.Vector2,this._dollyDelta=new THREE.Vector2,this._dollyCenter=new THREE.Vector2,this.zoomSpeed=Math.pow(.95,.2),this._panStart=new THREE.Vector2,this._panEnd=new THREE.Vector2,this._panDelta=new THREE.Vector2,this._pan=new THREE.Vector3,this._worldDimension=new THREE.Vector2,r.Utils.isMobileDevice()?this.selectPad=new r.SelectPad(this):this.selectPad=null,this.moveVector=new THREE.Vector3(0,0,0),this.rotationVector=new THREE.Vector3(0,0,0),this.zoomDelta=0,this.rotateStart=new THREE.Vector2,this.rotateEnd=new THREE.Vector2,this.rotateDelta=new THREE.Vector2,this.firstRotate=!0,this.dragLook=!0,this.lockHeightEnabled=!1,this.isLockHeight=!1,this.lockedHeight=0,this.pickEnabled=!0,this.defaultMovementSpeed=750,this.movementSpeed=this.defaultMovementSpeed}destroy(){super.destroy(),this.pickHelper.destroy(),this.pickHelper=null,this.selectPad&&(this.selectPad.destroy(),this.selectPad=null),this.timeId&&(clearTimeout(this.timeId),this.timeId=null),this._clock=null,this._animateBinded=null,this.mouseButtons=null,this.moveState=null,this.startPt=null,this.lastMousePoint=null,this.rotateStart=null,this.rotateEnd=null,this.rotateDelta=null,this._rotateStart=null,this._rotateEnd=null,this._rotateDelta=null,this._dollyStart=null,this._dollyEnd=null,this._dollyDelta=null,this._dollyCenter=null,this._panStart=null,this._panEnd=null,this._panDelta=null,this._pan=null,this._worldDimension=null,this.moveVector=null,this.rotationVector=null,this.rotateStart=null,this.rotateEnd=null,this.rotateDelta=null}_animate(){this._reqid=requestAnimationFrame(this._animateBinded),this.updateWalkMove()}_start(){this._animate()}_stop(){cancelAnimationFrame(this._reqid)}_updateMovement(){this.moveVector.x=-this.moveState.left+this.moveState.right,this.isLockHeight?this.moveVector.y=0:this.moveVector.y=-this.moveState.down+this.moveState.up,this.moveVector.z=-this.moveState.forward+this.moveState.back}_updateRotation(){r.EditorConfig.LockAxisZ?this.rotationVector.x=0:this.rotationVector.x=-this.moveState.pitchDown+this.moveState.pitchUp,this.rotationVector.y=-this.moveState.yawRight+this.moveState.yawLeft,this.rotationVector.z=-this.moveState.rollRight+this.moveState.rollLeft}_doRotate(e){e.x*=r.GlobalData.WalkRotationSpeed,e.y*=r.GlobalData.WalkRotationSpeed;var t=this.cameraControl.getContainerDimensions(),i=t.width/2,n=t.height/2;this.moveState.yawLeft=-e.x/i,this.moveState.pitchDown=e.y/n,this._updateRotation()}processMouseDown(e){if(e.preventDefault(),e.stopPropagation(),this.lastMousePoint.set(e.clientX,e.clientY),this.firstRotate=!1,e.button===this.mouseButtons.ORBIT){if(r.EditorConfig.NoRotate)return;this.rotateStart.set(e.clientX,e.clientY),this.state=this.StateType.ROTATE,this.dispatchEvent({type:r.EVENTS.ON_EDITOR_BEGIN,name:"look",editor:this.name})}}processMouseUp(e){return e.preventDefault(),e.stopPropagation(),this.pickEnabled&&(e.button===THREE.MOUSE.LEFT||e.button===THREE.MOUSE.RIGHT)&&Math.abs(this.lastMousePoint.x-e.clientX)<2&&Math.abs(this.lastMousePoint.y-e.clientY)<2?(this.state=this.StateType.NONE,void this.pickHelper.click(e)):(this.state===this.StateType.ROTATE&&(this.moveState.yawLeft=this.moveState.pitchDown=0,this.dispatchEvent({type:r.EVENTS.ON_EDITOR_END,name:"look",editor:this.name})),this.state=this.StateType.NONE,!0)}processMouseMove(e){e.preventDefault(),this.dragLook&&this.state===this.StateType.ROTATE&&(this.rotateEnd.set(e.clientX,e.clientY),this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart),this.rotateStart.copy(this.rotateEnd),this._doRotate(this.rotateDelta))}processTouchstart(e){this.startPt.set(e.touches[0].clientX,e.touches[0].clientY),this.timeId&&clearTimeout(this.timeId);switch(this.timeId=setTimeout(this.longTap,400),this.selectPad&&this.selectPad.hideOverlay(),e.touches.length){case 1:if(r.EditorConfig.NoRotate)return;this._rotateStart.set(e.touches[0].clientX,e.touches[0].clientY),this.state=this.StateType.ROTATE;break;case 2:if(!r.EditorConfig.NoPan){var t=.5*(e.touches[0].clientX+e.touches[1].clientX),i=.5*(e.touches[0].clientY+e.touches[1].clientY);this._panStart.set(t,i)}break;default:this.state=this.StateType.NONE}}processTouchmove(e){this.timeId&&clearTimeout(this.timeId);var t=this.cameraControl;switch(e.preventDefault(),e.touches.length){case 1:this.dragLook&&this.state===this.StateType.ROTATE&&(this._rotateEnd.set(e.touches[0].clientX,e.touches[0].clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart),this._rotateStart.copy(this._rotateEnd),this._doRotate(this._rotateDelta));break;case 2:if(t.clearTouchRotateState(),!r.EditorConfig.NoPan){var i=.5*(e.touches[0].clientX+e.touches[1].clientX),n=.5*(e.touches[0].clientY+e.touches[1].clientY);if(this._panEnd.set(i,n),this._panDelta.subVectors(this._panEnd,this._panStart),Math.abs(this._panDelta.x)<3&&Math.abs(this._panDelta.y)<3)return;t.userInputHelper.getWorldDimension(i,n,this._worldDimension),t.userInputHelper.getPanOffset(this._panStart,this._panEnd,this._worldDimension,this._pan),t.userInputHelper.adjustCameraForPan(this._pan),this._panStart.copy(this._panEnd),this.state=this.StateType.PAN}}t.touchUpdate()}processTouchend(e){this.timeId&&clearTimeout(this.timeId),this.longTapFlag&&(this.longTapFlag=!1,e.preventDefault());var t=this.cameraControl;switch(e.touches.length){case 0:this.state=this.StateType.NONE,t.touchEndHandler(e);break;case 1:if(r.EditorConfig.NoRotate)return;this._rotateStart.set(e.touches[0].clientX,e.touches[0].clientY),this.state=this.StateType.ROTATE}}processHover(e){e.preventDefault(),this.dragLook||(this.firstRotate&&(this.firstRotate=!1,this.rotateStart.set(e.clientX,e.clientY)),this.rotateEnd.set(e.clientX,e.clientY),this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart),this.rotateStart.copy(this.rotateEnd),this._doRotate(this.rotateDelta))}processKeyDown(e){if(!r.EditorConfig.NoKey&&!e.altKey){var t=r.MoveDirection.NONE,i=r.Keys;switch(e.keyCode){case i.ZERO:this.movementSpeed=this.defaultMovementSpeed;break;case i.PLUS:this.movementSpeed*=1.1;break;case i.SUB:this.movementSpeed*=.9,this.movementSpeed<this.minMovementSpeed&&(this.movementSpeed=this.minMovementSpeed);break;case i.UP:case i.W:t=r.MoveDirection.FORWARD,this.moveState.forward=1;break;case i.DOWN:case i.S:t=r.MoveDirection.BACK,this.moveState.back=1;break;case i.LEFT:case i.A:t=r.MoveDirection.LEFT,this.moveState.left=1;break;case i.RIGHT:case i.D:t=r.MoveDirection.RIGHT,this.moveState.right=1;break;case i.Q:t=r.MoveDirection.UP,this.moveState.up=1;break;case i.E:t=r.MoveDirection.DOWN,this.moveState.down=1;break;case i.TAB:return this.moveVector.set(0,0,0),this.moveState.forward=0,this.moveState.back=0,this.moveState.left=0,this.moveState.right=0,this.moveState.up=0,void(this.moveState.down=0);default:return}this._updateMovement(),this._updateRotation(),t!==r.MoveDirection.NONE&&this.dispatchEvent({type:r.EVENTS.ON_EDITOR_KEYDOWN,event:e,direction:t,editor:this.name})}}processKeyUp(e){if(!r.EditorConfig.NoKey){var t=r.MoveDirection.NONE,i=r.Keys;switch(e.keyCode){case i.UP:case i.W:t=r.MoveDirection.FORWARD,this.moveState.forward=0;break;case i.DOWN:case i.S:t=r.MoveDirection.BACK,this.moveState.back=0;break;case i.LEFT:case i.A:t=r.MoveDirection.LEFT,this.moveState.left=0;break;case i.RIGHT:case i.D:t=r.MoveDirection.RIGHT,this.moveState.right=0;break;case i.Q:t=r.MoveDirection.UP,this.moveState.up=0;break;case i.E:t=r.MoveDirection.DOWN,this.moveState.down=0;break;default:return}this._updateMovement(),this._updateRotation(),t!==r.MoveDirection.NONE&&this.dispatchEvent({type:r.EVENTS.ON_EDITOR_KEYUP,event:e,direction:t,editor:this.name})}}updateWalkMove(){var e=this._clock.getDelta(),t=this.cameraControl,i=t.camera.position.y;if(0===this.moveVector.x&&0===this.moveVector.y&&0===this.moveVector.z&&0===this.rotationVector.x&&0===this.rotationVector.y&&0===this.rotationVector.z&&0===this.zoomDelta&&0===t.gravity)return;var n=this.movementSpeed*r.EditorConfig.WalkSpeedRate*e;if(1==r.GlobalData.WalkingWithGravity&&(this.moveVector.y=0,t.computeManHeight(),t.computeGravity()),t.dirtyCamera(!0),0!==this.zoomDelta){var a=this.zoomDelta*e;t.userInputHelper.adjustCameraForZoom(a),this.zoomDelta=0}t.translateCameraForWalk(this.moveVector,n),this.dragLook?t.rotateCameraForWalk(this.rotationVector,1):t.rotateCameraForWalk(this.rotationVector,2),t.flyOnWorld(!1);let s=t.viewer.modelManager;i!==t.camera.position.y&&s.dispatchEvent({type:r.EVENTS.ON_CAMERA_HEIGHT_CHANGED,cameraPosition:t.camera.position.clone()}),s.dispatchEvent({type:r.EVENTS.ON_EDITOR_WALKING})}onEnter(){var e=this.cameraControl.scene,t=this.cameraControl.getCamera();t.isPerspective||(console.log("Current camera is Orthographic"),t.toPerspective()),e.getBoundingBox().containsPoint(t.position)&&t.position.y!=t.target.y&&function(e){var t=e.target.clone().sub(e.position),i=t.length(),r=t.clone();r.y=0,r.normalize(),r.multiplyScalar(i),e.target.addVectors(e.position,r)}(t),this._start()}onExit(){this._stop(),this.moveVector=new THREE.Vector3(0,0,0),this.moveState={up:0,down:0,left:0,right:0,forward:0,back:0,pitchUp:0,pitchDown:0,yawLeft:0,yawRight:0,rollLeft:0,rollRight:0}}rotateTo(e){this._doRotate(e)}moveTo(e,t,i){if(void 0===i&&(i=!0),void 0===t&&(t=1),i)switch(e){case r.MoveDirection.FORWARD:this.moveState.forward=t;break;case r.MoveDirection.BACK:this.moveState.back=t;break;case r.MoveDirection.LEFT:this.moveState.left=t;break;case r.MoveDirection.RIGHT:this.moveState.right=t;break;case r.MoveDirection.UP:this.moveState.up=t;break;case r.MoveDirection.DOWN:this.moveState.down=t}else switch(e){case r.MoveDirection.FORWARD:this.moveState.forward=0;break;case r.MoveDirection.BACK:this.moveState.back=0;break;case r.MoveDirection.LEFT:this.moveState.left=0;break;case r.MoveDirection.RIGHT:this.moveState.right=0;break;case r.MoveDirection.UP:this.moveState.up=0;break;case r.MoveDirection.DOWN:this.moveState.down=0}this._updateMovement()}setHeightLocked(e){this.lockHeightEnabled&&this.isLockHeight!==e&&(this.isLockHeight=e)}setDragLook(e){this.dragLook!==e&&(this.firstRotate=!0,this.dragLook=e)}}r.WalkEditor=e})(),(()=>{let e=new THREE.Vector3;class t extends r.WalkEditor{constructor(e){super(e),this.isMeterUnit=e.viewer.modelManager.isMeterUnit(),this.object=null,this.unitRate=this.isMeterUnit?.001:1,this.cameraDis=5e3*this.unitRate,this.minCameraDis=3e3*this.unitRate,this.rotatePivot=new THREE.Vector3,this.objectId=null,this.externalObjectManager=null,this.mixer=null,this.actions=[],this.prepared=!1,this.rotating=!1,this.poseEnum={walk:0,run:1,stand:2},this.poseIndex=0,this.walkIndex=3,this.rotateQuaternion=new THREE.Quaternion,this.tmpVec=new THREE.Vector3,this.objectDirection=new THREE.Vector3(0,-1,0),this.zoomWithCollision=!1}destroy(){super.destroy(),this.object=null,this.rotatePivot=null,this.objectId=null,this.externalObjectManager=null,this.mixer=null,this.actions=null}_doRotate(t){let i=this.cameraControl,r=i.camera,n=r.target.clone(),a=r.position.clone();i.processRotate(t,i.viewer.worldToDrawing(this.rotatePivot));var s=i.checkCollisionInCameraAndObject(this.object);if(s){r.position.copy(s);let t=this.object.position;e.set(t.x,t.y,this.object.box.max.z);let n=i.scene.worldToDrawing(e);r.target.set(n.x,n.y,n.z)}let o=i.viewer.drawingToWorld(r.position);this.object.box.containsPoint(o)&&(r.target.copy(n),r.position.copy(a)),this.updateRotateForObject(),i.updateCamera(),this.rotating=!0}processMouseUp(e){return e.preventDefault(),e.stopPropagation(),this.rotating=!1,this.pickEnabled&&(e.button===THREE.MOUSE.LEFT||e.button===THREE.MOUSE.RIGHT)&&Math.abs(this.lastMousePoint.x-e.clientX)<2&&Math.abs(this.lastMousePoint.y-e.clientY)<2?(this.state=this.StateType.NONE,void this.pickHelper.click(e)):(this.state===this.StateType.ROTATE&&(this.moveState.yawLeft=this.moveState.pitchDown=0),this.state=this.StateType.NONE,!0)}processMouseWheel(t){var i=this.cameraControl;if(t.preventDefault(),t.stopPropagation(),!r.EditorConfig.NoZoom){var n=t.wheelDelta||t.detail;if(n=Math.abs(n)>10?n:40*-n,n*=this.wheelZoomFactor,r.EditorConfig.ReverseWheelDirection&&(n*=-1),!r.GlobalData.ConstraintZoom||i.cameraWithinMaximumRange())if(this.prepared){this.zoomDelta*n<0&&(this.zoomWithCollision=!1);let t=this.object.position;if(e.set(t.x,t.y,this.object.box.max.z),!this.zoomWithCollision&&(n<0||n>0&&i.camera.getDistanceByPos(e,i.scene.getMatrixGlobal())>this.minCameraDis)){let t=i.camera,r=t.position.clone(),a=t.target.clone();i.zoomWithCenter(n,e),i.checkCollisionInCameraAndObject(this.object)&&(t.position.set(r.x,r.y,r.z),t.target.set(a.x,a.y,a.z),this.zoomWithCollision=!0)}}else i.zoom(n,t.clientX,t.clientY);else i.resetCameraToMaximumRange();this.zoomDelta=n,i.viewer.modelManager.dispatchEvent({type:r.EVENTS.ON_EDITOR_ZOOM})}}updateWalkMove(){if(!this.prepared)return;var e=this._clock.getDelta();this.mixer.update(e),this.object.updateMatrixWorld();var t=this.cameraControl,i=t.camera.position.y;if(0===this.moveVector.x&&0===this.moveVector.y&&0===this.moveVector.z&&!this.rotating&&0===t.gravity)return this.changePose(this.poseEnum.stand),void t.flyOnWorld(!1);this.object.visible&&this.changePose(this.walkIndex),this.zoomWithCollision=!1;var n=this.movementSpeed*r.EditorConfig.WalkSpeedRate*e;const a=this.object.visible;this.object.visible=!1,1==r.GlobalData.WalkingWithGravity&&(this.moveVector.y=0,t.computeManHeight(this.object),t.computeGravity(this.object)),t.dirtyCamera(!0),t.translateCameraForThirdpersonWalk(this.moveVector,n,this.object,this.cameraDis),this.object.visible=a;var s=this.object.position;this.rotatePivot.set(s.x,s.y,s.z),this.externalObjectManager.setTransform(this.objectId,void 0,void 0,this.rotateQuaternion),t.flyOnWorld(!1);let o=t.viewer.modelManager;i!==t.camera.position.y&&o.dispatchEvent({type:r.EVENTS.ON_CAMERA_HEIGHT_CHANGED,cameraPosition:t.camera.position.clone()}),o.dispatchEvent({type:r.EVENTS.ON_EDITOR_WALKING})}updateRotateForObject(e,t){var i=this.cameraControl;this.tmpVec.subVectors(t||i.camera.target,e||i.camera.position);var r=i.viewer.drawingToWorld(this.tmpVec);r.z=0,r.normalize(),this.rotateQuaternion.setFromUnitVectors(this.objectDirection,r)}setThirdPerson(t,i,r,n,a){this.object=t,this.object.visible=!1,this.object.traverse((function(e){e.frustumCulled=!1}));let s=new THREE.Vector3;this.object.originBox.getSize(s),this.object.originBox.max.z-=.45*s.z,this.object.originBox.min.z-=.5*s.z,this.object.originBox.min.y-=.3*(s.x-s.y),this.objectId=i,this.externalObjectManager=r,this.mixer=new THREE.AnimationMixer(this.object);var o=THREE.AnimationUtils.subclip(this.object.animations[0],"walk",0,30,30),l=THREE.AnimationUtils.subclip(this.object.animations[0],"run",141,200,30),d=THREE.AnimationUtils.subclip(this.object.animations[0],"stand",65,66,30);this.actions=[],this.actions[this.poseEnum.walk]=this.mixer.clipAction(o),this.actions[this.poseEnum.run]=this.mixer.clipAction(l),this.actions[this.poseEnum.stand]=this.mixer.clipAction(d),this.actions[this.poseEnum.stand].play(),this.prepare(n,a);var h=new THREE.Vector3(0,.5*t.box.getSize(e).y,0);this.distanceTol=Math.abs(this.cameraControl.scene.worldToDrawing(h).z)}_initializeObject(){var e=this.cameraControl,t=this.object;t.visible=!0,t.disPickable=!0,this.changePose(this.poseEnum.stand),this.object.updateMatrixWorld(),e.flyOnWorld(!1)}prepare(e,t){var i=this;this.object.visible=!1,this._initializeCamera(t,(function(){i.walkIndex=e?i.poseEnum.run:i.poseEnum.walk,i._initializeObject(),i.prepared=!0,i.oldHitDetection=r.GlobalData.EnableHitDetection,i.oldGravity=r.GlobalData.WalkingWithGravity,r.GlobalData.EnableHitDetection=!0,r.GlobalData.WalkingWithGravity=!0,i.oldCollisionDis=i.cameraControl.collisionManager.getDistance(),i.cameraControl.collisionManager.setDistance((e?8:1)+i.distanceTol),i.oldMinPitch=i.cameraControl.minPitch,i.oldMaxPitch=i.cameraControl.maxPitch,i.cameraControl.minPitch=-Math.PI/3,i.cameraControl.maxPitch=Math.PI/3}))}onExit(){super.onExit(),this.prepared=!1,this.object.visible=!1,r.GlobalData.EnableHitDetection=this.oldHitDetection,r.GlobalData.WalkingWithGravity=this.oldGravity,this.cameraControl.collisionManager.setDistance(this.oldCollisionDis),this.cameraControl.minPitch=this.oldMinPitch,this.cameraControl.maxPitch=this.oldMaxPitch,this.cameraControl.flyOnWorld(!1)}changePose(e){if(this.poseIndex!=e){var t=this.actions[this.poseIndex],i=this.actions[e],n=1*this.unitRate/r.EditorConfig.WalkSpeedRate;t.fadeOut(n),i.reset(),i.setEffectiveTimeScale(1),i.setEffectiveWeight(1),i.fadeIn(n),i.play(),this.poseIndex=e}}_getCameraPositionByPos(e,t){let i=e.clone();const r=this.cameraControl.scene.getMatrixGlobal();let n=new THREE.Matrix4;n.copy(r).invert(),i.applyMatrix4(n);var a=i.distanceTo(t),s=this.cameraDis/a,o=new THREE.Vector3;return o.subVectors(i,t),o.multiplyScalar(s),o.addVectors(t,o),o.applyMatrix4(r),o}_initializeCamera(e,t){e&&null!=e.x&&null!=e.y&&null!=e.z?this._initializeCameraWithPosition(e,t):this._initializeCameraWithoutPosition(t)}_initializeCameraWithPosition(e,t){var i=this.cameraControl.camera,r=this.cameraControl.viewer,n=i.position,a=1e3*this.unitRate;this.externalObjectManager.setTransform(this.objectId,void 0,new THREE.Vector3(a,a,a));let s=new THREE.Vector3;this.object.box.getSize(s);let o=new THREE.Vector3(0,0,.5*s.z);if(o.addVectors(o,e),o.equals(this.object.position))return void(t&&t());let l=new THREE.Vector3(0,0,s.z);l.addVectors(l,e);let d=this._getCameraPositionByPos(n,l);var h=r.worldToDrawing(l);this.updateRotateForObject(d,h),this.externalObjectManager.setTransform(this.objectId,o,void 0,this.rotateQuaternion),this.rotatePivot.set(o.x,o.y,o.z);var c={position:i.position.clone(),target:i.target.clone(),up:i.realUp.clone()||i.up.clone(),zoom:i.zoom},u={position:d,target:h,up:new THREE.Vector3(0,1,0),zoom:i.zoom};r.animator.active(c,u,r,(function(e){r.cameraControl.update(!0,!0)}),(function(){t&&t()}))}_initializeCameraWithoutPosition(t){if(this.prepared)t&&t();else{var i=this.cameraControl.camera,r=this.cameraControl.viewer,n=i.position,a=this.cameraControl.scene.getBoundingBox(),s=(this.cameraControl.scene.getBoundingBoxWorld(),new THREE.Vector3(n.x,a.max.y,n.z)),o=function(e,t){var i=e.x<t.min.x?0:1,r=e.x<t.max.x?0:2,n=e.z<t.min.z?0:4,a=e.z<t.max.z?0:8,s=t.max.y,o=e;switch(i|r|n|a){case 0:o=new THREE.Vector3(t.min.x,s,t.min.z);break;case 1:o=new THREE.Vector3(e.x,s,t.min.z);break;case 3:o=new THREE.Vector3(t.max.x,s,t.min.z);break;case 4:o=new THREE.Vector3(t.min.x,s,e.z);break;case 7:o=new THREE.Vector3(t.max.x,s,e.z);break;case 12:o=new THREE.Vector3(t.min.x,s,t.max.z);break;case 13:o=new THREE.Vector3(e.x,s,t.max.z);break;case 15:o=new THREE.Vector3(t.max.x,s,t.max.z)}return o}(s,a),l=o.equals(s)?i.target.clone():a.getCenter(e);l.y=o.y;var d=this.cameraControl.scene.getMatrixGlobal(),h=i.getPositionByDis(this.cameraDis,d,o,l);h.z=r.drawingToWorld(o).z,this.updateRotateForObject(o,l);var c=1e3*this.unitRate;this.externalObjectManager.setTransform(this.objectId,h,new THREE.Vector3(c,c,c),this.rotateQuaternion),this.cameraControl.computeManHeight(this.object),this.cameraControl.computeGravity(this.object),o.y-=this.cameraControl.gravity*r.getScene().getGlobalScaleFactor(),l.y=o.y,this.cameraControl.gravity=0;var u=i.getPositionByDis(this.cameraDis,d,o,l);this.externalObjectManager.setTransform(this.objectId,u),this.rotatePivot.set(u.x,u.y,u.z);var p={position:i.position.clone(),target:i.target.clone(),up:i.realUp.clone()||i.up.clone(),zoom:i.zoom},m={position:o,target:l,up:new THREE.Vector3(0,1,0),zoom:i.zoom};r.animator.active(p,m,r,(function(e){r.cameraControl.update(!0,!0)}),(function(){t&&t()}))}}getObjectPosition(){if(this.object){let e=this.object.position,t=new THREE.Vector3;return this.object.box.getSize(t),{x:e.x,y:e.y,z:e.z-.5*t.z}}return null}}r.ThirdPersonWalkEditor=t})(),r.EditorManager=function(){this.editor=null,this.editors={},this.tools=[],this.domElement=null,this.enabled=!0,this.isUpdateRenderList=!0;var e=!1;this.userInputEditor=null;var t=this;function i(i){if(!t.enabled)return void(t.cameraChange=!1);const a=t.tools;for(var s=a.length-1;s>=0;s--)if(a[s].onEvent(i)){switch(i.type){case"mouseup":t.userInputEditor.processMouseUp(i),e=!1}return}switch(i.type){case"touchmove":!function(e){t.editor.isUserInputEditor()||t.editor.processTouchmove(e),t.userInputEditor.processTouchmove(e)}(i);break;case"touchstart":!function(e){t.editor.isUserInputEditor()||t.editor.processTouchstart(e),t.userInputEditor.processTouchstart(e)}(i);break;case"touchend":!function(e){t.editor.isUserInputEditor()||t.editor.processTouchend(e),t.userInputEditor.processTouchend(e)}(i);break;case"keydown":!function(e){t.editor.isUserInputEditor()||t.editor.processKeyDown(e),t.userInputEditor.processKeyDown(e)}(i);break;case"keyup":!function(e){t.editor.isUserInputEditor()||t.editor.processKeyUp(e),t.userInputEditor.processKeyUp(e)}(i);break;case"mousewheel":case"DOMMouseScroll":!function(e){t.cameraChange=!0,t.editor.isUserInputEditor()||t.editor.processMouseWheel(e),t.userInputEditor.processMouseWheel(e)}(i);break;case"mousedown":!function(i){n(),e=!0,t.isUpdateRenderList=!1,t.editor.isUserInputEditor()||t.editor.processMouseDown(i),t.userInputEditor.processMouseDown(i)}(i);break;case"mousemove":!function(i){t.editor.name==r.EditorMode.THIRDPERSONWALK&&n(),e?(t.isUpdateRenderList=!1,t.cameraChange=!0,t.editor.isUserInputEditor()||t.editor.processMouseMove(i),t.userInputEditor.processMouseMove(i)):t.editor.processHover(i)}(i);break;case"mouseup":!function(i){t.isUpdateRenderList=!0,e&&(t.editor.isUserInputEditor()||t.editor.processMouseUp(i),t.userInputEditor.processMouseUp(i),e=!1)}(i);break;case"dblclick":t.editor.processMouseDoubleClick(i)}}function n(){if(t.domElement){var e=t.domElement.querySelector("#cloud-main-canvas");e&&e.focus&&e.focus()}}function a(e){e.preventDefault()}this.registerDomEventListeners=function(e){this.domElement=e;let t=()=>{e.addEventListener("touchstart",i,!1),e.addEventListener("touchend",i,!1),e.addEventListener("touchmove",i,!1)},s=()=>{e.addEventListener("contextmenu",a,!1),e.addEventListener("mousedown",i,!1),e.addEventListener("mousewheel",i,!1),e.addEventListener("DOMMouseScroll",i,!1),e.addEventListener("dblclick",i,!1),window.addEventListener("mousemove",i,!1),window.addEventListener("mouseup",i,!1),e.addEventListener("keydown",i,!1),e.addEventListener("keyup",i,!1)};"windows"===r.Utils.getOS()?(t(),s()):r.GlobalData.IsMobile?t():s(),n()},this.unregisterDomEventListeners=function(e){let t=()=>{e.removeEventListener("touchstart",i,!1),e.removeEventListener("touchend",i,!1),e.removeEventListener("touchmove",i,!1)},n=()=>{e.removeEventListener("contextmenu",a,!1),e.removeEventListener("mousedown",i,!1),e.removeEventListener("mousewheel",i,!1),e.removeEventListener("DOMMouseScroll",i,!1),e.removeEventListener("dblclick",i,!1),window.removeEventListener("mousemove",i,!1),window.removeEventListener("mouseup",i,!1),e.removeEventListener("keydown",i,!1),e.removeEventListener("keyup",i,!1)};"windows"===r.Utils.getOS()?(t(),n()):r.GlobalData.IsMobile?t():n()}},r.EditorManager.prototype={constructor:r.EditorManager,destroy:function(){for(var e in this.editors){this.editors[e].destroy()}this.editors=null,this.editor=null;for(var t=0,i=this.tools.length;t<i;t++)this.tools[t].destroy();this.tools=null,this.unregisterDomEventListeners(this.domElement),this.domElement=null},getCurrentEditorName:function(){return this.editor?this.editor.name:""},_getEditorByName:function(e,t){let i=this.editors[t];const n=r.EditorMode;this.viewer=e;const a=e.cameraControl;switch(t){case n.ORBIT:this.userInputEditor.setOrbitEditorMode(),i=this.userInputEditor.orbitEditor;break;case n.PAN:this.userInputEditor.setPanEditorMode(),i=this.userInputEditor.panEditor;break;case n.ZOOM:this.userInputEditor.setZoomEditorMode(),i=this.userInputEditor.zoomEditor;break;case n.PICK:this.userInputEditor.setDefaultEditorMode(),i=r.Utils.isDefined(i)?i:new r.PickEditor(a);break;case n.FLY:this.userInputEditor.enable=!1,i=r.Utils.isDefined(i)?i:new r.FlyEditor(a);break;case n.WALK:this.userInputEditor.enable=!1,i=r.Utils.isDefined(i)?i:new r.WalkEditor(a);break;case n.THIRDPERSONWALK:this.userInputEditor.enable=!1,i=r.Utils.isDefined(i)?i:new r.ThirdPersonWalkEditor(a);break;default:i=null,console.error("invalid editor name")}return i&&(i.name=t,this.editors[t]=i),i},getCurrentEditor:function(){return this.editor},getUserInputEditor(){return this.userInputEditor},setupUserInputEditor(e){this.userInputEditor=new r.UserInputEditor(e)},setEditorMode:function(e,t){var i=this._getEditorByName(e,t);i&&this.editor!==i&&(null!==this.editor&&(this.editor.dispatchEvent({type:r.EVENTS.ON_EDITOR_EXIST,name:this.editor.getName()}),this.editor.onExit()),this.editor=i,this.editor.onEnter(),this.editor.dispatchEvent({type:r.EVENTS.ON_EDITOR_ENTER,name:this.editor.getName()}))},getToolByName:function(e){for(var t=this.tools.length,i=0;i<t;++i)if(this.tools[i].name==e)return this.tools[i]},enableTool:function(e,t){for(var i=r.EditToolMode,n=this.tools,a=0,s=n.length;a<s;a++)if(n[a].name==t)return;var o=null;switch(t){case i.PICK_BY_RECT:o=new r.RectPickTool(e);break;case i.ZOOM_BY_RECT:o=new r.RectZoomTool(e);break;case i.CLIP_BY_BOX:o=new r.ClipPlanesTool(e);break;case i.CLIP_FILL:o=new r.FillClipPlaneTool(e);break;case i.PICK_BY_MEASURE:o=new r.MeasureTool(e);break;case i.VIEW_SHED_ANALYSIS:o=new r.ViewshedTool(e);break;case i.VOLUME_MEASURE:o=new r.VolumeMeasureTool(e)}o&&n.push(o)},disableTool:function(e){for(var t=this.tools,i=0,r=t.length;i<r;i++)if(t[i].name==e){t[i].onExit(),t.splice(i,1);break}},setInteractiveState:function(e){this.enabled=e},update:function(){this.userInputEditor.update()},onRender:function(){this.userInputEditor.onRender()}},r.SelectPad=class{constructor(e){this.editor=e,this.cameraControl=e.cameraControl,this.dim=this.cameraControl.getContainerDimensions(),this.pad=null,this.padSize=96,this.startPt=new THREE.Vector2,this.position=new THREE.Vector2,this.callback=null,this.intersect=null,this.init(),this.padInitBind=this.padInit.bind(this),this.padOnTouchStartBind=this.onTouchStart.bind(this),this.padOnTouchEndBind=this.onTouchEnd.bind(this),this.padOnTouchMoveBind=this.onTouchMove.bind(this)}destroy(){this.editor=null,this.cameraControl=null,this.dim=null,this.pad=null,this.startPt=null,this.position=null,this.callback=null,this.intersect=null}init(){window.addEventListener("resize",this.padInitBind,!1),this.pad=document.createElement("div"),this.padInit(),this.cameraControl.domElement.appendChild(this.pad),this.addEventListener()}addEventListener(){this.pad.addEventListener("touchstart",this.padOnTouchStartBind,!1),this.pad.addEventListener("touchmove",this.padOnTouchMoveBind,!1),this.pad.addEventListener("touchend",this.padOnTouchEndBind,!1)}padInit(){null!=this.pad&&(this.pad.style.backgroundImage="url(images/selectPad.png)",this.pad.style.backgroundSize="100%",this.pad.style.position="absolute",this.pad.style.width=this.padSize.toString()+"px",this.pad.style.height=this.padSize.toString()+"px",this.pad.style.zIndex="10",this.pad.style.display="none")}showOverlay(e){this.position=e,this.pad.style.left=this.position.x.toString()+"px",this.pad.style.top=(this.position.y-this.dim.top).toString()+"px",this.pad.style.display=""}hideOverlay(){this.pad.style.display="none"}pick(){var e=this.position.x,t=this.position.y,i=this.cameraControl,r=(this.editor.pickHelper,i.viewer.modelManager.sceneState),n=this,a=new THREE.Vector2(e,t),s=i.getIntersectContext(a);i.intersector.pick(s,(function(e){if(r.clearSelection(),!e)return i.updateView(!0),void(n.intersect=null);var t=e.userId;i.viewer.getScene().intersectToWorld(e,i.viewer),r.addSelection([t]),n.intersect=e,i.updateView(!0)})),null!=n.intersect&&(n.intersect.cx=e,n.intersect.cy=t)}onTouchStart(e){1===e.touches.length&&(e.stopPropagation(),e.preventDefault(),this.startPt.set(e.touches[0].clientX,e.touches[0].clientY))}onTouchMove(e){if(1===e.touches.length){e.stopPropagation(),e.preventDefault();var t=e.touches[0].clientX-this.startPt.x,i=e.touches[0].clientY-this.startPt.y;this.position.x+=t,this.position.y+=i,this.pad.style.left=this.position.x.toString()+"px",this.pad.style.top=(this.position.y-this.dim.top).toString()+"px",this.startPt.set(e.touches[0].clientX,e.touches[0].clientY),this.pick(e)}}onTouchEnd(e){e.stopPropagation(),null!=this.callback?this.callback(this.intersect):console.log("selectPad click",this.intersect)}},r.UserInputEditor=class{constructor(e){this.viewer=e,this.cameraControl=e.cameraControl,this.panEditor=new r.PanEditor(this.cameraControl),this.orbitEditor=new r.OrbitEditor(this.cameraControl),this.zoomEditor=new r.ZoomEditor(this.cameraControl),this.enable=!0,this.currentMouseMode="right",this.actionTool=new r.ActionTool(this.cameraControl)}setDefaultEditorMode(){this.enable=!0,this.panEditor.enable=!0,this.orbitEditor.enable=!0,this.zoomEditor.enable=!0,this.switchHandMode(this.currentMouseMode)}setPanEditorMode(){this.enable=!0,this.panEditor.enable=!0,this.orbitEditor.enable=!1,this.zoomEditor.enable=!0,this.panEditor.mouseButtons={PAN2:THREE.MOUSE.RIGHT,PAN:THREE.MOUSE.LEFT},this.zoomEditor.mouseButtons={}}setOrbitEditorMode(){this.enable=!0,this.panEditor.enable=!0,this.orbitEditor.enable=!0,this.zoomEditor.enable=!0,this.setDefaultEditorMode()}setZoomEditorMode(){this.enable=!0,this.panEditor.enable=!0,this.orbitEditor.enable=!1,this.zoomEditor.enable=!0,this.panEditor.mouseButtons={PAN2:THREE.MOUSE.MIDDLE,PAN:THREE.MOUSE.RIGHT},this.zoomEditor.mouseButtons={ZOOM:THREE.MOUSE.LEFT}}switchHandMode(e){this.currentMouseMode=e,"left"===e?(this.panEditor.mouseButtons={PAN2:THREE.MOUSE.MIDDLE,PAN:THREE.MOUSE.RIGHT},this.orbitEditor.mouseButtons={ORBIT:THREE.MOUSE.LEFT}):"right"===e&&(this.panEditor.mouseButtons={PAN2:THREE.MOUSE.MIDDLE,PAN:THREE.MOUSE.LEFT},this.orbitEditor.mouseButtons={ORBIT:THREE.MOUSE.RIGHT})}update(){this.cameraControl.isEnableDamping()&&this.enable&&(this.panEditor.dynamicPan(),this.orbitEditor.dynamicRotate(),this.zoomEditor.dynamicZoom())}onRender(){this.actionTool.isProcessingMouse()&&this.actionTool.execute()}processMouseDown(e){this.enable&&(this.actionEditorList=[],this.cameraControl.isEnableDamping()&&this.resetDynamicMoving(),this.panEditor.processMouseDown(e,this.actionTool),this.orbitEditor.processMouseDown(e,this.actionTool),this.zoomEditor.processMouseDown(e,this.actionTool))}processMouseMove(e){this.enable&&(this.panEditor.processMouseMove(e,this.actionTool),this.orbitEditor.processMouseMove(e,this.actionTool),this.zoomEditor.processMouseMove(e,this.actionTool))}processMouseUp(e){this.enable&&(this.panEditor.processMouseUp(e,this.actionTool),this.orbitEditor.processMouseUp(e,this.actionTool),this.zoomEditor.processMouseUp(e,this.actionTool))}processMouseWheel(e){this.enable&&(this.cameraControl.isEnableDamping()&&this.resetDynamicMoving(),this.zoomEditor.processMouseWheel(e,this.actionTool))}processKeyDown(e){this.enable&&this.panEditor.processKeyDown(e,this.actionTool)}processTouchmove(e){this.enable&&(this.panEditor.processTouchmove(e,this.actionTool),this.orbitEditor.processTouchmove(e,this.actionTool),this.zoomEditor.processTouchmove(e,this.actionTool))}processTouchstart(e){this.enable&&(this.panEditor.processTouchstart(e,this.actionTool),this.orbitEditor.processTouchstart(e,this.actionTool),this.zoomEditor.processTouchstart(e,this.actionTool))}processTouchend(e){this.enable&&(this.panEditor.processTouchend(e,this.actionTool),this.orbitEditor.processTouchend(e,this.actionTool),this.zoomEditor.processTouchend(e,this.actionTool))}processKeyUp(e){this.enable&&this.panEditor.processKeyUp(e,this.actionTool)}resetDynamicMoving(){this.enable&&(this.orbitEditor.resetDynamicRotate(),this.panEditor.resetDynamicPan(),this.zoomEditor.resetDynamicZoom())}resetMobileParamsByBox(e){this.zoomEditor.resetMobileParamsByBox(e)}setZoomSpeed(e){this.zoomEditor.setZoomSpeed(e)}getZoomSpeed(){return this.zoomEditor.getZoomSpeed()}},function(){function e(e,t,i){return t<=e&&e<=i}function t(e){if(void 0===e)return{};if(e===Object(e))return e;throw TypeError("Could not convert argument to dictionary")}function i(e){this.tokens=[].slice.call(e)}i.prototype={endOfStream:function(){return!this.tokens.length},read:function(){return this.tokens.length?this.tokens.shift():-1},prepend:function(e){if(Array.isArray(e))for(var t=e;t.length;)this.tokens.unshift(t.pop());else this.tokens.unshift(e)},push:function(e){if(Array.isArray(e))for(var t=e;t.length;)this.tokens.push(t.shift());else this.tokens.push(e)}};var r=-1;function n(e,t){if(e)throw TypeError("Decoder error");return t||65533}var a="utf-8";function s(e,i){if(!(this instanceof s))return new s(e,i);if((e=void 0!==e?String(e).toLowerCase():a)!==a)throw new Error("Encoding not supported. Only utf-8 is supported");i=t(i),this._streaming=!1,this._BOMseen=!1,this._decoder=null,this._fatal=Boolean(i.fatal),this._ignoreBOM=Boolean(i.ignoreBOM),Object.defineProperty(this,"encoding",{value:"utf-8"}),Object.defineProperty(this,"fatal",{value:this._fatal}),Object.defineProperty(this,"ignoreBOM",{value:this._ignoreBOM})}function o(e,i){if(!(this instanceof o))return new o(e,i);if((e=void 0!==e?String(e).toLowerCase():a)!==a)throw new Error("Encoding not supported. Only utf-8 is supported");i=t(i),this._streaming=!1,this._encoder=null,this._options={fatal:Boolean(i.fatal)},Object.defineProperty(this,"encoding",{value:"utf-8"})}function l(t){var i=t.fatal,a=0,s=0,o=0,l=128,d=191;this.handler=function(t,h){if(-1===h&&0!==o)return o=0,n(i);if(-1===h)return r;if(0===o){if(e(h,0,127))return h;if(e(h,194,223))o=1,a=h-192;else if(e(h,224,239))224===h&&(l=160),237===h&&(d=159),o=2,a=h-224;else{if(!e(h,240,244))return n(i);240===h&&(l=144),244===h&&(d=143),o=3,a=h-240}return a<<=6*o,null}if(!e(h,l,d))return a=o=s=0,l=128,d=191,t.prepend(h),n(i);if(l=128,d=191,a+=h-128<<6*(o-(s+=1)),s!==o)return null;var c=a;return a=o=s=0,c}}function d(t){t.fatal;this.handler=function(t,i){if(-1===i)return r;if(e(i,0,127))return i;var n,a;e(i,128,2047)?(n=1,a=192):e(i,2048,65535)?(n=2,a=224):e(i,65536,1114111)&&(n=3,a=240);for(var s=[(i>>6*n)+a];n>0;){var o=i>>6*(n-1);s.push(128|63&o),n-=1}return s}}function h(){if("undefined"!=typeof self)return self;if("undefined"!=typeof global)return global;throw new Error("No global found")}s.prototype={decode:function(e,n){var a;a="object"==typeof e&&e instanceof ArrayBuffer?new Uint8Array(e):"object"==typeof e&&"buffer"in e&&e.buffer instanceof ArrayBuffer?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(0),n=t(n),this._streaming||(this._decoder=new l({fatal:this._fatal}),this._BOMseen=!1),this._streaming=Boolean(n.stream);for(var s,o=new i(a),d=[];!o.endOfStream()&&(s=this._decoder.handler(o,o.read()))!==r;)null!==s&&(Array.isArray(s)?d.push.apply(d,s):d.push(s));if(!this._streaming){do{if((s=this._decoder.handler(o,o.read()))===r)break;null!==s&&(Array.isArray(s)?d.push.apply(d,s):d.push(s))}while(!o.endOfStream());this._decoder=null}return d.length&&(-1===["utf-8"].indexOf(this.encoding)||this._ignoreBOM||this._BOMseen||(65279===d[0]?(this._BOMseen=!0,d.shift()):this._BOMseen=!0)),function(e){for(var t="",i=0;i<e.length;++i){var r=e[i];r<=65535?t+=String.fromCharCode(r):(r-=65536,t+=String.fromCharCode(55296+(r>>10),56320+(1023&r)))}return t}(d)}},o.prototype={encode:function(e,n){e=e?String(e):"",n=t(n),this._streaming||(this._encoder=new d(this._options)),this._streaming=Boolean(n.stream);for(var a,s=[],o=new i(function(e){for(var t=String(e),i=t.length,r=0,n=[];r<i;){var a=t.charCodeAt(r);if(a<55296||a>57343)n.push(a);else if(56320<=a&&a<=57343)n.push(65533);else if(55296<=a&&a<=56319)if(r===i-1)n.push(65533);else{var s=e.charCodeAt(r+1);if(56320<=s&&s<=57343){var o=1023&a,l=1023&s;n.push(65536+(o<<10)+l),r+=1}else n.push(65533)}r+=1}return n}(e));!o.endOfStream()&&(a=this._encoder.handler(o,o.read()))!==r;)Array.isArray(a)?s.push.apply(s,a):s.push(a);if(!this._streaming){for(;(a=this._encoder.handler(o,o.read()))!==r;)Array.isArray(a)?s.push.apply(s,a):s.push(a);this._encoder=null}return new Uint8Array(s)}},"function"!=typeof TextDecoder&&(h().TextDecoder=s),"function"!=typeof TextEncoder&&(h().TextEncoder=o)}();class n{constructor(){this.utf8Decoder=new TextDecoder("utf-8")}parse(e){if(!e)return Promise.reject(e);const t=new DataView(e);let i=0;const r={};let n={},a={};if(r.magic=this.utf8Decoder.decode(new Uint8Array(e,i,4)),i+=4,r.magic){if(r.version=t.getUint32(i,!0),i+=Uint32Array.BYTES_PER_ELEMENT,r.byteLength=t.getUint32(i,!0),i+=Uint32Array.BYTES_PER_ELEMENT,r.FTJSONLength=t.getUint32(i,!0),i+=Uint32Array.BYTES_PER_ELEMENT,r.FTBinaryLength=t.getUint32(i,!0),i+=Uint32Array.BYTES_PER_ELEMENT,r.BTJSONLength=t.getUint32(i,!0),i+=Uint32Array.BYTES_PER_ELEMENT,r.BTBinaryLength=t.getUint32(i,!0),i+=Uint32Array.BYTES_PER_ELEMENT,r.FTBinaryLength>0&&(a=this.parseFeatureBinary(e,i,r.FTJSONLength)),r.BTJSONLength>0){const t=28+r.FTJSONLength+r.FTBinaryLength;n=BatchTableParser.parse(e.slice(t,r.BTJSONLength+t))}const s={point:a,batchTable:n};return Promise.resolve(s)}throw new Error("Invalid pnts file.")}parseFeatureBinary(e,t,i){const r=new THREE.BufferGeometry,n=this.utf8Decoder.decode(new Uint8Array(e,t,i)),a=JSON.parse(n);let s;if(a.POINTS_LENGTH&&(s=a.POINTS_LENGTH),a.POSITION){const i=a.POSITION.byteOffset+n.length+t,o=new Float32Array(e,i,3*s);r.setAttribute("position",new THREE.BufferAttribute(o,3))}if(a.RGB){const i=a.RGB.byteOffset+n.length+t,o=new Uint8Array(e,i,3*s);r.setAttribute("color",new THREE.BufferAttribute(o,3,!0))}if(a.POSITION_QUANTIZED)throw new Error("For pnts loader, POSITION_QUANTIZED: not yet managed");if(a.RGBA)throw new Error("For pnts loader, RGBA: not yet managed");if(a.RGB565)throw new Error("For pnts loader, RGB565: not yet managed");if(a.NORMAL){const i=a.RGB.byteOffset+n.length+t,o=new Float32Array(e,i,3*s);r.setAttribute("normal",new THREE.BufferAttribute(o,3))}if(a.NORMAL_OCT16P)throw new Error("For pnts loader, NORMAL_OCT16P: not yet managed");if(a.BATCH_ID)throw new Error("For pnts loader, BATCH_ID: not yet managed");return{geometry:r,offset:a.RTC_CENTER?(new THREE.Vector3).fromArray(a.RTC_CENTER):void 0}}}r.PntsParser=n;r.PntLoader=class{constructor(e,t){this.unitScale=t,this.pntParser=new n,this.utf8Decoder=new TextDecoder("utf-8"),this.tileIndexMap={},this.rootPntUrl=void 0,this.maximumScreenSpaceError=void 0===e?5:e,this.loadPromises=[],this.camera=void 0,this.globalInverseMatrix=new THREE.Matrix4,this.box=null,this.loadJsonPromises=[],this.pntFileList={}}loadPntTotalJson(e,t){let i=this;i.loadPromises=[],this.rootPntUrl=e.slice(0,e.lastIndexOf("/")+1);return new Promise((function(n,a){(new THREE.FileLoader).load(e,(function(e){let a=JSON.parse(e);i.box=a.root.boundingVolume.box,t&&t(i.box),i.parseTilesJson(a.root);var s=Promise.all(i.loadJsonPromises.map((function(e){return e.catch((function(e){return e}))}))),o=new r.TaskManager;s.then((e=>{let t=0;for(let e in i.tileIndexMap){let r=i.tileIndexMap[e];const n=e.slice(0,e.lastIndexOf("/")+1);for(let a in r.index){let s=n+r.index[a].content.url;o.addTask(t),i.pntFileList[t]={},i.pntFileList[t].jsonUrl=e,i.pntFileList[t].pntUrl=s,i.pntFileList[t].index=a,t++}}o.processTasks(i.loadPnt.bind(i),void 0,(function(e){var t={};for(let e in i.pntFileList){if(!((s=i.pntFileList[e].jsonUrl)in t)){let e=new r.ObjectGroup(r.ObjectGroupType.EXTRUDEBODYMANAGER,{pickableType:r.PICKABLETYPE.Geometry,globalSpace:!0});t[s]=e}i.tileIndexMap[s].index[i.pntFileList[e].index].points=i.pntFileList[e].result,t[s].add(i.pntFileList[e].result)}var a=[];for(var s in t)a.push(t[s]);n(a)}))}))}))}))}parseTilesJson(e){let t=this;if(e.content&&e.content.url){let i=this.rootPntUrl+e.content.url;t.loadTileSetJson(i)}if(e.children)for(let t of e.children)this.parseTilesJson(t)}loadTileSetJson(e){let t=this;const i=new Promise((function(i,r){var n=new THREE.FileLoader;n.setResponseType("json"),n.load(e,(function(n){if(null==n)r(n);else{let r=new ExtendTileset(n,"");t.tileIndexMap[e]=r;r.index[1],e.slice(0,e.lastIndexOf("/")+1);i(r)}}),void 0,(function(t){r(data),console.error(`Load ${e} failed, ${t}`)}))}));return t.loadJsonPromises.push(i),i}ProcessTileIndexs(e,t){this.camera=e,this.globalInverseMatrix=t;for(let e in this.tileIndexMap){const t=this.tileIndexMap[e].index[1];this.ProcessNode(t,e)}}ProcessNode(e,t,i){e.visible=!1;let r=this.tileIndexMap[t].index[e.tileId].points;if(null!=r){if(r.visible=!1,this.$3dTilesSubdivisionControl(this.camera,e)&&(r.visible=!0,e.visible=!0),null!=i)if("ADD"===i.refine.toUpperCase());else{i.visible=!1,this.tileIndexMap[t].index[i.tileId].visible=!1}if(e.children)for(let i of e.children)this.ProcessNode(i,t,e)}}$3dTilesSubdivisionControl(e,t){return this.computeNodeSSE(e,t)>this.maximumScreenSpaceError}computeNodeSSE(e,t){const i=new THREE.Box3,r=new THREE.Sphere;let n=e.position.clone();if(n.multiplyScalar(1/this.unitScale),n.applyMatrix4(this.globalInverseMatrix),t.distance=0,t.boundingVolume.region)i.copy(t.boundingVolume.region.box3D),i.applyMatrix4(t.boundingVolume.region.matrixWorld),t.distance=i.distanceToPoint(n);else if(t.boundingVolume.box)i.copy(t.boundingVolume.box),t.matrixWorld&&i.applyMatrix4(t.matrixWorld),t.distance=i.distanceToPoint(n);else{if(!t.boundingVolume.sphere)return 1/0;r.copy(t.boundingVolume.sphere),r.applyMatrix4(t.matrixWorld),t.distance=Math.max(0,r.distanceToPoint(n))}return 0===t.distance?1/0:(t.geometricError-0<1e-4&&(t.geometricError=1),e._preSSE*(t.geometricError/t.distance))}updatePreSse(e,t){const i=e.fov,r=THREE.Math.degToRad(i),n=t/(2*Math.tan(.5*r));e._preSSE=n}loadPnt(e,t){let i=this;var r=i.pntFileList[e].pntUrl;return new Promise((function(n,a){var s=new THREE.FileLoader;s.setResponseType("arraybuffer"),s.load(r,(function(n){if(void 0!==n){const a=i.utf8Decoder.decode(new Uint8Array(n,0,4));if("{"===a[0]){n=JSON.parse(i.utf8Decoder.decode(new Uint8Array(n)));r.slice(0,r.lastIndexOf("/")+1)}else if("b3dm"==a)console.log("b3dm is load");else{if("pnts"!=a)return Promise.reject(`Unsupported magic code ${a}`);console.log("pnts is load")}i.pntParser.parse(n).then((n=>{const a=new THREE.PointsMaterial({size:.05,vertexColors:THREE.VertexColors}),s=new THREE.Points(n.point.geometry,a);n.point.offset&&s.position.copy(n.point.offset),s.visible=!1,s.name=r,i.pntFileList[e].result=s,t()}))}}),void 0,(function(e){a(void 0)}))}))}loadPntByPromise(e){let t=this;return new Promise((function(i,r){var n=new THREE.FileLoader;n.setResponseType("arraybuffer"),n.load(e,(function(r){if(void 0!==r){const n=t.utf8Decoder.decode(new Uint8Array(r,0,4));if("{"===n[0]){r=JSON.parse(t.utf8Decoder.decode(new Uint8Array(r)));e.slice(0,e.lastIndexOf("/")+1)}else if("b3dm"==n)console.log("b3dm is load");else{if("pnts"!=n)return Promise.reject(`Unsupported magic code ${n}`);console.log("pnts is load")}t.pntParser.parse(r).then((t=>{const r=new THREE.PointsMaterial({size:.05,vertexColors:THREE.VertexColors}),n=new THREE.Points(t.point.geometry,r);t.point.offset&&n.position.copy(t.point.offset),n.visible=!1,n.name=e,i(n)}))}}),void 0,(function(e){r(void 0)}))}))}loadPntTotalJsonByPromise(e,t){let i=this;i.loadPromises=[],this.rootPntUrl=e.slice(0,e.lastIndexOf("/")+1);return new Promise((function(n,a){(new THREE.FileLoader).load(e,(function(e){let a=JSON.parse(e);i.box=a.root.boundingVolume.box,t&&t(i.box),i.parseTilesJson(a.root),Promise.all(i.loadJsonPromises.map((function(e){return e.catch((function(e){return e}))}))).then((e=>{var t=[];for(let e in i.tileIndexMap){i.urlPointGroupMap[e]={};let r=i.tileIndexMap[e];const n=e.slice(0,e.lastIndexOf("/")+1);for(let a in r.index){let s=n+r.index[a].content.url;t.push(i.loadPnt(s).then((t=>({url:e,context:{index:a,result:t}}))))}}Promise.all(t.map((function(e){return e.catch((function(e){return e}))}))).then((e=>{for(let e in i.urlPointGroupMap){let t=new r.ObjectGroup(r.ObjectGroupType.EXTRUDEBODYMANAGER,{pickableType:r.PICKABLETYPE.Geometry,globalSpace:!0});i.urlPointGroupMap[e]=t}for(const t of e){if(void 0!==t)i.tileIndexMap[t.url].index[t.context.index].points=t.context.result,i.urlPointGroupMap[t.url].add(t.context.result)}var t=[];for(var a in i.urlPointGroupMap)t.push(i.urlPointGroupMap[a]);n(t)}))})).catch((function(e){console.log("promise reject failed reason",e)}))}))}))}},r.Version="1.0.0.20200210",r.GlobalData={SceneSize:1e3,TextureResRoot:"images/",EnableTextureMapping:!1,EnableTextureLoading:!0,MaxTexturePixels:25e4,EnableLightmap:!1,LightmapIntensity:1,ClippingCaps:!0,ClippingCapsType:0,SelectionColor:{color:1170103,side:THREE.DoubleSide},DisableAntialias:!1,EnableDemolishByDClick:!1,IsMobile:!1,WorkersRoot:"../libs/",EnableWorker:!1,ZipResourcePostfix:".gz",JsonResourcePostfix:".json",HasLayerData:!1,Instance:!0,InstanceAsyncProcessing:!1,InstanceAsyncProcessingStep:500,InstanceSharedMeshEnabled:!0,InstanceSharedMeshThreshold:10,BatchAsyncProcessingFrequency:10,DataProvider:0,Renderer:0,MaxMemeorySizeToFullRender:1500,BatchMergeEnabled:!1,SegmentedBatchMergeEnable:!1,maxIndicesNumberPerBathSegment:65535,IncrementRender:!0,LimitFrameTime:250,maxObjectNumInPool:6e4,maxDrawCacheNum:4e4,OctantDepth:15,MaximumDepth:0,ConcurrencyRequestCount:8,ShowOctant:!1,EnableOctant:!0,LightPreset:3,IBL:!1,ToneMapping:1,LightIntensityFactor:1.5,Hover:!1,MouseMovePick:!1,OcclusionTranslucentEnabled:!1,OcclusionOpacity:.5,OcclusionDistanceToCamera:1e3,LineSelectRange:30,DrawingStyle:0,DrawingBoardlineEnabled:!0,DrawingBoardlineLimit:!0,DrawingBoardlineLimitThreshold:2e5,CanUseWireframeFromData:!0,BorderLineBatched:!1,BorderLineDelayLoaded:!1,InitWireframeData:!1,SSAO:!1,EnableGlow:!1,GlowCount:0,HighLightOutlineCount:0,BloomCount:0,EnableShadowMap:!1,MeasureHighlightPlane:!1,WalkingWithGravity:!1,EnableHitDetection:!1,TranslucentDepthDisabled:!1,LoadMpkOnDemand:!1,EnableLoadOnDemand:!0,EnableSnowPass:!1,EnableFogPass:!1,EnableRainPass:!1,EnableSkylinePass:!1,ScanRingCount:0,EnableDisposeBufferAfterVbo:!0,OrganizeNodesByCameraView:!1,CanUseCompressedTexture:!1,CanUseSmallTexture:!0,DEBUG:!1,EnableExplosion:!1,EnableLogarithmicDepthBuffer:!1,ConstraintZoom:!1,PickingEffect:!0,PickingLineWidthEnabled:!1,EnableGisMap:!1,TerrainScale:1,TerrainResourceFileName:"terrain.bin",TerrainZipResourceFileName:"terrain.gz",TilePlaneGroupName:"TilePlaneGroup",TileGlobalGroupName:"TileGlobalGroup",TdTileGroupName:"3dTilesGroup",BimTilesGroupName:"BimTilesGroup",DracoLibUrl:void 0,DynamicScheduling:!1,EnableSplitComponent:!1,DelayLoadTexture:!1,EnableLodDemDom:!1,EnableCSM:!1,SceneUnit:void 0,ForcedUseWebgl1:!1,EnableDomainDiversion:!0,WalkRotationSpeed:1},r.EnumStandardView={ISO:0,Top:1,Bottom:2,Front:3,Back:4,Right:5,Left:6,SouthEast:7,SouthWest:8,NorthEast:9,NorthWest:10,BottomFront:11,BottomBack:12,BottomRight:13,BottomLeft:14,BottomSouthEast:15,BottomSouthWest:16,BottomNorthEast:17,BottomNorthWest:18,RoofFront:19,RoofBack:20,RoofRight:21,RoofLeft:22,RoofSouthEast:23,RoofSouthWest:24,RoofNorthEast:25,RoofNorthWest:26,TopTurnRight:27,TopTurnBack:28,TopTurnLeft:29,BottomTurnRight:30,BottomTurnBack:31,BottomTurnLeft:32,FrontTurnRight:33,FrontTurnTop:34,FrontTurnLeft:35,RightTurnBack:36,RightTurnTop:37,RightTurnFront:38,BackTurnRight:39,BackTurnTop:40,BackTurnLeft:41,LeftTurnFront:42,LeftTurnTop:43,LeftTurnBack:44},r.CAMERATYPE={ORTHOGRAPHIC:0,PERSPECTIVE:1},r.OPSELECTIONTYPE={Clear:0,Add:1,Remove:2},r.PICKABLETYPE={Geometry:1,Marker3d:2,Room:3,ExternalComponent:4,Axis:5,Map:6,UnPickable:0},r.LOADERROREVENTS={LOAD_ERROR:1e3,LOAD_SCENE_ERROR:1001,LOAD_MATERIAL_ERROR:1002,LOAD_SYMBOL_ERROR:1003,LOAD_OCTREEINNER_ERROR:1004,LOAD_OCTREEOUTER_ERROR:1005,LOAD_USERID_ERROR:1006,LOAD_USERDATA_ERROR:1007,LOAD_CAMERA_ERROR:1008,LOAD_TEXTURE_ERROR:1009,LOAD_MPK_ERROR:1010,LOAD_IBLCONFIG_ERROR:1011},r.EnumRenderType={RENDER:0,RENDER_FINISHED:1,RESIZE:2},r.PrimitiveCount={vertexCount:0,triangleCount:0},r.RotatePivotMode={MOUSEPOINT:0,SELECTION:1,CENTER:2,CAMERA:3},r.EditorMode={ORBIT:"orbit",PICK:"pick",PAN:"pan",ZOOM:"zoom",FLY:"fly",WALK:"walk",THIRDPERSONWALK:"ThirdPersonWalk"},r.EditToolMode={PICK_BY_RECT:"pickByRect",ZOOM_BY_RECT:"zoomByRect",CLIP_BY_BOX:"clipByBox",CLIP_FILL:"fillClip",PICK_BY_MEASURE:"pickByMeasure",EDIT_CONTROL:"editControl",VIEW_SHED_ANALYSIS:"viewshedAnalysis",VOLUME_MEASURE:"volumeMeasure"},r.MoveDirection={NONE:0,UP:1,DOWN:2,LEFT:4,RIGHT:8,FORWARD:16,BACK:32},r.DrawingStyle={SHADING:0,BOARDLINE:1,SHADINGWITHLINE:2},r.EnumInstanceState={HIDDEN:-1,NONE:0,HOVER:1,SELECTED:2,OVERRIDED:3,TRANSPARENT:4,BLINK:5,CLIPPING:6},r.EnumDataProvider={AUTO:0,DEFAULT:1,MERGED:2,LAYER:3,LAYER_SCENE:4},r.EnumRendererType={AUTO:0,FULL:1,INCREMENT:2},r.EnumShaderColorState={NONE:0,BLINK:1,SELECT:2},r.EnumCesiumImageryLayerType={AUTO:0,BAIDU:1,GAODE:2,MAPBOX:3,ARCGIS:4,GOOGLE:5},r.EnumRenderOrder={BeforeComponent:-1,Component:0,AfterComponent:1,Increment:1e4,WireFrame:10090,ClipPlane:10100,Effect:10200},r.EnumLayerBaseRenderOrder={MODEL:0,MAP:-100},r.EnumRenderCallbackType=Object.freeze({PRE_RENDER:"preRender",RENDER:"render",POST_RENDER:"postRender",FINISH_RENDER:"renderFinished"}),r.EnumLengthlUnits=Object.freeze({Meter:"Meter",Millimeter:"Millimeter"}),r.EnumClippingCapsTypes=Object.freeze({None:0,ClipPlane:1,ClipBox:2}),r.FILLPATTERN={fullFill:[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255],noFill:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],horizontalLine:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255],verticalLine:[128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128],rightDiagonalLine:[0,128,0,128,0,64,0,64,0,32,0,32,0,16,0,16,0,8,0,8,0,4,0,4,0,2,0,2,0,1,0,1,128,0,128,0,64,0,64,0,32,0,32,0,16,0,16,0,8,0,8,0,4,0,4,0,2,0,2,0,1,0,1,0,0,128,0,128,0,64,0,64,0,32,0,32,0,16,0,16,0,8,0,8,0,4,0,4,0,2,0,2,0,1,0,1,128,0,128,0,64,0,64,0,32,0,32,0,16,0,16,0,8,0,8,0,4,0,4,0,2,0,2,0,1,0,1,0],leftDiagonalLine:[1,0,1,0,2,0,2,0,4,0,4,0,8,0,8,0,16,0,16,0,32,0,32,0,64,0,64,0,128,0,128,0,0,1,0,1,0,2,0,2,0,4,0,4,0,8,0,8,0,16,0,16,0,32,0,32,0,64,0,64,0,128,0,128,1,0,1,0,2,0,2,0,4,0,4,0,8,0,8,0,16,0,16,0,32,0,32,0,64,0,64,0,128,0,128,0,0,1,0,1,0,2,0,2,0,4,0,4,0,8,0,8,0,16,0,16,0,32,0,32,0,64,0,64,0,128,0,128],orthogonalCrossLine:[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,255,255,255,255,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,255,255,255,255,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,255,255,255,255,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,255,255,255,255],skewCrossLine:[65,65,65,65,34,34,34,34,20,20,20,20,8,8,8,8,20,20,20,20,34,34,34,34,65,65,65,65,128,128,128,128,65,65,65,65,34,34,34,34,20,20,20,20,8,8,8,8,20,20,20,20,34,34,34,34,65,65,65,65,128,128,128,128,65,65,65,65,34,34,34,34,20,20,20,20,8,8,8,8,20,20,20,20,34,34,34,34,65,65,65,65,128,128,128,128,65,65,65,65,34,34,34,34,20,20,20,20,8,8,8,8,20,20,20,20,34,34,34,34,65,65,65,65,128,128,128,128],halftone:[136,136,136,136,34,34,34,34,136,136,136,136,34,34,34,34,136,136,136,136,34,34,34,34,136,136,136,136,34,34,34,34,136,136,136,136,34,34,34,34,136,136,136,136,34,34,34,34,136,136,136,136,34,34,34,34,136,136,136,136,34,34,34,34,136,136,136,136,34,34,34,34,136,136,136,136,34,34,34,34,136,136,136,136,34,34,34,34,136,136,136,136,34,34,34,34,136,136,136,136,34,34,34,34,136,136,136,136,34,34,34,34,136,136,136,136,34,34,34,34,136,136,136,136,34,34,34,34],doubleCross:[65,65,65,65,34,34,34,34,21,21,21,21,9,9,9,9,21,21,21,21,35,35,35,35,66,66,66,66,255,255,255,255,65,65,65,65,34,34,34,34,21,21,21,21,9,9,9,9,21,21,21,21,35,35,35,35,66,66,66,66,255,255,255,255,65,65,65,65,34,34,34,34,21,21,21,21,9,9,9,9,21,21,21,21,35,35,35,35,66,66,66,66,255,255,255,255,65,65,65,65,34,34,34,34,21,21,21,21,9,9,9,9,21,21,21,21,35,35,35,35,66,66,66,66,255,255,255,255]},r.EnumShowTileType=Object.freeze({All:0,OnlyInstance:1,ExceptInstance:2}),r.Layer={},function(){class e{static isAvailable(t){return("WGS84"===t||"CGCS2000"==t)&&(e.setupCoordinateSystem(t),!0)}static setupCoordinateSystem(e){if(!proj4.testDef(e))switch(e){case"WGS84":proj4.defs("WGS84","+proj=longlat +datum=WGS84 +no_defs");break;case"CGCS2000":proj4.defs("CGCS2000","+proj=longlat +ellps=GRS80 +no_defs")}}static setupMercator(){proj4.testDef("WEB_MERCATOR")||proj4.defs("WEB_MERCATOR","+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs")}}e.WGS84="WGS84",e.CGCS2000="CGCS2000",r.geoCoordinateSystem=e}(),function(){class e{constructor(){}static lonLatToWebMercator(e,t,i){if(!r.geoCoordinateSystem.isAvailable(t))return void console.log("unknown coordinate system ");r.geoCoordinateSystem.setupMercator();const n=proj4(proj4(t),proj4("WEB_MERCATOR"),proj4.toPoint([e.x,e.y]));if("object"==typeof i)return i.x=n.x,i.y=n.y,i;{const e=new THREE.Vector2;return e.x=n.x,e.y=n.y,e}}static webMercatorToLonLat(e,t,i){if(!r.geoCoordinateSystem.isAvailable(t))return void console.log("unknown coordinate system ");r.geoCoordinateSystem.setupMercator();const n=proj4(proj4("WEB_MERCATOR"),proj4(t),proj4.toPoint([e.x,e.y]));if("object"==typeof i)return i.x=n.x,i.y=n.y,i;{const e=new THREE.Vector2;return e.x=n.x,e.y=n.y,e}}static lonLatToGauss(t,i,n,a){if(!r.geoCoordinateSystem.isAvailable(i))return void console.log("unknown coordinate system ");const s=void 0!==a.span?a.span:3,o=void 0===a.withLineCode||a.withLineCode,l=e.gaussInfo(t.x,s),d=void 0!==a.lineCode?a.lineCode:l.lineCode;let h;if(o){if(h=`CGCS_GAUSS_${s}_ZONE_${d}`,!proj4.testDef(h)){const e=`+proj=tmerc +lat_0=0 +lon_0=${l.centerLng} +k=1 +x_0=${d}500000 +y_0=0 +ellps=GRS80 +units=m +no_defs`;proj4.defs(h,e)}}else if(h=`CGCS_GAUSS_${s}_${l.centerLng}E`,!proj4.testDef(h)){const e=`+proj=tmerc +lat_0=0 +lon_0=${l.centerLng} +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs`;proj4.defs(h,e)}const c=proj4(proj4(i),proj4(h),proj4.toPoint([t.x,t.y]));if("object"==typeof n)return n.x=c.x,n.y=c.y,n;{const e=new THREE.Vector2;return e.x=c.x,e.y=c.y,e}}static guassToLonLat(e,t,i,n){if(!r.geoCoordinateSystem.isAvailable(t))return void console.log("unknown coordinate system ");if(void 0===n.span)return void console.log("unknown projection info");let a,s=Math.floor(e.x/1e6);if(s<0&&!n.lineCode)return void console.log("error projection coordinate");if(n.lineCode&&n.lineCode!=s&&s>0)return void console.log("error projection coordinate");s<=0?(a=proj4.toPoint([e.x+1e6*n.lineCode,e.y]),s=n.lineCode):a=proj4.toPoint([e.x,e.y]);const o=`CGCS_GAUSS_${n.span}_ZONE_${s}`;if(!proj4.testDef(o)){let e=s*n.span;Math.abs(n.span-6)<Math.abs(r.Utils.MinusEpsilon)&&(e-=6);const t=`+proj=tmerc +lat_0=0 +lon_0=${e} +k=1 +x_0=${s}500000 +y_0=0 +ellps=GRS80 +units=m +no_defs`;proj4.defs(o,t)}const l=proj4(proj4(o),proj4(t),a);if("object"==typeof i)return i.x=l.x,i.y=l.y,i;{const e=new THREE.Vector2;return e.x=l.x,e.y=l.y,e}}static gaussInfo(e,t){let i=0,n=0;return Math.abs(t-3)<Math.abs(r.Utils.MinusEpsilon)?(i=Math.floor((e+t/2)/t),n=3*i):Math.abs(t-6)<Math.abs(r.Utils.MinusEpsilon)&&(i=Math.floor((e+t)/t),n=6*i-3),{lineCode:i,centerLng:n}}}r.Projection=e}(),function(e){function t(e,t){var i=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(i>>16)<<16|65535&i}function i(e,i,r,n,a,s){return t((o=t(t(i,e),t(n,s)))<<(l=a)|o>>>32-l,r);var o,l}function n(e,t,r,n,a,s,o){return i(t&r|~t&n,e,t,a,s,o)}function a(e,t,r,n,a,s,o){return i(t&n|r&~n,e,t,a,s,o)}function s(e,t,r,n,a,s,o){return i(t^r^n,e,t,a,s,o)}function o(e,t,r,n,a,s,o){return i(r^(t|~n),e,t,a,s,o)}function l(e,i){var r,l,d,h,c;e[i>>5]|=128<<i%32,e[14+(i+64>>>9<<4)]=i;var u=1732584193,p=-271733879,m=-1732584194,f=271733878;for(r=0;r<e.length;r+=16)l=u,d=p,h=m,c=f,u=n(u,p,m,f,e[r],7,-680876936),f=n(f,u,p,m,e[r+1],12,-389564586),m=n(m,f,u,p,e[r+2],17,606105819),p=n(p,m,f,u,e[r+3],22,-1044525330),u=n(u,p,m,f,e[r+4],7,-176418897),f=n(f,u,p,m,e[r+5],12,1200080426),m=n(m,f,u,p,e[r+6],17,-1473231341),p=n(p,m,f,u,e[r+7],22,-45705983),u=n(u,p,m,f,e[r+8],7,1770035416),f=n(f,u,p,m,e[r+9],12,-1958414417),m=n(m,f,u,p,e[r+10],17,-42063),p=n(p,m,f,u,e[r+11],22,-1990404162),u=n(u,p,m,f,e[r+12],7,1804603682),f=n(f,u,p,m,e[r+13],12,-40341101),m=n(m,f,u,p,e[r+14],17,-1502002290),u=a(u,p=n(p,m,f,u,e[r+15],22,1236535329),m,f,e[r+1],5,-165796510),f=a(f,u,p,m,e[r+6],9,-1069501632),m=a(m,f,u,p,e[r+11],14,643717713),p=a(p,m,f,u,e[r],20,-373897302),u=a(u,p,m,f,e[r+5],5,-701558691),f=a(f,u,p,m,e[r+10],9,38016083),m=a(m,f,u,p,e[r+15],14,-660478335),p=a(p,m,f,u,e[r+4],20,-405537848),u=a(u,p,m,f,e[r+9],5,568446438),f=a(f,u,p,m,e[r+14],9,-1019803690),m=a(m,f,u,p,e[r+3],14,-187363961),p=a(p,m,f,u,e[r+8],20,1163531501),u=a(u,p,m,f,e[r+13],5,-1444681467),f=a(f,u,p,m,e[r+2],9,-51403784),m=a(m,f,u,p,e[r+7],14,1735328473),u=s(u,p=a(p,m,f,u,e[r+12],20,-1926607734),m,f,e[r+5],4,-378558),f=s(f,u,p,m,e[r+8],11,-2022574463),m=s(m,f,u,p,e[r+11],16,1839030562),p=s(p,m,f,u,e[r+14],23,-35309556),u=s(u,p,m,f,e[r+1],4,-1530992060),f=s(f,u,p,m,e[r+4],11,1272893353),m=s(m,f,u,p,e[r+7],16,-155497632),p=s(p,m,f,u,e[r+10],23,-1094730640),u=s(u,p,m,f,e[r+13],4,681279174),f=s(f,u,p,m,e[r],11,-358537222),m=s(m,f,u,p,e[r+3],16,-722521979),p=s(p,m,f,u,e[r+6],23,76029189),u=s(u,p,m,f,e[r+9],4,-640364487),f=s(f,u,p,m,e[r+12],11,-421815835),m=s(m,f,u,p,e[r+15],16,530742520),u=o(u,p=s(p,m,f,u,e[r+2],23,-995338651),m,f,e[r],6,-198630844),f=o(f,u,p,m,e[r+7],10,1126891415),m=o(m,f,u,p,e[r+14],15,-1416354905),p=o(p,m,f,u,e[r+5],21,-57434055),u=o(u,p,m,f,e[r+12],6,1700485571),f=o(f,u,p,m,e[r+3],10,-1894986606),m=o(m,f,u,p,e[r+10],15,-1051523),p=o(p,m,f,u,e[r+1],21,-2054922799),u=o(u,p,m,f,e[r+8],6,1873313359),f=o(f,u,p,m,e[r+15],10,-30611744),m=o(m,f,u,p,e[r+6],15,-1560198380),p=o(p,m,f,u,e[r+13],21,1309151649),u=o(u,p,m,f,e[r+4],6,-145523070),f=o(f,u,p,m,e[r+11],10,-1120210379),m=o(m,f,u,p,e[r+2],15,718787259),p=o(p,m,f,u,e[r+9],21,-343485551),u=t(u,l),p=t(p,d),m=t(m,h),f=t(f,c);return[u,p,m,f]}function d(e){var t,i="",r=32*e.length;for(t=0;t<r;t+=8)i+=String.fromCharCode(e[t>>5]>>>t%32&255);return i}function h(e){var t,i=[];for(i[(e.length>>2)-1]=void 0,t=0;t<i.length;t+=1)i[t]=0;var r=8*e.length;for(t=0;t<r;t+=8)i[t>>5]|=(255&e.charCodeAt(t/8))<<t%32;return i}function c(e){var t,i,r="0123456789abcdef",n="";for(i=0;i<e.length;i+=1)t=e.charCodeAt(i),n+=r.charAt(t>>>4&15)+r.charAt(15&t);return n}function u(e){return unescape(encodeURIComponent(e))}function p(e){return function(e){return d(l(h(e),8*e.length))}(u(e))}function m(e,t){return function(e,t){var i,r,n=h(e),a=[],s=[];for(a[15]=s[15]=void 0,n.length>16&&(n=l(n,8*e.length)),i=0;i<16;i+=1)a[i]=909522486^n[i],s[i]=1549556828^n[i];return r=l(a.concat(h(t)),512+8*t.length),d(l(s.concat(r),640))}(u(e),u(t))}r.md5=function(e,t,i){return t?i?m(t,e):c(m(t,e)):i?p(e):c(p(e))}}(),r.Utils={scratchVector_1:new THREE.Vector3,scratchVector_2:new THREE.Vector3,scratchVector_3:new THREE.Vector3,scratchMatrix4_1:new THREE.Matrix4,scratchMatrix4_2:new THREE.Matrix4,scratchQuaternion_1:new THREE.Quaternion,TemporaryMatrix:new THREE.Matrix4,MinusEpsilon:-1e-6,MatrixFromMillimeterToMeter:(new THREE.Matrix4).makeScale(.001,.001,.001),MatrixFromMeterToMillimeter:(new THREE.Matrix4).makeScale(1e3,1e3,1e3),isDefined:function(e){return null!=e},isDesktop:function(){var e=navigator.userAgent,t=/(?:Windows Phone)/.test(e),i=/(?:SymbianOS)/.test(e)||t,r=/(?:Android)/.test(e),n=/(?:Firefox)/.test(e),a=(/(?:Chrome|CriOS)/.test(e),/(?:iPad|PlayBook)/.test(e)||r&&!/(?:Mobile)/.test(e)||n&&/(?:Tablet)/.test(e));return!(/(?:iPhone)/.test(e)&&!a||r||i||a)},getOS:function(){var e=navigator.userAgent;return e.match(/compatible/i)||e.match(/Windows/i)?"windows":e.match(/Macintosh/i)||e.match(/MacIntel/i)?"macOS":e.match(/iphone/i)||e.match(/Ipad/i)?"ios":e.match(/android/i)?"android":"other"},supportWorker:function(){return"undefined"!=typeof Worker||(console.log("Sorry! Web Worker is not supported."),!1)},supportsBlobArrayBuffer:function(e){return"function"==typeof e.arrayBuffer},supportsImageBitmap:function(){return"function"==typeof createImageBitmap},box3FromArray:function(e,t){if(e instanceof Array){var i=t||new THREE.Box3;return i.min.fromArray(e,0),i.max.fromArray(e,3),i}return null},box3FromSize:function(e,t,i){return r.Utils.isDefined(i)||(i=new THREE.Box3),i.min.set(-t.x/2,-t.y/2,-t.z/2),i.max.set(t.x/2,t.y/2,t.z/2),i.translate(e),i},box3FromArrayRange:function(e,t,i){for(var r=new THREE.Box3,n=1/0,a=1/0,s=1/0,o=-1/0,l=-1/0,d=-1/0,h=t,c=i;h<c;h+=3){var u=e[h],p=e[h+1],m=e[h+2];u<n&&(n=u),p<a&&(a=p),m<s&&(s=m),u>o&&(o=u),p>l&&(l=p),m>d&&(d=m)}return r.min.set(n,a,s),r.max.set(o,l,d),r},computeBBox:function(e){for(var t=new THREE.Box3,i=new THREE.Vector3,r=0,n=e.length;r<n;++r)i.fromArray(e[r],0),t.expandByPoint(i);return t},mergeBBox:function(e){if(e.length<1)return null;for(var t=new THREE.Box3,i=new THREE.Vector3,r=new THREE.Vector3,n=new THREE.Box3,a=0,s=e.length;a<s;a++)i.set(e[a].max.x,e[a].max.y,e[a].max.z),r.set(e[a].min.x,e[a].min.y,e[a].min.z),n.set(r,i),t.union(n);return t},parseTransform:function(e,t,i){var n=!1;if(t.rotation&&(e.rotation.fromArray(t.rotation),n=!0),t.position&&(e.position.fromArray(t.position),n=!0),t.scale&&(e.scale.fromArray(t.scale),n=!0),t.quaternion&&(e.quaternion.fromArray(t.quaternion),n=!0),n&&e.updateMatrix(),t.matrix&&e.matrix.fromArray(t.matrix),i){var a=e.matrix.clone();a.multiplyMatrices(i,e.matrix),e.matrix=a}e.matrixAutoUpdate=!1,void 0!==e.boundingBox&&(e.boundingBox=r.Utils.box3FromArray(t.bbox))},isMobileDevice:function(){var e=navigator.platform;return 0!==e.indexOf("Win")&&0!==e.indexOf("Mac")},findRange:function(e,t){if(t<Math.min.apply(null,e))return 0;if(t>Math.max.apply(null,e))return e.length-1;for(var i=0,r=0,n=e.length;r<n;++r)if(e[r]>t){i=r-1;break}return i},stringToByte:function(e){var t,i,r=new Array;t=e.length;for(var n=0;n<t;n++)(i=e.charCodeAt(n))>=65536&&i<=1114111?(r.push(i>>18&7|240),r.push(i>>12&63|128),r.push(i>>6&63|128),r.push(63&i|128)):i>=2048&&i<=65535?(r.push(i>>12&15|224),r.push(i>>6&63|128),r.push(63&i|128)):i>=128&&i<=2047?(r.push(i>>6&31|192),r.push(63&i|128)):r.push(255&i);return r},byteToString:function(e){if("string"==typeof e)return e;for(var t="",i=e,r=0;r<i.length;r++){var n=i[r].toString(2),a=n.match(/^1+?(?=0)/);if(a&&8==n.length){for(var s=a[0].length,o=i[r].toString(2).slice(7-s),l=1;l<s;l++)o+=i[l+r].toString(2).slice(2);t+=String.fromCharCode(parseInt(o,2)),r+=s-1}else t+=String.fromCharCode(i[r])}return t},strToBinary:function(e){for(var t=[],i=e.split(""),r=0;r<i.length;r++){0!=r&&t.push(" ");var n=i[r].charCodeAt().toString(2);t.push(n)}return t.join("")},binaryToStr:function(e){for(var t=[],i=e.split(" "),r=0;r<i.length;r++){var n=i[r],a=parseInt(n,2),s=String.fromCharCode(a);t.push(s)}return t.join("")},byteArr2Int:function(e){return(255&e[0])<<24|(255&e[1])<<16|(255&e[2])<<8|(255&e[3])<<0},int2ByteArr:function(e){var t=[];return t[0]=e>>24,t[1]=e>>16,t[2]=e>>8,t[3]=e>>0,t},checkVersionMatch:function(e,t){var i=e.split(".");if(i.length>1){var r=parseInt(i[0]),n=parseInt(i[1]),a=t.toLowerCase();if((a=parseFloat(a))<.04&&0===r&&n<7)return!0;if(a>=.04&&(r>0||0===r&&n>=7))return!0}return!1},isEmptyObject:function(e){if(!e)return!0;if(e.length>0)return!1;if(0===e.length)return!0;for(var t in e)if(e.hasOwnProperty(t))return!1;return!0},isEmptyObjectSimple:function(e){for(var t in e)return!1;return!0},isOwnEmptyObject:function(e){for(var t in e)if(e.hasOwnProperty(t))return!1;return!0},hexStrToRgb:function(e){var t=e.replace("#",""),i=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return i?{r:parseInt(i[1],16)/255,g:parseInt(i[2],16)/255,b:parseInt(i[3],16)/255}:null},hexToRgb:function(e){var t={};return t.r=(e>>16&255)/255,t.g=(e>>8&255)/255,t.b=(255&e)/255,t},getMin:function(e){for(var t=e.length,i=1/0;t--;)i=e[t]<i?e[t]:i;return i},getMax:function(e){for(var t=e.length,i=-1/0;t--;)i=e[t]>i?e[t]:i;return i},freezeObject:function(e){return Object.freeze?Object.freeze(e):e},getEncodedId:function(e){return r.md5&&"function"==typeof r.md5?r.md5(e):e},arrayToMap:function(e,t){t=t||{};for(var i=0,r=e.length;i<r;i++)t[e[i]]=!0;return t},getDifferentialIdxs:function(e,t){var i,r={},n={},a={};if(t)if(this.isEmptyObject(e))n=t;else{for(i in t)e[i]&&(a[i]=!0);if(this.isEmptyObject(a))r=e,n=t;else{for(i in t)a[i]||(n[i]=!0);for(i in e)a[i]||(r[i]=!0)}}else this.isEmptyObject(e)||(r=e);return{objCurrUsedIdxs:e,addIdxs:Object.keys(r),removeIdxs:Object.keys(n)}},getCombinedKeyString:function(e,t){return t=t||"&",e.join(t)},splitCombinedKeyString:function(e,t){return t=t||"&",e.split(t)},isGroupObject:function(e){return!(!e.children||!e.children.length)},isMeshObject:function(e){return!!(e.isMesh||e.isLine||e.isPoints)},extendObject:function(e,t,i){if(i)for(var n in t)"object"==typeof t[n]?r.Utils.extendObject(e[n],t[n],!0):e[n]=t[n];else for(var n in t)null!==e[n]&&void 0!==e[n]?"object"==typeof t[n]&&r.Utils.extendObject(e[n],t[n],!1):e[n]=t[n];return e},computeExplodeTranslation:function(e,t,i){let r=new THREE.Vector3;var n=t.getCenter(r),a=i*e.distanceTo(n),s=new THREE.Vector3;return s.subVectors(n,e),0!=s.length()&&s.normalize(),s.multiplyScalar(a),s},computeAfterExplodeTranslation:function(e,t,i){let r=new THREE.Vector3;if(0===i)return r;var n=t.getCenter(r),a=e.distanceTo(n),s=new THREE.Vector3;return s.subVectors(n,e),0!=s.length()&&s.normalize(),s.multiplyScalar(a/(i+1)),s},minDistanceBetweenTriToMesh:function(e,t,i,r){function n(e,t){return new THREE.Vector3(e.x-t.x,e.y-t.y,e.z-t.z)}function a(e,t){return new THREE.Vector3(e.x+t.x,e.y+t.y,e.z+t.z)}function s(e,t,i){return new THREE.Vector3(e.x+t.x*i,e.y+t.y*i,e.z+t.z*i)}function o(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function l(e,t){return new THREE.Vector3(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)}function d(e,t,i,r){var d,h,c,u,p,m,f=o(t,r),g=o(t,t),v=o(r,r),y=n(i,e),M=o(t,y),E=o(r,y);return(d=(M*v-E*f)/(g*v-f*f))<0||isNaN(d)?d=0:d>1&&(d=1),(h=(d*f-E)/v)<=0||isNaN(h)?(u=i,(d=M/g)<=0||isNaN(d)?(c=e,p=n(i,e)):d>=1?p=n(i,c=a(e,t)):(c=s(e,t,d),m=l(y,t),p=l(t,m))):h>=1?(u=a(i,r),(d=(f+M)/g)<=0||isNaN(d)?(c=e,p=n(u,e)):d>=1?p=n(u,c=a(e,t)):(c=s(e,t,d),m=l(y=n(u,e),t),p=l(t,m))):(u=s(i,r,h),d<=0||isNaN(d)?(c=e,m=l(y,r),p=l(r,m)):d>=1?(m=l(y=n(i,c=a(e,t)),r),p=l(r,m)):(c=s(e,t,d),o(p=l(t,r),y)<0&&p.multiplyScalar(-1))),{vec:p,closestP:c,closestQ:u}}function h(e,t){var i,r,a,h,c,u,p=[],m=[];p[0]=n(e[1],e[0]),p[1]=n(e[2],e[1]),p[2]=n(e[0],e[2]),m[0]=n(t[1],t[0]),m[1]=n(t[2],t[1]),m[2]=n(t[0],t[2]);for(var f=0,g=e[0].distanceToSquared(t[0])+1,v=0;v<3;v++)for(var y=0;y<3;y++){var M=d(e[v],p[v],t[y],m[y]);a=M.vec,i=M.closestP;var E=o(h=n(r=M.closestQ,i),h);if(E<=g){c=i.clone(),u=r.clone(),g=E;var b=o(n(e[(v+2)%3],i),a),x=o(n(t[(y+2)%3],r),a);if(b<=0&&x>=0)return{start:i.clone(),end:r.clone(),minDistance:Math.sqrt(E)};b<0&&(b=0),x>0&&(x=0),o(h,a)-b+x>0&&(f=1)}}var I=l(p[0],p[1]),T=o(I,I);if(T>1e-15){var C=[];h=n(e[0],t[0]),C[0]=o(h,I),h=n(e[0],t[1]),C[1]=o(h,I),h=n(e[0],t[2]),C[2]=o(h,I);var w=-1;if(C[0]>0&&C[1]>0&&C[2]>0?(w=C[0]<C[1]?0:1,C[2]<C[w]&&(w=2)):C[0]<0&&C[1]<0&&C[2]<0&&(w=C[0]>C[1]?0:1,C[2]>C[w]&&(w=2)),w>=0&&(f=1,o(h=n(t[w],e[0]),l(I,p[0]))>0&&o(h=n(t[w],e[1]),l(I,p[1]))>0&&o(h=n(t[w],e[2]),l(I,p[2]))>0))return i=s(t[w],I,C[w]/T),r=t[w].clone(),{start:i.clone(),end:r,minDistance:i.distanceTo(r)}}var S=l(m[0],m[1]),A=o(S,S);if(A>1e-15){var B=[];h=n(t[0],e[0]),B[0]=o(h,S),h=n(t[0],e[1]),B[1]=o(h,S),h=n(t[0],e[2]),B[2]=o(h,S);w=-1;if(B[0]>0&&B[1]>0&&B[2]>0?(w=B[0]<B[1]?0:1,B[2]<B[w]&&(w=2)):B[0]<0&&B[1]<0&&B[2]<0&&(w=B[0]>B[1]?0:1,B[2]>B[w]&&(w=2)),w>=0&&(f=1,o(h=n(e[w],t[0]),l(S,m[0]))>0&&o(h=n(e[w],t[1]),l(S,m[1]))>0&&o(h=n(e[w],t[2]),l(S,m[2]))>0))return{start:i=e[w].clone(),end:(r=s(e[w],S,B[w]/A)).clone(),minDistance:i.distanceTo(r)}}return f?(i=c,r=u,{start:c.clone(),end:u.clone(),minDistance:Math.sqrt(g)}):{start:c.clone(),end:u.clone(),minDistance:0}}var c=new THREE.Vector3,u=new THREE.Vector3,p=new THREE.Vector3;function m(e,t,i,r,n,a){c.fromBufferAttribute(t,i),u.fromBufferAttribute(t,r),p.fromBufferAttribute(t,n),a&&(c.applyMatrix4(a),u.applyMatrix4(a),p.applyMatrix4(a)),e.push(c),e.push(u),e.push(p)}for(var f={start:null,end:null,minDistance:Number.POSITIVE_INFINITY},g=t.geometry,v=g.attributes.position,y=i?i.indexStart:0,M=g.getIndex().array,E=y,b=i?i.indexStart+i.indexCount:M.length;E<b;E+=3){var x=[];m(x,v,M[E],M[E+1],M[E+2],r);var I=h(e,x);if(f.minDistance>I.minDistance&&(f.minDistance=I.minDistance,f.start=I.start.clone(),f.end=I.end.clone()),I.minDistance<=0)return f}return f},asyncProcess(e,t,i,r,n){requestAnimationFrame(function a(s){var o=s;return function(){var s,l;for(l=o+i>t?t:o+i,s=o;s<l;s++){r&&r(e,s),s===l-1&&(l!==t?requestAnimationFrame(a(s+1)):n&&n(e))}}}(0))},hasSimilarProperty:function(e,t){if(!(e instanceof Object&&t instanceof Object))return!1;for(var i in e)if(e.hasOwnProperty(i)&&!t.hasOwnProperty(i))return!1;return!0},arrayMax:function(e){if(0===e.length)return-1/0;for(var t=e[0],i=1,r=e.length;i<r;++i)e[i]>t&&(t=e[i]);return t},arrayMin:function(e){if(0===e.length)return 1/0;for(var t=e[0],i=1,r=e.length;i<r;++i)e[i]<t&&(t=e[i]);return t},ab2str:function(e){return(new TextDecoder).decode(new Uint8Array(e))},str2ab:function(e){return(new TextEncoder).encode(e).buffer},getEncodedString:function(e){return r.md5&&"function"==typeof r.md5?r.md5(e):e},toMemoryString(e){var t=e/1048576;return t<1?t.toLocaleString(void 0,{maximumFractionDigits:3}):Math.round(t).toLocaleString()},defined:e=>null!=e,defaultValue:(e,t)=>null!=e?e:t,clone:function(e,t){if(null===e||"object"!=typeof e)return e;t=r.Utils.defaultValue(t,!1);var i=new e.constructor;for(var n in e)if(e.hasOwnProperty(n)){var a=e[n];t&&(a=r.Utils.clone(a,t)),i[n]=a}return i},binarySearch(e,t,i){for(var r,n,a=0,s=e.length-1;a<=s;)if((n=i(e[r=~~((a+s)/2)],t))<0)a=r+1;else{if(!(n>0))return r;s=r-1}return~(s+1)},unpackRGBAToDepth(e){if(!r.Utils.UnpackFactors){var t=255/256,i=new THREE.Vector3(16777216,65536,256);r.Utils.UnpackFactors=new THREE.Vector4(t/i.x,t/i.y,t/i.z,t)}return e.dot(r.Utils.UnpackFactors)},computeViewportTransformation(e,t,i,n){var a=r.Utils.defaultValue(e.x,0),s=r.Utils.defaultValue(e.y,0),o=r.Utils.defaultValue(e.width,0),l=r.Utils.defaultValue(e.height,0);t=r.Utils.defaultValue(t,0);var d=.5*o,h=.5*l,c=.5*((i=r.Utils.defaultValue(i,1))-t),u=d,p=h,m=c,f=a+d,g=s+h,v=t+c;return r.Utils.defined(n)||(n=new THREE.Matrix4),n.elements[0]=u,n.elements[1]=0,n.elements[2]=0,n.elements[3]=0,n.elements[4]=0,n.elements[5]=p,n.elements[6]=0,n.elements[7]=0,n.elements[8]=0,n.elements[9]=0,n.elements[10]=m,n.elements[11]=0,n.elements[12]=f,n.elements[13]=g,n.elements[14]=v,n.elements[15]=1,n},computeView:(e,t,i,n,a)=>(r.Utils.defined(a)||(a=new THREE.Matrix4),a.elements[0]=n.x,a.elements[1]=i.x,a.elements[2]=-t.x,a.elements[3]=0,a.elements[4]=n.y,a.elements[5]=i.y,a.elements[6]=-t.y,a.elements[7]=0,a.elements[8]=n.z,a.elements[9]=i.z,a.elements[10]=-t.z,a.elements[11]=0,a.elements[12]=-n.dot(e),a.elements[13]=-i.dot(e),a.elements[14]=t.dot(e),a.elements[15]=1,a),getTranslationFromMatrix4:(e,t)=>(r.Utils.defined(t)||(t=new THREE.Vector3),t.x=e.elements[12],t.y=e.elements[13],t.z=e.elements[14],t),pointInPolygon(e,t){for(var i=e.x,r=e.y,n=!1,a=0,s=t.length-1;a<t.length;s=a++){var o=t[a].x,l=t[a].y,d=t[s].x,h=t[s].y;l>r!=h>r&&i<(d-o)*(r-l)/(h-l)+o&&(n=!n)}return n},area(e){for(var t=e.length,i=0,r=t-1,n=0;n<t;r=n++)i+=e[r].x*e[n].y-e[n].x*e[r].y;return.5*i},isClockWise:e=>r.Utils.area(e)<0,lineLineIntersection(e,t,i,r){const n=(r.y-i.y)*(t.x-e.x)-(r.x-i.x)*(t.y-e.y),a=(r.x-i.x)*(e.y-i.y)-(r.y-i.y)*(e.x-i.x),s=(t.x-e.x)*(e.y-i.y)-(t.y-e.y)*(e.x-i.x);if(0==n)return void 0;const o=a/n,l=s/n;return o>=0&&o<=1&&l>=0&&l<=1?new THREE.Vector2(e.x+o*(t.x-e.x),e.y+o*(t.y-e.y)):void 0},lineStartScratch:new THREE.Vector2,lineEndScratch:new THREE.Vector2,linePolygonIntersection(e,t,i){for(var n,a=0;a<i.length;a++)if(r.Utils.lineStartScratch.set(i[a].x,i[a].y),r.Utils.lineEndScratch.set(i[(a+1)%i.length].x,i[(a+1)%i.length].y),n=r.Utils.lineLineIntersection(e,t,r.Utils.lineStartScratch,r.Utils.lineEndScratch))return n},linePolygonIntersection2(e,t,i){for(var n,a=0;a<i.length;a++)if(r.Utils.lineStartScratch.set(i[a].x,i[a].y),r.Utils.lineEndScratch.set(i[(a+1)%i.length].x,i[(a+1)%i.length].y),n=r.Utils.lineLineIntersection(e,t,r.Utils.lineStartScratch,r.Utils.lineEndScratch))return n.index=a,n},delaunay(e){var t=1/1048576;let i=function(e,i,r,n){var a,s,o,l,d,h,c,u,p,m,f=e[i][0],g=e[i][1],v=e[r][0],y=e[r][1],M=e[n][0],E=e[n][1],b=Math.abs(g-y),x=Math.abs(y-E);if(b<t&&x<t)throw new Error("Eek! Coincident points!");return b<t?s=(l=-(M-v)/(E-y))*((a=(v+f)/2)-(h=(v+M)/2))+(u=(y+E)/2):x<t?s=(o=-(v-f)/(y-g))*((a=(M+v)/2)-(d=(f+v)/2))+(c=(g+y)/2):(a=((o=-(v-f)/(y-g))*(d=(f+v)/2)-(l=-(M-v)/(E-y))*(h=(v+M)/2)+(u=(y+E)/2)-(c=(g+y)/2))/(o-l),s=b>x?o*(a-d)+c:l*(a-h)+u),{i:i,j:r,k:n,x:a,y:s,r:(p=v-a)*p+(m=y-s)*m}},r=function(e){var t,i,r,n,a,s;for(i=e.length;i;)for(n=e[--i],r=e[--i],t=i;t;)if(s=e[--t],r===(a=e[--t])&&n===s||r===s&&n===a){e.splice(i,2),e.splice(t,2);break}};var n,a,s,o,l,d,h,c,u,p,m,f,g=e.length;if(g<3)return[];for(e=e.slice(0),s=new Array(g),n=g;n--;)s[n]=n;for(s.sort((function(t,i){var r=e[i][0]-e[t][0];return 0!==r?r:t-i})),o=function(e){var t,i,r,n,a,s,o=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY,d=Number.NEGATIVE_INFINITY,h=Number.NEGATIVE_INFINITY;for(t=e.length;t--;)e[t][0]<o&&(o=e[t][0]),e[t][0]>d&&(d=e[t][0]),e[t][1]<l&&(l=e[t][1]),e[t][1]>h&&(h=e[t][1]);return r=h-l,[[(a=o+.5*(i=d-o))-20*(n=Math.max(i,r)),(s=l+.5*r)-n],[a,s+20*n],[a+20*n,s-n]]}(e),e.push(o[0],o[1],o[2]),l=[i(e,g+0,g+1,g+2)],d=[],h=[],n=s.length;n--;h.length=0){for(f=s[n],a=l.length;a--;)(c=e[f][0]-l[a].x)>0&&c*c>l[a].r?(d.push(l[a]),l.splice(a,1)):c*c+(u=e[f][1]-l[a].y)*u-l[a].r>t||(h.push(l[a].i,l[a].j,l[a].j,l[a].k,l[a].k,l[a].i),l.splice(a,1));for(r(h),a=h.length;a;)m=h[--a],p=h[--a],l.push(i(e,p,m,f))}for(n=l.length;n--;)d.push(l[n]);for(l.length=0,n=d.length;n--;)d[n].i<g&&d[n].j<g&&d[n].k<g&&l.push(d[n].i,d[n].j,d[n].k);return l},bestdim(e,t){const i=1e-4*t.length();let r=Math.floor(1*e);r=Math.max(r,1);let n=[1,1,1];if(t.x>i)if(t.y>i)if(t.z>i){const e=Math.pow(r/(t.x*t.y*t.z),1/3);n[0]=Math.floor(t.x*e),n[1]=Math.floor(t.y*e),n[2]=Math.floor(t.z*e)}else n[0]=Math.floor(Math.sqrt(r*t.x/t.y)),n[1]=Math.floor(Math.sqrt(r*t.y/t.x));else t.z>i?(n[0]=Math.floor(Math.sqrt(r*t.x/t.z)),n[2]=Math.floor(Math.sqrt(r*t.z/t.x))):n[0]=Math.floor(r);else t.y>i?t.z>i?(n[1]=Math.floor(Math.sqrt(r*t.y/t.z)),n[2]=Math.floor(Math.sqrt(r*t.z/t.y))):n[1]=Math.floor(r):t.z>i&&(n[2]=Math.floor(r));return n[0]=Math.max(n[0],1),n[1]=Math.max(n[1],1),n[2]=Math.max(n[2],1),n},charCodeUrl(e){let t=4;e.endsWith(".json.gz")?t=9:e.endsWith("bimtiles.json.gz")&&(t=17);let i=e.length,r=0;for(let n=i-t;n>=i-t-6;n--)r+=e[n].charCodeAt(0);return r},getPickPointByPixel(e,t,i){const r=e.getRenderer(),n=e.camera,a=e.rendererManager.renderer,s=e.getViewportSize();let o=s.width,l=s.height;i=s.height-i;var d=window.devicePixelRatio||1;o*=d,l*=d;const h=new THREE.WebGLRenderTarget(o,l,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter});a.renderCustomDepth&&a.renderCustomDepth(r,e.getScene(),n,h,!0);let c=new Uint8Array(4);r.readRenderTargetPixels(h,t*d,i*d,1,1,c);const u=n.near,p=n.far,m=2/(Math.log(p+1)/Math.LN2),f=n.projectionMatrix;this.TemporaryMatrix.copy(f).invert();const g=n.matrixWorld,v=new THREE.Vector4;let y=new THREE.Vector4;const M=c[0],E=c[1],b=c[2],x=c[3];v.set(M,E,b,x);let I=this.unpackRGBAToDepth(v);if(0==I)return;I/=255;const T=2*I/m,C=Math.pow(2,T)-1;let w=p*(1-u/C)/(p-u);const S=2*t/o-1,A=2*i/l-1;return w=2*w-1,y.set(S,A,w,1),y.multiplyScalar(C),y.applyMatrix4(this.TemporaryMatrix),y.applyMatrix4(g),this.scratchVector_1.set(y.x,y.y,y.z),this.scratchVector_1}},r.Compatibility={convertAnnotationsToV3:function(e,t){var i=JSON.parse(t);function n(e,t,i){var n;n="string"==typeof e?JSON.parse(window.atob(e)):{position:{x:e.position.x,y:e.position.y,z:e.position.z},target:{x:e.target.x,y:e.target.y,z:e.target.z},up:{x:e.up.x,y:e.up.y,z:e.up.z}};var a=new THREE.Vector3(n.position.x,n.position.y,n.position.z),s=new THREE.Vector3(n.target.x,n.target.y,n.target.z),o=new THREE.Vector3(n.up.x,n.up.y,n.up.z),l=new r.CameraInfo("persp",a,s,o);return l=r.Camera.drawingToWorld(l,t),l=new r.CameraInfo("persp",l.position,l.target,l.up),l=r.Camera.worldToDrawing(l,i),n.position.x=l.position.x,n.position.y=l.position.y,n.position.z=l.position.z,n.target.x=l.target.x,n.target.y=l.target.y,n.target.z=l.target.z,n.up.x=l.up.x,n.up.y=l.up.y,n.up.z=l.up.z,"string"==typeof e&&(n=window.btoa(JSON.stringify(n))),n}if(i.filter){var a=JSON.parse(i.filter);if(a.filter||a.basicIds){var s=e.getScene(),o=s.getTransformMatrixGlobal();(new THREE.Matrix4).copy(o).invert();var l=s.getMatrixGlobal();(new THREE.Matrix4).copy(l).invert();var d=e.getFilter().getFilterType(),h={state:{}};a.filter?(a.fileFilter&&(h.state[d.FILE_HIDDEN]=a.fileFilter),a.selectionSet&&(h.state[d.SELECTED]=a.selectionSet),a.filter.visibleIds&&(h.state[d.VISIBLE]=a.filter.visibleIds),a.filter.invisibleIds&&(h.state[d.HIDDEN]=a.filter.invisibleIds),a.filter.conditions&&(h.state[d.CONDITION_HIDDEN_OTHERS]=a.filter.conditions),a.filter.filters&&(h.state[d.USER_HIDDEN]=a.filter.filters),a.frozenSet&&(h.state[d.FROZENFILTER]=a.frozenSet),a.isolateSet&&(h.state[d.ISOLATE_HIDDEN_OTHERS]=a.isolateSet),a.overriderByIds&&(h.state[d.OVERRIDEFILTER]=a.overriderByIds),a.overriderByData&&(h.state[d.USER_OVERRIDE]=a.overriderByData),a.overriderCondition&&(h.state[d.CONDITION_OVERRIDE]=a.overriderCondition),a.isolateCondition&&(h.state[d.ISOLATE_CONDITION_HIDDEN_OTHERS]=a.isolateCondition),h.state.sceneState=a.overriderByScene):a.basicIds&&(a.basicIds[1]&&(h.state[d.FILE_HIDDEN]=a.basicIds[1]),a.basicIds[2]&&(h.state[d.SELECTED]=a.basicIds[2]),a.basicIds[3]&&(h.state[d.VISIBLE]=a.basicIds[3]),a.basicIds[4]&&(h.state[d.HIDDEN]=a.basicIds[4]),a.conditions[0]&&(h.state[d.CONDITION_HIDDEN_OTHERS]=a.conditions[0]),a.userHiddenIds&&(h.state[d.USER_HIDDEN]=a.userHiddenIds),a.frozenIds&&(h.state[d.FROZENFILTER]=a.frozenIds),a.isolateIds&&(h.state[d.ISOLATE_HIDDEN_OTHERS]=a.isolateIds),a.overrideByIds&&(h.state[d.OVERRIDEFILTER]=a.overrideByIds),a.overrideByData&&(h.state[d.USER_OVERRIDE]=a.overrideByData),a.conditions[2]&&(h.state[d.CONDITION_OVERRIDE]=a.conditions[2]),a.isolateConditions&&(a.isolateConditions[0]&&(h.state[d.ISOLATE_CONDITION_HIDDEN]=a.isolateConditions[0]),a.isolateConditions[1]&&(h.state[d.ISOLATE_CONDITION_HIDDEN_OTHERS]=a.isolateConditions[1]),a.isolateConditions[2]&&(h.state[d.ISOLATE_CONDITION_TRANSLUCENT]=a.isolateConditions[2]),a.isolateConditions[3]&&(h.state[d.ISOLATE_CONDITION_TRANSLUCENT_OTHERS]=a.isolateConditions[3])),h.state.sceneState=a.sceneState),a.camera?h.camera=n(a.camera,o,l):h.camera=n(i.camera,o,l),a=h,i.filter=JSON.stringify(a)}}return i},isLoadLinesEnabled:function(e){return!(parseFloat(e)<=.12)},isLoadBMpkEnabled:function(e){return!(parseFloat(e)<.13)},isLoadLayerSceneEnabled:function(e){return!(parseFloat(e)<.15)},isUse32MpkData:function(e){return!(parseFloat(e)<.15)},use32MpkData:!1,isUseMergeTexturePkg:function(e){return!(parseFloat(e)<.16)},isUseMergeTextureOptimize:function(e){return parseFloat(e)>.17},isUseDoubleMatrix:function(e){return parseFloat(e)>=.2},isUseINCREMENTByBmpkCount:function(e,t){return 0===e&&t>0},getMatrixSize:function(e){return this.isUseDoubleMatrix(e)?128:64},getMatrixDatatype:function(e){return this.isUseDoubleMatrix(e)?Float64Array:Float32Array},useMergeTexturePkg:!1},r.DomUtil={getContainerOffsetToClient:function(e){var t,i;if(e!=document){var r=(i=e).getBoundingClientRect?function(e){var t=e.getBoundingClientRect(),i=document.body,r=document.documentElement,n=r.clientTop||i.clientTop,a=r.clientLeft||i.clientLeft,s=t.top-n,o=t.left-a;return{top:Math.round(s),left:Math.round(o)}}(i):function(e){for(var t=0,i=0;e;)t+=e.offsetTop,i+=e.offsetLeft,e=e.offsetParent;var r=document.body,n=document.documentElement;return{top:t-=window.pageYOffset||n.scrollTop||r.scrollTop,left:i-=window.pageXOffset||n.scrollLeft||r.scrollLeft}}(i);t={width:e.offsetWidth,height:e.offsetHeight,left:r.left,top:r.top}}else t={width:window.innerWidth,height:window.innerHeight,left:0,top:0};return t},loadXML:function(e,t){let i;if(window.ActiveXObject){const e=["MSXML2.DOMDocument.6.0","MSXML2.DOMDocument.5.0","MSXML2.DOMDocument.4.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","Microsoft.XMLDOM","MSXML.DOMDocument"];for(let t=0,r=e.length;t<r;++t){try{i=new ActiveXObject(e[t])}catch(e){continue}if(i)break}}else{if(!document.implementation||!document.implementation.createDocument)return console.log("不能创建 XML DOM对象,请更新你的浏览器……"),null;i=document.implementation.createDocument("","",null)}return i.async=t,i.load(e),i},loadXMLDoc:function(e){let t;return t=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP"),t.open("GET",e,!1),t.send(),t.responseXML},getXMLAttributeValues:function(e,t){const i=e.getElementsByTagName(t);if(0===i.length)return;const r=i[0],n={};for(let e=0,t=r.attributes.length;e<t;++e){const t=r.attributes[e].nodeName;n[t]=r.getAttribute(t)}return n},getXMLAttributeValuesByAttrName:function(e,t,i){const r=e.getElementsByTagName(t);if(0===r.length)return;const n=[];for(let e=0,t=r.length;e<t;++e){const t=r[e].getAttribute(i);t&&n.push(t)}return n}},(()=>{const e=new THREE.Vector3,t=new THREE.Vector3,i=new THREE.Vector3,n=new THREE.Vector3,a=new THREE.Vector3(0,0,1),s=new THREE.Matrix4,o=new THREE.Matrix3;var l;function d(e){let t=[];for(let i of e){const e=i.clone();e.z=0,t.push(e)}return t}function h(e){let t=[],i=-1/0,r=0;e.forEach(((e,n)=>{const a=e.clone();a.z>i&&(i=a.z,r=n),t.push(a)}));for(let e of t)e.z=i;return{topPoints:t,maxIndex:r}}function c(e){n.set(0,0,0);for(let t of e)n.add(t);const t=n.angleTo(a);return t>-Math.PI/2&&t<Math.PI/2}r.GeomUtil={EmptyGeometry:new THREE.BufferGeometry,UnitCylinderInstance:new THREE.CylinderBufferGeometry(1,1,1,32,1,!1),UnitBoxInstance:new THREE.BoxBufferGeometry(1,1,1),UnitTextureCylinder:null,UnitTextureBox:null,initializeUnitInstances:function(){r.GeomUtil.UnitCylinderInstance.boundingBox||r.GeomUtil.UnitCylinderInstance.computeBoundingBox(),r.GeomUtil.UnitBoxInstance.boundingBox||r.GeomUtil.UnitBoxInstance.computeBoundingBox()},destroyUnitInstances:function(){r.GeomUtil.UnitCylinderInstance.dispose(),r.GeomUtil.UnitBoxInstance.dispose()},getBoxData:function(e){for(var t=[[],[],[],[],[],[]],i=0;i<4;++i)t[0].push(-1,0,0);for(i=0;i<4;++i)t[1].push(0,-1,0);for(i=0;i<4;++i)t[2].push(0,0,-1);for(i=0;i<4;++i)t[3].push(0,0,1);for(i=0;i<4;++i)t[4].push(0,1,0);for(i=0;i<4;++i)t[5].push(1,0,0);var r=[[],[],[],[],[],[]];return r[0]=r[2]=r[4]=[-.5,-.5,-.5,.5,.5,-.5,.5,.5],r[1]=r[3]=r[5]=[-.5,-.5,-.5,.5,.5,-.5,.5,.5],{vertex:[[-.5,-.5,-.5,-.5,-.5,.5,-.5,.5,-.5,-.5,.5,.5],[-.5,-.5,-.5,-.5,-.5,.5,.5,-.5,-.5,.5,-.5,.5],[-.5,-.5,-.5,-.5,.5,-.5,.5,-.5,-.5,.5,.5,-.5],[-.5,-.5,.5,-.5,.5,.5,.5,-.5,.5,.5,.5,.5],[-.5,.5,-.5,-.5,.5,.5,.5,.5,-.5,.5,.5,.5],[.5,-.5,-.5,.5,-.5,.5,.5,.5,-.5,.5,.5,.5]][e],normal:t[e],uv:r[e],index:[[0,1,2,3,2,1],[2,1,0,1,2,3],[0,1,2,3,2,1],[2,1,0,1,2,3],[0,1,2,3,2,1],[2,1,0,1,2,3]][e]}},getPipeData2:function(){var e=[.5,0,.5,.353530875,.353530875,.5,0,.5,.5,-.353530875,.353530875,.5,-.5,0,.5,-.353530875,-.353530875,.5,0,-.5,.5,.353530875,-.353530875,.5,.5,0,.5,.5,0,-.5,.353530875,.353530875,-.5,0,.5,-.5,-.353530875,.353530875,-.5,-.5,0,-.5,-.353530875,-.353530875,-.5,0,-.5,-.5,.353530875,-.353530875,-.5,.5,0,-.5,.5,0,.5,.353530875,.353530875,.5,0,.5,.5,-.353530875,.353530875,.5,-.5,0,.5,-.353530875,-.353530875,.5,0,-.5,.5,.353530875,-.353530875,.5,.5,0,-.5,.353530875,.353530875,-.5,0,.5,-.5,-.353530875,.353530875,-.5,-.5,0,-.5,-.353530875,-.353530875,-.5,0,-.5,-.5,.353530875,-.353530875,-.5],t=[0,9,1,1,9,10,1,10,2,2,10,11,2,11,3,3,11,12,3,12,4,4,12,13,4,13,5,5,13,14,5,14,6,6,14,15,6,15,7,7,15,16,7,16,8,8,16,17,18,19,20,18,20,21,18,21,22,18,22,23,18,23,24,18,24,25,26,28,27,26,29,28,26,30,29,26,31,30,26,32,31,26,33,32],i=[1,0,0,.7,.7,0,0,1,0,-.7,.7,0,-1,0,0,-.7,-.7,0,0,-1,0,.7,-.7,0,1,0,0,1,0,0,.7,.7,0,0,1,0,-.7,.7,0,-1,0,0,-.7,-.7,0,0,-1,0,.7,-.7,0,1,0,0,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1],r=[-.5,.5,-.375,.5,-.25,.5,-.125,.5,0,.5,.125,.5,.25,.5,.375,.5,.5,.5,-.5,-.5,-.375,-.5,-.25,-.5,-.125,-.5,0,-.5,.125,-.5,.25,-.5,.375,-.5,.5,-.5,.5,0,.353530875,.353530875,0,.5,-.353530875,.353530875,-.5,0,-.353530875,-.353530875,0,-.5,.353530875,-.353530875,.5,0,.353530875,.353530875,0,.5,-.353530875,.353530875,-.5,0,-.353530875,-.353530875,0,-.5,.353530875,-.353530875];return function(){return{vertex:e,normal:i,uv:r,index:t}}}(),getPipeData:function(e){(void 0===e||e<8)&&(e=8),e>256&&(e=256);var t,i,r=.5,n=4*e+2,a=3*(4*e-4),s=e+1,o=1/e,l=6.28318530714/e,d=[];for(t=0;t<e;++t)d.push(r*Math.cos(t*l)),d.push(r*Math.sin(t*l));d.push(r),d.push(0);var h=[];for(i=2*s,t=0;t<i;t+=2)h.push(d[t]),h.push(d[t+1]),h.push(r);for(t=0;t<i;t+=2)h.push(d[t]),h.push(d[t+1]),h.push(-.5);for(i=2*e,t=0;t<i;t+=2)h.push(d[t]),h.push(d[t+1]),h.push(r);for(t=i;t>0;t-=2)h.push(d[t]),h.push(d[t+1]),h.push(-.5);var c=[],u=e+1;for(t=0;t<e;++t)c.push(t),c.push(t+u),c.push(t+1),c.push(t+1),c.push(t+u),c.push(t+u+1);var p=2*s;for(t=1;t<e-1;++t)c.push(p),c.push(p+t),c.push(p+t+1);for(p+=e,t=1;t<e-1;++t)c.push(p),c.push(p+t),c.push(p+t+1);var m=[];for(t=e;t>=0;--t)m.push(t*o-r),m.push(-.5);for(t=e;t>=0;--t)m.push(t*o-r),m.push(r);for(i=2*e,t=0;t<i;t+=2)m.push(d[t]),m.push(d[t+1]);for(t=i;t>0;t-=2)m.push(d[t]),m.push(d[t+1]);i=3*n;var f,g,v,y=[];for(t=0;t<i;++t)y.push(0);var M=new THREE.Vector3,E=new THREE.Vector3,b=new THREE.Vector3,x=new THREE.Vector3,I=new THREE.Vector3;for(t=0;t<a;t+=3)f=3*c[t],g=3*c[t+1],v=3*c[t+2],M.fromArray(h,f),E.fromArray(h,g),b.fromArray(h,v),x.subVectors(b,E),I.subVectors(M,E),x.cross(I),y[f]+=x.x,y[f+1]+=x.y,y[f+2]+=x.z,y[g]+=x.x,y[g+1]+=x.y,y[g+2]+=x.z,y[v]+=x.x,y[v+1]+=x.y,y[v+2]+=x.z;var T=new THREE.Vector3;for(i=3*n,t=0;t<i;t+=3)T.fromArray(y,t),T.normalize(),y[t]=T.x,y[t+1]=T.y,y[t+2]=T.z;return{vertex:h,normal:y,uv:m,index:c,edges:e}},getInstancePipeData:function(e,t){var i=this.getPipeData(e);(void 0===e||e<8)&&(e=8),e>256&&(e=256);var r=2*(e+1),n=r+e,a=4*e+2,s=[[],[],[]];s[0]=i.vertex.slice(0,3*r),s[1]=i.vertex.slice(3*r,3*n),s[2]=i.vertex.slice(3*n,3*a);var o=[[],[],[]],l=e+1,d=0;for(d=0;d<e;++d)o[0].push(d),o[0].push(d+l),o[0].push(d+1),o[0].push(d+1),o[0].push(d+l),o[0].push(d+l+1);for(d=1;d<e-1;++d)o[1].push(0),o[1].push(d),o[1].push(d+1);for(d=1;d<e-1;++d)o[2].push(0),o[2].push(d),o[2].push(d+1);var h=[[],[],[]];h[0]=i.uv.slice(0,2*r),h[1]=i.uv.slice(2*r,2*n),h[2]=i.uv.slice(2*n,2*a);var c=[[],[],[]];return c[0]=i.normal.slice(0,3*r),c[1]=i.normal.slice(3*r,3*n),c[2]=i.normal.slice(3*n,3*a),{vertex:s[t],normal:c[t],uv:h[t],index:o[t]}},getUnitTextureCylinder:function(){if(null==r.GeomUtil.UnitTextureCylinder){r.GeomUtil.UnitTextureCylinder=new Array(3);for(var e=0;e<3;++e){var t=r.GeomUtil.getInstancePipeData(32,e);r.GeomUtil.UnitTextureCylinder[e]=new THREE.BufferGeometry,r.GeomUtil.UnitTextureCylinder[e].setIndex(t.index),r.GeomUtil.UnitTextureCylinder[e].setAttribute("position",new THREE.Float32BufferAttribute(t.vertex,3)),r.GeomUtil.UnitTextureCylinder[e].setAttribute("normal",new THREE.Float32BufferAttribute(t.normal,3)),r.GeomUtil.UnitTextureCylinder[e].setAttribute("uv",new THREE.Float32BufferAttribute(t.uv,2))}}return r.GeomUtil.UnitTextureCylinder},getUnitTextureBox:function(){if(null===r.GeomUtil.UnitTextureBox){r.GeomUtil.UnitTextureBox=new Array(6);for(var e=0;e<6;++e){var t=r.GeomUtil.getBoxData(e);r.GeomUtil.UnitTextureBox[e]=new THREE.BufferGeometry,r.GeomUtil.UnitTextureBox[e].setIndex(t.index),r.GeomUtil.UnitTextureBox[e].setAttribute("position",new THREE.Float32BufferAttribute(t.vertex,3)),r.GeomUtil.UnitTextureBox[e].setAttribute("normal",new THREE.Float32BufferAttribute(t.normal,3)),r.GeomUtil.UnitTextureBox[e].setAttribute("uv",new THREE.Float32BufferAttribute(t.uv,2))}}return r.GeomUtil.UnitTextureBox},getBoxBufferGeometryWithUvMatrices:function(e){for(var t,i=[],n=new THREE.Matrix3,a=new THREE.Vector3,s=!!e,o=0;o<6;++o){t=new THREE.BufferGeometry;var l=r.GeomUtil.getBoxData(o);if(s){var d=[];n.set(e[6*o],e[6*o+2],e[6*o+4],e[6*o+1],e[6*o+3],e[6*o+5],0,0,1);for(var h=0,c=l.uv.length;h<c;h+=2)a.set(l.uv[h],l.uv[h+1],1),a.applyMatrix3(n),d.push(a.x),d.push(a.y);t.setAttribute("uv",new THREE.Float32BufferAttribute(d,2))}t.setIndex(new THREE.BufferAttribute(Uint32Array.from(l.index),1)),t.setAttribute("position",new THREE.Float32BufferAttribute(l.vertex,3)),t.setAttribute("normal",new THREE.Float32BufferAttribute(l.normal,3)),i.push(t)}return r.GeomUtil.mergeBufferGeometries2(i)},getPipeBufferGeometryWithUvMatrices:function(e){var t=r.GeomUtil.getPipeData(32),i=t.edges,n=!(!e||18!==e.length),a=new THREE.BufferGeometry;if(n){for(var s=[],o=0,l=e.length;o<l;o+=6){var d=new THREE.Matrix3;d.set(e[6*o],e[6*o+2],e[6*o+4],e[6*o+1],e[6*o+3],e[6*o+5],0,0,1),s.push(d)}for(var h=[],c=new THREE.Vector3,u=4*(i+1),p=u+2*i,m=0,f=t.uv.length;m<f;m+=2)c.set(t.uv[m],t.uv[m+1],1),m<u?c.applyMatrix3(s[0]):m<p?c.applyMatrix3(s[1]):c.applyMatrix3(s[2]),h.push(c.x),h.push(c.y);a.setAttribute("uv",new THREE.Float32BufferAttribute(h,2))}return a.setIndex(new THREE.Uint32BufferAttribute(t.index,1)),a.setAttribute("position",new THREE.Float32BufferAttribute(t.vertex,3)),a.setAttribute("normal",new THREE.Float32BufferAttribute(t.normal,3)),a},getWorldMatrixOfMesh:function(e){for(var t=[],i=e.parent;i;)t.push(i.matrix),i=i.parent;var r=new THREE.Matrix4;if(t.length>0){r=t[t.length-1];for(var n=t.length-2;n>=0;--n)r.multiply(t[n])}var a=new THREE.Matrix4;return a.multiplyMatrices(r,e.matrix),a},getWorldPositionOfMesh:function(e,t){t||(t=new THREE.Matrix4),s.copy(t).invert();var i=e.clone();return i.applyMatrix4(s),i},getBoundingBoxWorldOfMesh:function(e){var t=e.boundingBox;return t||(e.geometry.boundingBox||e.geometry.computeBoundingBox(),t=e.geometry.boundingBox),t.clone()},getBoundingBoxWorldOfGeometry:function(e){return e.boundingBox||e.computeBoundingBox(),e.boundingBox.clone()},mergeBufferGeometries:function(e,t){for(var i=null!==e[0].geometry.index,r=new Set(Object.keys(e[0].geometry.attributes)),n=new Set(Object.keys(e[0].geometry.morphAttributes)),a={},s={},o=new THREE.BufferGeometry,l=0;l<e.length;++l){var d=e[l].geometry;if(i!==(null!==d.index))return null;for(var h in d.attributes){if(!r.has(h))return console.log("attributes not Used: ",h),null;void 0===a[h]&&(a[h]=[]),a[h].push(d.attributes[h])}for(var h in d.morphAttributes){if(!n.has(h))return null;void 0===s[h]&&(s[h]=[]),s[h].push(d.morphAttributes[h])}void 0!==d.userData&&(o.userData=o.userData||{},o.userData.mergedUserData=o.userData.mergedUserData||[],o.userData.mergedUserData.push(d.userData))}if(i){var c=0,u=[],p=0;for(l=0;l<e.length;++l){var m=e[l].geometry.index;if(c>0){m=m.clone();for(var f=0;f<m.count;++f)m.setX(f,m.getX(f)+c)}u.push(m),c+=e[l].geometry.attributes.position.count,void 0===t[e[l].name]&&(t[e[l].name]=[]),t[e[l].name].push({nodeId:e[l].nodeId,indexStart:p,indexCount:m.count,materialId:e[l].materialId}),p+=m.count}var g=this.mergeBufferAttributes(u);if(!g)return null;o.index=g}for(var h in a){var v=this.mergeBufferAttributes(a[h]);if(!v)return null;o.setAttribute(h,v)}for(var h in s){var y=s[h][0].length;if(0===y)break;o.morphAttributes=o.morphAttributes||{},o.morphAttributes[h]=[];for(l=0;l<y;++l){var M=[];for(f=0;f<s[h].length;++f)M.push(s[h][f][l]);var E=this.mergeBufferAttributes(M);if(!E)return null;o.morphAttributes[h].push(E)}}return o},mergeBufferGeometries2:function(e){for(var t=null!==e[0].index,i=new Set(Object.keys(e[0].attributes)),r={},n=new THREE.BufferGeometry,a=0;a<e.length;++a){var s=e[a];if(t!==(null!==s.index))return null;for(var o in s.attributes){if(!i.has(o))return null;void 0===r[o]&&(r[o]=[]),r[o].push(s.attributes[o])}}if(t){var l=0,d=[];for(a=0;a<e.length;++a){var h=e[a].index;if(l>0){h=h.clone();for(var c=0;c<h.count;++c)h.setX(c,h.getX(c)+l)}d.push(h),l+=e[a].attributes.position.count}var u=this.mergeBufferAttributes(d);if(!u)return null;n.index=u}for(var o in r){var p=this.mergeBufferAttributes(r[o]);if(!p)return null;n.setAttribute(o,p)}return n},mergeBufferAttributes:function(e){for(var t,i,r,n=0,a=0;a<e.length;++a){var s=e[a];if(s.isInterleavedBufferAttribute)return null;if(void 0===t&&(t=s.array.constructor),t!==s.array.constructor)return null;if(void 0===i&&(i=s.itemSize),i!==s.itemSize)return null;if(void 0===r&&(r=s.normalized),r!==s.normalized)return null;n+=s.array.length}for(var o=new t(n),l=0,d=0;d<e.length;++d)o.set(e[d].array,l),l+=e[d].array.length;return new THREE.BufferAttribute(o,i,r)},applyMatrix3ToBuffer:(l=new THREE.Vector3,function(e,t){for(var i=0,r=t.length;i<r;i+=3)l.x=t[i+0],l.y=t[i+1],l.z=t[i+2],l.applyMatrix3(e),t[i+0]=l.x,t[i+1]=l.y,t[i+2]=l.z;return t}),applyMatrix4ToBuffer:function(){var e=new THREE.Vector3;return function(t,i){for(var r=0,n=i.length;r<n;r+=3)e.x=i[r+0],e.y=i[r+1],e.z=i[r+2],e.applyMatrix4(t),i[r+0]=e.x,i[r+1]=e.y,i[r+2]=e.z;return i}}(),normalizeBuffer:function(e){for(var t,i,r,n,a=0,s=e.length;a<s;a+=3)t=e[a],i=e[a+1],r=e[a+2],n=1/Math.sqrt(t*t+i*i+r*r),e[a+0]=t*n,e[a+1]=i*n,e[a+2]=r*n},disposeBufferFromGeometry:function(e,t){for(var i=0,r=t.length;i<r;i++){var n=e.getAttribute(t[i]);n&&(n.array=null)}},disposeIndexBufferFromGeometry:function(e){e.index&&(e.index.array=null)},copyMeshProperties:function(e,t){e.name=t.name,e.up.copy(t.up),e.position.copy(t.position),e.quaternion.copy(t.quaternion),e.scale.copy(t.scale),e.matrix.copy(t.matrix),e.matrixWorld.copy(t.matrixWorld),e.matrixAutoUpdate=t.matrixAutoUpdate,e.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate},createBufferGeometryWithPosAndSkin:function(e,t){var i=new THREE.BufferGeometry;if(e.isBufferGeometry||e._bufferGeometry){var r=e.isBufferGeometry?e:e._bufferGeometry;if(!r.getAttribute("position"))return null;i.setAttribute("position",r.getAttribute("position")),r.getAttribute("skinIndex")&&i.setAttribute("skinIndex",r.getAttribute("skinIndex")),r.getAttribute("skinWeight")&&i.setAttribute("skinWeight",r.getAttribute("skinWeight"));var n=r.getIndex();n&&i.setIndex(n),t&&r.getAttribute("uv")&&i.setAttribute("uv",r.getAttribute("uv")),r.getAttribute("previous")&&(i.setAttribute("previous",r.getAttribute("previous")),i.setAttribute("next",r.getAttribute("next")),i.setAttribute("uv",r.getAttribute("uv")))}else if(e.isGeometry){if(0===e.vertices.length)return null;var a=new THREE.Float32BufferAttribute(3*e.vertices.length,3);if(i.setAttribute("position",a.copyVector3sArray(e.vertices)),e.skinIndices.length>0){var s=new THREE.Float32BufferAttribute(4*e.skinIndices.length,4);i.setAttribute("skinIndex",s.copyVector4sArray(e.skinIndices))}if(e.skinWeights.length>0){var o=new THREE.Float32BufferAttribute(4*e.skinWeights.length,4);this.setAttribute("skinWeight",o.copyVector4sArray(e.skinWeights))}if(e.faces.length){for(var l=e.faces,d=[],h=0;h<l.length;h++){var c=l[h];d.push(c.a,c.b,c.c)}i.setIndex(d)}}if(!i.getIndex()){for(var u,p=[],m=Math.floor(i.attributes.position.count/3),f=0;f<m;f++)u=3*f,p.push(u,u+1,u+2);i.setIndex(p)}return i},limitGeometryBufferSize:function(e){var t,i,r,n,a,s,o=45e6;if(e.groups.length){var l=e.groups,d=!1;for(i=0,r=l.length;i<r;i++)if(l[i].count>o){d=!0;break}if(!d)return;for(e.clearGroups(),i=0,r=l.length;i<r;i++){var h=l[i];if((n=h.count)>o){for(a=Math.floor(n/o),s=n%o,t=0;t<a;t++)e.addGroup(h.start+t*o,o,h.materialIndex);s&&e.addGroup(h.start+a*o,s,h.materialIndex)}else e.addGroup(h.start,h.count,h.materialIndex)}}else if((n=e.index?e.index.count:0)>o){for(a=Math.floor(n/o),s=n%o,t=0;t<a;t++)e.addGroup(t*o,o,0);s&&e.addGroup(a*o,s,0)}},getUnitLightmapBox:function(){if(void 0===r.GeomUtil.UnitLightmapBoxGeometry){for(var e,t,i=[],n=[],a=[],s=[],o=0,l=0;l<6;++l){var d=r.GeomUtil.getBoxData(l);for(e=0,t=d.index.length;e<t;e++){var h=d.index[e];i.push(d.vertex[3*h]),i.push(d.vertex[3*h+1]),i.push(d.vertex[3*h+2]),n.push(d.normal[3*h]),n.push(d.normal[3*h+1]),n.push(d.normal[3*h+2]),a.push(d.uv[2*h]),a.push(d.uv[2*h+1]),s.push(e+o)}o+=d.index.length}r.GeomUtil.UnitLightmapBoxGeometry=new THREE.BufferGeometry,r.GeomUtil.UnitLightmapBoxGeometry.setIndex(s),r.GeomUtil.UnitLightmapBoxGeometry.setAttribute("position",new THREE.Float32BufferAttribute(i,3)),r.GeomUtil.UnitLightmapBoxGeometry.setAttribute("normal",new THREE.Float32BufferAttribute(n,3)),r.GeomUtil.UnitLightmapBoxGeometry.setAttribute("uv",new THREE.Float32BufferAttribute(a,2))}return r.GeomUtil.UnitLightmapBoxGeometry},getUnitLightmapBoxM:function(){if(void 0===r.GeomUtil.UnitLightmapBoxMGeometry){r.GeomUtil.UnitLightmapBoxMGeometry=new Array(6);for(var e=0;e<6;++e){for(var t=r.GeomUtil.getBoxData(e),i=[],n=[],a=[],s=[],o=0,l=t.index.length;o<l;o++){var d=t.index[o];n.push(t.vertex[3*d]),n.push(t.vertex[3*d+1]),n.push(t.vertex[3*d+2]),a.push(t.normal[3*d]),a.push(t.normal[3*d+1]),a.push(t.normal[3*d+2]),s.push(t.uv[2*d]),s.push(t.uv[2*d+1]),i.push(o)}r.GeomUtil.UnitLightmapBoxMGeometry[e]=new THREE.BufferGeometry,r.GeomUtil.UnitLightmapBoxMGeometry[e].setIndex(i),r.GeomUtil.UnitLightmapBoxMGeometry[e].setAttribute("position",new THREE.Float32BufferAttribute(n,3)),r.GeomUtil.UnitLightmapBoxMGeometry[e].setAttribute("normal",new THREE.Float32BufferAttribute(a,3)),r.GeomUtil.UnitLightmapBoxMGeometry[e].setAttribute("uv",new THREE.Float32BufferAttribute(s,2))}}return r.GeomUtil.UnitLightmapBoxMGeometry},getUnitLightmapPipeM:function(){if(void 0===r.GeomUtil.UnitLightmapPipeMGeometry){var e,t,i=[],n=[],a=[],s=[],o=r.GeomUtil.getPipeData(32);for(e=0,t=o.index.length;e<t;e++){var l=o.index[e];i.push(o.vertex[3*l]),i.push(o.vertex[3*l+1]),i.push(o.vertex[3*l+2]),n.push(o.normal[3*l]),n.push(o.normal[3*l+1]),n.push(o.normal[3*l+2]),a.push(o.uv[2*l]),a.push(o.uv[2*l+1]),s.push(e)}r.GeomUtil.UnitLightmapPipeMGeometry=new THREE.BufferGeometry,r.GeomUtil.UnitLightmapPipeMGeometry.setIndex(s),r.GeomUtil.UnitLightmapPipeMGeometry.setAttribute("position",new THREE.Float32BufferAttribute(i,3)),r.GeomUtil.UnitLightmapPipeMGeometry.setAttribute("normal",new THREE.Float32BufferAttribute(n,3)),r.GeomUtil.UnitLightmapPipeMGeometry.setAttribute("uv",new THREE.Float32BufferAttribute(a,2))}return r.GeomUtil.UnitLightmapPipeMGeometry},getUnitLightmapPipe:function(){if(void 0===r.GeomUtil.UnitLightmapPipeGeometry){var e,t,i=[],n=[],a=[],s=[],o=r.GeomUtil.UnitCylinderInstance,l=o.getAttribute("position").array,d=o.getAttribute("normal").array,h=o.getAttribute("uv").array,c=o.getIndex().array;for(e=0,t=c.length;e<t;e++){var u=c[e];i.push(l[3*u]),i.push(l[3*u+1]),i.push(l[3*u+2]),n.push(d[3*u]),n.push(d[3*u+1]),n.push(d[3*u+2]),a.push(h[2*u]),a.push(h[2*u+1]),s.push(e)}r.GeomUtil.UnitLightmapPipeGeometry=new THREE.BufferGeometry,r.GeomUtil.UnitLightmapPipeGeometry.setIndex(s),r.GeomUtil.UnitLightmapPipeGeometry.setAttribute("position",new THREE.Float32BufferAttribute(i,3)),r.GeomUtil.UnitLightmapPipeGeometry.setAttribute("normal",new THREE.Float32BufferAttribute(n,3)),r.GeomUtil.UnitLightmapPipeGeometry.setAttribute("uv",new THREE.Float32BufferAttribute(a,2))}return r.GeomUtil.UnitLightmapPipeGeometry},getGeometrySplitByPlane:function(e,t){var i=function(e){return e<0?s:e>0?a:o},n=function(e,t){return t.distanceToPoint(e)},a="front",s="back",o="on",l=["a","b","c"];if("BufferGeometry"!=e.type){var d=new THREE.BufferGeometry;d.fromGeometry(e),e=d}for(var h=new r.SplitGeometryBuilder(e,t),c=[],u=[],p=e.attributes.position.array,m=new THREE.Vector3,f=0;f<p.length;f+=3){m.set(p[f],p[f+1],p[f+2]);var g=n(m,t),v=i(g);c.push(g),u.push(v)}var y=e.index.array,M=0;for(y.length,f=0;f<y.length;f+=3){for(var E=[],b=f;b<f+3;b++)E.push(u[y[b]]);if(-1!==E.indexOf(a)||-1===E.indexOf(s)){var x={a:y[f],b:y[f+1],c:y[f+2]};h.startFace(M,x);var I=l[l.length-1],T=y[f+2],C=c[T],w=u[T];l.map((function(e){var t=x[e],i=c[t],r=u[t];r===a&&(w===s?(h.addIntersection(I,e,C,i),h.addVertex(e)):h.addVertex(e)),r===o&&h.addVertex(e),r===s&&w===a&&h.addIntersection(I,e,C,i),I=e,T=t,w=r,C=i})),h.endFace(),M++}}var S=new THREE.BufferGeometry;return S.setAttribute("position",new THREE.Float32BufferAttribute(h.targetPositions,3)),S.setAttribute("normal",new THREE.Float32BufferAttribute(h.targetNormals,3)),S.setAttribute("uv",new THREE.Float32BufferAttribute(h.targetUvs,2)),S.setIndex(new THREE.Uint32BufferAttribute(h.targetIndices,1)),S},getGeometrySplitByMultiPlane:function(e,t){let i=0,n=[],a=[],s=[],o=[],l=[];for(let t=0,r=e.length;t<r;t++){const r=e[t].object.matrix;let d=e[t].object.geometry;if("BufferGeometry"!=e[t].object.geometry.type){let e=new THREE.BufferGeometry;e.fromGeometry(d),d=e}let h=Array.from(d.attributes.position.array),c=Array.from(d.index.array),u=null==d.attributes.normal?void 0:Array.from(d.attributes.normal.array),p=null==d.attributes.uv?void 0:Array.from(d.attributes.uv.array);for(let e=0,t=h.length;e<t;e+=3){const t=[0,1,2].map((t=>h[e+t]));let i=new THREE.Vector3(t[0],t[1],t[2]);i.applyMatrix4(r),h[e+0]=i.x,h[e+1]=i.y,h[e+2]=i.z}if(n=n.concat(h),c=c.map((e=>e+i)),a=a.concat(c),l=l.concat(Array.from({length:c.length/3},((e,i)=>t))),u)for(let e=0,t=u.length;e<t;e+=3){const t=[0,1,2].map((t=>u[e+t]));let i=new THREE.Vector4(t[0],t[1],t[2],1);i.applyMatrix4(r.clone().invert().transpose()),u[e+0]=i.x,u[e+1]=i.y,u[e+2]=i.z}s=s.concat(u||Array.from({length:h.length},((e,t)=>{}))),o=o.concat(p||Array.from({length:2*h.length/3},((e,t)=>{}))),i+=h.length/3}let d={vertices:n,indices:a,normal:s,uvs:o},h=function(e,t,i,r){const n=t.clone().sub(e),a=i.clone().sub(e),s=a.length()/n.length();return!r&&(r=1e-8),n.clone().cross(a).length()<r&&s>0-r&&s<1+r},c=function(e,t,i,r){const n=[0,1,2].map((e=>i[e]));return[0,1,2].map((i=>function(e,t,i,r,n){const a=e,s=t.clone().sub(e),o=i,l=r.clone().sub(i);let d=o.clone().sub(a).cross(l),h=s.clone().cross(l),c=d.dot(h)/(d.length()*h.length());const u=c*d.length()/h.length();d=o.clone().sub(a).cross(s),h=s.clone().cross(l),c=d.dot(h)/(d.length()*h.length());const p=c*d.length()/h.length();return!n&&(n=1e-8),!(s.clone().cross(l).length()<n&&o.clone().sub(a).cross(s).length()<n)&&!(s.clone().cross(l).length()<n&&o.clone().sub(a).cross(s).length()>n)&&s.clone().cross(l).length()>n&&u>0-n&&u<1+n&&p>0-n&&p<1+n&&a.clone().add(s.clone().multiplyScalar(u))}(e,t,n[i],n[(i+1)%3],r))).filter((e=>e))},u=function(e,t,i,r){const n=e.clone().sub(r),a=n.dot(t),s=n.dot(i);return new THREE.Vector3(a,s,0)},p=function(e,t,i,r){const n=t.clone().multiplyScalar(e.x),a=i.clone().multiplyScalar(e.y);return n.clone().add(a).add(r)},m=function(e,t,i){let r=new THREE.Triangle;return r.a=e,r.b=t,r.c=i,r.getArea()},f=function(e,t){const i=t[0],r=t[1],n=t[2],a=r.clone().sub(i),s=e.clone().sub(i),o=n.clone().sub(r),l=e.clone().sub(r),d=i.clone().sub(n),h=e.clone().sub(n);return a.clone().cross(s).z>=0&&o.clone().cross(l).z>=0&&d.clone().cross(h).z>=0},g=function(e,i,n){const a=e[0],s=e[1],o=e[2],l=s.clone().sub(a),d=o.clone().sub(a),g=s.clone().sub(o);let v=1e-7*Math.max(l.length(),g.length(),d.length());if(l.length()<v||g.length()<v||d.length()<v)return;v=1e-7*Math.min(l.length(),g.length(),d.length());const y=l.clone().cross(d).normalize(),M=l.clone().normalize(),E=y.clone().cross(M).normalize();let b=[].concat(t.points);const x=t.points.map((e=>{const i=function(e,t,i,r,n){!n&&(n=1e-8);let a=r.clone();for(;Math.abs(t.dot(a))<n;)a=a.clone().multiplyScalar(.99).add(t.clone().multiplyScalar(.01));const s=i.clone().sub(e).dot(a)/t.dot(a);return e.clone().add(t.clone().multiplyScalar(s))}(e,t.stretch,a,y,v);return u(i,M,E,a)}));let I=[u(a,M,E,a),u(s,M,E,a),u(o,M,E,a)],T=[];if(x.length<2)return;const C=x[0].clone().sub(x[x.length-1]).length()<v;if(C){if(2==x.length)return;x.pop(),b.pop();let e=x.length;for(;f(x[0],I)&&e--;)x.push(x.shift()),b.push(b.shift());f(x[0],I)?T=T.concat(x):(x.push(x[0].clone()),b.push(b[0].clone()))}let w,S,A="INITIAL";for(let e=0,t=x.length;e<t;e++)if("INITIAL"!=A||f(x[e],I))if("OUT"==A&&f(x[e],I)){A="IN",S=x[e];const t=c(w,S,I,v).filter((e=>{for(let t of I)if(!e||e.clone().sub(t).length()<v)return!1;return!0}));if(T=T.concat(t),T.push(S),t.length>0)break;w=x[e]}else if("OUT"!=A||f(x[e],I))if("IN"!=A||f(x[e],I))if("IN"==A&&f(x[e],I)){S=x[e];const t=c(w,S,I,v);T=T.concat(t),T.push(S),w=x[e]}else;else{A="OUT",S=x[e];const t=c(w,S,I,v);T=T.concat(t),w=x[e]}else{S=x[e];const t=c(w,S,I,v).filter((e=>{for(let t of I)if(!e||e.clone().sub(t).length()<v)return!1;return!0}));if(T=T.concat(t),t.length>0)break;w=x[e]}else A="OUT",w=x[e];T=T.filter((e=>{for(let t of I)if(!e||e.clone().sub(t).length()<v)return!1;return!0}));const B=T.map((e=>{for(let t=0;t<3;t++){const i=I[(t+0)%3],r=I[(t+1)%3],n=new THREE.Vector3;(new THREE.Line3).set(i,r).closestPointToPoint(e,!1,n);if(e.distanceTo(n)<v)return i.clone().add(r).multiplyScalar(.5)}return I[0].clone().add(I[1].clone()).add(I[2].clone()).multiplyScalar(1/3)})),R=I.concat(B).map((e=>[e.x,e.y]));let D;try{D=r.Utils.delaunay(R)}catch(e){return}const O=I.concat(T).map((e=>p(e,M,E,a)));let L=[],P=[];O.forEach((e=>{const t=O[0],r=O[1],a=O[2],s=m(t,r,a),o=m(e,r,a)/s,l=m(e,a,t)/s,d=m(e,t,r)/s;i&&L.push(i[0].clone().multiplyScalar(o).add(i[1].clone().multiplyScalar(l)).add(i[2].clone().multiplyScalar(d))),n&&P.push(n[0].clone().multiplyScalar(o).add(n[1].clone().multiplyScalar(l)).add(n[2].clone().multiplyScalar(d)))}));for(let e=0,t=D.length;e<t;e+=3){const t=[0,1,2].map((t=>D[e+t])).map((e=>O[e])),i=t[1].clone().sub(t[0]),r=t[2].clone().sub(t[0]);i.clone().cross(r).dot(y)<0&&([D[e+1],D[e+2]]=[D[e+2],D[e+1]])}let N=[];for(let e=0,i=D.length;e<i&&3==D.length;e+=3){const i=[0,1,2].map((t=>D[e+t])).map((e=>new THREE.Vector3(R[e][0],R[e][1],0)));if(C){const n=function(e){return 1==t.stretch.x?new THREE.Vector2(e.y,e.z):1==t.stretch.y?new THREE.Vector2(e.x,e.z):1==t.stretch.z?new THREE.Vector2(e.x,e.y):void 0},s=b.map((e=>n(e))),o=[0,1,2].map((e=>i[e].clone().add(i[(e+1)%3]).multiplyScalar(.5))),l=i[0].clone().add(i[1]).add(i[2]).multiplyScalar(1/3);if(-1==i.concat(o).concat([l]).map((e=>{const t=r.Utils.pointInPolygon(n(p(e,M,E,a)),s);let i=!1;for(let t=0,r=x.length-1;t<r;t++)w=x[t],S=x[t+1],h(w,S,e,v)&&(i=!0);return t||i})).indexOf(!1)){N.push(e/3);continue}}else for(let r=0,n=x.length-1;r<n;r++){w=x[r],S=x[r+1];let n=i.map((e=>e.clone())).filter((e=>!h(w,S,e,v)));const s=new THREE.Plane;if(s.setFromNormalAndCoplanarPoint(b[r+1].clone().sub(b[r]).cross(t.stretch),b[r+1]),1==n.length){if(s.distanceToPoint(p(n[0],M,E,a))>0){N.push(e/3);break}}else if(0==n.length){N.push(e/3);break}}}let H=[];for(let e=0,t=R.length;e<t&&3==D.length;e++){const t=new THREE.Vector3(R[e][0],R[e][1],0);for(let i=0,r=x.length-1;i<r;i++)if(w=x[i],S=x[i+1],h(w,S,t,v)){H.push(e);break}}return{vertices:O,normal:L,uvs:P,indices:D,positive:N,onMultiline:H}},v=[],y=[];for(let e=0;e<d.indices.length;){const t=[0,1,2].map((t=>d.indices[e+t])),i=t.map((e=>new THREE.Vector3(d.vertices[3*e+0],d.vertices[3*e+1],d.vertices[3*e+2])));let r=!1,n=!1;t.forEach((e=>{[0,1,2].forEach((t=>{null==d.normal[3*e+t]&&(r=!0)})),[0,1].forEach((t=>{null==d.uvs[2*e+t]&&(n=!0)}))}));const a=g(i,r?void 0:t.map((e=>new THREE.Vector3(d.normal[3*e+0],d.normal[3*e+1],d.normal[3*e+2]))),n?void 0:t.map((e=>new THREE.Vector2(d.uvs[2*e+0],d.uvs[2*e+1])))),s=d.vertices.length/3,o=d.indices.length/3;if(a){for(let t=0;t<a.positive.length;t++)v.push(0==a.positive[t]?e/3:a.positive[t]-1+o);a.onMultiline.forEach((e=>{e<3&&(y[t[e]]=!0),e>=3&&(y[e-3+s]=!0)}))}if(a&&3!=a.vertices.length){for(let e=3;e<a.vertices.length;e++){const t=a.vertices[e],i=a.normal[e],s=a.uvs[e];d.vertices.push(t.x,t.y,t.z),!r&&d.normal.push(i.x,i.y,i.z),r&&d.normal.push(void 0,void 0,void 0),!n&&d.uvs.push(s.x,s.y),n&&d.uvs.push(void 0,void 0)}a.indices=a.indices.map((t=>t<3?d.indices[e+t]:t-3+s)),[0,1,2].forEach((t=>d.indices[e+t]=a.indices[t]));for(let e=3;e<a.indices.length;e++)d.indices.push(a.indices[e]);l=l.concat(Array.from({length:a.indices.length/3-1},((t,i)=>l[e/3])))}else e+=3}let M=[];({vertices:n,indices:a,normal:s,uvs:o}=d);let E=new THREE.Box3;for(let e=0,t=n.length;e<t;e+=3)E.expandByPoint(new THREE.Vector3(n[e+0],n[e+1],n[e+2]));E.expandByScalar(.01);const b=E.max.clone().sub(E.min),x=r.Utils.bestdim(n.length/3,b),I=new THREE.Vector3(b.x/x[0],b.y/x[1],b.z/x[2]);let T=function(e){return 73856093*Math.floor(e.x)^19349663*Math.floor(e.y)^83492791*Math.floor(e.z)},C={};for(let e=0,t=a.length;e<t;e+=3){[0,1,2].map((t=>a[e+t])).forEach((t=>{null==C[t]&&(C[t]=[]),C[t].push(e/3)}))}let w={};for(let e=0,t=n.length;e<t;e+=3){const t=new THREE.Vector3(n[e+0],n[e+1],n[e+2]),i=new THREE.Vector3(t.x/I.x,t.y/I.y,t.z/I.z),r=T(i);null==w[r]&&(w[r]=[]),w[r].push(e/3)}for(v=Array.from(new Set(v)),v.forEach((e=>M[e]=1));0!=v.length;){const e=v.shift();M[e]=1;const t=[0,1,2].map((t=>a[3*e+t])),i=t.map((e=>new THREE.Vector3(n[3*e+0],n[3*e+1],n[3*e+2]))).map((e=>new THREE.Vector3(e.x/I.x,e.y/I.y,e.z/I.z)));let r=[];i.forEach((e=>r=r.concat(w[T(e)]))),r=Array.from(new Set(r));let s=[];r.forEach((e=>{e&&C[e]&&(s=s.concat(C[e]))})),s=Array.from(new Set(s));for(let e=0,i=s.length;e<i;e++){const i=s[e];if(M[i])continue;let r=!1;const o=[0,1,2].map((e=>a[3*i+e])),l=o.map((e=>new THREE.Vector3(n[3*e+0],n[3*e+1],n[3*e+2]))),d=t.filter((e=>-1!=o.indexOf(e))),h=1e-5*Math.max(b.x,b.y,b.z),c=t.filter((e=>{const t=new THREE.Vector3(n[3*e+0],n[3*e+1],n[3*e+2]);for(let e of l)if(Math.abs(e.clone().sub(t).length()-0)<h)return!0}));d.concat(c).forEach((e=>r=r||!y[e])),r&&(M[i]=1,v.push(i))}}let S=function(e){let t={},i=[],r=[],a=[],l=!1,d=!1;[...new Set(e)].forEach((e=>{[0,1,2].forEach((t=>{i.push(n[3*e+t]),r.push(s[3*e+t]),isNaN(s[3*e+t])&&(l=!0)})),[0,1].forEach((t=>{a.push(o[2*e+t]),isNaN(o[2*e+t])&&(d=!0)})),t[e]=i.length/3-1}));let h=new THREE.BufferGeometry;const c=e.map((e=>t[e]));return h.setAttribute("position",new THREE.Float32BufferAttribute(i,3)),!l&&h.setAttribute("normal",new THREE.Float32BufferAttribute(r,3)),!d&&h.setAttribute("uv",new THREE.Float32BufferAttribute(a,2)),h.setIndex(new THREE.Uint32BufferAttribute(c,1)),h},A=[];for(let t=0,i=e.length;t<i;t++){let e=[],i=[];for(let r=0;r<a.length;r+=3)l[r/3]==t&&(M[r/3]&&e.push(a[r+0],a[r+1],a[r+2]),!M[r/3]&&i.push(a[r+0],a[r+1],a[r+2]));A.push([S(e),S(i)])}return A},getGeometrySplitByFinitePlane:function(e,t){let i=function(e,i){if(0==e.clone().sub(i).length())return-1;if(0==e.clone().sub(i).dot(t.normal))return-1;const r=-e.clone().sub(t.center).dot(t.normal)/i.clone().sub(e).dot(t.normal),n=e.clone().add(i.clone().sub(e).multiplyScalar(r)).clone().sub(t.center);return Math.abs(n.clone().dot(t.x))>t.x.length()*t.x.length()||Math.abs(n.clone().dot(t.y))>t.y.length()*t.y.length()?-1:r},n=function(e,i){const r=new THREE.Plane;r.setFromNormalAndCoplanarPoint(t.normal,t.center);const n=r.distanceToPoint(e);if(Math.abs(n)>i)return!1;const a=e.clone().sub(t.center);return!(Math.abs(a.clone().dot(t.x))>t.x.length()*t.x.length())&&!(Math.abs(a.clone().dot(t.y))>t.y.length()*t.y.length())},a=function(e,t,i,r){let n=function(e,n){const a=Array.from(Array(n),((e,t)=>t)),s=a.map((i=>e[n*t+i])),o=a.map((t=>e[n*i+t]));if(new Set(s.concat(o)).has(void 0))a.forEach((t=>e.push(void 0)));else{a.map((e=>s[e]+r*(o[e]-s[e]))).forEach((t=>e.push(t)))}};n(e.vertices,3),n(e.normal,3),n(e.uvs,2)},s=0,o=[],l=[],d=[],h=[],c=[];for(let t=0,i=e.length;t<i;t++){const i=e[t].object.matrix;let r=e[t].object.geometry;if("BufferGeometry"!=e[t].object.geometry.type){let e=new THREE.BufferGeometry;e.fromGeometry(r),r=e}let n=Array.from(r.attributes.position.array),a=Array.from(r.index.array),u=null==r.attributes.normal?void 0:Array.from(r.attributes.normal.array),p=null==r.attributes.uv?void 0:Array.from(r.attributes.uv.array);for(let e=0,t=n.length;e<t;e+=3){const t=[0,1,2].map((t=>n[e+t]));let r=new THREE.Vector3(t[0],t[1],t[2]);r.applyMatrix4(i),n[e+0]=r.x,n[e+1]=r.y,n[e+2]=r.z}if(o=o.concat(n),a=a.map((e=>e+s)),l=l.concat(a),c=c.concat(Array.from({length:a.length/3},((e,i)=>t))),u)for(let e=0,t=u.length;e<t;e+=3){const t=[0,1,2].map((t=>u[e+t]));let r=new THREE.Vector4(t[0],t[1],t[2],1);r.applyMatrix4(i.clone().invert().transpose()),u[e+0]=r.x,u[e+1]=r.y,u[e+2]=r.z}d=d.concat(u||Array.from({length:n.length},((e,t)=>{}))),h=h.concat(p||Array.from({length:2*n.length/3},((e,t)=>{}))),s+=n.length/3}let u={vertices:o,indices:l,normal:d,uvs:h};const p=new THREE.Plane;p.setFromNormalAndCoplanarPoint(t.normal,t.center);let m=[],f=[];for(let e=0,t=l.length;e<t;e+=3){const t=l[e+0],r=l[e+1],n=l[e+2],s=new THREE.Vector3(o[3*t+0],o[3*t+1],o[3*t+2]),d=new THREE.Vector3(o[3*r+0],o[3*r+1],o[3*r+2]),h=new THREE.Vector3(o[3*n+0],o[3*n+1],o[3*n+2]),m=i(s,d),g=i(d,h),v=i(h,s);if(m>0&&m<1&&g>0&&g<1){a(u,t,r,m),a(u,r,n,g);const i=u.vertices.length/3-2;u.indices[e+0]=i+0,u.indices[e+2]=i+1,u.indices.push(t,i+0,i+1,t,i+1,n),c.push(c[e/3],c[e/3]);if(p.distanceToPoint(d)<0)f.push(e);else{const e=u.indices.length;f.push(e-6,e-3)}}else if(m>0&&m<1&&v>0&&v<1){a(u,t,r,m),a(u,n,t,v);const i=u.vertices.length/3-2;u.indices[e+1]=i+0,u.indices[e+2]=i+1,u.indices.push(i+0,r,n,i+1,i+0,n),c.push(c[e/3],c[e/3]);if(p.distanceToPoint(s)<0)f.push(e);else{const e=u.indices.length;f.push(e-6,e-3)}}else if(g>0&&g<1&&v>0&&v<1){a(u,r,n,g),a(u,n,t,v);const i=u.vertices.length/3-2;u.indices[e+0]=i+1,u.indices[e+1]=i+0,u.indices.push(t,r,i+1,i+1,r,i+0),c.push(c[e/3],c[e/3]);if(p.distanceToPoint(h)<0)f.push(e);else{const e=u.indices.length;f.push(e-6,e-3)}}else if(0==m&&1==v&&g>0&&g<1){a(u,r,n,g);const i=u.vertices.length/3-1;u.indices[e+2]=i,u.indices.push(t,i,n),c.push(c[e/3]);if(p.distanceToPoint(d)<0)f.push(e);else{const e=u.indices.length;f.push(e-3)}}else if(1==m&&0==g&&v>0&&v<1){a(u,n,t,v);const i=u.vertices.length/3-1;u.indices[e+2]=i,u.indices.push(i,r,n),c.push(c[e/3]);if(p.distanceToPoint(s)<0)f.push(e);else{const e=u.indices.length;f.push(e-3)}}else if(1==g&&0==v&&m>0&&m<1){a(u,t,r,m);const i=u.vertices.length/3-1;u.indices[e+1]=i,u.indices.push(i,r,n),c.push(c[e/3]);if(p.distanceToPoint(s)<0)f.push(e);else{const e=u.indices.length;f.push(e-3)}}}({vertices:o,indices:l,normal:d,uvs:h}=u);let g=new THREE.Box3;for(let e=0,t=o.length;e<t;e+=3)g.expandByPoint(new THREE.Vector3(o[e+0],o[e+1],o[e+2]));g.expandByScalar(.01);const v=g.max.clone().sub(g.min),y=r.Utils.bestdim(o.length/3,v),M=new THREE.Vector3(v.x/y[0],v.y/y[1],v.z/y[2]);let E=function(e){return 73856093*Math.floor(e.x)^19349663*Math.floor(e.y)^83492791*Math.floor(e.z)},b={};for(let e=0,t=l.length;e<t;e+=3){[0,1,2].map((t=>l[e+t])).forEach((t=>{!b[t]&&(b[t]=[]),b[t].push(e/3)}))}let x={};for(let e=0,t=o.length;e<t;e+=3){const t=new THREE.Vector3(o[e+0],o[e+1],o[e+2]),i=new THREE.Vector3(t.x/M.x,t.y/M.y,t.z/M.z),r=E(i);!x[r]&&(x[r]=[]),x[r].push(e/3)}for(;0!=f.length;){const e=f.shift();m[e]=1;const t=[0,1,2].map((t=>l[e+t])),i=t.map((e=>new THREE.Vector3(o[3*e+0],o[3*e+1],o[3*e+2]))),r=i.map((e=>new THREE.Vector3(e.x/M.x,e.y/M.y,e.z/M.z)));let a=[];r.forEach((e=>a=a.concat(x[E(e)]))),a=Array.from(new Set(a));let s=[];a.forEach((function(e){null!=e&&null!=b[e]&&(s=s.concat(b[e]))})),s=Array.from(new Set(s));for(let e=0,r=s.length;e<r;e++){const r=3*s[e];if(null!=m[r])continue;let a=!1;const d=[0,1,2].map((e=>l[r+e])),h=d.map((e=>new THREE.Vector3(o[3*e+0],o[3*e+1],o[3*e+2]))),c=t.filter((e=>-1!=d.indexOf(e))).map((e=>new THREE.Vector3(o[3*e+0],o[3*e+1],o[3*e+2]))),u=1e-6*Math.max(v.x,v.y,v.z),p=i.filter((e=>{for(let t of h)if(Math.abs(t.clone().sub(e).length()-0)<u)return!0}));c.concat(p).forEach((e=>a=a||!n(e,u))),a&&(m[r+0]=1,f.push(r))}}let I=function(e){let t={},i=[],r=[],n=[],a=!1,s=!1;[...new Set(e)].forEach((e=>{[0,1,2].forEach((t=>{i.push(o[3*e+t]),r.push(d[3*e+t]),isNaN(d[3*e+t])&&(a=!0)})),[0,1].forEach((t=>{n.push(h[2*e+t]),isNaN(h[2*e+t])&&(s=!0)})),t[e]=i.length/3-1}));let l=new THREE.BufferGeometry;const c=e.map((e=>t[e]));return l.setAttribute("position",new THREE.Float32BufferAttribute(i,3)),!a&&l.setAttribute("normal",new THREE.Float32BufferAttribute(r,3)),!s&&l.setAttribute("uv",new THREE.Float32BufferAttribute(n,2)),l.setIndex(new THREE.Uint32BufferAttribute(c,1)),l},T=[];for(let t=0,i=e.length;t<i;t++){let e=[],i=[];for(let r=0;r<l.length;r+=3)c[r/3]==t&&(m[r]&&e.push(l[r+0],l[r+1],l[r+2]),!m[r]&&i.push(l[r+0],l[r+1],l[r+2]));T.push([I(e),I(i)])}return T},intersectBox:function(e,t){for(var i=new THREE.Vector3,r=new THREE.Vector3,n=0,a=e.planes,s=0;s<6;s++){var o=a[s];i.x=o.normal.x>0?t.min.x:t.max.x,r.x=o.normal.x>0?t.max.x:t.min.x,i.y=o.normal.y>0?t.min.y:t.max.y,r.y=o.normal.y>0?t.max.y:t.min.y,i.z=o.normal.z>0?t.min.z:t.max.z,r.z=o.normal.z>0?t.max.z:t.min.z;var l=o.distanceToPoint(i),d=o.distanceToPoint(r);if(l<0&&d<0)return!1;l*d>=0&&++n}return 6===n?"in":"intersect"},satForAxes:function(e,t,i,r,n){var a,s;for(a=0,s=e.length-3;a<=s;a+=3){var o=new THREE.Vector3(e[a],e[a+1],e[a+2]),l=n.x*Math.abs(o.x)+n.y*Math.abs(o.y)+n.z*Math.abs(o.z),d=t.dot(o),h=i.dot(o),c=r.dot(o);if(Math.max(-Math.max(d,h,c),Math.min(d,h,c))>l)return!1}return!0},boxIntersectsTriangle:function(e,t){var i=new THREE.Vector3,a=new THREE.Vector3,s=new THREE.Vector3,o=new THREE.Vector3,l=new THREE.Vector3,d=new THREE.Vector3,h=new THREE.Vector3,c=new THREE.Vector3,u=new THREE.Vector3;h.copy(e.getCenter(n)),c=e.max.clone().sub(h),i=t.a.clone().sub(h),a=t.b.clone().sub(h),s=t.c.clone().sub(h),o=a.clone().sub(i),l=s.clone().sub(a),d=i.clone().sub(s);var p=[0,-o.z,o.y,0,-l.z,l.y,0,-d.z,d.y,o.z,0,-o.x,l.z,0,-l.x,d.z,0,-d.x,-o.y,o.x,0,-l.y,l.x,0,-d.y,d.x,0];return!!r.GeomUtil.satForAxes(p,i,a,s,c)&&(p=[1,0,0,0,1,0,0,0,1],!!r.GeomUtil.satForAxes(p,i,a,s,c)&&(p=[(u=o.clone().cross(l)).x,u.y,u.z],r.GeomUtil.satForAxes(p,i,a,s,c)))},geometryVolume(e,t){let i=t.modelManager.isMeterUnit()?"m":"mm";const a=f(e);if(!r.Utils.isDefined(f))return{volume:null,boundingBox:null,unit:i};const s=a.position,o=a.index,l=a.normal;if(!this.isGeometryClosed(o))return console.log("object is not closed"),0;const u=new THREE.Vector3,p=new THREE.Vector3,m=new THREE.Vector3,g=new THREE.Vector3,v=new THREE.Vector3,y=new THREE.Vector3;let M=0;for(let e=0;e<o.length;e+=3){const t=3*o[e],i=3*o[e+1],n=3*o[e+2];u.set(s[t],s[t+1],s[t+2]),p.set(s[i],s[i+1],s[i+2]),m.set(s[n],s[n+1],s[n+2]),g.set(l[t],l[t+1],l[t+2]),v.set(l[i],l[i+1],l[i+2]),y.set(l[n],l[n+1],l[n+2]);const a=[u,p,m],f=d(a),E=h(a),b=this.triangleArea(f);if(b<r.Math.EPSILON12)continue;const x=b*E.topPoints[0].z,{maxIndex:I}=E,T=[...E.topPoints];T.splice(I,1);const C=[...a];C.splice(I,1),T.push(C[0]),T.push(a[I]),C.push(T[1]),C.push(a[I]);let w=this.mitsubishiConeVolume(T);w+=this.mitsubishiConeVolume(C),w=x-w,w=c([g,v,y])?w:-w,M+=w}const E=a.boundingBox;return M=function(e,t){const i=t.getSize(n);return e>i.x*i.y*i.z||e<r.Math.EPSILON4?null:e}(M,E),{volume:M,boundingBox:E,unit:i}},isGeometryClosed(e){const t={};return e.forEach(((i,n)=>{let a=(n+1)%3==0?n-2:n+1;a=e[a];const s=i>a?`${i}_${a}`:`${a}_${i}`;let o=t[s];r.Utils.isDefined(o)?o&&(t[s]=!1):t[s]=!0})),!0},triangleArea:i=>!!Array.isArray(i)&&(3===i.length&&(e.subVectors(i[1],i[0]),t.subVectors(i[2],i[0]),n.crossVectors(e,t),n.length()/2)),mitsubishiConeVolume(r){if(!Array.isArray(r))return!1;if(4!==r.length)return!1;return e.subVectors(r[1],r[0]),t.subVectors(r[2],r[0]),i.subVectors(r[3],r[0]),n.crossVectors(e,t),Math.abs(n.dot(i))/6},applyMatrix4ToNormalBuffer(e,t){t&&(o.getNormalMatrix(e),r.GeomUtil.applyMatrix3ToBuffer(o,t),r.GeomUtil.normalizeBuffer(t))},swapGeometryIndex(e){let t;for(let i=0,r=e.length;i<r;i+=3)t=e[i+1],e[i+1]=e[i+2],e[i+2]=t},sliceGeometryBuffer(e,t){if(!t)return;let{position:i,index:r,normal:n,uv:a}=e;r=r.slice(t.indexStart,t.indexStart+t.indexCount),i=i.slice(t.positionStart,t.positionStart+t.positionCount),n=n?n.slice(t.positionStart,t.positionStart+t.positionCount):null,a=a&&t.uvCount?a.slice(t.uvStart,t.uvStart+t.uvCount):null;const s=t.positionStart/3;r.forEach((function(e,t,i){i[t]-=s})),e.index=r,e.position=i,e.normal=n,e.uv=a},getGeometryBuffer(e,t,i,n){if(!e||!e.buffer)return null;let a=null,s=null,o=null,l=null;e.isDataView?(s=Uint32Array.from(e.buffer.I),a=Float32Array.from(e.buffer.P),o=Float32Array.from(e.buffer.N),l=e.buffer.UV&&e.buffer.UV.length?Float32Array.from(e.buffer.UV):null):(s=new Uint32Array(e.buffer.I),a=new Float32Array(e.buffer.P),o=new Float32Array(e.buffer.N),l=e.buffer.UV&&e.buffer.UV.byteLength?new Float32Array(e.buffer.UV):null);const d={index:s,position:a,normal:o,uv:l};return e.indexInfo&&r.GeomUtil.sliceGeometryBuffer(d,e.indexInfo),i&&r.GeomUtil.swapGeometryIndex(d.index),(n=r.Utils.defaultValue(n,!0))&&(r.GeomUtil.applyMatrix4ToBuffer(t,d.position),r.GeomUtil.applyMatrix4ToNormalBuffer(t,d.normal)),d},getLineGeometryBuffer(e,t,i,n){if(!e||!e.buffer)return null;let a=e.isDataView?Float32Array.from(e.buffer.P):new Float32Array(e.buffer.P);const s={index:e.isDataView?Uint32Array.from(e.buffer.I):new Uint32Array(e.buffer.I),position:a,normal:null,uv:null};return e.indexInfo&&r.GeomUtil.sliceGeometryBuffer(s,e.indexInfo),(n=r.Utils.defaultValue(n,!0))&&r.GeomUtil.applyMatrix4ToBuffer(t,s.position),s},getPipeGeometryBuffer(e,t,i){const n=r.GeomUtil.UnitCylinderInstance;let a=Float32Array.from(n.attributes.position.array);const s={index:Uint32Array.from(n.index.array),position:a,normal:Float32Array.from(n.attributes.normal.array),uv:null};return t&&r.GeomUtil.swapGeometryIndex(s.index),(i=r.Utils.defaultValue(i,!0))&&(r.GeomUtil.applyMatrix4ToBuffer(e,s.position),r.GeomUtil.applyMatrix4ToNormalBuffer(e,s.normal)),s},getPipeMGeometryBuffer(e,t,i,n){let a=r.GeomUtil.getPipeMBuffer(e),s=Float32Array.from(a.vertex);const o={index:Uint32Array.from(a.index),position:s,normal:Float32Array.from(a.normal),uv:a.uv?Float32Array.from(a.uv):null};return i&&r.GeomUtil.swapGeometryIndex(o.index),(n=r.Utils.defaultValue(n,!0))&&(r.GeomUtil.applyMatrix4ToBuffer(t,o.position),r.GeomUtil.applyMatrix4ToNormalBuffer(t,o.normal)),o},getBoxMGeometryBuffer(e,t,i,n){let a=r.GeomUtil.getBoxMBuffer(e),s=Float32Array.from(a.vertex);const o={index:Uint32Array.from(a.index),position:s,normal:Float32Array.from(a.normal),uv:a.uv?Float32Array.from(a.uv):null};return i&&r.GeomUtil.swapGeometryIndex(o.index),(n=r.Utils.defaultValue(n,!0))&&(r.GeomUtil.applyMatrix4ToBuffer(t,o.position),r.GeomUtil.applyMatrix4ToNormalBuffer(t,o.normal)),o},getBufferGeometry(e,t){if(!e)return null;const i=new THREE.BufferGeometry;let n;return t?(n=Uint32Array.from(e.I),r.GeomUtil.swapGeometryIndex(n)):n=e.I,i.setIndex(new THREE.BufferAttribute(n,1)),i.setAttribute("position",new THREE.BufferAttribute(e.P,3)),e.N?i.setAttribute("normal",new THREE.BufferAttribute(e.N,3)):i.computeVertexNormals(),e.UV&&i.setAttribute("uv",new THREE.BufferAttribute(e.UV,2)),i},getLineBufferGeometry(e,t){if(!e)return null;const i=new THREE.BufferGeometry;return i.setIndex(new THREE.BufferAttribute(e.I,1)),i.setAttribute("position",new THREE.BufferAttribute(e.P,3)),i},getPipeBufferGeometry(e,t){const i=t?r.GeomUtil.getUnitLightmapPipe():r.GeomUtil.UnitCylinderInstance;return e?r.GeomUtil.copyGeometryIndexOnly(i,!0):i},getPipeMBufferGeometry(e,t){const i=t?r.GeomUtil.getUnitLightmapPipeM():r.GeomUtil.getUnitTextureCylinder();return e?r.GeomUtil.copyGeometryIndexOnly(i,!0):i},getBoxBufferGeometry(e,t){const i=t?r.GeomUtil.getUnitLightmapBox():r.GeomUtil.UnitBoxInstance;return e?r.GeomUtil.copyGeometryIndexOnly(i,!0):i},getBoxMBufferGeometry(e,t){const i=t?r.GeomUtil.getUnitLightmapBoxM():r.GeomUtil.getUnitTextureBox();return e?r.GeomUtil.copyGeometryIndexOnly(i,!0):i},copyGeometryIndexOnly(e,t){if(Array.isArray(e)){let i=[];return e.forEach((e=>{const n=new THREE.BufferGeometry,a=Uint32Array.from(e.getIndex().array);t&&r.GeomUtil.swapGeometryIndex(a),n.setIndex(new THREE.BufferAttribute(a,1)),n.setAttribute("position",e.getAttribute("position"));const s=e.getAttribute("normal");s?n.setAttribute("normal",s):n.computeVertexNormals();const o=e.getAttribute("uv");o&&n.setAttribute("uv",o),i.push(n)})),i}let i=new THREE.BufferGeometry;const n=Uint32Array.from(e.getIndex().array);t&&r.GeomUtil.swapGeometryIndex(n),i.setIndex(new THREE.BufferAttribute(n,1)),i.setAttribute("position",e.getAttribute("position"));const a=e.getAttribute("normal");a?i.setAttribute("normal",a):i.computeVertexNormals();const s=e.getAttribute("uv");return s&&i.setAttribute("uv",s),i}},r.GeomUtil.getBoxMBuffer=function(){for(var e,t,i=[],n=[],a=[],s=0,o=0;o<6;++o){var l=r.GeomUtil.getBoxData(o);for(e=0,t=l.vertex.length;e<t;e++)i.push(l.vertex[e]);for(e=0,t=l.index.length;e<t;e++)a.push(l.index[e]+s);for(s+=l.vertex.length/3,e=0,t=l.normal.length;e<t;e++)n.push(l.normal[e])}return function(e){var t=null;if(e){var s=new THREE.Matrix3,o=new THREE.Vector3;t=[];for(var l=0;l<6;++l){var d=r.GeomUtil.getBoxData(l);s.set(e[6*l],e[6*l+2],e[6*l+4],e[6*l+1],e[6*l+3],e[6*l+5],0,0,1);for(var h=0,c=d.uv.length;h<c;h+=2)o.set(d.uv[h],d.uv[h+1],1),o.applyMatrix3(s),t.push(o.x),t.push(o.y)}}return{vertex:i,normal:n,uv:t,index:a}}}(),r.GeomUtil.getPipeMBuffer=function(){var e=r.GeomUtil.getPipeData(32),t=e.edges,i=e.vertex,n=e.normal,a=e.index;return function(e){var s=null;if(!(!e||18!==e.length)){s=[];for(var o=[],l=0,d=e.length/6;l<d;l++){var h=new THREE.Matrix3;h.set(e[6*l],e[6*l+2],e[6*l+4],e[6*l+1],e[6*l+3],e[6*l+5],0,0,1),o.push(h)}for(var c=r.GeomUtil.getPipeData(32),u=4*(t+1),p=u+2*t,m=new THREE.Vector3,f=0,g=c.uv.length;f<g;f+=2)m.set(c.uv[f],c.uv[f+1],1),f<u?m.applyMatrix3(o[0]):f<p?m.applyMatrix3(o[1]):m.applyMatrix3(o[2]),s.push(m.x),s.push(m.y)}return{vertex:i,normal:n,uv:s,index:a}}}(),r.GeomUtil.isVector3Equal=function(e,t,i){return void 0===i?t.x===e.x&&t.y===e.y&&t.z===e.z:Math.abs(t.x-e.x)<i&&Math.abs(t.y-e.y)<i&&Math.abs(t.z-e.z)<i};const u=new THREE.Vector3,p=new THREE.Quaternion,m=new THREE.Vector3;function f(e){const t=e.children;if(t.length<=0)return null;let i=[],a=[],o=[];const l=new THREE.Box3;let d=0;return t.forEach((e=>{e.matrix.decompose(u,p,m),u.set(0,0,0),s.compose(u,p,m);const t=e.geometry;if(l.union(r.GeomUtil.getBoundingBoxWorldOfMesh(e).applyMatrix4(e.matrix)),!r.Utils.isDefined(t.getAttribute("normal")))return;let h=t.getAttribute("normal").array;if(!r.Utils.isDefined(t.getAttribute("position")))return;let c,f=t.getAttribute("position").array;if(r.Utils.isDefined(t.getIndex()))c=t.getIndex().array,c=Array.from(c),c.forEach(((e,t)=>{c[t]=e+d}));else{c=[];for(let e=0;e<f.length/3;++e)c.push(e+d)}h=Array.from(h),a=a.concat(c),f=Array.from(f);for(let t=0;t<f.length;t+=3)n.set(f[t],f[t+1],f[t+2]),n.applyMatrix4(e.matrix),o.push(n.x),o.push(n.y),o.push(n.z),n.set(h[t],h[t+1],h[t+2]),n.applyMatrix4(s),n.normalize(),i.push(n.x),i.push(n.y),i.push(n.z);d=o.length/3})),{position:o,normal:i,index:a,boundingBox:l}}})(),r.Logger={log:function(){r.GlobalData.DEBUG&&console.log.apply(console,arguments)},debug:function(){r.GlobalData.DEBUG&&console.debug.apply(console,arguments)},warn:function(){r.GlobalData.DEBUG&&console.warn.apply(console,arguments)},error:function(){r.GlobalData.DEBUG&&console.error.apply(console,arguments)},time:function(){r.GlobalData.DEBUG&&console.time.apply(console,arguments)},timeEnd:function(){r.GlobalData.DEBUG&&console.timeEnd.apply(console,arguments)}},THREE.BasisTextureLoader=function(e){THREE.Loader.call(this,e),this.transcoderPath="",this.transcoderBinary=null,this.transcoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.workerConfig=null,this.detectedSupport=!1},THREE.BasisTextureLoader.taskCache=new WeakMap,THREE.BasisTextureLoader.prototype=Object.assign(Object.create(THREE.Loader.prototype),{constructor:THREE.BasisTextureLoader,setTranscoderPath:function(e){return this.transcoderPath=e,this},setWorkerLimit:function(e){return this.workerLimit=e,this},detectSupport:function(e){return this.workerConfig={astcSupported:e.extensions.has("WEBGL_compressed_texture_astc"),etc1Supported:e.extensions.has("WEBGL_compressed_texture_etc1"),etc2Supported:e.extensions.has("WEBGL_compressed_texture_etc"),dxtSupported:e.extensions.has("WEBGL_compressed_texture_s3tc"),bptcSupported:e.extensions.has("EXT_texture_compression_bptc"),pvrtcSupported:e.extensions.has("WEBGL_compressed_texture_pvrtc")||e.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")},this.detectedSupport=!0,this},supportsImageBitmap:function(e){return"function"==typeof e.arrayBuffer},loadFromBlob:function(e,t,i,r){var n=new THREE.CompressedTexture;t.arrayBuffer().then((e=>{if(THREE.BasisTextureLoader.taskCache.has(e))return THREE.BasisTextureLoader.taskCache.get(e).promise.then(i).catch(r);this._createTexture([e]).then((function(e){n.copy(e),n.needsUpdate=!0,i&&i(n)})).catch(r)}))},load:function(e,t,i,r){var n=new THREE.FileLoader(this.manager);n.setResponseType("arraybuffer"),n.setWithCredentials(this.withCredentials);var a=new THREE.CompressedTexture;return n.load(e,(e=>{if(THREE.BasisTextureLoader.taskCache.has(e))return THREE.BasisTextureLoader.taskCache.get(e).promise.then(t).catch(r);this._createTexture([e]).then((function(e){a.copy(e),a.needsUpdate=!0,t&&t(a)})).catch(r)}),i,r),a},parseInternalAsync:function(e){for(var{levels:t}=e,i=new Set,r=0;r<t.length;r++)i.add(t[r].data.buffer);let n=Array.from(i);return THREE.BasisTextureLoader.taskCache.has(n[0])?THREE.BasisTextureLoader.taskCache.get(n[0]).promise:this._createTexture(n,{...e,lowLevel:!0})},_createTexture:function(e,t){for(var i,r,n=t||{},a=0,s=0;s<e.length;s++)a+=e[s].byteLength;var o=this._allocateWorker(a).then((t=>(i=t,r=this.workerNextTaskID++,new Promise(((t,a)=>{i._callbacks[r]={resolve:t,reject:a},i.postMessage({type:"transcode",id:r,buffers:e,taskConfig:n},e)}))))).then((e=>{var{mipmaps:t,width:i,height:r,format:n}=e,a=new THREE.CompressedTexture(t,i,r,n,THREE.UnsignedByteType);return a.minFilter=1===t.length?THREE.LinearFilter:THREE.LinearMipmapLinearFilter,a.magFilter=THREE.LinearFilter,a.generateMipmaps=!1,a.needsUpdate=!0,a}));return o.catch((()=>!0)).then((()=>{i&&r&&(i._taskLoad-=a,delete i._callbacks[r])})),THREE.BasisTextureLoader.taskCache.set(e[0],{promise:o}),o},_initTranscoder:function(){if(!this.transcoderPending){var e=new THREE.FileLoader(this.manager);e.setPath(this.transcoderPath),e.setWithCredentials(this.withCredentials);var t=new Promise(((t,i)=>{e.load("basis_transcoder.js",t,void 0,i)})),i=new THREE.FileLoader(this.manager);i.setPath(this.transcoderPath),i.setResponseType("arraybuffer"),i.setWithCredentials(this.withCredentials);var r=new Promise(((e,t)=>{i.load("basis_transcoder.wasm",e,void 0,t)}));this.transcoderPending=Promise.all([t,r]).then((([e,t])=>{var i=THREE.BasisTextureLoader.BasisWorker.toString(),r=["/* constants */","var _EngineFormat = "+JSON.stringify(THREE.BasisTextureLoader.EngineFormat),"var _TranscoderFormat = "+JSON.stringify(THREE.BasisTextureLoader.TranscoderFormat),"var _BasisFormat = "+JSON.stringify(THREE.BasisTextureLoader.BasisFormat),"/* basis_transcoder.js */",e,"/* worker */",i.substring(i.indexOf("{")+1,i.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([r])),this.transcoderBinary=t}))}return this.transcoderPending},_allocateWorker:function(e){return this._initTranscoder().then((()=>{var t;this.workerPool.length<this.workerLimit?((t=new Worker(this.workerSourceURL))._callbacks={},t._taskLoad=0,t.postMessage({type:"init",config:this.workerConfig,transcoderBinary:this.transcoderBinary}),t.onmessage=function(e){var i=e.data;switch(i.type){case"transcode":t._callbacks[i.id].resolve(i);break;case"error":t._callbacks[i.id].reject(i);break;default:console.error('THREE.BasisTextureLoader: Unexpected message, "'+i.type+'"')}},this.workerPool.push(t)):this.workerPool.sort((function(e,t){return e._taskLoad>t._taskLoad?-1:1}));return(t=this.workerPool[this.workerPool.length-1])._taskLoad+=e,t}))},dispose:function(){for(var e=0;e<this.workerPool.length;e++)this.workerPool[e].terminate();return this.workerPool.length=0,this}}),THREE.BasisTextureLoader.BasisFormat={ETC1S:0,UASTC_4x4:1},THREE.BasisTextureLoader.TranscoderFormat={ETC1:0,ETC2:1,BC1:2,BC3:3,BC4:4,BC5:5,BC7_M6_OPAQUE_ONLY:6,BC7_M5:7,PVRTC1_4_RGB:8,PVRTC1_4_RGBA:9,ASTC_4x4:10,ATC_RGB:11,ATC_RGBA_INTERPOLATED_ALPHA:12,RGBA32:13,RGB565:14,BGR565:15,RGBA4444:16},THREE.BasisTextureLoader.EngineFormat={RGBAFormat:THREE.RGBAFormat,RGBA_ASTC_4x4_Format:THREE.RGBA_ASTC_4x4_Format,RGBA_BPTC_Format:THREE.RGBA_BPTC_Format,RGBA_ETC2_EAC_Format:THREE.RGBA_ETC2_EAC_Format,RGBA_PVRTC_4BPPV1_Format:THREE.RGBA_PVRTC_4BPPV1_Format,RGBA_S3TC_DXT5_Format:THREE.RGBA_S3TC_DXT5_Format,RGB_ETC1_Format:THREE.RGB_ETC1_Format,RGB_ETC2_Format:THREE.RGB_ETC2_Format,RGB_PVRTC_4BPPV1_Format:THREE.RGB_PVRTC_4BPPV1_Format,RGB_S3TC_DXT1_Format:THREE.RGB_S3TC_DXT1_Format},THREE.BasisTextureLoader.BasisWorker=function(){var e,t,i,r=_EngineFormat,n=_TranscoderFormat,a=_BasisFormat;onmessage=function(r){var n,s=r.data;switch(s.type){case"init":e=s.config,n=s.transcoderBinary,t=new Promise((e=>{i={wasmBinary:n,onRuntimeInitialized:e},BASIS(i)})).then((()=>{i.initializeBasis()}));break;case"transcode":t.then((()=>{try{for(var{width:e,height:t,hasAlpha:r,mipmaps:n,format:o}=s.taskConfig.lowLevel?function(e){var{basisFormat:t,width:r,height:n,hasAlpha:s}=e,{transcoderFormat:o,engineFormat:l}=d(t,r,n,s),m=i.getBytesPerBlockOrPixel(o);h(i.isFormatSupported(o),"THREE.BasisTextureLoader: Unsupported format.");var f=[];if(t===a.ETC1S){var g=new i.LowLevelETC1SImageTranscoder,{endpointCount:v,endpointsData:y,selectorCount:M,selectorsData:E,tablesData:b}=e.globalData;try{h(g.decodePalettes(v,y,M,E),"THREE.BasisTextureLoader: decodePalettes() failed."),h(g.decodeTables(b),"THREE.BasisTextureLoader: decodeTables() failed.");for(var x=0;x<e.levels.length;x++){var I=e.levels[x],T=e.globalData.imageDescs[x],C=p(o,I.width,I.height),w=new Uint8Array(C);h(g.transcodeImage(o,w,C/m,I.data,c(o,I.width),u(o,I.height),I.width,I.height,I.index,T.rgbSliceByteOffset,T.rgbSliceByteLength,T.alphaSliceByteOffset,T.alphaSliceByteLength,T.imageFlags,s,!1,0,0),"THREE.BasisTextureLoader: transcodeImage() failed for level "+I.index+"."),f.push({data:w,width:I.width,height:I.height})}}finally{g.delete()}}else for(x=0;x<e.levels.length;x++){C=p(o,(I=e.levels[x]).width,I.height),w=new Uint8Array(C);h(i.transcodeUASTCImage(o,w,C/m,I.data,c(o,I.width),u(o,I.height),I.width,I.height,I.index,0,I.data.byteLength,0,s,!1,0,0,-1,-1),"THREE.BasisTextureLoader: transcodeUASTCImage() failed for level "+I.index+"."),f.push({data:w,width:I.width,height:I.height})}return{width:r,height:n,hasAlpha:s,mipmaps:f,format:l}}(s.taskConfig):function(e){var t=new i.BasisFile(new Uint8Array(e)),r=t.isUASTC()?a.UASTC_4x4:a.ETC1S,n=t.getImageWidth(0,0),s=t.getImageHeight(0,0),o=t.getNumLevels(0),l=t.getHasAlpha();function h(){t.close(),t.delete()}var{transcoderFormat:c,engineFormat:u}=d(r,n,s,l);if(!n||!s||!o)throw h(),new Error("THREE.BasisTextureLoader:\tInvalid texture");if(!t.startTranscoding())throw h(),new Error("THREE.BasisTextureLoader: .startTranscoding failed");for(var p=[],m=0;m<o;m++){var f=t.getImageWidth(0,m),g=t.getImageHeight(0,m),v=new Uint8Array(t.getImageTranscodedSizeInBytes(0,m,c));if(!t.transcodeImage(v,0,m,c,0,l))throw h(),new Error("THREE.BasisTextureLoader: .transcodeImage failed.");p.push({data:v,width:f,height:g})}return h(),{width:n,height:s,hasAlpha:l,mipmaps:p,format:u}}(s.buffers[0]),l=[],m=0;m<n.length;++m)l.push(n[m].data.buffer);self.postMessage({type:"transcode",id:s.id,width:e,height:t,hasAlpha:r,mipmaps:n,format:o},l)}catch(e){console.error(e),self.postMessage({type:"error",id:s.id,error:e.message})}}))}};var s=[{if:"astcSupported",basisFormat:[a.UASTC_4x4],transcoderFormat:[n.ASTC_4x4,n.ASTC_4x4],engineFormat:[r.RGBA_ASTC_4x4_Format,r.RGBA_ASTC_4x4_Format],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[a.ETC1S,a.UASTC_4x4],transcoderFormat:[n.BC7_M5,n.BC7_M5],engineFormat:[r.RGBA_BPTC_Format,r.RGBA_BPTC_Format],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[a.ETC1S,a.UASTC_4x4],transcoderFormat:[n.BC1,n.BC3],engineFormat:[r.RGB_S3TC_DXT1_Format,r.RGBA_S3TC_DXT5_Format],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[a.ETC1S,a.UASTC_4x4],transcoderFormat:[n.ETC1,n.ETC2],engineFormat:[r.RGB_ETC2_Format,r.RGBA_ETC2_EAC_Format],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[a.ETC1S,a.UASTC_4x4],transcoderFormat:[n.ETC1,n.ETC1],engineFormat:[r.RGB_ETC1_Format,r.RGB_ETC1_Format],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[a.ETC1S,a.UASTC_4x4],transcoderFormat:[n.PVRTC1_4_RGB,n.PVRTC1_4_RGBA],engineFormat:[r.RGB_PVRTC_4BPPV1_Format,r.RGBA_PVRTC_4BPPV1_Format],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0}],o=s.sort((function(e,t){return e.priorityETC1S-t.priorityETC1S})),l=s.sort((function(e,t){return e.priorityUASTC-t.priorityUASTC}));function d(t,i,s,d){for(var h=t===a.ETC1S?o:l,c=0;c<h.length;c++){var u=h[c];if(e[u.if]&&(u.basisFormat.includes(t)&&(!u.needsPowerOfTwo||m(i)&&m(s))))return{transcoderFormat:u.transcoderFormat[d?1:0],engineFormat:u.engineFormat[d?1:0]}}return console.warn("THREE.BasisTextureLoader: No suitable compressed texture format found. Decoding to RGBA32."),{transcoderFormat:n.RGBA32,engineFormat:r.RGBAFormat}}function h(e,t){if(!e)throw new Error(t)}function c(e,t){return Math.ceil(t/i.getFormatBlockWidth(e))}function u(e,t){return Math.ceil(t/i.getFormatBlockHeight(e))}function p(e,t,r){var a=i.getBytesPerBlockOrPixel(e);if(i.formatIsUncompressed(e))return t*r*a;if(e===n.PVRTC1_4_RGB||e===n.PVRTC1_4_RGBA){var s=t+3&-4,o=r+3&-4;return(Math.max(8,s)*Math.max(8,o)*4+7)/8}return c(e,t)*u(e,r)*a}function m(e){return e<=2||0==(e&e-1)&&0!==e}},function(){class e extends THREE.TextureLoader{constructor(e){super(e),this.options={imageOrientation:"none",premultiplyAlpha:"none",colorSpaceConversion:"none"}}setOptions(e){return this.options=e,this}supportsImageBitmap(){return"function"==typeof createImageBitmap}loadFromBlob(e,t,i,r){void 0===e&&(e=""),void 0!==this.path&&(e=this.path+e),e=this.manager.resolveURL(e);const n=this,a=THREE.Cache.get(e);if(void 0!==a)return n.manager.itemStart(e),setTimeout((()=>{i&&i(a),n.manager.itemEnd(e)}),0),a;Promise.resolve().then((()=>createImageBitmap(t,n.options))).then((t=>{const r=new THREE.CanvasTexture(t);THREE.Cache.add(e,r),i&&i(r),n.manager.itemEnd(e)})).catch((t=>{r&&r(t),n.manager.itemError(e),n.manager.itemEnd(e)})),n.manager.itemStart(e)}}r.TextureLoader=e}();var a=166,s={RGB:0,RRR:3,GGG:4,AAA:15},o={RGB:0,RGBA:3,RRR:4,RRRG:5},l=2,d=2;class h extends THREE.CompressedTextureLoader{constructor(e){super(e),this.basisLoader=new THREE.BasisTextureLoader(e),this.zstd=new ZSTDDecoder,this.zstd.init(),"undefined"!=typeof MSC_TRANSCODER&&console.warn('THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.')}setTranscoderPath(e){return this.basisLoader.setTranscoderPath(e),this}setWorkerLimit(e){return this.basisLoader.setWorkerLimit(e),this}detectSupport(e){return this.basisLoader.detectSupport(e),this}dispose(){return this.basisLoader.dispose(),this}load(e,t,i,r){var n=this,a=new THREE.CompressedTexture;return new Promise((function(t,r){new THREE.FileLoader(n.manager).setPath(n.path).setResponseType("arraybuffer").load(e,t,i,r)})).then((function(e){n.parse(e,(function(e){a.copy(e),a.needsUpdate=!0,t&&t(a)}),r)})).catch(r),a}parse(e,t,i){var r=this,n=readKTX(new Uint8Array(e));if(n.pixelDepth>0)throw new Error("THREE.KTX2Loader: Only 2D textures are currently supported.");if(n.layerCount>1)throw new Error("THREE.KTX2Loader: Array textures are not currently supported.");if(n.faceCount>1)throw new Error("THREE.KTX2Loader: Cube textures are not currently supported.");var s=A.getBasicDFD(n);return A.createLevels(n,this.zstd).then((function(e){var t=s.colorModel===a?THREE.BasisTextureLoader.BasisFormat.UASTC_4x4:THREE.BasisTextureLoader.BasisFormat.ETC1S,i={levels:e,width:n.pixelWidth,height:n.pixelHeight,basisFormat:t,hasAlpha:A.getAlpha(n)};return t===THREE.BasisTextureLoader.BasisFormat.ETC1S&&(i.globalData=n.globalData),r.basisLoader.parseInternalAsync(i)})).then((function(e){e.encoding=s.transferFunction===d?THREE.sRGBEncoding:THREE.LinearEncoding,e.premultiplyAlpha=A.getPremultiplyAlpha(n),t(e)})).catch(i),this}}THREE.KTX2Loader=h;var c,u,p,m,f,g,v,y,M,E,b,x,I,T,C,w,S,A={createLevels:async function(e,t){e.supercompressionScheme===l&&await t.init();for(var i=[],r=e.pixelWidth,n=e.pixelHeight,a=0;a<e.levels.length;a++){var s=Math.max(1,Math.floor(r/Math.pow(2,a))),o=Math.max(1,Math.floor(n/Math.pow(2,a))),d=e.levels[a].levelData;e.supercompressionScheme===l&&(d=t.decode(d,e.levels[a].uncompressedByteLength)),i.push({index:a,width:s,height:o,data:d})}return i},getBasicDFD:function(e){return e.dataFormatDescriptor[0]},getAlpha:function(e){var t=this.getBasicDFD(e);return t.colorModel===a?(15&t.samples[0].channelID)===o.RGBA:2===t.samples.length&&(15&t.samples[1].channelID)===s.AAA},getPremultiplyAlpha:function(e){return!!(1&this.getBasicDFD(e).flags)}};(()=>{let e=null,t=null,i=null,n=null,a=null;class s{constructor(){}}s.DefaultMaterial=new THREE.MeshPhongMaterial({color:255,side:THREE.DoubleSide}),s.DefaultWireframeColor={color:new THREE.Color(0,0,0),opacity:.4},s.SetDefaultWireframeColor=e=>{s.DefaultWireframeColor.color.setRGB(e.red/255,e.green/255,e.blue/255),s.DefaultWireframeColor.opacity=e.alpha},s.getBasisLibUrl=()=>(i||(i=window.BimfaceLoaderConfig&&window.BimfaceLoaderConfig.fullStaticHost?window.BimfaceLoaderConfig.fullStaticHost+"/lib/basis/":"../../lib/basis/"),i),s.getBasisTextureLoader=()=>(n||(n=new THREE.BasisTextureLoader,n.setTranscoderPath(r.MaterialUtil.getBasisLibUrl())),n),s.getKTX2TextureLoader=()=>(a||(a=new THREE.KTX2Loader,a.setTranscoderPath(r.MaterialUtil.getBasisLibUrl())),a),s.getDefaultStandardMaterial=()=>(e||(e=new r.CloudStandardMaterial({color:13024187,side:THREE.DoubleSide})),e),s.getDefaultInstanceMaterial=()=>(t||(t=new r.CloudStandardMaterial({color:13024187,side:THREE.DoubleSide}),t.forInstance=!0,t.defines.USE_INSTANCE="",t.defines.USE_INSTANCE_NORMAL="",t.colorState=r.EnumShaderColorState.BLINK,t.refreshUniforms()),t),s.createInstancePhongMaterial=e=>e.clone(),s.updateBasicMaterial=(e,t)=>{e.needsUpdate=!0},s.setMatrixUniform=e=>{r.ShaderMaterial.ShaderLib.base_cust_clip.uniforms.transformMatrix.value=e},s.createPhongMaterial=e=>{let t=new THREE.MeshPhongMaterial(e);return t.type="FillFacePhong",t.uniforms=THREE.UniformsUtils.merge([THREE.ShaderLib.fillFacePhong.uniforms]),t.vertexShader=THREE.ShaderLib.fillFacePhong.vertexShader,t.fragmentShader=THREE.ShaderLib.fillFacePhong.fragmentShader,t.side=THREE.DoubleSide,t},s.createStandardMaterial=(e,t)=>{let i;return t?(i=new z.IBLMaterial(e),i.type="IBL"):i=new r.CloudStandardMaterial(e),e.fillMap&&(i.defines.USE_FILLPATTERN=""),i},s.createInstanceMaterial=(e,t,i)=>{let n=r.MaterialUtil.createStandardMaterial(e,i);return n.forInstance=!0,n.defines.USE_INSTANCE="",t&&(n.defines.USE_INSTANCE_NORMAL=""),n.colorState=r.EnumShaderColorState.BLINK,n.refreshUniforms(),n},s.createNewStyleMaterial=e=>{let t=new THREE.MeshStandardMaterial(e);return t.type="NewStyle",t.uniforms=THREE.UniformsUtils.merge([THREE.ShaderLib.standard.uniforms]),t.vertexShader=THREE.ShaderLib.newStyle.vertexShader,t.fragmentShader=THREE.ShaderLib.newStyle.fragmentShader,t.metalness=0,t},s.createHighlightMaterial=()=>s.createStandardMaterial(r.GlobalData.SelectionColor),s.getBlinkMaterial=(e,t)=>{const i=r.MaterialUtil.getMaterialParameters(e);let n=r.MaterialUtil.createStandardMaterial(i);return n.blinkColor.copy(t),n.colorState=r.EnumShaderColorState.BLINK,n.refreshUniforms(),n},s.resetCompressParm=(e,t)=>{let i=!1;if(r.Utils.isDefined(t.useCompressedNormal)&&e.useCompressedNormal!==t.useCompressedNormal&&(i=!0),r.Utils.isDefined(t.useCompressedColor)&&e.useCompressedColor!==t.useCompressedColor&&(i=!0),r.Utils.isDefined(t.useCompressedUv)&&e.useCompressedUv!==t.useCompressedUv&&(i=!0),i){const i=e.clone();return i.useCompressedColor=t.useCompressedColor,delete i.defines.CCOLOR,i.useCompressedNormal=t.useCompressedNormal,delete i.defines.CNORMAL,r.Utils.isDefined(t.useCompressedUv)&&(i.useCompressedUv=t.useCompressedUv,i.uvCenter=t.uvCenter,i.uvHalfExtent=t.uvHalfExtent),delete i.defines.USE_COMPRESS_UV,r.MaterialUtil.setCompressParm(i,t),i}return e},s.setCompressParm=(e,t)=>{r.Utils.isDefined(t.useCompressedNormal)&&!0===t.useCompressedNormal&&(e.defines.CNORMAL="",e.useCompressedNormal=!0),r.Utils.isDefined(t.useCompressedColor)&&!0===t.useCompressedColor&&(e.defines.CCOLOR="",e.useCompressedColor=!0),r.Utils.isDefined(t.useCompressedUv)&&!0===t.useCompressedUv&&(e.defines.USE_COMPRESS_UV="",e.useCompressedUv=!0)},s.getMaterialParameters=e=>{let t={};return e.hasOwnProperty("color")&&(t.color=e.color),t.opacity=1,t.transparent=!1,e.hasOwnProperty("opacity")&&(t.opacity=e.opacity,e.opacity<1&&(t.transparent=!0)),e.hasOwnProperty("side")&&(t.side=e.side),e.hasOwnProperty("emissive")&&(t.emissive=e.emissive),e.hasOwnProperty("specular")&&(t.specular=e.specular),e.hasOwnProperty("shininess")&&(t.shininess=e.shininess),e.hasOwnProperty("map")&&(t.map=e.map),e.useAlphaMap&&(t.useAlphaMap=e.useAlphaMap),e.hasOwnProperty("bumpMap")&&(t.bumpMap=e.bumpMap),e.hasOwnProperty("bumpScale")&&(t.bumpScale=e.bumpScale),e.hasOwnProperty("normalMap")&&(t.normalMap=e.normalMap),e.hasOwnProperty("normalScale")&&(t.normalScale=e.normalScale),e.hasOwnProperty("alphaMap")&&(t.alphaMap=e.alphaMap),e.hasOwnProperty("alphaTest")&&(t.alphaTest=e.alphaTest),e.hasOwnProperty("transparent")&&(t.transparent=e.transparent),e.hasOwnProperty("emissiveMap")&&(t.emissiveMap=e.emissiveMap),e.hasOwnProperty("envMap")&&(t.envMap=e.envMap),e.hasOwnProperty("envMapIntensity")&&(t.envMapIntensity=e.envMapIntensity),e.hasOwnProperty("roughness")&&(t.roughness=e.roughness),e.hasOwnProperty("metalness")&&(t.metalness=e.metalness),e.hasOwnProperty("originRoughness")&&(t.originRoughness=e.originRoughness),e.hasOwnProperty("originMetalness")&&(t.originMetalness=e.originMetalness),r.GlobalData.IBL&&e.hasOwnProperty("iblProbe")&&(t.iblProbe=e.iblProbe),e.hasOwnProperty("shift")&&(t.shift=e.shift),e.hasOwnProperty("pureColor")&&(t.pureColor=e.pureColor),e.hasOwnProperty("tag")&&(t.tag=e.tag),e.hasOwnProperty("textureColor")&&(t.textureColor=e.textureColor),e.hasOwnProperty("imageFade")&&(t.imageFade=e.imageFade),"cloudStandard"==e.type&&e.hasOwnProperty("lights")&&(t.lights=e.lights),e.hasOwnProperty("lightMap")&&(t.lightMap=e.lightMap),e.hasOwnProperty("lightMapIntensity")&&(t.lightMapIntensity=e.lightMapIntensity),e.hasOwnProperty("viewportSize")&&(t.viewportSize=e.viewportSize),e.hasOwnProperty("fillMap")&&(t.fillMap=e.fillMap),e.hasOwnProperty("heightLimitSampler")&&(t.heightLimitSampler=e.heightLimitSampler),e.hasOwnProperty("heightColorSampler")&&(t.heightColorSampler=e.heightColorSampler),e.hasOwnProperty("heightLimitOrthoMatrix")&&(t.heightLimitOrthoMatrix=e.heightLimitOrthoMatrix),e.hasOwnProperty("receiveIBL")&&(t.receiveIBL=e.receiveIBL),e.hasOwnProperty("localClipping")&&(t.localClipping=e.localClipping),e.hasOwnProperty("clippingPlanes")&&(t.clippingPlanes=e.clippingPlanes),e.hasOwnProperty("useCompressedColor")&&(t.useCompressedColor=e.useCompressedColor),e.hasOwnProperty("useCompressedNormal")&&(t.useCompressedNormal=e.useCompressedNormal),e.hasOwnProperty("vertexColors")&&(t.vertexColors=e.vertexColors),e.hasOwnProperty("useClampToBorder")&&(t.useClampToBorder=e.useClampToBorder),e.hasOwnProperty("useCompressedUv")&&(t.useCompressedUv=e.useCompressedUv,t.uvCenter=e.uvCenter,t.uvHalfExtent=e.uvHalfExtent),e.hasOwnProperty("clipIntersection")&&(t.clipIntersection=e.clipIntersection),t},s.nextHighestPowerOfTwo=e=>{--e;for(let t=1;t<32;t<<=1)e|=e>>t;return e+1},s.getImageByteSize=e=>e.width*e.height*4,s.ensurePowerOfTwo=e=>{if(0==e.width||0==e.height)return e;if(!THREE.Math.isPowerOfTwo(e.width)||!THREE.Math.isPowerOfTwo(e.height)){let t=document.createElement("canvas");t.width=r.MaterialUtil.nextHighestPowerOfTwo(e.width),t.height=r.MaterialUtil.nextHighestPowerOfTwo(e.height);return t.getContext("2d").drawImage(e,0,0,e.width,e.height,0,0,t.width,t.height),t}return e},s.ensureQuadrate=e=>{let t=e.width,i=e.height;if(0==t||0==i||THREE.Math.isPowerOfTwo(t)&&THREE.Math.isPowerOfTwo(i)&&t===i)return e;THREE.Math.isPowerOfTwo(t)||(t=r.MaterialUtil.nextHighestPowerOfTwo(t)),THREE.Math.isPowerOfTwo(i)||(i=r.MaterialUtil.nextHighestPowerOfTwo(i));let n=0,a=0,s=e.width,o=e.height,l=Math.max(t,i);if(s>=o){o*=l/s,s=l,a=.5*(l-o)}else{s*=l/o,o=l,n=.5*(l-s)}let d=document.createElement("canvas");d.width=d.height=l;return d.getContext("2d").drawImage(e,n,a,s,o),d},s.getColorParamsByMaterial=e=>({rgbaColor:[e.color.r,e.color.g,e.color.b,e.opacity],transparent:e.transparent}),s.getHoverColorByColor=e=>{let t={};return t.r=e.r,t.g=e.g,t.b=e.b,t.a=r.MaterialUtil.getHoverOpacity(e.a),t},s.getHoverOpacity=e=>e>=.4?e-.3:e+.3,s.cloneMaterialBaseOnColor=(e,t)=>{if(!e.color&&!e.diffuse)return e;let i=e.clone();return i.opacity=t.opacity,i.transparent=t.transparent,i.color&&i.color.isColor&&t.color&&t.color.isColor&&i.color.copy(t.color),i.diffuse&&i.diffuse.isColor&&t.diffuse&&t.diffuse.isColor&&i.diffuse.copy(t.diffuse),void 0!==i.map&&t.map&&(i.map=t.map,i.alphaMap=t.alphaMap,i.alphaTest=t.alphaTest),i},s.updateUVMatrix=e=>{e.matrixAutoUpdate=!1,s.setUvTransform(e.offset.x,e.offset.y,e.repeat.x,e.repeat.y,e.rotation,e.center.x,e.center.y,e.matrix)},s.setUvTransform=(e,t,i,r,n,a,s,o)=>{const l=Math.cos(n),d=Math.sin(n);return o.set(i*l,-i*d,-i*l*e+d*i*t,r*d,r*l,-r*d*e-r*l*t,0,0,1),o},s.updateUVMatrix2=e=>{e.matrixAutoUpdate=!1,s.setUvTransform2(e.offset.x,e.offset.y,e.repeat.x,e.repeat.y,e.rotation,e.center.x,e.center.y,e.matrix)},s.setUvTransform2=(e,t,i,r,n,a,s,o)=>{const l=Math.cos(n),d=Math.sin(n);return o.set(i*l,-i*d,-.5*i*l+.5*i*d+.5*i-i*e,r*d,r*l,-.5*r*d-.5*r*l+.5*r-r*t,0,0,1),o},s.loadFillMap=(e,t)=>{let i=[];const r=s.createFillPatternByWidth(e,t);if(!r)return;for(let e=0;e<1024;e++){let t=r[Math.floor(e/8)];const n=Math.floor(Math.pow(2,e%8));t=Math.floor(t&n),0===t?(i.push(0),i.push(0),i.push(0)):(i.push(255),i.push(255),i.push(255))}let n=new THREE.DataTexture(new Uint8Array(i),32,32,THREE.RGBFormat,THREE.UnsignedByteType);return n.minFilter=THREE.NearestFilter,n.magFilter=THREE.NearestFilter,n.wrapS=THREE.RepeatWrapping,n.wrapT=THREE.RepeatWrapping,n.needsUpdate=!0,n},s.createFillPatternByWidth=(e,t)=>{if(void 0===t)return r.FILLPATTERN[e];let i=[...r.FILLPATTERN[e]];if("horizontalLine"===e)for(let e=0;e<128;e++)i[e]=e%32<24?0:255;if("verticalLine"===e)for(let e=0;e<128;e++)i[e]=192;if("orthogonalCrossLine"===e)for(let e=0;e<32;e++)for(let t=0;t<4;t++)i[4*e+t]=192,e%8>5&&(i[4*e+t]=255);if("rightDiagonalLine"===e){let e=192;const t=8;for(let r=0;r<32;r++){let n=e>>r%t;1==n&&(n=129),i[4*r]=n,i[4*r+1]=n,i[4*r+2]=n,i[4*r+3]=n}}if("leftDiagonalLine"===e){let e=3;const t=8;for(let r=0;r<32;r++){let n=e<<r%t;384==n&&(n=129),i[4*r]=n,i[4*r+1]=n,i[4*r+2]=n,i[4*r+3]=n}}if("skewCrossLine"===e){const e=[195,102,60,24,60,102,195,129],t=8;for(let r=0;r<32;r++){const n=r%t;i[4*r]=e[n],i[4*r+1]=e[n],i[4*r+2]=e[n],i[4*r+3]=e[n]}}return i},s.loadTexture=(e,t,i)=>{(new TEST.CryptoResourceLoader).loadURL(e,(e=>{var n=new Blob([e],{type:"jpeg"});let a=new Image;a.onload=function(){!function(e){var i=new THREE.Texture;i.image=r.MaterialUtil.ensurePowerOfTwo(e),i.needsUpdate=!0,i.encoding=THREE.GammaEncoding,r.MaterialUtil.updateUVMatrix(i),i.wrapS=THREE.RepeatWrapping,i.wrapT=THREE.RepeatWrapping,t&&t(i)}(a)},a.onerror=e=>{console.log("ERROR: image load error!!"),console.log(e),i&&i(e)},a.src=URL.createObjectURL(n)}),null,(e=>{console.log("ERROR: image load error!!"),console.log(e),i&&i(e)}))},r.MaterialUtil=s})(),r.UIHelper={debugInfoDiv:null,lastDebugInfoDivShow:null,showPickedInformation:function(e){var t=340,i=320,r=this;function n(){var e=r.debugInfoDiv;e&&"none"!==e.style.display&&(e.style.display="none",r.lastDebugInfoDivShow&&(e.removeEventListener("dblclick",n,!1),r.lastDebugInfoDivShow=!1))}if(e&&e.intersectInfo){var a=e.intersectInfo,s=e.canvasPos.x,o=e.canvasPos.y;this.debugInfoDiv||(this.debugInfoDiv=document.createElement("div"),this.debugInfoDiv.id="debugPickedInfo",this.debugInfoDiv.style.display="block",this.debugInfoDiv.style.position="absolute",this.debugInfoDiv.style.width="340px",this.debugInfoDiv.style.height="320px",this.debugInfoDiv.style.backgroundColor="#ffffdd",this.debugInfoDiv.style.borderWidth="2px",this.debugInfoDiv.style.borderStyle="solid",this.debugInfoDiv.style.opacity="0.8",document.body.appendChild(this.debugInfoDiv)),this.debugInfoDiv.style.display="",this.lastDebugInfoDivShow||(this.lastDebugInfoDivShow=!0,this.debugInfoDiv.addEventListener("dblclick",n,!1));var l=a.axisGridInfo,d=a.worldPosition,h="";h+="<span>&#9830;&nbsp;&nbsp;Base Information</span><ul style='width:340px;list-style:none'>",h+="<li style='border-left:1px solid #ccc;border-top:1px solid #ccc;border-bottom: 1px solid #ccc;float:left;width:80px;height:66px;text-align:left;line-height:66px'>ID</li>",h+="<li style='border:1px solid #ccc;float:left;width:200px;height:66px;text-align:left;'>"+a.selectedObjectId+"</li>",h+="</ul>",h+="</br><span>&#9830;&nbsp;&nbsp;Position</span><ul style='width:340px;list-style:none'>",h+="<li style='border-left:1px solid #ccc;border-top:1px solid #ccc;float:left;width:80px;height:33px;text-align:left;line-height:33px'>X</li>",h+="<li style='border-left:1px solid #ccc;border-top:1px solid #ccc;float:left;width:200px;height:33px;text-align:left;line-height:33px;border-right: 1px solid #ccc'>"+d.x+"</li>",h+="<li style='border-left:1px solid #ccc;border-top:1px solid #ccc;float:left;width:80px;height:33px;text-align:left;line-height:33px'>Y</li>",h+="<li style='border-left:1px solid #ccc;border-top:1px solid #ccc;float:left;width:200px;height:33px;text-align:left;line-height:33px;border-right: 1px solid #ccc'>"+d.y+"</li>",h+="<li style='border-left:1px solid #ccc;border-top:1px solid #ccc;float:left;width:80px;height:33px;text-align:left;line-height:33px;border-bottom: 1px solid #ccc'>Z</li>",h+="<li style='border:1px solid #ccc;float:left;width:200px;height:33px;text-align:left;line-height:33px'>"+d.z+"</li>",h+="</ul>",l?(h+="</br><span>&#9830;&nbsp;&nbsp;Axis Grid Information</span><ul style='width:340px;list-style:none'>",h+="<li style='border-left:1px solid #ccc;border-top:1px solid #ccc;float:left;width:80px;height:33px;text-align:left;line-height:33px'>distanceX</li>",h+="<li style='border-left:1px solid #ccc;border-top:1px solid #ccc;float:left;width:200px;height:33px;text-align:left;line-height:33px;border-right: 1px solid #ccc'>("+l.numeralName+", "+l.offsetX+")</li>",h+="<li style='border-left:1px solid #ccc;border-top:1px solid #ccc;float:left;width:80px;height:33px;text-align:left;line-height:33px;border-bottom: 1px solid #ccc'>distanceY</li>",h+="<li style='border:1px solid #ccc;float:left;width:200px;height:33px;text-align:left;line-height:33px'>("+l.abcName+", "+l.offsetY+")</li>",h+="</ul>"):(h+="</br><span>&#9830;&nbsp;&nbsp;Axis Grid Information</span><ul style='width:340px;list-style:none'>",h+="<li style='border-left:1px solid #ccc;border-top:1px solid #ccc;float:left;width:80px;height:33px;text-align:left;line-height:33px;border-bottom: 1px solid #ccc'>message</li>",h+="<li style='border:1px solid #ccc;float:left;width:200px;height:33px;text-align:left;line-height:33px'><span style='color: red'> not exist axis grid!!!</span></li>",h+="</ul>"),this.debugInfoDiv.innerHTML=h+"<br /><br />",function(e,r,n){if(e&&"none"!=e.style.display){var a,s,o,l=r+t,d=n+i;if(void 0!==r&&void 0!==n)if(window.innerWidth)a=l>window.innerWidth?window.pageXOffset+(r-t)+"px":window.pageXOffset+r+"px",s=d>window.innerHeight?window.pageYOffset+(n-i)+"px":window.pageYOffset+n+"px";else a=(o=document.documentElement).scrollLeft+r+"px",s=o.scrollTop+n+"px";else if(window.innerWidth)a=window.pageXOffset+(window.innerWidth-t)/2+"px",s=window.pageYOffset+(window.innerHeight-i)/2+"px";else a=(o=document.documentElement).scrollLeft+(o.offsetWidth-t)/2+"px",s=o.scrollTop+(o.offsetHeight-i)/2+"px";e.style.left=a,e.style.top=s}}(this.debugInfoDiv,s,o)}else n()}},function(){let e=new THREE.Vector3,t=new THREE.Vector2;r.Edge=function(){this.vertexIndex=new Array(2),this.faceIndex=new Array(2)},r.RemoveDuplicateIndex=function(e,t){var i=e.length/3,r=new Array(i),n=new Array(i);function a(e,t){var i=r[e],n=r[t];return i.x!=n.x?i.x-n.x:i.y!=n.y?i.y-n.y:i.z-n.z}for(var s=0;s<i;++s)r[s]=new THREE.Vector3(e[3*s],e[3*s+1],e[3*s+2]),n[s]=s;n.sort((function(e,t){var i=a(e,t);return 0==i?e-t:i}));var o={},l=n[0];for(s=1;s<i;++s)0==a(l,n[s])?o[n[s]]=l:l=n[s];var d=new Array(t.length);for(s=0;s<t.length;++s)o.hasOwnProperty(t[s])?d[s]=o[t[s]]:d[s]=t[s];return d},r.RemoveDuplicateVertex=function(e,t){function i(e,t){return e-t}var n=r.RemoveDuplicateIndex(e,t);n.sort(i);var a=new Array,s=n[0];a.push(s);for(var o=1;o<n.length;++o)n[o]!=s&&(s=n[o],a.push(s));return a.sort(i)},r.BuildEdge=function(e,t,i){i=null==i?Math.PI/4:i;for(var n=r.RemoveDuplicateIndex(e,t),a=n.length,s=e.length/3,o=new Array(s+a),l=s,d=n.length/3,h=0;h<s;++h)o[h]=-1;var c=new Array(a),u=0;for(h=0;h<d;++h)for(var p=n[3*h+2],m=0;m<3;++m){var f=!1,g=n[3*h+m];if(p>g){f=!0;var v=p;p=g,g=v}var y=new r.Edge;y.vertexIndex[0]=p,y.vertexIndex[1]=g,y.faceIndex[0]=h,y.faceIndex[1]=h;var M=o[p];if(-1==M)o[p]=u,c[u]=y,o[l+u]=-1,u++;else for(;;){if((x=c[M]).vertexIndex[1]==g){x.faceIndex[1]=h;break}var E=o[l+M];if(-1==E){o[l+M]=u,c[u]=y,o[l+u]=-1,u++;break}M=E}f||(p=g)}var b=[];for(h=0;h<u;++h){var x;if((x=c[h]).faceIndex[0]==x.faceIndex[1])b.push(x.vertexIndex[0]),b.push(x.vertexIndex[1]);else{var I=x.faceIndex[0],T=n[3*I],C=n[3*I+1],w=n[3*I+2],S=new THREE.Vector3(e[3*T],e[3*T+1],e[3*T+2]),A=new THREE.Vector3(e[3*C],e[3*C+1],e[3*C+2]),B=new THREE.Vector3(e[3*w],e[3*w+1],e[3*w+2]),R=S.sub(A),D=A.sub(B),O=R.cross(D);O.normalize();var L=x.faceIndex[1];T=n[3*L],C=n[3*L+1],w=n[3*L+2],S=new THREE.Vector3(e[3*T],e[3*T+1],e[3*T+2]),A=new THREE.Vector3(e[3*C],e[3*C+1],e[3*C+2]),B=new THREE.Vector3(e[3*w],e[3*w+1],e[3*w+2]),R=S.sub(A),D=A.sub(B);var P=R.cross(D);P.normalize(),Math.abs(O.dot(P))<i&&(b.push(x.vertexIndex[0]),b.push(x.vertexIndex[1]))}}return b},r.GetFaceIndex=function(i,n,a,s,o,l){for(var d=a.length/3,h=new Array,c=0;c<d;++c){var u=a[3*c];l?(t.set(n[2*u],n[2*u+1]),e=r.Math.octDecode(t,e)):e.set(n[3*u],n[3*u+1],n[3*u+2]);var p=e.dot(o);if(Math.abs(p-1)<.001){var m=-new THREE.Vector3(i[3*u],i[3*u+1],i[3*u+2]).dot(e),f=Math.abs(s.dot(e)+m);Math.abs(f)<3&&h.push(a[3*c],a[3*c+1],a[3*c+2])}}return h},r.BuildRoomEdge=function(e,t,i,r,n){function a(e,t){return Math.abs(e-t)<=.1}var s=e.length;a(e[0].x,e[s-1].x)&&a(e[0].y,e[s-1].y)||e.push(e[0]),s=e.length;for(var o=[],l=[],d=new THREE.BufferGeometry,h=0;h<s;++h)l.push(e[h].x-t,e[h].y-i,e[h].z-r);for(h=0;h<s;++h)l.push(e[h].x-t,e[h].y-i,e[h].z-r+n);for(h=0;h<2*s-1;++h)h!=s-1&&o.push(h,h+1);for(h=0;h<s-1;++h)o.push(h,h+s);return d.setIndex(new THREE.BufferAttribute(new Uint16Array(o),1)),d.setAttribute("position",new THREE.BufferAttribute(new Float32Array(l),3)),d.computeBoundingSphere(),d}}(),THREE.DDSLoader=function(){this._parser=THREE.DDSLoader.parse,this.loadBuffer=THREE.DDSLoader.loadBuffer},THREE.DDSLoader.prototype=Object.create(THREE.CompressedTextureLoader.prototype),THREE.DDSLoader.prototype.constructor=THREE.DDSLoader,THREE.DDSLoader.parse=function(e,t){var i={mipmaps:[],width:0,height:0,format:null,mipmapCount:1};function r(e){return e.charCodeAt(0)+(e.charCodeAt(1)<<8)+(e.charCodeAt(2)<<16)+(e.charCodeAt(3)<<24)}function n(e,t,i,r){for(var n=i*r*4,a=new Uint8Array(e,t,n),s=new Uint8Array(n),o=0,l=0,d=0;d<r;d++)for(var h=0;h<i;h++){var c=a[l],u=a[++l],p=a[++l],m=a[++l];l++,s[o]=p,s[++o]=u,s[++o]=c,s[++o]=m,o++}return s}var a,s=r("DXT1"),o=r("DXT3"),l=r("DXT5"),d=r("ETC1"),h=new Int32Array(e,0,31);if(542327876!==h[0])return console.error("THREE.DDSLoader.parse: Invalid magic number in DDS header."),i;if(4&!h[20])return console.error("THREE.DDSLoader.parse: Unsupported format, must contain a FourCC code."),i;var c,u=h[21],p=!1;switch(u){case s:a=8,i.format=THREE.RGB_S3TC_DXT1_Format;break;case o:a=16,i.format=THREE.RGBA_S3TC_DXT3_Format;break;case l:a=16,i.format=THREE.RGBA_S3TC_DXT5_Format;break;case d:a=8,i.format=THREE.RGB_ETC1_Format;break;default:if(!(32===h[22]&&16711680&h[23]&&65280&h[24]&&255&h[25]&&4278190080&h[26]))return console.error("THREE.DDSLoader.parse: Unsupported FourCC code ",(c=u,String.fromCharCode(255&c,c>>8&255,c>>16&255,c>>24&255))),i;p=!0,a=64,i.format=THREE.RGBAFormat}i.mipmapCount=1,131072&h[2]&&!1!==t&&(i.mipmapCount=Math.max(1,h[7]));var m=h[28];if(i.isCubemap=!!(512&m),i.isCubemap&&(!(1024&m)||!(2048&m)||!(4096&m)||!(8192&m)||!(16384&m)||!(32768&m)))return console.error("THREE.DDSLoader.parse: Incomplete cubemap faces"),i;i.width=h[4],i.height=h[3];for(var f=h[1]+4,g=i.isCubemap?6:1,v=0;v<g;v++)for(var y=i.width,M=i.height,E=0;E<i.mipmapCount;E++){if(p)var b=(x=n(e,f,y,M)).length;else{b=Math.max(4,y)/4*Math.max(4,M)/4*a;var x=new Uint8Array(e,f,b)}var I={data:x,width:y,height:M};i.mipmaps.push(I),f+=b,y=Math.max(y>>1,1),M=Math.max(M>>1,1)}return i},THREE.DDSLoader.loadBuffer=function(e,t){var i=[],r=new THREE.CompressedTexture;r.image=i;var n=this._parser(e,!0);if(n.isCubemap)for(var a=n.mipmaps.length/n.mipmapCount,s=0;s<a;s++){i[s]={mipmaps:[]};for(var o=0;o<n.mipmapCount;o++)i[s].mipmaps.push(n.mipmaps[s*n.mipmapCount+o]),i[s].format=n.format,i[s].width=n.width,i[s].height=n.height}else r.image.width=n.width,r.image.height=n.height,r.mipmaps=n.mipmaps;1===n.mipmapCount&&(r.minFilter=THREE.LinearFilter),r.format=n.format,r.needsUpdate=!0,t&&t(r)},r.SplitGeometryBuilder=class{constructor(e,t){this.sourceGeometry=e,this.slicePlane=t,this.addedVertices=[],this.addedIntersections=[];var i=this.sourceGeometry.getAttribute("uv");this.uvs=i?i.array:null;var r=this.sourceGeometry.getAttribute("normal");this.normals=r?r.array:null;var n=this.sourceGeometry.getAttribute("position");this.positions=n?n.array:null,this.targetIndices=[],this.targetNormals=[],this.targetUvs=[],this.targetPositions=[]}startFace(e,t){this.sourceFaceIndex=e,this.sourceFace=t,this.faceIndices=[]}endFace(){this._addFace(this.faceIndices)}addVertex(e){var t,i=this.sourceFace[e];if(this.addedVertices.hasOwnProperty(i))t=this.addedVertices[i];else{var r=3*i;this.targetPositions.push(this.positions[r]),this.targetPositions.push(this.positions[r+1]),this.targetPositions.push(this.positions[r+2]),t=this.targetPositions.length/3-1,this.addedVertices[i]=t,this._addUv(e),this._addNormal(e)}this.faceIndices.push(t)}addIntersection(e,t,i,r){var n,a=Math.abs(i)/(Math.abs(i)+Math.abs(r)),s=this.sourceFace[e],o=this.sourceFace[t],l=this._intersectionId(s,o);if(this.addedIntersections.hasOwnProperty(l))n=this.addedIntersections[l];else{var d=3*s,h=3*o,c=this.positions[d],u=this.positions[d+1],p=this.positions[d+2];this.targetPositions.push(c+(this.positions[h]-c)*a),this.targetPositions.push(u+(this.positions[h+1]-u)*a),this.targetPositions.push(p+(this.positions[h+2]-p)*a),n=this.targetPositions.length/3-1,this.addedIntersections[l]=n,this._addIntersectionUv(e,t,a),this._addIntersectionNormal(e,t,a)}this.faceIndices.push(n)}_addUv(e){if(this.uvs){var t=2*this._keyIndex(e),i=this.uvs[t],r=this.uvs[t+1];this.targetUvs.push(i),this.targetUvs.push(r)}}_addIntersectionUv(e,t,i){if(this.uvs){var r=2*this._keyIndex(e),n=2*this._keyIndex(t),a=this.uvs[r],s=this.uvs[r+1],o=a+(this.uvs[n]-a)*i,l=s+(this.uvs[n+1]-s)*i;this.targetUvs.push(o),this.targetUvs.push(l)}}_addNormal(e){if(this.normals){var t=3*this._keyIndex(e);this.targetNormals.push(this.normals[t]),this.targetNormals.push(this.normals[t+1]),this.targetNormals.push(this.normals[t+2])}}_addIntersectionNormal(e,t,i){if(this.normals){var r=3*this._keyIndex(e),n=3*this._keyIndex(t),a=this.normals[r],s=this.normals[r+1],o=this.normals[r+2];this.targetNormals.push(a+(this.normals[n]-a)*i),this.targetNormals.push(s+(this.normals[n+1]-s)*i),this.targetNormals.push(o+(this.normals[n+2]-o)*i)}}_addFace(e){if(!(e.length<3)){if(3===e.length)return this.targetIndices.push(e[0]),this.targetIndices.push(e[1]),void this.targetIndices.push(e[2]);for(var t=[],i=0;i<e.length;i++)for(var r=i+1;r<e.length;r++){var n=Math.abs(i-r);n>1&&n<e.length-1&&t.push([e[i],e[r]])}t.sort(function(e,t){return this._faceEdgeLength(e[0],e[1])-this._faceEdgeLength(t[0],t[1])}.bind(this));var a=e.indexOf(t[0][0]),s=(e=e.slice(a).concat(e.slice(0,a))).indexOf(t[0][1]),o=e.slice(0,s+1),l=e.slice(s).concat(e.slice(0,1));this._addFace(o),this._addFace(l)}}_faceEdgeLength(e,t){var i=3*this.faceIndices[e],r=3*this.faceIndices[t],n=this.targetPositions[i],a=this.targetPositions[i+1],s=this.targetPositions[i+2],o=n-this.targetPositions[r],l=a-this.targetPositions[r+1],d=s-this.targetPositions[r+2];return o*o+l*l+d*d}_intersectionId(e,t){return[e,t].sort().join(",")}_keyIndex(e){return this.sourceFace[e]}},r.PerformanceStats=class{constructor(e){e.container||r.Error.throwError(r.ERRORS.DEVELOPE_EXCEPTION,"container is required"),this._container=e.container,this._fpsPanel=document.createElement("div"),this._fpsPanel.style.cssText="position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000;background:#002;color:#0ff",this._container.appendChild(this._fpsPanel),this._fpsText=document.createTextNode(""),this._fpsPanel.appendChild(this._fpsText),this._beginTime=this.getTimestamp(),this._prevTime=this._beginTime,this._frames=0,this._minFps=1/0,this._maxFps=0}destroy(){this._fpsText.parentNode&&(this._fpsText.parentNode.removeChild(this._fpsText),this._fpsText=null),this._fpsPanel.parentNode&&(this._fpsPanel.parentNode.removeChild(this._fpsPanel),this._fpsPanel=null),this._container=null}begin(){this._beginTime=this.getTimestamp()}end(){++this._frames;let e=this.getTimestamp(),t=e-this._prevTime;if(t>1e3){const i=1e3*this._frames/t|0;this._minFps=Math.min(i,this._minFps),this._maxFps=Math.max(i,this._maxFps),this._fpsText.nodeValue=Math.round(i)+" FPS ("+Math.round(this._minFps)+"-"+Math.round(this._maxFps)+")",this._prevTime=e,this._frames=0}return e}update(){this._beginTime=this.end()}getTimestamp(){return(performance||Date).now()}},r.SkeletonUtils={parallelTraverse:function(e,t,i){i(e,t);for(var r=0;r<e.children.length;r++)this.parallelTraverse(e.children[r],t.children[r],i)},retarget:(v=new THREE.Vector3,y=new THREE.Quaternion,M=new THREE.Vector3,E=new THREE.Matrix4,b=new THREE.Matrix4,x=new THREE.Matrix4,function(e,t,i){(i=i||{}).preserveMatrix=void 0===i.preserveMatrix||i.preserveMatrix,i.preservePosition=void 0===i.preservePosition||i.preservePosition,i.preserveHipPosition=void 0!==i.preserveHipPosition&&i.preserveHipPosition,i.useTargetMatrix=void 0!==i.useTargetMatrix&&i.useTargetMatrix,i.hip=void 0!==i.hip?i.hip:"hip",i.names=i.names||{};var r,n,a,s,o,l,d=t.isObject3D?t.skeleton.bones:this.getBones(t),h=e.isObject3D?e.skeleton.bones:this.getBones(e);if(e.isObject3D?e.skeleton.pose():(i.useTargetMatrix=!0,i.preserveMatrix=!1),i.preservePosition)for(o=[],l=0;l<h.length;l++)o.push(h[l].position.clone());if(i.preserveMatrix)for(e.updateMatrixWorld(),e.matrixWorld.identity(),l=0;l<e.children.length;++l)e.children[l].updateMatrixWorld(!0);if(i.offsets)for(r=[],l=0;l<h.length;++l)n=h[l],a=i.names[n.name]||n.name,i.offsets&&i.offsets[a]&&(n.matrix.multiply(i.offsets[a]),n.matrix.decompose(n.position,n.quaternion,n.scale),n.updateMatrixWorld()),r.push(n.matrixWorld.clone());for(l=0;l<h.length;++l){if(n=h[l],a=i.names[n.name]||n.name,s=this.getBoneByName(a,d),x.copy(n.matrixWorld),s){if(s.updateMatrixWorld(),i.useTargetMatrix?b.copy(s.matrixWorld):(b.copy(e.matrixWorld).invert(),b.multiply(s.matrixWorld)),M.setFromMatrixScale(b),b.scale(M.set(1/M.x,1/M.y,1/M.z)),x.makeRotationFromQuaternion(y.setFromRotationMatrix(b)),e.isObject3D){var c=h.indexOf(n),u=r?r[c]:E.copy(e.skeleton.boneInverses[c]).invert();x.multiply(u)}x.copyPosition(b)}n.parent&&n.parent.isBone?(n.matrix.copy(n.parent.matrixWorld).invert(),n.matrix.multiply(x)):n.matrix.copy(x),i.preserveHipPosition&&a===i.hip&&n.matrix.setPosition(v.set(0,n.position.y,0)),n.matrix.decompose(n.position,n.quaternion,n.scale),n.updateMatrixWorld()}if(i.preservePosition)for(l=0;l<h.length;++l)n=h[l],(a=i.names[n.name]||n.name)!==i.hip&&n.position.copy(o[l]);i.preserveMatrix&&e.updateMatrixWorld(!0)}),retargetClip:function(e,t,i,r){(r=r||{}).useFirstFramePosition=void 0!==r.useFirstFramePosition&&r.useFirstFramePosition,r.fps=void 0!==r.fps?r.fps:30,r.names=r.names||[],t.isObject3D||(t=this.getHelperFromSkeleton(t));var n,a,s,o,l,d,h=Math.round(i.duration*(r.fps/1e3)*1e3),c=1/r.fps,u=[],p=new THREE.AnimationMixer(t),m=this.getBones(e.skeleton),f=[];for(p.clipAction(i).play(),p.update(0),t.updateMatrixWorld(),l=0;l<h;++l){var g=l*c;for(this.retarget(e,t,r),d=0;d<m.length;++d)o=r.names[m[d].name]||m[d].name,this.getBoneByName(o,t.skeleton)&&(a=m[d],s=f[d]=f[d]||{bone:a},r.hip===o&&(s.pos||(s.pos={times:new Float32Array(h),values:new Float32Array(3*h)}),r.useFirstFramePosition&&(0===l&&(n=a.position.clone()),a.position.sub(n)),s.pos.times[l]=g,a.position.toArray(s.pos.values,3*l)),s.quat||(s.quat={times:new Float32Array(h),values:new Float32Array(4*h)}),s.quat.times[l]=g,a.quaternion.toArray(s.quat.values,4*l));p.update(c),t.updateMatrixWorld()}for(l=0;l<f.length;++l)(s=f[l])&&(s.pos&&u.push(new THREE.VectorKeyframeTrack(".bones["+s.bone.name+"].position",s.pos.times,s.pos.values)),u.push(new THREE.QuaterQuaternionKeyframeTrackion(".bones["+s.bone.name+"].quaternion",s.quat.times,s.quat.values)));return p.uncacheAction(i),new THREE.AnimationClip(i.name,-1,u)},getHelperFromSkeleton:function(e){var t=new THREE.SkeletonHelper(e.bones[0]);return t.skeleton=e,t},getSkeletonOffsets:(c=new THREE.Vector3,u=new THREE.Vector3,p=new THREE.Vector3,m=new THREE.Vector3,f=new THREE.Vector2,g=new THREE.Vector2,function(e,t,i){(i=i||{}).hip=void 0!==i.hip?i.hip:"hip",i.names=i.names||{},t.isObject3D||(t=this.getHelperFromSkeleton(t));var r,n,a,s,o=Object.keys(i.names),l=Object.values(i.names),d=t.isObject3D?t.skeleton.bones:this.getBones(t),h=e.isObject3D?e.skeleton.bones:this.getBones(e),v=[];for(e.skeleton.pose(),s=0;s<h.length;++s)if(r=h[s],a=i.names[r.name]||r.name,(n=this.getBoneByName(a,d))&&a!==i.hip){var y=this.getNearestBone(r.parent,o),M=this.getNearestBone(n.parent,l);y.updateMatrixWorld(),M.updateMatrixWorld(),c.setFromMatrixPosition(y.matrixWorld),u.setFromMatrixPosition(r.matrixWorld),p.setFromMatrixPosition(M.matrixWorld),m.setFromMatrixPosition(n.matrixWorld),f.subVectors(new THREE.Vector2(u.x,u.y),new THREE.Vector2(c.x,c.y)).normalize(),g.subVectors(new THREE.Vector2(m.x,m.y),new THREE.Vector2(p.x,p.y)).normalize();var E=f.angle()-g.angle(),b=(new THREE.Matrix4).makeRotationFromEuler(new THREE.Euler(0,0,E));r.matrix.multiply(b),r.matrix.decompose(r.position,r.quaternion,r.scale),r.updateMatrixWorld(),v[a]=b}return v}),renameBones:function(e,t){for(var i=this.getBones(e),r=0;r<i.length;++r){var n=i[r];t[n.name]&&(n.name=t[n.name])}return this},getBones:function(e){return Array.isArray(e)?e:e.bones},getBoneByName:function(e,t){for(var i=0,r=this.getBones(t);i<r.length;i++)if(e===r[i].name)return r[i]},getNearestBone:function(e,t){for(;e.isBone;){if(-1!==t.indexOf(e.name))return e;e=e.parent}},findBoneTrackData:function(e,t){for(var i=/\[(.*)\]\.(.*)/,r={name:e},n=0;n<t.length;++n){var a=i.exec(t[n].name);a&&e===a[1]&&(r[a[2]]=n)}return r},getEqualsBonesNames:function(e,t){var i=this.getBones(e),r=this.getBones(t),n=[];e:for(var a=0;a<i.length;a++)for(var s=i[a].name,o=0;o<r.length;o++)if(s===r[o].name){n.push(s);continue e}return n},clone:function(e){var t=new Map,i=new Map,r=e.clone();return this.parallelTraverse(e,r,(function(e,r){t.set(r,e),i.set(e,r)})),r.traverse((function(e){if(e.isSkinnedMesh){var r=e,n=t.get(e),a=n.skeleton.bones;r.skeleton=n.skeleton.clone(),r.bindMatrix.copy(n.bindMatrix),r.skeleton.bones=a.map((function(e){return i.get(e)})),r.bind(r.skeleton,r.bindMatrix)}})),r}},function(){function e(e,r,a){a=a||2;var s,o,l,c,u,m,f,g=r&&r.length,v=g?r[0]*a:e.length,y=t(e,0,v,a,!0),M=[];if(!y||y.next===y.prev)return M;if(g&&(y=function(e,r,n,a){var s,o,l,c=[];for(s=0,o=r.length;s<o;s++)(l=t(e,r[s]*a,s<o-1?r[s+1]*a:e.length,a,!1))===l.next&&(l.steiner=!0),c.push(p(l));for(c.sort(d),s=0;s<c.length;s++)h(c[s],n),n=i(n,n.next);return n}(e,r,y,a)),e.length>80*a){s=l=e[0],o=c=e[1];for(var E=a;E<v;E+=a)(u=e[E])<s&&(s=u),(m=e[E+1])<o&&(o=m),u>l&&(l=u),m>c&&(c=m);f=0!==(f=Math.max(l-s,c-o))?1/f:0}return n(y,M,a,s,o,f),M}function t(e,t,i,r,n){var a,s;if(n===w(e,t,i,r)>0)for(a=t;a<i;a+=r)s=I(a,e[a],e[a+1],s);else for(a=i-r;a>=t;a-=r)s=I(a,e[a],e[a+1],s);return s&&v(s,s.next)&&(T(s),s=s.next),s}function i(e,t){if(!e)return e;t||(t=e);var i,r=e;do{if(i=!1,r.steiner||!v(r,r.next)&&0!==g(r.prev,r,r.next))r=r.next;else{if(T(r),(r=t=r.prev)===r.next)break;i=!0}}while(i||r!==t);return t}function n(e,t,r,d,h,c,p){if(e){!p&&c&&function(e,t,i,r){var n=e;do{null===n.z&&(n.z=u(n.x,n.y,t,i,r)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next}while(n!==e);n.prevZ.nextZ=null,n.prevZ=null,function(e){var t,i,r,n,a,s,o,l,d=1;do{for(i=e,e=null,a=null,s=0;i;){for(s++,r=i,o=0,t=0;t<d&&(o++,r=r.nextZ);t++);for(l=d;o>0||l>0&&r;)0!==o&&(0===l||!r||i.z<=r.z)?(n=i,i=i.nextZ,o--):(n=r,r=r.nextZ,l--),a?a.nextZ=n:e=n,n.prevZ=a,a=n;i=r}a.nextZ=null,d*=2}while(s>1)}(n)}(e,d,h,c);for(var m,f,g=e;e.prev!==e.next;)if(m=e.prev,f=e.next,c?s(e,d,h,c):a(e))t.push(m.i/r),t.push(e.i/r),t.push(f.i/r),T(e),e=f.next,g=f.next;else if((e=f)===g){p?1===p?n(e=o(i(e),t,r),t,r,d,h,c,2):2===p&&l(e,t,r,d,h,c):n(i(e),t,r,d,h,c,1);break}}}function a(e){var t=e.prev,i=e,r=e.next;if(g(t,i,r)>=0)return!1;for(var n=e.next.next;n!==e.prev;){if(m(t.x,t.y,i.x,i.y,r.x,r.y,n.x,n.y)&&g(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function s(e,t,i,r){var n=e.prev,a=e,s=e.next;if(g(n,a,s)>=0)return!1;for(var o=n.x<a.x?n.x<s.x?n.x:s.x:a.x<s.x?a.x:s.x,l=n.y<a.y?n.y<s.y?n.y:s.y:a.y<s.y?a.y:s.y,d=n.x>a.x?n.x>s.x?n.x:s.x:a.x>s.x?a.x:s.x,h=n.y>a.y?n.y>s.y?n.y:s.y:a.y>s.y?a.y:s.y,c=u(o,l,t,i,r),p=u(d,h,t,i,r),f=e.prevZ,v=e.nextZ;f&&f.z>=c&&v&&v.z<=p;){if(f!==e.prev&&f!==e.next&&m(n.x,n.y,a.x,a.y,s.x,s.y,f.x,f.y)&&g(f.prev,f,f.next)>=0)return!1;if(f=f.prevZ,v!==e.prev&&v!==e.next&&m(n.x,n.y,a.x,a.y,s.x,s.y,v.x,v.y)&&g(v.prev,v,v.next)>=0)return!1;v=v.nextZ}for(;f&&f.z>=c;){if(f!==e.prev&&f!==e.next&&m(n.x,n.y,a.x,a.y,s.x,s.y,f.x,f.y)&&g(f.prev,f,f.next)>=0)return!1;f=f.prevZ}for(;v&&v.z<=p;){if(v!==e.prev&&v!==e.next&&m(n.x,n.y,a.x,a.y,s.x,s.y,v.x,v.y)&&g(v.prev,v,v.next)>=0)return!1;v=v.nextZ}return!0}function o(e,t,r){var n=e;do{var a=n.prev,s=n.next.next;!v(a,s)&&y(a,n,n.next,s)&&b(a,s)&&b(s,a)&&(t.push(a.i/r),t.push(n.i/r),t.push(s.i/r),T(n),T(n.next),n=e=s),n=n.next}while(n!==e);return i(n)}function l(e,t,r,a,s,o){var l=e;do{for(var d=l.next.next;d!==l.prev;){if(l.i!==d.i&&f(l,d)){var h=x(l,d);return l=i(l,l.next),h=i(h,h.next),n(l,t,r,a,s,o),void n(h,t,r,a,s,o)}d=d.next}l=l.next}while(l!==e)}function d(e,t){return e.x-t.x}function h(e,t){if(t=function(e,t){var i,r=t,n=e.x,a=e.y,s=-1/0;do{if(a<=r.y&&a>=r.next.y&&r.next.y!==r.y){var o=r.x+(a-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(o<=n&&o>s){if(s=o,o===n){if(a===r.y)return r;if(a===r.next.y)return r.next}i=r.x<r.next.x?r:r.next}}r=r.next}while(r!==t);if(!i)return null;if(n===s)return i;var l,d=i,h=i.x,u=i.y,p=1/0;r=i;do{n>=r.x&&r.x>=h&&n!==r.x&&m(a<u?n:s,a,h,u,a<u?s:n,a,r.x,r.y)&&(l=Math.abs(a-r.y)/(n-r.x),b(r,e)&&(l<p||l===p&&(r.x>i.x||r.x===i.x&&c(i,r)))&&(i=r,p=l)),r=r.next}while(r!==d);return i}(e,t)){var r=x(t,e);i(t,t.next),i(r,r.next)}}function c(e,t){return g(e.prev,e,t.prev)<0&&g(t.next,e,e.next)<0}function u(e,t,i,r,n){return(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*n)|e<<8))|e<<4))|e<<2))|e<<1))|(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*n)|t<<8))|t<<4))|t<<2))|t<<1))<<1}function p(e){var t=e,i=e;do{(t.x<i.x||t.x===i.x&&t.y<i.y)&&(i=t),t=t.next}while(t!==e);return i}function m(e,t,i,r,n,a,s,o){return(n-s)*(t-o)-(e-s)*(a-o)>=0&&(e-s)*(r-o)-(i-s)*(t-o)>=0&&(i-s)*(a-o)-(n-s)*(r-o)>=0}function f(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!function(e,t){var i=e;do{if(i.i!==e.i&&i.next.i!==e.i&&i.i!==t.i&&i.next.i!==t.i&&y(i,i.next,e,t))return!0;i=i.next}while(i!==e);return!1}(e,t)&&(b(e,t)&&b(t,e)&&function(e,t){var i=e,r=!1,n=(e.x+t.x)/2,a=(e.y+t.y)/2;do{i.y>a!=i.next.y>a&&i.next.y!==i.y&&n<(i.next.x-i.x)*(a-i.y)/(i.next.y-i.y)+i.x&&(r=!r),i=i.next}while(i!==e);return r}(e,t)&&(g(e.prev,e,t.prev)||g(e,t.prev,t))||v(e,t)&&g(e.prev,e,e.next)>0&&g(t.prev,t,t.next)>0)}function g(e,t,i){return(t.y-e.y)*(i.x-t.x)-(t.x-e.x)*(i.y-t.y)}function v(e,t){return e.x===t.x&&e.y===t.y}function y(e,t,i,r){var n=E(g(e,t,i)),a=E(g(e,t,r)),s=E(g(i,r,e)),o=E(g(i,r,t));return n!==a&&s!==o||(!(0!==n||!M(e,i,t))||(!(0!==a||!M(e,r,t))||(!(0!==s||!M(i,e,r))||!(0!==o||!M(i,t,r)))))}function M(e,t,i){return t.x<=Math.max(e.x,i.x)&&t.x>=Math.min(e.x,i.x)&&t.y<=Math.max(e.y,i.y)&&t.y>=Math.min(e.y,i.y)}function E(e){return e>0?1:e<0?-1:0}function b(e,t){return g(e.prev,e,e.next)<0?g(e,t,e.next)>=0&&g(e,e.prev,t)>=0:g(e,t,e.prev)<0||g(e,e.next,t)<0}function x(e,t){var i=new C(e.i,e.x,e.y),r=new C(t.i,t.x,t.y),n=e.next,a=t.prev;return e.next=t,t.prev=e,i.next=n,n.prev=i,r.next=i,i.prev=r,a.next=r,r.prev=a,r}function I(e,t,i,r){var n=new C(e,t,i);return r?(n.next=r.next,n.prev=r,r.next.prev=n,r.next=n):(n.prev=n,n.next=n),n}function T(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function C(e,t,i){this.i=e,this.x=t,this.y=i,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function w(e,t,i,r){for(var n=0,a=t,s=i-r;a<i;a+=r)n+=(e[s]-e[a])*(e[a+1]+e[s+1]),s=a;return n}e.deviation=function(e,t,i,r){var n=t&&t.length,a=n?t[0]*i:e.length,s=Math.abs(w(e,0,a,i));if(n)for(var o=0,l=t.length;o<l;o++){var d=t[o]*i,h=o<l-1?t[o+1]*i:e.length;s-=Math.abs(w(e,d,h,i))}var c=0;for(o=0;o<r.length;o+=3){var u=r[o]*i,p=r[o+1]*i,m=r[o+2]*i;c+=Math.abs((e[u]-e[m])*(e[p+1]-e[u+1])-(e[u]-e[p])*(e[m+1]-e[u+1]))}return 0===s&&0===c?0:Math.abs((c-s)/s)},e.flatten=function(e){for(var t=e[0][0].length,i={vertices:[],holes:[],dimensions:t},r=0,n=0;n<e.length;n++){for(var a=0;a<e[n].length;a++)for(var s=0;s<t;s++)i.vertices.push(e[n][a][s]);n>0&&(r+=e[n-1].length,i.holes.push(r))}return i},r.earcut=e}(),r.Math={EPSILON1:.1,EPSILON2:.01,EPSILON3:.001,EPSILON4:1e-4,EPSILON5:1e-5,EPSILON6:1e-6,EPSILON7:1e-7,EPSILON8:1e-8,EPSILON9:1e-9,EPSILON10:1e-10,EPSILON11:1e-11,EPSILON12:1e-12,EPSILON13:1e-13,EPSILON14:1e-14,EPSILON15:1e-15,EPSILON16:1e-16,EPSILON17:1e-17,EPSILON18:1e-18,EPSILON19:1e-19,EPSILON20:1e-20,EPSILON21:1e-21,ONE_Megabytes:1048576,ONE_GIGABYTES:1073741824,TWO_PI:2*Math.PI,PI_OVER_TWO:Math.PI/2,RADIANS_PER_DEGREE:Math.PI/180,RADIANS_PER_ARCSECOND:Math.PI/180/3600,mod:function(e,t){return(e%t+t)%t},clamp:function(e,t,i){return e<t?t:e>i?i:e},normalize:function(e,t,i){return 0===(i=Math.max(i-t,0))?0:r.Math.clamp((e-t)/i,0,1)},isolateDigits:function(e,t,i){return parseInt(e*Math.pow(10,t))*Math.pow(10,i)},equalsEpsilon:function(e,t,i,r){r=void 0!==r?r:i;var n=Math.abs(e-t);return n<=r||n<=i*Math.max(Math.abs(e),Math.abs(t))},lessThan:function(e,t,i){return e-t<-i},lessThanOrEquals:function(e,t,i){return e-t<i},greaterThan:function(e,t,i){return e-t>i},greaterThanOrEquals:function(e,t,i){return e-t>-i},equalsEpsilonVec3:function(e,t,i){return r.Math.equalsEpsilon(e.x,t.x,i)&&r.Math.equalsEpsilon(e.y,t.y,i)&&r.Math.equalsEpsilon(e.z,t.z,i)},equalsEpsilonMatrix4:function(e,t,i){i=i||0;const n=e.elements,a=t.elements;for(let e=0;e<16;e++)if(!r.Math.equalsEpsilon(n[e],a[e],i))return!1;return!0},equalsEpsilonQuaternion:function(e,t,i){return i=i||0,r.Math.equalsEpsilon(e._x,t._x,i)&&r.Math.equalsEpsilon(e._y,t._y,i)&&r.Math.equalsEpsilon(e._z,t._z,i)&&r.Math.equalsEpsilon(e._w,t._w,i)},equalsEpsilonFrustum:function(e,t,i){i=i||0;const n=e.planes,a=t.planes;for(let e=0;e<6;e++)if(!r.Math.equalsEpsilonVec3(n[e].normal,a[e].normal,i)||!r.Math.equalsEpsilon(n[e].constant,a[e].constant,i))return!1;return!0},incrementWrap:function(e,t,i){return i=void 0!==i?i:0,++e>t&&(e=i),e},isPowerOfTwo:function(e){return 0!==e&&0==(e&e-1)},nextPowerOfTwo:function(e){return--e,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e},maxComponent:function(e,t){var i=Math.max(Math.abs(e.x),Math.abs(t.x)),r=Math.max(Math.abs(e.y),Math.abs(t.y)),n=Math.max(Math.abs(e.z),Math.abs(t.z));return Math.max(Math.max(i,r),n)},getMatrix3:function(e){var t=e.elements,i=new THREE.Matrix3;return i.elements[0]=t[0],i.elements[1]=t[1],i.elements[2]=t[2],i.elements[3]=t[4],i.elements[4]=t[5],i.elements[5]=t[6],i.elements[6]=t[8],i.elements[7]=t[9],i.elements[8]=t[10],i},bezierCurveFn:function(e,t,i,r){return r>1&&(r=1),(1-r)*(1-r)*e+2*r*(1-r)*t+r*r*i},tweens:function(e,t,i,r){var n=i%r/r;return n<0&&(n*=-1),n>1&&(n=1),this.linear([e,t],n)},breatheTweens:function(e,t,i,r){var n=i%r/(.5*r)-1;return n<0&&(n*=-1),n>1&&(n=1),this.linear([e,t],n)},linear:function(e,t){var i=this,r=e.length-1,n=r*t,a=Math.floor(n);return t<0?i.linearFn(e[0],e[1],n):t>1?i.linearFn(e[r],e[r-1],r-n):i.linearFn(e[a],e[a+1>r?r:a+1],n-a)},linearFn:function(e,t,i){return(t-e)*i+e},negativePiToPi(e){if(!r.Utils.defined(e))throw new Error("angle is required.");return this.zeroToTwoPi(e+Math.PI)-Math.PI},zeroToTwoPi(e){if(!r.Utils.defined(e))throw new Error("angle is required.");var t=this.mod(e,this.TWO_PI);return Math.abs(t)<this.EPSILON14&&Math.abs(e)>this.EPSILON14?TWO_PI:t},equalsEpsilon(e,t,i,n){if(!r.Utils.defined(e))throw new Error("left is required.");if(!r.Utils.defined(t))throw new Error("right is required.");i=r.Utils.defaultValue(i,0),n=r.Utils.defaultValue(n,i);var a=Math.abs(e-t);return a<=n||a<=i*Math.max(Math.abs(e),Math.abs(t))},equalsEpsilonVector3(e,t,i,n){return e===t||r.Utils.defined(e)&&r.Utils.defined(t)&&this.equalsEpsilon(e.x,t.x,i,n)&&this.equalsEpsilon(e.y,t.y,i,n)&&this.equalsEpsilon(e.z,t.z,i,n)},isMirror(e){const t=r.Utils.scratchVector_1,i=r.Utils.scratchVector_2,n=r.Utils.scratchVector_3,a=e.elements,s=t.set(a[0],a[1],a[2]),o=i.set(a[4],a[5],a[6]),l=n.set(a[8],a[9],a[10]);return s.cross(o).dot(l)<0},octDecode(e,t){if(t=r.Utils.isDefined(t)?t:new THREE.Vector3,e.x<r.Math.EPSILON10&&e.y<r.Math.EPSILON10)return t.set(0,0,0),t;let i=e.x/255*2-1,n=e.y/255*2-1;if(t.set(i,n,1-Math.abs(i)-Math.abs(n)),t.z<0){let e=i>=0?1:-1,r=n>=0?1:-1;i=(1-Math.abs(t.y))*e,n=(1-Math.abs(t.x))*r,t.x=i,t.y=n}return t.normalize()}},r.Debug={INFO:"INFO",WARNING:"WARNING",ERROR:"ERROR",EXCEPTION:"EXCEPTION",isActive:!1,DebugColor:{BLACK:0,WHITE:16777215,RED:16711680,GREEN:65280,BLUE:255,YELLOW:16776960,ORANGE:16753920,GRAY:8421504,GOLD:16766720},DebugColorArray:[16776960,16711680,65280,255],activate:function(){r.Debug.isActive=!0},deactivate:function(){r.Debug.isActive=!1},doLog:function(e,t){if(r.Debug.isActive)switch(e){case r.Debug.INFO:console.info(t);break;case r.Debug.WARNING:console.warn(t);break;case r.Debug.ERROR:console.error(t);break;case r.Debug.EXCEPTION:console.debug(t)}},logInfo:function(e){r.Debug.doLog(r.Debug.INFO,e)},logWarning:function(e){r.Debug.doLog(r.Debug.WARNING,e)},logError:function(e){r.Debug.doLog(r.Debug.ERROR,e)},logException:function(e){r.Debug.doLog(r.Debug.EXCEPTION,e)}},r.Runtime=function(){this.config={},this.isReady=!1,this.fps=0,this.states={measurements:[],infos:[]}},r.Runtime.prototype.addMeasurement=function(e,t){this.states.measurements[e]=t},r.Runtime.prototype.removeMeasurement=function(e){this.states.measurements[e]&&delete this.states.measurements[e]},r.Runtime.prototype.addInfo=function(e,t){this.states.infos[e]=t},r.Runtime.prototype.removeInfo=function(e){delete this.states.infos[e]},r.Runtime.prototype.getFPS=function(){return this.fps},function(){function e(e,t){return t-e}r.Event=class{constructor(){this._listeners=[],this._scopes=[],this._toRemove=[],this._insideFireEvent=!1}addEventListener(e,t){this._listeners.push(e),this._scopes.push(t);var i=this;return function(){i.removeEventListener(e,t)}}removeEventListener(e,t){for(var i=this._listeners,r=this._scopes,n=-1,a=0;a<i.length;a++)if(i[a]===e&&r[a]===t){n=a;break}return-1!==n&&(this._insideFireEvent?(this._toRemove.push(n),i[n]=void 0,r[n]=void 0):(i.splice(n,1),r.splice(n,1)),!0)}fireEvent(){var t;this._insideFireEvent=!0;var i=this._listeners,r=this._scopes,n=i.length;for(t=0;t<n;t++){i[t]&&i[t].apply(r[t],arguments)}var a=this._toRemove;if((n=a.length)>0){for(a.sort(e),t=0;t<n;t++){var s=a[t];i.splice(s,1),r.splice(s,1)}a.length=0}this._insideFireEvent=!1}}}(),I=0,r.EVENTS={ERROR:I++,WEBGL_CONTEXT_LOST:I++,WEBGL_CONTEXT_RESTORED:I++,ON_LOAD_START_NO_PROGRESS:I++,ON_LOAD_START:I++,ON_LOAD_PROGRESS:I++,ON_LOAD_COMPLETE:I++,ON_LOAD_EMPTY_SCENE:I++,ON_LOAD_INVALID_SCENE:I++,ON_DEMAND_LOAD_START:I++,ON_DEMAND_LOAD_PROGRESS:I++,ON_DEMAND_LOAD_COMPLETE:I++,ON_EDITOR_ENTER:I++,ON_EDITOR_EXIST:I++,ON_EDITOR_BEGIN:I++,ON_EDITOR_END:I++,ON_TOOL_END:I++,ON_EDITOR_UPDATEUI:I++,ON_EDITOR_ZOOM:I++,ON_EDITOR_PANING:I++,ON_EDITOR_ROTATING:I++,ON_EDITOR_WALKING:I++,ON_VOLUME_MEASURE_END:I++,ON_SELECTION_CHANGED:I++,ON_CLICK_PICK:I++,ON_CLICK_MARKER3D_PICK:I++,ON_HOVER_PICK:I++,ON_MOUSE_MOVE_PICK:I++,ON_MEASURE_PICK:I++,ON_MEASURE_RESET:I++,ON_SELECTION_FAILED:I++,ON_CLIP_HOVER:I++,ON_HOVER_SNAP:I++,ON_CLIP_MOUSE_MOVE:I++,ON_MOUSE_DRAGGED:I++,ON_CAMERA_CHANGED_AND_RENDERED:I++,ON_VERSION_NO_MATCH:I++,ON_AXIS_GRID_HOVER:I++,ON_VIEWER_RESTORED:I++,ON_EARTH_ANIMATION_COMPLETE:I++,ON_CAMERA_HEIGHT_CHANGED:I++,ON_CAMERA_ANIMATION_UPDATE:I++,ON_FLOOR_EXPLOSION:I++,ON_EXPLOSION:I++,ON_PRE_UPDATE:I++,ON_POST_UPDATE:I++,ON_PRE_RENDER:I++,ON_POST_RENDER:I++,ON_MAP_CREATED:I++,ON_MAP_LOAD_ALL:I++},function(){class e extends THREE.EventDispatcher{constructor(){super()}destroy(){this._listeners=void 0}}r.EventDispatcher=e,r.eventsDispatcher=new r.EventDispatcher}(),function(){var e=0;r.ERRORS={DEVELOPE_EXCEPTION:e++,INVALID_FRAMEBUFFER:e++,WEBGL_NOT_SUPPORTED:e++,WEBGL_CONTEXT_LOST:e++};class t extends Error{constructor(e,t){super(),this.name=this._getName(e),this.message=t||"N/A",this.stack=(new Error).stack}_getName(e){for(const t in r.ERRORS)if(r.ERRORS[t]===e)return t;return null}toString(){let e=this.name+": "+this.message;return this.stack&&(e+="\n"+this.stack.toString()),e}static throwError(e,i){throw new t(e,i)}}r.Error=t}(),function(){class e{constructor(e,t){this.canvasId=e||0,this.domContainer=t;var i=document.createElement("div");this.domContainer.appendChild(i),this.canvas=this._createHTMLCanvas(i)}destroy(){var e=this.canvas.parentNode;e&&(e.removeChild(this.canvas),this.domContainer.removeChild(e),e=null),this.canvas=null,this.domContainer=null}addEventListener(e,t,i){this.canvas.addEventListener(e,t,i)}removeEventListener(e,t,i){this.canvas.removeEventListener(e,t,i)}_createHTMLCanvas(e){var t=document.createElement("canvas");return t.setAttribute("id","cloud-canvas-"+this.canvasId),t.setAttribute("class","cloud-main-canvas"),t.setAttribute("tabindex","0"),e.appendChild(t),t}initWebGL(){for(var t=e.WEBGL_CONTEXT_NAMES,i=0;!this.gl&&i<t.length;i++)try{this.gl=this.canvas.getContext(t[i],this.contextAttr)}catch(e){}if(!this.gl)throw r.Error.fatalError(r.ErrorTypes.WEBGL_NOT_SUPPORTED,"Failed to get a WebGL context")}loseWebGLContext(){this.canvas.loseContext()}getWidth(){return this.canvas.width}getHeight(){return this.canvas.height}}e.WEBGL_CONTEXT_NAMES=["webgl","experimental-webgl","webkit-3d","moz-webgl","moz-glweb20"],r.Canvas=e}(),function(){function e(){this.head=void 0,this.tail=void 0,this._length=0}function t(e,t,i){this.item=e,this.previous=t,this.next=i}function i(e,t){t.previous&&t.next?(t.previous.next=t.next,t.next.previous=t.previous):t.previous?(t.previous.next=void 0,e.tail=t.previous):t.next?(t.next.previous=void 0,e.head=t.next):(e.head=void 0,e.tail=void 0),t.next=void 0,t.previous=void 0}Object.defineProperties(e.prototype,{length:{get:function(){return this._length}}}),e.prototype.add=function(e){var i=new t(e,this.tail,void 0);return this.tail?(this.tail.next=i,this.tail=i):(this.head=i,this.tail=i),++this._length,i},e.prototype.remove=function(e){e&&(i(this,e),--this._length)},e.prototype.splice=function(e,t){if(e!==t){i(this,t);var r=e.next;e.next=t,this.tail===e?this.tail=t:r.previous=t,t.next=r,t.previous=e}},r.DoublyLinkedList=e}(),function(){function e(e,t,i){var r=e[t];e[t]=e[i],e[i]=r}r.Heap=class{constructor(e){this._comparator=e.comparator,this._array=[],this._length=0,this._maximumLength=void 0}destroy(){this._comparator=void 0,this._array=void 0}get length(){return this._length}get internalArray(){return this._array}get maximumLength(){return this._maximumLength}set maximumLength(e){var t=this._length;if(e<t){for(var i=this._array,r=e;r<t;++r)i[r]=void 0;this._length=e,i.length=e}this._maximumLength=e}get comparator(){return this._comparator}reserve(e){e=e||this._length,this._array.length=e}heapify(t){t=t||0;for(var i=this._length,r=this._comparator,n=this._array,a=-1,s=!0;s;){var o=2*(t+1),l=o-1;a=l<i&&r(n[l],n[t])<0?l:t,o<i&&r(n[o],n[a])<0&&(a=o),a!==t?(e(n,a,t),t=a):s=!1}}resort(){for(var e=this._length,t=Math.ceil(e/2);t>=0;--t)this.heapify(t)}insert(t){var i,r=this._array,n=this._comparator,a=this._maximumLength,s=this._length++;for(s<r.length?r[s]=t:r.push(t);0!==s;){var o=Math.floor((s-1)/2);if(!(n(r[s],r[o])<0))break;e(r,s,o),s=o}return null!=a&&this._length>a&&(i=r[a],this._length=a),i}pop(t){if(t=t||0,0!==this._length){var i=this._array,r=i[t];return e(i,t,--this._length),this.heapify(t),i[this._length]=void 0,r}}}}(),r.Deferred=class{constructor(){var e,t,i=new Promise((function(i,r){e=function(e){i(e)},t=function(e){r(e)}}));this.promise=i,this.resolve=e,this.reject=t,this.resolver={resolve:e,reject:t}}destroy(){this.resolver=void 0,this.resolve=void 0,this.reject=void 0,this.promise=void 0}},r.TaskRunner=class{constructor(e){this.limit=e||5,this.store=[],this.active=0}next(){this.store.length&&this.runTask(...this.store.shift())}runTask(e,t,i){this.active++;var r=this;e.call(t.that,t,(function(e){r.active--,i&&i(e),r.next()}))}push(e,t,i){this.active<this.limit?this.runTask(e,t,i):this.store.push([e,t,i])}},r.LoadTaskRunner=class{constructor(e){this.limit=e||5,this.store=[],this.active=0}next(){this.store.length&&this.runTask(...this.store.shift())}runTask(e,t,i,r){this.active++;var n=this;e.load(t,(function(e){n.active--,r&&r({context:e,paras:i}),n.next()}))}push(e,t,i,r){this.active<this.limit?this.runTask(e,t,i,r):this.store.push([e,t,i,r])}},THREE.Face3=class{constructor(e,t,i,r,n,a=0){this.a=e,this.b=t,this.c=i,this.normal=r&&r.isVector3?r:new THREE.Vector3,this.vertexNormals=Array.isArray(r)?r:[],this.color=n&&n.isColor?n:new THREE.Color,this.vertexColors=Array.isArray(n)?n:[],this.materialIndex=a}clone(){return(new this.constructor).copy(this)}copy(e){this.a=e.a,this.b=e.b,this.c=e.c,this.normal.copy(e.normal),this.color.copy(e.color),this.materialIndex=e.materialIndex;for(let t=0,i=e.vertexNormals.length;t<i;t++)this.vertexNormals[t]=e.vertexNormals[t].clone();for(let t=0,i=e.vertexColors.length;t<i;t++)this.vertexColors[t]=e.vertexColors[t].clone();return this}},(()=>{const e=new THREE.Matrix4,t=new THREE.Object3D,i=new THREE.Vector3;function r(){this.uuid=THREE.MathUtils.generateUUID(),this.name="",this.type="Geometry",this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.elementsNeedUpdate=!1,this.verticesNeedUpdate=!1,this.uvsNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.lineDistancesNeedUpdate=!1,this.groupsNeedUpdate=!1}r.prototype=Object.assign(Object.create(THREE.EventDispatcher.prototype),{constructor:r,isGeometry:!0,applyMatrix4:function(e){const t=(new THREE.Matrix3).getNormalMatrix(e);for(let t=0,i=this.vertices.length;t<i;t++){this.vertices[t].applyMatrix4(e)}for(let e=0,i=this.faces.length;e<i;e++){const i=this.faces[e];i.normal.applyMatrix3(t).normalize();for(let e=0,r=i.vertexNormals.length;e<r;e++)i.vertexNormals[e].applyMatrix3(t).normalize()}return null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this.verticesNeedUpdate=!0,this.normalsNeedUpdate=!0,this},rotateX:function(t){return e.makeRotationX(t),this.applyMatrix4(e),this},rotateY:function(t){return e.makeRotationY(t),this.applyMatrix4(e),this},rotateZ:function(t){return e.makeRotationZ(t),this.applyMatrix4(e),this},translate:function(t,i,r){return e.makeTranslation(t,i,r),this.applyMatrix4(e),this},scale:function(t,i,r){return e.makeScale(t,i,r),this.applyMatrix4(e),this},lookAt:function(e){return t.lookAt(e),t.updateMatrix(),this.applyMatrix4(t.matrix),this},fromBufferGeometry:function(e){const t=this,i=null!==e.index?e.index:void 0,r=e.attributes;if(void 0===r.position)return console.error("THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion."),this;const n=r.position,a=r.normal,s=r.color,o=r.uv,l=r.uv2;void 0!==l&&(this.faceVertexUvs[1]=[]);for(let e=0;e<n.count;e++)t.vertices.push((new THREE.Vector3).fromBufferAttribute(n,e)),void 0!==s&&t.colors.push((new THREE.Color).fromBufferAttribute(s,e));function d(e,i,r,n){const d=void 0===s?[]:[t.colors[e].clone(),t.colors[i].clone(),t.colors[r].clone()],h=void 0===a?[]:[(new THREE.Vector3).fromBufferAttribute(a,e),(new THREE.Vector3).fromBufferAttribute(a,i),(new THREE.Vector3).fromBufferAttribute(a,r)],c=new THREE.Face3(e,i,r,h,d,n);t.faces.push(c),void 0!==o&&t.faceVertexUvs[0].push([(new THREE.Vector2).fromBufferAttribute(o,e),(new THREE.Vector2).fromBufferAttribute(o,i),(new THREE.Vector2).fromBufferAttribute(o,r)]),void 0!==l&&t.faceVertexUvs[1].push([(new THREE.Vector2).fromBufferAttribute(l,e),(new THREE.Vector2).fromBufferAttribute(l,i),(new THREE.Vector2).fromBufferAttribute(l,r)])}const h=e.groups;if(h.length>0)for(let e=0;e<h.length;e++){const t=h[e],r=t.start;for(let e=r,n=r+t.count;e<n;e+=3)void 0!==i?d(i.getX(e),i.getX(e+1),i.getX(e+2),t.materialIndex):d(e,e+1,e+2,t.materialIndex)}else if(void 0!==i)for(let e=0;e<i.count;e+=3)d(i.getX(e),i.getX(e+1),i.getX(e+2));else for(let e=0;e<n.count;e+=3)d(e,e+1,e+2);return this.computeFaceNormals(),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone()),null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),this},center:function(){return this.computeBoundingBox(),this.boundingBox.getCenter(i).negate(),this.translate(i.x,i.y,i.z),this},normalize:function(){this.computeBoundingSphere();const e=this.boundingSphere.center,t=this.boundingSphere.radius,i=0===t?1:1/t,r=new THREE.Matrix4;return r.set(i,0,0,-i*e.x,0,i,0,-i*e.y,0,0,i,-i*e.z,0,0,0,1),this.applyMatrix4(r),this},computeFaceNormals:function(){const e=new THREE.Vector3,t=new THREE.Vector3;for(let i=0,r=this.faces.length;i<r;i++){const r=this.faces[i],n=this.vertices[r.a],a=this.vertices[r.b],s=this.vertices[r.c];e.subVectors(s,a),t.subVectors(n,a),e.cross(t),e.normalize(),r.normal.copy(e)}},computeVertexNormals:function(e=!0){const t=new Array(this.vertices.length);for(let e=0,i=this.vertices.length;e<i;e++)t[e]=new THREE.Vector3;if(e){const e=new THREE.Vector3,i=new THREE.Vector3;for(let r=0,n=this.faces.length;r<n;r++){const n=this.faces[r],a=this.vertices[n.a],s=this.vertices[n.b],o=this.vertices[n.c];e.subVectors(o,s),i.subVectors(a,s),e.cross(i),t[n.a].add(e),t[n.b].add(e),t[n.c].add(e)}}else{this.computeFaceNormals();for(let e=0,i=this.faces.length;e<i;e++){const i=this.faces[e];t[i.a].add(i.normal),t[i.b].add(i.normal),t[i.c].add(i.normal)}}for(let e=0,i=this.vertices.length;e<i;e++)t[e].normalize();for(let e=0,i=this.faces.length;e<i;e++){const i=this.faces[e],r=i.vertexNormals;3===r.length?(r[0].copy(t[i.a]),r[1].copy(t[i.b]),r[2].copy(t[i.c])):(r[0]=t[i.a].clone(),r[1]=t[i.b].clone(),r[2]=t[i.c].clone())}this.faces.length>0&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){this.computeFaceNormals();for(let e=0,t=this.faces.length;e<t;e++){const t=this.faces[e],i=t.vertexNormals;3===i.length?(i[0].copy(t.normal),i[1].copy(t.normal),i[2].copy(t.normal)):(i[0]=t.normal.clone(),i[1]=t.normal.clone(),i[2]=t.normal.clone())}this.faces.length>0&&(this.normalsNeedUpdate=!0)},computeMorphNormals:function(){for(let e=0,t=this.faces.length;e<t;e++){const t=this.faces[e];t.__originalFaceNormal?t.__originalFaceNormal.copy(t.normal):t.__originalFaceNormal=t.normal.clone(),t.__originalVertexNormals||(t.__originalVertexNormals=[]);for(let e=0,i=t.vertexNormals.length;e<i;e++)t.__originalVertexNormals[e]?t.__originalVertexNormals[e].copy(t.vertexNormals[e]):t.__originalVertexNormals[e]=t.vertexNormals[e].clone()}const e=new r;e.faces=this.faces;for(let t=0,i=this.morphTargets.length;t<i;t++){if(!this.morphNormals[t]){this.morphNormals[t]={},this.morphNormals[t].faceNormals=[],this.morphNormals[t].vertexNormals=[];const e=this.morphNormals[t].faceNormals,i=this.morphNormals[t].vertexNormals;for(let t=0,r=this.faces.length;t<r;t++){const t=new THREE.Vector3,r={a:new THREE.Vector3,b:new THREE.Vector3,c:new THREE.Vector3};e.push(t),i.push(r)}}const i=this.morphNormals[t];e.vertices=this.morphTargets[t].vertices,e.computeFaceNormals(),e.computeVertexNormals();for(let e=0,t=this.faces.length;e<t;e++){const t=this.faces[e],r=i.faceNormals[e],n=i.vertexNormals[e];r.copy(t.normal),n.a.copy(t.vertexNormals[0]),n.b.copy(t.vertexNormals[1]),n.c.copy(t.vertexNormals[2])}}for(let e=0,t=this.faces.length;e<t;e++){const t=this.faces[e];t.normal=t.__originalFaceNormal,t.vertexNormals=t.__originalVertexNormals}},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new THREE.Box3),this.boundingBox.setFromPoints(this.vertices)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere=new THREE.Sphere),this.boundingSphere.setFromPoints(this.vertices)},merge:function(e,t,i=0){if(!e||!e.isGeometry)return void console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",e);let r;const n=this.vertices.length,a=this.vertices,s=e.vertices,o=this.faces,l=e.faces,d=this.colors,h=e.colors;void 0!==t&&(r=(new THREE.Matrix3).getNormalMatrix(t));for(let e=0,i=s.length;e<i;e++){const i=s[e].clone();void 0!==t&&i.applyMatrix4(t),a.push(i)}for(let e=0,t=h.length;e<t;e++)d.push(h[e].clone());for(let e=0,t=l.length;e<t;e++){const t=l[e];let a,s;const d=t.vertexNormals,h=t.vertexColors,c=new THREE.Face3(t.a+n,t.b+n,t.c+n);c.normal.copy(t.normal),void 0!==r&&c.normal.applyMatrix3(r).normalize();for(let e=0,t=d.length;e<t;e++)a=d[e].clone(),void 0!==r&&a.applyMatrix3(r).normalize(),c.vertexNormals.push(a);c.color.copy(t.color);for(let e=0,t=h.length;e<t;e++)s=h[e],c.vertexColors.push(s.clone());c.materialIndex=t.materialIndex+i,o.push(c)}for(let t=0,i=e.faceVertexUvs.length;t<i;t++){const i=e.faceVertexUvs[t];void 0===this.faceVertexUvs[t]&&(this.faceVertexUvs[t]=[]);for(let e=0,r=i.length;e<r;e++){const r=i[e],n=[];for(let e=0,t=r.length;e<t;e++)n.push(r[e].clone());this.faceVertexUvs[t].push(n)}}},mergeMesh:function(e){e&&e.isMesh?(e.matrixAutoUpdate&&e.updateMatrix(),this.merge(e.geometry,e.matrix)):console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.",e)},mergeVertices:function(e=4){const t={},i=[],r=[],n=Math.pow(10,e);for(let e=0,a=this.vertices.length;e<a;e++){const a=this.vertices[e],s=Math.round(a.x*n)+"_"+Math.round(a.y*n)+"_"+Math.round(a.z*n);void 0===t[s]?(t[s]=e,i.push(this.vertices[e]),r[e]=i.length-1):r[e]=r[t[s]]}const a=[];for(let e=0,t=this.faces.length;e<t;e++){const t=this.faces[e];t.a=r[t.a],t.b=r[t.b],t.c=r[t.c];const i=[t.a,t.b,t.c];for(let t=0;t<3;t++)if(i[t]===i[(t+1)%3]){a.push(e);break}}for(let e=a.length-1;e>=0;e--){const t=a[e];this.faces.splice(t,1);for(let e=0,i=this.faceVertexUvs.length;e<i;e++)this.faceVertexUvs[e].splice(t,1)}const s=this.vertices.length-i.length;return this.vertices=i,s},setFromPoints:function(e){this.vertices=[];for(let t=0,i=e.length;t<i;t++){const i=e[t];this.vertices.push(new THREE.Vector3(i.x,i.y,i.z||0))}return this},sortFacesByMaterialIndex:function(){const e=this.faces,t=e.length;for(let i=0;i<t;i++)e[i]._id=i;e.sort((function(e,t){return e.materialIndex-t.materialIndex}));const i=this.faceVertexUvs[0],r=this.faceVertexUvs[1];let n,a;i&&i.length===t&&(n=[]),r&&r.length===t&&(a=[]);for(let s=0;s<t;s++){const t=e[s]._id;n&&n.push(i[t]),a&&a.push(r[t])}n&&(this.faceVertexUvs[0]=n),a&&(this.faceVertexUvs[1]=a)},toJSON:function(){const e={metadata:{version:4.5,type:"Geometry",generator:"Geometry.toJSON"}};if(e.uuid=this.uuid,e.type=this.type,""!==this.name&&(e.name=this.name),void 0!==this.parameters){const t=this.parameters;for(const i in t)void 0!==t[i]&&(e[i]=t[i]);return e}const t=[];for(let e=0;e<this.vertices.length;e++){const i=this.vertices[e];t.push(i.x,i.y,i.z)}const i=[],r=[],n={},a=[],s={},o=[],l={};for(let e=0;e<this.faces.length;e++){const t=this.faces[e],r=!0,n=!1,a=void 0!==this.faceVertexUvs[0][e],s=t.normal.length()>0,o=t.vertexNormals.length>0,l=1!==t.color.r||1!==t.color.g||1!==t.color.b,p=t.vertexColors.length>0;let m=0;if(m=d(m,0,0),m=d(m,1,r),m=d(m,2,n),m=d(m,3,a),m=d(m,4,s),m=d(m,5,o),m=d(m,6,l),m=d(m,7,p),i.push(m),i.push(t.a,t.b,t.c),i.push(t.materialIndex),a){const t=this.faceVertexUvs[0][e];i.push(u(t[0]),u(t[1]),u(t[2]))}if(s&&i.push(h(t.normal)),o){const e=t.vertexNormals;i.push(h(e[0]),h(e[1]),h(e[2]))}if(l&&i.push(c(t.color)),p){const e=t.vertexColors;i.push(c(e[0]),c(e[1]),c(e[2]))}}function d(e,t,i){return i?e|1<<t:e&~(1<<t)}function h(e){const t=e.x.toString()+e.y.toString()+e.z.toString();return void 0!==n[t]||(n[t]=r.length/3,r.push(e.x,e.y,e.z)),n[t]}function c(e){const t=e.r.toString()+e.g.toString()+e.b.toString();return void 0!==s[t]||(s[t]=a.length,a.push(e.getHex())),s[t]}function u(e){const t=e.x.toString()+e.y.toString();return void 0!==l[t]||(l[t]=o.length/2,o.push(e.x,e.y)),l[t]}return e.data={},e.data.vertices=t,e.data.normals=r,a.length>0&&(e.data.colors=a),o.length>0&&(e.data.uvs=[o]),e.data.faces=i,e},clone:function(){return(new r).copy(this)},copy:function(e){this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.name=e.name;const t=e.vertices;for(let e=0,i=t.length;e<i;e++)this.vertices.push(t[e].clone());const i=e.colors;for(let e=0,t=i.length;e<t;e++)this.colors.push(i[e].clone());const r=e.faces;for(let e=0,t=r.length;e<t;e++)this.faces.push(r[e].clone());for(let t=0,i=e.faceVertexUvs.length;t<i;t++){const i=e.faceVertexUvs[t];void 0===this.faceVertexUvs[t]&&(this.faceVertexUvs[t]=[]);for(let e=0,r=i.length;e<r;e++){const r=i[e],n=[];for(let e=0,t=r.length;e<t;e++){const t=r[e];n.push(t.clone())}this.faceVertexUvs[t].push(n)}}const n=e.morphTargets;for(let e=0,t=n.length;e<t;e++){const t={};if(t.name=n[e].name,void 0!==n[e].vertices){t.vertices=[];for(let i=0,r=n[e].vertices.length;i<r;i++)t.vertices.push(n[e].vertices[i].clone())}if(void 0!==n[e].normals){t.normals=[];for(let i=0,r=n[e].normals.length;i<r;i++)t.normals.push(n[e].normals[i].clone())}this.morphTargets.push(t)}const a=e.morphNormals;for(let e=0,t=a.length;e<t;e++){const t={};if(void 0!==a[e].vertexNormals){t.vertexNormals=[];for(let i=0,r=a[e].vertexNormals.length;i<r;i++){const r=a[e].vertexNormals[i],n={};n.a=r.a.clone(),n.b=r.b.clone(),n.c=r.c.clone(),t.vertexNormals.push(n)}}if(void 0!==a[e].faceNormals){t.faceNormals=[];for(let i=0,r=a[e].faceNormals.length;i<r;i++)t.faceNormals.push(a[e].faceNormals[i].clone())}this.morphNormals.push(t)}const s=e.skinWeights;for(let e=0,t=s.length;e<t;e++)this.skinWeights.push(s[e].clone());const o=e.skinIndices;for(let e=0,t=o.length;e<t;e++)this.skinIndices.push(o[e].clone());const l=e.lineDistances;for(let e=0,t=l.length;e<t;e++)this.lineDistances.push(l[e]);const d=e.boundingBox;null!==d&&(this.boundingBox=d.clone());const h=e.boundingSphere;return null!==h&&(this.boundingSphere=h.clone()),this.elementsNeedUpdate=e.elementsNeedUpdate,this.verticesNeedUpdate=e.verticesNeedUpdate,this.uvsNeedUpdate=e.uvsNeedUpdate,this.normalsNeedUpdate=e.normalsNeedUpdate,this.colorsNeedUpdate=e.colorsNeedUpdate,this.lineDistancesNeedUpdate=e.lineDistancesNeedUpdate,this.groupsNeedUpdate=e.groupsNeedUpdate,this},toBufferGeometry:function(){const e=(new n).fromGeometry(this),t=new THREE.BufferGeometry,i=new Float32Array(3*e.vertices.length);if(t.setAttribute("position",new THREE.BufferAttribute(i,3).copyVector3sArray(e.vertices)),e.normals.length>0){const i=new Float32Array(3*e.normals.length);t.setAttribute("normal",new THREE.BufferAttribute(i,3).copyVector3sArray(e.normals))}if(e.colors.length>0){const i=new Float32Array(3*e.colors.length);t.setAttribute("color",new THREE.BufferAttribute(i,3).copyColorsArray(e.colors))}if(e.uvs.length>0){const i=new Float32Array(2*e.uvs.length);t.setAttribute("uv",new THREE.BufferAttribute(i,2).copyVector2sArray(e.uvs))}if(e.uvs2.length>0){const i=new Float32Array(2*e.uvs2.length);t.setAttribute("uv2",new THREE.BufferAttribute(i,2).copyVector2sArray(e.uvs2))}t.groups=e.groups;for(const i in e.morphTargets){const r=[],n=e.morphTargets[i];for(let e=0,t=n.length;e<t;e++){const t=n[e],i=new THREE.Float32BufferAttribute(3*t.data.length,3);i.name=t.name,r.push(i.copyVector3sArray(t.data))}t.morphAttributes[i]=r}if(e.skinIndices.length>0){const i=new THREE.Float32BufferAttribute(4*e.skinIndices.length,4);t.setAttribute("skinIndex",i.copyVector4sArray(e.skinIndices))}if(e.skinWeights.length>0){const i=new THREE.Float32BufferAttribute(4*e.skinWeights.length,4);t.setAttribute("skinWeight",i.copyVector4sArray(e.skinWeights))}return null!==e.boundingSphere&&(t.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(t.boundingBox=e.boundingBox.clone()),t},computeTangents:function(){console.error("THREE.Geometry: .computeTangents() has been removed.")},computeLineDistances:function(){console.error("THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.")},applyMatrix:function(e){return console.warn("THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(e)},dispose:function(){this.dispatchEvent({type:"dispose"})}}),r.createBufferGeometryFromObject=function(e){let t=new THREE.BufferGeometry;const i=e.geometry;if(e.isPoints||e.isLine){const e=new THREE.Float32BufferAttribute(3*i.vertices.length,3),r=new THREE.Float32BufferAttribute(3*i.colors.length,3);if(t.setAttribute("position",e.copyVector3sArray(i.vertices)),t.setAttribute("color",r.copyColorsArray(i.colors)),i.lineDistances&&i.lineDistances.length===i.vertices.length){const e=new THREE.Float32BufferAttribute(i.lineDistances.length,1);t.setAttribute("lineDistance",e.copyArray(i.lineDistances))}null!==i.boundingSphere&&(t.boundingSphere=i.boundingSphere.clone()),null!==i.boundingBox&&(t.boundingBox=i.boundingBox.clone())}else e.isMesh&&(t=i.toBufferGeometry());return t};class n{constructor(){this.vertices=[],this.normals=[],this.colors=[],this.uvs=[],this.uvs2=[],this.groups=[],this.morphTargets={},this.skinWeights=[],this.skinIndices=[],this.boundingBox=null,this.boundingSphere=null,this.verticesNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.uvsNeedUpdate=!1,this.groupsNeedUpdate=!1}computeGroups(e){const t=[];let i,r,n;const a=e.faces;for(r=0;r<a.length;r++){const e=a[r];e.materialIndex!==n&&(n=e.materialIndex,void 0!==i&&(i.count=3*r-i.start,t.push(i)),i={start:3*r,materialIndex:n})}void 0!==i&&(i.count=3*r-i.start,t.push(i)),this.groups=t}fromGeometry(e){const t=e.faces,i=e.vertices,r=e.faceVertexUvs,n=r[0]&&r[0].length>0,a=r[1]&&r[1].length>0,s=e.morphTargets,o=s.length;let l;if(o>0){l=[];for(let e=0;e<o;e++)l[e]={name:s[e].name,data:[]};this.morphTargets.position=l}const d=e.morphNormals,h=d.length;let c;if(h>0){c=[];for(let e=0;e<h;e++)c[e]={name:d[e].name,data:[]};this.morphTargets.normal=c}const u=e.skinIndices,p=e.skinWeights,m=u.length===i.length,f=p.length===i.length;i.length>0&&0===t.length&&console.error("THREE.DirectGeometry: Faceless geometries are not supported.");for(let e=0;e<t.length;e++){const g=t[e];this.vertices.push(i[g.a],i[g.b],i[g.c]);const v=g.vertexNormals;if(3===v.length)this.normals.push(v[0],v[1],v[2]);else{const e=g.normal;this.normals.push(e,e,e)}const y=g.vertexColors;if(3===y.length)this.colors.push(y[0],y[1],y[2]);else{const e=g.color;this.colors.push(e,e,e)}if(!0===n){const t=r[0][e];void 0!==t?this.uvs.push(t[0],t[1],t[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ",e),this.uvs.push(new THREE.Vector2,new THREE.Vector2,new THREE.Vector2))}if(!0===a){const t=r[1][e];void 0!==t?this.uvs2.push(t[0],t[1],t[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ",e),this.uvs2.push(new THREE.Vector2,new THREE.Vector2,new THREE.Vector2))}for(let e=0;e<o;e++){const t=s[e].vertices;l[e].data.push(t[g.a],t[g.b],t[g.c])}for(let t=0;t<h;t++){const i=d[t].vertexNormals[e];c[t].data.push(i.a,i.b,i.c)}m&&this.skinIndices.push(u[g.a],u[g.b],u[g.c]),f&&this.skinWeights.push(p[g.a],p[g.b],p[g.c])}return this.computeGroups(e),this.verticesNeedUpdate=e.verticesNeedUpdate,this.normalsNeedUpdate=e.normalsNeedUpdate,this.colorsNeedUpdate=e.colorsNeedUpdate,this.uvsNeedUpdate=e.uvsNeedUpdate,this.groupsNeedUpdate=e.groupsNeedUpdate,null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone()),this}}THREE.Geometry=r})(),(()=>{var e=new THREE.Box3,t=new THREE.Matrix4,i=new THREE.Ray,n=new THREE.Sphere;class a extends THREE.LineSegments{constructor(e,t){super(e,t),this.type="LineSegmentsEx"}init(e){}destroy(){}intersectBoxWithDistance(t,i){var r=this.geometry,n=this.matrixWorld;return i&&(n=this.matrixWorld.clone()).multiplyMatrices(this.matrixWorld,i),r.boundingBox||r.computeBoundingBox(),e.copy(r.boundingBox),e.applyMatrix4(n),t.ray.intersectBoxWithDistance(e)}intersectBoxWithDistanceByIndices(e,t){var i=this.geometry.attributes.position.array,n=0,a=i.length;t&&t.indexCount>0&&(n=t.positionStart,a=t.positionStart+t.positionCount);var s=r.Utils.box3FromArrayRange(i,n,a);return s.applyMatrix4(this.matrixWorld),e.ray.intersectBoxWithDistance(s)}raycastByIndices(e,a,s,o,l){var d=e.linePrecision;e.linePrecision=void 0===l?r.GlobalData.LineSelectRange:r.GlobalData.LineSelectRange*l;var h,c=e.linePrecision,u=c*c;o?(h=this.matrixWorld.clone()).multiplyMatrices(this.matrixWorld,o):h=this.matrixWorld;var p=this.geometry;if(null===p.boundingSphere&&p.computeBoundingSphere(),n.copy(p.boundingSphere),n.applyMatrix4(h),!1!==e.ray.intersectsSphere(n)){t.copy(h).invert(),i.copy(e.ray).applyMatrix4(t);var m=new THREE.Vector3,f=new THREE.Vector3,g=new THREE.Vector3,v=new THREE.Vector3,y=p.attributes.position.array,M=p.index.array,E=0,b=M.length;s&&s.indexCount>0&&(E=s.indexStart,b=s.indexStart+s.indexCount);for(var x=E;x<b-1;x+=2){var I=M[x],T=M[x+1];if(m.fromArray(y,3*I),f.fromArray(y,3*T),!(i.distanceSqToSegment(m,f,v,g)>u)){v.applyMatrix4(h);var C=e.ray.origin.distanceTo(v);C<e.near||C>e.far||a.push({distance:C,point:g.clone().applyMatrix4(h),index:x,face:null,faceIndex:null,object:this})}}e.linePrecision=d}}}r.LineSegmentsEx=a})(),THREE.LineSegmentsGeometry=function(){THREE.InstancedBufferGeometry.call(this),this.type="LineSegmentsGeometry";this.setIndex([0,2,1,2,3,1,2,4,3,4,5,3,4,6,5,6,7,5]),this.setAttribute("position",new THREE.Float32BufferAttribute([-1,2,0,1,2,0,-1,1,0,1,1,0,-1,0,0,1,0,0,-1,-1,0,1,-1,0],3)),this.setAttribute("uv",new THREE.Float32BufferAttribute([-1,2,1,2,-1,1,1,1,-1,-1,1,-1,-1,-2,1,-2],2))},THREE.LineSegmentsGeometry.prototype=Object.assign(Object.create(THREE.InstancedBufferGeometry.prototype),{constructor:THREE.LineSegmentsGeometry,isLineSegmentsGeometry:!0,applyMatrix4:function(e){var t=this.attributes.instanceStart,i=this.attributes.instanceEnd;return void 0!==t&&(e.applyToBufferAttribute(t),e.applyToBufferAttribute(i),t.data.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},setPositions:function(e){var t;e instanceof Float32Array?t=e:Array.isArray(e)&&(t=new Float32Array(e));var i=new THREE.InstancedInterleavedBuffer(t,6,1);return this.setAttribute("instanceStart",new THREE.InterleavedBufferAttribute(i,3,0)),this.setAttribute("instanceEnd",new THREE.InterleavedBufferAttribute(i,3,3)),this.computeBoundingBox(),this.computeBoundingSphere(),this},setColors:function(e){var t;e instanceof Float32Array?t=e:Array.isArray(e)&&(t=new Float32Array(e));var i=new THREE.InstancedInterleavedBuffer(t,6,1);return this.setAttribute("instanceColorStart",new THREE.InterleavedBufferAttribute(i,3,0)),this.setAttribute("instanceColorEnd",new THREE.InterleavedBufferAttribute(i,3,3)),this},fromWireframeGeometry:function(e){return this.setPositions(e.attributes.position.array),this},fromEdgesGeometry:function(e){return this.setPositions(e.attributes.position.array),this},fromMesh:function(e){return this.fromWireframeGeometry(new THREE.WireframeGeometry(e.geometry)),this},fromLineSegments:function(e){var t=e.geometry;if(t.isGeometry)this.setPositions(t.vertices);else if(t.isBufferGeometry)if(null===t.index)this.setPositions(t.position.array);else{for(var i=t.index.array,r=t.attributes.position.array,n=t.attributes.position.itemSize,a=new r.constructor(i.length*n),s=0,o=0,l=0,d=i.length;l<d;l++){s=i[l]*n;for(var h=0;h<n;h++)a[o++]=r[s++]}this.setPositions(a)}return this},fromLine:function(e){var t,i=e.geometry;i.isGeometry?t=i.vertices:i.isBufferGeometry&&(t=i.attributes.position.array);for(var r=t.length-3,n=new Float32Array(2*r),a=0;a<r;a+=3)n[2*a]=t[a],n[2*a+1]=t[a+1],n[2*a+2]=t[a+2],n[2*a+3]=t[a+3],n[2*a+4]=t[a+4],n[2*a+5]=t[a+5];return this.setPositions(n),this},fromLineLoop:function(e){var t,i=line.geometry;i.isGeometry?t=i.vertices:i.isBufferGeometry&&(t=i.attributes.position.array);for(var r=t.length,n=new Float32Array(2*r),a=0;a<r;a+=3)a<r-3?(n[2*a]=t[a],n[2*a+1]=t[a+1],n[2*a+2]=t[a+2],n[2*a+3]=t[a+3],n[2*a+4]=t[a+4],n[2*a+5]=t[a+5]):(n[2*a]=t[a],n[2*a+1]=t[a+1],n[2*a+2]=t[a+2],n[2*a+3]=t[0],n[2*a+4]=t[1],n[2*a+5]=t[2]);return this.setPositions(n),this},computeBoundingBox:(C=new THREE.Box3,function(){null===this.boundingBox&&(this.boundingBox=new THREE.Box3);var e=this.attributes.instanceStart,t=this.attributes.instanceEnd;void 0!==e&&void 0!==t&&(this.boundingBox.setFromBufferAttribute(e),C.setFromBufferAttribute(t),this.boundingBox.union(C))}),computeBoundingSphere:(T=new THREE.Vector3,function(){null===this.boundingSphere&&(this.boundingSphere=new THREE.Sphere),null===this.boundingBox&&this.computeBoundingBox();var e=this.attributes.instanceStart,t=this.attributes.instanceEnd;if(void 0!==e&&void 0!==t){var i=this.boundingSphere.center;this.boundingBox.getCenter(i);for(var r=0,n=0,a=e.count;n<a;n++)T.fromBufferAttribute(e,n),r=Math.max(r,i.distanceToSquared(T)),T.fromBufferAttribute(t,n),r=Math.max(r,i.distanceToSquared(T));this.boundingSphere.radius=Math.sqrt(r),isNaN(this.boundingSphere.radius)&&console.error("THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.",this)}}),toJSON:function(){},clone:function(){},copy:function(e){return this}}),THREE.LineGeometry=function(){THREE.LineSegmentsGeometry.call(this),this.type="LineGeometry"},THREE.LineGeometry.prototype=Object.assign(Object.create(THREE.LineSegmentsGeometry.prototype),{constructor:THREE.LineGeometry,isLineGeometry:!0,setPositions:function(e){for(var t=e.length-3,i=new Float32Array(2*t),r=0;r<t;r+=3)i[2*r]=e[r],i[2*r+1]=e[r+1],i[2*r+2]=e[r+2],i[2*r+3]=e[r+3],i[2*r+4]=e[r+4],i[2*r+5]=e[r+5];return THREE.LineSegmentsGeometry.prototype.setPositions.call(this,i),this},setColors:function(e){for(var t=e.length-3,i=new Float32Array(2*t),r=0;r<t;r+=3)i[2*r]=e[r],i[2*r+1]=e[r+1],i[2*r+2]=e[r+2],i[2*r+3]=e[r+3],i[2*r+4]=e[r+4],i[2*r+5]=e[r+5];return THREE.LineSegmentsGeometry.prototype.setColors.call(this,i),this},fromLine:function(e){var t=e.geometry;return t.isGeometry?this.setPositions(t.vertices):t.isBufferGeometry&&this.setPositions(t.position.array),this},copy:function(e){return this}}),THREE.LineSegments2=function(e,t){THREE.Mesh.call(this),this.type="LineSegments2",this.geometry=void 0!==e?e:new THREE.LineSegmentsGeometry,this.material=void 0!==t?t:new THREE.LineMaterial({color:16777215*Math.random()})},THREE.LineSegments2.prototype=Object.assign(Object.create(THREE.Mesh.prototype),{constructor:THREE.LineSegments2,isLineSegments2:!0,computeLineDistances:(w=new THREE.Vector3,S=new THREE.Vector3,function(){for(var e=this.geometry,t=e.attributes.instanceStart,i=e.attributes.instanceEnd,r=new Float32Array(2*t.data.count),n=0,a=0,s=t.data.count;n<s;n++,a+=2)w.fromBufferAttribute(t,n),S.fromBufferAttribute(i,n),r[a]=0===a?0:r[a-1],r[a+1]=r[a]+w.distanceTo(S);var o=new THREE.InstancedInterleavedBuffer(r,2,1);return e.setAttribute("instanceDistanceStart",new THREE.InterleavedBufferAttribute(o,1,0)),e.setAttribute("instanceDistanceEnd",new THREE.InterleavedBufferAttribute(o,1,1)),this}),copy:function(e){return this},raycast:function(){var e=new THREE.Vector4,t=new THREE.Vector4,i=new THREE.Vector4,r=new THREE.Vector3,n=new THREE.Matrix4,a=new THREE.Line3,s=new THREE.Vector3;return function(o,l){null===o.camera&&console.error('LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2.');var d=o.ray,h=o.camera,c=h.projectionMatrix,u=this.geometry,p=this.material,m=p.resolution,f=p.linewidth,g=u.attributes.instanceStart,v=u.attributes.instanceEnd;d.at(1,i),i.w=1,i.applyMatrix4(h.matrixWorldInverse),i.applyMatrix4(c),i.multiplyScalar(1/i.w),i.x*=m.x/2,i.y*=m.y/2,i.z=0,r.copy(i);var y=this.matrixWorld;n.multiplyMatrices(h.matrixWorldInverse,y);for(var M=0,E=g.count;M<E;M++){e.fromBufferAttribute(g,M),t.fromBufferAttribute(v,M),e.w=1,t.w=1,e.applyMatrix4(n),t.applyMatrix4(n),e.applyMatrix4(c),t.applyMatrix4(c),e.multiplyScalar(1/e.w),t.multiplyScalar(1/t.w);var b=e.z<-1&&t.z<-1,x=e.z>1&&t.z>1;if(!b&&!x){e.x*=m.x/2,e.y*=m.y/2,t.x*=m.x/2,t.y*=m.y/2,a.start.copy(e),a.start.z=0,a.end.copy(t),a.end.z=0;var I=a.closestPointToPointParameter(r,!0);a.at(I,s);var T=THREE.Math.lerp(e.z,t.z,I),C=T>=-1&&T<=1,w=r.distanceTo(s)<.5*f;if(C&&w){a.start.fromBufferAttribute(g,M),a.end.fromBufferAttribute(v,M),a.start.applyMatrix4(y),a.end.applyMatrix4(y);var S=new THREE.Vector3,A=new THREE.Vector3;d.distanceSqToSegment(a.start,a.end,A,S),l.push({point:A,pointOnLine:S,distance:d.origin.distanceTo(A),object:this,face:null,faceIndex:M,uv:null,uv2:null})}}}}}()}),THREE.Line2=function(e,t){THREE.LineSegments2.call(this),this.type="Line2",this.geometry=void 0!==e?e:new THREE.LineGeometry,this.material=void 0!==t?t:new THREE.LineMaterial({color:16777215*Math.random()}),this.groundCurve=void 0},THREE.Line2.prototype=Object.assign(Object.create(THREE.LineSegments2.prototype),{constructor:THREE.Line2,isLine2:!0,copy:function(e){return this},createGroundCurve:function(e){this.groundCurve=r.GroundPrimitiveManager.getInstance().createGroundCurve(e)}}),function(){THREE.UniformsLib.line={linewidth:{value:1},resolution:{value:new THREE.Vector2(1,1)},dashScale:{value:1},dashSize:{value:1},dashOffset:{value:0},gapSize:{value:1},opacity:{value:1},uvTransform:{value:new THREE.Matrix3},clippingTolerance:{value:0},clippingPlanes:{value:new Float32Array(24)},outNormal:{value:new THREE.Vector3}},THREE.ShaderLib.line={uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.fog,THREE.UniformsLib.line]),vertexShader:"\n\t\t#include <common>\n\t\t#include <color_pars_vertex>\n\t\t#include <fog_pars_vertex>\n\t\t#include <logdepthbuf_pars_vertex>\n\t\t#include <clipping_planes_pars_vertex>\n\n\t\t#if defined( USE_MAP )\n uniform mat3 uvTransform;\n \t#endif\n\n\t\tuniform float linewidth;\n\t\tuniform vec2 resolution;\n\t\n\n\t\tattribute vec3 instanceStart;\n\t\tattribute vec3 instanceEnd;\n\n\t\tattribute vec3 instanceColorStart;\n\t\tattribute vec3 instanceColorEnd;\n\n\t\tattribute float instanceDistanceStart;//for quick to change style and map\n\t\tattribute float instanceDistanceEnd;\n\n\t\tvarying vec2 vUv;\n\t\tvarying float rate;\n\t\tuniform float totalSize;//v is depend on nowSize/Totalsize\n\t\t#if defined( USE_MAP )\n\n\t\t\t//uniform vec4 uv;\n\t\t\t//uniform mat3 rotateMatrix;\n\n\t\t\tvarying vec2 vUv2;\n\n\t\t#endif\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashScale;\n\t\t\tattribute float instanceDistanceStart;\n\t\t\tattribute float instanceDistanceEnd;\n\t\t\tvarying float vLineDistance;\n\n\t\t#endif\n\n\t\tvoid trimSegment( const in vec4 start, inout vec4 end ) {\n\n\t\t\t// trim end segment so it terminates between the camera plane and the near plane\n\n\t\t\t// conservative estimate of the near plane\n\t\t\tfloat a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column\n\t\t\tfloat b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column\n\t\t\tfloat nearEstimate = - 0.5 * b / a;\n\n\t\t\tfloat alpha = ( nearEstimate - start.z ) / ( end.z - start.z );\n\n\t\t\tend.xyz = mix( start.xyz, end.xyz, alpha );\n\n\t\t}\n\n\t\t#ifdef USE_OUTNORMAL\n \tuniform vec3 outNormal;\n\t\t\tvarying float vIsVisible;\n\n \t#endif\n\n\t\tvoid main() {\n\n\t\t\t#ifdef USE_COLOR\n\n\t\t\t\tvColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;\n\n\t\t\t#endif\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;\n\n\t\t\t#endif\n\n\t\t\tfloat aspect = resolution.x / resolution.y;\n\n\t\t\tvUv = uv;\n\t\t\trate = instanceDistanceEnd/totalSize;\n\n\t\t\t#if defined( USE_MAP )\n\t\t\t\t//u: uv.x* 0.5 + 0.5, v: instanceDistanceEnd/totalSize\n\t\t\t\tvUv2 = vec2((uv.x* 0.5 + 0.5) - 0.5,instanceDistanceEnd/totalSize - 0.5) + vec2(0.5, 0.5);\n\t\t\t\tvUv2 = ( uvTransform * vec3( vUv2, 1 ) ).xy;\n\t\t\t#endif\n\t\t\t// camera space\n\t\t\tvec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );\n\t\t\tvec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );\n\n\t\t\t// special case for perspective projection, and segments that terminate either in, or behind, the camera plane\n\t\t\t// clearly the gpu firmware has a way of addressing this issue when projecting into ndc space\n\t\t\t// but we need to perform ndc-space calculations in the shader, so we must address this issue directly\n\t\t\t// perhaps there is a more elegant solution -- WestLangley\n\n\t\t\tbool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column\n\n\t\t\tif ( perspective ) {\n\n\t\t\t\tif ( start.z < 0.0 && end.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( start, end );\n\n\t\t\t\t} else if ( end.z < 0.0 && start.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( end, start );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// clip space\n\t\t\tvec4 clipStart = projectionMatrix * start;\n\t\t\tvec4 clipEnd = projectionMatrix * end;\n\n\t\t\t// ndc space\n\t\t\tvec2 ndcStart = clipStart.xy / clipStart.w;\n\t\t\tvec2 ndcEnd = clipEnd.xy / clipEnd.w;\n\n\t\t\t// direction\n\t\t\tvec2 dir = ndcEnd - ndcStart;\n\n\t\t\t// account for clip-space aspect ratio\n\t\t\tdir.x *= aspect;\n\t\t\tdir = normalize( dir );\n\n\t\t\t// perpendicular to dir\n\t\t\tvec2 offset = vec2( dir.y, - dir.x );\n\n\t\t\t// undo aspect ratio adjustment\n\t\t\tdir.x /= aspect;\n\t\t\toffset.x /= aspect;\n\n\t\t\t// sign flip\n\t\t\tif ( position.x < 0.0 ) offset *= - 1.0;\n\n\t\t\t// endcaps\n\t\t\tif ( position.y < 0.0 ) {\n\n\t\t\t\toffset += - dir;\n\n\t\t\t} else if ( position.y > 1.0 ) {\n\n\t\t\t\toffset += dir;\n\n\t\t\t}\n\n\t\t\t// adjust for linewidth\n\t\t\toffset *= linewidth;\n\n\t\t\t// adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...\n\t\t\toffset /= resolution.y;\n\n\t\t\t// select end\n\t\t\tvec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;\n\n\t\t\t// back to clip space\n\t\t\toffset *= clip.w;\n\n\t\t\tclip.xy += offset;\n\n\t\t\tgl_Position = clip;\n\t\t\tvec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation\n\n\t\t\t#ifdef USE_OUTNORMAL\n\t\t\t\tvec3 viewNormal = normalMatrix * outNormal;\n \tvIsVisible = dot(normalize(viewNormal), normalize(mvPosition.xyz)) > 0.0?1.0:-1.0;\n \t#endif\n\t\t\t#include <logdepthbuf_vertex>\n\t\t\t#include <clipping_planes_vertex>\n\t\t\t#include <fog_vertex>\n\n\t\t}\n\t\t",fragmentShader:"\n\t\tuniform vec3 diffuse;\n\t\tuniform float opacity;\n\t\tuniform float visibility;\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashSize;\n\t\t\tuniform float dashOffset;\n\t\t\tuniform float gapSize;\n\n\t\t#endif\n\n\t\t#ifdef USE_OUTNORMAL\n\t\t\tvarying float vIsVisible;\n\t\t#endif\n\t\tvarying float vLineDistance;\n\t\tvarying float rate;\n\t\t#include <map_pars_fragment>\n\t\t#include <alphamap_pars_fragment>\n\t\t#if defined( USE_MAP )\n\t\t\tvarying vec2 vUv2;\n\t\t#endif\n\t\t#include <common>\n\t\t#include <color_pars_fragment>\n\t\t#include <fog_pars_fragment>\n\t\t#include <logdepthbuf_pars_fragment>\n\t\t#include <clipping_planes_pars_fragment>\n\n\t\tvarying vec2 vUv;\n\t\tuniform float clippingTolerance;\n\n\t\tvoid main() {\n\t\t\t#ifdef USE_OUTNORMAL\n\t\t\t\tif(vIsVisible<0.0) discard;\n\t\t\t#endif\n\t\t\t#if NUM_CLIPPING_PLANES > 0\n\n\t\t\t\tvec4 plane;\n\n\t\t\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\n\t\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\t\tif (dot( vClipPosition, plane.xyz ) > plane.w + clippingTolerance ) discard;\n\t\t\t\t}\n\n\t\t\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\n\t\t\t\t\tbool clipped = true;\n\n\t\t\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\n\t\t\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t\t\n\t\t\t\t\t}\n\t\t\t\n\t\t\t\t\tif ( clipped ) discard;\n\t\t\t\n\t\t\t\t#endif\n\t\t\t#endif\n\n\t\t\tif(rate > visibility) discard;\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tif ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps\n\n\t\t\t\tif ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX\n\n\t\t\t#endif\n\n\t\t\tfloat alpha = opacity;\n\n\t\t\t#ifdef ALPHA_TO_COVERAGE\n\n\t\t\t// artifacts appear on some hardware if a derivative is taken within a conditional\n\t\t\tfloat a = vUv.x;\n\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\tfloat len2 = a * a + b * b;\n\t\t\tfloat dlen = fwidth( len2 );\n\n\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\talpha = 1.0 - smoothstep( 1.0 - dlen, 1.0 + dlen, len2 );\n\n\t\t\t}\n\n\t\t\t#else\n\n\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\tfloat a = vUv.x;\n\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\tfloat len2 = a * a + b * b;\n\n\t\t\t\tif ( len2 > 1.0 ) discard;\n\n\t\t\t}\n\n\t\t\t#endif\n\n\t\t\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t\t\t#ifdef USE_MAP\n\t\t\t vec4 texelColor = texture2D( map, vUv2 );\n\t\t\t texelColor = mapTexelToLinear( texelColor );\n\t\t\t diffuseColor = vec4(texelColor.rgb, opacity);\n\t\t\t#endif\n\n\t\t\t#ifdef USE_ALPHAMAP\n\t\t\t\tdiffuseColor.a *= texture2D( alphaMap, vUv2 ).a;\n\t\t\t#endif\n\t\t\t#include <alphatest_fragment>\n\n\n\t\t\t#include <logdepthbuf_fragment>\n\t\t\t#include <color_fragment>\n\n\t\t\tgl_FragColor = vec4( diffuseColor.rgb, diffuseColor.a );\n\n\t\t\t#include <premultiplied_alpha_fragment>\n\t\t\t#include <tonemapping_fragment>\n\t\t\t#include <encodings_fragment>\n\t\t\t#include <fog_fragment>\n\n\t\t}\n\t\t"};class e extends THREE.ShaderMaterial{constructor(e){super({type:"LineMaterial",uniforms:THREE.UniformsUtils.clone(THREE.ShaderLib.line.uniforms),vertexShader:THREE.ShaderLib.line.vertexShader,fragmentShader:THREE.ShaderLib.line.fragmentShader,clipping:!1}),this.dashed=!1,this.alphaMap=null,this.visibility=1,this.outNormal=new THREE.Vector3(0),Object.defineProperties(this,{color:{enumerable:!0,get:function(){return this.uniforms.diffuse.value},set:function(e){this.uniforms.diffuse.value=e}},linewidth:{enumerable:!0,get:function(){return this.uniforms.linewidth.value},set:function(e){this.uniforms.linewidth.value=e}},dashScale:{enumerable:!0,get:function(){return this.uniforms.dashScale.value},set:function(e){this.uniforms.dashScale.value=e}},dashSize:{enumerable:!0,get:function(){return this.uniforms.dashSize.value},set:function(e){this.uniforms.dashSize.value=e}},dashOffset:{enumerable:!0,get:function(){return this.uniforms.dashOffset.value},set:function(e){this.uniforms.dashOffset.value=e}},gapSize:{enumerable:!0,get:function(){return this.uniforms.gapSize.value},set:function(e){this.uniforms.gapSize.value=e}},opacity:{enumerable:!0,get:function(){return this.uniforms.opacity.value},set:function(e){this.uniforms.opacity.value=e}},map:{enumerable:!0,get:function(){return this.uniforms.map.value},set:function(e){this.uniforms.map.value=e,r.MaterialUtil.updateUVMatrix(this.uniforms.map.value),this.uniforms.uvTransform.value=this.uniforms.map.value.matrix}},resolution:{enumerable:!0,get:function(){return this.uniforms.resolution.value},set:function(e){this.uniforms.resolution.value.copy(e)}},clippingTolerance:{enumerable:!0,get:function(){return this.uniforms.clippingTolerance.value},set:function(e){this.uniforms.clippingTolerance.value=e}},alphaToCoverage:{enumerable:!0,get:function(){return Boolean("ALPHA_TO_COVERAGE"in this.defines)},set:function(e){Boolean(e)!==Boolean("ALPHA_TO_COVERAGE"in this.defines)&&(this.needsUpdate=!0),e?(this.defines.ALPHA_TO_COVERAGE="",this.extensions.derivatives=!0):(delete this.defines.ALPHA_TO_COVERAGE,this.extensions.derivatives=!1)},totalSize:{enumerable:!0,get:function(){return this.uniforms.totalSize.value},set:function(e){this.uniforms.totalSize.value=e}},alphaMap:{enumerable:!0,get:function(){return this.uniforms.alphaMap.value},set:function(e){this.uniforms.alphaMap.value=e}},visibility:{enumerable:!0,get:function(){return this.uniforms.visibility.value},set:function(e){this.uniforms.visibility.value=e}},outNormal:{enumerable:!0,get:function(){return this.uniforms.outNormal.value},set:function(e){this.uniforms.outNormal.value=e}}}}),this.setValues(e)}}e.prototype.isLineMaterial=!0,THREE.LineMaterial=e}();var B={uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.fog,{linewidth:{value:1},resolution:{value:new THREE.Vector2(1,1)},dashArray:{value:0},dashRatio:{value:0},visibility:{value:1},alphaTest:{value:0},glowPower:{value:0},enableColorOverride:{value:!1},sizeAttenuation:{value:!1}}]),vertexShader:"\n #include <common>\n #include <logdepthbuf_pars_vertex>\n #include <fog_pars_vertex>\n attribute vec3 previous;\n attribute vec3 next;\n uniform vec2 resolution;\n uniform float linewidth;\n uniform vec3 diffuse;\n uniform float opacity;\n uniform bool sizeAttenuation;\n\n varying vec2 vUv;\n varying vec4 vColor;\n\n vec3 fix( vec4 i, float aspect ) {\n vec2 res = i.xy / i.w;\n res.x *= aspect;\n return vec3(res,0.0);\n }\n\n vec3 getDir(vec3 currentP, vec3 prevP, vec3 nextP){\n vec3 dir;\n if( nextP == currentP ) dir = normalize( currentP - prevP );\n else if( prevP == currentP ) dir = normalize( nextP - currentP );\n else {\n vec3 dir1 = normalize( currentP - prevP );\n vec3 dir2 = normalize( nextP - currentP );\n dir = normalize( dir1 + dir2 );\n }\n return dir;\n }\n\n vec4 getNormalWithWidth(float width, vec4 normal, float side){\n #if defined(SINGLE_EXPAND)\n if(side > 0.0){//left expand\n normal *= 2.0 * width;\n }\n #else\n normal *= width;\n #endif\n\n return normal;\n }\n\n mat4 inverse_mat4(mat4 m)\n {\n float Coef00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n float Coef02 = m[1][2] * m[3][3] - m[3][2] * m[1][3];\n float Coef03 = m[1][2] * m[2][3] - m[2][2] * m[1][3];\n \n float Coef04 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n float Coef06 = m[1][1] * m[3][3] - m[3][1] * m[1][3];\n float Coef07 = m[1][1] * m[2][3] - m[2][1] * m[1][3];\n \n float Coef08 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n float Coef10 = m[1][1] * m[3][2] - m[3][1] * m[1][2];\n float Coef11 = m[1][1] * m[2][2] - m[2][1] * m[1][2];\n \n float Coef12 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n float Coef14 = m[1][0] * m[3][3] - m[3][0] * m[1][3];\n float Coef15 = m[1][0] * m[2][3] - m[2][0] * m[1][3];\n \n float Coef16 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n float Coef18 = m[1][0] * m[3][2] - m[3][0] * m[1][2];\n float Coef19 = m[1][0] * m[2][2] - m[2][0] * m[1][2];\n \n float Coef20 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n float Coef22 = m[1][0] * m[3][1] - m[3][0] * m[1][1];\n float Coef23 = m[1][0] * m[2][1] - m[2][0] * m[1][1];\n \n const vec4 SignA = vec4( 1.0, -1.0, 1.0, -1.0);\n const vec4 SignB = vec4(-1.0, 1.0, -1.0, 1.0);\n \n vec4 Fac0 = vec4(Coef00, Coef00, Coef02, Coef03);\n vec4 Fac1 = vec4(Coef04, Coef04, Coef06, Coef07);\n vec4 Fac2 = vec4(Coef08, Coef08, Coef10, Coef11);\n vec4 Fac3 = vec4(Coef12, Coef12, Coef14, Coef15);\n vec4 Fac4 = vec4(Coef16, Coef16, Coef18, Coef19);\n vec4 Fac5 = vec4(Coef20, Coef20, Coef22, Coef23);\n \n vec4 Vec0 = vec4(m[1][0], m[0][0], m[0][0], m[0][0]);\n vec4 Vec1 = vec4(m[1][1], m[0][1], m[0][1], m[0][1]);\n vec4 Vec2 = vec4(m[1][2], m[0][2], m[0][2], m[0][2]);\n vec4 Vec3 = vec4(m[1][3], m[0][3], m[0][3], m[0][3]);\n \n vec4 Inv0 = SignA * (Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2);\n vec4 Inv1 = SignB * (Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4);\n vec4 Inv2 = SignA * (Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5);\n vec4 Inv3 = SignB * (Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5);\n \n mat4 Inverse = mat4(Inv0, Inv1, Inv2, Inv3);\n \n vec4 Row0 = vec4(Inverse[0][0], Inverse[1][0], Inverse[2][0], Inverse[3][0]);\n \n float Determinant = dot(m[0], Row0);\n \n Inverse /= Determinant;\n \n return Inverse;\n }\n\n void main() {\n \n float aspect = resolution.x / resolution.y;\n \n vColor = vec4( diffuse, opacity );\n vUv = uv;\n \n mat4 m = projectionMatrix * modelViewMatrix;\n vec4 finalPosition;\n\n float side = (vUv.x - 0.5) * (-2.0);\n if( sizeAttenuation == false) {\n finalPosition = m * vec4( position, 1.0 );\n vec4 prevPos = m * vec4( previous, 1.0 );\n vec4 nextPos = m * vec4( next, 1.0 );\n\n vec3 currentP = fix( finalPosition, aspect );\n vec3 prevP = fix( prevPos, aspect );\n vec3 nextP = fix( nextPos, aspect );\n \n vec3 dir = getDir(currentP, prevP, nextP);\n vec4 normal = vec4( -dir.y, dir.x, 0., 1. );\n normal = getNormalWithWidth(linewidth, normal, side);\n\n normal *= projectionMatrix;\n normal.xy *= finalPosition.w;\n normal.xy /= ( vec4( resolution, 0., 1. ) * projectionMatrix ).xy;\n finalPosition.xy += (normal.xy * side);\n\n }else{\n vec3 dir = getDir(position, previous, next);\n vec3 cameraDir = normalize((inverse_mat4(modelMatrix) * vec4(cameraPosition,1.0)).xyz - position);\n vec4 normal = vec4(normalize(cross( vec3( dir), cameraDir)), 1.0) ;//vec3( 0., 0., 1. )\n normal = getNormalWithWidth(0.5 * linewidth, normal, side);\n\n normal = normal * side* (-1.0) ;//frontSide\n finalPosition = m * vec4( position + normal.xyz, 1.0 );\n }\n \n gl_Position = finalPosition;\n \n #include <logdepthbuf_vertex>\n #include <fog_vertex>\n }\n ",fragmentShader:"\n #include <fog_pars_fragment>\n #include <common>\n #include <logdepthbuf_pars_fragment>\n \n #ifdef USE_MAP \n uniform sampler2D map;\n #endif\n\n #if defined(USE_MAP)||defined(USE_DASH)\n uniform mat3 uvTransform;\n #endif\n\n #ifdef USE_GLOW\n uniform float glowPower;\n #endif\n\n #ifdef USE_DASH\n uniform float dashArray;\n uniform float dashRatio;\n #endif\n\n uniform float visibility;\n uniform float alphaTest;\n uniform bool enableColorOverride;\n \n varying vec2 vUv;\n varying vec4 vColor;\n \n void main() {\n \n #include <logdepthbuf_fragment>\n vec4 diffuseColor = vColor;\n\n if(vUv.y > visibility) discard;\n \n vec2 uv = vUv;\n #if defined(USE_MAP)||defined(USE_DASH)\n uv = vec2(vUv.x - 0.5, vUv.y - 0.5) + vec2(0.5, 0.5);\n uv = ( uvTransform * vec3( uv, 1 ) ).xy;\n #endif\n\n\n #ifdef USE_DASH\n float dashoffset = dashArray * dashRatio;\n if((dashArray * dashRatio) - mod( uv.y, dashArray) < 0.0) discard; //diffuseColor.a = 0.0;\n #endif\n\n #ifdef USE_MAP\n if(!enableColorOverride)\n diffuseColor.xyz = texture2D( map, uv ).xyz;//*\n diffuseColor.a = texture2D( map, uv).a * 2.0;\n #endif\n\n if( diffuseColor.a < alphaTest ) discard;\n\n #ifdef USE_GLOW\n float glow = glowPower / abs(vUv.y - 0.5) - (glowPower / 0.5);\n // diffuseColor.rgb = max(vec3(glow - 1.0 + diffuseColor.rgb), diffuseColor.rgb);\n diffuseColor.a = clamp(0.0, 1.0, glow) * diffuseColor.a;\n #endif\n\n gl_FragColor = diffuseColor;\n \n #include <fog_fragment>\n }\n "};!function(){class e extends THREE.ShaderMaterial{constructor(e){super({uniforms:THREE.UniformsUtils.clone(B.uniforms),vertexShader:B.vertexShader,fragmentShader:B.fragmentShader}),this.type="MeshLineMaterial",this.totalSize=0,this.setValues(e)}set linewidth(e){this.uniforms&&this.uniforms.linewidth&&(this.uniforms.linewidth.value=e)}get linewidth(){return this.uniforms.linewidth.value}set map(e){this.uniforms.map.value=e,e&&(r.MaterialUtil.updateUVMatrix(this.uniforms.map.value),this.uniforms.uvTransform.value=this.uniforms.map.value.matrix)}get map(){return this.uniforms.map.value}set color(e){this.uniforms.diffuse.value=e}get color(){return this.uniforms.diffuse.value}set opacity(e){this.uniforms&&(this.uniforms.opacity.value=e)}get opacity(){return this.uniforms.opacity.value}set resolution(e){this.uniforms.resolution.value=e}get resolution(){return this.uniforms.resolution.value}set dashArray(e){this.uniforms.dashArray.value=e,e>0?this.defines.USE_DASH="":delete this.defines.USE_DASH}get dashArray(){return this.uniforms.dashArray.value}set dashRatio(e){this.uniforms.dashRatio.value=e}get dashRatio(){return this.uniforms.dashRatio.value}set visibility(e){this.uniforms.visibility.value=e}get visibility(){return this.uniforms.visibility.value}set alphaTest(e){this.uniforms&&(this.uniforms.alphaTest.value=e)}get alphaTest(){return this.uniforms.alphaTest.value}set glowPower(e){this.uniforms.glowPower.value=e,e>0?this.defines.USE_GLOW="":delete this.defines.USE_GLOW}set enableSingleExpand(e){e?this.defines.SINGLE_EXPAND="":delete this.defines.SINGLE_EXPAND}get enableSingleExpand(){return!!this.defines.SINGLE_EXPAND}get glowPower(){return this.uniforms.glowPower.value}set enableColorOverride(e){this.uniforms.enableColorOverride.value=e}get enableColorOverride(){return this.uniforms.enableColorOverride.value}set sizeAttenuation(e){this.uniforms.sizeAttenuation.value=e}get sizeAttenuation(){return this.uniforms.sizeAttenuation.value}copy(e){return THREE.ShaderMaterial.prototype.copy.call(this,e),this.linewidth=e.linewidth,this.map=e.map,this.alphaMap=e.alphaMap,this.color.copy(e.color),this.opacity=e.opacity,this.resolution.copy(e.resolution),this.dashArray=e.dashArray,this.dashRatio=e.dashRatio,this.visibility=e.visibility,this.alphaTest=e.alphaTest,this}}r.MeshLineMaterial=e}(),function(){class e extends THREE.BufferGeometry{constructor(){super(),this.type="MeshLineGeometry"}setPositions(e){if(!(e instanceof Float32Array||e instanceof Array))return void console.error("ERROR: The BufferArray of points is not instancied correctly.");let t=[];var i=[0];if(e.length&&e[0]instanceof THREE.Vector3)for(var r=0;r<e.length;r++){var n=e[r];if(t.push(n.x,n.y,n.z),t.push(n.x,n.y,n.z),r>0){let t=i[i.length-1]+this._distanceTo(n.x,n.y,n.z,e[r-1].x,e[r-1].y,e[r-1].z);i.push(t)}}else for(r=0;r<e.length;r+=3)if(t.push(e[r],e[r+1],e[r+2]),t.push(e[r],e[r+1],e[r+2]),r>0){let t=i[i.length-1]+this._distanceTo(e[r-3],e[r-2],e[r-1],e[r],e[r+1],e[r+2]);i.push(t)}const a=t.length/6;let s,o=[],l=[],d=[],h=[];s=this.compareV3(t,0,a-1)?this.copyV3(t,a-2):this.copyV3(t,0),o.push(s[0],s[1],s[2]),o.push(s[0],s[1],s[2]);const c=i[i.length-1];this.totalSize=c;for(let e=0;e<a;e++){let r=i[e]/c;if(h.push(0,r),h.push(1,r),e<a-1){s=this.copyV3(t,e),o.push(s[0],s[1],s[2]),o.push(s[0],s[1],s[2]);var u=2*e;d.push(u,u+1,u+2),d.push(u+2,u+1,u+3)}e>0&&(s=this.copyV3(t,e),l.push(s[0],s[1],s[2]),l.push(s[0],s[1],s[2]))}s=this.compareV3(t,a-1,0)?this.copyV3(t,1):this.copyV3(t,a-1),l.push(s[0],s[1],s[2]),l.push(s[0],s[1],s[2]);const p=new THREE.BufferAttribute(new Float32Array(t),3),m=new THREE.BufferAttribute(new Float32Array(o),3),f=new THREE.BufferAttribute(new Float32Array(l),3),g=new THREE.BufferAttribute(new Float32Array(h),2),v=new THREE.BufferAttribute(new Uint16Array(d),1);this.setAttribute("position",p),this.setAttribute("previous",m),this.setAttribute("next",f),this.setAttribute("uv",g),this.setIndex(v),this.computeBoundingSphere(),this.computeBoundingBox()}setPositions2(e,t){let i=[];for(var r=[0],n=0;n<e.length;n+=3)if(i.push(e[n],e[n+1],e[n+2]),i.push(e[n],e[n+1],e[n+2]),n>0){let t=r[r.length-1]+this._distanceTo(e[n-3],e[n-2],e[n-1],e[n],e[n+1],e[n+2]);r.push(t)}const a=i.length/6;let s,o=[],l=[],d=[],h=[],c=0;s=this.compareV3(i,0,a-1)?this.copyV3(i,a-2):this.copyV3(i,0),o.push(s[0],s[1],s[2]),o.push(s[0],s[1],s[2]);const u=r[r.length-1];this.totalSize=u;for(let e=0;e<a;e++){let n=r[e]/u;h.push(0,n),h.push(1,n);var p=!0,m=!0;if(e<a-1){if(t&&(c%2==1&&t[c]!=t[c+1]?(p=!1,c++):c%2==1&&t[c]==t[c+1]?c+=2:(c++,m=!1)),p){var f=2*e;d.push(f,f+1,f+2),d.push(f+2,f+1,f+3)}s=p?this.copyV3(i,e):this.copyV3(i,e+1),o.push(s[0],s[1],s[2]),o.push(s[0],s[1],s[2])}e>0&&(s=m?this.copyV3(i,e):this.copyV3(i,e-1),l.push(s[0],s[1],s[2]),l.push(s[0],s[1],s[2]))}s=this.compareV3(i,a-1,0)?this.copyV3(i,1):this.copyV3(i,a-1),l.push(s[0],s[1],s[2]),l.push(s[0],s[1],s[2]);const g=new THREE.BufferAttribute(new Float32Array(i),3),v=new THREE.BufferAttribute(new Float32Array(o),3),y=new THREE.BufferAttribute(new Float32Array(l),3),M=new THREE.BufferAttribute(new Float32Array(h),2),E=new THREE.BufferAttribute(new Uint32Array(d),1);this.setAttribute("position",g),this.setAttribute("previous",v),this.setAttribute("next",y),this.setAttribute("uv",M),this.setIndex(E),this.computeBoundingSphere(),this.computeBoundingBox()}compareV3(e,t,i){const r=6*t,n=6*i;return e[r]===e[n]&&e[r+1]===e[n+1]&&e[r+2]===e[n+2]}copyV3(e,t){const i=6*t;return[e[i],e[i+1],e[i+2]]}_distanceTo(e,t,i,r,n,a){const s=r-e,o=n-t,l=a-i,d=s*s+o*o+l*l;return Math.sqrt(d)}}r.MeshLineGeometry=e}(),(()=>{let e=new THREE.Matrix4;r.MeshLine=function(e,t){THREE.Mesh.call(this),this.type="MeshLine",this.geometry=void 0!==e?e:new r.MeshLineGeometry,this.material=void 0!==t?t:new r.MeshLineMaterial({color:16777215*Math.random()}),this.groundCurve=void 0},r.MeshLine.prototype=Object.assign(Object.create(THREE.Mesh.prototype),{constructor:r.MeshLine,isMeshLine:!0,copy:function(e){return this},raycast:function(t,i){var r=new THREE.Ray,n=new THREE.Sphere,a=new THREE.Vector3,s=this.geometry;if(n.copy(s.boundingSphere),n.applyMatrix4(this.matrixWorld),!1!==t.ray.intersectSphere(n,a)){e.copy(this.matrixWorld).invert(),r.copy(t.ray).applyMatrix4(e);var o=new THREE.Vector3,l=new THREE.Vector3,d=new THREE.Vector3,h=s.index,c=s.attributes;if(null!==h)for(var u=h.array,p=c.position.array,m=0,f=u.length-1;m<f;m+=2){var g=u[m],v=u[m+2];o.fromArray(p,3*g),l.fromArray(p,3*v);var y=t.params.Line.threshold+this.material.linewidth/2,M=y*y;if(!(r.distanceSqToSegment(o,l,a,d)>M)){a.applyMatrix4(this.matrixWorld);var E=t.ray.origin.distanceTo(a);E<t.near||E>t.far||(i.push({distance:E,point:d.clone().applyMatrix4(this.matrixWorld),index:m,face:null,faceIndex:null,object:this}),m=f)}}}},createGroundCurve:function(e){this.groundCurve=r.GroundPrimitiveManager.getInstance().createGroundCurve(e)}})})(),function(){class e extends THREE.BufferGeometry{constructor(){super(),this.type="BandGeometry"}setPositions(e,t,i,r,n){if(!(e instanceof Float32Array||e instanceof Array))return void console.error("ERROR: The BufferArray of points is not instancied correctly.");let a=[];var s=[0];let o=[];for(var l=0;l<e.length;l+=3){const d=t[l],h=t[l+1],c=t[l+2];if(a.push(e[l]-d*r,e[l+1]-h*r,e[l+2]-c*r),a.push(e[l]+d*n,e[l+1]+h*n,e[l+2]+c*n),o.push(i[l],i[l+1],i[l+2]),o.push(i[l],i[l+1],i[l+2]),l>0){let t=s[s.length-1]+this._distanceTo(e[l-3],e[l-2],e[l-1],e[l],e[l+1],e[l+2]);s.push(t)}}const d=a.length/6;let h=[],c=[];const u=s[s.length-1];this.totalSize=u;for(let e=0;e<d;e++){let t=s[e]/u;if(c.push(0,t),c.push(1,t),e<d-1){var p=2*e;h.push(p,p+1,p+2),h.push(p+2,p+1,p+3)}}const m=new THREE.BufferAttribute(new Float32Array(a),3),f=new THREE.BufferAttribute(new Float32Array(c),2),g=new THREE.BufferAttribute(new Float32Array(o),3),v=new THREE.BufferAttribute(new Uint16Array(h),1);this.setAttribute("position",m),this.setAttribute("uv",f),this.setAttribute("normal",g),this.setIndex(v),this.computeBoundingSphere(),this.computeBoundingBox(),this.positions=a}getWireframe(){let e=[];const t=this.positions,i=t.length;let r=0;for(r=0;r<i;r+=6)e.push(t[r],t[r+1],t[r+2]);for(r-=1;r>0;r-=6)e.push(t[r-2],t[r-1],t[r]);return e.push(t[0],t[1],t[2]),e}_distanceTo(e,t,i,r,n,a){const s=r-e,o=n-t,l=a-i,d=s*s+o*o+l*l;return Math.sqrt(d)}}r.BandGeometry=e}(),function(){r.GIS=r.GIS||{};class e{constructor(e,t,i,r){this.west=e||0,this.south=t||0,this.east=i||0,this.north=r||0}static computeWidth(e){var t=e.east,i=e.west;return t<i&&(t+=r.Math.TWO_PI),t-i}static computeHeight(e){return e.north-e.south}static contains(e,t){var i=t.longitude,n=t.latitude,a=e.west,s=e.east;return s<a&&(s+=r.Math.TWO_PI,i<0&&(i+=r.Math.TWO_PI)),(i>a||r.Math.equalsEpsilon(i,a,r.Math.EPSILON14))&&(i<s||r.Math.equalsEpsilon(i,s,r.Math.EPSILON14))&&n>=e.south&&n<=e.north}static fromCartographicArray(t,i){for(var n=Number.MAX_VALUE,a=-Number.MAX_VALUE,s=Number.MAX_VALUE,o=-Number.MAX_VALUE,l=Number.MAX_VALUE,d=-Number.MAX_VALUE,h=0,c=t.length;h<c;h++){var u=t[h];n=Math.min(n,u.longitude),a=Math.max(a,u.longitude),l=Math.min(l,u.latitude),d=Math.max(d,u.latitude);var p=u.longitude>=0?u.longitude:u.longitude+r.Math.TWO_PI;s=Math.min(s,p),o=Math.max(o,p)}return a-n>o-s&&(n=s,(a=o)>Math.PI&&(a-=r.Math.TWO_PI),n>Math.PI&&(n-=r.Math.TWO_PI)),i?(i.west=n,i.south=l,i.east=a,i.north=d,i):new e(n,l,a,d)}get width(){return e.computeWidth(this)}get height(){return e.computeHeight(this)}}e.MAX_VALUE=Object.freeze(new e(-Math.PI,-r.Math.PI_OVER_TWO,Math.PI,r.Math.PI_OVER_TWO)),r.GIS.Rectangle=e}(),function(){r.GIS=r.GIS||{};class e{constructor(e,t,i){this.longitude=e||0,this.latitude=t||0,this.height=i||0}static fromRadians(t,i,r,n){return r=r||0,n?(n.longitude=t,n.latitude=i,n.height=r,n):new e(t,i,r)}}r.GIS.Cartographic=e}(),function(){r.GIS=r.GIS||{};var e,t,i={up:{south:"east",north:"west",west:"south",east:"north"},down:{south:"west",north:"east",west:"north",east:"south"},south:{up:"west",down:"east",west:"down",east:"up"},north:{up:"east",down:"west",west:"up",east:"down"},west:{up:"north",down:"south",north:"down",south:"up"},east:{up:"south",down:"north",north:"up",south:"down"}},n={north:[-1,0,0],east:[0,1,0],up:[0,0,1],south:[1,0,0],west:[0,-1,0],down:[0,0,-1]},a={},s={east:new THREE.Vector3,north:new THREE.Vector3,up:new THREE.Vector3,west:new THREE.Vector3,south:new THREE.Vector3,down:new THREE.Vector3},o=new THREE.Vector3,l=new THREE.Vector3,d=new THREE.Vector3,h=new THREE.Vector3;class c{constructor(){}static computeTemeToPseudoFixedMatrix(i,n){if(!r.Utils.defined(i))throw new Error("date is required.");t||(t=new r.JulianDate),e||(e=r.Math.TWO_PI/86400);var a,s=(t=r.JulianDate.addSeconds(i,-r.JulianDate.computeTaiMinusUtc(i),t)).dayNumber,o=t.secondsOfDay,l=s-2451545,d=(24110.54841+(a=o>=43200?(l+.5)/r.TimeConstants.DAYS_PER_JULIAN_CENTURY:(l-.5)/r.TimeConstants.DAYS_PER_JULIAN_CENTURY)*(8640184.812866+a*(.093104+-62e-7*a)))*e%r.Math.TWO_PI+(72921158553e-15+11772758384668e-32*(s-2451545.5))*((o+.5*r.TimeConstants.SECONDS_PER_DAY)%r.TimeConstants.SECONDS_PER_DAY),h=Math.cos(d),c=Math.sin(d);return r.Utils.defined(n)||(n=new THREE.Matrix3),n.set(h,c,0,-c,h,0,0,0,1)}static localFrameToFixedFrameGenerator(e,t){if(!i.hasOwnProperty(e)||!i[e].hasOwnProperty(t))throw new Error("firstAxis and secondAxis must be east, north, up, west, south or down.");var c,u=i[e][t],p=e+t;return r.Utils.defined(a[p])?c=a[p]:(c=function(i,a,c){if(!r.Utils.defined(i))throw new Error("origin is required.");if(r.Utils.defined(c)||(c=new THREE.Matrix4),r.Math.equalsEpsilonVector3(i,h,r.Math.EPSILON14))o.fromArray(n[e],0),l.fromArray(n[t],0),d.fromArray(n[u],0);else if(r.Math.equalsEpsilon(i.x,0,r.Math.EPSILON14)&&r.Math.equalsEpsilon(i.y,0,r.Math.EPSILON14)){var p=Math.sign(i.z);o.fromArray(n[e],0),"east"!==e&&"west"!==e&&o.multiplyScalar(p),l.fromArray(n[t],0),"east"!==t&&"west"!==t&&l.multiplyScalar(p),d.fromArray(n[u],0),"east"!==u&&"west"!==u&&d.multiplyScalar(p)}else{(a=r.Utils.defaultValue(a,r.GIS.Ellipsoid.WGS84)).geodeticSurfaceNormal(i,s.up);var m=s.up,f=s.east;f.x=-i.y,f.y=i.x,f.z=0,s.east.copy(f),s.east.normalize(),s.north.copy(m),s.north.cross(f),s.down.copy(s.up),s.down.multiplyScalar(-1),s.west.copy(s.east),s.west.multiplyScalar(-1),s.south.copy(s.north),s.south.multiplyScalar(-1),o=s[e],l=s[t],d=s[u]}return c.elements[0]=o.x,c.elements[1]=o.y,c.elements[2]=o.z,c.elements[3]=0,c.elements[4]=l.x,c.elements[5]=l.y,c.elements[6]=l.z,c.elements[7]=0,c.elements[8]=d.x,c.elements[9]=d.y,c.elements[10]=d.z,c.elements[11]=0,c.elements[12]=i.x,c.elements[13]=i.y,c.elements[14]=i.z,c.elements[15]=1,c},a[p]=c),c}}c.eastNorthUpToFixedFrame=c.localFrameToFixedFrameGenerator("east","north"),r.GIS.Transforms=c}(),function(){r.GIS=r.GIS||{};var e=new THREE.Vector3;class t{constructor(e,t,i){this._radii=void 0,this._radiiSquared=void 0,this._radiiToTheFourth=void 0,this._oneOverRadii=void 0,this._oneOverRadiiSquared=void 0,this._minimumRadius=void 0,this._maximumRadius=void 0,this._centerToleranceSquared=void 0,this._squaredXOverSquaredZ=void 0,this._squaredFirstEccentricity=void 0,function(e,t,i,n){t=r.Utils.defaultValue(t,0),i=r.Utils.defaultValue(i,0),n=r.Utils.defaultValue(n,0),e._radii=new THREE.Vector3(t,i,n),e._radiiSquared=new THREE.Vector3(t*t,i*i,n*n),e._radiiToTheFourth=new THREE.Vector3(t*t*t*t,i*i*i*i,n*n*n*n),e._oneOverRadii=new THREE.Vector3(0===t?0:1/t,0===i?0:1/i,0===n?0:1/n),e._oneOverRadiiSquared=new THREE.Vector3(0===t?0:1/(t*t),0===i?0:1/(i*i),0===n?0:1/(n*n)),e._minimumRadius=Math.min(t,i,n),e._maximumRadius=Math.max(t,i,n),e._centerToleranceSquared=r.Math.EPSILON1,e._squaredFirstEccentricity=1-n*n/(t*t),0!==e._radiiSquared.z&&(e._squaredXOverSquaredZ=e._radiiSquared.x/e._radiiSquared.z)}(this,e,t,i)}get radii(){return this._radii}get radiiSquared(){return this._radiiSquared}get radiiToTheFourth(){return this._radiiToTheFourth}get oneOverRadii(){return this._oneOverRadii}get oneOverRadiiSquared(){return this._oneOverRadiiSquared}get minimumRadius(){return this._minimumRadius}get maximumRadius(){return this._maximumRadius}getPerimeterByLat(e){const t=Math.sin(e*Math.PI/180),i=this._radii.x*Math.cos(e*Math.PI/180)/Math.sqrt(1-this._squaredFirstEccentricity*t*t);return Math.PI*i*2}geodeticSurfaceNormal(t,i){if(!r.Math.equalsEpsilonVec3(t,e,r.Math.EPSILON14))return r.Utils.defined(i)||(i=new THREE.Vector3),i.copy(t),i.multiply(this._oneOverRadiiSquared),i.normalize()}}t.WGS84=Object.freeze(new t(6378137,6378137,6356752.314245179)),r.GIS.Ellipsoid=t}(),function(){r.GIS=r.GIS||{};r.GIS.GeographicTilingScheme=class{constructor(){this._numberOfLevelZeroTilesX=2,this._numberOfLevelZeroTilesY=1,this._rectangle=r.GIS.Rectangle.MAX_VALUE}getNumberOfXTilesAtLevel(e){return this._numberOfLevelZeroTilesX<<e}getNumberOfYTilesAtLevel(e){return this._numberOfLevelZeroTilesY<<e}positionToTileXY(e,t,i){var n=this._rectangle;if(r.GIS.Rectangle.contains(n,e)){var a=this.getNumberOfXTilesAtLevel(t),s=this.getNumberOfYTilesAtLevel(t),o=n.width/a,l=n.height/s,d=e.longitude;n.east<n.west&&(d+=r.Math.TWO_PI);var h=(d-n.west)/o|0;h>=a&&(h=a-1);var c=(n.north-e.latitude)/l|0;return c>=s&&(c=s-1),i?(i.x=h,i.y=c,i):new THREE.Vector2(h,c)}}}}(),function(){r.GIS=r.GIS||{};var e=[new r.GIS.Cartographic,new r.GIS.Cartographic,new r.GIS.Cartographic,new r.GIS.Cartographic],t=new THREE.Vector2,i=new r.GIS.GeographicTilingScheme;class n{constructor(){}static initialize(){var e=n._initPromise;if(e)return e;var t=new THREE.FileLoader;t.setResponseType("json");var i=`${n._viewer._staticResourcesHost}/Earth/approximateTerrainHeights.json`;return e=new Promise(((e,r)=>{t.load(i,(function(t){n._terrainHeights=t,e()}))})),n._initPromise=e,e}static getMinimumMaximumHeights(e){var t=n.getTileXYLevel(e),i=n._defaultMinTerrainHeight,r=n._defaultMaxTerrainHeight;if(t){var a=t.level+"-"+t.x+"-"+t.y,s=n._terrainHeights[a];s&&(i=s[0],r=s[1])}return{minimumTerrainHeight:i=Math.max(n._defaultMinTerrainHeight,i),maximumTerrainHeight:r}}static getTileXYLevel(a){r.GIS.Cartographic.fromRadians(a.east,a.north,0,e[0]),r.GIS.Cartographic.fromRadians(a.west,a.north,0,e[1]),r.GIS.Cartographic.fromRadians(a.east,a.south,0,e[2]),r.GIS.Cartographic.fromRadians(a.west,a.south,0,e[3]);var s,o=0,l=0,d=0,h=0,c=n._terrainHeightsMaxLevel;for(s=0;s<=c;++s){for(var u=!1,p=0;p<4;++p){var m=e[p];if(i.positionToTileXY(m,s,t),0===p)d=t.x,h=t.y;else if(d!==t.x||h!==t.y){u=!0;break}}if(u)break;o=d,l=h}if(0!==s)return{x:o,y:l,level:s>c?c:s-1}}}n._terrainHeightsMaxLevel=6,n._defaultMaxTerrainHeight=9e3,n._defaultMinTerrainHeight=-1e5,n._terrainHeights=void 0,n._initPromise=void 0,n._viewer=void 0,r.GIS.ApproximateTerrainHeights=n}(),(()=>{new THREE.Matrix4;var e;r.Object3DEx=function(e,t){THREE.Object3D.call(this),this.type="Object3DEx",this.geometry=e||r.GeomUtil.EmptyGeometry,this.material=t||r.MaterialUtil.getDefaultStandardMaterial(),this.matrixAutoUpdate=!1,this.originalId=void 0,this.drawMode=THREE.TrianglesDrawMode},r.Object3DEx.prototype=Object.create(THREE.Mesh.prototype),r.Object3DEx.prototype.constructor=r.Object3DEx,r.Object3DEx.prototype.init=function(e){e&&e.parent&&e.parent.add(this)},r.Object3DEx.prototype.destroy=function(){this.parent&&this.parent.remove(this),this.userData&&(this.userData=null),this.geometry=null,this.material=null},r.Object3DEx.prototype.spawn=function(e){void 0!==e.userId?this.name=e.userId:void 0!==e.nodeId&&(this.name=e.nodeId),null!=e.meshId?this.meshId=e.meshId:this.meshId="",e.geometry&&(this.geometry=e.geometry),e.material&&(this.material=e.material),e.matrix?(this.matrix.copy(e.matrix),this.updateMatrixWorld(!0)):(this.matrix.identity(),this.updateMatrixWorld(!0)),e.databagId?this.databagId=e.databagId:this.databagId="",e.userData?this.userData=e.userData:this.userData&&(this.userData=null),e.originalId&&(this.originalId=e.originalId),null!=e.visible&&(this.visible=e.visible),null!=e.isMesh&&(this.isMesh=e.isMesh),null!=e.isLine&&(this.isLine=e.isLine),null!=e.isLineSegments&&(this.isLineSegments=e.isLineSegments),null!=e.instanceOrNot?this.instanceOrNot=e.instanceOrNot:this.instanceOrNot=!1,this.renderOrder=e.renderOrder||r.EnumRenderOrder.Component,this.frustumCulled=!1,this.material.visible=!0},r.Object3DEx.prototype.clear=function(){this.geometry=r.GeomUtil.EmptyGeometry,this.material=r.MaterialUtil.DefaultMaterial,this.visible=!0,this.frustumCulled=!0,this.material.visible=!1},r.Object3DEx.prototype.isVisible=function(){return this.visible},r.Object3DEx.prototype.intersectBoxWithDistance=(e=new THREE.Box3,function(t,i){var r=this.geometry,n=this.material,a=this.matrixWorld;return i&&(a=new THREE.Matrix4).multiplyMatrices(this.matrixWorld,i),void 0===n?-1:(r.boundingBox||r.computeBoundingBox(),e.copy(r.boundingBox),e.applyMatrix4(a),t.ray.intersectBoxWithDistance(e))}),r.Object3DEx.prototype.intersectBoxWithDistanceByIndices=function(e,t){var i=this.matrixWorld,r=this.computeBoundingBox(t);return r.applyMatrix4(i),e.ray.intersectBoxWithDistance(r)},r.Object3DEx.prototype.intersectBoxWithClipPlane=function(e,t){var i=this.matrixWorld,r=this.computeBoundingBox(t);return r.applyMatrix4(i),r.intersectsPlane(e)},r.Object3DEx.prototype.raycastByIndices=function(){var e=new THREE.Matrix4,t=new THREE.Ray,i=new THREE.Sphere,r=new THREE.Vector3,n=new THREE.Vector3,a=new THREE.Vector3,s=new THREE.Vector2,o=new THREE.Vector2,l=new THREE.Vector2,d=new THREE.Vector3,h=new THREE.Vector3,c=new THREE.Vector3,u=new THREE.Matrix4;function p(e,t,i,p,m,f,g,v){let y=new THREE.Vector3;r.fromBufferAttribute(p,f),n.fromBufferAttribute(p,g),a.fromBufferAttribute(p,v);var M,E,b,x,I,T,C,w=function(e,t,i,r,n,a,s){var o=e.material;if(null===(o instanceof Array?i.intersectTriangle(r,n,a,o[0].side!==THREE.DoubleSide,s):o.side===THREE.BackSide?i.intersectTriangle(a,n,r,!0,s):i.intersectTriangle(r,n,a,o.side!==THREE.DoubleSide,s)))return null;c.copy(s),c.applyMatrix4(u);var l=t.ray.origin.distanceTo(c);return l<t.near||l>t.far?null:{distance:l,point:c.clone(),object:e}}(e,t,i,r,n,a,h);if(w){if(m&&m.array&&m.array.length&&(s.fromBufferAttribute(m,f),o.fromBufferAttribute(m,g),l.fromBufferAttribute(m,v),w.uv=(M=h,E=r,b=n,x=a,I=s,T=o,C=l,THREE.Triangle.barycoordFromPoint(M,E,b,x,d),I.multiplyScalar(d.x),T.multiplyScalar(d.y),C.multiplyScalar(d.z),I.add(T).add(C),I.clone())),p.instanceMatrix){var S=r.clone().applyMatrix4(p.instanceMatrix),A=n.clone().applyMatrix4(p.instanceMatrix),B=a.clone().applyMatrix4(p.instanceMatrix);w.face=new THREE.Face3(f,g,v,THREE.Triangle.getNormal(S,A,B,y))}else w.face=new THREE.Face3(f,g,v,THREE.Triangle.getNormal(r,n,a,y));w.faceIndex=f}return w}return function(r,n,a,s){var o=this.geometry,l=this.material;if(s){o=this.geometry,l=this.material;if((u=new THREE.Matrix4).multiplyMatrices(this.matrixWorld,s),void 0===l)return;if(null===o.boundingSphere&&o.computeBoundingSphere(),i.copy(o.boundingSphere),i.applyMatrix4(u),!1===r.ray.intersectsSphere(i))return;if(e.copy(u).invert(),t.copy(r.ray).applyMatrix4(e),null!==o.boundingBox&&!1===t.intersectsBox(o.boundingBox))return;var d=o.index;(b=o.attributes.position).instanceMatrix=s;var h,c=o.attributes.uv;if(null!==d)for(M=0,h=d.count;M<h;M+=3)f=d.getX(M),g=d.getX(M+1),v=d.getX(M+2),(m=p(this,r,t,b,c,f,g,v))&&(m.faceIndex=Math.floor(M/3),n.push(m));else for(M=0,h=b.count;M<h;M+=3)(m=p(this,r,t,b,c,f=M,g=M+1,v=M+2))&&(m.index=f,n.push(m))}else{if(u=this.matrixWorld,void 0===l)return;if(i.copy(this.computeBoundingSphere(a)),i.applyMatrix4(u),!1===r.ray.intersectsSphere(i))return;e.copy(u).invert(),t.copy(r.ray).applyMatrix4(e);var m,f,g,v,y=this.computeBoundingBox(a);if(!1===t.intersectsBox(y))return;var M,E,b=o.attributes.position,x=(c=o.attributes.uv,a.indexStart),I=a.indexStart+a.indexCount,T=o.getIndex().array;for(M=x,E=I;M<E;M+=3)f=T[M],g=T[M+1],v=T[M+2],(m=p(this,r,t,b,c,f,g,v))&&(m.faceIndex=Math.floor(M/3),n.push(m))}}}(),r.Object3DEx.prototype.minDistanceToTri=function(e,t,i){function r(e,t){return new THREE.Vector3(e.x-t.x,e.y-t.y,e.z-t.z)}function n(e,t){return new THREE.Vector3(e.x+t.x,e.y+t.y,e.z+t.z)}function a(e,t,i){return new THREE.Vector3(e.x+t.x*i,e.y+t.y*i,e.z+t.z*i)}function s(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function o(e,t){return new THREE.Vector3(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)}function l(e,t,i,l){var d,h,c,u,p,m,f=s(t,l),g=s(t,t),v=s(l,l),y=r(i,e),M=s(t,y),E=s(l,y);return(d=(M*v-E*f)/(g*v-f*f))<0||isNaN(d)?d=0:d>1&&(d=1),(h=(d*f-E)/v)<=0||isNaN(h)?(u=i,(d=M/g)<=0||isNaN(d)?(c=e,p=r(i,e)):d>=1?p=r(i,c=n(e,t)):(c=a(e,t,d),m=o(y,t),p=o(t,m))):h>=1?(u=n(i,l),(d=(f+M)/g)<=0||isNaN(d)?(c=e,p=r(u,e)):d>=1?p=r(u,c=n(e,t)):(c=a(e,t,d),m=o(y=r(u,e),t),p=o(t,m))):(u=a(i,l,h),d<=0||isNaN(d)?(c=e,m=o(y,l),p=o(l,m)):d>=1?(m=o(y=r(i,c=n(e,t)),l),p=o(l,m)):(c=a(e,t,d),s(p=o(t,l),y)<0&&p.multiplyScalar(-1))),{vec:p,closestP:c,closestQ:u}}function d(e,t){var i,n,d,h,c,u,p=[],m=[];p[0]=r(e[1],e[0]),p[1]=r(e[2],e[1]),p[2]=r(e[0],e[2]),m[0]=r(t[1],t[0]),m[1]=r(t[2],t[1]),m[2]=r(t[0],t[2]);for(var f=0,g=e[0].distanceToSquared(t[0])+1,v=0;v<3;v++)for(var y=0;y<3;y++){var M=l(e[v],p[v],t[y],m[y]);d=M.vec,i=M.closestP;var E=s(h=r(n=M.closestQ,i),h);if(E<=g){c=i.clone(),u=n.clone(),g=E;var b=s(r(e[(v+2)%3],i),d),x=s(r(t[(y+2)%3],n),d);if(b<=0&&x>=0)return{start:i.clone(),end:n.clone(),minDistance:Math.sqrt(E)};b<0&&(b=0),x>0&&(x=0),s(h,d)-b+x>0&&(f=1)}}var I=o(p[0],p[1]),T=s(I,I);if(T>1e-15){var C=[];h=r(e[0],t[0]),C[0]=s(h,I),h=r(e[0],t[1]),C[1]=s(h,I),h=r(e[0],t[2]),C[2]=s(h,I);var w=-1;if(C[0]>0&&C[1]>0&&C[2]>0?(w=C[0]<C[1]?0:1,C[2]<C[w]&&(w=2)):C[0]<0&&C[1]<0&&C[2]<0&&(w=C[0]>C[1]?0:1,C[2]>C[w]&&(w=2)),w>=0&&(f=1,s(h=r(t[w],e[0]),o(I,p[0]))>0&&s(h=r(t[w],e[1]),o(I,p[1]))>0&&s(h=r(t[w],e[2]),o(I,p[2]))>0))return i=a(t[w],I,C[w]/T),n=t[w].clone(),{start:i.clone(),end:n,minDistance:i.distanceTo(n)}}var S=o(m[0],m[1]),A=s(S,S);if(A>1e-15){var B=[];h=r(t[0],e[0]),B[0]=s(h,S),h=r(t[0],e[1]),B[1]=s(h,S),h=r(t[0],e[2]),B[2]=s(h,S);w=-1;if(B[0]>0&&B[1]>0&&B[2]>0?(w=B[0]<B[1]?0:1,B[2]<B[w]&&(w=2)):B[0]<0&&B[1]<0&&B[2]<0&&(w=B[0]>B[1]?0:1,B[2]>B[w]&&(w=2)),w>=0&&(f=1,s(h=r(e[w],t[0]),o(S,m[0]))>0&&s(h=r(e[w],t[1]),o(S,m[1]))>0&&s(h=r(e[w],t[2]),o(S,m[2]))>0))return{start:i=e[w].clone(),end:(n=a(e[w],S,B[w]/A)).clone(),minDistance:i.distanceTo(n)}}return f?(i=c,n=u,{start:c.clone(),end:u.clone(),minDistance:Math.sqrt(g)}):{start:c.clone(),end:u.clone(),minDistance:0}}var h=new THREE.Vector3,c=new THREE.Vector3,u=new THREE.Vector3;function p(e,t,i,r,n,a){h.fromBufferAttribute(t,i),c.fromBufferAttribute(t,r),u.fromBufferAttribute(t,n),a&&(h.applyMatrix4(a),c.applyMatrix4(a),u.applyMatrix4(a)),e.push(h),e.push(c),e.push(u)}for(var m={start:null,end:null,minDistance:Number.POSITIVE_INFINITY},f=this.geometry,g=f.attributes.position,v=t?t.indexStart:0,y=f.getIndex().array,M=v,E=t?t.indexStart+t.indexCount:y.length;M<E;M+=3){var b=[];p(b,g,y[M],y[M+1],y[M+2],i);var x=d(e,b);if(x.minDistance<=0)return m.minDistance=0,m;m.minDistance>x.minDistance&&(m.minDistance=x.minDistance,m.start=x.start.clone(),m.end=x.end.clone())}return m},r.Object3DEx.prototype.computeBoundingBox=function(e){var t,i,r=new THREE.Box3,n=this.geometry.attributes.position.array;return e?(t=e.positionStart,i=e.positionStart+e.positionCount):(t=0,i=n.length),this.setBoundingBoxFromArray(r,n,t,i),r},r.Object3DEx.prototype.computeBoundingSphere=function(e){var t,i,r=new THREE.Box3,n=new THREE.Vector3,a=this.geometry.attributes.position.array;e?(t=e.positionStart,i=e.positionStart+e.positionCount):(t=0,i=a.length);var s=new THREE.Sphere,o=s.center;this.setBoundingBoxFromArray(r,a,t,i),r.getCenter(o);for(var l=0,d=t,h=i;d<h;d+=3)n.x=a[d],n.y=a[d+1],n.z=a[d+2],l=Math.max(l,o.distanceToSquared(n));return s.radius=Math.sqrt(l),s},r.Object3DEx.prototype.setBoundingBoxFromArray=function(e,t,i,r){for(var n=1/0,a=1/0,s=1/0,o=-1/0,l=-1/0,d=-1/0,h=i,c=r;h<c;h+=3){var u=t[h],p=t[h+1],m=t[h+2];u<n&&(n=u),p<a&&(a=p),m<s&&(s=m),u>o&&(o=u),p>l&&(l=p),m>d&&(d=m)}e.min.set(n,a,s),e.max.set(o,l,d)}})(),r.MaterialEx=function(){this.materialDefaultParams={color:14540253,opacity:.5,transparent:!0,side:THREE.DoubleSide},this.material=r.MaterialUtil.createStandardMaterial(this.materialDefaultParams)},r.MaterialEx.prototype.destroy=function(){this.material=null},r.MaterialEx.prototype.resetColor=function(){this.material.color.setHex(this.materialDefaultParams.color)},r.MaterialEx.prototype.resetOpacity=function(){this.material.opacity=this.materialDefaultParams.opacity},r.MaterialEx.prototype.reset=function(){this.material.color.setHex(this.materialDefaultParams.color),this.material.opacity=this.materialDefaultParams.opacity,this.material.transparent=this.materialDefaultParams.transparent,this.material.side=this.materialDefaultParams.side,this.material.needsUpdate=!0},(()=>{let e=new THREE.Matrix4,t=new THREE.Ray,i=new THREE.Sphere,n=new THREE.Vector3,a=new THREE.Vector3;class s extends THREE.Points{constructor(e,t){super(e,t),this.pointIds=[],this.size=1}calcPositionAfterYOffset(t,i,r,n,a){let s=t.clone();return s.applyMatrix4(a),s.project(n),s.y+=i/r,s.unproject(n),s.applyMatrix4(e),s}raycast(r,a){const s=this.geometry,o=this.matrixWorld,l=this.size,d=r.camera,h=r.viewportSize.height;e.copy(o).invert(),null===s.boundingSphere&&s.computeBoundingSphere(),i.copy(s.boundingSphere);const c=i.center,u=this.calcPositionAfterYOffset(c,l,h,d,o),p=u.distanceToSquared(c);if(i.radius+=p,i.center.copy(u),i.applyMatrix4(o),!1===r.ray.intersectsSphere(i))return;t.copy(r.ray).applyMatrix4(e);let m=l;if(s.isBufferGeometry){const e=s.index,i=s.attributes,l=i.position.array;let c,u=!1;if(i.attrSize&&(u=!0,c=i.attrSize.array),null!==e){const i=e.array;i.length;for(const e of i)n.fromArray(l,3*e),u&&(m=c[e]),this.testPoint(n,m,e,h,d,o,t,r,a)}else for(var f=0,g=l.length/3;f<g;f++)n.fromArray(l,3*f),u&&(m=c[f]),this.testPoint(n,m,f,h,d,o,t,r,a)}else{const e=s.vertices;for(f=0,g=e.length;f<g;f++)this.testPoint(e[f],m,f,h,d,o,t,r,a)}}testPoint(e,t,i,r,n,s,o,l,d){const h=this.calcPositionAfterYOffset(e,t,r,n,s),c=h.distanceToSquared(e),u=o.distanceSqToPoint(h);if(u<c){o.closestPointToPoint(h,a),a.applyMatrix4(s);const e=l.ray.origin.distanceTo(a);if(e<l.near||e>l.far)return;d.push({id:this.pointIds[i],distance:e,distanceToRay:Math.sqrt(u),point:a.clone(),index:i,face:null,object:this})}}setAttributeSize(e,t){const i=this.geometry.attributes;i.attrSize&&(i.attrSize.array[e]=t,i.attrSize.needsUpdate=!0)}getAttributeSize(e){const t=this.geometry.attributes;let i=this.size;return t.attrSize&&(i=t.attrSize.array[e]),i}getAttributeHoverAnimation(e){const t=this.geometry.attributes;let i=!0;return t.attrHoverAnimation&&(i=t.attrHoverAnimation.array[e]),i}}r.PointsEx=s})(),(()=>{let e=new THREE.Matrix4,t=new THREE.Vector3;class i extends THREE.Mesh{constructor(e,t){super(e=e||r.GeomUtil.EmptyGeometry,t=t||r.MaterialUtil.getDefaultStandardMaterial()),this.type="MeshEx",this.matrixAutoUpdate=!1,this.originalId=void 0,this.pickable=!0}init(e){e&&e.parent&&e.parent.add(this)}destroy(){this.parent&&this.parent.remove(this),this.userData&&(this.userData=null),this.geometry=null,this.material=null}spawn(e){void 0!==e.userId?this.name=e.userId:void 0!==e.nodeId&&(this.name=e.nodeId),e.geometry&&(this.geometry=e.geometry),e.material&&(this.material=e.material),e.matrix?(this.matrix.copy(e.matrix),this.updateMatrixWorld(!0)):(this.matrix.identity(),this.updateMatrixWorld(!0)),this.databagId=r.Utils.isDefined(e.databagId)?e.databagId:"",this.fileId=r.Utils.isDefined(e.fileId)?e.fileId:"",e.userData?this.userData=e.userData:this.userData&&(this.userData=null),e.originalId&&(this.originalId=e.originalId),null!=e.visible&&(this.visible=e.visible),null!=e.isMesh&&(this.isMesh=e.isMesh),null!=e.isLine&&(this.isLine=e.isLine),null!=e.isLineSegments&&(this.isLineSegments=e.isLineSegments),null!=e.pickable?this.pickable=e.pickable:this.pickable=!0,this.groupOrder=e.groupOrder||r.EnumRenderOrder.Component,this.renderOrder=e.renderOrder||r.EnumRenderOrder.Component,this.frustumCulled=!1,this.material.visible=!0}clear(){this.geometry=r.GeomUtil.EmptyGeometry,this.material=r.MaterialUtil.DefaultMaterial,this.visible=!0,this.frustumCulled=!0,this.material.visible=!1}isVisible(){return this.visible}intersectBoxWithDistance(e,t){const i=new THREE.Box3;return((e,t)=>{var r=this.geometry,n=this.material,a=this.matrixWorld;return t&&(a=new THREE.Matrix4).multiplyMatrices(this.matrixWorld,t),void 0===n?-1:(r.boundingBox||r.computeBoundingBox(),i.copy(r.boundingBox),i.applyMatrix4(a),e.ray.intersectBoxWithDistance(i))})(e,t)}intersectBoxWithDistanceByIndices(e,t){var i=this.matrixWorld,r=this.computeBoundingBox(t);return r.applyMatrix4(i),e.ray.intersectBoxWithDistance(r)}intersectBoxWithClipPlane(e,t){var i=this.matrixWorld,r=t.boundingBox.clone();return r.applyMatrix4(i),r.intersectsPlane(e)}intersectBoxWithPlaneMesh(e,t){const i=this.matrixWorld;let n=t.boundingBox.clone();n.applyMatrix4(i);const a=e.matrixWorld,s=e.geometry.attributes.position;let o=[];for(let e=0;e<s.count;e++)o.push((new THREE.Vector3).fromBufferAttribute(s,e));const l=o.map((e=>e.clone().applyMatrix4(a))),d=e.geometry.index.array,h=d.length;for(let e=0;e<h/3;++e){const t=(new THREE.Triangle).setFromPointsAndIndices(l,d[e],d[e+1],d[e+2]);if(r.GeomUtil.boxIntersectsTriangle(n,t))return!0}return!1}_traverIntersectionPoints(i,r,n,a){e.copy(this.matrixWorld).invert();var s=i.clone();function o(e,i,r){t=i.intersectLine(e,t),t?a&&a(t,r):t=new THREE.Vector3}s=s.applyMatrix4(e);for(var l,d,h,c=this.geometry.getIndex().array,u=this.geometry.getAttribute("position").array,p=n?0:r.indexStart,m=n?c.length:r.indexStart+r.indexCount,f=new THREE.Vector3,g=new THREE.Vector3,v=new THREE.Vector3,y=new THREE.Line3,M=new THREE.Line3,E=new THREE.Line3,b=p,x=m;b<x;b+=3){const e=b/3;l=3*c[b],d=3*c[b+1],h=3*c[b+2],f.set(u[l],u[l+1],u[l+2]),g.set(u[d],u[d+1],u[d+2]),v.set(u[h],u[h+1],u[h+2]),n&&(f.applyMatrix4(r.matrix),g.applyMatrix4(r.matrix),v.applyMatrix4(r.matrix)),y.set(f,g),M.set(g,v),E.set(v,f),o(y,s,e),o(M,s,e),o(E,s,e)}}getIntersectionPoints(e,t,i,r){this._traverIntersectionPoints(e,t,r,((e,t)=>{i.push(e.x,e.y,e.z)}))}getIntersectionContours(e,t,i,n){let a=[];if(this._traverIntersectionPoints(e,t,n,((e,t)=>{let i=e.clone();i.faceIndex=t,i.checked=!1,a.push(i)})),0===a.length)return;r.ClipPlaneContourManager.getContours(a,[],!0).map((e=>{let t=[];e.map((e=>{t.push(e)})),i.push(t)}))}intersectByBox(t,i,r,n){var a=new THREE.Vector3,s=new THREE.Vector3,o=new THREE.Vector3;let l=new THREE.Triangle,d=(e,t,i,r,n)=>(a.fromBufferAttribute(t,i),s.fromBufferAttribute(t,r),o.fromBufferAttribute(t,n),l.set(a,s,o),e.intersectsTriangle(l));var h=this.geometry,c={distance:-1};if(void 0===this.material)return!1;if(n){e.copy(n).invert();let a=t.clone();a.applyMatrix4(e);var u=this.computeBoundingBox(r);if(!1===a.intersectsBox(u))return!1;var p,m=h.index;if((v=h.attributes.position).instanceMatrix=n,null!==m){for(f=0,p=m.count;f<p;f+=3)if(d(a,v,m.getX(f),m.getX(f+1),m.getX(f+2)))return i.push(c),!0}else for(f=0,p=v.count;f<p;f+=3)if(d(a,v,f,f+1,f+2))return i.push(c),!0}else{let e=t;u=this.computeBoundingBox(r);if(!1===e.intersectsBox(u))return!1;var f,g,v=h.attributes.position,y=r.indexStart,M=r.indexStart+r.indexCount,E=h.getIndex().array;for(f=y,g=M;f<g;f+=3)if(d(e,v,E[f],E[f+1],E[f+2]))return i.push(c),!0}return!1}raycastByIndices(t,i,r,n,a){var s=new THREE.Ray,o=new THREE.Sphere,l=new THREE.Vector3,d=new THREE.Vector3,h=new THREE.Vector3,c=new THREE.Vector2,u=new THREE.Vector2,p=new THREE.Vector2,m=new THREE.Vector3,f=new THREE.Vector3,g=new THREE.Vector3,v=new THREE.Matrix4;let y=(e,t,i,r,n,a,s,o)=>{let y=new THREE.Vector3;l.fromBufferAttribute(r,a),d.fromBufferAttribute(r,s),h.fromBufferAttribute(r,o);var M,E,b,x,I,T,C,w=((e,t,i,r,n,a,s)=>{var o=e.material;if(null===(o instanceof Array?i.intersectTriangle(r,n,a,o[0].side!==THREE.DoubleSide,s):o.side===THREE.BackSide?i.intersectTriangle(a,n,r,!0,s):i.intersectTriangle(r,n,a,o.side!==THREE.DoubleSide,s)))return null;g.copy(s),g.applyMatrix4(v);var l=t.ray.origin.distanceTo(g);return l<t.near||l>t.far?null:{distance:l,point:g.clone(),object:e}})(e,t,i,l,d,h,f);if(w){if(n&&n.array&&n.array.length&&(c.fromBufferAttribute(n,a),u.fromBufferAttribute(n,s),p.fromBufferAttribute(n,o),w.uv=(M=f,E=l,b=d,x=h,I=c,T=u,C=p,THREE.Triangle.getBarycoord(M,E,b,x,m),I.multiplyScalar(m.x),T.multiplyScalar(m.y),C.multiplyScalar(m.z),I.add(T).add(C),I.clone())),r.instanceMatrix){var S=l.clone().applyMatrix4(r.instanceMatrix),A=d.clone().applyMatrix4(r.instanceMatrix),B=h.clone().applyMatrix4(r.instanceMatrix);w.face=new THREE.Face3(a,s,o,THREE.Triangle.getNormal(S,A,B,y))}else w.face=new THREE.Face3(a,s,o,THREE.Triangle.getNormal(l,d,h,y));w.faceIndex=a}return w};return((t,i,r,n,a)=>{var l=this.geometry,d=this.material;if(n){l=this.geometry,d=this.material;if((v=new THREE.Matrix4).multiplyMatrices(this.matrixWorld,n),void 0===d)return;if(null===l.boundingSphere&&l.computeBoundingSphere(),o.copy(l.boundingSphere),o.applyMatrix4(v),!1===t.ray.intersectsSphere(o))return;if(e.copy(v).invert(),s.copy(t.ray).applyMatrix4(e),null!==l.boundingBox&&!1===s.intersectsBox(l.boundingBox))return;var h=l.index;(x=l.attributes.position).instanceMatrix=n;var c,u=l.attributes.uv;if(null!==h)for(E=0,c=h.count;E<c;E+=3)m=h.getX(E),f=h.getX(E+1),g=h.getX(E+2),(p=y(this,t,s,x,u,m,f,g))&&(p.faceIndex=Math.floor(E/3),i.push(p));else for(E=0,c=x.count;E<c;E+=3)(p=y(this,t,s,x,u,m=E,f=E+1,g=E+2))&&(p.index=m,i.push(p))}else{if(v=this.matrixWorld,void 0===d)return;if(o.copy(this.computeBoundingSphere(r)),o.applyMatrix4(v),!1===t.ray.intersectsSphere(o))return;e.copy(v).invert(),s.copy(t.ray).applyMatrix4(e);var p,m,f,g,M=this.computeBoundingBox(r);if(!1===s.intersectsBox(M))return;var E,b,x=l.attributes.position,I=(u=l.attributes.uv,r.indexStart),T=r.indexStart+r.indexCount,C=l.getIndex().array;for(E=I,b=T;E<b;E+=3)m=C[E],f=C[E+1],g=C[E+2],(p=y(this,t,s,x,u,m,f,g))&&(p.faceIndex=Math.floor(E/3),i.push(p))}})(t,i,r,n)}raycastByIndices2(e,t,i,r){var n=new THREE.Matrix4,a=new THREE.Ray,s=new THREE.Sphere,o=new THREE.Vector3,l=new THREE.Vector3,d=new THREE.Vector3,h=new THREE.Vector2,c=new THREE.Vector2,u=new THREE.Vector2,p=new THREE.Vector3,m=new THREE.Vector3,f=new THREE.Vector3,g=new THREE.Matrix4;let v=(e,t,i,r,n,a,s,v)=>{let y=new THREE.Vector3;o.fromBufferAttribute(r,a),l.fromBufferAttribute(r,s),d.fromBufferAttribute(r,v);var M,E,b,x,I,T,C,w=((e,t,i,r,n,a,s)=>{var o=e.material;if(null===(o instanceof Array?i.intersectTriangle(r,n,a,o[0].side!==THREE.DoubleSide,s):o.side===THREE.BackSide?i.intersectTriangle(a,n,r,!0,s):i.intersectTriangle(r,n,a,o.side!==THREE.DoubleSide,s)))return null;f.copy(s),f.applyMatrix4(g);var l=t.ray.origin.distanceTo(f);return l<t.near||l>t.far?null:{distance:l,point:f.clone(),object:e}})(e,t,i,o,l,d,m);if(w){if(n&&n.array&&n.array.length&&(h.fromBufferAttribute(n,a),c.fromBufferAttribute(n,s),u.fromBufferAttribute(n,v),w.uv=(M=m,E=o,b=l,x=d,I=h,T=c,C=u,THREE.Triangle.getBarycoord(M,E,b,x,p),I.multiplyScalar(p.x),T.multiplyScalar(p.y),C.multiplyScalar(p.z),I.add(T).add(C),I.clone())),r.instanceMatrix){var S=o.clone().applyMatrix4(r.instanceMatrix),A=l.clone().applyMatrix4(r.instanceMatrix),B=d.clone().applyMatrix4(r.instanceMatrix);w.face=new THREE.Face3(a,s,v,THREE.Triangle.getNormal(S,A,B,y))}else w.face=new THREE.Face3(a,s,v,THREE.Triangle.getNormal(o,l,d,y));w.faceIndex=a}return w};return((e,t,i,r)=>{var o=this.geometry,l=this.material;if(r=!!r,i.isInstanced){if(void 0===i.matrix)return;if(g.multiplyMatrices(this.matrixWorld,i.matrix),void 0===l)return;if(r&&(null===o.boundingSphere&&o.computeBoundingSphere(),s.copy(o.boundingSphere),s.applyMatrix4(g),!1===e.ray.intersectsSphere(s)))return;if(n.copy(g).invert(),a.copy(e.ray).applyMatrix4(n),r&&null!==o.boundingBox&&!1===a.intersectsBox(o.boundingBox))return;var d=o.index;(b=o.attributes.position).instanceMatrix=i.matrix;var h,c=o.attributes.uv;if(null!==d)for(M=0,h=d.count;M<h;M+=3)m=d.getX(M),f=d.getX(M+1),y=d.getX(M+2),(p=v(this,e,a,b,c,m,f,y))&&(p.faceIndex=Math.floor(M/3),t.push(p));else for(M=0,h=b.count;M<h;M+=3)(p=v(this,e,a,b,c,m=M,f=M+1,y=M+2))&&(p.index=m,t.push(p))}else if(i.matrix?g.multiplyMatrices(this.matrixWorld,i.matrix):g=this.matrixWorld,void 0!==l&&(!r||(s.copy(this.computeBoundingSphere(i)),s.applyMatrix4(g),!1!==e.ray.intersectsSphere(s)))){if(n.copy(g).invert(),a.copy(e.ray).applyMatrix4(n),r){var u=this.computeBoundingBox(i);if(!1===a.intersectsBox(u))return}var p,m,f,y,M,E,b=o.attributes.position,x=(c=o.attributes.uv,i.indexStart),I=i.indexStart+i.indexCount,T=o.getIndex().array;for(M=x,E=I;M<E;M+=3)m=T[M],f=T[M+1],y=T[M+2],(p=v(this,e,a,b,c,m,f,y))&&(p.faceIndex=Math.floor(M/3),t.push(p))}})(e,t,i,r)}computeBoundingBox(e){var t,i,r=new THREE.Box3,n=this.geometry.attributes.position.array;return e?(t=e.positionStart,i=e.positionStart+e.positionCount):(t=0,i=n.length),this.setBoundingBoxFromArray(r,n,t,i),r}computeBoundingSphere(e){var t,i,r=new THREE.Box3,n=new THREE.Vector3,a=this.geometry.attributes.position.array;e?(t=e.positionStart,i=e.positionStart+e.positionCount):(t=0,i=a.length);var s=new THREE.Sphere,o=s.center;this.setBoundingBoxFromArray(r,a,t,i),r.getCenter(o);for(var l=0,d=t,h=i;d<h;d+=3)n.x=a[d],n.y=a[d+1],n.z=a[d+2],l=Math.max(l,o.distanceToSquared(n));return s.radius=Math.sqrt(l),s}setBoundingBoxFromArray(e,t,i,r){for(var n=1/0,a=1/0,s=1/0,o=-1/0,l=-1/0,d=-1/0,h=i,c=r;h<c;h+=3){var u=t[h],p=t[h+1],m=t[h+2];u<n&&(n=u),p<a&&(a=p),m<s&&(s=m),u>o&&(o=u),p>l&&(l=p),m>d&&(d=m)}e.min.set(n,a,s),e.max.set(o,l,d)}}r.MeshEx=i})(),(()=>{function e(e,t){THREE.LineSegments.call(this,e,t),this.type="SkinnedMesh",this.bindMode="attached",this.bindMatrix=new THREE.Matrix4,this.bindMatrixInverse=new THREE.Matrix4;var i=this.initBones(),r=new THREE.Skeleton(i);this.bind(r,this.matrixWorld),this.normalizeSkinWeights()}e.prototype=Object.assign(Object.create(THREE.LineSegments.prototype),{constructor:e,isSkinnedMesh:!0,initBones:function(){var e,t,i,r,n=[];if(this.geometry&&void 0!==this.geometry.bones){for(i=0,r=this.geometry.bones.length;i<r;i++)t=this.geometry.bones[i],e=new THREE.Bone,n.push(e),e.name=t.name,e.position.fromArray(t.pos),e.quaternion.fromArray(t.rotq),void 0!==t.scl&&e.scale.fromArray(t.scl);for(i=0,r=this.geometry.bones.length;i<r;i++)-1!==(t=this.geometry.bones[i]).parent&&null!==t.parent&&void 0!==n[t.parent]?n[t.parent].add(n[i]):this.add(n[i])}return this.updateMatrixWorld(!0),n},bind:function(e,t){this.skeleton=e,void 0===t&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),t=this.matrixWorld),this.bindMatrix.copy(t),this.bindMatrixInverse.copy(t).invert()},pose:function(){this.skeleton.pose()},normalizeSkinWeights:function(){var e,t;if(this.geometry&&this.geometry.isGeometry)for(t=0;t<this.geometry.skinWeights.length;t++){var i=this.geometry.skinWeights[t];(e=1/i.manhattanLength())!==1/0?i.multiplyScalar(e):i.set(1,0,0,0)}else if(this.geometry&&this.geometry.isBufferGeometry){var r=new THREE.Vector4,n=this.geometry.attributes.skinWeight;for(t=0;t<n.count;t++)r.x=n.getX(t),r.y=n.getY(t),r.z=n.getZ(t),r.w=n.getW(t),(e=1/r.manhattanLength())!==1/0?r.multiplyScalar(e):r.set(1,0,0,0),n.setXYZW(t,r.x,r.y,r.z,r.w)}},updateMatrixWorld:function(e){THREE.LineSegments.prototype.updateMatrixWorld.call(this,e),"attached"===this.bindMode?this.bindMatrixInverse.copy(this.matrixWorld).invert():"detached"===this.bindMode?this.bindMatrixInverse.copy(this.bindMatrix).invert():console.warn("THREE.SkinnedMesh: Unrecognized bindMode: "+this.bindMode)},clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),r.SkinnedLineEx=e})(),THREE.Wireframe=function(e,t){THREE.Mesh.call(this),this.type="Wireframe",this.geometry=void 0!==e?e:new THREE.LineSegmentsGeometry,this.material=void 0!==t?t:new THREE.LineMaterial({color:16777215*Math.random()})},THREE.Wireframe.prototype=Object.assign(Object.create(THREE.Mesh.prototype),{constructor:THREE.Wireframe,isWireframe:!0,computeLineDistances:function(){var e=new THREE.Vector3,t=new THREE.Vector3;return function(){for(var i=this.geometry,r=i.attributes.instanceStart,n=i.attributes.instanceEnd,a=new Float32Array(2*r.data.count),s=0,o=0,l=r.data.count;s<l;s++,o+=2)e.fromBufferAttribute(r,s),t.fromBufferAttribute(n,s),a[o]=0===o?0:a[o-1],a[o+1]=a[o]+e.distanceTo(t);var d=new THREE.InstancedInterleavedBuffer(a,2,1);return i.setAttribute("instanceDistanceStart",new THREE.InterleavedBufferAttribute(d,1,0)),i.setAttribute("instanceDistanceEnd",new THREE.InterleavedBufferAttribute(d,1,1)),this}}(),copy:function(e){return this}}),THREE.WireframeGeometry2=function(e){THREE.LineSegmentsGeometry.call(this),this.type="WireframeGeometry2",this.fromWireframeGeometry(new THREE.WireframeGeometry(e))},THREE.WireframeGeometry2.prototype=Object.assign(Object.create(THREE.LineSegmentsGeometry.prototype),{constructor:THREE.WireframeGeometry2,isWireframeGeometry2:!0,copy:function(e){return this}}),r.BBoxNode=function(e,t){var i=new THREE.BufferGeometry;i.setAttribute("position",new THREE.BufferAttribute(new Float32Array(72),3)),THREE.LineSegments.call(this,i,new THREE.LineBasicMaterial({color:t})),void 0!==e&&this.updateBBox(e)},r.BBoxNode.prototype=Object.create(THREE.LineSegments.prototype),r.BBoxNode.prototype.constructor=r.BBoxNode,r.BBoxNode.prototype.unload=function(){},r.BBoxNode.prototype.updateBBox=function(e){var t=e.min,i=e.max,r=this.geometry.attributes.position.array;r[0]=i.x,r[1]=i.y,r[2]=i.z,r[3]=t.x,r[4]=i.y,r[5]=i.z,r[6]=t.x,r[7]=i.y,r[8]=i.z,r[9]=t.x,r[10]=t.y,r[11]=i.z,r[12]=t.x,r[13]=t.y,r[14]=i.z,r[15]=i.x,r[16]=t.y,r[17]=i.z,r[18]=i.x,r[19]=t.y,r[20]=i.z,r[21]=i.x,r[22]=i.y,r[23]=i.z,r[24]=i.x,r[25]=i.y,r[26]=t.z,r[27]=t.x,r[28]=i.y,r[29]=t.z,r[30]=t.x,r[31]=i.y,r[32]=t.z,r[33]=t.x,r[34]=t.y,r[35]=t.z,r[36]=t.x,r[37]=t.y,r[38]=t.z,r[39]=i.x,r[40]=t.y,r[41]=t.z,r[42]=i.x,r[43]=t.y,r[44]=t.z,r[45]=i.x,r[46]=i.y,r[47]=t.z,r[48]=i.x,r[49]=i.y,r[50]=i.z,r[51]=i.x,r[52]=i.y,r[53]=t.z,r[54]=t.x,r[55]=i.y,r[56]=i.z,r[57]=t.x,r[58]=i.y,r[59]=t.z,r[60]=t.x,r[61]=t.y,r[62]=i.z,r[63]=t.x,r[64]=t.y,r[65]=t.z,r[66]=i.x,r[67]=t.y,r[68]=i.z,r[69]=i.x,r[70]=t.y,r[71]=t.z,this.geometry.attributes.position.needsUpdate=!0,this.geometry.computeBoundingBox(),this.geometry.computeBoundingSphere(),this.matrixAutoUpdate=!1},THREE.PlaneBufferGeometry2=function(e,t,i){THREE.BufferGeometry.call(this),this.type="PlaneBufferGeometry2";let r=e[0],n=e[1],a=e[2],s=n.clone().distanceTo(a),o=r.clone().distanceTo(n),l=a.clone().sub(n).normalize(),d=n.clone().sub(r).normalize();var h,c,u=Math.floor(t)||1,p=Math.floor(i)||1,m=u+1,f=p+1,g=s/u,v=o/p,y=[],M=[],E=[],b=[];let x=e[0].clone(),I=l.clone().cross(d).normalize();for(c=0;c<f;c++){let e=d.clone().multiplyScalar(c*v);for(h=0;h<m;h++){let t=l.clone().multiplyScalar(h*g),i=x.clone().add(t.add(e));M.push(i.x,i.y,i.z),E.push(I),b.push(h/u),b.push(1-c/p)}}for(c=0;c<p;c++)for(h=0;h<u;h++){var T=h+m*c,C=h+m*(c+1),w=h+1+m*(c+1),S=h+1+m*c;y.push(T,C,S),y.push(C,w,S)}this.setIndex(y),this.setAttribute("position",new THREE.Float32BufferAttribute(M,3)),this.setAttribute("normal",new THREE.Float32BufferAttribute(E,3)),this.setAttribute("uv",new THREE.Float32BufferAttribute(b,2))},THREE.PlaneBufferGeometry2.prototype=Object.create(THREE.BufferGeometry.prototype),THREE.PlaneBufferGeometry2.prototype.constructor=THREE.PlaneBufferGeometry2,function(){var e=[0,2,1,0,3,2,0,7,3,0,4,7,0,5,4,0,1,5,5,7,4,5,6,7,5,2,6,5,1,2,3,6,2,3,7,6],t=e.length,i=1e-5,n=Math.cos(THREE.Math.degToRad(30)),a=Math.cos(THREE.Math.degToRad(150)),s=new r.GIS.Cartographic,o=new r.GIS.Cartographic,l=[s,o],d=new r.GIS.Rectangle;class h extends THREE.BufferGeometry{constructor(e){super(),this.type="GroundCurveGeometry",this.curve=void 0,this.viewer=void 0,this.tileManager=void 0,this.curveType=void 0,this.minHeight=-1e3,this.maxHeight=1e3,this.lowest=100,this.localPositions=[],this._initialized=!1,this._options=e;var t=this;r.GIS.ApproximateTerrainHeights.initialize().then((()=>{var i=t.createCurve(e),r=t.createGeometry(i),n=t.createAttributes(r);for(var a in t.setIndex(n.index),n.attributes)t.setAttribute(a,new THREE.Float32BufferAttribute(n.attributes[a].array,n.attributes[a].itemSize));t.computeBoundingSphere(),t._initialized||(t._initialized=!0,t.viewer.render())}))}createAttributes(r){for(var n=r.bottomPositionsArray,a=r.topPositionsArray,s=r.normalsArray,o=n.length/3-1,l=8*o,d=2*l,c=3*l,u=new Array(36*o),p=new Array(c),m=new Array(c),f=new Array(c),g=new Array(c),v=new Array(c),y=new Array(c),M=new Array(d),E=0,b=new THREE.Vector3,x=new THREE.Vector3,I=a.length/3,T=0,C=0;C<I-1;C++)b.fromArray(a,T),x.fromArray(a,T+3),E+=b.distanceTo(x),T+=3;var w=0,S=new THREE.Vector3,A=new THREE.Vector3,B=new THREE.Vector3,R=new THREE.Vector3,D=new THREE.Vector3,O=new THREE.Vector3,L=0,P=0,N=0,H=0,F=0,k=0,U=i,G=!1;A.fromArray(n,L),R.fromArray(a,L),O.fromArray(s,L),L=3;for(C=0;C<o;C++){S.copy(A),B.copy(R),D.copy(O),G&&D.negate(),A.fromArray(n,L),R.fromArray(a,L),O.fromArray(s,L),G=h._breakMiter(O,S,A,R);var z=B.distanceTo(R),V=new THREE.Vector3;V.subVectors(A,S);var j=new THREE.Vector3;j.copy(V),j.normalize();var _=new THREE.Vector3;_.subVectors(B,S),_.normalize();var W=new THREE.Vector3;W.crossVectors(j,_),W.normalize();var Y=new THREE.Vector3;Y.crossVectors(_,D),Y.normalize();var Z=new THREE.Vector3;Z.subVectors(R,A),Z.normalize();var Q=new THREE.Vector3;Q.crossVectors(O,Z),Q.normalize();for(var J=z/E,X=w/E,K=0;K<8;K++){N=F+3*K,H=k+2*K;var q=K<4?1:-1,$=2===K||3===K||6===K||7===K?1:-1;S.toArray(m,N),Y.toArray(f,N),Q.toArray(g,N),V.toArray(y,N),W.toArray(v,N);var ee=new THREE.Vector2;ee.x=J*q;var te=X*$;0===te&&$<0&&(te=9),ee.y=te,ee.toArray(M,H)}var ie=new THREE.Vector3,re=new THREE.Vector3,ne=new THREE.Vector3,ae=new THREE.Vector3;ie.copy(S),re.copy(A),ne.copy(B),ae.copy(R);var se=this._getMinMaxHeight(S,A);se&&(ie.y=se.minimumTerrainHeight,re.y=se.minimumTerrainHeight,ne.y=se.maximumTerrainHeight,ae.y=se.maximumTerrainHeight,this.lowest=Math.min(this.lowest,ie.y),this.lowest=Math.min(this.lowest,re.y)),ie.addScaledVector(W,U),re.addScaledVector(W,U),ae.addScaledVector(W,U),ne.addScaledVector(W,U),ie.toArray(p,P),re.toArray(p,P+3),ae.toArray(p,P+6),ne.toArray(p,P+9),ie.addScaledVector(W,-2e-5),re.addScaledVector(W,-2e-5),ae.addScaledVector(W,-2e-5),ne.addScaledVector(W,-2e-5),ie.toArray(p,P+12),re.toArray(p,P+15),ae.toArray(p,P+18),ne.toArray(p,P+21),L+=3,P+=24,k+=16,F+=24,w+=z}L=0;var oe=0;for(C=0;C<o;C++){for(K=0;K<t;K++)u[L+K]=e[K]+oe;oe+=8,L+=t}return{index:u,attributes:{position:{array:p,itemSize:3},startPosition:{array:m,itemSize:3},startNormal:{array:f,itemSize:3},endNormal:{array:g,itemSize:3},rightNormal:{array:v,itemSize:3},forwardOffset:{array:y,itemSize:3},texcoordNormalization:{array:M,itemSize:2}}}}createCurve(e){if(!this.viewer){this.viewer=e.viewer;var t=this.viewer.modelManager.modelCollection,i=this;t.traverse((e=>{e.isDemLayer&&(i.tileManager=e.tileManager)}))}if(e.points){var r=e.points;this.localPositions=[];for(var n=0;n<r.length;n++)this.localPositions.push(this.viewer.worldToDrawing(r[n]));var a=new THREE.CatmullRomCurve3(this.localPositions);this.curve=a}a=this.curve;var s=e.type;this.curveType=s,a.tension=0,a.type="polyline"==s?"catmullrom":"centripetal";var o="polyline"==s?e.points.length:30,l="polyline"==s?this.localPositions:a.getPoints(o);for(n=0;n<l.length;n++){var d=l[n];this.minHeight=Math.min(this.minHeight,d.y),this.maxHeight=Math.max(this.maxHeight,d.y)}return l}createGeometry(e){for(var t=e.length,i=new Array(3*t),r=new Array(3*t),n=new Array(3*t),a=0,s=new THREE.Vector3,o=new THREE.Vector3,l=new THREE.Vector3,d=new THREE.Vector3,c=new THREE.Vector3,u=new THREE.Vector3,p=this.minHeight,m=this.maxHeight,f=0;f<t;f++)o.copy(e[f]),o.y=p,s.copy(e[f]),s.y=m,0==f?(u.copy(e[f+1]),u.y=p,l=h._computeRightNormal(o,s,u)):f==e.length-1?(d.copy(e[f-1]),d.y=p,c.copy(e[f-1]),c.y=m,l=h._computeRightNormal(d,c,o)):(d.copy(e[f-1]),d.y=p,u.copy(e[f+1]),u.y=p,l=h._computeVertexMiterNormal(d,o,s,u)),s.toArray(r,a),o.toArray(i,a),l.toArray(n,a),a+=3;return{bottomPositionsArray:i,topPositionsArray:r,normalsArray:n}}updateGeometry(e){var t=this;r.GIS.ApproximateTerrainHeights.initialize().then((()=>{var i=e||{};i.type=i.curveType||t.curveType,i.points=i.points||t._options.points;var r=t.createCurve(i),n=t.createGeometry(r),a=t.createAttributes(n);for(var s in t.setIndex(a.index),a.attributes)t.deleteAttribute(s),t.setAttribute(s,new THREE.Float32BufferAttribute(a.attributes[s].array,a.attributes[s].itemSize));t.computeBoundingSphere(),t._initialized||(t._initialized=!0,t.viewer.render())}))}static _computeRightNormal(e,t,i){var r=h._direction(i,e),n=h._direction(t,e),a=new THREE.Vector3;return a.crossVectors(r,n),a.normalize(),a}static _computeVertexMiterNormal(e,t,r,n){var a=h._direction(r,t),s=h._tangentDirection(e,t,a),o=h._tangentDirection(n,t,a),l=new THREE.Vector3;if(h._equalsEpsilon(s.dot(o),-1,i))return l.crossVectors(a,s),l.normalize(),l;l.addVectors(o,s),l.normalize();var d=new THREE.Vector3;return d.crossVectors(a,l),o.dot(d)<0&&l.negate(),l}static _direction(e,t){var i=new THREE.Vector3;return i.subVectors(e,t),i.normalize(),i}static _tangentDirection(e,t,i){var r=h._direction(e,t);return r.cross(i),r.normalize(),r.crossVectors(i,r),r}static _equalsEpsilon(e,t,i,r){var n=Math.abs(e-t);return n<=r||n<=i*Math.max(Math.abs(e),Math.abs(t))}static _breakMiter(e,t,i,s){var o=h._direction(i,t).dot(e);if(o>n||o<a){var l=h._direction(s,i),d=o<a?r.Math.PI_OVER_TWO:-r.Math.PI_OVER_TWO;return e.applyAxisAngle(l,d),!0}return!1}_getMinMaxHeight(e,t){if(this.tileManager){var i=this.tileManager;if(!i.isUseTerrain())return{maximumTerrainHeight:1e3,minimumTerrainHeight:-1e3};var n=this.viewer.drawingToWorld(e),a=this.viewer.drawingToWorld(t),h=i.worldPositionToLngLat(n),c=i.worldPositionToLngLat(a),u=s;u.height=0,u.longitude=THREE.Math.degToRad(h.x),u.latitude=THREE.Math.degToRad(h.y);var p=o;p.height=0,p.longitude=THREE.Math.degToRad(c.x),p.latitude=THREE.Math.degToRad(c.y);var m=r.GIS.Rectangle.fromCartographicArray(l,d),f=r.GIS.ApproximateTerrainHeights.getMinimumMaximumHeights(m);if(f){var g=new THREE.Vector3(0,0,(f.maximumTerrainHeight-i.modelAltitude)*r.Tile.TileMath.unitScale),v=this.viewer.worldToDrawing(g);f.maximumTerrainHeight=v.y,g=new THREE.Vector3(0,0,(f.minimumTerrainHeight-i.modelAltitude)*r.Tile.TileMath.unitScale),v=this.viewer.worldToDrawing(g),f.minimumTerrainHeight=v.y}return f}}}r.GroundCurveGeometry=h}(),function(){class e extends THREE.Mesh{constructor(e,t){super(e,t),this.type="GroundCurveMesh",this.lineType="Continuous",this.visibleModelIdMap=null}setColor(e){this.material.color.setRGB(e.red/255,e.green/255,e.blue/255),this.material.opacity=e.alpha,this.material.transparent=e.alpha<1,this.renderOrder=r.GlobalData.IncrementRender?r.EnumRenderOrder.Increment:r.EnumRenderOrder.BeforeComponent}setOpacity(e){this.material.opacity=e,this.material.transparent=e<1}setWidth(e){this.material.lineWidth=e}setStyle(e){if(this.lineType!=e.lineType){this.lineType=e.lineType;var t=this.material;"Continuous"==this.lineType?t.dashMode=0:t.dashMode=1}}setType(e){var t=this.geometry;t.curveType=e,t.updateGeometry({curveType:e})}setClampMode(e){this.material.clampMode=e}setVisibleModelIdMap(e){this.visibleModelIdMap=e}getVisibleModelIdMap(){return this.visibleModelIdMap}dispose(){this.geometry.dispose(),this.material.dispose()}onRemoved(){r.GroundPrimitiveManager.getInstance().removeGroundCurve(this)}onAdded(){r.GroundPrimitiveManager.getInstance().addGroundCurve(this)}}r.GroundCurveMesh=e}(),function(){var e=new r.GIS.Cartographic,t=new r.GIS.Cartographic,i=[e,t],n=new r.GIS.Rectangle;class a extends THREE.BufferGeometry{constructor(e){if(super(),this.type="GroundPolygonGeometry",this.viewer=void 0,this.tileManager=void 0,this.minHeight=-1e3,this.maxHeight=1e3,this._initialized=!1,!e.points||e.points.length<3)console.warn("ground polygon's points.length must >= 3.");else{var t=this;r.GIS.ApproximateTerrainHeights.initialize().then((()=>{t.viewer||(t.viewer=e.viewer,t.viewer.modelManager.modelCollection.traverse((e=>{e.isDemLayer&&(t.tileManager=e.tileManager)})));var i=t.createAttributes(e);for(var r in t.setIndex(i.index),i.attributes)t.setAttribute(r,new THREE.Float32BufferAttribute(i.attributes[r].array,i.attributes[r].itemSize));t.computeBoundingSphere(),t._initialized||(t._initialized=!0,t.viewer.render())}))}}createAttributes(e){this._getMinMaxHeight(e);for(var t=e.points,i=t.length,n=new Array(2*i),a=[],s=0;s<i;s++){var o=this.viewer.worldToDrawing(t[s]);a.push(o),n[2*s]=o.x,n[2*s+1]=o.z}var l=0,d=new THREE.Vector3,h=new THREE.Vector3,c=new Array(3*i),u=new Array(3*i);for(s=0;s<i;s++)h.copy(a[s]),h.y=this.minHeight,d.copy(a[s]),d.y=this.maxHeight,d.toArray(u,l),h.toArray(c,l),l+=3;var p=new Array;p=p.concat(c).concat(u);var m=new Array,f=r.earcut(n);m=m.concat(f);var g=[...f].reverse();for(s=0;s<g.length;s++)g[s]+=i;m=m.concat(g);var v=new Array;for(s=0;s<i;s++)v.push(s),v.push((s+1)%i),v.push(i+(s+1)%i),v.push(s),v.push(i+(s+1)%i),v.push(i+s);return r.Utils.isClockWise(t)&&(v=[...v].reverse()),{index:m=m.concat(v),attributes:{position:{array:p,itemSize:3}}}}updateGeometry(e){var t=this;r.GIS.ApproximateTerrainHeights.initialize().then((()=>{var i=t.createAttributes(e);for(var r in t.setIndex(i.index),i.attributes)t.deleteAttribute(r),t.setAttribute(r,new THREE.Float32BufferAttribute(i.attributes[r].array,i.attributes[r].itemSize));t.computeBoundingSphere(),t._initialized||(t._initialized=!0,t.viewer.render())}))}_getMinMaxHeight(a){if(this.tileManager){var s=a.points,o=this.tileManager;if(!o.isUseTerrain())return{maximumTerrainHeight:1e3,minimumTerrainHeight:-1e3};for(var l=180,d=90,h=-180,c=-90,u=0;u<s.length;u++){var p=s[u],m=o.worldPositionToLngLat(p);l=Math.min(l,m.x),h=Math.max(h,m.x),d=Math.min(d,m.y),c=Math.max(c,m.y)}var f=e;f.height=0,f.longitude=THREE.Math.degToRad(l),f.latitude=THREE.Math.degToRad(d);var g=t;g.height=0,g.longitude=THREE.Math.degToRad(h),g.latitude=THREE.Math.degToRad(c);var v=r.GIS.Rectangle.fromCartographicArray(i,n),y=r.GIS.ApproximateTerrainHeights.getMinimumMaximumHeights(v);if(y){p=new THREE.Vector3(0,0,(y.maximumTerrainHeight-o.modelAltitude)*r.Tile.TileMath.unitScale);var M=this.viewer.worldToDrawing(p);this.maxHeight=M.y,p=new THREE.Vector3(0,0,(y.minimumTerrainHeight-o.modelAltitude)*r.Tile.TileMath.unitScale),M=this.viewer.worldToDrawing(p),this.minHeight=M.y}}}}r.GroundPolygonGeometry=a}(),function(){class e extends THREE.Mesh{constructor(e,t){super(e,t),this.type="GroundPolygonMesh"}setColor(e){this.material.color.setRGB(e.red/255,e.green/255,e.blue/255),this.material.opacity=e.alpha,this.material.transparent=e.alpha<1}setOpacity(e){this.material.opacity=e,this.material.transparent=e<1}dispose(){this.geometry.dispose(),this.material.dispose()}onRemoved(){r.GroundPrimitiveManager.getInstance().removeGroundPolygon(this)}onAdded(){r.GroundPrimitiveManager.getInstance().addGroundPolygon(this)}}r.GroundPolygonMesh=e}(),function(){const e=new THREE.Matrix4;e.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1);r.ShadowMapCamera=class{constructor(){this.viewMatrix=new THREE.Matrix4,this.inverseViewMatrix=new THREE.Matrix4,this.orthoCamera=new THREE.OrthographicCamera,this.positionWC=new THREE.Vector3,this.directionWC=new THREE.Vector3(0,0,1),this.upWC=new THREE.Vector3(0,1,0),this.rightWC=new THREE.Vector3(1,0,0),this.viewProjectionMatrix=new THREE.Matrix4}destroy(){this.viewMatrix=null,this.inverseViewMatrix=null,this.orthoCamera=null,this.positionWC=null,this.directionWC=null,this.upWC=null,this.rightWC=null,this.viewProjectionMatrix=null}clone(e){this.viewMatrix.copy(e.viewMatrix),this.inverseViewMatrix.copy(e.inverseViewMatrix),this.orthoCamera.copy(e.orthoCamera),this.positionWC.copy(e.positionWC),this.directionWC.copy(e.directionWC),this.upWC.copy(e.upWC),this.rightWC.copy(e.rightWC)}getViewProjection(){var t=this.viewMatrix;this.orthoCamera.updateProjectionMatrix();var i=this.orthoCamera.projectionMatrix;return this.viewProjectionMatrix.multiplyMatrices(i,t),this.viewProjectionMatrix.multiplyMatrices(e,this.viewProjectionMatrix),this.viewProjectionMatrix}}}(),(()=>{const e=new THREE.Sphere,t=new THREE.Vector2,i=new THREE.Vector3,n=new THREE.Vector3,a=new THREE.Matrix4,s=new THREE.Matrix4,o=new THREE.Vector3,l=new THREE.Vector3,d=new THREE.Matrix4,h=new THREE.Vector3,c=new THREE.Vector3,u=new THREE.Vector3,p=new Array(8);p[0]=new THREE.Vector4(-1,-1,-1,1),p[1]=new THREE.Vector4(1,-1,-1,1),p[2]=new THREE.Vector4(1,1,-1,1),p[3]=new THREE.Vector4(-1,1,-1,1),p[4]=new THREE.Vector4(-1,-1,1,1),p[5]=new THREE.Vector4(1,-1,1,1),p[6]=new THREE.Vector4(1,1,1,1),p[7]=new THREE.Vector4(-1,1,1,1);for(var m=new Array(8),f=0;f<8;++f)m[f]=new THREE.Vector4;var g=new Array(5),v=new Array(4),y=new THREE.PerspectiveCamera;r.CSM=class{constructor(e){e=e||{},this.viewer=e.viewer,this.camera=e.camera,this.scene=e.scene,this.cascades=4,this.shadowMapSize=1024,this.shadowBias=[-.0015,-.0018,-.0022,-.003],this.lights=[],this.extendedBreaks=[new THREE.Vector2(0,.16704173648319734),new THREE.Vector2(.16704173648319734,.34690875474964117),new THREE.Vector2(.34690875474964117,1),new THREE.Vector2(1,1)],this.shadowNear=+Number.MAX_VALUE,this.shadowFar=-Number.MAX_VALUE,this.shadowClosestObjectSize=Number.MAX_VALUE,this.MAXIMUM_DISTANCE=2e4,this.maximumDistance=1e4,this.sceneCamera=new r.Camera(r.CAMERATYPE.PERSPECTIVE),this.shadowMapCamera=new r.ShadowMapCamera,this._maximumCascadeDistances=[25,150,700,Number.MAX_VALUE],this.createLights()}destroy(){this.shadowBias=null,this.lights=null,this.extendedBreaks=null,this.sceneCamera=null,this.shadowMapCamera.destroy(),this.shadowMapCamera=null,this._maximumCascadeDistances=null,this.viewer=null,this.camera=null,this.scene=null}createLights(){for(let e=0;e<this.cascades;e++){const t=new THREE.DirectionalLight(16777215,1);t.castShadow=!0,t.shadow.mapSize.width=this.shadowMapSize,t.shadow.mapSize.height=this.shadowMapSize,t.shadow.bias=this.shadowBias[e],this.lights.push(t)}}update(e){this.computeNearFarPlane(this.scene,this.camera),this.shadowMapCamera.directionWC.copy(e),this.shadowMapCamera.directionWC.negate(),this.shadowMapCamera.directionWC.normalize(),this.fitShadowMapToScene(),this.computeCascades();const t=this.camera;this.extendedBreaks[0].set(g[0],g[1]),this.extendedBreaks[1].set(g[1],g[2]),this.extendedBreaks[2].set(g[2],g[3]),this.extendedBreaks[3].set(g[3],g[4]),t.csmCascades=this.extendedBreaks,this.viewer.updateShadowMap(),this.updateCascades()}updateCascades(){const e=this.viewer.getScene().getObjectGroups();for(var t=0;t<e.length;t++)this._updateCascadesForModel(e[t])}_updateCascadesForModel(e){if(!e.visible)return;const t=e.material;if(t instanceof Array)for(let e=0;e<t.length;e++){const i=t[e];r.Utils.isDefined(i)&&i.useCSM&&(i.needsUpdate=!0,i.uniforms.csmCascades.value=this.camera.csmCascades)}else r.Utils.isDefined(t)&&t.useCSM&&(t.needsUpdate=!0,t.uniforms.csmCascades.value=this.camera.csmCascades);let i=e.children;for(let e=0,t=i.length;e<t;e++)this._updateCascadesForModel(i[e])}computeCascades(){var e,t=this.shadowMapCamera,i=this.sceneCamera,r=i.near,n=i.far,s=n-r,o=n/r,l=.9,d=!1;this.shadowClosestObjectSize<200&&(d=!0,l=.9);var f=v,M=g;for(M[0]=r,M[4]=n,e=0;e<4;++e){var E=(e+1)/4,b=r*Math.pow(o,E),x=r+s*E,I=THREE.Math.lerp(x,b,l);M[e+1]=I,f[e]=I-M[e]}if(d){for(e=0;e<4;++e)f[e]=Math.min(f[e],this._maximumCascadeDistances[e]);var T=M[0];for(e=0;e<3;++e)T+=f[e],M[e+1]=T}var C=t.orthoCamera,w=C.left,S=C.right,A=C.bottom,B=C.top,R=C.near,D=C.far,O=t.positionWC,L=t.directionWC,P=t.upWC,N=y;N.fov=i.fov,N.aspect=i.aspect,N.position.copy(i.position),N.up.copy(i.up),N.lookAt(i.target),N.updateMatrixWorld(!0),N.matrixWorldInverse.copy(N.matrixWorld).invert();var H=t.getViewProjection();for(e=0;e<4;++e){N.near=M[e],N.far=M[e+1],N.updateProjectionMatrix();for(var F=a.multiplyMatrices(N.projectionMatrix,N.matrixWorldInverse),k=a.copy(F).invert(),U=a.multiplyMatrices(H,k),G=h.set(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),z=c.set(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE),V=0;V<8;++V){var j=m[V].copy(p[V]);j.applyMatrix4(U),j.divideScalar(j.w),G.min(j),z.max(j)}G.x=Math.max(G.x,0),G.y=Math.max(G.y,0),G.z=0,z.x=Math.min(z.x,1),z.y=Math.min(z.y,1),z.z=Math.min(z.z,1),u.copy(O),u.add(L);const t=this.lights[e];t.position.copy(O),t.up.copy(P),t.updateMatrixWorld(!0),t.target.position.copy(u),t.target.updateMatrixWorld(!0);const i=t.shadow.camera;i.left=w+G.x*(S-w),i.right=w+z.x*(S-w),i.bottom=A+G.y*(B-A),i.top=A+z.y*(B-A),i.near=R+G.z*(D-R),i.far=R+z.z*(D-R),i.updateProjectionMatrix(),i.position.copy(O),i.up.copy(P),i.lookAt(t.target.position),i.updateMatrixWorld(!0)}}fitShadowMapToScene(){var e=this.shadowMapCamera,t=this.sceneCamera,n=a.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),u=s.copy(n).invert(),f=e.directionWC,g=i;r.Math.equalsEpsilonVector3(f,g,r.Math.EPSILON10)&&(g=t.up),o.copy(f),o.cross(g);var v=o;g.copy(v),g.cross(f),g.normalize(),v.normalize();var y=l;y.set(0,0,0);for(var M=r.Utils.computeView(y,f,g,v,d),E=s.multiplyMatrices(M,u),b=h.set(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),x=c.set(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE),I=0;I<8;++I){var T=m[I].copy(p[I]);T.applyMatrix4(E),T.divideScalar(T.w),b.min(T),x.max(T)}x.z+=1e3,b.z-=10;var C=l;C.x=-.5*(b.x+x.x),C.y=-.5*(b.y+x.y),C.z=-x.z;var w=a.makeTranslation(C.x,C.y,C.z);M=w.multiplyMatrices(w,M);var S=.5*(x.x-b.x),A=.5*(x.y-b.y),B=x.z-b.z,R=e.orthoCamera;R.left=-S,R.right=S,R.bottom=-A,R.top=A,R.near=.01,R.far=B,e.viewMatrix.copy(M),e.inverseViewMatrix.copy(M).invert(),r.Utils.getTranslationFromMatrix4(e.inverseViewMatrix,e.positionWC),e.directionWC.copy(f),e.upWC.copy(g),e.rightWC.copy(v)}computeNearFarPlane(e,t){this.shadowNear=+Number.MAX_VALUE,this.shadowFar=-Number.MAX_VALUE,this.shadowClosestObjectSize=Number.MAX_VALUE;var r=t.position,n=t.target;i.subVectors(n,r),i.normalize(),this._computeNearFarPlane(e,t),this.shadowNear=Math.min(Math.max(this.shadowNear,t.near),t.far),this.shadowFar=Math.max(Math.min(this.shadowFar,t.far),this.shadowNear),this.shadowNear=Math.min(this.shadowNear,this.maximumDistance),this.shadowFar=Math.min(this.shadowFar,this.maximumDistance+1),this.sceneCamera.copy(t),this.sceneCamera.near=this.shadowNear,this.sceneCamera.far=this.shadowFar,this.sceneCamera.updateProjectionMatrix()}_computePlaneDistances(e,t,i,r){var a=e.center;n.subVectors(a,t);var s=i.dot(n);return r.x=s-e.radius,r.y=s+e.radius,r}_computeNearFarPlane(n,a){if(n.visible&&n.name!=r.ObjectGroupType.RECEIVESHADOWPLANE){if(n.layers.test(a.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.isSkinnedMesh&&n.skeleton.update(),!n.frustumCulled||a.frustum.intersectsObject(n))){var s=n.geometry;null===s.boundingSphere&&s.computeBoundingSphere(),e.copy(s.boundingSphere).applyMatrix4(n.matrixWorld),this._computePlaneDistances(e,a.position,i,t);var o=t.x,l=t.y;if(n.castShadow&&o<this.MAXIMUM_DISTANCE){var d=l-o;o<100&&(this.shadowClosestObjectSize=Math.min(this.shadowClosestObjectSize,d)),this.shadowNear=Math.min(this.shadowNear,o),this.shadowFar=Math.max(this.shadowFar,l)}}for(var h=n.children,c=0,u=h.length;c<u;c++)this._computeNearFarPlane(h[c],a)}}}})(),(()=>{let e=new THREE.Vector3,t=new THREE.Vector3;var i=new THREE.Box3;r.LightManager=class{constructor(e){this.scene=e,this.lightHelper=!1,this.shadowLightNum=0,this.shadowBox=new THREE.Box3,this.defaultLightsGroup=new r.ObjectGroup(r.ObjectGroupType.DEFAULTLIGHTS),this.externalDirLightsGroup=new r.ObjectGroup(r.ObjectGroupType.EXTERNALDIRLIGHTS),this.scene.add(this.defaultLightsGroup),this.scene.add(this.externalDirLightsGroup),this.externalSpotLightsGroup=this.scene.getOrCreateObjectGroup(r.ObjectGroupType.EXTERNALSPOTLIGHTS,{globalSpace:!0}),this.lightHelperGroup=this.scene.getOrCreateObjectGroup(r.ObjectGroupType.LIGHTHELPER),this.receivingPlane=null,this.cameraHelper=null,this.csm=null,this.useCSM=!1,this.defaultLightArray=[],this.initDefaultLights(),this.lightPreset()}initCSM(e){this.csm||(this.csm=new r.CSM({viewer:e,camera:e.camera,scene:this.scene}))}enableCSM(e){this.useCSM=e,r.GlobalData.EnableCSM=e,this.adjustLightsForCSM(),this.csm&&this.csm.viewer.modelManager.updateMaterialsValue("useCSM",e)}adjustLightsForCSM(){for(var e=!(!this.useCSM||!this.csm),t=0;t<this.defaultLightArray.length;t++)this.defaultLightsGroup.remove(this.defaultLightArray[t]);for(t=0;t<this.csm.lights.length;t++)this.defaultLightsGroup.remove(this.csm.lights[t]);if(e)for(t=0;t<this.csm.lights.length;t++)this.defaultLightsGroup.add(this.csm.lights[t]);for(t=0;t<this.defaultLightArray.length;t++){var i=this.defaultLightArray[t];this.defaultLightsGroup.add(i),i instanceof THREE.DirectionalLight&&e&&(i.castShadow=!1)}for(t=0;t<this.externalDirLightsGroup.children.length;t++){(i=this.externalDirLightsGroup[t])instanceof THREE.DirectionalLight&&e&&(i.castShadow=!1)}}destroy(){this.scene.remove(this.defaultLightsGroup),this.defaultLightsGroup=null,this.defaultLightArray=null,this.hemisphereLight=null,this.dirLight=null,this.ambientLight=null,this.sunLight=null,this.fillLight01=null,this.fillLight02=null,this.fillLight03=null,this.light04=null,this.shadowBox=null,this.externalSpotLightsGroup.clear(),this.scene.remove(this.externalSpotLightsGroup),this.externalSpotLightsGroup=null,this.externalDirLightsGroup.clear(),this.scene.remove(this.externalDirLightsGroup),this.externalDirLightsGroup=null,this.lightHelperGroup.clear(),this.scene.remove(this.lightHelperGroup),this.lightHelperGroup=null,this.cameraHelper=null,this.receivingPlane&&(this.scene.objectGroups.remove(this.receivingPlane),this.receivingPlane=null),this.csm&&(this.csm.destroy(),this.csm=null),this.scene=null}initDefaultLights(){var e=.7;this.hemisphereLight||(this.hemisphereLight=new THREE.HemisphereLight(16777215,16777215,e*r.GlobalData.LightIntensityFactor),this.hemisphereLight.initIntensity=e,this.defaultLightsGroup.add(this.hemisphereLight),this.defaultLightArray.push(this.hemisphereLight)),e=.7,this.dirLight||(this.dirLight=new THREE.DirectionalLight(16777215,e*r.GlobalData.LightIntensityFactor),this.dirLight.initIntensity=e,this.defaultLightsGroup.add(this.dirLight),this.defaultLightArray.push(this.dirLight)),this.ambientLight||(this.ambientLight=new THREE.AmbientLight(16777215,.6),this.defaultLightsGroup.add(this.ambientLight),this.defaultLightArray.push(this.ambientLight)),this.sunLight||(this.sunLight=new THREE.DirectionalLight(16777215,1),this.defaultLightsGroup.add(this.sunLight),this.defaultLightArray.push(this.sunLight)),this.fillLight01||(this.fillLight01=new THREE.DirectionalLight(16777215,1),this.defaultLightsGroup.add(this.fillLight01),this.defaultLightArray.push(this.fillLight01)),this.fillLight02||(this.fillLight02=new THREE.DirectionalLight(16777215,1),this.defaultLightsGroup.add(this.fillLight02),this.defaultLightArray.push(this.fillLight02)),this.fillLight03||(this.fillLight03=new THREE.DirectionalLight(16777215,1),this.defaultLightsGroup.add(this.fillLight03),this.defaultLightArray.push(this.fillLight03)),this.light04||(this.light04=new THREE.DirectionalLight(16777215,.15),this.light04.castShadow=!1,this.light04.intensity=.5,this.light04.shadow.mapSize.width=1024,this.light04.shadow.mapSize.height=1024,this.light04.shadow.bias=-9e-4,this.defaultLightsGroup.add(this.light04),this.defaultLightArray.push(this.light04),this.lightCastShadow=this.light04)}hideDefaultLights(){for(var e=0;e<this.defaultLightsGroup.children.length;e++){this.defaultLightsGroup.children[e].visible=!1}if(this.useCSM&&this.csm)for(e=0;e<this.csm.lights.length;e++)this.csm.lights[e].visible=!0}defaultLightPreset(){this.hideDefaultLights(),this.hemisphereLight.visible=!0,this.hemisphereLight.position.set(0,500,0),this.hemisphereLight.updateMatrixWorld(!0),this.dirLight.visible=!0,this.dirLight.color.setHSL(.1,1,.95),this.dirLight.position.set(-1,.75,1),this.dirLight.position.multiplyScalar(50)}updateDefaultLight(e){var t=this.dirLight;t.intensity=t.initIntensity*r.GlobalData.LightIntensityFactor,t.position.set(e.x,e.y,e.z),t.updateMatrixWorld(!0);var i=this.hemisphereLight;i.intensity=i.initIntensity*r.GlobalData.LightIntensityFactor}setupCommonLight(){this.hideDefaultLights(),this.ambientLight.visible=!0,this.ambientLight.intensity=.6,this.sunLight.visible=!0,this.sunLight.color.setHex(14800580),this.sunLight.position.set(-100,160,100),this.sunLight.intensity=.72,this.sunLight.distance=300,this.sunLight.updateMatrixWorld()}lightPreset01(){this.setupCommonLight(),this.fillLight01.visible=!0,this.fillLight01.color.setHex(16777215),this.fillLight01.position.set(100,100,100),this.fillLight01.intensity=1,this.fillLight01.updateMatrixWorld(),this.fillLight02.visible=!0,this.fillLight02.color.setHex(16777215),this.fillLight02.position.set(-100,100,-100),this.fillLight02.intensity=.24,this.fillLight02.updateMatrixWorld(),this.ambientLight.intensity=.6,this.sunLight.intensity=.9}lightPreset02(){this.setupCommonLight(),this.fillLight01.visible=!0,this.fillLight01.position.set(60,80,130),this.fillLight01.intensity=.28,this.fillLight01.updateMatrixWorld(),this.fillLight02.visible=!0,this.fillLight02.color.setHex(8100788),this.fillLight02.position.set(100,80,-100),this.fillLight02.intensity=.22,this.fillLight02.updateMatrixWorld(),this.fillLight03.visible=!0,this.fillLight03.color.setHex(8100788),this.fillLight03.position.set(-140,80,-50),this.fillLight03.intensity=.18,this.fillLight03.updateMatrixWorld()}lightPreset03(){this.setupCommonLight(),this.fillLight01.visible=!0,this.fillLight01.color.setHex(16777215),this.fillLight01.position.set(100,100,100),this.fillLight01.intensity=.75,this.fillLight01.updateMatrixWorld(),this.fillLight02.visible=!0,this.fillLight02.color.setHex(16777215),this.fillLight02.position.set(-100,100,-100),this.fillLight02.intensity=.21,this.fillLight02.updateMatrixWorld(),this.ambientLight.intensity=.4,this.sunLight.intensity=.56}lightPreset04(){this.setupCommonLight(),this.fillLight01.visible=!0,this.fillLight01.color.setHex(16777215),this.fillLight01.position.set(100,100,100),this.fillLight01.intensity=.4,this.fillLight01.updateMatrixWorld(),this.fillLight02.visible=!0,this.fillLight02.color.setHex(16777215),this.fillLight02.position.set(-100,100,-100),this.fillLight02.intensity=.1,this.fillLight02.updateMatrixWorld(),this.ambientLight.intensity=.3,this.sunLight.intensity=.2,this.light04.visible=!0,this.updateShadowLight()}lightPreset(){var e=r.GlobalData.LightPreset;switch(e){case 0:this.defaultLightPreset();break;case 1:this.lightPreset01();break;case 2:this.lightPreset02();break;case 3:this.lightPreset03();break;case 4:this.lightPreset04();break;default:this.setupCommonLight(),this.sunLight.color.setHex(16777215),this.ambientLight.intensity=.72}this.scene.gisMode||(this.getReceivingPlane(),this.receivingPlane.visible=4==e),this.lightHelper&&this.addLightHelper()}addExternalSpotLight(e){this.externalSpotLightsGroup.add(e)}addExternalDirLight(e){this.externalDirLightsGroup.add(e),this.adjustLightsForCSM()}updateLights(e){var t=new THREE.Vector3(0,1,0),i=Math.PI/4,n=1e3,a=e.position.clone();switch(a.sub(e.target),a.normalize(),r.GlobalData.LightPreset){case 0:this.updateDefaultLight(a);break;case 1:case 3:case 4:var s=a.clone().applyAxisAngle(t,-1.2*i);this.fillLight01.position.copy(s).normalize(),this.fillLight01.position.multiplyScalar(n),this.fillLight01.position.y=600,this.fillLight01.updateMatrixWorld(),s=a.clone().applyAxisAngle(t,1*i),this.fillLight02.position.copy(s).normalize(),this.fillLight02.position.multiplyScalar(n),this.fillLight02.position.y=600,this.fillLight02.updateMatrixWorld(),this.updateShadowLight();break;case 2:break;default:s=a.clone().applyAxisAngle(t,-2*i);this.sunLight.position.copy(s).normalize(),this.sunLight.position.multiplyScalar(n),this.sunLight.position.y=600,this.sunLight.updateMatrixWorld()}this.lightHelper&&this.updateLightHelper()}updateShadowLight(){if(this.useCSM&&this.csm)this.csm.update(this.scene.sunDirection);else if(this.scene.getBoundingBoxWithoutDEM()){i.copy(this.scene.getBoundingBoxWithoutDEM());var r=i,n=r.getCenter(e),a=new THREE.Vector3,s=new THREE.Vector3;s.copy(this.scene.sunDirection),s.negate(),s.multiplyScalar(100),a.set(n.x-s.x,n.y-s.y,n.z-s.z);var o=r.getSize(t);r.min.y=r.min.y-.05*o.y;var l=new THREE.Plane(new THREE.Vector3(0,1,0),-r.min.y),d=l.normal.dot(s),h=new THREE.Vector3(r.max.x,r.max.y,r.min.z),c=-(h.dot(l.normal)+l.constant)/d,u=new THREE.Vector3;u.copy(s).multiplyScalar(c).add(h),r.expandByPoint(u),this.shadowBox.copy(r),this.lightCastShadow.position.set(a.x,a.y,a.z),this.lightCastShadow.target.position.set(n.x,n.y,n.z),this.lightCastShadow.target.updateMatrixWorld(!0),this.lightCastShadow.updateMatrixWorld(!0);var p=this.lightCastShadow.shadow.camera;p.position.set(a.x,a.y,a.z);var m=n;p.lookAt(m),p.updateMatrixWorld(),p.matrixWorldInverse.copy(p.matrixWorld).invert(),r.applyMatrix4(p.matrixWorldInverse),p.left=r.min.x,p.right=r.max.x,p.top=r.max.y,p.bottom=r.min.y,p.far=-r.min.z,p.near=-r.max.z,p.updateProjectionMatrix(),this.updateReceivingPlane()}}getReceivingPlane(){if(!this.receivingPlane){this.receivingPlane=this.scene.getOrCreateObjectGroup(r.ObjectGroupType.RECEIVESHADOWPLANE);var e=new THREE.ShadowMaterial;e.isShaderMaterial=!1,e.transparent=!0,e.opacity=.2,e.side=THREE.DoubleSide;var t=new THREE.PlaneBufferGeometry(1,1),i=new THREE.Mesh(t,e);i.receiveShadow=!0,i.rotateOnAxis(new THREE.Vector3(1,0,0),Math.PI/2),this.receivingPlane.add(i),this.receivingPlane.matrixAutoUpdate=!1}return this.receivingPlane}updateReceivingPlane(){var t=this.shadowBox;if(t&&this.receivingPlane&&this.receivingPlane.visible){var i=t.getCenter(e),r=this.receivingPlane.children[0];r.position.y=t.min.y,r.position.x=i.x,r.position.z=i.z;var n=t.getSize(e);r.scale.x=n.x,r.scale.y=n.z,this.receivingPlane.updateMatrixWorld(!0)}}clearLightHelper(){for(var e=this.lightHelperGroup.children.length-1;e>=0;e--){var t=this.lightHelperGroup.children[e];this.lightHelperGroup.remove(t)}this.cameraHelper=null}addLightHelper(){this.clearLightHelper();for(var e=0;e<this.defaultLightsGroup.children.length;++e){if((i=this.defaultLightsGroup.children[e])instanceof THREE.DirectionalLight&&i.visible){var t=new THREE.DirectionalLightHelper(i,200);this.lightHelperGroup.add(t)}}for(e=0;e<this.externalSpotLightsGroup.children.length;++e){if((i=this.externalSpotLightsGroup.children[e])instanceof THREE.DirectionalLight&&i.visible){t=new THREE.DirectionalLightHelper(i,200);this.lightHelperGroup.add(t)}}for(e=0;e<this.externalDirLightsGroup.children.length;++e){var i;if((i=this.externalDirLightsGroup.children[e])instanceof THREE.DirectionalLight&&i.visible){t=new THREE.DirectionalLightHelper(i,200);this.lightHelperGroup.add(t)}}if(this.lightCastShadow&&this.lightCastShadow.visible&&(this.cameraHelper=new THREE.CameraHelper(this.lightCastShadow.shadow.camera),this.lightHelperGroup.add(this.cameraHelper)),this.useCSM&&this.csm)for(e=0;e<this.csm.lights.length;e++){var r=new THREE.CameraHelper(this.csm.lights[e].shadow.camera);this.lightHelperGroup.add(r)}}updateLightHelper(){for(var e=0;e<this.lightHelperGroup.children.length;++e){var t=this.lightHelperGroup.children[e];t.update(),t.updateMatrixWorld(!0)}}getShadowBoxWorld(){if(this.shadowBox){var e=new THREE.Box3;e.copy(this.shadowBox);var t=this.scene.geometryGroup.matrix.clone();return t.invert(),e.applyMatrix4(t),e}return null}removeLight(e){e&&e.parent&&e.parent.remove(e)}}})(),r.ObjectPool=function(e,t){this.cls=e,this.size=t,this._pool=[],this.counter=0},r.ObjectPool.prototype.init=function(e){for(var t=0,i=this.size;t<i;++t){var n=new this.cls;n.init(e),this._pool[t]=n,r.GlobalData.EnableShadowMap&&(n.castShadow=!0,n.receiveShadow=!0)}},r.ObjectPool.prototype.resize=function(e,t){this.size=e,this.collect(),this.init(t)},r.ObjectPool.prototype.get=function(e){if(this.counter>=this.size)return null;var t=this._pool[this.counter];return t.spawn(e),++this.counter,t},r.ObjectPool.prototype.clear=function(){for(var e=0,t=this.size;e<t;++e)this._pool[e].clear();this.counter=0},r.ObjectPool.prototype.destroy=function(){this.collect()},r.ObjectPool.prototype.collect=function(){this._pool=[],this.counter=0},r.ObjectPool.prototype.getObjects=function(){return this._pool},r.ExpandableObjectPool=function(){this.size=0,this.counter=0,this.expansion=1,this._pool=null},r.ExpandableObjectPool.prototype.init=function(e,t){this.classType=e,this._pool=[],this._expand(t)},r.ExpandableObjectPool.prototype._expand=function(e){this.size+=e;for(var t=0;t<e;t++)this._pool.push(new this.classType)},r.ExpandableObjectPool.prototype.acquire=function(){return this.counter>=this.size&&(this.expansion=Math.round(1.2*this.expansion)+1,this._expand(this.expansion),console.log("_expand")),this._pool[this.counter++]},r.ExpandableObjectPool.prototype.clear=function(){this.counter=0},r.ExpandableObjectPool.prototype.destroy=function(){for(var e=0,t=this.size;e<t;++e)this._pool[e].destroy();this.counter=0,this.size=0,this.expansion=1,this._pool=null},r.ExpandableObjectPool.prototype.getObjects=function(){return this._pool},function(){class e extends THREE.Group{constructor(e,t={}){super(),this.name=e,this.priority=t&&t.priority?t.priority:5,this.pickableType=t&&t.pickableType?t.pickableType:r.PICKABLETYPE.UnPickable,this.globalSpace=!(!t||!t.globalSpace)&&t.globalSpace,this.boundingBox=null,this.hoverEnabled=!(!t||!t.hoverEnabled)&&t.hoverEnabled}clear(){this.children.length=0}removeByName(e){for(var t=this.children,i=0,r=t.length;i<r;++i)if(t[i].name===e){t.splice(i,1);break}}isGlobalSpace(){return this.globalSpace}hasChild(e){for(var t=0,i=this.children.length;t<i;t++)if(this.children[t].name==e)return!0;return!1}isPickable(){return this.pickableType!==r.PICKABLETYPE.UnPickable}raycast(e,t){for(var i=0,n=this.children.length;i<n;i++){var a=this.children[i];if(r.Utils.isGroupObject(a)){var s=a.name;a.traverseVisible((function(i){r.Utils.isMeshObject(i)&&(void 0===i.userId&&(i.userId=s),i.raycast(e,t))}))}else a.visible&&a.raycast(e,t)}t.forEach((e=>{e.userId=e.object.userId}))}}r.ObjectGroup=e}(),(()=>{let e=new THREE.Matrix4;r.ObjectGroupType={MODEL:"Model",GEOMETRY:"Geometry",LINESEGMENTS:"LineSegments",INSTANCEGEOMETRY:"InstanceGeometry",INSTANCEWIREFRAMEGEOMETRY:"InstanceWireframeGeometry",WIREFRAME:"Wireframe",MARKER3D:"Marker3D",CLIPPLANE:"ClipPlane",FILLCLIPPLANE:"FillClipPlane",CLIPREGION:"ClipRegion",CAPSWIREFRAME:"CapsWireframe",IBLCUBE:"IBLCube",CUSTOMPLANE:"CustomPlane",PIVOTBALL:"PivotBall",MEASUREPICKPOINT:"MeasurePickPoint",MEASUREPICKLINE:"MeasurePickLine",MEASUREPLANE:"MeasurePlane",MEASURELINE:"MeasureLine",OCTREENODE:"OctreeNode",BOUNDARYEDGEMANAGER:"BoundaryEdgeManager",AXISGRIDMANAGER:"AxisGridManager",EXTRUDEBODYMANAGER:"ExtrudeBodyManager",EXTRUDEBODYMANAGERTEST:"EXTRUDEBODYMANAGERTEST",EXTERNALCOMPONENTMANAGER:"ExternalComponentManager",BIMTILESGROUP:"BimTilesGroup",BIMTILESWIREFRAMEGROUP:"BimTilesWireframeGroup",TILEGROUP:"TileGroup",ROADNETWORK:"RoadNetworkGroup",GEOJSONGROUP:"GEOJSONGROUP",RECEIVESHADOWPLANE:"ReceiveShadowPlane",CONTACTSHADOW:"ContactShadow",VIEWSHED:"Viewshed",DEFAULTLIGHTS:"DefaultLights",EXTERNALSPOTLIGHTS:"ExternalSpotLights",EXTERNALDIRLIGHTS:"ExternalDirLights",LIGHTHELPER:"LightHelper",GLOBALEARTH:"GlobelEarth"};var t=new THREE.Box3;class i extends THREE.Scene{constructor(e){super();var t=r.Utils.defaultValue(e,{});this.gisMode=t.gisMode,this.type="Scene",this.autoUpdate=!1,this.objectGroups=new r.ObjectGroup,this.add(this.objectGroups),this.fog=new r.PostProcess(16777215),this.geometryGroup=new r.ObjectGroup(r.ObjectGroupType.GEOMETRY,{pickableType:r.PICKABLETYPE.Geometry,globalSpace:!0}),this.objectGroups.add(this.geometryGroup),this.pool=new r.ObjectPool(r.MeshEx,0),this.expandScalar=1.02,this.clipPlanes=null,this.fillClipPlane=null,this.boundaryEdge=null,this.extrudeBodyManager=null,this.externalComponentManager=null,this.customPlaneManager=null,this.axisGridManager=null,this.IBLMaps=new z.IBLMaps,this.transformMatrix=new THREE.Matrix4,this.lightManager=new r.LightManager(this),this.selectedMeshes=[],this.nonSelectedMeshes=[],this.selectedInstanceMeshes=[],this.nonSelectedInstanceMeshes=[],this.sunDirection=new THREE.Vector3(-1,1.6,1),this._planIntersect=new THREE.Vector3,this._renderedObjects=[]}changeToWorkSpaceScene(){for(var e=this.getObjectGroups(),t=0;t<e.length;t++){var i=e[t];i.preVisible=i.visible,i.visible=!0}const n=this.getObjectGroup(r.ObjectGroupType.GLOBALEARTH);void 0!==n&&(n.visible=!1)}destroy(){this.lightManager.destroy(),this.lightManager=null,this.clearAll(),this.pool.destroy(),this.pool=null,this.geometryGroup=null,this.objectGroups=null,this.clipPlanes=null,this.fillClipPlane=null,this.boundaryEdge=null,this.extrudeBodyManager=null,this.externalComponentManager=null,this.axisGridManager=null,this.IBLMaps=null,this.transformMatrix=null,this.selectedMeshes=null,this.nonSelectedMeshes=null,this.selectedInstanceMeshes=null,this.nonSelectedInstanceMeshes=null,this._renderedObjects=null}resizePool(e){r.GlobalData.BatchMergeEnabled||(this.geometryGroup.clear(),this.pool.resize(e,{parent:this.geometryGroup}))}clearAll(){this.pool.clear(),this.autoUpdate=!1}getRootNode(){return this.geometryGroup}hasBoundingBox(){return!!this.geometryGroup.boundingBox}getBoundingBox(){if(this.geometryGroup.boundingBox)return t.copy(this.geometryGroup.boundingBox),t.applyMatrix4(this.geometryGroup.matrix),t}getOriginalBoundingBoxWorld(){return this.originalBoundingBoxWorld}getBoundingBoxWorld(){return this.geometryGroup.boundingBox.clone()}getMatrixGlobal(){return this.geometryGroup.matrix.clone()}getRawMatrixGlobal(){return this.geometryGroup.matrix}getInverseMatrixGlobal(){return this.geometryGroup.inverseMatrixGlobal||(this.geometryGroup.inverseMatrixGlobal=new THREE.Matrix4),this.geometryGroup.inverseMatrixGlobal.copy(this.geometryGroup.matrix).invert(),this.geometryGroup.inverseMatrixGlobal}getGlobalScaleFactor(){return this.geometryGroup.matrix.elements[0]}getMatrixWorldGlobal(){return this.geometryGroup.matrixWorld}getRotationGlobal(){if(this.geometryGroup.matrix){var e=new THREE.Matrix4;e.extractRotation(this.geometryGroup.matrix);var t=new THREE.Euler;return t.setFromRotationMatrix(e),t}return null}getNearDepthByRect(e,i){var n=1/0,a=new THREE.Matrix4,s=new THREE.Vector3;function o(e){s.setFromMatrixPosition(e.matrixWorld),s.applyProjection(a);var t=s.z;t<n&&t>=0&&t<=1&&(n=t)}function l(e,i){if(i instanceof r.MeshEx){if(!function(e,i){if(!i.boundingBox||i instanceof THREE.Mesh){var r=i.geometry;null===r.boundingBox&&r.computeBoundingBox(),t.copy(r.boundingBox),t.applyMatrix4(i.matrixWorld)}else t.copy(i.boundingBox),t.applyMatrix4(i.matrixWorld);return e.intersectsBox(t)}(e,i))return;o(i)}else if(i.worldBoundingBox){if(!e.intersectsBox(i.worldBoundingBox))return;o(i)}var n=i.children;if(n)for(var a=0,s=n.length;a<s;a++){var d=n[a];d.visible&&l(e,d)}}a.multiplyMatrices(i.projectionMatrix,i.matrixWorldInverse);for(var d=this.geometryGroup.children,h=0,c=d.length;h<c;h++){var u=d[h];u.visible&&l(e,u)}return n}getExpandScalar(){return this.expandScalar}hasClipPlanes(){return null!=this.clipPlanes}hasFillClipPlanes(){return null!=this.fillClipPlane}shrinkScopeByClipPlane(e,t){if(this.clipPlanes&&this.clipPlanes.isEnabled()){var i=this.clipPlanes.hitTest(e);if(null==i.distance)return;i.sign?i.distance>t.near&&(t.near=i.distance):i.distance<t.far&&(t.far=i.distance)}}updateWorldMatrix(e,t,i){var r=new THREE.Matrix4;r.compose(e,t,i),this.updateWorldMatrixByMatrix(r)}updateWorldMatrixByMatrix(e){for(var t=this.objectGroups.children,i=0,r=t.length;i<r;i++)if(t[i].globalSpace){let r=t[i].transformMatrix||new THREE.Matrix4;t[i].matrix.copy(r),t[i].matrix.multiplyMatrices(e,t[i].matrix),t[i].matrixAutoUpdate=!1,t[i].updateMatrixWorld(!0)}}getShadowBoxWorld(){return this.lightManager.getShadowBoxWorld()}lightPreset(){this.lightManager.lightPreset()}updateLights(e,t){this.lightManager.updateLights(e)}updateCSMParameter(){this.lightManager.useCSM&&this.lightManager.csm&&this.lightManager.csm.updateCascades()}getOrCreateObjectGroup(e,t){for(var i=this.objectGroups.children,n=0,a=i.length;n<a;n++)if(i[n].name==e)return i[n];var s=new r.ObjectGroup(e,t);return s.isGlobalSpace()&&(s.matrix.copy(this.geometryGroup.matrix),s.matrixAutoUpdate=!1,s.updateMatrixWorld(!0)),this.objectGroups.add(s),s}getObjectGroup(e){for(var t=this.objectGroups.children,i=0,r=t.length;i<r;i++)if(t[i].name==e)return t[i];return null}getObjectGroupType(e){var t=e.split("|");return{groupType:t[0],databagId:t.length>1?t[1]:void 0}}getObjectGroups(){return this.objectGroups.children}removeObjectGroup(e){this.objectGroups.remove(e)}removeObjectGroupByName(e){this.objectGroups.removeByName(e)}hasObjectGroup(e){return this.objectGroups.hasChild(e)}intersectToWorld(e,t){const i=this.getRawMatrixGlobal();e.worldPosition=r.GeomUtil.getWorldPositionOfMesh(e.point,i);const n=e.fileId,a=t.getModelManager().getModel(n);a&&a.transformMatrix?a.transformMatrix:new THREE.Matrix4;let s={};s[e.userId]=!0;const o=t.getBoundingBoxByIds(s,n),l=t.drawingToWorld(o.min.clone()),d=t.drawingToWorld(o.max.clone()),h=new THREE.Vector3(l.x,l.y,l.z),c=new THREE.Vector3(d.x,d.y,d.z);e.worldBoundingBox=(new THREE.Box3).setFromPoints([h,c]),e.unit=t.getModelManager().getSceneUnit()}worldToDrawing(e){var t=this.getMatrixGlobal(),i=new THREE.Vector3(e.x,e.y,e.z);return i.applyMatrix4(t),i}drawingToWorld(t){var i=this.getMatrixGlobal();e.copy(i).invert();var r=new THREE.Vector3(t.x,t.y,t.z);return r.applyMatrix4(e),r}getBoundingBoxWorldByMesh(t){var i=this.getMatrixGlobal(),r=t.boundingBox;r||(t.geometry.boundingBox||t.geometry.computeBoundingBox(),r=t.geometry.boundingBox);var n=r.clone();return n.applyMatrix4(t.matrixWorld),e.copy(i).invert(),n.applyMatrix4(e),n}getObjectPool(){return this.pool}setBoundingBoxWorld(e){this.geometryGroup.boundingBox?this.geometryGroup.boundingBox.copy(e):this.geometryGroup.boundingBox=e,this.originalBoundingBoxWorld=e.clone()}updateBoundingBoxWorld(e){this.geometryGroup.boundingBox=this.geometryGroup.boundingBox||new THREE.Box3,this.originalBoundingBoxWorld=this.originalBoundingBoxWorld||new THREE.Box3,this.geometryGroup.boundingBox.expandByPoint(e.min),this.geometryGroup.boundingBox.expandByPoint(e.max),this.originalBoundingBoxWorld.expandByPoint(e.min),this.originalBoundingBoxWorld.expandByPoint(e.max)}setBoundingBoxWorldWithoutDEM(e){this.boundingBoxWorldWithoutDEM=this.boundingBoxWorldWithoutDEM||new THREE.Box3,this.boundingBoxWorldWithoutDEM.copy(e)}updateBoundingBoxWorldWithoutDEM(e){this.boundingBoxWorldWithoutDEM=this.boundingBoxWorldWithoutDEM||new THREE.Box3,this.boundingBoxWorldWithoutDEM.expandByPoint(e.min),this.boundingBoxWorldWithoutDEM.expandByPoint(e.max)}getBoundingBoxWithoutDEM(){if(this.boundingBoxWorldWithoutDEM)return t.copy(this.boundingBoxWorldWithoutDEM),t.applyMatrix4(this.geometryGroup.matrix),t}getBoundingBoxOfGeometries(e){for(var t=!e,i=new THREE.Box3,n=this.pool._pool,a=0,s=this.pool.counter;a<s;++a){var o=n[a];if(o.isVisible()){var l=o.geometry;if(l){if(t||void 0!==e[o.name]){l.boundingBox||l.computeBoundingBox();var d=l.boundingBox;if(d){var h=d.clone();o.matrixWorld&&h.applyMatrix4(o.matrixWorld),i.expandByPoint(h.min),i.expandByPoint(h.max)}}}else r.Logger.log("empty geometry!")}}return i}getTransformMatrixGlobal(){return this.transformMatrix}setTransformMatrixGlobal(e){this.transformMatrix.copy(e)}adjustInstanceVisibility(e){this.traverse((function(t){if((t instanceof THREE.Mesh||t instanceof THREE.LineSegments)&&t.geometry instanceof THREE.InstancedBufferGeometry){var i=t.visible;if(i==e)return;e&&!t.bVisible||(t.visible=e),t.bVisible=i}}))}adjustVisibility(e){this.traverse((function(t){if((t instanceof THREE.Mesh||t instanceof THREE.LineSegments)&&!(t.geometry instanceof THREE.InstancedBufferGeometry)){var i=t.visible;if(i==e)return;e&&!t.bVisible||(t.visible=e),t.bVisible=i}}))}changeVisibilityOfSelectedObjects(e){var t=this;e||(t.selectedMeshes.length=0,t.selectedInstanceMeshes.length=0);var i=t.selectedMeshes,n=t.selectedInstanceMeshes;this.traverse((function(a){(a instanceof THREE.Mesh||a instanceof THREE.LineSegments)&&(a.geometry instanceof THREE.InstancedBufferGeometry?e?function(e){for(var i=0,n=t.selectedInstanceMeshes.length;i<n;i++)if(e===t.selectedInstanceMeshes[i].object){for(var a=t.selectedInstanceMeshes[i].indices,s=e.geometry.getAttribute("vState").array,o=0,l=a.length;o<l;o++)s[a[o]]=r.EnumInstanceState.SELECTED;e.geometry.getAttribute("vState").needsUpdate=!0}}(a):function(e){if(e.visible){for(var t=[],i=e.geometry.getAttribute("vState").array,a=0;a<i.length;++a)i[a]===r.EnumInstanceState.SELECTED&&(t.push(a),i[a]=r.EnumInstanceState.HIDDEN);t.length&&(e.geometry.getAttribute("vState").needsUpdate=!0,n.push({object:e,indices:t}))}}(a):e?function(e){for(var i=0,r=t.selectedMeshes.length;i<r;i++)if(e===t.selectedMeshes[i].object)for(var n=t.selectedMeshes[i].indices,a=0,s=n.length;a<s;a++){var o=n[a],l=e.geometry.groups[o.idx];l.start=o.start,l.count=o.count}}(a):function(e){if(e._indicesGroup&&e.visible){var t=[],n=e.geometry.groups;if(n&&n.length){for(var a=0,s=n.length;a<s;a++){var o=n[a];o.materialIndex===r.Model.EnumFilterState.SELECTED&&(t.push({idx:a,start:o.start,count:o.count}),o.start=0,o.count=0)}t.length&&i.push({object:e,indices:t})}}}(a))}))}changeVisibilityOfNonSelectedObjects(e){var t=this;e||(t.nonSelectedMeshes.length=0,t.nonSelectedInstanceMeshes.length=0);var i=t.nonSelectedMeshes,n=t.nonSelectedInstanceMeshes;this.traverse((function(a){(a instanceof THREE.Mesh||a instanceof THREE.LineSegments)&&(a.geometry instanceof THREE.InstancedBufferGeometry?e?function(e){for(var i=0,r=t.nonSelectedInstanceMeshes.length;i<r;i++)if(e===t.nonSelectedInstanceMeshes[i].object){for(var n=t.nonSelectedInstanceMeshes[i].indices,a=e.geometry.getAttribute("vState").array,s=0,o=n.length;s<o;s++)a[n[s].idx]=n[s].state;e.geometry.getAttribute("vState").needsUpdate=!0}}(a):function(e){if(e.visible){for(var t=[],i=e.geometry.getAttribute("vState").array,a=0,s=i.length;a<s;++a)i[a]!==r.EnumInstanceState.SELECTED&&i[a]!==r.EnumInstanceState.HIDDEN&&(t.push({idx:a,state:i[a]}),i[a]=r.EnumInstanceState.HIDDEN);t.length&&(e.geometry.getAttribute("vState").needsUpdate=!0,n.push({object:e,indices:t}))}}(a):e?function(e){for(var i=0,r=t.nonSelectedMeshes.length;i<r;i++)if(e===t.nonSelectedMeshes[i].object){var n=t.nonSelectedMeshes[i].indices;if(null===n)e.visible=!0;else for(var a=0,s=n.length;a<s;a++){var o=n[a],l=e.geometry.groups[o.idx];l.start=o.start,l.count=o.count}}}(a):function(e){if(e._indicesGroup&&e.visible){var t=[],n=e.geometry.groups;if(n&&n.length){for(var a=0,s=n.length;a<s;a++){var o=n[a];o.materialIndex!==r.Model.EnumFilterState.SELECTED&&(t.push({idx:a,start:o.start,count:o.count}),o.start=0,o.count=0)}t.length?i.push({object:e,indices:t}):(e.visible=!1,i.push({object:e,indices:null}))}else e.visible=!1,i.push({object:e,indices:null})}}(a))}))}clearSelectedAndNonSelectedMeshes(){this.selectedMeshes.length=0,this.nonSelectedMeshes.length=0,this.selectedInstanceMeshes.length=0,this.nonSelectedInstanceMeshes.length=0}drawBoundingBox(e){if(e){var t=this.getOrCreateObjectGroup("BoundingBox",{pickable:0,priority:2}),i=this.getBoundingBox();void 0===this.boudingBoxNode?(this.boudingBoxNode=new r.BBoxNode(i,16711680),t.add(this.boudingBoxNode)):this.boudingBoxNode.updateBBox(i),this.boudingBoxNode.updateMatrixWorld(!0)}else this.removeObjectGroupByName("BoundingBox")}calculateGisMapBox(t){var i=this.getObjectGroup(r.GlobalData.TileGlobalGroupName)||this.getObjectGroup(r.GlobalData.TilePlaneGroupName),n=this.getBoundingBoxWorld(),a=n.clone();if(i){var s=t.position.clone(),o=this.getMatrixWorldGlobal();e.copy(o).invert(),s.applyMatrix4(e);var l=r.Tile.TileMath.earthRadius*r.Tile.TileMath.unitScale,d=s.z-n.min.z;d=Math.abs(d);var h=l*Math.acos(l/(l+d)),c=void 0!==i.altitudeOffset?i.altitudeOffset*r.Tile.TileMath.unitScale:void 0;a.min.x=s.x-h,a.max.x=s.x+h,a.min.y=s.y-h,a.max.y=s.y+h,a.min.z=void 0!==c&&c>0?Math.min(n.min.z,-c):n.min.z,a.max.z=void 0!==c&&c<0?Math.max(n.max.z,-c):n.max.z}return a}}r.Scene=i})(),(()=>{let e=new THREE.Vector3;r.Raycaster=function(e,t,i,r){this.ray=new THREE.Ray(e,t),this.near=i||0,this.far=r||1/0,this.params={Sprite:{},Mesh:{},Points:{threshold:1},LOD:{},Line:{threshold:1}}},r.Raycaster.prototype={constructor:r.Raycaster,precision:1e-4,linePrecision:1,descSort:function(e,t){return e.distance-t.distance},set:function(e,t){this.ray.set(e,t)},setFromCamera:function(e,t){t instanceof r.CombinedCamera?t.isPerspective?(this.ray.origin.copy(t.position),this.ray.direction.set(e.x,e.y,.5).unproject(t).sub(t.position).normalize()):(this.ray.origin.set(e.x,e.y,(t.near+t.far)/(t.near-t.far)).unproject(t),this.ray.direction.set(0,0,-1).transformDirection(t.matrixWorld)):t instanceof THREE.PerspectiveCamera?(this.ray.origin.copy(t.position),this.ray.direction.set(e.x,e.y,.5).unproject(t).sub(t.position).normalize()):t instanceof THREE.OrthographicCamera?(this.ray.origin.set(e.x,e.y,(t.near+t.far)/(t.near-t.far)).unproject(t),this.ray.direction.set(0,0,-1).transformDirection(t.matrixWorld)):console.error("CLOUD.Raycaster: Unsupported camera type.")},intersectOctantForNode:function(t,i){var r=this,n=new THREE.Box3;!function t(a){var s,o;if(n.set(a.min,a.max),r.ray.intersectBox(n,e)&&(i.push(a),a.childOctants))for(s=0,o=a.childOctants.length;s<o;s++)t(a.childOctants[s])}(t)}},THREE.Ray.prototype.intersectBoxWithDistance=function(t){var i,r,n,a,s,o,l=1/this.direction.x,d=1/this.direction.y,h=1/this.direction.z,c=this.origin;if(l>=0?(i=(t.min.x-c.x)*l,r=(t.max.x-c.x)*l):(i=(t.max.x-c.x)*l,r=(t.min.x-c.x)*l),d>=0?(n=(t.min.y-c.y)*d,a=(t.max.y-c.y)*d):(n=(t.max.y-c.y)*d,a=(t.min.y-c.y)*d),i>a||n>r)return-1;if((n>i||i!=i)&&(i=n),(a<r||r!=r)&&(r=a),h>=0?(s=(t.min.z-c.z)*h,o=(t.max.z-c.z)*h):(s=(t.max.z-c.z)*h,o=(t.min.z-c.z)*h),i>o||s>r)return-1;if((s>i||i!=i)&&(i=s),(o<r||r!=r)&&(r=o),r<0)return-1;if(i<0)return 0;var u=this.at(i>=0?i:r,e),p=u.x-c.x,m=u.y-c.y,f=u.z-c.z;return Math.sqrt(p*p+m*m+f*f)}})(),r.CapsuleObject=class{constructor(e,t){this.id=e,this.object=t}destroy(){this.object=null}_inDistanceRange(e,t){return e>=t.near&&e<=t.far}raycast(e,t,i,r,n){}},function(){class e extends r.CapsuleObject{constructor(e,t){super(e,t)}raycast(e,t,i,n,a,s,o){var l=[];if(this.object.raycast(e,l),l.length>0){l.sort((function(e,t){return e.distance-t.distance}));for(var d=0,h=l.length;d<h;d++){var c=l[d];const e=t.userId,h=c.point;if(!(o&&o[e]&&n.clipConditionPoint(h))&&(this._inDistanceRange(c.distance,i)&&!n.clipPoint(h))){s||(i.far=c.distance-r.Utils.MinusEpsilon),a.push(c);break}}}}intersectByBox(e,t,i){const r=this.object.geometry;if(!r.isBufferGeometry)return null;const n=r.index,a=r.attributes.position,s={indexStart:Math.max(0,r.drawRange.start),indexCount:Math.min(n?n.count:a.count,r.drawRange.count),positionStart:0,positionCount:3*a.count};return this.object.intersectByBox(e,t,s)}}class t extends r.CapsuleObject{constructor(e,t){super(e,t)}raycast(e,t,i,n,a){var s=this.object,o=[],l=s.geometry,d={indexStart:l.drawRange.start,indexCount:l.drawRange.count};if(s.raycastByIndices2(e,o,d,!1),o.length>0){o.sort((function(e,t){return e.distance-t.distance}));for(var h=0,c=o.length;h<c;h++){var u=o[h];if(this._inDistanceRange(u.distance,i)&&!n.clipPoint(u.point)){i.far=u.distance-r.Utils.MinusEpsilon,u.userId=t.userId,u.indexInfo=d,a.push(u);break}}}}intersectByBox(e,t,i){const r=this.object.geometry;if(!r.isBufferGeometry)return null;const n=r.attributes.position,a={indexStart:r.drawRange.start,indexCount:r.drawRange.count,positionStart:0,positionCount:3*n.count};return this.object.intersectByBox(e,t,a)}}r.SingleCapsuleObject=e,r.SingleCapsuleObjectWithDrawRange=t}(),function(){class e extends r.CapsuleObject{constructor(e,t){super(e,t)}_getIndexInfo(e){var t=this.object._indicesGroup;if(!t)return null;var i=t[e.userId];if(!i)return null;for(var r,n=!1,a=0,s=i.length;a<s;a++)if(i[a].nodeId===e.nodeId){r=i[a],n=!0;break}return n?r:null}raycast(e,t,i,n,a,s,o){var l=this.object;let d=this._getIndexInfo(t);if(d){var h=[];if(l.raycastByIndices(e,h,d),h.length>0){h.sort((function(e,t){return e.distance-t.distance}));for(var c=0,u=h.length;c<u;c++){var p=h[c];const e=d.userId,t=p.point;if(!(o&&o[e]&&n.clipConditionPoint(t))&&(this._inDistanceRange(p.distance,i)&&!n.clipPoint(t))){s||(i.far=p.distance-r.Utils.MinusEpsilon),p.userId=e,p.indexInfo=d,a.push(p);break}}}}}intersectByBox(e,t,i){var r=this.object;let n=this._getIndexInfo(i);return!!n&&r.intersectByBox(e,t,n)}}r.BatchedCapsuleObject=e}(),function(){class e extends r.CapsuleObject{constructor(e,t){super(e,t)}raycast(e,t,i,n,a,s,o){var l=[];if(this.object.raycastByIndices(e,l,null,t.matrix),l.length>0){l.sort((function(e,t){return e.distance-t.distance}));for(var d=0,h=l.length;d<h;d++){var c=l[d];const e=t.userId,h=c.point;if(!(o&&o[e]&&n.clipConditionPoint(h))&&(this._inDistanceRange(c.distance,i)&&!n.clipPoint(h))){s||(i.far=c.distance-r.Utils.MinusEpsilon),c.userId=t.userId,c.matrix=t.matrix,a.push(c);break}}}}intersectByBox(e,t,i){return this.object.intersectByBox(e,t,null,i.matrix)}}r.InstancedCapsuleObject=e}(),function(){class e extends THREE.Camera{constructor(e,t={}){super(),this.cameraType=e||r.CAMERATYPE.PERSPECTIVE,this.target=new THREE.Vector3,this.name=t.name||"",this.near=t.near||.1,this.far=t.far||2e3,this.fov=t.fov||45,this.cameraType===r.CAMERATYPE.PERSPECTIVE?(t.width&&t.height&&(this.aspect=t.width/t.height,this.left=-t.width/2,this.right=t.width/2,this.top=t.height/2,this.bottom=-t.height/2),this.perspectiveCamera=new r.CloudPerspectiveCamera(this.fov,this.aspect,this.near,this.far),this.orthoCamera=null,this.toPerspective()):(this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,void 0!==t.left&&void 0!==t.right&&void 0!==t.top&&void 0!==t.bottom&&(this.aspect=(this.right-this.left)/(this.top-this.bottom)),this.orthoCamera=new THREE.OrthographicCamera(this.left,this.right,this.top,this.bottom,this.near,this.far),this.perspectiveCamera=null,this.orthoCamera.updateProjectionMatrix(),this.projectionMatrix=this.orthoCamera.projectionMatrix,this.isPerspective=!1),this.zoom=t.zoom||1,this.updateProjectionMatrixByFrustum=!1}toPerspective(){null!==this.perspectiveCamera?this.updateProjectionMatrixByFrustum||(this.perspectiveCamera.aspect=this.aspect,this.perspectiveCamera.near=this.near,this.perspectiveCamera.far=this.far,this.perspectiveCamera.fov=this.fov,this.perspectiveCamera.updateProjectionMatrix(),this.projectionMatrix=this.perspectiveCamera.projectionMatrix,this.projectionMatrixInverse=this.perspectiveCamera.projectionMatrixInverse,this.isPerspective=!0,this.dirty=!0):console.log("Can not convert to perspective camera because the camera original type is orthographic.")}toOrthographic(){null===this.orthoCamera&&(this.orthoCamera=new THREE.OrthographicCamera(this.left,this.right,this.top,this.bottom,this.near,this.far));var e=this.fov,t=this.target.clone().sub(this.position).length(),i=Math.tan(e*Math.PI/180/2)*t,r=i*this.aspect;i/=this.zoom,r/=this.zoom,this.left=this.orthoCamera.left=-r,this.right=this.orthoCamera.right=r,this.top=this.orthoCamera.top=i,this.bottom=this.orthoCamera.bottom=-i,this.orthoCamera.near=this.near,this.orthoCamera.far=this.far,this.orthoCamera.updateProjectionMatrix(),this.projectionMatrix=this.orthoCamera.projectionMatrix,this.projectionMatrixInverse=this.orthoCamera.projectionMatrixInverse,this.isPerspective=!1,this.dirty=!0}setSize(e,t){this.left=-e/2,this.right=e/2,this.top=t/2,this.bottom=-t/2,this.aspect=e/t,this.dirty=!0}setSizeByFrustum(e,t){var i,r=2*this.right,n=2*this.top;this.aspect=r/n,r/n<e/t?(i=n/r,this.perspectiveCamera.setProjectOnWidth(!0)):(i=r/n,this.perspectiveCamera.setProjectOnWidth(!1)),this.dirty=!0,this.isPerspective&&(this.perspectiveCamera.aspect=i,this.perspectiveCamera.near=this.near,this.perspectiveCamera.far=this.far,this.perspectiveCamera.fov=this.fov,this.perspectiveCamera.updateProjectionMatrixByFrustum(e,t),this.projectionMatrix=this.perspectiveCamera.projectionMatrix,this.isPerspective=!0,this.dirty=!0)}setFov(e){this.fov=e,this.dirty=!0,this.updateProjectionMatrix()}setNearFar(e,t){this.near=e,this.far=t,this.dirty=!0,this.updateProjectionMatrix()}updateProjectionMatrix(){this.isPerspective?this.toPerspective():this.toOrthographic()}setLens(e,t){void 0===t&&(t=24);var i=2*THREE.Math.radToDeg(Math.atan(t/(2*e)));return this.setFov(i),this.dirty=!0,i}setZoom(e){this.zoom=e,this.dirty=!0,this.updateProjectionMatrix()}copy(e){return super.copy(e),this.cameraType=e.cameraType,this.target.copy(e.target),this.aspect=e.aspect,this.fov=e.fov,this.near=e.near,this.far=e.far,this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.zoom=e.zoom,this.isPerspective=e.isPerspective,this.updateProjectionMatrixByFrustum=e.updateProjectionMatrixByFrustum,this.orthoCamera&&e.orthoCamera&&this.orthoCamera.copy(e.orthoCamera),this.perspectiveCamera&&e.perspectiveCamera&&this.perspectiveCamera.copy(e.perspectiveCamera),this}clone(){return new this.constructor(this.cameraType).copy(this)}isDirty(){return this.dirty}}r.CombinedCamera=e}();class R extends THREE.PerspectiveCamera{constructor(e,t,i,r){super(e,t,i,r),this.projectOnWidth=!1}updateProjectionMatrixByFrustum(e,t){var i,r,n,a,s=this.near;this.projectOnWidth?(r=-.5*(n=e),i=.5*(a=this.aspect*n)):(i=.5*(a=t),r=-.5*(n=this.aspect*a));var o=this.view;if(null!==o){var l=o.fullWidth,d=o.fullHeight;r+=o.offsetX*n/l,i-=o.offsetY*a/d,n*=o.width/l,a*=o.height/d}var h=this.filmOffset;0!==h&&(r+=s*h/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+n,i,i-a,s,this.far)}setProjectOnWidth(e){this.projectOnWidth=e}}r.CloudPerspectiveCamera=R,(()=>{class e extends r.CombinedCamera{constructor(e,t){super(e,t),this.realUp=this.up.clone(),this.dirty=!1,this.orthoScale=1,this.positionPlane=new THREE.Plane,this.projScreenMatrix=new THREE.Matrix4,this.viewProjInverse=new THREE.Matrix4,this.frustum=new THREE.Frustum,this.frustumHeightFactor=this.computeFrustumHeightFactor(),this.minimumElevation=null,this._statusInitialized=!1,this._direction=null,this.statusChange=!1,this._inverseMatrix=new THREE.Matrix4,this.scratchVector=new THREE.Vector3,this.scratchVector_2=new THREE.Vector3,this.scratchVector_3=new THREE.Vector3}get statusInitialized(){return this._statusInitialized}direction(e){return this._direction||(this._direction=new THREE.Vector3),this._direction.subVectors(this.target,this.position),r.Utils.isDefined(e)||(e=new THREE.Vector3),e.copy(this._direction)}_updatePositionPlane(){this.positionPlane.setFromNormalAndCoplanarPoint(this.getWorldDirection(this.scratchVector),this.position)}_updateFrustum(){this.frustum.setFromProjectionMatrix(this.projScreenMatrix)}updateMVP(){this.dirty&&(this._statusInitialized||(this._statusInitialized=!0),null===this.parent&&this.updateMatrixWorld(),this.matrixWorldInverse.copy(this.matrixWorld).invert(),this.projScreenMatrix.multiplyMatrices(this.projectionMatrix,this.matrixWorldInverse),this.viewProjInverse.copy(this.projScreenMatrix).invert(),this._updateFrustum(),this._updatePositionPlane(),this.frustumHeightFactor=this.computeFrustumHeightFactor())}computeFrustumHeightFactor(){return 2*Math.tan(.5*THREE.Math.degToRad(this.fov))}getFrustum(){return this.dirty&&this.updateMVP(),this.frustum}LookAt(e,t,i,r){let n=new THREE.Vector3;n.copy(t),void 0!==r&&n.setLength(r),this.position.subVectors(e,n),this.up=i,this.lookAt(e),this.realUp=i.clone(),this.target=e.clone(),this.dirty=!0}copy(e){return super.copy(e),this.realUp.copy(e.realUp),this.orthoScale=e.orthoScale,this.dirty=e.dirty,this.positionPlane.copy(e.positionPlane),this.projScreenMatrix.copy(e.projScreenMatrix),this.viewProjInverse.copy(e.viewProjInverse),this.frustum.copy(e.frustum),this}setStandardView(e,t){var i;i=t?t.getCenter(this.scratchVector):new THREE.Vector3(0,0,0);var n=r.GlobalData.SceneSize,a=n/2;switch(e){case r.EnumStandardView.ISO:var s=new THREE.Vector3(-n,n,n),o=new THREE.Vector3,l=new THREE.Vector3(0,0,0);o.subVectors(l,s),this.LookAt(i,o,THREE.Object3D.DefaultUp);break;case r.EnumStandardView.Top:this.LookAt(i,new THREE.Vector3(0,-1,0),new THREE.Vector3(0,0,-1),a);break;case r.EnumStandardView.Bottom:this.LookAt(i,new THREE.Vector3(0,1,0),new THREE.Vector3(0,0,1),a);break;case r.EnumStandardView.Front:this.LookAt(i,new THREE.Vector3(0,0,-1),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.Back:this.LookAt(i,new THREE.Vector3(0,0,1),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.Right:this.LookAt(i,new THREE.Vector3(-1,0,0),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.Left:this.LookAt(i,new THREE.Vector3(1,0,0),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.SouthEast:this.LookAt(i,new THREE.Vector3(-1,0,-1),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.SouthWest:this.LookAt(i,new THREE.Vector3(1,0,-1),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.NorthWest:this.LookAt(i,new THREE.Vector3(1,0,1),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.NorthEast:this.LookAt(i,new THREE.Vector3(-1,0,1),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.BottomFront:this.LookAt(i,new THREE.Vector3(0,1,-1),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.BottomBack:this.LookAt(i,new THREE.Vector3(0,1,1),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.BottomRight:this.LookAt(i,new THREE.Vector3(-1,1,0),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.BottomLeft:this.LookAt(i,new THREE.Vector3(1,1,0),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.BottomSouthEast:this.LookAt(i,new THREE.Vector3(-1,1,-1),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.BottomSouthWest:this.LookAt(i,new THREE.Vector3(1,1,-1),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.BottomNorthWest:this.LookAt(i,new THREE.Vector3(1,1,1),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.BottomNorthEast:this.LookAt(i,new THREE.Vector3(-1,1,1),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.RoofFront:this.LookAt(i,new THREE.Vector3(0,-1,-1),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.RoofBack:this.LookAt(i,new THREE.Vector3(0,-1,1),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.RoofRight:this.LookAt(i,new THREE.Vector3(-1,-1,0),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.RoofLeft:this.LookAt(i,new THREE.Vector3(1,-1,0),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.RoofSouthEast:this.LookAt(i,new THREE.Vector3(-1,-1,-1),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.RoofSouthWest:this.LookAt(i,new THREE.Vector3(1,-1,-1),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.RoofNorthWest:this.LookAt(i,new THREE.Vector3(1,-1,1),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.RoofNorthEast:this.LookAt(i,new THREE.Vector3(-1,-1,1),new THREE.Vector3(0,1,0),a);break;case r.EnumStandardView.TopTurnRight:this.LookAt(i,new THREE.Vector3(0,-1,0),new THREE.Vector3(-1,0,0),a);break;case r.EnumStandardView.TopTurnBack:this.LookAt(i,new THREE.Vector3(0,-1,0),new THREE.Vector3(0,0,1),a);break;case r.EnumStandardView.TopTurnLeft:this.LookAt(i,new THREE.Vector3(0,-1,0),new THREE.Vector3(1,0,0),a);break;case r.EnumStandardView.BottomTurnRight:this.LookAt(i,new THREE.Vector3(0,1,0),new THREE.Vector3(-1,0,0),a);break;case r.EnumStandardView.BottomTurnBack:this.LookAt(i,new THREE.Vector3(0,1,0),new THREE.Vector3(0,0,-1),a);break;case r.EnumStandardView.BottomTurnLeft:this.LookAt(i,new THREE.Vector3(0,1,0),new THREE.Vector3(1,0,0),a);break;case r.EnumStandardView.FrontTurnTop:this.LookAt(i,new THREE.Vector3(0,0,-1),new THREE.Vector3(0,-1,0),a);break;case r.EnumStandardView.FrontTurnLeft:this.LookAt(i,new THREE.Vector3(0,0,-1),new THREE.Vector3(1,0,0),a);break;case r.EnumStandardView.FrontTurnRight:this.LookAt(i,new THREE.Vector3(0,0,-1),new THREE.Vector3(-1,0,0),a);break;case r.EnumStandardView.RightTurnTop:this.LookAt(i,new THREE.Vector3(-1,0,0),new THREE.Vector3(0,-1,0),a);break;case r.EnumStandardView.RightTurnFront:this.LookAt(i,new THREE.Vector3(-1,0,0),new THREE.Vector3(0,0,-1),a);break;case r.EnumStandardView.RightTurnBack:this.LookAt(i,new THREE.Vector3(-1,0,0),new THREE.Vector3(0,0,1),a);break;case r.EnumStandardView.BackTurnTop:this.LookAt(i,new THREE.Vector3(0,0,1),new THREE.Vector3(0,-1,0),a);break;case r.EnumStandardView.BackTurnLeft:this.LookAt(i,new THREE.Vector3(0,0,1),new THREE.Vector3(-1,0,0),a);break;case r.EnumStandardView.BackTurnRight:this.LookAt(i,new THREE.Vector3(0,0,1),new THREE.Vector3(1,0,0),a);break;case r.EnumStandardView.LeftTurnTop:this.LookAt(i,new THREE.Vector3(1,0,0),new THREE.Vector3(0,-1,0),a);break;case r.EnumStandardView.LeftTurnBack:this.LookAt(i,new THREE.Vector3(1,0,0),new THREE.Vector3(0,0,1),a);break;case r.EnumStandardView.LeftTurnFront:this.LookAt(i,new THREE.Vector3(1,0,0),new THREE.Vector3(0,0,-1),a)}return this.updateProjectionMatrix(),i}zoomToBBox(e,t,i,r){i=i||1,t=(t=t||0)<-1?-1:t;var n=new THREE.Box3;if(n.copy(e),0!==t){var a=.5*e.getSize(this.scratchVector).length(),s=new THREE.Vector3;s.subVectors(n.max,n.min).normalize(),s.multiplyScalar(a*t),n.expandByVector(s)}var o=r||this.getWorldDirection(this.scratchVector),l=this.up,d=this.aspect,h=THREE.Math.degToRad(.5*this.fov),c=n.getSize(this.scratchVector_2),u=n.getCenter(this.scratchVector_3),p=.5*c.length()/Math.sin(h)*i,m=new THREE.Vector3;m.copy(o),m.setLength(p);var f=new THREE.Vector3;f.subVectors(u,m);var g=new THREE.Vector3;g.crossVectors(o,l),g.normalize();var v=new THREE.Vector3;v.crossVectors(o,g),v.normalize();var y=new THREE.Plane;y.setFromNormalAndCoplanarPoint(g,f);var M=new THREE.Plane;M.setFromNormalAndCoplanarPoint(v,f);var E=0,b=0,x=0,I=0,T=0,C=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];C[0].set(n.min.x,n.min.y,n.min.z),C[1].set(n.min.x,n.min.y,n.max.z),C[2].set(n.min.x,n.max.y,n.min.z),C[3].set(n.min.x,n.max.y,n.max.z),C[4].set(n.max.x,n.min.y,n.min.z),C[5].set(n.max.x,n.min.y,n.max.z),C[6].set(n.max.x,n.max.y,n.min.z),C[7].set(n.max.x,n.max.y,n.max.z);for(var w=0;w<8;w++){var S=new THREE.Vector3;S.subVectors(C[w],f);var A=Math.abs(S.dot(o)),B=Math.abs(M.distanceToPoint(C[w])),R=B*d,D=Math.abs(y.distanceToPoint(C[w])),O=D/d,L=Math.max(B,O),P=Math.max(R,D);E<L&&(E=L),(!b||!x||L>b*A/x)&&(b=L,x=A),(!I||!T||P>I*A/T)&&(I=P,T=A)}var N,H=I/Math.tan(h)+(p-T),F=b/Math.tan(h)+(p-x);if((N=d<1?Math.max(H,F):Math.min(H,F))<this.near){this.near=(N*N+.001*N)/16777.216}if(m.copy(o).normalize().setLength(N),f.subVectors(u,m),this.position.copy(f),this.lookAt(u),this.target.copy(u),!this.isPerspective){var k=Math.tan(this.fov*Math.PI/180/2)*N;this.orthoScale=k/E,this.zoom=this.orthoScale}return this.updateProjectionMatrix(),this.dirty=!0,u}calculateNearFar(e,t){const i=e,r=[new THREE.Vector3(i.min.x,i.min.y,i.min.z),new THREE.Vector3(i.min.x,i.min.y,i.max.z),new THREE.Vector3(i.min.x,i.max.y,i.min.z),new THREE.Vector3(i.min.x,i.max.y,i.max.z),new THREE.Vector3(i.max.x,i.min.y,i.min.z),new THREE.Vector3(i.max.x,i.min.y,i.max.z),new THREE.Vector3(i.max.x,i.max.y,i.min.z),new THREE.Vector3(i.max.x,i.max.y,i.max.z)],n=this.getWorldDirection(this.scratchVector),a=(new THREE.Plane).setFromNormalAndCoplanarPoint(n,this.position);let s=-1/0,o=1/0;r.forEach((e=>{const t=a.distanceToPoint(e);o>t-10&&(o=t-10),s<t+10&&(s=t+10)}));let l=o>0?o:.1,d=s>0?s:2e3;this.isPerspective?void 0!==t&&(l=t):l=-d,this.setNearFar(l,d)}calculateNearFar2(e,t,i){const r=e,n=r.getCenter(this.scratchVector),a=this.position.clone().sub(n).length(),s=r.getSize(this.scratchVector_2).length();let o,l;if(t){const e=.5*s;if(l=a+e,this.isPerspective){const t=.001;o=(a*a+a*t)/((1<<24)*t),a<e||i?o=.1:o+e>a&&(o=a-e)}else o=-l}else l=a,o=this.isPerspective?.1:-l;this.setNearFar(o,l)}computeRay(e,t,i){var r=new THREE.Vector2;if(void 0===i)r.x=window.innerWidth,r.y=window.innerHeight;else{var n=i===document?i.body:i;r.x=n.offsetWidth,r.y=n.offsetHeight}var a=new THREE.Vector2;a.x=e/r.x*2-1,a.y=-t/r.y*2+1;var s=new THREE.Ray;return this.isPerspective?(s.origin.copy(this.position),s.direction.set(a.x,a.y,.5).unproject(this).sub(this.position).normalize()):(s.origin.set(a.x,a.y,-1).unproject(this),s.direction.set(0,0,-1).transformDirection(this.matrixWorld)),s}screenToWorld(e,t,i,r){var n=this.computeRay(e,t,i),a=this.getWorldDirection(this.scratchVector).normalize(),s=new THREE.Plane(a);return s.setFromNormalAndCoplanarPoint(a,r),n.intersectPlane(s,r)}getWorldFrustum(e){var t=new THREE.Frustum,i=this.clone(),r=this.target,n=r.clone().sub(this.position).length();this._inverseMatrix.copy(e).invert();var a=new THREE.Matrix4;a.extractRotation(e);var s=new THREE.Quaternion;s.setFromRotationMatrix(a),s.inverse(),i.position.applyMatrix4(this._inverseMatrix);var o=r.clone();o.applyMatrix4(this._inverseMatrix);var l=o.clone().sub(i.position),d=l.length();l.normalize();var h=d/n;return i.far=camera.far*h,i.up.applyQuaternion(s).normalize(),i.realUp.applyQuaternion(s).normalize(),i.updateProjectionMatrix(),i.updateMatrixWorld(),this._inverseMatrix.copy(i.matrixWorld).invert(),t.setFromProjectionMatrix((new THREE.Matrix4).multiplyMatrices(i.projectionMatrix,this._inverseMatrix)),i=null,t}distanceFromWorldToDrawing(e,t){var i=this.position.clone(),r=this.target.clone();return r.subVectors(this.target,this.position),r.normalize(),this._inverseMatrix.copy(e).invert(),r.add(i).applyMatrix4(this._inverseMatrix),i.applyMatrix4(this._inverseMatrix),r.sub(i),r.normalize().multiplyScalar(t),r.add(i).applyMatrix4(e),r.sub(this.position),r.length()}getPositionByDis(e,t,i,r){var n=i||this.position,a=r||this.target;n=n.clone(),a=a.clone(),this._inverseMatrix.copy(t).invert(),n.applyMatrix4(this._inverseMatrix),a.applyMatrix4(this._inverseMatrix);var s=e/n.distanceTo(a),o=new THREE.Vector3;return o.subVectors(n,a),o.multiplyScalar(s),o.subVectors(n,o),o}getDistanceByPos(e,t){var i=this.position.clone();return this._inverseMatrix.copy(t).invert(),i.applyMatrix4(this._inverseMatrix),i.distanceTo(e)}static nearFarDrawingToWorld(e,t){let i=e.position.clone(),r=e.target.clone().sub(i);r.normalize();let n=new THREE.Matrix4;n.copy(t).invert();let a=(e,t,i,r)=>{let n=i.clone().multiplyScalar(e);n.add(t).applyMatrix4(r);let a=t.clone().applyMatrix4(r);n.sub(a);return e>0?n.length():-n.length()};return e.near&&e.far&&(e.near=a(e.near,i,r,n),e.far=a(e.far,i,r,n)),e.left&&e.right&&e.top&&e.bottom&&(e.left=a(e.left,i,r,n),e.right=a(e.right,i,r,n),e.top=a(e.top,i,r,n),e.bottom=a(e.bottom,i,r,n)),e}static drawingToWorld(e,t){let i=e.position.clone(),r=e.target.clone(),n=e.up.clone(),a=new THREE.Matrix4;return a.copy(t).invert(),n.add(i),n.applyMatrix4(a),i.applyMatrix4(a),r.applyMatrix4(a),n.sub(i),n.normalize(),{position:i,target:r,up:n}}static worldToDrawing(e,t){var i=e.position.clone(),r=e.target.clone(),n=e.up.clone();return n.add(i),n.applyMatrix4(t),i.applyMatrix4(t),r.applyMatrix4(t),n.sub(i),n.normalize(),{position:i,target:r,up:n}}}r.Camera=e})(),r.Animation=function(){var e=this,t=null,i={},r={},n=1e3,a=null,s=null,o=null,l=!1,d=null,h=null,c=null;this.from=function(e){for(var r in t=e)i[r]=t[r];return this},this.to=function(e,t){return void 0!==t&&(n=t),r=e,this},this.onStart=function(e){return d=e,this},this.onUpdate=function(e){return h=e,this},this.onComplete=function(e){return c=e,this},this.start=function(e){l=!1,s&&cancelAnimationFrame(s),a=Date.now(),o=this.interpolate,s=requestAnimationFrame((function u(){var p,m=i,f=r,g=Date.now();!1===l&&(null!==d&&d.call(t),l=!0),t=o(m,f,p=(p=(g-a)/n)>1?1:p),1===p?(cancelAnimationFrame(s),null!==c&&c.call(t)):(requestAnimationFrame(u,e),null!==h&&h.call(t,p))}),e)},this.isAngleGreaterThanPi=function(e,t,i){var r=new THREE.Vector3;return r.crossVectors(e,t),!(r.dot(i)>=0)},this.conicInterpolate=function(e,t,i,r){var n=-t.angleTo(e)*r,a=new THREE.Vector3;a.crossVectors(t,e).normalize();var s=new THREE.Quaternion;s.setFromAxisAngle(a,n),i.copy(e),i.applyQuaternion(s)},this.quaternionInterpolate=function(e,t,i,r,n){var a=new THREE.Quaternion(e.x,e.y,e.z,1).normalize(),s=new THREE.Quaternion(t.x,t.y,t.z,1).normalize(),o=new THREE.Quaternion(0,0,0,1),l=new THREE.Quaternion(0,0,0,1),d=new THREE.Vector3;d.crossVectors(e,i).normalize(),o.set(d.x,d.y,d.z,1).normalize();var h=0;n<.5?(h=2*n,THREE.Quaternion.slerp(a,o,l,h),r.set(l.x,l.y,l.z)):(h=2*(n-.5),THREE.Quaternion.slerp(o,s,l,h),r.set(l.x,l.y,l.z))},this.slerpInterpolate=function(e,t,i,r,n,a){var s=e.dot(t);a<s?r.copy(t):a<Math.abs(s)?this.quaternionInterpolate(e,t,i,r,n):this.conicInterpolate(e,t,r,n),r.normalize()},this.linearInterpolate=function(e,t,i,r,n){if(e.equals(t))i.copy(t);else{var a=new THREE.Vector3(1,0,0),s=new THREE.Vector3(0,0,1),o=new THREE.Vector3,l=0,d=e.dot(t);n<d?i.copy(t):n<-d?(n>Math.abs(e.dot(s))?o.crossVectors(e,s).normalize():o.crossVectors(e,a).normalize(),r<.5?(l=2*r,i.lerpVectors(e,o,l)):(l=2*(r-.5),i.lerpVectors(o,t,l))):i.lerpVectors(e,t,r),i.normalize()}},this.linearInterpolatePosition=function(e,t,i,r){i.lerpVectors(e,t,r)},this.sphericalInterpolate=function(e,t,i,r,n,a){var s=e.clone().sub(t),o=i.clone().sub(r),l=new THREE.Spherical;l.setFromVector3(s);var d=new THREE.Spherical;d.setFromVector3(o);let h=d.theta-l.theta;Math.abs(h)>Math.PI&&(h=h>0?-(2*Math.PI-Math.abs(h)):2*Math.PI-Math.abs(h));var c=l.theta+h*a,u=l.phi+(d.phi-l.phi)*a,p=s.length(),m=new THREE.Spherical;m.set(p,u,c);var f=new THREE.Vector3;f.setFromSpherical(m),n.copy(f).multiplyScalar(-1)},this.interpolate=function(t,i,r){var n=new THREE.Vector3,a=new THREE.Vector3,s=new THREE.Vector3,o=new THREE.Vector3,l=new THREE.Vector3,d=t.animPos,h=t.animTarget,c=(t.animDir,t.animUp),u=t.animFocal,p=t.zoom,m=i.animPos,f=i.animTarget,g=(i.animDir,i.animUp),v=i.animFocal,y=i.zoom;return e.sphericalInterpolate(d,h,m,f,n,r),e.linearInterpolate(c,g,a,r,.9995),e.linearInterpolatePosition(h,f,s,r),e.linearInterpolatePosition(u,v,o,r),e.linearInterpolatePosition(p,y,l,r),{animDir:n,animUp:a,animTarget:s,animFocal:o,zoomScale:l}}},(()=>{let e=new THREE.Vector3,t=new THREE.Vector3;r.CameraAnimator=class{constructor(){this._duration=500,this._frameTime=13,this._animation=new r.Animation}setDuration(e){this._duration=e}getDuration(){return this._duration}setFrameTime(e){this._frameTime=e}setStandardView(i,n,a,s,o,l){var d=n.camera,h=d.position.clone(),c=d.target.clone(),u=d.getWorldDirection(e);u.normalize();var p=new THREE.Vector3;p.copy(d.realUp||d.up),p.normalize();var m=new THREE.Vector3(d.position.clone().sub(c).length(),0,0);const f=n.camera.clone();f.setStandardView(i,a);let g=f.zoomToBBox(a,s);var v=f.position.clone(),y=f.getWorldDirection(t);y.normalize();var M=new THREE.Vector3;M.copy(f.realUp||f.up),M.normalize();var E=new THREE.Vector3(f.position.clone().sub(g).length(),0,0);n.getEditorManager().setInteractiveState(!1),this._animation.from({animPos:h,animDir:u,animUp:p,animTarget:c,animFocal:m,zoom:1}).to({animPos:v,animDir:y,animUp:M,animTarget:g,animFocal:E,zoom:1},this._duration).onUpdate((function(){if(n.camera){var e=this.animTarget,t=this.animDir,i=this.animUp,a=this.animFocal.x;n.camera.LookAt(e,t,i,a),n.cameraControl.update(!0,!0),n.modelManager.dispatchEvent({type:r.EVENTS.ON_CAMERA_ANIMATION_UPDATE}),o&&o()}})).onComplete((function(){n.camera&&(n.camera.LookAt(g,y,M,E.x),n.cameraControl.update(!0,!0),l&&l(),n.getEditorManager().setInteractiveState(!0))})).start(this._frameTime)}active(e,t,i,n,a){var s=i.camera,o=new THREE.Vector3(e.position.x,e.position.y,e.position.z),l=new THREE.Vector3(e.target.x,e.target.y,e.target.z),d=new THREE.Vector3(l.distanceTo(o),0,0),h=l.clone().sub(o).normalize(),c=new THREE.Vector3(e.up.x,e.up.y,e.up.z);c.normalize();var u=new THREE.Vector3(e.zoom),p=new THREE.Vector3(t.position.x,t.position.y,t.position.z),m=new THREE.Vector3(t.target.x,t.target.y,t.target.z),f=new THREE.Vector3(m.distanceTo(p),0,0),g=m.clone().sub(p).normalize(),v=new THREE.Vector3(t.up.x,t.up.y,t.up.z);v.normalize();var y=new THREE.Vector3(t.zoom,0,0);if(0==function(){let e=.01,t=p.clone().sub(o).length()<e,i=g.clone().sub(h).length()<e,r=v.clone().sub(c).length()<e;return!(t&&i&&r)}())return console.log("Current camera status is equal with before."),void(a&&a());i.getEditorManager().setInteractiveState(!1),this._animation.from({animPos:o,animDir:h,animUp:c,animTarget:l,animFocal:d,zoom:u}).to({animPos:p,animDir:g,animUp:v,animTarget:m,animFocal:f,zoom:y},this._duration).onUpdate((function(){var e=this.animTarget,t=this.animDir,a=this.animUp,o=this.animFocal.x,l=this.zoomScale.x;s.setZoom(l),s.LookAt(e,t,a,o),i.modelManager.dispatchEvent({type:r.EVENTS.ON_CAMERA_ANIMATION_UPDATE}),n&&n(e)})).onComplete((function(){s.setZoom(y.x),s.LookAt(m,g,v,f.x),n&&n(m),a&&a(),i.getEditorManager().setInteractiveState(!0)})).start(this._frameTime)}}})(),(()=>{let e=new THREE.Vector3,t=new THREE.Vector3,i=new THREE.Matrix4;r.CameraInfo=function(e,t,i,r,n,a,s,o,l,d){this.name=e,this.position=t,this.target=i,this.up=r,this.near=n,this.far=a,this.zoom=s,this.frustumWidth=l,this.frustumHeight=d,this.version=void 0===o?1:o},r.PerspectiveCameraInfo=function(e,t,i,n,a,s,o,l,d,h,c){r.CameraInfo.call(this,"persp",e,t,i,s,o,l,d,h,c),this.fov=n,this.aspect=a},r.OrthographicCameraInfo=function(e,t,i,n,a,s,o,l,d,h,c,u,p){r.CameraInfo.call(this,"orth",e,t,i,l,d,h,c,u,p),this.left=n,this.right=a,this.top=s,this.bottom=o},r.CameraUtil={createCameraInfo:function(e){var t=e.camera,i=new CameraInfo(e.getCameraName(),t.position,t.target,t.up);return JSON.stringify(i)},transformCamera:function(e,t){var i=new THREE.Vector3,n=function(e){return[parseFloat(e[0]),parseFloat(e[1]),parseFloat(e[2])]};i.fromArray(n(e.position.split(",")));var a=new THREE.Vector3;a.fromArray(n(e.direction.split(",")));var s=new THREE.Vector3;s.fromArray(n(e.up.split(",")));var o=new THREE.Vector3;o.addVectors(i,a),i.applyMatrix4(t.rootNode.matrix),o.applyMatrix4(t.rootNode.matrix);var l=new THREE.Matrix4;return l.makeRotationFromEuler(t.rootNode.rotation),s.applyMatrix4(l),s.normalize(),new r.CameraInfo(e.name,i,o,s)},parseCameraInfo:function(e){if(!e)return null;var t=JSON.parse(e);if(!t.hasOwnProperty("position")||!t.hasOwnProperty("target")||!t.hasOwnProperty("up"))return null;var i=t.name||"persp",n=new THREE.Vector3;n.x=t.position.x,n.y=t.position.y,n.z=t.position.z;var a=new THREE.Vector3;a.x=t.target.x,a.y=t.target.y,a.z=t.target.z;var s=new THREE.Vector3;s.x=t.up.x,s.y=t.up.y,s.z=t.up.z;var o=void 0===t.version?0:t.version,l=t.frustumWidth,d=t.frustumHeight;return"persp"===i?new r.PerspectiveCameraInfo(n,a,s,t.fov,t.aspect,t.near,t.far,t.zoom,o,l,d):new r.OrthographicCameraInfo(n,a,s,t.left,t.right,t.top,t.bottom,t.near,t.far,t.zoom,o,l,d)},canvasToNormalized:function(e,t,i){var r={x:0,y:0,z:0};return r.x=e.x/t*2-1,r.y=-e.y/i*2+1,r.z=e.z||0,r},normalizedToCanvas:function(e,t,i){var r={x:0,y:0,z:0};return r.x=Math.floor(.5*(e.x+1)*t+.5),r.y=Math.floor(-.5*(e.y-1)*i+.5),r.z=e.z||0,r},drawingToCanvas:function(e,t,i,r){var n=new THREE.Vector3(t.x,t.y,t.z);return n.project(e),this.normalizedToCanvas(n,i,r)},drawingPointsToCanvas:function(e,t,r,n,a){var s={};i.copy(e.matrixWorld).invert();var o=new THREE.Vector3(t.x,t.y,t.z);o.applyMatrix4(i);var l=new THREE.Vector3(r.x,r.y,r.z);if(l.applyMatrix4(i),o.z>0&&l.z>0)return null;var d=o.clone().sub(l);if(d.normalize(),o.z>0){var h=(o.z+e.near)/d.z;o.sub(d.multiplyScalar(h))}else if(l.z>0){h=(l.z+e.near)/d.z;l.sub(d.multiplyScalar(h))}return o.applyMatrix4(e.projectionMatrix),l.applyMatrix4(e.projectionMatrix),s.start=this.normalizedToCanvas(o,n,a),s.end=this.normalizedToCanvas(l,n,a),s},lineIntersectWithRect:function(e,t){if(e&&e.start.x==e.end.x&&e.start.y==e.end.y)return console.log("Invalid line."),null;var i,r=0;e.start.x!=e.end.x&&(r=(e.start.y-e.end.y)/(e.start.x-e.end.x)),i=e.start.y-r*e.start.x;var n=[],a=t.min,s=t.max;return r*a.x+i>=a.y&&r*a.x+i<=s.y&&n.push(new THREE.Vector2(a.x,r*a.x+i)),r*s.x+i>=a.y&&r*s.x+i<=s.y&&n.push(new THREE.Vector2(s.x,r*s.x+i)),0==r&&(n.push(new THREE.Vector2(a.x,i)),n.push(new THREE.Vector2(s.x,i))),(a.y-i)/r>a.x&&(a.y-i)/r<s.x&&n.push(new THREE.Vector2((a.y-i)/r,a.y)),(s.y-i)/r>a.x&&(s.y-i)/r<s.x&&n.push(new THREE.Vector2((s.y-i)/r,s.y)),n},canvasToDrawing:function(e,t,i,r){var n=this.canvasToNormalized(t,i,r),a=new THREE.Vector3(n.x,n.y,n.z);return a.unproject(e),{x:a.x,y:a.y,z:a.z}},intersectBoxByRay:function(e,t){var i,r,n,a,s,o,l=1/e.direction.x,d=1/e.direction.y,h=1/e.direction.z,c=e.origin;return l>=0?(i=(t.min.x-c.x)*l,r=(t.max.x-c.x)*l):(i=(t.max.x-c.x)*l,r=(t.min.x-c.x)*l),d>=0?(n=(t.min.y-c.y)*d,a=(t.max.y-c.y)*d):(n=(t.max.y-c.y)*d,a=(t.min.y-c.y)*d),i>a||n>r?null:((n>i||i!=i)&&(i=n),(a<r||r!=r)&&(r=a),h>=0?(s=(t.min.z-c.z)*h,o=(t.max.z-c.z)*h):(s=(t.max.z-c.z)*h,o=(t.min.z-c.z)*h),i>o||s>r?null:((s>i||i!=i)&&(i=s),(o<r||r!=r)&&(r=o),r<0?null:i>=0?i:r))},intersectObjectWithFrustum:function(){var e=new THREE.Box3;return function(t,i){if(!t.boundingBox||t instanceof THREE.Mesh){var r=t.geometry;null===r.boundingBox&&r.computeBoundingBox(),e.copy(r.boundingBox)}else e.copy(t.boundingBox);return e.applyMatrix4(t.matrixWorld),i.intersectsBox(e)}}(),equalsCamera:function(i,n){const a=r.Math.EPSILON15;return r.Math.equalsEpsilonVec3(i.position,n.position,a)&&r.Math.equalsEpsilonVec3(i.up,n.up,a)&&r.Math.equalsEpsilonVec3(i.realUp,n.realUp,a)&&r.Math.equalsEpsilonVec3(i.getWorldDirection(e),n.getWorldDirection(t),a)&&r.Math.equalsEpsilonFrustum(i.frustum,n.frustum,a)}}})(),function(){class e extends THREE.Fog{constructor(){super();var e=this;e.postProcessMap=null,e.postProcessAdditiveMap=null,e.viewport={w:0,h:0},e.isPostOnly=!0,THREE.ShaderChunk.fog_pars_vertex="\n #ifdef USE_FOG\n #endif\n ",THREE.ShaderChunk.fog_vertex="\n #ifdef USE_FOG\n #endif\n ",THREE.ShaderChunk.fog_pars_fragment="\n #ifdef USE_FOG\n uniform vec3 fogColor;\n uniform sampler2D postProcessMap;\n uniform sampler2D postProcessAdditiveMap;\n uniform float postProcessMixRate;\n uniform float postProcessAdditiveRate;\n uniform float viewportWidth;\n uniform float viewportHeight;\n varying float fogDepth;\n\n #ifdef FOG_EXP2\n uniform float fogDensity;\n #else\n uniform float fogNear;\n uniform float fogFar;\n #endif\n\n #include <postprocess_mix_minus_color>\n #endif\n ",THREE.ShaderChunk.fog_fragment="\n #ifdef USE_FOG\n // #if ! defined( USE_POST_ONLY )\n // #ifdef FOG_EXP2\n // float fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\n // #else\n // float fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n // #endif\n // gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n // #endif\n vec2 postUV = vec2(gl_FragCoord.x/viewportWidth,gl_FragCoord.y/viewportHeight);\n\n if(postProcessAdditiveRate> 0.0){\n vec4 postAdditiveColor = texture2D( postProcessAdditiveMap, postUV );\n// gl_FragColor.rgba = postAdditiveColor.rgba;\n// gl_FragColor.rgb = postprocess_mix_minus_color(postAdditiveColor, vec3(1.0));\n gl_FragColor.rgb = postprocess_mix_minus_color(postAdditiveColor, gl_FragColor.rgb);\n }\n if ( postProcessMixRate > 0.0 ) {\n vec4 postColor = texture2D( postProcessMap, postUV );\n// gl_FragColor.rgba = postColor.rgba;\n// gl_FragColor.rgb = vec3(postColor.a);\n// gl_FragColor.rgb = vec3(0.0);\n if ( postColor.a>0.0) {\n gl_FragColor.rgb = mix( gl_FragColor.rgb, postColor.rgb, postColor.a);\n }\n }\n #endif\n ",THREE.ShaderChunk.postprocess_mix_color="\n vec4 mix_color(vec4 originalColor, vec3 mixColor, float mixNum){\n float _mixNum = 1.0-(1.0-mixNum)*(1.0-originalColor.a);\n if ( _mixNum==0.0 ) {\n return originalColor;\n }\n vec3 _color = mix(originalColor.rgb*originalColor.a,mixColor, mixNum)/_mixNum;\n return vec4(_color,_mixNum);\n }\n ",THREE.ShaderChunk.postprocess_original_color="\n vec4 get_original_color(sampler2D tDiffuse, vec2 v_textureCoordinates, float firstFlg){\n vec4 color = texture2D(tDiffuse, v_textureCoordinates);\n if(firstFlg==0.0) {\n color = vec4(0.0);\n }\n return color;\n }\n ",THREE.ShaderChunk.postprocess_minus_color="\n vec4 postprocess_minus_color(vec3 originalColor, vec3 texColor){\n float fragColor_a = 0.0;\n float fragColor_r = originalColor.r-texColor.r;\n float fragColor_g = originalColor.g-texColor.g;\n float fragColor_b = originalColor.b-texColor.b;\n if(fragColor_r <0.0){\n fragColor_a+=0.1;\n }\n if(fragColor_g <0.0){\n fragColor_a+=0.2;\n }\n if(fragColor_b <0.0){\n fragColor_a+=0.4;\n }\n return vec4(abs(fragColor_r), abs(fragColor_g), abs(fragColor_b),fragColor_a);\n }\n ",THREE.ShaderChunk.postprocess_mix_minus_color="\n vec3 postprocess_mix_minus_color(vec4 originalColor, vec3 addColor){\n float fragColor_r = originalColor.r;\n float fragColor_g = originalColor.g;\n float fragColor_b = originalColor.b;\n float fragColor_a = originalColor.a;\n\n if(fragColor_a>0.35){\n fragColor_b=addColor.b-fragColor_b;\n fragColor_a=fragColor_a - 0.4;\n }else{\n fragColor_b +=addColor.b;\n }\n if(fragColor_b<0.0){\n fragColor_b=0.0;\n }\n\n if(fragColor_a>0.15){\n fragColor_g=addColor.g-fragColor_g;\n fragColor_a=fragColor_a-0.2;\n }else{\n fragColor_g +=addColor.g;\n }\n if(fragColor_g<0.0){\n fragColor_g=0.0;\n }\n\n if(fragColor_a > 0.05){\n fragColor_r=addColor.r-fragColor_r;\n }else{\n fragColor_r +=addColor.r;\n }\n if(fragColor_r<0.0){\n fragColor_r=0.0;\n }\n\n return vec3(fragColor_r,fragColor_g,fragColor_b);\n }\n "}setPostProcessMap(e){this.postProcessMap=e}setPostProcessAdditiveMap(e){this.postProcessAdditiveMap=e}setViewport(e,t){this.viewport.w=e,this.viewport.h=t}destroy(){var e=this;e.postProcessMap=null,e.postProcessAdditiveMap=null,e.isPostOnly=null,e.viewport=null}}r.PostProcess=e}(),function(){class e extends THREE.WebGLRenderer{constructor(e){super(e),this._renderBufferDirect=this.renderBufferDirect,this.renderBufferDirect=this._renderBufferDirectEx,this._render=this.render,this.render=this._renderEx,this._timeStart=0,this._timeEnd=0,this._timeElapse=0,this._frameNumber=0,this._newFrame=!0,this._renderBreaking=!1,this._renderInteracting=!1,this._forceRenderStateInit=!1,this._limitFrameTimeWithInteracting=30,this._frameTimeThreshold=0,this.disableRenderBreaking=!1}destroy(){this.dispose()}set renderInteracting(e){this._renderInteracting=e}get renderInteracting(){return this._renderInteracting}set forceRenderStateInit(e){this._forceRenderStateInit=e}get forceRenderStateInit(){return this._forceRenderStateInit}_renderBufferDirectEx(e,t,i,r,n,a){if(t){if(!this.disableRenderBreaking){if(!this._checkIfRender())return;if(this._isObjectRendered(n,a))return}this._renderBufferDirect(e,t,i,r,n,a),this._setStateOfObject(t,n,a),t._renderFinished=!1}else this._renderBufferDirect(e,t,i,r,n,a)}_renderEx(e,t){return this._resetState(),this._updateSceneState(e),this._render(e,t),e._renderFinished&&this._resetStateOfObjects(e),e._renderFinished}_resetState(){this._timeStart=0,this._timeEnd=0,this._renderBreaking=!1,this._newFrame=!1,this._frameTimeThreshold=this._renderInteracting?this._limitFrameTimeWithInteracting:r.GlobalData.LimitFrameTime,this.autoClear&&(this._frameNumber=r.Math.incrementWrap(this._frameNumber,15e6,1),this._newFrame=!0)}_updateSceneState(e){void 0===e._renderedObjects&&(e._renderedObjects=[]),e._renderFinished=!0,this._forceRenderStateInit?e.renderStateInitSkipped=!1:e.renderStateInitSkipped=!this._newFrame||!!this._renderInteracting,this._newFrame&&this._resetStateOfObjects(e)}_setStateOfObject(e,t,i){t._frameNumber=this._frameNumber,t._rendered=!0,i&&(i._rendered=!0),e._renderedObjects.push({object:t,group:i})}_resetStateOfObjects(e){e._renderedObjects.forEach((e=>{e.object._rendered=void 0,e.group&&(e.group._rendered=void 0)})),e._renderedObjects.length=0}_checkIfRender(){return!this._renderBreaking&&(this._timeStart||(this._timeStart=Date.now()),this._timeEnd=Date.now(),this._timeElapse=this._timeEnd-this._timeStart,!(this._timeElapse>this._frameTimeThreshold)||(this._renderBreaking=!0,!1))}_isObjectRendered(e,t){return t?e._rendered&&t._rendered:e._rendered}}r.WebGLRenderer=e}(),r.IncrementedRenderer=class{constructor(e,t){this.manager=e,this.viewer=e.viewer,this.countRenderRequest=0,this.maxCountRenderRequest=1e4,this.rendering=!1,this.incrementRenderHandle=0,this.renderer=new r.WebGLRenderer(t),this._renderSize=new THREE.Vector2,this.depthPass=new r.DepthRenderPass(this.viewer.modelManager),r.GlobalData.EnableShadowMap&&(this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=THREE.PCFSoftShadowMap,this.renderer.shadowMap.autoUpdate=!1,this.renderer.shadowMap.needsUpdate=!0,this.viewer.getScene().lightManager.shadowLightNum++),this._renderingCamera=void 0}destroy(){this.incrementRenderHandle>0&&cancelAnimationFrame(this.incrementRenderHandle),this.renderer&&(this.renderer.destroy&&this.renderer.destroy(),this.renderer.domElement.parentNode&&this.renderer.domElement.parentNode.removeChild(this.renderer.domElement),this.renderer=null),this.depthPass.destroy(),this.depthPass=null,this._renderSize=null,this.manager=null,this.viewer=null,this._renderingCamera=void 0}forceRenderOneFrame(){const e=this.viewer,t=e.camera,i=e.modelManager.getScene();this.renderer.render(i,t,null,!0)}_render(){if(!this.manager.prepareRender())return;if(++this.countRenderRequest,this.countRenderRequest>this.maxCountRenderRequest&&(this.countRenderRequest=0),this.rendering||this.pickingEffectRendering)return;this.rendering=!0;const e=this,t=this.viewer,i=t.camera,n=t.modelManager,a=t.editorManager,s=t.getScene(),o=this.renderer;n.calculateCameraModelRelation(i.position),t.calculateNearFar(),t.cameraControl.updateCamera(),s.updateLights(i,t),void 0===this._renderingCamera?this._renderingCamera=i.clone():this._renderingCamera.copy(i);const l=a.isUpdateRenderList,d=o.autoClear;o.renderInteracting=!l,l&&n.prepareScene(i),t.onCallbacks(r.EnumRenderCallbackType.PRE_RENDER),t.getIBLManager().renderWithOrthCamera(t,o,this._renderingCamera,l),this.incrementRenderHandle=requestAnimationFrame(function i(r,h,c){let u=h,p=r;return function(){o.autoClear=c,a.cameraChange?(o.autoClear=!0,a.cameraChange=!1,t.getIBLManager().renderWithOrthCamera(t,o,u,l)):o.autoClear=c,-1!==e.incrementRenderHandle?o.render(s,u)||p!==e.countRenderRequest?(e.rendering=!1,p!==e.countRenderRequest?(o.autoClear=d,t.render()):(e._renderPickingObjects(),t.onRenderFinishedCallback(),n.disposeBufferAfterVbo(),o.autoClear=d)):e.incrementRenderHandle=requestAnimationFrame(i(p,u,!1)):e.rendering=!1}}(e.countRenderRequest,this._renderingCamera,o.autoClear)),t.onRenderCallback(),t.cameraControl.setCameraChanging(!1)}render(e){this._render(e)}renderDepth(e,t,i,r){this.depthPass.renderDepth(e,t,i,r)}renderCustomDepth(e,t,i,r,n){this.depthPass.renderCustomDepth(e,t,i,r,n)}renderCustomDepthWithoutDEM(e,t,i,r){this.depthPass.renderCustomDepthWithoutDEM(e,t,i,r)}_applyPickingEffect(){const e=this.manager.getPickingEffecter();if(!e)return;const t=this.viewer.modelManager.isFilterApplied();e.apply(t)}_renderPickingObjects(){const e=this.renderer,t=e.forceRenderStateInit;e.forceRenderStateInit=!0,e.disableRenderBreaking=!0,this.pickingEffectRendering=!0,this._applyPickingEffect(),this.viewer.modelManager.setFilterApplied(!1),this.pickingEffectRendering=!1,e.forceRenderStateInit=t,e.disableRenderBreaking=!1}setSize(e,t){this.renderer.setSize(e,t)}getSize(){return this.renderer.getSize(this._renderSize)}canceRenderAnimation(){this.incrementRenderHandle>0&&(cancelAnimationFrame(this.incrementRenderHandle),this.incrementRenderHandle=-1,this.rendering=!1)}},function(){function e(e,t){return e.material.priorityOrderId!==t.material.priorityOrderId?(e.material.priorityOrderId||0)-(t.material.priorityOrderId||0):e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.program!==t.program?e.program.id-t.program.id:e.material.id!==t.material.id?void 0===e.material.priorityOrderId?e.material.id-t.material.id:t.material.id-e.material.id:e.z!==t.z?e.z-t.z:e.id-t.id}r.BatchedRenderer=class{constructor(t,i){this.manager=t,this.viewer=t.viewer,this.composer=null,this.isBatched=!0,this.renderer=new THREE.WebGLRenderer(i),this.renderer.setOpaqueSort(e);var n=this.viewer;if(this.viewportWidth=n.domElement.offsetWidth,this.viewportHeight=n.domElement.offsetHeight,this.depthPass=new r.DepthRenderPass(this.viewer.modelManager),r.GlobalData.EnableShadowMap){this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=THREE.PCFSoftShadowMap,this.renderer.shadowMap.autoUpdate=!1,this.renderer.shadowMap.needsUpdate=!0,this.viewer.getScene().lightManager.shadowLightNum++}this._renderSize=new THREE.Vector2,this.oit=new r.OIT({renderer:this.renderer})}destroy(){this.composer&&(this.composer.destroy(),this.composer=null),this.oit&&(this.oit.destroy(),this.oit=void 0),this.renderer&&(this.renderer.dispose(),this.renderer.domElement.parentNode&&this.renderer.domElement.parentNode.removeChild(this.renderer.domElement),this.renderer=null),this.viewer=null,this.manager=null}_createComposer(){this.oldAutoClear=this.renderer.autoClear;var e=this.viewer;this.renderer.shadowMap.enabled=!0,this.composer=new r.RenderEffectComposer(this.renderer),this.composer.init(e,this.viewportWidth,this.viewportHeight)}_checkPostProcess(){return r.GlobalData.EnableSnowPass||r.GlobalData.EnableFogPass||r.GlobalData.EnableRainPass||r.GlobalData.EnableSkylinePass||r.GlobalData.ScanRingCount>0||r.GlobalData.EnableGlow&&r.GlobalData.GlowCount>0||r.GlobalData.EnableGlow&&r.GlobalData.HighLightOutlineCount>0||r.GlobalData.BloomCount>0||r.GlobalData.SSAO}_render(e){var t=this.viewer,i=t.getScene();if(!this.manager.prepareRender())return;var n=this,a=t.camera,s=t.modelManager,o=this.renderer,l=this.manager;this._isNonInteracting();function d(){t.globalRendering?function(){var e=i.getObjectGroup(r.ObjectGroupType.GLOBALEARTH);if(e&&e.visible){for(var t=i.getObjectGroups(),n=0;n<t.length;n++){var s=t[n];s.preVisible=s.visible,s.visible=!1}e.visible=!0,o.shadowMap.needsUpdate=!1,o.render(i,a)}}():(r.ContactShadow.getInstance()&&r.ContactShadow.getInstance().render(o,i,a),t.clipCapsManager&&t.clipCapsManager.render(o),r.GroundPrimitiveManager.getInstance().beforeRender(),null!=t.scissorViewportManager&&t.scissorViewportManager.isEmbeddedView()?t.scissorViewportManager.setViewRegionRender(o,i,a):l.useOIT()?n.oit.render(i,a,t.modelManager):o.render(i,a),i.background=null,r.GroundPrimitiveManager.getInstance().render(o,a))}function h(){var e=o.autoClear;const l=a.near,h=a.far,c=r.ExtrudeBodyManager.getInstance(t)._getNodeGroupVisible();i.fillClipPlane&&i.fillClipPlane.updateCamera(t),t.getIBLManager().renderWithOrthCamera(t,o),r.ExtrudeBodyManager.getInstance(t)._setNodeGroupVisible(!1),d(),o.autoClear=e,r.ExtrudeBodyManager.getInstance(t)._setNodeGroupVisible(c),r.ExtrudeBodyManager.getInstance(t).applyFrontEffect(o,i,a),n._applyPickingEffect(),a.setNearFar(l,h),t.cameraControl.updateCamera(),s.setFilterApplied(!1)}!function(){let e=t.camera.lastDirty;i.updateLights(a,t),s.prepareScene(a,(function(){s.setRenderStateChanged(!0),t.render()})),s.blinkManager.getBlinkEnabled()&&s.blinkManager.updateBlinkMaterial(),t.onCallbacks(r.EnumRenderCallbackType.PRE_RENDER),t.terrainOperationManager.render(o),t.holesManager.render(o),t.heightLimitManager&&t.heightLimitManager.render(o),t.refleRefraManager&&t.refleRefraManager.render(o),n._checkPostProcess()?(null==n.composer&&n._createComposer(),n.composer.updateEnabled(),n.composer.conventionFn=function(){i.updateLights(a,t),h(),s.disposeBufferAfterVbo()},n.composer.checkRender()):(null!=n.composer&&(n.renderer.autoClear=n.oldAutoClear,n.composer.destroy(),n.composer=null),h()),t.onRenderCallback(),t.onRenderFinishedCallback(),(t.cameraControl.isCameraChanging()||e)&&s.dispatchEvent({type:r.EVENTS.ON_CAMERA_CHANGED_AND_RENDERED}),t.cameraControl.setCameraChanging(!1),n.composer||s.disposeBufferAfterVbo()}()}render(e){this.adjustNearFar(),this._render(e)}renderDepth(e,t,i,r){this.depthPass.renderDepth(e,t,i,r)}renderCustomDepth(e,t,i,r,n,a){this.depthPass.renderCustomDepth(e,t,i,r,n,a)}renderCustomDepthByOpacity(e,t,i,r,n,a){this.depthPass.renderCustomDepthByOpacity(e,t,i,r,n,a)}renderCustomDepthWithoutDEM(e,t,i,r,n){this.depthPass.renderCustomDepthWithoutDEM(e,t,i,r,n)}setSize(e,t){this.viewportWidth=e,this.viewportHeight=t,this.renderer.setPixelRatio(window.devicePixelRatio||1),this.renderer.setSize(this.viewportWidth,this.viewportHeight),this.manager.useOIT()&&this.oit.setSize(this.viewportWidth,this.viewportHeight),this.composer&&this.composer.setSize(this.viewportWidth,this.viewportHeight)}getSize(){return this.renderer.getSize(this._renderSize)}_applyPickingEffect(){var e=this.manager.getPickingEffecter();if(e){var t=this.viewer.modelManager.isFilterApplied();e.apply(t)}}forceRenderOneFrame(){const e=this.viewer,t=e.camera,i=e.modelManager.getScene();this.renderer.render(i,t,null,!0)}adjustNearFar(){const e=this.viewer;e.getModelManager().calculateCameraModelRelation(e.camera.position),e.camera.lastDirty=e.camera.dirty,e.calculateNearFar(),e.cameraControl.updateCamera()}_isNonInteracting(){return this.viewer.editorManager.isUpdateRenderList}}}(),function(){class e extends r.BatchedRenderer{constructor(e,t){super(e,t),this.fps=t.fps||0,this._running=!1,this._paused=!1,this._destroyed=!1,this._showRenderErrors=!0,this._renderRequested=!0,this._frameState=new r.FrameState,this._preRenderLoopType=void 0,this._renderLoopHandel=null,this._firstRender=!0,this._currentRenderLoop=void 0}destroy(){this._destroyed=!0,this._frameState=this._frameState.destroy(),this._performanceStats&&(this._performanceStats=this._performanceStats.destroy()),this._currentRenderLoop=void 0,this.stop(),super.destroy()}_batchModelRenderLop(){this.viewer.editorManager.update();this._shouldRender()&&(this._renderRequested=!1,this.viewer.editorManager.onRender(),this.adjustNearFar(),this._render(!0))}_oocRenderLoop(){this.viewer.editorManager.update(),this._beginPerformanceStats();const e=new Date,t=this._frameState;this.updateFrameState(t);const i=this._shouldRender();if(i){this._renderRequested=!1;const i=r.Math.incrementWrap(t.frameNumber,15e6,1);this.updateFrameNumber(i,e),t.newFrame=!0}this.preUpdate(t),i&&this.update(t),this.postUpdate(t),this._callForAfterRender(),this._endPerformanceStats()}render(e){this.requestRender(),this._checkIfForceRender()&&this._currentRenderLoop&&(this._currentRenderLoop(),this.viewer.cameraControl.dirtyCamera(!0))}preUpdate(e){r.eventsDispatcher.dispatchEvent({type:r.EVENTS.ON_PRE_UPDATE,params:{}});var t=this.viewer.getModelManager();t.traverseValidModels((function(t){t.preUpdate(e)})),t.tilesCacheScheduler.resetTilesCache(e)}update(e){const t=this.viewer.getModelManager();t.tilesCacheScheduler.clearStatistics(),this.viewer.editorManager.onRender(),this.adjustNearFar(),t.traverseValidModels((function(t){t.update(e)})),this.createPotentiallyVisibleSet(),this._render()}postUpdate(e){r.eventsDispatcher.dispatchEvent({type:r.EVENTS.ON_POST_UPDATE,params:{}});var t=this.viewer.getModelManager();t.traverseValidModels((function(t){t.postUpdate(e)})),r.RequestScheduler.update(),t.tilesCacheScheduler.update()}createPotentiallyVisibleSet(){}updateFrameNumber(e,t){var i=this._frameState;i.frameNumber=e,i.time=t}updateFrameState(){const e=this.viewer,t=this._frameState;t.newFrame=!1,t.globalMatrix=e.getScene().getRawMatrixGlobal(),t.globalInverseMatrix=e.getScene().getInverseMatrixGlobal(),t.camera=e.camera,t.cameraPositionWc.copy(t.camera.position).applyMatrix4(t.globalInverseMatrix),t.camera.direction(t.cameraDirectionWc),t.cameraDirectionWc.transformDirection(t.globalInverseMatrix),t.frustum=t.camera.getFrustum(),t.cameraPreSSE=e.domElement.offsetHeight/t.camera.frustumHeightFactor,t.viewer=this.viewer}_callForAfterRender(){for(var e=this._frameState.afterRenderFns,t=0,i=e.length;t<i;++t)e[t](),this.requestRender();e.length=0}requestRender(){this._renderRequested=!0}get frameState(){return this._frameState}start(e){if(!this._running){this._running=!0,this._paused=!1;var t=this,i=0;this._renderLoopHandel=requestAnimationFrame((function r(n){if(!t.isDestroyed()&&(t._running||t._paused))try{var a=t.fps;if(a>0){var s=1e3/a,o=n-i;o>s&&(t.resize(),t._running&&!t._paused&&e.call(t),i=n-o%s),t._renderLoopHandel=requestAnimationFrame(r)}else t.resize(),t._running&&!t._paused&&e.call(t),t._renderLoopHandel=requestAnimationFrame(r)}catch(e){t._running=!1,t._showRenderErrors&&(console.error("An error occurred while rendering. Rendering has stopped."),console.error(e))}}))}}pause(e){this._paused=e}stop(){this._running&&(this._running=!1,this._paused=!1),r.Utils.isDefined(this._renderLoopHandel)&&cancelAnimationFrame(this._renderLoopHandel)}_isCameraChanged(){const e=this.viewer.camera;let t=this.lastCamera;return void 0===t?(this.lastCamera=e.clone(),!0):!r.CameraUtil.equalsCamera(e,t)&&(t.copy(e),!0)}_shouldRender(){return this._renderRequested||this._isCameraChanged()||this.viewer.cameraControl.isCameraChanging()||this.viewer.getModelManager().isSceneChanged()||this.viewer.getModelManager().blinkManager.getBlinkEnabled()}resize(){}isDestroyed(){return this._destroyed}_getPerformanceStats(){const e=this.viewer;return e._options.debugShowFPS?(this._performanceStats||(this._performanceStats=new r.PerformanceStats({container:e.domElement})),this._performanceStats):(this._performanceStats&&(this._performanceStats=this._performanceStats.destroy()),null)}_beginPerformanceStats(){const e=this._getPerformanceStats();e&&e.begin()}_endPerformanceStats(){const e=this._getPerformanceStats();e&&e.end()}setRenderLoop(e){e!==this._preRenderLoopType&&(this._preRenderLoopType=e,this.stop(),this.requestRender(!0),this._currentRenderLoop=e?this._oocRenderLoop:this._batchModelRenderLop,this.start(this._currentRenderLoop))}_checkIfForceRender(){const e=this._firstRender&&this.viewer.getModelManager().hasLoadedModel();return e&&(this._firstRender=!1),e}}r.OoCRenderer=e}(),r.RenderGroup=function(){var e=[],t=[],i=-1,n=-1,a=0,s=!1,o=!1,l=0,d=0;function h(e,t){return e.material.id!==t.material.id?e.material.id-t.material.id:e.id-t.id}function c(e,t){return e.z!==t.z?t.z-e.z:e.id-t.id}function u(e,t,i,n,s,o,h){l=Date.now();for(var c=t.length,u=a;u<c;u++){var p=t[u],m=p.object,f=p.material,g=p.group,v=p.geometry;if(m.modelViewMatrix.multiplyMatrices(i.matrixWorldInverse,m.matrixWorld),m.normalMatrix.getNormalMatrix(m.modelViewMatrix),v=e.updateObject(m),e.renderBufferDirect(i,s,v,f,m,g),!h&&(d=Date.now(),d-l>r.GlobalData.LimitFrameTime))return a=u+1,!1}return a=0,!0}this.getOpaqueObjects=function(){return e},this.getTransparentObjects=function(){return t},this.destroy=function(){e=[],t=[]},this.restart=function(){a=0,s=!1,o=!1},this.prepare=function(){this.restart(),i=-1,n=-1},this.renderableCount=function(){return i+n},this.pushRenderItem=function(r,a,s,o,l){var d,h;s.transparent?(d=t,h=++n):(d=e,h=++i);var c=d[h];void 0!==c?(c.id=r.id,c.object=r,c.geometry=a,c.material=s,c.z=o,c.group=l||null):(c={id:r.id,object:r,geometry:a,material:s,z:o,group:l||null},d[h]=c)},this.sortRenderList=function(r){e.length=i+1,t.length=n+1,r&&(e.sort(h),t.sort(c))},this.renderOpaqueObjects=function(t,i,r,n,a,o){return s||(s=u(t,e,i,0,n,0,o)),s},this.renderTransparentObjects=function(e,i,r,n,a,s){return o||(o=u(e,t,i,0,n,0,s)),o}},r.OrderedRenderer=function(){var e=0,t=!1,i=!1,n=0,a=0,s=[],o=null,l=null,d=new THREE.Vector3,h=!0,c=!0;this.updateObjectList=function(e){h=e};var u=!1;function p(e,t,i,n,a){var o=s[e.renderOrder];void 0===o&&(o=new r.RenderGroup,s[e.renderOrder]=o),o.pushRenderItem(e,t,i,n,a)}function m(t,i){if(!1===t.visible)return!0;if(t._cullTicket!=e){if(!u)if(Date.now()-n>30)return!1;if(t._cullTicket=e,(t.isMesh||t.isLine||t.isPoints)&&(t.isSkinnedMesh&&t.skeleton.update(),!1===t.frustumCulled||!0===o.intersectsObject(t))){var r=t.material,a=t.geometry;if(d.setFromMatrixPosition(t.matrixWorld),d.applyMatrix4(l),Array.isArray(r))for(var s=a.groups,h=0,c=s.length;h<c;h++){var f=s[h],g=r[f.materialIndex];g.transparent?p(t,a,g,d.z,f):p(t,a,g,0,f)}else r.transparent?p(t,a,r,d.z):p(t,a,r,0)}}var v=t.children;if(v)for(h=0,c=v.length;h<c;h++)if(!m(v[h],i))return!1;return!0}this.setNonBreakingRender=function(e){u=e},this.destroy=function(){for(var e=0,t=s.length;e<t;++e){var i=s[e];void 0!==i&&i.destroy()}},this.restart=function(){for(var e=0,i=s.length;e<i;++e){var r=s[e];void 0!==r&&r.restart()}c=!0,t=!0},this.setFilter=function(e){},this.projectLights=function(e,t){t.length=0,e.traverseVisible((function(e){e.isLight&&t.push(e)}))};var f=this;function g(i,r,a){h?(t&&(!function(){++e>1e5&&(e=0);for(var t=0,i=s.length;t<i;++t){var r=s[t];void 0!==r&&r.prepare()}}(),f.projectLights(i,a)),n=Date.now(),t=m(i,r),function(){for(var e=0,i=s.length;e<i;++e){var r=s[e];void 0!==r&&r.sortRenderList(t)}}()):t=!0}this.update=function(e,t){l=t,o=e},this.render=function(e,n,o,l,d,p,m){if(h&&!c||++a,a>1e4&&(a=0),c){if(r.Logger.time("build object list"),g(n,o,l),r.Logger.timeEnd("build object list"),!t)return!1;p=this.forceClear||e.autoClear,c=!1,this.forceClear=!1,e.setupLights(l,o),e.setRenderTarget(d)}r.Logger.time("increment render object"),(e.autoClear||p)&&e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil,h);var f=n.fog;e.setRenderTicket(a),m.setBlending(THREE.NoBlending);for(var v=s.length-1;v>=0;--v){if(void 0!==(y=s[v])&&!(i=y.renderOpaqueObjects(e,o,l,f,h,u)))break}if(i)for(v=s.length-1;v>=0;--v){var y;if(void 0!==(y=s[v])&&!(i=y.renderTransparentObjects(e,o,l,f,void 0,u)))break}return 0==s.length&&(i=!0),m.buffers.depth.setTest(!0),m.buffers.depth.setMask(!0),m.buffers.color.setMask(!0),r.Logger.timeEnd("increment render object"),i}},r.RenderComposer=function(){var e,t,i,n,a,s,o,l=null,d=null,h=!1,c=!0,u=!1;this.init=function(t,i,l){!function(){function e(e){e.material.blending=THREE.NoBlending,e.material.depthWrite=!1,e.material.depthTest=!1}e(n=new r.ShaderPass(FXAAShader)),e(a=new r.ShaderPass(CopyShader))}(),t?(s=i,o=l,e=t,this.setSize(i,l,!0)):console.log("You need a gl context to make a renderer. Things will go downhill from here.")},this.cleanup=function(){l&&(l.dispose(),l=null),d&&(d.dispose(),d=null)},this.setSize=function(t,i,r){if(s=t,o=i,0===t&&0===i||!e)this.cleanup();else{var a=0|t*e.getPixelRatio(),h=0|i*e.getPixelRatio(),c=1/a,u=1/h;!r&&l&&l.width==a&&l.height==h||(this.cleanup(),(l=new THREE.WebGLRenderTarget(a,h,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBAFormat,stencilBuffer:!1})).texture.generateMipmaps=!1,l.texture.name="_color_rt1",(d=l.clone()).texture.name="_write_rt1"),n.uniforms.uResolution.value.set(c,u)}},this.renderIncrement=function(n,d){if(!l&&s)this.setSize();else if(!l&&!s)return;return r.GlobalData.SSAO&&!i&&(i=new THREE.SSAOPass(n,d,s,o)),t=d,c&&(u||(e.resetIncrementRender(),e.setClearColor(0,0),e.clearTarget(l,!0,!0,!1)),c=!1),e.autoClear=!1,h||(h=e.render(n,t,l))&&(a.renderToScreen=!0,e.resetIncrementRender(),a.render(e,null,l)),h},this.render=function(n,d){if(!l&&s)this.setSize();else if(!l&&!s)return;var h=r.GlobalData.SSAO;h&&!i&&(i=new THREE.SSAOPass(n,d,s,o)),t=d,c&&(u||(e.setClearColor(0,0),e.clearTarget(l,!0,!0,!1)),c=!1),e.autoClear=!1,u||e.render(n,t,l);var p=h?i:a;p.renderToScreen=!0,p.render(e,null,l)},this.restart=function(e,t){u=!!e,h=!1,c=!0},this.finish=function(){}},r.RendererManager=class{constructor(e){this.viewer=e,this.renderer=null,this.pickingEffecter=null,this._renderSize={x:0,y:0},this._useOIT=!1}destroy(){this.renderer&&(this.renderer.destroy(),this.renderer=null),this.pickingEffecter&&(this.pickingEffecter.destroy(),this.pickingEffecter=null),this._renderSize=null,this.viewer=null}setupRenderer(e){if(!this.renderer){var t=this.viewer;r.GlobalData.BatchMergeEnabled?(console.log("renderer: BatchedRenderer"),this.renderer=new r.OoCRenderer(this,e)):(t.modelManager.blinkManager.permitBlink(!0),r.GlobalData.InstanceSharedMeshEnabled=!1,console.log("renderer: IncrementedRenderer"),this.renderer=new r.IncrementedRenderer(this,e)),this._initRenderer()}}prepareRender(){var e=this.renderer;if(!e)return!1;var t=this.viewer,i=t.modelManager;if(!i.isDrawable())return!1;if(!i.hasModel())return r.Logger.log("model not loaded!"),e.forceRenderOneFrame(),!1;if(r.GlobalData.IBL&&0==t.getIBLManager().textureLoad)return!1;if(t.globalRendering){if(!t.globeEarth)return!1;if(!t.globeEarth.modelLoaded)return!1}return!i.checkLayerDataLoading()&&(t.getScene().fillClipPlane&&r.GlobalData.ClippingCaps&&r.GlobalData.BatchMergeEnabled&&t.setRenderStateChanged(!0),!0)}render(e){this.renderer&&this.renderer.render(e)}getRenderer(){if(this.renderer)return this.renderer.renderer}setSize(e,t){this.renderer&&this.renderer.setSize(e,t)}getRendererSize(){if(this.renderer){const e=this.renderer.getSize();this._renderSize.width=e.x,this._renderSize.height=e.y}else this._renderSize.width=0,this._renderSize.height=0;return this._renderSize}getPickingEffecter(){return r.GlobalData.PickingEffect?(this.pickingEffecter||(this.pickingEffecter=new r.PickingEffecter(this.viewer)),this.pickingEffecter):null}_initRenderer(){var e=this.viewer,t=e.domElement,i=t.offsetWidth,n=t.offsetHeight,a=this.renderer.renderer;a.setClearColor(0,0),a.setPixelRatio(window.devicePixelRatio||1),a.setSize(i,n),a.toneMapping=r.GlobalData.ToneMapping,a.gammaFactor=2.2,a.outputEncoding=THREE.sRGBEncoding,a.domElement.setAttribute("tabindex","0"),a.domElement.setAttribute("id","cloud-main-canvas"),e.domElement.appendChild(a.domElement)}enableVR(e){this.renderer.renderer.xr.enabled=e}enableOIT(e){this._useOIT=e}useOIT(){return this._useOIT}_isSupportOIT(){return this._useOIT&&this.renderer&&this.renderer.oit}enableOITAlphaMask(e){this._isSupportOIT()&&this.renderer.oit.enableTransparentAlphaMask(e)}setOITCustomizedAlpha(e){if(this._isSupportOIT()){const t=this.renderer.oit;null===e?(t.enableCustomizedAlpha(!1),t.setCustomizedAlpha(1)):(t.enableCustomizedAlpha(!0),t.setCustomizedAlpha(e))}}forceRenderClearScreen(){const e=this.getRenderer();e&&(e.clear(!0,!0,!0),this.renderer.canceRenderAnimation&&this.renderer.canceRenderAnimation())}},THREE.SimplexNoise=function(e){null==e&&(e=Math),this.grad3=[[1,1,0],[-1,1,0],[1,-1,0],[-1,-1,0],[1,0,1],[-1,0,1],[1,0,-1],[-1,0,-1],[0,1,1],[0,-1,1],[0,1,-1],[0,-1,-1]],this.grad4=[[0,1,1,1],[0,1,1,-1],[0,1,-1,1],[0,1,-1,-1],[0,-1,1,1],[0,-1,1,-1],[0,-1,-1,1],[0,-1,-1,-1],[1,0,1,1],[1,0,1,-1],[1,0,-1,1],[1,0,-1,-1],[-1,0,1,1],[-1,0,1,-1],[-1,0,-1,1],[-1,0,-1,-1],[1,1,0,1],[1,1,0,-1],[1,-1,0,1],[1,-1,0,-1],[-1,1,0,1],[-1,1,0,-1],[-1,-1,0,1],[-1,-1,0,-1],[1,1,1,0],[1,1,-1,0],[1,-1,1,0],[1,-1,-1,0],[-1,1,1,0],[-1,1,-1,0],[-1,-1,1,0],[-1,-1,-1,0]],this.p=[];for(var t=0;t<256;t++)this.p[t]=Math.floor(256*e.random());this.perm=[];for(t=0;t<512;t++)this.perm[t]=this.p[255&t];this.simplex=[[0,1,2,3],[0,1,3,2],[0,0,0,0],[0,2,3,1],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,2,3,0],[0,2,1,3],[0,0,0,0],[0,3,1,2],[0,3,2,1],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,3,2,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,2,0,3],[0,0,0,0],[1,3,0,2],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,3,0,1],[2,3,1,0],[1,0,2,3],[1,0,3,2],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,0,3,1],[0,0,0,0],[2,1,3,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,0,1,3],[0,0,0,0],[0,0,0,0],[0,0,0,0],[3,0,1,2],[3,0,2,1],[0,0,0,0],[3,1,2,0],[2,1,0,3],[0,0,0,0],[0,0,0,0],[0,0,0,0],[3,1,0,2],[0,0,0,0],[3,2,0,1],[3,2,1,0]]},THREE.SimplexNoise.prototype.dot=function(e,t,i){return e[0]*t+e[1]*i},THREE.SimplexNoise.prototype.dot3=function(e,t,i,r){return e[0]*t+e[1]*i+e[2]*r},THREE.SimplexNoise.prototype.dot4=function(e,t,i,r,n){return e[0]*t+e[1]*i+e[2]*r+e[3]*n},THREE.SimplexNoise.prototype.noise=function(e,t){var i,r,n=(e+t)*(.5*(Math.sqrt(3)-1)),a=Math.floor(e+n),s=Math.floor(t+n),o=(3-Math.sqrt(3))/6,l=(a+s)*o,d=e-(a-l),h=t-(s-l);d>h?(i=1,r=0):(i=0,r=1);var c=d-i+o,u=h-r+o,p=d-1+2*o,m=h-1+2*o,f=255&a,g=255&s,v=this.perm[f+this.perm[g]]%12,y=this.perm[f+i+this.perm[g+r]]%12,M=this.perm[f+1+this.perm[g+1]]%12,E=.5-d*d-h*h,b=.5-c*c-u*u,x=.5-p*p-m*m;return 70*((E<0?0:(E*=E)*E*this.dot(this.grad3[v],d,h))+(b<0?0:(b*=b)*b*this.dot(this.grad3[y],c,u))+(x<0?0:(x*=x)*x*this.dot(this.grad3[M],p,m)))},THREE.SimplexNoise.prototype.noise3d=function(e,t,i){var r,n,a,s,o,l,d=(e+t+i)*(1/3),h=Math.floor(e+d),c=Math.floor(t+d),u=Math.floor(i+d),p=1/6,m=(h+c+u)*p,f=e-(h-m),g=t-(c-m),v=i-(u-m);f>=g?g>=v?(r=1,n=0,a=0,s=1,o=1,l=0):f>=v?(r=1,n=0,a=0,s=1,o=0,l=1):(r=0,n=0,a=1,s=1,o=0,l=1):g<v?(r=0,n=0,a=1,s=0,o=1,l=1):f<v?(r=0,n=1,a=0,s=0,o=1,l=1):(r=0,n=1,a=0,s=1,o=1,l=0);var y=f-r+p,M=g-n+p,E=v-a+p,b=f-s+2*p,x=g-o+2*p,I=v-l+2*p,T=f-1+.5,C=g-1+.5,w=v-1+.5,S=255&h,A=255&c,B=255&u,R=this.perm[S+this.perm[A+this.perm[B]]]%12,D=this.perm[S+r+this.perm[A+n+this.perm[B+a]]]%12,O=this.perm[S+s+this.perm[A+o+this.perm[B+l]]]%12,L=this.perm[S+1+this.perm[A+1+this.perm[B+1]]]%12,P=.6-f*f-g*g-v*v,N=.6-y*y-M*M-E*E,H=.6-b*b-x*x-I*I,F=.6-T*T-C*C-w*w;return 32*((P<0?0:(P*=P)*P*this.dot3(this.grad3[R],f,g,v))+(N<0?0:(N*=N)*N*this.dot3(this.grad3[D],y,M,E))+(H<0?0:(H*=H)*H*this.dot3(this.grad3[O],b,x,I))+(F<0?0:(F*=F)*F*this.dot3(this.grad3[L],T,C,w)))},THREE.SimplexNoise.prototype.noise4d=function(e,t,i,r){var n,a,s,o,l,d,h,c,u,p,m,f,g=this.grad4,v=this.simplex,y=this.perm,M=(Math.sqrt(5)-1)/4,E=(5-Math.sqrt(5))/20,b=(e+t+i+r)*M,x=Math.floor(e+b),I=Math.floor(t+b),T=Math.floor(i+b),C=Math.floor(r+b),w=(x+I+T+C)*E,S=e-(x-w),A=t-(I-w),B=i-(T-w),R=r-(C-w),D=(S>A?32:0)+(S>B?16:0)+(A>B?8:0)+(S>R?4:0)+(A>R?2:0)+(B>R?1:0),O=S-(n=v[D][0]>=3?1:0)+E,L=A-(a=v[D][1]>=3?1:0)+E,P=B-(s=v[D][2]>=3?1:0)+E,N=R-(o=v[D][3]>=3?1:0)+E,H=S-(l=v[D][0]>=2?1:0)+2*E,F=A-(d=v[D][1]>=2?1:0)+2*E,k=B-(h=v[D][2]>=2?1:0)+2*E,U=R-(c=v[D][3]>=2?1:0)+2*E,G=S-(u=v[D][0]>=1?1:0)+3*E,z=A-(p=v[D][1]>=1?1:0)+3*E,V=B-(m=v[D][2]>=1?1:0)+3*E,j=R-(f=v[D][3]>=1?1:0)+3*E,_=S-1+4*E,W=A-1+4*E,Y=B-1+4*E,Z=R-1+4*E,Q=255&x,J=255&I,X=255&T,K=255&C,q=y[Q+y[J+y[X+y[K]]]]%32,$=y[Q+n+y[J+a+y[X+s+y[K+o]]]]%32,ee=y[Q+l+y[J+d+y[X+h+y[K+c]]]]%32,te=y[Q+u+y[J+p+y[X+m+y[K+f]]]]%32,ie=y[Q+1+y[J+1+y[X+1+y[K+1]]]]%32,re=.6-S*S-A*A-B*B-R*R,ne=.6-O*O-L*L-P*P-N*N,ae=.6-H*H-F*F-k*k-U*U,se=.6-G*G-z*z-V*V-j*j,oe=.6-_*_-W*W-Y*Y-Z*Z;return 27*((re<0?0:(re*=re)*re*this.dot4(g[q],S,A,B,R))+(ne<0?0:(ne*=ne)*ne*this.dot4(g[$],O,L,P,N))+(ae<0?0:(ae*=ae)*ae*this.dot4(g[ee],H,F,k,U))+(se<0?0:(se*=se)*se*this.dot4(g[te],G,z,V,j))+(oe<0?0:(oe*=oe)*oe*this.dot4(g[ie],_,W,Y,Z)))},THREE.CopyShader={uniforms:{tDiffuse:{value:null},opacity:{value:1}},vertexShader:["varying vec2 vUv;","void main() {","vUv = uv;","gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n"),fragmentShader:["uniform float opacity;","uniform sampler2D tDiffuse;","varying vec2 vUv;","void main() {","vec4 texel = texture2D( tDiffuse, vUv );","gl_FragColor = opacity * texel;","}"].join("\n")},THREE.EffectComposer=function(e,t){if(this.renderer=e,void 0===t){var i={minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBAFormat,stencilBuffer:!0};let r=new THREE.Vector2;r=e.getSize(r),(t=new THREE.WebGLRenderTarget(r.width,r.height,i)).texture.name="EffectComposer.rt1",t.texture.encoding=THREE.GammaEncoding}this.renderTarget1=t,this.renderTarget2=t.clone(),this.renderTarget2.texture.name="EffectComposer.rt2",this.renderTarget2.texture.encoding=THREE.GammaEncoding,this.writeBuffer=this.renderTarget1,this.readBuffer=this.renderTarget2,this.passes=[],void 0===THREE.CopyShader&&console.error("THREE.EffectComposer relies on THREE.CopyShader"),this.copyPass=new THREE.ShaderPass(THREE.CopyShader),this.renderFirst=!0},Object.assign(THREE.EffectComposer.prototype,{swapBuffers:function(){var e=this.readBuffer;this.readBuffer=this.writeBuffer,this.writeBuffer=e},addPass:function(e){this.passes.push(e);let t=new THREE.Vector2;t=this.renderer.getSize(t),e.setSize(t.width,t.height)},insertPass:function(e,t){this.passes.splice(t,0,e)},render:function(e){var t,i,r=!1,n=this.passes.length;for(this.renderFirst=!0,i=0;i<n;i++)if((t=this.passes[i]).renderIndex=i,!1!==t.enabled){if(t.render(this.renderer,this.writeBuffer,this.readBuffer,e,r,this.renderFirst),this.renderFirst=!1,t.needsSwap){if(r){var a=this.renderer.context;a.stencilFunc(a.NOTEQUAL,1,4294967295),this.copyPass.render(this.renderer,this.writeBuffer,this.readBuffer,e),a.stencilFunc(a.EQUAL,1,4294967295)}this.swapBuffers()}void 0!==THREE.MaskPass&&(t instanceof THREE.MaskPass?r=!0:t instanceof THREE.ClearMaskPass&&(r=!1))}},reset:function(e){if(void 0===e){var t=this.renderer.getSize();(e=this.renderTarget1.clone()).setSize(t.width,t.height)}this.renderTarget1.dispose(),this.renderTarget2.dispose(),this.renderTarget1=e,this.renderTarget2=e.clone(),this.writeBuffer=this.renderTarget1,this.readBuffer=this.renderTarget2},setSize:function(e,t){this.renderTarget1.setSize(e,t),this.renderTarget2.setSize(e,t);for(var i=0;i<this.passes.length;i++)this.passes[i].setSize(e,t)}}),THREE.Pass=function(){this.enabled=!0,this.needsSwap=!0,this.clear=!1,this.renderToScreen=!1},Object.assign(THREE.Pass.prototype,{setSize:function(e,t){},render:function(e,t,i,r,n){console.error("THREE.Pass: .render() must be implemented in derived pass.")}}),function(){class e{constructor(e){this.renderer=e,this.composerMix=null,this.composerAdditive=null,this.highlightoutlinePass=null,this.snowPass=null,this.rainPass=null,this.fogPass=null,this.skylinePass=null,this.ssaoPass=null,this.glowPass=[],this.scanRingPassAry=[],this.conventionFn=null,this.depthTextureFlg=!1,this.normalTextureFlg=!1}destroy(){this.snowPass.enabled=!1,this.rainPass.enabled=!1,this.fogPass.enabled=!1,this.skylinePass.enabled=!1,this.ssaoPass.enabled=!1,this.highlightoutlinePass.enabled=!1,this.renderer=null,this.composerMix=null,this.composerAdditive=null,this.highlightoutlinePass.dispose(),this.highlightoutlinePass=null,this.snowPass.dispose(),this.snowPass=null,this.rainPass.dispose(),this.rainPass=null;for(var e=0;e<this.scanRingPassAry.length;e++)this.scanRingPassAry[e].dispose();this.scanRingPassAry.length=0;for(e=0;e<this.glowPass.length;e++)this.glowPass[e].dispose();this.glowPass.length=0,this.fogPass.dispose(),this.fogPass=null,this.skylinePass.dispose(),this.skylinePass=null,this.conventionFn=null,this.autoRenderFlg=!1,null!=this.depthRenderTarget&&this.depthRenderTarget.dispose(),null!=this.transparentDepthRenderTarget&&this.transparentDepthRenderTarget.dispose(),null!=this.normalRenderTarget&&this.normalRenderTarget.dispose(),null!=this.requestAnimationFrameID&&window.cancelAnimationFrame(this.requestAnimationFrameID),null!=this.scene.fog&&(this.scene.fog.setPostProcessMap(null),this.scene.fog.setPostProcessAdditiveMap(null))}init(e,t,i){var n=this;n.viewer=e,n.modelManager=e.modelManager,n.scene=e.getScene(),n.camera=e.camera,n.autoRenderFlg=!1,n.selectedGlow={},n.composerMix=new THREE.EffectComposer(n.renderer),n.highlightoutlinePass=new r.OutlineHighLightPass(n),n.composerMix.addPass(n.highlightoutlinePass),n.snowPass=new r.SnowPass(n,n.viewer,t,i),n.composerMix.addPass(n.snowPass),n.rainPass=new r.RainPass(n,n.viewer,t,i),n.composerMix.addPass(n.rainPass),n.fogPass=new r.FogPass(n,n.scene,n.camera,t,i),n.composerMix.addPass(n.fogPass),n.skylinePass=new r.SkylinePass(n,n.scene,n.camera,t,i),n.composerMix.addPass(n.skylinePass),n.composerAdditive=new THREE.EffectComposer(n.renderer),n.ssaoPass=new THREE.SSAOPass(n,n.scene,n.camera,t,i,n.modelManager),n.composerAdditive.addPass(n.ssaoPass),n.composerBackground=new THREE.EffectComposer(n.renderer),n.backgroundPass=new r.BackgroundPass(n,n.viewer,n.width,n.height),n.composerBackground.addPass(n.backgroundPass),n.setSize(t,i)}render(){var e=this;if(e.scene.background=null,null!=e.scene.fog){e.scene.fog.setPostProcessAdditiveMap(null),e.scene.fog.setPostProcessMap(null),e.normalTextureFlg=!1,e.depthTextureFlg=!1,e.transparentDepthTextureFlg=!1;var t=e.composerMix.renderer.getRenderTarget();e.composerMix.renderer.setRenderTarget(e.composerMix.readBuffer),e.composerMix.renderer.clear(),e.composerAdditive.renderer.setRenderTarget(e.composerAdditive.readBuffer),e.composerAdditive.renderer.clear(),e.composerMix.renderer.setRenderTarget(t),e.isAdditiveRoad()&&e.composerAdditive.render(),e.isMixRoad()&&e.composerMix.render(),e.composerBackground.render(),e.scene.fog.setViewport(e.composerMix.readBuffer.viewport.z,e.composerMix.readBuffer.viewport.w),e.isAdditiveRoad()&&e.scene.fog.setPostProcessAdditiveMap(e.composerAdditive.readBuffer.texture),e.isMixRoad()&&e.scene.fog.setPostProcessMap(e.composerMix.readBuffer.texture)}}isMixRoad(){var e=this;return e.rainPass.enabled||e.snowPass.enabled||e.fogPass.enabled||e.skylinePass.enabled||e.highlightoutlinePass.enabled||e.scanRingPassAry.length>0}isAdditiveRoad(){return this.glowPass.length>0||this.ssaoPass.enabled}setSize(e,t){var i=this,r=window.devicePixelRatio||1;i.width=e*r,i.height=t*r,null!=i.normalRenderTarget&&i.normalRenderTarget.setSize(i.width,i.height),null!=i.depthRenderTarget&&i.depthRenderTarget.setSize(i.width,i.height),null!=i.transparentDepthRenderTarget&&i.transparentDepthRenderTarget.setSize(i.width,i.height),i.composerMix.setSize(i.width,i.height),i.composerAdditive.setSize(i.width,i.height),i.composerBackground.setSize(i.width,i.height)}updateEnabled(){var e=this;e.snowPass.enabled=r.GlobalData.EnableSnowPass,e.fogPass.enabled=r.GlobalData.EnableFogPass,e.rainPass.enabled=r.GlobalData.EnableRainPass,e.skylinePass.enabled=r.GlobalData.EnableSkylinePass,e.ssaoPass.enabled=r.GlobalData.SSAO,e.highlightoutlinePass.enabled=r.GlobalData.EnableGlow&&r.GlobalData.HighLightOutlineCount>0;for(var t=0;t<e.glowPass.length;t++)e.glowPass[t].enabled=r.GlobalData.EnableGlow||e.glowPass[t].useDiffuse}getNormalTexture(){var e=this;if(null==e.normalMaterial&&(e.normalMaterial=new r.NormalMaterial,e.normalMaterial.blending=THREE.NoBlending),null==e.normalStandardMaterial&&(e.normalStandardMaterial=new r.InstancedNormalMaterial,e.normalStandardMaterial.blending=THREE.NoBlending),null==e.normalRenderTarget&&(e.normalRenderTarget=new THREE.WebGLRenderTarget(e.width,e.height,{minFilter:THREE.NearestFilter,magFilter:THREE.NearestFilter,format:THREE.RGBAFormat})),0==e.normalTextureFlg){var t=e.renderer.autoClear;e.renderer.autoClear=!1,e.modelManager.adjustVisibility(!1),e.modelManager.adjustInstanceVisibility(!0),e.scene.overrideMaterial=e.normalStandardMaterial;var i=e.renderer.getRenderTarget();e.renderer.setRenderTarget(e.normalRenderTarget),e.renderer.clear(),e.renderer.render(e.scene,e.camera),e.scene.overrideMaterial=null,e.modelManager.adjustVisibility(!0),e.modelManager.adjustInstanceVisibility(!1),e.scene.overrideMaterial=e.normalMaterial,e.renderer.render(e.scene,e.camera),e.renderer.setRenderTarget(i),e.scene.overrideMaterial=null,e.modelManager.adjustInstanceVisibility(!0),e.normalTextureFlg=!0,e.renderer.autoClear=t}return e.normalRenderTarget.texture}getDepthTexture(){var e=this;if(null==e.depthMaterial&&(e.depthMaterial=new r.CustomMeshDepthMaterial,e.depthMaterial.side=THREE.DoubleSide,e.depthMaterial.depthPacking=THREE.RGBADepthPacking,e.depthMaterial.blending=THREE.NoBlending),null==e.InstancedDepthMaterial&&(e.InstancedDepthMaterial=new r.CustomInstancedMeshDepthMaterial,e.InstancedDepthMaterial.side=THREE.DoubleSide,e.InstancedDepthMaterial.depthPacking=THREE.RGBADepthPacking,e.InstancedDepthMaterial.blending=THREE.NoBlending),null==e.depthRenderTarget&&(e.depthRenderTarget=new THREE.WebGLRenderTarget(e.width,e.height,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter})),0==e.depthTextureFlg){var t=e.renderer.autoClear;e.renderer.autoClear=!1,e.scene.overrideMaterial=e.depthMaterial,e.modelManager.adjustVisibility(!0),e.modelManager.adjustInstanceVisibility(!1);const n=r.DepthRenderPass.hideInVisibleGroup(e.scene);var i=e.renderer.getRenderTarget();e.renderer.setRenderTarget(e.depthRenderTarget),e.renderer.clear(),e.renderer.render(e.scene,e.camera),e.scene.overrideMaterial=e.InstancedDepthMaterial,e.modelManager.adjustVisibility(!1),e.modelManager.adjustInstanceVisibility(!0),r.DepthRenderPass.restoreInVisibleGroup(e.scene,n),e.renderer.render(e.scene,e.camera),e.renderer.setRenderTarget(i),e.scene.overrideMaterial=null,e.modelManager.adjustVisibility(!0),e.depthTextureFlg=!0,e.renderer.autoClear=t}return e.depthRenderTarget.texture}getTransparentDepthTexture(t=.95){var i=this;if(null==i.transparentDepthMaterial&&(i.transparentDepthMaterial=new THREE.MeshDepthMaterial,i.transparentDepthMaterial.side=THREE.DoubleSide,i.transparentDepthMaterial.depthPacking=THREE.RGBADepthPacking,i.transparentDepthMaterial.blending=THREE.NoBlending),null==i.transparentInstancedDepthMaterial&&(i.transparentInstancedDepthMaterial=new r.InstancedDepthMaterial,i.transparentInstancedDepthMaterial.side=THREE.DoubleSide,i.transparentInstancedDepthMaterial.depthPacking=THREE.RGBADepthPacking,i.transparentInstancedDepthMaterial.blending=THREE.NoBlending,i.transparentInstancedDepthMaterial.uniforms.discardAlpha.value=t),null==i.transparentDepthRenderTarget){var n=new THREE.DepthTexture;n.format=THREE.DepthStencilFormat,n.type=THREE.UnsignedInt248Type,n.minFilter=THREE.NearestFilter,n.maxFilter=THREE.NearestFilter,i.transparentDepthRenderTarget=new THREE.WebGLRenderTarget(i.width,i.height,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBAFormat,depthTexture:n,depthBuffer:!0,stencilBuffer:!1})}if(0==i.transparentDepthTextureFlg){var a=i.renderer.autoClear;i.transparentObjectTemp={},i.transparentObjectVisibleListTemp={},e.setTransparentObjectVisible(i.scene,i.camera,t,!1,i.transparentObjectTemp,i.transparentObjectVisibleListTemp);const n=r.DepthRenderPass.hideInVisibleGroup(i.scene);i.scene.overrideMaterial=i.transparentDepthMaterial,i.modelManager.adjustVisibility(!0),i.modelManager.adjustInstanceVisibility(!1);var s=i.renderer.getRenderTarget();i.renderer.setRenderTarget(i.transparentDepthRenderTarget),i.renderer.clear(),i.renderer.render(i.scene,i.camera),i.scene.overrideMaterial=i.transparentInstancedDepthMaterial,i.modelManager.adjustVisibility(!1),i.modelManager.adjustInstanceVisibility(!0),i.renderer.setRenderTarget(i.transparentDepthRenderTarget),i.renderer.render(i.scene,i.camera),i.renderer.setRenderTarget(s),e.setTransparentObjectVisible(i.scene,i.camera,t,!0,i.transparentObjectTemp,i.transparentObjectVisibleListTemp),i.modelManager.adjustVisibility(!0),r.DepthRenderPass.restoreInVisibleGroup(i.scene,n),i.scene.overrideMaterial=null,i.transparentDepthTextureFlg=!0,i.renderer.autoClear=a}return i.transparentDepthRenderTarget.depthTexture}addRingScanEffect(e){var t=this,i=new r.ScanRingPass(e.id,t,t.viewer,t.width,t.height);return i.setOpts(e),t.composerMix.insertPass(i,t.composerMix.passes.length-1),t.scanRingPassAry.push(i),i}removeRingScanEffect(e){for(var t=this,i=0;i<t.scanRingPassAry.length;i++)if(t.scanRingPassAry[i].id==e){t.scanRingPassAry.splice(i,1);for(var r=0;r<t.composerMix.passes.length;r++)t.composerMix.passes[r].id==e&&(t.composerMix.passes[r].dispose(),t.composerMix.passes.splice(r,1));return!0}return!1}checkRender(e){var t=this;let i=t.viewer.rendererManager.renderer;var r=function(){i._isCameraChanged()&&i.adjustNearFar(),t.render(),t.conventionFn(),t.requestAnimationFrameID=window.requestAnimationFrame(r)};t.snowPass.enabled||t.scanRingPassAry.length>0||t.rainPass.enabled?0==t.autoRenderFlg&&(r(),t.autoRenderFlg=!0):(t.autoRenderFlg=!1,window.cancelAnimationFrame(t.requestAnimationFrameID),t.render(),t.conventionFn())}rainEffectOpt(e){if(null!=this.rainPass)return null==e?this.rainPass.getOpts():void this.rainPass.setOpts(e)}snowEffectOpt(e){if(null!=this.snowPass)return null==e?this.snowPass.getOpts():void this.snowPass.setOpts(e)}ssaoEffectOpt(e){if(null!=this.ssaoPass)return null==e?this.ssaoPass.getOpts():void this.ssaoPass.setOpts(e)}fogEffectOpt(e){if(null!=this.fogPass)return null==e?this.fogPass.getOpts():void this.fogPass.setOpts(e)}skylineOpt(e){if(null!=this.skylinePass)return null==e?this.skylinePass.getOpts():void this.skylinePass.setOpts(e)}addGlowEffect(e){var t=this,i=new r.GlowPass(t,e.useDiffuse);return t.composerAdditive.insertPass(i,t.composerAdditive.passes.length-1),t.glowPass.push(i),i.fillColor=e.fillColor,i.intensity=e.intensity,i.spread=e.spread,i.luminosityThreshold=e.threshold,i}updateGlowEffect(e,t){var i=this;for(var r in i.selectedGlow)if(null!=i.selectedGlow[r][e]&&null!=i.selectedGlow[r][e][t])for(var n=0;n<i.glowPass.length;n++)if(i.glowPass[n].key==r){i.glowPass[n].updateSelectedObjectIds=!0;break}i.highlightoutlinePass&&i.highlightoutlinePass.updateHighLightOutlineById(e,t)}setGlowEffectById(e,t,i){var n=this,a=i.color||new THREE.Color(1,1,1),s=Math.max(Math.min(i.intensity,1),0),o=Math.max(Math.min(i.spread,5),1);let l=null==i.threshold?0:i.threshold;l=Math.max(Math.min(l,1),0);var d,h=a.r+"_"+a.g+"_"+a.b+"_"+s+"_"+o+"_"+l;if(n.removeGlowEffectById(e,t,i.useDiffuse),null==n.selectedGlow[h])n.selectedGlow[h]={},(d=n.addGlowEffect({fillColor:a,intensity:s,spread:o,useDiffuse:null!=i.useDiffuse&&i.useDiffuse,threshold:l})).key=h;else for(var c=0;c<n.glowPass.length;c++)if(n.glowPass[c].key==h){d=n.glowPass[c];break}n.selectedGlow[h][e]||(n.selectedGlow[h][e]={});c=0;for(var u=t.length;c<u;c++)i.useDiffuse?r.GlobalData.BloomCount++:r.GlobalData.GlowCount++,n.selectedGlow[h][e][t[c]]=!0;d.selectedObjectIds=n.selectedGlow[h],d.updateSelectedObjectIds=!0}_removeGlowPassByKey(e){for(var t=this,i=0;i<t.glowPass.length;i++)if(t.glowPass[i].key==e){t.glowPass.splice(i,1);for(var r=0;r<t.composerAdditive.passes.length;r++)t.composerAdditive.passes[r].key==e&&(t.composerAdditive.passes[r].dispose(),t.composerAdditive.passes.splice(r,1));return!0}return!1}removeGlowEffectById(e,t){var i=this;for(var n in i.selectedGlow)if(null!=i.selectedGlow[n][e]){for(var a,s=0;s<i.glowPass.length;s++)if(i.glowPass[s].key==n){a=i.glowPass[s];break}var o=i.selectedGlow[n][e];let h=a.useDiffuse;if(null==t){var l=Object.keys(o).length;h?r.GlobalData.BloomCount-=l:r.GlobalData.GlowCount-=l,o={}}else for(var d=0;d<t.length;d++)o[t[d]]&&(h?r.GlobalData.BloomCount--:r.GlobalData.GlowCount--,delete o[t[d]],null!=a&&(a.updateSelectedObjectIds=!0));0==Object.keys(o).length&&delete i.selectedGlow[n][e],0==Object.keys(i.selectedGlow[n]).length&&(i._removeGlowPassByKey(n),delete i.selectedGlow[n])}}}e.setTransparentObjectVisible=(t,i,r,n,a,s)=>{if(t.layers.test(i.layers))if(t.isImmediateRenderObject){const e=t.material;e.transparent&&e.opacity<r&&(t.visible=n)}else if(t.isMesh||t.isLine||t.isPoints){const e=t.material,i=t.databagId+"_"+t.uuid;if(Array.isArray(e)&&null!=t.geometry&&null!=t.geometry.groups){const s=t.geometry.groups;if(0==n&&s.length>0)for(let t=s.length-1;t>=0;t--){let n=s[t].materialIndex;n<0&&(n=Math.abs(2+n)),e[n]&&e[n].transparent&&e[n].opacity<r&&(null==a[i]&&(a[i]=[]),a[i].push(s[t]),s.splice(t,1))}else if(n&&null!=a[i]&&a[i].length>0)for(let e=a[i].length-1;e>=0;e--)s.push(a[i][e]),a[i].splice(e,1)}}for(var o=t.children,l=0,d=o.length;l<d;l++)e.setTransparentObjectVisible(o[l],i,r,n,a,s)},r.RenderEffectComposer=e}(),THREE.ShaderPass=function(e,t){THREE.Pass.call(this),this.textureID=void 0!==t?t:"tDiffuse",e instanceof THREE.ShaderMaterial?(this.uniforms=e.uniforms,this.material=e):e&&(this.uniforms=THREE.UniformsUtils.clone(e.uniforms),this.material=new THREE.ShaderMaterial({defines:e.defines||{},uniforms:this.uniforms,vertexShader:e.vertexShader,fragmentShader:e.fragmentShader})),this.camera=new THREE.OrthographicCamera(-1,1,1,-1,0,1),this.scene=new THREE.Scene,this.quad=new THREE.Mesh(new THREE.PlaneBufferGeometry(2,2),null),this.quad.frustumCulled=!1,this.scene.add(this.quad)},THREE.ShaderPass.prototype=Object.assign(Object.create(THREE.Pass.prototype),{constructor:THREE.ShaderPass,render:function(e,t,i,r,n){this.uniforms[this.textureID]&&(this.uniforms[this.textureID].value=i.texture),this.quad.material=this.material,this.renderToScreen?e.render(this.scene,this.camera):e.render(this.scene,this.camera,t,this.clear)}}),THREE.SSAOPass=function(e,t,i,n,a,s){var o=this;THREE.Pass.call(o),o.KERNEL_SIZE=32,o.shader=THREE.SSAOShader,o.uniforms=THREE.UniformsUtils.clone(o.shader.uniforms),o.material=new THREE.ShaderMaterial({defines:o.shader.defines||{},uniforms:o.uniforms,vertexShader:o.shader.vertexShader,fragmentShader:o.shader.fragmentShader}),o.renderComposer=e,o.sceneCamera=i,o.mainScene=t,o.modelManager=s,o.width=n,o.height=a,o.oldClearColor=new THREE.Color,o.oldClearAlpha=1,o.minDistance=3e-4,o.maxDistance=8e-4,o.kernelRadius=.5,o.blurKernelRadius=4,o.blurMaxRadius=10,o.blurDirectionX=new THREE.Vector2(1,0),o.blurDirectionY=new THREE.Vector2(0,1),o.blurDirectionXY=new THREE.Vector2(1,1),o.blurDirectionXY2=new THREE.Vector2(-1,-1),o.createOverlayMaterial(),o.renderTarget=new THREE.WebGLRenderTarget(o.width,o.height,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBAFormat,stencilBuffer:!0}),o.renderTarget.texture.name="SSAO.renderpass",o.enabled=!1,o.uniforms.tNoise.value=o.generateRandomKernelRotations(),o.uniforms.kernel.value=o.generateSampleKernel(),o.uniforms.minDistance.value=o.minDistance,o.uniforms.maxDistance.value=o.maxDistance,o.camera=new THREE.OrthographicCamera(-1,1,1,-1,0,1),o.scene=new THREE.Scene,o.quad=new THREE.Mesh(new THREE.PlaneBufferGeometry(2,2),null),o.quad.frustumCulled=!1,o.scene.add(o.quad),o.renderTargetSSAOBuffer=new THREE.WebGLRenderTarget(o.width,o.height,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBAFormat}),o.renderTargetSSAOBuffer.texture.name="SSAOPass.edge",o.renderTargetSSAOBuffer.texture.generateMipmaps=!1,o.separableBlurMaterial=new THREE.ShaderMaterial(r.SeperableBlurShader),o.blurMaterial=new THREE.ShaderMaterial({defines:Object.assign({},r.SSAOBlurShader.defines),uniforms:THREE.UniformsUtils.clone(r.SSAOBlurShader.uniforms),vertexShader:r.SSAOBlurShader.vertexShader,fragmentShader:r.SSAOBlurShader.fragmentShader}),o.renderTargetBlurBuffer=new THREE.WebGLRenderTarget(o.width,o.height,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBAFormat}),o.renderTargetBlurBuffer.texture.name="SSAOPass.blur",o.renderTargetBlurBuffer.texture.generateMipmaps=!1,o.renderTargetBlurBuffer1=new THREE.WebGLRenderTarget(o.width,o.height,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBAFormat}),o.renderTargetBlurBuffer1.texture.name="SSAOPass.blur1",o.renderTargetBlurBuffer1.texture.generateMipmaps=!1,o.renderTargetBlurBuffer2=new THREE.WebGLRenderTarget(o.width,o.height,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBAFormat}),o.renderTargetBlurBuffer2.texture.name="SSAOPass.blur2",o.renderTargetBlurBuffer2.texture.generateMipmaps=!1,o.renderTargetBlurBuffer3=new THREE.WebGLRenderTarget(o.width,o.height,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBAFormat}),o.renderTargetBlurBuffer3.texture.name="SSAOPass.blur3",o.renderTargetBlurBuffer3.texture.generateMipmaps=!1,o.renderTargetBlurBuffer4=new THREE.WebGLRenderTarget(o.width,o.height,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBAFormat}),o.renderTargetBlurBuffer4.texture.name="SSAOPass.blur4",o.renderTargetBlurBuffer4.texture.generateMipmaps=!1},THREE.SSAOPass.prototype=Object.create(THREE.ShaderPass.prototype),THREE.SSAOPass.prototype.generateSampleKernel=function(){for(var e,t=[],i=0;i<this.KERNEL_SIZE;i++){var r=new THREE.Vector3;r.x=2*Math.random()-1,r.y=2*Math.random()-1,r.z=Math.random()/4,r.normalize();var n=i/this.KERNEL_SIZE;n=(1-(e=n*n))*.15+e*1,r.multiplyScalar(n),t.push(r)}return t},THREE.SSAOPass.prototype.setOpts=function(e){var t=this;e&&(void 0!==e.minDistance&&null!==e.minDistance&&(t.minDistance=e.minDistance),void 0!==e.maxDistance&&null!==e.maxDistance&&(t.maxDistance=e.maxDistance),void 0!==e.kernelRadius&&null!==e.kernelRadius&&(t.kernelRadius=e.kernelRadius),void 0!==e.blurKernelRadius&&null!==e.blurKernelRadius&&(t.blurKernelRadius=e.blurKernelRadius),void 0!==e.blurMaxRadius&&null!==e.blurMaxRadius&&(t.blurMaxRadius=e.blurMaxRadius))},THREE.SSAOPass.prototype.generateRandomKernelRotations=function(){for(var e=new Float32Array(64),t=0;t<16;t++){var i=4*t;e[i]=2*Math.random()-1,e[i+1]=2*Math.random()-1,e[i+2]=2*Math.random()-1,e[i+3]=1}var r=new THREE.DataTexture(e,4,4,THREE.RGBAFormat,THREE.FloatType);return r.wrapS=THREE.RepeatWrapping,r.wrapT=THREE.RepeatWrapping,r.needsUpdate=!0,r},THREE.SSAOPass.prototype.render=function(e,t,i,r,n){var a=this,s=e.getRenderTarget();e.setRenderTarget(a.renderTarget),e.clear(),e.render(a.mainScene,a.sceneCamera),e.getClearColor(a.oldClearColor),a.oldClearAlpha=e.getClearAlpha();var o=e.autoClear;e.setClearColor(0,0),e.autoClear=!1,a.uniforms.minDistance.value=a.minDistance,a.uniforms.maxDistance.value=a.maxDistance,a.uniforms.kernelRadius.value=a.kernelRadius,a.uniforms.tDepth.value=a.renderComposer.getDepthTexture(),a.uniforms.tNormal.value=a.renderComposer.getNormalTexture(),a.setCameraUniforms(a.sceneCamera),a.uniforms.logDepthBufFC.value=2/(Math.log(a.sceneCamera.far+1)/Math.LN2),a.uniforms.viewport.value.set(0,0,e.getContext().drawingBufferWidth,e.getContext().drawingBufferHeight),a.quad.material=a.material,e.setRenderTarget(a.renderTargetSSAOBuffer),e.clear(),e.render(a.scene,a.camera),a.quad.material=a.blurMaterial,a.blurMaterial.uniforms.tDiffuse.value=a.renderTargetSSAOBuffer.texture,e.setRenderTarget(a.renderTargetBlurBuffer),e.clear(),e.render(a.scene,a.camera),a.quad.material=a.separableBlurMaterial,a.separableBlurMaterial.uniforms.kernelRadius.value=a.blurKernelRadius,a.separableBlurMaterial.defines.MAX_RADIUS=a.blurMaxRadius,a.separableBlurMaterial.uniforms.colorTexture.value=a.renderTargetSSAOBuffer.texture,a.separableBlurMaterial.uniforms.direction.value=a.blurDirectionX,e.setRenderTarget(a.renderTargetBlurBuffer1),e.clear(),e.render(a.scene,a.camera),a.separableBlurMaterial.uniforms.colorTexture.value=a.renderTargetBlurBuffer1.texture,a.separableBlurMaterial.uniforms.direction.value=a.blurDirectionY,e.setRenderTarget(a.renderTargetBlurBuffer2),e.clear(),e.render(a.scene,a.camera),a.separableBlurMaterial.uniforms.colorTexture.value=a.renderTargetBlurBuffer2.texture,a.separableBlurMaterial.uniforms.direction.value=a.blurDirectionXY,e.setRenderTarget(a.renderTargetBlurBuffer3),e.clear(),e.render(a.scene,a.camera),a.separableBlurMaterial.uniforms.colorTexture.value=a.renderTargetBlurBuffer3.texture,a.separableBlurMaterial.uniforms.direction.value=a.blurDirectionXY2,e.setRenderTarget(a.renderTargetBlurBuffer4),e.clear(),e.render(a.scene,a.camera),a.scene.overrideMaterial=a.overlayMaterial,a.overlayMaterial.uniforms.edgeTexture1.value=a.renderTargetBlurBuffer.texture,a.overlayMaterial.uniforms.edgeTexture2.value=a.renderTargetBlurBuffer4.texture,a.overlayMaterial.uniforms.maskTexture.value=a.renderTarget.texture,e.setRenderTarget(t),e.clear(),e.render(a.scene,a.camera),a.scene.overrideMaterial=null,e.setClearColor(a.oldClearColor,a.oldClearAlpha),e.autoClear=o,e.setRenderTarget(s)},THREE.SSAOPass.prototype.setCameraUniforms=function(e){var t=this;t.sceneCamera=e,t.uniforms.cameraNear.value=t.sceneCamera.near,t.uniforms.cameraFar.value=t.sceneCamera.far,t.uniforms.cameraProjection.value.copy(t.sceneCamera.projectionMatrix),t.uniforms.inverseProjection.value.copy(t.sceneCamera.projectionMatrix).invert()},THREE.SSAOPass.prototype.setSize=function(e,t){var i=this;i.width=e,i.height=t,i.renderTarget.setSize(i.width,i.height),i.renderTargetSSAOBuffer.setSize(i.width,i.height),i.renderTargetBlurBuffer.setSize(i.width,i.height),i.renderTargetBlurBuffer1.setSize(i.width,i.height),i.renderTargetBlurBuffer2.setSize(i.width,i.height),i.renderTargetBlurBuffer3.setSize(i.width,i.height),i.renderTargetBlurBuffer4.setSize(i.width,i.height),i.uniforms.resolution.value.set(i.width,i.height),i.separableBlurMaterial.uniforms.texSize.value.set(i.width,i.height),i.blurMaterial.uniforms.resolution.value.set(i.width,i.height)},THREE.SSAOPass.prototype.createOverlayMaterial=function(){this.overlayMaterial=new THREE.ShaderMaterial({uniforms:{maskTexture:{value:null},edgeTexture1:{value:null},edgeTexture2:{value:null},edgeTexture3:{value:null}},vertexShader:"\n varying vec2 vUv;\n\t\t\tvoid main() {\n\t\t\t\tvUv = uv;\n\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t}\n\t\t",fragmentShader:"\n varying vec2 vUv;\n uniform sampler2D maskTexture;\n uniform sampler2D edgeTexture1;\n uniform sampler2D edgeTexture2;\n #include <postprocess_minus_color>\n void main() {\n vec4 edgeValue1 = texture2D(edgeTexture1, vUv);\n vec4 edgeValue2 = texture2D(edgeTexture2, vUv);\n vec4 maskColor = texture2D(maskTexture, vUv);\n\n vec4 color = maskColor;\n color *= vec4(vec3(1.0 - edgeValue1.r),1.0);\n color *= vec4(vec3(1.0 - edgeValue2.r),1.0);\n gl_FragColor = postprocess_minus_color(color.rgb, maskColor.rgb);\n\t\t\t}\n\t\t"})},function(){class e extends THREE.Pass{constructor(e){super();var t=this;t.renderComposer=e,t.width=t.renderComposer.width,t.height=t.renderComposer.height,t.modelManager=t.renderComposer.modelManager,t.renderScene=t.renderComposer.scene,t.renderCamera=t.renderComposer.camera,t.selectedObjectIds={},r.GlobalData.HighLightOutlineCount=0,t.edgeStrength=10,t.visibleEdgeColor=new THREE.Color(0,1,0),t.hiddenEdgeColor=new THREE.Color(.1,.04,.02),t.intensity=.5,t.spread=1,t.defaultEdgeColor=(new THREE.Color).setHex(7733223),t.edgeColor=new THREE.Vector4(t.defaultEdgeColor.r,t.defaultEdgeColor.g,t.defaultEdgeColor.b,.95),t.edgeLength=2,t.blurDirectionX=new THREE.Vector2(1,0),t.blurDirectionY=new THREE.Vector2(0,1);var i={minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBAFormat};t.renderTargetMaskBuffer1=new THREE.WebGLRenderTarget(t.width,t.height,i),t.renderTargetMaskBuffer1.texture.name="OutlinePass.mask1",t.renderTargetMaskBuffer1.texture.generateMipmaps=!1,t.renderTargetMaskBuffer2=new THREE.WebGLRenderTarget(t.width,t.height,i),t.renderTargetMaskBuffer2.texture.name="OutlinePass.mask2",t.renderTargetMaskBuffer2.texture.generateMipmaps=!1,t.renderTargetBlurBuffer1=new THREE.WebGLRenderTarget(t.width,t.height,i),t.renderTargetBlurBuffer1.texture.name="OutlinePass.blur1",t.renderTargetBlurBuffer1.texture.generateMipmaps=!1,t.renderTargetBlurBuffer2=new THREE.WebGLRenderTarget(Math.round(t.width/2),Math.round(t.height/2),i),t.renderTargetBlurBuffer2.texture.name="OutlinePass.blur2",t.renderTargetBlurBuffer2.texture.generateMipmaps=!1,t.renderTargetEdgeBuffer1=new THREE.WebGLRenderTarget(t.width,t.height,i),t.renderTargetEdgeBuffer1.texture.name="OutlinePass.edge1",t.renderTargetEdgeBuffer1.texture.generateMipmaps=!1,t.renderTargetEdgeBuffer2=new THREE.WebGLRenderTarget(Math.round(t.width/2),Math.round(t.height/2),i),t.renderTargetEdgeBuffer2.texture.name="OutlinePass.edge2",t.renderTargetEdgeBuffer2.texture.generateMipmaps=!1,t.setEdgeDetectionMaterial(),t.separableBlurMaterial=new THREE.ShaderMaterial({defines:r.SeperableBlurShader.defines||{MAX_RADIUS:5},uniforms:THREE.UniformsUtils.clone(r.SeperableBlurShader.uniforms),vertexShader:r.SeperableBlurShader.vertexShader,fragmentShader:r.SeperableBlurShader.fragmentShader}),t.createOverlayMaterial(),t.oldClearColor=new THREE.Color,t.oldClearAlpha=1,t.camera=new THREE.OrthographicCamera(-1,1,1,-1,0,1),t.scene=new THREE.Scene,t.quad=new THREE.Mesh(new THREE.PlaneBufferGeometry(2,2),null),t.quad.frustumCulled=!1,t.scene.add(t.quad),t.prepareMaskMaterial=t.getPrepareMaskMaterial(),t.prepareMaskMaterial.side=THREE.DoubleSide,t.prepareMaskInstancedMaterial=t.getPrepareMaskInstancedMaterial(),t.prepareMaskInstancedMaterial.side=THREE.DoubleSide,t.initSelectedObjectSceneAndMaterial(),t.enabled=!1,t.setSize(),t.meshGeneratorId="outlineHighLight"}dispose(){var e=this;e.renderTargetMaskBuffer1.dispose(),e.renderTargetMaskBuffer2.dispose(),e.renderTargetEdgeBuffer1.dispose(),e.renderTargetEdgeBuffer2.dispose(),e.renderTargetBlurBuffer1.dispose(),e.renderTargetBlurBuffer2.dispose()}setSize(e,t){var i=this;null!=e&&(i.width=e),null!=t&&(i.height=t),i.renderTargetMaskBuffer1.setSize(i.width,i.height),i.renderTargetMaskBuffer2.setSize(i.width,i.height);var r=Math.round(i.width/2),n=Math.round(i.height/2);i.renderTargetEdgeBuffer1.setSize(i.width,i.height),i.renderTargetEdgeBuffer2.setSize(r,n),i.renderTargetBlurBuffer1.setSize(i.width,i.height),i.renderTargetBlurBuffer2.setSize(r,n),i.edgeDetectionMaterial.uniforms.texSize.value.set(i.width,i.height),i.separableBlurMaterial.uniforms.texSize.value.set(i.width,i.height)}initSelectedObjectSceneAndMaterial(){var e=this;e.selectedObjectScene=new THREE.Scene,e.selectedObjectScene.autoUpdate=!1,e.selectedObjectGroup=new r.ObjectGroup,e.selectedObjectGroup.name="OutlineHighLightMeshGroup",e.selectedObjectGroup.matrixAutoUpdate=!1,e.selectedObjectScene.add(e.selectedObjectGroup)}_ClearSelectedObjectScene(){this.selectedObjectGroup.clear()}_AddSelectedObjectToScene(e){let t=Object.keys(e);for(const i of t)this.selectedObjectGroup.add(e[i])}_GetSelectedObjectMeshes(e){var t=this,i={};return t.modelManager.traverseModels((function(r){var n=e[r.id];if(n){var a=Object.keys(n);r.getPickingMeshes({skinningWireframeMaterial:t.prepareMaskMaterial,skinningSelectedMaterial:t.prepareMaskMaterial,selectedLineMaterial:t.prepareMaskMaterial,selectedMaterial:t.prepareMaskMaterial,wireframeMaterial:t.prepareMaskMaterial,instancedSelectedMaterial:t.prepareMaskInstancedMaterial,instancedWireFrameMaterial:t.prepareMaskInstancedMaterial},i,a,n,t.meshGeneratorId)}})),i}_UpdateSelectedObjectSceneWorldMatrix(){this.selectedObjectGroup.matrix.copy(this.renderScene.getMatrixGlobal()),this.selectedObjectGroup.updateMatrixWorld(!0)}_UpdateSelectedObjectScene(e){var t=this;(1==t.updateSelectedObjectIds||t.modelManager.isFilterApplied()||t.renderComposer.isGis)&&(t._ClearSelectedObjectScene(),t._AddSelectedObjectToScene(t._GetSelectedObjectMeshes(e)),t.updateSelectedObjectIds=!1),this._UpdateSelectedObjectSceneWorldMatrix()}render(e,t,i,n,a,s){var o=this;if(0!==r.GlobalData.HighLightOutlineCount){o._UpdateSelectedObjectScene(o.selectedObjectIds),e.getClearColor(o.oldClearColor),o.oldClearAlpha=e.getClearAlpha();var l=e.autoClear;e.autoClear=!1,a&&e.getContext().disable(e.getContext().STENCIL_TEST),e.setClearColor(16777215,1);var d=e.getRenderTarget();e.setRenderTarget(o.renderTargetMaskBuffer1),e.clear(),e.render(o.selectedObjectScene,o.renderCamera),o.quad.material=o.edgeDetectionMaterial,o.edgeDetectionMaterial.uniforms.maskTexture.value=o.renderTargetMaskBuffer1.texture,o.edgeDetectionMaterial.uniforms.visibleEdgeColor.value=o.visibleEdgeColor,o.edgeDetectionMaterial.uniforms.hiddenEdgeColor.value=o.hiddenEdgeColor,e.setRenderTarget(o.renderTargetMaskBuffer2),e.clear(),e.render(o.scene,o.camera),o.quad.material=o.separableBlurMaterial,o.separableBlurMaterial.uniforms.kernelRadius.value=Math.sqrt(o.spread),o.separableBlurMaterial.uniforms.colorTexture.value=o.renderTargetMaskBuffer2.texture,o.separableBlurMaterial.uniforms.direction.value=o.blurDirectionX,e.setRenderTarget(o.renderTargetBlurBuffer1),e.clear(),e.render(o.scene,o.camera),o.separableBlurMaterial.uniforms.colorTexture.value=o.renderTargetBlurBuffer1.texture,o.separableBlurMaterial.uniforms.direction.value=o.blurDirectionY,e.setRenderTarget(o.renderTargetEdgeBuffer1),e.clear(),e.render(o.scene,o.camera),o.separableBlurMaterial.uniforms.kernelRadius.value=2*o.spread,o.separableBlurMaterial.uniforms.colorTexture.value=o.renderTargetEdgeBuffer1.texture,o.separableBlurMaterial.uniforms.direction.value=o.blurDirectionX,e.setRenderTarget(o.renderTargetBlurBuffer2),e.clear(),e.render(o.scene,o.camera),o.separableBlurMaterial.uniforms.colorTexture.value=o.renderTargetBlurBuffer2.texture,o.separableBlurMaterial.uniforms.direction.value=o.blurDirectionY,e.setRenderTarget(o.renderTargetEdgeBuffer2),e.clear(),e.render(o.scene,o.camera),o.quad.material=o.overlayMaterial,o.overlayMaterial.uniforms.maskTexture.value=o.renderTargetMaskBuffer1.texture,o.overlayMaterial.uniforms.edgeTexture1.value=o.renderTargetEdgeBuffer1.texture,o.overlayMaterial.uniforms.edgeTexture2.value=o.renderTargetEdgeBuffer2.texture,o.overlayMaterial.uniforms.edgeStrength.value=o.edgeStrength*o.intensity,o.overlayMaterial.uniforms.edgeGlow.value=o.spread/5,o.overlayMaterial.uniforms.firstFlg&&(o.overlayMaterial.uniforms.firstFlg.value=s?0:1),e.setRenderTarget(t),o.clear&&e.clear(),e.render(o.scene,o.camera),a&&e.state.buffers.stencil.setTest(!0),e.setClearColor(o.oldClearColor,o.oldClearAlpha),e.autoClear=l,e.setRenderTarget(d)}}createOverlayMaterial(){this.overlayMaterial=new THREE.ShaderMaterial({uniforms:{tDiffuse:{value:null},maskTexture:{value:null},edgeTexture1:{value:null},edgeTexture2:{value:null},edgeStrength:{value:1},edgeGlow:{value:1},firstFlg:{value:0}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }\n ",fragmentShader:"\n uniform sampler2D tDiffuse;\n varying vec2 vUv;\n uniform sampler2D maskTexture;\n uniform sampler2D edgeTexture1;\n uniform sampler2D edgeTexture2;\n uniform float edgeStrength;\n uniform float edgeGlow;\n uniform float firstFlg;\n\n #include <postprocess_mix_color>\n #include <postprocess_original_color>\n void main() {\n vec4 color = get_original_color(tDiffuse, vUv, firstFlg);\n vec4 edgeValue1 = texture2D(edgeTexture1, vUv);\n vec4 edgeValue2 = texture2D(edgeTexture2, vUv);\n vec4 maskColor = texture2D(maskTexture, vUv);\n\n vec4 edgeValue = edgeValue1 + edgeValue2 * edgeGlow;\n vec4 finalColor = edgeStrength * maskColor.r * edgeValue;\n gl_FragColor = mix_color(color, finalColor.rgb, finalColor.a);\n //fix BIMFACE-22520:edge.a > 0\n if(gl_FragColor.a < 0.1) gl_FragColor.a = 0.0;\n }\n "})}getPrepareMaskMaterial(){return new THREE.ShaderMaterial({uniforms:{depthTexture:{value:null},cameraNearFar:{value:new THREE.Vector2(.5,.5)},textureMatrix:{value:new THREE.Matrix4}},vertexShader:"\n varying vec2 vUv;\n \t\t\t\tvarying vec4 projTexCoord;\n \t\t\t\tvarying vec4 vPosition;\n \t\t\t\tuniform mat4 textureMatrix;\n \t\t\t\tvoid main() {\n \t\t\t\t\tvUv = uv;\n \t\t\t\t\tvPosition = modelViewMatrix * vec4( position, 1.0 );\n \t\t\t\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n \t\t\t\t\tprojTexCoord = textureMatrix * worldPosition;\n \t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n \t\t\t\t}\n\t\t\t\t",fragmentShader:"\n #include <packing>\n varying vec4 vPosition;\n \t\t\t\tvarying vec4 projTexCoord;\n \t\t\t\tuniform sampler2D depthTexture;\n \t\t\t\tuniform vec2 cameraNearFar;\n\n void main()\n {\n gl_FragColor.r = 0.0;\n gl_FragColor.g = 1.0;\n gl_FragColor.b = 0.0;\n gl_FragColor.a = 1.0;\n }\n "})}getPrepareMaskInstancedMaterial(){return new THREE.ShaderMaterial({uniforms:{depthTexture:{value:null},cameraNearFar:{value:new THREE.Vector2(.5,.5)},textureMatrix:{value:new THREE.Matrix4}},vertexShader:"\n attribute float vState;\n attribute vec4 aColor;\n attribute vec3 mcol0;\n attribute vec3 mcol1;\n attribute vec3 mcol2;\n attribute vec3 mcol3;\n #if defined(USE_MAP)\n attribute vec2 muvCol0;\n attribute vec2 muvCol1;\n attribute vec2 muvCol2;\n #endif\n\n varying float vfState;\n varying vec2 vUv;\n \t\t\t\tvarying vec4 projTexCoord;\n \t\t\t\tvarying vec4 vPosition;\n \t\t\t\tuniform mat4 textureMatrix;\n\n \t\t\t\tvec3 getInstancePosition(vec3 position) {\n return vec3(mat4(vec4(mcol0, 0.0),\n vec4(mcol1, 0.0),\n vec4(mcol2, 0.0),\n vec4(mcol3, 1.0)) * vec4(position, 1.0));\n }\n\n vec2 getInstanceUV(vec2 uv) {\n #if defined(USE_MAP)\n return vec2(mat3(vec3(muvCol0, 0.0),\n vec3(muvCol1, 0.0),\n vec3(muvCol2, 1.0)) * vec3(uv, 1.0));\n #else\n return uv;\n #endif\n }\n\n \t\t\t\tvoid main() {\n \t\t\t\t vfState = vState;\n \t\t\t\t\tvUv = uv;\n \t\t\t\t\tvPosition = vec4(getInstancePosition(position), 1.0);\n \t\t\t\t\tvec4 worldPosition = modelMatrix * vPosition;\n \t\t\t\t\tprojTexCoord = textureMatrix * worldPosition;\n gl_Position = projectionMatrix * modelViewMatrix * vPosition;\n vPosition = modelViewMatrix * vPosition;\n\t\t\t\t }\n \t\t\t",fragmentShader:"\n #include <packing>\n varying float vfState;\n varying vec2 vUv;\n varying vec4 vPosition;\n varying vec4 projTexCoord;\n uniform sampler2D depthTexture;\n uniform vec2 cameraNearFar;\n\n float linearDepth(float depth)\n {\n float far = cameraNearFar.y;\n float near = cameraNearFar.x;\n return (2.0 * near) / (far + near - depth * (far - near));\n }\n\n void main() {\n if (vfState <= -0.99 && vfState >= -1.01) discard;\n gl_FragColor.r = 0.0;\n gl_FragColor.g = 1.0;\n gl_FragColor.b = 0.0;\n gl_FragColor.a = 1.0;\n }\n "})}setEdgeDetectionMaterial(){this.edgeDetectionMaterial=new THREE.ShaderMaterial({uniforms:{maskTexture:{value:null},texSize:{value:new THREE.Vector2(.5,.5)},visibleEdgeColor:{value:new THREE.Vector3(1,1,1)},hiddenEdgeColor:{value:new THREE.Vector3(1,1,1)}},vertexShader:"\n varying vec2 vUv;\n \t\t\t\tvoid main() {\n \t\t\t\t\tvUv = uv;\n \t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n \t\t\t\t}\n\t\t\t\t",fragmentShader:"\n varying vec2 vUv;\n uniform sampler2D maskTexture;\n uniform vec2 texSize;\n uniform vec3 visibleEdgeColor;\n uniform vec3 hiddenEdgeColor;\n void main() {\n vec2 invSize = 1.0 / texSize;\n vec4 uvOffset = vec4(1.0, 0.0, 0.0, 1.0) * vec4(invSize, invSize);\n vec4 c1 = texture2D( maskTexture, vUv + uvOffset.xy);\n vec4 c2 = texture2D( maskTexture, vUv - uvOffset.xy);\n vec4 c3 = texture2D( maskTexture, vUv + uvOffset.yw);\n vec4 c4 = texture2D( maskTexture, vUv - uvOffset.yw);\n float diff1 = (c1.r - c2.r)*0.5;\n float diff2 = (c3.r - c4.r)*0.5;\n float d = length( vec2(diff1, diff2) );\n float a1 = min(c1.g, c2.g);\n float a2 = min(c3.g, c4.g);\n float visibilityFactor = min(a1, a2);\n vec3 edgeColor = visibleEdgeColor;\n gl_FragColor = vec4(edgeColor, 1.0) * vec4(d);\n }\n "})}setHighLightOutlineById(e,t,i){var n=this;n.selectedObjectIds[e]||(n.selectedObjectIds[e]={});for(var a=n.selectedObjectIds[e],s=0,o=t.length;s<o;s++)a[t[s]]||r.GlobalData.HighLightOutlineCount++,a[t[s]]=!0;n.visibleEdgeColor=i.color,n.intensity=Math.max(Math.min(i.intensity,1),0),n.spread=Math.max(Math.min(i.spread,5),1),n.updateSelectedObjectIds=!0}removeHighLightOutlineById(e,t){var i=this;i.selectedObjectIds[e]||(i.selectedObjectIds[e]={});var n=i.selectedObjectIds[e];if(null==t){var a=Object.keys(n).length;r.GlobalData.HighLightOutlineCount-=a,i.selectedObjectIds[e]={}}else for(var s=0;s<t.length;s++)n[t[s]]&&(r.GlobalData.HighLightOutlineCount--,delete n[t[s]]);i.updateSelectedObjectIds=!0}updateHighLightOutlineById(e,t){var i=this.selectedObjectIds;i[e]&&i[e][t]&&(this.updateSelectedObjectIds=!0)}}r.OutlineHighLightPass=e}(),function(){class e extends THREE.Pass{constructor(e,t){super();var i=this;i.renderComposer=e,i.width=i.renderComposer.width,i.height=i.renderComposer.height,i.modelManager=i.renderComposer.modelManager,i.renderScene=i.renderComposer.scene,i.renderCamera=i.renderComposer.camera,i.intensity=.5,i.spread=1,i.depthMaterial=new THREE.MeshDepthMaterial,i.depthMaterial.side=THREE.DoubleSide,i.depthMaterial.depthPacking=THREE.RGBADepthPacking,i.depthMaterial.blending=THREE.NoBlending,i.instancedDepthMaterial=new r.InstancedDepthMaterial,i.instancedDepthMaterial.side=THREE.DoubleSide,i.instancedDepthMaterial.depthPacking=THREE.RGBADepthPacking,i.instancedDepthMaterial.blending=THREE.NoBlending;var n=new THREE.DepthTexture;n.format=THREE.DepthStencilFormat,n.type=THREE.UnsignedInt248Type,n.minFilter=THREE.NearestFilter,n.maxFilter=THREE.NearestFilter,i.selectDepthRenderTarget=new THREE.WebGLRenderTarget(i.width,i.height,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBAFormat,depthTexture:n,depthBuffer:!0,stencilBuffer:!1}),i.setFillColorMaterial(),i.fillColorMaterial.uniforms.SelectObjDepthTexture.value=i.selectDepthRenderTarget.depthTexture,i.fillColorMaterial.uniforms.diffuseMap.value=i.selectDepthRenderTarget.texture,t&&(i.fillColorMaterial.defines.USE_DIFFUSEMAP=""),i.QuadCamera=new THREE.OrthographicCamera(-1,1,1,-1,0,1),i.ScreenQuad=new THREE.Scene,i.quad=new THREE.Mesh(new THREE.PlaneBufferGeometry(2,2),null),i.quad.frustumCulled=!1,i.ScreenQuad.add(i.quad),i.GlowRenderTarget=new THREE.WebGLRenderTarget(i.width,i.height,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBAFormat}),i.GlowRenderTarget.texture.generateMipmaps=!1,i.fillColor=new THREE.Color(1,0,0),i.selectedObjectIds={},i.blurDirectionX=new THREE.Vector2(1,0),i.blurDirectionY=new THREE.Vector2(0,1);var a={minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBAFormat},s=Math.round(i.width/2),o=Math.round(i.height/2);this.renderTargetsHorizontal=[],this.renderTargetsVertical=[],this.nMips=5;var l=[3,5,7,9,11];this.separableBlurMaterials=[];for(var d=0;d<this.nMips;d++){var h=new THREE.WebGLRenderTarget(s,o,a);h.texture.name="UnrealBloomPass.h"+d,h.texture.generateMipmaps=!1,this.renderTargetsHorizontal.push(h);var c=new THREE.WebGLRenderTarget(s,o,a);c.texture.name="UnrealBloomPass.v"+d,c.texture.generateMipmaps=!1,this.renderTargetsVertical.push(c),this.separableBlurMaterials.push(this.getSeperableBlurMaterial(l[d])),this.separableBlurMaterials[d].uniforms.texSize.value=new THREE.Vector2(s,o),s=Math.round(s/2),o=Math.round(o/2)}i.createOverlayMaterial(),i.overlayMaterial.uniforms.blurTexture0.value=this.renderTargetsVertical[0].texture,i.overlayMaterial.uniforms.blurTexture1.value=this.renderTargetsVertical[1].texture,i.overlayMaterial.uniforms.blurTexture2.value=this.renderTargetsVertical[2].texture,i.overlayMaterial.uniforms.blurTexture3.value=this.renderTargetsVertical[3].texture,i.overlayMaterial.uniforms.blurTexture4.value=this.renderTargetsVertical[4].texture,i.enabled=!1,i.oldClearColor=new THREE.Color,i.oldClearAlpha=1,i.initSelectedObjectSceneAndMaterial(),i.meshGeneratorId="glow",i._renderIndex=-1,i.useDiffuse=t,i.luminosityThreshold=0}dispose(){this.GlowRenderTarget.dispose(),this.selectDepthRenderTarget.dispose();for(var e=0;e<this.nMips;e++)this.renderTargetsHorizontal[e].dispose(),this.renderTargetsVertical[e].dispose()}setSize(e,t){var i=this;i.width=e,i.height=t,i.GlowRenderTarget.setSize(e,t),i.selectDepthRenderTarget.setSize(e,t);for(var r=Math.round(i.width/2),n=Math.round(i.height/2),a=0;a<this.nMips;a++)this.renderTargetsHorizontal[a].setSize(r,n),this.renderTargetsVertical[a].setSize(r,n),this.separableBlurMaterials[a].uniforms.texSize.value=new THREE.Vector2(r,n),r=Math.round(r/2),n=Math.round(n/2)}initSelectedObjectSceneAndMaterial(){var e=this;e.selectedObjectScene=new THREE.Scene,e.selectedObjectScene.autoUpdate=!1,e.selectedObjectGroup=new r.ObjectGroup,e.selectedObjectGroup.name="GlowMeshGroup",e.selectedObjectGroup.matrixAutoUpdate=!1,e.selectedObjectScene.add(e.selectedObjectGroup)}_ClearSelectedObjectScene(){this.selectedObjectGroup.clear()}_AddSelectedObjectToScene(e){let t=Object.keys(e);for(const i of t)this.selectedObjectGroup.add(e[i])}_GetSelectedObjectMeshes(e){var t=this,i={};return t.modelManager.traverseModels((function(r){let n=e[r.id];if(!n)return;var a=Object.keys(n);let s=t.useDiffuse?{}:{skinningWireframeMaterial:t.depthMaterial,skinningSelectedMaterial:t.depthMaterial,selectedLineMaterial:t.depthMaterial,selectedMaterial:t.depthMaterial,wireframeMaterial:t.depthMaterial,instancedSelectedMaterial:t.instancedDepthMaterial,instancedWireFrameMaterial:t.instancedDepthMaterial};r.getPickingMeshes(s,i,a,n,t.meshGeneratorId+t.renderIndex)})),i}_UpdateSelectedObjectSceneWorldMatrix(){this.selectedObjectGroup.matrix.copy(this.renderScene.getMatrixGlobal()),this.selectedObjectGroup.updateMatrixWorld(!0)}_UpdateSelectedObjectScene(e){var t=this;(1==t.updateSelectedObjectIds||t._renderIndex!=t.renderIndex||t.modelManager.isFilterApplied()||t.renderComposer.isGis)&&(t._renderIndex=t.renderIndex,t._ClearSelectedObjectScene(),t._AddSelectedObjectToScene(t._GetSelectedObjectMeshes(e)),t.updateSelectedObjectIds=!1),t._UpdateSelectedObjectSceneWorldMatrix()}render(e,t,i,r,n,a){var s=this;s._UpdateSelectedObjectScene(s.selectedObjectIds),e.autoClear=!1;var o=e.getRenderTarget();e.setRenderTarget(s.selectDepthRenderTarget),e.clear(),s._dealDepthWrite(),e.render(s.selectedObjectScene,s.renderCamera),s._rescoverDepthWrite(),s.fillColorMaterial.uniforms.cameraNear.value=s.renderCamera.near,s.fillColorMaterial.uniforms.cameraFar.value=s.renderCamera.far,s.fillColorMaterial.uniforms.fillColor.value=s.fillColor,s.fillColorMaterial.uniforms.luminosityThreshold.value=s.luminosityThreshold,s.fillColorMaterial.uniforms.scenDepthTexture.value=s.renderComposer.getTransparentDepthTexture(),s.quad.material=s.fillColorMaterial,e.setRenderTarget(s.GlowRenderTarget),e.clear(),e.render(s.ScreenQuad,s.QuadCamera);for(var l=this.GlowRenderTarget,d=0;d<this.nMips;d++)this.quad.material=this.separableBlurMaterials[d],this.separableBlurMaterials[d].uniforms.colorTexture.value=l.texture,this.separableBlurMaterials[d].uniforms.direction.value=s.blurDirectionX,e.setRenderTarget(this.renderTargetsHorizontal[d]),e.clear(),e.render(s.ScreenQuad,s.QuadCamera),this.separableBlurMaterials[d].uniforms.colorTexture.value=this.renderTargetsHorizontal[d].texture,this.separableBlurMaterials[d].uniforms.direction.value=s.blurDirectionY,e.setRenderTarget(this.renderTargetsVertical[d]),e.clear(),e.render(s.ScreenQuad,s.QuadCamera),l=this.renderTargetsVertical[d];s.overlayMaterial.uniforms.firstFlg.value=a?0:1,s.overlayMaterial.uniforms.sceneTexture.value=i.texture,s.overlayMaterial.uniforms.bloomStrength.value=s.useDiffuse?2*s.intensity:s.intensity,s.overlayMaterial.uniforms.bloomRadius.value=s.spread/5,s.quad.material=s.overlayMaterial,e.setRenderTarget(t),s.clear&&e.clear(),e.render(s.ScreenQuad,s.QuadCamera),e.setRenderTarget(o)}_dealDepthWrite(){let e=this.selectedObjectScene.getObjectByName("PickingExternalMeshGroup");if(e){var t=e.children;for(let e=0;e<t.length;e++)t[e].material&&0==t[e].material.depthWrite&&(t[e].material.depthWrite=!0,t[e].material.originDepthWrite=!1)}}_rescoverDepthWrite(){let e=this.selectedObjectScene.getObjectByName("PickingExternalMeshGroup");if(e){var t=e.children;for(let e=0;e<t.length;e++)t[e].material&&0==t[e].material.originDepthWrite&&(t[e].material.depthWrite=!1)}}setFillColorMaterial(){this.fillColorMaterial=new THREE.ShaderMaterial({defines:{},uniforms:{scenDepthTexture:{value:null},SelectObjDepthTexture:{value:null},cameraNear:{value:1},cameraFar:{value:100},fillColor:{value:new THREE.Vector3(1,1,1)},diffuseMap:{value:null},luminosityThreshold:{value:0}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }\n ",fragmentShader:"\n varying vec2 vUv;\n #include <common>\n #include <packing>\n uniform sampler2D scenDepthTexture;\n uniform sampler2D SelectObjDepthTexture;\n #ifdef USE_DIFFUSEMAP\n uniform sampler2D diffuseMap;\n #endif\n uniform vec3 fillColor;\n uniform float cameraNear;\n uniform float cameraFar;\n\n uniform float luminosityThreshold;\n float smoothWidth = 0.01;\n const vec4 defaultColor = vec4(0.0, 0.0, 0.0, 0.0);\n float getViewZ( const in float depth )\n {\n return perspectiveDepthToViewZ( depth, cameraNear, cameraFar );\n }\n void main() {\n float sceneDepthNDC = texture2D(scenDepthTexture, vUv).x;\n float selectObjDepthNDC = texture2D(SelectObjDepthTexture, vUv).x;\n float sceneDepth = getViewZ(sceneDepthNDC);\n float selectObjDepth = getViewZ(selectObjDepthNDC);\n if((sceneDepthNDC == 1.0 && selectObjDepthNDC != 1.0) ||\n (sceneDepth - selectObjDepth < 0.0001 && selectObjDepthNDC != 1.0) )\n {\n #ifdef USE_DIFFUSEMAP\n vec4 color = texture2D(diffuseMap, vUv);\n vec3 luma = vec3( 0.299, 0.587, 0.114 );\n float v = dot( color.xyz, luma );\n float alpha = smoothstep( luminosityThreshold, luminosityThreshold + smoothWidth, v );\n gl_FragColor = mix( defaultColor, color * 2.0, alpha );\n #else\n gl_FragColor = vec4(fillColor.xyz, 1.0);\n #endif\n \n }\n else\n {\n gl_FragColor = vec4(0.0,0.0,0.0,0.0);\n }\n }\n ",depthTest:!1,depthWrite:!1,transparent:!0})}getSeperableBlurMaterial(e){return new THREE.ShaderMaterial({defines:{KERNEL_RADIUS:e,SIGMA:e},uniforms:{colorTexture:{value:null},texSize:{value:new THREE.Vector2(.5,.5)},direction:{value:new THREE.Vector2(.5,.5)}},vertexShader:"varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:"#include <common>\n varying vec2 vUv;\n uniform sampler2D colorTexture;\n uniform vec2 texSize;\n uniform vec2 direction;\n \n float gaussianPdf(in float x, in float sigma) {\n return 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma;\n }\n void main() {\n vec2 invSize = 1.0 / texSize;\n float fSigma = float(SIGMA);\n float weightSum = gaussianPdf(0.0, fSigma);\n vec3 diffuseSum = texture2D( colorTexture, vUv).rgb * weightSum;\n for( int i = 1; i < KERNEL_RADIUS; i ++ ) {\n float x = float(i);\n float w = gaussianPdf(x, fSigma);\n vec2 uvOffset = direction * invSize * x;\n vec3 sample1 = texture2D( colorTexture, vUv + uvOffset).rgb;\n vec3 sample2 = texture2D( colorTexture, vUv - uvOffset).rgb;\n diffuseSum += (sample1 + sample2) * w;\n weightSum += 2.0 * w;\n }\n gl_FragColor = vec4(diffuseSum/weightSum, 1.0);\n }"})}createOverlayMaterial(){this.overlayMaterial=new THREE.ShaderMaterial({defines:{NUM_MIPS:5},uniforms:{sceneTexture:{value:null},firstFlg:{value:0},blurTexture0:{value:null},blurTexture1:{value:null},blurTexture2:{value:null},blurTexture3:{value:null},blurTexture4:{value:null},bloomStrength:{value:.5},bloomRadius:{value:1}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }\n ",fragmentShader:"\n varying vec2 vUv;\n uniform float firstFlg;\n uniform sampler2D sceneTexture;\n\n uniform sampler2D blurTexture0;\n uniform sampler2D blurTexture1;\n uniform sampler2D blurTexture2;\n uniform sampler2D blurTexture3;\n uniform sampler2D blurTexture4;\n\n uniform float bloomStrength;\n uniform float bloomRadius;\n const vec3 bloomTintColor = vec3(1.0,1.0,1.0);\n \n float lerpBloomFactor(const in float factor) { \n float mirrorFactor = 1.2 - factor;\n return mix(factor, mirrorFactor, bloomRadius);\n }\n\n #include <postprocess_original_color>\n #include <postprocess_mix_minus_color>\n #include <postprocess_minus_color>\n void main() {\n vec4 sceneColor = get_original_color(sceneTexture, vUv, firstFlg);\n\n vec4 finalColor = bloomStrength * ( lerpBloomFactor(1.0) * vec4(bloomTintColor, 1.0) * texture2D(blurTexture0, vUv) \n +lerpBloomFactor(0.8) * vec4(bloomTintColor, 1.0) * texture2D(blurTexture1, vUv) \n +lerpBloomFactor(0.6) * vec4(bloomTintColor, 1.0) * texture2D(blurTexture2, vUv) \n +lerpBloomFactor(0.4) * vec4(bloomTintColor, 1.0) * texture2D(blurTexture3, vUv) \n +lerpBloomFactor(0.2) * vec4(bloomTintColor, 1.0) * texture2D(blurTexture4, vUv));\n \n if(finalColor.r==0.0 && finalColor.g==0.0 && finalColor.b==0.0){\n gl_FragColor = sceneColor;\n }else{\n vec3 rgb = postprocess_mix_minus_color(sceneColor, finalColor.rgb);\n gl_FragColor.rgba = postprocess_minus_color(rgb,vec3(0.0));\n }\n }\n "})}}r.GlowPass=e}(),r.SSAOBlurShader={uniforms:{tDiffuse:{value:null},resolution:{value:new THREE.Vector2}},vertexShader:["varying vec2 vUv;","void main() {"," vUv = uv;"," gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n"),fragmentShader:["uniform sampler2D tDiffuse;","uniform vec2 resolution;","varying vec2 vUv;","void main() {"," vec2 texelSize = ( 1.0 / resolution );"," float result = 0.0;"," for ( int i = - 2; i <= 2; i ++ ) {"," for ( int j = - 2; j <= 2; j ++ ) {"," vec2 offset = ( vec2( float( i ), float( j ) ) ) * texelSize;"," result += texture2D( tDiffuse, vUv + offset ).r;"," }"," }"," gl_FragColor = vec4( vec3( result / ( 5.0 * 5.0 ) ), 1.0 );","}"].join("\n")},r.BackgroundShader={uniforms:{mbTexture:{value:null},abTexture:{value:null},isAdditive:{value:0}},vertexShader:["varying vec2 v_textureCoordinates;","void main() {"," v_textureCoordinates = uv;"," gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n"),fragmentShader:"\n uniform sampler2D mbTexture;\n uniform sampler2D abTexture;\n uniform float isAdditive;\n varying vec2 v_textureCoordinates;\n\n void main(void){\n vec4 abcolor = texture2D( abTexture, v_textureCoordinates );\n vec4 mbcolor = texture2D( mbTexture, v_textureCoordinates );\n vec4 color=vec4(0.0);\n if(isAdditive>0.0){\n if(abcolor.a==0.0 && abcolor.r!=0.0 && abcolor.g!=0.0 && abcolor.b!=0.0){\n color = vec4(abcolor.r,abcolor.g,abcolor.b,1.0);\n }else{\n color = abcolor;\n }\n }\n if(mbcolor.a >0.0){\n color = vec4(color.r/mbcolor.a+mbcolor.r*mbcolor.a, color.g/mbcolor.a+mbcolor.g*mbcolor.a, color.b/mbcolor.a+mbcolor.b*mbcolor.a, mbcolor.a);\n }else{\n if(color.a == 1.0){\n color = vec4(color.r, color.g, color.b, 0.0);\n }\n }\n gl_FragColor = color;\n }\n "},r.FogShader={uniforms:{tDiffuse:{value:null},depthTexture:{value:null},darkness:{value:0},fogColor:{value:new THREE.Vector3},visualDistance:{value:0},cameraNear:{value:0},cameraFar:{value:0},lightAttenuation:{value:0},firstFlg:{value:0},logDepthBufFC:{value:0}},vertexShader:["varying vec2 v_textureCoordinates;","void main() {"," v_textureCoordinates = uv;"," gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n"),fragmentShader:["uniform sampler2D tDiffuse;","uniform sampler2D depthTexture;","uniform float firstFlg;","uniform float lightAttenuation;","uniform float darkness;","uniform vec3 fogColor;","uniform float visualDistance;","varying vec2 v_textureCoordinates;","#include <packing>","#include <logdepthbuf_pars_fragment>","#include <depth_parse_fragment>","#include <postprocess_mix_color>","#include <postprocess_original_color>","void main(void){"," vec4 color = get_original_color(tDiffuse, v_textureCoordinates, firstFlg);"," vec4 depthColor = texture2D(depthTexture, v_textureCoordinates);"," float depth = unpackRGBAToDepth(depthColor);"," float viewZ = getViewZ(depth);"," if (depth == 0.0) {depth = 1.0;}"," if(depth>0.0) {"," float param = 1.0- exp(-lightAttenuation*(-viewZ)/(visualDistance ));"," color = mix_color(color, fogColor, param) ;"," }"," gl_FragColor = mix_color(color, vec3(0), darkness); ","}"].join("\n")},r.RainShader={uniforms:{tDiffuse:{value:null},darkness:{value:.5},density:{value:1},frameNumber:{value:0},viewport:{value:new THREE.Vector4(1,1,1,1)},firstFlg:{value:0}},vertexShader:["varying vec2 v_textureCoordinates;","void main() {"," v_textureCoordinates = uv;"," gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n"),fragmentShader:["uniform vec4 viewport;","varying vec2 v_textureCoordinates;","uniform sampler2D tDiffuse;","uniform float firstFlg;","uniform float frameNumber;","uniform float darkness;","uniform float density;","float hash(float x) {"," return fract(sin(x * 133.3) * 13.13);","}","vec3 rain(vec2 uv, float d){"," float time = frameNumber / (100.*(1.+0.3*d));"," vec3 c = vec3(.6, .7, .8);"," float a = .05;"," float si = sin(a), co = cos(a);"," uv *= mat2(co, -si, si, co);"," uv *= length(uv + vec2(0, 4.9)) * .3 + 0.5;"," float v = 1.0 - sin(hash(floor(uv.x * 150.)) * 2.);"," float b = clamp(abs(sin(20. * time * v + uv.y * ((10.-d*2.) / (2. + v)))) - .95, 0., 1.) * (8.+d/2.);"," c *= v * b;"," if(d==2.0 && (v<0.3||v>0.7)){"," c=vec3(0.0);"," }"," if(d==1.0 && (v<0.33||v>0.4)){"," c=vec3(0.0);"," }"," return c;","}","#include <postprocess_mix_color>","#include <postprocess_original_color>","void main(void){"," vec4 color = get_original_color(tDiffuse, v_textureCoordinates, firstFlg);"," vec2 resolution = viewport.zw;"," vec2 uv=(gl_FragCoord.xy*2.-resolution.xy)/min(resolution.x,resolution.y);"," vec3 rColor = vec3(0.0);"," if(density>0.0) {"," rColor = rain(uv,density); "," }"," gl_FragColor = mix_color(color, rColor, darkness); ","}"].join("\n")},THREE.SSAOShader={uniforms:{tDepth:{value:null},tNoise:{value:null},resolution:{value:new THREE.Vector2},cameraNear:{value:1},cameraFar:{value:100},cameraProjection:{value:new THREE.Matrix4},inverseProjection:{value:new THREE.Matrix4},kernelRadius:{value:8},tNormal:{value:null},kernel:{value:null},minDistance:{value:.005},maxDistance:{value:.05},viewport:{value:new THREE.Vector4},logDepthBufFC:{value:0}},vertexShader:["varying vec2 vUv;","void main() {","vUv = uv;","gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n"),fragmentShader:["#include <packing>","#include <logdepthbuf_pars_fragment>","#include <depth_parse_fragment>","#define KERNEL_SIZE 32","varying vec2 vUv;","uniform sampler2D tNormal;","uniform sampler2D tDepth;","uniform sampler2D tNoise;","uniform vec2 resolution;","uniform float kernelRadius;","uniform float minDistance;","uniform float maxDistance;","uniform vec3 kernel[ KERNEL_SIZE ];","float getDepth( const in vec2 screenPosition ) {"," vec4 depthColor = texture2D(tDepth, screenPosition);"," return unpackRGBAToDepth(depthColor);","}","vec3 getViewNormal( const in vec2 screenPosition ) {","\treturn unpackRGBToNormal( texture2D( tNormal, screenPosition ).xyz );","}","float getLinearDepth( const in vec2 screenPosition ) {"," float fragCoordZ = getDepth( screenPosition );"," float viewZ = getViewZ( fragCoordZ );"," return viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );","}","void main() {","\tfloat depth = getDepth( vUv );"," if(depth == 0.0) {"," gl_FragColor = vec4( 0.0 );"," return;"," }"," vec3 viewPosition = getViewPosition(depth);","\tvec3 viewNormal = getViewNormal( vUv );"," vec2 noiseScale = vec2( resolution.x/4.0 , resolution.y/4.0 );"," vec3 random = texture2D( tNoise, vUv * noiseScale ).xyz;"," vec3 tangent = normalize( random - viewNormal * dot( random, viewNormal ) );"," vec3 bitangent = cross( viewNormal, tangent );"," mat3 kernelMatrix = mat3( tangent, bitangent, viewNormal );"," float occlusion = 0.0;"," for ( int i = 0; i < KERNEL_SIZE; i ++ ) {","\t\tvec3 sampleVector = (kernelMatrix * kernel[ i ]);","\t\tvec3 samplePoint = viewPosition + ( sampleVector * kernelRadius );","\t\tvec4 samplePointNDC = cameraProjection * vec4( samplePoint, 1.0 );","\t\tsamplePointNDC /= samplePointNDC.w;","\t\tvec2 samplePointUv = samplePointNDC.xy * 0.5 + 0.5;"," float _depth = getDepth( samplePointUv );"," if(_depth == 0.0 )"," {"," continue;"," }","\t\tfloat realDepth = getLinearDepth( samplePointUv );"," float sampleDepth = viewZToOrthographicDepth( samplePoint.z, cameraNear, cameraFar );","\t\tfloat delta = sampleDepth - realDepth;"," float delta2 = realDepth - sampleDepth;","\t\tif (delta > minDistance && delta < maxDistance)","\t\t{","\t\t\tocclusion += 1.0;","\t\t}"," if (delta2 > minDistance && delta2 < 1.0)"," {"," occlusion -= 0.5;"," }"," }"," occlusion = clamp( occlusion / float( KERNEL_SIZE ), 0.0, 1.0 );"," if(occlusion > 0.04)"," {"," occlusion = 0.04 + occlusion/3.0;"," }"," gl_FragColor = vec4( vec3( occlusion ), 1.0 );","}"].join("\n")},r.SeperableBlurShader={defines:{MAX_RADIUS:1},uniforms:{colorTexture:{value:null},texSize:{value:new THREE.Vector2(.5,.5)},direction:{value:new THREE.Vector2(.5,.5)},kernelRadius:{value:1}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }\n ",fragmentShader:"\n #include <common>\n varying vec2 vUv;\n uniform sampler2D colorTexture;\n uniform vec2 texSize;\n uniform vec2 direction;\n uniform float kernelRadius;\n\n float gaussianPdf(in float x, in float sigma) {\n return 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma;\n }\n void main() {\n vec4 orginColor = texture2D( colorTexture, vUv);\n vec2 invSize = 1.0 / texSize;\n float weightSum = gaussianPdf(0.0, kernelRadius);\n vec4 diffuseSum = orginColor * weightSum;\n vec2 delta = direction * invSize * kernelRadius/float(MAX_RADIUS);\n vec2 uvOffset = delta;\n for( int i = 1; i <= MAX_RADIUS; i ++ ) {\n float w = gaussianPdf(uvOffset.x, kernelRadius);\n vec4 sample1 = texture2D( colorTexture, vUv + uvOffset);\n vec4 sample2 = texture2D( colorTexture, vUv - uvOffset);\n diffuseSum += ((sample1 + sample2) * w);\n weightSum += (2.0 * w);\n uvOffset += delta;\n }\n gl_FragColor = diffuseSum/weightSum;\n }\n "},r.FogPass=function(e,t,i,n,a){var s=this;THREE.Pass.call(s),s.renderComposer=e,s.shader=r.FogShader,s.darkness=.1,s.lightAttenuation=.5,s.visualDistance=5e4,s.fogColor=new THREE.Vector3(1,1,1),s.uniforms=THREE.UniformsUtils.clone(s.shader.uniforms),s.material=new THREE.ShaderMaterial({defines:s.shader.defines||{},uniforms:s.uniforms,vertexShader:s.shader.vertexShader,fragmentShader:s.shader.fragmentShader}),s.camera=i,s.scene=t,s.postCamera=new THREE.OrthographicCamera(-1,1,1,-1,0,1),s.postScene=new THREE.Scene,s.quad=new THREE.Mesh(new THREE.PlaneBufferGeometry(2,2),s.material),s.quad.frustumCulled=!1,s.postScene.add(s.quad),s.enabled=!1},r.FogPass.prototype=Object.assign(Object.create(THREE.Pass.prototype),{constructor:r.FogPass,setOpts:function(e){var t=this;e&&(void 0!==e.darkness&&null!==e.darkness&&(t.darkness=e.darkness),void 0!==e.visualDistance&&null!==e.visualDistance&&(t.visualDistance=e.visualDistance),void 0!==e.lightAttenuation&&null!==e.lightAttenuation&&(t.lightAttenuation=e.lightAttenuation),void 0!==e.fogColor&&null!==e.fogColor&&(t.fogColor=new THREE.Vector3(e.fogColor.r,e.fogColor.g,e.fogColor.b)))},getOpts:function(){var e=this;return{darkness:e.darkness,visualDistance:e.visualDistance,lightAttenuation:e.lightAttenuation,fogColor:new THREE.Color(e.fogColor.x,e.fogColor.y,e.fogColor.z)}},render:function(e,t,i,r,n,a){var s=this;null!=s.camera&&null!=s.scene&&(s.uniforms.cameraNear.value=s.camera.near,s.uniforms.cameraFar.value=s.camera.far,s.uniforms.depthTexture.value=s.renderComposer.getDepthTexture(),s.uniforms.logDepthBufFC.value=2/(Math.log(s.camera.far+1)/Math.LN2)),s.uniforms.fogColor.value=s.fogColor,s.uniforms.visualDistance.value=s.visualDistance,s.uniforms.darkness.value=s.darkness,s.uniforms.lightAttenuation.value=s.lightAttenuation,s.uniforms.tDiffuse&&(s.uniforms.tDiffuse.value=i.texture),s.uniforms.firstFlg&&(s.uniforms.firstFlg.value=a?0:1),s.quad.material=s.material;var o=e.getRenderTarget();e.setRenderTarget(t),s.clear&&e.clear(),e.render(s.postScene,s.postCamera),e.setRenderTarget(o)},dispose:function(){},setSize(e,t){}}),r.SkylinePass=function(e,t,i,n,a){var s=this;THREE.Pass.call(s),s.renderComposer=e,s.shader=r.SkylineShader,s.skylineColor=new THREE.Vector3(1,0,0),s.skylineWidth=1,s.uniforms=THREE.UniformsUtils.clone(s.shader.uniforms),s.material=new THREE.ShaderMaterial({defines:s.shader.defines||{},uniforms:s.uniforms,vertexShader:s.shader.vertexShader,fragmentShader:s.shader.fragmentShader}),s.camera=i,s.scene=t,s.postCamera=new THREE.OrthographicCamera(-1,1,1,-1,0,1),s.postScene=new THREE.Scene,s.quad=new THREE.Mesh(new THREE.PlaneBufferGeometry(2,2),s.material),s.quad.frustumCulled=!1,s.postScene.add(s.quad),s.copyMaterial=new THREE.ShaderMaterial({uniforms:THREE.UniformsUtils.clone(THREE.CopyShader.uniforms),vertexShader:THREE.CopyShader.vertexShader,fragmentShader:THREE.CopyShader.fragmentShader,transparent:!0}),s.enabled=!1},r.SkylinePass.prototype=Object.assign(Object.create(THREE.Pass.prototype),{constructor:r.SkylinePass,setOpts:function(e){e&&(void 0!==e.skylineColor&&null!==e.skylineColor&&(this.skylineColor=new THREE.Vector3(e.skylineColor.r,e.skylineColor.g,e.skylineColor.b)),void 0!==e.skylineWidth&&null!==e.skylineWidth&&(this.skylineWidth=e.skylineWidth))},getOpts:function(){var e=this;return{skylineColor:new THREE.Color(e.skylineColor.x,e.skylineColor.y,e.skylineColor.z),skylineWidth:e.skylineWidth}},render:function(e,t,i,r,n,a){var s=this;let o=e.autoClear;e.autoClear=!1,null!=s.camera&&null!=s.scene&&(s.uniforms.cameraNear.value=s.camera.near,s.uniforms.cameraFar.value=s.camera.far,s.uniforms.depthTexture.value=s.renderComposer.getDepthTexture(),s.uniforms.logDepthBufFC.value=2/(Math.log(s.camera.far+1)/Math.LN2)),s.uniforms.skylineColor.value.set(s.skylineColor.x,s.skylineColor.y,s.skylineColor.z),s.uniforms.skylineWidth.value=s.skylineWidth,s.uniforms.viewport.value.set(0,0,e.getContext().drawingBufferWidth,e.getContext().drawingBufferHeight);var l=e.getRenderTarget();e.setRenderTarget(t),s.clear&&e.clear(),s.quad.material=s.material,e.render(s.postScene,s.postCamera),s.copyMaterial.uniforms.tDiffuse.value=i.texture,s.quad.material=s.copyMaterial,e.render(s.postScene,s.postCamera),e.setRenderTarget(l),e.autoClear=o},dispose:function(){},setSize(e,t){}}),r.SkylineShader={uniforms:{depthTexture:{value:null},skylineColor:{value:new THREE.Vector3},skylineWidth:{value:1},cameraNear:{value:0},cameraFar:{value:0},logDepthBufFC:{value:0},viewport:{value:new THREE.Vector4}},vertexShader:["varying vec2 v_textureCoordinates;","void main() {"," v_textureCoordinates = uv;"," gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n"),fragmentShader:[" \n uniform sampler2D depthTexture;\n uniform vec3 skylineColor;\n uniform float cameraNear;\n uniform float cameraFar;\n uniform vec4 viewport;\n uniform float skylineWidth;\n varying vec2 v_textureCoordinates;\n\n #include <packing>\n #include <logdepthbuf_pars_fragment>\n\n float getDepth(in vec4 depthColor){\n float result = unpackRGBAToDepth(depthColor);\n if (result == 0.0) {\n return 1.0;\n }\n\n return result;\n }\n bool isSkyline(vec2 uv,float pixelWidth){\n vec2 pixelSize = pixelWidth / viewport.zw;\n float dx0 = -pixelSize.x;\n float dy0 = -pixelSize.y;\n float dx1 = pixelSize.x;\n float dy1 = pixelSize.y;\n\n vec2 currUV = uv + vec2(dx0, dy0);\n vec4 depthColor = texture2D(depthTexture, currUV);\n float depth = getDepth(depthColor);\n if(depth>=1.0)return true;\n\n currUV = uv + vec2(0.0, dy0);\n depthColor = texture2D(depthTexture, currUV);\n depth = getDepth(depthColor);\n if(depth>=1.0)return true;\n\n currUV = uv + vec2(dx1, dy0);\n depthColor = texture2D(depthTexture, currUV);\n depth = getDepth(depthColor);\n if(depth>=1.0)return true;\n\n currUV = uv + vec2(dx0, 0.0);\n depthColor = texture2D(depthTexture, currUV);\n depth = getDepth(depthColor);\n if(depth>=1.0)return true;\n\n currUV = uv + vec2(dx1, 0.0);\n depthColor = texture2D(depthTexture, currUV);\n depth = getDepth(depthColor);\n if(depth>=1.0)return true;\n\n currUV = uv + vec2(dx0, dy1);\n depthColor = texture2D(depthTexture, currUV);\n depth = getDepth(depthColor);\n if(depth>=1.0)return true;\n\n currUV = uv + vec2(0.0, dy1);\n depthColor = texture2D(depthTexture, currUV);\n depth = getDepth(depthColor);\n if(depth>=1.0)return true;\n\n currUV = uv + vec2(dx1, dy1);\n depthColor = texture2D(depthTexture, currUV);\n depth = getDepth(depthColor);\n if(depth>=1.0)return true;\n\n return false;\n }\n\n void main(void){\n vec4 depthColor = texture2D(depthTexture, v_textureCoordinates);\n float depth = getDepth(depthColor);\n if (depth >= 1.0) {\n gl_FragColor = vec4(0.0); \n return;\n }\n bool skyline = isSkyline(v_textureCoordinates, skylineWidth);\n if(skyline){\n gl_FragColor = vec4(skylineColor, 1.0);\n return;\n }\n gl_FragColor = vec4(0.0);\n // gl_FragColor = vec4(vec3(depth), 1.0);\n }\n "].join("\n")},r.SnowShader={uniforms:{tDiffuse:{value:null},tNormal:{value:null},darkness:{value:.5},density:{value:1},thickness:{value:.5},frameNumber:{value:0},viewport:{value:new THREE.Vector4(1,1,1,1)},cameraNear:{value:1},cameraFar:{value:100},inverseViewRotation:{value:new THREE.Matrix3},firstFlg:{value:0}},vertexShader:["varying vec2 v_textureCoordinates;","void main() {"," v_textureCoordinates = uv;"," gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n"),fragmentShader:["uniform float cameraNear;","uniform float cameraFar;","uniform mat3 inverseViewRotation;","uniform vec4 viewport;","uniform float frameNumber;","uniform float darkness;","uniform float density;","uniform sampler2D tDiffuse;","uniform sampler2D tNormal;","uniform float thickness;","varying vec2 v_textureCoordinates;","uniform float firstFlg;","float snow(vec2 uv,float scale){"," float time = frameNumber / 60.0;"," float w=smoothstep(1.,0.,-uv.y*(scale/10.));if(w<.1)return 0.;"," uv+=time/scale;uv.y+=time*2./scale;uv.x+=sin(uv.y+time*.5)/scale;"," uv*=scale;vec2 s=floor(uv),f=fract(uv),p;float k=3.,d;"," p=.5+.35*sin(11.*fract(sin((s+p+scale)*mat2(7,3,6,5))*5.))-f;d=length(p);k=min(d,k);"," k=smoothstep(0.,k,sin(f.x+f.y)*0.01);"," return k*w;","}","#include <packing>","vec3 getViewNormal(in sampler2D tn,const in vec2 screenPosition){"," return unpackRGBToNormal(texture2D(tn,screenPosition).xyz);","}","float getDotNumWC(vec3 nor, mat3 rotation){"," vec3 normalWC = normalize(rotation * nor);"," return dot(vec3(0.0,1.0,0.0),normalWC);","}","#include <postprocess_mix_color>","#include <postprocess_original_color>","void main(void){"," vec4 color = get_original_color(tDiffuse, v_textureCoordinates,firstFlg);"," if(thickness>0.0) {"," vec3 tNor = getViewNormal(tNormal, v_textureCoordinates);"," float dotNumWC = getDotNumWC(tNor, inverseViewRotation);"," if(dotNumWC<0.3){"," dotNumWC=0.3;"," } else if(dotNumWC>1.0){"," dotNumWC=1.0;"," }"," color = mix_color(color, vec3(1.0), dotNumWC*thickness); "," }"," vec2 resolution = viewport.zw;"," vec2 uv=(gl_FragCoord.xy*2.-resolution.xy)/min(resolution.x,resolution.y);"," vec3 finalColor=vec3(0);"," float c = 0.0;"," if(density>2.0){"," c+=snow(uv,35.);"," c+=snow(uv,20.);"," c+=snow(uv,8.);"," }"," if(density>1.0){"," c+=snow(uv,30.);"," c+=snow(uv,15.);"," c+=snow(uv,6.);"," }"," if(density>0.0){"," c+=snow(uv,25.);"," c+=snow(uv,10.);"," c+=snow(uv,5.);"," finalColor=(vec3(c)); "," }"," gl_FragColor = mix_color(color, finalColor, darkness); ","}"].join("\n")},r.ScanRingShader={uniforms:{tDiffuse:{value:null},depthTexture:{value:null},color:{value:new THREE.Vector4},radius:{value:0},time:{value:0},cameraNear:{value:1},cameraFar:{value:100},progressive:{value:2},scanCenterEC:{value:new THREE.Vector4},scanPlaneNormalEC:{value:new THREE.Vector3},inverseProjection:{value:new THREE.Matrix4},cameraProjection:{value:new THREE.Matrix4},firstFlg:{value:0},viewport:{value:new THREE.Vector4},logDepthBufFC:{value:0},matrixWorld:{value:new THREE.Vector4},minHeight:{value:0},maxHeight:{value:0}},vertexShader:["varying vec2 v_textureCoordinates;","void main() {"," v_textureCoordinates = uv;"," gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n"),fragmentShader:["uniform float firstFlg;","uniform float minHeight;","uniform float maxHeight;","uniform float radius;","uniform float time;","uniform vec4 color;","uniform float progressive;","uniform vec3 scanPlaneNormalEC;","uniform vec4 scanCenterEC;","uniform mat4 matrixWorld;","uniform sampler2D tDiffuse;","uniform sampler2D depthTexture;","varying vec2 v_textureCoordinates;","#include <packing>","#include <logdepthbuf_pars_fragment>","#include <depth_parse_fragment>","vec3 pointProjectOnPlane(in vec3 planeNormal, in vec3 planeOrigin, in vec3 point)","{"," vec3 v01 = point-planeOrigin;"," float d = dot(planeNormal, v01) ;"," return (point - planeNormal * d);","}","#include <postprocess_mix_color>","#include <postprocess_original_color>","void main(void){"," vec4 originalColor = get_original_color(tDiffuse, v_textureCoordinates,firstFlg);"," vec4 depthColor = texture2D(depthTexture, v_textureCoordinates);"," float depth = unpackRGBAToDepth(depthColor);"," vec3 viewPos = getViewPosition(depth);"," if(dot(scanPlaneNormalEC, viewPos)>0.0){"," gl_FragColor = originalColor;"," return;"," }"," vec3 prjOnPlane = pointProjectOnPlane(scanPlaneNormalEC.xyz, scanCenterEC.xyz, viewPos.xyz);"," float dis = length(prjOnPlane.xyz - scanCenterEC.xyz);"," float _radius = time * radius;"," float _time = (1.0-time) * 0.75 + 0.25;"," float f = dis/ _radius;"," f = min(f, 1.0);"," f = max(f, 0.0);"," if(f == 1.0){"," f = 0.0;"," }else{"," f = pow(f, progressive);"," f = max(f, 0.1);"," }"," vec4 wpos = matrixWorld * vec4( viewPos, 1.0 );"," if(minHeight != maxHeight && (wpos.y < minHeight || wpos.y > maxHeight)) {"," gl_FragColor = originalColor;"," return;"," };"," if(depth == 0.0){"," gl_FragColor = originalColor;"," }else{"," gl_FragColor = mix_color(originalColor, color.xyz*pow(f,0.1), f * color.w * _time); "," }","}"].join("\n")},r.SnowPass=function(e,t,i,n){var a=this;THREE.Pass.call(a),a.viewer=t,a.shader=r.SnowShader,a.density=2,a.thickness=.8,a.darkness=.5,a.renderComposer=e,a.uniforms=THREE.UniformsUtils.clone(a.shader.uniforms),a.material=new THREE.ShaderMaterial({defines:a.shader.defines||{},uniforms:a.uniforms,vertexShader:a.shader.vertexShader,fragmentShader:a.shader.fragmentShader}),a._frameState=new r.FrameState,a._frameState.camera=a.viewer.camera,a._frameState.scene=a.viewer.getScene(),a.postCamera=new THREE.OrthographicCamera(-1,1,1,-1,0,1),a.postScene=new THREE.Scene,a.quad=new THREE.Mesh(new THREE.PlaneBufferGeometry(2,2),a.material),a.quad.frustumCulled=!1,a.postScene.add(a.quad),a.enabled=!1},r.SnowPass.prototype=Object.assign(Object.create(THREE.Pass.prototype),{constructor:r.SnowPass,setOpts:function(e){var t=this;e&&(void 0!==e.darkness&&null!==e.darkness&&(t.darkness=e.darkness),void 0!==e.thickness&&null!==e.thickness&&(t.thickness=e.thickness),void 0!==e.density&&null!==e.density&&(t.density=e.density))},getOpts:function(){var e=this;return{darkness:e.darkness,thickness:e.thickness,density:e.density}},render:function(e,t,i,n,a,s){var o=this;null!=o._frameState.camera&&(o.uniforms.inverseViewRotation.value=r.Math.getMatrix3(o._frameState.camera.matrixWorld),o.uniforms.cameraNear.value=o._frameState.camera.near,o.uniforms.cameraFar.value=o._frameState.camera.far),o._frameState.frameNumber=r.Math.incrementWrap(o._frameState.frameNumber,15e6,1),o.uniforms.frameNumber.value=o._frameState.frameNumber,o.uniforms.density.value=o.density,o.uniforms.thickness.value=o.thickness,o.uniforms.darkness.value=o.darkness,o.uniforms.viewport&&null!=i&&(o.uniforms.viewport.value=new THREE.Vector4(i.viewport.x,i.viewport.y,i.viewport.z,i.viewport.w)),o.uniforms.firstFlg&&(o.uniforms.firstFlg.value=s?0:1),o.uniforms.tDiffuse&&(o.uniforms.tDiffuse.value=i.texture),o.uniforms.tNormal&&(o.uniforms.tNormal.value=o.renderComposer.getNormalTexture()),o.quad.material=o.material;var l=e.getRenderTarget();e.setRenderTarget(t),o.clear&&e.clear(),e.render(o.postScene,o.postCamera),e.setRenderTarget(l)},dispose:function(){this._frameState=this._frameState.destroy()},setSize(e,t){}}),r.RainPass=class{constructor(e,t,i,n){var a=this;THREE.Pass.call(a),a.viewer=t,a.shader=r.RainShader,a.density=2,a.darkness=.5,a.renderComposer=e,a.uniforms=THREE.UniformsUtils.clone(a.shader.uniforms),a.camera=a.viewer.camera,a.scene=a.viewer.getScene(),a.modelManager=a.viewer.modelManager,a.material=new THREE.ShaderMaterial({defines:a.shader.defines||{},uniforms:a.uniforms,vertexShader:a.shader.vertexShader,fragmentShader:a.replaceDepthToViewZ(a.shader.fragmentShader,a.camera)}),a._frameState=new r.FrameState,a._frameState.camera=a.viewer.camera,a._frameState.scene=a.viewer.getScene(),a._frameState.frameNumber=Math.floor(1e3*Math.random()),a.postCamera=new THREE.OrthographicCamera(-1,1,1,-1,0,1),a.postScene=new THREE.Scene,a.quad=new THREE.Mesh(new THREE.PlaneBufferGeometry(2,2),a.material),a.quad.frustumCulled=!1,a.postScene.add(a.quad)}replaceDepthToViewZ(e,t){var i=t.isPerspective?"perspective":"orthographic";return e.replace(/DEPTH_TO_VIEW_Z/g,i+"DepthToViewZ")}setOpts(e){e&&(void 0!==e.darkness&&null!==e.darkness&&(this.darkness=e.darkness),void 0!==e.density&&null!==e.density&&(this.density=e.density))}getOpts(){return{darkness:this.darkness,density:this.density}}render(e,t,i,n,a,s){var o=this;o._frameState.frameNumber=r.Math.incrementWrap(o._frameState.frameNumber,15e6,1),o.uniforms.frameNumber.value=o._frameState.frameNumber,o.uniforms.density.value=o.density,o.uniforms.darkness.value=o.darkness,o.uniforms.viewport&&null!=i&&(o.uniforms.viewport.value=new THREE.Vector4(i.viewport.x,i.viewport.y,i.viewport.z,i.viewport.w)),o.uniforms.firstFlg&&(o.uniforms.firstFlg.value=s?0:1),o.uniforms.tDiffuse&&(o.uniforms.tDiffuse.value=i.texture),o.quad.material=o.material;var l=e.getRenderTarget();e.setRenderTarget(t),o.clear&&e.clear(),e.render(o.postScene,o.postCamera),e.setRenderTarget(l)}dispose(){}setSize(e,t){}},function(){class e extends THREE.Pass{constructor(e,t,i,n,a){super(),this.modelManager=t,this.renderScene=i,this.renderCamera=n,this.selectedObjectIds=void 0!==a?a:[],this.defaultEdgeColor=(new THREE.Color).setHex(7733223),this.defaultEdgeAlpha=.95,this.edgeColor=new THREE.Vector4(this.defaultEdgeColor.r,this.defaultEdgeColor.g,this.defaultEdgeColor.b,this.defaultEdgeAlpha),this.edgeLength=2,this.resolution=void 0!==e?new THREE.Vector2(e.x,e.y):new THREE.Vector2(256,256);var s={minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBAFormat};this.renderTargetDepthBuffer=new THREE.WebGLRenderTarget(this.resolution.x,this.resolution.y,s),this.renderTargetDepthBuffer.texture.name="OutlinePass.depth",this.renderTargetDepthBuffer.texture.generateMipmaps=!1,this.renderTargetMaskBuffer=new THREE.WebGLRenderTarget(this.resolution.x,this.resolution.y,s),this.renderTargetMaskBuffer.texture.name="OutlinePass.mask",this.renderTargetMaskBuffer.texture.generateMipmaps=!1,this.renderTargetMaskDownSampleBuffer=new THREE.WebGLRenderTarget(this.resolution.x,this.resolution.y,s),this.renderTargetMaskDownSampleBuffer.texture.name="OutlinePass.depthDownSample",this.renderTargetMaskDownSampleBuffer.texture.generateMipmaps=!1,this.renderTargetEdgeBuffer=new THREE.WebGLRenderTarget(this.resolution.x,this.resolution.y,s),this.renderTargetEdgeBuffer.texture.name="OutlinePass.edge",this.renderTargetEdgeBuffer.texture.generateMipmaps=!1,this.renderTargetColorBuffer=new THREE.WebGLRenderTarget(this.resolution.x,this.resolution.y,s),this.renderTargetColorBuffer.texture.name="OutlinePass.color",this.renderTargetColorBuffer.texture.generateMipmaps=!1,this.depthMaterial=new THREE.MeshDepthMaterial,this.depthMaterial.side=THREE.DoubleSide,this.depthMaterial.depthPacking=THREE.RGBADepthPacking,this.depthMaterial.blending=THREE.NoBlending,this.InstancedDepthMaterial=new r.InstancedDepthMaterial,this.InstancedDepthMaterial.side=THREE.DoubleSide,this.InstancedDepthMaterial.depthPacking=THREE.RGBADepthPacking,this.InstancedDepthMaterial.blending=THREE.NoBlending,this.prepareMaskMaterial=this.getPrepareMaskMaterial(),this.prepareMaskMaterial.side=THREE.DoubleSide,this.prepareMaskInstancedMaterial=this.getPrepareMaskInstancedMaterial(),this.prepareMaskInstancedMaterial.side=THREE.DoubleSide,this.edgeDetectionMaterial=this.getEdgeDetectionMaterial(),this.overlayMaterial=this.getOverlayMaterial(),void 0===THREE.CopyShader&&console.error("CLOUD.OutlinePass relies on THREE.CopyShader");var o=THREE.CopyShader;this.copyUniforms=THREE.UniformsUtils.clone(o.uniforms),this.copyUniforms.opacity.value=1,this.materialCopy=new THREE.ShaderMaterial({uniforms:this.copyUniforms,vertexShader:o.vertexShader,fragmentShader:o.fragmentShader,blending:THREE.NoBlending,depthTest:!1,depthWrite:!1,transparent:!0}),this.enabled=!0,this.needsSwap=!1,this.oldClearColor=new THREE.Color,this.oldClearAlpha=1,this.camera=new THREE.OrthographicCamera(-1,1,1,-1,0,1),this.scene=new THREE.Scene,this.quad=new THREE.Mesh(new THREE.PlaneBufferGeometry(2,2),null),this.quad.frustumCulled=!1,this.scene.add(this.quad),this.textureMatrix=new THREE.Matrix4}dispose(){this.renderTargetDepthBuffer.dispose(),this.renderTargetMaskBuffer.dispose(),this.renderTargetMaskDownSampleBuffer.dispose(),this.renderTargetEdgeBuffer.dispose(),this.renderTargetColorBuffer.dispose()}setSize(e,t){this.renderTargetDepthBuffer.setSize(e,t),this.renderTargetMaskBuffer.setSize(e,t),this.renderTargetMaskDownSampleBuffer.setSize(e,t),this.renderTargetEdgeBuffer.setSize(e,t),this.renderTargetColorBuffer.setSize(e,t)}adjustVisibility(e){this.modelManager.adjustVisibility(e)}changeVisibilityOfSelectedObjects(e){this.modelManager.changeVisibilityOfSelectedObjects(e)}changeVisibilityOfNonSelectedObjects(e){this.modelManager.changeVisibilityOfNonSelectedObjects(e)}adjustInstanceVisibility(e){this.modelManager.adjustInstanceVisibility(e)}changeInstanceVisibilityOfSelectedObjects(e){this.modelManager.changeInstanceVisibilityOfSelectedObjects(e)}changeInstanceVisibilityOfNonSelectedObjects(e){this.modelManager.changeInstanceVisibilityOfNonSelectedObjects(e)}restoreVisibilityOfObjects(){this.modelManager.restoreVisibilityOfObjects()}updateTextureMatrix(){this.textureMatrix.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),this.textureMatrix.multiply(this.renderCamera.projectionMatrix),this.textureMatrix.multiply(this.renderCamera.matrixWorldInverse)}render(e,t,i,r,n){if(0!==this.selectedObjectIds.length){e.getClearColor(this.oldClearColor),this.oldClearAlpha=e.getClearAlpha();var a=e.autoClear;e.autoClear=!1,n&&e.context.disable(e.context.STENCIL_TEST),e.setClearColor(0,0),this.adjustInstanceVisibility(!1),this.changeVisibilityOfSelectedObjects(!1),this.renderScene.overrideMaterial=this.depthMaterial,e.render(this.renderScene,this.renderCamera,this.renderTargetDepthBuffer,!0),this.adjustInstanceVisibility(!0),this.changeVisibilityOfSelectedObjects(!0),this.adjustVisibility(!1),this.changeInstanceVisibilityOfSelectedObjects(!1),this.renderScene.overrideMaterial=this.InstancedDepthMaterial,e.render(this.renderScene,this.renderCamera,this.renderTargetDepthBuffer,!1),this.adjustVisibility(!0),this.changeInstanceVisibilityOfSelectedObjects(!0),this.updateTextureMatrix(),this.adjustInstanceVisibility(!1),this.changeVisibilityOfNonSelectedObjects(!1),this.renderScene.overrideMaterial=this.prepareMaskMaterial,this.prepareMaskMaterial.uniforms.cameraNearFar.value=new THREE.Vector2(this.renderCamera.near,this.renderCamera.far),this.prepareMaskMaterial.uniforms.depthTexture.value=this.renderTargetDepthBuffer.texture,this.prepareMaskMaterial.uniforms.textureMatrix.value=this.textureMatrix,e.render(this.renderScene,this.renderCamera,this.renderTargetMaskBuffer,!0),this.adjustInstanceVisibility(!0),this.changeVisibilityOfNonSelectedObjects(!0),this.adjustVisibility(!1),this.changeInstanceVisibilityOfNonSelectedObjects(!1),this.renderScene.overrideMaterial=this.prepareMaskInstancedMaterial,this.prepareMaskInstancedMaterial.uniforms.cameraNearFar.value=new THREE.Vector2(this.renderCamera.near,this.renderCamera.far),this.prepareMaskInstancedMaterial.uniforms.depthTexture.value=this.renderTargetDepthBuffer.texture,this.prepareMaskInstancedMaterial.uniforms.textureMatrix.value=this.textureMatrix,e.render(this.renderScene,this.renderCamera,this.renderTargetMaskBuffer,!1),this.renderScene.overrideMaterial=null,this.adjustVisibility(!0),this.changeInstanceVisibilityOfNonSelectedObjects(!0),this.restoreVisibilityOfObjects(),this.quad.material=this.materialCopy,this.copyUniforms.tDiffuse.value=this.renderTargetMaskBuffer.texture,e.render(this.scene,this.camera,this.renderTargetMaskDownSampleBuffer,!0),this.quad.material=this.edgeDetectionMaterial,this.edgeDetectionMaterial.uniforms.maskTexture.value=this.renderTargetMaskDownSampleBuffer.texture,this.edgeDetectionMaterial.uniforms.texSize.value=new THREE.Vector2(this.renderTargetMaskDownSampleBuffer.width,this.renderTargetMaskDownSampleBuffer.height),this.edgeDetectionMaterial.uniforms.edgeColor.value=this.edgeColor,this.edgeDetectionMaterial.uniforms.edgeLength.value=this.edgeLength,e.render(this.scene,this.camera,this.renderTargetEdgeBuffer,!0),this.quad.material=this.overlayMaterial,this.overlayMaterial.uniforms.colorTexture.value=i.texture,this.overlayMaterial.uniforms.outlineTexture.value=this.renderTargetEdgeBuffer.texture,e.render(this.scene,this.camera,this.renderTargetColorBuffer,!0),this.quad.material=this.materialCopy,this.copyUniforms.tDiffuse.value=this.renderTargetColorBuffer.texture,n&&e.context.enable(e.context.STENCIL_TEST),e.render(this.scene,this.camera,i,!0),e.setClearColor(this.oldClearColor,this.oldClearAlpha),e.autoClear=a}}getPrepareMaskMaterial(){return new THREE.ShaderMaterial({uniforms:{depthTexture:{value:null},cameraNearFar:{value:new THREE.Vector2(.5,.5)},textureMatrix:{value:new THREE.Matrix4}},vertexShader:"varying vec2 vUv;\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tuniform mat4 textureMatrix;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\t\t\t\t\tprojTexCoord = textureMatrix * worldPosition;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}",fragmentShader:"\n #include <packing>\n\t\t\t\tvarying vec2 vUv;\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tuniform sampler2D depthTexture;\n\t\t\t\tuniform vec2 cameraNearFar;\n\t\t\t\t\n\t\t\t\tfloat linearDepth(float depth)\n {\n float far = cameraNearFar.y;\n float near = cameraNearFar.x;\n return (2.0 * near) / (far + near - depth * (far - near));\n }\n\t\t\t\t\n\t\t\t\tvoid main() {\n\t\t\t\t\tfloat depth = unpackRGBAToDepth(texture2DProj( depthTexture, projTexCoord ));\t\t\t\t\t\n\t\t\t\t\tgl_FragColor = vec4(depth);\n\t\t\t\t}"})}getPrepareMaskInstancedMaterial(){return new THREE.ShaderMaterial({uniforms:{depthTexture:{value:null},cameraNearFar:{value:new THREE.Vector2(.5,.5)},textureMatrix:{value:new THREE.Matrix4}},vertexShader:"\n attribute float vState; \n attribute vec4 aColor; \n attribute vec3 mcol0;\n attribute vec3 mcol1;\n attribute vec3 mcol2;\n attribute vec3 mcol3;\n #if defined(USE_MAP)\n attribute vec2 muvCol0;\n attribute vec2 muvCol1;\n attribute vec2 muvCol2;\n #endif\n \n varying float vfState;\n varying vec2 vUv;\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tuniform mat4 textureMatrix;\n\t\t\t\t\n\t\t\t\tvec3 getInstancePosition(vec3 position) {\n return vec3(mat4(vec4(mcol0, 0.0),\n vec4(mcol1, 0.0),\n vec4(mcol2, 0.0),\n vec4(mcol3, 1.0)) * vec4(position, 1.0));\n }\n \n vec2 getInstanceUV(vec2 uv) {\n \n #if defined(USE_MAP)\n return vec2(mat3(vec3(muvCol0, 0.0),\n vec3(muvCol1, 0.0), \n vec3(muvCol2, 1.0)) * vec3(uv, 1.0));\n #else\n return uv;\n #endif \n \n }\n \n\t\t\t\tvoid main() {\n\t\t\t\t vfState = vState;\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tvPosition = vec4(getInstancePosition(position), 1.0);\n\t\t\t\t\tvec4 worldPosition = modelMatrix * vPosition;\n\t\t\t\t\tprojTexCoord = textureMatrix * worldPosition;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vPosition;\n\t\t\t\t}",fragmentShader:"#include <packing>\n varying float vfState;\n varying vec2 vUv;\n varying vec4 vPosition;\n varying vec4 projTexCoord;\n uniform sampler2D depthTexture;\n uniform vec2 cameraNearFar;\n \n float linearDepth(float depth)\n {\n float far = cameraNearFar.y;\n float near = cameraNearFar.x;\n return (2.0 * near) / (far + near - depth * (far - near));\n }\n \n void main() {\n if (vfState <= -0.99 && vfState >= -1.01) discard;\n float depth = unpackRGBAToDepth(texture2DProj( depthTexture, projTexCoord ));\n gl_FragColor = vec4(depth);\n }"})}getEdgeDetectionMaterial(){return new THREE.ShaderMaterial({uniforms:{maskTexture:{value:null},texSize:{value:new THREE.Vector2(.5,.5)},edgeColor:{value:new THREE.Vector4(1,1,1,1)},edgeLength:{value:2}},vertexShader:"\n varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}",fragmentShader:"\n varying vec2 vUv;\n\t\t\t\tuniform sampler2D maskTexture;\n\t\t\t\tuniform vec2 texSize;\n\t\t\t\tuniform vec4 edgeColor;\n uniform float edgeLength; \n \n void main(void)\n {\n float directions[3];\n directions[0] = -1.0;\n directions[1] = 0.0;\n directions[2] = 1.0;\n \n float scalars[3];\n scalars[0] = 3.0;\n scalars[1] = 10.0;\n scalars[2] = 3.0;\n \n float padx = 1.0 / texSize.x;\n float pady = 1.0 / texSize.y ; \n \n float edgeSize = 0.0; \n float horizEdge = 0.0;\n float vertEdge = 0.0; \n \n for (int i = 0; i < 3; ++i)\n {\n float dir = directions[i];\n float scale = scalars[i];\n \n horizEdge -= texture2D(maskTexture, vUv + vec2(-padx, dir * pady)).x * scale;\n horizEdge += texture2D(maskTexture, vUv + vec2(padx, dir * pady)).x * scale;\n \n vertEdge -= texture2D(maskTexture, vUv + vec2(dir * padx, -pady)).x * scale;\n vertEdge += texture2D(maskTexture, vUv + vec2(dir * padx, pady)).x * scale;\n } \n \n float len = sqrt(horizEdge * horizEdge + vertEdge * vertEdge); \n float alpha = len > edgeLength ? edgeColor.a : (texture2D(maskTexture, vUv).w > 0.1 ? 0.1 : 0.0);\n gl_FragColor = vec4(edgeColor.rgb, alpha);\n }"})}getOverlayMaterial(){return new THREE.ShaderMaterial({uniforms:{colorTexture:{value:null},outlineTexture:{value:null}},vertexShader:"varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}",fragmentShader:"varying vec2 vUv;\n\t\t\t\tuniform sampler2D colorTexture;\n\t\t\t\tuniform sampler2D outlineTexture;\n\t\t\t\t\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec4 outlineColor = texture2D(outlineTexture, vUv);\t\t\t\t\t\n gl_FragColor = mix(texture2D(colorTexture, vUv), outlineColor, outlineColor.a);\n\t\t\t\t}",blending:THREE.AdditiveBlending,depthTest:!1,depthWrite:!1,transparent:!0})}setOutlineEdgeColor(e){var t=r.Utils.hexToRgb(e.color);this.edgeColor.fromArray([t.r,t.g,t.b,e.opacity?e.opacity:1])}}r.OutlinePass=e}(),function(){class e{constructor(e){this.modelManager=e,this.depthMaterial=new THREE.MeshDepthMaterial,this.depthMaterial.side=THREE.DoubleSide,this.depthMaterial.depthPacking=THREE.RGBADepthPacking,this.depthMaterial.blending=THREE.NoBlending,this.instancedDepthMaterial=new r.InstancedDepthMaterial,this.instancedDepthMaterial.side=THREE.DoubleSide,this.instancedDepthMaterial.depthPacking=THREE.RGBADepthPacking,this.instancedDepthMaterial.blending=THREE.NoBlending,this.customDepthMaterial=new r.CustomMeshDepthMaterial,this.customDepthMaterial.side=THREE.DoubleSide,this.customDepthMaterial.depthPacking=THREE.RGBADepthPacking,this.customDepthMaterial.blending=THREE.NoBlending,this.customInstancedDepthMaterial=new r.CustomInstancedMeshDepthMaterial,this.customInstancedDepthMaterial.side=THREE.DoubleSide,this.customInstancedDepthMaterial.depthPacking=THREE.RGBADepthPacking,this.customInstancedDepthMaterial.blending=THREE.NoBlending}destroy(){this.modelManager=null,this.depthMaterial.dispose(),this.depthMaterial=null,this.instancedDepthMaterial.dispose(),this.instancedDepthMaterial=null,this.customDepthMaterial.dispose(),this.customDepthMaterial=null,this.customInstancedDepthMaterial.dispose(),this.customInstancedDepthMaterial=null}adjustVisibility(e){this.modelManager.adjustVisibility(e)}adjustInstanceVisibility(e){this.modelManager.adjustInstanceVisibility(e)}adjustDemVisibility(e){this.modelManager.adjustDemVisibility(e)}changeVisibilityOfSelectedObjects(e){this.modelManager.changeVisibilityOfSelectedObjects(e)}changeInstanceVisibilityOfSelectedObjects(e){this.modelManager.changeInstanceVisibilityOfSelectedObjects(e)}renderDepth(e,t,i,r){var n=e.getRenderTarget(),a=t.overrideMaterial,s=e.autoClear;e.autoClear=!1,this.adjustInstanceVisibility(!1),this.changeVisibilityOfSelectedObjects(!1),t.overrideMaterial=this.depthMaterial,e.setRenderTarget(r),e.clear(),e.render(t,i),this.adjustInstanceVisibility(!0),this.changeVisibilityOfSelectedObjects(!0),this.adjustVisibility(!1),this.changeInstanceVisibilityOfSelectedObjects(!1),t.overrideMaterial=this.instancedDepthMaterial,e.render(t,i),t.overrideMaterial=a,e.setRenderTarget(n),e.autoClear=s,this.adjustVisibility(!0),this.changeInstanceVisibilityOfSelectedObjects(!0)}renderCustomDepth(t,i,n,a,s){var o=!!r.Utils.isDefined(s)&&s,l=t.getRenderTarget(),d=i.overrideMaterial,h=t.autoClear;t.autoClear=!1;const c=e.hideInVisibleGroup(i);this.adjustInstanceVisibility(!1),this.changeVisibilityOfSelectedObjects(!1),i.overrideMaterial=this.customDepthMaterial,this.customDepthMaterial.uniforms.forceLogDepth.value=o,this.customDepthMaterial.uniforms.forceCustomDepth.value=!1,this.customDepthMaterial.uniforms.forceLogDepthBufFC.value=2/(Math.log(n.far+1)/Math.LN2),t.setRenderTarget(a),t.clear(),t.render(i,n),this.adjustInstanceVisibility(!0),this.changeVisibilityOfSelectedObjects(!0),this.adjustVisibility(!1),this.changeInstanceVisibilityOfSelectedObjects(!1),i.overrideMaterial=this.customInstancedDepthMaterial,this.customInstancedDepthMaterial.uniforms.forceLogDepth.value=o,this.customInstancedDepthMaterial.uniforms.forceCustomDepth.value=!1,this.customInstancedDepthMaterial.uniforms.forceLogDepthBufFC.value=2/(Math.log(n.far+1)/Math.LN2),t.render(i,n),i.overrideMaterial=d,t.setRenderTarget(l),t.autoClear=h,this.adjustVisibility(!0),this.changeInstanceVisibilityOfSelectedObjects(!0),e.restoreInVisibleGroup(i,c)}renderCustomDepthByOpacity(e,t,i,n,a,s){let o={},l={};r.RenderEffectComposer.setTransparentObjectVisible(t,i,a,!1,o,l),this.customInstancedDepthMaterial.uniforms.discardAlpha.value=a,this.renderCustomDepth(e,t,i,n,s),r.RenderEffectComposer.setTransparentObjectVisible(t,i,a,!0,o,l),this.customInstancedDepthMaterial.uniforms.discardAlpha.value=0}renderCustomDepthWithoutDEM(t,i,n,a){var s=t.getRenderTarget(),o=i.overrideMaterial,l=t.autoClear;t.autoClear=!1;var d=!1,h=i.getObjectGroup(r.GlobalData.TilePlaneGroupName);h&&(d=h.visible),this.adjustDemVisibility(!1);const c=e.hideInVisibleGroup(i);this.adjustVisibility(!1),this.adjustInstanceVisibility(!1),this.changeVisibilityOfSelectedObjects(!1),this.changeInstanceVisibilityOfSelectedObjects(!1),i.overrideMaterial=this.customDepthMaterial,this.customDepthMaterial.uniforms.forceLogDepth.value=!1,this.customDepthMaterial.uniforms.forceCustomDepth.value=!0,this.customDepthMaterial.uniforms.customDepth.value=1,t.setRenderTarget(a),t.clear(),t.render(i,n);var u=!1,p=i.getObjectGroup(r.ObjectGroupType.EXTERNALCOMPONENTMANAGER);p&&(u=p.visible,p.visible=!1),this.adjustVisibility(!0),this.adjustInstanceVisibility(!1),this.changeVisibilityOfSelectedObjects(!1),i.overrideMaterial=this.customDepthMaterial,this.customDepthMaterial.uniforms.forceLogDepth.value=!1,this.customDepthMaterial.uniforms.forceCustomDepth.value=!0,this.customDepthMaterial.uniforms.customDepth.value=.5,t.render(i,n),this.adjustInstanceVisibility(!0),this.changeVisibilityOfSelectedObjects(!0),this.adjustVisibility(!1),this.changeInstanceVisibilityOfSelectedObjects(!1),i.overrideMaterial=this.customInstancedDepthMaterial,this.customInstancedDepthMaterial.uniforms.forceLogDepth.value=!1,this.customInstancedDepthMaterial.uniforms.forceCustomDepth.value=!0,this.customInstancedDepthMaterial.uniforms.customDepth.value=.5,t.render(i,n),i.overrideMaterial=o,t.setRenderTarget(s),t.autoClear=l,this.adjustVisibility(!0),this.changeInstanceVisibilityOfSelectedObjects(!0),this.adjustDemVisibility(d),e.restoreInVisibleGroup(i,c),p&&(p.visible=u)}}e.inVisibleGroupList=[r.ObjectGroupType.IBLCUBE],e.hideInVisibleGroup=t=>{const i=e.inVisibleGroupList.length;let r=new Array(i);for(let n=0;n<i;++n){const i=t.getObjectGroup(e.inVisibleGroupList[n]);i&&(r[n]=i.visible,i.visible=!1)}return r},e.restoreInVisibleGroup=(t,i)=>{const r=e.inVisibleGroupList.length;for(let n=0;n<r;++n){const r=t.getObjectGroup(e.inVisibleGroupList[n]);r&&(r.visible=i[n])}},r.DepthRenderPass=e}(),function(){let e=new THREE.Matrix4,t=new THREE.Matrix4;r.ScanRingPass=class{constructor(e,t,i,n,a){var s=this;THREE.Pass.call(s),s.viewer=i,s.shader=r.ScanRingShader,s.id=e,s.radius=500,s.emitPosition=new THREE.Vector3(0,1,0),s.originPosition=new THREE.Vector3(0,0,0),s.progressive=10,s.duration=3e3,s.color=new THREE.Vector3(1,1,1),s.range=[],s.renderComposer=t,s.uniforms=THREE.UniformsUtils.clone(s.shader.uniforms),s.camera=s.viewer.camera,s.scene=s.viewer.getScene(),s.modelManager=s.viewer.modelManager,s.material=new THREE.ShaderMaterial({defines:s.shader.defines||{},uniforms:s.uniforms,vertexShader:s.shader.vertexShader,fragmentShader:s.shader.fragmentShader}),s.postCamera=new THREE.OrthographicCamera(-1,1,1,-1,0,1),s.postScene=new THREE.Scene,s.quad=new THREE.Mesh(new THREE.PlaneBufferGeometry(2,2),s.material),s.quad.frustumCulled=!1,s.postScene.add(s.quad)}setOpts(e){var t=this;e&&(null!=e.originPosition&&(t.originPosition=new THREE.Vector3(e.originPosition.x,e.originPosition.y,e.originPosition.z)),null!=e.emitPosition&&(t.emitPosition=new THREE.Vector3(e.emitPosition.x,e.emitPosition.y,e.emitPosition.z)),null!=e.progressive&&(t.progressive=e.progressive),null!=e.radius&&(t.radius=e.radius),null!=e.duration&&(t.duration=e.duration),null!=e.color&&null!=e.alpha&&(t.color=new THREE.Vector4(e.color.r,e.color.g,e.color.b,e.alpha)),null!=e.range&&(t.range=e.range))}getOpts(){var e=this;return{emitPosition:e.emitPosition,originPosition:e.originPosition,radius:e.radius,duration:e.duration,color:e.color,progressive:e.progressive}}render(i,r,n,a,s,o){var l=this;if(null!=l.camera){l.uniforms.cameraProjection.value=l.camera.projectionMatrix,e.copy(l.camera.projectionMatrix).invert(),l.uniforms.inverseProjection.value=e,t.copy(l.camera.matrixWorld).invert(),l.uniforms.matrixWorld.value=l.camera.matrixWorld;var d=new THREE.Vector4(l.emitPosition.x,l.emitPosition.y,l.emitPosition.z,1);d.applyMatrix4(t);var h=new THREE.Vector4(l.originPosition.x,l.originPosition.y,l.originPosition.z,1);h.applyMatrix4(t);var c=new THREE.Vector3;c.set(d.x,d.y,d.z),c.sub(h),l.uniforms.scanPlaneNormalEC.value=c.normalize(),l.uniforms.scanCenterEC.value=h,l.uniforms.cameraNear.value=l.camera.near,l.uniforms.cameraFar.value=l.camera.far,l.uniforms.progressive.value=l.progressive,l.uniforms.viewport.value.set(0,0,i.getContext().drawingBufferWidth,i.getContext().drawingBufferHeight),l.uniforms.logDepthBufFC.value=2/(Math.log(l.camera.far+1)/Math.LN2)}2==l.range.length?(l.uniforms.minHeight.value=l.range[0],l.uniforms.maxHeight.value=l.range[1]):(l.uniforms.minHeight.value=0,l.uniforms.maxHeight.value=0),null==l.startTime&&(l.startTime=(new Date).getTime()),l.uniforms.time&&(0==l.duration?l.uniforms.time.value=1:l.uniforms.time.value=((new Date).getTime()-l.startTime)%l.duration/l.duration),l.uniforms.radius&&(l.uniforms.radius.value=l.radius),l.uniforms.color&&(l.uniforms.color.value=l.color),l.uniforms.tDiffuse&&(l.uniforms.tDiffuse.value=n.texture),l.uniforms.depthTexture&&(l.uniforms.depthTexture.value=l.renderComposer.getDepthTexture()),l.uniforms.firstFlg&&(l.uniforms.firstFlg.value=o?0:1),l.quad.material=l.material;var u=i.getRenderTarget();i.setRenderTarget(r),l.clear&&i.clear(),i.render(l.postScene,l.postCamera),i.setRenderTarget(u)}dispose(){var e=this;e.emitPosition=null,e.originPosition=null,e.uniforms=null}setSize(e,t){}}}(),function(){class e extends THREE.Pass{constructor(e,t,i,n){super();var a=this;a.viewer=t,a.renderComposer=e,a.shader=r.BackgroundShader,a.uniforms=THREE.UniformsUtils.clone(a.shader.uniforms),a.camera=a.viewer.camera,a.scene=a.viewer.getScene(),a.modelManager=a.viewer.modelManager,a.material=new THREE.ShaderMaterial({defines:a.shader.defines||{},uniforms:a.uniforms,vertexShader:a.shader.vertexShader,fragmentShader:a.shader.fragmentShader,depthTest:!1,depthWrite:!1}),a.postCamera=new THREE.OrthographicCamera(-1,1,1,-1,0,1),a.postScene=new THREE.Scene,a.quad=new THREE.Mesh(new THREE.PlaneBufferGeometry(2,2),a.material),a.quad.frustumCulled=!1,a.postScene.add(a.quad)}render(e,t,i,r,n){var a=this;a.uniforms.abTexture&&(a.uniforms.abTexture.value=a.renderComposer.composerAdditive.readBuffer.texture),a.uniforms.mbTexture&&(a.uniforms.mbTexture.value=a.renderComposer.composerMix.readBuffer.texture),a.uniforms.isAdditive&&(a.uniforms.isAdditive.value=a.renderComposer.isAdditiveRoad()?1:0),a.quad.material=a.material;var s=e.getRenderTarget();e.autoClear=!1,e.setRenderTarget(null),e.clear(),e.render(a.postScene,a.postCamera),e.setRenderTarget(s)}destroy(){this.material.dispose()}setSize(e,t){}}r.BackgroundPass=e}(),r.FanScanShader={uniforms:{fanAngle:{value:0},time:{value:0},backgroundColor:{value:new THREE.Vector3(1,1,1)},backgroundOpacity:{value:0}},vertexShader:"\n #include <common>\n #include <uv_pars_vertex>\n #include <uv2_pars_vertex>\n #include <envmap_pars_vertex>\n #include <color_pars_vertex>\n #include <fog_pars_vertex>\n #include <morphtarget_pars_vertex>\n #include <skinning_pars_vertex>\n #include <logdepthbuf_pars_vertex>\n #include <clipping_planes_pars_vertex>\n\n varying vec2 vCoordinates;\n void main() {\n #include <uv_vertex>\n #include <uv2_vertex>\n #include <color_vertex>\n #include <skinbase_vertex>\n #ifdef USE_ENVMAP\n #include <beginnormal_vertex>\n #include <morphnormal_vertex>\n #include <skinnormal_vertex>\n #include <defaultnormal_vertex>\n #endif\n vCoordinates = vec2(position.x, position.y);\n #include <begin_vertex>\n #include <morphtarget_vertex>\n #include <skinning_vertex>\n #include <project_vertex>\n #include <logdepthbuf_vertex>\n #include <worldpos_vertex>\n #include <clipping_planes_vertex>\n #include <envmap_vertex>\n #include <fog_vertex>\n }\n ",fragmentShader:"\n uniform float fanAngle;\n uniform float time;\n uniform vec3 backgroundColor;\n uniform float backgroundOpacity;\n varying vec2 vCoordinates;\n\n uniform vec3 diffuse;\n uniform float opacity;\n #ifndef FLAT_SHADED\n varying vec3 vNormal;\n #endif\n #include <common>\n #include <color_pars_fragment>\n #include <uv_pars_fragment>\n #include <uv2_pars_fragment>\n #include <map_pars_fragment>\n #include <alphamap_pars_fragment>\n #include <aomap_pars_fragment>\n #include <lightmap_pars_fragment>\n #include <envmap_pars_fragment>\n #include <fog_pars_fragment>\n #include <specularmap_pars_fragment>\n #include <logdepthbuf_pars_fragment>\n #include <clipping_planes_pars_fragment>\n void main() {\n #include <logdepthbuf_fragment>\n\n float scanAngle = 0.0;\n float fanOpacity = backgroundOpacity;\n if(vCoordinates.y==0.0 && vCoordinates.x==0.0){\n discard;\n }\n\n float _angle = atan(vCoordinates.y, vCoordinates.x);\n if(vCoordinates.y < 0.0){\n _angle = _angle + PI*2.0;\n }\n _angle = _angle/(PI*2.0);\n\n if( (_angle>=time &&_angle <= (fanAngle+time)) ||\n ((fanAngle+time)>1.0 && _angle<=fract(fanAngle+time))){\n if(_angle-time<0.0) {\n scanAngle = _angle+(1.0-time);\n }else{\n scanAngle = _angle-time;\n }\n //提高融合感\n scanAngle = pow(1.0 - scanAngle/fanAngle,2.0);\n fanOpacity = fanOpacity + (1.0 - fanOpacity) * scanAngle * opacity;\n }\n\n gl_FragColor = vec4(mix(backgroundColor, diffuse, scanAngle), fanOpacity);\n// gl_FragColor = vec4(vec3(fanOpacity), fanOpacity);\n// gl_FragColor = vec4(vec3(scanAngle), scanAngle);\n #include <premultiplied_alpha_fragment>\n #include <tonemapping_fragment>\n #include <encodings_fragment>\n #include <fog_fragment>\n }\n "},r.HorizontalBlurShader={uniforms:{tDiffuse:{value:null},h:{value:1/512}},vertexShader:"varying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}",fragmentShader:"uniform sampler2D tDiffuse;\n\t\tuniform float h;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 sum = vec4( 0.0 );\n\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 4.0 * h, vUv.y ) ) * 0.051;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 3.0 * h, vUv.y ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 2.0 * h, vUv.y ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 1.0 * h, vUv.y ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 1.0 * h, vUv.y ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 2.0 * h, vUv.y ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 3.0 * h, vUv.y ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 4.0 * h, vUv.y ) ) * 0.051;\n\n\t\t\tgl_FragColor = sum;\n\n\t\t}"},r.VerticalBlurShader={uniforms:{tDiffuse:{value:null},v:{value:1/512}},vertexShader:"varying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}",fragmentShader:"uniform sampler2D tDiffuse;\n\t\tuniform float v;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 sum = vec4( 0.0 );\n\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 4.0 * v ) ) * 0.051;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 3.0 * v ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 2.0 * v ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 1.0 * v ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 1.0 * v ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 2.0 * v ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 3.0 * v ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 4.0 * v ) ) * 0.051;\n\n\t\t\tgl_FragColor = sum;\n\n\t\t}"},r.PostDepthShader={uniforms:{cameraNear:{value:0},cameraFar:{value:0},tDiffuse:{value:null},tDepth:{value:null},isDepthMode:{value:!1}},vertexShader:"\n varying vec2 vUv;\n\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n ",fragmentShader:"\n #include <packing>\n\n varying vec2 vUv;\n uniform sampler2D tDiffuse;\n uniform sampler2D tDepth;\n uniform float cameraNear;\n uniform float cameraFar;\n uniform bool isDepthMode;\n\n\n float readDepth( sampler2D depthSampler, vec2 coord ) {\n float fragCoordZ = texture2D( depthSampler, coord ).x;\n float viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );\n return viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );\n }\n\n void main() {\n if(isDepthMode){\n float depth = readDepth( tDepth, vUv );\n\n gl_FragColor.rgb = vec3( depth );//1.0 - \n gl_FragColor.a = 1.0;\n }else{\n gl_FragColor = texture2D( tDiffuse, vUv );\n\n }\n \n\t\t#include <tonemapping_fragment>\n\t\t#include <encodings_fragment>\n }\n "},r.ClippingStencilShader={uniforms:{},vertexShader:"\n #include <clipping_planes_pars_vertex>\n #ifdef USE_INSTANCE\n attribute float vState;\n attribute float vState2;\n attribute float vClipping;\n varying float fClipping;\n varying float fState;\n attribute vec4 aColor;\n varying vec4 vaColor;\n attribute vec3 mcol0;\n attribute vec3 mcol1;\n attribute vec3 mcol2;\n attribute vec3 mcol3;\n #if defined(USE_MAP)||defined(USE_BUMPMAP) \n attribute vec2 muvCol0;\n attribute vec2 muvCol1;\n attribute vec2 muvCol2;\n #endif\n #if defined(USE_LIGHTMAP)\n attribute vec4 uv2OffsetRepeat;\n #endif\n #endif\n\n void main() {\n #include <begin_vertex>\n #ifdef USE_INSTANCE\n // vaColor = aColor;\n // fClipping = vClipping;\n #ifdef INSTANCE_STATE_SECONDARY\n fState = vState2;\n #else\n fState = vState;\n #endif\n transformed = vec3(mat4(vec4(mcol0, 0.0),\n vec4(mcol1, 0.0),\n vec4(mcol2, 0.0),\n vec4(mcol3, 1.0)) * vec4(transformed, 1.0));\n #endif\n #include <project_vertex>\n #include <clipping_planes_vertex>\n }",fragmentShader:"\n #include <clipping_planes_pars_fragment>\n #ifdef USE_INSTANCE\n varying float fState;\n #endif\n\n bool floatEqual(in float x, in float y) {\n return (x >= y - 0.01) && (x <= y + 0.01);\n }\n\n void main(void){\n #ifdef USE_INSTANCE\n if (floatEqual(fState, -1.0)) \n discard;\n #endif\n #if NUM_CLIPPING_PLANES > 0\n for ( int i = 0; i < UNION_CLIPPING_PLANES; ++ i ) {\n vec4 plane = clippingPlanes[ i ];\n if ( dot( vClipPosition, plane.xyz ) > plane.w && dot( vec3(0.0), plane.xyz ) > plane.w) discard;//!!cameraPosition is vec3(0.0) in camera space\n }\n #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n bool clipped = true;\n for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; ++ i ) {\n vec4 plane = clippingPlanes[ i ];\n clipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n }\n if ( clipped ) discard;\n #endif\n #endif\n gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n }\n "},r.ShadowMapShader={shadowmap_pars_fragment:" \n#ifdef USE_SHADOWMAP\n\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\n\t#endif\n\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\n\t#endif\n\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\n\t#endif\n\n\t/*\n\t#if NUM_RECT_AREA_LIGHTS > 0\n\n\t\t// TODO (abelnation): create uniforms for area light shadows\n\n\t#endif\n\t*/\n\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\n\t}\n\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\n\t}\n\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\n\t\tfloat occlusion = 1.0;\n\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\n\t\tfloat hard_shadow = step( compare , distribution.x ); // Hard Shadow\n\n\t\tif (hard_shadow != 1.0 ) {\n\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance ); // Chebeyshevs inequality\n\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); // 0.3 reduces light bleed\n\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\n\t\t}\n\t\treturn occlusion;\n\n\t}\n\n\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n const vec2 offset = vec2( 0.0, 1.0 );\n vec2 texelSize = vec2( 1.0 ) / size;\n vec2 centroidUV = floor( uv * size + 0.5 ) / size;\n float lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n float lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n float rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n float rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n vec2 f = fract( uv * size + 0.5 );\n float a = mix( lb, lt, f.y );\n float b = mix( rb, rt, f.y );\n float c = mix( a, b, f.x );\n return c;\n\t}\n\t\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\n\t\tfloat shadow = 1.0;\n\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\n\t\t// if ( something && something ) breaks ATI OpenGL shader compiler\n\t\t// if ( all( something, something ) ) using this instead\n\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\n\t\tbool frustumTest = all( frustumTestVec );\n\n\t\tif ( frustumTest ) {\n\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\treturn (\n\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\n\t\t#else // no percentage-closer filtering:\n\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\n\t\t#endif\n\n\t\t}\n\n\t\treturn shadow;\n\n\t}\n\n\t// cubeToUV() maps a 3D direction vector suitable for cube texture mapping to a 2D\n\t// vector suitable for 2D texture mapping. This code uses the following layout for the\n\t// 2D texture:\n\t//\n\t// xzXZ\n\t// y Y\n\t//\n\t// Y - Positive y direction\n\t// y - Negative y direction\n\t// X - Positive x direction\n\t// x - Negative x direction\n\t// Z - Positive z direction\n\t// z - Negative z direction\n\t//\n\t// Source and test bed:\n\t// https://gist.github.com/tschw/da10c43c467ce8afd0c4\n\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\n\t\t// Number of texels to avoid at the edge of each square\n\n\t\tvec3 absV = abs( v );\n\n\t\t// Intersect unit cube\n\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\n\t\t// Apply scale to avoid seams\n\n\t\t// two texels less per square (one texel will do for NEAREST)\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\n\t\t// Unwrap\n\n\t\t// space: -1 ... 1 range for each square\n\t\t//\n\t\t// #X##\t\tdim := ( 4 , 2 )\n\t\t// # #\t\tcenter := ( 1 , 1 )\n\n\t\tvec2 planar = v.xy;\n\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\n\t\tif ( absV.z >= almostOne ) {\n\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\n\t\t} else if ( absV.x >= almostOne ) {\n\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\n\t\t} else if ( absV.y >= almostOne ) {\n\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\n\t\t}\n\n\t\t// Transform to UV space\n\n\t\t// scale := 0.5 / dim\n\t\t// translate := ( center + 0.5 ) / dim\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\n\t}\n\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\n\t\t// for point lights, the uniform @vShadowCoord is re-purposed to hold\n\t\t// the vector from the light to the world-space position of the fragment.\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\n\t\t// dp = normalized distance from light to fragment position\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); // need to clamp?\n\t\tdp += shadowBias;\n\n\t\t// bd3D = base direction 3D\n\t\tvec3 bd3D = normalize( lightToPosition );\n\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\n\t\t#else // no percentage-closer filtering\n\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\n\t\t#endif\n\n\t}\n\n#endif\n"},r.DepthFragShader={depth_frag:" \n #if DEPTH_PACKING == 3200\n\n\tuniform float opacity;\n\n#endif\n\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\n\nvarying vec2 vHighPrecisionZW;\n\nvoid main() {\n\n\t#include <clipping_planes_fragment>\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tdiffuseColor.a = opacity;\n\n\t#endif\n\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\n\t#include <logdepthbuf_fragment>\n\n\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\n\t#elif DEPTH_PACKING == 3201\n\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\n\t#endif\n\n}\n"},r.CSMShader={csm_fragment:"\n uniform vec2 csmCascades[4];\n float calcShadowFactor(vec3 normal)\n {\n float shadowFactor = 1.0;\n #ifdef USE_CSM\n #if ( NUM_DIR_LIGHTS > 0 )\n #ifdef USE_SHADOWMAP\n float viewDepth = vViewPosition.z;\n DirectionalLight directionalLight;\n directionalLight = directionalLights[ 0 ];\n #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n DirectionalLightShadow directionalLightShadow;\n #endif\n directionalLightShadow = directionalLightShadows[ 0 ];\n\n float bias = cos(80.0);\n float biasFactor = 0.8;\n if (viewDepth >= csmCascades[0].x && viewDepth < csmCascades[0].y) {\n shadowFactor = getShadow( directionalShadowMap[ 0 ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ 0 ] );\n float dotNL = dot( normal, directionalLight.direction );\n if (dotNL < bias) {\n shadowFactor = biasFactor;\n }\n }\n\n #if ( NUM_DIR_LIGHTS > 1 )\n directionalLight = directionalLights[ 1 ];\n directionalLightShadow = directionalLightShadows[ 1 ];\n if (viewDepth >= csmCascades[1].x && viewDepth < csmCascades[1].y) {\n shadowFactor = getShadow( directionalShadowMap[ 1 ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ 1 ] );\n float dotNL = dot( normal, directionalLight.direction );\n if (dotNL < bias) {\n shadowFactor = biasFactor;\n }\n }\n #endif\n\n #if ( NUM_DIR_LIGHTS > 2 )\n directionalLight = directionalLights[ 2 ];\n directionalLightShadow = directionalLightShadows[ 2 ];\n if (viewDepth >= csmCascades[2].x && viewDepth < csmCascades[2].y) {\n shadowFactor = getShadow( directionalShadowMap[ 2 ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ 2 ] );\n float dotNL = dot( normal, directionalLight.direction );\n if (dotNL < bias) {\n shadowFactor = biasFactor;\n }\n }\n #endif\n\n #if ( NUM_DIR_LIGHTS > 3 )\n directionalLight = directionalLights[ 3 ];\n directionalLightShadow = directionalLightShadows[ 3 ];\n if (viewDepth >= csmCascades[3].x && viewDepth < csmCascades[3].y) {\n shadowFactor = getShadow( directionalShadowMap[ 3 ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ 3 ] );\n float dotNL = dot( normal, directionalLight.direction );\n if (dotNL < bias) {\n shadowFactor = biasFactor;\n }\n }\n #endif\n #endif\n #endif\n #endif\n shadowFactor = max(shadowFactor, 0.0);\n return shadowFactor;\n }\n "},r.CompressNormalShader={CompressNormal_vertex:"\n #ifdef CNORMAL\n attribute vec2 cNormal;\n\n float signNotZero(float value)\n {\n return value >= 0.0 ? 1.0 : -1.0;\n }\n\n vec2 signNotZero(vec2 value)\n {\n return vec2(signNotZero(value.x), signNotZero(value.y));\n }\n\n vec3 octDecode(){\n vec2 encoded = cNormal;\n if (encoded.x == 0.0 && encoded.y == 0.0) {\n return vec3(0.0, 0.0, 0.0);\n }\n\n encoded = encoded / 255.0 * 2.0 - 1.0;\n vec3 v = vec3(encoded.x, encoded.y, 1.0 - abs(encoded.x) - abs(encoded.y));\n if (v.z < 0.0)\n {\n v.xy = (1.0 - abs(v.yx)) * signNotZero(v.xy);\n }\n return normalize(v);\n }\n #endif\n "},r.CompressColorShader={CompressColor_vertex:"\n #ifdef CCOLOR\n attribute uint cColor;\n varying vec4 ocColor;\n vec4 decodeColor(){\n uint ucColor = uint(cColor);\n float ca = float(ucColor >> 24) / 255.0;\n uint cri = ucColor << 8;\n float cr = float(cri >> 24) / 255.0;\n uint cgi = ucColor << 16;\n float cg = float(cgi >> 24) / 255.0;\n uint cgb = ucColor << 24;\n float cb = float(cgb >> 24) / 255.0;\n vec4 vcColor = vec4(cr, cg, cb, 1.0);\n return vcColor;\n }\n #endif\n "},r.VertexColorFrag={vertex_color_frag:"\n #if defined( USE_COLOR_ALPHA )\n diffuseColor = vec4(vColor.bgr, opacity);\n #elif defined( USE_COLOR )\n diffuseColor.rgb = vColor.rgb;\n #endif\n "},r.HeightLimitShader={heightLimit_pars_vertex:"\n #ifdef HEIGHT_LIMIT_READ\n uniform mat4 heightLimitOrthoMatrix;\n varying vec3 v_HeightLimitOrthoPosition;\n varying float heightWorld;\n #endif\n",heightLimit_vertex:"\n #ifdef HEIGHT_LIMIT_READ\n vec4 othPostion = heightLimitOrthoMatrix * modelMatrix * vec4( transformed, 1.0 );//???\n othPostion /= othPostion.w;\n v_HeightLimitOrthoPosition = othPostion.xyz;\n heightWorld = (modelMatrix * vec4( transformed, 1.0 )).y;\n #endif\n",heightLimit_pars_fragment:"\n #ifdef HEIGHT_LIMIT_READ\n varying vec3 v_HeightLimitOrthoPosition;\n uniform sampler2D heightLimitSampler;\n uniform sampler2D heightColorSampler;\n varying float heightWorld;\n\n vec2 postProjToScreen(vec2 position)\n {\n vec2 screenPos = position;\n \n return 0.5 *(vec2(screenPos.x, screenPos.y) + 1.0);\n }\n\n float decode_float(vec4 v) {\n vec4 bits = v * 255.0;\n float sign = mix(-1.0, 1.0, step(bits[3], 128.0));\n float expo = floor(mod(bits[3] + 0.1, 128.0)) * 2.0 + floor((bits[2] + 0.1) / 128.0) - 127.0;\n float sig = bits[0] + bits[1] * 256.0 + floor(mod(bits[2] + 0.1, 128.0)) * 256.0 * 256.0;\n return sign * (1.0 + sig / 8388607.0) * pow(2.0, expo);\n }\n\n #endif\n\n #ifdef HEIGHT_LIMIT_WRITE\n uniform float heightLimit;\n uniform bool useHeightLimit;\n\n #define FLOAT_MAX 1.70141184e38\n #define FLOAT_MIN 1.17549435e-38\n lowp vec4 encode_float(highp float v) {\n highp float av = abs(v);\n \n //Handle special cases\n if(av < FLOAT_MIN) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n } else if(v > FLOAT_MAX) {\n return vec4(127.0, 128.0, 0.0, 0.0) / 255.0;\n } else if(v < -FLOAT_MAX) {\n return vec4(255.0, 128.0, 0.0, 0.0) / 255.0;\n }\n \n highp vec4 c = vec4(0,0,0,0);\n \n //Compute exponent and mantissa\n highp float e = floor(log2(av));\n highp float m = av * pow(2.0, -e) - 1.0;\n \n //Unpack mantissa\n c[1] = floor(128.0 * m);\n m -= c[1] / 128.0;\n c[2] = floor(32768.0 * m);\n m -= c[2] / 32768.0;\n c[3] = floor(8388608.0 * m);\n \n //Unpack exponent\n highp float ebias = e + 127.0;\n c[0] = floor(ebias / 2.0);\n ebias -= c[0] * 2.0;\n c[1] += floor(ebias) * 128.0; \n \n //Unpack sign bit\n c[0] += 128.0 * step(0.0, -v);\n \n //Scale back to range\n return c / 255.0;\n }\n #endif\n",heightLimit_fragment:"\n #ifdef HEIGHT_LIMIT_READ\n vec2 heightLimitUV = postProjToScreen(v_HeightLimitOrthoPosition.xy);\n if(heightLimitUV.x >= 0.0 && heightLimitUV.x <= 1.0 && heightLimitUV.y >= 0.0 && heightLimitUV.y <= 1.0)\n {\n vec4 color = texture2D(heightColorSampler, heightLimitUV);\n \n vec4 heightColor = texture2D(heightLimitSampler, heightLimitUV);\n float heightLimit0 = decode_float(heightColor);//unpackRGBAToDepth\n if(color.a > 0.01 &&heightWorld > heightLimit0 && (heightColor != vec4(0.0,0.0,0.0,0.0))) // edge\n {\n gl_FragColor = color;//a?\n }\n }\n #endif\n #ifdef HEIGHT_LIMIT_WRITE\n if(useHeightLimit){\n gl_FragColor = encode_float(heightLimit).abgr;//packDepthToRGBA(heightLimit);//(0-1)\n }\n #endif \n\n"},r.WallShader={uniforms:{blendingRatio:{value:0},directionType:{value:0},directionReverse:{value:0},time:{value:0},unitLength:{value:0},repeat:{value:1}},vertexShader:"\n #include <common>\n #include <uv_pars_vertex>\n #include <uv2_pars_vertex>\n #include <envmap_pars_vertex>\n #include <color_pars_vertex>\n #include <fog_pars_vertex>\n #include <morphtarget_pars_vertex>\n #include <skinning_pars_vertex>\n #include <logdepthbuf_pars_vertex>\n #include <clipping_planes_pars_vertex>\n void main() {\n #include <uv_vertex>\n #include <uv2_vertex>\n #include <color_vertex>\n #include <skinbase_vertex>\n #ifdef USE_ENVMAP\n #include <beginnormal_vertex>\n #include <morphnormal_vertex>\n #include <skinnormal_vertex>\n #include <defaultnormal_vertex>\n #endif\n #include <begin_vertex>\n #include <morphtarget_vertex>\n #include <skinning_vertex>\n #include <project_vertex>\n #include <logdepthbuf_vertex>\n #include <worldpos_vertex>\n #include <clipping_planes_vertex>\n #include <envmap_vertex>\n #include <fog_vertex>\n }\n ",fragmentShader:"\n uniform float blendingRatio;\n uniform float directionType;\n uniform float directionReverse;\n uniform float time;\n\n uniform float unitLength;\n uniform float repeat;\n\n uniform vec3 diffuse;\n uniform float opacity;\n #ifndef FLAT_SHADED\n varying vec3 vNormal;\n #endif\n #include <common>\n #include <color_pars_fragment>\n #include <uv_pars_fragment>\n #include <uv2_pars_fragment>\n #include <map_pars_fragment>\n #include <alphamap_pars_fragment>\n #include <aomap_pars_fragment>\n #include <lightmap_pars_fragment>\n #include <envmap_pars_fragment>\n #include <fog_pars_fragment>\n #include <specularmap_pars_fragment>\n #include <logdepthbuf_pars_fragment>\n #include <clipping_planes_pars_fragment>\n void main() {\n #include <clipping_planes_fragment>\n #include <logdepthbuf_fragment>\n// #include <map_fragment>\n// #include <color_fragment>\n// #include <alphamap_fragment>\n// #include <alphatest_fragment>\n// #include <specularmap_fragment>\n// ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n// #ifdef USE_LIGHTMAP\n// reflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n// #else\n// reflectedLight.indirectDiffuse += vec3( 1.0 );\n// #endif\n// #include <aomap_fragment>\n// reflectedLight.indirectDiffuse *= diffuseColor.rgb;\n// vec3 outgoingLight = reflectedLight.indirectDiffuse;\n// #include <normal_flip>\n// #include <envmap_fragment>\n// gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\n vec2 vUvDirection;\n float uvReverse;\n if(directionType > 0.0){\n uvReverse = vUv.y;\n vUvDirection.y =vUv.x;\n }else{\n uvReverse = vUv.x;\n vUvDirection.y =vUv.y;\n }\n\n float _unitLength = 1.0/unitLength;\n float _orginLength = 0.0;\n if(directionReverse>0.0){\n uvReverse = 1.0 - uvReverse;\n _orginLength=uvReverse;\n if(unitLength>1.0){\n uvReverse =uvReverse/_unitLength + time*unitLength;\n }else{\n uvReverse =uvReverse/_unitLength + time;\n }\n }else{\n _orginLength=uvReverse;\n if(unitLength>1.0){\n uvReverse =uvReverse/_unitLength - time*unitLength;\n }else{\n uvReverse =uvReverse/_unitLength - time;\n }\n }\n\n vUvDirection.x =fract(uvReverse);\n //重复场合\n if(unitLength > 1.0 && repeat<1.0){\n float _time = time + _unitLength;\n if(_orginLength < time ||_orginLength>_time){\n if(_time>1.0 && _orginLength< fract(_time)){\n //闭合场合\n }\n else{\n gl_FragColor = vec4(0.0);\n return;\n }\n }\n }\n vec4 colorImage;\n\n //临时解决方案,原因很奇怪,有时候会出现虚线\n if(vUvDirection.x>0.99) {\n colorImage = texture2D(map, vec2(0.99,vUvDirection.y));\n } else if(vUvDirection.x<0.01) {\n colorImage = texture2D(map, vec2(0.01,vUvDirection.y));\n }else{\n colorImage = texture2D(map, vUvDirection);\n }\n vec3 diffuseColor = mix(diffuse, colorImage.rgb, blendingRatio);\n\n gl_FragColor = vec4(diffuseColor, colorImage.a * opacity);\n\n #include <premultiplied_alpha_fragment>\n #include <tonemapping_fragment>\n #include <encodings_fragment>\n #include <fog_fragment>\n }\n "},r.PlaneScanShader={uniforms:{blendingRatio:{value:0},angle:{value:0},time:{value:0}},vertexShader:"\n #include <common>\n #include <uv_pars_vertex>\n #include <uv2_pars_vertex>\n #include <envmap_pars_vertex>\n #include <color_pars_vertex>\n #include <fog_pars_vertex>\n #include <morphtarget_pars_vertex>\n #include <skinning_pars_vertex>\n #include <logdepthbuf_pars_vertex>\n #include <clipping_planes_pars_vertex>\n void main() {\n #include <uv_vertex>\n #include <uv2_vertex>\n #include <color_vertex>\n #include <skinbase_vertex>\n #ifdef USE_ENVMAP\n #include <beginnormal_vertex>\n #include <morphnormal_vertex>\n #include <skinnormal_vertex>\n #include <defaultnormal_vertex>\n #endif\n #include <begin_vertex>\n #include <morphtarget_vertex>\n #include <skinning_vertex>\n #include <project_vertex>\n #include <logdepthbuf_vertex>\n #include <worldpos_vertex>\n #include <clipping_planes_vertex>\n #include <envmap_vertex>\n #include <fog_vertex>\n }\n ",fragmentShader:"\n uniform float blendingRatio;\n uniform float angle;\n uniform float time;\n\n uniform vec3 diffuse;\n uniform float opacity;\n #ifndef FLAT_SHADED\n varying vec3 vNormal;\n #endif\n #include <common>\n #include <color_pars_fragment>\n #include <uv_pars_fragment>\n #include <uv2_pars_fragment>\n #include <map_pars_fragment>\n #include <alphamap_pars_fragment>\n #include <aomap_pars_fragment>\n #include <lightmap_pars_fragment>\n #include <envmap_pars_fragment>\n #include <fog_pars_fragment>\n #include <specularmap_pars_fragment>\n #include <logdepthbuf_pars_fragment>\n #include <clipping_planes_pars_fragment>\n mat2 rotate(float rad) {\n float c = cos(rad);\n float s = sin(rad);\n return mat2(\n c, s,\n -s, c\n );\n }\n void main() {\n #include <clipping_planes_fragment>\n #include <logdepthbuf_fragment>\n\n vec2 vUvDirection = rotate(-angle) * vec2(vUv.x, vUv.y);\n vUvDirection.x = fract(vUvDirection.x - time);\n vUvDirection.y = fract(vUvDirection.y);\n\n //临时解决方案,原因很奇怪,有时候会出现虚线\n vec4 colorImage;\n float _max = 0.99;\n float _min = 0.01;\n if(vUvDirection.y>_max && vUvDirection.x>_max) {\n colorImage = texture2D(map, vec2(_max, _max));\n } else if(vUvDirection.y>_max && vUvDirection.x<_min) {\n colorImage = texture2D(map, vec2(_min, _max));\n } else if(vUvDirection.y<_min && vUvDirection.x>_max) {\n colorImage = texture2D(map, vec2(_min, _max));\n }else if(vUvDirection.y<_min && vUvDirection.x<_min) {\n colorImage = texture2D(map, vec2(_min, _min));\n }else if(vUvDirection.y>_max) {\n colorImage = texture2D(map, vec2(vUvDirection.x,_max));\n } else if(vUvDirection.y<_min) {\n colorImage = texture2D(map, vec2(vUvDirection.x,_min));\n } else if(vUvDirection.x>_max) {\n colorImage = texture2D(map, vec2(_max, vUvDirection.y));\n }else if(vUvDirection.x<_min) {\n colorImage = texture2D(map, vec2(_min, vUvDirection.y));\n } else {\n colorImage = texture2D(map, vUvDirection);\n }\n\n vec3 diffuseColor = mix(diffuse, colorImage.rgb, blendingRatio);\n gl_FragColor = vec4(diffuseColor, colorImage.a * opacity);\n\n #include <premultiplied_alpha_fragment>\n #include <tonemapping_fragment>\n #include <encodings_fragment>\n #include <fog_fragment>\n }\n "},r.ViewshedShader={view_shed_pars_vertex:"\n #ifdef VIEW_SHED_MODE\n const int MAX_VIEWSHED_COUNT = 4;\n uniform int viewshedCount;\n struct ViewshedContent {\n mat4 viewshedViewProjMatrix;\n mat4 viewshedViewMatrix;\n vec4 viewshedVisibleColor;\n vec4 viewshedHiddenColor;\n vec2 viewshedMinMax;\n float viewshedLogDepthBufFC;\n\t\t};\n\n uniform ViewshedContent viewshedContents[ MAX_VIEWSHED_COUNT ];\n varying float viewshedFragDepth[MAX_VIEWSHED_COUNT];\n varying vec3 viewshedWorldPosition;\n #endif\n",view_shed_pars_fragment:"\n #ifdef VIEW_SHED_MODE\n const int MAX_VIEWSHED_COUNT = 4;\n uniform int viewshedCount;\n uniform sampler2D viewshedDepthMaps[ MAX_VIEWSHED_COUNT ];\n\n struct ViewshedContent {\n mat4 viewshedViewProjMatrix;\n mat4 viewshedViewMatrix;\n vec4 viewshedVisibleColor;\n vec4 viewshedHiddenColor;\n vec2 viewshedMinMax;\n float viewshedLogDepthBufFC;\n\t\t};\n\n uniform ViewshedContent viewshedContents[ MAX_VIEWSHED_COUNT ];\n varying float viewshedFragDepth[MAX_VIEWSHED_COUNT];\n varying vec3 viewshedWorldPosition;\n \n float toLinearDepth(float fragCoordZ, float near, float far)\n {\n float viewZ = perspectiveDepthToViewZ( fragCoordZ, near, far );\n\t\t\treturn viewZToOrthographicDepth( viewZ, near, far );\n }\n\n float sampleDepthMap(sampler2D depthMap, vec2 uv){\n vec4 depthColor = texture2D(depthMap, uv);\n return unpackRGBAToDepth(depthColor);\n }\n\n float viewshedDepthCompare(sampler2D depthMap, vec2 uv, float depth){\n return step(depth, sampleDepthMap(depthMap, uv));\n }\n\n float viewshedVisibility(sampler2D depthMap, vec2 uv, float depth, float depthBias){\n depth -= depthBias;\n vec2 texelStepSize = 1.0 / vec2(1024.0, 1024.0);\n float radius = 1.0;\n float dx0 = -texelStepSize.x * radius;\n float dy0 = -texelStepSize.y * radius;\n float dx1 = texelStepSize.x * radius;\n float dy1 = texelStepSize.y * radius;\n float visibility = \n (\n viewshedDepthCompare(depthMap, uv, depth) +\n viewshedDepthCompare(depthMap, uv + vec2(dx0, dy0), depth) +\n viewshedDepthCompare(depthMap, uv + vec2(0.0, dy0), depth) +\n viewshedDepthCompare(depthMap, uv + vec2(dx1, dy0), depth) +\n viewshedDepthCompare(depthMap, uv + vec2(dx0, 0.0), depth) +\n viewshedDepthCompare(depthMap, uv + vec2(dx1, 0.0), depth) +\n viewshedDepthCompare(depthMap, uv + vec2(dx0, dy1), depth) +\n viewshedDepthCompare(depthMap, uv + vec2(0.0, dy1), depth) +\n viewshedDepthCompare(depthMap, uv + vec2(dx1, dy1), depth)\n ) * (1.0 / 9.0)\n ;\n return visibility;\n }\n #endif\n",view_shed_vertex:"\n #ifdef VIEW_SHED_MODE\n for (int i=0; i<MAX_VIEWSHED_COUNT; i++)\n {\n if (i >= viewshedCount) \n {\n break;\n }\n vec4 viewshedProjPosition = viewshedContents[i].viewshedViewProjMatrix * vec4(vsWorldPosition.xyz, 1.0);\n float fragDepth = 1.0 + viewshedProjPosition.w;\n viewshedFragDepth[i] = fragDepth;\n }\n viewshedWorldPosition = vsWorldPosition.xyz;\n #endif\n",view_shed_fragment:"\n #ifdef VIEW_SHED_MODE\n vec3 resultColor = gl_FragColor.rgb;\n #pragma unroll_loop_start\n for (int i=0; i<4; i++)\n {\n if(UNROLLED_LOOP_INDEX < viewshedCount) {\n vec4 visibleColor = viewshedContents[i].viewshedVisibleColor;\n vec4 hiddenColor = viewshedContents[i].viewshedHiddenColor;\n vec4 viewshedViewPosition = viewshedContents[i].viewshedViewMatrix * vec4(viewshedWorldPosition, 1.0);\n vec4 viewshedClipPosition = viewshedContents[i].viewshedViewProjMatrix * vec4(viewshedWorldPosition, 1.0);\n viewshedClipPosition = viewshedClipPosition / viewshedClipPosition.w;\n vec3 viewshedUV = viewshedClipPosition.xyz * 0.5 + 0.5;\n \n vec2 minMax = viewshedContents[i].viewshedMinMax;\n float fragDistance = length(viewshedViewPosition.xyz);\n if(fragDistance <= minMax.y &&\n viewshedUV.x >= 0.0 && viewshedUV.x <= 1.0 &&\n viewshedUV.y >=0.0 && viewshedUV.y <= 1.0 &&\n viewshedUV.z >=0.0 && viewshedUV.z <= 1.0)\n {\n float fragZ = log2( viewshedFragDepth[i] ) * viewshedContents[i].viewshedLogDepthBufFC * 0.5;\n vec4 depthColor = texture2D(viewshedDepthMaps[i], viewshedUV.xy);\n float closetDepth = unpackRGBAToDepth(depthColor);\n float depthBias = 0.002 + smoothstep(100.0, 1000.0, fragDistance) * 0.058;\n \n // float visibility = viewshedVisibility(viewshedDepthMaps[i], viewshedUV.xy, fragZ, depthBias); \n // if (visibility == 1.0)\n if (fragZ - depthBias < closetDepth || closetDepth < depthBias)\n {\n resultColor = mix(visibleColor.rgb, resultColor, 1.0 - visibleColor.a);\n }\n else\n {\n resultColor = mix(hiddenColor.rgb, resultColor, 1.0 - hiddenColor.a);\n }\n }\n }\n }\n #pragma unroll_loop_end\n gl_FragColor.rgb = resultColor;\n #endif\n"},r.VideoCastShader={video_cast_pars_vertex:"\n #ifdef VIDEO_CAST_MODE\n const int MAX_VIDEO_CAST_COUNT = 4;\n uniform int videoCastCount;\n struct VideoCastContent {\n mat4 viewProjMatrix;\n mat4 viewMatrix;\n float logDepthBufFC;\n\t\t};\n\n uniform VideoCastContent videoCastContents[ MAX_VIDEO_CAST_COUNT ];\n varying float videoCastFragDepth[MAX_VIDEO_CAST_COUNT];\n varying vec3 videoCastWorldPosition;\n #endif\n",video_cast_pars_fragment:"\n #ifdef VIDEO_CAST_MODE\n const int MAX_VIDEO_CAST_COUNT = 4;\n uniform int videoCastCount;\n uniform sampler2D videoCastDepthMaps[ MAX_VIDEO_CAST_COUNT ];\n uniform sampler2D videoCastProjectorMaps[ MAX_VIDEO_CAST_COUNT];\n\n struct VideoCastContent {\n mat4 viewProjMatrix;\n mat4 viewMatrix;\n float logDepthBufFC;\n\t\t};\n\n uniform VideoCastContent videoCastContents[ MAX_VIDEO_CAST_COUNT ];\n varying float videoCastFragDepth[MAX_VIDEO_CAST_COUNT];\n varying vec3 videoCastWorldPosition;\n \n float toLinearDepth(float fragCoordZ, float near, float far)\n {\n float viewZ = perspectiveDepthToViewZ( fragCoordZ, near, far );\n\t\t\treturn viewZToOrthographicDepth( viewZ, near, far );\n }\n\n float sampleDepthMap(sampler2D depthMap, vec2 uv){\n vec4 depthColor = texture2D(depthMap, uv);\n return unpackRGBAToDepth(depthColor);\n }\n\n float videoCastDepthCompare(sampler2D depthMap, vec2 uv, float depth){\n return step(depth, sampleDepthMap(depthMap, uv));\n }\n\n float videoCastVisibility(sampler2D depthMap, vec2 uv, float depth, float depthBias){\n depth -= depthBias;\n vec2 texelStepSize = 1.0 / vec2(1024.0, 1024.0);\n float radius = 1.0;\n float dx0 = -texelStepSize.x * radius;\n float dy0 = -texelStepSize.y * radius;\n float dx1 = texelStepSize.x * radius;\n float dy1 = texelStepSize.y * radius;\n float visibility = \n (\n videoCastDepthCompare(depthMap, uv, depth) +\n videoCastDepthCompare(depthMap, uv + vec2(dx0, dy0), depth) +\n videoCastDepthCompare(depthMap, uv + vec2(0.0, dy0), depth) +\n videoCastDepthCompare(depthMap, uv + vec2(dx1, dy0), depth) +\n videoCastDepthCompare(depthMap, uv + vec2(dx0, 0.0), depth) +\n videoCastDepthCompare(depthMap, uv + vec2(dx1, 0.0), depth) +\n videoCastDepthCompare(depthMap, uv + vec2(dx0, dy1), depth) +\n videoCastDepthCompare(depthMap, uv + vec2(0.0, dy1), depth) +\n videoCastDepthCompare(depthMap, uv + vec2(dx1, dy1), depth)\n ) * (1.0 / 9.0)\n ;\n return visibility;\n }\n #endif\n",video_cast_vertex:"\n #ifdef VIDEO_CAST_MODE\n for (int i=0; i<videoCastCount; i++)\n {\n vec4 videoCastProjPosition = videoCastContents[i].viewProjMatrix * vec4(vsWorldPosition.xyz, 1.0);\n float fragDepth = 1.0 + videoCastProjPosition.w;\n videoCastFragDepth[i] = fragDepth;\n }\n videoCastWorldPosition = vsWorldPosition.xyz;\n #endif\n",video_cast_fragment:"\n #ifdef VIDEO_CAST_MODE\n vec3 resultColor = gl_FragColor.rgb;\n #pragma unroll_loop_start\n for (int i=0; i<4; i++)\n {\n if(UNROLLED_LOOP_INDEX < videoCastCount) \n {\n vec4 videoCastViewPosition = videoCastContents[i].viewMatrix * vec4(videoCastWorldPosition, 1.0);\n vec4 videoCastClipPosition = videoCastContents[i].viewProjMatrix * vec4(videoCastWorldPosition, 1.0);\n videoCastClipPosition = videoCastClipPosition / videoCastClipPosition.w;\n vec3 videoCastUV = videoCastClipPosition.xyz * 0.5 + 0.5;\n \n vec4 textureColor = texture2D(videoCastProjectorMaps[i], videoCastUV.xy);\n \n float fragDistance = length(videoCastViewPosition.xyz);\n if(videoCastUV.x >= 0.0 && videoCastUV.x <= 1.0 &&\n videoCastUV.y >=0.0 && videoCastUV.y <= 1.0 &&\n videoCastUV.z >=0.0 && videoCastUV.z <= 1.0)\n {\n float fragZ = log2( videoCastFragDepth[i] ) * videoCastContents[i].logDepthBufFC * 0.5;\n vec4 depthColor = texture2D(videoCastDepthMaps[i], videoCastUV.xy);\n float closetDepth = unpackRGBAToDepth(depthColor);\n float depthBias = 0.002 + smoothstep(100.0, 1000.0, fragDistance) * 0.058;\n \n if (fragZ - depthBias < closetDepth)\n {\n resultColor = textureColor.rgb;\n }\n }\n }\n \n }\n #pragma unroll_loop_end\n\n gl_FragColor.rgb = resultColor;\n #endif\n"},function(){class e extends THREE.MeshBasicMaterial{constructor(e){super(e),this.type="GroundCurveMaterial",this.cameraNear=.1,this.cameraFar=10,this.pixelRatio=1,this.frustumPlanes=new THREE.Vector4,this.viewport=new THREE.Vector4,this.geometricToleranceOverMeter=1,this.lineWidth=1,this.globeDepthTexture=null,this.customDepthTexture=null,this.cameraProjection=new THREE.Matrix4,this.inverseProjection=new THREE.Matrix4,this.dashMode=0,this.dashSize=16,this.clampMode=0,this.uniforms=THREE.UniformsUtils.merge([THREE.ShaderLib.basic.uniforms,{cameraNear:{value:this.cameraNear},cameraFar:{value:this.cameraFar},pixelRatio:{value:this.pixelRatio},frustumPlanes:{value:this.frustumPlanes.clone()},viewport:{value:this.viewport.clone()},geometricToleranceOverMeter:{value:this.geometricToleranceOverMeter},lineWidth:{value:this.lineWidth},globeDepthTexture:{value:this.globeDepthTexture},customDepthTexture:{value:this.customDepthTexture},cameraProjection:{value:this.cameraProjection},inverseProjection:{value:this.inverseProjection},dashMode:{value:this.dashMode},dashSize:{value:this.dashSize},clampMode:{value:this.clampMode}}]),this.vertexShader=r.GroundCurveShader.vertexShader,this.fragmentShader=r.GroundCurveShader.fragmentShader}refreshUniforms(){this.uniforms.cameraNear.value=this.cameraNear,this.uniforms.cameraFar.value=this.cameraFar,this.uniforms.pixelRatio.value=this.pixelRatio,this.uniforms.frustumPlanes.value.copy(this.frustumPlanes),this.uniforms.viewport.value.copy(this.viewport),this.uniforms.geometricToleranceOverMeter.value=this.geometricToleranceOverMeter,this.uniforms.lineWidth.value=this.lineWidth,this.uniforms.globeDepthTexture.value=this.globeDepthTexture,this.uniforms.customDepthTexture.value=this.customDepthTexture,this.uniforms.cameraProjection.value=this.cameraProjection,this.uniforms.inverseProjection.value=this.inverseProjection,this.uniforms.dashMode.value=this.dashMode,this.uniforms.dashSize.value=this.dashSize,this.uniforms.clampMode.value=this.clampMode}}r.GroundCurveMaterial=e}(),r.GroundCurveShader={vertexShader:"\n precision highp float;\n precision highp int;\n #include <common>\n #include <fog_pars_vertex>\n #include <logdepthbuf_pars_vertex>\n #include <clipping_planes_pars_vertex>\n const float GLOBE_MINIMUM_ALTITUDE = 6356752.3;\n const float pi = 3.141592653589793;\n const float piOverTwo = 1.5707963267948966;\n attribute vec3 startPosition;\n attribute vec3 startNormal;\n attribute vec3 endNormal;\n attribute vec3 rightNormal;\n attribute vec3 forwardOffset;\n attribute vec2 texcoordNormalization;\n\n varying vec4 v_startPlaneNormalEcAndHalfWidth;\n varying vec3 v_endPlaneNormalEc;\n varying vec4 v_rightPlaneEC;\n varying vec4 v_endEcAndStartEcX;\n varying vec4 v_texcoordNormalizationAndStartEcYZ;\n varying float v_polylineAngle;\n\n uniform float cameraNear;\n uniform float cameraFar;\n uniform float pixelRatio;\n uniform vec4 frustumPlanes;\n uniform vec4 viewport;\n uniform float geometricToleranceOverMeter;\n uniform float lineWidth;\n\n float planeDistance(vec4 plane, vec3 point) {\n return (dot(plane.xyz, point) + plane.w);\n }\n float planeDistance(vec3 planeNormal, float planeDistance, vec3 point) {\n return (dot(planeNormal, point) + planeDistance);\n }\n float branchFreeTernary(bool comparison, float a, float b) {\n float useA = float(comparison);\n return a * useA + b * (1.0 - useA);\n }\n vec2 branchFreeTernary(bool comparison, vec2 a, vec2 b) {\n float useA = float(comparison);\n return a * useA + b * (1.0 - useA);\n }\n vec3 branchFreeTernary(bool comparison, vec3 a, vec3 b) {\n float useA = float(comparison);\n return a * useA + b * (1.0 - useA);\n }\n vec4 branchFreeTernary(bool comparison, vec4 a, vec4 b) {\n float useA = float(comparison);\n return a * useA + b * (1.0 - useA);\n }\n float metersPerPixel(vec4 positionEC, float pixelRatio) {\n float width = viewport.z;\n float height = viewport.w;\n float pixelWidth;\n float pixelHeight;\n float top = frustumPlanes.x;\n float bottom = frustumPlanes.y;\n float left = frustumPlanes.z;\n float right = frustumPlanes.w;\n\n float distanceToPixel = -positionEC.z;\n float inverseNear = 1.0 / cameraNear;\n float tanTheta = top * inverseNear;\n pixelHeight = 2.0 * distanceToPixel * tanTheta / height;\n tanTheta = right * inverseNear;\n pixelWidth = 2.0 * distanceToPixel * tanTheta / width;\n\n return max(pixelWidth, pixelHeight) * pixelRatio;\n }\n float metersPerPixel(vec4 positionEC) {\n return metersPerPixel(positionEC, pixelRatio);\n }\n float fastApproximateAtan(float x) {\n return x * (-0.1784 * x - 0.0663 * x * x + 1.0301);\n }\n float fastApproximateAtan(float x, float y) {\n float t = abs(x);\n float opposite = abs(y);\n float adjacent = max(t, opposite);\n opposite = min(t, opposite);\n t = fastApproximateAtan(opposite / adjacent);\n t = branchFreeTernary(abs(y) > abs(x), piOverTwo - t, t);\n t = branchFreeTernary(x < 0.0, pi - t, t);\n t = branchFreeTernary(y < 0.0, -t, t);\n return t;\n }\n\n void main() {\n vec3 ecStart = (viewMatrix * vec4(startPosition, 1.0)).xyz;\n vec3 offset = normalMatrix * forwardOffset;\n vec3 ecEnd = ecStart + offset;\n vec3 forwardDirectionEC = normalize(offset);\n vec4 startPlaneEC;\n startPlaneEC.xyz = normalMatrix * startNormal;\n startPlaneEC.w = -dot(startPlaneEC.xyz, ecStart);\n vec4 endPlaneEC;\n endPlaneEC.xyz = normalMatrix * endNormal;\n endPlaneEC.w = -dot(endPlaneEC.xyz, ecEnd);\n v_rightPlaneEC.xyz = normalMatrix * rightNormal;\n v_rightPlaneEC.w = -dot(v_rightPlaneEC.xyz, ecStart);\n v_texcoordNormalizationAndStartEcYZ.x = abs(texcoordNormalization.x);\n v_texcoordNormalizationAndStartEcYZ.y = texcoordNormalization.y;\n\n v_endEcAndStartEcX.xyz = ecEnd;\n v_endEcAndStartEcX.w = ecStart.x;\n v_texcoordNormalizationAndStartEcYZ.zw = ecStart.yz;\n\n vec4 positionEC = viewMatrix * vec4(position, 1.0);\n float absStartPlaneDistance = abs(planeDistance(startPlaneEC, positionEC.xyz));\n float absEndPlaneDistance = abs(planeDistance(endPlaneEC, positionEC.xyz));\n vec3 planeDirection = branchFreeTernary(absStartPlaneDistance < absEndPlaneDistance, startPlaneEC.xyz, endPlaneEC.xyz);\n vec3 upOrDown = normalize(cross(v_rightPlaneEC.xyz, planeDirection));\n vec3 normalEC = normalize(cross(planeDirection, upOrDown)); \n upOrDown = cross(forwardDirectionEC, normalEC);\n upOrDown = float(v_texcoordNormalizationAndStartEcYZ.y > 1.0 || v_texcoordNormalizationAndStartEcYZ.y < 0.0) * upOrDown;\n upOrDown = min(GLOBE_MINIMUM_ALTITUDE, geometricToleranceOverMeter * length(positionEC.xyz)) * upOrDown;\n positionEC.xyz += upOrDown;\n v_texcoordNormalizationAndStartEcYZ.y = branchFreeTernary(v_texcoordNormalizationAndStartEcYZ.y > 1.0, 0.0, abs(v_texcoordNormalizationAndStartEcYZ.y));\n float width = lineWidth;\n\n v_startPlaneNormalEcAndHalfWidth.xyz = startPlaneEC.xyz;\n v_startPlaneNormalEcAndHalfWidth.w = width * 0.5;\n v_endPlaneNormalEc = endPlaneEC.xyz;\n width = width * max(0.0, metersPerPixel(positionEC));\n width = width / dot(normalEC, v_rightPlaneEC.xyz);\n normalEC *= sign(texcoordNormalization.x);\n\n positionEC.xyz += width * normalEC;\n vec4 mvPosition = positionEC;\n gl_Position = projectionMatrix * mvPosition;\n\n vec2 approxLineDirection = normalize(vec2(forwardDirectionEC.x, -forwardDirectionEC.y));\n approxLineDirection.y = branchFreeTernary(approxLineDirection.x == 0.0 && approxLineDirection.y == 0.0, -1.0, approxLineDirection.y);\n v_polylineAngle = fastApproximateAtan(approxLineDirection.x, approxLineDirection.y);\n\n #include <logdepthbuf_vertex>\n #include <clipping_planes_vertex>\n #include <fog_vertex>\n }\n\n ",fragmentShader:"\n precision highp float;\n precision highp int;\n\n #include <common>\n #include <fog_pars_fragment>\n #include <logdepthbuf_pars_fragment>\n\n #include <clipping_planes_pars_fragment>\n #include <packing>\n #include <depth_parse_fragment>\n\n const float maskLength = 16.0;\n uniform vec3 diffuse;\n uniform float opacity;\n uniform float pixelRatio;\n uniform sampler2D globeDepthTexture;\n uniform sampler2D customDepthTexture;\n uniform int dashMode;\n uniform float dashSize;\n uniform vec4 frustumPlanes;\n uniform int clampMode;\n\n varying vec4 v_startPlaneNormalEcAndHalfWidth;\n varying vec3 v_endPlaneNormalEc;\n varying vec4 v_rightPlaneEC;\n varying vec4 v_endEcAndStartEcX;\n varying vec4 v_texcoordNormalizationAndStartEcYZ;\n varying float v_polylineAngle;\n\n float metersPerPixel(vec4 positionEC, float pixelRatio) {\n float width = viewport.z;\n float height = viewport.w;\n float pixelWidth;\n float pixelHeight;\n float top = frustumPlanes.x;\n float bottom = frustumPlanes.y;\n float left = frustumPlanes.z;\n float right = frustumPlanes.w;\n\n float distanceToPixel = -positionEC.z;\n float inverseNear = 1.0 / cameraNear;\n float tanTheta = top * inverseNear;\n pixelHeight = 2.0 * distanceToPixel * tanTheta / height;\n tanTheta = right * inverseNear;\n pixelWidth = 2.0 * distanceToPixel * tanTheta / width;\n\n return max(pixelWidth, pixelHeight) * pixelRatio;\n }\n float metersPerPixel(vec4 positionEC) {\n return metersPerPixel(positionEC, pixelRatio);\n }\n float planeDistance(vec4 plane, vec3 point) {\n return (dot(plane.xyz, point) + plane.w);\n }\n float planeDistance(vec3 planeNormal, float planeDistance, vec3 point) {\n return (dot(planeNormal, point) + planeDistance);\n }\n mat2 rotate(float rad) {\n float c = cos(rad);\n float s = sin(rad);\n return mat2(\n c, s, -s, c\n );\n }\n\n void main() {\n #include <clipping_planes_fragment>\n\n vec2 uv = gl_FragCoord.xy / viewport.zw;\n vec4 depthColor = texture2D(globeDepthTexture, uv);\n float depth = unpackRGBAToDepth(depthColor);\n if (depth == 0.0) {\n discard;\n }\n vec4 customColor = texture2D(customDepthTexture, uv);\n float customDepth = unpackRGBAToDepth(customColor);\n if (clampMode == 0) { //discard external components\n if (customDepth > 0.6) {\n discard;\n }\n }\n else if (clampMode == 1) { //only clamp to ground\n if (customDepth > 0.4) {\n discard;\n }\n } else if (clampMode == 2) { //only clamp to model\n if (customDepth < 0.1 || customDepth > 0.6) {\n discard;\n }\n }\n vec3 viewPosition = getViewPosition(depth);\n vec3 ecStart = vec3(v_endEcAndStartEcX.w, v_texcoordNormalizationAndStartEcYZ.zw);\n float halfMaxWidth = v_startPlaneNormalEcAndHalfWidth.w * metersPerPixel(vec4(viewPosition.xyz, 1.0));\n float widthwiseDistance = planeDistance(v_rightPlaneEC, viewPosition.xyz);\n float distanceFromStart = planeDistance(v_startPlaneNormalEcAndHalfWidth.xyz, -dot(ecStart, v_startPlaneNormalEcAndHalfWidth.xyz), viewPosition.xyz);\n float distanceFromEnd = planeDistance(v_endPlaneNormalEc.xyz, -dot(v_endEcAndStartEcX.xyz, v_endPlaneNormalEc.xyz), viewPosition.xyz);\n if (abs(widthwiseDistance) > halfMaxWidth || distanceFromStart < 0.0 || distanceFromEnd < 0.0) {\n discard;\n }\n \n vec4 diffuseColor = vec4( diffuse, opacity );\n vec4 fragColor = diffuseColor;\n\n if (dashMode > 0){\n vec2 pos = rotate(v_polylineAngle) * gl_FragCoord.xy;\n float dashPosition = fract(pos.x / (max(1.0, dashSize) * pixelRatio));\n float maskIndex = floor(dashPosition * maskLength);\n float maskTest = floor(255.0 / pow(2.0, maskIndex));\n fragColor = (mod(maskTest, 2.0) < 1.0) ? vec4(1.0, 1.0, 1.0, 0.0) : diffuseColor;\n if (fragColor.a < 0.005) {\n discard;\n }\n }\n\n #include <logdepthbuf_fragment>\n \n gl_FragColor = fragColor;\n\n #include <premultiplied_alpha_fragment>\n \n #if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n #endif\n \n gl_FragColor = linearToOutputTexel( gl_FragColor );\n #ifdef USE_FOG\n #ifdef FOG_EXP2\n float fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\n #else\n float fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n #endif\n gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n #endif\n }\n\n "},r.ShaderPass2=function(e,t){this.enabled=!0,this.needsSwap=!0,this.clear=!1,this.renderToScreen=!1,this.textureID=void 0!==t?t:"tDiffuse",e&&(this.uniforms=THREE.UniformsUtils.clone(e.uniforms),this.material=new THREE.ShaderMaterial({defines:e.defines||{},uniforms:this.uniforms,vertexShader:e.vertexShader,fragmentShader:e.fragmentShader})),this.camera=new THREE.OrthographicCamera(-1,1,1,-1,0,1),this.scene=new THREE.Scene,this.quad=new THREE.Mesh(new THREE.PlaneBufferGeometry(2,2),null),this.quad.frustumCulled=!1,this.scene.add(this.quad)},r.ShaderPass2.prototype={constructor:r.ShaderPass2,render:function(e,t,i,r){this.uniforms[this.textureID]&&(this.uniforms[this.textureID].value=i.texture),this.quad.material=this.material,this.renderToScreen?e.render(this.scene,this.camera):e.render(this.scene,this.camera,t,this.clear)}};new THREE.Vector3(0,0,0),["varying vec2 vUv;","void main() {","vUv = uv;","gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n"),["uniform sampler2D tDiffuse;","uniform sampler2D tID;","uniform int objID;","uniform vec3 objIDv3;","uniform float highlightIntensity;","varying vec2 vUv;","void main() {","vec4 texel = texture2D( tDiffuse, vUv );","if (objID != 0) {","vec4 idAtPixel = texture2D(tID, vUv);","vec3 idDelta = abs(idAtPixel.rgb - objIDv3.rgb);","if (max(max(idDelta.r, idDelta.g), idDelta.b) < 1e-3) {","texel.rgb += highlightIntensity * 0.2;","}","}","gl_FragColor = texel;","}"].join("\n");(()=>{class e extends THREE.ShaderMaterial{constructor(e){super(),this.type="PhongLightingMaterial",this.color=new THREE.Color(16777215),this.specular=new THREE.Color(1118481),this.shininess=30,this.emissive=new THREE.Color(0),this.isShaderMaterial=!0,this.map=null,this.defines={},this.backSceneTexture=null,this.viewportSize=new THREE.Vector2(0,0),this.uniforms=THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.lights,{diffuse:{value:new THREE.Color(16711680)},opacity:{value:1},specular:{value:new THREE.Color(1118481)},shininess:{value:30},emissive:{value:new THREE.Color(0)},backSceneTexture:{value:null},viewportSize:{value:new THREE.Vector2(0,0)}}]),this.vertexShader=["varying vec3 vViewPosition;","varying vec3 vNormal;","#include <uv_pars_vertex>","#include <common>","#include <logdepthbuf_pars_vertex>","#include <shadowmap_pars_vertex>","void main() {"," #include <uv_vertex>"," #include <begin_vertex>"," #include <project_vertex>","\t#include <logdepthbuf_vertex>"," #include <beginnormal_vertex>"," #include <defaultnormal_vertex>"," vNormal = normalize( transformedNormal );"," vViewPosition = - mvPosition.xyz;","}"].join("\n"),this.fragmentShader=["uniform vec3 diffuse;","uniform float opacity;","uniform vec3 specular;","uniform float shininess;","uniform vec3 emissive;","#include <common>","#include <uv_pars_fragment>","#include <map_pars_fragment>","#include <packing>","#include <bsdfs>","#include <lights_pars_begin>","#include <lights_phong_pars_fragment>","#include <specularmap_pars_fragment>","#include <shadowmap_pars_fragment>","#include <logdepthbuf_pars_fragment>","#ifdef USE_CAP","uniform sampler2D backSceneTexture;","uniform vec2 viewportSize;","#endif","void main() {","\t#include <logdepthbuf_fragment>"," vec4 diffuseColor = vec4( diffuse, opacity );","#ifdef USE_MAP"," vec4 texelColor = texture2D( map, vUv );"," texelColor = mapTexelToLinear( texelColor );"," diffuseColor = vec4(texelColor.rgb, opacity);","#endif"," ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );"," vec3 totalEmissiveRadiance = emissive;"," float specularStrength = 1.0;"," #include <normal_fragment_begin>"," #include <normal_fragment_maps>"," #include <lights_phong_fragment>"," #include <lights_template>"," vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;"," gl_FragColor = vec4( outgoingLight, diffuseColor.a );"," #if defined( TONE_MAPPING )"," gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );"," #endif"," gl_FragColor = linearToOutputTexel( gl_FragColor );","#ifdef USE_CAP","vec2 screenUV = vec2(gl_FragCoord.x/viewportSize.x,gl_FragCoord.y/viewportSize.y);","vec4 backColor = texture2D(backSceneTexture, screenUV);","gl_FragColor = texture2D(backSceneTexture, screenUV);","#endif","}"].join("\n"),this.lights=!0,this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},void 0!==e&&(void 0!==e.attributes&&console.error("PhongLightingMaterial: attributes should now be defined in THREE.BufferGeometry instead."),this.setValues(e)),this.refreshUniforms()}copy(e){return super.copy(e),this.color.copy(e.color),this.specular.copy(e.specular),this.shininess=e.shininess,this.emissive.copy(e.emissive),this}refreshUniforms(){this.uniforms.diffuse.value.set(this.color),this.uniforms.opacity.value=this.opacity,this.uniforms.specular.value.set(this.specular),this.uniforms.shininess.value=this.shininess,this.uniforms.emissive.value.set(this.emissive),this.uniforms.map.value=this.map,this.uniforms.backSceneTexture.value=this.backSceneTexture,this.uniforms.viewportSize.value=this.viewportSize}}r.PhongLightingMaterial=e})();var D=["GeometricContext geometry;","geometry.position = - vViewPosition;","#if NUM_CLIPPING_PLANES == 1","\tif (gl_FrontFacing) geometry.normal = normal;","\telse if (fillFaceClipDistance < 0.0) geometry.normal = -clippingPlanes[0].xyz;","\telse geometry.normal = -normal;","#else","\tgeometry.normal = normal;","#endif","geometry.viewDir = normalize( vViewPosition );","IncidentLight directLight;","#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )","\tPointLight pointLight;"," #if defined( USE_SHADOWMAP ) && (NUM_POINT_LIGHT_SHADOWS > 0)"," PointLightShadow pointLightShadow;"," #endif","\t#pragma unroll_loop_start","\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {","\t\tpointLight = pointLights[ i ];","\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );","\t\t#if defined( USE_SHADOWMAP ) && (NUM_POINT_LIGHT_SHADOWS > 0) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )","\t\tpointLightShadow = pointLightShadows[ i ];","\t\tdirectLight.color *= all( bvec2( receiveShadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;","\t\t#endif","\t\tRE_Direct( directLight, geometry, material, reflectedLight );","\t}"," #pragma unroll_loop_end","#endif","#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )","\tSpotLight spotLight;"," #if defined( USE_SHADOWMAP ) && (NUM_SPOT_LIGHT_SHADOWS > 0)"," SpotLightShadow spotLightShadow;"," #endif","\t#pragma unroll_loop_start","\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {","\t\tspotLight = spotLights[ i ];","\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );","\t\t#if defined( USE_SHADOWMAP ) && (NUM_SPOT_LIGHT_SHADOWS > 0) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )"," spotLightShadow = spotLightShadows[ i ];","\t\tdirectLight.color *= all( bvec2( receiveShadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;","\t\t#endif","\tRE_Direct( directLight, geometry, material, reflectedLight );","\t}"," #pragma unroll_loop_end","#endif","#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )","\tDirectionalLight directionalLight;"," #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0"," DirectionalLightShadow directionalLightShadow;","\t#endif","\t#pragma unroll_loop_start","\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {","\t\tdirectionalLight = directionalLights[ i ];","\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );","\t\t#if defined( USE_SHADOWMAP ) && (NUM_DIR_LIGHT_SHADOWS > 0) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )","\t\tdirectionalLightShadow = directionalLightShadows[ i ];","\t\tdirectLight.color *= all( bvec2( receiveShadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;","\t\t#endif","\t\tRE_Direct( directLight, geometry, material, reflectedLight );","\t}"," #pragma unroll_loop_end","#endif","#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )","\tRectAreaLight rectAreaLight;","\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {","\t\trectAreaLight = rectAreaLights[ i ];","\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );","\t}","#endif","#if defined( RE_IndirectDiffuse )","\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );","\t#ifdef USE_LIGHTMAP","\t\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;","\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS","\t\t\tlightMapIrradiance *= PI; // factor of PI should not be present; included here to prevent breakage","\t\t#endif","\t\tirradiance += lightMapIrradiance;","\t#endif","\t#if ( NUM_HEMI_LIGHTS > 0 )","\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {","\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );","\t\t}","\t#endif","\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )","\t\tirradiance += getLightProbeIndirectIrradiance( /*lightProbe,*/ geometry, 8 );","\t#endif","\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );","#endif","#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )","\tvec3 radiance = getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, 8 );","\t#ifndef STANDARD","\t\tvec3 clearCoatRadiance = getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, 8 );","\t#else","\t\tvec3 clearCoatRadiance = vec3( 0.0 );","\t#endif","\tRE_IndirectSpecular( radiance, irradiance, clearCoatRadiance, geometry, material, reflectedLight ); ","#endif"].join("\n");r.LightsTemplateShader="\n GeometricContext geometry;\n\n geometry.position = - vViewPosition;\n geometry.normal = normal;\n geometry.viewDir = normalize( vViewPosition );\n \n IncidentLight directLight;\n \n #if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n \n\t\tPointLight pointLight;\n\t\t#if defined( USE_SHADOWMAP ) && (NUM_POINT_LIGHT_SHADOWS > 0)\n\t\t\tPointLightShadow pointLightShadow;\n\t\t#endif\n\t\t#pragma unroll_loop_start\n \tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n \n \t\tpointLight = pointLights[ i ];\n \t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n \n\t\t\t#if defined( USE_SHADOWMAP ) && (NUM_POINT_LIGHT_SHADOWS > 0) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\t\tpointLightShadow = pointLightShadows[ i ];;\n \t\tdirectLight.color *= all( bvec2( receiveShadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n \t\t#endif\n \n \t\tRE_Direct( directLight, geometry, material, reflectedLight );\n \n\t\t}\n\t\t#pragma unroll_loop_end\n \n #endif\n \n #if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n \n\t\tSpotLight spotLight;\n\n\t #if defined( USE_SHADOWMAP ) && (NUM_SPOT_LIGHT_SHADOWS > 0)\n SpotLightShadow spotLightShadow;\n\t\t#endif\n\t\t\n\t\t#pragma unroll_loop_start\n \tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n \n \t\tspotLight = spotLights[ i ];\n \t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n \n\t\t\t#if defined( USE_SHADOWMAP ) && (NUM_SPOT_LIGHT_SHADOWS > 0) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t\tspotLightShadow = spotLightShadows[ i ];\n \t\tdirectLight.color *= all( bvec2( receiveShadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n \t\t#endif\n \n \t\tRE_Direct( directLight, geometry, material, reflectedLight );\n \n\t\t}\n\t\t#pragma unroll_loop_end\n \n #endif\n \n #if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n \n\t\tDirectionalLight directionalLight;\n\t\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\t\t DirectionalLightShadow directionalLightShadow;\n\t\t#endif\n\t\t#pragma unroll_loop_start\n \tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n \n \t\tdirectionalLight = directionalLights[ i ];\n \t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n \n\t\t\t#if defined( USE_SHADOWMAP ) && (NUM_DIR_LIGHT_SHADOWS > 0) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n \t\tdirectLight.color *= all( bvec2( receiveShadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n \t\t#endif\n \n \t\tRE_Direct( directLight, geometry, material, reflectedLight );\n \n\t\t}\n\t\t#pragma unroll_loop_end\n \n #endif\n \n #if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n \n \tRectAreaLight rectAreaLight;\n \n \tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n \n \t\trectAreaLight = rectAreaLights[ i ];\n \t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n \n \t}\n \n #endif\n \n #if defined( RE_IndirectDiffuse )\n \n \tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n \n \t#ifdef USE_LIGHTMAP\n \n \t\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n \n \t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n \n \t\t\tlightMapIrradiance *= PI; // factor of PI should not be present; included here to prevent breakage\n \n \t\t#endif\n \n \t\tirradiance += lightMapIrradiance;\n \n \t#endif\n \n \t#if ( NUM_HEMI_LIGHTS > 0 )\n \n \t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n \n \t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n \n \t\t}\n \n \t#endif\n \n \t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n \n \t\t// TODO, replace 8 with the real maxMIPLevel\n \t\tirradiance += getLightProbeIndirectIrradiance( /*lightProbe,*/ geometry, 8 );\n \n \t#endif\n \n \tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n \n #endif\n \n #if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\n \t// TODO, replace 8 with the real maxMIPLevel\n \tvec3 radiance = getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, 8 );\n \n \t#ifndef STANDARD\n \t\tvec3 clearCoatRadiance = getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, 8 );\n \t#else\n \t\tvec3 clearCoatRadiance = vec3( 0.0 );\n \t#endif\n \n \tRE_IndirectSpecular( radiance, irradiance, clearCoatRadiance, geometry, material, reflectedLight );\n \n #endif\n ";var O=["#define PHONG","uniform vec3 diffuse;","uniform vec3 emissive;","uniform vec3 specular;","uniform float shininess;","uniform float opacity;","#include <common>","#include <packing>","#include <dithering_pars_fragment>","#include <color_pars_fragment>","#include <uv_pars_fragment>","#include <uv2_pars_fragment>","#include <map_pars_fragment>","#include <alphamap_pars_fragment>","#include <aomap_pars_fragment>","#include <lightmap_pars_fragment>","#include <emissivemap_pars_fragment>","#include <envmap_pars_fragment>","#include <gradientmap_pars_fragment>","#include <fog_pars_fragment>","#include <bsdfs>","#include <lights_pars_begin>","#include <lights_phong_pars_fragment>","#include <shadowmap_pars_fragment>","#include <bumpmap_pars_fragment>","#include <normalmap_pars_fragment>","#include <specularmap_pars_fragment>","#include <logdepthbuf_pars_fragment>","#include <clipping_planes_pars_fragment>","#include <lights_physical_pars_fragment>","#include <envmap_common_pars_fragment>","#include <envmap_physical_pars_fragment>","void main() {","\t#include <clipping_planes_fragment>","\tvec4 diffuseColor = vec4( diffuse, opacity );","\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );","\tvec3 totalEmissiveRadiance = emissive;","\t#include <logdepthbuf_fragment>","\t#include <map_fragment>","\t#include <color_fragment>","\t#include <alphamap_fragment>","\t#include <alphatest_fragment>","\t#include <specularmap_fragment>","\t#include <normal_flip>","\t#include <normal_fragment_begin>","\t#include <emissivemap_fragment>"," float fillFaceClipDistance = 0.0;"," #if NUM_CLIPPING_PLANES == 1"," vec4 plane = clippingPlanes[ 0 ];","\t fillFaceClipDistance = dot( vViewPosition, plane.xyz ) - plane.w;"," #endif","\t#include <lights_phong_fragment>","\t#include <lights_fillFace_template>","\t#include <aomap_fragment>","\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;","\t#include <envmap_fragment>","\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );","\t#include <tonemapping_fragment>","\t#include <encodings_fragment>","\t#include <premultiplied_alpha_fragment>","\t#include <dithering_fragment>"," #include <fog_fragment>","}"].join("\n"),L=["#define PHONG","varying vec3 vViewPosition;","#ifndef FLAT_SHADED","varying vec3 vNormal;","#endif","#include <common>","#include <uv_pars_vertex>","#include <uv2_pars_vertex>","#include <displacementmap_pars_vertex>","#include <envmap_pars_vertex>","#include <color_pars_vertex>","#include <fog_pars_vertex>","#include <morphtarget_pars_vertex>","#include <skinning_pars_vertex>","#include <shadowmap_pars_vertex>","#include <logdepthbuf_pars_vertex>","#include <clipping_planes_pars_vertex>","void main() {","#include <uv_vertex>","#include <uv2_vertex>","#include <color_vertex>","#include <beginnormal_vertex>","#include <morphnormal_vertex>","#include <skinbase_vertex>","#include <skinnormal_vertex>","#include <defaultnormal_vertex>","#ifndef FLAT_SHADED","vNormal = normalize( transformedNormal );","#endif","#include <begin_vertex>","#include <displacementmap_vertex>","#include <morphtarget_vertex>","#include <skinning_vertex>","#include <project_vertex>","#include <logdepthbuf_vertex>","#include <clipping_planes_vertex>","vViewPosition = - mvPosition.xyz;","#include <worldpos_vertex>","#include <envmap_vertex>","#include <shadowmap_vertex>","#include <fog_vertex>","}"].join("\n"),P=["#define PHYSICAL","varying vec3 vViewPosition;","#ifndef FLAT_SHADED","varying vec3 vNormal;","#endif","#include <common>","#include <uv_pars_vertex>","#include <uv2_pars_vertex>","#include <displacementmap_pars_vertex>","#include <color_pars_vertex>","#include <fog_pars_vertex>","#include <morphtarget_pars_vertex>","#include <skinning_pars_vertex>","#include <shadowmap_pars_vertex>","#include <specularmap_pars_fragment>","#include <logdepthbuf_pars_vertex>","#include <clipping_planes_pars_vertex>","void main() {","#include <uv_vertex>","#include <uv2_vertex>","#include <color_vertex>","#include <beginnormal_vertex>","#include <morphnormal_vertex>","#include <skinbase_vertex>","#include <skinnormal_vertex>","#include <defaultnormal_vertex>","#ifndef FLAT_SHADED","vNormal = normalize( transformedNormal );","#endif","#include <begin_vertex>","#include <displacementmap_vertex>","#include <morphtarget_vertex>","#include <skinning_vertex>","#include <project_vertex>","#include <logdepthbuf_vertex>","#include <clipping_planes_vertex>","vViewPosition = - mvPosition.xyz;","#include <worldpos_vertex>","#include <shadowmap_vertex>","#include <fog_vertex>","}"].join("\n"),N=["#define PHYSICAL","uniform vec3 diffuse;","uniform vec3 emissive;","uniform float roughness;","uniform float metalness;","uniform float opacity;","#ifndef STANDARD","uniform float clearCoat;","uniform float clearCoatRoughness;","#endif","varying vec3 vViewPosition;","#ifndef FLAT_SHADED","varying vec3 vNormal;","#endif","#include <common>","#include <packing>","#include <dithering_pars_fragment>","#include <color_pars_fragment>","#include <uv_pars_fragment>","#include <uv2_pars_fragment>","#include <map_pars_fragment>","#include <alphamap_pars_fragment>","#include <aomap_pars_fragment>","#include <lightmap_pars_fragment>","#include <emissivemap_pars_fragment>","#include <envmap_pars_fragment>","#include <fog_pars_fragment>","#include <bsdfs>","#include <cube_uv_reflection_fragment>","#include <lights_pars_begin>","#include <lights_physical_pars_fragment>","#include <shadowmap_pars_fragment>","#include <bumpmap_pars_fragment>","#include <normalmap_pars_fragment>","#include <roughnessmap_pars_fragment>","#include <metalnessmap_pars_fragment>","#include <logdepthbuf_pars_fragment>","#include <clipping_planes_pars_fragment>","void main() {","#include <clipping_planes_fragment>","vec4 diffuseColor = vec4( diffuse, opacity );","vec3 totalEmissiveRadiance = emissive;","#include <logdepthbuf_fragment>","#include <map_fragment>","#include <color_fragment>","#include <alphamap_fragment>","#include <alphatest_fragment>","#include <specularmap_fragment>","#include <roughnessmap_fragment>","#include <metalnessmap_fragment>","#include <normal_flip>","#include <normal_fragment_begin>","#include <emissivemap_fragment>","const mat4 diffuseMatrix = mat4(-0.07425443828105927, -0.05652861297130585, 0.12247831374406815, 0.2297295778989792,"," -0.05652860924601555, 0.034799136221408844, -0.08437120914459229, -0.13896968960762024,"," 0.12247832119464874, -0.08437121659517288, 0.021763987839221954, 0.12510454654693604,"," 0.2297295778989792, -0.13896968960762024, 0.12510454654693604, 0.6190560460090637);","const vec3 sunDir = vec3(-0.6632131338119507, 0.5486575961112976, -0.509041428565979);","vec3 viewDir = normalize( vViewPosition );","vec4 diffuseDir = diffuseMatrix * vec4(normal, 1.0);","float diffuseTerm = dot(vec4(normal, 1.0), diffuseDir);","float nv = max(dot(normal, -viewDir), 0.0);","float vl = max(dot(viewDir, sunDir), 0.0);","diffuseTerm = diffuseTerm + (nv * (1.0 - vl)) * 0.8;","vec3 H = -normalize(sunDir + viewDir);","float nh = max(dot(normal, H), 0.0);","float specularTerm = pow(nh, 100.0);","vec3 color = 1.05 * vec3(0.5, 0.497, 0.49) * (diffuse * diffuseTerm + vec3(specularTerm)) + diffuse * 0.5;","vec3 outgoingLight = color + totalEmissiveRadiance;","gl_FragColor = vec4( outgoingLight, diffuseColor.a );","#include <tonemapping_fragment>","#include <encodings_fragment>","#include <premultiplied_alpha_fragment>","#include <dithering_fragment>","#include <fog_fragment>","}"].join("\n"),H=["#define PHYSICAL","varying vec3 vViewPosition;","#ifndef FLAT_SHADED","varying vec3 vNormal;","#endif","#ifdef USE_INSTANCE"," attribute float vState;"," attribute float vState2;"," attribute float vClipping;","#if NUM_CLIPPING_PLANES > 0"," varying float fClipping;","#endif"," varying float fState;"," attribute vec4 aColor;"," varying vec4 vaColor;"," attribute vec3 mcol0;"," attribute vec3 mcol1;"," attribute vec3 mcol2;"," attribute vec3 mcol3;"," #if defined(USE_MAP)||defined(USE_BUMPMAP) "," attribute vec2 muvCol0;"," attribute vec2 muvCol1;"," attribute vec2 muvCol2;"," #endif"," #if defined(USE_MULTI_BLINK_COLOR) "," attribute vec4 bColor;"," varying vec4 vbColor;"," #endif"," #if defined(USE_LIGHTMAP)"," attribute vec4 uv2OffsetRepeat;"," #endif","#endif","#include <common>","#include <uv_pars_vertex>","#include <uv2_pars_vertex>","#include <displacementmap_pars_vertex>","#include <color_pars_vertex>","#include <fog_pars_vertex>","#include <morphtarget_pars_vertex>","#include <skinning_pars_vertex>","#include <shadowmap_pars_vertex>","#include <specularmap_pars_fragment>","#include <logdepthbuf_pars_vertex>","#include <clipping_planes_pars_vertex>","#include <view_shed_pars_vertex>","#include <video_cast_pars_vertex>","varying vec4 wPositionForInnerClipping;","#include <CompressNormal_vertex>","#include <CompressColor_vertex>","#include <heightLimit_pars_vertex>","#include <excavation_pars_vertex>","mat3 inverse_mat3(in mat3 m)","{"," float determinant ="," m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2])"," - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2])"," + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]);"," mat3 inverse;"," inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]);"," inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]);"," inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]);"," inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]);"," inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]);"," inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]);"," inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]);"," inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]);"," inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]);"," inverse /= determinant;"," return inverse;","}","#ifdef USE_COMPRESS_UV","uniform vec2 uvCenter;","uniform vec2 uvHalfExtent;","vec2 uvDecode(vec2 myuv) {"," myuv = (myuv + 32768.0)* 2.0 / 65535.0 - 1.0;"," return myuv * uvHalfExtent + uvCenter;","}","#endif","void main() {","#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )","#ifdef USE_COMPRESS_UV"," vUv = uvDecode(uv);"," vUv = ( uvTransform * vec3( vUv, 1 ) ).xy;","#else"," vUv = ( uvTransform * vec3( uv, 1 ) ).xy;","#endif","#endif","#include <uv2_vertex>","#include <color_vertex>","#include <beginnormal_vertex>","#ifdef CNORMAL","objectNormal = octDecode();","#endif","#include <morphnormal_vertex>","#include <skinbase_vertex>","#include <skinnormal_vertex>","#include <defaultnormal_vertex>","#if (defined(USE_MAP)||defined(USE_BUMPMAP)) && defined(USE_INSTANCE) "," vUv = vec2(mat3(vec3(muvCol0, 0.0),"," vec3(muvCol1, 0.0),"," vec3(muvCol2, 1.0)) * vec3(uv, 1.0));"," vUv = ( uvTransform * vec3( vUv, 1 ) ).xy;","#endif","#if defined(USE_LIGHTMAP) && defined(USE_INSTANCE) ","#ifdef USE_COMPRESS_UV"," vUv2 = uvDecode(vUv2);","#endif"," vUv2.x = uv2OffsetRepeat.x*vUv2.x/ 65535.0 + uv2OffsetRepeat.z ;"," vUv2.y = uv2OffsetRepeat.y*vUv2.y/ 65535.0 + uv2OffsetRepeat.w ;","#endif","vec3 transformed = vec3( position );","#ifdef USE_INSTANCE","vaColor = aColor;","#if NUM_CLIPPING_PLANES > 0"," fClipping = vClipping;","#endif","#if defined(USE_MULTI_BLINK_COLOR) "," vbColor = bColor;","#endif","#ifdef INSTANCE_STATE_SECONDARY","fState = vState2;","#else","fState = vState;","#endif","transformed = vec3(mat4(vec4(mcol0, 0.0),"," vec4(mcol1, 0.0),"," vec4(mcol2, 0.0),"," vec4(mcol3, 1.0)) * vec4(transformed, 1.0));","#ifdef USE_INSTANCE_NORMAL"," mat3 normalMat = mat3(mcol0, mcol1, mcol2);"," normalMat = inverse_mat3(normalMat);"," normalMat = transposeMat3(normalMat);"," transformedNormal = normalMat * objectNormal;"," transformedNormal = normalMatrix * transformedNormal;","#ifdef FLIP_SIDED"," transformedNormal = - transformedNormal;","#endif"," transformedNormal = normalize( transformedNormal );","#endif","#endif","#ifdef CCOLOR","ocColor = decodeColor();","#endif","#ifndef FLAT_SHADED","vNormal = normalize( transformedNormal );","#endif","#include <displacementmap_vertex>","#include <morphtarget_vertex>","#include <skinning_vertex>","#include <project_vertex>","#include <logdepthbuf_vertex>","#include <clipping_planes_vertex>","vViewPosition = - mvPosition.xyz;","wPositionForInnerClipping = modelMatrix * vec4( transformed, 1.0 );","#include <heightLimit_vertex>","#include <worldpos_vertex>","#include <shadowmap_vertex>","#include <fog_vertex>","vec3 vsWorldPosition = vec3(modelMatrix * vec4(transformed, 1.0));","#include <view_shed_vertex>","#include <video_cast_vertex>","#include <excavation_vertex>","}"].join("\n"),F=["#define PHYSICAL","uniform vec3 diffuse;","uniform vec3 emissive;","uniform float roughness;","uniform float metalness;","uniform float opacity;","uniform float imageFade;","#ifndef STANDARD","uniform float clearCoat;","uniform float clearCoatRoughness;","#endif","varying vec3 vViewPosition;","#ifndef FLAT_SHADED","varying vec3 vNormal;","#endif","#ifdef USE_INSTANCE"," varying vec4 vaColor;"," varying float fState;"," varying float fClipping;","#endif","#ifdef CCOLOR"," varying vec4 ocColor;","#endif","#if defined(USE_MULTI_BLINK_COLOR) "," varying vec4 vbColor;","#endif","#ifdef USE_FILLPATTERN"," uniform sampler2D fillMap;","#endif","varying vec4 wPositionForInnerClipping;","uniform float shift;","uniform float A;","uniform float B;","uniform float C;","uniform float D;","uniform float E;","uniform float F;","uniform float scale;","uniform vec4 blinkColor;","uniform float blinkCoefficient;","uniform float colorState;","uniform int localClipping;","uniform int innerClipping;","uniform mat4 orthoViewProjMatrix;","uniform bool useForCap;","#include <heightLimit_pars_fragment>","vec3 toneMapCanonFilmic(vec3 color)","{"," color *= (1.0 / shift);"," return (((color * (A * color + C * B)) / (color * (A * color + B) + D * F))) * (1.0 / scale);","}","#include <common>","#include <packing>","#include <dithering_pars_fragment>","#include <color_pars_fragment>","#include <uv_pars_fragment>","#include <uv2_pars_fragment>","#include <map_pars_fragment>","#include <aomap_pars_fragment>","#include <lightmap_pars_fragment>","#include <emissivemap_pars_fragment>","#include <envmap_pars_fragment>","#include <fog_pars_fragment>","#include <bsdfs>","#include <cube_uv_reflection_fragment>","#include <lights_pars_begin>","#include <lights_physical_pars_fragment>","#include <shadowmap_pars_fragment>","#include <bumpmap_pars_fragment>","#include <normalmap_pars_fragment>","#include <roughnessmap_pars_fragment>","#include <metalnessmap_pars_fragment>","#include <logdepthbuf_pars_fragment>","#include <csm_fragment>","#include <clipping_planes_pars_fragment>","#include <envmap_common_pars_fragment>","#include <envmap_physical_pars_fragment>","#include <view_shed_pars_fragment>","#include <video_cast_pars_fragment>","#include <excavation_pars_fragment>","vec3 hdrDecode(in vec4 rgbm) {","const float rgbmScale = 2.82842712;","vec3 r = rgbm.rgb * (rgbmScale * (1.0 - rgbm.a));","return r * r;","}","vec3 linearToGammaUnreal(in vec3 rgb) {"," return rgb / (rgb + 0.187) * 1.035 *(0.5 / shift);","}","bool floatEqual(in float x, in float y) {"," return (x >= y - 0.01) && (x <= y + 0.01);","}","bool floatNotEqual(in float x, in float y) {"," return (x <= y - 0.01) || (x >= y + 0.01);","}","void main() {","\n if (innerClipping > 0)\n {\n vec4 clipPosition = orthoViewProjMatrix * wPositionForInnerClipping;\n clipPosition.xyz /= clipPosition.w;\n if (clipPosition.x >= -1.0 && clipPosition.x <= 1.0 &&\n clipPosition.y >= -1.0 && clipPosition.y <= 1.0 && clipPosition.z >= -1.0) \n {\n discard;\n }\n }\n else\n {\n #if NUM_CLIPPING_PLANES > 0\n vec3 cameraPosInViewSpace = vec3(0.0);\n #ifdef USE_INSTANCE\n if ((localClipping == 1 && floatEqual(fClipping, 6.0)) || localClipping < 0) {\n for ( int i = 0; i < UNION_CLIPPING_PLANES; ++ i ) {\n vec4 plane = clippingPlanes[ i ];\n if ( dot( vViewPosition, plane.xyz ) > plane.w &&(!useForCap ||(useForCap &&dot( cameraPosInViewSpace, plane.xyz ) > plane.w )) ) discard;\n }\n #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n bool clipped = true;\n for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; ++ i ) {\n vec4 plane = clippingPlanes[ i ];\n clipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n }\n if ( clipped ) discard;\n #endif\n }\n #else\n for ( int i = 0; i < UNION_CLIPPING_PLANES; ++ i ) {\n vec4 plane = clippingPlanes[ i ];\n if ( dot( vViewPosition, plane.xyz ) > plane.w &&(!useForCap ||(useForCap&&dot( cameraPosInViewSpace, plane.xyz ) > plane.w )) ) discard;\n }\n #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n bool clipped = true;\n for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; ++ i ) {\n vec4 plane = clippingPlanes[ i ];\n clipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n }\n if ( clipped ) discard;\n #endif\n #endif\n #endif\n }\n ","#ifdef USE_FILLPATTERN"," vec2 screenPosition = vec2(gl_FragCoord.x,gl_FragCoord.y);"," float flag = texture2D(fillMap, vec2(screenPosition.x/32.0, screenPosition.y/32.0)).r;"," if(flag == 0.0)"," {"," discard;"," }","#endif","vec4 diffuseColor = vec4( diffuse, opacity );","#include <vertex_color_frag>","#ifdef USE_INSTANCE"," if (floatEqual(fState, -1.0)) "," discard;"," if (floatNotEqual(fState, 0.0)) "," diffuseColor = vaColor;","#endif","#ifdef CCOLOR"," diffuseColor = vec4(ocColor.rgb, opacity ) ;","#endif","vec4 selectedColor = diffuseColor;","#ifndef USE_LIGHTMAP","diffuseColor.rgb = pow(diffuseColor.rgb, vec3(GAMMA_FACTOR));","#endif","ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );","vec3 totalEmissiveRadiance = emissive;","#ifdef USE_INSTANCE"," if (floatEqual(fState, 3.0))"," totalEmissiveRadiance = vec3(0.0);","#endif","#include <logdepthbuf_fragment>","vec4 gamaColor = diffuseColor ;","#ifdef USE_MAP"," vec4 texelColor = texture2D( map, vUv );"," texelColor = mapTexelToLinear( texelColor );"," #ifdef USE_CLAMP_TO_BORDER"," texelColor = (vUv.x > 1.0 ||vUv.x < 0.0 || vUv.y < 0.0|| vUv.y > 1.0) ?diffuseColor:mapTexelToLinear( texelColor );"," #endif"," diffuseColor = vec4( mix(diffuseColor.rgb , texelColor.rgb, imageFade), opacity);"," #ifdef USE_INSTANCE"," if (floatNotEqual(fState, 0.0)) "," diffuseColor.a = vaColor.a;"," if (floatEqual(fState, 3.0))"," diffuseColor = gamaColor;"," #endif","#endif","#include <alphamap_fragment_override>","#include <alphatest_fragment>","#include <specularmap_fragment>","#include <roughnessmap_fragment>","#include <metalnessmap_fragment>","#include <normal_fragment_begin>","#include <normal_fragment_maps>","#include <emissivemap_fragment>","#ifdef USE_INSTANCE"," if (floatEqual(fState, 3.0)){"," roughnessFactor = 1.0;"," metalnessFactor = 0.0;"," }","#endif","#include <lights_physical_fragment>"," GeometricContext geometry;","geometry.position = - vViewPosition;","geometry.normal = normal;","geometry.viewDir = normalize( vViewPosition );","IncidentLight directLight;","#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )","PointLight pointLight;","#if defined( USE_SHADOWMAP ) && (NUM_POINT_LIGHT_SHADOWS > 0)","PointLightShadow pointLightShadow;","#endif","#pragma unroll_loop_start","for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {","pointLight = pointLights[ i ];","getPointDirectLightIrradiance( pointLight, geometry, directLight );","#if defined( USE_SHADOWMAP ) && (NUM_POINT_LIGHT_SHADOWS > 0) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )","pointLightShadow = pointLightShadows[ i ];","directLight.color *= all( bvec2( receiveShadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;","#endif","RE_Direct( directLight, geometry, material, reflectedLight );","}","#pragma unroll_loop_end","#endif","#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )"," SpotLight spotLight;"," #if defined( USE_SHADOWMAP ) && (NUM_SPOT_LIGHT_SHADOWS > 0)"," SpotLightShadow spotLightShadow;"," #endif"," #pragma unroll_loop_start"," for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {"," spotLight = spotLights[ i ];"," getSpotDirectLightIrradiance( spotLight, geometry, directLight );"," #if defined( USE_SHADOWMAP ) && (NUM_SPOT_LIGHT_SHADOWS > 0) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )"," spotLightShadow = spotLightShadows[ i ];"," if(opacity > 0.8)"," directLight.color *= all( bvec2( receiveShadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;"," #endif"," RE_Direct( directLight, geometry, material, reflectedLight );"," }"," #pragma unroll_loop_end","#endif","#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) && defined( USE_CSM )","\n DirectionalLight directionalLight;\n float shadowValue = calcShadowFactor(geometry.normal);\n "," for ( int i = 4; i < NUM_DIR_LIGHTS; i ++ ) {"," directionalLight = directionalLights[ i ];"," getDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );"," #ifdef USE_SHADOWMAP"," if(opacity > 0.8)"," directLight.color *= receiveShadow ? shadowValue : 1.0;"," #endif"," RE_Direct( directLight, geometry, material, reflectedLight );"," }","#endif","\n #if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) && !defined( USE_CSM )\n DirectionalLight directionalLight;\n\n #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n DirectionalLightShadow directionalLightShadow;\n #endif\n\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n getDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n #if defined( USE_SHADOWMAP ) && (NUM_DIR_LIGHT_SHADOWS > 0) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n directionalLightShadow = directionalLightShadows[ i ];\n if(opacity > 0.8)\n directLight.color *= all( bvec2( receiveShadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n #pragma unroll_loop_end\n #endif\n ","#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )"," RectAreaLight rectAreaLight;"," for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {"," rectAreaLight = rectAreaLights[ i ];"," RE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );"," }","#endif","#if defined( RE_IndirectDiffuse )"," vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );"," #if ( NUM_HEMI_LIGHTS > 0 )"," for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {"," irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );"," }"," #endif"," #if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )"," irradiance += getLightProbeIndirectIrradiance( geometry, 8 );"," #endif"," RE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );"," #endif"," #if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )"," vec3 radiance = getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, 8 );"," #ifndef STANDARD"," vec3 clearCoatRadiance = getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, 8 );"," #else"," vec3 clearCoatRadiance = vec3( 0.0 );"," #endif"," RE_IndirectSpecular( radiance, irradiance, clearCoatRadiance, geometry, material, reflectedLight ); "," #endif","#include <aomap_fragment>","vec3 diffuseSpecularEmissive = vec3(0.0);","#ifdef USE_LIGHTMAP"," #ifdef USE_COMPONENT_LIGHTMAP"," vec3 lightMapIrradiance = (texture2D(lightMap, vUv2)).rgb * lightMapIntensity;"," #else"," vec3 lightMapIrradiance = hdrDecode(texture2D(lightMap, vUv2)) * lightMapIntensity;"," #endif"," vec3 diffuseSpecular = clamp(diffuseColor.rgb, vec3(0.0, 0.0, 0.0), vec3(1.0, 1.0, 1.0)) * lightMapIrradiance;"," diffuseSpecularEmissive = diffuseSpecular + diffuseColor.rgb * 0.0;","#endif","vec3 outgoingLight = diffuseSpecularEmissive + reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;","bool useColorWithoutLight = false;","#ifdef USE_COLORWITHOUTLIGHT "," useColorWithoutLight = true;","#endif","if (useColorWithoutLight || (ambientLightColor == vec3(0.0)) ) "," gl_FragColor = diffuseColor;","else"," gl_FragColor = vec4( outgoingLight, diffuseColor.a );","#if defined( TONE_MAPPING )"," #if defined(USE_LIGHTMAP)"," gl_FragColor.rgb = linearToGammaUnreal(diffuseSpecularEmissive.xyz );"," #else"," gl_FragColor.rgb = toneMapCanonFilmic( gl_FragColor.rgb );"," #endif","#endif","#ifdef USE_INSTANCE"," if (floatEqual(fState, 2.0))"," gl_FragColor = selectedColor;"," if (floatEqual(fState, 5.0) && floatEqual(colorState, 1.0)) {"," #if defined(USE_MULTI_BLINK_COLOR)"," vec4 finBlinkColor = vbColor;"," #else"," vec4 finBlinkColor = blinkColor;"," #endif"," gl_FragColor = mix(gl_FragColor, finBlinkColor, blinkCoefficient);"," }","#else"," if (floatEqual(colorState, 1.0)) {"," gl_FragColor = mix(gl_FragColor, blinkColor, blinkCoefficient);"," }"," if (floatEqual(colorState, 2.0))"," gl_FragColor = selectedColor;","#endif","#include <view_shed_fragment>","#include <video_cast_fragment>","#ifndef USE_LIGHTMAP"," #include <encodings_fragment>","#endif","#include <heightLimit_fragment>","#include <excavation_fragment>","#include <premultiplied_alpha_fragment>","#include <dithering_fragment>","#include <fog_fragment>","}"].join("\n");r.MapTileShader={vertex:"\n #define PHONG\n varying vec3 vViewPosition;\n #ifndef FLAT_SHADED\n varying vec3 vNormal;\n #endif\n #include <common>\n #include <uv_pars_vertex>\n #include <uv2_pars_vertex>\n #include <displacementmap_pars_vertex>\n #include <envmap_pars_vertex>\n #include <color_pars_vertex>\n #include <fog_pars_vertex>\n #include <morphtarget_pars_vertex>\n #include <skinning_pars_vertex>\n #include <shadowmap_pars_vertex>\n #include <logdepthbuf_pars_vertex>\n #ifdef USE_CLIPPING\n #include <clipping_planes_pars_vertex>\n #endif\n\n uniform mat4 u_CullOrthoMatrix;\n varying vec3 v_CullOrthoPosition;\n\n void main()\n {\n vec4 othPos = u_CullOrthoMatrix * (modelMatrix * vec4(position, 1.0));\n othPos /= othPos.w;\n v_CullOrthoPosition = othPos.xyz;\n\n #include <uv_vertex>\n #include <uv2_vertex>\n #include <color_vertex>\n #include <beginnormal_vertex>\n #include <morphnormal_vertex>\n #include <skinbase_vertex>\n #include <skinnormal_vertex>\n #include <defaultnormal_vertex>\n #ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n #endif\n #include <begin_vertex>\n #include <displacementmap_vertex>\n #include <morphtarget_vertex>\n #include <skinning_vertex>\n\n #ifdef USE_SKINNING\n vec4 wPosition = modelMatrix * skinned;\n #else\n vec4 wPosition = modelMatrix * vec4( transformed, 1.0 );\n #endif\n\n vec4 mvPosition = viewMatrix * wPosition;\n gl_Position = projectionMatrix * mvPosition;\n \n #include <logdepthbuf_vertex>\n vViewPosition = - mvPosition.xyz; \n #ifdef USE_CLIPPING\n #include <clipping_planes_vertex>\n #endif\n #include <worldpos_vertex>\n #include <envmap_vertex>\n #include <shadowmap_vertex>\n #include <fog_vertex>\n }",fragment:"\n #define PHONG\n uniform vec3 diffuse;\n uniform vec3 emissive;\n uniform vec3 specular;\n uniform float shininess;\n uniform float opacity;\n #include <common>\n #include <packing>\n #include <dithering_pars_fragment>\n #include <color_pars_fragment>\n #include <uv_pars_fragment>\n #include <uv2_pars_fragment>\n #include <map_pars_fragment>\n #include <alphamap_pars_fragment>\n #include <aomap_pars_fragment>\n #include <lightmap_pars_fragment>\n #include <emissivemap_pars_fragment>\n #include <envmap_pars_fragment>\n #include <gradientmap_pars_fragment>\n #include <fog_pars_fragment>\n #include <bsdfs>\n #include <lights_pars_begin>\n #include <lights_phong_pars_fragment>\n #include <shadowmap_pars_fragment>\n #include <bumpmap_pars_fragment>\n #include <normalmap_pars_fragment>\n #include <specularmap_pars_fragment>\n #include <logdepthbuf_pars_fragment>\n #include <csm_fragment>\n #ifdef USE_CLIPPING\n #include <clipping_planes_pars_fragment>\n #endif\n\n uniform float brightness;\n uniform float contrast;\n uniform float saturation;\n uniform float hue;\n uniform float gamma;\n uniform vec4 customColor;\n uniform float useCustomColor;\n\n varying vec3 v_CullOrthoPosition;\n uniform sampler2D u_SamplerExcavation;\n \n vec2 postProjToScreen(vec2 position)\n {\n vec2 screenPos = position;\n \n return 0.5 *(vec2(screenPos.x, screenPos.y) + 1.0);\n }\n\n vec4 depthColor(vec4 color) \n {\n color.r = color.r * color.r * color.r;\n color.g = color.g * color.g * color.g;\n color.b = color.b * color.b;\n return color;\n }\n\n vec3 computeContrast(vec3 rgb, float contrast) \n {\n vec3 color = mix(vec3(0.5), rgb, contrast);\n color = clamp(color, 0.0, 1.0);\n return color;\n }\n\n vec3 computeHue(vec3 rgb, float adjustment) \n {\n const mat3 toYIQ = mat3(0.299, 0.587, 0.114, 0.595716, -0.274453, -0.321263, 0.211456, -0.522591, 0.311135);\n const mat3 toRGB = mat3(1.0, 0.9563, 0.6210, 1.0, -0.2721, -0.6474, 1.0, -1.107, 1.7046);\n vec3 yiq = toYIQ * rgb;\n float hue = atan(yiq.z, yiq.y) + adjustment;\n float chroma = sqrt(yiq.z * yiq.z + yiq.y * yiq.y);\n vec3 color = vec3(yiq.x, chroma * cos(hue), chroma * sin(hue));\n vec3 final = toRGB * color;\n final = clamp(final, 0.0, 1.0);\n return final;\n }\n\n vec3 computeSaturation(vec3 rgb, float adjustment) \n {\n const vec3 W = vec3(0.2125, 0.7154, 0.0721);\n vec3 intensity = vec3(dot(rgb, W));\n vec3 color = mix(intensity, rgb, adjustment);\n color = clamp(color, 0.0, 1.0);\n return color;\n }\n\n vec4 sampleAndBlend(float useCustom, vec4 customColor, vec4 earthColor, float brightness, float contrast, float hue, float saturation, float gamma)\n {\n vec4 value = earthColor;\n if (useCustom == 1.0) {\n value = depthColor(value);\n value.rgb *= customColor.rgb;\n }\n vec3 color = value.rgb;\n float alpha = value.a;\n \n //brightness\n color = mix(vec3(0.0, 0.0, 0.0), color, brightness);\n \n //contrast\n color = computeContrast(color, contrast);\n\n //hue\n color = computeHue(color, hue);\n\n //saturation\n color = computeSaturation(color, saturation);\n\n //gamma\n color = pow(color, vec3(gamma));\n\n return vec4(color, alpha);\n }\n\n void main()\n { \n vec2 uv = postProjToScreen(v_CullOrthoPosition.xy);\n if(uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0)\n {\n vec4 color = texture2D(u_SamplerExcavation, uv);\n if(color.r > 0.0001)\n {\n discard;\n }\n } \n \n #ifdef USE_CLIPPING\n #include <clipping_planes_fragment>\n #endif\n\n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive; \n #include <logdepthbuf_fragment>\n #include <map_fragment>\n #include <color_fragment>\n #include <alphamap_fragment>\n #include <alphatest_fragment>\n #include <specularmap_fragment>\n #include <normal_fragment_maps>\n #include <normal_fragment_begin>\n #include <emissivemap_fragment>\n #include <lights_phong_fragment>\n \n GeometricContext geometry;\n geometry.position = - vViewPosition;\n geometry.normal = normal;\n geometry.viewDir = normalize( vViewPosition );\n IncidentLight directLight;\n #if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) && defined( USE_CSM )\n DirectionalLight directionalLight;\n float shadowValue = calcShadowFactor(geometry.normal);\n shadowValue = max(shadowValue, 0.1);\n #ifdef USE_SHADOWMAP\n if(opacity > 0.9)\n diffuseColor.rgb *= receiveShadow ? shadowValue : 1.0;\n #endif\n #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n DirectionalLightShadow directionalLightShadow;\n #endif\n #pragma unroll_loop_start\n for ( int i = 4; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n getDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n #if defined( USE_SHADOWMAP ) && (NUM_DIR_LIGHT_SHADOWS > 0) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n directionalLightShadow = directionalLightShadows[i - 4];\n if(opacity > 0.9)\n diffuseColor.rgb *= all( bvec2(receiveShadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i - 4 ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i - 4 ] ) : 1.0;\n #endif\n }\n #pragma unroll_loop_end\n #endif\n\n #if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) && !defined( USE_CSM )\n DirectionalLight directionalLight;\n #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n DirectionalLightShadow directionalLightShadow;\n #endif\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n getDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n #if defined( USE_SHADOWMAP ) && (NUM_DIR_LIGHT_SHADOWS > 0) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n directionalLightShadow = directionalLightShadows[ i ];\n if(opacity > 0.9)\n diffuseColor.rgb *= all( bvec2( receiveShadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n #endif\n }\n #pragma unroll_loop_end\n #endif\n \n vec3 outgoingLight = diffuseColor.rgb;\n #include <envmap_fragment>\n vec4 resultColor = vec4( outgoingLight, diffuseColor.a );\n gl_FragColor = sampleAndBlend(useCustomColor, customColor, resultColor, brightness, contrast, hue, saturation, gamma);\n\n #include <tonemapping_fragment>\n #include <encodings_fragment>\n #include <fog_fragment>\n #include <premultiplied_alpha_fragment>\n #include <dithering_fragment> \n }"},r.DepthParseShader={depth_parse_fragment:"\n uniform float cameraNear;\n uniform float cameraFar;\n uniform mat4 cameraProjection;\n uniform mat4 inverseProjection;\n uniform vec4 viewport;\n\n float getViewZ( const in float depth ) {\n #if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n float near = cameraNear;\n float far = cameraFar;\n float log2Depth = depth * 2.0 / logDepthBufFC;\n float depthFromCamera = pow(2.0, log2Depth) - 1.0;\n float a = far * (1.0 - near / depthFromCamera) / (far - near);\n float viewZ = perspectiveDepthToViewZ( a, cameraNear, cameraFar );\n if (depth == 0.0) \n {\n viewZ = perspectiveDepthToViewZ( 1.0, cameraNear, cameraFar );\n }\n #else\n float viewZ = perspectiveDepthToViewZ( depth, cameraNear, cameraFar );\n #endif\n return viewZ;\n }\n\n vec3 getViewPosition( const in float depth ) {\n #if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n float near = cameraNear;\n float far = cameraFar;\n float log2Depth = depth * 2.0 / logDepthBufFC;\n float depthFromCamera = pow(2.0, log2Depth) - 1.0;\n float x = 2.0 * (gl_FragCoord.x - viewport.x) / viewport.z - 1.0;\n float y = 2.0 * (gl_FragCoord.y - viewport.y) / viewport.w - 1.0;\n float z = 2.0 * (depthFromCamera - near) / (far-near) - 1.0;\n vec4 viewPosition = vec4(x, y, z, 1.0);\n viewPosition *= depthFromCamera;\n viewPosition = inverseProjection * viewPosition;\n #else\n float viewZ = getViewZ(depth);\n float clipW = cameraProjection[2][3] * viewZ + cameraProjection[3][3];\n vec4 clipPosition = vec4( ( vec3( gl_FragCoord.xy / viewport.zw, depth ) - 0.5 ) * 2.0, 1.0 );\n clipPosition *= clipW; //unprojection\n vec4 viewPosition = inverseProjection * clipPosition;\n #endif\n\n return viewPosition.xyz;\n }\n "},r.PointsShader={vertex:"\n #ifdef USE_ATTRIBUTE_SIZE\n attribute float attrSize;\n #endif\n uniform float size;\n uniform float scale;\n #include <common>\n #include <color_pars_vertex>\n #include <fog_pars_vertex>\n #include <logdepthbuf_pars_vertex>\n #include <clipping_planes_pars_vertex>\n void main() {\n #include <color_vertex>\n #include <begin_vertex>\n #include <project_vertex>\n #ifdef USE_ATTRIBUTE_SIZE\n gl_PointSize = attrSize;\n #else\n #ifdef USE_SIZEATTENUATION\n gl_PointSize = size * ( scale / - mvPosition.z );\n #else\n gl_PointSize = size;\n #endif\n #endif\n #ifdef USE_POSITION_OFFSET\n float yPos = gl_Position.y;\n float w = gl_Position.w;\n yPos /= w;\n yPos += 0.5 * gl_PointSize / scale;\n yPos *= w;\n gl_Position.y = yPos;\n #endif\n #include <logdepthbuf_vertex>\n #include <clipping_planes_vertex>\n #include <worldpos_vertex>\n #include <fog_vertex>\n }",fragment:"\n uniform vec3 diffuse;\n uniform float opacity;\n #include <common>\n #include <packing>\n #include <color_pars_fragment>\n #include <map_particle_pars_fragment>\n #include <fog_pars_fragment>\n #include <shadowmap_pars_fragment>\n #include <logdepthbuf_pars_fragment>\n #include <clipping_planes_pars_fragment>\n void main() {\n #include <clipping_planes_fragment>\n vec3 outgoingLight = vec3( 0.0 );\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include <logdepthbuf_fragment>\n #include <map_particle_fragment>\n #include <color_fragment>\n #include <alphatest_fragment>\n outgoingLight = diffuseColor.rgb;\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include <premultiplied_alpha_fragment>\n #include <tonemapping_fragment>\n #include <encodings_fragment>\n #include <fog_fragment>\n }"},r.ExcavationShader={excavation_pars_vertex:"\n #ifdef EXCAVATION_MODE\n uniform mat4 u_CullOrthoMatrix;\n varying vec3 v_CullOrthoPosition;\n #endif\n",excavation_pars_fragment:"\n #ifdef EXCAVATION_MODE\n varying vec3 v_CullOrthoPosition;\n uniform sampler2D u_SamplerExcavation;\n \n vec2 postProjToScreen(vec2 position)\n {\n vec2 screenPos = position;\n \n return 0.5 *(vec2(screenPos.x, screenPos.y) + 1.0);\n }\n #endif\n",excavation_vertex:"\n #ifdef EXCAVATION_MODE\n vec4 othPos = u_CullOrthoMatrix * vec4(vsWorldPosition.xyz, 1.0);\n othPos /= othPos.w;\n v_CullOrthoPosition = othPos.xyz;\n #endif\n",excavation_fragment:"\n #ifdef EXCAVATION_MODE\n vec2 uv = postProjToScreen(v_CullOrthoPosition.xy);\n if(uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0)\n {\n vec4 color = texture2D(u_SamplerExcavation, uv);\n if(color.r > 0.0001)\n {\n discard;\n }\n } \n #endif\n"};let k=(e,t,i)=>e.replace(t,i);THREE.ShaderChunk.meshphong_id_vert=L,THREE.ShaderChunk.lights_fillFace_template=D,THREE.ShaderChunk.lights_template=r.LightsTemplateShader,THREE.ShaderChunk.fillFaceFragment=O,THREE.ShaderChunk.cloudStandardVertex=H,THREE.ShaderChunk.cloudStandardFragment=F,THREE.ShaderChunk.newStyleVertex=P,THREE.ShaderChunk.newStyleFragment=N,THREE.ShaderChunk.view_shed_pars_vertex=r.ViewshedShader.view_shed_pars_vertex,THREE.ShaderChunk.view_shed_pars_fragment=r.ViewshedShader.view_shed_pars_fragment,THREE.ShaderChunk.view_shed_vertex=r.ViewshedShader.view_shed_vertex,THREE.ShaderChunk.view_shed_fragment=r.ViewshedShader.view_shed_fragment,THREE.ShaderChunk.video_cast_pars_vertex=r.VideoCastShader.video_cast_pars_vertex,THREE.ShaderChunk.video_cast_pars_fragment=r.VideoCastShader.video_cast_pars_fragment,THREE.ShaderChunk.video_cast_vertex=r.VideoCastShader.video_cast_vertex,THREE.ShaderChunk.video_cast_fragment=r.VideoCastShader.video_cast_fragment,THREE.ShaderChunk.heightLimit_pars_vertex=r.HeightLimitShader.heightLimit_pars_vertex,THREE.ShaderChunk.heightLimit_vertex=r.HeightLimitShader.heightLimit_vertex,THREE.ShaderChunk.heightLimit_pars_fragment=r.HeightLimitShader.heightLimit_pars_fragment,THREE.ShaderChunk.heightLimit_fragment=r.HeightLimitShader.heightLimit_fragment,THREE.ShaderChunk.excavation_pars_vertex=r.ExcavationShader.excavation_pars_vertex,THREE.ShaderChunk.excavation_pars_fragment=r.ExcavationShader.excavation_pars_fragment,THREE.ShaderChunk.excavation_vertex=r.ExcavationShader.excavation_vertex,THREE.ShaderChunk.excavation_fragment=r.ExcavationShader.excavation_fragment,THREE.ShaderChunk.map_tile_vertex=r.MapTileShader.vertex,THREE.ShaderChunk.map_tile_fragment=r.MapTileShader.fragment,THREE.ShaderChunk.points_vertex=r.PointsShader.vertex,THREE.ShaderChunk.points_fragment=r.PointsShader.fragment,THREE.ShaderChunk.depth_parse_fragment=r.DepthParseShader.depth_parse_fragment,THREE.ShaderChunk.csm_fragment=r.CSMShader.csm_fragment,THREE.ShaderChunk.CompressNormal_vertex=r.CompressNormalShader.CompressNormal_vertex,THREE.ShaderChunk.CompressColor_vertex=r.CompressColorShader.CompressColor_vertex,THREE.ShaderChunk.vertex_color_frag=r.VertexColorFrag.vertex_color_frag,THREE.ShaderChunk.alphamap_fragment_override="#if defined(USE_MAP)&&defined(USE_ALPHAMAP)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdiffuseColor.a *= texture2D( map, vUv ).a;\n\t\t\t\t\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\t\t\t\t\t",THREE.ShaderChunk.shadowmap_pars_fragment=r.ShadowMapShader.shadowmap_pars_fragment,THREE.ShaderChunk.depth_frag=r.DepthFragShader.depth_frag,THREE.ShaderChunk.cloud_mesh_physical_frag=k(THREE.ShaderChunk.meshphysical_frag,"#include <alphamap_fragment>","#include <alphamap_fragment_override>"),THREE.ShaderChunk.cloud_mesh_basic_frag=k(THREE.ShaderChunk.meshbasic_frag,"#include <alphamap_fragment>","#include <alphamap_fragment_override>"),THREE.ShaderLib.background={uniforms:{uvTransform:{value:new THREE.Matrix3},t2D:{value:null}},vertexShader:"\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n\t#include <clipping_planes_pars_vertex>\n\t\n\tvoid main() {\n\t\n\t\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\t\t#include <begin_vertex>\n\t\t#include <project_vertex>\n\t\t#include <clipping_planes_vertex>\n\t\t\n\t\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n\t\n\t}\n\t",fragmentShader:"\n\tuniform sampler2D t2D;\n\t\n\tvarying vec2 vUv;\n\t#include <clipping_planes_pars_fragment>\n\tvoid main() {\n\t\t#include <clipping_planes_fragment>\n\t\n\t\tvec4 texColor = texture2D( t2D, vUv );\n\t\n\t\tgl_FragColor = mapTexelToLinear( texColor );\n\t\n\t\t#include <tonemapping_fragment>\n\t\t#include <encodings_fragment>\n\t\n\t}\n\t"},THREE.ShaderLib.fillFacePhong={uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.aomap,THREE.UniformsLib.lightmap,THREE.UniformsLib.emissivemap,THREE.UniformsLib.bumpmap,THREE.UniformsLib.normalmap,THREE.UniformsLib.displacementmap,THREE.UniformsLib.gradientmap,THREE.UniformsLib.fog,THREE.UniformsLib.lights,{emissive:{value:new THREE.Color(0)},specular:{value:new THREE.Color(1118481)},shininess:{value:30}}]),vertexShader:THREE.ShaderChunk.meshphong_id_vert,fragmentShader:THREE.ShaderChunk.fillFaceFragment},THREE.ShaderLib.newStyle={vertexShader:THREE.ShaderChunk.newStyleVertex,fragmentShader:THREE.ShaderChunk.newStyleFragment},THREE.ShaderLib.cloudStandard={vertexShader:THREE.ShaderChunk.cloudStandardVertex,fragmentShader:THREE.ShaderChunk.cloudStandardFragment},r.WaterShader={uniforms:{waterColor:{type:"v4",value:null},reflectivity:{type:"f",value:0},flowTime:{type:"f",value:0},tReflectionMap:{type:"t",value:null},tRefractionMap:{type:"t",value:null},tNormalMap0:{type:"t",value:null},tNormalMap1:{type:"t",value:null},textureMatrix:{type:"m4",value:null},config:{type:"v4",value:new THREE.Vector4},sunDirection:{type:"v3",value:new THREE.Vector3}},vertexShader:["#include <fog_pars_vertex>","uniform mat4 textureMatrix;","varying vec4 vCoord;","varying vec2 vUv;","varying vec2 worldPositionXZ;","varying vec3 vToEye;","#include <clipping_planes_pars_vertex>","#include <common>","#include <logdepthbuf_pars_vertex>","void main() {"," vUv = uv;"," vCoord = textureMatrix * vec4( position, 1.0 );"," vec4 worldPosition = modelMatrix * vec4( position, 1.0 );"," worldPositionXZ = (worldPosition.xz/worldPosition.w);","#ifdef USE_GLOBE"," worldPositionXZ = worldPositionXZ*max(1.0,pow(cameraPosition.y,0.05));","#endif"," vToEye = cameraPosition - worldPosition.xyz;"," gl_Position = projectionMatrix * (viewMatrix * worldPosition);"," #include <logdepthbuf_vertex>"," vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);"," #include <clipping_planes_vertex>"," #include <fog_vertex>","}"].join("\n"),fragmentShader:["#include <common>","#include <fog_pars_fragment>","#ifdef USE_SHADOW"," uniform sampler2D tReflectionMap;"," uniform sampler2D tRefractionMap;","#endif","#ifdef USE_FLOWMAP"," uniform sampler2D tFlowMap;","#else"," uniform vec2 flowDirection;","#endif","const vec3 sunColor = vec3(1.0, 0.9803921568627451,0.803921568627451);","uniform sampler2D tNormalMap0;","uniform sampler2D tNormalMap1;","uniform vec4 waterColor;","uniform float reflectivity;","uniform vec4 config;","uniform float flowTime;","uniform vec3 sunDirection;","#include <clipping_planes_pars_fragment>","#include <logdepthbuf_pars_fragment>","varying vec4 vCoord;","varying vec2 vUv;","varying vec3 vToEye;","varying vec2 worldPositionXZ;","void sunLight( const vec3 surfaceNormal, const vec3 eyeDirection,in vec3 sunDir, inout vec3 diffuseColor, inout vec3 specularColor) {"," float diffuse = 0.5;"," vec3 _sunDir = normalize(sunDir);"," vec3 reflection = normalize( reflect( -_sunDir, surfaceNormal ) );"," diffuseColor += max( dot( _sunDir, surfaceNormal ), 0.0 ) * sunColor * diffuse;"," float direction = max( 0.0, dot( eyeDirection, reflection ) );"," specularColor += pow(direction, 300.0) * sunColor;","}","vec4 getNoise( vec2 uv, sampler2D normalSampler,float time) {"," vec2 uv0 = ( uv / 103.0 ) + vec2(time / 17.0, time / 29.0);"," vec2 uv1 = uv / 107.0-vec2( time / -19.0, time / 31.0 );"," vec2 uv2 = uv / vec2( 8907.0, 9803.0 ) + vec2( time / 101.0, time / 97.0 );"," vec2 uv3 = uv / vec2( 1091.0, 1027.0 ) - vec2( time / 109.0, time / -113.0 );"," vec4 noise = texture2D( normalSampler, uv0 ) +"," texture2D( normalSampler, uv1 ) +"," texture2D( normalSampler, uv2 ) +"," texture2D( normalSampler, uv3 );"," return noise * 0.5 - 1.0;","}","void main() {"," #include <clipping_planes_fragment>"," #include <logdepthbuf_fragment>"," float flowMapOffset0 = config.x;"," float flowMapOffset1 = config.y;"," float halfCycle = config.z;"," float scale = config.w*10.0;"," vec3 toEye = normalize( vToEye );"," vec2 flow;","#ifdef USE_FLOWMAP"," flow = texture2D( tFlowMap, vUv ).rg * 2.0 - 1.0;","#else"," flow = flowDirection;","#endif"," flow.x *= - 1.0;"," vec4 normalColor0 = texture2D( tNormalMap0, ( vUv * scale ) + flow * flowMapOffset0 );"," vec4 normalColor1 = texture2D( tNormalMap1, ( vUv * scale ) + flow * flowMapOffset1 );"," float flowLerp = abs( halfCycle - flowMapOffset0 ) / halfCycle;"," vec4 normalColor = mix( normalColor0, normalColor1, flowLerp );"," vec3 normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b, normalColor.g * 2.0 - 1.0 ) );"," float theta = max( dot( toEye, normal ), 0.0 );"," float reflectance = reflectivity + ( 1.0 - reflectivity ) * pow( ( 1.0 - theta ), 5.0 );"," vec3 coord = vCoord.xyz / vCoord.w;"," vec2 uvReflect = coord.xy + coord.z * normal.xz * 0.03;"," vec2 uvRefract = coord.xy + coord.z * normal.xz * 0.01;"," vec4 reflectColor;"," vec4 refractColor;","#ifdef USE_FLOWMAP"," reflectColor = texture2D( tReflectionMap, vec2( 1.0 - uvReflect.x, uvReflect.y ));","#endif","#ifdef USE_SHADOW"," if(waterColor.a < 1.0){"," refractColor = texture2D( tRefractionMap, uvRefract );"," }","#endif"," vec3 _waterColor = waterColor.rgb;"," vec3 diffuseLight = vec3(0.0);"," vec3 specularLight = vec3(0.0);"," vec3 _noise = getNoise(-worldPositionXZ, tNormalMap0, flowTime).xyz;"," vec3 surfaceNormal = normalize(_noise.xzy * vec3( 1.5, 1.0, 1.5 ));"," sunLight( surfaceNormal.xyz, toEye,sunDirection, diffuseLight, specularLight);"," sunLight( surfaceNormal.xyz, toEye,vec3(-sunDirection.x,sunDirection.y,-sunDirection.z), diffuseLight, specularLight);"," sunLight( surfaceNormal.xyz, toEye,vec3(sunDirection.x,sunDirection.y,-sunDirection.z), diffuseLight, specularLight);"," sunLight( surfaceNormal.xyz, toEye,vec3(-sunDirection.x,sunDirection.y,sunDirection.z), diffuseLight, specularLight);"," sunLight( surfaceNormal.xyz, toEye,vec3(0,1,0), diffuseLight, specularLight);"," vec3 _reflectColor;"," #ifdef USE_SHADOW"," if(reflectColor.r<0.05 && reflectColor.g < 0.05 && reflectColor.b < 0.05){"," _reflectColor = vec3(_waterColor.r*1.5, _waterColor.g*1.4, _waterColor.b*1.3);"," }else{"," _reflectColor = mix(reflectColor.rgb, diffuseLight, 0.2);"," }"," #else"," _reflectColor = vec3(_waterColor.r*1.5, _waterColor.g*1.4, _waterColor.b*1.3);"," #endif"," vec3 _refractColor;","#ifdef USE_SHADOW"," if(waterColor.a < 1.0){"," _refractColor = refractColor.rgb*(1.0-waterColor.a) + _waterColor*waterColor.a;"," }else{"," _refractColor = vec3(_waterColor.r*0.45, _waterColor.g*0.55, _waterColor.b*0.75);"," }","#else"," _refractColor = vec3(_waterColor.r*0.45, _waterColor.g*0.55, _waterColor.b*0.75);","#endif"," vec3 finalColor = mix(_refractColor + specularLight, _reflectColor, reflectance);"," vec3 noiseScatter = max( 0.0, dot( surfaceNormal, toEye ) ) * _waterColor;"," finalColor = mix(finalColor, noiseScatter, 0.4);"," gl_FragColor = vec4(finalColor, 1.0);"," #include <tonemapping_fragment>"," #include <encodings_fragment>"," #include <fog_fragment>","}"].join("\n")},(()=>{class e extends THREE.MeshStandardMaterial{constructor(e){super(e),this.type="cloudStandard",this.roughness=1,this.metalness=0,this.originRoughness=1,this.originMetalness=0,this.pureColor=0,this.textureColor=0,this.imageFade=1,this._referenceCount=1,this._imageByteSize=0,this.shift=.5,this.A=.64,this.B=.03,this.C=.02,this.D=.54,this.E=0,this.F=.81,this.scale=.92,this.receiveIBL=!0;const t=(new THREE.Color).setHex(3330982),i=[t.r,t.g,t.b,1];this.colorState=r.EnumShaderColorState.NONE,this.blinkColor=(new THREE.Vector4).fromArray(i),this.blinkCoefficient=0,this.fillMap=null,this.tag=null,this.viewshedCount=-1,this.viewshedContents=[],this.viewshedDepthMaps=[],this.videoCastCount=-1,this.videoCastContents=[],this.videoCastDepthMaps=[],this.videoCastProjectorMaps=[],this.localClipping=-1,this.innerClipping=-1,this.orthoViewProjMatrix=new THREE.Matrix4,this.heightLimitSampler=null,this.heightColorSampler=null,this.heightLimitOrthoMatrix=new THREE.Matrix4,this.heightLimit=0,this.useHeightLimit=!1,this.useCSM=r.GlobalData.EnableCSM,this.useCompressedNormal=!1,this.useCompressedColor=!1,this.useAlphaMap=!1,this.useForCap=!1,this.useClampToBorder=!1,this.useCompressedUv=!1,this.uvCenter=new THREE.Vector2(0,0),this.uvHalfExtent=new THREE.Vector2(0,0),this.samplerExcavation=null,this.cullOrthoMatrix=new THREE.Matrix4,this.uniforms=THREE.UniformsUtils.merge([THREE.UniformsLib.lights,THREE.UniformsLib.common,THREE.UniformsLib.lightmap,THREE.UniformsLib.bumpmap,THREE.UniformsLib.normalmap,THREE.UniformsLib.roughnessmap,THREE.UniformsLib.metalnessmap,THREE.UniformsLib.envmap,THREE.UniformsLib.fog,{emissive:{value:new THREE.Color(0)},roughness:{value:.5},metalness:{value:.5},envMapIntensity:{value:1}},{shift:{value:.5},A:{value:.64},B:{value:.03},C:{value:.02},D:{value:.54},E:{value:0},F:{value:.81},scale:{value:.92},colorState:{value:0},blinkColor:{value:(new THREE.Vector4).fromArray(i)},blinkCoefficient:{value:0},imageFade:{value:1}},{fillMap:{value:null}},{viewshedCount:{value:-1},viewshedContents:{value:[]},viewshedDepthMaps:{value:[]}},{videoCastCount:{value:-1},videoCastContents:{value:[]},videoCastDepthMaps:{value:[]},videoCastProjectorMaps:{value:[]}},{localClipping:{value:-1},innerClipping:{value:this.innerClipping},orthoViewProjMatrix:{value:this.orthoViewProjMatrix}},{heightLimitSampler:{value:null},heightColorSampler:{value:null},heightLimitOrthoMatrix:{value:new THREE.Matrix4},heightLimit:{value:0},useHeightLimit:{value:!1}},{csmCascades:{value:null}},{useForCap:{value:!1}},{uvCenter:{value:new THREE.Vector2(0,0)},uvHalfExtent:{value:new THREE.Vector2(0,0)}},{u_SamplerExcavation:{value:null},u_CullOrthoMatrix:{value:new THREE.Matrix4}}]),this.vertexShader=THREE.ShaderChunk.cloudStandardVertex,this.fragmentShader=THREE.ShaderChunk.cloudStandardFragment,this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},void 0!==e&&(void 0!==e.attributes&&console.error("IBLMaterial: attributes should now be defined in THREE.BufferGeometry instead."),null!=e.doubleSide&&e.doubleSide&&(this.side=THREE.DoubleSide),this.setValues(e)),this.lights&&(this.uniforms=THREE.UniformsUtils.merge([this.uniforms,THREE.UniformsLib.lights])),this.useCSM?this.defines.USE_CSM="":delete this.defines.USE_CSM,this.useAlphaMap?this.defines.USE_ALPHAMAP="":delete this.defines.USE_ALPHAMAP}destroy(){THREE.MeshStandardMaterial.prototype.dispose.call(this),this.blinkColor=null,this.uniforms=null,this.defaultAttributeValues=null,this.lights=null,this.uvCenter=null,this.uvHalfExtent=null}setValues(e){if(void 0!==e)for(const t in e){const i=e[t];if(void 0===i){console.warn("THREE.Material: '"+t+"' parameter is undefined.");continue}const r=this[t];void 0!==r&&(r&&r.isColor?r.set(i):r&&r.isVector3&&i&&i.isVector3?r.copy(i):this[t]="overdraw"===t?Number(i):i)}}copy(e){for(var t in THREE.MeshStandardMaterial.prototype.copy.call(this,e),this.shift=e.shift,this.A=e.A,this.B=e.B,this.C=e.C,this.D=e.D,this.E=e.E,this.F=e.F,this.scale=e.scale,this.colorState=e.colorState,this.blinkColor.copy(e.blinkColor),this.blinkCoefficient=e.blinkCoefficient,this.imageFade=e.imageFade,this.fillMap=e.fillMap,this.localClipping=e.localClipping,this.innerClipping=e.innerClipping,this.orthoViewProjMatrix.copy(e.orthoViewProjMatrix),this.viewshedCount=e.viewshedCount,this.viewshedContents=e.viewshedContents,this.viewshedDepthMaps=e.viewshedDepthMaps,this.videoCastCount=e.videoCastCount,this.videoCastContents=e.videoCastContents,this.videoCastDepthMaps=e.videoCastDepthMaps,this.videoCastProjectorMaps=e.videoCastProjectorMaps,this.heightLimitSampler=e.heightLimitSampler,this.heightColorSampler=e.heightColorSampler,this.heightLimitOrthoMatrix=e.heightLimitOrthoMatrix,this.heightLimit=e.heightLimit,this.useHeightLimit=e.useHeightLimit,this.useCSM=e.useCSM,this.useCompressedColor=e.useCompressedColor,this.useCompressedNormal=e.useCompressedNormal,this.useCompressedUv=e.useCompressedUv,this.uvCenter=e.uvCenter,this.uvHalfExtent=e.uvHalfExtent,this.u_SamplerExcavation=e.samplerExcavation,this.u_CullOrthoMatrix=e.cullOrthoMatrix,e.defines)this.defines[t]=e.defines[t];return this.refreshUniforms(),this}refreshUniforms(){this.uniforms.shift.value=this.shift,this.uniforms.A.value=this.A,this.uniforms.B.value=this.B,this.uniforms.C.value=this.C,this.uniforms.D.value=this.D,this.uniforms.E.value=this.E,this.uniforms.F.value=this.F,this.uniforms.scale.value=this.scale,this.uniforms.blinkColor.value.copy(this.blinkColor),this.uniforms.blinkCoefficient.value=this.blinkCoefficient,this.uniforms.colorState.value=this.colorState,this.uniforms.imageFade.value=this.imageFade,this.uniforms.fillMap.value=this.fillMap,this.uniforms.localClipping.value=this.localClipping,this.uniforms.innerClipping.value=this.innerClipping,this.uniforms.orthoViewProjMatrix.value.copy(this.orthoViewProjMatrix),this.uniforms.viewshedCount.value=this.viewshedCount,this.uniforms.viewshedContents.value=this.viewshedContents,this.uniforms.viewshedDepthMaps.value=this.viewshedDepthMaps,this.uniforms.videoCastCount.value=this.videoCastCount,this.uniforms.videoCastContents.value=this.videoCastContents,this.uniforms.videoCastDepthMaps.value=this.videoCastDepthMaps,this.uniforms.videoCastProjectorMaps.value=this.videoCastProjectorMaps,this.uniforms.uvCenter.value=this.uvCenter,this.uniforms.uvHalfExtent.value=this.uvHalfExtent,this.viewshedCount>0?this.defines.VIEW_SHED_MODE="":delete this.defines.VIEW_SHED_MODE,this.videoCastCount>0?this.defines.VIDEO_CAST_MODE="":delete this.defines.VIDEO_CAST_MODE,this.heightLimitSampler?this.defines.HEIGHT_LIMIT_READ="":delete this.defines.HEIGHT_LIMIT_READ,this.uniforms.heightLimitOrthoMatrix.value=this.heightLimitOrthoMatrix,this.uniforms.heightLimitSampler.value=this.heightLimitSampler,this.uniforms.heightColorSampler.value=this.heightColorSampler,this.uniforms.heightLimit.value=this.heightLimit,this.uniforms.useHeightLimit.value=this.useHeightLimit,this.useCSM?this.defines.USE_CSM="":delete this.defines.USE_CSM,this.useAlphaMap?this.defines.USE_ALPHAMAP="":delete this.defines.USE_ALPHAMAP,this.useCompressedColor?this.defines.CCOLOR="":delete this.defines.CCOLOR,this.useMultiBlinkColor?this.defines.USE_MULTI_BLINK_COLOR="":delete this.defines.USE_MULTI_BLINK_COLOR,this.useCompressedNormal?this.defines.CNORMAL="":delete this.defines.CNORMAL,this.uniforms.useForCap.value=this.useForCap,this.useClampToBorder?this.defines.USE_CLAMP_TO_BORDER="":delete this.defines.USE_CLAMP_TO_BORDER,this.useCompressedUv?this.defines.USE_COMPRESS_UV="":delete this.defines.USE_COMPRESS_UV,this.uniforms.u_SamplerExcavation.value=this.samplerExcavation,this.uniforms.u_CullOrthoMatrix.value=this.cullOrthoMatrix}setBlinkColor(e){this.blinkColor.fromArray(e.toArray()),this.uniforms.blinkColor.value.copy(this.blinkColor),this.uniforms.blinkCoefficient.value=this.blinkCoefficient,this.uniforms.colorState.value=r.EnumShaderColorState.BLINK}updateBlinkUniformValue(e,t,i){this.uniforms.colorState.value=e,this.uniforms.blinkColor.value.copy(t),this.uniforms.blinkCoefficient.value=i}resetBlinkUniformValue(){this.uniforms.colorState.value=this.colorState,this.uniforms.blinkColor.value.copy(this.blinkColor),this.uniforms.blinkCoefficient.value=this.blinkCoefficient}updateExcavation(e){e&&e.isExcavation?(this.defines.EXCAVATION_MODE="",this.samplerExcavation=e.samplerExcavation,this.cullOrthoMatrix=e.cullOrthoMatrix):(delete this.defines.EXCAVATION_MODE,this.samplerExcavation=null,this.cullOrthoMatrix.identity()),this.refreshUniforms()}updateSide(e){(e||{}).isExcavation||r.GlobalData.EnableSkylinePass?this.side=THREE.DoubleSide:this.side=THREE.FrontSide}}r.CloudStandardMaterial=e})(),(()=>{class e extends THREE.MeshBasicMaterial{constructor(e){super(e),this.type="CLOUDMeshBasicMaterial",this.defines={},this.vertexShader=r.ClippingStencilShader.vertexShader,this.fragmentShader=r.ClippingStencilShader.fragmentShader,this.uniforms=THREE.ShaderLib.basic.uniforms}}r.ClippingStencilMaterial=e})(),function(){const e="\n vec4 mvPosition = modelViewMatrix * vec4(getInstancePosition(transformed), 1.0);\n gl_Position = projectionMatrix * mvPosition;\n ";class t extends THREE.MeshDepthMaterial{constructor(t){super(t),this.type="InstancedDepthMaterial",this.uniforms=THREE.UniformsUtils.merge([THREE.ShaderLib.depth.uniforms,{discardAlpha:{value:0}}]),this.vertexShader=function(t){return t.replace("#include <project_vertex>",e)}(THREE.ShaderLib.depth.vertexShader.replace("void main() {","\n attribute float vState; \n attribute vec4 aColor; \n attribute vec3 mcol0;\n attribute vec3 mcol1;\n attribute vec3 mcol2;\n attribute vec3 mcol3;\n #if defined(USE_MAP)\n attribute vec2 muvCol0;\n attribute vec2 muvCol1;\n attribute vec2 muvCol2;\n #endif\n \n varying float vfState;\n \n vec3 getInstancePosition(vec3 position) {\n return vec3(mat4(vec4(mcol0, 0.0),\n vec4(mcol1, 0.0),\n vec4(mcol2, 0.0),\n vec4(mcol3, 1.0)) * vec4(position, 1.0));\n }\n \n void main() {\n vfState = vState;\n ")),this.fragmentShader=THREE.ShaderLib.depth.fragmentShader.replace("void main() {","\n varying float vfState; \n void main() {\n if (vfState <= -0.99 && vfState >= -1.01) discard;\n \n ")}}r.InstancedDepthMaterial=t}(),function(){class e extends THREE.MeshBasicMaterial{constructor(e){var t;super(e),this.type="InstancedMeshBasicMaterial",this.innerClipping=-1,this.orthoViewProjMatrix=new THREE.Matrix4,this.uniforms=THREE.UniformsUtils.merge([THREE.ShaderLib.basic.uniforms,{orthoViewProjMatrix:{value:this.orthoViewProjMatrix},innerClipping:{value:this.innerClipping}}]),this.vertexShader=function(e){return e.replace("#include <clipping_planes_vertex>","\n #include <clipping_planes_vertex>\n wPositionForInnerClipping = modelMatrix * vec4(getInstancePosition(transformed), 1.0);\n ").replace("#include <project_vertex>","\n vec4 mvPosition = modelViewMatrix * vec4(getInstancePosition(transformed), 1.0);\n gl_Position = projectionMatrix * mvPosition;\n ")}(THREE.ShaderLib.basic.vertexShader.replace("#include <clipping_planes_pars_vertex>","\n #include <clipping_planes_pars_vertex>\n varying vec4 wPositionForInnerClipping;\n ").replace("void main() {","\n attribute float vState; \n attribute vec3 mcol0;\n attribute vec3 mcol1;\n attribute vec3 mcol2;\n attribute vec3 mcol3; \n varying float vfState;\n \n vec3 getInstancePosition(vec3 position) {\n return vec3(mat4(vec4(mcol0, 0.0),\n vec4(mcol1, 0.0),\n vec4(mcol2, 0.0),\n vec4(mcol3, 1.0)) * vec4(position, 1.0));\n }\n \n void main() {\n vfState = vState;\n ")),this.fragmentShader=(t=THREE.ShaderLib.basic.fragmentShader,t.replace("#include <clipping_planes_pars_fragment>","\n #include <clipping_planes_pars_fragment>\n uniform mat4 orthoViewProjMatrix;\n uniform int innerClipping;\n varying vec4 wPositionForInnerClipping;\n ").replace("#include <clipping_planes_fragment>","\n if (innerClipping > 0) \n {\n vec4 clipPosition = orthoViewProjMatrix * wPositionForInnerClipping;\n clipPosition.xyz /= clipPosition.w;\n if (clipPosition.x >= -1.0 && clipPosition.x <= 1.0 &&\n clipPosition.y >= -1.0 && clipPosition.y <= 1.0 && clipPosition.z >= -1.0) \n {\n discard;\n }\n }\n else\n {\n #include <clipping_planes_fragment>\n }\n ").replace("void main() {","\n varying float vfState; \n void main() {\n if (vfState <= -0.99 && vfState >= -1.01) discard;\n \n "))}copy(e){return THREE.MeshBasicMaterial.prototype.copy.call(this,e),this.orthoViewProjMatrix.copy(e.orthoViewProjMatrix),this.innerClipping=e.innerClipping,this}refreshUniforms(){this.uniforms.orthoViewProjMatrix.value.copy(this.orthoViewProjMatrix),this.uniforms.innerClipping.value=this.innerClipping}}r.InstancedMeshBasicMaterial=e}(),function(){class e extends THREE.MeshDepthMaterial{constructor(e){super(e),this.type="LogNoAvailDepthMaterial",this.uniforms=THREE.ShaderLib.depth.uniforms,this.vertexShader=THREE.ShaderLib.depth.vertexShader,this.fragmentShader="\n #if DEPTH_PACKING == 3200\n uniform float opacity;\n #endif\n #include <common>\n #include <packing>\n #include <uv_pars_fragment>\n #include <map_pars_fragment>\n #include <alphamap_pars_fragment>\n #include <clipping_planes_pars_fragment>\n void main() {\n #include <clipping_planes_fragment>\n vec4 diffuseColor = vec4( 1.0 );\n #if DEPTH_PACKING == 3200\n diffuseColor.a = opacity;\n #endif\n #include <map_fragment>\n #include <alphamap_fragment>\n #include <alphatest_fragment>\n #if DEPTH_PACKING == 3200\n gl_FragColor = vec4( vec3( gl_FragCoord.z ), opacity );\n #elif DEPTH_PACKING == 3201\n gl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n #endif\n }"}}r.LogNoAvailDepthMaterial=e}(),function(){const e="\n vec4 mvPosition = modelViewMatrix * vec4(getInstancePosition(transformed), 1.0);\n gl_Position = projectionMatrix * mvPosition;\n ";class t extends r.LogNoAvailDepthMaterial{constructor(t){super(t),this.type="LogNoAvailInstancedDepthMaterial",this.uniforms=THREE.ShaderLib.depth.uniforms,this.vertexShader=function(t){return t.replace("#include <project_vertex>",e)}(THREE.ShaderLib.depth.vertexShader.replace("void main() {","\n attribute float vState;\n attribute vec4 aColor;\n attribute vec3 mcol0;\n attribute vec3 mcol1;\n attribute vec3 mcol2;\n attribute vec3 mcol3;\n #if defined(USE_MAP)\n attribute vec2 muvCol0;\n attribute vec2 muvCol1;\n attribute vec2 muvCol2;\n #endif\n\n varying float vfState;\n\n vec3 getInstancePosition(vec3 position) {\n return vec3(mat4(vec4(mcol0, 0.0),\n vec4(mcol1, 0.0),\n vec4(mcol2, 0.0),\n vec4(mcol3, 1.0)) * vec4(position, 1.0));\n }\n\n void main() {\n vfState = vState;\n ")),this.fragmentShader=this.fragmentShader.replace("void main() {","\n varying float vfState;\n void main() {\n if (vfState <= -0.99 && vfState >= -1.01) discard;\n\n ")}}r.LogNoAvailInstancedDepthMaterial=t}(),function(){class e extends THREE.MeshDepthMaterial{constructor(e){super(e),this.type="CustomMeshDepthMaterial",this.uniforms=THREE.UniformsUtils.merge([THREE.ShaderLib.depth.uniforms,{forceLogDepth:{value:!1},forceLogDepthBufFC:{value:1},forceCustomDepth:{value:!1},customDepth:{value:0}}]),this.vertexShader="\n #include <common>\n #include <uv_pars_vertex>\n #include <displacementmap_pars_vertex>\n #include <morphtarget_pars_vertex>\n #include <skinning_pars_vertex>\n #include <logdepthbuf_pars_vertex>\n #include <clipping_planes_pars_vertex>\n varying float forceFragDepth;\n void main() {\n #include <uv_vertex>\n #include <skinbase_vertex>\n #include <begin_vertex>\n #include <displacementmap_vertex>\n #include <morphtarget_vertex>\n #include <skinning_vertex>\n #include <project_vertex>\n #include <logdepthbuf_vertex>\n forceFragDepth = 1.0 + gl_Position.w;\n #include <clipping_planes_vertex>\n }\n ",this.fragmentShader="\n #if DEPTH_PACKING == 3200\n uniform float opacity;\n #endif\n #include <common>\n #include <packing>\n #include <uv_pars_fragment>\n #include <map_pars_fragment>\n #include <alphamap_pars_fragment>\n #include <logdepthbuf_pars_fragment>\n #include <clipping_planes_pars_fragment>\n uniform bool forceLogDepth;\n uniform float forceLogDepthBufFC;\n uniform bool forceCustomDepth;\n uniform float customDepth;\n varying float forceFragDepth;\n\n void main() {\n #include <clipping_planes_fragment>\n vec4 diffuseColor = vec4( 1.0 );\n #if DEPTH_PACKING == 3200\n diffuseColor.a = opacity;\n #endif\n #include <map_fragment>\n #include <alphamap_fragment>\n #include <alphatest_fragment>\n #include <logdepthbuf_fragment>\n #if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n float fragZ = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n #else\n float fragZ = gl_FragCoord.z;\n #endif\n if (forceLogDepth)\n {\n fragZ = log2( forceFragDepth ) * forceLogDepthBufFC * 0.5;\n }\n if (forceCustomDepth)\n {\n fragZ = customDepth;\n }\n\n #if DEPTH_PACKING == 3200\n gl_FragColor = vec4( vec3( fragZ ), opacity );\n #elif DEPTH_PACKING == 3201\n gl_FragColor = packDepthToRGBA( fragZ );\n #endif\n }\n "}}r.CustomMeshDepthMaterial=e}(),function(){class e extends THREE.MeshDepthMaterial{constructor(e){super(e),this.type="CustomInstancedMeshDepthMaterial",this.uniforms=THREE.UniformsUtils.merge([THREE.ShaderLib.depth.uniforms,{forceLogDepth:{value:!1},forceLogDepthBufFC:{value:1},forceCustomDepth:{value:!1},customDepth:{value:0},discardAlpha:{value:0}}]),this.vertexShader="\n #include <common>\n #include <uv_pars_vertex>\n #include <displacementmap_pars_vertex>\n #include <morphtarget_pars_vertex>\n #include <skinning_pars_vertex>\n #include <logdepthbuf_pars_vertex>\n #include <clipping_planes_pars_vertex>\n varying float forceFragDepth;\n \n attribute float vState;\n attribute vec4 aColor;\n attribute vec3 mcol0;\n attribute vec3 mcol1;\n attribute vec3 mcol2;\n attribute vec3 mcol3;\n #if defined(USE_MAP)\n attribute vec2 muvCol0;\n attribute vec2 muvCol1;\n attribute vec2 muvCol2;\n #endif\n\n varying float vfState;\n varying float vAlpha;\n\n vec3 getInstancePosition(vec3 position) {\n return vec3(mat4(vec4(mcol0, 0.0),\n vec4(mcol1, 0.0),\n vec4(mcol2, 0.0),\n vec4(mcol3, 1.0)) * vec4(position, 1.0));\n }\n\n void main() {\n vfState = vState;\n \n #include <uv_vertex>\n #include <skinbase_vertex>\n #include <begin_vertex>\n #include <displacementmap_vertex>\n #include <morphtarget_vertex>\n #include <skinning_vertex>\n \n vec4 mvPosition = modelViewMatrix * vec4(getInstancePosition(transformed), 1.0);\n gl_Position = projectionMatrix * mvPosition;\n vAlpha = aColor.a;\n #include <logdepthbuf_vertex>\n forceFragDepth = 1.0 + gl_Position.w;\n #include <clipping_planes_vertex>\n }\n ",this.fragmentShader="\n #if DEPTH_PACKING == 3200\n uniform float opacity;\n #endif\n #include <common>\n #include <packing>\n #include <uv_pars_fragment>\n #include <map_pars_fragment>\n #include <alphamap_pars_fragment>\n #include <logdepthbuf_pars_fragment>\n #include <clipping_planes_pars_fragment>\n uniform bool forceLogDepth;\n uniform float forceLogDepthBufFC;\n uniform bool forceCustomDepth;\n uniform float customDepth;\n uniform float discardAlpha;\n varying float forceFragDepth;\n \n varying float vfState;\n varying float vAlpha;\n void main() {\n if (vfState <= -0.99 && vfState >= -1.01) discard;\n if (vAlpha <= discardAlpha && vAlpha >= 0.0) discard;\n\n #include <clipping_planes_fragment>\n vec4 diffuseColor = vec4( 1.0 );\n #if DEPTH_PACKING == 3200\n diffuseColor.a = opacity;\n #endif\n #include <map_fragment>\n #include <alphamap_fragment>\n #include <alphatest_fragment>\n #include <logdepthbuf_fragment>\n #if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n float fragZ = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n #else\n float fragZ = gl_FragCoord.z;\n #endif\n \n if (forceLogDepth)\n {\n fragZ = log2( forceFragDepth ) * forceLogDepthBufFC * 0.5;\n }\n if (forceCustomDepth)\n {\n fragZ = customDepth;\n }\n\n #if DEPTH_PACKING == 3200\n gl_FragColor = vec4( vec3( fragZ ), opacity );\n #elif DEPTH_PACKING == 3201\n gl_FragColor = packDepthToRGBA( fragZ );\n #endif\n }\n "}}r.CustomInstancedMeshDepthMaterial=e}(),function(){class e extends THREE.MeshBasicMaterial{constructor(e){super(e),this.type="PickingExcavationMaterial",this.vertexShader="\n #include <common>\n #include <morphtarget_pars_vertex>\n #include <skinning_pars_vertex>\n #include <logdepthbuf_pars_vertex>\n\n uniform mat4 u_CullOrthoMatrix;\n varying vec3 v_CullOrthoPosition;\n\n void main()\n {\n vec4 othPos = u_CullOrthoMatrix * (modelMatrix * vec4(position, 1.0));\n othPos /= othPos.w;\n v_CullOrthoPosition = othPos.xyz;\n\n #include <skinbase_vertex>\n #include <begin_vertex>\n #include <morphtarget_vertex>\n #include <skinning_vertex>\n\n #ifdef USE_SKINNING\n vec4 wPosition = modelMatrix * skinned;\n #else\n vec4 wPosition = modelMatrix * vec4( transformed, 1.0 );\n #endif\n\n vec4 mvPosition = viewMatrix * wPosition;\n gl_Position = projectionMatrix * mvPosition;\n \n #include <logdepthbuf_vertex>\n #include <worldpos_vertex>\n }\n ",this.fragmentShader="\n #include <common>\n #include <logdepthbuf_pars_fragment>\n \n varying vec3 v_CullOrthoPosition;\n uniform sampler2D u_SamplerExcavation;\n \n vec2 postProjToScreen(vec2 position)\n {\n vec2 screenPos = position;\n return 0.5 *(vec2(screenPos.x, screenPos.y) + 1.0);\n }\n \n void main()\n { \n vec2 uv = postProjToScreen(v_CullOrthoPosition.xy);\n vec4 resultColor = vec4(1.0);\n if(uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0)\n {\n vec4 color = texture2D(u_SamplerExcavation, uv);\n if(color.r > 0.0001)\n {\n resultColor = vec4(0.0);\n }\n } \n \n #include <logdepthbuf_fragment>\n gl_FragColor = resultColor;\n }\n ",this.samplerExcavation=null,this.cullOrthoMatrix=new THREE.Matrix4,this.uniforms=THREE.UniformsUtils.merge([THREE.ShaderLib.basic.uniforms,{u_SamplerExcavation:{value:this.samplerExcavation},u_CullOrthoMatrix:{value:this.cullOrthoMatrix}}])}refreshUniforms(){this.uniforms.u_SamplerExcavation.value=this.samplerExcavation,this.uniforms.u_CullOrthoMatrix.value=this.cullOrthoMatrix}updateExcavation(e){e&&e.isExcavation?(this.samplerExcavation=e.samplerExcavation,this.cullOrthoMatrix=e.cullOrthoMatrix):(this.samplerExcavation=null,this.cullOrthoMatrix.identity()),this.refreshUniforms()}updateSide(e){(e||{}).isExcavation||r.GlobalData.EnableSkylinePass?this.side=THREE.DoubleSide:this.side=THREE.FrontSide}}r.PickingExcavationMaterial=e}(),function(){class e extends THREE.MeshBasicMaterial{constructor(e){super(e),this.defines={},this.type="MapBasicClipMaterial",this.innerClipping=-1,this.orthoViewProjMatrix=new THREE.Matrix4,this.uniforms=THREE.UniformsUtils.merge([THREE.ShaderLib.basic.uniforms,{orthoViewProjMatrix:{value:this.orthoViewProjMatrix},innerClipping:{value:this.innerClipping}}]),this.vertexShader=this._getVertexShader(THREE.ShaderLib.basic.vertexShader),this.fragmentShader=this._getFragmentShader(THREE.ShaderLib.basic.fragmentShader)}copy(e){return THREE.MeshBasicMaterial.prototype.copy.call(this,e),this.orthoViewProjMatrix.copy(e.orthoViewProjMatrix),this.innerClipping=e.innerClipping,this}refreshUniforms(){this.uniforms.orthoViewProjMatrix.value.copy(this.orthoViewProjMatrix),this.uniforms.innerClipping.value=this.innerClipping}_getVertexShader(e){var t=e.replace("#include <clipping_planes_pars_vertex>","\n #include <clipping_planes_pars_vertex>\n varying vec4 wPositionForInnerClipping;\n ");return t=t.replace("#include <clipping_planes_vertex>","\n #include <clipping_planes_vertex>\n wPositionForInnerClipping = modelMatrix * vec4(transformed, 1.0);\n ")}_getFragmentShader(e){var t=e.replace("#include <clipping_planes_pars_fragment>","\n #include <clipping_planes_pars_fragment>\n uniform mat4 orthoViewProjMatrix;\n uniform int innerClipping;\n varying vec4 wPositionForInnerClipping;\n ");return t=t.replace("#include <clipping_planes_fragment>","\n if (innerClipping > 0) \n {\n vec4 clipPosition = orthoViewProjMatrix * wPositionForInnerClipping;\n clipPosition.xyz /= clipPosition.w;\n if (clipPosition.x >= -1.0 && clipPosition.x <= 1.0 &&\n clipPosition.y >= -1.0 && clipPosition.y <= 1.0 && clipPosition.z >= -1.0) \n {\n discard;\n }\n }\n else\n {\n #include <clipping_planes_fragment>\n }\n ")}}r.MeshBasicClipMaterial=e}(),(()=>{class e extends THREE.Material{constructor(e){super(),this.isPointsMaterial=!0,this.type="CLOUDPointsMaterial",this.color=new THREE.Color(16777215),this.map=null,this.alphaMap=null,this.size=1,this.scale=1,this.morphTargets=!1,this.defines={},this.sizeAttenuation=r.Utils.defaultValue(e.sizeAttenuation,!1),this.sizeAttenuation?this.defines.USE_SIZEATTENUATION="":delete this.defines.USE_SIZEATTENUATION,this.positionOffset=r.Utils.defaultValue(e.positionOffset,!1),this.positionOffset?this.defines.USE_POSITION_OFFSET="":delete this.defines.USE_POSITION_OFFSET,this.sizeAttribute=r.Utils.defaultValue(e.sizeAttribute,!1),this.sizeAttribute?this.defines.USE_ATTRIBUTE_SIZE="":delete this.defines.USE_ATTRIBUTE_SIZE,this.setValues(e),this.vertexShader=THREE.ShaderChunk.points_vertex,this.fragmentShader=THREE.ShaderChunk.points_fragment,this.uniforms=THREE.UniformsUtils.merge([THREE.ShaderLib.basic.uniforms,{size:{value:this.size},scale:{value:this.scale}}])}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.alphaMap=e.alphaMap,this.size=e.size,this.sizeAttenuation=e.sizeAttenuation,this.positionOffset=e.positionOffset,this.sizeAttribute=e.sizeAttribute,this.morphTargets=e.morphTargets,this}refreshUniforms(){this.uniforms.positionOffset.value=this.positionOffset,this.uniforms.sizeAttribute.value=this.sizeAttribute}}r.PointsMaterial=e})(),function(){class e extends THREE.MeshNormalMaterial{constructor(e){super(e),this.type="InstancedNormalMaterial",this.uniforms=THREE.ShaderLib.normal.uniforms,this.vertexShader="#define NORMAL\n #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n varying vec3 vViewPosition;\n #endif\n #ifndef FLAT_SHADED\n varying vec3 vNormal;\n #endif\n #include <uv_pars_vertex>\n #include <displacementmap_pars_vertex>\n #include <morphtarget_pars_vertex>\n #include <skinning_pars_vertex>\n #include <logdepthbuf_pars_vertex>\n #include <clipping_planes_pars_vertex>\n attribute float vState;\n attribute vec4 aColor;\n attribute vec3 mcol0;\n attribute vec3 mcol1;\n attribute vec3 mcol2;\n attribute vec3 mcol3;\n #if defined(USE_MAP)\n attribute vec2 muvCol0;\n attribute vec2 muvCol1;\n attribute vec2 muvCol2;\n #endif\n varying float vfState;\n vec3 getInstancePosition(vec3 position) {\n return vec3(mat4(vec4(mcol0, 0.0),\n vec4(mcol1, 0.0),\n vec4(mcol2, 0.0),\n vec4(mcol3, 1.0)) * vec4(position, 1.0));\n }\n mat3 transpose_mat3( const in mat3 v ) {\n mat3 tmp;\n tmp[0] = vec3(v[0].x, v[1].x, v[2].x);\n tmp[1] = vec3(v[0].y, v[1].y, v[2].y);\n tmp[2] = vec3(v[0].z, v[1].z, v[2].z);\n return tmp;\n }\n mat3 inverse_mat3(in mat3 m)\n {\n float determinant =\n m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2])\n - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2])\n + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]);\n mat3 inverse;\n inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]);\n inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]);\n inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]);\n inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]);\n inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]);\n inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]);\n inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]);\n inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]);\n inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]);\n inverse /= determinant;\n return inverse;\n }\n bool isPerspectiveMatrix(mat4 m) {\n return m[2][3] == -1.0;\n }\n void main() {\n vfState = vState;\n #include <uv_vertex>\n #include <beginnormal_vertex>\n #include <morphnormal_vertex>\n #include <skinbase_vertex>\n #include <skinnormal_vertex>\n #include <defaultnormal_vertex>\n\n mat3 normalMat = mat3(mcol0, mcol1, mcol2);\n normalMat = inverse_mat3(normalMat);\n normalMat = transpose_mat3(normalMat);\n transformedNormal = normalMat * objectNormal;\n transformedNormal = normalMatrix * transformedNormal;\n #ifdef FLIP_SIDED\n transformedNormal = - transformedNormal;\n #endif\n transformedNormal = normalize( transformedNormal );\n\n #ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n #endif\n #include <begin_vertex>\n #include <displacementmap_vertex>\n #include <morphtarget_vertex>\n #include <skinning_vertex>\n vec4 mvPosition = modelViewMatrix * vec4(getInstancePosition(transformed), 1.0);\n gl_Position = projectionMatrix * mvPosition;\n #include <clipping_planes_vertex>\n #include <logdepthbuf_vertex>\n #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n vViewPosition = - mvPosition.xyz;\n #endif\n }\n ",this.fragmentShader=THREE.ShaderLib.normal.fragmentShader.replace("void main() {","\n varying float vfState;\n void main() {\n if (vfState <= -0.99 && vfState >= -1.01) discard;\n ")}}r.InstancedNormalMaterial=e}(),function(){class e extends THREE.MeshPhongMaterial{constructor(e){super(e),this.defines={},this.type="MapTileMaterial",this.samplerExcavation=null,this.cullOrthoMatrix=new THREE.Matrix4,this.brightness=1,this.contrast=1,this.saturation=1,this.hue=0,this.gamma=1,this.customColor=new THREE.Vector4(1,1,1,1),this.useCustomColor=0,this._imageByteSize=0,this.useCSM=r.GlobalData.EnableCSM,this.uniforms=THREE.UniformsUtils.merge([THREE.ShaderLib.phong.uniforms,{u_SamplerExcavation:{value:null},u_CullOrthoMatrix:{value:new THREE.Matrix4}},{brightness:{value:this.brightness},contrast:{value:this.contrast},saturation:{value:this.saturation},hue:{value:this.hue},gamma:{value:this.gamma},customColor:{value:this.customColor},useCustomColor:{value:this.useCustomColor}},{csmCascades:{value:null}}]),this.vertexShader=THREE.ShaderChunk.map_tile_vertex,this.fragmentShader=THREE.ShaderChunk.map_tile_fragment,this.useCSM?this.defines.USE_CSM="":delete this.defines.USE_CSM}copy(e){return THREE.MeshBasicMaterial.prototype.copy.call(this,e),this.u_SamplerExcavation.value=e.samplerExcavation,this.u_CullOrthoMatrix.value=e.cullOrthoMatrix,this.brightness=e.brightness,this.contrast=e.contrast,this.saturation=e.saturation,this.hue=e.hue,this.gamma=e.gamma,this.customColor=e.customColor,this.useCustomColor=e.useCustomColor,this.useCSM=e.useCSM,this}refreshUniforms(){this.uniforms.u_SamplerExcavation.value=this.samplerExcavation,this.uniforms.u_CullOrthoMatrix.value=this.cullOrthoMatrix,this.uniforms.brightness.value=this.brightness,this.uniforms.contrast.value=this.contrast,this.uniforms.saturation.value=this.saturation,this.uniforms.hue.value=this.hue,this.uniforms.gamma.value=this.gamma,this.uniforms.customColor.value.copy(this.customColor),this.uniforms.useCustomColor.value=this.useCustomColor,this.useCSM?this.defines.USE_CSM="":delete this.defines.USE_CSM}updateStyle(e){this.brightness=r.Utils.isDefined(e.brightness)?e.brightness:1,this.contrast=r.Utils.isDefined(e.contrast)?e.contrast:1,this.saturation=r.Utils.isDefined(e.saturation)?e.saturation:1,this.hue=r.Utils.isDefined(e.hue)?e.hue:0,this.gamma=r.Utils.isDefined(e.gamma)?e.gamma:1,this.customColor=r.Utils.isDefined(e.color)?this.customColor.copy(e.color):this.customColor,this.useCustomColor=r.Utils.isDefined(e.color)?1:0,this.refreshUniforms()}updateExcavation(e){e&&e.isExcavation?(this.samplerExcavation=e.samplerExcavation,this.cullOrthoMatrix=e.cullOrthoMatrix):(this.samplerExcavation=null,this.cullOrthoMatrix.identity()),this.refreshUniforms()}updateSide(e){(e||{}).isExcavation||r.GlobalData.EnableSkylinePass?this.side=THREE.DoubleSide:this.side=THREE.FrontSide}}r.MapTileMaterial=e}(),function(){class e extends THREE.MeshNormalMaterial{constructor(e){super(e),this.type="NormalMaterial",this.uniforms=THREE.ShaderLib.normal.uniforms,this.vertexShader="\n #define NORMAL\n #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n varying vec3 vViewPosition;\n #endif\n #ifndef FLAT_SHADED\n varying vec3 vNormal;\n #endif\n #include <uv_pars_vertex>\n #include <displacementmap_pars_vertex>\n #include <morphtarget_pars_vertex>\n #include <skinning_pars_vertex>\n #include <logdepthbuf_pars_vertex>\n bool isPerspectiveMatrix(mat4 m) {\n return m[2][3] == -1.0;\n }\n #include <clipping_planes_pars_vertex>\n void main() {\n #include <uv_vertex>\n #include <beginnormal_vertex>\n #include <morphnormal_vertex>\n #include <skinbase_vertex>\n #include <skinnormal_vertex>\n #include <defaultnormal_vertex>\n #ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n #endif\n #include <begin_vertex>\n #include <displacementmap_vertex>\n #include <morphtarget_vertex>\n #include <skinning_vertex>\n #include <project_vertex>\n #include <logdepthbuf_vertex>\n #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n vViewPosition = - mvPosition.xyz;\n #endif\n #include <clipping_planes_vertex>\n }\n ",this.fragmentShader=THREE.ShaderLib.normal.fragmentShader}}r.NormalMaterial=e}(),function(){class e extends THREE.MeshBasicMaterial{constructor(e){super(e),this.type="WallMaterial",this.uniforms=THREE.UniformsUtils.merge([THREE.ShaderLib.basic.uniforms,r.WallShader.uniforms]),this.vertexShader=r.WallShader.vertexShader,this.fragmentShader=r.WallShader.fragmentShader}}r.WallMaterial=e}(),function(){class e extends THREE.MeshBasicMaterial{constructor(e){super(e),this.type="PlaneScanMaterial",this.uniforms=THREE.UniformsUtils.merge([THREE.ShaderLib.basic.uniforms,r.PlaneScanShader.uniforms]),this.vertexShader=r.PlaneScanShader.vertexShader,this.fragmentShader=r.PlaneScanShader.fragmentShader}}r.PlaneScanMaterial=e}(),function(){class e extends THREE.MeshBasicMaterial{constructor(e){super(e),this.type="FanScanMaterial",this.uniforms=THREE.UniformsUtils.merge([THREE.ShaderLib.basic.uniforms,r.FanScanShader.uniforms]),this.vertexShader=r.FanScanShader.vertexShader,this.fragmentShader=r.FanScanShader.fragmentShader}}r.FanScanMaterial=e}(),function(){class e extends THREE.ShaderMaterial{constructor(e){super(e);var t=this;t.type="WaterMaterial",t.uniforms=THREE.UniformsUtils.merge([{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new THREE.Color(16777215)},postProcessMap:{value:null},postProcessAdditiveMap:{value:null},postProcessMixRate:{value:0},postProcessAdditiveRate:{value:0},viewportWidth:{value:0},viewportHeight:{value:0}},r.WaterShader.uniforms]),t.vertexShader=r.WaterShader.vertexShader,t.fragmentShader=r.WaterShader.fragmentShader,t.textureMatrix=new THREE.Matrix4,t.transparent=!1,t.clipping=!0,t.side=THREE.DoubleSide,t.isUndersea=!0,t.fog=!0}initUniforms(e){var t=this;void 0!==e.flowMap?(t.defines.USE_FLOWMAP="",t.uniforms.tFlowMap={type:"t",value:e.flowMap}):t.uniforms.flowDirection={type:"v2",value:e.flowDirection},t.uniforms.tNormalMap0.value=e.normalMap0,t.uniforms.tNormalMap1.value=e.normalMap1,t.uniforms.waterColor.value=new THREE.Vector4(e.color.r,e.color.g,e.color.b,e.alpha),1==e.alpha&&(t.side=THREE.FrontSide,t.isUndersea=!1),t.uniforms.reflectivity.value=e.reflectivity,t.uniforms.config.value.x=0,t.uniforms.config.value.y=e.halfCycle,t.uniforms.config.value.z=e.halfCycle,t.uniforms.config.value.w=e.wavesScale,e.viewer.gisMode&&(t.defines.USE_GLOBE=""),e.shadow&&(t.defines.USE_SHADOW=""),t.uniforms.sunDirection.value=e.scene.sunDirection,t.uniforms.textureMatrix.value=t.textureMatrix}}r.WaterMaterial=e}(),function(){class e extends THREE.MeshBasicMaterial{constructor(e){super(e);var t=this;t.type="MeshBasicMaterial",t.depthTest=!1,t.depthWrite=!1,t.wireframe=!0,t.clipping=!0,t.side=THREE.DoubleSide,t.fog=!0,t.transparent=!0}}r.CutFillMaterial=e}(),(()=>{class e extends THREE.MeshBasicMaterial{constructor(e){super(e),this.type="CLOUDMeshBasicMaterial",this.vertexShader=THREE.ShaderChunk.meshbasic_vert,this.fragmentShader=THREE.ShaderChunk.cloud_mesh_basic_frag,this.uniforms=THREE.ShaderLib.basic.uniforms}}r.MeshBasicMaterial=e})(),(()=>{class e extends THREE.MeshStandardMaterial{constructor(e){super(e),this.type="CLOUDMeshStandardMaterial",this.vertexShader=THREE.ShaderChunk.meshphysical_vert,this.fragmentShader=THREE.ShaderChunk.cloud_mesh_physical_frag,this.uniforms=THREE.ShaderLib.physical.uniforms,this.metalness=.5,this.roughness=.5}}r.MeshStandardMaterial=e})(),function(){let e="\n void main() {\n gl_Position = vec4(position, 1.0);\n }\n ";function t(e){e.fragmentShader=e.fragmentShader.replace(/void\s+main\s*\(\s*(?:void)?\s*\)/g,"void testMain()"),e.fragmentShader+="\n void main(){\n\n testMain();\n\n vec3 Ci = gl_FragColor.rgb * gl_FragColor.a;\n float ai = gl_FragColor.a;\n float zi = gl_FragCoord.z;\n float wzi = oit_weight(zi, ai);\n gl_FragColor = vec4(Ci, ai) * wzi;\n }\n ",n(e)}function i(e){e.fragmentShader=e.fragmentShader.replace(/void\s+main\s*\(\s*(?:void)?\s*\)/g,"void testMain()"),e.fragmentShader+="\n void main(){\n\n testMain();\n\n float ai = gl_FragColor.a;\n // gl_FragColor = vec4(ai);\n gl_FragColor.r = ai;\n }\n ",n(e)}function n(e){e.fragmentShader=e.fragmentShader.replace("#include <packing>",""),e.fragmentShader=`\n #include <packing>\n\n float oit_weight(float z, float a){\n return clamp(pow(min(1.0, a * 10.0) + 0.01, 3.0) * 1e8 * pow(1.0 - z * 0.9, 3.0), 1e-2, 3e3);\n }\n\n ${e.fragmentShader}\n `}function a(e){e.fragmentShader=e.fragmentShader.replace(/void\s+main\s*\(\s*(?:void)?\s*\)/g,"void testMain()"),e.fragmentShader=e.fragmentShader.replace(/gl_FragColor/g,"alias_gl_FragColor"),e.fragmentShader+="\n void main(){\n\n testMain();\n\n if(alias_gl_FragColor.a < 1.0){\n discard;\n }\n\n gl_FragColor = alias_gl_FragColor;\n }\n ",e.fragmentShader=e.fragmentShader.replace("#include <packing>",""),e.fragmentShader=`\n #include <packing>\n vec4 alias_gl_FragColor;\n\n ${e.fragmentShader}\n `}r.OIT=class{constructor(t){this._renderer=t.renderer,this._fullScreenQuad=void 0,this._fullScreenQuadForCustomizedAlpha=void 0,this._fullScreenQuadForAdjustedAlpha=void 0,this._colorTarget=void 0,this._alphaTarget=void 0,this._opaqueTarget=void 0,this._fullScreenQuadMaterial=new THREE.ShaderMaterial({uniforms:{uAccumulate:{value:null},uAccumulateAlpha:{value:null}},vertexShader:e,fragmentShader:"\n precision highp float;\n uniform sampler2D uAccumulate;\n uniform sampler2D uAccumulateAlpha;\n \n void main() {\n ivec2 fragCoord = ivec2(gl_FragCoord.xy);\n vec4 accum = texelFetch(uAccumulate, fragCoord, 0);\n float revealage = texelFetch(uAccumulateAlpha, fragCoord, 0).r; \n gl_FragColor = vec4(accum.rgb / clamp(accum.a, 0.0001, 50000.0), 1.0 - revealage);\n }\n ",blending:THREE.CustomBlending,blendSrc:THREE.SrcAlphaFactor,blendDst:THREE.OneMinusSrcAlphaFactor,depthTest:!1,depthWrite:!1,transparent:!0}),this._fullScreenQuadMaterialForCustomizedAlpha=new THREE.ShaderMaterial({uniforms:{uOpaqueDepth:{value:null},uAccumulateAlpha:{value:null},uAdjustedAlpha:{value:1}},vertexShader:e,fragmentShader:"\n precision highp float;\n uniform float uAdjustedAlpha;\n uniform sampler2D uOpaqueDepth;\n uniform sampler2D uAccumulateAlpha;\n\n void main() {\n ivec2 fragCoord = ivec2(gl_FragCoord.xy);\n float revealage = texelFetch(uAccumulateAlpha, fragCoord, 0).r;\n float depth = texelFetch(uOpaqueDepth, fragCoord, 0).r;\n\n if(revealage == 1.0 && depth == 1.0){\n discard;\n }\n \n gl_FragColor = vec4(0.0, 0.0, 0.0, uAdjustedAlpha);\n }\n ",blending:THREE.CustomBlending,blendSrc:THREE.ZeroFactor,blendDst:THREE.OneFactor,blendSrcAlpha:THREE.OneFactor,blendDstAlpha:THREE.ZeroFactor,depthTest:!1,depthWrite:!1,transparent:!0}),this._fullScreenQuadMaterialForAdjustedAlpha=new THREE.ShaderMaterial({uniforms:{uOpaqueDepth:{value:null}},vertexShader:e,fragmentShader:"\n precision highp float;\n uniform sampler2D uOpaqueDepth;\n\n void main() {\n ivec2 fragCoord = ivec2(gl_FragCoord.xy); \n float depth = texelFetch(uOpaqueDepth, fragCoord, 0).r;\n\n if(depth < 1.0){\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n } else {\n discard;\n }\n }\n ",blending:THREE.CustomBlending,blendSrc:THREE.ZeroFactor,blendDst:THREE.OneFactor,blendSrcAlpha:THREE.OneFactor,blendDstAlpha:THREE.OneFactor,depthTest:!1,depthWrite:!1}),this._oldRenderState={clearColor:new THREE.Color,clearAlpha:1,autoClear:!0,autoClearColor:!0,autoClearDepth:!0,autoClearStencil:!0},this._initialized=!1,this._customizedAlpha=1,this._customizedAlphaEanbled=!1,this._transparentAlphaMaskEnabled=!0,this._composeCamera=new THREE.OrthographicCamera(-1,1,1,-1,0,1)}destroy(){this._oldRenderState=void 0,this._renderer=void 0,this._fullScreenQuadMaterial.dispose(),this._fullScreenQuadMaterial=void 0,this._fullScreenQuad&&(this._fullScreenQuad.geometry.dispose(),this._fullScreenQuad.geometry=void 0,this._fullScreenQuad.material=void 0,this._fullScreenQuad=void 0),this._fullScreenQuadMaterialForCustomizedAlpha.dispose(),this._fullScreenQuadMaterialForCustomizedAlpha=void 0,this._fullScreenQuadForCustomizedAlpha&&(this._fullScreenQuadForCustomizedAlpha.geometry.dispose(),this._fullScreenQuadForCustomizedAlpha.geometry=void 0,this._fullScreenQuadForCustomizedAlpha.material=void 0,this._fullScreenQuadForCustomizedAlpha=void 0),this._fullScreenQuadMaterialForAdjustedAlpha.dispose(),this._fullScreenQuadMaterialForAdjustedAlpha=void 0,this._fullScreenQuadForAdjustedAlpha&&(this._fullScreenQuadForAdjustedAlpha.geometry.dispose(),this._fullScreenQuadForAdjustedAlpha.geometry=void 0,this._fullScreenQuadForAdjustedAlpha.material=void 0,this._fullScreenQuadForAdjustedAlpha=void 0),this._colorTarget&&(this._colorTarget.dispose(),this._colorTarget=void 0),this._alphaTarget&&(this._alphaTarget.dispose(),this._alphaTarget=void 0),this._opaqueTarget&&(this._opaqueTarget.dispose(),this._opaqueTarget=void 0),this._composeCamera=void 0}setSize(e,t){if(!this._colorTarget)return;let i=this._renderer.getPixelRatio(),r=e*i,n=t*i;this._colorTarget.setSize(r,n),this._alphaTarget.setSize(r,n),this._opaqueTarget.setSize(r,n)}render(e,t,i){this._isInitialized()||this._init(),this._holdRenderState(),e.renderObjectsHolded=!0,this._hideWireframe(i),this._holdBackground(e),this._renderForProjectObjectsOnly(e,t),this._updateBackgroud(e),this._renderOpaqueObjectsDepthOffScreen(e,t),this._renderTransparentObjectsDepthOffScreen(e,t),this._renderTransparentObjectsOffScreen(e,t),this._resetRenderState();this._renderer.setRenderTarget(null),this._renderOpaqueObjects(e,t),this._renderTransparentObjectsDepthOnly(e,t),this._renderTransparentObjects(),this._showWireframe(i),this._renderWireframe(e,t,i),this._resetRenderState(),this._resetBackground(e),this._clearSceneRenderCache(e)}enableTransparentAlphaMask(e){this._transparentAlphaMaskEnabled=e}setCustomizedAlpha(e){this._customizedAlpha=r.Math.clamp(e,0,1)}_getCustomizedAlpha(){return this._customizedAlpha}enableCustomizedAlpha(e){this._customizedAlphaEanbled=e}_isCustomizedAlphaEnabled(){return this._customizedAlphaEanbled}_isInitialized(){return this._initialized}_init(){this._createFullScreenQuad(),this._createRenderTarget(),this._initialized=!0}_createFullScreenQuad(){const e=new THREE.BufferGeometry;e.setAttribute("position",new THREE.Float32BufferAttribute([-1,-1,0,-1,1,0,1,-1,0,1,1,0],3)),e.setAttribute("uv",new THREE.Float32BufferAttribute([0,0,0,1,1,0,1,1],2)),e.setIndex([0,2,1,2,3,1]),this._fullScreenQuad=new THREE.Mesh(e,this._fullScreenQuadMaterial),this._fullScreenQuadForCustomizedAlpha=new THREE.Mesh(e,this._fullScreenQuadMaterialForCustomizedAlpha),this._fullScreenQuadForAdjustedAlpha=new THREE.Mesh(e,this._fullScreenQuadMaterialForAdjustedAlpha)}_createRenderTarget(){const e=this._renderer,t=new THREE.Vector2;e.getSize(t);const i=t.x,r=t.y,n=e.getPixelRatio(),a=i*n,s=r*n,o=null===e.extensions.get("OES_texture_float_linear")?THREE.HalfFloatType:THREE.FloatType,l=new THREE.DepthTexture;l.type=o;const d=THREE.WebGLRenderTarget;this._opaqueTarget=new d(a,s,{minFilter:THREE.NearestFilter,magFilter:THREE.NearestFilter,wrapS:THREE.ClampToEdgeWrapping,wrapT:THREE.ClampToEdgeWrapping,format:THREE.RGBAFormat,type:o});const h=this._opaqueTarget;h.stencilBuffer=!1,h.depthBuffer=!0,h.depthTexture=l,this._colorTarget=new d(a,s,{minFilter:THREE.NearestFilter,magFilter:THREE.NearestFilter,wrapS:THREE.ClampToEdgeWrapping,wrapT:THREE.ClampToEdgeWrapping,format:THREE.RGBAFormat,type:o});const c=this._colorTarget;c.stencilBuffer=!1,c.depthBuffer=!0,c.depthTexture=l,this._alphaTarget=new d(a,s,{minFilter:THREE.NearestFilter,magFilter:THREE.NearestFilter,wrapS:THREE.ClampToEdgeWrapping,wrapT:THREE.ClampToEdgeWrapping,format:THREE.RedFormat,type:o});const u=this._alphaTarget;u.stencilBuffer=!1,u.depthBuffer=!0,u.depthTexture=l}_holdMaterialStateForTransparentObjects(e){e.forEach((e=>{const t=e.material;t._holdedProperties={blending:t.blending,blendSrc:t.blendSrc,blendDst:t.blendDst,blendSrcAlpha:t.blendSrcAlpha,blendDstAlpha:t.blendDstAlpha,depthWrite:t.depthWrite,depthTest:t.depthTest,onBeforeCompile:t.onBeforeCompile}}))}_updateMaterialStateForTransparentObjects(e,r){let n=r?i:t;e.forEach((e=>{const t=e.material;t.blending=THREE.CustomBlending,r?(t.blendSrc=THREE.ZeroFactor,t.blendDst=THREE.OneMinusSrcAlphaFactor,t.blendSrcAlpha=THREE.ZeroFactor,t.blendDstAlpha=THREE.OneMinusSrcAlphaFactor):(t.blendSrc=THREE.OneFactor,t.blendDst=THREE.OneFactor,t.blendSrcAlpha=THREE.OneFactor,t.blendDstAlpha=THREE.OneFactor),t.depthWrite=!1,t.depthTest=!0,t.onBeforeCompile=n,t.needsUpdate=!0}))}_resetMaterialStateForTransparentObjects(e){e.forEach((e=>{const t=e.material,i=t._holdedProperties;t.blending=i.blending,t.blendSrc=i.blendSrc,t.blendDst=i.blendDst,t.blendSrcAlpha=i.blendSrcAlpha,t.blendDstAlpha=i.blendDstAlpha,t.depthWrite=i.depthWrite,t.depthTest=i.depthTest,t.onBeforeCompile=i.onBeforeCompile,t.needsUpdate=!0}))}_holdMaterialStateToAlphaCulling(e){e.forEach((e=>{const t=e.material;t._holdedProperties={blending:t.blending,depthWrite:t.depthWrite,depthTest:t.depthTest,onBeforeCompile:t.onBeforeCompile}}))}_updateMaterialStateToAlphaCulling(e){e.forEach((e=>{const t=e.material;t.blending=THREE.NoBlending,t.depthWrite=!0,t.depthTest=!0,t.onBeforeCompile=a,t.needsUpdate=!0}))}_resetMaterialStateToAlphaCulling(e){e.forEach((e=>{const t=e.material,i=t._holdedProperties;t.blending=i.blending,t.depthTest=i.depthTest,t.depthWrite=i.depthWrite,t.onBeforeCompile=i.onBeforeCompile,t.needsUpdate=!0}))}_holdMaterialStateForObjects(e){e.forEach((e=>{e.material._colorWrite=e.material.colorWrite}))}_updateMaterialStateForObjects(e){e.forEach((e=>{e.material.colorWrite=!1}))}_resetMaterialStateForObjects(e){e.forEach((e=>{e.material.colorWrite=e.material._colorWrite}))}_setRenderStateFlagForScene(e,t,i,r){e.renderStateInitSkipped=t,e.renderOpaqueObjectsSkipped=i,e.renderTransparentObjectsSkipped=r}_clearRenderStateFlagForScene(e){e.renderStateInitSkipped=void 0,e.renderOpaqueObjectsSkipped=void 0,e.renderTransparentObjectsSkipped=void 0}_clearSceneRenderCache(e){e.renderObjectsHolded=void 0,e.opaqueObjects=void 0,e.transparentObjects=void 0}_renderForProjectObjectsOnly(e,t){this._setRenderStateFlagForScene(e,!1,!0,!0);const i=this._renderer;i.autoClear=!0,i.autoClearColor=!0,i.autoClearDepth=!0,i.autoClearStencil=!0,i.setRenderTarget(null),i.render(e,t)}_renderOpaqueObjectsDepthOffScreen(e,t){this._setRenderStateFlagForScene(e,!0,!1,!0);const i=e.opaqueObjects;this._holdMaterialStateForObjects(i),this._updateMaterialStateForObjects(i);const r=this._renderer;r.setClearColor(0,1),r.autoClear=!0,r.autoClearColor=!0,r.autoClearDepth=!0,r.autoClearStencil=!0,r.setRenderTarget(this._opaqueTarget),r.render(e,t),this._resetMaterialStateForObjects(i),this._clearRenderStateFlagForScene(e)}_renderTransparentObjectsDepthOffScreen(e,t){if(!this._transparentAlphaMaskEnabled)return;this._setRenderStateFlagForScene(e,!0,!0,!1);const i=e.transparentObjects;this._holdMaterialStateToAlphaCulling(i),this._updateMaterialStateToAlphaCulling(i);const r=this._renderer;r.setClearColor(0,1),r.autoClear=!1,r.setRenderTarget(this._opaqueTarget),r.render(e,t),this._resetMaterialStateToAlphaCulling(i),this._clearRenderStateFlagForScene(e)}_renderTransparentObjectsOffScreen(e,t){this._setRenderStateFlagForScene(e,!0,!0,!1);const i=e.transparentObjects;this._holdMaterialStateForTransparentObjects(i),this._updateMaterialStateForTransparentObjects(i);const r=this._renderer;r.setClearColor(0,0),r.autoClear=!0,r.autoClearColor=!0,r.autoClearDepth=!1,r.autoClearStencil=!0,r.setRenderTarget(this._colorTarget),r.render(e,t),this._updateMaterialStateForTransparentObjects(i,!0),r.setClearColor(16777215,1),r.setRenderTarget(this._alphaTarget),r.render(e,t),this._resetMaterialStateForTransparentObjects(i),this._clearRenderStateFlagForScene(e)}_renderOpaqueObjects(e,t){this._setRenderStateFlagForScene(e,!0,!1,!0);const i=this._renderer;i.autoClear=!0,i.autoClearColor=!0,i.autoClearDepth=!0,i.autoClearStencil=!0,i.render(e,t),this._clearRenderStateFlagForScene(e)}_renderTransparentObjectsDepthOnly(e,t){this._setRenderStateFlagForScene(e,!0,!0,!1);const i=e.transparentObjects;this._holdMaterialStateForObjects(i),this._updateMaterialStateForObjects(i);const r=this._renderer;r.autoClear=!1,r.render(e,t),this._resetMaterialStateForObjects(i),this._clearRenderStateFlagForScene(e)}_renderTransparentObjects(){this._renderFullScreenQuad(),this._renderFullScreenQuadForAdjustedAlpha(),this._renderFullScreenQuadByCustomizedAlpha()}_renderFullScreenQuad(){const e=this._fullScreenQuadMaterial.uniforms;e.uAccumulate.value=this._colorTarget.texture,e.uAccumulateAlpha.value=this._alphaTarget.texture;const t=this._renderer;t.autoClear=!1,t.render(this._fullScreenQuad,this._composeCamera),e.uAccumulate.value=null,e.uAccumulateAlpha.value=null}_renderFullScreenQuadForAdjustedAlpha(){const e=this._fullScreenQuadMaterialForAdjustedAlpha.uniforms;e.uOpaqueDepth.value=this._opaqueTarget.depthTexture;const t=this._renderer;t.autoClear=!1,t.render(this._fullScreenQuadForAdjustedAlpha,this._composeCamera),e.uOpaqueDepth.value=null}_renderFullScreenQuadByCustomizedAlpha(){if(!this._isCustomizedAlphaEnabled())return;const e=this._fullScreenQuadMaterialForCustomizedAlpha.uniforms;e.uOpaqueDepth.value=this._opaqueTarget.depthTexture,e.uAccumulateAlpha.value=this._alphaTarget.texture,e.uAdjustedAlpha.value=this._getCustomizedAlpha();const t=this._renderer;t.autoClear=!1,t.render(this._fullScreenQuadForCustomizedAlpha,this._composeCamera),e.uOpaqueDepth.value=null,e.uAccumulateAlpha.value=null,e.uAdjustedAlpha.value=null}_renderWireframe(e,t,i){i.hideAllExcludeWireframes(),this._renderWireframeOnly(e,t),i.showAllExcludeWireframes(),i.resetAllNodeGroupVisibility()}_renderWireframeOnly(e,t){this._setRenderStateFlagForScene(e,!1,!1,!1);const i=this._renderer;i.autoClear=!1,i.render(e,t),this._clearRenderStateFlagForScene(e)}_holdRenderState(){const e=this._renderer,t=this._oldRenderState;e.getClearColor(t.clearColor),t.clearAlpha=e.getClearAlpha(),t.autoClear=e.autoClear,t.autoClearColor=e.autoClearColor,t.autoClearDepth=e.autoClearDepth,t.autoClearStencil=e.autoClearStencil}_resetRenderState(){const e=this._renderer,t=this._oldRenderState;e.setClearColor(t.clearColor,t.clearAlpha),e.autoClear=t.autoClear,e.autoClearColor=t.autoClearColor,e.autoClearDepth=t.autoClearDepth,e.autoClearStencil=t.autoClearStencil}_holdBackground(e){e.background&&(e._background={},e._background.isTexture=e.background.isTexture,e._background.isColor=e.background.isColor,e._background.isCubeTexture=e.background.isCubeTexture,e._background.mapping=e.background.mapping)}_updateBackgroud(e){e.background&&(e.background.isTexture=!1,e.background.isColor=!1,e.background.isCubeTexture=!1,e.background.mapping=void 0)}_resetBackground(e){e.background&&(e.background.isTexture=e._background.isTexture,e.background.isColor=e._background.isColor,e.background.isCubeTexture=e._background.isCubeTexture,e.background.mapping=e._background.mapping,e._background=void 0)}_hideWireframe(e){e.holdAllNodeGroupVisibility(),e.hideAllWireframes()}_showWireframe(e){e.showAllWireframes()}}}(),function(){class e extends THREE.Group{constructor(e){super();var t=this;t.scene=e.scene,t.CONST_G=4.9,t.disPickable=!0,t.autoAnimation=!0,t.color=new THREE.Color(1,1,1),t.originPosition=new THREE.Vector3(0,0,0),t.originIntensity=.5,t.radius=2e4,t.originYaw=0,t.originPitch=0,t.particleScale=1,t.camera=e.camera,t.loader=new THREE.TextureLoader,t.zoomGis=1,t.setOpts(e),t.particleOpt=[{baseScale:60,imageUrl:"data:image/png;base64,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",minimumSpeed:22,maximumSpeed:25,minimumParticleLife:3.5,maximumParticleLife:4.5,emissionRate:1,radius:1,color:[{startAge:0,endAge:.4,startColor:.1,endColor:.15},{startAge:.4,endAge:1,startColor:.15,endColor:0}],scale:[{startAge:0,endAge:.3,startScale:.3,endScale:.66},{startAge:.3,endAge:.9,startScale:.66,endScale:15},{startAge:.9,endAge:1,startScale:3,endScale:20}],applyGravity:t.CONST_G,randomXY:.09},{baseScale:50,imageUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAFyCAYAAAAamASsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA25pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo5Njc3NTkxNi1mMGNjLWVmNDUtYTBmNy1mNzM4MzY2Zjc0NGIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDQ3MTA1M0VDRUI1MTFFOUIyNUFFN0RGMDRFMjU3NTYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDQ3MTA1M0RDRUI1MTFFOUIyNUFFN0RGMDRFMjU3NTYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MjE3RENGMDQwODI2MTFFOTkxRDdDMjhCRDIzMjk0MjQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MjE3RENGMDUwODI2MTFFOTkxRDdDMjhCRDIzMjk0MjQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4esQFqAACixklEQVR42uy993Ok2ZUldtMnvKkqlPfd1b7ZZLO7STbNDMeuIrSrkPlJ/6AUoVBoI2Z23M7OztANyfbelfcACt4k0gpXOEfv5FeZyIRPoN6L+AJVQJrPvHvuvee6VKPRsLh6YqXWjzQO/3ddjrji2pOVjbfgwAU+gyOLI4f/+99r60dp/VhZPyrxlsUVAeBoCH4O914BwI/8+lFYP4r46X9fWz8W1o+Z9WN5/YgmW1wRAA7x/S7gZ0p+3xBzvwHB99f149/D60ff+vF4/ZiPIBBXBIDDt4o4siL0VRH8dMLnT8MiGAYQ5PG7BkAgrrgiABwSk98FeABCTN+ePn0V/ycIlPG3GoTdXz+Ko4G/+WtW462NKwJA7wv/4PoxIgBQhxCvQMhNLAHD3yoCCrQGRmENuOAvgRuIEYK4IgD08HKhP75+HMMxAO09u37MJTS68gFlEW4HEUYJ+gRQFgAiccUVAaAHlwvrifXj4vrx5vpxFcLrwn1n/XhPAGBNrAETq2DFmqMDDBP24/MjAMQVAaAHVw6a34X+r9aP58X3d3N+Yv0YWz/+Fib9KoCg0QIEHDBKONYABkUAQKYFcMQVV9crHW/Bnvj9bqKfWT9+sX68YIH0q0Oo/d9X1o/vrR9DFhj+Vp+lmYE1C3kEhWcQwNO4ds2jiCtaAD21itDur60fL0Pgk5qd/79sG8TeZAttnsJnMYLQB6GnAOTx/NYOOViadc5roNvDcCitqTKuv5TgTeKKAHBgG3oAJv6ruL/tUngbEOi8aHnVdC7wowCTcfwcwPtq+OzMId1zfThyuO6qCHNFLJ0MXjdkIZLCDEl1jdyFWsaxGoEgAsBBrQy01ClwAJ388xVs4LpowTQ+YxxuxGtwF0bxt3vrxxeH0AT2cx3EdflxAj8Jkh7VeIKfDHHmIPR+7cfw+jQEfUXun4KAv3/OmiMrcUUA2Lf7WYBZX+hg2rqGe4ANW8ZrMzD7fcOfXz/+ev14RQSdeQV3ExZDr68cBNiB8QJA7TKuJQNh93swbRvpztMAgQzuBQF1EPfp5vrxjYBuAX8bxs8CPiMmS0UA2Hctl+lCM/t99+KeT20jrZcaLwvt75v9p+vH67AiqgIAeZjFDTscNQFZuETncT0/xP9NLJ8MQGIIwFAVN4CWDq/Xf/c87t+8hQxKgsAQ/p0CmKzFbRkBYD9XXczYgRZuAP3X360f1/HakmzkPgjLa9a6HwATharW+yHANDS/X8/PIPwFATS9JrPm5KdkzUTSonAX4lvc50bCxejD6/xvkxaLpyIA7NNiiM992Yfrx4v2dEafC+1v1o9/x+uWRZAZ4pvAJq63EKgl+LhrLQSj1xYJ0TfWj7dwbdUObhGtp07gNoj7oynVg/i+0/jbIgA2ugIRAPZl1bDZ3DT9AOb6WWzqCkzSj9ePP6wfU9icrQSCpm6jBQA8gPm72uMA4GDnkYtLEP58F8LvQjuL9450cHPqAMEVcRdWADrX8O+H4FQiAEQA2DcAWIbmuQtT/RQ2/zyElwJM8i8p+P4Z93FctBBGzELzf4mfKz0OAAMw/1/Fz07nmsY9+yOE2fmC59oAQEo4AAJAGq5UA9/tZOMnuPdxRQDYt7UK4Wbl3wx+rgo4LFv7MBVdiPfE1zVoRheOW9j4yz3u+zsZdw7auFsf3P31R9Dsfn39+Ixq4rNX4f9rQVTBQgl1Ay5UsvFKXBEA9oUHWITw1i2EA8vYrGuisdIiHKz4I1jcBhicw98eQUM+ARj0MrvNbEjX4KPWfWJOA4K/hHv1B7x/CPeVUZb3YAktWggXkgjsg9CTI4lJQREA9n2xis9E2LXBR9ZC+Et/lwdwNLCBZ/BZDWz2J/jdovU2s80y6KttuIx2HAAtqEXcsy/wWT+2DYKvBA7l1+BQli2ETzXDsAHrYDNLK64IAHu2GtBi3PxMX82Kts+Lucq/5Sy0DmPEgNWCbvZPAwB6nfwbAPdxbIsaeBnAtyqg8QGu+QS4j+9E+GtyL13wnTgcFgtq0WIeQASAA1p10dTMYaeQ50Tza8MPFvmw0KcGC2AeZv/MIdjQWQDYhHXOhlS/vmohA7AirpAL/Q0LpOqiAAQzJ5kAdBIA8B1evxABIALAQYPAEjY3QSAvAp+cCaD5/Sx2Ydx/7pBsZm1mmu7SWvF7cE+EvCEuAdOE9SfNfVobrC04DTfpMwth1sgBRAA4cBBYwebVnv850fqs9ae/yuo4EmLL1vtJP+r+0K1JdbkHXaMzN6IiLhFLgPvkd7QwmBY9BHfjZQCBh/7uwJpYjtsvAkCvrCqOVRH+5CQgs5D7z/LY6iG7TgJZN9o3A3D8lW0Qfhx8krdQBThqoWiI94a9EoYh/BdhAbjpfwvCP3sI710EgGfEIlgTcz5lTw8JOcy56+QtJgEEuTZAwMQdr4l4Hy5OxUJJtYcRPQT6IvgE5lU0xDpQa8r5ka9sI1w6FbV/BIDDsg67wLfjPdwM96zHyy0AgE1A3Oz/FK+v4Pcu0CPQ6t5S7UIXroZbG3+EBfAI2j/6/hEA4jqgtQRB9Jr9S/Z0LgABYNFCFST7HA5C878LEKhuApA5CLsXV3li0H1YHpH5jwAQ1wGuCvzwD20jG/BaQiiZIfkiBLhmIffBfXovHb7aQfj9tc74/6ttsP5sJFKKtz8CQFwHv1y7ezLOP8NfP21Pk3JX8LcbsBqGYDGc7kLzu7D/nW2QhxyaGkm/La5UoxF7JcS1Z8sF1fsaemXf/wjtXm6hybXRqdnmvQBYFfn3tkEePgR4xBUtgLh60BV4ZCHS8efQ8Fqkw1r+tHVuAuJgsQqz/334/HE6UgSAuHp4ue//AELvoTln9l+y0CCk2ygIuwf/m210U3oYhT8CQFyHY5Ut1PnPwOf/IdyDbAd/n5WSM9D8Hjq8F83+yAHEdQj3m4VOQR7q85bn3jHIST829Ki34AecTPRswU+izx8BIK7Dv1jE42m+XsHn8xM9JOjdgwfxGvYH9BDfR7AaYpgvAkBcR2g58efxfw//jcMSOAl+YBVugxN9Hu9ftDgJOQJAXEd2MROQ5dIsKipZjO9HAIgrrrj2xgSLK664IgDEFVdcz9qKeQA94opZaBDCbsLsEsQj+mpxRQA4gsvJL7a9yovwc/gn5w3yiHXucUUAOCLLBd7DX6MAAWW/2Q6sKoDgv1+1MBE3rrgiABzS5cLuGXE+PNS75nharHMynunm5a2e7ZYMgfm/Pf99AX+PIBBXBIBDujzjzctjvfPNW7AA2N7Kp998gX9z+EXaQodhzhWIKbFxRQA4pNrf+969DgDIi7/vWXE/xrP5Er/rg6uQh3Vw10Kf/Dj6Kq4IAIfwvrvf7/nvxYQQU+O/LnzAebgKninn+fC/gnuwGAEgrggAh9MCGIRWb8Xq16D138T/C/jZgNvgv/cae29/PW8xMhDXNldMBDrYe89y11arbmFOYN1CT3wHBy+YOWEhbz6uuCIAHKJVg/k+30GA23XLycIqSMVbGVcEgMO3PKGHU28bLQSZPfJaPZ8U/H4O04jmf1wRAA7ZqkP7v2cb4T5OCFa3wGvgZxPgwFHiXiPvtfIlizXyce1gRRLw4Ja7AN7b7u9hDTxvG8SfZ/r5WK3HMPO/t34cF1fgPoAjTr+NKwLAIecBnlhode2DLUfwe7a9cgDw2XlXAA4OCt4X71vbaJIZ22PFtaMVG4Ic/PI8ANYDDEDoWRmYt9Alh27DtIUJuJV4++KKAHBwK2MhTZcDMBmqq1v3Pe89tdczAAcBCHn8LiecQAUm/zy0fxyAGVcEgAMS+gJM8qIIaUqEn1V8LrSs7Kt0AIO0aHy1AlIAkwpchWWLPfLiigCw//cKQj8KX30AAJBN+PW1BAiUcKxAeFe7sApoVTBKw0SgyPjHFQHggITfhX7CNjLwRmGu5xMauibmPxt6VGAB0Hz30N5CFOa4emHFKED3wn8Wh/eu97BcPwR9DRqeZn4yMacBN2DZAsmXARBEEIgrAkCPLzf7PffeR1ldtY0Kvgsw5T0mPw0hr4svnxF/PoO/rQIAcnhdFRZBNMHiigDQo8uFdxwAcGn9+On68QYE+QNo9UULZbkNCDhz9Ydto+uPv95Td+9ZGIPNWv444TauCAA9rP0dALwE1zPy3obv7zH4m7aRmDNjgZnPQcCzcBt88OU1vMf//vX68TvhBUoWmn3GFVcEgB7z/V1wnfA7AwDoh9b2rL1b68ekbaTxrkHw+y1MwP0BDoYHC/h/0UKDT/IGMxZDe3FFAOg5838AZvwluAEGYf0Cwj8D878KAS/i5+sADLNmos9B4iUL3X9r8l2zFrv9xhUBoGdWHi6AZ+idw799eaHOA2j+efjwDQvZgMdh+udbmPZ1vO4aXluA29AHoJnF57EleASDuCIAHNDKQaP3wxJIQ9tfh+AvwvcvWRhz7Zr8PECgnUlfh/C/AJ7AyUTvAnwfFsWCfDY/P/b9iysCwAHcGx1Z7ULrIb/H0NIc0FHGa+v4OYH3bebTN/B3Jxf/cv14DZbFbVgXj/Bds7A05gAMEQjiigCwT4vNN7QhB31+Cn5ZzHz680UR8k6ris8/j+OH0Pou8F7y+xksjkcAnimLPQDiigCwL0vz8Fcg6PMQ+qr4/bQUchDmrdboN8Ra8M8Ys43cAZ8W5FEDr//30OHXsETcQogDQeKKALBPqwaBm4NwOycwbiFFmGa58wR9EGYW8tQ3AZeUAExD/s3v9L973cEvbSMM+V8sZBXes91pBpIS8GLlIcOWlYSFE1cEgGdqMb03JUI6CGEsAhRWLSTzpAEIZPIHLNQGUMDpUpDp9zUsQtfKMvC/vQQhXRP+4ZHtrJYgh+8eBs+hoJSy0JmI3YsjEEQAeKZWXXx6Pzwh6JKF8V0UfvIBLjRO6p3F745BqLQPgBN53gn4O1gULnhOAL5s7WcEsMeA9wx8x0IvwCUI5naF/zgsjBELJGZVgCon5/wYR2xCEgHgmQKAPEx+duu5AoGcs+bOP1XcywEAwTz+PYS/zcKH9wSimxDeNF7j778A37+2iTXix/dtgxz0z9MU5K0+83FYMs/j5zLcigXR9P0ANAepb3CeDy1WMEYAeIYW+/WdsJCw87yFKr40LAGO8lqFYLqZfgcC7laCk3gfwWxfs9BcJCMatxsuws/FswyvAzBmYaJ3s9IQZrdkzgNMrlqYNOxg97GFVuM1fMerADJaHItxW0QAeFZWAVrQRMsP4fcczNEvGnrQQm7/ioUsQRea+zCjGxB+Nv18Hp/ZacAH3YNrcDPu4nMWN3m2bC9WxGvZ1+AlXBetlzSsEJY3r8CtKcDq8fecw3dGAIgA8EwsZciXIRD9+Fsewk5BYcuuFF6zgL/V5LOW8PuMfO5lcAAp627CTw3cwnO20S6cVkSy3sABZQKCewaCX8Q5D7d4Tx3n4+/5HJZMGdfpNQ8nwRm0+r64IgAcWQ6AabirEN4RCBir+9IiLBQK7eTL31UsEIZsEuKm+NsQyMoWgWkcQFNICGQaf3OAeBOmfiFhRbTrLchrquN60jhnViqybiHOI4wA8EysMkz2h9C6JNwyIjAU9jULzT4rFpp6ZmAJ3Icw1fG7IrT/1S1qU84RZOiO48S4hvG5P4fmZ3NStQ5SAmL1BLAsWyhEYuMSJkF16mocVwSAIwcAbv5+CAAYhhBnRWAoTKwVqEBgshByFg/dtRAqzEF7X8PP7fQByFtz4g75CjfVvWPRaXu6mtDP06MXt3Fu7vMPQMgZrrwrQKWzDpgPECsUIwA8M6sK8/dzCC0Hdb4m2r0umjkjgrYE68FDfp7PzxRi+v/ui5+T92516cAR/vTPvASrot7ic/3cPQrxBa7Nz+0VWAr+Wg9T3hHtz56GRQDAfLQCIgA8a4vx8QI2/ihM7GJC+zJzrg6t6oTZp3Af5vE5BAmCwE4mM1esefqQf/8QAKC4Cacwhp8OZk9wfqexD6bEwmFOA5OflAiN48gjADwzqw6z+RbM9RvQ7jkLrH9SK/vhbPopaNtVa64P4GtrOwSAqoXoQwYWwNgmAloHMB0HJ7EKd8XJzT45vwFof3+d5xxctFCAFIeRHrGVjregK3N7FkJzHSBAJr1qzVOAtM3XWQsFQemET70Ggdoqo873UxtXrZlYLHa4jjyAKW2hL6F2Mx4Gj+B5At4B+Tn87QHuQQSAaAE8cwBJs71sIQWXCTTtBLgGYeQcALL1ZN5dkLwe4HtiTWzFKlm05rLkFL4j04WPPmghnJe2QEoeBzicAQjk8fo5AECcSRgB4JkSfApwH4RkBP+ehAbfTNjqIlBfWWDtaxYmBT2GIB/bhlsyb82TiAhU3Vh0ZeEjKPznAEYncd20Vvw1d3Hefi9OAAhWIhcQAeCorryF1NkBCAibdg5bIN/ym2jEBu7tGWjcPhFYAscMjhNb4APSEP5pC1WISf5hs1UDgFUshCT9ml6Fy8JGqAwxupsyhe+dAKgt4nczFjMCIwAcoZWCAFBbU1OnRGNWLNTHM3+/3gYAUhCqCby+JpZDDp/tbsAVa90PoN05TuNYTQAAm3f0t3lvBkJ7V9yXPECKPQ7cyhnDa1fx2icWMhhHcU0D+M7puG0iABwVk78g94PCVBKBXbTQ9ONbCE3WAhHXylT3VNw3YTYzYzAlVgFJw1wXAECQuA0NvGShPp9di5YhpO2skof4OYZzPw7TfwKWwKjcAweHBQudillM9DLev2IxMhAB4IhofhV+ZfepydMipK75vT7+dQhQvY35zQKbn+PnRxYIRCYCvWLdk4AcHvKFheaktAD8fOegsc+0sCjYt9AF920LVYInIdDDcv3kFGpiCTBFOI+fnmx0B4ASASACwKH3+fOy6RvWHM4jKDALzsOBHgr0TLpj9nThTxIE/B6/axtlv1P4nCEL3Xi6Mf15bn8A+ExDK2s2oLsZTjheBAhU5BmTwLsGgWVxz5gAUCNhLczIdZUsNDqZBnAcs+ZCo/0AagIZCc+GAHbFIjEZAWCLi/HzPhEyDdclhZPVcY+hiZ+H2Vxv83qCgG/e0xBM/X03xB03uwv/r2wjM3HKnp4qTJ/9t+vHLyDwdXACTEzKWHP2oLUQGvYsZGZgWVwX1gTUBTS75S92skeVkM1byKRk8dWqWCoEuLgiAHRcBWjjAQBB3UK/vUVspmRBTRWbzbWh59aPi2Bt1tKrtk2AcgH01uB/B+3/0EJLsuSii+Df9ROY6scAAKnEORB8OGeg38JAk8f4/STug0YvmIa81iWA7QScB2AljeA59VuYwETXZ034CD63JYtzFnsGALIWQmkZQeyDnn+Xhi/uAvIifPI0hPpzmPp1a26EScC4AFObG264gxWwnXPLwcz/t/XjX20jC/GehTBeO6BxEPgU73VL4C8tdCNWbU2N/kTckmN4P2sFvsazoivDjEYtDtort2wM4DoOK4vEaU4AlWXYGTk35kQQwKNbcEAAQLb7LATsNB7gMjTMAwvjtVds/8de5aFZfPjGa2JSMnT33yzk3JMQGwJx9xbAYA1CedJC1l/Vnq7U6+ZekWw0fK/787+2jXLk+9D8013cpwaAyc/rFn4uiwDlRUgM1zAPXuOJcB7X8b289gKAvF9AYi+eWR+A6AR+juPci+KmVeSnZkNmLOQyEEhXLeYr7DsAsDON55T/GBoznfB/aWLexubjxN39YpWL0OIviWlLYTwP0JoUE3kQm/JFbLAyznXJQvuv0xYYdSWqrA0gpIRvWMO9eART/1MRepJ+tS0+g4KFzD2dYKSa8jOAzKRo04IIF4ekDuH6LgLAl/YAAPx7jltoQTYGYGUW5QruOS1IJlfxKAuPw54MFnmB/QUACr/Hl/8U/64mNi9757mP6uW13sTCY+velfYOgGAvTTd+/yV7eoy3VvT1WWiFxWIbDvxIEoV+3n8UDTSIay8IeZW2Zva6DFJxGoJ/F+TbFLTxDO7FdgStADAyC3kNq9Zcv5DD539jod/BIA6SbyTgLsD6GQbPsLjLAFBICP+ohVyJkpB8HKrCQqaq8C/1xHNhY9QIAvsIAG5We4z8l0DwShszVSfv+MN+BwL5e2i/yT30MUkwjW1ipudEa1aseVLOMSHG6hDYW6KFShZYek4X5qThovix+tplbHLyCou2/UEcqYQpnGpjhdTFMqMJnROg68ezOQfBLOC5PNiGRdJpH45B8MexhwoCWjoufTWh+ZV7SSUOE7cggsA+AIBvmCsgn9oJf6u6eB6+yf4CG+D32Gh74WemRcAbbQRo1ZrDZWULsfYxXCsr8+5AYzP5hy6Ozg8oiA+eFV+/JIdW+OVFCxMgalsAgKxs/M1etyBmcwHa/zyeI5uPpgWwvrTdHVDKHofHxeyn5l/G+XEeAV2ANWtO1mrIc81Yc0/GtDUnctUjMbg3AJCHj/gj+MrthH8NGrOMhz0mD7GCz/kpfv4rNtteoDZN8FYlvXUINAUxZaE78Nc4z6sAKnIAmj1HP7qKDTsErZq3UM23IoJPC0O1cB7/7hdXZH4LgNgpPp/GOdyz0Oy0iGf4toUkp5Sc203wFE928Zn047uU8NP7TYtoQe6ZCn/ymjMWuhopuZqS5x6zF3cZAHIQemfUr7XZHBk8xN9j07HF1uvQNip8/tofwgdeBWDs5qrjcyct9ObTe7KETc64c0183mUIgX/GKdGyVfFDM9acsDJqYQYf/Vl24ynLZs6I5mepLtt+kwWf6cI1IpiudQAAko4M8w3Az7+Ecx7GZ63ifjzG5xLcKruw/0Yh+DT/i2IZ1cWtKov2b2xy3ZrMpSHPlHACFYuRgV0DgCKE30tK37TWgyPYdfYDaNAVC110Pdx01kIiDlE6C3DgNJrdRG0yytdBbk2IlivhHNMgJ4/hvO5aiIsPiDnfEE3OrLscXteH9xbE3dD6goqY9mzEyWacbjWcgWD4pr8vVsZMBzOWCT5TCXDV5+H39IaFYqQcBP9V/BwUARoToGKYLrdFi6TVIg/DsN8p3MM5C7UHGXlm3eSNqNanNUBLRge+Lkfx3zkAFPHQvHXUuxaGYSrxRPPLfcdvRZNyqMUZC003k0Lq5uhluAG7CQAUENd+nmL7mpjzNwAOr+HceD1nIYzfQghGLRTLrEF7vSiCQ2uhYqEDT10EXV0C7TFQwGc5mL4kXIOf62/wuSv2dCpwcvFarlmIxCQFhdGKPITwTQDGoDVPNSLT3g+hzcje2W5fgCwsDJJ/vofewu/cMnsf93UZeyZrnVuoaTdj/iT41sViKQiPEAFgB2b/BDbMj8SXzwrRUsdGdVPzUwudbFIQgBdsoxqt1Wgsbaox0IXW2+piFpxO86U2ewFEWCXhW76CjUW/nlGAIQBGvwjmSWzkEq61X8jPVTGtmVXH5+Gf9Q6sD42UXIAw+DnPyme0W2uwWlyQfoZNXxMXqA8Cfw7XeRZC2G9PDwwhEUfAKFhzJGM7Y8rZZIU9Bn5koaX5SSiWovAAHKtW2UT4i+K2cQzagIVUb1ZMdmroEgGgi8UGkuwmU8FDeiImXBWbdhq/XxEz8hI2YFrMbxV+JYkYQ99NAGjgfMnGF3E/TuB6MuIbEwAGAUglWCdp0fKj0FQN0a4j8p6z+De1szcD+aOFMCAr9C7jnqbksxr4+0UIxgO5b5utOQBvHqDSJ2Z0Q4SkIfc4aSVULNQGnJDzeWyhD8HSFq0A5mEM4h6Rd9C5A/5df2mh7oKTkFtxABkBpyF85mkLU53HBbgHcE/WugDRCABtFs3UM9Ags/CP71rIEU9b83gp+vGMwbMOvS5Me0M0lA7b2KuKM4JARTRSXphoNTtp9nJkOCMaQwDCZfErM7LJz4PLOIf3z0OAB3E/mFZL8Pk+NrCSWVUBiONCLnYSOuYo/B5g8D2cR06Ix6q8lkIxIiAxZSHtdwDnzRZhbBm21YGhWuHHYafJ66ngWn8B93HKQmZjchhqn7gT4wDbHwBUUriuGbz3CviUFQudmSIAbIO8Gcdm8k2gGXwMrRXEty8L88rBmCSaaKK1q+++jwc7bGEk926DwIpoFs3yqycIJU2cWRb2v2EhZZUx50WcN0dxU0iGLWS1XRLXqA/++vNy3xhSbAjXkLetVeExpMmagudwMNNRw2U1vJZhyCkLcw3NmnsPMtNxO8NCmRTVh/MYbwMgFVg9L4OwzQt4mewznstp3EN3ed7GMyEAPBECehjgvBQBYOsrgxt4GgDwLTQau9TU5eFqnT3jtzlozNMCAsmEHJ1iy3j9uIV2WPN78OBoqTD9loKnpuWShXLUtJzjgpCbKXGFKGgFax4jxpAeNWAJWvcCvkfvAxt30lqo2/aaX6wCpP3+fQFr4wRASk1n/45vcI+nAFQXoFX1GlLWXB681X1HkBm29i3RmER1XFzBrNx7hkqHLUSi/je4UVqLkcde7QeZyhLwvO19P4MjBwDMMb8M4aBvxrZRjLWehcmZBxv9uYU6gUt4/5gwzI1E9CAjmuY1vOcBrA3WxS/a7sZzKcz3IZh9AKsRnOM9bB4KNDvlOGi8h3tAMBuWjdbq+upChk3gflyy5kKchgDqsIXmHNsd0dWQCMKkhfBfTlwfmvjK/BesudVYGucwLbzOVlZaBDlr7duZ0wo6bs1VjHSxtFDJ99tfC5dQteY2b2Xcw7fhUkxac4VhBIAuF2u1TwpDS8KP7L77vX+Kjc0S2zyILwJDvzVnc6USBCA703AKTh4sMXvp/QrWx/QusrlVXM832EiXsGkeAsDmYdKfFtJwGeb1N7LpCBIpax4iyutasuZEmsu4LmriEqwQ+v5zuF/MU6jtEtgls+JSYrnlRUA4FWhQXAC/3lu2vZRgfdbMhCxY+45Ky9aclq0Zf3QBXoDFpZ2WKgkNX8befBVKqbgN/uKZBwBOt+2TjUxfOQ///vsQ/rJo87egVU/hIdQEyZMJMgoAamKSlX8R3/NPEMzJXQKBhoW00zsWhnx+AaAZEc3ORJhPcQ6rYpouQGAXE5ueUYMZ/G4R33EM94otxyesuesv/zZl7bsQ7xYfsiquDTWw399P4I/TEvockYC1bX4PuR66c8U2lkJZeAi1FrVZ6xDIvb7EPmi0iRi4RflrCzkC5QgAW0PvdMIXZP56Fpv3XOJBcGruzwAAffLdjQSRxOYgs9Y6BbiOv7sF8idiEj/ZJV9OLZnPoOVY6MMoAVN571tz1SKLiObw77sQeLoQq8L4M1llQqIjJQgXTeOMaMB7QkJqzoIKU32XQKBkzfMOGc79RoR2zrZfEESCtQpgvQHWXl0lJvXchKWnlmZN9iDj/ycTFuRm3z0EBaKZhhEAtiAg9PdZ3loUgm+khTlH6+A0HlTN2ve0Yx7BRwCAyzjqLc7jHCyLJxZKRXe6qFG4+dgoow/uC3MEKkJgpQSY5iAgOVyPb+7XBeTGcI/uWwhr8drWYD3ctBB7JzmZxfUO4B5mxYwnMbi2iy6CPuflhD+90yy6mpzvMqwLjjfXTkVuef03kL+LFoah1BNAoiW/3YDPoIVMzggAW1wMqdwEO0ziyASVawlmn4UmQ9a+imsNAvMQhNoNEbLLLdhaar6rME0ndwkA8hbCUixHbVjIV28kwMLkdWwoytJaTtCZt9DcsoRzXUlYVGkR5BkA4CQ+5wTuwQl8PpNwGBpsiM/OPPfdSJ2mH73boVdOJmYSFNOc71pouHIXml8jP6sJd1CjRFt1RZRMNLG49LPrEQCeXmyN/SU2WkoAgACxaKEQhokaY9ikNQELLdyYBUnoSSvXsdFPifC3G8HVD63MgRk71X79OFf+WzmICjaspsumofWn8Lq8hTDnBbzmPu5J3kIHWzLV7CUwLGy3v/4BPm/EQmLLOYBoQ7RhQ9wWlsHmLURmejHExW6+2tH3YQLYFsQinLXWMXu6KSzG6iYnISVAS+Actub2bZp7UYoA8LT59gQ3rmwhJ75PfLg7uKkFC1VvZTzkNfFxyRv4Jvg3aL2bFnLzL1uoxmunocxCvf1OGd0UtCxDd8cABtyI34JpVu1/GhbDEwsZcm6RXIMQfiRAtigbn+fJBp6zFmr/6c+P4X3v4jOZZ3DBQnp1VTYpC2D6LYTXFnsQBBhC1X7+yj8sCiE6L65Iq+lLrKi8Lq5Wo8MzXhFAHhHQoRtLspoVk8sRAJrXCoSZOfBFMak4gfYj0aSn8Lp5C/FtgkAdPuAfYfaRJBsD25/u4G+mBGh2uvogXJz554J0xkJ3n98B3J6D6zGGv/9YBNEjHN/D5/0O4DQuloRaDscBFE9gQTzEd5Kk8s/6CYS/KhZIGdaAMvE6l4AuF92KpR7bdw3hK+jGZEXrMldB23+1swA5p4FkbKELAGBT04K4epwBQcUziOfjn/m1HdFkoZ0UA9F3W7JQbcUqMTa7eAKN+oKw9Slhy9mO+luYvZyiS793tAuNvpvDKThEQzcbh23S5F7Cv7PQHn7dz2OjPABoeUjqY1xPRqwg7fTD1NtX4brMWugzyM48bwFsCIBlIeDYs4/+NP1hJsgwPk4fuddCXWtC3JasedpPqg1P1OrZs4aBnaWvbcIH8Dl8hT2qDUT5fawgZJekY3jWlQgATy92taU5peO1R/Dv4+JLpyyUZHImAE29FfFpUxZi7Z2IGLaP2umQkZT44I0E58GwWBob5BTOb9lCQtBL8P01YpEMM7GZRkFIzBW896YQiEP43QUxdRkTrySYdE0oKgsjXhRrgh19emmxknDRQlouLUkCpWYpVu3pCUu0cMqwoH6FZzhi7btSfWuhscuQhdqL67iP2Rb7ImVHdO1WS7CK+GIpeWgFaDJOavkGRJ/2lKuK/6W55uUuBVrj1jthbTPYOOpysBEHk3zcKnlbogRsGzYgUYKChUozbQs2CIAoWnPrME4nYmMOjVMnNWFVtHzFWhdHqUVQECBmS7ZeGplFK7BP7hO5oaIAXN2aU5C1f6KSs5/iev8Kz0QnPPtn3lo//gWcC+tLMnC1HlnIbWBiUsNCRmYEgC34d2xmyf7uLijvAWWZ+ZUWayEjaE8hnrfQTKPRgdHlQ9sJAKSE2KN2YS8D9uR72UJLcG5gNjLl9dJ0pFvE8uHLFtJ8dWMzBEpCTCsOqy38XQoCi5aSLhKJLWZc8pxuw/Katr2b6rMdK2DeQkZe2kLjlKI9nRjEfVKR32mxmd+TD/A+Nqelq+V777/bRrRoSjieVII/YdXgaTyPB3aEw4F7NRmIHVlGgcwfQvNPie/FenCGB2ctNAHNQlu5m3BpkwdA8392CxZDJ5M0lbAKqJHGsaGSAzbpFlyEgBOI2OSDjVO42bTpJfsmTIOYWrSQXJWykCSkpm5KiKmlBKnI7joXwR0QdJg09QlcjRzubS+AAPNKNIeEVaQFa842zYgbRPDMyj0hYH8IQvW0hdLsW/jdJF6zbKGu5Z6FHJIKiN7H8n2HbWkvRO2pWE5aM3sFAAxFDcO0egikXxLCJ4dN+SO8bhbE2U0R5gfwg9uFdjQGv9N4bR3ffVl8SBJ8WTHvk2BE1viUsO1ssJkSTc5iGkYtFi3E75fEZB+zMNqbIHjSmjvkfix+LC2uE+ANXgMROY7vmLUQMmReAUnB6R7RbitiaTH5q2jNI74IAowK1Kw5msT7vGyhWct9sdR4L57gINjPtuBHasKnVA6Z4LMCtWDNcxHIZ80L2b5no8FYvjqBh0Cmtyy+7ziEnyGuEWziz2AtVEXzpTYx/8kp7EYWoKP+v+O8GB8+a6FHfqOF9mdnpLUEd5DDg2DMeUaEP1n0dB7s9TH8+4SQpg8sJMZ8CFP2Dj6PoSs2HnHf94c413nc+y8BwuRdaGEMi2D0wloW/kI7L+dkc+fFdVTSl5quLhwHx6ARfEk2s3y9LoLfL0CR7EpUP0TCfwwu36DIB3trsqx7Viyc2l4BAKMAg8Lcapsv34BXIFxleY3//k1o/SVr7kHXyn1xYfjcuuuV3y1/cROf9ZZo3oL8PenqjFpIbmokHgj9z2UxKYsW4t/8u1sLP7eQCVcXbWgwUX+Fa11ORCZysD5c8N8Vy2kV38V2WGyqOiicBQGqV8phea4FbOZRC/kMaxI1SJZZp6y5HqOS0OTaWHTFmsuDZwCgQxbatK302H3pZjE69QJkbwr7iQR7FpbqCxba1s/uBQDw4fQJaZO25tZaTLBJNmOgtmdX2FZjnEjWPYK2vmfb60q7GQjcxQ16FTeNRKRuuLTcyMfQ3NrIM5mmSoJuFJuOk5HoMpyWTaqb2j//Ixw047WeYhCA+T3c8wcCEowaMPMwK+dOnoZC0SuL1lC/kKg5sQan8Xw09bchSkS7SZUTAl1pAzpsDpIVQvGwCD9D5i5Pb8CiTglZfVP24BAUxUtwyxf2KgqggjIsDzEvLkJhk/fXRAAyCYGo4qJc+L8RRne31zS+4zY09AS0EX3NJVzTGDbQEMyvupi0ZWzWBbyfxJOG+XiM41gVC8H5DY9bfyXCn7SCJuD3jyXIRW3y2W8hsYrRDTZpLfQQAIxC+AsWkp6mE+4Ah5R8JxyKibKg5VQRt7PSgSCu9xgIdmNlM9lrxEKTnNNiabPD9F0LI9XuYy+zB8X9vQAAklXstsvWz/0iqGlr35KZQs/87LI81Blo/OvQdFO2/Qm63awSwIatwIYgdCSifoDXLVkYF0ZBnLWQ2szXjIlJy1772uZq3kI9BLPk+LPeYhNMANFPW+g7UBVXawbn+0ML5a+s8LuBc8j20MY+lSBaWY59Ce6iDj2tSfQgJa5TVUjCo9bph0liE8JNsRNyIXG9Nby2TxTCIu7nMchjdq8AgLnZszjZ0xBWIjS7zKxZc+yfft0dCDlztrVybFmOTg841cZ33+qqiB9tYs7TZaHAV/AwmB1ZEYF/AcjLir1lC5mQZfzOr9uTWW5ZCJVyw6esORHINbrXILxsoZPRkpBl0zDzrgrzX5VzPyYbpVdIrDF5biUL0Z2cWF5V4VvmEtzLbqaF9yLJNwG39CVrrmDUjlqNFhY1LaCyKOb/D1D2Cv2XIeCfQfvQ5GARSBbofQsmH89jEQLwGXz8BWFma9Y8C34zlGQabF4EuCSEyG6smpCPDBctWwi/nBSh7bcw6HNUSNKcmOlKYGnDCwp0XrSbP/yfWJjFSOGYsdDw82v8fsiezpHgZljZYwtqK4udpPkMeW7kk5INZjSd+qivlIVBum8KV1GVPVYW3o37ZglWpVqPVVE6e2b+caLvV7JhmRewKoh1HSd3HML+JX73CJt5O00ehiz07UsSOwwD7UadfA0a28385ywk6TAOS25i2ML4reR8gXFoMVozyXbnnKHYb6F1tv/0OP+PBOCYRVeG2cyOQkWQQrmEoHAc2m4PXd2p/09Bn4G/SneGeftJoH9WVgHk6MvYPzp/swGwf4h7eNlC9el3FupLOLJex6/X9woAGGPNCNtdEGSiK7CEk2dW25SFTK3KNoSfzHFatB6TjrTghB1mdgoCfo2/xw2nj82hKVULQyjSIqyNhHanxVCyELbR+1iyMJugH2DyLiyqmjV3FKrgnO4DRHn9r8r9J/gu2dNx74M0bxnyJXgZrnsVm3tMOIzGISPtdrr82V+x5uG73EuMpE2Dq7op1id7ajKachKf8//Xz+wlAcSZctS8/eLL6sHXLkEbzm5D+BlZSAtfYAnSiM02hoU4mtshCFRBpv3WNtqgF0WwJyzEX+sJTkLRmw0uJ605JZWLHZbYb9Ef4BkBCM2zcGL0GxCS9I8/ACiQJdbW2r1iPufwbB4KmXoV93DWQlp1VsjSyWdE+GlVntyENL8Iy5ncE9vIM4tyEM/+VSinG5C3yl4zwFULaZfsF5AVAWyI77vahu3u5gblRQMqX2CifUvQ0jzUH9rJWgFn4Rv4T+QaUtY88SYlwk6tzeo8sv+TbcCPWXIcpVaS62Ps2zXAr/FwdURbCq6Kv+dtMO30KQs9tMkbcj84LGVAeAEm+nAO5eIzAgBpkZ12cxPGLAyNrQgvRIXnEYMLAAW2WZ/bawsgqcXWZOOnEhewE/Y2K6ZhrQXhReKQwsgee4+tedLOTtY8NC0RdwwCppqfba5YBMUsNDfTvCHmtx02NS0BthavJwDidxbaZ9eFOORAT+UB6hZm8k3awae7ct4DidJ0CwvnEY5ZO+J9+tqAwGbTk5j4w0pJdoS6CotxQGRsAZbm0l6SgLbJye6m2UktmxVrImNPM/0NMctftzBLjizpzC6cyyz4AILdaxaapVJomdvAYgwnEL0+/WMLqbqdgJTjyFkrkIH5d8uaKy1PgpxkERPBgPef47Ru2u7UUezUXVzBubLF2RPwHaz3uGHP7gSfehd7Q6sm2YKfpKG2imPz1cpBAMBekEdsPKK54CVrbnzBOvOXLITFXBguwRxasJ2HBxsCAlMQytegZfUBktX2Df0H24h8zHZpAS3hfC9Yc44DJzRxtJej/jv4bo0T1xNaZVyItoPe4Pcs5LPPCD+zCqB8VoWfcfyqbV4URwWSFgDIWnPEgJbUsprPhx0A+mBus+Z+FkLCmDhvCvsT1BK+0wCsiN3KD1iBUD+EZqcWpi/LsWPMZtxKw84SSL4X5Vroz7ORht+HH1nISNxsFXpoDziH8SkAmkDOVnEle3aXdlAebwMASxYqG7PY62P2dO7EqiUibIcdAMiMvwkmlO28rkO7MgqRTtwI1YKbTadtxzkMWBhgMdsCPJimOgfCalAIN5rx26k2Y6WfA8yPBf0vWmB/XwUgdBNJ6ZUwIK+Nmj9tB5Pko+3stAlLp1qCvV4cW3+2zTnP4xzZU/EM9lzS4puxxAi9ww4AWZjDly1kRvmFstU2E2vYXMPNn+ctsOML4kt3swoQrkGg8RgE8ltrnbTEXIelXd4Mn8N9OWOhJPh12QSdrJk0gPHBNrRrOkFKad35Tgndbv3dvdpLJEyZM0Kri70EDsoSWQbHc8XCVG0FzhEQfpxAdU0ATJ/RdQvVpkcCADiFR3OgyfifhaCwlx6HdLiQHMPDvG3dNxNl/nzOwiiwRRBV9On3Q0s0YNl8YM1FIGwD1c21ZOBX39/CpmYvA7Z+z1hzPz3WKbAgR/9/GPZRnzWXHrPabhhC5aAwaQczY2ENe9VdyrcsZLdyvw9AAdREpuuJZ+fKj922jgwAMJOuVQFE0ZqLJZax4ZctTC0iwdKNqTkIUClAAOm/+3snxOTfj+VC+xUA4B1B+24AKIdz/cxCG65OZnFRhIBluSkR/IocCgjMUV/rUSBQk5+CxogEOxMzgWxcLMWDAAEOzPV7+n3sYa2NYQRALTBto8Y8k8ZRAoCqta8XSGp2VinqQEh25O2GAPRNcFxIlhKIvhlYASf2EQAM5t57uJ4fJLTCZqa7a4I/Wig57iQgbFs+bqGsm5aGdjNeS2h9BQdO++m1/npME2eRmrYRJ5vO2QqsMeE17XcRFdPr34cCugYXcEQAudV7nKP6ELzRWiu/5zAvNra81GLjLrbYcCl7ukliN2XFtAAYU81D60+LBhlK+F3daiCGMUk8sXCpU1caZv/9O67hbQsMepL8YYdhtlC7Z2Hq8WZrANfpobnTOFhGPItDi4q0WWdDhIXRhkXrnS67WmatFktyf1UFLIbA+7CL0H5bNSz7/gYu3DiU0pgAc0MU46KFuH+p3U04zMsv8g5IQO3Jv4LfN0QzMt+8DxuyamGkd6fFGYAkutiXgJN+mGST61IzMF4/JIRTWqyTKgTrSQcfnS2y3rPmfP9BAaNFISrZoKSbc2RfvtO4vz+Cn3ncQiXnH+FWZSwkKNWtmcWnBcC9ttADlgCBNy//T7ZaM2uOROQsjIcv7wG5u5Wl5PI9Cz0mNL2+1g0HcxQsABJib8AcWoV/PCUEDzd0n5BmbBPdyfx3AX0ZwjoLMoabnT3/ScSMWOciFfbvPw9QWbHmeQlZIZ8a+Fulg1ZgKfV9bNJj8F85M2EagLLaJU+gpr+f5y/Xj59Z81j07+N1v7aQelwRv1rDaItiajOp5SDDaswfYZk1MzRbdV9iqPlVWJq0FmasN8av8x5vy7I67ABQx8bmXL0x0Z5kRNPC6mYtNMJY6PKmnbdQ3styYiZTcOwWBfdYBwBg0o53B3oJm3DOwlgqdhcmWKUttHTq1h2atcDSqxne2OK+4FRjtyrebXEeDLeygIl99E8ChIYs9N1nK3M2NSntoiugdQPdLgLsJfA3GYDntxaGhjTk/rsCeN5CW/UL2HMzdjgHhxwZADBsvmkLo6FyYiZlE2CxbFurOuTsPvq0BQsda9nDYMVCs4p+23w+fR9M6muiMdn2a1VMc3IABWvukditebjTBBqSX8dg9g+2AKE6XvOG/M5dhSuiWVmheQ9ElPMPX+D3D3ZBeBiR6AeAdhPSZFTjMngTRoPOA9D/XUi+LIDigjXnOtB1y0YA6I3FbjorwuxqyTGrBCtbFI5GYuNzA5yC68HvHBbA2GyKEWfO91koDW4IgabXQ5DK2tPt0/d6MQQ2ChJws/vu2v4XFmYSJvsw5qE9xwB+1LrvW+hbUNkmSJ2Ge7FsITLTjcXg5/migDB/72nbt+ScWIqbs6fTajer0IsAcIDWAP3QZMnxdl0MpmCmxBKgqUszmebik02+KydmNKfPGjZcq/fRfD+I8dQ6kquvg/vA1u/5Nvea92wE4OcC+xY0rlf5ef7/DXu6d10ngJqwwOQvWWh11cnV4VSqEXt6JgVnBaYThO8injVr7TnirhEBoDfXbnaHfWyhs7FmX9F3HIC2/hYabTONlcNG/wybcAVCsCKbM5MQ+u0CQEqsh/oWibeUWD/lLoAil9D6rZ5HGveKjPsA3Ad3GTzDzasoH1p3iUmnYPZP4d4f61L4Tfz6zerra3L98wApWg5sAb9mR6BC8agCwG6uMoSbY77pC1Kg50CEfWubRxR00s8TEGMl2UisMziJ5zInRGVti4LPWQxDFjLBNJ+9k6DUxa3yzX6mhYDpdKR0l8LHrrUmQjYIktF//98h1I0OGjwnnMuyhYnL3YKAJvzo9TA0XBUwWLFAMjMbcMHC5KUIAEdgDVloG9YqM9Af+CfwXzldh/Fs1ldXuhQqDTlVZVO7L/0DaLc0BPYTaMVu8/Vz0IYX4M9OWKi15yCVaeucBETOZBnm+cu47mpC+Bl/7iR0vDd38P2NxHdlYA3Q/y53OLeShQSqYQu5H90If124myEBVw5SSU5MZmrwDK6f/RNWIgAcjcVxU3P4mYLANBKb3TfCfQvTiBYtdN3drKCIWomx2lZEIUNN5yyk044AcKa69I05JPQagGQUm3TOQjRDJy3PdxDYErSeWyqeaPSOhSm6CzhOWBjd3Wn0ln+mR04+AEApsVbDPfDff9UBABqwoEj2DllImupm+f2dhVZ/XZ4Hz2+xjRvFVmXs9nwkuhJHANjQIgy7nbGQOTgjAu7CdBEbvgyt/wCmf2kTwc+J1qcmGbTQx5Daj6OeNBONpFQ3YT3OCHR/moMjmPK7mNjI1HpVa58FyXOdBwC9D4FnV+GZhBk+2EFgMziXz+BSpHGuyTUGQFnocL1r+Lx+AatuFy2AL3Fe53A/bgAUauKmMCmLRVApAdW1CABHhzAkkTcj5vhJCHoR2vl7ELIhC2mwXyaIK9WELJtlPJnjrXOysSiYx+3p2W5pbNRO2WYcLOqs+gt4/RcWpgQTSJgGnYfZvGbtC6E4/HRe/PYSTHS2V7uA101bCJXV2/jsLtC/wX2btdaNLfSedQvctW2SvZye9DGuibUSmohFAC+KlbOM8z8yHYkjAITpOyfgox63MFSRw0ZegpBNQHhYfcXR0+zpp/PZWFzCjqzsPryE3xXEj7bERs6K/92pX98AwOoVnOsHFkamVwRwGNYjeclRZvObCMmcCCQ5AY44Z2RhzsLQibQ9XYrq5++NT/8VgFoVAUuurcTWU2KSbwf058UKystzyyXMfg63odu3Ykdo/mAEgFA9x+IQdvo5h00xgH8TFLjh3Bx+HhaA9q1riBZNiRZWwTLRxiykWcD3MmPxU2jxTtrfz+sy+ILrQvKx9LkP7guHhDYspO/2bUIIMqVac/pZAGVyzWw2Uca90wq7FQj/P8K8ngV4DLT4ThboEKTKLYChmriPO0mQYjPVNQvVmPTzU+K21aw5WnOkVgSAwMqPgEQbhbBctJBhxnHK1PKDOFZAWk2LMDA9VEtikxtvRYgvNnX8At9TheB3064ri/O9YGHkumYVFkEKvmMhoYdhwilrzpZs52vPiJ+9bCHdeQbfxzFsNKtzwiO4z/9vtlG+OinuSqOFBZASl4clt3MW8gxqiXPdrZ6BTB5LJwCAUZtuG61EADjE6xE2HLX8qIUwXw6aaxW/Z/EPE0MuWagQ5O9WbPNSUab/lvH5q/g+tihbs+7SY4uwTo4LeZWSjeyA9oOE5ZJKCFWnzc2KQro7TGM+BSIvK+a4Wg/fgCf5DsJfEwLysTW3ctNOO6vyHBZEyGt7LIgH1YswAkAPrAo26RQ246sWwmZrCbNwTXz0OQvFJGkRloZ11xykbs2zDLey0hD8q+J79wtplQYxONTCCtFMv25j58sW4u8lcCGXIciqnRuwZrwF1X3cD5J27FN/W4jLqrhEtC4m4SakrblRB8GmErdsBIC9WIwxP4a219h9VszYlJjE9xPEUEW0rO2hVnEBeQGamN2Qhy0w/CYWgYJRQ8zdrWpUuktr8n0/sxCu5GumcU+KFoqJ9O8OCh8L+aq97fJwL1oNL83ELRoBYK/XArTXmIVMuirchMfYsExBdTP3awudiOjz68+9WBlwFK9bcyfgIVgFbId+B0J6USwVduxh05DtmssOhu9DUN+x0GXJ//+ihQ5NJNee4H5xWKwDpWc6vov3qtvE8GmjBScRVwSAbV9rVgS6vomWu4HXvASf3jfeQ2xQugOzYvquyr+zbci/3Vhkyl3r/8hCEktafOnzACu2jHIw8DoFTohlCO8MjpltClYV98Tr5z089kO4A1UAy4UE0XcOP38LYWcyzy3byLNYEcKx0ubaOYwlAkEEgC1pyxEL5aKalbfcBgjKAIGH1twFlwQdBf6S+NssJSWTvdurCG3OLj1s1KHkXgbncBzCz7h1CYA1YyGl14XpNQtZjY1tgsBjC0lUPwYn0Sp7MYtzMwvRjSz4gEu2ecUjk5folt21I8zMRwDYfV+5aCERJwPz9wo2/702GofEF9l9s+Yy4zSEbBbvP2UhxLWbAMCw3Qlodzevvw+z/omFHntpEfSihZDiPEzqQQiRNuz0z3gO79lubrvfJydDr1uYTHzGWofotH9dWsx65iyU2gByH9yxsvV2Dr5GQ7QZTQSAA7w+Tu2lT1mAxmFWXx0apd5hk7cDiOSYpsoeANgECL83INjsubco15aCEH5tIbHpFEDjFMzzQWvO1vP7cxnv2algLcBi+hznlyQZUxZGf/fhNVfx/X59U9Z+TuMSOAeW6zZ6cJ9pIpFWSTKBqhIB4GAQmZpfzVYTIeHm244AlCyMkGLX3dldPP8CrIqzMPkHRNvTCmGYbBak2qSY21dhMZiFlt3JttfqHu1EsGj5sA+9hvg4jegm3A/PoHwbVtgJHN/gWYyJ0NSFl5nu0f3FGoucuGF53NMh7L/H2GOlCAD7/4Aa1jwijOQV6/rXYDKvbHPT05wt77JmYuWeWymnLSTRpEXjV8UFoDuyaGFmIhuYLnUwRdlkIznkc6urgu+6aaFUmLMLPoBQOxn4p3AT2HeQ/MkLsMYYTVjscV+/iPNmd2iCbBGuFYfWOrh9aN11PIoAsAcIzQfEicGPrLnrrrbOaicg/fZ0887NXITd0P7MiDMBsqqQe+wYVLUwwooVh5xjuNZB8PneCWtuoErLqbJFAFjBRv8U1ssyeJYZfM81ABrTmIdxPUv493Fxrao97PMz69OtrJdwr5ewt3Kwbtgn8VXsvVnbG4I4AsAmAHAaDyMD4f/YQgOJAh5iJ413HAdTguda+LepXQYDZsalYUIOQ3v6M3PWnjF+5qsPYKMxaelsQniTJj7baeewic9iA89B6FatefZfN2HNGkBpBufNFGBtsX0M5zpkYdIOv7OM1/VbGCxatt7svJO10MWJe4gt3dgDgdqefMyXEQD2d9XxcKjpRiBEJJJS4st36mhTxeatQGMx+WfAQqiQQy9WbWexaoYVs9bcnOMGvouhtzfgT/Mcz8EkJRtftdYZf5x2M4zvOIPf++b0Ap5bch6sG1ju8pqWLczN4xRmNgQdtTBA5ZiFyUezYl2lLEwgKsm97kXlcsxCqrVGh6wF12LWg23EjzoAUFgnEqQXm0jSb+tUcz9rIfuO030WsQEu4/d0MW5bGMW13dpxkkl6DWvQ/NSoZMQ5oYeWx4j48a2IPbYHO4XXLCXuzYsAmAULWYP91hy268SLcDJTSdwYsuRruD953PcpC4NcC7DWpnCtKzvgZ/Z6MZ+k1Wj6lAg8w7OTvQhkRx0AGvA/j2NzG0xKatdUFwQZOQJOBWa33cfQnG9Z6JXHdtefWshvX93BubOXHrsJlax54KP7m+/jfF4QwNApvWbN+Qt9FhJyZsXs5mYdB7BNy3dlIIgN8c07nTtBiyXVJEvJ6DM/g+22yHGcAmBzzsJmw1YOGgAeAii1YSoFni3L+kBsTloPThF6FhKBFmDWnsf1TslGXO5iMxcsJNGwkeVxCMlFa56ZR/O2aGG+X9W2HgOuie+rU3aTPj1Lk8sQpFMWKhsXE0CQElJKP3vQQhMPw++PQ/iy4punxTfvNhZPH56dh+bFAmPkwVOGv2fNiTNZCy24e7VEtwEAcAB+V0CsBn7mvrhm87b9lOsIALuwZrBps7LJu6kv59SbqxZ67KfEv02W2jZE4zM5pGhdjGmW7+Ngz0wLkzJJEjpx91MA0Qy+YwKWCXsC0kytWugE9JqFcddsic5R4szHZ4hrUIjAmoURXFvZzAoEC0Jwjlr7wSecu9jLE3j8nnyMc72M65q30CyWqeMLtrXJRxEA9mBVt+mDcaRVTTbzkoWsPy2FpanNnvX8znIXAsOIBIWS5uSahW5DzGdgK3N3Py5ZyAVYw0YbxiZ8aKGzDtOGr+C7JvB9mrrqG/RDaDB246EZS3OeRTnbyXtgmzAOFKEVkhHhIE9wU8jBXl7s5nTbQh9JDaeSEO5JSyaWA3c28xaEN+ADX5KNe9bCKGxOmXUteQObgk0/NhMYFzIPH70MX54Zf9MQxqpoYL7+CiyTakLAqPW9AvADC8lBRQutx1kroJYJx5Z9iu9cwutGYI4PWmj3VRIXYzvE7Ar2XgmWymkAEtuCfYLzn7PD0YevYmGSU0ZM/55vJxYBoPOahFCcFjNa22ktQ3DZQSiH15IL+Ew0Z6ON5j8OwX9TLIo8tDunCI0m/PYLeG+lhRvBKr0H0PwNCH8Rf5uByaplxA5S70HwOPxEm3Mys2/QQifd7ea30yymoKxYmO83jfOePgTaP7kOXVuxCADdWQEPYE7z/yMWOskylq6MOxthPG8hLGibaP9RCGReNHpNDmY0ckJtn4UGH62e6RS+l5YK+xzmIbxf4hqOQWOxgaf37n9koe894/JFnOeIuDe5Hd5XNhxlH4CbYi2t2hHswBsB4PADgYkJvAxByIh7kNQGJPTaNSBhwk9etLf+bdZCw9KM+JjsPJwcbskW4+9bc1fhPiEjZyw037xqIbPQ3/OdhVbgHL3FdGktO87Y7iS10GXZzEKKKwJAzy0OicgLUTWY8MezEN5ORBbJt3sWimJMhI4tuesifP7v++ANmFFXh+b/AKSUjtfSJBxNKvoYf58DMLD4ZgCWzYTwESkR0r3wbaPwRwA4VItaKw1B+j5AgAIyCZ+aGrzdpmdmnwOFE4ec8FODcH8PHMRjAYQK/u/tuE5ZGL91D67KnFgcKrichMOegQ05XxKCbi2M43tfh+WwBJdizkJdQOzMGwHgmV6Mm5Ohd4Hn1Ns5CDNj8ZtpvbIcxYRv7+DCgaW/w+ctQlhZuHPbwugxFvG0Sk+ti6CXWlglWWj7YxD8n1uobxgAuH2C71+1HsxqiysCwEHwAhQ6Z9u/tMDCl7skshjnp8bPWnNegWtaZ+DPQesztsxWZZ3Mcp1TSP4gm/C5/f9O8HHA6LtwRZYs9FHshyvBXorRAogAEFcLTb4dPmHZmjsLt1rsBVBLuA/dfgeTlvqgzel6ZMAleFdfbxh6yTZyDOjGMIV1ARYHa/cbLfYSowNpa56p12lpktNeTwCKKwJAz4EHu/lch0/PeD2f0bKF6rjtaN6yBaJyyALLz4GeP1k/fonvHoD2Z4QiBeH/DmAwk3AfsuIisDSaMw/nwIEoJ6GLhUknLYxof2yhP0A9bo8IAM/CKsOF+ArakP3/zEKvv+u2/YaYbBnGyUF9+JnHd/2VbTD+dBHSFjoRuTB609C79nRPAOYwDFmY6lsEqFzCdX2K63qSOHfWWPwQ7g2Tq5zIfA/fNxe5hggAzxIIPIagXrfQYnzGwjSd7WpExtsXIKCcIHQWmv9iwrJYEzP+lm0kCd2T95fFdRi10E+wYqHuoQA+4YcWknuWBTj8u38m380ah+fl8ziFOPINEQCeicWWWu5nk91v7JJP7GY7k3xSAAAn/S6IH94Qi4HhQm/z/Q0AoGqhaIlz/85YyEFYsdAEZRG/fwVC/chChIIAcMqaayRIep7G55JsnIvuQASAZ40XqO0BuJDVJ5vPMuBqC7BxoPCohmcI3sTrCxaalToIPAdTn5bKpwAwlvF+hdedAuBMWSAj2Ua73fXn4Aaxxdpq3Ba7v9LxFjxTi6Z4GRp6wUK/ek0yWoUb8l8tVOUxysEGpOdgQXC5NeB9BhhhWLGQD1GBq6CtxejaZO3plOYlcSOUVOy1xfTrgoVGp8O4B2y42tMyFi2AZ2+x1bab9/chxMsw6VMW+h34EM/fQ0hZd8AGKeMw6/tFM7OTkGv7hxb6E5DRH7MwVdkBwclNT1v+noVSYLU+BiyUUReFk+gVxUnCk8lbbDOXFquKCVfL1n7sWQSAuPZVY7EO3zX/J9BWVyxUNK7C7//vFkZ50SzPQshfgQ+/nDDbUxa6MKfEpWBEoSiWiIPCA3yf8xDXIPR1aFJvcX4L55rtEQBIi1WiIU8eeeFSKiL8ixb6BZQiAMR1UIuCyajALQvtrE5i096B2Z4cZcXGo54sdNVCLkHFmusOKhbaoRUshAnZXJQDQjkrYBFAcwFgRDDph3Vyu0fuHecoMN9h0EJexRB+N46fzLGgm5M8dhLRiQAQ144sALPQ2ZdpyI8tNDwlT1ASrc7ioHdgytMdYGSB6cWTAA6SfKMWJuSwDoHHmoXYP7sDJ3vpK1jUDvCeFUXgVfhHcW/O4P68KK5BFcJ+B5bWV3C5CrhP873g0kQAeDZBgDH7GoQ9bc2Tjepi7o5hc//YQmvwDDT3xxbanmUSPnsBZv0p0XZqLZSsuQGKkoFsUX4XgHJQGpOdkIfE5KcVwIYqbqX8uW0MaTFxe1Kwqtjp6Y/rx7/YRlIVLbEDb3kWAeDZE34tD66JRZDc+MzoY2XgMPx2Mt/sJPTEQsw/b6GXwCUAgHIBBIqcWA1p+MZ3LbRud1C4bmHa8coB3at+C6w+m6oUxWJxEHgb96hqrfM1mHPxl7i+/2wbmY5cswfpDkQAePZWVjR9u01bxKb1GoGfQZA5b4CThFwAvBciS5SZ0DNgocdhVoS+H7/PCGHGAqIC+Ign+GxvoXYP2n+76c+7KfxFC92daJ1wuOlztjlByWrMNCwp7RBFV+wgrjECwDMMAFlxBVr1BRiCVnvTAqvPkeNV4QhcQN7CBn4sn3Fc/OCsaMznASCnITwM9c1BE3KAxtQBan7DtdLsLybul/IYjAZ0o8HJZ/gk4f/ZwqBZ8htLEQDi2utF337AQqUfOwLXhfA6Bg2uI9Np4hcg/HzvBVgCC4nPYcZhv2hRrwu4aKH7MUFiCr6xm8ZfWgihsa/Cfi7OTuxPCH9Nrq0sFs9WEn3oBr0M4Jy2MHmpagcQIowA8Gwtaq48Njnr93X8F6f4cqxZVYSZ/QMKFpqeZqHVHsIKoKYjWJAw86Ymfwbtn0w7Hocp7VGGv1k//lmIsinb36GaOq8wK/dNuzVz/h/HnQ1uEYTzAIBP8X5WWVZsn0nBCADP1mrIZiOx1QcfnmG/PgshQUYH2B14VfYMyUD6wuctTPzl59KP9kjAqxbamjdaAFMK4PA/wBzmUNTyPhJlnIRUEJ+fcxmp8ckDLIGzYG/IrSwHE0+kOgfuY0DcquX95AMiADx7i+3LctC8zNEvic+ehmY6Yc1ju8iAc2iHTi/OwPcvWEgTJgC42T9mm09HYlclB4tfQjA4Yn11n/iAQsL0byQAgEDFYqX7cF1esq23NU+La6TDZLfbWSoCQFxdWwFzYqqPYvMVRdA5+ZZtyB8BDLhn6rJR6RPnoOE9S/CM8Amj4BS6aSXOv0/AGrgtArnXufRsgsLGJmTrtcdBVcx4jkz3YSpeBHVpC65KQ9wn8g454UUq+2UFRAB4dkFgHkI1BxO0ICY/R4ZPQPvew6Y/boENLyfM4ucAAOPWHOLrt9DotJtNXRfLoSjglN1jzZiT78tZM+tPEGAiE8Onfk7eK+H/Xj/+d4BWN+eYgRX12JrHtzOFOrdfVkAEgGd7rVkIw5Ht5uRgduVZkc0+KO/TaUc1a24GyixCziso4//dLJrSlQTPsNcAwHyEvFg5dAGqCTdAOz77+XnVpIdI/xdr7ue4GQB4ohOLoVhmreXF+2IFRADY+5XMvqvv4ucWoSlJSq3a9hjzmmzovGi/KZj+bEx6W3xyblbdSxkxnZkhWIBff6nLa0/je6flWph8s5fmf0HM/6wIYD0BAgp6DXGT/gGv+U+wgrTJin6PA6UXW/3aQppzWV6fkntZjQBwuBf77/WJ5mABzk4QPg2hes3C4BDfTJ/BX98uk5wSn7sGgS/jO3x5YcsMrmkC/j3beeexmR+KkPgmHoELcVZeu9l+nIdfPS2Wxl5rQiY65cVyqdrTA1XqCVdlOQHy/wjQ+zMAXn/i3q6BNPwnPCuC5GoCXAgUEQAO8RoBIXYJPjbLb59YYLW3OwXXGfUf2Qb7TM14CoL5ewjh0jYEJy2uAFtxuSB+gc3IcCGtjwEx/YcttAobs9B1OCUbfdTa58vnAC5eMPO5hTFkFdv+2G22FeP9n7f2E5V16nHS4mjXl5FhVS2kYjelV8CLnLLQ+p0dku/hnjDKUU4ADK2rPR+Y2msAcFQmxLqv7Km0r1qIqXMUN2Pc/fL/2hafmWtkLz09h++qy+Z+IITVdjPL6IMvixBWxOzVBqLUnJowxByAPvGt05toX/9c7zvosw4/so00YB1BVhFyspuMOXIZLvgXATzsdXC3BZiQhc/Z0zkQquHb3asV2bscwHrHQog1hddwqAp/roj/32jxfXveBOWgAYBNFnTevLKu5YRpdBiWX8cVCL/6cSyUaQiZxfLaxS0A3yDM7wsWGnIaNtsi/n4cm2tti4CqY8RqImxrCSthEJrteXyXQVjrsABYLz8OkHrRwuDUpKC66/IxtKPH1VkTwIQlZihexTWWoWGnNrkO+vHMeiSJedFCAk8SAJTDUN4hbc0j0ettOBRtjbZqYbS77mt1AZOZf8mx62nbhz6I2wGAVAIRt9O6mr3lToA9PWGhqGIJzPGShXZK87bPGVI7sGCGIJh5a+5nz2457HDLklsmf3SjrdNy39L4nJw8S1birVoY5bUV5rwuhJSCgi4/X8/6+xlAwCyw5w/xfg4ZfduaG4I0EvejBl/4EwuVf9SO7KdXA3iMCficgLtQa/MM8nKvH+N5KFeRSbw3Je5PVqwcAgMzISng9RZ7vi7nSytAm4LWBVyrCW5DXa8k8PQEAChLWhC0bMiFlROaezNhHYYGcx/2Zfw/JShJ/28JD/CuhRFTvTwkIiemb70FaHLaTUk2FzPmyl1YOnkhFlegMYchHDV85mX8e8rCEI+tLGqnbItNmAfA/AhuSFn2xwCA4SH2yBVYCJlNzFiazSU51qw57k5FU8HncipyapM9nRVhvIPvGLfQly/dAgBU66ZF8HnPU9bc2Sg5Vp2fVxarRYe38qgl/q/WR1LBHrgFkLLQ4EHbHeflhGvib5LcWrbQCTXJdheA4KwiK2Ajz+E9NZzXaRAp10CafC2mXy/OjSORVYP5d0quO2MhbXTFmmPMKQBGcuxWO385ZSGJhxlyDSHmyjDDc6KBtnKv2BKsX3zjurgfL4DRrySshJow6GlYdtkWTLb6uXzOA3iuGm6riiI5gc+uQRFs1k4rLUJVl2jGvUR0QvmmRot7TK3fJ5xCQwCinjDr1yRqUd2CoqonrJCecQFyFqq4jkHLsMHjgPhWbDC5Iib7ophzi9bcFpmdVPrAik9ZiIdWRdPchR/9PLTJWfz8Bg/0Cb6z2iMAwAfmG+I73L9T+N0j+Lgz1pxuWxfNku8CAGhtPQQzfxH3k999Bs/qkTzfzBYBgM+T4JGX6xsRc7qaOC8mDamGTbUws1OJe3YO/v2ChcYYVSEeS/jcEblvm1mYLHkex7ECK6CS8Pc1M7GecFGyQmY2JJqREwuY57mS2O/b2ZMKWtkWJOS+A0AOpt5JbOJTQOqLOE4Js1sFa/sAG3NKQhxz4osy5MGBCUsWxk+zXTL9ohw2IVtEn8TvXoCJOwnW+Bto1sUesAi0wYZvtj9ayJybTwAc47zUNpku3TGScgsWuuUex73qt9DW+xjA+sE2/chVC7X8edFM/QL81sICuAuXjbUE1xIaLd3ino2CJKS5X7LQYWgN9+2GhZj7dAftymanp7BvqKXvCYeQSnAuCjh1eT59IoiciHQMsjCOvXsHx2NrLh9e24LwZ1uAS+2gACCLizsJrcv5cZ508hZ+n1yvCOHi2u8r/HsWwj9jofkBGdplIXsq4krU5EFkYTaPC6OegdYgu/wxiKTH1huTZLkBV3DdJtqFm2ogAbbdon0F96wo5vUqQFBTd2uIFHy9TeKUSS4Za06PZR/AdAv22oX0cxHsLyyEKusdgIjWEjkUzgNkt5yadd8evCFMP6cWD1rIS8jhsxuJZ1ZOEKB54WhysIBdAf0ASqhfeBgH+18JL1az5h4Cmwm/JiAVxDpZOwgAIIt93EJFlgOA9zJ7V8ywVqsP5iHDU18DGadxjEBz8aKW5UZzQynzy5jqQ7z/tPyeMWd3T/4Ef/sNXIq1AxR+bbvdaHGvx+DWnMEmvWvNse5O/AItBvWT10SbNQRouKm3G0cui2VVEJL2roUpP8wXcG7mPQjWsADCZ7jWXJsoQFrcRm54uhhrANDtzASsYd+sYt9VLFQ7zrb4zKpwWLxnLA5iMpE/t78QwrWOPf8CXBh/zd8mrInNIlcpIRjZWqxP3Mh9GSmWBIAiLvAYQOA4hGwcF8wxT9Tcadm4HALBMM0Abs5doDdbPGvraJZUTuD9yzDV7loYUc2x2adaID2bLb6C9/8DQOCg3AGdYFNtAZAv41zJShdhLS1uAlx9FmLrBdGYBfE5B8RkzFoYMb5gO0skoQbuk8+5g+fEEt9pPK9J0aL9YgHdAgj0JzQa8x/uCanJYwwKZw0W3vw2rZgZHEpYt3vtivBYfaKN+6HUfoLnUE5cA0uD/xqysCjRjHZJS5owpXMGCgluaF+LgTIWhhuOyKZLA03vW3MWU0luKEkTtpMahun3EhD9DbgGn4CgIohcxUbSLjOvwHz8VBjz6cRGTz48v1HPWegku3gAwt8QXy6N81XiaRQbSdtxFyyk2LayAPoBFCRNs/JdOTyD7/C5fRKBcKH51naniYamAK+KeZ0Sq02vldV/bKh5A+c0IeRxBe+Zxt80K47C43vxl/ieD/G5213dgOAqrpPnXRDO4yyUWm2Tz/fX/hx7fAFAUhaXVq2evGh9ytyAEMGrtjcTojcFgLw1Tz9h7HPBQiIOhX814S9lRCuR5b+Ph/o2EP0tEIjvY1PUIRQEAwWTV7HJOFn2CTb0q2JO1hPCl4Jv9t4BAUBdohx9YtFU5YFnrLmR5ENoqFZ5+wTUjJj5DSEN6S+zqSYttGkLuQa7uSrCQaQTGjC5p4rgipZF2J8kfNyKaEzm/k9g73AvDMHFoyWwlyPCCXQshqJ2blhz1eNm9+cklN11IbZrYkllxOxX4R+2MD+xJq7VvhUDMRbdL8JPP2xNmNkFAYC1BLLlBDWHhcn1z3sTr/MH/AuAzBNrzpJasacrrkriH38GILokUYhaQgD58A5iMSecFtQA/l8SpncV174GU/prAEClDTnEzEiG/+pyr/vFReiHCT4JAKjv8XVuppn6IQh92C85iSpkE8/cEM15D5aA37Mfw/WkG+X38qcAuZt7fG0MYxYFBAYtdFDKdGGWT0DhzYgFm5P3U0bU2h6y0Gh0X8ehaUuiVhNOqelV+y8mAKAun5W1kNTCi/kDNsQ52SBvI0R1XwAkJSaruhxlC+mz89gEJ+FPX7DeSghaw0ZNiRulWuQ2XKBZ+bnWhhVPyT2uJkg0PiN24jkF4WeMfO4ASdA+C70ENaGnVWahb/CPYOmVcK8eWmg/Rs3sz/sK9sRets6uYY8xWkA//Sae3YubRJponQ1b8wzBhvj2OWtulsqjaCHkuWohr2bfSMCchCG0GypJDJ7QasIq0DJGmqbKpNLk+UoAgL7vZVz8d9Y8bWUO2n5a3AwdKMnEC8a+TwgBVrWDH7jI0NCChJCo8abEl15rA14Mq2mKdaOFuWog187g72cs5KCvHlA0hNbJUAuytpqIlORAHn4FoUuJS9Nowa2cwF4q7QOIz1lzKrD//C2u64y171GgGZmDFkqnqwnff1D8/oLs7SXci4X9en7ZBInHC9ZUx+T4Zy1USCXM03QCEIh4X8B/TzL5xyxMkb2Li79noYVUWc5Hc6+p5R4ltEW5BwCA/uAMzlHzwbupa89Yc+OMdmxwBuZmSq75NH73xA42HJruABIZnOO/WyjqIX90so1g7aelt2zN1XkpkNL+7z+z0CClnnhOTDBi+7SyuHIZ4XWYUs9cjmXsFY4P37dRYVkRVD3SckFEwqI93aMtK74LgaIi5jwr+x7BhDrV4hxoBg1ZyNm+KNqAbZpYGDRrzUMpNLd81XqrWGg7jSwysvEIyNUWpFAjoVFpYo4Ih7OV72axFxn9TEIRdHu9JdHoScHnvrgLUu+ecCT9sBIn7OlCqrptvW/CTnmOxRbAXcH+82KoF7BvNXV3Di4MORpGBxoiW9p1mNzaE8jI4zac0J4CQFosAPUtdSPmxbwuS6gi2dygYs2FLvTfOf31B2ISJ5ej6jgshjF8Hv1IugLkAO5iw5605tz6xQPWfLuxMiKMNBFXsLkWxQRmfsSlhDVWFzeuvoV90G+h1di4hXRtklndFmAtAchfEPKLfIanbt+CkMzJs2Jvw6v2dCssatVJ299Mz4aFPAoC8Bq0tZ//eZzvKQtJRjewN6vCqxUSwM5En5Lc32lc3xPb5/FgWdE0yfJHnYbKOPaAhe6s0xby/2nuakVbKgECbPYwscn5+Pd+D5rgJt4zL4AyAhC5ihs+LBusJrzBYV20sAZAer2AfzPe/6mY9358C2E9i/c/tlCMs5U0UvI/SyBW37JQv0FNxWfcyTRdhiDcAFFL13Aev2NOh9Z9FPAsR611t54ZCMh+F34xrbgqSm8B5/MQ/MWwWFxVeW1F3OGGXG9FhJ+fNQPZ2HfrVZsQZMQSoPYpYnNdxsYYEs3CfvF/BJN7CxfCpJa0+LIVC0VBE10IwXELVW7KN3DjDInJabLBHh1yAKAp6df/hoXEpyKAz6/tQwGASZBTx0Xb1rb5vXTFjuMcxnCvz+D/dy20M+vkBkxiX7CmpIbPuyqKhoqEvSZS1lz/r+d2GwJyUA1h6OIyTDhrIWemKApTLbGGPd1UlJmSWkHIpKEDiWZpaIYAQDKGM95/YM3dTVVrjOI17hP9XyD7pizU9WtHlLJtLZuLqbNZAA1v6GqLm8UNOtkjJOBO1wkLRTEUKr8Pz8MSYD087/OShcSSrHU3hSfJfFdE07P9FsOvWYDDVgTmDsDqT8T/fRWWzSKsx+/EYmED0vGE9neLh30UDnLVLKRez1sI5yWjZ2l7ulsW3Qia/gz1leyAy9mz1tzaKC0EBgW7U5mqv95Tfn0yyv9hG+Od6cs0xMqo2tbTOf0mv2ihUaMSTXrOS/jehSMg/Jwe22oDMnHkgTUXTJE34GbbahIJ/dNBvO9zgNC0hZLmOQtFWN2AyyKswkfWPDaLQHUWIPMH4ZDuwdIsCMh/BXO7U7FUYx+BgA1v1JpJ9hRUApFh7IqQuT3R3i4rJooy1n1irnW7HNn/o4WMPhIo2n1lSX63Ff/0ipyfkpG8hhswE9eOAABUrX1LbxJLGREIWm850b5bNSm5OfuFcWda8Sk800mY8XRTFjYRSlbQMZIzkNj8FTy3CQvtu8grzeE76ft/h/NptfrxWobcJvfZVaha645HyaKnnu1lmbVmZp8+Comora5rENbH1tzRlSQIc8MzW/zcIniIlQTBkoKp+QdslqPQUryC+8cx27UWPnHWmhtVFIU9X9iCuUzttQotOw7tXLCQ7PUNfl6w0P76FJ7llJBjBCgODbkE6+0lPLuymM8sk12U881YiIezk9IDa98AxF3U5xLu6Qm85/YmgrnXvnbjMO1DWgDMsKNpw068w1v8PGoozfdW02cKm/viNs51AJtqQQDAzcNfAwTKdjRWFffoBnxmxuI5UJLdZsk8F8X8J9HazSYn2Zqx0M33EZ5RWqyMmvi3CzDbme3HNOcnOLcx8BSviYl/HG5LWshjdo0iuVfCZ1YEZErgdUotBIpdhAoJyzUje+uGtc6ViCsBAGo2svLvMYTq/BY/b0UeKDUIiZFlCxV+F7d5vq5ZPER4H4Tjv9lGuHDpCD0TCvJn2OCX8JxWYA6vCa+SFX6Ez67cQehVS9WtuYeBJfxV5SWq+K4FPMclC4Us5y00en1DgEGZbzL9zIJjoVRKPjstLgbj42strJar+LwnFnorKPM+AVBbSVx3/QA4g0MBAGToSdBMYwO+DFTvdnlc+jo2IpNy0tZcF/AeHtAr2zznIsilL0AaLR3B51LCBv49rnHYQtJIMguSpNSStWaU2XwilyCm+Mzz1pmJJrF4DufwCL87gedxCsI/YaF1m075nbUwxJQhYT+HH0JIv8FrWSVXkn2UBICTFrr8sOtPFr/Tjki5BICZcCY6/DMCgBB0sxZKgm/j6BYAXDv9PTbsjJjqabnZROK/xf+vWWvGe7NFt2S7c/UOy1oSn57dk7TfHFNT19qYydzs7OrEbMKKuBBM2+1mubY9BtM+b6Hz8DGA+Wlrbtet3X2X5BwZCqsCUP4c5zIFABmHIrltIfKQdAWZuzKK72TfyFGcT8na9w6oR+F/GgBIPs1b6FHmgvYhhLS/w+e4Wf830MpkYpm0w7ZeyXFTvik86+8XFsZLdbM4JSZj7dOKj5IlQJM/kzDheS8328ijsOI4SOQzC3F3aluSb9kEyCSJtzKe62lo2xWY4ReEm6lbMwNOYU+LiV+zkPzD5qU/hb9PEPnGwnzA5PK/nxFrYAngMYfrSVnnjNAo/C0AgFp1zkJXn5tA+iubfIY/rP9iG9mAnN6jk2+ZIqkFFWwjRXPyzyzkgXdaTFdOPSPPqCEk6nY4kyHc/34808d4LhTgYxZCi0xsKVlIBVYraxqgUsSeYLt4atxUC21bElKRocUTFoaL1AEib8J6/BAcz3QbC49txJgwlMd1XbanZy/GtUUAoCswj2MSZGA7AHBf/L9C809bc69AJZroQxIAWB/AyIO/92fQBJ1cAm6q7Y6MflYW69J1+k02YUmx+Iptxp+DWc46A2Z28jPWYO0NAyyYu79ZCza6KTV8Hi3DK9Dkdfn+mxYq6trldFTBD/QJWFWtudtQIRJ92wMAE59tSXiBVssfEPv7LVlzYk5OCKpGwidUEortvujT+ob6QYdzXoTl0Cu1/71sOTCklhFwp2vwfVgIrG7rt9Demsy6P8vPAQJVsRJX5fXZDkCsQ0BVcGdgwpcslHjnBeA77QFXTM/j/wvgoM7iWsu2D6O1jyoAULh5sLdfUjNPWWjeQVOMTQ76EmSVjpxuWHPZsImP6Jvk1Q5WAHvflay3B4X2wpqGCzAk9y1tYbw4tXjZQmNKEmRuVr8h/MCS8AUFISbJqlft6Tp+mv4u+H+AoDLd+LQQkSUBEr6nk/BOWsgzYJFO1UJLuij8OwCAqmjmdiEiknCcVpvDJtLGnloAoa2wKmIRrIk74MzvA5BK7RZLJw+8kGIHSysczbrvFrTVtQxTnpq7IsLrfvhFnMOYhS64jN5k5bxyYhFQODPCEfTLa2mGs3jGzfqPoTDIZTAPYEqUgybzdAMAFVifvldeEMtk0Y5maHhfAYD+e0r8s+TyDfEKHhRbew3IZiIZMwvzzM3MJxb6+ZUTfr32Dmi3mP3H8eGHBQA0aYeHpvMqT8K8+OQUnZy4VhXrPILd5P4km7cOQnMOWeh/1xDBp1afl7+PWKiGWxKr7ZGFXv9pvIZ1/4/xzJfFxGfnn3FrDkEyIWh1C777KvbWBJTPKvZbNYr2zgBAzbc+a824uyb5MfywCl43LASMCu1D+JKeBMRqQdaWM0FIBaPd4qRXbsTGIRD8vPi9TNvl9Wasua8ioyPUYlW83jf4eYArS2cn4YJtlvpbE0GlhcHPS0NAl8Vq4/ez2xB7Gk5ZaO+tQyumAcinBMz8fV9baBCj8wz64ae/2kLLEzymtyjAvofuW+gwHdcuAgBDLO1CbnkLMVnbxFXgME8n+P4GQDApQsyY9Alr3RSS6y42PYuCenmxISpTX4sCBAoCWizFOvE5C3FyF/yXRfi5XoBgfgUfe3kTK4ANXnLykwNAWa1XxP+/sdC9WEnahxBQHQZTttDq/Dyu47SFCUhZsSJp+p+HomhVrMNZkpG9P2AA0BLTsV38Phfw/xVg8Bv4+xXxSV+15pbSSbfkOjbnkvV2rJc97tgffiBhBTD0VrTmfglsEskBrcchMOk2JNspC4NcP7AwjTh53zQW7+D5BZ7r6QSYKz/D3nVlvK4hVksF51jGc2OXpiqum52J/Vndwk/OgxxsIeAZCz0dov/eIwCQFb91N5dvlL+Alvh7CyOjnE/4/ibWxjI2yLxorl5cbGo6YqH3uwp8QQg3tojmZJglC4ku/eBW2DuunYmfgoXgn/tbax22bVio9DQLJbbvAIzLeA4PLQy3YPKQtmc7jmtYFOvlOF5/zML0nxRcQ04T/tRCl91hIQFrAmZf4bUxiacHAEC1zF6Z2i9gI9zABnvOQveZVusOtMn8JuZuL2j+cTmGxbzWuQvq8ni9/FWAwpJcJxNsmDylTT50FgB7OlzF637Txf2pWmizdkWsPObXa6foXGI/sFQ3j2scw7O7iOtlcRGjAs8BDOZgCdRgucwIWN2BBTMfRbJ3AED90r1a5627kmPfNJ9AQ3HoYi/6/GMQ6uPQiCPic6tbRSvB019fE99+COb2SwCBbyyEzphCzQy3LwHO1yyEX68BNN6z9jkSWXzPKH7qDL4h+RvbtI+I2U8ug1WerMnQYbLJDLw6PovhYGaZ8nXOBf0BJF5k73sEAMjybqVabC/XIwDANM6n1zYKZwEeB4nJkV1nxZxmy3RGBjjvrtUUnWGY9RT6kvjnKQDhTRHE71uoo38FwnSnxedy3PiEhSpBAtaYhS6+p+3pse0aGtb/01VMFgLxtcnw4wjAgETkRxbKeuPqEQBggg7n3JXs4Kbu+vKU42+t/SjtXvH7T8IU9irHn4DnKAJMJ3EvZ3DfX9yE8OSzuWqhxoKDV1j+qj37dSxbP8DnbuI+DYlwn8G5vWChqKffwlxHgyUxaM1dhhstgM9a/K0hllstoVQauCcvWQg50kKKtR09BABM+HDmnZNeDmI5R+Az5JhU0mvmP4mt49D4Lvj/CWZ0kvy8JIReN+3WRvGZk3jfA5j3dyEsfRDqrDXH1LMJU5xDLc8DoDwc+0MQgP14rVtZn1mYrcAQsL/nMsAg2VMvmcmonXdqHcCCxUcXAJ5PIgfQOwDAGPE8Nt2nIHLS+3x+rvH+Gf7upIUpQZ1WOkGU7TXxx5x0F/7/2EL4uTK29bDqiIXJQB8CkMsQ/tMW4u8UMo5Qq8v5sZWaC5wnb/1MzsNB/gsI/0P8f81C2G8YQvo69kC/NRd5qcZviAKpW/OMST4XnRMxBB7kfQs9JGJ9R4+QgKzXd8H7HTTRj/f5/Jwc+qOF7rCdtH8KfqxrrwI21V5rlT4IqQvYn9nu5k3w89m+i1l1rN0/BwGvioCxjNuEqDuJ1769fvyphWiLa93fQvjZVENnPGZB8M0Ir8DRbdYCANQaUB6AzyYjrgrB+XWAwEM8r9kolr0BAMzjfwyk/mdog1f26dycHPrPcAEeWXdDP4axOWlispPtbnMGadnUjOm/DlN5t1cV1sVlC7PjSxam0SRrBu6JEJGbOAHt/Q6eZR3P9V9tg1ydwnsWrXnCcgYAQ26Ak31/in2QSgi5CRmp/9eJOawKZWqyn4/PIvzAQtfjGA3oAQAwbLYpaBvfTP+EjffcHp+Xb0ZvNPKVbd4bvt0ia76b9QJMaWViDzf9MVgdV/fIRVrCd522UNf/NYRn3kI2HzvufC1EHjs7HQOAHMPvH+NZfg5wZQ9HpljXBOiYxsvS8CW5t9+3UAloYu4n25elRfNrdygSgx7xeA3PmkNI93qxkvXA5vIdBgCo4YEwIYR13//THoKAa5v/xzY64t7BBu02ROSb+KZtbzxWJ43PFNerFhpPLEDYTlkYA73b92JaNHAa5jyHdTyx0HK7DsB8LIBA62QIQJDH8/w1gGLSQmiVYUpNBU4nflKYM/iMNRCKI4nX8jVK+tVF89cSfNMwPucjC70A95q/SQtx+cx2D+pm9FfJwrAIEnN+/BJm4OAuno9vxP8T7sYtaIS5LTychu3efEANSw1AyJm4kxch4QSk0W18B0dlMy24mABfuj8szKlZKKlmbkEJ732I11fl2TLzkOW67h44ofutNY90L4nfnxJBzor5TndkRfbN77E3XoKbMYDXMz+Bacx9AM1CC21LgHAr4ArOkaHPvdrzOtF3TPZX2UKdSS0CQFjL2IhMS12FpnkNZuC1HQKBbxhnuf8RpNRtC+3F9xuZWYiTh4DM4Nrc1H7RQk95atnjFubGb2Vx8s0jfB7z6YdxP+4JKcd+iv7aL/G7dMKXvm1P9+bT5hyPLbTSmrfQv7Ga4EyowbU8W4dg1sS1Ymu378SkHoVbQMWxChfpOYDAlRYalz0lXhW3ZHmXn33eQiLSMJ5zn4UcBHaufoT7xJLzcgSAjbViYYQUQ4SPoFGu4sGy0ePIFjS2b8x/AQnkZilru2f2GYVTMK8nxNRlC2zW5Wfs6TRXdk+ahKB26wrMWujGMwmt/LWFLko10bqzAIsPIVRsrsHiIhbyVBLXQyEtQauyyceqmPr089l0pGBPj7w2a55JUBUBmbbmvgYFC5WCJbGWmAD1l0IkJxuWvoRncEfcm93Y42yAesJCb4UrAB2mN9+H1fkY+5pFWXPW+9Wn+wIA1NRsIsERUY9x4963kAzDVNhzuPkF0TB1sSi+gkb7Fub+IwutxffbBBuFmb+GzTCIDcL5eUvQsletmf1mAksG13C5y/tI8595+DPY+MsWmnlypBoHXk7j/Qw9nsZ9+trC1CAFJ+2ytGihHLgiz79fQIA8h3/uRXxPCc/6Hp71vBCB1YQQ67gxWhAscqoBGNxtuGChfkHPl3vmS+yZnQqdpj77NXky28/AN5wU7U+gvQ+g/QSWyC2AM6MkS0eNMMxu4z01bALmCbCAZBDH1wlTi0UmbCLJ+oLH2NDTFoZLPtmB6Uf2mVp6q9NfhoQdHhTzleb/AK4tLULOWvslC/UKl2zzmQUVCPSSNef3s8yWoTCmyHJzktSj8F/CJv5agCP5nLT9+pKFCcJJ4e+DdvRQ5ttyvRnR+g7S/4DvY7hw1ZrbjSkQ8HkQCAYEJB8AcJMAMARwoNJYlGdrW3ieWXz+BO6Rux8/gfBf3eQ9F3H4fbgOd/QD3N/HFobelJ9lALAEGbgEweXm5Ggx/r+YMCXJ0HMK8YKYWdvNAqP5SgKLNfeLW0BsBYxhnBPTX/3hP4/znpcN3sBrs9gYH+F7f2StU32r2Pzsakwtyj5/C2JRLAkBWbSQw8/mKQUI43W8J3mdnPrMwa98Hpw0XJTDP88nNL1jIdOPFgQtkZdxXvdxP8riI9cTEQAeSTAwcR/qCS6gAXeBAMBms+RFqmJ5Lm8ihOxhcArWhPNU/8E2cg26DdMOg9u6DHfFIx4fy7OYtt4tSd83ANCNVhLNnrXmtlf5BABop+BV25323kN48DPY9Cx8YVy5W598XEivMxYadbACsR+aV/vZNaBtKjAfZ7FB3hVCLIVrfQRhpeCw3Rb77nFs9qxYCBy+eRrXlMffPwf59qSNu0TrZEUAIC1gSWvJz/HnON9MC8FqCFdwRaIdWqZsQiBq3wP+LCQiHZk22rwhrsh5RF0uCigxLEp/ndmhBJlhAcorALW/AsBt1y38E9toj+481d+JUiOpWnvWASAJBmwjtdhCI6hvWt9FlveYhZFVty20sh7aAgCUABgTcq4rFpp5LEEQx1poW2rxSWGw71moqT9uYcR3yZpnJRoAhvUO0+JireK7M/L+JXz2E+vcQZfaf0nIrqI8jz6YxG9YyPHYjLDVzsSq3f9f9r78ObLrOu+87kY3tgFm30jOQoo7NVylKBRJ2bQoOVZSTiUp/2D/Yv9jrsqvcTlJ2U6lXGZZKouyGMmkJJJDissMZ+WsGGwN9N4vvDXfV/d7F728bjTQjeG7VV0DDIDu9+675zvnfGcjh0Ahnw0+j+3Q5iHQp2xrYRE/47j5PhHz5hOHGL47BJPeaWaXD/El7pGa/wR+9hO4M8URnK/9eD93nv4JxHcJILCnXYLCDr//To/v0s41NBvLAJ9rQ7wf02Ej8bvJbdA0zHUQlBxchquiFVsAFLb8IhjEwqjXofU/MJ/EQ8GuCTtOIq6Bz2HEIY1bQ9IvJ5qYrP0cTOTFFJosCu6b/j0tvgXz/QQYEToo+zaLs8DMyW6fV4QAc+hnK/D/6Zawj8GzuMc27sMRfT+00SeqFfG+7jn+D4AAE61Ypt7MAGD3rnvWfMfdfThUDTwgkkf1FJqtk5+uX6+Zb2m9aVszx+gOXABZRG3Fbsc0hX8vIJUXYb4Bwb9nyR76nTgOdavSAEBeAJIa+rD5yU3zYh6nscaUsyDDX4CAH4ef/To0/Jwlx4ZFIsDtPsz9EUvmVYR5A7G4To+Y727ktP/zNlxSVtrluJC/tPvJau+YzylYNp9OXc8AYOc0/hwe8CLM8VPQOtQwZ+Ajso4hFuJoGJejDY1chs993JKt0KvQ4B9CoBkaJKmVEx9aU2KZP1AVq6XWx9Iht5JP+WwXzTf1YNLSGUvm788MYKUxcago/jwbkDjt+JYQdu0BBYHDU+bFQskLOZu3ZKVhTqyzfSBpz9nujIx3e/hn+Nx3Yfktmc+u7EdUZgAwxGLa5kHzYUfnvz4l/iRNQyekvzE/c24GvvWwlYEcYOnWP+NzF/GQ3cP/XJj4vJjsOvSjFbDr+mp2MYkjS2bi5VNq68h88sui+O1zlqzCy4t7kAYEOMhlViydIyDafojvh2kiqyFcdRuvAXQN2v0EnqXJta9DCTy7S8KvxPN/hkXwCygAFlax4emyTXix0V4BgKL4fLMiWEzk0CgC22IdgAVQCgjI9SGvgTHvVTDQPIAs1Ik7kJwEj7DKTltoFeTVCrRcwZKRlFgIxH77dQiHU0dwM5QWCTBeE9KuF2dDl2YGh7+E712PiB9gP4b1gbVXQAPv4wD7t+a7F38JYD9ufhYlOYwXLV3LOqYx5yyZAbmdc/kciE1XWv0+rM/bAOAZnMFVm9BowV4AgJyQS3Pmh4kaDsVJ8WlDrc3e8zQtGRcfNuzYFCGyHoLSsGTDzLyAgy7G5kvCJehgVk3+UcDpd/3u95+ASazXVbVkvn9sfsrzM8FedmLoD8H8reJ3HNH3Bv6muc1nnBeeoS58iIaNN3C9bG3msk7/2PpPp3LLFUqdN58yPQMw+bal60zdzxpw7o/LG3AZsZ9YstYgbxM6s3AvAACJqwUcBCbJxDgsTrBfMZ9znocpdtl80s60+K1ztvP15nXxlUti6it5NQ0r5TiEahEH8wZeNB1nxOwlV9BIcSCZstwMrksFegnCX4FwPA6N9gi0ezOwbNz/vQZAZnLQoW0ebC03bpuf/MxwX958VmYFz68EhcDBJv2W42jehuXGhDNyJJ/Cffn2Np85h9s8gmv/jfkQLq2M3a5v2fMAkBOW1XD4CQAk536Ng/wYwMAJzu9xsDdEc8+LRk2TwEGmuzXEQyO5N2PJODRNXPbaY7LKSdGAVWiQ87h+ugFVANd6Cg6AwBM28GzhvevYDxZ21fA3zIN3gv1daNl2AAIOjL9vySYftk0A4Iuan3t3Dnt0Cde1Yb7BicvnfznF+38FrfylACt5Dxb7uH9dBOdV235LN/dc3xT3Isx/WbYJ6j0w6QCgwywrwq4y7luV//8ch56x74qQVrQMSkKo9Tu423lIMa6ByTBzQnI1cQ0HIGinLJlR567teQjkZ2ISr0KDpGmOwuy/OUuG4Wrmpyup0OkA0ZsQmkswr7X1Fw+ylhmPcnEwKu+Zocpz+PcTAJCzDLS3Ya/3+8x8cpU2PonMt1uv4etVmPJH+vAIdbHomCBVFEtmBuC0YVsjPwwtZwCQ8vro+/JhVeVQEwSoydSP1nBRTh5QboD73k4Yh9fECcHzOCgEpQUctDAjkpGEU+YHZqzJIU6zVgGIRwIAZIOVsiXTsSOxGubNpyLT138huM5RajAdIHIdFk5V3AryEd8SN+87li69twL3gSHWBu6bhKxmZZJruAnAedJ8ohO7L62Zb5+mxC8tOvakPApL5RVcQzN4NWxCBqHsBQ6gJf5ftzZfYait08/qYo4P07svP6DGi3HwioElQw6A3EDUwe2hebqGf28P6D+6vfoI4PMtPOfb0IYb5mswKvKe7Pm3Yj4VuWU+/fbUDpJYOQDcV5ZsVKJ7WQJH4daLKd+XBGssAFcRt7BhydAsJzQ7EHjffDFYXRRQRYCxJWQvwfMQyMknwAe8EJxBEtG3bQJaoE86AHA2IQm/Zgd2OidIHQUPVg8QH3B+AACIxM+NhwSvFTEN58QNyUHjHRJTlmE+l1X4ofmQ0vKAh4Xs/r/ivUo4vJsCptUOe0lhZ93BV/hbVwjzX82HCke1GI68jutcFZM8BF+6TSehYdMSyK9YsqWavli3orkZdAfumY++tMR64N7V5FwQ0FmQxlcZXAWnKzcFAKo2no5XewoA6M/HgckVcgQ0sYuiyTbk4eYtWcASW7pGkKFpPqwrsCSHaE5M2Wu4vyPCc9yC6b8kZmc7IJPSrLYcwikhAZtdwKRgfkpP23y3nxKIVmdJvG6D91noZVGxw/HPcZ+HxWQOf5d9Gk5bukxIrpMALxei+8dAAVCx1AIAYObntOxdWMVKl6ItZ5HNT9jCrQRy2rkFf2C+hJoFWuzHmAFAj0O8acnKsZwlp9Y4bcBkDLawvms+N39dzO4QBNJq8VEAGYt8WA9A1+AO/PVYAK8s2kYP2DDFVfWUXAZ7HTLXfxPX7L5mFdxRmOGtbYAAOZgNmNk/BwgQCM/a1sxEAkBJzPJBwcZZAi6F3CXsvBtYhjWxMFmmXRMSlxmKjcB9qgsIsMdCXa7dPWM3dcmFel3Y8vvm+z3wVeuxlzlLzlQwS2aUfiM4gJow6Dkx9dnuycWCvx0INQ/qBWgvJmHkhIgZB5jRj9Qmm7kO97uJw9MOBJm+JonE5oCCWLCtxUyxgBxnMLCjL8NW98DA/8+vX/8F/u2gh5CHuQIuwk19+h2soK8gGAW4TOdw/83ABWA3pGHdjcehKBzQ/B+xypoCAApu2mAmF5y/WP6uJWerJa6NO6O/x+eeAbh9x3xfCBKK1Q5u0WygKCKxhGtCiLcedABgZ5tp8fcZz3+4y2HkA3kKD+U35hNAmmMmX9o9tHIxEPh8QD4yksHBJGmn6BSgxQviy4adeiicLIeekWtkzTsPoeuw84z59OR2B5dJ24sbDuwVPAtHUF6F9cO2cKvm8yQ2YdUdsGSH4inbXuou9/DH+Jx/EIGqC6DmxKQnABCQi3LGGiL4yjsxLMiw6gW4VzmAG5vfLprvoMy/2ycRhVnhjCKxTGglsqNW7UEGAAtY/Lz5/PgD1j2mz0N5Fptdl4fdnOD71Ek6jONXRNuwkq8iAFGSqENo+hp863khAety4ErYR6ZK82AeFjKMVW4U9jWw2y/DvC3KtUSBgLB24iPzzV+XAg1Yk2d2B9/fBsAfMT+IZX5Ez84pk7fEBK904B4i4ZgOQCBLcF3uWbIqsy2uAP189jRcMd+zkf0zXXLTB+Y7Wa1iD9k85rD5JjcsuWYq9Cb2bE04ihXr3xxmTwNALGirvf9ItnQj9MgVTIv5VB1goyJLlvHu5IrErI/E1Gf4iq7LuiW7BO0X6+iSaJNZ0SJz5puDVsRMdX7p09BOdKFuQAh579Q4dBFYC3EDh/gYhPSg+f4HefODZa+Ka8EKOWY0dnoWbfMDS67h2h+G0NRBRI5iOZB7FZ/B+hCGWjWs59zJZ2GRHIfgsWvwZQG9DbEsGU7cxH2yAS4zWh+BkLN7Eic3ncC9uhyE58VqYFv1LwAmd0X46UYu2xCj8PZSOXBbNAWTg27gcJ3uwk4XzJdmVi19jTaz4qaFAeYDHRUL3gmsmvI1Caaq+L6xaCYmBVFzr1lySnCM+z2DfbiD72ktHYFQMcuO/MQZ/M5HOGiqFelGlbGnNyQKo2nPfFYb5pu/crDpRh/iS4lTlvvG+JyygNEo1hkINusuCrjGIsDzMKyc/2jJgqMXwYm8DY6J/NSm7FdbyMVVgAW7SR/A82SHpqPm50s6gHsDwKrRigiRmF+AV9CfxUIQVx5UAOCmVoWoicDo1oGWYT24MzN/a37WQLnPwctBo54Gt8Cw1BWYxmz2sLmDIMDrKIkGDl0Cjv0uWzJxJyfRAhYR6QixhvlY/yER0IJYDTVouotdrJ4awIQjv5SsKgRkFc3hTRu+CpMkJf3w9RHu9ww07Yr49wS9AxDYH9vWasMSXKDj2PNfiRWnVk1b/PZ74sZOCU+wYL4y0XWT/mPzw2hagYV4GIB123yqezPgIAbiuPZiSzCtiad5ugTTif3sYzxUDrOg4Lb7mOAHge5vQEMSZZ1J9kuw1yY++E6AgLb/0n5zJUtO+2kIgbQhJmtOgLAh980W5iyjZSz6riWLnvbh7w4A9GpdnoF2gtYoTSTaqGXbCxkSDPeJHz7qph9nzddnlCB8NSiC70KxdFtOaP9MzmNbLLGCWGIt8/kBRXFdC3jGEdyC1/G59S573ha+ZlosVSW32YwmflABQK0BxmTXoeWpiZj0okkbcQpt4EysN4G0yuoeBPLesmT8t7FDANeSz4hF4OZxQEjMsRyajVHmzZfUsnFK3Xyr7QVxJei73oA1cFw0IQEmSvkc2ju0Fzlc2zGA1gsQlHgE0QD9jMfMd5n6As/4GD6v3+c4xfOH5oe4tsVqK8g+M8KyD8C6GkQYHofS6Udy1iSaMR1YAMwyrFnKBKO9DAChRcBW5JE8tLTEHXvKP4eHEGq9lvi5ar7tVDixIVq7Hfjg7I9wDNqgYcmElELAxrMT71PmS6LvmR935g7ih9g7Nj69boNNZd4pUnS/EICvQSMXhKgb5ToKy28fgP4xgGKa9QysRLoPm8IlMWzdgukewb1aFTK2ZH4gbZp2bzprIVQaFRsgw/BBAIBOgDDowWWc/JD1bollguz6YHditbpECWrQhozBM05MsokTemMR9EfMd01mX8UPYCnUzM94nBdro2LjzZeYh+/tBPEtaFladjlLpkeP6twcAOl3DcCTNuWYob1PzJcax5YcQ97G+7qoyCXhbZpiNfRLT2fr86exP5xeTeBgHcN02rP5IALAMKtfj4AIflXLkoMvC7Z7HV4YJXCC+bn5aTk07elfbojwVgEGLPnNCctN14h+aFGIvCl5v3HkqhehkR+G5v8P5qsnc8IvjAIAInlPCtj8EFzDSez1ulhuJQHoJtwtFlmR22G/xrv4ftGS0aDwDEyZzyxkR2l3Ht4Xd7iU9mxmAOAPAZNQHuuAnmzwwewwJrlM2TaysIZYNWGSmyLcN8y3RJ+BhqEl48zOj6CljuNe7+HQHxZ/lfc2bcm6Cz2ou7EY4XCE7jkI/6JYI3HAPYwCBNRlioaUC5rlMwJQ9O9NrCoOxl2yZNblZRDN3zHfsTlnW/tFxOI2TMOaOw4Q34BVN20pOzRnAJD0u69iQ89YMhe/DTO6id+5ha/Llq6qcNSWQE2IzSMQkDsQdnbsZTyY04c+AYgdwyFhm/W7lqxqW4T2bUNTfYF/V3fpPudwoB07/yd2P2rR7OCK8blEIyIEtwsk7FI9LeDEprCMDjAcyDmQVCpzeA6/Apn4MNzRo+bH08dd3Fxapc8D+K+aT8ayDADS+9t1PKSP8TBOwayjgM+BJHT/92ug7XYPTRT8Oyh/wQKhwzhMKx1Q/6D5JJpbQu6xwea0JWP0JwEMMd53n3mWf6cn4k6Zn+/nfP4Xu2hAhtdump8GVRrzGaoJQdeyZIYqpwWtQ/OzBqIKwGViFX/3MtwQtxcvmZ99Efc4v7MgI981n4+RAUDKxZwCpssume88Wwi0zVFYA1928dN6CTvj5ToLQJti6pAQjS13W5sw/2fFlM8HfnvbfA79VRGUJgSOnAEtAv4uTc2z5rP4qubDT2ajn36ziD131Z1vmE+H7uSuuWy4z3DdmxCS/JjOj7vG6+bDqzrFiFwMAZrFT/eExNV2dlXz0ZgmQPvplBbIIexhasWUAYBHUG07NitEUDvQPtreqZFS6EuWHJlOElELaHSKUCMApLBFli5mAvI9KgF/obMACG5sZtEUq4OHriVajAfamaRXzKevagfjSyOyDJiheBqm/8Nd7tndhwujvQ1Q2od7dmf5CRtdfsAg6zK0elv2k2dEC3jI2rPzcc58IhetGq3WLAUkZT/XcEHObCsDgMEWhW3TfHZVLtD+BZhxl8z3rusm+NSU+ioJWVSyZPZcJJq5IaQRM/bWLdkgxDr4hFEXcCubzy1fFbDRugbWVnxsfsYe37MJs5xJRtyPebzvxRG4Qmzu8hJcrU7j43MQDpfefcH8WPCy/P6TIwQBdlWiCc9MyznZc7ZSXxYFwrOkz479HZfl3LTFqioELiE7IDElPE0b+7pYZc0MAAZ3AxgiKwLVF+BfUhjcYXgPB365i3lKwecYLdX800KyLZjPHVdTmtqjKQDAJJ1VfN3J7Hbvtx/3oKOqS+a7EbOnXgP+8y3z3YdaeP/3oKFOm+/cs4K/rYlGYncchiG30+qa7of7zDfNpyN3OuTrICU5/DVvvhKPmu/JbZztWMCkDkD8FM+eNRbkTrhnm/KcyvJalxfdqHoH7oAzLHPixtWFaG6kIJsjkMB3rXNbtQwAUqxN8c2YR38IB7KGg3cdmxyavWxSMo8DwiIPmvnTEPyzOOwFQfY180MrYuEDZoIXwSSs/2Y/AJqbJmYj22mdgnYtCLA4HuND8ynOVfOFPp+bT2Jht9sYe8CyarcvLinpDDTh8pD7Pgvwes58g5depGk1sJLYSJRcThk8wuyA2r4tws9y82vgGm7g86YtOc4tEjBko45Q85fFver0uVXzeSV5Aeya+ezCXlmCtIz+Fc9yIwOA4VdZGO97MPdNDlwn4ovdXziR9zA0/T7x9SlEJSH6iPj78Syu4PNzHdwHdSEK5nv3x6IZ86KZVIOyzmHKfM+6WZj67lrfMT9JiTUObGoxa77rDT9/Bb9zRCwCxp4HbdgRCQA8JfvTTTuzXRaBtWF+dJg29GRrsRN9hD4OBD+Wz1kBSF7E/tQCMNZmqzq/UDv2bKbgiuoBCNTlXq7j/k53sfyYmeraq71vfgp2RgJuY+k0nigwC8NVMt/phd1cOPTjeOCPahWhsv/scnQCgNMQV4Qm56wlm0DkRfDr5hN79ptPNjEh8nKWLIfmPZ2EtlyxzkNXpuSAz0PjM++A1kJLNNegAMChLaz46xVZibEfJ7HHOulnWXzgVbgxVwEqpwC+Or2H/Ego+Lo/NwEAl/BeDXkO2qqLbls1IG7T9o6IAzdgSqy0m3DLjphPQost2azGcSJ/a/dzNu7aANmbGQD0fij9iJdQ+I+bD5EVxZWgULGV01Fh0nOiOWfws5uWrBTL4zPmzDfe0HZUZUv2CNyQg8ehFhXz6bShFjyB97/XQTtTQMviY0/hOtmCnfMbh63VzwvYRX00truHF6GV18X03xCNy3Cb056f4P5OmJ/BMI3rPWo+c08FnyQp5wmy+pKEqtaCaGoyradh0sPJ+WgnYBadvYv3fMV8aJqjzl324M/sfrbnNRtw9mAGANsjrlhCSgZ70Xx+dtl8tx4esE+hmc6ZL9jJCcnIUehk++fFomiZb7M1FRy8VhDFCM3LJWixF7uQSXHgY+v5oM9bEz+f2WuMO+fNhxeHZdvT5va3oNF/JK4INTndszuwAm7g+g6KSzZvPszrcuq/Z74ISgHJWVDncb86TLYp2n4nLM8oiAbEAnCfmE/3XsE1fgbBv4n7HsgCywBguJUTn5+H6Qj+j2xvU3zFNv7/Cn7GbrAk6WIhBNmE0n3tMrteBlhEeOgfgLjL29beAc0uwrUCDcFDT/M/ksO+2eEeGc1gUdByQPRNWbId9rDCz9Zf10AERn3cgAh786olx3QRCGpCvC1DMObFWlswn+34FL7XIapt7PFF8/0Jd2vxfpqWbHqzAkA7LxGKdXF31oZ5BhkADL4iYfu1HRYbO142P8p7A9qqBP/sNh7mJ+aLc5SxZ67BIpD+B5bsg78f7+fMwJ+K8DOU1C1fnxGMdyAQ3zIfy74Cy8TM9zwgKUYAq5svCtI1inJh+r/r0Gavma907AUaefwua9/D4Zs6J7Iiz45EaVsALg6Aj4BJjqO2y2esIdwOG4uSE1LScdM6j1LLAGCHTf858ceZqFEXNvsuvqdpxnRVEjhOCH9lvqxzQci6It7jVes8BCMHXzBvW5OFNq17ai5BYB1gRMKNf8N2WCdwDbfErGcO+071B6hA6C7Db38ipSuwCBC4ZMmZfc0AKNhijcDNRiPfMT8KTQGexN+q9e8juVOLHa9qAS8QB67ftlYGAMNpf7Ly2gZ7FQfwFA5zPTDl8jhsRG124nFg8F3z3XrYH+5wH9LseZiEK0Iurlnv3HwOKy0DmEgsMl35CbD8EQTkV7AQCBI7VfnIPnaX4OKcMV9F109TOmvoWdwPszMp+KzQo9Afwt7StXrMkmPnmPV4BYC3Le06QiBo2w7NssgAYHjtz4GkJfGDb0GDPgmgYCdYNt2YhrZm7jg1ek54AHY4TnMt34XZfFeEeb2DZsgFn8OiE51WvAABYZ5ACcJyxXxpq+arj7I/ADPq3P65kNcLsI7aKUH5mPkZCHQfyE/MAHjZU/BlAMycbZ21GAlpWhEC94FdGQAMtmYC4eeh0666TqMfxEHjIA7t27cf2v02QEMrDqnBiimv5yi09pfmp8yw66wWIGncmvF9t1w8/bT5OD4tFoYg54WkY6vyI3if27AmRrU2IHgO0P4FAlvqI4CxgOGU3G9Lvj6APXoLBONcD/M5EmtEcwQyAMhWIiQ2bz68xBg4p/PoqGnWA2yIZq7jsD4iJh6JsEt4z5uWriFlBDP2AA42Y9uxmLyHLdlSm+HEdfNxcHUd6OZMCWdAITgOAjEH8PgYQDAq4ovDRly/hRfho6cJt2n78YL5hB+3Hy71+id2Pw26lZLH0EGgeRtvb8QMACYMADjK6SDMfZdF9xSEjZ12yzDxP4BZSxM7L4e9Jf68sxLOm4//n4e2SvN8DkLYF6A1T4ive8h8g0hdj+Jz6DJcNT+umpOHXQjsc7lOpixzfNk8wIBViqNY6wAUZ9G8DVN9v/WuDSCgkfxjNIXumnMlnrb+vRVU+LVqc8rG0xcxA4AJ9P9pTnNmnJv3/polG0iSXX8aWuef7f44J6b3zluyA88KyMC7EOYl+MGvgEvot/Lmx0udgJaeCayLZpe/m4YL4q7/Cwg824rRB86Lhl3B51DwWPg0KgCgMNMKcO7Gf7PuQ0FJ2q2an9fAKjpyFkds66j1Xi7FjPmhnDPC27QzAPjmLmoUFv0489+x8K/32UN3cH+MA/W2+XFbrCC7DZ+XHYjYsMP93t98/fpTWBj9Dm0RGv+4+erCZgph4yCQg/iepb+bALInYc1cgna+gs96CPddttGz0xXsixO+n+Ge3rTuUQG2Q2dItCo8BvezJQRmmmc9I4QiKzozAPgGL2b+HYTG1NLafssJ9hs4yH8NbX/bfH45s8yY7smWYf8mxOGz1rnnnfv5Bfz+o+azBdOuJn5/xnwNPjP9jpmfITgFd8YJG9OZ58yPBxv1Ynm0u+e/B+j80LYW15C049gtVtAxM7EInuKa+enC/cCUiVgzwvns5BCYDAD2gOm/HwJ8Emb2GTH10y7HRP/516//bn5yLnvekROoysHmrHlHxJ2DxcF89pb87Dauj8U4g3bJZcIJ38PMzwykz88SZKYbs0tObKPtCajXxIEXRVhPD4NzMEvWLmhSDMtqmR0ZwXpxdfKnLf0gl7wlOzdNPaiHOwOA3otjudmp9iGY2ieGPBTOnP+R+ZJN+qtN0VoMPzUEKNzv/9Y828+U0CKu76FAK6YFAC11Zs+AS7i2qzgfB0BokgTNWbIn4E6Zxk3ctxNAlzr9v75+/QX2v9FBc2vSVVXuy133O+ACfmDJfoed9qMhQMooQC4DgG+m8B/AwTmGg+cY5RfhG08PySW8bL7t1qqY/fXgIDN3gEMll83XH8wCCPbjNUwdPouJNBPuW3ApqtDAF2EVkLwkQKmpvZOraj7JyUVGfgmw04EZLFnWWYgNAVTm//9vXPfr5lOs2wFotnH/1y3ZJMQyAPhmLc5tdz7/URy6Z+GHnt2mRnDWxDM40Frbr2m2rPVuCgiUBQBY1VYQjZx2Yi5j3NfxYuiwBcD7d+YnCjPNmDHxliW7Ce/GWocFsgBe5HFYUrxX+ulslKJAUMP1U8D/zu6HGF+CS7AgFsQaSE5WAGpDD4YGwy7OmpffsO2PQs8AYIIIv31iAZyGYDw2os94FFpoWoS4EyFVs2R1G2fYM9xVMt9glLn6dbEqosBnZjPPj4XUq+A9mM58Bn/7PgCCZOX6mJ4HS6mXIKA/BTCflj1ZENKuKBYRAXTdfLm1A9IvwOkcFhlQ/oAVgEwlPmi+TXzoEqi7xv7/Ndu9mZEZAIx4cewy68cXoHXOjfAzmDmo2qSb9qZLwBAkW3ItgBhbsGTnnkX48Z8GLgMZ/0+hBas43HEHgTuFa/wt3ssd/E49A3ZrsVpwCSa6c6FOmi9iOiYEqXY5VgFlVV9T3k87LDF7kG4YE4k4QCWyZBt33a9wsAw7AVcm3SLIAGCrj14Ss3JauIBR7lW7g7aPe/jqai3Q/J+3ZGw8lsPrNNjvITAFMd+ZpdgQUu+wJSfJUkic1nvekt12x6XZWCzEuXofAghfMp8Dccz89CL6/kwO4p6zhl477TSDZ875fpGY/vstWQzVFrJWXQA27yCwsI1785sEAFEXk7YdmKOTuh/h5B4z3y13VOEgToZVvzHuYS0cMd9tNhZtVMahPy7vQb91Af5szbbWkMdCJB7rIXT8HbpEbHE9LivAEaHMVPwFBPVp3MNZ7GlbrCFqYU27Vq1N94rFUiymMnx9UM4C265zlFo1IBu16Eq7OE8BCGoPKgDkZZOmAj9JiRJlthuWvmPqbu9HITgojLdfgiuw3dWE/80CnH7ttJh2/CUO9F1o7VgOY9gAg65AUczQsOddQSyJuAsXwqEXWgi1MabnxsxFujQsw3Z78hyAgNfKUeccmU2rICf3UpLf41AVAsAsQOWkkK5NWB8fg0NYtmT4NhYCWQd88DzpRKA9DwD5wGyiH6V965XZbgVESUU02qTUXEcdhJ/XfAf+sNMIh7b5OZ/BD18XLdKLPa5iXw+aT9D5CqCwT/YyJ6bvw/DZFy3Z7VYtALaYrpkfhWZiXdCNoFYtCm8xLpO2gmdRFCXTxDU6AHgDloAT0stwGdbMl2QrQJLrOWh+KOoMwFWLuxgKZCfhQ3gvFk6Fff/z4jpYYPXemzRLYFAAYOvmefFzZsVf7hSS0UGJHJzAoQkbYlaOGwhylmTOCVqMw1+A0P17S1+vHy7HYv+T3U9NJQD0q1JjDsAj+LckWmyfsNwm1pY7xM+ar22vytfa5cbt+++gQRkbZ43CJ+ZLfWkZsa1W1QYYQDnCFeNeb1kydk9T3LVRc01SHsXzugSwZOai5gWUhOTlWXbh0GeE/Os0+s1ZCo8BHMkpsIozEiuYnAGfE/er00i5iQeAgvkGGCShZi1ZNKG+ImvR2XyRrOttbMCq+am28+ZLUctj3JxITDc1O+vyoC/ADTjZheO4h/dZDMCEXYB+CoFbCgCg18gn97ppPn9gFhrrMPaX4cJCQAQ6kHpB3I4WBOdjYfQ3zHe/JdFZFXM1CogxAg7DbddstE1B0hKoyx1cSzYt+b75HgjP4EwxZZoA2BRLgAJ7AFbEvHXveMTPZMUlFYTO78tbMhwZiVvRFFemtRcAgAdgPzaI4aeZQOvP4mdO6F80H+cuygEkcp8Het40H2NWAoWlneOwAHRSbxiey8kD7bbWcI86NqpqPsHkIn7OjsH1Hua/atwI+3QU5v1hOYA06/cJoNC6UpO+APPY7fP/E1DjPMAvAyAsBBYeQ4YF8wVCDvDfHwNot0WIGuKqUSC/B5Bm56Zjlhy7vmR+wChDfg8Hwh/3kAnlh+iCkWzNi9tGIAhBgOnG8SQDAEc2syKMXWVmA+ScEqLkHDY/XFPwtQ7iED4DbXjZkrPv+L7LYyCblLjRHnqMDDgQfMm6d+rhaC6naa6bD5utCXt9W+5NhT+MnBQsORaM3XzW8B7cp7ocJJqZbA4a+p+0DpwwPInf2TBfhNQMgC4nz/YY7m3efHlt03zV3DisNt4r3UvyS2WALPspzMo5Zbx/M4iKFMRn75f+yzJjWhObQjQSAGo4z40OIEAXujYJfEChx2HmtJuj5oddzpmPhdK3z0no5WiKz5wGALiN+McujKmG33YLBDSnPCeHYg5C/0fwq3stt2enQdSVRRjv4f+WRVs0Zd80G1DbWM+Kn0pfNcYBv2e+hmAZfz8PzdhrqEYbPmwYhYhEw7PpiQO9M3heHFW9ar6HYLdR5bvJCWxYMga/jr25imt33MlDQnoumS/GIgC7r29A0eV6mOc8q9cAxGUhs6uWDEGGBV5F4dGmhWdoTRoARBJ6cqTIEWwMTVFFXLZdZlx5EE1wFhaDTjTJBX54bLs3lSUKhL8o/rbrTfftlO/DcuGb5gdVLkMwGZem358LoiX87Ck5JHxp81GOnV4Sks8BxGv4bGqybn4s24obOIGSaCNqfTYcfQJ/c8N8mvEyrvmqTUZoi+PAKmJx3YHrtd989+aCWAFTQiKSV6gD5KcD10wHcX4A65VNUcsSCdDR7prfoc1L8wLulTG5uz0BgNlhx8T0m5MwTFlMHgIAU1W/grZIux4yP+V1VpjUnCUztWq7pE34sAsiCKdFWNKuk/h7AsCamNyNAPAKlszVL4qW0Pz2nAAvR17dAtAs41qXAVRPwN0qWbITjh7IKfA1iyA3WQI7BxA7az7k9RsIU0Osj00bX31AL5dAh4Myz4F7yPHt+81Xc1bFf78Bt/RZPPeSmPzu91wxkist/hQAsGpbx8XHARhEAdCrhTdtY45+FTp8T4b5MDZrH26AITuy9QoATC29gDDMQsrP15JaImMsxCFNu3u7YCq1AxDQppKHB3yvaTGR1wQENgLWPxdYH3nxVafk0LREW1TFzL1rfhyYe+/PIaAfwG05an5isTa5nBWf9GkQYEu4liNC+N0BYXseZm9Znk3dJjOrsyl7zVZrBNRjAoAz+F2G8ejWfAXAY81FCXt6GxbPHbzvvT4uUNuSpd0NeZ45sfLGOnwkBACOtiJhx062nGRzz3x+s5qMbML4GQ7hyyk//5b5yqtG4IPuE21HP2unAUBJuTwOyekh34v99XhYViw5oy4Sczx0fzR/oiauVVMIqGUIpAIjk5bczy6JBaFCMAtA43OeE03YFOtuGdbFDbzniu2tUtdWYGIzIlC1ZF7Kmm2dKHQNoKeJbExgo+WzKcRfGutSCcecgH1hUgBgynxK5H4h/Coi/MvYsPVAYBuiUX4GP/RQCqTmVBsdwEgykGwpW13tZPcZs2St+3aHQqwLuC3h61VxL7SiLOQ8osAC2pTrY4egspit3fa2KfyJgosy0cx+ywvgNMTXLwtpudcXAXDaktOcNgP3LJwUFHfQ5MwNaXfhkvLiyimxHQWEYl64iHjcAFAUgZvBz+qibUhk0c+qCwDUhcT6NW7qL3qAgNtQ16eN7bAJKFMBSTMjJNjaDhNObUuGkxgnv2PphlUq2n9kPkmGSU+btrXNlEYeosACyAXaQw9ePMS9tYUwK1syqzAfaKmGpe+jvxdWTjiVWXFb+awJdtpQNORNNIqibqsCbFgXo7UlU5ZMkc/Lz3PjigYUBLW4Oex8QrNnVXzYddmoutx83ZJx1X/BoXdps69acjiFE4Sf2/1qLg5hZMFK0ZIJJ1OWzBPYacZZa7rLuIfzINbS8hoO0H4JX/JuYPrHokU0ySjq4BpYcABHLYy0Er4JKyfKpWTJBqf14LnXe1h/KujK0yhvU7RkKnCYTBYFABL+31gAIBeYLG0RglD4NwMtpLXR2p2V/eTfAxG1iE2/CRb1jvixDbmGOBCIYmC27bQbsGHJJBwHAL8DkOX7/L0T9r/B79/EPa52OUyxPeD95iYMAAq2Nc9Eibp6SkZeKyM1U3I2eJmAvXZ+bloyB2QiACAS04SmcEsIkrKQHp1MUCZT6GaSOLxmvpNtW8gU+pd1IcO066xm5BFZd2NAA7P39DP/HsL9OviRcG2AIf4HWDbunq+bz5rL1vhX1EHgYks29ugHyIwMzQtX5gjVU+C9zprPemVa+wW8bgnBygzMsQp/CAAq/BXR4prpVOuzSQ1hpmv4esaS8WhFW5IuDLvFHfwojcsXbOfTTmNLdo2hr+jCQC7C8RQeMMNIHO31MSyem3jYd+0BHy29x1bcxeoK+yb2kpVZ8+nxx3EWnFJ4xnztSxxYsU/C0n0PluFd8/MUxt5uvBAQRQ3zbDuZ4Ipo/jTajOEXgsCmJUNbnTqoUvsTCDjeWjPkdrM/u6aYErGXodXfMd+Oq2E+3LeC32F8ODPvJ2dpByDN0utU9NXNemBmpgN/lzfh8l1+Au0fi+vbScZc/sGP8Pe/EOUYTQoAUNMxNqpxUm19NIgv3RAg0f8Pza1IroMxUb40iy2XwgcfNQiwcqwMwSZJWpSDpRVhFXuAR0nvcQCg1cn6h8i2Fn91C8dpborT/i4z1A0tPWr9O1vxvLv3cPkxV3CWCsHPxwoAYWfTvGi/uiXTV9MQLmE7sF7NI8L4s5ImU4F5Fo3p8DChZCWwRMIuO9maXACoCVCXLFmFqZxTu4vvzwIplyb9BoR/kEIo9lh0GYbnLdnPIB43ANAnodbPixWQJilGK/nC4QytFACigqQJF9rrTk22cW1YKyP19uxiqfC6+VC3nl3tnhz2T9TiLCfAjw9xDlh/sa/DOW9PCgBURZA1I866CJ5mPGk/wCjwizS5pt3HVGoHYKCjq7LQWbaGXTXztRkMLbesM8ncCmRkSv7mkCVrVtIuygRHmatMjJ0DMEu2v8pbMr5vHfxxVjSFs9Sn5HfZoUXz+bv5yaHLQNImZ9+QOW3Z2nHrbQ3ntABtHpZhF8UkV/K5IK7tnCXnMaRdefBJX1iyvXhjkgCAIa9ioG21nDEXmETOpFk03y6MtdcsiGE1HF9sV1UXEz/q4FvHIvStDACyNYLFMmpyXEU5g3kBAZ49bdZCsGDh0CBWAM+1q6y8aL6idsMmqCFILH63Fi6EgydZJTdvvg+gI0RcvNOVlj5qfgSzE34XOnO58S4Zgn0AmRuvTTHDHHkTlNXoQbayNeyiCc5CoBlLdrQiCBAANEGOZPU1nOFHUprvfF9X+OZCgDfMV9VWxr0hYTmw1i0XghvQajKOpj6KjXA5/39i92vJO60/sPs16j8HGLA3HusKWnI9mqoZB9ZJRsBlaxSuwAqEed58s5W28AFq/ebFpWVC2LvmuzI3evj8JBUd6/9/7X6y2E3zo+FbkwYATAZSs0c1Mv1+Z/a7hAjHiL759es/AU27LZcI8Zbdr6pzfQBdV1rGQ7XUVzvv5uSaWpYx8Nka3WLTkLr5TFXV2IUAAAgcNQjuv8H6/R5AJLJkBiCnMLuM0PcAGBeh/W/bBA0IieI47gQK7PxLRj8KtP8BCL8rkPkr800l0qwKNsQVzVzCZnCiq1YBFsVUY/nqvcwNyNaIF5VasQMPpT0i2UxlAcrPWb8uHOiSgjgnYMp8VuiX0PyXROiX8LOJGRFW6GIiNSyZHKF9zOj/cwbA3ICf6f7+D/E5fyvuBgmRKDC7lJzMhD9bo15aFhyOtdNpwEyMY1i6AoE+H7gSG+Ljs4qWX5cnzYotdCFK6uY70OZsa7+6GQDAo9v4bMcbfCGCHdnWSkNufN2yFNts7dzimW9aMicgH4CAZswyPbzQRVkx/E2yeyLPb6EHUVITKyAO/COaRNuZLuwsBze84bL53moc26Q+PxOU6tk5zdYOr7YAQd6SOQCcwRCS4mZbuynpa6JD170EuGbJDihtS5ZUtm37xTmOFGRHWmYJEgyo+ZmHn5n/2dpNIKD12WlUXKdW6yofe2b10+BVSzblYHZeAz7NNRAiw655EChfmG+PXA98rkqm/bM1ZvfggU1Ay6W4+U3RwhXxbVxjg4+2uTk5S/ZPs0D46UNl4b9sZWsMFgBBgDP6NGfaEYG/gxn/ypCfTzKlKa+6JRtzZto/W9kaIwCoJaCVgYwK/J3dJwSfG+LzHQF4xXzXIS0c4hy9LP8/W9kaMwAQBCiQTdtatfenAIG0eQGOQ3AZgS41UmOmnKNXtoz4y1a2JgYAuKqWJAMZpnMxUTft1yX5OGZ/X5e/dxrekYdudoCrD7hjvn++Vgxmfn+2srXDq1MqcOq/henP1Ej3OgzhdwlCLk3S1QAsmk/ycem8jvG/aL4ykCPHOEGHnEC2spWtCQYALscFMEd6vyV7AyzCJWCHIZ1tpymSfG1mZn+2srW3AEDdCR06OYfvWWShQxYZ4mNThHDGerayla09BgBqEbBHIOfRa/dhphnzNfHpktnKVgYAw61OM+8JApnQZytbY17/X4ABAAqHLtfVaWeUAAAAAElFTkSuQmCC",minimumSpeed:22,maximumSpeed:25,minimumParticleLife:3.5,maximumParticleLife:4,emissionRate:15,radius:1,color:[{startAge:0,endAge:.7,startColor:1,endColor:.2},{startAge:.7,endAge:1,startColor:.2,endColor:0}],scale:[{startAge:0,endAge:.4,startScale:.1,endScale:.66},{startAge:.4,endAge:1,startScale:.66,endScale:3.5}],applyGravity:t.CONST_G,randomXY:.08},{baseScale:110,imageUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkRFNDI0RkQ0QjhCOTExRTk5MjFDQjVFNDRCRjVFQUUxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkRFNDI0RkQ1QjhCOTExRTk5MjFDQjVFNDRCRjVFQUUxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6REU0MjRGRDJCOEI5MTFFOTkyMUNCNUU0NEJGNUVBRTEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6REU0MjRGRDNCOEI5MTFFOTkyMUNCNUU0NEJGNUVBRTEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz58WpwXAALwJUlEQVR42uy9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",minimumSpeed:23,maximumSpeed:24,minimumParticleLife:1.2,maximumParticleLife:1.8,emissionRate:1,radius:.5,color:[{startAge:0,endAge:.8,startColor:1,endColor:.8},{startAge:.8,endAge:1,startColor:.8,endColor:0}],scale:[{startAge:0,endAge:1,startScale:.3,endScale:1}],applyGravity:t.CONST_G,randomFrameNumber:!0,repeatX:.3,randomXY:.04},{baseScale:120,imageUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWMAAAIACAYAAABXSg2IAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4MGY1YmUwOS04N2QwLTQ1NGMtYWQ4MC0zN2RjNDcxZDg0MDUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEZBRkU2QjBDRUMyMTFFOUI5QjA4MUU4QTg4ODRGRjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MEZBRkU2QUZDRUMyMTFFOUI5QjA4MUU4QTg4ODRGRjMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDphZjA5NGQ2OS0yNDVlLWM5NGQtOWMwNi1kYzJhODI3NzgxZWIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDoyZDc5MjEzYS0xNjE5LTExZTktYWE3NS1hN2Y2OTgxZWJjMTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5JuiyaAALrx0lEQVR42uy9B5RcxZm+Pzn25OnJOWtmNBoJiSQssAGTwQQbG7xe44jzn5+9Xse1jO21WefFuxgcsLGxzeKEyRmBEMqanKcnp+7pnpzT/3mHvpxZVggJZanqnD7dfW/dqrq3+z713qqvvs93aWnJx6STOzU0NPi43W4ff39/czFOgqR7LjAw0KewsNC+uLgYPTQ01NzT03PA38+6T319fY9Lm+fn530yMzN90tPTzQ94lFKAuQQnfxofH/fhhjYwPkkSAPaJi4vzGR4evg4Inw/gPj0yMuKxQKt3wVfvyqtXQEDA8jZ91u98rEWUYJyYmGh+PANjkw6UdNP6+fktv0w6OX6viYkJqeOHAXH72NjYaEhIyPK+mZmZ5f16CYA2m21ZjQYHB68HyMNtbW0tg4ODy8r6WCb9t46XKjcwNskkk44ajOfm5nyqq6t7Q0NDe7Ozs8MzMzM/BXibent7H+/r61vOl5KS4pOTk1PW0dHx7dbW1g1BQUET69atuxYgV/f39y/D2jwNnTrJSCmTTDpOQJ6dnfWJjIz0XVhY+ATq+FyAezsALtOQRHh4uE9GRsb5FRUVj6KiW8n3YGdnZ+7WrVtf5PM3165dW6QxXI5dHrqwVKuZAzIwNskkk95CQhmHdnd3n5ubm/u5sLCwx6ampvIEYzb7OJ3O9wFbV0JCwm8mJydXJycn18fHxz/e3Nz8Tzt37txtt9vfhXJeHsooLi6OLCwsjD4e48kmGRibZNIhJUFKSlJJavJ4Q8s7XDGVlJRUVVlZ+Svacx4Q7lEbNSkLbO8JDg4OcTgcj6KYn4uNjf0EwL4HZfwPgD3Q2Nh4O+/fO/PMMxMGBwdvBNgfQk2/do4mnWRPS6YXPfnTnj17fAYGBsz44ZuAGLD5ZGVlhQOwAj8/vy5gNqihguM5MaW6i4qKJIreFRgYOOXxeB7v6OhY3oci9kExr+/p6fkwv617eno6AuW8ClDbyTvDOeX39fXFpqen78nMzPxP9uUC7J2tra2PDg8PH9EJXY1Po7x98vLyzJ/pKCUzgWfSaZGkhIFWCPD7YGdn581xcXGdqM33Aq5ls7Hj2a6amprF8PDwv+ozQH2tU3U6nT4AeHdERMRutvlGRUUloKKTUMBXNTc3f2poaCg2Pj6+H/CW0tG8b2JiIhFoFtpstkdl6miSgbFJJp1wSSoR6CahhCMAX9Xo6GhZdHT0Iavr/anow1mQoWMEX0FYaeXTjT6PjY350FbVsUTeAbYNFBQUVJaWlrrq6ur+lWzhISEhIy0tLZeqLMDtsczkLNhbdsq6BlK4xgTyBP2Pmktg0umQNI46NzfXA7BsKMkLANZAWFhYxMEM7ehYL8z3Ox6ryTbZ/R7OkJ9lW7y/TkRtVN3W5BwQ9unr67t7w4YNl1OvP7COF6AjIyPnUfwvyGzOAjFw9ikpKbGtXr26iFcZ+YLM0KSBsUkmHVdl7Ha754DXS0FBQf3j4+NreS94MxgLvrL3RYmuWbVq1QUrJ8j0np6eHpadnX0tkMuUIj3aoFP5Wr1Hu/1RuQ35+fnfBbid3d3deXQu3aj+B10u12ur9zIzMwNHRkb+tGPHjupXXnllL3muldmcyrFeVl6TDIxNOo2TtbzXWgJ8tJLKl/8OAPwUX2ejo6Of5fue6enpZajq8V3vKy0urBVwwPb8lpaWhxwOx31JSUlnSKVqn9rO/gBgdx2f11D2UYWatz5N6l1Ap/ITvqfT3h/SSfwbQJ6KiYlpBbSdWrYspa78dDoLXN9RzuFvsqJDNQfoHKWe1V6OTeGVIcAbIB/fZMaMTTpuSUAAIFKXRXx1Nzc3u7TtSFg3rBzH1WcBPy8vL5zvBYBrK2r34d7e3tcc3whebI/hY9zExESLJvb0iF9cXOzT1NT0Q457hjLGSBegNvcAvVC2haO4kzmHpwB0YFZWVnB9ff2MLDSOxrisziM2Ntanp6fnX/g8QltWDQ8Pd8XHx2+n/XO08x3A9wU6jG2c19f37ds3ToezSLse6e/vvyw5OfmHkZGRjwrCstQgnzqej5EnGRh/bnBwcNr8Kw2MTToNFbHUWE5OTiAw2IBS1SO0SyZZhwtjQYuyltWrfD0oRUVFybTtCoD1CcAV09DQcAnvIyEhIS62OycnJ3OAXB4qN2f16tVf3bBhw39y/Nm07Tr2JQK8B4DVu3ldhTJtqq6u3kw9Nrbf5XK5ioCkL6r14pKSkn+pqKgYO1rXTRN9qampj6DUP5WWlhakIQkUbzMdx18A6ztGR0dLyRZB2xbpSL5PW/rZ9weZwXHOH+P9bK57Ldc/nGuzgIp+WLbMlDNr/pXHN/lv3rzZXIWTPMmXgRzPnCyz5NbEUn5+/gUo0Hunp6fz7Ha7A0XZBAwP6zw0xFBQUOBHedcBHT/KdAlg2o4S7EMVZlDH+qGhoUIU7cNOp/OC9vb2a8gXyzEPA+AYruf1wDyP7Z/hOBuvMMCVRvGlHO/o6uq6pKOj4xw6kieAWzudx1Y6k79wXuV8P5d8z2nRxpH+PVQeHYMm83ZzLvcPDAxU8x5KXd9GJRdTd6g6FtrjpC12OoeX2eZk28e3bNnyfeD9POe7Dii/RzbXqOWrafdjnO9zbF860Pi5fjM6nmVlbtLRSWbM2KTjAmPAp07ko6i6J4DGX1B63+RGzzscgEkRa0wVtXsDoPns3NxcIrAJ0z4NHdTW1nq8q9cCAHE7HVgucB1i21R4eLgL4Gayy8nnl1Ho48Drg7TzdlT1NvZt4pVM3ofZ31JYWPgPlHUTELyaOoM0OQjMfk+ehKPZKeqpgc7AZ9++fSMa0qGjeBd1Z1F3Mp/V/rHk5OQXU1JSPtPb21tNhxTK08DnALYv5/Ii+/to/wLnLSdFfZQ3po5KLzORZ2Bs0un2pwNWGo4AGn8EDnz106RSP+8zhzs84XX1GITyLQPA7wRSS9Z2DVmwbRglHgyMHx8cHLyE72lAtQdQ7Qa0TbSnlWO0JDkSRb3O4/F8hUf4S1GOCWwLbGtru4fyU9LT0z+Ewq5Amf4a0N1I+THAMYayuo62RYUUrF4a8wWeGtNx0iloNe14Xl7e12jnt2pqapr0xMS2KM6rb9OmTXdyPhqaKKaNi+Q/j05rO8f7q2Okc4ldtWpVljozA+Tjk8yYsUnHTA2vVIxATo/bj6Dg9gKGSzIzM78D9Los64q3CnkND4yOjj5YXFw8STlNra2tU1a9Xh/Ai2FhYY/QGWQA1QCUYxOAWqLuYq1s01grj/ADWppMZ/FdgCsLiriCgoLraWcKSruup6fnk0D5RwB9M/WFoDCvAsSfnZ+f30ZdvhEREb4o86NGZKnY1NRUXb8bHQ7HNzmPFpTudoD6C1Tzbk1M6lx1HWmXGxjvoF2tXPMyzuV5ngjW8t3DMWTv+hxlLdLeKzk3D2D+Dy0yMQtDDIxNOkVBDBBk85oA7AK6u7t7pYzlTwN12gsE7pWKW7kU+HAe4wHlDID8qx7jrRVnK1SzhhPa2Xcl6vaFhISEfwduqxoaGjajFFvJFwGMK8gbDYjna2trJ+RHGPD+WGVLXWdlZVVXVlZuBmLznMMViYmJf3K73RdTjmT4JOd6UVRU1NOWf4ij4ZidaxYBQFPpzP6TeicofwGILoNY1hKWgqbjmMvPz/8B7c6mc3mQtozSRo3Vf5PrfZGeCoC6Jz4+/g7ep7l2xseJgbFJp2rSzQ2IU1Fk1/BKAGI/Q6UNWqCWSn6jFWhvVSHLftj6bEHaa1nRR3vKgHEmML4NZfgy7ZF6HuWYULanA+E8VObPNTln2UCrjZYNMiDcnZaWVk/+M4C07IyvYF8zynojj/ldQPKmvLw8B+fqBnjD6miO9DJkTeRx7QJo7zSdw9O0b0Ar81ZGALF8JmusnPPw6PwBsqxYimhbISDflpOTc3NVVdWsnigsv8gmosdxuk+MNcXJn05kawprFh5IXMIj8g7Zu6I8G8PCwvp5JPbTgK4gcaTbvj+o6DvQmQdeO1Czj6AaX1H7aM8ZKNkKWVPweQhIP4K6/W5jY+PMyrIslSt/EUBsDDX8BSBXCWiDAdt95AlGKZ8HpEc0bg0ob0FtryVvPcCeUAdxpM4TFTubnZ09Sn2ltCOPTqFxaGhoyrqW1sIV64nAGsfOyMiI5Lx/gYpOJE88YN5GGZ06bqUifv21M9YUBsYmnQIw9t7AN3V3d29CqeUUFRXdC5wvAoyfBw6yLe4+Uos93gzQUooul2tkcHCwW8MIXj8OzYBSY9dNPOI/ybXcymP87MoIGq8vA3B107nIBWcSm6cp7x18TgWSvrJSoLwhADjldDrfBvTWAOS9qNdxKeTDPU8dL2VMHU5U/W42zXNOn+e6bkOJT2u4Jzc31x8VbKdzmdAYsLX4BfjKuuQsOonHaKtM30ISEhL2WddCJoeC8uvbaWBsYGzSSQ5jCwI81o+hvkpQnbfLYQ/w+ADg06N+GTf/i8dq0sgCjOX8R++qW4/pApygZF3LN4Km9skemmNaOH47m17RqjfOJ6e3t1e2u3/TOVGOIm/0Ab7HOed8tjuA9qIFt5URnw8V0FZQU8pbUIdGR3Aend0NmZmZS7y6KFsWIB8FyG3kcVn10FHMyLqC9rSxLVLLuNkm15zjPC14bDbb2UA3hGviWQlkHatVe1oxadJR+m8aD04nfzrRnctbPhXkoEaw04KDvLy8HICWChi6Ghoa2vUIf7KNVVqOdiywZmVlSXmub25uviosLOwh4AzfJwtRmzVut/s9dEh7Ojo6npKyLigosAmgXJOOzs7OekV8fiudkXeYRXX7Av1ygHwjEN3Armi+NwDZT1dVVQ1ZnaKcGZWXl+t3KBgaGvo0TwM30L4nyT9M/Sm0dwG1/Rjl/H7lAhzVI1M6+b0w6dD+9wfrqtVM4Jl01JNlcqaxVsvet6WlxYEic2j2/41AvNJ/8Bv5Ej7eqt8aS1b7gLDU6m6UaTeKeR3qM00r+FCZseyf0ERffn7+i+RfovO8r7W19WpA6CwtLd0ErFve6rUV3Kurq5c03IBKzujq6ioJDAzcQdvWUP8GAPyU5RBJQPV4PP/KdX+72qdLS7vOJM8Yr0Z+pwv5fboE+JVCTfUoIrV+L5MOLunJIjs728DYpBMPyCshpqEBS3ntD7KWORxsSQYKMrka0ljoiaqe1S5ZMghYTqezPz09/TFU0ToAt4H2u4HbMAD+NO+zcuGJEnYnJyfLOc8dgLKYp5qWt7rYQtCUlYSGEbx+j8d434PKTbUWiCiP2odyz965c+fXgW64OkeOc0VFRYXye8TQ1n3s/1tsbOwvBd3XK3VrAtOkt/a/NzA26aT8k3rHKP2Axuf42gY07kF5Lh3PEEkHk6yhovb2dg0f7AXKe1FGucAwq6enJ66+vv4LQHEC6D2IMi1g/7Oc0xZNnlnHWtE5DgZ+gqzsilFgqXQEm+ngwsLDw/cC101csxdQuU8JuuospNDYfrNW4lHvQ6j4TICdz7skcCDvZxUWFp5fV1c3pvHzQwXv4UQ8McnA2KQTGNaa7AIy93JzBwK3pZNJlVk+j1taWjRO21peXj6PUtZquP/p7u6+vrOz84NAcxwo/1WKVV7mNCGnJG928jKncWRtWwm31w/X6JqUlJSEyMyuoqLiI6ja3pycnDau2x0o9F7qWoa8hii8bYr2+mLWkvBX2LeopdxaeUjn95x8hCp+noYpDjVpPFplHwmLkdPyP28ugUknKow12VdbW9uImqwRIE62R2QBSQDUGDmKdSAzM/P7sG4eJTtut9udct+JSh0Fml9DkV7EK1B+IvLy8go5/DcANUSKeeXwheU03lLQgvbs7OzHKDc9Pj6+ESinAPZxYN+rKNPWNdO7riH5v3Heeed9HuV7Bsd3o5AfBMSBdAwO2rubYzNQ1L6HMmTijXgSnJ+ff3FxcXHy68ebTTIwNukUALJgdDJaWrx+6KK5uXkaKP8C2Mqx/deTkpK+xzlVA+QneK8aGBi4FED+FqC+C2gWjY6Ozsk/MYo6QmPnUptFRUWRq1evLtHYsCbtBEFdG8A5QdnxbG+TnTDlaeXf/4p6reuna7l3717l/VFGRsafx8fHz/V4PIXUGyHvdaTrAPh3gXHgocI0NDQ0mo7gc7TzAiusk0lmmMKkUyidKo+7lrVFamrqAwpgigLNB5wzqP901GoHWQaBawIK93rgLZEU2NfXd57NZnsPivPngFL2zKtaW1s/nJub+29cl34UqK8sMyivne3nA9FO1PcTQLhKsH6jaymH9NHR0WOo7GCO3QrszwXQOV1dXetp3z550SPb7KH8RrRvIDExUf6fx2Q5Y4YpDIxNMumE7VT00hiuEgq4GZXcClDLULFr2ZchX8nselQ+kePi4s4BjlcB1XZAdzMK+kLAnUWerQB6Vj6bge6onPygSNcB4j729QLyAY7fq6GR/U12WqaF1H8vSllAn6Su77a0tHwctfx3AD0NUBcPRdmqTNm5O53ONmtM28DYwNgkk07IZPmKsEz5FBwVhbqIOq5AJctL3L0a09U4Oak9ISGhPSkp6VHgum5kZKSosbHxC3KGv3HjxnuBqWyW5eMjCpX8T5RVQN7HPR7PhYD1+enp6fk3gqG1lLq+vr4BddwgMKPM8wC3rCouQyl3AvqQoKCgacvh/MEC+VR6kjEwNsmkUzBJLWqxhcaO5f3NcuZjhVHSY70FMsu8DZUptTmalpb2AtCcR/n+gXyXombXsFsWEJNs/6sc8o+Ojl48Pz+fpJBRcowPnJcOBMUVfp+X6wPGfdSzHdV+JTBuBMpvk0pXG6SujW3xsUnmKptk0lFWxIBOTnuuQwF/BCUbvnIIwAKwXiuhp+8CoR7/SVGzs7MaivheR0fHTXV1dXdlZGT8BJA/qujPWnLtcDguDQwMnKSOWivm34GGGlSXNYwhn81A/uHs7Ow7+epBoV+ek5OTymvZcZCZjDMwNsmkU0IVozZDx8bGShcXF3vlg/hQHuUFZY5RtOcAFLXGMF4AkLuCgoKGe3p6lCWcz3Kn+RDl1vE9ks95q1at0lDDm4LUGt+VPTRt/KXdbt9OB3BVc3OznPP/saCgoPRQTdVkFvdmnYFJBsYmmXRMk2Da19c3HhIS8lOg9mJnZ+fIoUJKwUMBZhcwPhM4PgYkg3p7e/9z48aN4TabLd/lcpWzLV72xQ0NDbe3trY+j0r+alZWVujB2AtbQJa1x/T09LbS0tJPoI4VHfu98tFswfVgnwRk2ibzO1mNmHh6BsYmmXRCJEFOy5Hr6upGAOX4obo6lYkaEN6GYv1TfHz830dGRl5JS0t7nHctr/53t9v9mcjIyGYgGD4/Px8EkGuoMxToXwaQM99o+bjldF4vC7ZaBUjnMcc+X47to94F4LyxsLCwQB7p3gysKkMQBuZnU9YP8vLyzpLPDANkA2OTTDoxbjKvBYXl4e1Qj0Wxznd3dz/b2NgIzxu07TmU9jaPx5PncDhuSU9P/zkQ/NXo6Gg56nsP4Px/1LUXCIbtz62qoKmVfKtXr7YBTpt8VshPcVlZWQEdx/3Ud0dSUtKLClBaXV19B3U8n5iYeLnGjw8EVtWVkZGRVVtbeydK3R9l/RXKSDP/gINLxprCJJO8gLJsZE9Ev9DycGcBfWBgQJ7WBlC/NwHNV9iXgoLNBtCTnEcqivYZDpkCnP6C7sooKoKpfEiUlJQEDw4OfpV9NkBbBcy3AOHvse3t7B+lzMt1HUJDQ5tQ1350Bregdh+TBcb+ksoV0MfHx99HGzoo74eU/SXKmFqpxq2nBZMMjE0yab8g0eO0IKXlxTLpOtH8J1uKWoDUCjqt5IuMjDyH78O03xcIXkXbFZ36SgUpJb9CKvlr6EHDJNZwhd6Li4tTALri4MkHxvT8/Hxsb2/vRwDoLvZv7e/vP2NoaCiJ8/elnvqgoKAuVHGjyjnQcIygb7PZ9pL/HW63+19zcnJ+3tTU5LausSYC1X5Zexgom2EKk0z6P4qYx3wfu91+KwB5ITY29rPAKvhEtgSQn4qenp6uzMzMHwNdWVDsBJY/ALxds7OzISjjy+hYwiYnJxUBO0xA1jGWT2PA/V7A7RsdHf0EeeyKCQss3cAWkZz4OyC/nWO0mm+JvCW8LwDZb6mTeqNhFm+wV7Xryezs7M/Fx8f/FBArwsnyfqnmVatWnU17/pn3CGO7bGBskkn/ByLAp4BH/n8KDw9/uL6+/jbU4Tukko8UkK0JMstP8eEmr4WGD23eSufxJwA7wuu+jIyMzYp6LR8XqFNFp66XR7g1a9YUatGJ2iBzN86zjfdB9p1FcS5A/oe4uLjPo4YVp3DqjDPOuJFtTwPgJvI2RkVFtXZ1dfm8WdBYKxpITU1NXWVlZYsWuFiKmfrtCvNEJxBFvtXyNmcm9swwhUkmvZa8wxHToaGhNTySK6hoAd9bZMVwJB6jBRxNfKFi4/hqc7lcHQLW4Y5L63gtCOGRvycnJ2ee92CU7rbe3t4b2Tep4QvOISA4OLhqcHDwlpSUlD0JCQkPsj14ZGRkEKXsZn+BHAUByTmgO4CafaCjo2M9oKxKTk6uAMCJdEpbgOceK8qKZeL2Ru23rDMsFS6XoPpM+S6216GeZynHoZWHZpjCwNikkxSalpI9UuVZahWF2AmI/wsobUAh3tHe3u6wIm0c6PiDcYqjMdqioqK0lpaWv6EKY0pLSz8MkLYcLoysujUMgLIfQMX+c09Pj51tWk0nW+YOYKjoz1sB8st0AB/jfC/l0Dm2twLhJwBuHVBOpY1p5J/jfAflDc7hcFzNfrfM3AD2ghwKAeplMzu9S+nK8f2B2q/rl5ubG0SeG1DIBcB8B2C+g/oiUPTDGps3QxUGxiadhCDWjatHbMu3sUBq3czW/kMpT8ouLe1VqyvFexseHq4CalVyyL6y7AMdr0dtQVWqcX/5VY4mBoHRF2SFgDr9DhBTROgtGl89HHWsY7Oysvxk6YDyDuQc3kuZ8k/Rx3X6I58H2OcAxMlAOpn2TU9MTFxF3f9D/ofHxsYE6yVe14aFhUXSrg/TEX2Fc/PQ1ltRzzdRjeAcyvmdQ2cVGhMTEwf8L0Vhb6Oe/zmQw3+vJUYC556UkZGxr7a29t/y8/NHUNvb5JvjRI1kbmBskkkHAJ8ed4uLi+2Ar5SbeHt9ff2UxkCBRykwWAREdRqfPFggq0wtF0bpfQswhJSVlX2jsrLSIyuF1/uIeKNHcRRuLB3De4Ddw42NjT0CzOuVouqRBQHl5qAK61HID6GQbzncsWhv1GHfkJCQLwDN81GqzSjfUq5HEwq5hbbsBsQ0b9qPz8Hk66Jj2Me2+7mWTwLqTkA5Q9sWyfM0r0QgnQGUZ+WCk+1yFhRFVU7yhnG+pRUVFd+hDF8Ne7B9Njo6+n+kyt/oWqkjAup9tKlBipoOopNt66lj2/58LZtkJvBMOsGTHnc17oiS+yfAUsL3NYmJiTLtKgfOXwEW30HhFhxSFN5XPZGtBybno+5yKeNKLeE9mDKsMWAg+CXU9EWALJP2+O1vubDKkzkYyvCXwC2vu7v7RmA4frjXxPtkIMfyuwCzhlQ6AG5HX1/fBr6PAloH5zhHPq2g6wWI/dS7C9DKX3EnYPRlfxnHZLBNnwfZ3kgnMa/2kl8O8Bs5Pgg13IYyLpdrzZKSko9ybB/K+MdvNu6tfZ2dnQtc48f4PMRv9Ax1/M44njfK2KSTNOnG1RJioLAD+MWjzDr0HegscHM/BZSiyRZ4qMqSVzVQ+RlADwXELxxKaCfBHCjN8Ph/rvwHs+mVN1LQMgeLj49/OCUlZTXtXs3nrzocjsMeouBpYJFr8bwCkKI0U2nPDZxHh54cgKyNurK5Xn3p6eldAHCJ71NcQ/qQkTRFpeb71Vw/J8cr6scvuB7PUg793UwQeSYo437Keh/nsJNrdDbnnE5n8j6g+lhHR0effoM3i9RtOdOnHa9Q3ivy1azOzMD4DX7XzZs3m6twkieZOR2qz4OTCcbeRQJdnJ/D4/GMaEiCm9oJXDTuWcn5d74+irL1qGwtRbbMy6wJNxTxDICo5PhqgOGxrAUOZohD48RAbktUVNRuvj/X3t4+abV1f0DWZBfgfAm4PQqIp49E9GS1Q+cMgCc4hxKAe0lSUtKP2DXF+VxN5zLL9eniNajFH7R1gXonOO9sYFxG/ZF0JNso45OKDh0WFvYgMF6y2WyCrN/o6Kg/ZcrBUSeAdnl9VuiYn+ocDrYzseIYWhOWpxOI9Z/TUnP56zDK2KRTYyzNG9aHpEfv5TFkjVcqgubrJ/NW3gjZ2dlyfpMGZLQseAzweNRxWeHkgaiyzh6szwgBUJOIRUVFYZR5Bp87XC6X29r3RhOJlkK0Jv6OBJCs8+a8ZmHmAmo2D+B9COX9H6mpqXcDUQ9tnAXKWXQ0SwC2A3BPR0ZGVmiSTj6LIyIi9tJJbEW9X0bn8uWqqiobx09wbRQpZJrXFB917bopqp+2f5j3ZI4fPpRzMGGYDvJ/bi6BSSfFI9zrHLAfyJJCkMrIyPAFPue3tLS8D2WWizq9DfB8uaCgINICxP6cuh8oqdzi4mIp3T9u3779RUB8Z2ho6A/Ly8uTtcpNY8kHar8e648klLwRooO4Biko4IbY2NgHeK8AnkMAOhZAx9ABBQBaJ23zk38L8kwC50Cuz6NjY2PRycnJ/+D6ZNFJXYt6dqsT07lQdiCfg4eHh6liYYhrFMi2RNp/plbTHaxLTZMMjE06zRPgtXs8no3r16//rUyreOy2NTc3XwIU8w7G6frrkx61FfkCGH0UtWnLzc39IyB+vL+//2zA90EgHZOYmJiWl5e3rLoFK+v9aDla95Y5DyQvApb9tKea8wwDrMmKg8fjsYs2tdBpTLEtjjzxbF+VlJRUDZz3cB3qyL8TCL/COdzA8VLR/kA6mPMMAOr1ivbM9lV8vxFw38m+Is49461cQ5PMMIVJp2GSmouLi5urqan5G4/vfjy2t6Wlpf2Z7Y1WDLqDTYIqAJJVx82U95U1a9a8n0f67wO2HKC/F0BlALNv8L47JSVlX35+fq1UaGRk5PJ4t6ClYZUjMVa8EsQargGqET09PRpe+BvbGqhDUT/GaUtAb29vCG3IQJGvAbo9XAdbampqA+0eoqPy1Ypp2R+z/w46m/cCZX+UdDiKOJZ3p9rKdZununGuWzrl/Zhyiqg3inI+2dbWZuyFDYxNMunAQxqAYi4rK+v7KNUXeNTeyOP5PwYGBhzysXAoQNRju8zeUJNrX3jhhd8D5JcbGxtvB67naAmxzWZzy8sZ0NtDvfnd3d1XAe67oqOjA6jrA0DyMYBXC+yqZQ4mu+Mj0NEsn+OqVatkqXADm6R6G2QxQT0LQDOM+mcKCwvH6BRWDw0NXVZaWvp9Oox2OqJphWvS5J9stVHVq+S1jfPs4dUlIMssjvOZlDMhzjOIz21hYWFTUt0c8yzQ38E1DNSqPfNvMzA2yaQDJgG3tbVVym4Xj9m7NHGnGX3LuuJQEkAP6ejouB0o1fLY/1Wg/lFUdyMgiwFgUYDvJcDU7HK5vix73/r6eo3jTgK5cAD8GZTqj1HldcBboDwsBzkCsSCKMk1Cda+hLTfSll8C4e1ypSkbYsXEoy0abggFrHtocwXnPsv3cI7Vux/HLmrsl8+b+JyQnJz8gkzbBGnKmdR5cewS20d5/wz1Tij2Hk1QHL9+3gO5jnNv1IFZQxgnso9oA2OTTDpWf+6AgOWxXsvpz1sBgo4BRKtQmIrOfEdnZ+cVQLmP12fZLsXdXFdX91kAqDHaLSjQf21qajobyGVrzFVx61DLWrDydqBZkZmZeV9LS8vMm7Vlf/6UvSvvNAl3Kar7/VLnKSkpP+Ac72FfMCp8QcuutcyZc5dfCJmzzbW3ty9pyETLt51O54c55ik6hmby+VHPiFQ87dtBniD1Y7z7Kn4dQI8H4jN8XqSsJZTyDOXZgW0ex1TSsU3uD8SqS17vlHhykIncglY3GosKA2OTTnOFfDgQEACBThPgakBdvzM4OLhNj+mA2A8gfUPjz7m5uYLrONB/2uPxzJMnDniXcZy8pu2TGRzbzwHYkzzu+x8MhGXRICVvnYPaIV8aALccNbyRzfHU30uZWxWzjnrm1Ra2LWq8GAjO0QnMA1I/u93um56eniD7Y8rsBpYeyvcD4n7KSyfTrpV7wJ3TDFwYHBzUQppZ8vTJpzGAvVtRO6hrL22Z4dxW0bHYqbN/5TJwgVg2tRkZGe+krDw+b6XOTwD/n9FJ1O5vybhJBsYmmXTQCVU3gSL9DEDZgKKsB341mpirra21ols86PXFsGxxwXcnEJTLzHpU7BO9vb3Z7Msjj0fDF29khaDtUvMlJSVy+H4eEH+msbFxTHVoSTgwttfU1HyQPDEA9RWVpYk2lGcQ+2SCtkC7MmXqBlS3ez3TLZLfFzX+Q4fDcVNRUdEdlLuDMrWceg6oygG8LSkpyaZFHhrm4NgpoLnI/nBe8ovspqy7UMaKIoLoDRmgHhibUq1JPMvDnXeRQzjb/iMiIuJ3WjHJteijLD9jefHmyZi2mWTSmwxTaMEJUKxDMf62tbV1Z319/STvk9ZEmhSsVJ+sG+TUHdgVyy5Xpm8AbGdmZuYXgd6zQD0fkOVoldv+4CSYyUUlZf2/6urqX1PGh2S7rBfqOwHIaew2iOPvJe9/AcRfo049Gp5A4fpqgQbQnwDUWpG4CCxDqNtO/iTaEZuXl/e1np6efwKSj9GOXPmlYLuH81ug7HygLa9vdraFycSNJoXwOVITebRhVItEoqKi4PHcDE8JmzjVD61ZsyZCk5LW+WhYRIoawN9CvYPw/XauVfWR8g9tYGySSafzTYLqk+8KKV/LVG3lRKA1FKIXANLkWLbyAat+ILkExPtRyH8Efkk84l+amJjoKzjtbyLPO0zhRgnv4KsbmEop5wG0X3o8nniA/wjAq3M6nUuAeYZ6LNWpVRgRQH+Utg3QEQT5yaXd4qJW59n53pWRkXGXHMcD64ckojVMobqAeSufFbLJF4jLuiIckE8D7An5OE5ISAjhXLKoJ5j6V7N9jRR8V1fX1XQwm+kogq3Vhf39/fLo9n7a/e7u7u4qWa/ouhkQGxibZNIRSdaS6TeCijeahQCrZcayQPAHcAKXfA4HoRD3xcTE3IKKbkZJphUUFCgG3f9aGGIt06aMnZTnSk9P/wvvH6ipqXlQQwWAtEKWG7RjnPdJADvLawEILnqXY4/29vbOaFgDAIfKvI3PHjkTog22qqqqXUB+O+3YDEQ7adMi7ZmmHllHLAL7DSjatYB4kmP8aUe4fB0D4BjOo4ZOZCvlPM0xV7B9UudFR/MuQK2I0q/5EaEeN22ulymf10Oe+QMdzFOYcRR08qdT2VHQyZQEJF6bgKITCCahNDMA2vMzMzO+QEoRM8YBdRsqezWvz2dnZ++RyZgsFwRyoOgPLBM5vhhYbkL9ruO3vRkI/gKA/1zRnymjl/2LWoyBCl8CoEuAVw5+/OVWE3D6Dg8PR8qrHNBctoqgDRMyRwOg84D4R0NDQ9NahCJ3lrJL1hAH7ZoD3t0oa2dnZ+fFKNp/RvFqAq+ecsb5b2kiz5/yBjivHM4phfb+kLIuUttJT2uhi+U7RCv0vJOfp+3/wTgKMsmk46ScNXYMrF4GpB9nk0tOevLy8vwBmy9Kc0HDBnLaA0i1aGJTW1vbXcBxG5sbgW0v+65tamq6UW4sUcHPsU0x+RyU9QxgU+QOeUvyJ1+AVhVq8DYpKWkOsPpzzCJQFIgDAeqEfBMDc9kcL1J/BGCoLCwsfJnPV8qSguMeZtuSxro5ZgmoztOuMRS7g32+fLdVVlb+ev369e+mo68EtGGUmYwSLqdz6B4YGLgtMzPzp3x+gm3n04nIrnmB46OUT30T32sdDsecEQkHlwyMTTLpCKkghVhCoU4BtziANKVHeZK8oNnkllLjt6Ojo4ECX0pKyh18/0ZLS8tm9k0C333kkyVEcFFR0ZfYXgrMNQm4nTJ62C9l6ov6XaLcOU2+AU+NG/sCdF8NTQDWBfIFUI62Lwq0Co2EMpuV+RvlRHmVawfl+qNw368JOaD6Ul1d3bIbUjqIWbbVZ2VlNQPzkqqqqt/k5+dfLFXe3d1dTtnvAOjn6Jwo+2wgfCfnFA9wzyovL6+i3X+l3gi+N+fk5HyDc2uxXJeaZIYpzDCFSUf/Rno1Jt1qlO2PAWO8LBuA2q80MTY+Pp4A+KQ8Z1HIi8BJKtIPID6Hmm1S2CNgJc9olYpMjQrNJ08Nn58HwPIn7EeeUMGZPBoj1gIMVSulrZVw8h8Ryb4iADql4QkU6wIKWcMmAbwWe3p6ZjWMglJu9ng8fdSrzmET7cgHpu8Cqv+g3uUZRZS9hlUWgfB2tm2g3HTKrOF9lpdCOjlpg78c1fPdybG7Ojs7/508m2hrJGXvVqgnOoCHNdF4uv4vzTCFSSYdh6QJNMA7Gxwc7AbEUXSO6cB4LCIiIp7H+EzA28O7VsUtq1kBlTwC8pOyWABe7cBMMMxCXYcDvCYgKTvfeeDmZpvcDMuUWMMcGiPWUmTBOVBx/Nh3KdD/MAC9vqOjYxZ1Lj/EAdQZCBAWaNcCnfaMxpTlTpO888D6XvJdAaD/yvZF8smGWACZA8gLDofDhWq+u7W19W0At5eOpBN1nEbdCkga09/f/yHarJV4Y4pETV1vi4yM3Kko26j3bq0ANPbFZpjCJJOOGYStKCIAtBGQDaM2XQoTBSTLUcSvaKmywCpn7eRfSk9Pn0NVyqxMY7pTgKyfPIoAMgnMKjXcwC4txNAQxxDvM1LTwFv+hX05NgBAR6COo2TaRicwBhDbKedH8iePKp4FlAK0v1bmKYKHJtToADTsoSao6nhZS6SkpPyhvb09kPIDNJSAag5OTk6WMp6S+qZOF/B+wO12p3Z1dYUBcC0ASdPiEi0Bp864+Ph4RXyu4/wTedcEZCftqzVPaoeWzNUyyaTDALFMt+S4p7y8PBSgvR+waYJsd0tLy5cAa7MCfJJGgdY00JpDYc7LAQ8gW5Jdr4oBglr3PA/0FNFZ48IhAHYCkLooS6vqghobG8OAsOx5NUEWpcUVAF755yhrmnzVCgHV1tYWpMk9wCufErLUmNZ+rXOWmR2dhJS54gcmoI7LaIOWdS/QpgX2x9PmVIC6RD5/b/DQGj5raOWjdCKTPHKPUne6lDHK/zHyhHLOmbR/BEVcSju2Z2RkfJ8yvy/vcMZBkFHGJpl09JUMyq+kpCQB+H22o6PjWo35AuavyGUnYBvi/QIA2aaIzHKeA6wWNAknCGvCTSpVwxVStppw43h/+ZYAwgLoVG9vb6BMzmS7m52dLZeWUsZzKNcJTahpgYeUL+pVQPaj3CC+Lzv1GRgYWMzMzNSYcpA3XNQ8nYHqWtAKQKBZo3Fg8gWrDnUKwHUEKI/pWJ2fhiw0pAKcs1C6g1lZWc6+vr5IytOCkAaO66fNz5NnLUr8RgWHpS3nA+wvVlVVLY9PmIk7A2OTTDrqqlg2vCjDG3l8vw6I/gmQvQzkWgBuOvD7C6p4ke/XA7/fkN8tsA0ODi7KJli2uN5Va7IZ1pBAoCbFOHbe5XJFUna6AC4TNcqdlQ2vfAoDugHqXHbywzGTCnbq9Q0hyEohK1K2HyBWPWHymEbbZH9sB9Z9ivJM/s+RZxv7Zd42L1M5LX8G9IuJiYnjKSkpsl1WBxDAtjVOpzOW7X+Q0vV4POcD8fXUM0D9FYowwmuY8kd1PrGxsb91u91L3mEb80cxMDbJpGMDZIDWJPUHHLXkuFSBPwHSi4AqLTU19ZXa2tqfo2Tb4OyDgFGLJpYXZkgVd3d3BwA1wXhxdHRUDnmCAZ2sDwKAYRJV5HGcE2D2AdQRIG1HvdrIN8T7KOX5yrsbL7nAFNi1JFpe28LlOQ61qkk6ORz6AFAtyMjIuE/DEkD1JlT3h1DxfyHfV8mvQHeaTFQEaA1P3EIbPRzTSHsCOY8nUcZa+JEyPz8/pjaRf5w6tSpQIZr6OYftAH0979Xy5WHGiw2MTTLpmCRr6S/K9MnCwsL3KS4em3e0tLTM5+TkKGpGIWDLBdatgDUBtSnYLQiaWvih4+XgB1UdHBMTI3eVE1rEofFiYDcPfJsBn1PKU+O/GuYFfE4FEeVzMGWEcdyMhitQoprQ0wIQrfITkOc03pyWljYGkMs0IYjK/i/admt6evpDQPm3Xo9vFYKw1yG9jpe5RqBM26jTTgdRhxKv4rPGtG2UM8VrnHY/x3ed30xERMQIbbqc9pTRnkbKqbdW4pl0iMNe5hKYZNJbB3JnZ6dPXV1dJV9f1vAEj/aRfX19U8DxMaCUCJwaUKNRQGwVcFwDuMOA6vLY8dKrdl9LXm9tc4Bviu9yzjMNvLuBZg3bh+XvB9hpXHiUPF2oz0nLebt3OCCAOuSvOBmAByj239DQUIjH45FZ219oZwXbOwB0Ne/tVNvKoXcD0ecU1QPlvqCFJHQsGq4IRxXvpLzwvLy8KY6ZlE20hkbIOwV8O3U8+WYA/BjnmsNxl1GXAp3Wkcdl+fA4msFYT8VkFn2cAsks+jh+SSAFnBo//nJ7e/s9gOedKOO/AWgP4Gxnfxqg+jCP+9c2Nzd/he8XA0vFldvpdDq1jNnX65ti2eEPwF3wLqgIQZnGAtVwxZoTLPksp0MKuTStz5SpIYJA1HCgN5LJBNsKgGMBx0ZwXBBtaQSIGk7oR6VrXPtF8u+j7kXasMh2qV4NTajaLD4nA9UG6uvgf3WDxp0Bv8MbqDSE9ibJqT31jCjiNmUn87+Ts/tEoF0sR/UcoyERqflhr9+KZb/Pp5taPtRFHwbGBsYmHUaS6pO/YUB2BYA8kxtQQjVTMeUGBgbk/awW4M3z+VIpZPKko6avREHXA8BqWTtoEYfL5QriNwwFWmFacad3gVeBQbmZxxX6CEAuS0yZv8lxD8faXrVSC5wsLy8fZ3+WVtFpnJf8TpVDmbLQ6JJ9MvkVmmmGzsGPfEFsZ/dEAO0JY/u0OgqAmUqZuzUcoeXb1OOifYOafKTcaNozTXucMq2jvDgpcs6d04xtletO0s0cW0K5lxYUFDTS1k9nZWXJIsMhU7nT6T9qYGxgbNIxTLrmchCUn59fC1BvjomJ2cX7OcDrPACXChRrUYo75P+ho6PjetSjnLELpkEo0D+jUIO0OEOjHoIyN28w+UN47weyY5pU0+SewKpVeBoTlqMf7289Bzxnc3NzJ4Dix7u7u79DGQqFpGETmasl0rZst9sdA3zjAWOqInTQtgHU+QwqfB2fQ+12+4Am7qhHzojaaP88n9WmMbYPafEH7ZZPYxvlncm7Ipa4afsaLQDhnJv5/22kzVV0TPJFMQWIZmjPrbW1tddzfhsB8m/6+/tnDIwP8F8yt5NJJh1e0iM4MFLwT9gZujsxMfHvTU1N1z7zzDM/BkZbUZ4/BVBpPLpv5dUGCHvJnwfkFJppHqAFaBGITNxQmeXA9EPyOaEoSDJhkzMfjhGIbXIUT+er1XXy0jYD8JcD5QFJxd57gu1ugDoICKYBn9vr9D5Fiz/I/wrb96rzkDMh6n877/cC9w9JtQL/Ycr3yLqDOrWIJYJtUsA23jVcEsp7RE9Pz52UeUFqaup26pxC7Z8lnxec08WAeSsgn+c8VP/kFVdccb4sMCjrbRqyMOPHb5yMNYVJJh2BhJp0oVB/1tzcfCuwsyuGnLYD4zIAVIZi/Czg1HK85Qk79kfwyJ+JctoJvOKAVbhCIMnLGcDr1aQd+5YUMBRFrZV3AVoSreEEwCxvcHIoL7Ua19vbmwJM6zluF8fIzlmAV8SNKY/HUwfEs6g/hmMWAGYIwFzguAxAupXjoqhDXuWWJxQB8YwiUNfV1cVyjEtWGtQ7CVzj5W+D42S7nB0bG7uBjuUFtUMdC3W2sj2W870dxX8/l+MDdEp/Y/siHUELx3WY0EtmmMIMU5h0VJMAo2XPwGkngCvQ+Gp6eroCgiZKLWsxht1u7+a9C8ApSnIyv1cMoLw4LS3NDyjvIp+WL88ANIoaG9T4sdPpjNREHcfIXM1fy6aBoCwpAtmfyO+e6na75Tt4SSvkgN2wxpPltY18WXz+Iu97AW09x3p4ySJDMfJWk+fbwFpDKH8eHBxcVstwMxhFfBXfQyirB/ArMOnyYhS2XUi9HXxP4vzO4DyfGRgYEGQzaPPlWjEI9JNR2f2Ulcl7uy4N57IxJyfnttbW1jbVcTrB2HhtM8mkY8xibjpZOSzV1NRo2OCThYWFPkDy3wVMbsQRANeAmn0OMGUAaDkAepR86ajPd5DvR2eddZYLVfuMVsHxkqpdtvuVL3rZAAM7+ZVYdk6PCg6XGtYkGYyUs/lRXlrBF0YZ8i8xDmyngGwH3+XOsx2gL5vMCQzyq8yx/ZTxJ4DbNkIiT4CCiqKYA+gg1gHw6aysrH3ANpHvNsrTRJ38XHhogkI/fZdz20M5asuw7KIBdD51VvM+PTw8fLXM88jvLisre2dlZeWAQGxW5BllbJSxSUdV/cg3sFbBSRHzeL6okEa5ubnNwCgGiEUC4j2jo6MCsUzXqtgmb2r9wCmcvAK24tlpQi2az63AzI/9MldTKCWbJtd4n9Mjv3xX8FtnasxXDuwFQ3l7A8Iuma+xb0Yr8QC4liQrhNKchgc4TmWEAEVFr56QWtbEnFYDeh3O5/J9jSYNqf/fyHMuZQ1TfiJt/wTtqyBfpxQw+5zU7eGzP+etpdB2wH3tmjVrPi/1rs4nJSXlrsTExF/19PS0AvTTEsRGGZtk0jFM6gC1wk2g1eSUfE4o9lt1dXUnqvAWhOeObdu2fUTLllHMvwFwZRzTDcCflt9f3bCNjY03rFu3rgYYhgO9LGDWxL48edikiiGN/coMTZN8gDKHfEERERHNqGu3xoEVfFRDGUA4HHUbrBBMtGNKK+HUHrvdHiCTO+qUa81IOS3WWC+AnOY9TMfx+hLHnZuamqp4e4/RTvmf2CCnRhrKSE5OflbKvKWlJVl+jWljUHd399s1pkKba2hfDbBXfL9ntdDD6XT6qBPQtTCK+OCSuUommXSYSRAGQq95KbPi4QlIQLI+MzMznl1Sq5s0CaYJOtkmw7FcwUpjtCjY9xQUFPwAZf1p7UdNPQjM2uWLmDyy040EpOUaykBp70V1DmqhBvuDFYkaZRpBvgRAOrdq1arWrq4uLbrwBdiBtENx8bRo42w4vJP8MxqKkI2xLCj4nED5fZRdQxla8CH1XjM3N+ciTyRtfU6BU2lbujofIPw2yuiUnTH1zSjytNxzUkY6T2kOWZfIdaYVUdskA2OTTDpm6fUTU4KRgKyAo/I9wasPBfwpIFvjXSZdBVDtKOD3aakxoFtD/jvl5D09Pf1u8iU7HA7BOFSrSHp7e3OpQ36KNf4aCWBDtUQaAMZrYg6oOgFuk8I6aVgAOAahhBc1AZiRkSG74SCK6aHOsNbW1jwgqyCly76N5RNZCzvktB6QalKulzZt0SRiSkpKlxS0rDlyc3P71QEAfi2DzgPE7Rz+Ltk1s79W6lvn7bUWMX8KA2OTTDox4KxhAsD6CHDMAsS3ooTjNPQgEAKyGwBfrLy4AUKNBwcAzrjVq1f/HBD/J8CVj4cAVOkSII0CtoqR10++Zc9qw8PDYZQVbrPZBqKjo2UyN6eJPqCtfUFaPu0dRhE8bdQ3LnM7AH8ux49Tt1OBUNlv0yo9vj8LqN0cMopKz5f1B/vdclKkcE+AP7ShoSEa4PdzTv2o+TPYn087z9ewCu2q49h6DU0YNWxgbJJJJ0wSkARCVGNvVlbW/8THx8tBTwiQ7HS73WcA5gRgNiU/EOTzAO4SPj+Tmpr6SWAoJ/BahecHyBUPL4zvigAiuRkEIGWPPAGg5+W5jX3zGicWvAVO9ikydKzi52l4RM5+BN3m5uYC73ENwFZDCxsA8VOaMJTvZGDtUnio7OzsFoVzkpc5lc0xgVq2TWcxqyXV/f39wfJXQTmXKxiqFoTw3gSY+72+lc0fwMDYJJNOjKRxZBSjD0o0CqhWohgrBColvv8d4NkB8vldXV1fB2RxKNwGKUuAZ1O4JCloIKmxZo3n6jBN5LkB+3JUEIDuS17ZGy8vpQbQvt5YeavYlwPc9wD+EUUCAbDBMr/LyclpIP8k8ByRMx+Xy5WP8q7gu+yQi1HWEcBWvop9kpOTFapp3htdxBd1HZiSkjIp0wtUsR8KuYf9VQD4HMXWY3OGJgXN8ISBsUkmnXAwBoILKFetlpPCXbAUo6JzyBStvLz8pb6+Pl8ti0aBJmrijuPOQ6U+AyiLOU7jxH2AtDc8PFxDETP19fWKBqLAoOOoaJm0BbW3t4cA30i5uuTYd5PvbGB6G9tcfNYyZg2FyDfyvCKCqG0Avgcw/0KRQGSaR91rZYaXl5f3S4Asv8vy+pPLNjks8i8qKhpJTEwcqKioSOL4CMqdpc3D1LcF4DdxDolWZ2OSgbFJJp0wSQpRdrzAdnnsdqV5l9ccTlAeAGZNPPYXJSQk9CmaNC+7hgQ4VupYAHWjeLtkZ6zJOA4P1iSfTNKAr79W+MkmGTWtSBwaMvgNdf1D7tj4nuR0OjXc4ObYAMpZVKRqlKwf7QrS5J2sIXJzc+dQyPdp6IT6NQwRyrEzKOtJxbUj/xe6u7s3kfc2Xg/LooN80RrHprx6ziMX1T50uq2wO+JDW+YSmGTS0QOy9drfPi3UAZCP8fgv95J2lGwm8PwEIFwPQAfJs+yLWGPBKGxBPZSXhjE0oRYO/KJIG4OCgu5AJWcqAjWKerqnp8cjH8cAcw7VOwWc01DG0SjdSJnK8Tmc/dlAVqZpS/v27UutrKyMA6oTLS0t8ajuWeqMVFw+OoszqVPQnyHf/Xa7/Rr2j1B2DGVcQhvPAvTvAdzjJhL0Yf5fjBelkz/t2bPHR3HHzM1w8qX09HSt0Crg9/v/Ghsbb9HEXVpa2g5eN3k8nl6+a4l0qFcRR8kJkPwXawmyIksDwUzey9j+IiBWiCZFlJ5i+7xW+gH5EIAbBkz9FNVZK/ooL4NyZxITEx1skzoO1D7F4FO5HDuqsnmF0kH8kPcambdxbDYvWYPIBC+U7T9h/4WoYllSDCUnJ19YU1MzbxZ5vJpkQ56ZmelTWlpqhilMMulET21tbT4o2aaysrKv9Pb2XjU8PCwPbGWozesA8g86OzujFS1E9sZAWKZnsmzIQg1rSbKT75Uo5T3yxhYfH6/FIWHkjQXkGsDVMQrp5ET1zqCk5eRH7jSH5MPYZrN5NMGHeg6ur69PAqw26hwaHR3NJJ9HUT04/ndSwmNjYw4UdTp5Cqg/RsugKf9ZypAz+3LAHENZq3ntE4TMcIUZpjDJpJMqSUVq/Hh6enocRdstkzJgqAUd1wBARQbR8mZFirbJFhnYOVGirfJnrFVveroFviEK90EZuW63W17UluSzAsXtAJLjQD4SuC5R11hMTEwr8O0Fxi7KCATaqXv37s3XWPKqVau0wOMKjrkDyK4jn8art8k9plbisc9FOQqWGqWl2Xx+HijfRaegibwdtHm1QkiZp20DY5NMOimThpf6+/vnc3Nzvw9sFbXDB0iWA8MNwFAKuBvwdrFvlH2akJtYt26dAozOAMpIXlEAOAF4L0VFRTWiZLuysrLs7C+mzM7Y2NgulGqwn5+fgB0oq4f29vYEp9NZghLPlo0xIJ7h+JuAefnc3Fwf7xFagg1gv6aVgTxuL7hcrjzgeyFlfRAQb6B9it9XI9ealN1Buc1GERsYm2TSyXsT+vkJvooY8o/s7OynvUupbcBvk+LeAT35Qu5TpA8gaGd7QVdX19uBbSrAlH+LEoAdr/FeYKvhhtXd3d1XANrLmpqaFL05RmBlnx3wuihTvocjNNSAUtbijdjq6upLqOOFkpKSzRz3PACvoN5QhYSSY3g5OAL4WcB3F/kfkRWHHBvRzlV0AAop9WnF6TMO5A/jKclcApNMOv5Jj/YDAwPzqNpX+vr6LgGSNUCxPCEhISAxMXFYwUwDAgIUdWMOCA+iXEPZ9jb5OdZCDy2p5vt2OffR5Bvw3AEUZzRBR/GamJuMiIgYVMRoLerIy8tr45hZQRxgF2dkZDwpO2fUcvbq1asfcjgc2fKnDJCfBeYLqN6ggoKCLZQ1xPes+Ph4BUBNamlp2awOg7Im2DelIRcDYwPj0zaZP/+J//u82Tiq8kxNTWmyrV1qNTo6+kXU8moUaB4vTaZpIm8cFTqBQtWQQzsq2snnL6JOz1Cg0aSkpDFU8e+1KEPwtdvtCk4aiJJWBFMtntOikHEtl0bVhgD0NXQAUt/5wHsvalp2zlQd7ZFJnJzUo8CdisE3NjZW0t/fL16Es7+dttwMiL9DOdF0HsGAflqdgFS+YG/+k4d+b55wMK6pqTGO0g8xKeSPuV4nZtL4rED8ZmaHymez2XyA65Uo3BgU6o0o1cH29vYzuR/k2jIU1TyGSlZoplDyj5FvMigoyMW2HzU3N38SkEaFhoY6gWifPLahrMNRsfGybkBN6w8S1tnZaUM9h7PNzn8mk20a6hgB5pu0mITynmf/LEp5DPjac3JyugHKetqzHuD+XSZtUttA/6aenp5E+VqWO0/KUhRpmbstw9ikV+cC6Ah9du3adcB8ul78ticejIeGhpa9XRm4HHzStTJK5MRVRsDOV4sr3uw/jUINGh0dtaOM/0gHe70iaaB65Yy+ScuZgatshAPT0tLcCrHU0dERiZJ+CnV7c3Jy8p3c0A8BUJm0LfX29iZyH0VpqIE8iq4UxSssNze3S/c/MA5CGTuBdz3tU3y8cgCfRYcgx/GywEjQODXbN1RXV38e6N6hlXe0SZ7ihgG2QkmVUE6cFqjw3igFfyiWFMp7Kv9vrVWYWpn4ZjCWCeIJB2P1JnoZGJt0qnSUAOyghiukOAMCAuRXuFAe2jjWyTGJvKcCuineZWmRCHDTyJ7OqxPl1YgKvh21PImQWQKMGwB6Kce/yP4JrwWGLC5iueH7ALqGH+RuM4K6BlDAz8sZEECe5jhfOoIJ4O6PChagMwHx1YK8Fn5QTrJW/ikuHmr4X+Qjg89XaMhEC1KoW47zW+Rcfn/gteCrd5n06bPynsr3us7xYBZj6RqYMWOTTDqKyTtEsWTB6EA3Y19f30JZWdm3Ghoa7geMiTJTk28IlGgLIOxT3DtF8gCkiqc3zGe3AqHykolZIGUUAupfA9ZVSUlJ3+b9LmCQAICTtdADqE4NDg4mA9BSBSaljM7u7u5UlLMClDbqO68J6pVvZUWmzkAR35+enl5HnXGaSGS/zN6y5Y+C93Uo9qd4PYyqL52YmLiaY58n7/8CkJQfeXxkgyyVqM+ZmZn5wFye615B4S+Z1aNmAs8kk44JkDUmfCDgCMaaK6mpqWnKyck5H1hd5XQ617BrNWo0DaiOpaWljeixV2O8lNWkcWSN/bJtVnHsULNf49WTlZX1K6ln6g2nzCz2SVHbAO9a2hFDHpWzKAizfbGtrS1GDuvlbAhVHkJHEMf+ePLK2VAf36Vko5RX5yH/yLTtEhR5E9C/m07EjzKDaMtZr1f/ArGWfMfGxpZR9nmc1w6Or6N9m1DF52jCkmN6zb/E2BmbZNIJ9aiqydg9e/ZMAsAHUMQ9wK+Id9kP5zocjlsB3/VsswG+AMltFO0IEJ3nfTAwMPAlPj+N+nwc+N0JIEeB6KisK2RBQTsG8vLyXoiJidkDECtdLteshj9SUlKGKXNKgU6Bd5rGrWnLaGpqaqsmDbXyD6gOyAMdqjqa8hVpei2qeQvHTFPPOMcl8/5nVPhr5ypwa0EJwD2/p6fnIzLJQwV/mDYqAGoPbXyI8x00K/aMMjbJpOOWVlocrAS1N0LIskrm0X8wISHhfr47AFkQ0HoGdToFdHuAaBgAVgy8OE30ybSMzw/yUjQRlxzPA7pVcpdJfo8CigLjKYAahtJWkNEeIDyIOg0AyqFel5hZchYEgGsA5QDHLirCSKhm6AYHi4DvqKKSUNbVtKWAbTl8L6D+fo5RpOoXVlpCCbIKVY+Kfh/vbQK8Vg8ODAwMUcZTtG8RtW4cXBkYm2TS0R2asOxtX2/tIsUICBWsNMztdk/K497KSSzBKTw8PABoTo2Pj3dr9ZxsfwFZs0zWUK7RvMIoP9a7iGMI5RsBCKNDQkKm2JYIGNMoc06xTKnLSRkCcbjM4nJycloEZt9XUzRqNygxMXFsWLLWx2c8OTl5iG1xEvWa1KOcRMr9gNfX8iN8HqLM/wbisvjo4HsICvi+ffv2/a/zsNyEZmRkbK2rq/umhjUKCgo+V1lZuWBB24DYwNgkk45aEmxRp5qkCgFgAV1dXeOWJzNBGpXrk5aWdlZnZ+cnef82KrbZWrmmY4G0iiklbxLf/W02m0MWELzbUJmxQDCbfTbyhPMa4fMYKjWb3f2KgQdwk4CknMFL7d7BNtkR22GmL58H2a+ApTmwd5rP4ZQ9xvta4KgwTSPNzc3JKOIgypuSXTGqd3h6evpx2pnGfvnI6KITuZnj9lK3B/Ve5XA4pvY37KJl3lFRUb+nA9im2H2NjY3DWtwiUy6TDIxNMumoJkE1Pz9fjnv+Ayg+nJ6e/lBra+u8Fcbeq5rbULvVs5pZs9mkhJePE7RRplLFRV7lKk9q0ZRlB2xSpmVsa9OiD8ruAmoDFJGjhRwANUcTeuyXP4sR9qejptOA/hDwVdy6TsqZAsoXkvc77HuY4+7VcTKr8w5nBFKGhjEG5ftYTu1RsQq1NMC2bZRzJvm/KwGv4KWkAfb/VtDdH2AFZECtc3NYpm1GDRsYm2TSMRmekPIFZOf19vZekpqaquVXcZo8E4gTExP1kt2wnMT/QBNx5PkwkFzLscEAcsvk5OQExycBuGvI81Ngl6hl0UDsXMreCLy/DQi3acKNVzJlB6BOnXy+Un4iOHYS0G+nrPtowzj1a/l0r+yHY2NjFTJJ8fTuAeI9HKOhDsXFG0elu4C9OoAOXkm0I1vRrcnbLcsLPl/V3d39WfKuBuiyxLBTh0ORqQ+0eMPA18DYJJOOiyrWkAMQ3YYSrQCe6ahPt6UK2ZYJZL8ImHcBsr+iNiOrq6v/Swo4JSXlXrZrudY8eXL5vE/DBYC4QKZnKGRFcq4EbtXAUFYUoWzr57jqyMjIhba2NkE+QP6PyRMkv8Wqk7z+wN6m0EhDQ0OFlKWYebtRzmegfN0c0x0VFSWnQBEulyudMhPlpY1OYwdgV4TqXMrM6O/vv4XveRxbUVJSckNHR8c35KnNOJM/Qv+dE82sZNu2bWY5tEkndZIC1gKHpKSk5WEH1OlrtsalpaXJfX19TwLIZvLcDPSmUbHfa2houAHV+nGg2oUiPZ97II48+zhGntVkCaGXxocVTTqUzwqv5M7Ozh5S5A/K1IRbAfvSpcy90ZrDAepW4Pqn9vb2cOAbxXGRXnO4c8nzL7w/wXHfpx122SWzrQzFuxpIvySIs70IFX4BbVweZkCVt3FOWvzhq2gkZWVlt9XX11doHNgA+a0lTfQmJycbZWySSUc6SUhocUZra+urj58rYsIB5r78/PyPAdwigDst066MjIwfAtD3A7c7x8fHBwGffFE8CkxnAN8c8JyULwrAmAEofTW2K0WKao7ds2fPJvJsoE7N+mk5tRZ0zANGl+DY2dl5GYCPRpH/FqjKdds0eRcpq506vks7NKmXJm9ulJesCT0A/gCfZVlh53UT4C2kzkcpWw7tqzjmbWxbk5qa+lsUc5/O1YDYKGOTTDrpVBAKeHmyS5NecsYuVZSQkPDllpaWGwHc/QIc9+UewF2qCB9auKFhAw6XK0y3VDLvEfI3ofh4Wp0XFhZWQzlVY2Njoy6Xaz3lbmRbAPvl91jWE89RZpeGOzSZJ9MyDVtT/ihtSmW7vLclsW8Hbetk33rqeydQVhy9fj630o50QByIat6K6ndR7svAftl8zcDYKGOTTtNk+XoQ1PRnPlk8gGkyS54J1d5l5zCoZrlZtNvtd2RmZk4MDw/LF3Gw/E+wX/N8aXJpueyM2M9vSMqWbdm84mUjLAfybO+Zmppaamtr26R7W8MaqNsnUOAVKO/Irq6u68ijSCADvGuIYY7jE/k+rfFh+c4AxLOAuTEiIqJaE4DAdjtKeik7O/vZjo4OeX8r7unpuQlo3AeMK+lI2trb219bpGLSEXiiMpfApJMxCWolJSUhwKJs1apVWo120gTCtBY7WJ2H2l1dXb0IGDV+q7Ffhe+QHbGWIstbm4vPE3wO4X2O40bphGo4579TzvO8eoGrVs/lKDJ0SkrKvqysrH39/f2h5JktLS19mWPmyKewTTkym6OuCQUVVXgnlPqUnE6gzp/SRJ6sKAYGBnKowwHg48LDw4coex11R/J5Higvg1gdiQHxkUtGGZt00iVNhMkZN2D5F8ARzqP1M0DkGa1kO5pmVKrXgumRTIKywKYFHsHBwfLOlgEIR1GqrahoWUaM832ccz1TJmfetkQB8SgNMUg+A9IG9tdqIg1VPY8ajtOkHtdlCTgrInQw+1Mpc5AydM3iJyYmUiMjIxulntm/h7IW3W53PGWcMz09/TZUeogm8gD8sJZfp6enf4tzb9SwhDFXM8rYJJNWKuDgkZGRa0NDQ6OOZqgfqz75WZDjm4MJo3SokFe5AO8cm80mlRvB+SiihyJxlADDs2dmZkq8QxXjvMaoXx7b5BtiQn6KySP13Cp/FqOjo5cDzBtycnLG6bTmULJX0FFtoMwYILsBlXvt4ODgLwGzhi5G9dK4s+LcUebbKesc+SVOTEz8Gftyyf8pXpcB9++iplPN+LBRxiaZ9Joy1eRXcnLyjwHObkD1pL4fjUdma2y3rKwsEsBdoZVkAKmqtrZ26kjDmPIvAJ5/pj7Fk5NbS5eWPfNZjnUSNT7MSwFIJUs9bG/me7/GzYFlFKAt1KQeKlf5KlG8l7ItBsDXoJBrKKuEOjJjY2ObOf4FgZx8i5SXzzVU+TFyc1laWvqr+Pj43XyeQ2ErDNQMZWohSAyqOdMMTfzfjvpIdFAGxiaddMny4VBTU+PWuOnRjEhsrZobGxv7N61447G9H+V5Pgr0iSNlRSC4aXiBMj0o1o0o1gdQxYrkoQk3xbsTfGd5BQHGbHUGKNgovsspUBDHBgcEBEyxfRywunhS6GZ7ipZMJyQkbBkeHlbeJMXUCw4ObnM6nReTdx8w30K+LI1FU+6Sxo3Xrl37Ld6Gent7g7RghWO00GSMMhUhWrbPzyg6x+mgjt9sUlj7+T8sR3p1u90LXltymR4uHczxZpjCpFMGyErHIjS8birgNTY0NHQhN91HUJZjRzLoptqvCBio420o/POoL4b6uqmnX06A1CeQR8MTHQC0hW0CsyAt5/MJvFJoz2pZWgBlmZwlyEdFdHT0NjoRT3p6elVWVlZlRESEg7xD8iPM5+0CuKJHK2qIAIx63uFwOErr6ur+ub+//6eNjY3P045MOonttO0Fzv1CjpHLztfGz0+zYbH9/nwa75djKK63nyKv6Nq8lf+HUcYmnRJQPhiFa6nQQ0maqEJJakjkP4DaEjddJer1ZcHzSE1iee1MA0ZGRq5Ahe9CgZ/F5haAuqioGnyPVmBR7zmEkz9S4JWJmibxZK4m5QuEi8jTByxnaFs/CnYuJSUloqur61aFYuI4OXT/S1pa2i5A+05UbqjNZhugnlny9dIRvA1FXhAXF5eDMv6gFp9Qdwn5BuiI5B8jhv0KtbRDTvCPZtK56rU/F6TH8r91IBBrP08dC16/zZp8XdJwWVJSkp8W5/BZFjJLB9t2A2OTTnlVo5sZ1bd8cwsib2XMs7q6egpw3a5H9KNhTcCjrT/QLwF6ebT1Aa9T+AUUbIV8E3ND2+TiknOI9t63Tm70Ovk05vM45ynVK/M1ASJHQxrAAYHb/y7gTDERezh2YHR0NLS+vv7t8k/BeZwtq4zQ0NDHKUvqOJvOJrmjo+NW3juByj19fX0Xcs7XyfUmkP4jZd1NZ3RUrSms0PV6aVEMbVheVn6shyYOZZjB5XK9BmWune/U1NTiytiHB/OfMzA26ZRXziUlJTYU3heAUy839y9QhUuHAmRrjForQw/HBaTK0COt5XjeUl3esmcSEhIeBoSbMzIyWqljElimaMLQO9EWqvFh2QvrED6H8ZLd8bzCMGncku92PsvawR+Qu6kjACX8NxT9br7Pcg38m5ubi7U6T+PHQDaS9gxxXWCJ61zqu0ruOgsKCr7I9/Hu7u4kygpj/xhq2BEeHt7AtsWVTxo6H53Lm8X4O5RrlJubq1WK19PWj3NN/pCdnd3AuVU0NTVNH+3Jw5XwfTMQW9dA7k81TKHfk2u60NPTo87VNzIy0ledv64R25esMt+oXANjk07ZJEgoogaq6mOAKIlH70vz8/NbgMtzUlyH+uh7oBvpYBQXkPEDamdxc47TlmrdzHa7XZCNEXxRnVu5qSdbWlq+CRB/Ulpa+uWKiorrFMmZc4FDfpNLrxI8QG4ztU6Dd6dM1jhekA7RZJ/iy5FtEsW7BAyCUfWlbJ+nnGktj0Z5P8r5h5CvNTU11YGSvpHO4FvyxpaVlfVpFLqc1iu6iJ98VXR1db0jMTExjeMe0vnrusoHc2FhoW1mZuZsOTRqb2936xH9cIDsHa7xRcV/BPDeQrkvcy2uYdfNdKg/ov7Hj7WrhDeyllBbZepIRxFCnito10Y9mdD2vezT9R1HHfsr8CvX1Vdqmeu6eKBhDwNjk07pIQrUiT/g2wjcvg4o3glcsg50M1uPlSvHK73DCMug0eOyQK50sOBRWRom4UZ9L3D9b27MP5SXl3+Zm3YDKv17cgxPB/FnVOBjqNgfDw4OfhyVmo5K/hKHx1L343KjqebRpiEvhPUMHCc/xUBcntRKfF71XSFzON30KbJTpo37YmJiRhW/jvLCAUPP5ORkLG2QEq+XDfPAwMD3gGsd2+5A1XWz/3rAXQzIoxUbj+O3a7yYvJGCkFTg2rVrEx0Oh4YxzuP7COfzUcD5rJZ2v1VY6rpzjRSTL52O61Z+uyra8QF5h5OVwlvpQI+EUrb+E1bd+j3lX6S4uHgtv+ddtK+M39CPziiY9ssz30uZmZmfbW1trUhKSgrgeqhT1MPLovW/MjA26bQbohgdHV3gsf/x2tra/wY4fijBr1sz3RZ0rc+Cq9xPyv2lVA+Q0yN6iHfCLI68Hl4KoTSuiBma2DuY8UDlEcC4WS+kzN3cyM8BveuAywZg8xywTeFmDgRCG1FSo6jQmyjzLKB8MXU/zT5BVosyZHM8ovh1FBvBK46y5RLTQTn+QPSdMoXzOrKXBGug/e2aWAIYccB3RP6MKV92zOUA/3LquFwwp5wnOF5j1NF8DwbCA3FxcXeTJ0HfUX7v5hx2eqOSnIFy/RGwjz3nnHM2Kb5dZWXlr3jqOINr4n6rv5euI9dgjo5TQ0k38H0tbdDk4vfYvv1ITpoebCe6MriqBVG9o4gTduzYcX9nZ+cqzvs+rsnfearIkf8PvWSfTcdq5/d8micPP11brnsAnxf5vF9n/AbGJp0UCtdSFAca01sZBNT6rvE7Hnd/idKqYVMQ8HlRNr26yQRIKRmN6WncD+hooUWePJVxE53rdrtv1MSVojAD9RKgdp/dbt9HnmnZG6N6mnk8H7Mez98IyhawKVeTb4ohp8f/MwDbLm8opUsA83m0YzdtehoQVnAezRy3ReO6nLucAsnpvCJEa4hCE3YqS4/IWbRVZbpk+ubzqplbKh3KPr7PAtOLFIQ0Pj5+WspWS6c5rwK2nyGw04ZnZX3B8XWUk0meq/i+B5A8wnHjqNNIypF9cSvn29ff3//JLVu2/IB6QoHPT6i/lrxfb2tre4B6gw/nd9Y1UkxUQN9Fe+/ivAMVlaS+vt7HGns9mv+x1/+frN/T+t9ZHbd3teTFnLOiby/x+8lLnoM8z5KnWysi+V+Vv/TSS3+7+OKLL+IcdmioSdGwFRXFDFOYdFLB14KqbgCpMb1kyQAfrLBGywslrDE4r+Pz5TFiYBLOjRQIXIblIU2z8UBvu8qT711u9OWFHNxIGZRxOTdWkUyUUH+FfNbk3hZgNoI6/gnQKuRGy6Psh6lGCybWacwXpXYZAPdPS0u7m7IqVYfaZrXbeqldGtrw3uwT3MidwPB6YO4i70bqvZK6Btj+D7b9kTKccvLOuS5S74ig5z0/JdEiWGGSeFd8JFlARPI5WSZwMmfjhg+RNzfqVNw6nYsWhiRJEXsfk9NkbsX57AQMndT9KMcpvJIWdijq9JVcQ40jj7W0tKgjGxG0vcvAP4sC/qm+074QtZF6ggVxnjjupO7ew/3tLSDT3mm+TltPLEcTxK+HsfV5pTK22qZ9+t/xH2vifzRO52SjvUV8vlC/CXmqeaXxX3qHonF3dHR8mrYve8DT8VxnX++Q15KBsUnHHbIrx1tXjsNZN57+rDyq+i/PWE1OzvGomsJ7CV/7AOAowNrIzdACrGoBwqQ3zJEvj/9nA8nbuJFn9PgeFRXl0bJe+V3g2G7qnualcddwgLgOeAhY8oam0ENyotMg+FCmJl76BgYGBnXTyGmPIE4aIv9u8uayPZEbLJIb8wzaVI46bGG/2uSifQLp8tiyFkiok0hISIjhkTZJwxGoplmgfh7bW1DCKrOjuLj42zyaZ/E5nnIVIqmFenUechZfSB0aInFzrjZ5XOM8BFm5z9RNHUOnkU0dvbwHy9ObFDj1LAczBQwKOKrJOzmLj+bYfWx/hjrUIQRzPXqk3Cj7LFlrsH1KnYvlnlTDA3Q6MulbTQe1gzp3opLd3d3d5wKijXQEcmr/OznTPxLDCMdjubXVca4E8v7aYYXV4n+266yzzvryU089dSe/j58ipCiSClkG+X9M8f86l//egpavW2Cnw1L4K40fLxplbNJxS/ozaihAYej1R5di1Y0uYFn7MjMztS1M9rVs/5oWI3CTt6M+UrnpL9ITNrCcBYAbNG6KkquU7S03gYJjJgKHdwOGIY5/Xv59tdBBiyJ4t5OvVdB79X7ylWvJfMB4nla0Aft/Z9sWxXkDRBO8y5FwlyJfAKBA2nYP7VgNJNexfw/luDlunn23AtTlWHVdXV2KhnEW+4ZQkUNAS3Wl8V0O2UsbGhou4Jxlx7tsIgaw7Yqc4QX9GOCP5eZtA4LXANE82n+D7H8po4eXIneEsL8WhZ9H/ng5DJKXNcFTNsMaAunt7VVUkAHyh3Gd1lD25dz463QeCjLK92bO9Rccv4Sab6I9AYosTfvmaVch5W3SSkMNkXCurz2SC8Sc58Z9+/ZpdWAE7biH9mni8B0aXuH99urq6v0OHZ1scwxvdg7670qlK0ILnX218srunGsWxTUv47dd4FrKy10o2/35vl3eBAV2OkVFZ1kyE3gmHdekP3BOTk4EN/F7gEJrVlZWDeownj93G49yM6WlpbEA7edAqp0/8lZNQnGY7IOL5FQd+P1G46a8Cvmzr+G7E4jkAcJhLXLw5tlF+RpnLKHcTG6QDkBRR30yH9NSYQfb0vncI78M3Dw15NVs/bcp86lZ2SONjyt2XCEq+xGZiGnMmGNK6Cg66+vrv0qd1wG0e2iHFlw8r4ktgLWWOupog+xhO7n5PkXb1Y6ztCxZbdB3jg0hXwIKOQcV+wjtVmeg2fZQIFvGexhlng34XklJSWmx2+3bmpqaUvLz8//IMcXAeZ484ZpMpL29tFUx8bQ8uUs9jDxpco4aRw6h7OukgjV+ybZX5M+CcqvoJHZxvXN4pXKt8vSUAPwV2eMcyu7XEATHtepRXCqXJ5Rkfpdf79mz5wLONUTj7Kjiouzs7N+2t7frPJ4RiA92YcOJ/NS2UhWvPJ+V5m0r86jjA7YT/H/CLWGhhz5+pymu8ywvX/5jj0h46Fry+y8dyDzSf/PmzSfUReGHPyb+Bkw6tqpYq6n44769p6fn4/xxR1Fxt3FzX4Dq2g7oxrmxb0ON5QGGB/j9NdlWzZ99JyCREpVbSS3B8njVZByQLgUMfZqk4o8uL2XJfN7L573kLyJ7Md87FV2Z7wpPJCuDduoWrBTkc5RtDm6WZ+Ws3euYp9MbfVm2otq2ifq0qngJlbOezzm8FGtOJl/JAHMreco1ucf3fKllPbLTtos0wSYLCNpYxzEK7tmlYJ7A627yPMn+cRkEc1yOIIrKqqW8Z7lhc3l6aOPcNXyyxONuIcdPcqOHsj2VusoB4ZM6d+ouZZ9UchhlXMW2WCD6LtqewLGj1PcAYPiDJvh4f0lPGoAhk3PUZGA4x9poi1b1ncMrhvOUQ/v5jIyMF+VQHvUcSNnvqq2t/QL1BgCXSVRxM81uo93NtKcdhdgkFW0NT6yMunKy3cMrlfHrJ4r3Z2eshTN5eXkBDofj7ZbzJMUm5NpN8jvYk5OTd5L1Z1qxeKAl3V6TPqOMTTo2f3IraKUmewDzEKrvLkATxg3ei/r7hMvlCgYmXwIWTo2z6bFbUZC5yad4yWfvLDDRGO0Ef16pZK3/T+CzAF3F9zMB2J8BlPz1yjrgZwCmX0pSKpn9HkVU9lo9dGlcT/4dgIrugXnK10z4POWvUZw58rVT3rNe/w8TbI/k3an2yPOZxloRDh+gjcWKK8fN9JwUrZYxA95+4F1Au5bHqeUQnnqkanfStmZF2kBd/pz3HZyDzmPD2NjYdRybRBty2trabuaz/E1oQqwN2Plyg1dx028ibzodmcgny4jLdE1ou+xxA+Qs3rsST+e/h7oUlHSe89hLPi3XDaXO5TFnucKkzGmuuY0OIJn2N6Doz9O2ysrKp3gyqNIQEAp6DR3mwyjkBsqfBdAv0EbF0uumHTP9/f3/a3KN3/W10FKnkne31y/+0DlybeRa9TvXXHONz3PPPfcVzlmTq0ta+ci5B/A/f4n/+EFfA6OMTTriKnjlY5/1J9aNyY0qmGXwSL4GhfiE4FBXV/dJQKTH462ATeAL0qSUTLi8j4n67E+5y5GNpRYBTQCqrIb3Z3QcoBkASI0cfwFQmY+MjNyKQpF63Eu9rZQj/72dvIK5UYooL43jNGkXx3EiiWa66wFRBe8zisrMNsE/lO9S1rIfla2xlh1rmXI+eaSUZUlgpy4X7xFsL/Yu4BgCcOdoCEI3Jq8gn1dDKAnMHuAYpKXJ5Eki7yw3bZUWcqCgrmF7yquXcTFCLjXZL7vU98orGy+PXFrSpirqWkf7NGm0ndefyFchtSxXmBzfwHUQ+Je45g1aeff/s3ce4HUV19q23HvvKlazbEmWe8U2NtWY3kJLSCgJodyEJJDkhkAuJJQkpNFSIAVCCR1C7y64N9myiq0u2bIlWe69/+97vHeurn8bcIFgcs7z7Oecs8uUPTPfrFmz1rdIQ0axiBeeE4mfgN2tN8/NJb+BtIPedOXca5lXUf6lgPIMuZQtO0D8GGnOZrJYXVtbu1vrEVc8trGTbZ8+fZry7oeR9FA3+AD3LZ/3cXwgk8mDCRT73+N/6ih51JTBgwfPof0m0rdbM9G1YgIrYsV3XXFx8ZZPYoeuZBwF4+jnaKsjYuiEPQGobbJW6UChFOGyTpVCRkaG3mRdkfKMXhGnlKpjA4/XuqyXWD3YgfbYFRCqe04JWaWcO/cDAZJv8Tud7zaAh5KaVgrD+NZxoifpNOa/OtS9HCVaIhhl2agWPOcyXWaziDeb3mocGboSK4FTrnbcaxDQ1gBdEt8egleGY0e3XPXKuiQz8LpTx9UA+RQ3A6mbz6geMY0IpaUbjFqCcJ9maLuV9LVeMG4dwNWV93Qx/7Mpr5J1he7RetgBpI+tW7duqE4nnK+Tb0Ldt153lOFlvpWCCyhLFWU+T9dkVTDc96qOBZQhFdDWc247IKkLmPm1doOUMlVxrtzNxPXr108kn0tTUlIeonwvkp40nW1YZn9A3k+S11uUvYK0couKiv6lT+3bty841HJEz549BfvNrHIGAtCX+i5dbZBmwec9LuH+VhT7S8L765MPBNBanlB3+9h5VVVV8YyBrccdd9zlAPFiN/fqS9RRNUX085mBMRJvM5Zr5/D9MgO9GpCJa7AvmGYMAzY9Ly9vBANWN149ywo1NeNoErPvsz3Qx8mN0FKrB60F1OkqXGszCyjsRHp7l7QWCXxy8brCA3A2c+63gIM2xp2R8jqzRBzI/VnkfTEA9B5gtdb4ckrFms1xTu+6KjcBSaMz5emrJMtH4HKzzTIk89wwnpkKkM3TKYJDvan66SbSTPJMAoB2CdLgs6RfygDsJiiS7malY9LuxX3vc20daWj7PNbNHw6B8AztdePj45+kSIVInHcEUaElNdoGQN6s9xzppFZXV3+N8/E8lxtE9dCDr5b/7zGYX2GCe7R169YFEvv4brRrpmw9qIfmdhfxTjpybTb3p3Ck8V/rDgHjzM6dO8+QMH/FihXjSXN9YmKidsO52hoHk4eE9mGsvohVDN9natlBHuBPp1e5Xijoa3vM58NPMxTWp6Er3v9caGf8UXXwnShwUO/uJSUlyfSBzWPHjv0WQuW7uoYfin10VDKOfo7qB0lxV1paWs6GDRsmADQDDeMj4DBoe+jqKpBpRqZqQUlUiZMOv2dfeLeGqiYaMvj976ZUu4CdTNvZNhwt3YjjvFSRawELN7ZkxlGvoRNCI6kL3XwjGSXJpZp0OaC4bxDfqhq0X9aKQE+7XdxrRxOYlb4lBm9vFGXARI81oygrja7mfEogCUnm3sZwSDyfpaQt/aSSO3UeH6hS3OQz+sai2NhYpdQ0pMRhlDtG4hjrwPJ/OfcuJY2TKIN12pOQkLANKXQ5wJmBVPwyxx95djkAKwOb6hK5MOdYB1UXvM8TSGcS+WwPdNeWbyX3OpnI2DZLAiLOJ6kSkX8CEB6kNQbgwVBbdg3gP8qVgCDKc91TU1N/wv9ZTGS1Snz1I0CH34KUaicdbIyXR5kKqV9ZZWXldt7jZNJ5o6KiYvOxAsafFKRDFVx4XiDWAWnQoEFNaPtbtJZITk5+kksPOIl9UiCOqimin6P6CZ053MBBUugBAPeng8ar62XAqtucQ+f9QF4HpeQAZJsGNJAxAbmNrGNGntijv4cSmkv9QIfsJ0IfaaRinToYCEp6rfjfUa+zEMRVO1CeOM+rktAMjm/D2J/Nt5Kx1JHyOnTktxYZ6oz7ag1BOZXC0xlYJ5OWrsCqN6ZpRQGY7VFfzD1K6DNlRjNfJoCmgO5P5K2QvUtTNaT3SsBwLvf3QFp6GeC8EOnxRVYLBQBZIu/pNetJXrGUq09cXNwLS5Ys+T2gOJO0HuQ5LTeKdGpRcnbDDoD8pkxr/H6LtCq4181AVxQDuDacMk0i7zVGdwYUpduM1VHD+Y2yf0C5R/Jekhn4vye/N5FuV1DOxRkZGXdwfgVlvwoJ/lXKsfpgPBAhW5mSMelLSjSVvEtCiwFZ1fSgC5146u8bHEtj+kCqifp6Y4HYySgrK6sPK5JnaSP7h23+REFBQe2h1DcKxtHPUVNNOEB1L2Zp2wRwHIVU9CMkNfWXtQDEa5x7AlAodHPLDbFAb7qLQ15IXdvUDTcM3ETd8HAjz80zza+MdiGx+3Y67HrOCdg9GQxZgflaghttDfZ5lvVQL0w6Kur2AD5NyL8/168UXJE6Z3bt2vURzdSYKE4AzORzWBtYVmwkbwH7Mu12OTQF68f1jkqjpDmV34vU52p+pxUD9dF7Tntj48hJqJPLOcFxC9cHkWcG+f1NkzvK1QKJ9xSkX+PbuWLQFropg3cHUtRXlWTJ2xh4e1q2bPmK5nD8d4A3BjC3kL8x7lYAdC2pUxGgPg1Q/JC05CVez/9NjJuBblDybEvtirleBzAfx7W9/O8CaH5fXX6PHj3uX7Ro0bbOnTvP5byUlQspyxJWGmN415ISTROMD2TOxcTSID4+XhKj08i3s3rnFStW7AnBK1zWC+RJSUkCVhr5yO2x/ViTlA9U1tAGOTMzU8HjK1OmTHmB/+pl1tNevWmne9zUOxRPxKjOOPo5KpKwEhKAozQ8DBBOd+OKAfqeG0sSlwM62lzaqwVijd4duA2DJV9ERdAgYinUSEuHbhwSqbu55lK4qROz+lzSOpEO3xaQlyinDICSa0KzNoN0NgFUIioO1QVKbABR4zVr1nyPgTGe55siST5AWR8h/WU8K3nOaTpdAFTNjZhB+WeQlzqE9uRTwe93SLOHetEA5NpyTyGDba3eb/xeQPpXk1YRA6lGDgvSWQp4GpJouFSXer4tX77824Dr73gn/+R8wtKlSx/TYYT6zSHvldRnOMDX1Igd/fr1u4lrebW1tdvKyso0m5Ij+Axdo6nDDsC0je7aAjfnGvJetYZoT9q1/HYDz7BJ7WiPd7h/nRYbaWlpf167du1A2uZbPFMCgDxAvXdq/UBZ3ISbxvV+Snqk8yjl6Ln/Blb4EWhJuzdS/sWUOYe8fs07epFJ+PbCwsJ/Lcu9j7q0Io9vV1ZWnqTdNMB8Q35+/o5Pm2Pi0wZi+yXt0pT2vmfy5Mnfof5LmWy+RbsYWWWMViaHO+FEJePo57A+LlV1k6UjZgEYg6uqqvSmW0LnnElHFTwy6Li9AIl16mUDiSkCxIFaQmAW0fcE5yWFkX5xh5Ixn4iOmMEra1oNIFfKt8t2dcEL+F+IVFkDIEhwY2eRDH2epDjcF2c0Z8DrRO2CAaFaVRs8u063aYDkap/hm2RaL+V6OcAxjjS6Mqg+RIo7hTzmcs8bfK/n3Aqun0Bel+l0oiUE6RQDwloxbA6kIgHNOmvzu1SuCyTQN3iuG++gOb9nS94epL0B4JNLOJ7J4jKlan4ncH0DeW3QhZt3ux7Q2677dGAJokldW9KRtKeU57ry3RRgvYjrF3FtuFGcDbXEPb/X9Za2mUqd6mifxqStbXEsYPw8z1ap8/WDhLtLpxreQ512xeQ/GUl31/7LdP8HG1UyzG3n9wt8TySf85KTkx8nzY3hJG2/4D38kndTDXg/TT1uIv1/ktfaz6OX3oE4huufC9+FE1Z6erqedH+cNWvWDbznP/M+vq9NMX3jZt73y7y7Iu87lHpG1RTRz2F9dPlkqe1ydTgDcdjKlSvVte5s166dpOW6L6frtQYgulRfJWUgv3VH1jJCczE96XYKHIHpl7avWko42BshRa0DZDcxiJV61yut6sRBWitJX33uOs610pYTwFXS2hpES64F6OTi7Q0w3cwhT0C1KgulWnXMAI3EQkMZRAJuCgOoBxKzS/Kd8lzoKEH96kj/S4DHDkMNIemMNsoy9X2CMgy1ftSh0k07fp/arVu3Asr8PL/Vby8hnZWSsmu/LOE46Wwmrwz+L2N5PwtAGs156TjLAclLqesret5xz3AZ4yhzHdKkAUQHU7Y6nWLKy8t9P5H3RvnGkr+u3lpI7KWMJ1ZXV4+Xp0IzP8r5F/KQ9a2DHo20z4nkUcq1cfw/g+svcn9JfelP8ytDzZPeOkB114HAScCQPwTwGaW0S9mept61lO1qytiS32+RRiQyshM13+eTz2mkdyn1fpf/z5rH5xGMD2ZNUX+FEAYI6NWr17gpU6bcz+8wBmEcE+LdtHMr6n0b+KVH6CHhVxSMo59DVks4kARiAKg7g/A2wHiogSvdJAOAtE6IBQx1N+4b+uqrJ9Z6ILBk6KK5mslpNqb+Vz0v5yZwbrCba4CagC5AayK1HqBQim7M/doLR3gc+N0w6B9uwun/v4G8JEbvSn7X8cwwNwDpR+qX9QbT1bcpAD5YcAUIZYKbTPo9Aq7kGMDkUdL5gLyNtqw0KyeGG4G9tIJDonxPUh0GoYD7D92SVWNw30DNxeS04JoS/SBthknTslaS5ho3Ejm2q9d1s49yddTMzyjQmp1pccFAfoeynUidWjPgH5NIiPerxNyM960tth52ckHUIH2N4Tkl85ji4uKfAXhdDI/Es81cCfC9SMJ5N0Mb7vsMNbQS5a6jnq8DisX11RC2a0gPeTAHCK9pOUAdTmEVdCETiGC8yNUHbX880vDfAN/NgoosdampqZMoS1Mmvn/w7G+Kioo+N0C8v1XER30ss5KuE9HgwYMT5s6d+ziSfjfaa6fUqwoVtLFUqq9R/7frB6v9pAFNozrj6OcTz9p2RnXDLEf1HBtaUFBwuaTmgE8doKI1g0BQ7sZVwAHRNXDmMFrEjiB0fGMGbWRDDkltK89IpCOo6stfAogtQ1LU9rapES0Y8J0Y/HV6oKnfDFxrd0m+AkCZ5zZVCI4tTcM4PxRQuoM0k3TYoFyS7zTXbCuohzHjWjhJ6ORg2CAA9mFAShO1EwDsdOqo2Vks3/dR1nOUoskrCeBtmp+f/7IuxCxFC5AOXyYdTd42aSnCcTz5fY9BeR/v5FHub8W5nUGQzjnc35oBfL1cxYDY1MLCwlaks5Ty9qRuY3ifHYYMGXIxabbJycl5mDrPAji1HW7DAE8kXd3Hldwb8H8Q5fuZThmA9w3cspLvbupiyaeGd7REnOGdtlE3LZGQBPNMmhs1g6Ndig/XEUNg4Z3Ytr7z7eRrxGqdcZaSR2M3calfCgB9CdL5Ksr0O95bZFL+OHvdz/JzKJOCbSgN6sCBA2MXLFjwKvXpr+RPv3KltVxvSG6Loy/m6pFYf+PuUCJD+4mCcfRz0I8gTIfTSkJpJ7asrOwcBpbk6roXLwBI3HSTmGclnVZ74WY8ozebXgvat6oD1YU3IlUBWPIE7wUAY4yiK4BwvlI6QnXEBpUAMNbqtSaHgu68SII75TkgPa0tBDjGwfaWdHp1lEp62hSfh7R4LyDQjedXcG0N+TZXkpTEnbJvQILsHYY/UtLk2SWCNc/K5StPsqZ4WnE0ppxtue8vUkzKgoZ0dy/392TJPx4wHMXg7EPyO92QkwXOXXQmHd2SW1A2eS12MmBzSKc/9bgAgHoW4LqCen6d33dzny7RawQy8himjS8AfUa/fv2e1FUcIDuV/JIA7EkcyysrK0+QEIi6TOaaDi23paSk/EoLFer7Fv97BrbLT1OWJbzjs0knTecWAZmybl28eHEcEvcYylntxHY4vMO+P9LS5dr4ekN4X+ky01HXvzQxdlTPno3I9yre78yFCxc+Qn3mU675nycgPhQQttxO3rxrg4neyeTZPz4+XkceTSGt0FbeZR/aUhPKgv1j9B3qSiAKxtHPR6okkMjaAXLjAAtZydSV/kWJd9/Y3LtlX7/d0zjQ3apyWKlnmby+umFpUkVaXeio7Xi+HUty9aLvGqrIhwCiTsZ4Y5BXGZUYYJEXdrO8xXZ6OzdpaH3RXFM105SfAiDqYtQMJMPRgNVNlKnO0OhIlC+CCxK/nyToAqoVAF5C6D3Wp0+fmd7DhGCIIDcWkywXZcjnaEa+qyjrBj3lKOeMINLHJgD5Ue7PWbZsWSPZ0gDJ56jLLYCjHMZOQoWclwRevuEqVhGNkXJ/BiArNWmH/FXq9lUk/utYwt/CBFHD/4WUYyz396aM15L2+gEDBtyC9HWhQEodDEJqeKNJXG/BhNOdTzH3nVdSUnIr4Poo38eT9m95JyUyvZFWFmW9T2J5gLITk8GJtN25Tog63thGup0fjjSp5Mf7fJIJ8komZt9zDHm9SH3uLC8vV8evumd7UVHRj5kYFtEmxWFfOhZWgPVVF/VDLtFfEvPy8s5j0snTqzHo8+5DONlJtrScvlMe9rHD/UR1xtHPvzqjA8fOZFiipKQkow8PYpBdajgiBp4OEIZm3xR4wqnvdSksTaQRKeJUmMrry4DcxHJ9PPdchTRxk6ZeciXIXAZ4XUIekhoMAlx+ycD9AYB3KffH0dlncp8OBwLlXsnmJWQHDJvKGQFACbbSX3aSgJ3vCUwU2u7+CtBRl5wHID9CWgYefcIAnwB8BsDfFWCuTktLm8Q9sylmLvdJy7nSjTqePYO0jTnnpkxLLS4A1T2A4Tfj4uL+QfnjAekKpEotHNpxPY13cjzA+JImbkjMbQEqdeDVlLut9tAVFRWPcW9vQPlp8k8AnOaYLoA4mHc7SR2yG2HqVTkXa8QP3Z4p13zKNIt7d3HfPMrQkud7Up7l8i07SVC/XbzL7pS7H3lcZTQT6vs8940A3E+lXfTs01NvF/W/izQSAMz5vF/5MVbxfhceTqRlpUWe3ZSRkTHZyRdJ+Eny/gmTx2Zdf/VAc7OTukpU9EhpaemaY4W5bX9deahi8EMdk2jj66lzjVzYrsgUZLlf+tEE3v182v81qUQPZ+KJ6oyjn38NsHBzBinHEOQ6J2Qg+fTUe0vpJwh0qZlZDveW0Al1B94qn2vAfyB1Y0Oe1zvuLP6fyJL8IkDlT6T3B56tAHCMTFGLlDefa08XFBQMNu/QDAiJ8aasrKz+ANy1AJ1cvR2kKNTZw6gdDIgdhjni/pFc+x73D1TaGzRo0K8Bg3sZ9Al9+/b9jtGMAZw/AtLfAET7at3A0vIZ7p0HoFWSRifSMBbdHDfcAK8TAZB/AIRuRi5SinbzS3M0yt1eKxDyriCtC7jfeHdvSCVJGW9BcLiCQfQhZTQ0UxnPNybfG0hvCPf35338k/rfwvkEnunOOWk1p5BHInUeQN6XI2W+DlD+gklKW+Z21dXVJ3HuCR1eALPhlHMuaScABmcGVJh5AJ+6c1USX6dMH7hcRnJ7ShY27tHLsRvt8RXSv4A8+/H5O/8LXVSoFgo3sA5HOlZltHjx4nza6b/drNJWWRCzLUyXdtWSZmoY9+/zKBXX15l/FMfwPuvLGDeOjfhs+Kt4rW6MGOMKkNu6U+8+9IHHtAs/0rpGwfg/WB+s3hCwcHNOwO0AyMUhqfYDiOLpZDptTA9IddyhX0NnbCJtJKCxSWsFzimtNuKcfL3yHIxnIK6iw76LFHkTA/990hLI2ighaeZFvrexbB5sx1UfHSztBInd5H0K0tVrespRplnk974ebQb+dLlP2peRx7Wk/Rq/td5ojjQ4UBY4gPhHlLmW//cASm6i3YQE9xC/CwC4oQaJZBCpXtH7rzUS/0CAVZrDxQB7ncTx6rxJowrwrKMOuzlmkd+FSLc/YGI4i3K0AHDKkZYnuxIgj7P1rNMDi/f4FM8205wNkL5KnmTAWO8suTM28A6u4B5dqHuQ1g8D/XobJWYAbiTXz+7SpcurHFMBUcmT8g3hQ/5J3NPD6M5aQ5CnrtNl6rV5Z4Wy1RnBRM866ycvM/9HcN8VtGdPrUAoSwXgqZNMGSuVUr3rDhc47DOCsOxtoaddfWALGfo+z+Ty9SM9H8hdO1SthI5NvMcVtOVU6nyekT14tkDnIgmo6D8v0EYSN/2fTcpPakkRBeP/cBBWilEFADi2AawS6UxdGaBKU5pC6Xo8Wz4HAE82M+1bJXvfHhDrbEFa0yriVDfZDM4pNwJg0Jjl2o0M1LmkuU7CIPMypp3ENuqAAYaUJUuWXGPHdSOtngttDP/l3p0DMA4DrLVskNLxYcrwN5f+3Hcuy/pvJSQk3MWAuOO44447bc6cOc/ybDngPIPy67yhrrc22FR6BoCbx+/2KviUbPifyLdcFzXc14S8JnAuh+X2XImDkE77Uvc86iIZvbvlqynLydQrnjzl1kiQWY3BWQFAPuJ/7s0hjePI/xyuZUulyftdQb7f4L4zAcXvAa69VK0AonON+MH7qRJEOYZQhm/w36ghf+T6j4zooSka7y+be5dyring/h2+HyWPk5DIv8z7W8H9L2rORv7vG116xYoVbXg3j5CeXnin8XxPyv1X2dN4lxWUYxLv71+T8JF8QlO4Y/kTmvIdSEKuFyx3r+9L3g3AWLL+8+lK9o23JKLSpI13/4QTU31d8eFaq0TB+D9MHyy5CVJWMwZsMoPT3f5UAG+lGy+Cpja6dDDjyVXwzA4J3+l0uwEZo0e4sWZonvMZ3ErKC6VvNOiitJWktywIjyTQ2KOVmvWwi5i3cekcN6Hqh7D3A7Bp/bCHsv0MIJuIZHwyaaUBLNcab00eY/IoBChfJJ03AxMi1QxlBiGlvMaAa0a9HpT4hjQMAnky31oU1PHse0GI9Wv4ll94tTSTSt3aOq9evbqzpkmk15PyagPckuslAKpMaDJytQ4cRvQu27ty5Up1oyu492nyHxcfH/8HJrTzeXfGtOug5M3EMhkQvSgg1inSKYO6X0weqnVKAMrHNFnj+a8EecSS7nFMdHuQlHeQpqZ/bgYOo2ytS0tLf6EHHXWdp40vr019ZSfKOpT7ynTycBnNklk60udJ8y9MTvMMjErZZGiLANDRiN78Rfl8VADSMPBoqIIxaovtT9sZSFYiq0a0ZTWToxHBI/ccabipKBj/B4CwmwNGZGCgt2PAZgJ0A7k2imsu2XUQkND8XB7py6F31wrAyM00N1O7GQKJDiYLmPazVUaVkBBesngtKwxeKauZSz/5hPkfYUMjLaXppmoyANKm1dXVlygVCwjhMlFjesDlPt2oSX82aTfv2rVrFZJ7E6TSHxgKiXLrTlsE2F0AaGVxX1/q0NqgoQCX6gnZshbLQ8G9zwDKJQB2JocbjNqnaYe7AiB7hzqdJYUmeT6ERHsh5bmEPGYYQUP1BHmoIpAyU/6GWMqnGdwGnvs657qTzo8MycRE0p0JLKe4uPgErvUFXA0f9TXubcf/dkrH5PFBt27d7jW8fUFBwQsLFy7UwmMzUlYZ72gbgP1t8pDmcyDS80TA+hTqfrnsXwzydO7dQvrDNH+j/T4gvTvduENSu5jfv9eJRtIj6pWkJQj3vLNmzZqv6cTCs/dJWKNOl3o2OFY4IT4L1cT+UvFHqRQCawr7bImOHlpPcNpNa93uDWO1/UDpRNUU0c+/dF5+VAUAEhHTHAb0IKSwWABKz7I0I0wA0s/TobJ1IOD2BXQed+rnMrD1FIuRNAbprYCO+BbfRsA9Ua5eAKQQUIjXntboxzy7ivOSjButeaGbZtrr8owS5joAohHfx5N///qTRDhA+F9HWu9Ttm9ofcFzM4KIH7JfVZBeKwDoVuogwY+hgfbIKUE5DOOkrnQp4DwSwGklUY48C3IwAEKXkK88C910NdZ8TrM2uYEpUxb3uRkTY134vxsQL/U+6r+a3/JBrAYkqzlXC4DOLCsr+xHluIV39HPSVoe7ikkjj2dvqKioGJGZmflV8m+4atWqSwHk0QBleyT7RvxX0v09ZRxL/VolJyc3AXTz1L0mJSU9zESyWQuNvLw8zdpu1iqDsr3NuVdlqGOCmZeamvpdwP6U9PT0h9TD5+bmPuRkg6T+s969e7/CUvlcnllBm94CkHcChPe62RZIdVHBZD+g/KSAWe/ejnJn05/auG/C0USCKr0N9+d7/qiNwY/Ux0dN2744n9AyQtM0Br9hexIBjZNZ4l7IO5W/YABHZ20kOeSOUNoNOYd1Bmij5YLLdzeyON7lHsF5Z+N9n7YM9FMNX6+RsbHeAo+5uIACU9dfzbQ6cE035raAWVfKISD9lHKkhh1WkPBDZ97at2/f+/XaAox+J20k4NNNPmQld8qTwLMXkY46WcnVVZ90dAJRr0s+y5ACf6D3H2D4rI4bWoaoz+Z3L34bo8xJozXPLaesK3VE0W2bfOQW0KTNlYBkQB10u1b/zeGmZKegru+7iFDvbeRfypYi7aZ8wDyXOmXKlFt5N7vJZzYgO107ae4xBp72apkA+dtOYBkZGdnUL9WmIk3DPfUCnK9GIj4BYG6Xlpb2a75lgJsgNSjPnshxCuD9RwmRqOdi3lENaeX16dPnJSaF1aoxeHcJvOO5rDwurK2tdaNzGu9s97EYofnTHh/7m68d6B3Vj4v3L96IRo0uXLx48am0v/08l/9ubqdrgcMEvflwATgsR9S07QumjgBc1Gkq0fZhUA4HiJPpWPGaSQEeWkVUSJ7OOb91m10BaO1WGuR3C4lP5BjmWksku/Vck0FMToEm/N8G8LwA2BjDrrXcu5yTkzgmsEJw46mJm06AWE+90/jtJuBOynNBeXn5yfvrK1lWG+TySTrzUADpJ+qCyaOhXAuAb5NgWdlRd1QA+0ljxHHvV0hXSXorQCSL2fNyIwNYk8i31kgZRr4A5Dtz9JZi0jBAeuVx3YlDikjtcPfo3sw7c3OrpaGfjH5BGc6Rb4NrlYGKJjElJWUL+abqFo1k+rDhmUizOe94EFLxNeq+ybeENNKohxzFMr49QZ4pXD/OQKX8Vtp/HhDVDO0XgOyp6rfdJOX7n27ycf5annsdYP0reV1C/umUtRkgO4QyvM65Ut+RagcAuJx8fsXS2cglLfi/ifczxWjP/JZQKKofPohk/HHS6/4Srmo4+nfnYENaT9Mmqic0l9Tx6WiZ8EXB+Bif6QM9bYS2ECDrBBiMYqAPMTw8HUSXY8P71CrIBvbA6+hEy1Ut6MDBd3MGreZZMqTJDib3g2HtDS3vRsUe3ZC1J5Yfl05o51vtTA5wNNSESz2rAGg4H6ka3TQD2PoZv05JFintbAEk1BXbcSnzbpmvSKsL10/lfvkpJOfWBrgSCaQp11V3yH8gIVAjwGgcwDQSyb/KOHlSWGq7TP4dAbAiN9rcWKH+BkKtC7h/awGwETLAWT7qm8mxVf4KpXK5iAGvdFnmALbJSLQnUo5p5D2J92mA0V6kewFpDNO7jfq6OdaoV69eH/D7lIULF56gJK5k6gSkjpxnCmiPp5YvX34J9RlQWVl5G2X+JZPXLKTpd7iWyrWvUc+3Kf86ntEiJcXJxajSlOk524h6CcZOrtWUsadqIaT/2pKSku2CLZOB0YmVgG1HeSvUZ27b3+Qs+mlwwGgj9QE67Jf7/w5d6HVw8pxejq4KaePOPFvAJLrxaJUxCsbHWIcKNyECBq2ISgLQ6cpgHVVaWjrWSBQCjWDbYJ+nkOQ9mnMZn32Vlg38dvMhV6ANQstv1eXX/woGAdewgLaX8/bWSKba3iqlAjoNAY6GQTBR9WgRX33yWRtIEnsAnBKAzfhuGUwQxxmyyGR5LtL7AaVqOnkR5T5HczSeL0L6m8WlrgDJh9zXgry7kF9b0hui9McASNe7jQHQSVJ5NxCR1Oeq3y4uLtZZwxhyptt2XyT6CONZJek9x72qYC4EANW6nAaQ9tOMDPCbagw9PgsBv8tJdzB5J1Hu01auXCkJkCYf7bS+UK1RVlb2/YyMjO9QpxuM6uxEpf006fS0nJThCf6vkQOC56ayIhjP+ZFBFIhpPGNsv0U9e/b8Jb+HId26WRhDXoZEcnWyRb240UaQwq9gYrlY1QsThVSfuoKnU+ecioqKPVFd8CHoYwP75/rkPfsz1x3od2j1Q9/fJCgbVZs+Xk1653BOUv9FBxKSDkdSjrbmMbYhJ3sagGMgTwlqEgEm45+l0AG0/dVOeAUdSB1WlRJqEGtuk263nNN2Vul3htYPMlLK+atKwugRgSmPS9yYIHyQUnLERM0+JmIJfIKqtrtupFEm3ZwbqTpWmuYjstVqTgUg51ZVVf3NzgzoGMtNHXXTYEJpw3N9ALnVPLtYdYhqAVUc1LEFgCidZInUmFxT19tdfTcAr1v2biVTQO+vMpZJhOPGmVYT3FcpiTmSqlSc0lDW6qTCoe56G/dfwD0SzLdOTk5+hvyMntzFDTck9O6qs6ljFya5toBzS9nIANaGkg5xXyr5dEUa/ZL6Yz7dqVctddA0MJd2OB2gVDet+2xH0phCWz0h8RHPb2Mi8X0ZPLQnv3Ubn7ls2bK/89xxvmffbffu3WuHDBlyI2Xpb12oo2qc+7RtpfzTmXTOMk/bOToyDl1fXF9HbH//OJtg73WjlYl4tZt1/C9yoqd9rqPvTOGWB/YH4cNVWUTB+HOuBw6WwIKZbZWMVDqCJe5gQKG3kpRWB0bDCKRhl6kuWQ2IuCngClZdocRaLBDqOQc4agsrv8RapK6NQRgfrSXkPNCWWAlgr2Zo2lQaqUNXWoslZ4PcCJRDoNZkTYeK3T5DB21Emk0FeZfy0lkCJMP02TcOG3logbBGe2XN3QzgST6TtZogLUlt9KqL55n/4r9ROHbyjKqISo5CeSCQdFuwTL8cqbKPFJecq1ICTkhI+Iu0mepUmaAEvQ1paWmvc2+sJmKcPx1p8uvqfXXJ1lyJ+116yp62W94G6mXcuxbkP577O0rOk5mZOY/jm0jCujhfSd0iag83K1WpSHpE3QuNXk16Avcs8uhB+Y7v0aPHFOq30E1N6lsdSPPyOw9mFfM9+TEA7eNt69jY2KluDPJsN/I1yGlcZWXlK0Hk6TTuf5DvKtpEno3HjnWni8/6czBb4o9TWYRx/VTD6eVoG9CW7hV0QiAwLuEBJeooGH+BQNhZ2OCPgIreceod3QjqzS1GQV6jHa/0jvyP+MkbFZn/mwAodVqb+O+GXYmD32TVTWr7KlAYdBIAM6S74YLsTZICSfbjfY0FZfkWAAiB2E26BjzXUOlTYEaSawLo7OLcDi0x7L8AiNLxXgBYGsmmLMN3IIXewfV2LOvL+B2vrbDx5aStJK0x2hA7iQA8gwC1DyhzNvdsor4dKBdVb/laULbmAKUsYBLEX8+g2A4A7jLasxI8k9VjSpSGMVKn3L9/f22E4ylfO8qxnntOLSsrux6p9UPqJJ9vrTSPANxtbjIaF0+SeOppuoZ4qpOqEoCvlrMCEL+Ucr8MeKpmOJF8hlDGJpL7UObmTELfUI3ipGS0DPJNAlh1R35M+2euPadFCPleIFsb7+K/nAC4rzGTwBTAuh15SdY/gTYeLGE5q4ofAubjmViONxAqk8GZmg8OHDjwZgDcySmqFz4EqfhAQHmw8/XPeY/CEP0jS/tyN4/pE1/z3bvqpD2bBFHLjzgKdhSMP2cgrCpC6koGfwoDWGluhGTqboy1UGm7e/caY6IZ+gfwK+P3Oi0EjCFnlGA5hOWT4NxW7jXApgTsbQJicM2zDMjpZttOBv/mfX0nZncoBXMopUY25QI+Y8PXR8LpsOz2t8DcGEDoCbhp2iYiyKq2neV7PCC9xqCi5HVNVVXVSfIXS94D6NSwNNdUjr+bMzniAbcpgPB66vpXluz/ALwiJmjcux1QnUiaqwVY8utiuCPS1oJCgiB5gGMNTspg2EYZzl+4cOFI8lNidXJp6oalkiv3KI1u5dnS+Pj4HwFumwDuzeR1sdIu4OzG3RRA87uUezT5fgkA/wPvYQCDcCYTT1/eUxrn1ONMlRODMjV0pUAdnXjO8t3zfwkTRhPKdTZ5vQlY5xUVFf2cPOXHyCcP49Gl8N6+4o68ErSDm3fyd95FL8q5mbZ/gPQpQrXvWD3l01x/2lVH3759b+f5XfSH9bznKBAfwqe+fvhgfMMHM28L+Fv6zJw580La4y3SSWGiznC8sOo6jf7TnzabfzCzuSgYH2OztoebcbKmMWhTBSKkNkMXdQJQdjFwCwGpiTKIuVSXQFzA5FxSEP+tTeAdVizXr5YRgeurURh6cL2Tm0Tqc3k+V5tcltxaRehUESNfsBKvUjD5qfs1Aoe2x/IIqyfeC1i6a28adjJDHHF6q3bHQ0l/hdYWSuGklUeyp2RnZ98CkDULXUXT09NfUIcNyIxV1y3JjS683JsM0P2P+UjGo1WDu9S8hzmGYOL/IsqsVF3rJhmAdRfv4xTyHexqwUkFMHPiGqjHoB5upPeM7GzkJ8d892XLlmXy/DJZ2pSYkW5PpWzjJZ5fvny5fMLMfwlK1uvIT+4JdcYP8o66cM8M1T1aUwCCP0NivRcwv4W0l6sr5z2of76Y9LQf3kbaX9Z7MTMz8wzSO2/JkiUPMmndy3vTquR72nfTTtXUYbacz7zDJNI5nutrOUrljwjJ362Papdgw2l1CChRID46aoqPA3Dbwegl9LVLabsWqamprg6lg43c4zn63pn0kflOkPvzU0TB+BjalLOxDHKoRQTfiTTohTk5OSdJyKMdsMCmWoJBejwSXSL3ycswzqU9z691J5/r2gtHQh4FnmxaTMiyJs2lThZulLXhfCEAt9SQRqTr9d2BqY5SeDPDyCi9KhEDFIKWjh8R9YQbS6ooBD7tgCmPtsUGB20POBpZo1yJnDLpotxp8eLFdyABmo/65YZ06HLybc+5ywVUddQu+Xv37n0tS/bjjW5hmCIk0Wz1yW5AmqdWCdy3HgA0CnMM58opTxvu/yogOLtXr16LODdMiZ4BkSTfMHX4MwBcxPWmms8h/V7J0v49pJir58+f/5K6aaTV15n4Xue5DeTh5BbhMKYeRtHIYjI8k3JoWtYjMTHx70i780h/C/mq915iNA9A0404318ZYPtzpVf5JHjmurKyMgG5GeV+g/LkMsncz7VbKdObTLozpR6lPb/Bu8oj7Tj11rT5Nq61pgxrww3bqInav1eN4TkDFjAuT9BxSLyknbqEZFsCri7sTM53c8/Og6k6omD8Of2ErFnqgwEpnTEGAQBn5ObmjuG3KgYjUVTL8mUoI/7r3Sap+jq96QJeCEMFlSrJakcsdWIgFSstax88IAiIKdGPrGVG/N3MwI/nPnf7Yw11r9uvThkG6OS/Ok+jbmhd0RAQVWrWG1JRWwnZTTyl5wjDmhoTgNENv3JARNM4dWu7CgoK/oA0OMq6SicJmJUAVks14+IwgOdegKmUicUAnCMlOtf5grTb8z4M5z6Eb+Pi1VJtHlmjR9k2JVpdo4MNw1Lqokmcag9xr4rvfuS/QCMP0v0q55IFNcM7kb9UltcrXZNWAZLz1QDkOgeTHp+hBKPtdEZGxmtz5syZVlVV9V3A/Zfl5eUZSUlJbyEdaZnhxprWG9J6RiSnYEBGvo3iPGTIkPsB2VPy8/P/QBr5gHNf7jeS9DAmj8dlv9M8j2c6M9CrKWdrBrb8FJLTrz8c0vfo58hA+EDAGZrB0V+aBW2+Vld/2ywlJWUUK6EM298VGf3D6CmVR1qeKBh/hpKwyxjjyTFYWzE4J5SWlhqKJ0Fp0/hmSJ/qgI0svIX7M7X75Rnjm80EAF/kfzstIPQWC1ilNmlJYUw4BrB6YPlsBeN1mrmZH/kISnUBl6+RmwVezaIMdZQMqOQDiJ00IeP5Dobk0eKCmb6RkqVgJvAErqFKyZqQNaGsjchLKwqXbrGCNBNMRlFR0aUhX675A4RFRoAAKP9BWlcBRDKelagzBkCVxhfTwQsA9jgAdoJRmQFKXbNPI8/O0mpS50Jdn8lPs7kFPPOqnMukO5J6GI+tB3XKVYIh/S5MFIspzz947gxtdjl/ml56gGnysGHDbuO9rwv1rvUHItfV2ef17dv3twsWLLiD/IxZdy15Def+2yTUB6D10htHfi8bOqo+E5qDu7i4WJXMvUjHE2V9Y+J5kvewDKC+nonqAp6vYkXwJvUbh+R8q0TwWnaQ3lzu2XA4y9vo5/Ak4INJr/X1y7SNUWf0+l/tRiu/y7SqoO22yuMCKJ+gR16woXdE5YtyU3xGG3NKwn369GnPILwaMLjbyA1GSAaIc5R2DUmkqRcNq2vuFk3W9vWfPaoWNhpDTn2wAS45r344SwcPVRD8dvOnOuCDkMh9o44e/G7Kc831RlPPS4ex0yRx73pVBwDgRJdhfDaQrjEld3LvhiBYaAyAuQdwUz0RcfwIPPIa8lwLJg9VztoNG4F5BHlPyM7OvgNJoWVov5mcnFwqlwNl0Ya4K9f66X4sJzCThOZ4SzSV47w0mV3cnWayehawXQgwxgJcedpPU45BvJM4vodzXyv5iJkEphoUk2e6k8Y/OTeTMlRTXjkD1vPs3zSx0xTQycW6A6z38v13ozK4zAzJwMPDcq9bt07dvaGDOhUWFl7IZKANc0eAN131BvV+i3eVwbFA+9MDuc7KH4zkr4ncCMpWJacGeerBp9qnLcA+WJUQ9z2p+oj0pxuiqH6Y9+jns9EbH8xNOmRro53U+39db076xxrul7lQ9d9svqcCyDL+SV41PZycDwcjIvwXUTD+dGdidbKZmZkO0EtdwkvmAmgYSmcWDVjKbXHcp77ViMuS1mwS5BrsswjQdE0g6QCA6mXQjvRK5L/lu0b9px5BDPhp6lQ1t1LfGkjHLqP1jvNcO83CON+SzrNRBjfdgJHGygGr0dq7SqxjEEvS3Cr1ogxVgWpCx5AGgVXCXu7ZzXO7Aa2RulHzbHcA5tt02MuomzpPiesFmk08t5F7y7h3OOVfpnrEiBhKrZR7Kd99tZggD3XK3WWIo76VOlpImA6gzea5bCay9wJVhUREazk/k3s3sdSfwGB5inuNPzbGDTXyLJe9LTU19R0kzZFcl29Zk7X1pHUf9d2oBPxRoMfksCc2NvZt8t2Rn59/k3we1Psp6Uflewag/4z0vvFAA9z/kpEzEU1zYmXSPZ9jGJPMO0jc71DGNMranPQ2U+95lCO3pKRk9+HqGaOfTwZ2H2VnfKBrIfUsfev03NzcUxxD9CO9MY1k84Z7M/SFUbTZZH73ZVwtkTAoZCI8FPyKgvFn0AGCGG2dWMo8uHTp0usEWcFH+19ukWxdMJpHXV+VHYxz6wK73ZhAheRv47B1onPoOecmnWZszYxFx72lnMuX2UxyIHXN/F+uVUMQXVm34U0CrBthAMwapUlm8InBhluRtrWqRYKoyJrBNQRApZWMCMSSD2lxAaC2c3KQOB0wa6atL4B7yqJFix4C9PrRMRuF+jek0nWAYDX3bEXiO5X73uSYJ5ABpPcYyZiOrXXAFh1DAMkCpX89+3QHVifNhJComZ+bhqpEODTTq9bBQpMy0k3SpIh0pvPuXFEYekib60HGjJOYx408Pe6YJC5T3cG9rzhR0R6RwVY/Fly4gqlH77k3IyMjj3q4cTdRvmHuT0lISDCy9HumcSBADwejlJwpKSmzaZsxeu+RzptMRL9jolIN1dc9UyT1OaSVLW9HFIg/O6k4tGA6UBDS+oTz3hMXF9fcAACBHb3cKwoO0qqqRutFu71tjDz6VgfauVKd/6G2ZZS17TMA4379+rWqqqp6nIGbzMz5tgb9of2rJD0M5hcBlhU6WgjOLtMD8uoN+/pDjJ5sujrrC6/JmJt8/egUPiOBT55LfjpDorHWlMLpDL3oMBu57wTS6EEneYmGllRePuMTKcMW3XBJO50yzddawv4poPEdicoMAGt3vDeYUGLoiErI/tcdWYIeN53Gzps37xbARvL4iIlcWHcAsIdmawBQVaBqSQO0zwfIpgP0U5A8DV+kx59eft34rCPNcvJxI89gnzFJSUk5erWRfmPtiTnGUt5C8lXy1YtuOdeccNTzCrBu+mnrPNiQT6R1D5PCLwD/jaxIulGWwaR9nfzLAwcO/Dv3VHFsVDWgakHp32UphzbZ7fge9+abb95pOCqAvI76gKUdl5Le+5qffdSA85p688LCwg30AVnmHkeK/4qmelqSMCm+0bVr159S1s1IzVHVxGesngipMQ8m8IW6ZYVC+ksO42UlUm+sYzQYp3KWjNGCieuJ9I0N3Ducdv5Q+/DD5QyJgvGntFmnzTCNej0gMYCB2YrjK4DGBzTUizRkpeCpeVrQKVQlGPpbA8adOsJJ1KNrsUEkBWgaXbBdQSeZpMWAVhSyeEnbqI5UXlVdm2Ut0y4WyUwikzJtfrnez6jASGCnA3LfJZ13Kdf/aJnA/bPoSK0EiUAK3cvqRPL2hoI7+crTq3XFFs3rSLsfIPLlJUuWDGQZb7j2dUjGnezYdMaIc4jgDIBF2OIGDx78AIBzXkA89JabfqpIqGc7CXpI15BEvp9NqiA0HeJ6KsD3Hs/t4uguWBubDkDTSkKVy0KW/FsB0rN5Loc0qynHFtJ3M28Dac4C8MdQt+OUapFG60pKSsbKgwwg+vx3KftUqTLJRzflSvJNBpSHUkcloJqKior+DMDE1NTUmTrZ9O/fX34ICeDvBEwvAuB3feTAYkCqDsnOzq7Jysq6kjR/zfvPZFKYRZ5uEG5ysEfJfv494HwgXooQpOsztjFWN8rbTZ+MpY/9hjZ7nX56iitY9wIUYGQWVPA50g28aE/4lD4ASAck0dN1wDAisBtKNOJjgMFWfScEJ60Tgpm2URAWfFvQoBHiNL69z9nYyALNeXaUOmPO5Qm43BMfBNjsCoh0BJQm00k086o1/JDh4Rn4lQBWJp2qDQB0H1JrTwDBjcOnAJwxsgNJXkMa8kUIqEZwjgm4MNRba1up67PG7qcAbpcj7XdhCS8d5CL+DwKctvOt1YeV0AKjCWAP7icZbUNPwTWA52OkoRVDJh26TrvNtLS0Aol8SktLe/O+6pRQub8nIHgTkq3meR9oFsY9vaXNZDA8Dzi349nGpOVomKeHoZYS5JflqkEbay0TSKeXkaQB4YHUYwcAXTd8+PBzpf80bpymfa5EqMsN06dPv1UdNHW6A4nVd+hmzWnU42bq9nxRUVF/7v+Qd7iQfM+lLNoGl39cH/B9WqeFCxdWke4lEpOri1+8eHHELC4KxP/elesnlKINrLBVjhgjdtPHyvg/mf8XSK+qCpHb1jYIqEtDQD8cjuPPXW841nXFSsX6sitBApCxNFoLBuLDAOPzDEAlXzdrImTu2tEGKgptZw0BHmFKCzpKjFwH/M1kEGvWleLSlzT0vjPagHpdbVX1EDPq8Qqel3JSfam7vgb5XK5TBvcr8cVy718pmwBoINJLAGV5FLoCLn92Y0vCdDpQY4BRwvlugNkJPDuAMkxVr4yEOausrOwGQUTLjerq6lM0TQPo8jg3QT5eLS0AzaXUuQLgPQMwm+xEQBlztPM1UDNlikeCbcn1tSz5h6Wnp79GfdzA20YxCrn/BxIGCbpIJGvIo9JIzL4vJoBKyXIo53bei+GV3JCTG0OOX3V4vSTaIb+BpD1cCwY3L8ljjjbOnLuaibGOieg4pW89GvleRR5/4h3Jf2GQz3Op2w/dDNQcjrZoAyCP553243fnINTTJ+qroSeXqg3bOSSeieqIjw2w1i6ffiOfi4BbG1wu1TPUPRT6c5PAKmdD/Q3Bw8Gxf4GxHcaO+3kAs2N9CdSjR49mLKm/JGACMPe5lAZMZEdzaWtMNs3F1gcDOgK6bjpJPUkb6Iyg7rZRMLu2pUMYsWMwwKHDxw6fV/qTqpFD87ZmAK2RN1IB/TjA5XXOqU/eA5hkGdASgP0TbayTxUB5fElvGEt5w45rgzzJwKIcK9Wb8j+d8n8TkJ1KenM0gwMEi5F+r9RiwX7CMn0EoJsLsL1BZ+3Mc6pHJuqFx7m3Acl3lyxZ8iplv5N0VgWWIc0p2xJAbyz5tjGYp1zGAPAmQNzIyNNJvyGTw1LKbJ5u5m3n/nSA+16u9QYgH6c8D2v6piTOczUMDDfwDBg5TbUQZTgVaXuc4OsmoJsqWmCUl5cbJ04PwBrOp1L/0Ty3k3pM1jSQtspnklDlMZM2LEFqvsLDdqPOLSl/Ylxc3CzeSfWhLEnDZXH0c2x9Av7isazG4ujPhujaTZ+zH+zUicoVlI5VtK+rJIWJo6OmMGoAy6nPRac5VqUGJxJdmwHe0QDIUBpT5wZ1orsCiVjVhJ5xqhZUV3QMKBXXa/3A/VmApW6/xXrHaUpGZ5jEc2uUpDk28n+oEZ0NMWQsOz23AMI55JnsxhPXZ3CtUrMqN9wAohok2p9yj1LfYADyWUDvBYDrAf6P04IC4NNSoT0TQhLfdYDW+dTjLaTa9wz9DoBtr6urS7asbqaFIX0AxoUA6QJZ1jS3k86Sw1DmxdS7GDAtKCkpGZGcnLyQ3y/L6Aa4nUwZ64IYeF104uDciQB4/rJly7pkZWXV6HmoukHpl3wMZfSCrsndu3f/gPcyhvLqaKhSXQrLp10pyLdJ3qp1ZiO9X6V6wE3FhISE/IyMjHt0YSa/r1COqwoLC7czKTzO4YapNtACfkTHqx5XU2ru+xvA+yTvYKARmVUQUmaJ+afk5eVFJdsv0OdA7tCeY3WnmeP5rkjpSwbtVS2oFZORcep4psDx7JiRA5x+rwC1+4jBOPo5OlIxg7cF4KHE5RLmAzfqGuzjGfa6g1/9ZapmXQBGV4BxZdDIa/gv2OnYsN7gmUiNCW7c0dDGV5OM5zjAsTggfDckvBt6HQMznHIZ1ACMYtLoRRpDdbTgvhxAKt8O5O/U1NTrBTLA+G1AUEm1Aol3F5JgDUtzHRNOp0xlRjQG6NoBfjojTASMNeXpEXoSgn07Ikzy+5bsEgKlkXdz0l3D765cUpWwY8CAAU8AdIMoy1jK8IYcDHIxIH0WuhIAAPtQb6NfyK+s2dxObYolQqK8/QDoP3C9DWW6nwniNwKsVhf81jlFisk+1GkJAPkY9XGHexvnOmgdIel8UlLSa5R3gVGXAfo/LV26dLs73h58ttRvOyeYUBgxsjLvZQdtMKd+VOHQXTnqJffFGrcH+tDHOmRnZ58knS39Mp7+dCr9Q5t+9cRL7MeyD2ih497Onvq2klEw/vd95JwAiAXF45EWlV4XAhY1bq4FYY30RGscRMOQQ7e5vLUcp6oL1eyN+3I5ZAtT9BNw1wShllwapdIZ8gAa3YPb84wheGQ4E1U6B5zGi1lmS9DTW0cLzncT6FlmneAGFUD5Dvm9Y1mNWMF9+caV01oCwFYaV7URA+C/hVS4GhBMV62hKy+Sa4GRL3w2AOPVEqbrXm1sOdK7yND1/fr1uxsATXLjjf+reaaPUS2sN+cMJ/SuKgHAddPq1asbGwMPKbTEjU3VGHT6LfzuRx4dqcMI/mcA3Ddxn/a9zfhtSKMiJyTKkqG0qqcbEv8pSjDq6DMzM9/kvgW5ubnfBqSvIc8vUa6ba2pqpioBf5LVXygpqb77Iqzaop9Dk5QFYPrcqQgoCQgs6+XGDvTDjQLLo1Xu8dCnjZM4gb5eIpHUkfSPaM86Sh8HONJlu4qKistUGXBqmWoGgKc91+4AfDQL00PHzTHJf3oAEj0AngGSVXN/D4DiSgDlv7n/AqRnpWI3BTZrAqeDBjNyjeQ7HFvdCCN9NxcE+lLSc9OqsXy4RtSQ8Y3v14ONwQQAfjBgdC1p6xQh1eVGydG5Po3ONqe2tlZwNsJwLh3RcPTpJSUlp6gLVm9N+vIH97Se8grrtOCEEnBaNOJcTq9eve4hn+ZIFI+qdqFOcjkUU6/TVa0AzBv5/RueuYWyfJvnenO9BIl1kRwX2h27iaewwhJRjtiZer5ppqazBr+3OCh4Xna17lR9BWUyZFGPkKqzT58+U0aPHn2Ok5QMb6Sxk/S/w+8XaZtDVsPVd5eOSsP/GZKxYCx1pg5D2qHT19oGKy0tcLSaMBakJqjxChyM1RT6t4JNgygYfw6kYoDIpe85gM0ofdgBOjkTjEp80vLly0cBNCPlfXBfYPe+j55kcwGTxc6yxlOjQYs419jAoXL/NthnZK6+WZMxl0RKjy1VB0iDyTN7dcYA0JLpGF/mmbGyvBkxWRMu8l5hfDm5eQHYeeqcSd/QSVvV8fLb8ONuGqrrUonbjd+pHH2Qpse7zF+xYsXpdMx7+D2fzpkWEOPYbzYCmNOTk5MN53QSx3LSeh8pdTSTRn/VK+SzhvynUMYFWnyQRx7v4G3yXYjE0cQQQ3JbFBQU9Oe99de9Wi4LJrVpTFDqlRcEGyWdybebwVO7d+++ngHSmgESr9mgBM+A9fEOIJnmhg8f/i3S7jd//vy7EhIS5p9wwgknV1VVvSKBT9S5Ivr5RKBIH6cv9TSYrBva9P+FjJ8q+t9AN6jpdxsl6+KQIyZZ+3pWhiXiQKjOOhyNRVRNcZSWNABeUnZ2tktieYLd6GkLqLVCeuvjf8BZHorBHPl67AhWHjTmhzzTGom4c/v27Z81dDEgOxdQSgVkuwBS8hW7GReRXPlt3DupMt3g2066CVzTKmEd15bSeXboNca5BDcGAbUzWD61UlqlUz0OcA3juX5Iw9PIpwnndyIBf5fOJ5j2o7yDkSCNgGuQUvkXOnI0pbP1BwDV6yopNKN8zQFTN+6uVbVhoEbq2wTp9W1A+8wuXboUx8bG/pa0bk5JSbkPQLwGcJ2TlJR0G3ls4lpLymLHrqO8x/MeWugqzsTVxdh3AHrztLS0otLSUieqBN6DknMmgDqZ+/NJJ1/vxJycnB86SZDeevL5OWVZvHTp0sc7dOhQ279//7O5vuKTqiain//sTz1ztohp6urVq2UAlBIgn++fI5icxDhzI8/QZKoODQzbWA5qPVtDPAgJqKJg/G9oQKTDhpWVlW6MJTJLbgSodkhSHgTbbGP4HjA2H7DqrkcbjbcjcPToCABvMOyO5wCjAp7LdwkEAP3EZRDXb0LalHd4DUCn62U7gKqM+1MCFYax7SRCn0iHecyox0qgxsDTBA1QepFzEwHlwTxfoEQNiA4w4gZpvARQX0EHSxS0BXAdIbhH0qHjSWMBVSySFEj6Tmd+vfICMpxUOt5tHG8ChAb+vAlAf4t0NkjbSbrjKecHpJMmQx15LOXdxFF+VQp7A2uSOO69gPKfzLGX53Xb1h5bz7xaCXd47j3KOQxgXgOwSwTU1o0Sl4SkfbLv1AjV1FPLj4cYQAL3GCYyXVhXyCFRP2hk9BP9fBJ1hVYSAU2tBFV6y1ZyvZqu5+a7q1atorSsUBzecTRUWFEwPkL1RFxcnA13GoAzAVCoUELVFlgHDBpyJSAjSbrS31h+vyI9JveoKxZojFpsDLj/4Vl5H5ZK7C5DmtYDfD8K+IwEZOYb1ojrBQCTNsg7+e4oBwWAV62zA2m/qheeelqubSC9JrovK0XaqQArTea6yp/MOZ1DjF/XTV0szyzimRzOfwfAXBh4l3UGFGvdfOO7l9E4XOYLbN27d18J6Larrq42HFJr8mmvaoNJaQPlzKHemrHtIk/DCk3juuZsO/k+FYA8R/M4A3LqOUf9M5RElPqZUGa7/LOuxtRToqU8cl8s5BknqG25ubnnuyJAsp/Cd1+k4raSGfEOC5C0tf7oozt2IJ1okbbno1Y14bI0+ol+6qsYHANyneiBx7n5Br7lvB6e6+mrripPDCxwtJBqFnJ4H0lfioLxETSaLpJu2i1evPhGWcr43zggdO8JiFXpPAEovgHgGKstEhoJkNHywSNHQhvtEmnIGuO+8XxHQVM9qTSL/H+Ye5pz7TaAdzrff2ICMIKzKotayX1EIsP1qEfVxEY2N7l/yXMAQKYr8lbJiDSbI7067n2T4u+Oj49/n3s6Ac7yIbvUKuf5hVzPMdoGz62iYy3TcoO6FAHGeglGpAfj11Ff65Ap+5vgKtUlk0VL+ReQYu8HqPtztAU0Hw4CQmoNskBnFS07kHJP4N2tolyvked8ytKUfLsiEaszH679c0JCgrrjZUi5r/M++lJVd7C38UwLCfrd2OP+HUajJs2ErKys5YCzwUr1FnyMCXLPwSQW28+QV9ZJ++JDpT2Mfr546sYQSDXfVA1odB09VDkVR3+Ra0Xb4lypCug3bbmvPf/zjtbmbhSMD/Njg6Wmphpy5zKdOgQ6V8+ASjHg0ZABfqVAzPfaYMNLN+AtgOap/J7jMzTkroCusYnmaxJXc+04AHsY5xezxNZ0RvO3xqWlpXckJib24P+7eomRTsfY2NhVgM8f58yZc4qdARCc1KVLlxsBQe0e1wQmcaoz9mp/TAfTtnkLQLtw+fLlfVRXKBlTdneHe1DObKTRfgCmziq6WEvGkwxWV3BdtjQdS/ZKe6mlCGD2Ife+ZBy6zp07TwUg5+s6CqhmSt3JtVUGOOWanBI3q3Pmnjc0EbL/k+Zc7tnqCoMJww289UbRoAynsOL4VWVlpdJ5Gnl2NQAo5WwpQFNuY/RdUl5ebuw8J6+9xq3jnT1J/X+O5P4ozzwLWB9w0y5oO3maJ2iJwefpgoKCLdFe/Z/7CYE45Jagj2wEjNdWVVW5qX1m0PcVgETdbvRdrZckCOrQYB+HzJGXIdoMhwfEgIpL6EEG2QQkBK93kXAFpskA5Hwa74cAcekO0SImZhKN95q6YZ51Y2yFErEOIc6y2ivaFjpYaJvMPYaoN+xSrHrhgOd3BwD6ddL+MyCSgJTYjPTvnjt37inqT42rVlNTo3fa1UbpoNP0ND6culkFXw5DxhgdZIhmYHS0LdShKgjPpLebZmDLqNM/ub5B/l0l0m7duk2TAc5NOq7tDgKD9qSM2wC+uyiL5npOLO8Dokk6e0iLSV4rDFEESBpMVauQ35PWr+Q9liSfZ1uXlJTcYegkPfuM3syx2IgfWnlQl37UL5H7MwDVM1W/UL6vM/ndTl2Tc3Jy7uTdN+EepXrZ4loq6QP+q5gkckgjVcn3QLvamsAxMR7PpHEN+XyJe7+sK+uRsm5FP1+MFa+H5qP07RrVifSxvvSjLNVnmkoaWSeQiuXg7kL/qwrt0Y/E7yMqGR/mLJqcnNyyuLj42wxsXZWzARjdbSPRHwCsleqYaCR1sjs0kOCQaq+JtI2BF5et11K9qZKdjwnKPLvIOHiAbUfum6j5lyTpgJeO71JcDu/QocNOAOrqRYsWXSywyD8MCKq7bQTIyiqmSZi8w4WAnZwXulnLcKbrtYQnSUipsXv2MRMZwUAbZiVeaTffBoifIM9qgD9ZjznuWSr1pXHu7HSkZ3SRP3BfPuB/AudT6bCa/6guWImk+Y5RRrgmj7PAXAXwv+vSjnKPAtxjKaPk9A0BV/mZJbmPAbzd+JRw/UbSe5A638xEN5W66UByrs4n1Oll3oFWH0r9TogR3TDX52dlZX2DU5uYANxcHMvzMyjD/2eI72TKOW2U07Uo4dls3aCjUZmjn5DIySjpXbt2nUXf1CnKaDurZUR0havwQb8xEG4x/7WWyhG0j1RdEZWMD/EjGKWkpBgr7WIarBuz5FQaZnPARRyhvHTTaO8+TkwDi8bpacfvnoHXXCWH9zQKOBgiE7LL/6Az6P7ccPXq1UrIj0kez+nXNaflnExjmr+Nnj9//lcFkJ49e1b36tXreSNZAIKrpcCUB1mydtHTcDCkoUefNsUxAObKINr0DPmFAdU5hkCSjtKNQnXMSLDLjeZBWjqVjAAkJYWPRI0W/MlHUvxWBmNksjiP+7rLsqYOnfK9pWRN5xWML+X+Usn0uceozUMsi6ZrSvPx8fE/oMM/R9k39+7dW7viRkwsc0n/Xs4ZmmqEXB/cU2mgUkDW9Jfw7EDKuWfIkCEvDx48+PmAnOl13asBbCNo73FDMVD7HFD6qaysLIyNjT01LS3tRJai8xyAlCGG/23kJDhCz9bo5xgXtoxnR198lf6mACSx1nb63BJXfgFPheReOlsZbb30aET1joLxIaonHKiA1vEM4AtpjBzOOTtu5jAk0q6AKGRvQA4vV7HE5W6StTVsC412JiDYSea1YMd/TyC5RUItBVKZXm1NASB3BEsDkprfI4neDJBVzJw58yYbX6mQtFRtyD/8njR/SJ69+TYkUS3P7qZTpcjDarw1gHex4eA1z1FvSz3akEYu97YCOP/Cb3Xe8ubsoCMmUB434AwQWgfwnmH9g0CeK8hXKs6zJHgn/6Z00lidLeSlCMLY93aloBcdaW7h2igN5wG7xaQBrm9pa7lNjzJeUFRUdDFAGs/940hrKPf3qaiouDQ7O/sDrt2gA4j15Z6vL1u27GqklTWJiYlPKBwD2Ba6OemMJK8vc/17TCia5W35qMGWl5dXmZOTUyFJVnp6upYod5H3Xax6vpSUlBRzrDMIftI+rc7e7/1DUX3R1REHq6tjUOsIJvQyhBlDoUlr21jTU/qOdv9uqq+gP+7iXCfe38qj8d6iYHwIjadZFwM1rrS09E4aooZzywI7Qz3adgQUmRGi+EAfvM4lPcCVxu/rAIzbAMi+qi014QpAeG9whFzGe4LGFwwEaKVqCdG3MBEUkveVSOXqebUGkBB+EdLxc0ZO5nwq53cBRjfTke4EgFMMNhpsSuhPUsV5peIy0m3HvesAsiU8O4Br3QCorwG+8+hc2/kfx4RzD3lo16ue23DlYfwwA4Zq/TGD9F/p0KHDU9af8mmCtjEIO9S2e/fuz+quLU2lTi8AfouamppmSNrvk242+fQmnx+VlZU9ASB+nTzGLFq06JH8/PxLN27cKHn+XtJpx5yhxYQk8bbBOvLJ5rnW8+bNe5b7GiMdn2NAUtL5Be/HiM5l2mcD5nsOpm4Iz4eBJ0nvTNKIp/5PLFy48H7qNeBYVFWEoBqSHnnYHmHcN4E3BCL7hZ6jrvSMTEM/iryL8J799aif5ics26c5AYbxDeubNB6sXr43ib0UWuir7nm4D6Ow5IpVm8la+r96ZKPHbA6l4qjO+DP4+JKR6rSe+BYDV4nXwIQ1QbgkJeNdIaiGs6tcETSkUue1AEWy9rCZmZlvqPwXd5HiVgXPNKw3MUZi0pmEtrjmBSCVAzC9kESvBWhTlCYDm99tBvMEyK4EhCbIO6ykrNu0fBZ0khtJ4z3+t1WnLUmPlKy6WlP2AVplKMkCQI/x+ywAT/3xDkC4oaHHGZwP8Kw6VePivUcZWi5fvjzOQKcGDQXEN1M+TfZmMJi30YFNu71lIc2ZlFdWOR041smmhrR7AnkUq7Zg0J+/YMGCqyhjHOD6Budq6urqbteJA6m0SC9Cg6VSvk3geSYTTZYTx6hRo8Zpbjdr1qzpBnPlPc2mDYoZGMa9Gzh+/Pg7kcDvQqI2VNXH2n163VUG9VlMdW4D4McC5Ms17P+kBPKfpz7KBKj7ru7jWbzrLsEEJiG/AsNu2qiopKREcGkwcODALqykfsy77iH9KadqaMdH6U81WqKoB7WfqX7yXUhLGupFD/ZePyri8keV2w1xN1zph9JWHnXbb0FYYcJ8VO9pzvhRE4xjzICj1LktfVXbfTfS3eeRc8VlrXwx0h1sqh9AOWpn/BlIG0hzdswRK1euTDUKMefK6ES6PhvHbltAGK96wsYKVRUyi7lsz2VJbYTjXiz3v0k6JwMY99I5qgCCMjqGwUkj/BA6NAThi/YEREMG7pSIfj3PDg8HA8BUB2hMYcAIol0oX7n3G5uL8s10tibtdMpxFYPpH6QzmXw6kacDNUOwAeAaI9W2kNydTmV9simjm4+xmrxJNMTAzOT6rXRIaTZzmQz0oksm/ZFSWBqskevjKH4pYJbF88kAwmRtk+nIbii66beDSawVZZwHwIvhE5CAb7Ws3Pt0enr6bwHXp8vLy3vpTcdgjNf2WWsQ3yETQTnPvtu3b9+bKysrUzivx57cGH/nmduQZK82+Ono0aNPQrqfPnfu3I8EjAPtAzABZVOOa6jLQNrmKdKtOZbA2D4qayBtdBUTyq20W5KTjB/17lKWSpDP9z+Qhn/AZNuqsLDwuTlz5rhB1SArK+sftGUpQsOvAKzCfv36vcn91ZoVuoLhfu3IC9X1+16kGN0fdAVVQczDd+rxcZtaPtO7d2/5qC9nbF0QFxf3CH3mVaPEH61373tQvYgw1YsJ/0beh676jxcVFW3cn5UvlGwVnBhXQ3gHmkBq6dSeseP4dFzFBOHUKqjrNsH4aHyiYPwJPnYKpLVWNN6NujfTCLOUPINNu80BYby8EeHM2SiYPXfIRMZ979LZ8un0Rkx+SQCnU19FQ+oB/Ay4M4OOvjVQTewOeFEN4CmwfpuO8AhpJGqF4KCjo2xH+nmVThBLWvkMFDfpWmnypi6b9PKQYu9nwCixT5TGEwC8hutPcW0JgHm6Hm8u+VUDSNYj/4MAzieF9NpS32WLFy++gzxGUcYH+e4LEJ7mQATEkxk06sw2GMGZc7FG4eBIIN/3KN8bFRUVLe3QpKc6REKjHSyHc/l/0vz58x8zogeAvd3OnJOT81cAOCngjxC8G3LvU5TveSXtILRTLvmfrnkfZZ2gNQogMaJPnz6P66hiaKilS5duVBccENcf0oaNUZp5L5Noo0kAcYPDCbn+7+6jAG07gPiOgoKCOKVADwBoLu/oPiazD3nnbfTtlX6UdzSKNhob7AHYpoPsE/SZM1nZCDy3JSQkaCLYjD5YZJAB2vkC3nVH2qJEfX1ubu4mwcw+4SoEMG+QwYe0+vL82zo10WbbQ1A+kBTtREB6Yz/88MNH6SNa4tzK//akt56+vPdIVUUOJSYW87iA/vxrA/y6+qOv/ZHJ9waEgnX1y+a7CKVoJuYBgXOXAkoS9yUEvMVa8qySZEsri6OlWonqjD/mE7o8A1qXAphGYp5Nw5QGwGv4lUaBFLYlWMbsCVUVfsugpqsuwPUmv3/OoNfDrZBO+LQhh7hHQp/bkBAHK43SCba4XJN8SB4G8rwAMEoi/9Pl/1VlQIedLbsa6SmNa83Rmv+JpLWODtTCsEp0tvYMPoN6LuN3Dtd6Mjiu4TvTTTu5jUmrWspNyt2d+9akpqa+FZD2tMnLy/updpQMyLep/zuU90M33uzcqjM4XyXvMQBWTtnn6Z7NBPEb0ppB/SLl5Ftzvo2qQxiocmVkIQE/UlNTE3HDVnIGhL/m/AOQ5AVS3MqxY8ee50ChnNPIbx6S2kIA+0YkuV9Q7oYsr68cNGjQRH7/hPreAwi/np2dbSy8Qwbi+jpkl8iUrUFgvndM7We4aUq7j0ciVo3kxm6DCRMm/GTEiBFn03ZPMonFsDrZxPUSJhvRo5B2M3ahG8E7mSRTuSbroJHCtYFvaHRsV1P0iZZIqtfz/u9Q9cbv0bTbX+gvtm9k6U9/EIgNx/U0/fRK0m3KoWrpoHpUn3VTVnpXJz/JdxgTkYjLutkfqWQsSGZmZmqjfzdg/xxt+jp95iLq+jh1S+f6cEG3PpiGemWjo9NfE9Shc88syvkS/cKN9VTer/QDazi0t99ZX00RlYw/xY+NBVB0ZVa9hJc/l8YqDTbo7LSb1IU22Gcj3LBexOe9+/bi9FzevYHOHInkIUgKQna86urqeXRUd2fvEsjpHD+g4ecoKXL/aH7rNvwOAyAZkBvDoBgSDDrXRG4iDNKF2dD2ajga7AsZHtFZI5FuZfDdShkW0aneAfQGBLpiwxxtlOuB/EbS8YcyEEqRmppxj9Jtd8p2LQOtgHTykKjuBqCu5ZrRkCcNHTr0e9OnT3+IQZ303nvvTWYQLmL5dz//v0FdnuGeUiT+PgzyLTqhUO6tPK/qpAGDIHPBggWP+6zSkGZsbiYqYbBs/g4S9Xbq+LYWIAD3JMrfmyXzT+341FFugJ6S4FOmG5csWVIicIbL8IDW88glk2Ofo2Jv/QjFutKzCrkDkHyOdpqkbXmoQqCulQaspa9lBRuym+krG5BGjdCyJ2DOaxtE+u4RbnbRb0+Sv4R2HEl/GAzY15DuebRdJhNZCyThLNLqwXOGtZJLZd5HTSKCsSu8IDL5RibWSx1TsbGxzwTWSocNxKom6OPfeOutt36EQPEi9XyA+snpIse4K9u1gc35/1lhBPsxMil251u1hDrjp6UsoMzSaK4IQnyN5v9fjpZkHAXjj5GKWa67oXAhDSNnwhKtJ4JNO508jLSxOQDgRoFEbMvsCCI92ykUC3IMI6TJWhAZo6nWagDXNsnV6ex2wKlIJt/hfAvASCBWX9fJWVdeBqNb0DnHiBlyAzPQjDwwEpAz4sYqOn8O3+s0t+G7EjCcpj89UkA89TiTwbXRAJ1Kz6Spq/MyzY3dOHOCcHfYZRn396ejJlHXSsrVSs4JwL2KazuR2P8EGA6gnDK8bUGKGkc+8/Ta4/tZAPQ6yvol8pnJ9RZK4Ma4A2jTmMz+25D3ShqA9CLN7FgS90tJSfkVUpXOKW2Cd5Gen5//Y5nXWEWMC8zZBgrgJ5100hX89p7IbnfUMeN/AUQSdN7Hm/37939m9uzZF9t3c3Nzvwdo7J45c+YFaWlpv+S9xfLemhvqiz4gn3ZE+nRSBERbA7CpATCpwy1k9XG91K60py7pjZgcr+CeLDcHWfrPQFAQ3FIAaL3R1DvPHTVq1H+T1pkSQCE5/w5wPajU6HnLqWdnoBbSwWgYfS2D82UAoeRVhyx1BmHI3Mxsy4rqJjceyUOLoDr60Qb6cSbpt+KQBOuA9KqSaDHBxMnDIleMXncKVwZq0HGKfpxAHUfxLm8/UAy9KBh/ClIxABGnVEyjZEtSI9jK3MT3BjfbAiBuKEDzrRnXjsDFuIksY0rNpBMhs7HRtDigY7Q0DBOdoQXnHwN8m9EBEzUqN9ozaaxicI1WLyrgyL5Gx/45E8NJSs7qktX98Xsnz50heRBpvK1ZmdGbAcuTkUr+RiccY4gjvtUFGzhRzmH1zBUSudMp64LNyDX8vo0y9aO+L7EMPY/BeA4D4R35WgFYNw6nlpaWxvL9KkBay31TuP8ko5Tw+/s882V+f5/ncinXSvJpFh8f/xx5X4Z09ks5lQVigHkeYPwjHUy498uU/wLA43LyacYzXfjfhEHuDn9koDqQmHC2jRs37nvU4THAIMpNfBAAAnx3Dhky5Br5QViFHI+kahACJdBW9KFfeI/vMxQ07I9KdU54gIq8JQa33Y1EWQyo31hRUTFN1Y8qDyVqAPiRvn37nkj/ukwds/2XCTgCxPS/XaxwfkGbv0A61VrhkN97rmAOBlThJJKYmPhP2vhqTTPdg+CzygC6h+tIEVBfWj+jiqd5jn51Fn3ciDK5TEq3Mp6e5drm0OyvfhmDd5ZI/s3p23MYU/MDrpdkg/iSxovcNiIIirvC5x2nvssw78MxBYz26o+QipOTkzWBuUa7Ql72igb7nDs8dHveEtgENw0sKLbTgVrRaYcaXJMGVUKt41vniSzA/EU6qU4O27leGJhd7Sb9zXR+vcp+zD053F9stOe6urqLAJ4BkvjQKeLoqFtZup2uJE4H7wGoGaJInodLkNzPIO3jAbwOdO4Yzg0j/TSDJTLzV2p+Q752oLmqBQLrCyXbK3T1pA7TANhKBtkKBkI818+j7Kks7ZKNhgtIdiDfL/MehnFtq0Q8DLxJ/J8FCCfSuW+RTMgNIqSpm5Fe0yn32TxzFtLUf2ufqWRLev9kQNzO/xLqnkl5f8QgfhLgTSWdE3m+CYNyK1Lcc5RnKYPlNOrSCmD4H8r2mtE6Dlcn/J8AxoIXgsMG3tc1/P89Uul4JsgIymimFm5oqeMdOnSom6OaJrakPd8yeMHcuXN/OmzYsGvpQ0qNlQKl1hMAWeQ5gLeOCfRZgYw0bp86deqPIiAC+NBeq+yvpCkz4Ur7HH17qJPvwUzVLLNgjXQ9Y+TIkdfPmDHjj6yGuvHMQvqCx2FNvJZViZexVENaK+lnPSh7Z+ryc0ES8DfizAOusPYvV8jGSN9O8p3xbdixfAMM83sUafc2ujnlPpmxIuXt1lAtFKZ1uDbZUTA+yMyqNABgxdO5JWFXKl4bSMRbg2NXsHkn3+l2QEbpeJA+64GEm8f3KO5rw29VDhqI9+eZDNK+hfsKZW4j7aZ09ioGxFMA0pfUBQOyHZBUKmho1RGtXPIbhZnfVer4gigD6uqG8DtZXgauN5E8CKlzb0lJyUSkmnZ2DvXdAFyuO+h83BeplduCjjiafF5V/8URS9p1PXr02MR9RgvZq0s2y8//YqKYyoD+Eun8jc65gE5+iYx0RUVFSyXmAWB/0rlz53gG1AnUV7fRNpTrq1wbU1BQ8DU7qjH1AieDFTy7Q9UPA/3LPGNMvfHUe5j1kydCvSPvoltGRoZxAX/O0QQQ3u7GmtJHfXOzUFfneY9Q2gvPhQOzvpH/F5m7ONyEZGm+FMA5mUltPG1wBxPiMN5pqXEFFSxos5fpRy8ItE5u8kYDpt/kXBPaJU39Km0/mgl3DdfWKjkL4L53JWXB2QAC8m67ceg7RVB4DHDKpg8so3/l0l6JlCXl46REywxQmsazw4cPX0AbZlGmWYy7nYerhgr3EFjJlZPmqZTtu4yHk+lnCbyHdUj31/OONh/IdNG+Yp14F32dDAJnLyluB3B5dBDDUiyIYczP00X/aH2iYHwQ5b/G88zo59IgRtJYFgDxzuAQBfYEG3Y7gw55FeeW8uxzdMJmBuvkoyQ6OVi6GK7tZcO2kKbhW5rQqIt1JVZ9QB5GzHDXtpaOYPj6nep/SWe0FJyGPQKsPASufHW9pOOudaMAcPSvqKUsM9PT09cxGFxGtUUirVHvpfpEfmUDKCIpnMRzCVJkMhB0Lf6rRD6AeU9VHXJRMOBSuZZFJ86Sd5hr8xi8MQDp26T9a+67ikH7Z35/R3dmwdSIzwz83/HMKKWqwHDeb6kzC3imCkBYD7DHvPPOOxO9RyA2hJLuzLzvZABgJecmyAhHmj9G2oqYRukhZloCRyjlaeVCukZP0Xba/cs8pR3bTxO3MCSWNuKBSV4ETL7Iag5ByPcK2OxlEp7E+5zJCq+33qKsttZ5vbCwMPIu6j8zZMiQJwGp06ZPn/5D7v2h72jcuHHnDBgw4BXabyTv9TLS7UEffZ92ftuINCNGjHicd1s4bdq0n9HHSu2XtP/XeOb3PL9etYAmgx+najD/yspKJWSdd4qV8I+UX9ryK5HTd3LpI1dTpm4c43VpZsWQEwYP3V9FYT/RkoJ3NSjwYJRCQIeuEYzJiZTvdTm8+TaQwgLVPkdrgm90++23Nwh0Ku6U/sdHPbAxBBE6cS861g1aCPDSNWVTFbEl2LSL6I51znDzgc7kpoabATPpsE0DoI6YUqg7kxDIUEMuabiug0cujdkFUOlIY+sZJ1vb5QDlJDqQPA9uyBl4NFcbXf6nOiOT7hLtnI18bIwuCdstC99tJYLnep0RNtyooEO9rC0yoHQlQD6MgZknNzBS7hgA+111xSz9v83AymZAKTGdigR6N+B3NWD5BGD4N109GVBSBrZSVRFYkmTQUc+m/GVK2QzsX5G+er6GdMyOOmUoUTjA7Esyymmaxv13IKk9CYCuQ6r+Mc+dG4KqplUMxHgG90sJCQkFlNkNI70AJToaARBLoG+Ej/Pi4+P1+FsjwFLOi3Jzc1/gf5pkLkbpJe//4nxbJzpBOSsrK5VzN1LuMUiL2mIXC9hfZCL50CLAdmCy3EV71dKu2wQgD8EubJ/QSoJ3oh34SwB3Bf21G+95Br//yHs8e+rUqa8uXLhwlCG0WAWp9tLyJc1QWXwbvFYpsr+elvQzLSgacvSgL5/D/Xl8b/u49x3iThjU80jbJxzHUr6qAybdzfT3PCb6GlcPYf0PJB3TR2MB7Lvof44jvz19Ce9OW+x3SVeSrTH8nkS/ralf/sMtq/spUcn4AFKxNpMav7vpppecuuEAhDcEdJf+b6hezOCe/F5PR1XKbRx44QXveG8k7k+gU9LWTdY2dbqGc+lIB+lDo3bj3Dp+v6XDBWma3guca865kcakE1yDcESrOWYDbKoshrnXIC2lqhH96LlXQqI6/rsJuIvyVwDId3JPP+pzviDGEdkl5lyhfvYcxoq7gcF4JgPHzbUPGbjfJ51HGVg/pQznaL3B/2zSlGsjw+Up+Y9SN+yAV3LVDds9xSB6bgxL1a0Asaoc1SJ3IBG/Iuk+y+bvI5WdZAcEZNcCjhsBjAQG/jQmgFkffPDBHUZM8T2xOpnPO8kMCImGIsGXce+N8meQ9hqkuEeMHchgmeHueH5+/p2mhYRHNbo9STu2Z7B8i2uaFu6YPHnyz0aPHv1N8n3YjcBj2RrjQHwR+/8PzdxC8639Yrz9n8MN03nz5u2grf7C+/mrm8JLlixxyd6bvtPEdzVmzJi7aJPbaUMnwg9KS0ufnz9//om2P8/3ol1/RRsuds8E4EqhzWs5/nqoE8lRmpC0OjJy+l7A9Vr6aUcA75f0kV31eUlC8qtQ7xt4EPY1Ag7v4V3GQIXkUQgPF9rneGwBY2GnfZTJpzxQj7mntPdIy/6FBePQeLt+A38SF9nAf71LXl7e8TRKCadcz0WsJwI35YiPv+Q3NEgnidwBvxJ3Xt2QE7jrKfQjzGw2VjgLe482tgFodaWTbCadVjRmvEQ+XH+Za0rX8goYZXoD95n2KqM1U4Z2dPwz+NYqwiV8a56VNUqWNLnsszR1I40xlG0B9zxHneSZaA6onQ6IdkIykFBdoN8iuxqSaBKDbgOd9SW+H2RRcAkSxFe4pu74PPJdzCCd7Uai3nZ0ys0Ar+VNokOuIm2l8JkA+iUAezc34hiMmugtJ827ufa675XB/U3K0J/8Ux3ADJRSJXbKfRbvqMOMGTN+yIBuodoHABiKlH2XJnyqYijP8SylX9MjDDD4DYOlgwCCNP2QcQWZSMpJR3rRb1DnOkBBB4TfUrchgPIby5cvv5AyrK+oqPgK5X0UkN7xeeyzB3KQqM/3YD8KSGxCLud/eY25SRr2b99v6IzgtfB3mFbIOeG75nBXtAPvpw1tIxdIjasHVXWaYZoPgFaMtHge16bSph/QNmuRpK/j2R8wKU+kfXr6DFJwViBdbhk6dOgNrC5r/02k/ZEXaR3pJ/alU5mkp1D26apo3BOyfn5UXSkt+/E8dXRfRq+92dT/W/SZr1HX+7V15/oyI7IjZY/nXd+TkZHxXbBiR2hOV5986FDB+QsJxr4UXyodQmk0QhTtuXB3+GA6QxtAjyEGujv7LSRYEbCCDbuQc8IXv1tmaX6f4OYejaTU3OJ/x87emLAcDf7XASQiUQczsZ57J1IOzWK0O25L2c6jYz8EyI3lW4+oMRqlGyFad+V9bRujdJzBbzuFwDMx8PrTbXRz4Josv2pb7tPNswnpnUt93OEu1FyIZVcxIFnGoDmLDhjLEZeWlvY7ytKLPOXM+C311iFFLo0TjYUnLbLBRJmkdiMNXeqKQDIdBulaOqbu2LP1ymOwDpNRzkprKtWnT5+f8PPvXG9Bh9eLMI7/yQC20TzU/XYuKSk504CmgrHnfGdIyTkDBw68znKTTn+jkvDcplmzZv3SJXZqauoCJoxnKMs5SDpXUzfrqh11L4B3cmJi4h2q3Mh3GQBxBdJyJuXcTTpbuXctZd35eZBqw8MBrERml7LfhhuV4b1OZE7YuqnzvyennQh1wW8j2557A4E5Zct/dcCYmE32Xc6p21xPG7rrb9SXDTxjXDfVXVK6Gn6rj551ANUi8i9134L2LSPPnpI56cDD8SZteBnA9FBsbOyfXUGRzhzS+fpxxx2XCCD/kIlvGPXY6kYh1+UNWfDvMEUMQdHDCOOU54f0qQ9dpQU2xw0GDRrUDUD9iZZJ/fr1+x2T9VQmjsgeA/Ucpnkdz62eO3fuH6jvZMbMAwgI3+V40DSM0i4/N33tPProM/VN+A5XQv7CgXHYeRnM8Qz0hxnwrelUSpU7MjMz/wwIvSf3wMGWSEhrzZnlT9M8h7RkQ9GUbVswOHYF4Np036Tb7G1NvdzxdzPPpZF2x4F0vDfYIAgdQSJjxI5AwzbnuVWUTRCSj1h1yAZ+n891TYizAjrNVVpq2E58x3FqhFE1KNsHnJMRrVHg5udEoP2znKtrGWCqK1YbfVqLDGk0Afh1pLuJgTdKwh6A8n4Gj5GZZaaK53yapO68nwkMyA56TlGmPJ6NoUPfBDgvo7P+gPObdBIAQCWQ0WtPT0DN3iI2rA6E9PT0PKSii+TjYHl3Cvk0oeNe4UTCc5kCqsALePcK37sDlgG8ccCAAX9Dqr03Nzd3uR1cby/bUwsAOv5IAPhuyvkmZbyHyeFBBs7FtPPlSLq9yXcmE8vV2dnZy9U98v8dXc3JsyHv3MlUqbuW8u89mjrj/cG1PrNZ/dVZqCoQdK2v3B1aoDBRxHOLpojqXjUnlMd6XQCihsMyyreTWAedF5wAeW5mYG7pxmw72n2T3p72PTdm7as+y3dL8u3Abyf1TUZ7qWcTX016xUiNO2mrhawYHuE9uozvwHuKLyoqugfwiaVdplCe6QCUUcLPpB/8j45F9KGbue8tzpUjIV7H9xjyGUq7ZDORloRmYv+PvfMA06uq9n6mpPeeSW+T3hOSQGgBAQlNEJBiA65dBBu2e/UKesGCfjYs1y6oqChSlBYIpEB6n/RKJpPe22Ta9/udrJ37MncCAe71+xTned5nZs57zj67rL32qv/1WkPUXutPri1YOli8ePFO5ucX0p3/Q2MNOSR+OHXq1MugtX1mqCL5fot5/Tafhmhw43r16vWwe0HahZELGjWYg/0KoWF5RpCuhe41aGkMY7v/n9EUJ5Bu2ZB5ENU32Oxv9n/VEENzONXfMnbs2C+zsb8EQ67JJRCZiJgQMjwkxA5MtOWP9obTrjqwipViK5VArE0Hoe45pvFl9qKqyMyrl4LAY3PmRcl4HX7lLORonvs8KtJ9SG9Kx4bwmPAwQLumue70tw/MY6FZT0ZBSAC8x8y4MsPT6Jt15sbTXh/Biizkyd+tjSowcsINyBgf5vcuiGs1nwPiYETZGCWqbRDZTt5juaF2XoPR3cy1xrR7tU4P5mIefWlDX83Ce4A5mcSciqp2WPwL59UYaO1y9C8v4eayqatHjRr1OaMZIPhTecfZtDeWZ0634nXAVepYm84mn873xQKvIH38FgYzl/ctFnUt2Tl18snkaa+SQ2Qan3N4ppIN5loJiPT58ePH380YBtPn2axxhSYK5585njZu3LjP02Z/GPjTtDefthZzz0sY56s1I+SqoZHGm/vRpNTBmoOMp4B5KzcLk7kS57kjf4vL0d5wQj7dxY3msGjO2onwp/S+Ljz4gphvMzXZdGUYdyEMwPJdaxjDHlXtmO/sY5+cqxTKl+jPA02pW5OOPzqK7LcOe+8R3If5OoIAMpFDbQBrs5Tfu4uLi3fz3VTmbpxMHG3kSZ69Hxo4n4O1B8+3QT1/D3Ns1ZX1rO0i7p/G+46iiRiF9BHWYxNr/Av6Oi8JQH8rO33uoVjvmP2uXqTlS7cT6P9AmOweNKnr6PMOxvwl/q/m+/kcej04mI7OnDnzEiOauDYDxnw1895p2LBhP2EuzeKbvXr16ruRqv8lIcwlHOl/MuMcqZjTeigS1Jmosi9AGKbSFrAZH2ITXrxo0aL3wizu5u9DtVUbw6c4/d4U5oGU5JFU2sqQOgpN5ODvhXnxU++/AJcSSHy+DpCcUkoulAkftjEGJnW+te0MhVNV5DPAzDtttBYQpf+bLWskaJCmBja0JZCac70lRNVTxg2x66STy++I9zf2QOC7Yjbun9gYf2ETdIEp/yFwaHvz+3yY2V/4u9QqIpo4uHdtSFrr+bsTnyeZh8WobW1hgFaqFlT7TDbTBUo44mvIdKKahxWvjzMmyx1x2P2MQ+YUCPrdEG0vsYchZE0gmTQMkR8455xzPsB3v2ajV3sAelIhnVVrQlJySZ7uXCdUIItlTDmhasl0LWzKmIcZKcKmuEZ8Dc01wm+y1lsZz4u8cxZ928o1TUxNmZO9Mi77JJPKNQnUZe9LWVWO1XH7W+wCrrXnXUqcvc3OsjilIY2x/kKAGmljNW4dP5bsMeqluXZwQxOZxz+wTlbt3mZmZQJ193dEFfgO20pogFWp1hrChQk9LY05h9bHiL3LXGr4FPWuBW3v0Qwmsp7jZg5W8N5C7m9nTLqoe6IAWsBVzY5rp0H7yw1RQ3I0LryTaeiuGetyZklJyXdgVndxaD4hCL0Zndw/Hin5HdxzFWtejTb6NvpfwpjWWECX9R0Lozufw6I7h+/jZWVlh1PF7v/taJbavqH0vg4dOuTR15uMg2YvmKi0nH5ugo4+As1+kv5Zaeao/gXG5cFq+OVHjRARQ2bhwoVXoBH8jLn5CM+s4B4LEacKOP+UjHM3jRtFqVG0qXC6NeJkmw5RWkCzv/GzLMxoUcgSYSfAEj59WBBLxi/lmtgTmgiqUykl/zYTh99tw3yQxRq71vxfELbh3P5IAZoRKhKIjxUxIM65RhOykNoyt+pEU3I2DM5Kzdp/FTkt6hlVaP3dgA1wjpvdPHmIxeebHqO7/CNKl6q2tDeXDfMNvhOnYi8b1T4Y3rON7x6DaPYxN/UjhVXb9QokHSXsIj6DNY0gJdREbOUZmkwg3q4yrpCsTL0u79at233cswyC3Lxy5cpPc09vNJInzRBctmzZp0Ni1rySqam+b8yYMdPZ6J+mT9OMK82xjVYnG9/LqbNpQ8kMYAwdWMubTCxhs2jzzBilTEys3RQildqMLDFNITt4XtS6xfT9UZ6bH4wuO9BgWK6r6mdVOghg6PoPNCOcZk1AEyOgkw5IseWspWBPq2lfcKXHGdM67hFesSI52lIFi5SKbHWNAOyxwrel4Ado65f5eo0DryP3DjGLUo0nDiMdvRtpX5WZx/Zqdmob32nuGovUOpTnG4eprCYyL9fz5xYY7wu0v5B2L+O3UvsKpXEEg8bi/xseyLveJ0Qk73mSNTJqZoh7xLJh/L4OpnwONPQQ9zwIU9shc9JfEBE9kwxZ5J1zeEd31Pwvct9kJOfJHlIwv39BCl3DgfEX+pnNxd/SdJEOOcbWCXq9IPaEJj2FJtd9D981gS4vYl0ttfSb0aNHu1fOhmZW8ns4fd+FNHwKh4p29NXQ4DvnzZt3PDklmaVea2HSfyhmnAifRd6G5LBRCZPPXBbi60yu6GTLONGGQJjX64CA4DKCcAJhLkpeFyrNGM4WERRVIelmyR4Rnubf4rz6Oz9swjURB5wQ27LuhHpqrr/ha+b+72XhnjBlmv/b8n3TAK1eqjmCT2eutwhzR4WhZPWOgQ5l2Bc83wziP8SGWAQjGlbvWDUQ7cZm2ynhuEG7wyiuFfvBd3LfU6qmMJ9DfKe0dgBiaixKWs2xXa09dS39NDZ0mnZmpOLRvL+XfI97u7pxktQIQW5j7n4qNgX3z0A6Gkbba/jM5F1tdX56OCBhNE35+jLws8466w76fqcVOFSdlWxfrflJ+yNqoiGFN86YMeOLbJzO2oKRyP7Mpn+UeZ3lxoJpXMABc4bVQvi05f92HpQcUouQCL1vSRx0cuxi5kQJyEU7n+/aWCrrmH8228TdGH8f5qkp1zZow+aeudDXzoBTXZNKBqUkgmQTFpTHQ1qgmQRIo4OYw+JUmJNwpp10jiqtGovuxxDGeMaiAoU+l+zOOQeLh1dFlOXyeuWxCMq8+mor4RSUDqUtK8MIpzoCJiNGdCe+V7MTwF/TmiYwHcitjDqgb78wFd0KMkqHRgxZeiiqfnRi/ON5br+JPUrP/L09Plto4yree7ZjYJ81Zt2fgNm3gzaEYhVaUyCiUwcMGLAJ+njRzLu/JUOOVPoujpW/3VO7na8AzCqWZowC0pShfZ7x/Qg6v59rt0IDmzl4/4hWfY7aXs+ePb+6ePHiF5WKEzN+rVEU/7DMWAmO30/AMOayWS9gkz7NZCq5DJDYmOhqTrdrYA4/ZEPMT6Vl2FytV6xYoQ3X5ImtOdLScRVRhitwjhJMWCjywzGXvd7Qt/BkZ9eUcGEA/ZAExEJVolzCpn2Kfgjg0lymr0lEpscG+KtmBIhgrMxB77jVNUJKrhYAiI1hNICwna3CiagEa1qnn808195wOTcXbYm4spBDpgHPdYPQxiHhLax3rKZedYTwiEhfrhSoJKvkyHUBjm6gv+JQdErg4VFdRHu5dsytVthgvGoP83037yrj73ZsZqtCHE5SIerpM0jMd3P90SVLlrwmu6GMTpv/oEGDeiHV/Ih23sS4Fl9yySV3ModPsL4rtQPrG5DJW2Ld7DyZms6oOOSsGL0ChlDhBkqMLTdUDAb0lAekkQtqtFZecZ753yzLDRw0O5XqfIealFoYzerIFHq0G+0PNrohNJV9XNujVKrdkUNMrN6G9LUna6EvY5QROxFVclx6TvOd5jxXpU826zicG+bYrRuklHCThPxtQoaHqA5s19T7ecf19FlcBTPynA/pUAm+Kkp8FZhlyR4aUFRU1Jl+rxPmVUcg69fNeoM8N4D2uvNdtTgrIdFr8tOJXMg9vZ1f2ryF9id5j7jI7LU/sob3Dxw48BkjchQGaOc+pOn/dYacaz/Wv+P86ecQKZD+DbWaDoLYxzkguroW+l3UQFgfC+yqhYzhvunMwXb4x23cfz1zVJmSR05kHnm1zPkfzoHnwGG2hwYPHnwnG/dyJLsr2AiPRHjaak603zCpl6PafpYNe5UB7NoemXjVz1YsxPS4V+I6EIy4MuIWlSRkuocCvzgrAR0LLQeWYSstK10f5UA4iwX/mHXrVJ379u3bgsU0o69U/AruG8FiWxXBcKOu5sPL8CGMJtxneFsXcWbdOJ7qvkpJmLYGeo0NIaMWn7jEigPaSnleyfUeNtUq15e2B/D3QJ5rzzxsgYlmcJ9WshZS0/7TXg2bpH1kLJ1Hfz8go9ZhJPFaxdkkDpjqHVaGhmBFBDvVE4c2iw2Zoo2GShtKUzC8Dlw/On78+C8b9cAhV+H4X8umSyWvYOpDZs2a9VcTZC644IJ309bvGYs40MeZo9oNG8XEk3ampHPtgJlXAjBpKpGR2Rbz42HWSpORJgkdp8aJB37HPmhGlLuXxMemd4iRa/QDTGck69TWtaDdkXwG8GkvY9NU4zoY9qjT1fJX9PU02mwjs3UDe3DrVEr4B2nz5h4OtZ2FabOnewLHOqOLxMgtCRQMvCBi3LX5No53Ksl2ysXq4DsPnPqWu+JjcQP7VZ9+FfJb52o+83cQWthliXrjwLWLmeTjCW6pejUy7jN0TlVfpbGFTA0aKfbQjwPnndC32Z/vgdZ+hYb0I9ahkDX7hSarvwUAVDiF1ZA3wCN60rchjPnLAlUhNG2Alg5r5kECtsiCY6sM5/nm0HysnN6CeejCPdtfCTrzDR9nHARmave84cOHf41F/2jnzp316E9l4j+nygjBjV23bt2lMAvtw4tUHWEgZ4QzTGdLk8i2OxoVPKpygONVCavDjpsftuTCEI8zu7ASLG32ZXG/LoYxhLyXxSvk2n1s4l18b7maDfqt2ByaMIZHSq9RGoUQrIy2nI3eJCTzLF7aTcXfjUK9lvFJ/GVCJlqQU3USFfCHENAqTTAQvfgTLXlXWyUfJLK8Xbt2daAvWWw/f1fDXFTTLFRpH4unTZv2debCIqLVSkoyYomKPhm1IQOfCLO+EinC99fI6AMa1ENtr8htQnOOGzfufYz/j0uXLj3uAHut8eJIxH0XLFjwJzbMA0hXn+GQPSwT1vzCeE2gaQ/jcJxd6NtwE194p3bwDEPaTcT87BVtSzspTLGHtQldU66VRZKMjrL6aFLP9OrV67mwtdrpwqjWbTp4FzGfOcCv5V2mwKtllOtl59M4kgzKxSHhOwHZxSFpyRy1lOnmVm7WrJAczqnaRG7Msb/DVFItaFMKy1IaR8PZaZYbDK5xChNMUJiukYzUe3MrlqRIi8TcU/vp3Za6Yn4XIzDczvqfx+FxDfTXKhyqjUyL19wgkze6wyZ4twe49RMFqr+fe4fzf2/+7kQfengg8l7XJ0n+vdesWaMt+YMjRoy4eeHChZ+AIZvttlyt5n8j0iI3kca/OSB2wxfuRsP5DocuU9li0JgxY34keuHcuXNvZY9qZ39BrUHMb+ZlDHM1mzZMrhIgqJ3SPmPfUhczfj11E/8hkz4kZsNNYAjfgICuRTK7i032Zyb8XqU4Jrg/DKsBBPAWmNEijfrG3Dr59f4Lg0KPVXk47zKVN2zIcqfWmjPCnHAgnEU1sRndiEJY7uQEfi/vERdiNG3vhwmUCcknNoVhbkoWhskpgfDc8zC8rqr5VqOV2G1XWyX3yxCrGMMKoSthcO9nc6zr06fPp/le51K7UFGf53OvYUQ+y++13C/Q/GG95KiEFYYycb+HiehdMvgqC1kyZ734/rObN28uCiklj++U8utFbn9rNumVbLStFrYMO2amEBhFQbtH9ODT1jO9e/f+FIfdStfgtUo8iYGzaTvAfH/WvXv3e7hm4dJUfUXThQ6osczr2Yb+8b1ZiDrE2socUxamDCuXCfl84N36GZmkTVV7GMgVxtByCMigW2jHVQuBucj8DAM0es3drZraXJU8mRainYZ+ggm0SQ6d9F6raiefAuutrX6dyTgcZBuZb5mZZgPT35vz/+BwAHfiuRc9UC2xpehJH0pNDtKRy3dlFmhVCoe5rPOwsVI2B9YoIy5M7tHcpUNXJu7BxD2doZ0ePG9s+i7uEUS+J8xyEn15mgPwWSFMDUm00ovRKQoq0OD97BUzOS20uzucyC1DgNkW0RpGcYi33Y17ha507DXGp/PcKGjjAzz31SFDhtzJwTYJbfUAtLfpfxJ0J9FQhDjWSyGuSuHsx++iXZXx/0j20bSioqJZTz75pHHbflfCODZYtkxThdXK6dPKhNDI7zHsp/UII9Wvp691MfJ/2HRoB8sm3j527Ni3TZ8+/XcQgMUUL+QkfswkCzOSmOxNMicm/FSIXAxibaAHI+uuIhx31eGUMyzNiAcZqNJPf9pbyv+mRB+KStFKi4YJGaxv6fghpury/59MJXYjaycOyWJnRFB05/kpQhJqe/R9hiBZNBFidvPVR1J7Ihh/IQz0ZguH8hnHODpBTL81HlXzCJKtacja/gxvqhcIZsLHzXM+zIQz7dlAdjZbDQQlYtpq3nPR888//002X7skuWlTS9V+VWE1a7C5B0HAY7WBwnC3saF1jjXU/mcUgJIrh9t/LFmyZOdrKQxaW6UcNmxYwaZNm35mWqqMGOk4i0SAealBdEC6OVW7JLePswagadgyR6XAhDdgOyn2NkFsJvthrtc7YnONl9b+2pc16Juk1Vy1M6RaD6kGqexTqoicGHIutq2/leA5mDdxjw7cGcXFxQ/JmOmrdugK5qoz15ePHDnyW4HzkEnA2nk9vHnOrMq8ME2IuaC0XOj6mYnH30sF8xdelQPwBit56FBlrr5PF4x6MNTPgzODKZV+aKeJYE0w4dOMxOAZ94QH2OnM6yS+n8U6P6hGx+/zmY9WRklwvR/zvxnNs0eYgjRjna9AQ/uLopSRmthhU/49uKRHcbadP2hIAKwrOETn88z9aDaPwYjPhA63I2SU/0/zgMGDB+sEtbRZKcLLA4y5VG2NffAAY3vAUDvuOy+B0Bt+KB6MsLeaLDSLmRyjMOYhS9/HMn6TjV6S+pzooy7JuC7bcV3S8z8sM3bTONEbNmyYyUI/woRcJvCPcY9sgGYwk9moJL/UlsmGP9/K8BJQMOLqME0YQVEdtsUaAeN1dEHQoq51DiagPbZENdfgBDZEZ3my9kdNjaqyUXJe8bkRi+tzBfF/S/rZNWJJuyr1mASyZ88ew9gKTL4QW5jNPJkN8lbe32Hbtm22+wkY4HD6rlolmMk2zQYQepYgoDfYw0QHgzZumXIwDcF7Cmm3qTZL3ukGu23y5MmfYk7yErPJDc8JibuS91pgUpyCo7xTzImdSkcw4I0WJEVS/Slz8SiqXiYpvh5G7PNsHPthxY9OvO/qOXPmZNeYz64crJcwrjc5/4zDSIRMa9H2axw4EnOlUq4MizkoSAw54TmkMSbVPzf0SXNCoHQdl6CTZOs9UTgzY5b0ZzXzsMnD1+rVphoHoJMmqVVRxt0sOMv9zNCxJ+NlPVrw3GbWogaGsNt7Wb9+06ZNuwgm0ZE1N4V5He3O1XTGgXeKIXXa/XX8cn02z6nRKYE3sYYcf+5m3JulUQ8mmPK7Dfsz5I7PSp5vLZCTjIWDYTZrtpk1e5L3blQqNgmC743gsCSXwveF9H+bwoYx7UrWUelbZrTS2nCW5YqwUO3ya3h2vUyPZ4y06KiGQT9NZDH1uI0MzLUVQL5bt24fRQo3cuXX9GMRtDyUa3N0xP5P2I8DCtO2rkDqvc0DGgn8o6eeeurV0NRsDzwldg9K7i1y3cOUZIEIpuvwLh3iNLVGAczoKsbZ13LuPLsyRcfkMtUT2ZDf8Mw4MWQTBVjsDRBPFVKl4WwT+/fv/yAn+2kQ4uch4Hu5pw8EoyR8OKQdd+ghw4fYHFZT3sMiqZKN4v+9AYk5QcbLd8/HCWraqnbCQ8YG83wbDf8yXP0dmjyUTIwH1gNviJGeem3NtLGd/mjjrLDsDURRzQbJj/hcw88udJPQ3zao659hE38N4l4I0zXqQfXLkCYlJx1yTdg0wk/uZoOYfp1nUdDEWHXMsflVS0dw75tnzZp1M8/npQ2QEg8S89GuyFgbMIdlbOAp4iqjTaynjQc45FaIxcz7tusVd66TV/+1/jj/Sr9I2FcgwdyAKnsxjOXg0KFDlXgHcXC+lXGexXhHymBkwJaYj3CvDBXPyBMPs5SJlqImlOhhimbCmYV4gHs8/PYwHvGqK0wjZ243QRPiUOsr2GN4pHTgnjLhRVuo5gruET3vWfqgOp4xbtcrqdr8rm/qt6GNzKmhXB0MW7QiBtqZtd3aw8yMPLHI5W7Ge8SqGFbgtgqxETFcF0q0PXO9mmtbdJBqE7ZfamIwUA/6jKHzEa/4bNoczD3P0L/vIXUaNWANxAprv5WUlEyiHxdbC08Qf5jyfoSSKfx+O3PRG0Z4KUxxlJmC/Ja+R/LuPzMOi9duMNaWdzSHFqrZS7+FJq/if+FKZeJnQbt96NsCpWqTogS5MkmJMZzBM23p/yDeL6fTpzOQebhlxYoVCK+Dv2ZqMX3uDH1tVkB6vfbjhMBmqKeM13XQgeq4PIzMQFTbYD0USjonuzLMeQvv3hKRUaoTu/QVGfLJ3yZNPQKtV5+ockldTPlkzRn/0MzYSVA6hFB/zoa7WMB1FsgyRw/znafwWRs3bpxolpkVL7R5RRyxTLFZE/Xz6uqbaEMktGfYOLMgzE/pJVZV1anFfeshOEXPLuFcqw5bqs4/JeIuOjbYrA8FYUokokFNNCmF+5VMzoI42vG6ch1OVualH+JV1IsySl14107vWbRo0RdOO+00k1ietFpyWvgU0SEz83nBkRy7UrJEye+8oqKifBibkuNhk0PYXJ/VZJFspraRG1rlszwzhY30AIxi/sKFC98nw+DaLRDk3pRVlxsF8HrMEv7069dPW/BbYRy3Dx8+/AZTnul/X+Z8Iv29jLkcx7jaeODEewXn95OXTBE6/cTW1Zpg1mNUAt5vgUv6a/zoSOdk0KBBv2Ysd8BQ9sZzRhFUqFEZdcH9rqf4GzpvVggaklKIbYf+DNE5KtYz/RnrWcacPcXGXWFFYcO+dLJpKuJ9wlOK+GVmWjV92mWYoJIt79qJtGjlDJHolmr2svwV/feA3sjjpsS3UgsQr4K2xM6WmfdUEhWvhL5fAeOc1bdvX8sJad9vv379+p7MpVmjW2F+LUeOHPlLmJ90nse9+1n7rkin17MPdCZO5yCay5yYvlxFP2/S2Ulf1jBHXzSckbabIG2/10QgxzZ69Ogf0+9TaGMch2QH+szW6tAc2vyLlalFOENz+ivzOZf+D4SO+vPcu3lvvszQRCP64aHb1dp9XGuJsKFzeV+K2349JgohW+lH/4h1L6DtFxjPjESvKhbcI87K2GSeE3NC3PGAMagOLXY3YzFbsTW08PCJnI256JAnG273hmHGadCLFy/eNnbs2CunTJmyACZSxKL/EKJ7kM2xiE1+tUHsOpyNbDBETKmWiTqPBd1k9AVE+gs2kPYsK8NWJsyEkER3QziemmZHGbBrskSHcBD1kLmz6DNsEyKdHxlShVGK6agVP4SjDPtklk2nFC+jRRItYaMIjt4Aop0LMfS3Phz/vyDDENDd5AUZuEVKPQiQWEQv0xSht7sGRlMTmUdK0JpNRJwzFnUk6v7E3JCpZCONuGsJdQbjuJ3vBL3vbNgaquRX58+fvzfFZ9dFlLWxdk9EpMnB5rtlfvS9Bf9fwrvGjBgx4iruL2GjTmDuP8AYJrFJW3vA5EYJpEiTkHw1H4j0Zg22rZGSfIDrj7Def1ZFh2mahFDf7DkdZZs3b+7KOw3PK1P61LyE1iGofSFM4xrmvA/ztV7AHNHMaF8QImN2B4mmp2cdOiqzhBV/r4WeNhoqaJq3aGdGufBOpbJMEqPtIRysPidMpXb+fJhBR/q8mH7pryiPggLiUjfhtzUTxaaQgR+KYgbGnOcj1TZlfQ3TM5GmS2lpaXuYoqnZRYEHXcp7jGiopC9HoCXL1C+lDx+CFnry7metxqEpiP8HWM0FmhgqjeuD4HnxMcpWr15tWryO6WnQxUdoq4i+mercl3UTyGk3TPpSJV7G3pv7rHK+gTaeF8GNOZuGEKHW8dzAgQPX6yim340C6cxCtROXLFnydSTkD3OtFZrrUQ6NIykM8LX+0K+GaMJvMn6eg2A2h8pfGNuslGwSgoSO/D4KMR5czO8T9E37cHUICc61Gu1w1nk6h8+hsN/X5IYk1qbz3JJgJ1s9+h+eGTsxqiniqkIIf7R6BwRTuHLlyjcreqqKGBYFsalGNTbEi4lbyjPnCNpi0DwfnRzGWapSboYAD6hmQmSP0P7vtQOLUczfetJNijhbeyU/q9zIqpxcO4PFX8vvp6Iyhwbe4QaW074bvkITAsSg06ZQAhDVTaYBAfSAUKw2YvbZHpiVUl4ev7PEE4jEELMaNqMmjxqk18rcZA1/y7S1iUPwSvA92BCfcSNH/PLxpAOJx+dh/paIuhtCNlFECb1rjx49fo4U9GJdqay5jFXiT3bXBGCTQq1yTUjeE84tEyzOod2OzOlM2r5PVRUmIO7B2+jfaWZEJZhC7eguXTJDBMTkftrLbJYVx37yadt07Wdo3/I4OpHE1dgIE+wq7obVUpQq9fzT599Y60xGzNid52qkup8nOzLM3IQNC8jWRAyquAb1ouRWIf1tpjkDCbRGxsvmbw1jFg51lan1msC4fpi+L+E9bU3X5x3LY1608Xbj3uUyTesemnBj9WUYpuiBmrg0mVWy5kY99AkUPxOAyo2s8HA3uiI0tjU8r/PX/+s7XmijHQdpCXS0jYPO8vIdmYOBRu/YLx2w9LcTz66zyC1MupWSKvdt59oW50OHLc+0oO1Nxpubpcc9YlqvHjNmTCl76moPAd4llvbpMN8LWbPR9G+yKdta5IYOHXqHzmvuE2u6QU4ExSUcvNLnJ8VtYa/uZE4OvFaThXTPs4dp553FxcXauidz8B7OrfKiTVlnMPRpNIhJTcvo79wE8BV+o8qoXN4dGvu9junEWHO10to+D4ULJPE2Jh0xH2uEdM3dM284m/HxQTIJTgZE+LkLL7wwf+bMmTe4eZAySyDuvpoHlLr4+zQW6CgSShdRmSC+gRncWlVVJ4j4OyzIC3pbhYLkxL9dB4DlzY295HpRBNuvg3gfNdpCoB/tzEozhtJxzxCvqeJx3cgFgVhUTVWzlaAK2IwZwpfg6UhMPdyEEadZX9xeCOpMxtGEBTb8LQsXMl4YJpIxJ4kbCUj1XIZlVEWNcdQwUvv4wblz536GTfkC7UxIUnAQl9KYDkOJdCe/f8tzqnXacY0bvYR7vqtEXpsR2z+vRbhZH0s4CUtIf0wz3WpJKIGIuJ7hGdBeK+7XhNNWpDmrVfO+OfTnBxwS5TI4K5LQ93P11LOBsigJ+8Z3WWKNB5eMTAnU7DjaXcTzUxWI+vTpM5m+rzBZgXlpbmp2ZE6WGfbH4VXK5zn68Bz9FbC/kneUl5SUZJtkwIABRhZoBhji/MNUnmEttN1XpgKUySnIpjPaoSnv0w6dxWZzjxE3RwzzM1U5EjyqaS9bp44dO6rNNODdOrW6MYbdXJu3cePGgxx2Yibso3/7ZBaBjWF/Gupo40e4y8W0Z3FYpWWTXKot9Krjj3f04n/LyuuzyFM65zVHoact0GtrJMW+MM32XN/AfJn2vRGm4fc6Gq2DJXjTD5FMb6cP3QQ5Yq804O+N/s1v532EB522Z9ZOc1gDaOq7jPcg79qhZoLQY8LV+dD0u3iPoZ1PM5a5OorZd4Yp9mC+b/PgCi1L08VbkLBLzdhkfXv17NmzkdJ6bYTFk/UXuVYc4lNzfSEpo1GaRwJvQvs9PRjjUN/kIZak4iTIGGbInG+GBtcFHnlNbsRM7b3AAaCG9nH2oaaeGjSYi+jH+leKQX5D1MBLagPjK4eJPspkLYxKGUqU3UJFL1Dd1JPMpCmZ9GABllg/ziKEfP8jsSVEwlIFs9Ch2W8688LMkSWIBPKaEvFA7n+rWWDhmNLR42Kq0whabCSAkodIXA2SAwGGJgPcIqCRJV8MRZNhI5l90vAirp8C4f8eIt6qrVsikiHJeCGWmlz7r4uPpKH6fwVj/zbqmWnE91qUFLXx/IjlrYFRW1uvPmNtFOhk2jgfYeOX0K9xbIZbTBnl2u9MtsgtSe68mpVmqjKXbqeN9whezr0b+WzwIBOvwqxH+n8xz4zneTEKsmxBnpnGXP+Z/i3TcYUkW5+xFHFYnMe9k7hWpKlW6Zf1qaTvUrOS+7y+ffs+hir9EwGQYA5zGNtk+vEkc78zGHhD5qac35aR3w0jrAyHp5vUSthiMyvBttcRyH068dSkNAUciHhvnXZFvLcIemhBHyyxXaGUHIkuqttDGd8ZMP1RAtiL32FFbzUcD0cZHfe0NHpCR7GoYHxn+KMRDoYLNpO26NNBpX/7kKpvmAgUjkEL2DZjXC21CfOM2aBK2yYniKyXJQoxBzodj3JIGBXU1IPeSAAO7AL9Dh4uHvZKyEbWMBZr41XyWwAiAzTM6DRiZhZz+xC/n+ddmnssXNBE2mFeVulrYN030P8iM1aN7fY5+jaJd7aDoX7NQ4x1vYL2dXSbZLMLBtXRiA/NbbQx1OxE5yi0Mg828bON8d2vCYH3mUS0nXtrXm1CRdoDuWDziW61+3MAuhZnz58//zrnnD42M3KJazre9UlkoEsKB8yPYEJL1bBy7dK5qerSlrH7zP2t7JkrGMuzXN8h4iK3zE4wpnWZ695QNfBSdIA4uKhUfzURA8J5q7G82rxkQMcihWoE9Z7ORjNkag+L4GlVCtErXSnd7uWeRXrGIwZZRlwQKG/GFOsEagERzWYRFKNcCO2AAsObLrtW2EUWpovSE4TaJMo5GeVgBuBOT2LtxoaRCeIemVvGHj9mhQ4Bvq25JxN2LWEEmVc4SQAyfG3Eo0aNcpPehbRxo1I1EuM9bMLfzpo163EJR3BzU57p6wraLMrBRHDcQmta7twaZ92F5ISpHAdlT3boIUOG6OF/P4z+Ru55ivb1sO+IyrzHTRb0tanRI1GU1ZCveoEIlh0mHEJ6/nvRzkg2xjjaHK3zTMnCdZGJ0c4mHV8cHr9HCvumMboRe5tsdHlIl5Z96iV0pgAwAsvz3TqZkAeWTCttAAUQCw/wN3x6W9aXhG/Cd0qdm5BqNnH7EDEljDJgHhcbqpbeiSp9mHE/zxrOhhEaQWFoYp4HVDjeDvL//qiV5sHVwjVVmuc9gs885Dy7Uelzphkpbep41FkXJb6yGHGjRhQWNAUoiQuD6phlEKxfdwUKDh25loA+OtQ26qhT40HazyBEGed+q64wz81Y+wFcO8z7LEJQESWu1GZMIjHiYitrsxU1fwESe2/6t8EQOzUJU7E5KKw443xUM6ZL1dKGDx9+K/M4fMmSJZ+BFh4866yzLp03b97dzNMgDq5bTHCBpjS7fI95u5t2ylmzaz0gHZep5txzAfdfBmO7i3cq9PRFgFpJnzMTkPOYC9afK5XmJN/UaRKQgXJgGz30Aeaqv2GAPmMVG8bTCTrszv3zj5FIjZAHRutoPttrtFAuZnEuc08Mnj73FvuGdf0D9z3F+z5Ou+OZx+8zndUvF7b3hqoOncK7OPF7Qbxf1h4cFWAXymRVBXVqcH0VRLmAa9qMt4bTTvOCIWtWuq0I0KCDptq6LgEclAEKcZ/wlkvMctPrLZEp9ak68jHURsQ1JZ1q5t0kER1qUkwjiOJx7rFqgxCKjelnK09tNtVmrj3PPWP4dIOwf6lXWkdbTgXcjILMqENq1Pt+59y5cwVAacK9bSCGc4uKio4iFV8ic0cNNDzLeNZmfNdLCVTVmM13O238UeKzJBT9ncT/P2EzlKb4SnEgevXqNZjN8VXe2wZpwPf8DvX2kHa+wD6ul4LjLS8FQ3PuKgPVrFDi5TkPub7Q3rm870rueysb/jwxH3jWsCmdKW7Scourwhw/xjNP06ci2rNskEzJtOf6Mn0TGri20UgVfmtSUirc71iiKkq9lFXoYZTU19yIjrTRvc+xCD/KeFby/QpNCGFDrIzIFdPfTUKpisrcmdNUey1zo6R4XDqzD/S7nL8tDKt9vx3/C+vaX0ZgVIiHMu9ozzvEQDjInCuBe6CoTeUzlirmuSalJZv67AHH3OxjbQ/DYA2RM6XXtOj60gifZjDhIubQ77J0fJhOKe3tUwszaYi+KPGKVNjVZCLerVTdwYw51uZirpuU1Fspm3bVJpsbM30MnqSlgkQFY70cOjoFWvkFB+YfFy5c+DnGlde/f//vsmaHaWe81UwYS3+Y7Tvof1do4Dfsx020dWqYLFxzC+a25/+hHFqzOcAWMkcX8Y5x3CvokpEoNakYbmKyZtoxD9n/CQyqtgTqmtPe9dOnT/8JvzevW7fOWpdVCBWP0r9BZrjyfrUEy5iJ7XJQMCHmZh3Me2cueH9upuiwYcPEk7mKcd3BPC9UILB/RpTIN7jnWWjpaG6fkmTt7zdcdWg3nnZNFryXG0UzQYS/jWLSn+WW1aa4ssASW1b/jt9KyOsCm/hQpEfLINx4mhdSunT92MCGm1nSpnHUoxOg509sxEGxgSybtA9iMeC9ms1s3KhYEHv1ntM3Q3HEIl4McQ83g0lmzmYSpNusvM1mwbHxBimhy4gg6GodC3qDkUz6sCE+BuGcYQw0EtEXIMD9MMkbIZTBSCWXC1bP4h81C8mAd07yD8WhoJRqRelf07fupr0KCmS8qwDoKQaYDa1EcRnMUDD6X/HsZJM9UpqyxOW9zof2asP+YFC9xcTQWWrYFWM0JasZ/1vlujf/y3wFVMoy2xKYO5t4M0z/T0IZcn26IPRsojas02DtloYdGSpmhITJPDJu+rbb2GrGsz5wjgs4eLyuE1Pbeg1tm5ml9FgZYXEemLssVJokHW3UzIWJLg0sN89HM4mREPlh2tImq1bUhHdpEz7i/fpwjKhI0pOmF8fDGmp/9v4C1q0ynMKH+N4QMgGbxDyw35ZWqikrK9NclJyUB3mmiud1TDYw2saoHKuJmNIsCcJMzByrMhXciA0lYfojoE1D6G8772/BOzx0RdUzYsfbjcRRKzRqQ9VQ+35rmUhkoLo/ipibPhKi8fEKEUr2rIOSqvCcvfl+pWFj5opDa5/kvtUIBEYhXYY2ejHz/9iECRNuoB8mPXnInc7nEuZ7JPd9YvTo0V9Fmv4INOehkxfVlweh7n/BA1+NANq9meZbiRDIeovM9wfamKUQaUIQc/V+2rsI5n8nTHYG++Alzj/pUps3NPRe5nwWtPrjBQsWXByxxc6Jh5zgW6Iy7nP5tGWbrcgYX1STk76O+f3/6wC3mjzffempp576KPvvPvoxmTUwaaad0AvilbNuR+rS1t9wDrxcyZhN3ZpNO5gJNczsTZ7uTiinuSmj5qS3CHufUvDWUMl2BWC3m/BAxEA2M4SINteqBopRoY1LiUcTh4TOAgnYbaqqks0m3jmTzxX8LWHnK+2FVC1i1uEAiBfMRsZvxEbjESNG/Mx4aD79IWijPUzYaA6z/Q7q1mVcF6bRDSo+xFikkV9DqLPp87Pc/2+qjBDxbR4KHih876HgSWyW0fkwwBFm/KUTnv5tMVNLwmdudHS2ZUOvZWOU0peuEOVNMOGu9Ncq1l+1nLvSr5IyjLcLG76zEhj3O4+tBdFRWjJ9mbZMiqmImnfidPSC+fRhszXXLuk68K6tbKyHYQYlOpcsecMYylizfMbdwpRiA1Fp7wnBkGR07gwOGhN1NDFlFUN4roA1NXHGGKRWPNKHfm1hfJvdYIEvbex2vUA3c32rkrTifMBwXIfGSp7mV0hDjO9Q8pir0SC5VqpdpcQS7jtaO+SPcWdMjfXRQdrS9aLN3TCOrBJIABqZHVrDulYxB9KQkQZZGKVIdFYhN4knHLky9AZKvqL4wRTLI85cpnqE+dytxCsj95AVH0JmEPCohu1ViiuhfZpDUkQ3UdYkbkP+zKBbKeM2BV87N/eb3GP0iJVbZOLq2r2Yy7VcM8Xfk6UJ9y0PLW0xbQ8Rm0KEQuFOaX84a3S5dlTo5HHufQZm+j0Y47+uWrXqLgSJ58aMGfNZ6OkjHHo9XZeICDpdcHr6tsK9R/8PqunwsdzTRTDUKeyDJzTfzZkz50bmziojtyE0fJqxLU+mp7SmvF/wpi6uwbx5874lah303421eDt9sNal2XUrud/UbyETerFXKujP4VjXmiTNJk2b+W+NMHIlNLeVNqwJeCn9FLPc+O/tPP8C81Fxovji9P8bhhkrbSFhOfBROlPYDEYqiDFsgcoCJu0FmYzMgUVfINPT6abduN6xitDGWe5OqcIh/W4OzAhDoUS4sjruXDbEMJmCXlfancF1JW8dYNojr6BdIy+Uegyjq4g8fjeDZotzeeZ+4RhZXDfUPNq7UObJdx04THTQlC1btuxM7ruHMb1DVZZxDJw5c+aDMjyY5lt45yozpiDue5AuBrEBytkA2mszOEUIzuyzTSaDsEnOTVEnVlTmt6D3/Q1lktFC2EpX76Ltt/Cen9PXL61Zs6YqBb+Hc60Fffog33WF4LJwPTPWrFCSCo7mOjvqHcPgyE/OG00MSDQzR40adR1rszYB8MDIjY0Wz8BkmHIkHkPLjqYNJqOD6RbKFJkjzRltGNNhmMlhJH4POc1JZcyV4DvVPJtBnqrqazJQ+kbLkGGVqybn2gOVbplz02A9rEXQ024r85cZHYaOdoe5obnSlIzfEDbU5YMw1YNJO0hARbbHvCgNa8bJS3gWMANNN9qopUdppJr1O5JMKjqek7OUcVTK1K0II2PVNi9DFt5SzUuzjf/LhM2M4976MKgMk4K5bqc0DZ03Y+26y9xMhql3DBxLu7Np8oJg7TY5SmXSGHixmnl3uSiBrq9CgyY5nam014b2jEjapWkkHJ/lMk/j7Y13N80a2pvBHM5hrBOgt6+blcj9q6DL+3WkIVR8iett6e9vOQD6sjYKEcWm+evkg+b7MUeq+Ydl9vz9O23bjHMIa/+lkpKSIVH8YE44LCeFY1rx0/Ckw1aqhoZqeJfr3c205yQxBzqddLVfXJmI9xcW9FTGpkZ2nIZzQ0Y1e0AHViDvxvseYI4HoRm8y0KnhvzB5M+TpgXNyrUv12UOLnyjmCdUY5igNzOpOjeWQPBmc0nFSiECjgsMo7q5kslax2MmfCiRyIgyzzXMwU3ohlO7qw4sYVOd27FwShJv4X9DivpKJEz4EmNHedZT9wVO6htExhISUW+09lh+9vCcDEc7mM48N5OFQXty4j5t+XmlOQh2PcSkzU3nnpEURUgC18J4FrH574Jo3wehFymFGAfKu3opocvEPNmVtvW8JyLiHTuLi4u/DaO+PdWdk6nS1iNKQmy0vUqY3gszGMJGOpP+fBgGtz6Ft+k5Tie74Ev8aZn3YtT1UdpaU9C+DC8KtuYHjKMSntqCm+cwaupfGd8jPPsUTOJF09N1bgrMbqgR6yZQuri5R1Jf03sDGjKPjaDdto2Ho4wXBpvHZj5k/HU4bytkfsyP2oUSqppBTWBSZNCnmjBq2xg9LIw75tmOpksLaOvhW+9YqaisioDryTpaSKAisC40QRQwT8b6HpfMnA/tiDoSTfaQ6arysj6FcXg3ghkZBlkdwPBZvT8B370vVRtXeLBdDzPpNwCqTEbQ5JIfSQky90Ixl00a0SEch78gQ4fEm9CMFtVIvHcPa7DHFHG+N9NMLcQ+abbQNm38u/RpmTArTveBhk2EmEN/1mrf9UAy+kXMCmv7eXhawUapWS0JpmXI3VLW+08cljLo/LKysqt4fia0+PHFixf/wOdhtL9Cq/stz79/5cqV5/KePPaTApOHoQ7Gs5hv47IfoO0F0OydtP11QyZFo4NOf29yFet2FYzxI/S9zYABA26X8dOfS2He5gUIqNWEvliUtyl7qx90armsHeYLqNDosIUmuwjElIsolxI5Au/FQ7J12JIz3GpzF6DHf+fvd5p1yf9PR5LYS5JE3lDMODlkjPtjYf8Fae4m4fMglhui1I1FPkuYcMNO2pj66YYP471ljJq6qZR+UlmlwDUuiBpxBREYLtSeRK1Dr1g1n3bvVZLi+cHiDfO+NxsiJdwhi9s5ih3mBzi9bRYGw9gg6LyhdxDrr2BqRhdYuulxNuUgPl1g7FsgrHVs9l6oR/9+0UUXPcnYjCCoQLr8kN5xmNFy2lrDe87gdxPG3JaN2SpHRfKPYiEo04lPn/fD+KaI3cq9oyQgf9gD+5HIPzZ79myzwrIoCjaLEoG2Xu2YBzj5T6WNgZpFjALh/iwLkDGsZO5naZoJu2MDa6ox1iMwxj+wNncxpuUw+Qy4RXxlpH3NCfWQtPXS+76s2oaVh5Nmosoe9csk7uxdfIwFlbHIDfMiJvQlzNVEgIR5HffVCxNHndlStm+xTTaVB3S9VDfR+yLpw5t3Q1dNuG8479DWuFP7vrZrJfDcwyOiMIxZrkprofPWvjJWTQwy54ZKncY128cU1xrvV7quTBIWc5+XQOpTWF7Uv/OwVJJVwhOzQ6jWhmJbSMsmcphByP1CtGZ4KJFUtI/vtsH8zNppoTamfdpkJjUyDzKzFPl/Mc9reuodIW/zaKMtazvQtZIBGxdtqJxZrKY+i/PNu8pgxOP5zrJjK2CkX2fc15qmzxx+g71yHfe/hXm4n2d2oOX9atWqVW/lnqYJkS8O4d7M00d57xra/WmE240SkIl1eJtx6miFo3VeKgxwzwcmTJgw7fHHH/+USV/QryGIW3n/Dcb3M4YHaaPUtWBsE2h3Mv04S+lW0PkURx9Zhsejs9QOe/fufT/3fdSIEfvHoawWZk5Bx0GDBr2rNhpd7WK3aW3/rplx8mzWZRuOMkEyDZMqPj1//vzzOQU/CfP5DKrDOSzCGpmo2U7a18zcMt2Za/5tCSFxCNzJ4g77WxVMwHklwEbBPCVKVUh5ahkL/qBOP9prrrRkXDHE/HajFVi03hCFtrO+mgoCP/dAhC9pn5aRK3m0V6yybZ41rdVMra2M5W43+MyZM7/sqU9bgq2Po90JLPYXBbQRwY2+sv+336oXGwngItG4GGMb5iA/MRwZEMxylrZz+mNVDtWyQiSjZ81GW7du3S9po3+KKIBId8DM90mIlj/q3r272X9jUc3O437L0RiSJ/xnT51FXJshwxZFzI3PJi2mPzr9Wsscef4h1uKr9Hk+G6e9DieY42EjOdw4bKBOUd1kvWFejONwAP4cH4NYxkYWGFuNtnM4maJy1MiaulTBMK3oeBNAqToBvNvf2ni6/m20hBK02kBtp0sKoZJJWLVaBuUho9YUJpSal8seCym3HjRZkTalHxNQam/YE9G44YbJHpm7F/wOddwU/yORJl6fsTQMIHqTSHRaCppkSr7x6pkDj3Eo5RWIxAZD0va/jbWxlp614xS2jZvfFQeioP2rZXym+xulwWc5fdImW85ct2afiae9ycNH+UjTiaBDtGN19bas3U0wuT8yh6cyjsYKIOFAt9bjLphwOw6VydDrKIsrwBityZfNuRK/Dm/avdm+c28zhImu4qgsWrToTtdaejMaQ+WBQ+Aanrf6iJpWI/qmHXyV2qZ0bxUQiwdE6SoxnAdy/ds6AhEahFb9LGOZx9geSgw5IE/1dzTVzKU2AW2KcHf6Kaecci1r8Gy690R+rL9rm3ECEdFeI3NgMC2T7VXbLovdPGy55yFx3czEb4LRfJiJPx215xwWd1VUyzDp4EVVO+OBeXY9H4HfxS9tGCVldLBURYWlwrycEtCBoJXBN3LZyIsMxJ0FvZ73t6Rvv7A6NQumbdEIBsF5DHQvjCBxJT6ZjpCJOwWdEQtWNccNQRt947k5bND9qD7fhImdB3MaD5Hcy/u+i8S2UnwNY5qRim/h93LauKWkpOR9ZjspMdnliCTZp8Qj1oXANahR2tUegojP0q5Gf38jToJoY0kqllAkbqNPDBvq06dPaySVa7jndCEi6aeYHDKiTfTb1F8l/g0eXFZ2MK2cDSBAdw2q4p+Qen+j1GH4F5uju9VBrKjCxjApQTS7Q1YvEXxf8432x8B1kNlWpwQexlyZQoxycQBypY3azpJE+DJekwvSPWbR8Z5GHAwWcK1JOB0i3rGRG9BXVe0khR9vN8LVMg7Is8b/Hg3AobwEZPQKWWI1tcOcUsXs3HjWV3JKn8g7nwrJxgFU4aFrJqH3eaAyPqN3DI0rMIvOQyQwu1sqpIj8F5qC5o3tmggUGKIazT5D71gTwzWVHMXUPujhL33ztwez8LRjLHMEY93Ge3SiagrxIBzB9VXsxSlIlB+DNr5NG6OgiZu451G+H6RGxDA2sgZzEKD6FRcXP8aBcrZZs47NuZYpmxpec6zgYeXatWvfLt4w0urPEMBuMAyOtr+MgHEbmt3tZsMGSLy+jE3uW+6/mkNBZ9tkS5iZYg7j/xiSukxbB70HdifG8jZhPmuvqw5+zTICiGk6ou0d9PWqJUuWrHs15cb+ruKM0yToiIOJ9GOiJ8FYvshp/gUI6Vom4Uom8UMs6PvNCArouwV8dEqNYaE+y4SXwdDu45n+TGJpmCUyhDUTMgSLoS2D68uDYVfHJ7MXu+Y6Bfg0jaKgWU052m3H84Nop7dl1s3910lmeR++1zurPa27Oe6GQdU7VsBUaUUULsOLpgoOzt+G2RgyZCn4beG9FdLvCT36jHuBBKtEzbv+ZPo1v7vwzrEJUhLmMR7mYjRG56KiIu1gzWT6vpM2MkBww80gth/Q3pOoc+9ic2m3+wLPvGfu3LkG8BcGilXlkCFDPsGGXock3nHx4sVf5R7DdjaGh1up1PFeynvOioyqwWym02ljhE4lmPyi00477UYY738oZSmdIMWvERlPKVi13g0is9d+z7NKPNoG3bRHk8RbFy3URSOq7mxgAZiqE15GhNvlJdOE0m7OMzUBSVmTy9jiAKiKDX88woI5bWD2miaaHG99Xm58shL9yWaL+Qz91USQl547mX34SgUv0+GT+uQ4UhhfYDKrkmu/Vws8EiXCxCZ2PlqzVhZbVVtrzTwYo+h86lzU99AmDh6l760W6NQubYIU9yrZiyOtzdXsPOexm7HMjK8d/7cXRjTi6FuKpQFNvw2afTZMhIYPdqBNHdG9+P5xwwxhqPpe/sL/u5j3XsdK8GUHpMVVjU6qVCo17R66/hbXJvL/VL4XesD09CcQzkRL1OlazTr+QEshh8G36UdbQf+tlsO9PejnbQgIizi8JjtvCgkIM+7B2SZv5K4P3+8T9wZ+1I8214wZM+YtCENlxpifDDZzysD7f8qM65JeXonwYAwSwt0wkO8xCU3YVE+ZUuskmi4sk1SN0kTARh7OaXYhn6uZ3FM4iSdDBD9mggfy/4CIo9wH8W3TzBBVlgXw0fxwJJhwdmiF2lsTsHr1o/KHktpRg/f57t0Q77UQ0DlKtDJcMYi1p6nKQ4yjJSDxErTdyezcLxBZoaFdhnKpcgnV6HwYWM+9xhsfDrvfn63qwN9lYhrA0C7jmYdpS1uepow+Olm4/hZDgRhzf4hzJ/N1n0H8BtMLzKL9UQpmLh4fNmzYR1jzjyIhjzFInzEMnTZt2hfdVJpEdFgiCS9CGvgMfWnDYXYn7SiVz6efYuqO4F2j+D3RatKMQzwH40TVTrJkFohs/tixY2/gvuf5roFJB6b6sgEm6jjp2bPnAufUEClt7UpNmn5Yy4PG/EZs56uiKWN/jefVfprrQMuttJzLsGSoCfO59o+aRe6PzJh5zQ4K+laRbJgvJ7G+Un9tiyVtEIBM1bVNFK/EbGub7k70TMJ2DlxrvcdGl2inNhyvEpoQ71nQpD0wljLGdjQcp2o7hiq2p90m8R5/Wgs+H34VNUPLVMmEt0WM/sGoSt0uwtI0iRiGuZP3FutI1N4u3gs0t1CtUdAk+rgTOnmYv8VIsWLOW5Ggfwz9TOS5IVx7jDmz5mGH0B5SQdaC2KvWRDSZawb3T9y8efMlaALvdc+uWbPmCjVhmKZmvWnQ9Fe41g8BrQTmey9zcQPXD/LOK9kTdyIxbwgfg7giO8SBqe1TUEpn3+3nud/B0H/NvVY+Gcb8mtla80p18lwzM1X/n5gpkhMm6wDE4cmTwoBORHiewjAPDff3IJ29i4F/k/vvYSJUa7XDvg0me54B6nqbYRhvSlCXENYBmPBfaOMpDp3FvH+wDMCad9xjbKoOjgahamnrVcp1QT3WtgWGQrOaYz9KjAckxMjEs7LHMAjJBInOmjSsVxallVqpnvG+C3hOSV31tVn0z/hUs9JaBnh52yiCqfpnrKSZSiYx+H4zlXScZMkdEM33Id4bdTDQ/je4pyXE0MZYY6se66l2Ts21h0C38+w0M56cR6VimbFV4yG0MyBGk0kksP6odTejdSwy1pq51MkmAPlUqz1DsP9Bv99BH5Vuztf2p0lIUHD7r4puhIjtQ+hT2TAL2EDT2FQzdIAwzv5sCKUFoTDhwT1/rQrK+43Flnmv5J37VKkjGiCDBz0RPZyI4bjm4vFqo6yNiftyTO1EJoH0fGJ8RmcwtwdSZZCTlWBf7t3imXDwlOdiHaR3J6diMsWczPjDxJEfGYc1uUw7pxZgjbRkAolSmSShk6z6mOH5qCFgHMRbxBbmeie1LKNJ9Al4L33WKadmYNxzWzU/EyU0g7k3lLSN+1ZgMVLIZ1lT8/eNddY85x4xsqOz1UBMN+f7OTwnfssohIn3KQBBP9+mf+evXLnyY7179/4eku0d4rpwTTjMDmEWOyqsAAy0sfHq0KfXb6Xdp3Qieqhw/Rre1SOSeTTXtGL834Q27Yt7aqpakKh1xgejqSyhnekeximGPGAJ8nLNS7l+mFWrVhmxYtGKO7m8jjYVFHefyN+VNJakvfzNmbEvVx1FZWgtk3LiYCgLYKrPoYZkg0qlcHKl56h9dtOyZcsu5vnreW6+ti0GfyUEcCObvL9qQTh3TPucxWI8Y4QCjMtadYbf9AnIQ/WbzEnHAljCpyV9+BJt7uI7F7KfC6M9Oey3SgQG6OtsM5RN3F1jiXdAFH0ghM9r34x4ZUOfND1sj1ToQ7y3H//LxI0/FXBG+51tyWCVii3Hc5FplLS9SPucDgzVOZ6xkkbPCNuxrLz20tWmnNLWJNr5OteblJWVNYYJd2NuDlvBwXp4oq/x3CiI5LxUTkhGHPXXKkXXQuqdxpz24tnTBgwYcA/fNXn++edv8n5tZuJ0GIUSdc42Cihk+JFLGanUbjSz/poaVQHD/Tl9/yuM+C8mFbB59KIL87nCDefhhrr3e+NgAy1L6EedgwIVZWq6jCJFStTF2CJpI1XjrpPGXo10+lp8Fq+m/ZO5L5k7cscp/gQ0YfRJRXLynez7xPvQUcm61ORu+FymHdpARQCpm5GpA64ARmU2o/UUjSaS+eicFq+1pTHyOpXj8DoaZclkaKYnm9q+P8LrZMhtwxxXHoeDUrMFUDWNtFEy1sfCc6ZVq20aw9yeay8YhsfeGgxT/hq0/iW+G6BwxCH+DTS5D7mfFJzMBzA2mD2fmQF1VOtjUPmzIgzzt9toJgSPm9ECxSaugkbXwGssSuw8HUF4MHzvW/pY2DNClEK+XY1drkx+gpzDsSaZvmr7I6Kklzb4dgg1X6Wd3bmp07UBjNLfSZv5m5opHIThIUzo9cuXL//5vHnzTF+8kM8NbPwenCSNmBjTILeGvVKm3ZRTqjeTfRH3f5cN/w0rIDPx59DXa2Eit3C6dVSiktEOHTr0EbNvuOcpFllb5AzVCIVCs9sEoGGxzq93rMio8I5iDRgKpKt4eiBXrWGCjDc21GV/YFCoUmXllPiulbYmFvog/Thd1U2ChqkeoA9z1W5pY4tOHx1yBqdrj4P4taHp7BJU3FRdU1bNaRdbpyObbw4EJ6yhqlaxcZ0Q5G42R7HVrW2LPsrQNnPYGCt9NddKrIsGMz43JCDRtNZpaujfv/+vYbQC97SCGQp4oulE/InNSD2f1T4I4Vwtbsbo0aOvoc0VEODnGYdZTk3NZjLdmHve7UZUCGAuzdaqH+qu8a496V9Lxz5x4sQP8C7LMxkquFeaoi9HWbNDSleaXejnig0bNtQEIM9B43aZk6KIQBEY/2WZVxByTb2/k5/Xw7DD8ao9tKq2ueTlNAZtwZEy7V6qtvCA+ykVUM29V8YVBVCNVW4YTEWwoyPQjE7URqyjIWtWOzE5ZaeREkZkBAOtCYhQJWIlQ1PTjaIxBl9w/D7HKos10g9jqru4xr6rIsx1LcOsuBMakMkLxC8kgJFGW6QrDhSrkhulMcDQPjVYk7RkfoJLGYcv87cyi3ZjnWiau7QqsdUM38tKPcmoPaCstgJfmSKu9Pjx4z+q45m9uZX+bBXOVac4B9ET8sPkUM3VkOoyd6UfHensG00eor9Zjk0z0Ev4au32oo7g35YZ23bfvn3NFPszm1YH0iYYwINCUKKuXoYEdiXM9V1s3iF8N5KBvIdJehcLcDG/u/L8cm1PTOr1TO47kITP8ARXqoDJbxk+fPjneM0PGYcqtHn2qgg65gzY7wwhdWURdUa0dPGMdDKxgDbnRR0zwYG085p44amrR7ijSRhm2AnQo7lBlDcTKli49+l8MkpCCS8kRlVYqzcbgiOWhCEz7SVm1SMJ0bwB/m8F810qkxInQKJ3AWPhjLAQrlPCE9fYQpT9GPcN4grrXaYdk0mEzTw3cJJb9+vX79EAwRY34Lt6rJGKxyi1CB5Df/SQb0Ma/oDOCA7BLjDdLkgBP7XMPYfdV2CWVio2Vrch/VtO++PNVjT1lvaasW4G/wtQtErzgtqFNvezzjrrBv6eymF0mPbXcO8k1vAQ7RlJYtZfJe86FCA3evg1QeSLy6CmAvHvFDnt/3cH8quRtsOUkfdaxhR+AxlITUTEnPRzCj0mywhcxMFrQpEpy2YTvsTWYUiboXuaJIxmgTYKQ/PQhJEVKxDsXjMWdNXE2HgZqMpB+FQ0r1WG/6RQIUXJV9utjnKu7dIJDi2bEGU6vs4+bdEiGxpCp1nE57K0boUS7tMObZtqn+4V+zCNe/obVydNQTsWe9gCU3066hnuiqK0hnzuigQTtU5tyQ1MGNHBF+YG16Ng0KBBt/AOq6J4IGkHnx+MviIqnlTkSr85yVLHzUZ1mbY0kfG96ePvhNbfbc08tZPce+tyRit4/k3NFIEsNoxONoMpP0kHlXB1vnVFWtZ2eAVEcIYAOWziESzoX7jnj3yvOjTCkDGamcRitDRkRHXR9FFUgllWeuY5S+cM4j1HAnhb9UngH51oqjDjmQjjIjvE4aCNVtQqs4p6WLJcydhSO3zXhmumRxpjuUz1TOeC4DP83Z1FN7ttj9IGC2/q6ELu08ZrPLJRFGLFbhNgm4m2TJGnswho9kVbs9Wc+0RwvZlYR1HJruO7tVa6EIDFa7xTx4nPmnhgdZLezN9XDXinjT/wv1isrdEGvPYriGGqxMb94xctWvQ2DyoYnuF5+5jPjfT7K3w32ZI/PFeGyvY1rp353HPPfd1SOIGFkIfk/GOLWbIZxpi6GzG6SlwVp5122u1WThAzwzA2w5UYx19NN2VTb+dQVWvpwvueUGOB0R4KB8tL0o21lZrG7M/JhnL9PUi5ddmcX8/7Tva9uahzMgz9JWoeloaK7L+8iKHN+oXUrAmkfhTrzMCGIrxNFDbtydp01QD3GP5nJRC1IZln9CmhFPq/NuTMT6IgxHOm/28NbVQJVS1IX4bmBUMfxWIRBa5laK1boMu24SdQKhZkawTfbbdsFX15iu/ONiYYQWM69DuMj9FL1gXcwz6YJTIg9z3Je89m7/WCofbkfccnL9l+LQhBm0rSq6HhW8QtZ4/og/qwqHy8d1btTM/aZlMjUuoykyWlTdMMe/LxjRs3VqXQtmQuOpH5rbCuxZRp1i5O+XqKTaaOGBfM5IxwkBZVZFJm6znX/mMoFidxHxa91Mm1oi1EsohJG8nfPZCaLhEgJzlO/A0TXouE9xMWXnAOiaB+FBXVNuX/ppWa9nkpE25681Oq6vShd96xGTFZQduxOMUtDNGhb2JWXC4Uo6XSrRRMH8RYbUFbk4yppL9T+GwS9J1ntXHZTotInzbOshkMqJfIVCE1aDduCjE3o73yoqKiUksp8X9RVDnwxN9twD39FITblKeOPGOlX6NDVFcFjhHYXrCaMTDdexn/r0tKSiYWFxd/AkL/DmOexHXLiW9bv379ONu2hBKbSUjOBahPX6Evs9EcmqsJcCDuhqBvhRHfDoMXpNwNWDNhwoQPQaQ6Hr+gpEAbpWIZsEEPnH766e9mDh9grXqNHDnymxD8kAiYF1BIG3VbxqKmYApow6FDhzbmXitkVFiKRpAb3pWhpxkjrkTFPFX+I2aAxsareZ3Pn/T9uXHW6dlIm87+VjrOrWCslUhzgbb9iBmviYiLBpG6LqPW0W0m4AHoSDVeR3RL6+4FpkrziL2XiYpqqOM1k2p11mlD5hlNfVlh1ggRNTS0TOwHo4ai0KqJI7uVnqMs2S6R63SKa1qD/rpqAmQ8whb0NdlEnw77QnPeYNq5wL4gFGyAHv/MvWewz1qyV1rn4Mkc/y3AfYTg7RLHmWcGsRdGwOjv0Pf0Ss7c3KzIXIdcJAEZqfJLK76YMJKLYxFZkserV+f+FOYuvIDYfHQamNYp41svUI4/FvF7PQ6RJOLTka6q4jCrEWxu7bAXGw2xdOnSm3lNQ6S/Q9qZdALAnEZKY6oRpq/6fqs9dOnSZTkbewoEcr8ITp5CCm4RMqqkmWE9MOHG9FryZS3Xf8x9Jiu04bpoTsOja8ZReiBYVNIYx6m8760C/Bi4z0IabjNQLzKM6iH+Potr4zzNIYBREgW/z+FaG512UalYIJVymI2B8tqVDdXSiecBVx/m0zGAgiRcoRsFMhETwPXYTlv96G9nmNpaiGkwzEtTC5rVoAGctLcaCjdw4MCH+ftKTR20bTn2wbSn5J9v9EOAlav+mIyxyDRwwVoYv/X1DvJ/T+OuYeY3BcpZJhH169fvKZjqL/nu4/RrGP3cwfUDbpyxY8feyOZ4IEDjC1XDBAGnD09369bNMDtNT1sDYMmkgrb0w7ClVTB0w4ncpOWmJBsLzDXrqZX/ozLj/21Gn4Sn2tJ3bceSc52SYxIehz8yYZloijlmPUz80K4qVosOWs0FBdCTaf0e1pby2hllwLKEKLVDpdV6x4ooeMhmxX1lsJoYQtrOC2At96VFGcShVvqtiYimvZF5KuCSjF8fjSYM4/9XC3WrpMwemWhpJIuqck0GLArgWtqYp/DCtaGBlrY3xfDrcEfwaZQYsj8CGhlBAaPszj2raXeYuM3Mwbe4x6ie/2bjrT2nL8eoHbfoe8nO7z7s37+/e/IicxsY5xOrVq3KGHOuNnicGbMQIiy91xRaNtgow090HjHw3SNGjPgJnf8PG3itqqTSrCE0bPw2YvjS7iw29QVMzGhOvb5c1xZpvJ557tYSk1FZcqWya9euhrzIuMV+fZC+6byqDOxXvcHtInHgYBCEzgKTJsQyEIJxSZSFORSRCi0DGtPjTVCaxfRvP+0ZNbGKNiw0ul7vMu8RRU1nnEwzy66Jah0iW8l4eql2ecJqZ5ZRCtgjJKYSsXbWgCbUsaCnNV+8E1HYZL6G9UjkEISHgvXFlITFfDAdWhu3xN/OAPzFixc/AJO0YsJ+Fvj3MLtxMM87uHYRz5wiw4z0TB2EZpbpFPkz3/3eNM41a9aY3ivORW9O7X9nrY2LFrVsH9fm8fcIiOb74hHQ7xvdgILdsz6jYbbfYC0eYR4vgYg/CCMerZrap0+f/0Nf/hgViLl1r6ni2ru1MRfQnzXQUxUajHbCcp5NfRQ5zVC2mtyN8kb9SVgHJ+ubrAv5K0WR1L4OHagxajeVBo9DOWpTlVEo5QVIkoD0jVTjjfjR0aW92IgL19LIn5BsqyIiKS+qYbgH9ZXonFOrU2o22UjMbtOI9+nfEAvG56Jb7j1tuk2NwONTRjudNHXYbkieZsnprzkS+6upqHHQqeF0MnGr0+inqdHMCI/SvKCWewbPlOpoFJAqJNns49+Mi+207xLo/0r20gJo8z74jngWF7Lnr05htrnz+mr4nnObGHFUw+m7cOHCB+Gfg43fHzZs2C/RGD+1YMGCXbmmjYwZs0ijnn322XtXrFgxMBcoBaaiiG+NsC9ffvnlczlhHq/tGTwZO5b3wzQkigvo0MQePXo8LbYsgx7CJFqc8EMM9mw9oKjeuxiIavQ+TRcwo0Uwnc/oaVel5ZTuLgoTky0mXUH013z58sAb9lTtQLtNISoreDSJ014cYks2i9q20bL1qltR8VnmLeMWLlNbkmp2F9q2yu1enutnMgkT+xXa/invfxOL+WYTNXhPP+6ZT18lsm4WvxSXQjQyxljCfapRzQRWN/FCaZv2yyMtVEdjDd8d4iQV51YbnWqb47OUex+IZZO2O8PmhMJkDrcZv2iMsIcP/ZyBNFpVWlp6jfCbOmL1zCLdWsH3Bd49XZxZMXlVV9EqJNyLDd2zaGf37t2N3via6afawZ0jmP4vBSUaPnz43Xq6WXedEeUBPXqhhwjE9Gk28moz6Oibkv9mnXMQtrHU9flbsJgXE8ymwOrQkfHImclL6UEV7uViy98oP+HAKYjintWvdT7qSi7wwzzrSD4O5ZmrapuAI8PUAaYkLC16H8wpa8xUaZ13YtDXO4ZYWBCO2/oBwl4vhKAszC0SMGTCIrapaTYOh7ia67aAFGgacAOWKdPJ16nqWDrdTp3dYSI1aSgrzitMgExZlmQkkQkfMnrDVmmvE/tpDeNYahko/jb5S2Gmk9msQsFC/zrjjA9vEADy2s7nI2Dcv2TJkrehZWqePBxa8s5cHphMtC+X8ZkrLeeaKxQ6EFaEqP3y/PnzB+uksw9Tp079l0mTJlmr8XcJdiBjxkYHTJ8+/cerV68eaMqhC5FO2ASSrbMMRv0ZpKbJc+bMqUzG8FTy5ESnht/rCIARt4exf2727NnX8ZzoTqJaDeQ5EyYGu/EdjwRDZ1tZRBJJ7Tf8PxVCGqbh3wU2XdRioTAb0aj2RWKF8YuHc21sARm4QiZs7GHUp/Ng2GXNLsF6NCNomzLwXKYsEAp/DopsoiesXqTUy/3/GTnwN+h4oy8HzN6LJKRFEMGTqm5We5aoAyfDzK9mMKWxvEt4TWM0ddJl82tIHO21hLG+6G8JRXueDharVkeGl+D1OtQOmC0EY+5EX/Zwyr6VOZnO96fI4CG8o/yvrbaX0RyRzWO86O+4JgaH1aWz7C4YpY69qp49e06hP714/81894wxx3qWORC6Pffccxn8IAx/imnLXLsUgnqINbzLCtqsVQlENUWITSSLD0rU9LdUvFfBd9QuPGzM6gp7eO1kg1Sr7L8Fz7+RTQ4WOH210RqvxOCVyvxohkqZgslmmtaCdTJ6QNpsygFqFQ6rjrhPZJ7ai3WK7XVNobNWtGPyRpOQWo+EjTc/Kt1ogzWDtb6RFZG1eiQcXk2ja/sjrrkwEkgORTSE4FDSodEQOtg9FNyf1uXLInKMklB6D+FpTxQVFti+o4dGMPFBZvC5p5XE7bd83kLcJqMYyeTY2D9Ps0/mFBcXt0XYuMCsQOFA7UMu482dr5dL3Kn9t1qHe5p3DJsxY8ZbFJAQNB/VZ4WGekn0/yXPFNx6663nwWBvRZLaDxPURmM4SUHYVjR0y6xE6erJpqygwfl02rjXYhimJ46FF14CPZhsWUrDSGKXLVq06P4NGzacy3N3iGzGewogkDOZhAlIVpexyIaTGcKSxz1rYRK/gGk8SbuGsplYIP7oSEN0+MzRa+qCKw1H6rIHRF4gqdkJHQnGyutc2GtAu98xIdp0ZfptGePgOIkNbdPjO8ISQ3w3W/OCNjCYzDKI1UrGpaEWam7IHNSM/WGD2rV5RTjOEBjm250rK+7CsJZoQ2acvbVRCbDtqRgRIGaktRbGMKQSs5IaWo3BfrqXRMCSkIxzjsrFlhrSbHMfUuY6JW8Y9ydpRw+zNd+UXkYarWEMMmP7nRlNEqI1+WDoRnTUsCZFnNTfpw/30t/HLLzJe8XtuBPma6bfcvr+LM/J2HuOGTNGEJdPrVu3bozp3DD0B6GFfkaBMAd/4dkFgQOts9SA0gqrYWiGONEhfbLYC28URpz2zP9k+LRzDx2Y2dhKXOFjxVGOSeDQTmYGkBZl0oHJUa4TWfpWmNGk5scoIKVWtR+ec180tmhAZNaVB0POhKIkgwmwr99GhqgPJ7BcDgf8QP1InGoY0Qh+ZBhypkZxIJWH+aI8nPEtQ/PV1KFg5p4X4MfCtkrNB0JA3KqJ1qLCRhS5h4UIMCHK+H4LM1ipW8mcMZxvliD74YvQ6hhrQLLXOyHsPIA2t6s2HkpdB2UyFeV+l/7XF6RZFh5yJZrmJfDXDX379r2ed5zGvhed7l8RdI6m+zNsiltuuWUiG/FiOrpa5HvjX600zP+eHoKtFKSwJCShsxnclWzMjy5duvT9LPCVSFn5iPuqxPuS4ZuNb1FLs89unzVr1tc8jQQsd9JgMENXrVr1Xmui8R7Bvw0z8dTYSWe/yz3fNw1RdURTNl3YRptv0gYsboQ8m0lvo5QblXPLgzFnWMNRFLQiTusGCWMigEuszlwqc4TQJppqzHdGLyhla2d9zPshxv6qKyzSVTAbF6Zt2Misbnyl8H+0bRl60ywb+h3XrbjR1dAdgX+Yk4Us8BmB7OYB1yhSsI1lzEKIlDRlqp78SqMCnotFYQicTjHBe2SAEFA7Sw4ZI8kGe0qHHEyzN9rKN3jHWNbqCO8UIW6EURwsrB7l+/h/s/Zu/t7XtWtX7fRnIMH+incbcvafEgDvabV8+fKflZaWjmH+H+T/u3jnKFW70aNHv5l7nl+2bJnOVddwzvr168+kvxtM7HCDG2AfGoMl1q0Dp01G/AHt5zVvdBPEyZrxXimE7dXOo8KRvhelM5NGPIgTs2d9lA4bpcrd7ne/Y/2Uot0/wleWc70qVG6zR5WYxa7ejZS5D3qz4GqDEIZqwuTpRwlVJn0oGK6muMKQpDWkVgXwYZP4vjI++eF4bxgd1fThnlEAS/jNBRFGpxbRNICJDEVrEVCzVvo2gchkrUOBndFcf5TdDwRFx35Q2IQA2Ko2W5fnjKKS2RciQL6gWS1JxXWZ0mqnrudKuemjWYJnr1u5cuV42lzNPt1Ku29HuPka+1bcjOOOWG33Bf/2b//WFqn1GqHmWDA7KJd+lsleKBQgjKhjiNyZ6G0pHoO6kcry+bRiE18As7iOjVwBE56J5CSc3b8ifX3R2EUGOieqCxiIfRoM61Sk4YaBnuWpa4jTbjoj8/0h9+gcU+UfzD2We1EiM+NNgPIsDI2JXa3N03YjpKZegrmMkjg1YevJ6soFdkJW3UL7lio99wwPMBOZp89o/xXIfQDXVomGplnE0uW8b5Y4rTImJvACg8+ZK9M5D0LYc5kbqxtc78Hlepj6aeUP5qVFZBRB103Fh62AiW7S9uqJre0Vojdd27m3xHx9iZ37W0SpIjN42tGOJooDbBxt0WXM8WN6k2GMN5jCaSIL868neA9rcoVx2cIQ0p6lgEwh1ZF4l6BAjPEF5v07Rk/w+4Os/R2s1RmB+7qca+MZf2skYm3QRTD877nZOCy/xbpZ2maQ5XLCQ+6GrbS6gpua+48k5uK61oW29s+fuh1xJ7JLes3EDB2gJoCktOnazKC2DTPAbTKsYzUW14V9psChbdrQbveE0pvgU611aht6aIFWbdfa+k3MkRFatMDqJFaK0SFmNIxOOfq0XxxhaSwc6YWBZFgYySAZQ5Zx6pML4ag8pOfKiMBoGhJzeUjHzUO69QDIkrbcA/WOZcyW5zB24QI6BgN07xeExO17ld5NxTbr1LJPmgxlwjLvwu7du89jXlpF2almaHrXK+hAy8sYT4mJS/xkldDr0uDSmtVOCMkNRXS+daKz3y1fNt7KO5Ytgx8uZY7/HQH4YO79mWR85513ljKZQ/nSmmo72FR/4LuHeNl01WNeMsZBMPELTJdkEE2imrFiv1KQ6k5zBnQuk3YKktdtgrfDmJ+GQfVbvXr16cYPa4RXIuzRo4eleZSy9PQLr1gNI5kjZCSTsEmHEe8xoUK8XNNjzzYbTeAZ2lDX0qCf1KPEiF3EmrBBVSfI4ZBmlZArAsNUIsycadw/Psod7Q+wHwlLu3Fb7WwmM5gOzbsG8P8KCNPimet41iy58UZi8PcG+nYufw+D0Y0W8QqJ0bp1FTAu4Qfzo76WKchl8S6BiZpFlIVA1DsifMfinS2tT8anUIATsRyUFLQxS8DM2RLaPReV52GD5dFQ3qnXlneu5tqvJE4W/FrnhPkya+kADLY7a/Of9H8cKpiRMk8jJVv5+kNz5sz5BmvT3T4a02lFXp6bDaP+krCKENBEJGXBtFcJIRjhiJarn4+kvJOPiHWmyeqc26O5Kjku/smI/7sj7UTobpoNWD8R6+qMLDGFV2xlmapoazIOSxYdq0FQ8xI1OqHAsV8FzMlMEem6TJ1NL5hTBgfrZjBjTIFABgazNyuusUVI3fNK01bdFohdWjU9OlKnC6K6iALYAQvamtrPfq5MJgsddElKDtNEk9iLDcKsmCqdaPIw3K1hmDL2hblCaVdtcHfYiWXI9aO9iohFdl80dy+6t8KBv0+UQgUvvjscgF+NoE2r71hZfKN+HKE1rWptAV7ofiFjelaTpAkwOu8Z/5Sk6ecy2lTQorYJrq4UaQUUnevsm4vZg20QiqaybnPp0wJ4Y8KKfgmEZiUbbDob7yKzX1iIz9J5bZAyCwOuz+bGGSzkv/KwKcpmyz1vOR1torxwMt9N49muMN6xbHodbXrSu5eVlRmy1kDpSXuUAeTc19JQKBb247TxkNESvM/Tux8Tpl25NW3cwDOzaeMFM3N4TtusUvpWzVcGgDjRzkF8nIiKUJc0RzSMgyQjCm1DkeaZ2b8tLcPvYeF0c6yblaiNhRTYnP9P5X9xdufQB7PQhjHWF1R9+F+UM9M2Bb/uCRN6F6rHcGN3NUUUFxdP8x1WnY68dsOHDMvRqXA0i9dp0ECJo0lEUmjusAp1b6UMxl4/Jd6Et1tnyioIyNCdbcxRN002PD8ZxnuVVUMCi2IHz95CH7pH2qhx0wIevYfvp7E530Mba4wF5vl3LF269HY3kRsRFeqINDBhwoTzuGeFzoywH2aOQ9PHPdjo60zoZD4HrqahGp7Tzt2OOdjKWh9PDHq1yQpvBLvwK5kgZKwyv7q+83ATwjFpHWox+l1kzklCVnJNTCOhvWkPzvX2aw40JFRtTQAW6ze6J2CwFUYbGcYKzRh2owNaTG3fk+0p1j3TsqKwbVYtRA0QJqP2e0R/hlgMYZazyvmROCQaRsmy+iEh18SerUnmw5CmG0WOQE1I1Clyw3hm96yCTLNg8kdCAGsSDLxBOLvFMm7F0Izl7R7CXCf2pyiMHkaCIb3IZ0k4l312L78tXGqc8zjnkbF3Ys9Ys3J3rraR5jEh6b0cPkj6gemPXrZs2fuUtgcMGPAt9uiZCp38XpZbifw4nrEqh3YSpOOPqK5o76ND2ocv5MaODO63VsBgscZy32S++7XhI04E99/L72kyGO7rwgRYQsfTVftzA3jrPlTcp4RijBhgEdQMiVnBAi4Vx0EGwjufgIGJDFbO39/kmtJy81RJWfhLYfviBKwMj2xeGP8zgPdwFlTlYBGnwhxVMZEZHoIOAH6bKNHVUuJGWxg8bgYQi/YCv7sb78u1KTrouMd6efNNs9Z0o8OPvr6P/nR2UWVq2pytIsAC9l2/fr1lZ7S772csgqYciP5WBxEe1N4lzmvgQOhZ9QTPwuLEDIBJViPxlqrW0cafYYrjRYEzRtIYX5ilEux63ncGc72eZ1rAEK9goacw57/ZvHnzB/fv3z9hzJgxl/K+n8K41S5awDd/v3DhwpsM7eN5s+u0U+865ZRTrrMIJeMaK5JbSUnJ7dw7gI33pLisPL8CSfygTlZooCe/W2rv1uZOWzuUmP7plHupTVEzwInCzXJVXO9lzTJpM0myJ2Lmkb2aJ3POZQgi40Vh1ax97fkpUzVHqjNWXnND5t22Vp3Zdqy/EAAyvryoVGFkj2qkZg6lY/dUA3MEWGsjfUyRlqCVoK3Y0rh3795G9Giaqh/Msb1SqkJTJEHVi31aP/ZBfjDl9Lsq0qn935tl0PpjjkbfG8eelhlrYtgdtmMZePY7pOVKo4ro13yu9zEUljE10HYuvCvjPeR+Yt9OUGjTROjBwlgPQeePi3JoTgG0LWTAtrqcdCdjx3eePbSYu3NEmhSVkINsG/NqYtQS9uaCVOYrMeP8nBjFOcOHD7+NDfh2mPIPuOFC0x8NpA6TwIfZcKdYN40Nb+LEIiZI6c+smU40bJWKAwxoS48ePXQGbjVwHDVmY8T+6nCzGsASjey082Mm7Iu0PcEkCtreySnyJ+NdtfEaeK7dVSBpJu5+QbAjsyedPBLDkWDG9aJo6JHw5FaG3bgm1Jr8IIDkAFAS2BDMvHEQsHnwLSwjU3XsZ19kx6nSGwqWIUHBeDdE2ugBMYTpb+b9CM+zpZLyUgVkFz5Cf/KCyGpio+r02Mr4DkDcMm49wkcY/1bmr0rPKwunycYNJUqascz7NW2oIZjlt2nTJkHgN2smsv4d3w3QbMPfv4UIvqtnWXMOn/1m8Cld0ZZoeTJ1IUlfZG2WqfKy7h9gnkVTu5KDc4r+ALUjDpNllqZBit5uBibfGYva29I6mo64doi2lqdSRclWlkrMvxEk3trMNbcUe+3QvSjxlN+1a9fC2mpubgzwyzn7lNzMZsw1T/gumWe6JhP2QOfQzDerVi3LZzUTqm35bqXe0tJS8bGN7BF8R6B8AaqyqCFtydqYVbVhtjKyPRzSW61ebUz8ypUrW0MvGXOGueS/+OKLvXSMq6Hxns1mbhoFEXbk8rDraifdH3shCSb1g/mmn4ZpuErBhsgFo96TbDLyB9ruEpL14ZC+DcU7GuWUFPCGK9wYFuvhkUwL7nlTqBnrQDVpBJ4fidnCfRfBfMfy9/PyUjPlcnAmjh9otRNz6qLzVIPRdH/m6iIxXTQv8Xu4EAr8Paxv377tZNa5zx9nxqqZMJrvnXfeeZexUYVAFK3MckXaAj/A/5ebXbVgwYIzaexTMAGzZWRck5QkI0POigGW6FalfxbGsJYNOwgp6zorUOi8os3x2kZVf2H8N9C5IaYHGrbG9TdFUcC+IS2qlvQuOEa5lcHUKpPaE8VBC+N6eSxgQYS55Ud+fUFIpeISF8Y17ULrYvyDtBHJjAW/9juuPci1R8IUoipo1WgzfrazsNrNrxP6T2nYCAgbl9jNUgpM45R3XpMkYpl5bOC8CLtxY2yPPjSNcjSOVwnFMLxNURpdaMIWlqzh+6wyL4x6kXHXrMlpbO6VxmKaLadULU6E7xauUInXKAme68LmHAhT/YSbsXv37i+yFr/1fUOHDr2NA2D64sWLv6OzFca9H1oYwz3PsPn+ijRcHWGKqp6t+Vjz7q9sxj2sqUVPj6vDftz8MJsMTzfiS/9u7bwnc0/uJk3mJT+5z6eadh6CpsCbdpwYZJKMmXeB2mtOFOImw5WuopJ3fi7zt7KJknGu804ALa6LddKJ9WgFYy6o1Z4NyCTc9zVGwcB0ZbQCtSvNKpBYPb2JJax0wBllAa1s5X9hIvcYcQEzb2G2Ke+wEG5XyzMJzKUQEpmw4nsfCGCdxISPhhB1JMJQ6wVTLo993limHfZjGXLbmOtdIWln+Mv0r0OYLSoiZXpPMkeG43sgzNbDIdOS3RvMk7ba7obOcYjcyx5az769EBoe4Hv4zArNuyjX7JaEjNy1rivRJvdaFLcwLM99cYA5ugcG/ez8+fNvRXt+AG2icW5bxyE0db6wWU1uWCEOro41JKTLmeBT2HRZtWNxQe2Mcaaqs4LYWHiQl2ZVITR3KGlGzbZWmh9ER1KSpFPaYDvRiREsfls2+5xA1TeD5n6eNzrhbSzsPQz6UYG8DIzm7zP4XhvQ3pzxFiYQljgVhfQ7mgqGxqJnOfbajqOYaLJd1YRJQXPHOJGgDGLnvulcN/hcLAdVoB2R6lkV9uRMlTLmmT5dERCZBRC52XyCbuen2GxVN+MaTdIIwqsXzgWllyLGYoB7ZlsX4UoHhCBB2siCmZY7X4azaRNWnVRNdN6Ms2RDbICQfsamOSVK3egRb2ylZ57XIduPPl3GRiyljZG0a2Xfa2Cs49hEFT179vw/3L8FRr6D8e+FsX6E9XiYe1Zs2bLFQ3Ml3+/WRnjEQFMYCO8TF/YAWlOFSUCJ0cpAZBJRiaUZa3oLf19AG9bfW6s3/+/NmfdawOmjaIL18QxXNMEhw7FNgDAmP4XaqvSZMV7nzLlxk7MmBTzrAW1USl6uacK2lT45HA1ytwxRda5EHm3V5ErsOnZV2DT7uScNY5O7amfOrY0X9urj9fuUhO2PpgwODesCNoz7tRGLF9EgMuMqkO4yxsiB3E5XDzxjp3wEui5nXE0C30azxs7Yg60j6kE+0jAY7pHQWFtEKFtF2JUbhURdHcBEBSEc5YWTsCBAuJqEVqw/RieikAOj+HTgMFof1cmb65jTVGHSiQ510/VhjnfA2y5nrNcyv4/zvH6yHdzfR1OQpdzMaM21Eac5eyXaCFxp1/5NGzduHNq5c2fr9nVlOw3RZGHxUpjxbzzB6qyBJ56si4hkJBN7js7+kk36ApN8gO+GGgxufSgfhiAKAxWqGQuYSWFOqKYFs7uQyM7gnvYmMhiuBYOfzoKVwCC0dR7k7+foqKFlndnMVhToqmmA/xdGGZeNcXpfS5tGUGyIRcoLG1PKsa8f4TI1KcwlPLYy3UZxT0oIyWIioySMCz1KZqwETv9/zt+lsdA6G1qF3cp3qfpkACY8a8Xjq7Sv8ozB9K301CaJRltvfPaHI6IiScRRn0/7nHW1lKKL2CSl1o5zgdismyAa06jF7fAAbCXDF8QlYo09FFxgDbYWaXwIpnt+0hyiAkZ7U7WNehFjgnd0pd9WTBjibYMHD77HuWc9380zHVEvz2ONP2eCC3+/RymHPsyzs5qOoAXti5phymW6etIFkUn2yyFDhvQxfIdDqZTD4jsrVqy4CWn7M/TB2Ox8JJMMx/jvBX8ibYxw5Lxa1DRNCIZ5iSuis1fTTiFzYHr/QNoUxKbIgpdMzTn6FKxEIQNmr3nYaRo03HG7+zHZfJPaK18WZ1jgH9qUMVakCtBJYstFJvMwsHo1NHBYJ5331rUOvp/106ZpIdeGYqfQB6MAjCs2ykZOWhXt6uvQ7twCKdrwMemjDTxFzGsl+6ZKwxwcpdpqA/yniaD05gOE8FSd9pdlzyLzzvG5P1oHcy2PULV6cX+TJGhFNEbCrqiI7wyXFfZ2sJjKRoZpLolipUUegPITrq9kHfbwe424NTrnFVwZ5zL6eyrPrI806ubQ9ZPGXqf05ldT19B5VjvhMwRmPFHmT/td2GMdjXsWN4Y1/y77a+/x0Lba4PKhBmUplHDvIzDU5Tz0MAx0uEAXGug9GU3kMHRL5maOuieqYVguBs/0VF0XCNpSQwZawxysP9WWQT8GA/qe2MRcOw9m0poOXai91DhjnWS08UU69zDfy8z8X1wJmb/vPhyTnzHgpBIExurxsDaZp3+ratU7BuUnLkVBhMIIWKJJRYn2DLPNVL+VjAOU3lN5R5yA7SJMxmw42x/N2N8sUdHHNXxWM2/d04aQEVt5VptqMOKqOEAyL7KMP+KuW0batsKnJZUsTbTZMlTh4X3cqA3uNYqiXClXb7WwlBKxGSK88wW+E7XNrJ7fhEmm2HJGSleGow0YMGAqG8VKKI3PPvvsu5j/3y1ZsuTHrhX3v8im/hJzP0cJweojMPlH6dsW1n4f46pJKfE9evRQQu+u/T+hrEkrSIPD2ZS3sYlnIXnfyLt6m44K/Qw28kTNifV/9pUqePz/wogdE4eTkqSp6VW1s7BeDpM2sKD16usxqmRuerIOeuj1tm0QJ0koAO3/blYlRu2fPGOc+ju5t5cmMQ95ni207qESnYegpiDXA6Zp/4x0qNGJlwq2InnpLM+A+iOcMpWoeglsY+0xpHt4Vju2maBHo2xSC4ukGq7pnjcVWYamQGJChA56pXX60TCgMRtH1lwr7u8vE7QiR2iMGaRmILo1CB+O+1TA+aZRRac6Ko1rbmkb9mAl3zYhLZeHKSOFyR0Madg8Ave6FUV0yLv3xJrYbGasEKGWQXLvKmiINcO1KVxrDH9pw/WZHKBroc/LzWUw4Uq0N+b1gE5yDr+K3Djil4uiSDTi3JvEUVxc3LekpOQL4rfAJw6xxk0TCJHOPN77HXnsCZlxrr3Djw37HZt6LRv2SjPmghkXxOIqQbgora1mYfyrqb0inJn+y2Z/mo6ZHWY23VFO6vP5boQxfkqqJkaYQAAxPXlMuCiYwUTstR5dBICr4swLibdh2IjyI9NOhtIwmJ1mifKYsFTNuTJFWYinGiYRbeH/l7rzALOyutY/vYOA9F6GNvTewQJW7NhjLCkmmpjEaGISU29uol5jYtSYqDcmdqPGggXFhiigdIY+wNB77wzMzP/3O67NPc4FxdxE85/nOc85c85X9rf32muvvda73jVCmXPw5aMQIhNWs5FVlckCYW7CdHjXolktx4OcvVrTFkzUx81zTdCd4pYja/tSLpAlWyOQWBQgeKVR/tYGWrkWf/Q4rX7ri5lMo2UlyiJKOD1iUEbybF0QFhCVtQqlWj2i9GKj7Z+5EqWIEOHVm2u3YozKM7g7e/fufT+KsuvixYtbdu/e/T12Jz+dOHHio1pmWGzXs8jeY9o1AngySni6ZcmZaLuc9EbX0wpv0AlB1h2ymVV+XxLIKMipy0RyljUoirXcezir/9kosr5cr3P79u3/jNzM/jTVKj7vgBzyeTAVNM0OyqkUmUTl45j/VeRTbC99oVvsFGT4cib7SRw/p8yHVSTKC7UKJM0OXXkiAlB4Xk++3raMh6ijmZynXFpX8Aso5g4cX5vjLBVk9lBLZCWX661QIbMIlouKMFqwVQNHXMUxU5bk1jWZwy2zz8N8rKC1q1JI3DKOsc8rR4m7Zt+9H2MoXE1lZMXoYgN3BrXFG7uLtqQQC4O7XIPUVn8Wqin6yIUiJxKu9ka/1gvc/+6Yw8lPXDcUdIVQwDujT2tE4E6tXTMrWF8uzqsaCllF3E7aXbNa5c7gWa1CYzLXAZ6rnRSgWsVa2nTNcvrpXgPbUnSqVzhndBDP54nBRpZ17c2Xx9sKNKmf0m7w41Kkkwzl5ORUQP4fwIAd7g5FXUXfrzSgqBHrLgADx5qXczV8Mxl4n1R2KfmfrAoxYMAAwcojGLDaaVueIucOupA46S4RmlcRQv3BblGaWflCwUBQ/2gyAY0cxgRtyTHTGjduPIOHb8vAD7ZsvSWDLCnEcbsCIpNJ2hCjGwkTpjW60jmoRckCjiyeMuFmqBCdVD58tRkrWoA37x3NzOPd+m6Wg+kd4HFJ7bWaLaQ4za2Yvq9IwVQBKZQG1EyV7hpp49MNrNH23gp6QnrIBcC9tkewIvmLi6L8kArX51BorIQwRevfelxRZNFJInGRmEn5YhfRr6slN7I/3ZrFjkQrzoiyE+UxjpXN7sTILCrDNnE+g1yflbkvSmLb8ccff2leXt43LGLKiv07LC93J7usOxbE4lNlUVMJR7LAIZiU4y/0R5L47GodUT5Jl9U2Vn+FOr9NmzYPI2TvMJkXoojvoT1/454l/z/B3tLWP1KKM7UVo7RXBRSb1S6sEViSlLRJQmZbGShCOQoLk6FrqVW5OVbIV1P65ov01TeRl8GMy7cj69PFdaiyxXiNtZACYzKUhdEkK336+RoY+omD6U/2s2rcuxvXn+U4WIxA/gkNHWVBH71WvYyIIiI4x8KeFv2V9H+nipp2NrAmoigDERO8vG5xStpxTpvtp8+4zIcEXu6QhFoWIgOWP6vG3JWT2vL1NSLoLc1mLfHLnTp1cu5rYFQKKJvzrWqQyJek9Gb7MQJ2HqdfuFqgpHaFG6JqGF0VI+9hZ8opCBSUc6m66fsWC44CEQYE3cVa+qwVuqqeVjxtqxRJFrXlqNAnbEBexAvttGzZWM7trnHGmIuYsjxbN+bJa+iqksMRBiUYYmmLWcXeqlWrrsy9X0qBa10+jKG70Y0fzJ8//3gXRmGlJoJJSmYMJlNA9mhq4Pmdv5s00KVLl2eZbOt4QP09mZIpJnXk5uZO7dOnz/e40U0M5LM83N8QsEcYtGcZVNEILax8YYltBOExzs1l8ovpO4bV9R1kZLoWoMUMmQxaqRmiaS3j2NrvD+Wrsq0T1vG++L58rKwpeKdwZbiHtIijIkGlKBxq1s1syURU7mLfDXgxKHNkgeJdmj+3kqZNd1CB6tIwBz6eV9KiGvRFa557gx3Pc+i+yQwC/XKQjt2YFTEuG0ELYT5OmtWiI/QN6xoJvg0FtJ6T2sCH7hjeu8oFQH9Ooe/PpE86+Kxm2tFHG+ljESeeJxLD7Z5FUA385UYKdh0zH5lAy0eOHDmaBbD5nDlzbmVMnqL/79aHx7UbyDXhwkf/y2pl3fVyySecLXhOVIWIsaoY/u7i0tFkj5GvGGWTzzXfYSLMVxH/O5dTKk2B6ASjj8szmZo55hgLjvMw5Daf+aF7aSfPWBwumjIsPpV570d/nkP/9GFX8O1FixZ9raCg4As8/4UmB3HOQPr5OpRoZ/q2k9wJBo0NNNFnvuSIvoTx+tLatWsvlcSGfruI+52hmwNluYh7TNIva0q66Bgmcn35Q1D+25G5TciHSslSRftM5uB7Sap2ipCQFlW0k4gNsyYZYxVViWWXlGWP5xkrc9z+hH0NiJtB6OqSXGlliuZBoVjX8Fh3dhhdYuCNNR3DHDfVfzf3rKfbTtJ576Hl6VyKuaubzlTn2qGQiyOIp5LVyJI1rlrM7T0xh8pG4L1qJHnsieCdLlBdfUNMm04uC3lTnCcagbTDeFShFWq8hsFIs/Es7caxQ+ivPuKs6b/7+DyCl6CEAsallT5l+utsFsW3WTDXZnOIZOvFbF6RhLiQm0co8PTp00eYeo2+Kc91nmWHeo6kaEOGDLnDiujcw+SPN+1zLeMKnyI4kVHWNNAV/xaE4za2um0s026BThoxa8mSJUJdsq1qqSM3WmOqc+fO7zA4liK5DqGdy2At5D0XBd1C/KxJJwb66IjTpM7kuiIqasfKsy18wmVju7I/UiXrBLDciGQmMBekQQnqVi/A526VDHC5aioknfn+fScbgzFRUunYFi3Rv202jlWRtaD5v2tEklXSg3gWSdIX88y9EcJhrrj649KfGW36wIo/XEZLwgeWKZqo5SLCxDai/ORaVtHbXtmbzMIz2cO+1HVjzb1+HL868MaOVRX6Zizft0Mh66PL1drg+sN4LQrspYumCrUqijePxfPb/F9/ypQpf0Uxv4xg3s6zzKXfVfhiQzcxnouZYNvcLrmAJAs/e9VnchvcybTXKg3ZLH2lt3D6MaMi9+eWCFIaWlb6c8LnCjELVEiZSCP3WYvMPAuFVMizLGdHWKxBohJG7rVIj+U5L124cOHV9F2u59K3MgTuQpYnya+r4cFrNnLyTXYJzoMXuLXjrhIys7OBxXKZoBdZCozxedUUZRT8n+SBMBiFcv8ak/hOrtFTWBT37CO+fPny5V/gHDM/xzPO05nsD5nY42KigsGaM+i+L3a2RfJLpxRdFbRjpO/fAHtYoeUT+gPZMmtUFJTjrP9bC9U4hWiMQizfxcz1JjNnzmzGcbvQBftYPKqG8SH1ZTWUdUMVYJDzODelusyUauIeFvq1nmRBuBn1Vy+OmEoXd6zOU5OwAq5WHIZUnXBd7oq5JW95TfWLroVgbdM4s9SaQUMrVasT9jCe7iBtz2Z0lOXOMklqyPwXdSF4Ddo2g77qxDiPMCHEPuFZOvPc07MpSEu7JLLlP/DcBk47Kj/Sy9I30gSfLp1Ahw4dFjLffo8e/CNjMdY5l+bIpypslyabNaKsY2YH+kpO6yC3+V/nKcSzZs3a1rNnz4s59nEsgDMRnp/ROc/IE0zDTkVABrOKvMuDz0GQrtIipIM3xkAIKTMBQyUpi9u6AJHrm9Zi1EJcE6QkVYPU2rZkKtSqHyLS2s6S8Pwv4HucCk5CeYRtngpaeFuQ89SMoN5mg3EOpoRJTKxZHPc9d7JsdaZg7ZyMMi6XlE74nQ5mWcUVwx/mlsjKHvKu1kVA3lfQQ7AUxp3hk54leZCCy2eLNUpM306rwBRuXRAIywVWGTGTkbZ0t18MTMoBGzuBTJUUM6SY3HeJ56Z/77HSc7du3b7C9dYw+V3EDA7Nos/3rFq1qiRFjZOicqXWRcQELY4UUAlXVEjbHf+PU7JJaKPwZVndHtmpuv9qJezYB7/IoWBKgoiJDIgyQxkmMv43KFyIQhW3Kjm+PsyG9NnpVgZHMd+Rn59vsdkyyK/KrAeT+VRJyXnvziTPtxYgk/kd7jeNa1jzTcKmMshHZvvJNR5gTLZiMR/iFZaNECVq4GwY5/6FdoxBwUpscxAFrM9V5f4uk1cf/yD6/BsrVqz4mkyD0gTI18251nRcwHlX0v7jkc8pWK5aeUIWG/JZudljwM37yiLGNVWOlgjbyzzcKlomEW2lQqW6KPQLu6tELrajbNdpORuAEmXC9Woh/yZeaHWKS9fVJe/2NuMsJkNxjPAwDYlKkSW3IQwSd6jOy5acb8XneWai6uPl3Pw4vntk2Sk4Ws7bw2Xh/Bat5Q5Otsd+Ph8y2Z0XTTp2fyTb0P1bzXTbHqTxGgf1o43/zbzoumDBgov12dMv+tn142asdo6pxLhWc7erDAlOOFK8o7S1nBZ4F3bunc/iKZXnPsZh5bx580bQf7VOPPHEG+jftgZG+ZuUjdj5h6qMZpvn2UT0H6fEtZRmzJixG8G9lk58denSpb/q2LGjUJ4rmQDXI4A35uXlnY5yaMaDTKSRX2bgn+WBZ8v6r2AEnZ7bruJ4158ln67bdK1JB1K/rz5YFeJqo8OBURRyY+FQYTJ1TWu2rJFBBybrK/qHYvW1TyQamate4R6dRCzwvkOkPm1vqpXNBHqbidabSdPQCe9kNegRAbh9oZDrx/arVlT5ONbsRb5bFxSCJUGQ4ncqCRNp1oefXHPboqAqBwudaqHUYcU9320u1zGdUvx2LT5vsoYfg9xaCk6eR9dLhj7UxYTXyn79+n2ZLdF6junIs95s9QaE97sonYOcrz9yg5ZRICckQRJqtTcpY5MCmGRFn6aKcyTjCLY3NTzjxki1DP9V2GAtPxUgr9q0swqytNn4RKTJC7E7hglpGnkbnq01E68D4+uW+4983sw5Q+inc+W6pl9mMym3mEnVqlWr4Sxa30bxDdEPyYRec9JJJ53PfcaKv3aBQoYzhRiycbzuFCWFKT1vnLD0+TFc/ySTIpSZgoKCQ5WEPU5lzjV30Y7X9MOjFMWoWvRA2dkTLqqzOaeL48K96yLTp9SvX3+KFcxRMo8xjqb4VtaNIEZYBjauaW3DZsy7B2xvQlBlx4hQ/LsDJyv2vaIujOBUqcDisp8+MrBcA4Uu25tpvvX5zqDZOn6XyXATvzU2dhJ838cG6c+u8OmqhIdr6Ohy0AAy4Jcy37h2P4OYVnOXPMxdbCh1DZuWJosxbnKdm5kqz0wGGicZmJWj9d+76/N5+L2RhpeuFp6JYVx1FW3eSF+sZFHV39yfhdGiwXKSt/X59aebSKMbUwQLO6CPkAEdToZ18amblEHmqVBSF4P9LFZ16c9j2rVrZ3WiVtz/enas30TfFSUM80eSPj7OZ/zP+PO6rgI87I7u3bu7XevL/a7m3U4db4VlOq0PwtFIYh06V8WrUB1DB26RK0LXqo75DxPeilxJi8IdcCCVXIq0Z8tFyazmKmrk2ui0uOPigKmN4poqUVO6TWoQQmb6ZHvdBfqiVKJcY3vCP9p+jj0jsuHGc+wqFFp/8caRploS5PACygsMNvB9x0BsSOpS14KnPOey2IIJn6scEWQDi3Vi1ffz7qh0XSGOyTy3VlPA4rTyxTvXjD7Zz7XnBsPcNgmLhMBJjBK+QRNZZskkZ+0v+vlkfd6C2lFWW2i3WOeU4VWOyW82n9bigdK41E+Sj+wMsghwlWCRt+PtBwi1hQhWJevwn6mItfpycnKqYKkNoQ/a0ier6PN9yLWBVxfuHfp7eVlc9wCKzZ3JmcjBCo5/ia3kOuUfBbaQ/nqOPnxN15t8IyiXXvx+Lb+f6CIq6QvKeYzuHyZdU5RQG+MJ9N9q5LuktHI7Ek6V8/Xlvsk13jXlOFmm6dj0HrC2g4yd1cEX8ixzeI6FjO9S2mI1i/KM4SPt27e/2yxX2nCu9ep4rmkqe9rVCGU+h+9Vns01OjhvO6+tug4ikeIjuGY/u3CitERp6I/W36qr4WDUcdzdunXr9T4DY1pf2aGNXfTJ2uY2bdqYfLSX/q8ac8hdYmVjE7y2ZuGhpcGsGvA2DReL9W4M1IWGiHNiW7gdRaSY+Tosgn/rdZ+4KIjQoB1a73Ut14Y8zFcvWF3aorjGV6QfEBGKjhlotQ/GtDW/q0ecw03E/DMWuhGFnGbUBeMy3BiZXBfZhUpL1yCMHAOTo0pQ7Dks2t81hVwmRZRu58jMLItSHtGrV69baecjBsyDTOzjoW3/SoWMVbIDwXmaDurGxLiI91Y8xM+EV30Iny0RpiLaYIzVpPn/CnlAkYPFroh0mgp8ldtfs+wi3VKfsFraOldrI5Vbn1obfvPcDK+xPme3pQYJ+TzTlZ7r95MelHcRC26vFpm4IpmRxUYtsKmfK/y/CpuVmMtGSnKjUFgC4b13sTwPWi3CbaJOnSDzla7inL8jIsTlQ0DLhAKW6CTjhtE6jkBkJispMpdWM7hWPhFnaYRdq/sg97b6yJYsSkKDNE3dBrHL+IFbUtrY1G2t7hyrndD/57oD4NzVfL+cvuibWK7Ej9tmxuVgdoT4aEoCeQwWo6iDTLajCt6tHhP6BATvO44Z4z9ZC/lwWN2EzikdVPsk5c89DSwNx2L9NXJ8si4ZlM50JoTZgkbL9wV/r5AuEycyZY64/nuco4tqh2gIJpEoFulemyNjA/jeIgjfmT179s/Z1vY2zRc5XcmO7naeZQLHTmC85W5ZyH31u5ccbemkpGRVeJEt9xEfZHK3JEidVqrHqRB8eZ7uB8bWwLNB8eXi+zn2LebKoxzbzgKz8jBwjU78dhJKZT5zzDm0P4J1NU0+UIl4TXcAKNh6nC+Bzj7edaN05BgJ3Hel2ndSAEiNILUmY71DJjeev3zwUFQxU5R+bcdxWq0G+PdGmn817tsgauYdjAzXgxHYqx0KWcRSYxVwVNipHaWXTOLQgBqple08dp7z/D0ZT40TXU4GNFdxPykC5E2RR6Uhz2w2aVWJy/QJi++m/2rxDDWQne3u1j/0vm628lDtZAEHr3F1ZGAY+uo5D8jGaZcmfFIRd+rUKQd5eSpYFDuyCxFnX07/sckeAwYMeIx+ucFs56BMOKSMK5T5jP8Std+0adN2d+3a9bLevXvPnzFjxk9p/A08/GQG/48I0dkI2ik0/moE5TkGtDsP9TAD/xv+f1oOCx7gKs55zAoTojCc/LKoGXBRQUUnmYzRmns+p6WqP1f0Bp2Zb+BPHyH37MD1XBXv49gmco8GIF+qwIYI1iA+v8igam2vp9PECt7A5+YaZS4uWk9CfzjW7ZwKu3aUiikMoTP5JFM2xgUhCPCLwqJPGMvtoZxrhRWwP+B8ZWPgD9KOZ2n7l/i/gXhOdwtili1gyitHmUA4LUvjNn0h/bGPZxvJ93n0ZwfaaXvWYaFeYXAQBXktSqsB26eHOc5kkWEotdfo6+LSytDg4sfVrEsQLxTaSVzzEt5voC+N8rtNfB6h18+dKYMelI+H/KeJuUrhROhl6pIfe1O2HzuLIOojgbgIWFmyaxXK5Icct41n22xb5Mhgcupdcns/kHv35btJtOVP+mXFymLh6lMeyuLzLfqjK31ghpwLWu0EbVO5s618AaU0hrGfh2LbokJP9SLTBD0cp20qQXY41062lZXcP8ErkkqeZfzdzIn+cidYRl4XFWO+QjeHD6a801dqkt20T65cy9IX5ubm3sw4DJJudcmSJb9Q9qdMmfJ0586d/4N+0g24FhnRt+0Oan/btm1VPp251s9cvLnWqxz3MNc9AeVyBuP5DHLywLx589x1tWAuro3YkcZCpcxWtUKFFZZtkpKV6zbj/jla32biGfPI4DuLipxH9ZFFd8LVdb/pFxbDL/49KklrITeLIg/zOcYF5QuysdEveVE/ziC+Wapi8g1EqqxXauxEbcwW/CaET3SFiL69tNddhOyFq0P5O74meMin8zwytJ82f9exkEvCeSn5UfA8u5NcGNj6/2WcOB5m3GEA/HrRokXyfgt/tAx15iB+29mnT5976fNfou8OKeLsv89cGSch9GFmzZpVZKn5wYMHL3nnnXceoLMuQehfo+PukjuCBzxX9IHKztpuixcv/i3WnoVTHxPTyKXOZrD/5Epv9FMrNtKg3eo049weKO8aTEzTeVMqddkgG8lUtuW6lmFag4C7FZrJa7BFTBUst/1W1+DaXThmvJYB11zJ9e7hemcbnBKDaQWP4LyoGBUMXN0rRcCiMOmPwEcWRVBPhauy1c9dO1inDgR8x8mtUhKYnlK9m4q+4F0M9EBrA1pmhufLpGxbSUXin7BQtKRepw+sY+eisZbfLlRR0XZ5qCfxEt6mD/x0nullJunfWCDP496es7O0UlHhfRJ5joJKX23kuit0sbBVrYIwHkQ4pWt8I6gey2A9qJkace/VKsTkZ0WB6Ea5CwuzJ9bn97jfcypkt/36gVNQzv+zA8VYcPWRnc7idLleb39jMix1ki5btmwov3U3U0xrEmV8Ku3qxvtSUQl8N2Ty5MlncZ+myVAQHYOcbW3cuLE8Brv4fD+KaTL9NEPEUPAvfKTEzuF2lH7PueUs7eNzlHbzJCWuj9GFA2UgWU0L0+blL6FtUhBUYfLqHqvGtf7Cc/RH8Sw13Z7nas45i3jWLbHg71y4cOGpuuroqzUdOnS4h+9UaBtpexMstzcKCgrO5Plc0HWrTWP+iHLShVNXHDkL1Z1CKVG6N9M/X0Ipi2pqZIVwFqpeyM0ClEwL+vY5zhdH7aJWDWUtXK7Y6iDWR1TmXPwt3IC1vYiFzoogwrkqcYzBsfdNphL2p2HEdRYZ6+H/ProghKapWLmGBYCHcU7fhg0bWk3ZXbNUveuQmy6hXA0ciibSR1vJ+I96QERLLIgmelnXTN5u3UvtDe7pyqGPG3P9x4TfSUugDOii0E3Kb1bekYvdwgqdkIex6KCP+NjTOIpFR6GP5PdTGCcrWG+lr8Wbl/Tv3/8B+vXudevWzWZBPOKu73NRxtkR9/nz52tNPTZ8+PDtr7322hgsknYI2BkIjOxuKtXmypkZaAjGCr4/j87oxf95bq91musjct8uVEbh00eE8J5mVQwpAtmejeScsVqhdroDw2twWLbTpb80ikqH1jUVkkFRgdXkOlXCt2tgIc/Kz1xDaspdQmqCIL5swOFKAjCfaoGVDbD7gcjuM3BYGIkgFYOWtDAFFIVERWXchKdMHBsG9wzsyS1gsEYCcH3pstnp7zYi3Jg2Vwur3P58XTcNq/RvUCJTRF/Qrh5inSVPkSKVCfJthPNucckI0E8Q9DwWxqfEjBrcTIQyR8NiluA8Wgf5+fkzuPZs8aaOjVlRCdXgNbp3716TSf/AmjVrhptCzbG3IbyTmOzCrYbqB6TNb6xYsUK+jOc8DytMhXulGF0XHncExhK8tYsQCrcDisnq2OUS3jlZqt5TZZcUIUqhAcdeEzuaMikTLcHbtESHDRv2iltjsdyiFeify3mOm1BuP6D/HvT6R/JdZ1Ms6sfGIuqlf1rfK2NUgAVemBIrtLqxNt2C9zIwO3HixEtpQy3bkbgpXIDoo5Ucd787Piz6doxLV+MP9KOBMWX7I4H0lIiFYr6E8/UJW+WiMCBfWp4DeYZjWVisyHOBBjbHTOLZ/s71ZDPcwud5VmZnUVzMQlKJ9vSh/ceL5rHgAffuzHFjmFtPcH5Fxqut0D4+M5RrxeFXY4FZgxKtj1Lqy3GTOMexnCOiiTEYphzT3qXcs0dwOovpdedqrEW2NyFo7mj6ICszXGwZL3ex47l3Y90c+vzNpPMloT191004He0oiO8bRpBP94uoGF0UVvTYzv8aKVVciLN3OM5V5MC4TTWNLY0s2n4pxsKjjOkGxyZ7btjfOTk5xyxYsOB2WRW1xFG8EgEtx9C8gfY/PXXq1DIpF+GIXoPP0md8JLeFWz46exmNHcVDu2qJiBCkbRRUtqUDUZKotlA3fWOuugYDGKATeA2hQ7qhSJsiLMLiVI66LlpKYSfvBR36tpVk3drQIa7S30bgxOW+rKNe0iLu1ZlBeJ9JKLOaEWoDDq7eXst0bReBYaYeB/m8SrVeVDORqcqUZNNNU/ZdUaRElw+wenGynMNidqJUDdjO9rCAD0T9L6uatIp8fbmP3+KeokY66t+yKGr4ko00GGCpKI+BuwCea4KwN1493RYZ4OD4rlqICEYPjrVStQxuCyRnom9PZRJ0Qym+zLOYOFJ8tFwSKgyjzbzkZ63CtlV/or7Z3UzmA9IzuiVTyPVJMjZfnzNnjsENXRY9adPZVklhzBdKoGQxA60i/gxwzFUudSVwzGkTJkz4MVvmgVaqRgF34d2YQzt9hiYkpCzIFHRUkaUyOSmllbEpDPKY8tmZU1ItYrG/069fv7uYuDkoshNQRA/TJ3/i2X4nVwrHTkA+C92OZsM5kyJG4UrgUz6qY2QsbGRSxWaK7SliWXmmwrRAsDDpR/wFSvg+JnJfA1Aq+rQ4pImLkltGv22eOXPmdfpGJZWygIPHBU/1ocKZSakYUFZO/bO2oRSwutIYm+PNmJOMT2ODeVDbgDmKSdy91mgr+v4lrr+V555opiHHt7T6BYvHq9xjmVhprv8e1+rEq7lIHMdQH7J4LfrBhIwKjK3XMxAmPrkyi8pa5KM8crdENxDXaRN5AwYQpcncRt/NFfHDs+fybIPE/HMvM+j0Fx/Lvd7kuwm8mvF/S6kAhIk6F4OOt44xG40As1yDiU39VitYHf19pkkptD1XlIXcG6W5qO0/d1b2O8cuNpkmMvLGYrAUJz1p3yuftPfHyMxoxuo5uqCdSIyhQ4degYw+j/FzCOr5ceRUn7syzprUxW3bti1C2EchPL+m4TfxbnT6OEu+GA1WUakg6ZAZKD+34aIWfH+OgZjPQ90vlpBOPp2JP4bPFgTV8ngh2OAyySL8P0gSG67xqP6iSC4RqbCJ39cFMYtloFyhKzIwD3DMEt77IigWL7RoqkGIqpkSAiUl+oYqB0GLDP+7s5jkiiI9e0e4KhLtX2EEMqpHqqeY6lRVV6tb7bEvklF0oTSUqCWqlOyPQJ9ojwZ8d2wompWBvjATqwMDPBMF8HezjbSA6ZMZrthima1MLSzKYqa2gfEfIhzHSSkviL7dw2WoZe9s5Clwe814mHn2Q4RyIf2zznNTUCrb56urgd9/ZDQeK/MUfrMw5Bkye9H2F7Dkt9BeJ8rryMEMlVmXLl1U4Jfl5eVdzndNVT4J35lNaJ+tFMNNsZ/2LOrcufNLWJVvIgcmaRzrgqkrJ5urll3ZvewKLufzPVZNMfjF313I36Moo+GM7ZuLFi1ay3mFHGf9xt7ihK2GnSaY7+xIajBRTxN6ZWAMo8FkCCkvLVQwhffCxEuMotcIucl7uRPheAnR9admFpF0TS11UTbGU1Bmv0OJr8fa+hV9UhkF14n+n0M7RTXU4/xyaUfg2GjhaWi48LOAzGCcHqU/f0K/3Mci8zbXVA70x4qI6BOc5HW5bncWx5ncY6HJGVY0NkOWa2ayY2nra1h9zyMrM8xo5dwBtLMcz1NfThQVMeOor1XIZFna1sFYjVh6s0f5bW/AOV0QxPcr6xY6rk4fTqPdI7nWRZGJJ2FTvchufYv2zI5kL/lhhCsuCYOnPeeb9j1Zwi83JoFOEklTQx2C/Ou60hLXiGvHeFrw2CKtOzUG0TXu5kqCbqBicEiYLGIRBnMN2tCPz7jbzpZpZGLQrFmz/kh/3CGpGvrn/D59+tzEwvsoMp3x/X8SudDnEsA7ksvCFUZrk9V4Jh3/Ig2U8H0LnbTc6iJaP2xxJkpIoyKjc8+nk6ZGRppjJqNYJ97XMGjy9Taz/hWDIxB/M53/bX6bglCpwPvJ8GQmGsfIRrU/ij524HMBwqN/aZrbYrdRHCuW2Yw/lVZTBlXfmRl5GbC6WFYRDCog/8Rgah1EOneZsJITT0XZsI7LZ1nOjpQ+YgMLRptFSZjubA0+BdIkFrO89JVtQii0OPSLaT1rSYrDFk1ixFufr9uuijz7yzxfDs8yngkzmPYZADECb6KDfq5NAuQNSiKIRp7P8v4osOvoi6kRyDRIIya7pHRpcvHDjEkuzzu8Z8+e/8mkkXzcdNN9RxprzlnDdfsLRWKsx3DOtbRxCG3ULbQZ68JnP4iVqpCPxLL4Blu8M+XAUKgRdkuETWNS5Ov+QdkN4DnWi6kWQ6of0lqB3Mcdji6rXaHUf8k1e4vzZBt9EufniXCxAjjnPKgv0ONo+3qe+UZ92d6Pa9/luKoUUWL6GL9g5iJ/1lEry/0PhPWqEm3Fy7TaYy24iwEx1cVDP3RgdhuJHOLVE3lphUx2ZZdwqrs/8eA813Se7+/Wl1R5mdDAvdxx7XbXQB/U5JwRFmzgmNdGjBhxO+0zceA07vEMykDZXz9v3rw+sRsoF4VDmzNfLqOfezBew3m28/hf98R6+uQZg4JcbwbPMlTfMrJwEu9niKGn3brPrLrTweekfbeJ32dR78w8mMn/f9KfyzVv9BlkMqR/T9elwTUlCJvFd0u5Vm/6tirj3YaFeAqvdbQzX3eWHN/OafuGc++w5Btj86bUA/STC4NxDhFRu+UA5zWQsWrudxErqhTkWv6v0VMhAuO6DgtNCIkUb7HSE3iXt1zi+Vlax4zlY2K3+evAPFEeNDAmmBXp7pzrD1QpM6efCfdiChxnAs75+fm/4Pu/cZ1X5s6d+yDvD3Lu3VrEXuto//4tlHFaYaxGzKsVD/Iwg9lWfK7KTme8fh0E/Tg67D4Ez0E5lglw14oVK2Q9E+oiGuCbCFxjOvktBYmB7cok/Arnmgkku5UA8nxWwqncY5hIDLdxgazIcK9qWfL92xbxlPAFARqBwA3kt/Gu3Hw/j++76DIR3xtYUNMud3M/o8NO6mo8j9faFL7jZGEejD4/mMXLXBzcrTUS1jISQhLV4OqA080zEq3gIvSTuceIyMWXYU4QfBOe3e1kxbAa3Yq7lRN69xf9gfTD9/WFca5A/a2WpUHYjhOcLuWm6a5M9IFMmDfot19xroGfDliJt0yfPn3rYSxjd1Qr3MovW7bMAq2Wlll3uFRp/4S6NW7c2K3ulVa+loxc9j7eC7iXi0wmEMJiYH/d+Nxzz92mC8uEkd69e89Bub1ohRKUxSx3cm71UZCpTPyhopteRwynSjCR31hcknF/XQgbO7AHnCS6nySOcTGhDbnIk7BHrcH1fHacMsQz9qGEL/JDWwGHyfYeY/1L+uV25FGOE+kZ6eKaW7t37/5rI/UujNz/K7TjfJSkqJ8SLPsTDbhKRiVToVWM6TNhlhW5/47c3Nzfm0RivUOz6xwTFqevc/9u0qEKzbPgJm2wFuJU3VMcezmvi1Gq/0U/3WeSAu15BEU3RFw6z7tPZIAsgsoGi84PTMM2EGbBAhc+7tMTRXyqiBmrtLPL0cLM7Dis/m2BWp5/vrsy+sVg+GYz7FCUp1qUgOtNQV4u4P+zzIbjGebTP7fwrg95RhgU6yTqsggwu5yzGP+JXbt2zaPNc7Aq29NOE6GGm41Le2+2Lh/3uJl2rLUYsORhjIcYaau0N5WJjcVro/0YgXBdCRnWyJhziXLT+VhdS13WRuMyBv8Zg0ncewu//YDvp3OYhGFlGYf9yKi7at1S10jyY5YebWnJsZchg08hP5MNBhsT4FrfkCALWXgRo+EvUmMyx258//33j+gfPtJu899CGWcpZQXWLUm9VL7GCaVlomDQIfVZ2UczyI9zzJ/oiK/y4L9AOKyg/J8I/WQDIAjUuVq1OTk5j/NuMMbECN0YCr50lOJD5X1oHZSXM1xR3crKB8znF1FI++ns3zDwv6PjvytRDNfVr2aFjn0MbpEZT9x3l5ZpJHtk6p4F8qBy0PaVJI6KcFFUDtRESaRClwT8LTmUikJJC9E5lmsJ8JfQRH/q1BAaE2JUeroztqHAltHG8/WLpe0pfaHfWF7ZphIa0VdDJPZXAHjXAjADz8BGTZ5DK8x+zpSDMgD6xhtv3ILQFViolC361igZ9BFhUhnKXYAiboHQLmcirRdmlYQw+S9TMkME1qYg8B9ojaGoenKvltznfibXLjHKWBq5S5YsuQXBPkOUCtbf382O41neZ/z3asF6Lcs7Rfq9/vb2TPgcg6oSMBmQ4t2g60J9iu5otGYdX97ro3jaWgONcSswwu9WmT46hnNcDH1WkTitkBWVqnzakukY4LQiys/sC459T+ge1/6e7IO0vzYLmYuzBDVf1xqzvqHWNs9xnGnXjImBVTGoA1TqvC9jMXGX10P41MyZM2/mWa41ACVRDfK2X6wr9xtoGjvPuBaF/Rf6+JKJEyf+MsiK3uO6P2IsJ7Fwad6VGTBggMxvf6YPr7SiMtfzXI2QcrTZtqzTEsY6vYK+2IUitYLyRRMmTLhdGUDhCFHbjvxP5ziToCS0qUY7WvKMX1WWrRu3Q8d11arTOXcEr53Mzb8rEzzPENq92IrmPGMrxnW+C4rUpM5Rq+Uwz/tzevNu3bq9Sb++w3V/SB8cx/3GOCfp+9PNsKO/EkmPDIYr+HwectPWYJwc0ZEsdWxYx0JbxewvCRJ74wjHRj1KjY01tCFXlBX99jhjdpWMkHzvQjejTZs292lt62pDVptY5IFj7a8F/FaBXdqJLBzP0salvIThTkHp3mSwcMaMGWdZcmro0KFn83n/J9EF/NtaxpEP70qjb+YcVxxxsnTGJAZ0ECt1e383Z96JwvtFTIrRKIFTGJwrIm16Nb8NpzOtp/ckHWwQoAKd6aAYQTbopqvhAN+t5ac/m37Mud0lLVJJIyRm+slu2JWOnWXQDsXxGwTtNq53Lec+TnPfE2MsYbtZSFoBWnlYBU3cpukP1aIRUmcFZQ3CZAk78GX+pw7Y/qyqB+UjdTiDS44sQpMUmtDOGfqGdbvQrunJAqat63hNob1N9OtJPWpAJbCvlbDmTVGVr8KKH1+ONG/7xsh+bSZDR5TGoVJaBv/cgfB/haRIly9f3gJF2Y/nmCwTVSIAUsF6H7kV9BXy3TK2alpMH7EGUkAp2xWFkK/l/nnyEaAI+gdvQB0Z0BiLcyZNmvRXkRzDhg3TZ/sQCmaquEzv6TEdO3bMuJPo/4t4HS/iQeSDTj4pSQ30WsIqqExNDdeyskqLFUz8vQny1EVcKpPJBboqSum3/PaOsCyTeXhJLqV1aKEES1kV0uZZKJh1KI2TRHDQ95nADAv+w7pXpKQUly6em2M6cp7IncwCxnsh4/E893yWc3urfLWK9XmqYLjGf1ikgO9N/ClLv2pUFHKdxlhc87nm24yhO6hiFNEppvGze3hU5Ue732R3WAXFq7W/iTaP5/m3oTyuo01jGeOLA2lTg3sfEE1A21rTl4to/7fF7jMOJ3LcYJT4ZbTDFPp8xtoMxrrItrvNc1GYPzRxQoSS2Huz2JRhLPdjDQYzFp1p2+Uo9ustqMvfPpSdu40TTMM3jshxg3mWQSxATw4ePPiRDz74YNi0adM6o/wH8kynMddeE1XEPW+gz96mHQ/SjpFmo9JXjkkH6zOiiKe5GBoDUEkHGb3Y5AbSX4qrV6YsE+VuxtRmDSTjJ7R7ZQoICgzgeQ3sD+Jca+HJEWKK+WVSEfCuK7KA48aZBcxz9aRPn5cQH6Pg2tmzZ2cCriI1lOMzzjjjDvpylt8dDkf8/4VlnLKRDDgZqWZQXqHDb0F4BhmM0xJRsA1smLXBA3ekc6wucaN+HTvDDCE64Dl9ugyi24xLEJCzOG4JA6Tfb6fKOaLrbbmWrFKFZunorGeiiVterUJ2+6fbgDZtY2F4lDb15FqXuYXhnIJoC7faafmj2mHFi03U36RS0sdaybL2Zf6n+m25rIBeuVDQFSMBpGzwZ+iX1SJuGtusQoOLPMsM+uJ0s6msTMCz9tWHLchdMD3Ppi/UnPhM+XTLrTMZztIiYSIqXLo5RIw0cXHi9+aC5Xm+SqGIPUfLXg6JvcJ9Am9bHgvs1l69erXl2bdYxoaX9JhaRm6ThzEBj6N/fsvn1YfblmVbCN6L44uYsA9h/X5ZDmbHlHG08oICvAVl+zWuPYGJvFJMpuNltJp2NUcRnId1cg7KYICWDpNjMorrj/T5FPpxRRBINeHZXIirB8+u1quZf1YA3sF4VkT59ufaTyBbF2LJnISCmG/wOtUv1O0vB7eYX9E6KMlutFvy9PrSVxrboE2dUXi3MeaSxA9DJi+ZPn36KN1jLmr6mGmb1tYfkS0RALt0eTFGS3neFfw+kXMGumujb/XByiA2hH44VteNcCyD1zxrxh+qD9mdAnLVUWvdzDvOn4f8NdMYQM6X8jyX8fvFujj4vyrn7qOdl7JQ/oDvr+LZ7+vUqdOdyHKnOXPmPMS8OTfKHtXgXqe2bt36FndXFotgIRDZsA1lOhOleRVKcIzIIr6bSr+/qIJbsGDBl+iP48T90oYGPMOZ1mVE7l6So8VnswKHPDGSDJm9KEqJxeNbtMEamOMZp1G071r66QH6eCDfn8Y9p8igRt+aSPK2KCahqgbULVahsg3OmUQnoB9XZJFf17bEUVAmyHchVtjU6oo8WzXRI/TPk5x3PW1pzj3WmiLPs73H/60intQh4jcbeYnBluP4PXesjN1dFnZgfp3DGFTu2bPnq3IUY6ws4bq/oq8+oohLswR+nGVcNh0sBpBt0sfi4P5Vf5HxopX1G1baK7AifubWnAc+z8oWWlxOWoR2j1ktCjuT0wjxHAlWOO81OvpVeVFFEbhqWjSUa1xHBzdkAPVR6ZPS/6dTfyDntKOjx3Dt89xCWW5IGkr+38H/OyNZQgrCDfxWh3bcJ55SNwgDt4QVVirDDFheX5wKCmGsbNml8AeWxXpPefgabnIXb0y8rCqJ4DluGJay9IL6xoS6tQl+VgdnGWMyk2u04bqytBm40krwnBW8hiKkJ+hbM0mEdnagL4TrWJEhU7lasLuctPYb7dRPaF+vYYJoRVYPtrkEo7LCSZFY0WTVpnJEClmU19L3u4BrrGjatOkjHPf83Llzd6TspNILrW3RfaO7IviCTYaQPvVMrJXl/P40Ai2JS+ZejneQuUtadAzK8OuLFi26XjpUvnufez9KW17luReZBaYlkuBdKSHEBVL3VoK0JZyz7yIZkLdLx44d+wiW59MozW9Z21BlomtIRjA5m2UCFN1C+1xY9c2LmKlkMQHkSa7ct0wl5h4n8Bx5JhlwX4OhFt0drtVF/zzJ8yy2grNMZcyza+ir7/bp0+erXKPA8Rc7b5KM2FvGw0o5h+aF7U9Un/a9vk8MFSsYT7NwrrEOA5csmPcwXy7gdb27R67d1Arr/fr1O5/rD0T5/ozzF9Kem5DnOewqf8qztOPZf8E1tVwlnXeHuMeYAguUcErv91+TJ0++AblwK5+p3mP/KuPuAFNf66sX7UPbvICJVvu8T2TTKbNSvrZl3O/g2hcGxFTLU2qDuSjhPhL6oLAXcL3nArvvNdYh09cZhKQtEzl+ZhRdMGOvm4uwKdh8bh+7TKEQJn+ZQNTVFGmfTaY45PUrfJfLdaw1eSLtuMrAKG1+mmdx7tUVpWHAkvsvs+qPLir+3J024xkvkAuaa9S0lBILyHsYFr9FAd/fv3//0/Ly8jK+5NLVQLIV8OHS5RMH8r+FZWwDUa7V3D7xgE9j/XyHrWTrVC/KMjEolj0Ko4OuIAglQ3jlC1BJD2Y7LVH2PVzDrZ7sa08jpDk8uFt3s3LaMcj6XCUB2RUoBCFgpjieKawoKoxYPionyn1nqCO510qE4ifc714EpgXt0R+8P4IT/YTlaLUYnDHCjvLfbc05zlMoVapOYheBDGNVUGdqFe/NztDz+wjmZXbvAYlTiOtHTT6hd9b5Esx+IOgBJYY3A3EP97+b3y7gvidEgMpgZDm3zPq4aXemAoLFTLGY/szia9ZjdS1jlaUWtcQuQUh0KP8+KQUVWXJFcF05C1pJxcjzjjlcocsEotfizq63ZnANZTWP9s4TtZBA9FrHCfeL9WoSQL8ZM2bca0VdLLoHafd9jP8MFFqJ8LkUKEwLQEryUAmroMU1o3j1E0scZIEBCwYU8H03rLPRns/C/z7PMJgt52+531QmxSM842SVAJccEUTsE1BmGaUjGRHHSE0pykT/5WiU8FiUiD7kdxKsjPPHWckBC3ME353JMy7hvrNYBCaqIET4mCLP/R/lWo/y+zD6USPChUAInDy8VXgOMfX6TWuxNb4aOZMeUktRpZGpGiNlJ+3vb2ab7p8INGbyTrA6f+c1DFbzfw79fR1jvoxnOp42T0A5v8kiVIXvdMdonEk6tT9iAsYf5KkQN7wUhSM39kG+b8wYXChnL4vMJr8TmsmCeT7f1wjkgpk2OeJyuU8e9xglvp/++BLnZHZVHHuGPn7dhTzXPBS+XDDvc6+/c2wfnmUU7RU2t4DjJobrwXluMtQJJrDYL1FteoMQzShQKqIoM8csa2amnYUaokqN/mtdfvX9TtcR7dc1Vk84hTEW124XXttlPT0rsCN36gQTY+YbqxKeyLO9xPh36dq1609Z3CYrk8kqTrKZ5L60Ej6cq+LfAmesAGPxdJXARoWM5dApPYzWEqu3DFX6hYVOLUKg3+KhGxoV9Ti31AhIG/PlTfml89cE01MfJ7KJGPyu4rSwqVlocjicIncD1xFvezzXFRYzwSCQlqEkJJbMEU+s8ufP4qMydA2y8KKDLNLBPHmvocJRIUsKbkafPlg+S6oiW1RxuCP0fW0OKkA7ek8E8YpSEE9YpdZZ4JC3xPbLlK8Docx1p+grs0KI1JoNDUZxv0l8P9ZJYRViAzcoF32IkhNpKYvOKEaA3uc5XkCIRvEaFBlD7u/KJvyuShtlog/UxMbKiXg9m4HMhRLloaVfXjpP7iEE8SN5+9mv0q4Lxy1lmaXfU6ae2GWslaHvvvvuK0zQrViRZ9Hv96OM1iqjKtsUFCx9ba8rYgILzNfpKKMnlixZcgMT/+sow50o0qnsvu5VcVkNhT4YrD8Ty/Jy7nsnfWlqvCQvZvddyVb8Bn3PJjq4iHCN6ky6S2mHFcI70s5bka0JtNO6axJTNabfNzDutXmWQWaScr0euk8470wWwG8it20j8FgLRVWBe2X832akMXbjtcJFH7DYvY5MP8H3b5mKy9w41V0Yz/WAiSBmXhoHsVIHz2J19ZpCsZQL+8iX7gPdURoJJrrIXc/xOXJDqGBkbaO9i4R62j9C6SQJihRfKVqHMf/y6R/dStYyLI/isb6f7kCx8eJ4q9BHv2WhetdqPkLYgtjd6iJ9aJNsiOW57kTnjf2GsdVHXWQg0RqKXEciK+efxsUi2tIMxX2dJGDI8H/TrnmOE8fpkrNE00KToQzI8f3aGP5Uzd35Zak3M06sYFKVObqKa42TfU4aAL4fIR2phP/B/yzUVTa7Y/jeIrJa9boSrd69SkiksRvOvZGxNU7TySAgz2ay1T3IZnG2e6I0CX1p6s3s7/5tcMYpM4vOGMKEsRyKPkIJZqwWYMRfpZTHoc8wKMvsWP6va8l4BNR6fC1NGEGwTEf8Lx7qWa63jPO70mkvIRwn8PkL4eh/XJY2uU/5k03NFTOHc1TEIiMMjqlc5WAtn3xPoTjlf2iidRQVeN36yH6llSyQvK0cGlgaO5moNfT1qSy4vxUHtseKrfUt98CWKCW1M7iPK4YlXC0I4rdG1dvdUdK8QfDA6h9brzL3/vy+PTDJZrmt4GUywlhev+O3G8Uh87kei5e+3q30bzcsvBFMrp4ogLq8DFalwqKZbbD/i9EUu+sihMBlmKuY1NWzSpBn9v70fX0m0mq37Rw3XiRFaUarw/Efp990PWVbDYnUnva1mTRp0mPIwQxe52Adb9PSSy6Iw6Vmp2dgZ2WV7aG0d7SBNHc4YWBs4Vp/YFz2oHS/r4VoijHK4ANdDPRFztSpU/9sdifX+A33eInvfzR48OAnUC5mYho8LpPI1rnOYINVPLPFc09mUlr99xKef6hQNakqE5GQbaafMhzc3Lcixx27fPnytgaq165d6/hXcceHkvuS6BzZ4azWEim7k5UNnklkyHJ+s07ekDVr1vTiXOF0xa1bt1aRWalFWd6mMuc6bu/bsAPoxVxRhvfybKl8ma6OJ+TAXrp06WkiRUzU4NksC2VZJRMhRARYjLMcMnOFvnADhs5BzntKt4Ec43yewyk3WcGH3em9zL2tXEcDpxxz12SblijefgaUdSe4A6U/e+s600Lm/Fm6G6JijSWk3J3+dN68eaO5luilVSj+zrRH10xH+sngtYaZAW7ddhmqvJgbfmf1FHe+ut9Md24b7HC6MPfH3NvOcxQwprmWjOOaJntslJCfY/MNLYmMiIw9FyQROhavmCLk1iQXlTA7+JtYGO+lvw7+MyhhP3fL2MnK5BOf+ktXRSbI1UK1DAwwWNtRbj/ke61aKS6lopRr9zvmwMd2ub0BDunxpPXjvT0dNprvz0NZvyi3AEJ4ngqac5/WFWCasVtXrIu3Ob57QOUKPJcBWBBcC+KSTafcFWxrRuR7WOiR93WhVBSAvcGotlr/tGnVKjWFW9ym6Ar+t5aYiIjK4Yo4GH7iSikTKYiDVEoVw2J2IATcu109NniYU2Xs4rAAtKY3es+keLlvO579XYWYZ59vsUaTEJzgCp5t0BURC1K58BG7cyjm8yY5mQXuGwhxATP6bkoox9SOJAgXIKtP267y4r8tD2QE3YChhDhJAYePtmziS8hWytkKOwmyx1jSCIUlxKpL9+7dT5g2bZpY5DLZGXOlS837Qm7KomDEmFdBUZ2B8nqWtt4m/wAy9DbX+mFw7zbiu4Us3N/nc0X9mUyq67FsfqiLIMrHb0R21vHcjbHOx9DuenIqiJs15oAszed+z5iajFK+Sh4NLVUVP8pNxVzbmnV8t5j+rEk7zEo6oMXIdTcH58E+tv2/w5q8DqX8Mm18l3nwNAvn03x+zbp3tDNPonb6eroxBxTSNK77Ds82PRj46ulj5v716aNGHDuO325HKX6XBeEprvcQymKJWHGTktxBcoxoljH0sdb6uh49evynu0kWiI5CzLjXWl11BhlQMmfzLNcwf2qhUDtyjEin9cjykzxTHp8n06Yl9E0Bu4azeP7l+lklMIryTSs6d+78pApfFJyk7y569MkenuNJ3u9wx8l81d8rb7lojct5DaDtf0befi8nsjkEPKuVV8Qtv2vdO33t3M9YioZBjZgTtSK71V2ksZuKUb3DyjmLeb3CuXtpf0O+/6IuCK7xBG2rQ39uCXeWFZsN7otfz+cafbimvmeTv7SsL+E5LpICgT5tQF+/QHunJZfqJxmeh1Pan1k6dOmKqodrCIPZAEviPxjYu4WXIAciHJxYPwyMpB06Rac9v93MwJ/L95bTFsStX8hUUgMQ+pQrYq3UFBeJQJ6GcGaCKgZUGIQduij4LMh8LvcWXmQViPf1R3Htvnw26604aPgckJ2JgMd8dgZDdq+FgXpoFEQ+JWEplwn3QhXuIxF3RdpTwaCZyssItPeJbDndEQrO1sAdlw3ruVqUlNIqPhCVq6snrgut8SA/0d0hVC9DTRmL1TERIRcN8KJcFk5Yt7FlPqykuyksPC0xyZG0RHditRi8aEyfPBruHDlY9am5gJihuCHSwu0PK37IXlcxECS6BYqwZC5nkjfr1KmTZel3pEBGCtpluxRKb+Gy/5ikVZn4t0rriTJ4Xj9c6aByulZyq3Tr1s33M2Spo62zdUcZ9JQPQfyzBOJCt1C6X7Fmm9F4FKv+2zlmSmKlXs2xDURnCFek7acgY1/XUqUNjTivJ+9XiHFFSRqDGPzBBx/8VoVOWw2Q1eX6J7AIHMe5FZA5OX7f5/Um/ZzLb81kLXOAsc43dOjQ4TkWh2uZc3/hGutRdgaOpzCpZ8qvzPciCcbRx9ZIm8z3szhmHmNrxtpM/0cZPst1HmfxMuLfhnETmqnbrJDx2GzCjr5cnnemcRitPtrfwIWXBWGm6fHueFAmY2ib2NvK4msNOHPttfSFiVVuzRt6rlzdVlk2yMVva+jXGVjMxQZQ5b1g4TCleLryz/OO1BBR/qTxpL1WutHatsK06Ka5XK+XZD+MwyMxrwZz7Cm61JDHh2nPW5yzxeQZA3BmndKevzkPuO4AxnsBxxaEgVI1qsabFLIldpk7Ax1RGHNkGS+ZA830K4zK6pW470sHtOQqVbJ/rJ5tHc5R/P+aFJzudMx+FTLIuz79b7h4pPwH2jrdJLEjlWbKplE9km79lyvjBOXQf5fqQh2usU5WhEP/0LcR9LeNhIoyoDNUEBUYyN9Kh8nK5Mp1OcJ6jpAlj5FmUwJ63q14LLKgLYO7QkSDmUgmLwQ94Z0o55OM6NJpXQXKF34YsraKwdtYCZLedmeA5FAdq19OZRgcySo8Gy7ULVPFI/DCVoY2A6htoCNsk9Zmg7DeKtDBG03QEOZm5V63/0ajE1dtbLeLIlOvYhbcsHJUzd0aJEPlAx6XoeHMgsFZ0dlqCJauEQZnxQeFuD9tWxX1w1TSnlPZcu5a9YzJpiilo++sCn33gpPM9HDa/BxtPJv2mgiir1s4UGMFV+Vmhd3I2c/IlwpZBebCs2jRov78fnbXrl0LGINFZs8diWKytFWcXbGDdp7pJEVJLjnSQp6Cgb169ZJA6keM4zzakk+7d/M8kkmdJxUnymIU7e7GNZeKT3WnhJKVLHktcrGXReSvVoNABmfRd/n0y6qWLVv+AqUxwbRpOQ2caMEEthf5G5SXl3eyytvF3YWV/tztCzmqaYDTuIGMZ/p4JaZBrldyzbzc3NwXsXp/hszcjRIWznbIundyJ8RHSqHOTnjypcgmljlpRzlfRfWedfJ4tnWigmIhceE4n+MutZ4cVv8Ipzhjq/Kqz71HaeAI3eM6I8M9JvrgUq7XSZQBz24164tZDC06XIU5s9rySgaiUcLXstBURJFbM1Jcvkp2Kcr0Ij7voM9Huo0XIqnbTWvcWIyyglzsNvnCTELO1SjpxyIzkrEWfbLJnYCuQue4kDjee3DMChaIbabN6wM2I8+gdmDyU0WQxgFz2xrxIpM9GrtAuTBI9sPrDWGJIpm4tju6YvrXBDAn4miva+UhjpERTuRGa5OsVPC0+W+iP+ijGy3g604X2ahPH3zA8eM+jljrk2o//suVsQ3o0qVLLW4yGEGXSnGr/AIpAJSsGiegpC4M3GkC1Pn/VAbnIn4fQpsuQEm3QCgMNBjck1REn6X5+uXoyGJrytFJEogoGDv5/2/8fheTYxIdZiXj3kLfmKyvI1iX0JkDrFTAsa9Z4Zn76Ht9h/NHBeWjJaEEiVc12JH4JJyM0m9aXdbtndl8lsCRXU2IkMKsRRqpy04sA29l3dZ5riTeMkRF4KlcQIn0GVcKxb8z6Dr3Br/xgSAI2hOEJ2UTcVBsyZIbY3+wv3ltrQYREwd5bq2HLVEV2wCHhK3Shso2VMOIuW4GsZdC1CxmSX+OsPqwPjopGsVvuxWPqLTrV2XGsGIU9syQbIgMQEGJhbaWXpFkMUzk88UGW6RTtER2gC5bACPBQqa7kqz4gZbOpfTN3zl3XXb1i2y3hAoJK1zX1F9nz579dVORfQar/c6dO/cG7jUfZfuiiSC04zUVMe20fqDB2YVWABFOKSbZrEsTRfTX0u4folScuPNZVF7n3R3aesZxP8povHht+rMuSnWxtKPijlXMXM8qxQf5fgVb7AW0bUxOTs79/H8nx/0n/XePvNFs2VfRP4cWk8MFdEoHP0svaNklmdyBYJGLSJjC/f/KXHuQZ32Dz0IiVUxis+T9GIGSHqHvNxKonBvWOZTDpbeVpkUnYekfzzGWIGsWpc3ElG8dPnz4CboFOLYj/xdy3LkWKDBIxvcS33cwrXz+/Plf1xIWbUC/baY9r3B/OcMbu1vVhSMPSZQOq0Jf9KP97TnOwg2LzNLTcuUxpXztzPhZaspA8vG0pzO/jTdYzHdCLxtGcFtfr4k/ynlxMB22jOLA62NumM03XgOE+xsA/CrfjeW6q2R3c+FAD31Au77K/2/RDheLplLPugvlNYdnyKEPv4Rc/Zxnm0sfWFXGXITHswshHG3G3WdCFOSk8uI8uCD0dgy0WODf83kNW6a6piiazy2jkX8MiCmZN7L1e5QJ2MWHklTeCWdEF2HO56HnM6hGVN06N8cKG61gcdxIFEc1vtOCfoh7u4XYwv8mfsh58AcsoT9jlQykw/RFG7w6jg78L455hf+votPnB3jfjDzTok0jrvkhgf+ByqFk9V1UClSEilJokhaxgvY6x50j+D3cCrok9GMLsanEpLewqLSHlZ2AKDnLvwg3E7a0PKK/e8IPrBVbIRRysrh3BHtblaActB3ihndE4VIVxDorWkcmkkgLlYwQKKF1umKsdrBWghqhV1pcCZuL8jmNPjYQ0xaF3dvvmAQuCsW0tSqCJ2xIbgerIrSUTMUATWCCtRgz+GUDhRZD5f+NkyZN+sWAAQMKO3bseKvFHCMw+BFXg0q4KO3hYpfEfWupGEVzZFvPiaPXnY5BPlE2KG6t8S2DBg26inZblWUAfVyItXKrUCnGez2LeYYrA6Uo29pYGe6Y+LVRWCrQ0fJEIBsXWoJLzDCyeIaVuXnO5Zz7COecjRLua8FcXmcjs/UMPNIHuTxnpyZNmkw1u46+yeee79C3i3TT0JdFFii1n1MgLynRT5udlf1dNk1mVELO/Ka7wIXPQKX0lr6S4eNcxDKvwUJjBZ1RPHc7xmomc8tkolb0WRdJ+VPlFa/v+Fo823RsjJuXw5WykL7Iyc/P/75KknNG8r1BtO30VQef1XGhP5ZrddMncsHsYzzPlCRe5Ih1+FasWNE4tu8aa+6MNcakx5wX/l0t9iH8tk46Sg0bS47JyMhz98n4ECtUWBDyXjtchMZxNG6MyVQPetnNkdnqgpFhRZSMnutfoFUsSiJY5drzeYmFFaxyYvDafjGDT4MFeXvRID2/XRzwOKsJLezZs+fz9Eln+lLLfPP/VW/+S5RxIpGReo6BPsf0Sv7fIz6T91N5KDmLxyHU7yqoRuFdjbp3727dseMYVFNcdUOs5xgFZiaTbaf+w1TeZODAgXewSv2CyXEhg9XRyg7iJ/Ur01mmrFoVYAkC8Wuu/wgK51bp9dxemRXEaxiLg8B2S75cwmT9E9c6k++tnCvrWSMB5m6X9LnqgpAwJqzSPQn9oNXI91vM/qNtGdazMh9WsHULVRilnqqi7BzgZvrOolJAqgxSORATu6P7jgmrt2Io6cJwUbgF0w8icZJuDbdwjSWR1zdiWrR+aCkBFTKhOhw+wMXFBUX0hi+tZp/Be9sWJzVKqybKZaBZU+3bt5/O/0blV/LeNZTh2iBoknKzaVjKTlgj0RUCk3qQ8cnUInPyuI0eN27cr0eNGrUO5fhXU4ez/cYpwJetoINpzIChwUiz8+ZpxXmeiBsUaNUIokp/eJDxn40y/Bl9u7agoGCEDH0stFuVp0QSlKxpI97cYrLcy3z+2fTp07/rzmnEiBEX0N5l+nZZtK/V9926detJnTt3vll5U8GhXKYgr29yPfmxa/LbwyglEQW6gvK534FIiy2TEjaylWXisj3a2ngf993h3Dtpccsu4+Tzpz93pMj/Ll0/9OMjLVq0yGxzTPTSgtWVyDM3Z/58Z8mSJRfS502kkpQkyYxU/rdaayPm3Vr6+w5rxWkFG09hfjeSHTGqsexGMZkRqevnSyaz6G+W69i4TtAT1Ig40Sb0wWsBG61NP58gBFCrWO4MxuluCe11GXCNOuiSyvSzxUJb8wwaRm9zrJa00MTlUVG9JAo6NA+Y6PYo3mDH6NKT8lTK2AZhgJnAolUsrG8cXfINSzKJegpr3ArPxm0aopA3YMGbgel8kSvme6bay5Zn1Xat58MtnkcizfpMlbGNZgV8k8Gxw7ZZcpztW5WoBissRh9nKumTUcisoPqGHkoBGx9KyE+ipkwP5USnY5ZiTV+JAEzKy8v7FcIhYccPuKasW1YOEGVhdPdNFPA9HP9NOlwo0ItMmqEM/o9FUSBIJmzs55oqEYMmJyOs08z/lzwIJfOGMBmVWxQ03ROAfJEWFcItYZDOFfdd/h9gNlAocV0PKkJ9wOI5rUhbJz2bvmTJ6Xlm3R8uCro0zL7bFQkh5bNKNBUFl8XBIAha/aH+yiSB7I/0zYybwwCkWUymVfM8Rp7FQM9lTOqgsHbQv8LWLCZpRmIFIWCye+mGoB/q057NRr3pq0JJhtT19JU+8vlcT66KFfz/hplUEvE73sK5tI7pY8vg7GBC1WICH/P666//AYXnAvYw8lAmSHZUcLoYVODF2e4HlSznL0Bh/oDxfQsFuR/L3ADkcGuvSRpOm9632CXvy43A0/6b3TUhY1tTxV2tT2ktVeYyAiKHtfSTWj0ZOWsozEvX3Isvvvi8xVu18FWmWJDixSSB7ykvgqRDc+fO7SwfQ7t27f7QoUOHa/g8DaWdkfHsxcT7Hi6D9Z9ZCbu0Uj4apZ7a5PM6d4LlLDOfVNQqDPpwJWNyfY8ePdwx9ucZezH3rAlZXy4OA+AiQFhUT6CfenGerrOKQSg0L+CYuscMaO9njH8nksH5wLm6rtx1HmAsDdZZ7EDo5gTkqQi98A7H3YsxZCLKRucc172T+/RkLORc/hXjKC2tmYNmz6q0NSq0eIWc7QxDxSCmloaB3OkG5FS8zlkhpGEkynT4Mm0ZrpKmTwxSLtaip51WH/mAZx5u6TDu20kXIe+jkKWHOLZX+O8bSTTPvVpIri+ChOMXpwUwYe3/baBtPrjXZMLuQNFq1iu8B5msJnBMZmKI7S0TwZFD2y0tC53hKYCRveoniyBBpWivcKwpEt/Mnz//GlZaI/kqDJ3zEoQstoacvkuDc1aVcMvO9x+YNq3Ss2YbvxkcVGet43NtJq+YRyE39qjUmo1UhmGRHghiHwVN+FdhuC0qRKVbsYzVIrBWLgqKmn1nQkhtlVawjZUJAhPLj++KQN3uqPqxLxI+ykSZ84MBh1N5lwt43M6slOpjwlfmOcLdpIY0uGh23SyzqNyKeV8E+WUtZSeWFr7VDHSn6DpxjuvTkx5US8OUVvqsvuxj/H66fMq6O0wT5h4T6BfLIEmYpLK27HsFzs2kEtPnmUIAYnQNurLAVWbSbUhla3SBqCizkz4cVxdfKQo550oUxxdRECYynGzCi7A7g6i03cQLOXzlyL2MCaTL6HGU/aGSRp06dXLyWu5nJ33+LeMRBqvMPLOAgWXTc3Nz3+L6r9O2x3Q1sI1/j0m5nWsOQnmcxT2GIhftkbG8nJycKzj/abboa7WWs8scHSm55WgU6j+qrI8U1PwkBZ0QLtlWdJkP/XHJ1SH/s6nu9s0LLEBC++pgDd7AAvUt+ri/DHVyg9AvYxn7P3DdMVxHGkohkabbN2T8hQj2QskPpk83sauZIsWqCTT8b8aomaXOUVnxOjHug4S8ifdFAU9C5iSRWmI8iP83yCMid7O71KgO3Yr3DjKrHfgw5718zJU6setcHVmt1aPStEUjlkgLYCwm6knKS1Hfun5cOwc56WcSVwTU2ylfWupY6bcjC+qxrxmAt3CpvMjuZkVbsNCPp3/mZ1vBh0MOHQldlnzGnyk3RQLAM8Aq3P4SbjA5xy9YsGDL0Zb5KS18vnr27FmFFXO8VhWWz5n6ORlgt+2WTNL3tUsiIO7xW4uLsjrfIVaRCdeD7Zn+xotpyzSEzYoLRmq/T7vuxdI6SwuV32Ya0TXgIaBchShPQlitFWPQ60V1AZVe/ag51yisZ0fIjDytwcqpEjLCvDOCeS4Cu6JCgUE6le/mCMzpU90emOKqURtP5bs/4D2VQgD3hjCsjWKonm87eZTaS7nHNW4tEaKZBmgE33P/Vy2ETL+MMpuR322rluQ+Mwi1+uUb4PtM9h7CLBmRvmQzp550p2uQw+CrE0BrW0RHlD5yEgitKtB6kdJUNwnK8RG++zu/v8uk3m8AyrFPi63zyuAfk+wL9NdIZOOLjJfkNCYpyANRlnH5gnA82vCuZDNYa8uV3yiXnvEpM0HaM77XmGAgrhwF/325dPnckXMmGjmnTYtFfLjoJyL9KCwp4kXQv1A+y/Nsz878+79YuqUtpmxD5GiV6sdh9o9U2qd0inpyo/i87hysHIJsqOSqh3w11x9qRW3mxTDpROV0sOaisEeOl5f6Pu65MtKHLYO2h2s15tgvY+UKAavJIvYmBtidjLOJWSdHMV2TT/THmu2mcjULVESKvMtrDV5zbCf+f0VWOtni+NyMseqqdY2CP13WOVE+zk8rxiOLGXmNCjkmZR0Tc1MjSchaPdpxS6RrL+J/kUTdbTfna8Dd4LvoKYN+6JLvmlouXw5y/xfafzr9cBdyUAlZ0nc+Onbpz/P/S8yD65DVo9KfpRfhz4WbwkZYEhzZvhnleS4PaXLCECbfzXPmzNn7aReCtL3FKt6HQv7upEmT5IuVCUtmpyI6uLoMV7oRmHC1eGgJqq2ILG2mk7CjFaARyCU69M1aQjgyOFQ6/nsM2Nsco/IVpaA1sD3IYtyaa6UWhiIuH35elbHK1kQHOVXdEbQ0Ki0xt0Uh9csavAv/qO4NJ3xTFpGZrvguIMHoVhwk82UCMbEj7ncwsJSVgix7Q7g0MpuIIDvR3WFat5ayk0ClakFVE1bW8Fuf8PnW1yePoI/jWc3ek9ayNs9cmUm1SWw3x1nGvI1VIJgMwpj0+YnV/mKbNm1+yzXyxZmaluqiI5cD913mIsF9TTZoI75U5Aj3PYjS38lketCUYRSnRDqvcr9x8hS7K7JdBk5Mf7cED4r3HCa07GhPce32MngNGjRolJOPMXIbWaylqmLp2LGjbTuViXTqwoULe5lFJfUl8jW8oKDAAEzGRaIrwwUg8Wmkl7/rJ3bcrBiTjeRIVamPBtSfzdD1SVbt0SjPo1XMH1djLSlgfcQuVnIbm3HKtU/kuU/E6uvF+LqjdFdX3h1IcDF7/EYWN7NXLQS6rvKHdaHmcKxIBX3B7ozkgz6X63zD6itWHGnfvv3v+P1PZqRaKFQ3F8eoHIWM1ZeVjfE2oC/VpTwxVZCHpVEweBXW5mjafJ7Vn+VjlmPapBuTaAxQioow5wC5OJXXxOD7cJ5UjCB4JrAnyY9zzxqDxnqivFRTqQqQUXeGVoTfarIUz96Za53NZzNq53JufmDdCwOd4bxzt6y8D0D22qCQrz799NPHYNyMUxbVLUfrQvrcMvCcaFiibfLy8h6TLpEB/rEAbvGFCMLKf8TP4oNFFHcFK19HtzeWEdcHKIwpyHTctih4+7nvSo65ymrTRk71hWF53c/KJyZ0saQrnLOBwTkDZTFRt0ekJm8MN4BYYyFnwtH2RZp11WBjqxQTu3KQAe0KmI2YTgfRbLwDvLQ8C+WZNddfhIZKWuhcJH1k2hz0hpUC7lYx4G3bEvVmoCwqRlCxbHBXVP1wXmZQJ1W07NwO8tscBVNrmntP5XNfPosbNXGjmaT5KC/pG52ELiZiRx+jXX/WSmaSCTmUvyJT+FN6TYSviD76o8FVFaiRb5/Xe3G9fM6TmvAA3+dE8sheLNqruc4HVmRB0X51yZIlX2Tidu3QocMCtrIiZ/bz+wEshfJWTmDxfhCFakXm5ihw269fuAVtqMbxc0RM6AdVwfCS6vIqoVTIwou07yatNxTzVi1glb1+4aSEs4Nepbk3kt/vSBwYR5LFw7krsi2ho7lOaQV8uADekXaJaVFIC0OinjUAiqIzvd2d208Yk5vot+MtLCBXMv+LNpDsag79Nt7gJpcyq+89zn+Y316m35ZxXYOW1qlbx3hYoaQnMnIJc+o2E2WUVcbyNn77AX1utZKMpcqY6BI7iXE7ld9e5ZxbkTvrSu6zao88He56DNJpkdKO1cxNEz0OoEjNHbAGYUeJkbjOeo5Zb36BtLCmKMsdoRuE90URGC+JupPyF7f2Phy3mLa7m9PV2DZoDSpIw8u543mvzbsZn7azKXJn5esN9M12C6TyjKca9Da93Oon/F0qOsSaihzfs3fv3k/om06sg59mvD/TgqROACaWJeB/wrZyaG5u7k0qBSbT1Syqsxm4Rf+IMk7CaiCiXbt2M0xPZfAmiJSwGKkrsHn25vlH+Rdxsh3MwFMB8rzHGvxhYE0J7SYPht/Rlr4MtIEy4VAKpuer8HQue96+cEEYyKgcnV414Gdu62sHBO1glGeqFnSCmleSB1klYV+U/tEq12NRFFurgzFIlcItUSYCJMeEz3ZtsppTqSbd7aGY94R7o1zk6rt4ZKBx4kQl6OdvDs9sKfOBfKfAihpxArhF1K+tT1m6xGHuNEwgEWLo4qXFlCwtMbaWTOIZJsYC4qRwOztbchu+b6mrRpJyrRL5RlCY1cwQ4/nHcu95womYgMcheyYaXMF9m6M0FiAj1lqrYAUXdj4/594/YXF4h3OdHH2tscY1u1quiLbVQWloPe3h8yPI0hvI1SwRBOI/U72ybHxuafk5XKrqJ02kbEu4tJI8nG/wcNc/nHI9XKr44RRvgvtl31/oH4tUhmyJfqwhhI8FsyvfX8CcuJBdibSQKsaX6EddAC8xDjLMva9FKn2r426w1KAv/fYAimUm156jtYqMbKXPGcZaF6DI72HOfNegM4prLPf6KeN6O/3/NvMwQ7AlxFO3BOfnSDrEPHyAsXtPmgDjGe5Cadt8zjMG0yJ4JEpkz3MhNE1fo4pzq1n6SfillnSgIsYpd+7oaIvKVZY15bAguKzXqkz57nTe3+e+S03WkhBIigF3eCZtWdTU4DPtkTJBvPRXnDP8/1POmW7FbPrgKo2KqOJjNqI0Hm31kRv8s5ADz302usxitkJqN6eSX0erjD8zN4Wmu6mk77333jVWqrW4HxOwDxbp8XTOfYmw5h8NZrgSYWUVtGjR4o9aXAjg9XRkeb6/jM7tGNv7ZbzP5l5u1V1xxzGIbjW+atVXKzuoUDm+j4gBzjVqq5thuZaiEzpWXZNDaoQiLh/R2soBQVMBFwfS4dhQpkZ9peKT7alccApn/L+0c4fWiexpbrs+HJvM+R5vgLFRbLn8Xxa5VpY6ilVfC7lcKOvCcG3IDKclXRQKWb9xxZSyHThkwfcmyayIgJ/nm01mleYG1sYT2mTiB5/FXl5n8UpZ8ehb6+2VSMlo6i/XOR8lOc9cfbPcJKsRVyoMjT6sg0Js7+5EtIbPOXHixGsQ8mtatWo10erLyMENXGOAhTZFLMyZM+ebKOIrtKg7d+5827Jly25BiZ/M/beglH9s9HrFihV9ggN7C2P4NZTONw3CLF68eEu4GQ5ZtIfz8ZaGHh3J8vwkF8HHRc1Lk+p/Gq6C0udkW7o+T4Kj6e81O9T6e/o6XXzpBxfTS+l3kzeaGFRFQWxhXE2VnomSM7V9rZwi9HkGuobsSx/wSzHmyg5yMYExMgP2A+67Ahm1QrIKcCSycLIE8DLEMZ9fYAysADJdXk/Z4ZQ1s05VoIyh+sW065qijbimaKdtUc1cizZDoi/rnXPSnSfnnSBXhDShtNlyXL9y+ojp1623Zs0aScKMt2hkiHYRSyzk0QC2WYgdA1csCmoZ9+xkViAyZoDNAhQHg0NcVEV1jnHeyMpWx4IR1rkTq2w1bNOtzR3gt+MlxQ/jrdjsQvpvmKWlLE1lPCmq/1yAvF7HfLi8f//+59EfbxgTyQ6WfpwL6zNRxk4ct0mSmog31C/KAO2LjDFZ1Kx6nPHZ/aPBEYVUy56OeJhOHcU9R/Iya0bXw7mmRtL5QmjMdxeXO5jj/mDWFh3bPwJRXRHyi/nunchkk1ZPwPpt4X+2IysGP0TZyJxTEdcOWswygQsuCTfG7sAKa+l6X6FxjaNeV4Y6U9wvQreDVVQEg4pd+s3dFsr0WpHhp9VgttGyQFnU87iwgN2O7YlzvV/5sJo3Bdl21bDgXZgkTpf5q648yZZej6BHfSsayOJlJNnqEYKjPU9CJreAbgUtyaRlkAKxCtby5ct70n9P0mcHmCDvGFlHKE9EqY5GSW5Fgb9ouZ/YAmeuI98uitNyWoPksLUmHn2g66QJ99CfuEfkyZtvvnmLOx5dF9yjAYtm55Q04b1R2nU53xLsF6gc2HnNYJzMOrRad6HuK2UqQSOTpZl8ej6HrosghvrUgZdsfoyEm/40gefsAE52Zmr297ZVXH0E2eQLacVPrelDSxXl8Gymg4vFbcjCtlKOCZ5dwhsJ1I0/tKCve4RhcXp6bmF/nTp1Gkn/ev5lBjFR8neX+bCsmMppM/csy7gO5JivMbes6KF1avDqQa71DN/ni8AIdjMZ3EoidqIRYNHVFhG8tnRRJjnJOIXoBs7fHP5ig4RnGyg2y02Lk/dhjPep/P4BzzCWY06xkjfttNKNbpf9ygfXv4jrSBu7ijbJId6F9j4kftg5wnHGSeQhvk99Y5BQ/53JIkGQ30VMPjKwK2SjvUWII1htFRLhsQ1NCzcQbnVpwQHKlIsh7fs7vxvI1vCpaUVp2nEcv/fDMLwd2R9otZXSrrDPFGd8xJsxkcXjWRxTlicxnDERdv6jVnFpa4SV6UD79u3/e968eV/WamIQrGWnI15+4hn6RsURWlqpa9euqxD0n9NhL9GB+qPWMhiDeX+b8+TI0OK7BAF5zrp5nC85kfy+U2JbnuEWTi6JwG8eDEq/ZDGXCQIgLVKt2/XCcvTjut2xUgN/W7mHCRR1Tdrgr55uk7CQFwaGsmZk4alsqoRvuHL4i7eEIhZBvzPwlirNkrC0tVS09HNUimYmugAGM5ULhJa2fvIGumS8lgk7QgSZ8Jackbh+tdheLBYhQFUSAZC+Y4ubalUwwZ+gLzfKGU2/2j6DiMLRLGOjX3kbi+WveVbB/C29PoLegYnXQe5k02GxtG51QeAeZ/De37JR/G4WpApEl4+UhvI4ywmxjfPrYW1fwv0vwUrZqzXPewHHvsvvG1u2bCnXspWDTcGtFnwHVtFuZGxAqwyFssZsuWRRf5oEjHT84RRxtsItDf5Prp7kkkhujfRbkJdr/at4z5GcvaCgoD3928gdX/JL+qe/vE2bNhPke5CbQUJ3zn+V/pTIftj48eN/JUMdY5qp0UjfbGEH+agFTHX3cIk1yMTTEsjL6cJYt6B/jRFcyGLbl89LUDK/4f11xmwpMrBHpa8F7M5L7mLO8d71OUdeCRWq/SzrmfGHA7E7c8elZWzOSYYO1h2XFVL4/xKe80xdJULYxCLzrF9FLh7gtz2RkVrVCt6m74vGkxfatGrjQJYg4zwr71hX8Ane+zrO3PsplLRzUUt4e6Q4iy3OZErKhGc5MwPP9M1Z1pjk81vc70WT02hfC+TPAra6f/ZFYonPlLGoObcwCh5bSV1Xz7v0lQljt/OdWXwLjjYI+5koY4VQnzQT0Qq7P585c+ZjCNefhZXQuSuZEOP+L1Zx9n0M5nAvSclPkcTa2md02FMMgrCrE6TjQ3gOWqeOSXgdAvtYhw4drmQyXsxgPi70Sb5YLjfXRAy3M1zXIIWdag0vE1bMgpPAu1P4iw9EjnxRrH7CvMoE7KwoGNmKgxfCoN5sK+SKRY7MOLPyrAQs25mVRiqLi1bQI7ljUyj+amF174ignnC6lDpdGLC4A+Ei8d67kv/YxUehNTgiD20Q59eJqtSeK9Ob/Mgr6bOGHKcvdp44Xo6z+scsxu8aJvpVs2bN+n5KnU1/bB/lP7iPsTRRpqJCLmyOPu6sFe9YRMXsPVbcMIXcKDnHXix5kxlP8l1Yht17yyXApJPz4ACTshaTck+gUrQWKyDwcv2+zTHyKZiibV+5XS1hoe+9atWqvolJy0VEAnTJzq3sTf+6UGQWPwtNMv7/3bt379tQdpuyOQYOV0Lq0yRkWClDl05StMng0L0gBM/ttpzaHJepVmHR0CC1kdDJRepsFOkZPE89LbHmzZuvMFqfisLqZ+zWrdvjyPqD9ld+fv4LgeOfJ2OhyU281hgwRlmvYGGSkVC3wN8YV7NiLSAgwZKKSqbEMyTE59zW9J0MQEIKf81x0+WBdhEMngfls2yidOX8trR7COfKOWwSRnHIf/lQWhlPpWiaVC098PKZ8mC85A+526K6jIm+2aa061GTbpCp0ZKHiW5A/n6PPF1snUBdBJwjZFI88lQL0fLdC7FDFEExV4VNm2ReEwn1Pu10N9g3MmjtY4PzlZEP55HJLX2dA4zLvXxeyPfOdcstZXZQGgWhi8sEbcG+4B/fFfPIRSMzhzh3mjvg7PT1T5Kfz0QZRx20Mnl5ebtbtWr10oABA0YgOD+lg+siTDfzeeXh8Jb/oPXt1rmY697Bu2VdrL/1SpRxMc9dbtT9CPDUIKA/iQ77qUE+t7d8Ns3SMujNaJNlxU2TNKVbQXqfVXaTE0XXgckiKtzYdhpcqx4+4/q6H7R6k6sga5KKyTwY0Cm3a7ox6ik0um0QQi3L6gFcbxbJJnMCwqbirR+cxxsCi3wwLO+6QYS/K6z2snFvoX1if23DtiCnrxE1yKTxLIkyVaIgqgS8TstDTgcDGgs5Tga36iyg31ORohTeFH8qBSOCWi7VlkNR6MqpjqLUit1qwI7+n0DfzuFzLhNnEMc3jSh2PybGdn2F+pq13Dm3YjDnScA+GEXSAGVrjbK5BoIkx5fk3qi7XAYcM1rIkRObe2bSXsWVGw8QmmcBTCZQJ/l4OU/f6r6cnJx7acsrEhoxpidxnV5Tp079DhN9lPBIrvmKnClOwGze5KOJjJf2AevPtX9VTCIaTMXWJ2+aOv1nYYQuZrlJwelWP4K5zoMifq+eylFJpIVS3Erb6iXGPKusMI/uZHzG8SxWT7+K49ab2Ua/HUefCwdU+ZZloXE7bYKF1Stk32tM3zTnPm7De4rJVbZMb+d++m9/5fpK31hTUTlUATu2yp/ZnUVyAmuZy0Eu+Tp9+bjjGT7jsvH8GgaWL6oRSUlyvByISuXlQikrs+6uTOaRgVF46c9pSy5j+ATPfL1WJ/f7I9d+jTEU9XOVWHkXWfktvKcyZHIQbXsloKWLJfuSr5z3PHnJee+uhSxMzqQPuS+41wAVKOOj0nZHoFUs2kdFaqGGHmnsNeCSm8c+4TjrZKr4D8QOwCCyO093jsJW9WEf0muflBr9mRcktXH6wJgUNtYJJuvXP0URZ/uo9Ym1bt26n5UOuM8LRuPpzCtkMIsqGWVNi23cuLGpvTcxKRbRqd9igH4vwB0B+yL//01mKo7VZyQofjId/ZrYWUvIyJ3rYApJM9Am+5dbKZrQJizqosAdV4p05vKRrefKXByK28kp5/AmEyX4rka8J7iai8Rqk1KMDod1LUOVfr39wVWxIQJ55cJdsSvuU5hFMVguvi8OZW1qejvabi7+9kgpVSmP0oq2VljIRzuEvpEJE9E2k1NcSHJNAzXYFxwXBxnHGimoxaRx17Na9jw5Dvhe4d5Av1keyuzLL2q5cW4rg4367oyWc9/6+pU5bhnXG2o/osAWC7vTf2qih4EextPMQH3I9nsVtvNPMXZbFixY8DX5iyPLL/PCWiw0O5P7NeNa25G/y1hYFnE9aTBNPjoO6/Ns5KFBbm7uMyhNGdZcQDYmn3PKCk0KN9utkFAa2a4H55Fy7sLEfdwu56JAzl+2bNko04O9pv7wFJRTsSW3hxZzgmw6X3ThSNFJG+smgv9OnTrJt1vRbEGDzyixO4Rl0a9fMImIduSZFk87XIzO5LiBkeEqDr0aVvJTwb0yj3svN0BsgCsoOpWp8iF/xRF0EjWgS01iqFM4tj/H/plnWBzIouLYwlcM3H2FMFTKB+JnT7DzlQ/XjDwR5SIIXSUMjUx8g3HUYLmWPu8ZtRzFMD9ghhzPaRmp3lFlR9a5qqbv83rK9GcDjvwmFebGCNCpbOeayGSciD71GVdzvIpccqSOkuQbDGQ39QX68kqOGWdegIE/7v/NefPm3eLinE3URBtL6MM3+Pyq6tNYlLA6k1a8Bu1U7wjdLElIno/TVyZ9fC7VodMKkYT3n6mIs5W+8B4e8oSFCxeez+SUHtICia9zTzkr5Mbog+XUi23qnfz/EJPkL3SyrolrEMgrJd/RT8b75ZFF1kPWMibGPXTuE7oXDJC4+hsVFtjO9/qQ68V71UjEKBPKdV9k0e0MvomKQYlZPr7T/9RGxITge0veGJUWE23wjj4zwutKnMkwkgglWKn2RsHS3YkHQ7dDWMxup4xyS36yI1AV9r9UoPqoO4XCF1q4LdJHm6nY/d77ILhShranPSPkzEVAn6IvunGsbgQnrDXLXmJiXi4fRmBXFSRTZjfr40PQ9bebHLCEcXmJ757hf6PQJ6JA76Tvj+EaWudOGuuXrRBqFAB7rfjnpcXkJd+swZ4V1hxUSTBJL5eTJCa/AZu8sLD6i3hhjK2bttO+VEk0adLkLX7/hRYz978VJS2FZJXILqujAhDLivX5gYsk7bC6xSIJx1HiZnVm3Azem4lbqCJN9LBawDybZau89iVWy+DVFbkxm8tq4ZPlXXYMmODDMRa6JuspzUUWA3m0i0xRTwFGryt7HhM9X1Y8se4co4vvNeGYtKM139UzKMZzd5cuVegVC5pY+rJpnnkP5sCe/v37n8MO4A3aVTXQOqlyzSFvi9XEw90lP7hKfHQQUMkTLlNhqllndWYNmANB/VocyKKD4U4rDmMhcXInN0VVkT2hoIsj8CdEc4f9S/vv5/lzhaXyeseMQCuh85tFRCWS2o+cdXPB4NnznR+8T6It70Vftpe0iuNEPJjUtJdxqq9BYF/RR5da4YM+/WDlypXO/Vm8fsE150Udy52ccyVjdJsoncTLbl9qGDBO2yzZxb2cS6K0NNa6cN+r0SkXTp8+fVoijvo4i/hzrQ6dHV38Zyvi7FRPgzK8v4kV0XD8+PFf0R/oit6mTZtCBnqM/AT6iRDKq7p16/Ykv30ZoZaovB2fn+X9K3Rua0lRGDSDBHtixRRHeCCy3UpCaVWNEkq1wpdWHBlA2cJZlPU5WRLbo/DhzvBD7YkMoXbBQVEUGXgiHrqF62FNZOEl88zJpPIvjESOqmF9lMS99oRC9npWlba9bh03SShvoIOX9eIkzteNoZ9adIf3ktFNesOD9JeWsfSZJ6FsnmZClIS/+W2svudQNmP4fAovEy86WoVaH7IFKYM8XQrFDiz8Buy+zssgqRzIQu0y/MZux1XSCH8HlbJZkOKLUYYzOGajUDuecZDlpDhGAP89jNM47q1PsgFj1YvvphqsqV+/vpN5N9e8KD8//8cFBQVN7JI1a9aM7t69u3UDb3ThxXrtRVu68YwvmHpLP/TdsGHD1RMnTjzDSYfytgKGuNNv8/keyWd43sGylUXl4k2m/dKmLcLFhPmJm0bZX8UilJnAtMUIvZPWIPYO+4r7SLl599KlSxvoE0YpbOW493l/yN0R1z9L/71jzv1n853WrgvYEknwuV5CIzzAc5+opWh6cTbHi4reZ0jzTLmwtiQW+m0880m0N0P3Gtj5wkD5lNA+kUQiaKbK/aAVTp9OtsCtC78ujbDmq8rvEG6ItCMrirhFUSjF8uE2KwplXznQRxXi/4MRd8nMCecuMmea8108w53ONb7rysI+jXta007u6GccK9quNW21580aS8qubj2fiXMNwM3Q4JDTguPdreoO05V3vAyNYuiFqkUf/5Vn2aIhFG01yHyii7NuMClkrb1nMQrlmZ1Kbdo5iHs5p4Zx729KXMVCZymuaSl9/nMnCvo8/lTEQoDcHqZtnhaLPktWqqWyMvGcdVAIrZs3by63seVjajDYORxjldf7jRIzQKNQNk+o2OjsHyGwoh+0CHTWWy/uTf4XBtZIfCHHb9LfZLBCtwOv1rG9OxAoizIBRUsugrLhQiifpaSLwn9WFLwTQv+EkmnhbslKvS4Xx22P6yZlnRjetC63xrGHuiYsj0z0O8o17Q+MsQvCrkgQUWgTWX2NsGD8bbek35ZLtwYZn3ubDmowzNRwrIkx/L8keI5tu8ka+t/ripqRAU/hdcufAhlG9y0EyfWOkdTd7aYBvChSuhelZOqthV7NqjsFpXYFE2WUARsRHpKcM86zBOfrf+e8kXxuzdiYDTUaRfgz/acc/zr3mdGiRYvxTJq+Uj4GtK0d37lL0l9tGrDxg3IooYXIkJwhPZl0Vg82zfo62vKwLhWrWPC9wWG3yWZvleeaLcLNIcTMGIM+zk1yeahErMwsLtvdCb/loAiHcn8j9z1oZ5POnTuPwxj4EdaRhWT/JimNCyrPZJXoCXx+hftb088KEy6iWvLXisHm2MutyhJtyfA86ObQ2rLUF3KvMXJr69at70Pmn8eaG8trIs8l8kXqSV0ERTxzXb47UUibaAjuJae39RTXRuKSu68tXl+XkYGygFH62hPB7sIg0irOMgTKx5gXhewlFFC5UMQlkWac8PiFARkUO21ilMgNIWjCHXNQyM9K4KRLSx817xsMDjPuJhAJ2zTDdb61Kst8WMlnjsqY59mnXxp5m07/iHa4XPk2CMj4DXGx5//b9ZHbDGVR5cq9RhscFt1Cfz7Nde7j/CZWxxZDLDqFe2lFl6OPJ7LIfwnj7mU9DUfrZfhciIL+1YpYJdy2bdthWD6XINjPMGnGSdvoM7oNQDBz8/Ly7uM1GGtpM5NsGJ2/mw5/kknW//+xdx5wdpZV/r935k5LTyaT3nsnFRKKdFBABCliAXtZRF27i3WLyO7qX9eCuuhiQRFYBelILwFCAoGE9DbpmUmZzExmMvXe/+/75nfCazYgupY1OJ/P/dy5977leZ/nPOc5zzm/8zszZ858iwYc7uTvOrHiXg30XOggUTqkgpK4ocGFNPtn1EKjDBOBMbbxZJtZwfZxfbwmR1ubzVtMZ9fZKg7XRamtifrguTAsDt8bSSDdTCS/x0kbKPM9JgnqsM94p/8vdQBvky3tIlvpsShEynbW/uUd6UmDL9F8zNyDkjVk7sE/wFazm0mSVuq4s/HB48LgOwn/Br1/Sf0GaQzQoWNx28ii3ag+AjpFDbIqLfanSoCHAlcLbghDuPZJ+S6hWKgmx61UWCF4SbCKSal79dP49AwyKZqMtcLCS9WJfv36PUhJJPzaBE7Vnl+g+IEW6ZxrdF0CUN2pGi15uFr3g5sYdEcVPmhw3fqj4OYUEiSwnvTbQk08koMYt+vgE9Ez4jbobbcSmYZT9flXTEjKD9FPpOniG6U9+h3e7DdDesNn3CTG1G+S0r9fbWI304Wdga6Rd2ECrgU/7now4aB31L463WcixTrVDlxnHVRpJulG7b0NukctBp9R+4fNmDEDZfFLkCf0u55/MS4GPcdFusbDWshg8UuqfIAbpk0oSp0zXp/nqX1P6NWYooot8WLOe4XdUgSnO61095utsNOKuTiqNadcErF7KwkUhWW80zhkZLDdiUvIZpllHepX5Pg89eHF6rMdtE3ju1RzdqoUGAvkSSz6LHJ6hrv0Ga6M/ShwqDhxael9KO4KfZ/EXfT5CriSNb6rCTKq3y7t06fPVTr3pxoHqkoTH3qddtL/QpFjDAQtAlR9+QQ83/ruevX365BZvRZJrp7Ub0+qr6n+kRi2aT36uwJ3f1Gf8Z8qMCgLgwq096jzqHFXLkvgWT3Xz6ScC65Wm5k6dWo/bVm/t27duvMnTZp0pTrwB+r4GdrC/oxyTOp0LOGxOv+DBEXgQ9blT2WLr/9JvSQaC2TnLkr2QMsHKgQkhX4/AYSCSy71QYGZA7lgX22vsHxtkQYrW84VOxoNXwtCoIz9eQOcGt3iatGNDrihKPcYbrPPqyyTi5IPu/1/SeCRQYC4LcFmtTd4k42P7og6fiAr9Dx9nM2HBYtiRUGD7KjT55kS3I/DG0vxAP0/3JhouAFaDazfCqELQT7QKFJOXVCQOuYkKRa2yASkYI0bJCHHcr2VggAgLEjL1XnHYrEDzdIxn9I5gP7bKN8jRb91zJgx39CC24udjVntiGYPo6Cm7vVTkB663gYIzXUfLOnxGi+SfMBcH6PX+9kNgLihn6XcxrNYqS2wyv0zz6UJDu4c/gEUWQLnMloA3zLp7C1OAML1k3h2wEJLcRyP791uoW66x3PgnnWNq4jUU4bMUDfIo0p0r11UxVFb+xrvzQpBOSF2aviPi/W886ljJ0WAAtpheGINgS21fbhk9ynJ/IfgStBrNa4FLGwp7OG6xgx9fkrH7jBOvdM4eFxPxDjITqsPhBXKlJgIgTyC0ihSuKTD+jVSIuGdtcIOdER7xCW8c8tahqOWY7mTRDrDYrZ7LVHEVsJBh8n1WVxZlF9PKTYKhoJAUZ/dBdqHcTfUboD66Bj1zy/BK6uvKSPW7CAkSTAQWj2lcQDB8hXJwdcItkkWrtJzj5JsXKe+wS0Cte4bdY03Qx9LerkU9VJcWlr0l6sPvwGFqxb0b+hY0r6pvpugb6Lw7qH0pL+L3/gv6jP+U0Lo1OmlEEZrUGD8+gjOfilkVsvEZbFw4cJaWQ+X4pLQ75dJUPEx/Vxb1m/v3Lnz0zr3ssrKSiK5BOvAvOIiWMKkJXvO8JebUcgIHlzABzDgxQghVjIAcjCcPW1BIfRwtkIZ2MUcyHXOpOttq6PB7e+wlV3m4FuxlS4WUz+XkS83vrG3LetGC22ZKxt0BK7Tgt7uKDXWdYfPb7MF08UBlpx9eJ0uX0PByH52v/QBfqfnGQEzFhA83DBwQktQb9QEeDMlanAX6Jxp6lfA91gYVKwmbZrnZkwI6jHhIIT/ul7XUL2BJBedM1LXoK5hUrWEhZTqDViHOh+S/4KU78XaXvcCDUCmFNUZNF6QmzMh7tPk3IH1qs8jNTH+HYtJAn6l/l9JkkomKXhR/ya1l2yut+l9lwPIZIURF6Cawzrd4z/VzmVqfzsVsCU/W3T+1Ux29d9/u6IEfd2g3wu26pKSXHommPlIte3thafa8EOUYxnFTfUsO9Tu6ewmcIuoHadu3759AhloVDZHTiV/KI5SFiHJ56/YIVGfUL/3U19twX+s/7GYef4iye71uh+8DdV1dXWQPeGGajOKhefYoP7A5YNxUO7YBMoWuchSpBaZYCywVA2DJCGo2FZqi+Ww1fGNvK3fnMuQobVbUsks1sGJK6LIiIpcFGSwvOYdOI625NyvmfA7O6gI5K9VbbyPOAc0Ahpr/HeNkFqxoEg2QRPthUuGZCGq95iDZrj6aB+oEmgQiOdoHGCC2y39sJcgJxl3evUCiqnrTNaxX6LwKQqWXRvjr274lt4X6rdvkjGqdn9++fLlnVjAoWwDQfNSafWvOp8xbrzx48c/Dr8u6ZTDhw//PhwMJILEisXqRZkcWRl3ZA9IAUK8icmsgT4agdGg/kgDcwaoCEiH9D/KdJYGBauFlNIhRMVNhAMulm31LH33pNqANVdiNrdKBzKKLWhIaZst3L2GuAUhfaMVaWtYqpG55wy7PZkX6TrDEqmwT3e/LeC2qNfnc72rLGo1jK67GeWKfP9yU4HuN+qD9vYkBduTocWWMxZYdyx79dM6rBeqmQDvY4tMn/C8VBDR/6c4wAdiAFpDJhvBIZ4DSGEJPAoUGsCawM9JhhXPGLhTt7mbFNGxusc+aE01jli5m/X90biN9PolFI66/onw4Opel+jY+4gDaBxmENgiQUDHzZRFQ/Btp5TlAxSa1PNRQRvXCRBB6BhX6zci7tW6Vze152gqf5P+CtqDZ8YPrHcsfJQWlt0I8LYeA4CuZZqw79DnN+s1hqoQUrQXSA7frnuRPEANRFwEt8vS2gp7mb4/lTRwWVk3qI23aSG4URbaU+yy1J778Ivq+B+RDQnHAqn7+vxOiuvqXgT/fq7jHtSznw6emog/5ekxHkwlSW1Ikkng9y734t1pOQJyVXCmZtYonG6WXdAqYbFCULXPC06n3VpFtm4TThRbwxkvVEUevyDlKjPtZDfzpjTZbdfiRQFlVWJjIGu57bRljBJPiHnYcai9kMGTncriAg0uED7kF1geypMq7LPUJ8v0PsCp/+OIdegd/D6xjl46H35yAsx7JatHqV+f0vt8ySNVtakAwvMXSa7qdI1rdfx/6ZpnaxwgFvr8kiVLCkE+RYAuXWjgD00S+rOytv05rGJ8ihJKcup/MXLkyOsk5FgQs2VV7ZKgdoTvho6UNdI5atSo5/Xcp2PNaaJs1aq3UcrhYnUMQQtYly7T8ScAsdLgw+6Ev26lBALI1HANzrNYbhqsbXq/iC0yTGROLBlkyzaxQMA3GzrUaoFL/MehoP0YTRbIIvvX9ruSR5G5Lnbbn1tuX3CpfcBtVuJ5w9z2Wcl32u2BpdRiywYMc08vCs2GvLUag0yzIEbpFcUcTdOZcxo3k5AtLxSZRNMnSyHdj9+SQq9Y/+qLR/GP6vM5UjDUOCRltMTVTiJdHF84Fm4pbgcmpxNBSlIEPnABwDWAtQicrMSBw2m69rHUwbMLAqUPMoLFZbPdFUs1ZtuksH5BZlZtbe3lekdZV0n5PeeS8aRfL5ZivIvKEhpLCq6SPdYuK/kK1/1bBsZcsnEsmGpkAepRxpNFR+9nqz1E5SthtwPupfN/qN8o315NAAqfO5UhyBrU/xTbPVXtoaAnNJ8fk4ytVdtq9Czn68U9KGV/p+73XSupKt3/E3v27Jkt+fwPGRIbJKP9QW1AvgOjmM7fr/64RX1ByTEWDjhfyh0LSDhScDeZ8jUKvRZ5YS630iy1EVDk+EO7+zIf5FWW2YzHstMQy6yt6SInW/B7YIdL7fZI5gEoBivijlSF85LUrqzdC3Im5dYoTgWjCU63u3Zdk2vUQau62QRJl1RVVQFFHQd3ubNNMYqWOjkE2WVcULa7JAtZ9f9x6ktoZJlX5An0dNkuUCa36fhvaZxw250vufnSypUr2wgAp/VkkFGlk35+n2ziI04Zx3bBmWAEd3LV1dW3UDJJnTgUykxZSu2xpXBl4w5Zz1BFHqWJRKopQZlmTcZPoAyoFyfhh4idLei/ucovDv4mXXeq/cGUDV8CrE3fkeHDYK0Fc+xkjDYngnTAT+wqzbsNLSukUA6tAW0LP6+FsM2WbGyJ26yko6pyWLoo0wZv/1q81SvY9QHmFajSfnMyM1H6mnyeDLEB/j9RiigeElEM1u/0FpZdK1l/+DurSDrBalIfjtGzgkThmmRgQV36sP6fpAXwg+pPFES1t5ydHicsZXyQWDydHo+cLf5iLw5EqfE/Q8JE9BvkBMHPPaTq6p6b9PlpgpcQg3Os7stCerK+e1QTDH6L/jyvFC0WJRH2OvDRen+drnGJlN87oFzVuJ2F1bRmzZoPkAiDEoa5jAAiyROVlZW3Q7qj/1GcWIfjpDAhnelDOrF+3+KU+c24t/C56z7zGFu1Zy3pzTp+LcRT27Zt+ztQJE7tRanACbKdTEewzDr3HileajDm1A6yuc7UdxOliAlsXgOc0LsfOEggbWc8lgKrc7WXFssQY9Ho6uAFuw2iqnhXE1ERsC1xge68lWFL+IUPQUYUPHcKNiAypoPNWUdjZQdrYblddKG88Zs3hY/Zu7CcFXXOshy1EIsOiEiiiIoDJhdBwAQfdyDwuAGcN0oWaBm7YfUX8FMqlGBkbAGvDzcE1KqMievjUUexQobCUo3R6VLG04CKgls3rQBVetg9PaPX16WI4TX5hBb2n8mAWxe0mL+Lt+T3+TsilXGaGUlWcS913mc1WZ7T5KOc+IMS8qY0xpmIuzoBAhwA8ifgo3Q1g8EQn0iRPELKNHhiHfOQfZoj2aIbh9vT7gW2SZ0mg6+wXxnl3McKJMiCiuxbhju1HoiQV+5SW7mNdl2UGItZZmWaj2t4knRYydcFQRCTyC6LVlvVGVseeStvAozDuAYJH8DboPh0Bl5SoRprAdeEn6PK7HDN5hho8eSrd6p2mevk4d6hAsN0HfMEqciw8hFcktIh3fgMHQOSoFnvuAVQEvvUt3PU98Cn6k1jWGw+3cCdJu4aHcuCVg18yEoFdrnl+AjNVRFbWhbg5bom6cXvxX0EY5fa8HGSK3huKcsHgKgRyKLUuo4hW2ubq0ZQyRw423CyvDT++ApvUzt7a0H+lNpeqQn5APh02q9zluv9Rp0Pd+4wydYb169f/2EdAyn/dyh8qleHkTiMGX1VPWzYsP+mWsrmzZs/MHTo0B9LvnBtUaoIvpTFamsDOwncOk7hhRz9QX0HFA0LsjyIqEifR2b0LK2BkDHkLEEscA1XvSh3gkU3B5XLrAT2m+ek2YHa4DbpTGHYY04FKqJgJVpmZEQCmyTQZ0u+xIo0kkg6LK8ZkzpE+4psuWcOUcRZP0upz0VeAxLX0wUTQBYR+GSOjQPVxGKnsR8oQ+ponXc3MknqNBV+dHo1QUrajJGkxRMc+hwtjG+j4KrkhsrupFTnNAazHVT9gRbxX+kal9sd9VMyhSOH4eUU7+9bNuuIVcbxcOASR48evVGT5LTBgwf/RJPsmUPJnoOUnorAGhhSYIFkNcOfq9/6kZ0DlMjVKyhsOcgCzuCgjPAZk6a7SoM9VoO23jCwcVbgC00+stVuBPzRDd4SImxY2ETnG+3PpU07rWDLAptsi7kQDHAp9APKd68DgFkLb2tAkRygy9q6bbGbAaHEzN3p/7vYR1xhn26zEwBqrKR7WxFXOIKe9yTjmgRlhumZOJ9adygwyttcSDFTKaafEDBSH5BaPkUT401SbiP0Pc9CwsIb8EdjGTL5sIi5P1vfmLAsOgQC7a4JN0aDLfxgpcNCAog/sq6u7lQsZX3/gsbjToqnwsilcaSO2yX6TCDyBXDRelHV+B52TWrzh7du3Tpbf/8leYBZ7j5d96RNmzZds3bt2qM0KSdAIqV3OKYHq42wma2CJAcLjQk7duzY22QEXKV5tEPytF2Km3jEIj3/QrXtWSnaZWrfylGjRj0hubtUfXUvafg6v4drKhJM24cFx26KbbbOJ0GpxkkXuHXy4YO3oi1Nbflz3jIHiU9JIB2sOAvedSTIHT1fkxd3OjHh0UgpkawVcNZKM+CQAVErWK4KlrUSIxciySMfweRQ5GH1ppRwcczXF43331bE5lVJaAKcpl+HoYNyhhYAcnjQNxQRVj+9UZ8f0G9UMh9CKTCdv9A+ZdA9yC7MhcdovE/etWvXOHDl+p2dDfNyqmRkrJTw3fr8LS2mIKfeI+X95Y0bNzYQ4/hdqc1/iJV8RCvjYInTYKzQ5LlBk2wVvKuHc7CzRQO7OHLkyOYXXnjhCg0OJeCXqS9O0WDNobyPJuvzFF7UYG23oNRakNjSDHEgZLUFZJYm5lZzB4NG6GvYU4WDXfitCIpQvojt4j5Hn5vtC263ci22P63IVmI+RayS82RptIXcZDdF3oq4YAu5h1OzC/6t1X4++DA6zGEAfKoHlqyDdr3sN2TC7/Bk6GFkBderMsEQGGNK5pD8gMVbC4SNxQj2LSm/2ewqSB2XoN0vJXQxWF49/4yamhooL3PaKv69lNST+DhZDLDEjWXu9DY2GxColMul4Ag/ionEmCZb/h2GwcEX8AipwqQq4zLRePxaY3q/fsN9NEv3O08LJVhSFHoVuGa1fyDk6lKoFJ38hWSmVpbralm5oENIne0Bq57kA5a1Lvr/Ob2zq+otGVuj/38qK+shKe7G4MUghoFrKyqd8+I3dkWSjddj3Vl5FHnMkrRgtuHmqYB2FIY7zDaCa0McbIOTl0WScUzqKxoBkbOLq9QLVT4VO4j+a3PcocOKtsSLXiQGpbVIUkvOijybUjAdVsRFng/FqQWhNK2o7ZIqpLhT0rw4BfuuCzZEYsEt8ngmOHNj9Lswn7xr4xjGDQbGrZKvUSyc0HtCl4psYClD7KNz7tM549iZMRc1bpBzTdEuYxpFHjSeBDsptNqk8aGe3h7JxVWwDuq49+rav9EOexHB0fANHw4p8UqKCbxqkj5eCr8X24qXW2RwvM+ZM2fAggULntVkKaecOEQ07AM1MAV11AOy5j6tbcpQM3FhtUKcfRpEJKzYOuf7WFua7G8jSEKasX4bSeIEHBf4kfHNIkyZA/Xxmg64azv7OmmjxUKOxdvgQEt3WzgRoAs+1bwFosHJInkr5RYLeYkDhXBdDLKVXePgXqddFDwfsD7wrkPMgbyZRQGMsCfIVlsM4F67w0WNtWa/OXXIupHvz24CikO+c8QdYD7b54uAtun/H+pcLJKTcW1Q9JHSSVgwmjQ3aoL8kACraTZJethiBZINhQLTHZPawltmS6mXlTETtM0Md5DYk2iTdwbXaUxQWaJYQChCoGcXyTIiLsBx67xToEba7IEDBz6qndT5S5cuTcjpKYowaNAgFD99sF3X6QxOFeITKFteWE0R2HmpyiFRsWPMmDHA6R5UH9ykdtyIP9OLIos6iqHRTHiJJYlfFNcChRn0PwkXWct0wqjGZyvbttSC3ZHa/h/EDrs/i+xSKLaVnfRv6BIrw7BcC/b15yOQZuUc7oZMCppWHD7lFDImUBZhCRUOY0Vm7XvOOVjcYhraHoG2gNoS+bdCHAkWm12dxmuAZOdtugdB5Wc1b3tKwcK50Vfj0iCrdqu+O0V9yu7nTM3TSv12mhbOPi53dhdZjjr3ZI3J6/X533Xs12UVz9E9SNb5toyHQtCxpsc0zbFzOEzxK1XKgTM+Ii3jtIWcnhwvRYPoSbJPVlGTJuGFlBiXRbSqqqrql2BopSxWQTZCeqo+o4RbXcIJIYOWE/8qUBoKHgJ7IecdKxqf8RZKm5M7b+L2xJ3ASm3XBEGXSuf1N3kLWeqJFJPi4FbRFm/ByrnICrg5zX9hAe5hpbzP1k+3QGbwHQLP1t79tNsTrMxBvH3mSu5mBY4l1ceBu01E/Nki4gqy9Q2mtR5ibke8KRRCW9aZz4M0a2gWeSbSyNeRWaVJAw53GmB+TRoI7PfoRWAMkqTyIJbhekn2QXExCikLQQxWI31gF0abEy7A+cI/cJUm4If69u27WvcZpvuQsj4K9jlZS+xaniYGQBDSGWSMJ0q63+bNmyfrt9kTJkxYozbhk4dVsFPGSoMspALzxJC8jPk2DlYKiYn4cnXvOG7UqFGzq6urP6Jzb9K5te5DOE+AUmXMFVIaLhgv7qQiRzIQhFCtET9w+vz+VOCtM6xeY4mLvGB3uj+DKyKf8gUXBS44pXQ7Uoo4k4JV5sKj4LT/nF0UIXtZ+5ELhnUW+76dqUB00UFfiFEX9je3e3fQ3dfmuvVG/5B5OVz9jl93e//+/Su1OF6uz0/oODDwkDptB74GmoREJSqjwKEhZTpTfTtQ7ydjXOmcSSQc6b7LUPQ65o06lkDvVzXuLFTv0v/XsmsOPHFA2NJxp8NZxy9V2/BV6aY4nP+GCcPEgQv30LpowbcMSY1WzPNZXbUyrtek/Jm5KEqg1dQxKzVgkNsQhQ6+iHEwlTkYB2csxCQQl6Aw2CrDu/qEzj+ZgIMHjeAT/q9aFLl9skDMGp3OXEht+2JA8p5UGQcNMylERVjV4Wfu9ERLiqDajZG1DzljJU0ws8EVRMr8O5YmVmaTU2F7mQa0xMgKkjT6mcxolzmcaROMdRFI7Gqfdi4mpf7GAOnCRUHigs5dqGOWq2+gzqSSx9sle5fqtwt1/fO0CwEWCEKgJhINPKGxxIfrdZauNxPFjAXOOICXpeI2jyGFDNrr9XV1dReRGKFrn79u3boP6v+jZYHcJwsJNMt2KemnpLBhePuNxuE5Xfc5fbeaTLza2tq/U/vernNOoainrOX9spJrPbH/R9Xo9PtL1bZD/rTg476AkpEU8v8kuGelV+HFudMB1nr7cPc7YzP74twthA83474J0qlCKp24zG6GvCGFkfFWbKWbt1sqn7KY86mYQD5t14S7wtjidJpzNqWASjIvMrBlA3cMZjkUdcDWaJsDc6Upt1s+0BLMCZ7NiSF8j8XcDyY+ZKdnz55wirxFn0n9Jxtvh7MIKVgLSx+0mtvVz0exk9NrCkWGbUws1XydYUubOA/JHlM01t+SMfCQ3q8kBV3H3UHQLooCvJQxd7jv/+YzfnkrOavJhNshExwH6ZWNztBvJ6rz30x1ZEeggXhB7gJ703jA4nrH+t1tQutml3Ch4i6Bqn7U+oKchICRlPCj4GG5loNGg9hWY/VQLhzrBisU+F2A3C0gjc6Qaw+cpoHwnYErRvDsrwv0QVglgR0t+PsgatkfPj5fr9SR6iB44XhSuPsYE93iYFpwCDCpGx20Gwh8CTeHK+yW2LJvDeJw+zC7orCxjvHJgbbQC1cQxEsokXX460Ct0B/qM6rvUiFjP3yx6sfR+g1kSzEct/qNopVggVHS7fqMNfNa/Q9a4iQdf7L6fKxJXTZAaC/FOg9LUIvrWl2XkkGn6LgTNFEpNvCujRs3fkH3qNICAGnU81K2P9H1qVwNCqdBlteIbdu2vRtImp5htpRpjY6t3rNnTzJJD5dddWg6bLg0ZBGTXffOZcuWfVptuFrPm1CEesFsNf9Iu9Elre7PTm//s44hhFIM5r/YMRWHz9WKst0LWbuVbVEqkBdWMmMa7ofCIYokHWzLxjEpREXGK23Wzxq+3nYvGEXG4HZ6QS6KhcLQtyK7JdIwtuQ6QEft107aZxhoT2e7bqW2HbBCjc1Y9dUyjevz6l8CdBgF+I+7Sgbu1/gBMyx39uw0su107i+krNnJjvbjUg1kts59Tvf6oc7rIpm5SuP0vU2bNq1n93M4nfj7IiZeiTLOZV49f8nuXisqRdk6TXSddATWDhOYwYJrYvLkyRtXrlz5BhQqv0PXSqKAJiOBJ1wWW0xXiACtY9sNlR/ZW9T300Dy3WqtyudSiYEKF6Tw6t73UT1Zkx4y74GegDWulptxxY0h5psoGK5WCL4KT8q8OZD3mzi+PHDM6YmEQEYgJWU9N9r1QLu7WHHvczbeTrtMWFjgBK62T6zJeFOULvfHYsAtUGmo3G5vK7Hs99qqYzGriIVAfYVi32Hehh0kPOh4yulM1+tXGg8oDxdoZ3Ir/k8mi/oJFrR5sJGpvwnM1Upg55MNB4qBiDpBOdKbN2/e/FaqhOj4kig+GkVHqXlH1p3Ghgl4FL9H5lQo0+3bt1+h767o16/ftilTpvz93r17b9u9e/e9atsCfY+//xS16a2SiXOrq6vPnTRp0temTp16nb5bo3YmvmUmbVQ84cUfCz/3YaINGDCgl9rx7vnz5/+7noXMxPWBqw6fvzMnk4XPfuDge8hb6XWmFEDAHQv+LZ9C1BzMz0gJfz62/altdZyb9hNnUruxjNOfCyn3brF3PAfdDUH243sH6iICiBm75wKXXJ5eqIzwKfXi0WFyqk5jjbOGWJbaXbGTBC389+r3N1CSTH17L0aQaWPZUR0FI52+g/WN+ng8I+NOxY+VOpfM2dNt5CQIJyfDkDzUXeM4jyoyVIQHfWUWwd+JlvhjKOcjLoAX/prDdY6tLoo5dkZwj++0DQ3/8hdZbY899tjL77333iUaFPzATGai59A0Qu4+X8r2WgRHkx//1RQN4jwN8ngp3dfAmaqt7mIp4VslMB/VeZRuelC/natzJ6BAdL1ipwd3gh7AqsYagpjHUV98urWdB9D49a72XG4eie5RMcRJJfuCr8LClbPPOfxykcHU4mBfWDZJwdCUX3mr3RbdjABpM/yp3BOlzr7prJVtqStWtzmVuSm2vMasVrjNnc70qrCvk21rk/qS+5zmNmNxPyclBrEQros5VOEAiqR+g61sqj7D43CCxidnJZtxhd9kpwOhi/qdkvKr9RmeArLSBsoKp+p3D3gmIpjr5J1EUXKNdIVoFuVp06b9WNf/pKzhVi9eJZC2677H6jqkMZ9CbFeL6yopg6VaXNaCsMHny+JEihhUpHDoAoNTe2ZJ4Z+NvEhRPKTjr9Y9l9kHWeIxa3PMIJ/a+odLonCIj7I4/L75AxfJp/y6Yc12pq5RiN1hwMhSSuQgpCzQO+EC88KQ9u9mvFMKQya+D+a/mHcHLe24tZV4mX3D2VRwscTY932pAHVUT++P75jAMCRFcHVQ6kh9R4UX6vfdQdarPgMtxBg6Q+c+7GKj4yAYUntxO8IL3XvIkCHv0/ekzH9U17tA41UNK54XuaW65q16HaPvgcNOW7FiRfOh+pA2Y7wd6ur83yjlI5IoCLl0pDnhxQ3LJzqHToRSL328BoiBPEeT5G5N3HWyiFAQDRroFfoME9YDspTmQlCD2wKuBQ3Wr7XdraXygLeHlGzq0PdkdyEUVFS+W214XAqZa3dA9yehOJuJLAvsRzt27CDIF66AIgfceO11tlIXB9m6mbwnKkLvcrpyqSFqWSMeKuwvDtB+qSd4i8/r4QnXbPhcnXGmVSH4RonU63rb7cPMGFbXxffal0osabXVTF02WLGwrPeYaL+Lk0XykboNQgACoMBBa9fADLqfCuEEZShvpetsg5FL/QJXMoQwKLRVvXr1onhtM77kYcOGjQEJoj7u4wU1b98j4BfGYlXv3r1vx4ctpVepfp+o+43QOTOZxFS/YNw1JlSGyElBTtRYwIORBJc01rknn3zy7bNnz+49evTob6tN+Imhblyle0I2cyOMdbr3KZKPuZKXE/TbxViY6YBxupINSpattGTpO/oOvuMdDmhFokZpuAusjDpTSiwd8Mr6elh7AVc7iM0NNAPjnz+Al8ynUBBFQYyUVvKp6xeHFZ5iGSz1AhbojGzKui5OKdw0OLkz5bvOGAFTbCrSwIkfJAdCCTstv80LRpl3iH1dpxG31D6giLgdgBViOVPBXZ9nsuvROG/C+tWxj+g7+Cj6yWBq0FyDFGiIxq23lN2PdJ8bcDnijnO9uiH6zM6HAGErRUT120n6vN2Mb4dVti9FCBSK9Q81aI8IZRy1wzTBsrKOIPhgsE6mcoW2ltVRyfhwWwuq3BJgIvlCgwCRS4Um2TxZYOO8ckMU/oI+v0afB2u7eV9tbe2b9B3k80C5hhJQI+iA5UoQiWtpMCEWul+fB8uiO0ffTZTQ3K/rURXjdRKWx6QIRtlCrrWQglvGH9scCs+uiDKnuLbZZwgUrtLt6+1Ua/DK3W2Nhs8t50nfYIUctcm62FKtc4HSng7mlNtS6wi6Trsogo8553p6bbZysWi2gNfVBMBlUWmIHeeQQEJ21x4WHapBsM2kjZQ2chAIwiAoIOdDtIOlblfHfDLvqBRNjTuY46Ap1bEseotshRGk6prsyztwJ+fazeHLTgM5mM4iQvFJteUpKeEbNWbQSbJ4ACOjrNPWoUOHTpYV9A9r1qw5XQsBMpBMqGeeeeZcXeNcynBBIqVTqW32mN7hyH1eY/qg2t2XCsJUhHAtw4zTt7s76LnXlYpBbVChY4+3/Vn71YudqNHqIF6plVcE1aJU0UFrFx9sygVRFIkdKWs1iJnCWs1lwzx+MUkmrNci8z8UBU9xuDF8TFtU37CvOeZNFDiI/wOVkbrNQY6JshQJUKevCZQOuBqy3WY5KrEBgaz3JSWZ7EPQLhQJoJSU5jV9Aq7/IThH4BdhodB4HKNrrJGMwDbYTYse7G5v0/jWUp1cY/6MlPgXXXMQtwRKeAhVx1m/tchDAvUTKvjA1Kgx35SGsh2qM2KHlTbqIlaA/LxSlrYj1k0xaNAgAksw8rdr0N67c+fOd2nLuk6T8K2Uvjlc+RP7gzOyVDMEZMaOHVu1fPnyp1FAOm+gBqwbJN5YterosaS8UmBTg49rABawH8E4huDo3q8BCQDRjpQNmXYU3/wGK7AGFt7cEVQB1j2+TN099TPCRoYWCAVqo1GX7zgD3VGG5NQT/IKfoc6WSGz9m209gGYo9TZrm63g7q6z12wrtDOyrKxo28NN4ah5bI2LMy+WH8/ZLx3uiT3ekpan/ZzONmy1zy1jvuSohl0akw8lTOaUBL2XlUmprdlBtvC2u65YUqGE54YDmGCK+pLMvxUoWPV1wiXsgA/WFEo4b386yh/+WZjKWHzeQbl6ipkSPNW9/x0GeRJ0vMuAcYaJ3lRVVdVDyvXm559//uRwZzEZw5URfuggtNdkXydL6w4oRXWPOyQX+Uh2iIw1W4EFK9+ggwxUQs4BrMhoK/fuJErB78+8SIUaboqOFH44k8p6K6QtYCv10AZFkfzhJIqDPt0I0BlCV+SxandSUEcoWGg17RLJxfVSlnU2BVfLpKzkSPIos7zkUwHmjAmFWryr4ZlKnDiE7LCYwRUNpWXi4oKvGh5j/T7GKJzVFGlV35/Igg2unZJQFBeQkUMs5/0E+WRUkY4/VON1scZ3IYFAydRcicF1NTU1leyc9Vuj5vfX9Jw/1Hu55ubj48ePv0ZK/J9IFDscXPGPHcw7YnDG3nKiVImaJoUcNRCXbN68+dThw4f/SB26KNATh/MvMyDUxmOiaYU8X/+foXMSekR4Ue0/XaLLf4kChaTEcp4UPSDzHs44gwiHrCgitH1trXSDfERCcru3Llhsw2QVz5EA/KCurm6EYWQox95YSaAVdJ8aXY8EiG6yxJbYFQIkrsGpykmOvq3WsEJ72LeZuCVcxubgBLJPuDNl0XR44nY1/KktAoieOPVWyl1Mq1nhBJPwSceKXZz2Y0aiQSh/w5GSyicEPCmiGaWeUlWt251wQjJDD/tn4WSgD0kkadaE47c29cseK31KZWHN8xqDJeX+IfBCyvNqjc+tWiwhDCIiziTfTV00uIz1goaTBZEU93otiJ3q6z0a/+56teg8KnXABFcWVYFxeyX+Bn2WjPTZtGnTXKBzWsily6uaKOtD/TM4mvVCHtvMb1yud711RRGU2ZIr2IItHAKPajeEsN2f8ybZaTHEK8a1wux7pfbzlgQywWNTkhr7+OOYXrbcSyJxCK4UlzpqiwodUf0lpXCLDsEFZ+2KCZdGxsk80YbSVBuykTUagTorYqx8rtXfHC6x6yqo7+CQGAypPtwT6vv1OraH7wsqBs7rC7gtRXu14D4Ei6IUMbuuyyEGkvI9Wq8ZGtcr9d1vLFtwwpyusRin37rBpqexeVzn4iteo7GfJR343hEjRnxD71AcHJaF7X8DYzui0RTIiSYDZWsICO2BFJpc8qlTp1JLbFGsbi8X8Ev5lHtTVkUTbQiELigFWdWXa1Beo0kI69ajLnxI4dJeEoJHZRVdrN8f0kRbQPFCMvNcGQFSljGGeLG1rsGHqUXvVPzGUsg3a1Kfp2t8S9d7s84hMIGQLgK4Tsl6CQymHxVmq1IppjtdXaHKSrbVGWgo6J5OhY2qvGEFoqj3BrDekxQFXOcgXihbFHZPlDCKkmwwB/SoeQbCYospNSvsXy7zpC228g5W8RZbzVip3a20sXLJNmzwdpiJxg6CRSrhZqbUPMEYsqdwO6j/n8P9A4if39W/VFBpxi2iV4f5FDbZVYFiAcBP+ZxeOvZoF4r8Ne4TXZfJPMgoBWrbUWASNjuoQAuSkzs1hr/R+PeCcKZ///6kP/fSGL1z/fr1p+MCcQHOg5md8GQvWLDgfbrO+zSRN4d9QNkfUp7hEcayhyWMPlOb2yWrd+v/L2gRaAzDyC6hsKizhyRe5MPSDliiF8ymgINlXmRcK6S+K/Y4laTQFzm7CdpSlnFR6vyOFCwtkjoOoiOcth/JHEWpnXVkzhUMySyzRR9FRnMBWcM3jNFEjTlKJXEdFlwdO9SuuK6Q/UOgr3kxSGOyFEODElUkvZAWrrl4AcROBPWoXK7/SXPuR+KG5iMVXKAQ7Q2Vrt6p2YhrqlxzDVfeXB0zgAK78CKrzeQNQJ/atba29uNOnnk27aY4NKMyuIz/2H9/1cqYjsEqlmB31QCB3c1jBS9btgy/40Imz+/qNDp6wIABWLq8ti9ZsgRSmMYhQ4Z8T5PwU1hCmpj4C5ulpEnh1eEDfqBJeo4U63sgMUfhEujTsauoWkwWEROWOm6s2PBWmOyEYojDtWCcCi0jEC0JFxlibIv+zQTnZLdBfLOWzKPMAXIh/I29nCoN6xYQtHrD0wpWgvtT+OGgJsSSbrWfGausycG1QFl0OIJfbihco33IpEsPsoWMNbo5lDJK1UG+hGHO1w78c96Bn3JP2n0mJud6/b3lK3gBIRDKEFQ6jbp71HvDLQOCRWMJVSIlniCt72VcNfXbKq3gsdT3R1BLSrjMFhuBvxd0HO3iObgOiI+EAQ7suMYO3zycycdTSkvXwE20VZMQJUpAtHznzp2kxm/RDmslqdr481kYKYmk8/ua/yTZWek1NI3iiYw8ioMOGjRojWRrqa61XPd6THKyPyxN+4YPZgVHBpuVcrHdCPF7WyrVOBOJFXYbxE4o42BexAii2G2bC9W22oVQHBXEU1wgOcPLgoA+MO5ZV22OIGNx+LMjlRlL2MFzFsDAp2fc/gSyhvsDKxwYKOTwGtek2jIBN3ZNtA3KAPXZ01TF1qJI9RZ+6+adxF71+RswfPQbWO/joSiFpEvXPnPjxo3n6DeeET4Z3I0PI0dOHqnXGPTUPcnifF5zeZ7OI3ZAiSZQG2u0mz5p1qxZ12t+bomq2i9lvP0xccZHTAAPpYffVqtckxRmIsCyWBjhzCF4xsO6OMaPHw93wmXskrQyvgZcqj5D5NLsAFNGgzNOE/JWVm+9Prt169aTtOrCK/BW86PiS4VkPinFY0sH3xvBpxPNLUvjsHjZUr2WbRSsZrLeL5dAAfX6bwhrJIjbJHDdHPRIgmdWeI0RuMIv7aSPZAztvijEZMq8SDLUxVjlVk/O8C+GIg7rK/FRWolmXb6p1cGXflbKzQ4Klth1EYq81VZx1n7mRPG7Vl/GFjr+vpaoJGL8coddKvjIsejrWYiwgk1NStZgqzmPIV2i3Xs1rjkHvbC+K4xE2Oe+CkJyrJe8XSClRoYM19huwwrSOQQWN8bW3fhUqFEJBO3SteFOJn27SROVYBIuqftIOKCEk2vgTZRSfa0W0TOoOM6OTOPZoUV8gRTCBsogOYBJdH+BrDwd0pCUvM8cqKNXdAgEMxIoiozQyaYs43DtREmjgl1AcV748gMZ0W4Me/irE+vW2+4g/imKRKJAQDh1uTSFqsi/yCefDas3lHY+kjQMteswCoj7VLhdJa5CzjhSGDRHJRLNKdAruwiWYcUSqONnrqVj2I1RAquovr5+hmlZB5JMpWOo4P2QjlmthfK1komV1A3U3DlLO9g36ZzHSTTCXQXHuEujRQAb6tUJOm6W7tlaU1MDpwdMebiUzuNdRtZO7Yj/adGiRS+LmCCO8IcG6Y5oZRxQE/hu26D/0haIyT5w4MCsVsICfnCs28MF8Gy5jJFyhVS8RBNriBQjwPIarbonSqmTQgkPATntQ70tI/OsSbeahPKRkOzS/70kFJ/UuTdTaI3V3wxuPSQQVJBeZ9pHqkpDvt6byg5aPHbKavoPrdIX6zqkCG/XdYJXtpsLQuZtteYMnm/0REK5s+2q9GTYZbKcEgdxipzd1JkKupTZqs5aaTV5UQpXQpRfylmJd1j59jTmuDV8m1YO5SnfYIOFvqtdH31Mgh4FWFGeNW5fhRngyvysCeMYk4eFBT9muAPIRsTfzpaWa2pCkfUHUDznNgRbWauVB88MJIotOEFNstqwyvrApAdiJXOAbyMhntH3WGR7nCnGIjBMn8fyzGqPRGL3OyGcJ8lEx8CTe70Df8ukcO/QGI7UOfAgvxPq1D59+nxHY/iYzqM/IYlCVhLKVGBbB6oRZQOxUPDnQyd3PpPK3LB1GoG4QE3gRy9KZWBGma1wfXTa6o7xD8s50tQ7g+w/EjdQqA7alRh2VrD/N5c+NhS5re42+5w7o9qHZazYmaT8g1uiQvMQPohG7TSbNL/AbFez6/K473edPHZKg7ToUXFmqxeVPAlZen+Gyuecq2OoqDNC3523bdu2czT3bietXfd4b+YAv/huiOW5BvNCckMc5mhZz0ngjsC9drMbpCO26HrTqD4uq/jLGzZsWIO+IEYQKIk/199frTJO0V8imG1YxcgrVHdaITODBw8+QRPkismTJ3/2ueeeWxP55YdaxtpeLuvXr9/HAPVL+TKRYFbbApZXk223rtGPLZEs2YSDFxIXfb9UKzSFKqnaXA+bFnhiDbYO7U6Z+IsQTiBLZBDpWiP1zlYf0vUlBxLESoq3b9/+fgkE9yHSu8PPAspiF4pWn8mppyIHflVSOlHKKJdmK7hyZ7aBEQYGVmu6zkozgNWa+arFNfRK7NtrMxyqxEG//UZllDn4lo9q0ZkXqRYjGBQFTosdbCqkkB4JV679j0xIlPgA+7nbwsKz4tznysSlvnebt6mBGMnYrYJvEf/xSsPiehquhxLY6/44SKpufyfwQtweBPZQzI3q752ueMwiyX172VrnGbG+cU/gfqE+GtwIXYEo6v1TwB1RUFpAcWfgjqB4Km4Rngf/9W0ad2rRTZX8QESUJMVwvqk+2wKBkPKrZw6BioUCDks2k+J+KNjt03mo0jZKojWtKFMois5IZw8F7X6OpJCsjy2JIGx6J8n4WcaaU5l9RQ72dfregRRJFL/5kgPlkjXn8kBKRcka3iwlOEWKjzRlfOe1KHzmgjlaoLyk349S/x4vRflt5hvk8breIh27nNqCusYiHTtL/X+F5tx09f2vNf8/p99OtA96kcbkl7idknLdGi/iA7ovWbWJa1NG0DN6/wcd97gW0HO0871I7f1BIK+CX+Sl3BF/bBfFX7UyTmP9nIWV1aAkfc+qp4HqWV1dfRGoBynnBKZyOC5SKixoa7lYyvZdUqhd8D3r3PHaxszU/1inbD8f1+q5X0q7lu0N5XAkMCO1esKv2g5e2JHn6brXN3T97+l6/5I5UAeP7Rcr+BYnTuy1EJI8sF3tOkvfHSVL/l8kTC0SWizE7sFPQXDDW1IqBk/Xs4ICWOMsPXzTCHHib2O76uQHrGf8zv3hmXCgZojTnjtsGbXbB8skb7ISOAhdSxF8R42+Dm/5USwNhmZ19/GtqaSBFsPVWnxeRP4jiaHDnAZM5j3WShVWiKXp+5mzF4W/D0XI/2xpnVZbavdQYtGb+L7DtfTQurvBkKPYQV4ANzTut82ulWykeGcOlKViawuz3n4nBnHNBtA5KYKdnBNLAuPbYaMAHzKLw2PmQuCZUUg5jTFWZovdZoEdzqQSJ36LaN1uhrCAs4HzTcPGrFgT+kxbb1knm+QDDQESRLfHDbDN906nMAd2OOZDPvojNY4FK928A7IddgO1+rt2y0zeFnTOiyquMSYigddkEQJZQhFWjeFrNFdyatuPoSQwtpikI6CM21Hkauu57CZ1/N3APpF5yHw0tx+V4XS0jKDles2TkXQ18q25eHdlZSWcxcdIac/VtR/U8TfoGjUumtriYO9bpGjnOOC/Q9/9WMc8wT2pJzh69Oh/1g616VBCoD+F0j0i3RRhHUcKqQaDbK48ilfK7clJkyZ9QQN3Cznmh9JokgIrqxTyljc+/vjj10jJ9ve2OL9169b+wJXw5cKupkHbTFkWKVr2rVxmtKzaoynZpPfRUtLLUQhUmpCQfFfCtxRKSaMgUK7TCMLZEhtl2kYCYwt1v0lYW7LKz5dg3d5x4A8weqkRE43mrkARPM02DauByDQWs+61VwtKD/P9JsE6W5uQE7U5g49tNffu6t/q7HIoRJTeSrk+pSAKL657iZLusM8YZdPNyRlbAu/sYGKShODAXechFJ6lvm6xLahOZ5/lfQzPVwgfqLfJ9H+FFWGL8dz5VFFL+rHMJdzLfG2qZWBh19k1Ajl7o69ZkqqWkpQ2QsET1LOvuixVUaXCqJSo4B2Wa+B0w30AZhZ/O2iLXlaMKGZcKVjnEEVlXA1mnwO7ScFL+hqC8xRPcyRLhAWaSWWzFUc2nJ5vuN6pSk7JJxaNGimuIrc/H8/Ab36GdHWNSI2OIG5p6t5hkef9bBk/fxQxDb7kIKbK2eWUKF+jdroYjbOH+QF/tKzRY+rr66mzSM3CVWprX7v7sLqp9L2BzFVdawCKfMCAAZ/SXBqIrOn7TbJg75USH4eLSsbVmZs3b/4yOQAykpbq9Yj6dJ7nOCn9d6lP68IPzuKpOXK6FPGnCbhiFUsnLGZHqflGEP4Nut8Cjd1dzO2/ZJ7FXy3OOCxcR66jQkCH3QkZdSyT7FE9U+2h2TQROBk3blzF0qVLb1m7du3Q2bNn30VU3bSTlIUvlZLdQUUKDTaZPfh667SKniXFeQz8E+BZwQ5rsHdRNlwLQbn6cZR+R8H206CjcNkqIXxMoK5GKey3lYllCeJiKPhPgj26xkDO0326ui3dnR01VAIDImG53RFckwWov54fcp6d9tdFmukuW2GVUZkZRY3iMPwtZ5xy1CnLGeLWmXmRfyIYwTo8EdutmGgX2/XuJstv8PY3WOMqIskgCMytBCIJoCgVCMoZiREk6Al3hf2OkcwQSIOcU2srAhXitjfbcsuYZKfC+PCK2PKbRjKcgJ0ONPUmeEigL4qvpvyvLIZd7ZIpTcG4igNfHVSThm4VUmm+JPJUGDmAG4lUXgrCQsqfB0cu+TlbY92PggSODYSiDD9yIY1DzrzI0IZlSbWYj8DhoWOO1nUv0vUIfu60VU8jWCAa7Z4L0p68Leicg589vdCGq6LgGo1JqSPvNppT/uGEiF73LrNMk5JeaZfXfmCfzBFXQAG9cQb1B3XeZj3zPZqH+P5xA4JcaqUmov3/WNPTJN8T9B1k+xBi99bnFygsKmMDEnhSyi+R9fpPumaFnpeqK3fo+Amk0Ou6y3WN53D3Ua1d9yAITpX20/T7p2Q0DTMhWEFG2FrgpWvWrPl7zfEyWcUfXrJkyf7DZem+FB3q76urXkmuxF+tMk5XTwAErlU4q2coGM2QfA8B+OF8xfGHn1lCMVPHjSeYhgBKmfciBtezZ896WccLNMg9bT0QWFqp/pmo36dqRaZyxAu6bxufKSrJjNL/PUFgEPXnehp8kjiwZsHpBh8sEDImKdsztvzdTUjfTc+Cfxq4zTInOwzTPXbrd5QqgjzIViRQrE77QHt6l5MPJAeKBkSCXRYJLhhok5VYhRVlLtWfQSJf5EnXnlZctp7b7V9ucAXq7vYLpwufttqarnDAMDgUophqKLNIxS14Iegefmss3fB1WqkfJKtB6Ru6hrIpNdqi2AT0LYZANdhdUpYiLg++3GRbjbJHcdgvXeooeZJs4XJO4Sf9rYrITnRI3BZWbLGLCEuTgBXXTvzWQKtctw23U4Ut8KEa4znEm1lYvVDmD+LbDixmXdK+Xim6ThJKIEsHkQIGW+dBOrQaIhzd51TSyDEawtI+8EjFSVVn/sEYcNyjioCmF5GkOIGra3TEzsQLSySgJH/FB6LgVSRkWHmz2OySfO5SO3qYlpJySBwzVG0hGP5LfUdV5eGuELNNMp7wuEhJTqE/JOtUF8cPz/zCd89ceVrnkH25o0+fPozxlVLEf69jiqE7gDlR7zfo2TF8HmFRozgsNKkkX+m4c+Cr0HWQz1GyrHGH4KJA+Vdt2LBh/LBhw9bOmTPnfCniJP35cLrvf83EdkCeDha6ONyLY4hzHRHp0OAbKWUjRVhgu6KOzacj1KGcA0GRRmGMHTu2RMI0obq6+loN2OiNGzf2aWhoKJo0adISfb9Q/5+EcMNHMH369E+uX7/+B7KmTxk0aFCTVtUltbW1k7QIEIVHudfq9Rut5NR6q1RbhjijrFFKucEVKfDzsnW6SdeESnO0voff91j4jiVgN+tcfJiTNfn+E85faraZ9nGHVvW2bdu2navr3OvoMq4H/MElrktH8A/85l7gdOB4DU2D0L6vq0GXmiN2v5VXEIrvc2CtOLbGVpwdKVxpgxVywRMynVSQDyid/y+zUk6Xgc+HgreFXupJn7flXBpWWETrU/harNlSuwbaHCwKIvNIhug0kiSKmHaxQg5F3hILg9vZaR92mYOH7EiwaumLemcMFoWfOkoDuZ3BEdzqawU+mIWBhZCx5rplVuC4GHAmJ2RO+LE1tn29u4OcqdXKI0oiRVsh5EdGyFYjYElGZr0Z+0rAMhtRtAvcbrhRPD7lzlSscoVkEDRUW6lhRycZQz5hPmvZu3fvpugrW8jsCrt7p9XunQJBTRBDBEVxxwxUm4CLgY7BdQVCgnqJLGjI+1jNxyjxRUYq8ZaTdL+p+m4NlLRSRDnde7KuvRBZhgUP6xdKARlF47TL/bIMRRAUBMUpHtBBxWzd704bF2DH15IsZTz48brWVKgECB6qbW8gFkMMQPOrTdcaO2XKlJtHjhz5ycWLF2/EECUD93AW7P8GT4xLavDgwcBnf7eLAgbBv3ZoWwDXd+5MEtMIyOUPR2+X5q+N4B+ftQC1z5s3b40DbYlLkgQQ5qcGNvFhUZRUAnO7lHMpvuKoECtFfDQrqrY5S6TEJ+jepUOGDKFQ5U0SgG5S1jv1+1h9f67ej4PQhkVBilkfWy/T+7/qfa+rZyQBL2g4JYxJDS8J6CcHDhz4j5SVh9xeiv4ZLQ7H6f25uro6oF5A29rM6pZ1IgYWernuX+osLYo09sPypASUOQB22kottd+vIUhuMgfq8+2ztdQUk9pWWlHmRfa4vJVo1N0rCx+qFXgEyvZbKUfJ+HAF8P0+s89F4K7R9ygztjpnRdvV5DfNkdnmlOgeKWs9FoxAGCQcwfYvF6UVqduKgm2NY7FOsV5Rci7b09OumhZXrW4znvkgfaSvVXpIsc2sFzv6k3NboPO0z7eURdolhVDWDWR8ssBofMv9zKXOZMOyRvlRXLNEO7EatQ92snKN/QtGcrDQwBJY6qosY9y3LV4wunpXQEyBOnq42pbD+9C/f3+yET+k65xAxRWdAy0sbUlcWqQoZw6U6sLK3++dFYk6jZaZAXqWyVKa8I2s0fePBpbcVW9wFw2x9fwccQq9V1JnjnGTjN8DSx/tkrLFgl2t3/rC0SLlmNMc3KlnPn3t2rVX79q1a4D6gExJSlN1Gj/ekOK66JBcUFB0vO6L5jvBrkBce1N07btkxPxac3iADKQrzjzzzHfoXj9euHBhwjvycuQ+/xvLOAw+AAWvCpxxKFoJKFHbg1lMTo/9Hx2TXulYuaRIsSg+LKt4IKu9PmMFl9ifhnburbdVEyZMgE8CukR8aayke7TK1khYZktQ1ku4+si6pjz4VyXotw8fPvzbOp5Cnb+UoNwh4TpN9/iKPlcCdNd3zLgz1OYbNZmAvfV11LqL2jOeAKAEfYDOSTDQutct+gxXw14JFMprN1ttlyPvVBvm6zqM5xb7b6ucCIH/dSe8uqSE4qpASO1T3m3FAaNao/2/uUBVWOijYkTgizudIltm5d1mToUiB/k6jDftbsXV7DTXZi945Vb4VVa+jc7YKkpxZzSnSsJH+i2p1V1drqqOmnAOGnW1cu1IoRJajPpIiHqM3MiEXznliyVrrMKolCRRAcVDX+CHtwukq1Eq3RwQiioc7Q6Y7rcyjuSH4IcId1mZg5lArnA3bLYS72LLeJgV/TbkFcyjU+lRgOCy6zX2E7UIf5KgpOSOJIgVLskUPv92K6aeftb9XqQSgicsWCkiCrVStYbahe2SzWu08JO1erNk8Va1hcSk4VKALHhVzohkS7+VRBUUuiGBOfNvkxnXoGMfOZBj05Ekzpitbhv9ToapfiPRBlfNayB1J1gK4yGWuI7rrflwvH7HtUB6MunweVKVKysrL1yyZMm/SlFjiZMrkMM9YfdVywEPZR7WQ8jmsYiHMv/1fi7Vd3TvR/Gbg9yAtU/zD6v877TjfYfm6UI8AVFkIO27/WO7aX+f5JAjIumDDkSx4qbAqj2U4u7QjgmnPMcOHTp0+oIFC74oBfpVnT9bgtCLbJ9t27bNBVsKjlQKmjI5y7W9eQ/avk+fPkB1nrVvLSOr+GQmWFVVVYNeWyUAQzdt2vQtKlzoHl8g+QA4mv1HSQFJtnX6fjZYZPhUda/VDlrB37DOWWdJqijWDwoatIba0SJhvlYTiSDLeLZy8LLqtxM14R7Bz0YgxBCjQhQw1f2rnZlGJtpW/Jn4mtly6hrbCJjgu3Ywrsj18tpSMK62AP7byovsqoBZlXg7jMW710q1xAqiq10gbfbTMql64wcnecXWa71pQMM10mK3TomV414H20oDIZI5UIiz2QtDhRVuPvg3IrEimMxSdeICMbHfZDWlVtw5W4TdHURsoH94zxwgf2Ix6OJAJ/58lOA+J/l0BuY6+syZcQX7kTk+gdnZ2qZsFNl+tbgB4Hq2NRuByMHeqZVJcUJw9FW4QRh3XYcA3lbvSlrMsgZihpJQveFvoMCq4yVYsSNgsJMCeo1+Wy2l9Xm9viw5WKv71kuBkcA0TPeYruPeUVNTM44xYpHQfAjGvCL7qclyAy+8Gu5tCseShYqfm5qPBKxtnRcZ4TJN31FpGYTFXTrmGfDX+h7jAN5q3CVUxeH8VrV/nGT5smeeeeZi7QyzUS2FDEy79wqm1mSc4aoeiG9ax1F78nR4KNTm74BWopgwfNRktZKlpx3lvStXrlwIQ2OkOqcV8Esp4t+32vOrNgMvOvSAQVHIpjvNWVxZ//ZbmXcIqqxX+Ac+O2LEiO/ruFsllGTc9dBgvyDBHK/PFLy8Rwr1IQkHvp+7pITfDZwMHDOEJqyuQKk04OCHe48bN+7/sfWRgv6sBGyYhOTTuuWz2o5+W5/nA/ORYDzNBCQjSIJGxeITTDMJNrKfgz0bqWbrJlMnj4w20BoI4CVq040ItiyHc0Fx6LVBi8lb9P09Ovd+TdpZxu/iJ4RIG8xxE2WLdN8ZuvYaW3j4LkFykKVGgkaF3Ri7zKdRGrwH3oYW7BJpsZJNrG8r23r7Kzt9Tj6wuN4yE2xM/lC8RN+NjMAS7GP3R6MVXzenRHfYL9hiOs+yeDnFN+8If0IzGsrcSjl8u2VWlh0BEfMCUh61+2wVtxouiYKBSa8SDDeLgeGIUZEil0JURNJG1BvMeQEJ3znP0iUqnJjDN1kApCzokzJvqduMjmHBWqfzXzCzGW3dKXnLOksOzuVmoJZOsS+yf5fzcpKxj+m3uZaXNgcoMRqqZW1+EbIryVC7FB2W6kk6j208VLHPyvIkdfvXMijapBQpzDpQsrpG383T/0fr+Gla7KdJqd0nmcUKhod7CVSwBLdZOXBBOE7AQkQ2HTugVeDkSYvH2JFsznC7avQse3XdURRz0HVPW7Vq1Ze1+AyEYwZFbDbFFmcF4uKjbx5iB6DrTdf7ZB1zMzSaLYDRu3T5Imxsu3bt+qzuD5x0gZ6LRfwkyf3NwNfSnBOvxBL+c2GNj5hKHwgtTFBpgg9boqR3HuQlTXcu1oMs2Ndg/YwcOfJXGlQwin1J29SgDZTS3TdgwIAHJYj74R7Q8Y9JoB+RIANEp0TQs1LoQyQg+AF3SLG//vnnn//0WWedNUGCte+xxx67QUIxT5b1A/p9s4Ticl3jvTpvMgUQ1U44V98tBbqb2nhk6+GfpnYefj3K3eMj03M9r982sDUEn6oJcZxexwwbNuwrus+3dPylVDCQQP9U/1+me0xEURvjPBI8rc6DUAUkBttVJhMBkx7mFMC1QULFIk08AkUD7O9NCp+6kki506bzoaCpEG32rq4OdB3kQrAPN9AI7bYUexhmhzUL0qCrFS7b6YZUanXGAaPe9n8WbI3u8zVbUgkqKDGy3coDTmcFXmT+iqLDYKeL3a5Stwml2RZBQBSF6wHiGgG+RfWRGj9vm7O6SoK5LgKULjPf6f5q832SEkzhN8eXH+nbumZt8ERkXiwKGzXmYDnDEmcMyeJjMUwga/CVGKfMDqubsdjlIIn0/bV6/VRj3GZuCixKFn5S9ve5WvPb9f25kpeNUnTPSP4W6ftndAyVljvB4G/YsOFgkhRuNqBXOnai5sUHddyJffv2fQrKAN2rAZIdKq8UHfjrsCsr4zFfQ2UTXGCaJyBJKBi7nXRncOqaY3s0p+CpuHzRokUfl/wSUMft1oa1rN/2gLRgJ6f+WKJz7le7HnfCSII4gVyKCu7MSR1fqh3s1zBqNIcexc+uPnoXBUw1Z5peifL9U7grXjXK+HdxjaYTPoICD6e6hLCLBqgKZigp3blDhgy5YfXq1W+gEgCAdSndoVjIkR6pFb1VAnybFCyEQiNkQTwigSyHwFrCepOuUSxhvVC/v3/btm2njB079kdSsij8D+m80brfNVKeN+l+EM1/SkJ0N4ELHXsCk0yCQ948uDS4VnuZF6OP2jCtR48eWKuA00+l7RLUSl338xAWkY4r4b4AJa7zbqBMFG1mV6B3rE/80CjoZOuGAsEKx9LUMUCQhloZMYF3cI5dDKXmkIDCkIoV1YG7xY1ha7ve2+X2lBXc7oWv08olqVQCYsAR+iAczwTpED5aAl5Rhsi8DXt8brhGuttf2GkFGkG0g6XlfW4whpVHuyL7zXLQFgTn5mIoc7ZWLDRRiLPJLhSUPfdOOKgJvDkdvd2WcKmz4UqtjEOxhoskY97q4H9IwPDEJrzwsLB1N69Ku33ypSZq6rCfOuMFLyllRco1Pm0sdbtSsnazJIu45Aa3ALsc3FVTqY7Mzk1yWgfqR8r6csnC45LXFiCtWKIvxd9L+2tqajByVgwdOvQKKeVL8SdLno8i2QR6UnY5ZDxKtgc7ENkbPg/8wewsJKMw543T7z1J0dc1ULJA/N4txX+c5gBwtMQK7t+//wItHFTagX+YHQ8Qufn6PJ+UdfzoxBuo5qznmaPv/kFzZBn109avX3+pLOuegwYNWsIOh6C77nm6nvnRKBr7cuiHvyS094iAth2uFMpLwVMAfkvpAjk5SsprjhQXAZRRUqAnjB8//lSUMaW9Na7TJWiUYyqeM2fOeVJ8D0gQ4Vr90PLlyz8kJQuRTJGU4W5ZCbdR9FKDOWX79u1HoewlqNnJkyd/R4L1wOLFi78vYd3CxNZrsYQO9rbxasscysOzBdy8efMoBxkTNwBBDL1aJJRMpiL9v1+r/g90bZAYF5HsYfwoftOn4T0Gn5k5UO0WCNVjlPmBkQxXAH5i6n2Ff1bH9gOG5CBefyMn2uwyiC1xg4tB4vft6+18WyQDeEs/wFYnSpMtPZZS0GoGb0KbXQbF5saIJBEUF66FPlZk++xz7kwln5SYurHTyjVd/bgzsMCp+EG7sc15K/bgrCikMstygbPmO4J2kSJsl0K5qSQjDbhg5djDiwO7hma7NRL/rxVl1tzFkdWWpIWr7/FNY3FGoc1CipwClw/oCmq+YY3H87d5l1EStJmpunUlZpxrtQVecCJO1inhtJ3vxpvXYSAUsJLTx/XdE1J8Nez0UE6xVX8lW/GItUyaNGmAdoEf1LVP1fN+X3JMYlMP/MK6F8lPYJ1xpdS7yOtMyRsFeRuxwvX/DNxrFJolF4BxoxCs2riF+AW3or4g/C+4VXTPe/VabPRQmefJHl1rrs7/mnaI9+vzP+hz/bJly57YuHHj3IEDBy5QOz6meV69YsWKJVLyKzS/3/jss8/uTCeMHS7Qdigs9g/9sys0M2XKlFeXZfxKOg1FLEFCUZ6nwZ4sQXqCFEvqtxEs08Ceah7cCfjD1Jkkd7wAXd+4cePa9A4B0CJZqc9I6b4e/5Os4c0S8uVbtmz5sK67ke2hhL0MS0PHHKfb9gJwrgH5uRaB67Bmdd4b6+vre0AwBLmJzl/F5FmzZs3oKGypyUJQB3rPdgcvSnXeO9See5xPj5+YAAtW4Vj9jtIjqEJUe7jaPhtaTp4Z4npNPPzTkBFNAFhvjow+VsL7jSZAcRH5RimCwOiv46tgnTM3BpYcCgflCYSu0YTzWLQgEwYZ2L/ddIxdHUg8yMHgbWy5lWKRiXSw7vZb8WSMuihykC5vKtCclXW7lU/giXOpNOtE+TrFOig690cNN1+zPQ3Xc0pyT7snULA80z5bvDlXxw5rd7eVcoIKwc2SOcBCV2r/LItXk4NqSaKLxoCA7Jv1Gi3l8l8a902ZF0tXFTufAojgBmda5gIGZyRJu/3eUZ+uJMV5nNM1E0Ii80BEsg5W9yCqZEgZPEbxVcnSTqpdw70chstLlSI7nDIKq3HixIkoZSpdv0fnUy19GvKl13JZoc8DF9Rf4jbR79DLnq25MFAy/hu1tUjyf6XaMdOuRSqqZNVHefi9WYgcIB0ouQaJQWLVvfpMJl6L8dssWO19+vQZIgPmWlnA3PeD8+fPz6P08KfTVnadBDk1j96nOdZLxx4vpf16Xfe/WABeagfNgvOn4Cp+VfmMX84iju0Xte6kSN9QXV3NoDRqUD4OJ6pW5Ce0VTtDW6ZZ8BbL8j1LA3wvfjpteabqnEH67j+kGHeAfICwBEQFgRop4Rn49nTcIK3Gux2cSu6pVXq6hG/6zJkzb5KF/LGFCxfmJTwXjh49GkTDaxYtWvRv4E6l5KfhN9ZCsUrXG64JS2ApY0WaczAjqS1XW1t7EUErqlMQxAGqpGN76hma1Kbb9PlBKerj1LbpwHwoIa92P6rv18GTICFNotmGt6G3oIAEakcUfLtdGvDIUodsmfG8wO4SAnoSufB1spky9wJ+aPbZVAYBN0qK7yinbDcZehbIjLyDgsXm+t1nl0Gxg3et9pcGkU/GljCWdM6WcS4Ftev0tr/DFI45W6UHyY6c7NPhY8Of3WqlfrCGnBeTXvYhJ6WIbBm3mey/zNZ6uxV6sXmNg1wdFwHP0C0w2FKCI9nFqB8fU5+SnfZlXfMKU2rGeWX2Gx/kLHZbE1ick/IOJsw4aFlk6xdXxN87c/CHZGziQyYIC8uf5H0V/L+yDDPB7x0K+BAu5f/h5ksrYY6Dx2XEiBG9NUc+qPnzTs2PZ9S+u3Xd5eCMjfGH9hIjoxuVm8FJqw3PE/DTnLlM7XgL9JQgIjSnngdZQ39rTj2i5/iNrnWM4wnASSGJwhp+zlmCHZaPfVLcA3S971Iaa8yYMW9nXmGBM0+I82gebNT73fr8JhkwVyJKlDXSX00a3hqW/l9C8b6qlHE6p9z+UxRxVkr3TZQQkkBNAQEhYe0tBXiilBH1ymo1kDU6bhMpnfr/AR13uibUhVLSCzS4vVatWvU5CdcaCeaXZR2cu3jx4tNk0U6zAp4pRZpso2TBQk7ernO79uzZc53aMFLXW7dy5Uoqh2zU+TdOnz69oG3TddTWI2AYeFssYU1kIt74MhOlRCAPEiMmLu6R8H3jH+RZ4XvV/T+hezyk+63XpNnijKhO/f9JPdMtOpZ6cCer/Y/LWiAwNVTXXIpVp4kwTtcB6UHSykJNpnGURidRwEE3LDUyvLC4ZuKzw4WhdpFFCGk6bgygcrutdCvMb9CcIqppsxVcZK7nhPAeUiT7UXMOduW89QdHXWzl0Walmwv3QrgrUOQuVIol3egkkuJwSdj/HWxnbaninPmUxd5sd0aCvnCpp6yt6yafV0iRBKVdJe32cQcTGsG3guTlXfBdA8WShTZRMvEEXMiZF0veZ5wFWWELudUliLJuR6fxy3kjY8LnXebMOPggII8ivlBvt0/wJfNdslCC3T3UCj5cpfQ09JM/kAwoYYp86v8Tampq3iM5HSz5ulX3v0+HrND9MRaAUlZQNFT3mq1nHIQc6tXJbk4yfiGBOf3eWlVV9RwuNJ13J33DrsRZqfiX9xqRMsIJP6tA6sTiBuJH16zUvLhGRsm8s84663WaT1ANHCR8h/tDsr5R97tQ7Tpeff4NvWZL7uGMoZRTT7WhkSKyh7o1D81N+LODEP7aC5K+ksBerIIaFLZEZ23fvv1UDUpByniPBEtju3citbQ4ToJ3M5zGvFBGFCDFZaDfc1Jqo+GJwJelQf+ptmwPyPK9VAOdGzJkCLA03AsU3sT/1SKhSJSJFPjJ2ia9c8KECct0j9W2eo6TUr6PKLUECp7VrASMyiLgSLMSmHpZ0C9IgPraB1uktjervUv1DlsbY1Vq327CQqfnqNQ1ZksQT6P+HoQulJhRm5/S83yANun8x/QcKNm1ahuVSNhigmN9igCd2jGKwBx0kihWM7lRvXeo0RdQHWIZwx8xnLRtB2vIAmyyq2KAfbfNxh8X2fJloULJVZExRXDGpYD2m3c5lGsvSum4XFJDpCSbfznq95VaYZV6ArEp6Wr+3XYrSCZnyyGVkUuNQ86ZayIY2aKU/H5Tcu5z5YqCA3TltoY7XRE5qh0Hf3A2VTsu4dClSKn6+DLQLhqDF/T9Vfq/wz7agtE+7SkeDPqnr33owS0dwdGMnx1WuhbXSdxBdqbGZhmFOZ0AkiwOOqa/5OEMyfNignahsLzb+i0fqbMFk7lP9WvKkGmX10svqjKfo+u8VwbL68E4S56whB8j4KpT50le4U5BrsC6n6ln3gqbmq5/qgyZr8uCnU5tQynRWyV/n9ex1yLDepHleJrk7Uy9nw13OAkiHpu+Xgi3OLsSDHW9zh8hJXqt2nL6aaed9iHJ+s+3bdt2MJlLz4p1/BbNydM1t5HBR2VEfU+LyGc0V7+qvgdjPF3HMYb1hytU/Me0kq1zkh35q1oZH27lRxil5IahjDWIwJao/lspBdpNg3ajhG0AjE9STA8TkdXnK4CaYX1Ksa4cOXLkbfp/vFEHTZyjPrtAq/8ACVuDBh3uh7w6H+sspz7tqgGHlLwIblbdb44U7C3G0s6VkGNZPKjjB65fv56KxQmvLBNG9++i76snT5780NatW6dxDQnsXrgryMPX80yQwNWrvfBetOmVNUl3Fm5nygOR3aXzjrfFf52uebLaNcPBPkjxIbrP67gptoL5jkywvba8iIx3ITmAzDHz9FY4+LbfWXubrKxH2+dZY8uYhI5S+6RzAbOyQinYJTDBJY/2O3UbCxSfLUREu+1T7u0K0+kqFxW2QqPScLHREEFS1N2WVYfL+cT5bVZWefNRRKZhUbDGpXzQUQYplG8+Ejlw5aRdHPjMScYBWoniJDnBySkbCNDqNV/X+KbkodFwugqnMncN+klcIfY/E7Bkt9Bof3fWbiDStVu98OAS6WUOk6SaC7spKmqDnvC1eY6puLQku2VSfrMkTyxqdfhMgX9i+aLIJBsEtbODBg0aJvm6ULLwaR1zsebI2Tt37hyjz3A/LNM5t+oZHwALTTYoZcR0LkG1U/ALwyus+03SeV/SnDpNMvmElBHuhH/GJyxZBRd8iRTiZ6RI37d69eozZKQcxT10vwv0+0S1H8gl7gow+qSSUxW8u651mubat3TsnNNPP/1jut83df5vwVixbLWQlOuacLlktZjgwiEQ2E+KnP/zmgNnUUlE7X7u0GLFf2x3xe+rjI9on3EaM4gyhlAFvgkJMZZgu1btbhJUtk9M2i5acY+XAKyQUD4sRbtN26seEpIkC4h0SgnUJ3UOwbJ5WJ4bNmz4TOZASm1GVsAg/FIa5KQkEPfVOTq9uZeu1yiBgoQea3WMBL5YAgsN5y+XLl1aOO644z6mlXu2FPJMTYoN4EUJBElYpuh+bAEJdFDOe58nI1Hm5XoOip02qv0rQUdQfVr/T5ACrsCKYeUnI08T4/2ywo+XUFyHpa7feugeoEh6SUiXqS9u1TkEXEhrBZCP8K/XMSiUwbrOOCwTMqzYNjoAhyUI9wBtXZQ/8Nc/c4DvAlIYiIr6u4bePqdVY2VTyRmXDBbiCvtJwez2swVIggrXx8LdaUL8Iu9uuhq90GCF2NXk5iRTdJjDt9iJFShWgoktRomEFVtI4Y6DuS4IfjrtGigybvggh7GhakFOFHA22tiiCTdZbb6QgJnG9k7p3F+BwgG6pgWXQBTBTxaVTqdbN6cCZMEvnKR9Q6QTSpqYQOwC8L9S5dpsbq3mw643a98QY25ZQFCOLUZVPKu2HAtMTJ/Pkmw8JgX1NckxLiauzy4Gv30vKan31tfXn6xrsfNZCeUlfQ+OmFgA2YaSEfz9Y1CQ4JJZjPXdu3CN6PgGKUuqXk+W4qfY7nd0zgKelcrLkrnvLF68+O3sBJmHPK+MGwq1Vhuz3i55P1rziESUBHoqGTwbuWOsYVMEkve6173ufN3nVs2Vg4o0dr4gRHTef+v+V2H86NpUdb9Ac+ojixYtapP8t40dO3ad/t6jOXm7IZz/Z/6OeGWcTnXUYPRbtmzZpeS5Y04MHjy4YdiwYRu1wo5bsWLFZRq0FyQo5bKc2fIQeHiSTCWCDibYaZVSu1oCw5bntRKUDVKqJHi09+3b9wWD+FEClVKeA0yjiQuhBEtVwoGiAYReI6FscVXiBil1rOyrZQHfRFaSFPq/EqnWvd785JNPXs2KD/RHAtlXlvXdssCxbH+l7+BofZ8ED+wMlaafxDLVMxDhHiDhLImtqRaayXqWf1M7F0kQ/1ttfJLaffruDVghEJ/r2L6yLO7XeeP1/cVsRfF3kp6NtUflaydpoBAhfoFTYKra8ibd/0kQBHoneLeDNPJUBlqF/ZgoL3yo8O6OlrIfZwsTBbXFGXZ7zVMxyNzPu8waBo9CS5SWN4F9kolnutAWb2k7jWNOEBaue9dun2MCs3PGW1Gq+GbggXNW2HmjGTqj2oWVcQQV282P3Kb+nCVL7LtSSv0kT7+UXPydxnmJlBv42pzpOtkVJKneZp07iME2jSgLepkUCQvM6Sxmej2r7xoMpetw0snmSGjhXD8naA+USr2z+Fot77WSQYockHbMYnEvtJYbN258F+NgLolyB0dpw2Ap1Fv0QpESB4AUnv6n7mCp5LUJzDsZgJI7dmRwKc+Q7L6dhA/4hdUXN+n1TgwaF3g9Xtc4RdbsGZozM6grp8VgtXanD2sBuwPYGjUjkW/+pJwn6kUC00DJ4Fi94ArfB0pD83G+5sXP16xZs0FWdWbChAkQJlHsoSPmN3NNcrtv3Lhx1y9fvvy9au+FQ4cO/dTKlSufw2BiXmtO3aM2vo4+ISkkuM7/LwTxjgic8StBVbAaawAvuv3222/SYFGosESKlHp2bRpcWNl2nXXWWe9eu3btuyUo5+s7tp+nSdh+pb6h+sDeY4899h0a8MckXGdqcC+Qcpys4yeMGDFir5Tp5yQcvwYPrIn5dSaiLOEJWsFnEMjAUqLa8OzZs2dJyEgP/bqOvXrVqlU1ujbWd0/9/gUtDK+RwLyDCUE1B7XjZ7r/DAlQrQSv36RJk67Xvb+sc7fo8z5Kj+tZXifr50pz1DZp0pFO2jusLliw8ElHYAarQ8K9W69nNbEoi16tCVet88ZqblxGdV3jiHfbJ0s6MCncfIfVNhqfrs55WO28FfSEscpbXWmkyuWeSCrp7tJJbN8rHdwKBjKa09P8ut3NLAe8DNJ+XDksVlA8cn6VnqnKwcA2c0LvtvIps4WbN8F+i5VokdOeuwTJPt1BMoldLVlb5eVW3uGOCJREIUpUpeq9hX+4U3JSqf76uSy1cVokv6C2f1Ptvknvj+j7n2C5G+cck6ozatnZCs9HEVGeRzL4Jp33jxqXH1HdWuNxk8Zuuy3erJ+tDRSB6weWuw/bg5aT4+xewQ3RXwpwNDsFySSQr1m4tfAvs4C5/BdtPEaH75As3Ck52a7fOaebq9Ow4OI2GqXn7a9r9pUxcInmzum44PRdvRTe94CMwbWhc2dJLj8smaWcGHwWJEotkwLGZfFr3WeRnnGv5lDCN56uNefdX2J4AINT23HDkOVM1imuu4RlbdSoUSh1sM57Nb9aDqXF1e/wLWFgbFY72rCYI8CH7GsXOhaSK1nIC3HP/qlcs78vzviIDuClO0XWIERC/6QVcxKE8LJma8gckuCTW1+qz3s0GVZIyI6V8tyj1woNZB15+kRlJQhdQU9oQOdK8ICPrZdw7dZKTBCDEkcTJCD3SmioBnKFrKP5UqQnShDJ898mAblJQnGU2sFk3aX/z5JV/qAEsFhtKNJ1SvXbbfptKNA5MMBS8vdrsaBO1w78v/hh1b7psuAB09/jrCi2vlSGXiPDf4XuT52xoRLkNt27BusHd0MQXAdcSd910ZiPhrJTx8yE4lPP/Iz64To971F6puOMOYYz4Kds6XQe1IpHY/2iH0BjmBx9LaRHek3DsgV7rN+AzEGvuM8JI91cQBQLtB8+48yBuncZW9u7zS+RoDX023B+Bzeq896lyYnV+qChZShaLOJBBzjTExQFihfYXZI67QBYh90jbcb/Fgx3K7dVXGxei0hkOUiEZP9tpPcWORuuNBAY7JI0xqdKni7TGHZqAb1O7ca3eiEk5+q/FzIHSjuFjzptHOScvAAtZUI9ivWvZ8GlQ1YbyJYZoHF0TcoK4UJCWWGtj5LCm+qCqliFjSZUClJ6FrRups1k4Wu1wQWWPo+CNW9FL8l7o10tZMiBjEl86SBkdD92cLitOtWOKskwML3X63k/Lz0xEUpLyesvJTMf0Pk/0X3OkyFxoyzgD2IMaHG6Yfz48f8sRX2l+umrksu7NJ/W69WCUg3ccvqFLOBaQ3lCiat50KJXB9holDGK+qijjuqq9r1L9+P5l6GzDjUgMaT0qtML3pWDCIkot6bXHug7acefElP8twDeSwTzpAwHajv5JQnJU1KmYHTZWq0ZM2bM/5PynEsdOynEkdpqPrJkyZLPyRJ9QopwrZTxU5ocr5VADNE7VtQonddF1vW1EpoeEraV2v4cS5l3AnRs52CzkgA8rz59oxTns0CLuBfcxrruD+BhkFBeIuW9SsI3V4pzM1aCtpDN8CHr+HfrO6BB1frutTr3x66IO4eK1Fpt79Y9H0dwta0jNXqW2rGUYprwzOi6t2YOFOyEzKgvChuoHJYHAR8mQpTjsS8VSsT+Gn8Wm2mQjps7AkJygoDTDtTWLE0QBUxWva+FRpRUUxSit7p98C+aRLzGNIyj7A9FeZcbQtZma7Wf2cl6un4awTt2DRvM7DYAf6i+m6i2bNa9CNaRno3i2onyhnsD9IUVNMG4rk4OaDO0rmA/cIcrVMfkC8KhEivneIZMqsJIR4qoHrcSDmmUNIk4uEUu1fgQECVDkm3+cIig9PnHGoeaVHJHEAm122/M4sCr0/GMIgcr16vv7wItw7jp9wclFw0OmlIBHDY1FiiqWjAGpEHj6oDUiErlo3DtgA0n6KXjcJX1de09iqvWYCHj45WSWE/mnMZwtWRjixQdST5gxAd6l0E8pRL0kSzdL8gCvWLLli2z+E1zZYN2cx/Qff8VOJte79YO7xrdb8+MGTOu1lx7v9p/vebbSsl5PW4FXH0Rv3mpYp/hLoiElMgR0ByEpIuA3Fm6zw8ee+yxv1Nb3qS5slX3fhYWtkMVMucfjtecazPXqCL/pwrc/S2A9zIuCrY9ErIzJFxLZ82adfbjjz9+F8EyCH40EB/TCtmf3Hj9Xi8l+19ayZu0Ms+SZfmCFCpppE/o2Lmszgyizn2jBATsMFUMmqZNm3arBPZ4TcAuwGgkNNfLUpqva+zSOUSK+61YseIYDQzUmADzR+jaezzpjtVkACpE4dGMtk57tEBcpUn+Yf22TW2haCkoioVqJygHXC4QryRp3VLIWLXHqo2PYbXo/TntAH6o9t6hZ/8MiIjYlut+uEO66Tq9tZDAX5AlJVb/wwSWCKUmzTG6/jGUncIKJXAkgadK9eM6bg7Wudr0Q/yVBChlNVdrYTjXwH9cDuNdaSTx8eKuwI+uZ8Zqg4N4EpSGel+l/mq3csUdwbnULEOx4sLYQFVgk+NAtFQUwSsSC7yVhpp0sTMC8a2yA9jjIgJY5cEznHeGHL+xGJQGUsFp2KAzyp1M0mLlnTVSYZ/6Eo7fsaT/6jcKazZoN7Ny7dq1pzHhTN9KsHU26e/Ubgt3SWQFRmKLM+xAk3Q4YJl3AgeLFTskCqj+Rs/1tMapxZmDKHSoTteS+AA+GzeCSfYpXssCya4DqFvexO/H6n8W1sW4vCCywgWE/57FWXI9G2w4lTr0W70UGqnNWMBf0bNWSq5O1+L8WsnzCGSEwJt2akAxf63jFureT8tYGKNn/gloCFmsV2pcvy8lWS+FmXFx36hR+QfBxziOLb4WivNWrlz5Ec27k1CkeiYs3mJZ4l/S3LtHCn9LmlficNdPZxYerk1/C+D9mZQxFqGUzGy9Y4H2lCCSHowio5bYHPxQpDJPnTr1JwigJtpzGzZs+KiU6j0a8PVSjldOnjx58LPPPvsmzmN7M3/+/I/IKp0vZQR28QQJ6RKsG117kq7xEd16kr6jQCqWRo2u8TX99l5NhJNIB0V4NPEgnumOTwwXAO2grfp+kSzdmzURPqHJfbnagF/v/VL4c9jB6DUBYSKJRcL/flnzT+n5+up5hklBX4Ww6RgIyD+gZ/kV+E/It5nUek626RATlbpUT+KHC/wp7XIFY+r3YcVhBW7FJ6mJeh0YZfXhXLXzYd0DnlyIjK7XdfChgqhg8lK5GOsav+dxDvg9Bek47gLd7yzgS/hW9TvRdCBq+H9hvyNoVAH3gInduziwtztl3Wx24ggWPYpqj7G9A3XvEXD24id1kCrBlIJjJlNREzmI6/MO3oHMgMYRVEIPW7Mcg1JskSIYp2PfpuvONbFQufp6oOSjTItQhSs5dEgZd8X609Z9t4uCRoFPFG27g1QJDtnQtyIneiTlqsCWMz4sikaAbJFyQ+kMN68yVv04H5f4mukjArZWQPjqORdXCgyAJGH8VOeTWNFLCnYUFJjq+2kEfIHAaQxJGLlNx7MLbJEcY3F+jtgEuy6UG0pYMrRFivfruuYPyUDVQn20fv9nPf87gIhNnDjxLdX6I9MvIKSHKrs0E9rLsaKFEkcepYg56Kt33nnnR/le96UoKSTzTUBPtRAMZjeqMdqCofRyyv5wfBR/U8Z/oT8J405Zjv8AdEZCOVbbrDoJZtmwYcPukVDNw3rVID8ia+cabYlu0rEXaKBPk0L+Tw18qybZF3TcMVKkKCCEpVRW9Aad/118iZR8wYphoiJvshbmMtGlsLo7UWSjrN7+EuY3QNojK7NNQo+PtdL8ytAhIvwoGSLYv5Lwla1Zs+az+m2zFPRHCTRSUJE6e0x8XWe8rn+mrnGTBPOjUsTwJddyvizkvM4BWvdrUk0lxFP13KdgLUkhP0WbkFsdj4IfjDBHGXn71XLUDYMLWm09U+9n6pyVOvcWsL869mQ9EwQuq9QWSkUt0TUGWLFMA0Os725AaVOs1Qki5KRWAz/CyoUtL3OgIglKHEW0R+eQkl2iawKT6+Zsu66uCtLuen/4VndFNWxQFAQZ2Wrr84lgVinPhC9dfQrHSJXaASPedJ03Bus0c4D0KGfrlFprd+jYh0kzx8pWW3DvvFPtuEjtpKzPLfr8vF5NOjavBfcqUs4dkyArElhaVn01V7IyGAyw7jNWcjGTtHqSb3T8SrV/t+F6HaY4BYeOtRulouA0xspHVhIfsn6iqjKJNjXGqON6oU+mwCni4B2FOQc4A5K0/dWs8bhpNE6jNDYXUJlZfbRc/f8jXBd6LmSNrMhTtJicKPmisAKEVFRUr9RYLNAC+3Ndj1TlNfqfGMM3n3766ctQjEcfffTHddz3ZaQkMhPJF4fzw6aV78sReoXvmMw/ydrFt91220f5Xn1KTKeaILD6HnktNpti9uWKDh96z99FKvY3NMWfwWc8a9asfhrEb0qxDhk1atTjDz300IeY9LJYl2LtSJkNkxV6PdlK+n7q5s2bZ+v4fieddNKV6qObNm3a1EVCfJQE9itStMOYfID8JZTgNLtJMf8HCRmyZk9CWWhSXtKvX79bwHhCPCTr9eaFCxfCXVwnpfkj6DilVMukoD82c+ZMQPbXaCHAt00liArdewdWiY4dTIWRZcuWfZE0z2OOOebTuv9Num9XWWfXk4qqCbSIart6llOXLFmyS4KMD7MnVrlpGndrYjY4OSPhmUBh4+OlZpie9yT9fozaCv44UcpMLiZF2u/G/2pDG/SiZqCDjvExuJY1madpEv9E5+2GRlH3OVPXvIQkAf2+HqQHCAq1lXp+fU3vidul3EqozAE4Em9QIA/o2WD/AkHRy2xoSY1C0ABQNurVQ/eD/pOtOiH0ibrnOPVlN12H2QrnBoksQLXqUFKQtsNB7vsChcNffRSKVcfWOM0by5Rrc401bN91jS2yHCeSaahnmyJ5eC2Fa0PGtEi2aryoNEPV4l1S4kPpe/VpPymxWvXNct0DRQmyhiocwB0pu8S5d6pdT6jdpPbCad1m6CB+akjYOY5dAgso/UBfshgnvmT9RkHQMXCJ6DzuQ/xiCogBV+EeBvm7+vVanbsMpAYkPrhHCATo3K/I0KAE2Bq9lsIrQYxCckRAicxU/PpzJKufk+yNlazfpZ3iJ2XYQJCViZqQf6w/+kTzNaM+fnTp0qUnyHCi9NQayR5BuTnu165k7c2dO3emFoNN6funcwv+kpbwq5K17ZU40rXQ1EohXiJBwqr9CCgGrEOIfKQ0N0m57di4ceMHJk2a9B/6fI2E+f1SrOdIaV89YcKENk2yn6pjb5AiIYDzrxJCJgE0mShWAiM9JDRYh3tJZZaiLNJ3U8GfygLGB/dO/dZN53fT9erguZBgv11Cv1+K/9NaCO6QAgJKRDCmCesbd4gWia0SzO/rWFwO1foeSxP6w0s1gc4zfWDpiBEj3r169epd/Ka2wW1Rp+eoJ/tI92VBYOvJ1hsGtvV6hnXOBIOE/lEp79PVJxROhXYRRjJ8yplQzsGFofaUSimNdCkceG6P1yQBqtYOnlTPTmUUAkMPasLcrWcYYaKgrlQRlsI7CsyorrlC7WmENMcJDTm2+2oHChE/O0FMLOSjdY2hZJdheRr7zKvVrpTNprzcrj4hiHmrnn2l7r/b7g6QC8V6DuB5zS5jtUPf1eknfK8jIE+iJiFJFS5QgI+bcvOz9bxv1fiNoT+I5qt9rdSO0z0a2DI7ixPoYJnG4BFt278qhfF+XZ8qx0+qb4o0TqfonKlauO5Rn7XqeU6lqgaJNxqrnlrIYAds0utG/f5v6pdm+7rb9EygLqj63Q4O2XzSWN2zMAj0gge6mjJg+JHJfNN4n6Hnh9FtHRVgdPzP1c4bgTgahZHsJtQGxukSyf3Zkv9fwEio+51DYFXtnabvf85CgFvP1ZpRLtunT5+OPC6X3CZutd/HZZiuwpN2KcRnZG3s2LH082tlhExWn+2XVfzvGhdQQVO02+um3SpB4qJ58+ZdrgVhUxgNoYTTVvD/ZbfEq1IZMyC4AAgsSBHiTz0bnx7sZUCUyL6TEFKFd4dW2Y9I4KbLKmAyZ9m+U8NLwn492zoJ7V16fzvbSOfDP6HJtDnSN/X3Vgn5t3X+Z2TVDnj44YfvlVCVU4lAAkWmX4km4zSA8WSaEejS9+tAYDi1E+uPjLKMLF0UclYKb4eu9RRoArWnVpO2RBPl0qFDh84nnVsCCyHLIiBAkR6KMl+/fn0epjm1cYcWInzTkzTJpmOpG/KEZVSr/5fpugD1H5UiPUXtmQtHgu5DGete+NaBx9GH4cpI+Zbpz/6xRdUEJZGDoEsTcD61m/5arvveo/tO1n1OpEqJnu//s/ce8FlW5/8/e4PsTSCQkISREPYSBXHXXeustbVWrdZWq7b2q9XWLju0VutXa/3WvcWqVEXFhewZEiBAQoBA2HuFlfzf74dz83uaf4CgqCDk9Xpez5N7nPvc51znc65znev6XL2C7Xc27b6a30Z/nQGYtHaprMkD0Jc/ZLZRWnx/GLwHtOu6/DZ/m6uSGG+uwTTBxuskOYD7LzPCTM1QYAx+yTLFTaCuCwzU4ZrTaN/hRiQa6QVwqlkaHt6IQW8Iet3AAaKZopoZJ5hsxpvm3kzbwbSi+aEXoHo2/dybtriH8qSArE75x5tOSC8MeTiQE3kYBBXz2vV0o5h+Wa+9WTeyoqKiy5G9uZQ3VpODuexom5Zc34jvArV16yRI83cWbfea7GR8unDNOfYTbbgS2fsLfWc9DXfXfJKJDF1kGL3plXQjpDyZzIagNNypvV8bsl5tnH+fumjmqE9fnsg71dXHfsiQIb+jbi/QPz3nzJnzP9S7E///lfcujTwg9jX2Iv/2AyWBUH7kxqD+F77zzjsvmgMvMTHxfQmFGLtOUnV79+79KpPdIL717ngpnpuibB0OB+34mJliP8sGNNkmeXl504O7jyAsC5UZJSojBGbeWEPHfz/Y5eR4qK1nAQLxAuD3Nze+EIDH+fR1M43yJjGIf4HwtkhPT38BMD8FAco1QeisWbNuQXC67qEkiCVA3c0ztBduQ2t9V05kd/kR9G/S/hONleeaqgYlAcTaZS+hHDlwiwH4EQySIsDgBr6HoAU/1bNnz5vHjBnzDN+3c/8D3l+WdSqECMcEEgCK8RAweF0m9wIshgHmLmfV9EYapcX/Zl4WCIa4HNc1TRt7yAys94XRW5F/cAnXV5ELI9JM4gloglnDzyqe/Yo+zFy/TPu4phL+XOpfCQDYF0top1ImjncMFnGi1CXQzBUcM61PVeqrT/AGI7mCtt2Fa77N/Wp+ekec4CYUz0hiIBuOvHcTSj9yM3GzAnmQSUtXrYu1uyvvtLk5DDcFHgSpVXUTkzNXv2H3C141GoyyncRl4zPHoB4gDfg9UXOPk7ehx/oIhxRE2ok3ApJJ9HU2v6dS/218V+Ha97iuJ334Y4NzAkdvjL+Ea53EbqLPZ9LWJ0kQTx3fp15zuHeANnXucXPTzUGThZ7Eu57N8X9wfJZtZw449wfM7kEbnKRfMmUZjbncpLVcu9E8dEzoJ6HhxiacsFFXwO9fu18BmA/g/D8ovxT5Mo3RYt6vOnUvQM4uRa7PYzyk5OTk7CzPhaysfbYioOhkb7Z22uw/eh05NvkY7l/MZDLM8ZiWlvY2bfQsY+clU0PF57Pb1zOijeloc/HLAuiDNVMcdWCMZtwOYRqVmZn5DQA1efLkyS4NqyOk6xksfDUw9Lc2A69pRkbGJGbfFK5LTEhIeAkhv4drtAc/itaQpPbp0vWCCy44HeEX4B3A6+bPn//zmTNn3kMZVd1IcydcxjVd3xB+fXVjrG5oF4sBgjk851yWW3pilBhzz3E3LG6jfLmNr7dPKHusEVOc+wOD5HYGziKDVPLz828CuDOmTp1afCD6v4idSwEWJNVCGIRG7fXnWQPVgvlICtRo8eLF3+FdBW3VfW20u9204eMGoRtpjeVYRm6aUUdZ7QRSAzx2Btu0po7qkeCH6CrtvNkM9E9c5tOuP+K+6XzuoE2NumsVAhIWobmtC5FYbRiIP6FcOTQ+1AuDck+jLdu60UaZiw3TpU97yCntSsZ2AHSXM2gn6vUF6KbpKSFvrpwbvM+ZlLGdPlnL5JalTV1+XW3s9J9sdtpm5UPQ+0DeB23XhQDQfSEaUI1ztyanSntCmdtRtklsp7ohSxsVA5DSV3Z3hUA5bdQ4NflQ7+F6W/D/aJ6dy8RwFprm6cqg5i2JqqhfMxPL0u8f6lonkPLdnffto2cL72s+wykCNcfrGdbLsS2UuRS5asszTqY9TKDQmXfXY2hbCL9f6WTBuZhLY0jwKQivcxJyxUB7vUMZs/l9GfXuCOBpjy6lHBnbYqDtOw0cOPAKZG+EPsT785KoKPCF5MExn2Jk/Nu0y6VOdowhozurMY6yqZe0m08i/6tVPOKxqrzMHPvy2jhcwfio8aaIvSydZ+YFQYyBsUAtcNCgQdeMGzfuOWbamBuUWoR5vWhEPRhaMxM/CDB2yMrKMs1ME+59PdjikgIRTyVA5QwG8TsIyGXuegP4I5jY7na7FwHKQ9h/j/Cn0jlucqmNd0CQ2/OdRNl10cT/QZnjW7Vq9SbHViOQ8i6fBaD83klSbYG6vWO6JwacCUZns3R8k3Pf7Ny5s1pecUXeP7KnKYzaowNr1Vqe/RYD7C3qKiBcPnr06PtDAta9Aq6/rymgXDpT5ztoo7OYWM42azHgs0vPCzeGqNdkBpUbcy0EKdqzUQjblVe3EdfoK3qiG4AS+1PmQl3keFf9mq9gcA/hXLabbLRvC+oho1wnbdHU9weSyXC9oeWxwatdO2TojoEwgj+Odnyfsj9V29Y+zvV/YlL9EX3Wmud8QH9tRfv8u3Sg8oaE4Bc391oZPEJ7yC1RTRIl5MLcgufRb78FIM1feKmbWWrPlGdqnzHmQJTzmnub0hajBFgB0ASz1KMAmRknRwP1KaKd79ZDgsnuNuRradu2bd8YOnTo1Wr+AM+3uCeFya0e7XB5SkpKc+R1Cs/XLLFCAhzOF1IXV0/fk5taOzj3DqCuE9zMBNgvcXNLIHAjTADVDk7dXzU8mHY7FbBry7PbGCBEWUUcmxFc8Uoo82pdFannVVzXnN+/1tNInmnO2R/JrAafon1GRNFv+/NQiNjUvC76LguM0XWeM4ADGX+a8fSxhEd8xzLQ8Owi6mz25/8iyI/kOd4TI5Lb/ZlOjtmMv2J/YzuS714MjkkIc6yTGbgvoiV3BuiuB1xauEnGsfk6ziNwHdHKbgIMRzAwXgNgv0kZkrOPQVAn6xYmGFBWUocOHWJZBhgMP1OjMZRV9zCEyCi0XmqeCMoUNOzfAFB3MtiupqytgEQbZvqruedqzs3u0aPHXfqOInhqY6MUUJ4x0B14ytzIIJnF88e6ZOb/WVz3orbig13RxG90qCW5ZKesnYD7ppDDT60pxo8rt4RtZ2oqgzf4v58ZQgC033H8POrXxSUm7adt+UTqt7rS/yMIqhrI3neo1Rk+bfCCIeF6KYQBdCnt8BdXIQII4HGydQoBLq4SNgBeZzhQg9tTsZq3OdOY+CZLMuTyHa1tIqA91YhJVid3qAkzOdxNf/7dVFcAa3/K7coEa27C17lO+2s9+m4Oz5beUV/tJcGrw/xB+lAvpH1TeLeHqNck7qkv0AKM79FmTi4GjXxCXd6i7Avo1xs4v4u6JnNskb6FBoRQ5xedXCinHSuDt/TicVMWebmJtp6LTL5B/R/gmrMo03Bfw4GlNe3DvSMBpUd4B70iBvGcE/Vtl2fbVY7gRP1PVzmwfTTj+M07ruf9nZQW0K45mpmomwRRF1F+VeoxxWS2tEGyiXRNl4T8GxZ9HM/YwZgw0u7brqKC1lrdlYptJH1lfJDFgQAuWpG5OlBWywvQiDRW+trvxfEZOawDbdadet7A2HuKOoyNovrigfdIjiA+aswUCpPLfwbtwwzul1l+DZCikU5NdEMLbSJTH+L+/fs/0K5du1+hCV/Gtb0ZXMPMEo3G9YLZexnkFwLeVzDQPpgyZcq/s7OzB0rLB1iPzsnJuYhrj3NQqI04oBkoLgmr8Mx5gNeZCHMez3nXQQ1I/IFBdDeDr0lhYaE71jGCbLSlZQykjxmED5tsFAG8iOc+3q9fv2tZej8+c+bMRxmImQDnxfTZgv1lvK3IJBU/WVHmSR9++OH7IU3VBI6P1QeXtnMXsjvgob91N+opgDwpzzNt14/3uIrvpgZVcP30ELK7UiDWxBFYx4p0A+Q9B8h/oc8wIC43blNNHbabA5bJb76uabRlNzeVtM0L9mrD1O8DVi3PStbucp/+WSVTl/zOtHlz7r9QcwPA8SKA9Z4TC4N4AXVKRsblzC2gvwXstdSnrhweIYNybYMJ+FseSJ2qMhmXAli7kZVn6YPz9G3WtGHqH54z07BjylhE3ST7n0b7DaCu39S1TLY7nvk+15oI1rDqmtRrVaAW7W70Is97m+8+lH8bk77+3+t5L6PcZP/r52amZh/kp5VarDSsfIrMVG1CXAB6OXIjl4ebi7Fktq5gBGDqYXRoXa9B5u7gmizKb62NHVm6kvaZTn3vtHyu+xVt09/2Rf7vCj7DI1mxTSu7/I+y5ogTkdkrshmXNQtEpgdlmj5rzDUSWBUi/xtdeVV008++Z8zVysvLyxXMUViG5+bm5qkIxW/+HW4a7zEzxX5AR4HVtQdB7bFw4cJb9H5A8As5rZ+iJO1qiO3o5J2A5wsMjIcApBMQyt/r/sOg/iXAq6Zo6pdVgOsjlDOQAdGJ2bxTtEwKXgdyvFZ2+Y3gNuCZrRkMMROFWh3l/4HnzuL7X4alUo/BANpAQ5MprxUDqjaCezXXXwXgqBHtYNBepfM9wPg21xehOanx/NcmxsG4+ym8vrN/CjmAGLNN814fLliwYKhgwXOfZHKQ4nI473ipngL8fw9tN5Z67NLnmjq6abRG261Ram5KqgUz2E0mqWvaMN5rkJSdBsXwnPoRw1a8diPfLIPuYZ57r254aKxnAagXC44AW5abakyCM+RXqLSHfc3AjbbBDizXwxLe4/9odzfetP0bUFOPvpNrui11egtA1NZtIIveDRJC+VyTrq6ljza68adZQPIm+taowkqsWO7SpYzzkifJZ6Fr1Qz64lzeN51PHvVtogeCLnKcX8b1n9I/Len/FfYZ77iJ95GnwdRWk8xBaLQnWvqIYcOGvTZt2rS7TZ3FM4Zz3249B5RP3l9ziHsRqw26sf6cN5pSruTWcmfrGYEC8azmHZ5Vi/L/DdieBWDdxoSeZcYZJhNXfpfIr21f056v8j3DQBj6KUcSdsGN53Wl/jV43gj7pDzZihS2+NVVWa00Amo9gpDxk8ePH/+QLoKA0xSOnaWr6f4Up7Kk77RHCfL2CG0wj3Lyor2BfQF5NEkcSX9HBVFQJBwMZF3Vfmros/6h2jN79+49zOAOBvNwLpN9rTID8S15E0JYcT7g9KIUkQjBhQDRexzrgwCPYEAX62KEADeMwjg5vosyqkT56ThW04g+n8Xg+SYDpx1l3MGzPgV0zCZytr64COhDCNsL+uzqrA8QHE+5zXlWItekUuY2Bk8DgzwAZRONNqacFxlgMWaqeD/NSBj3ZcezbnpWmHKd+l5iFgjKEoAkfanJQGzAxHCKvqYAgdlBTuddmwACSYmJiS9w7X35+fnf43xTXfKo07mATA/qW03zD+2USL2P592HoEl/CzBMchOL92wC0NWMskxYP1YHKwGpLN5/6uDBg39KGR8bKEF/9KGqo6lLjLiczydqcfp0+77yQPOcZMOPKa8TZcmEl0f5RuaZOHOHtn/ae5WBKkbRUaamjLloZuukcAxcHPabzHAl1HM3ZRjCrTZnJJymAttK04pRcHqWJABGRfL+6kkhgTttuMD5nnNdKM/gkTmUPVY3Qt5Zb5VVatG0zWDuMc3XcFdLPHMp5evRMJB7Rnbv3v2PtO07rsDUpm1f7cdcX41y69mG5ko0nBpQyzaajudKbqU3yR+4Zyx1G8s76pNtVKSacFPe99tuX9AOc7nvae4ze02RREH6UQYPi1Tqkshzkjlfjete5lkrKxLdFr+6iuTPzeGMjAxTK939ySef/I13aMGx+ZTfEUVjNO+1cF9llxe9x/Wurpzg5ohT8XbjeDNJWV/jrxpzjhEF7WvmoQPdsMnOzjb6bjeDoDnawx8ZqD3RICT7ORch/Ke0jS6tdbhHQ9wMQGwChO5mUJqO6QKzaiBYRuPNQ4hfATBuQkiq8rsETceU48vRIq9DeLQtmibpfjSkaxnoDkaXzAqUXgoFlPs3ypkEwLokNcPCRMp4nyXZ3QhgJnWqEWZ5gaVk2bJlw91441ndGDT3u5mCgE+nXmYxjoWRupEkSxjlrzdCKkq0GAVuaN/mPYcDlA9Q7+aaCfRuQJuaa/CKvtO629E2lwC0bp7dq7mA561HuOR3lkbxZnfSXVrz14C6VonIhoLXgJuERsXFBFJtlDqvTk1NfYK2+JR7TNS6heMLAYPlPHcDZeonW43nOElIlt7cSDT+F2SlBJ1ImQt1K3OlYfsCUPJNrNPXmHccbvCEuc9CCnjt4aXU10i7AmkqaTs3EjUhuWnnZFlqe1L/nZGHAZqw1JotGETyMW+j3WvSDpI23QnwNaCvfslz/8JzHzIIhPtOoZyPJethcviFZD+y6yEX9/Et0U+Lzp07T5b8iDY/S5u/NK6m69IrQm8Pnn8Xvz/V7Y3v31D/rshGGzTegfT5+c6husxR70bWn+sb6htIfZywfkJZJie1vS7j/gt5Xzf6HtMCCcBP5V43rHfZNzy/HpP9aVxrPsZcjuvnHFOBKW8OYDmdNvsFdbmECWovk1pZ+2404Uf8LwKw3kV8GlG1gbNnz/4j5cjRUkif/5vzj1L3K7g9z7YuD4gjgC6r1Ubk8GU18Kge0fXHbMZHiJmCmTph/vz5Bg8UIgym+04RdAGbFXT2avl/EeynOPYGwq42ZnBFbJAaLIJQmfcrkbb6jdFP/L5dwWXw/WrChAlG9emyVMxgfhnhcHPtdI69a9JPhP1MNL9TAOmBCOZkBnQuGkuJ9jRd0+RMNtBB7Ung5feWQLZjNo7BDLZGkcYbbW716tUri0H+vORHBm/oK03d1LSlWizu1KnTm5T/Z565JPKO0G7OYLmawXgdz72dtiiYPn36o9wr/WMTzr3er1+/KwRT2upG2kQNTiKW45kgdAmrS/ktQzDMf2ko0aDRRqu9mbJWA44z9VrQvmvmbcOlmSCSOW8KdhNl9uDdvm/qJ9pl5ooVK06m3V+X/4JzJ8ovIe8EgDEmAEltB6ypqQJFZhp1XMi1Ev64sahr2DxNTW74VdrDPVxaVtOqtIe0pyTe1hgtcamHhEq16ItYpmZAySg4yX+qufJxZcJ1p5m8FdBpzpg5jvY1aEfPhA8FY67tZbg39000R5xZMZg4/8dNM/2LDXnmWiMfN9EnM2nXFvTTMG29lGfo8gTauVawz7Y3JJlJqx3vdN7cuXPT1ejVuJg0b6P9TCqruULqUtn0RnHvJN9fWbEvoyAdZFPgfIK+PBt5/hP1/Ij7BlGnP6qgZGZmjtcGzUTwENc8ZxnxQBwF/ASXuNhGL+U14t31+e4n+5vsdbRHM/rqQyb9p2iP07g1y8zjrISWMqay5eIuC7j2qxO3tuuI87isLbg8z439EQ8dsxkfRqaJ+KWPgQb6LCJAm+QWHjZs2B1jxoy5xaAFjpl09A00ESN82iMQHRCGfD0IFGa0NqOBdjB4JgMyejD8nN/uhJ/DNX9DI7pQP1ed6BG6c3r37v2IoM7/f+WZXTh/l0tgtNLXdaPj+THCcYWOSVC7nsIa27EGtBK55i7uTeT407KPyenLPUZ8ucFkTrEG1LMjdenG9fkAxLXUSUL29ZpEJJvh2I95nwsB7NfdsJGLg/sGMQlUTk9Pl7CokGf/1l178+a5nJcnF7A0+ePN+r8G/l1Jh6pHzG5qu/pP6ztteKrto+C5481gfpmy/8rx7XpOUHYDvUlkDuNYzJxAe1fTV0vKSzf2GLS/oW7LtOULkoYZM6iXct1TDjzJkwDc+gIsdd/mRp9/vFcJv+dRVDHn3CR7L7i61aBvTLlUGm9/VKOMWxqXlLcs9lpJyfkpJ0RsUwxQ3hbcsgRQJ7SRXGM7X0OdB4Sce0b2HEddTez5H9rmRaMWeWfD0Q2vTpkyZcpI+v9pPn+if48HkL7PNWai2NmxY0epW6fzv9wk5/B8aVH/QT8Y/OKsoqdKikFBgGCMUMgIPibMOxnsatUv6SqnPOXn58cA2D/r68asbWZb0tZ1TH6rjzSyI2l9Mve5+WpeyGpMRPfz+00Ac5dlxQNmZN4ShKmbSRBu4j16837t3TuwfJSTSZT7DO84xVB0WdXoO23ocigvRLZyywPiaFXHfefpQsetj6ggRivaMuO4UjmT65Hvevt1BWI7V3Bw+RSBHp950mMaZz9gwIBLddOSxxaNpKEpdEIGgTwGWhcG3OsITYwjQmEwOoxlVyFLPn2HX1GTARhuAuROFgQYTL/l/P0IZg1AsJEh0V26dLmaazjV8QmE7EkGzkkI9AoG2Gxt9JGQKeQulQNQ7GSQzWNGvYz7T6Nu10ijiKC+QF30S/5ziIYzm8FPJk6ceDnajrwLbnIZvJBNOdqnu/MudQCnJjz3LAaIvrxZ1PcJBt17utoBDo8KuGpZQbOVf+Ecjt/IIGsQJrOqJlClPVZJB6n9ljacKCmQXA6FhYW3BNKfjSkpKf9kYniZwW5IcDPue042N9r2bQZ/e3l8+X8W9TbbgyF4McYxytpAOzWSlIfnLdfnVvttBCiUY/LKaiEHYQ2X27SJ0X9OTpIgyQlcS45mAVfeAo5VAxh2BFeqUr95xu7INLE/n9N4z4FoGRxtzrrJyfsUU/f6TBhyWTjJqSHLVncc9ZnArUskAZJDgzosoT+mcc3LHD/f1Qb1HMFK6ybk4kZkJRNQu3HUqFETJAXSU0KZ089d8iGTvVL3JfTtDD6fUMaJnLtce7ybjrTHeNqhsyYkXcLifXn1T0dWh3O+qyRWgLSmlk7IdefANW14uaawVMeLpiQTA9B/u6JotXhTgOmOqNMA+u5brKZOyc3N7WJbOc54/7VM/M/wvu9Sf1XBFvR1Lr9/EbxdYmYGV1Tlrb6DN497LQ1oUylh924Wlt3Q+7r+fS3BOETauYS6FEHI9BCD+d8I0UQ6fQPnHmRA1AN0ngPcchgErdVW0bTkLljO+VEzZ84sjd+xDTSXZoF2w6yQ5dbvKaOTacmTk5PHcMnrCPw1fKcrdLNmzeqNIP6bOshHkWhYNb8/QoOoHmUZiF8eR1FqkWeD3LAMsHeo0ycA3G8FdQnreYdrNakAfPcDPKuohxpaaffu3V/me7FRe3IXaLvj/y4hci6Xz6eUM0mMycnJeZPPN8Iyfq/fp6mfBPFoeegStF+/fs/zjCfkbaDuPQxNdrLg/Zxw6jDgC83zKnmOdl1d1ACrZ3hWTQawCnAPmexkFdMDwZxuJl0VcCTyACz0w+1ONdK41oSqRQBULP1R8JeV5rMUINF+a8aHqvTlcdS9A/1jturtIZWSm2+lYVA7aVRWwzUoxdDhsMlZ+bO4AXqPREHSiYbAIZOBmpVjLMfkQS4KftRjATL5j/sbLce1jXm/l5lIR/B7GbL0XI8ePUbMmzfv5kmTJtmuv2GS/gvvfbERmJRbQts54X/Cu/U1Kg9ZlGVtHeXejVx1ou3lQcnmvq36TfN9N7JxA5+3Bg0adDn9UujmJO3kJHYbCsItZn6hvO49e/a8l0nuYtrJydUs0JIh2Tex/qeey+UMoT+nqr3G24VZ7SijP5s6deoNlNVWGWdSWAg4v0p7v8r7G/iiu2gGff+h+xg8y7RJe80/UXBOee3r83mmK5cnnfAiPuX4YI79AfLhaqo4qr0pBExTESFYV0o9ybJoCMB6hoEAXbt2fVT2LATpJITIsN/qCOo9AMwoeRgQnnRATEKfZQjssvhNhgicAjGO/29HU3gbYfuWOdv0hDA7A1qnCUFTub82AtmQQfEIAJpCEb35jGTQ7Sq7GVKeZhbceVwy7zS3HmDaQv9cBuWZko4zaPKNiGPwupxMQCvqolsY7/5HtJO3zDjBoPrYJgFgTYI6lPf7LkB3hTZmyhxHnSWOqREydOwl9jbklQlm8pAhQ36lXzPnp+jxwbLxVOpzbWCb05d2lBmLJR0yfJxBZBCEG02N+CQzaE2zroeK6eqf5NR7ZjShnFJJgDgfm/CYEPWvNTR4He2jV8JeO2W847+TlZtP3NNOTVyuBcsxT5o2aSYMI7WcVGSti2VlEcgDN4EbeqVR2x6sT2r8JpbUpzxX5jR9yAfQls/TP0/w/mt4Ri4aooFDG5GXtfLuIoMnS/ZD/xVy3y5pKmUjo8/ukMCf31ncey4gNsHcc3yP59hLaKwDeIcruU9ypRNMUMs9/UwQYHJbQL0vfZmsvNInZ3DdGYDzGp6/hGsuoq+vBPwvpZ8f5drrJMjKy8uTz7sh8vGqnh2022n6TRug06dPn2fo5+M5/jLPtZ4xGy4TrpzSP3377bfvlYSfY9q0G7Nyu5z7HqZfTMs1kOe8gpw9j4wuAVjdQN7rg1wef0Wk8cavQBxbHi+bmqm8/oo3Qx6OuHWw3hRfqw08O1GbVrdu3U5G6K5jgM8AbMxHt27y5MmPAla9NWPNnTt3JGA9CoE5E+C6lxn+EZbbPxg3btyjlnPSSSfdDpj8AeDRtqmWVsrgUnNx2V/MtTFARRhlNevPAPsLIPhnBPi54Mt8AWU9wwCqxTN/wTW7+X0vwn4OgvpGeYQ++wKASOC001GHZIDeIJRvMGhWA2IvUscLDYel3DTeZRWgsEQOjBApZqoe7Yu1Q2oh3fnc4FnophiTicETr1O/ToBBf2k2edQGji2grKlooz/jXeTVHcUzbwTsJgAeck9Mp7ypLLlXW0c3+bheDwRdqurLu6vNUY0rAlYHGSBTRfY4JsMNDlT/vIa20++4Ku26XgAwLNvwad5te5RKPRJuXc7ckNPsRHluqFUFoFzO2z+6Lu7W19csKGrGIeqsNH6yOVggjg98sBwnZQaYxOwdeL802nom3ymUrYeHCQsW04bLQ366WHZi2sPJazeyNlUbseUxiehD/kdk8XU3bXknqSyN+OvEe83p27fvdYDon7j3ZF8fZUI+4hLAvZtmNNrrWiP9ouzHyMdmJqFt1EsvleW9e/c+x4wi06dPf5BJ7psA8yvZ2dnnyWFB/a6jnYxc/DFj/2Q063ZuyqWlpb2GAnEp5fbUFxqA78m71Wc8fYd61OH8LOT+O7ouulnJ98kATl3KeSg3N3eNdYkwJF6RKdvmtiP1dbNUMqN6PH9ctFlY4WV9CDyJB+8jeQPva6UZ2yEIS2s69iFzmQG2ZyUlJf1J/1SE8SpDYPltLrkfOTDUsACZNK6PbYgh0GbmrYOwPYxg5poR2ph8NTIExyX8Do6VRMt4ZQrhV5PJZgBdgYB/jEBu5TlLABkHaRcEVTD4RIIcBLsNg3icvsEVbedIi1PL4761Ro+xjH0JzV6C9EQBWf9T6tOD79oM1NZc25TfgqJE5bqu6WpkQtKtJhHlYwSZg/oc6q4b07v0v0vudxnkn9A2+Qx0w7WXAn73S/sJQL5Gua/z+ZT2yqdtzacWEzjt6IC5pEZpgQt5LQAZA2NA2g3J2sFvVjPCdv6vBVi2BNR2ylCnLYPnx4iOADLzsjXUbY223hXPNRD5BUf2RBnFZHILfsexcW993EQThKOIvvgl7GeR73hNOsow7B6CZEa0peTzdajTOTz7DOoynH46jYnspwDpDXyu5Z11U5sOUFUHcAZrg6cNimjT6cjVZEBuKEWP4f9n5LNGlvrYngD1mbSjy3773RVbsRlEuEcPHZPZDjbCDm3YsHknw+MkFgJw27OyGWf2b5SQf1CvBID9Z5rSKfNE+vReyjIdl94uH1DmRQaGDBw48HuU9QeTi86ePVu3vCTz5/GMxwGVj/n/BN0VqWtj7n+ctuhJWYXc/1hOTs62KNtHWRAuD4gZI5WRm+8B8tavGfKpfFW4fyxbrxcjXKlX6eEIxkdtdugowg7hGD5hwoRbOVSjX79+V5nhYsyYMSPQPuR5/Q2CvhXB6yszFkJQB0EyFVCuvu9qmJKdM1jc2FCDqcuST8IaU8lL5LIzcumy811mM2ikMixk0E82UEQuArQbEz6ehSYzWid6BsDpGRkZ1wdeAJfSxRVxpi+rBUQ+vNrWKCtbAnmJjRDiLtqjAc/a1NlMGZpptusFwe9NUoRSh0ZONPoT68uLdu6mz3LDdClzpJomQOzO+jlGsFHv92mrT1nqqp0adqs/caVIo41mfl3lKKMb9xxHHcbTRkU8a1c0CAO1pu1REoGm2bXlduaZmwVW38mP1xq9R3uvZ4LYVV4bRQ79EShG16gJqynTJyXKsuYJnxf5WJfnn/pZB3AUohvy1TlxmEnbyMoBtG1ng3b0QjG7B4DtxNRXwiF+a2o6nsnsCq7vJrcw182kDadxLIM6T+c9ntXPnHbuC6AnyaFNn9bh3TYzUZkJWRNYBv2oN42BNdlMyN9F+3pGsxv9NVQZ5rsr/XcCWu47rMjOkHRn7Nixj9HuBrA8QV3TnET5vgi5GCDdJ2XOoV4mPThPjw/A7hbaaSS4INvbHOo1ksl1HJPG24FPejLn5unLHrVv2X2QaDKNn1SDL7fZbG6TGpZ6PGCIdPwqqCJ9IAjbz4ezN9dRGfQRN0DmoQ1Pp4MfVztkifYEIFElPT39+lmzZulWJQfxywDBnw3hNdMGwvW/ZsRgdv82A6uuWplhoYZgasekTIlvzFCjO9bezo/i9DXxSGmp/VW7pZwUapNyM2hL5lm3Ubea3I+crzq+U6dOk9A8tlakM8tqZdFvnfER4Nzu3bvn0+FDzXpstJZ1ovONStvswDKVEkDQEG1qFQNAjdYoscrU600A+VQGcpHuYIHboAbXS99Yh5XEqnit3IEWb8KKgNZzDNrZtNUu2yHahY/q6Uoi2oTxuGBO226kPjUjd6sIJEOWkl1R2x5oYIaEql5UGhIB6BYXG6SRCe5Q5zxTxtTGNFWESEtt1gPNZII8PcslbfQJlt3OTNrWw1WIqaKysrJ0FYyBuME0JgblnmuY8LNTU1NfmT9/vqH1zWnT6YDhpbTVG4bCc80mw+HRIk+Ss4SyOiJLM+i7WUbNGRqNBp5C/z6Idvuem3XIxw1o4/o4zzeEGg35aXmTkdNf6fvOPachi79DBnoB5I9MmzbtRmTy0ZB1fDEyVIdnbpYQKJID+lLb/1xl3kkuIv/Zn2mzPJuvv5HJYlZ3JmnQbOiew/+vnPjJuDyz3sEqNMc28L7kmUgPA8D4TTfqzKwA8D2OAP8U7STLnV07EC1DvtwMAOk1hHE4s/1LdOp8N1FkbTPc1ASN7iqbM8x0P5LRA2SVywpFJKhqeDxzN2BQxUwOAh5lNOYzhIGXhqaq18Z0NXLZwUwTJAjuT5jil3nxIc6RcPo/QmzU33hA7HcIdSrvtt1wb95PU4u2yTZMNjkIfhEDtK8BGGhKd5kxgv4+gfedybtJT2mxhg7PAAzM4bZX09lXHSN6RAE3sluWlZ99RW9p4+UZu8tu1hxsKGuUiVjbsRtq2owt2z4L1JiVy8vR9lk28IK5w3B5XeoUhLqm1dKPXPIf2ehoc0mghvNeCchiYwN5aNMiftcLvMQRs9pO3r899ddD4kMJh5C3fDOKmJ6L+/MAafkb0jmuK+VWZCjfoCQ5LZAxvUza2rfygHDNZsD0PLOqUH4esi21ZhJgPtTIUpUL7cwA7QvU5SquOwvl4zRWTWZZMUNLt+DnPou2zOIZ5yHLkud/HELGo7GjVtuA6xpo9opMRvtqz/JMFdHmNPUyMGd3tNFX9o9xXJlnac4yCvZz9+ExM8WXrB1rRgA0dcCfiHC9ivY4Ay1vS+SmpnAgvGaMOEeCFDr6dYBkDYLlMvwKhPVVBlMHOl/fXIFJrUueColl3DyqvC/fVIVV0hY+tTRXyFlgaC9AeQKDK5mOeZ5BJYGN2SQ0lVbIqyKiEPQTqC0rRUs6NTUGhPy8W1nWnss1W03FwwTzlPZJrv2ACemfUiRqH0YjHUmbXIoWe552c64bQV3GRzSakSmmoiQrBwugUTvRliWHauPF9uGdDdop1a0LgKkc8R3bX7ZRpT2ReJ/7OQCidkpNTQbB1DPQw407s4TQN9PMQi15veHXEhUZRs7fxkDQoxdELIu02rWZUgw+ougW9JPZQ7YjL8uksdRdEfmZDiCNQI7ljlgr4ZJmLp5TTF9fZpRjly5dfmnUHTKmJ8VknlXIOE43qSja7rdDEEl95FhzlBF8Z8q3nJycbLmNZXgDxM+izNUcM4jpl7LxuQltRClt5viIvb+g0rlz51ORpd9rL6YtOiPT09wDKQu4kXlofxN5vOta/ErQe3mO7fPXiRMnaq9uxnNGU+/SIwmfjmowjrcL+j7aQQW8eI0t2jwAcG5VG2YAmGtrvT6zzNb6BqejJZxp4kgEZT4DW3e1rQjy+sjVbV8C5jMc+AipUX5mw1hHZ6yXKNw8cQDmuwUFBQvdCIy8DCriIYJ2UBmB/AZ1+yUD5Ew6VwrLLL0NfDc1bJasBfw+G0CtgyDfhlaVBei21IGe+8ebmZmyJlOGOfTe47jJSRdw3/0M5I3xBCtftAxUxL0s3sZYkb8QnBMzTTiBhoCR0uBBUXogd8KK7ksI+gYN8a92Ycn21Y5TKNvV0EDkSje2PuY1RBaaGOxiaDDnagStehPAKvG8aZDcdTTsvQP3p6LlTtPUolukpg2zTQdlYJvsa/TbfIDK5AcJKA2vpKam3g4oN5I/mfM7mGC/xSTXi77W5zeD8dzRqE3t8xITAWZ1JHwaPHjwzcjHI6yUruvevftPeGZPQZWyfwlY16Z+pns6BZm7mfJXR25nasSsvkbzDm8C3HdkZ2f/nTqb7HViWXtvWRnaX3/Gr4wiKlcmlgEA8cM8czTj+EQmjVHSpR5JZoljREFxy9d9dTzC2URGNAR+tnZOtBF7uL7plvSlRdjdud6MkG9BsI0kyo9nijqQTREw38pg0VwgKc1Uc6iFnGsnGa/vJOHSOXJsPxBwMSF0RPCfQiAfoMxJ8+fPf4SBYmDHn510vGbevHkbMzIyLmPp+TwrgUcRhBcRhM16WixbtkwSmdd8phqjnh68TwcG5GjOGy12WLk0fhYHfpfYRt/RxiWBLa80MPBVRnM7JJs8YbJ187QSoNbACEQ5egGO0aaS57xeOQMWL14sV0SdsM9gQgAn9ub031javxDAHGSosHn+BFjuzUHuND2ks/z/AHl53kQEPKM+92yV0ApQzHCClV+aYzV418H0YR19tOnz003EynUZHM+U4U86U1dSIeNH3YjPhGMlTiBmFeF7iQkKJJXi/36AxqV66UhgzztdMWfOnNzIIyVSeGnnWNJeZHwQdc7g+vYhJ+F+TQcVzboRVh/uifwPdVuSmZl5HZr7Y5p5Kn3N/44q1rao8yU20RcXoVurfywDQo6EdqYxMpJMoUXAVnHuPUD0KrVQhGRDRQesgg9g7jb6rU2bNjsZbA8by8/MPpwBdSfX1OB/3dDWH8idJ9jcDCBYZtgrddQTpHUgGd+rYQrKAHYWy9bTAYMH+P1rfXdNWU8xl7Ia+BcTQTbHtlCP09D2dVn6MKKSPFz+og23g/3TVq/myTuqbWqvL7UfAKxS/aADL8XnWuYGdrIqlF1Vak5DlulDyfMXAZbyL9vXryM3GwDSE838bdi2ssTvltwzjn58Ghn7FcVlUBdny7aUu6ZVq1Z3ck9v5K0/z/hWp06dfk6fPUX55hNcgrzUBQB/bDQfz58jgOsSlpWVpSvhVsrpjTzX0r9Yl0q9JkyAQN9mS/iPctB31qxZp1OHYu65Sy8bVlDX2i7avYMN/Dpk/QPuvW3GjBmr4kOXVUSQva1o0pdw7+9p117I2kjGjj7Mh1SGgilxE+3RYfz48c+bIBfQX3YkZXr+TJP90QbGgXN1relyEOIefHYjWNsQ8N6AnSM6tsTVWV7NmP83aO9Vy4iP+KmIHVUtWc3bfGxmB+F/UxoNROB3smQ8F6CWD2O/4GNZlLEqMTHxJ/xuIUFPv379vofGIlfFf+02G0aK1qJXx7lck8LnFAbM36hLcwbywywx30fjGMH5eunp6b9as2bNFGkwDxcS7miwHWx9wl6AtmFBUtfE6kx6VUxuGRJoamd3wysW1ryvZ1egXzVvSaizJSkpaS3tZ+onN2I3hGW4odFGHH6EvNwNcF1Of42lzzdo56fdF9MXSyWj16TCb/2o6+j/S7maOIZJFsS5/6CV/on6nkM5O12VAfZzeacnWFVdySR6kRoxK55U3idBEnrKbkVZydJ/AJYzDYmXMQ5gvY96PcWE9E7Hjh23BFu1fCBZ1NOVUS89P/r06XM+17q3cZfyFoUux5sQBGfkS5rX81JSUtKo61kzZ85cGBFIHQqgDERNmhJ/OGjQoFvpvzU8yzRlhZ8no80RoSgeTdmhIxusfL68578AqF509LkcXsAy7Sna4AwTPObl5bVLTk5exXV/BOAU6lS0HVnMiuOTHlZEy4o0PSPoGExd0YTrc98EBtBg3Y0ZXBME0f2VZZ3lihVc1PYcFGrU5YFWRPAduVA5ibgDjlCbwSRNOzH3m/opVlbU34faBezLAO6oH1zWutqQOAhgiLlRAEj6OpcG8hszewjIejBoyiiNyO0PZkWl+SNo4aW0pyT5RjNuMYTbstA0zalnNKEbwjK1beNbP/auhsy7AcyxSQaIcNzotq70QRcmi4WUqc/uiQBwS7PMcDyDT/uuXbteQT+/KVeEewNMAo2R1TvQSD+lrDFozjU5/wPK+pmJVCnrA8qYp9bMp1Xz5s0nGSnI+/dBDnZwTDpXM5Sv4/enPPOyhISE+QDsaWIAk/eJbhQia28zAYyP8itGqZYi+YqfCMumPSov8ehnmZSNpo3y5mnaO9L2s47qCLyKzryCGQMnC0G+nXc2jHgSQncNwmr2X6kzG3JpHXfCEdKaaECZkmMbpKB9DOF1IBrBd0BtINIYvNaMD/IpIPQlIVBktVwFB9qsikwfup+FgIb92sTjeR0cwA4oNAvzjulnrEZXqSwrF5qV3ghVDtdopvjBHv0GeKTWlNTePjrOABbNxyGLi+1kXr1aZhexGSWXd4DrxWB7HqysR944kg/Z/+bvc8xEfwb9CHjWi37SbiwB/Ar6YAv1HMO9k82zx6UtwibgDs0NevVQV6MSV65ataor1yVIk4qyYGYUCfOLtIG7KuLd1iB/W6ZPn/6YHg/IpZmnzaDdg+cZoKMNVze4ZUy411G/K1gNnUQ5qSY24Bn/Z/IBI/FQOk42GAj5n8+5Z8N+ynXIqgEs62X5430SmByaUP91updFclOe2+OBsjIfzMTnn7KrvH+WvjoSN/COOjCOZiyEd31aWpoMYTejUazgcF2EYDbCPKRNmzamWnpW9yETlaLFbEJgX2TQbGamy3BTz+XwBnPBVNA9y3bVdcxINDtJTY3PPoE4Sl8TAU/kBlRRjbw8cI7PpFv2mbpbaXPVhng42/uDZio3bmwDTLIkBq1g6waPmahr6dkQ3lvXrMjtSl9xbcdVzMgi7eZnnXTU+jR3GHASD0qChht8IZuygG1armpq0k6gs2fPNvnAdmRpkaHQgOprnDfLSZ7mMJntAMLOekXykSfaUN+6fE4W4E01RZknTJky5TFD3bm+KfcmArz3C8jas6mHPMytdF80mzjtJDtbNUDfbNybqP4Yfs8DUJszgbWWatQJCsD4pyRWrVq1msJ9S9GMx1CX68GEn0gOxcoumc9H8aH85QHxoe7vQ+EFc6SAcZXD/WUqaqc9WA3HiQchfzI5OXmkeegAV8lm2iJsbdy9BowfRjCnOXjB3FSEIkVnf+qTytLUzMebD3biigQrimbbn51NEhWTOTJwY2xlIVV6rHMPte0sCi3V9/fL3HSr6D1RG6mR+q8k6G60GvarC1gcOOyUpzfcJoXncWK34CzNpjiqr6/7Afprh72B/8rhVhHTSNSX5WUQMYGA/rAmMJDM3xWWIbu2L+BbnT40U0k16r2CiWQrA/Uj+ngmmmeMSR1glIrTTT89F2LvDrDWz8nJuYFz3ZnQ5T9ujsb6Ip/npdoE/LejJJzRtm3bk5Dbe1nB9Tc0nedvpT4Nee4DPPc/+pWj7S5iZdaRNnwRjXc2K8QC5Oxt/h/qJILGvX7u3LkfMwZ2SkLF+Pgt19zD839CfZKPBmXtq/o7bDVjBT9KwbKvfFmfF4C01SJshQjnjxysEr8giAr3GgR/U25u7kUCt4xaCGI9BskLpoxZvHhxsTnHDhS08Vlt2qmpqW5E3UOf3I5G1JuBtpiJYBXtcS710md18aFuk8+zAWMfxWveBwvGFTH1RO5uaosG1gBiLtmlsFQrrhE+Vc3kIi7Gha3LZ6zJSXJ6TTAxATcwhHJ2RdScFZlQ4lcl+7o2WukgM6bCksVuyx6crlKVvtwJKNfg2dv0YJBW04AN2m+VXc87GVbeh+Otg/yvQuudp/1Z/u21a9eeKOEQctGNexYjJ27CfpNnmmJJ4iADnn5IG/UKKwJZ3N6lDDdqv2NeQJ4tH8YCJvsP0NINe/8m9ZpDfTIB87GUt0U/X569A7BeJBm+qZSQwbeo0/PyjhwD5KPITCEgIRiGQsrxmsJybG5E0BOvnXyeDAAR6Q7Au4ryL9TFSHsdWoV0k7XkPEYot0oQZOol/XX1/wSIN0Zx+YcaiCOHd7SXM5YsWXI1g2oMz5Mg/0IJX5goLjQ0lEGXfaBQ6i9z0mRgq+nFiJMOpk7746otC9ZRuifbRw3OIArapVbYVBKIq6vxhvtiv/VWEAwBxp1mkAgEPgaClBhcIXc14CRdZzUpOyuFnHgHsxrYl4mJPtwVov8E3mJB11OAaCzdFH1odplFEgFZH457WVGbNm3GogmbeqgBv8dzzT+p42wm4e0ApR4MZgCZwVi9WO8axzDfr1NePa5ZS/skozCcHoDenTY5MX6B4tGce8180sUUTwDsap6puaKXeQeR7bHUoxNacC7l3Un7fBcQnyjHC+/5Pu1j3rxdUft8Hcjcj4FxBV8CIK6L8N2vIz0C8I7eA9GgRJiqtGvXLkF2tShrxmcFEsowE8dFaA2LFGjaoZEkPwyGGmYHZjAZmWcm5zo880O+5x9oQ6GiGt8+6qOm+S008deox0OGqfL88xiAT1PHLAbPBAbbjsPFjmY9mBhKAjnPZ7YD709bD5tG2olr0C6GmuuWWBq0XjkpzMAsH4XeLrv1r44RU6Al62oWrikJmrF8FY3Rig1Jr+WSXxKfAC5yZVR4QtkX74LHQ7onTV9VJb/X28MVliYIgM6AkWVM/KUhX595FmWy03OnSPOYro9qxPwez/VdKLolsm5OxMWZmZlXaVdGW+4CeP6c6yZo82cCWA94zqdcPSNaB0L7JNptZcuWLedxfgbj6kdz5syRfN622cGxd6mXzH9q27vRlH8GULemnJGMv7ONMkRJeU/CIJOZdujQIZFxITfzBvdAKqKURJzDR5rHzjEw/n8vstOIJb7fQkC2R8LfvXv36gjvXfn5+fcCUNJFfniwpNTxfy5REfBMhLtVjx497mP2v8DjPEO73xYGSKGJRuUeYADPMGvvgcjhP6/PJZ23i+VgQzOG8P4X8qzG1OcvDIgCtJgdh5vzexy/8yEF+TK2WjN1uEop0bwQNtEElCqh77UFa6bwRhnzXD65SVclALMV3MG1mwRtNOXGtKug2FiOCfPJyelrQZHfbFnQLVu//cmAk5MudAGc3XeQx9mNPD0TtqH9ypNdy7B5XeQk9meSb8i3uQNXI4+D5drmGTObNGmybPr06ddw7TqzVgPCyYDi37g2H9lMp5weptYCtC9jrNwk2xpVaDNgwID7U1NTb0XD/SNler158GLE/oBEPd5zqOYJSeaDBn2RWjr39eeZ43lOZ8q7hXZ5xFRWaOo/QgYf4ZokntcKpUjgL96fuU5A0s+ba2tSpnkBiyvihXQ0gvFhOUU5uAS8mTNn5s+ePXtD5FnAzFwFAfqTLkRdu3a9ef78+dcxMJt+nueEjBFPSTsoWRCCt0wiofbt289JSUm5jcacGBHOMGE1dOfZjbQvavdY8wPPywL0WzIAhqHhnI9G/iLPXhMl6DzcBPlQ1yew71WOtC4DJtzI1E/Y0F3dUdRy5XaQtCfkwKsWADiSae0UXr9TjuQAitUCh7WbZEaeXaq/b2Ji4hLK3ymTnSRPkgFFprB4s9i+VkDlajmB5YzJczcytlsf5ZDdYqMcESYdEJj0Ywd0zYa8lWebvFRw24bG+ie00+e49kqA+3zql4/cWc830VTPZFw8LW1n69atX+e+zYWFhS9Onjz5f5GTxbzT3Vz7b54te1xBdnZ2EdrwDmlXDVoJfueGyBeHZK1NNZ8Alktog3rU6eyJEyc+Nn78+Hup5wTaazv1bjFp0qQ/MsFsZwz8jnLqUq/nGCP199ePmpVQoDKo1zvI9jOMq+9xT5UvYmP+SP87bCM8yrrPhBx0jZipr9ANR/YpybtV6j/PcwQ4ypqGUH+MwF7Lsu8NBPEak1gyMMzA3FdNST5iBHIhwpXBQOnJ52mu33Woo9d83yVLlmylHh8xIXWQ1IV6PMRgO+QBOYeThl2OH3FpRFokTzQgUNeNODU37bDBvls9sOg5st2wcraqEsopCbZjbcLbBfFwvXzJJhTVhiv3sBN/VYBiIb8lTN8EUGn22B31RxTs8HkmKc0fhmjznJ0A0woJdgDNliHKc6nueWibvvMm6rMWoHwT0PwEMOwgPSfHGyP7N5i8FQ31Xu4rQv7HLVu27DiuexpA/b51BKw/cHOPVW5t7usKoKfSfrEEsP5xvhRZT6NuG7h+tKYQzrdFY34X8G5PPaqOGjXqeccFoDk7LS3tRkBcno9+RqgmJSXlMP7mSEw0duzYO3iPs3jec+URwwu4PK/y3Llz/w7IVx0yZMj5/H4EhWcj2vgrX8QG+JH8d8T4GQfGLJOArkUAL3LJisZ4I9rxss9DMh0FZCBky1iC3ZGRkfFzOV0Z8I0A25vN7qzvqoOc541342XBggU3m7cMDWXjoQa0iOuVQbcSEHjXCD0GQ8mhCjf9IjXag9nk2t91EaGR2qQDFs1PTXiX/LkAyRaBQBsw53QB051NO7GgrMZVR01ZLThs6FUNnhXVQhvu4BoZ1ATwTNr6dFMaGXjBM5cBmtp31aZL4+XqULSVZgtd35Q3TQVM6E4sDc1swme3/M4s6be5MafmCjAmcZspvItNGAowL0Ymr0Qp+ATA7muRJjGVc4j/B3J9pu+empqqq9o8M4q4Ici7zTCCz/0INNOGhm1Tj/byXqNMNEMZOZ93X0tZqwD8NK7fYri1G40hXPrkGTNm3IS81wdI3adpyhjURCgroFF978eH5seDMWCtf/cFjNPBfDdD0TCIZTZ4M/7rRg7/tbUZl6cpq1nIgobQ/B9C9zSguCoivv48gOSA188ToT7V3xKhAMgfIXDfRWjbqNgggGpYnXQD4jqd6f8tK5s7PofazSy4cMUCQyJmtyNNaKM0WJE/74H6ID4ljxk0aP+qcWHnbsCpnVU1ms5U82qaDGZtrRKx1+HammHjbnf47NAMICCrOTuhej6AsN/yOSyX5YzzlrElpNdy8nWjUA16b75DJ4ZDNTYsx8AV5FnQ3yKrHGBZ4j4Fn8Ycqy/FqfwS1KkXk0/u4sWLT0X21nOsqXkN0Yrf4th3zRpNnZNRJp5DXqVQNRqvJv8/xWrqJMb0VQDwFs1tjnHAuQX33WpePgDbxKkFPC8JEL7UyDw03GbcOykxMfF1xtkYyuvAtY2zs7PND2kkZzue31/XwKVLl54CaL9NHcaUNwaiQJguXbpk8R5DAOQzmEjyUWp+ZRqvYzbjIxSM47VYtIASvSgOpXuNGy4I4Sa04zvRWJ5hcCzv1KnTJgZMupk70FDVpuq5083y7WY1KLSaFBrb3Hib97WM/ayac0Wjj+KzHh9W9i+0W9rRaPLqDOJd+2uf8pb0UmFqDtb9TAA2Io1PbbkmNB+ZF45La+oBEDwgNBntDIkABFIRWE8KOYe3RoAvGHP9cZ7j+mXUb6lat5mvqW+OpPGBC0TbreTvpfHcC4diUoySAjjRGpGphuhKANlyL69ZiBxcz8d6b6WeZi9ZRn0yAOGVgO6w7t2730I99XW/UM8LrlsLML6M3J7Huy0xaS33z0M2T8/Pz7+E/5ci39Py8vIenzlz5hWMnz4A68Voy/JZ/If7u+p9QXkNaJP1UnvKT4Em+y2eUy8hIWES9WiirZgxUUM3O6MQAdrHeOas8iJRI0WHZ61iLD2XnJz8PO18H/VZWZ4mfQyMj7Bw6HgC9EPVmdEMTqPl8X25mRH4fITwTUdTcfe6n8tEXaRMBsmx+bRXBgI+DcGUqWtjlKaobF3lfAiJOOMDEQ7ZnxtdeoQcplqxHBEuy3fv61o1ROkvfY/SPbaG2KaPdlv+DHfWzmt2C7OSbNb7gGNVWP7uRGPcBoC4OVYa0lBVC2HPmipqBfmIZWbhWONKe4JC7APNTibjVGOWWN/IvOMA+yay+HXo0KHIBQ9ApkdNlchmHG/TPhTmqUiGBWPlhMlA84p+5CaKKQn+05pj6pibkf/Ncbia/5Oo2xAA7hmArh/j1hDqJDTZ52h3I/+aGuJPeWN4n9mUP4j3acN9fWbMmHFlv379fklbflJQUHCSmbppzxe5/q3U1NQ3KPcc/k8CbM0MrVvboK5du+o+dxft8gqAvkAXOgNIuP5j+uk+AHv7/niMtSdTx+2U5USir/NR4d52jFz+cwwMlm87WcY9nZWVdWePHj3+UVRUtJT/FyJwS6U/NGcZGnKjBQsW3GqeMMBgMYPV7BnVzee1L+02lF/yRXQ2daiiR4EeJpEr1eGwggl2760hmGKv/238n5qV1JYhylH/X9ntTPJpqHMsdZL+swi0bmESjjcw3b1JZA2N9rfmCNHWEONgI94dPCgMi9a0VD8EgMSCQZy/OO+5nQDKusD/sYl+dOWzgzKL6Xc11BK0OFc/JZxz2eGkUnIgytPPuorwHXR3M3BGbdznMNlXc2VBWzYLk0qO3g0cz5o7d+5r8ha3b9/+O9zzgEEgZqoBMH9FW1ZHA/6BbdSuXbsNgG4dALZfbm7ucN3mKONVN7+doCjDe2robYGGLNNbI8B2YXZ2djpl3nDSSSf9FM33VbRZzUcFrBj+Rrv8jYmgNu1QnJOTU1qRsRVNYofbCu5w+jsqiYL2px0jvCtY9l3L4H8fgS0AfG8C5OqxZPs15wdyjp/NFjMAOpnSHuGejGZQGu0Ml+U6OJj04werfQb6SH1YazKQdlckAu7L8qCIJ87xfzUpNeDo/7jwZkE4Bj4hl10V2l77qfJo9hWDbuoDknWNUktMTFzvhp3oqqsbx7UVV6f8mMeEm1maLwCVehxvwG8/uym7XjBhaEeuG9oi5pOstkxdt1PeWp5hvkQzV0vwE3On0ywWESiVR5JzKNoqZCnZu2nost8Et4Cf/u0mBllDuxRQz06SIzFBbEQr7ivZENeORRbd1zjFDOS6Z9LOWwDYZ2fPnv1DlIyGmnrU0kIQkwlUty9duvSCefPm9WeVkdiqVavXOLdL9kLeN7Fnz54vA8pLeG42102N5MZJVhOhgSwR+98xj4hDoxkfi2eM+3MASDOJEE5C6AfYkFIwMjhTEbiTEehGXscA+ZQB8jLCWNvcdtqbHUSBAKiyAOlA/iJCpuM72qWt2iGDz534kopwPKiNflk+nvGMZoIw7VQSpXc3EIB6VwYEqtJetWjP2oCNmq455qoXFhbWpp03c24lwrysdevWhbyvhOquAuQK2aH5R+8KQdqlPH1Qn29NDVKg1gsMbpu1u1KXNdpgg/miJGzyuQGr+cnoOH2Czdxdl1XRBupmeLKTbB03EzW7RFzWZe3dhwqQ4/MPRpOZphIm20IAdaXmHtrQfHmmOzKjec0pU6a8qd2c9nwOjfmv/K6FBvx3NOaJyPFI7eAZGRnTTjjhhCf79+9/l3Z1ntFAPhbash/KxFaUibN5rx+2bNlyPd2gi98KynoI2WqpXT3eHmz9oozc5WXdPvb3OVZIx5ogbpmAkCGgch0/sXDhwmuSkpJ+i/AtQkNrwoD4sdqv3gEOYLSWgQz6VQzI8WZ9QHB3OtDRpnfIh+xO+IIFCzaHRJl7B278gP4sghxplFEiUgBqh/bFiLvjQFqxG2BfhcN9tGIAcJ2oDLyIZbrwPVyWB5eykpBAswQNeJPgbTPpE4w25lJbwnaDJWLXAeSaG7TJV9PtzZBpfssTrA15Q/Ck0GdYG3IzyjFAYSPPWReVq0uXvsuCFMC+gwlWl0b3AXa4cUZdivUBBrS0Ve90AtC3WUpLNdcv0lfW/pSy0nYz8EUXPCan942Mo200KzzO+V/TnxkdO3Z8DzmVF9n5bOiiRYtOY5V3HXWWhrNyMMtUSk9Pb8tq7zi04X9LOKQLIO+5ddq0aQ/26tWrORNhm7S0tGdWrlxZh08mZayPJ5M/9vc1N1NEUU5fddx6pI1Ito1QXu3SEFB4jQF6mktleWG7dev2MsK7kvOt+ZZoZVuIZmqGBmfus7pt2rQxNbsa2G53y6Nlpyxjfty0ijb2DrZ+kQYer3EGgDiocr6qyY73lslMK0OxgAJ46GkhXaQ+w5WZ7Nw0UztuYNJYVx4AcQMmG32BiwGRrYqMnCKuClgu6/u6lXu2G5hj+waOCq0P8k501DWLTyP7g+OCr2YK7b+rXbabq05AZqLYxmSqy5WbZ2rg2murdOjQYWuIwCyN+sz+81m2/4FCpz+vTEbmL/pezTjmL6yZjNMLkblP5S5G072UNpjIimIjWvMiANe1cRHXbUHBKJEyQECn/VYjz8MTEhLu05+a3yfxDuaALDaxAgDcweSqPMesz4MYC//g2LKKriwPlpfl62zmOOI28KywS0BT59gxOqd/kcv7igg/WsU2lnlPFBQU3MpSecCJJ554JsduMskjdduEhmE40xaE/xMAoSfaye00+K8RbAG5CI24Ccs8s/ruDnbQGNOYNl0Hs6CjL60+WRXZ0Ii0ynCtDVP6VQPrZ/lTiwTQzG4R23Qzsk6brSsNuYn1q5YDWNJ4P7TvVpnIzFyhFgo47NCuqn1cmaFv1Ky3aUoCcPQHr6o9mTZuTnu1CiaJdWrCgX96a+SxYRvyXL0vTM/kqmZ3Xl5eA/pvkz6+4ePqw7DfOnpuOEnoXWEYttzPZTOuuGw3I/VnJU060DjRH9l2c4OONsiibgZcrO3Ro8fdaPPf4ZrWqampTsybqcdcJjE121n8v2Lx4sUGzhg2vph2X8fK73rOV+vevfsVMsTxPscL6NqDpZLlfWdwbT5tueRAaZQiQG3RokWM6yXKSnMg5cp7VExcGX3d89sd9jbjyAWKpZMhn28i6A8hTNW+yrj1iBeDvyf0KwYgzkNwL0HjuFy6Q4R8I6A6nCVtLoNCJrfxJn5EeN1YykCom7iDnZ+fn8ysaLJJtZFq/G7Esrqm2klgZ9OTYC8Pw4GSkkbtJaeCGtmRJmi+A21WBU1Lxq9mupK5EQVw1db0QHusNwKMtlrJoF7OZJZnQALgu5oJeivXbVdWeH/drYzkaulyG42vHUCTvAcLqxXTNlJl6n1gxF4O7a8NdK3ntAcDLE303FBLtlqS6riZpclEbRotsCnPSzAAAqCoQX23mFFZDwtd4HSzMEhElzDep3LUn8F8pJth5bJ54g6ZTRFAdAIwAapeJExGavr9WdGmGwjFs9vOnTv3vdzcXPkrrkbmEpBfM0GXhKzocnKs5NoRyLhmt4G0xye0/UiUhSLb32cwDlcI3Pxex/NWH2gMe0/Pnj1rMwZ+wqF/0X83ZWZm1hOY98frEUi6NDHFVnxfBOHUMTNFBf9sfIlGmEn/jHA0R4guTEpKKuT/aV+1UzhCuBPteDfCfatpw9GajudwB0D5PAaB2kJ3yV2oZ0GnTp3eQKNIBiAkMWrCve9z7QY+MnQVa4/k20AFvdDkrpWwpgGDoFiiIje0oomgIoCsgB9JLkLRpItG1kCaUtNX8bExig3I8CNLHyDjhqRRZ9u1IZfu+TNLt1q0wSOS/upzXMIxzRR1+L8+wL1c7Zf7GuhBQbmCikxklqF/biL90jUKiwb8W4bAkF0hNHqnZg7NFCYyFW+Rxyb0aSM1dVnWDMXnt2YCz7v5J2Oc2FxT8ijFWRt+FCTyRYSvRxnH3Z/gmQ20j1MvtddT5aFAprahCLzmxhvv8i/kazwrul+j7ecnJCQsoR1ac62JUPs3a9YsD6ViEOO+CW21uq72IdqJc2a5eYnj5oJsRru9sL/9CGXRBL+8918mT558F5NWDzTsUwHZbo4LJja5pPdeG58oIHiMxFaLJux19aisfF04K46ooI+QNdkMueeiHV/D809DuCV3f9X6fFX2YwXBIA40nxwE8QdGZ5kah/oNRXB3AtBSFrrz7EZeN4Sqm0tglsoXGIyAXL+CAO7inlhAgW5WrsrRmmXs0t4Z2wDiW3AoCUxtFTY7HO6csFG6rPhkAIEcfjv9LbFTVfq8Cd+2S10GX33apq7mB4RX9zMznUgn2VDAY7DKL21y2F1oXVtNTa+dWVt9YmLicqkvAQFd2Wo6QfJx+W5Szy4mlRXQBWjqU2Rkm4Tz2klDmHTVkK9ul8kEAGF5L7YA8E6mVfUrp2719cwwCIX6xag4BWUnEF3xdL+T/Yz67v6sXNYHI5tuyG0LkSEoADudjHi2mUWyqMcUrpnF6SVuMHPLiXPmzLnFiZ/J5RLasSNt9iDjaznvso73/QFa9Bms/s4EONu6MZqRkfGw5jeTqfLuo/cX7u/7MgG0WLBgwUNuBnq/ExNlpVF+IspVLn25So2e6yozpjo6GWvmiYA5OTnZjd0fUOdbOnfuvIBnL/86APIRBcZWVhsdA+H4efPm3cAyZ2GbNm3uYjZfWdFEn1/kRKFNl8HfCsEagMA/MX/+/O8hLE+7nEXA+yJY8xCsaiyVhzlY0TbeAgBcWp8DiN/CwGgKOK/h2FLNC2piIeOtUQg75K4FuOurPesRESL1YlqvS/do06s8ID6cwDh+E6bKnheL4YZ1dBmveYL3r2VyTtPES7akhkq7mEU5MlNsBKjlupXCsTVt2pLj8lMYBKLWtlvQ5foaAGQdrqule5zZO+iXdiHfnRN5Xe7rpM3YjC0c20kbLtJdS+5jVzlpaWkLuSYWaqxNWvpIVy02N8+IhUDzfDf4NjOhahLY7kSiGQJAc4KoL4+EGjLvooeFVJglX6bLoNqmIOk4MfEobVfIO5xKXfWB12NkG99q8QPNide1a9dnAIZP3JSW6Ie+qAV4j9JjhPNDpRa1rVQeunXr9n8rV648jT75CNnP3t8ejn3PGK6nb77t5yYq5ekxYzsm5ufnX0Mb10J7zuZZlwH81zFONpqkQYVHsOL/SxlPN1Fnk7Oexv8jpB490mMejqgNPIGGztpCR30fYdI7YdnMmTN3ReQ4X3Xd3IFmNn8FAZN0uzZ12kjdGnfv3v33/P/zrKyss48//vi/mH3BoALuaZSamvr3jz766L1Zs2ZlAkSnM+tPZNk3zCA5BLpv+/btVyDAyzWDaJtT4zPbA4O+nv6yCGgxgh3jZ4hMOfFtEf12MO7LVPF5tLMQgKAttfRg+0BQ1Qyj2SVy4TOcnHZsKpii2Zo5ZSvvuVkhjfyytTmiCNRkQDbnngaaJZiYl/KO7uzIb1FKW67Xz9ZIuz3dU7U29yTQPq1DeqHSEAptZmiZzwrDRqeabwvtvI4PQQeZM4hnCdqgvBVVnAScKAR6vSsEWcOvBWGeoZatG1mlkBtuvWUYdal9WtCx3wRr5eXLUCDifZFtY+pYCuBtcwVn3j0Ar5N+1YBpAcdfol6njB8//u/I4oMoO4/x/1bewcS6+jDXQtHIdWVXUFDQS3ONWTwo3s2+5WWJ9suTNdpiJW04GSXqZID87/zfBI07Qy0cUK1J2QL1FNOXUf67UpVarveiiEg+dF6rVq1eoG6vTJs2bST1bs09Bcdsxl8iCEbC5C4xs6lL+JLIdetw+LMuDEI3MM6kTo0KCwu75uXl9ULQhqHtzTXUdtmyZT35/SLg8KGayeLFi3/Mkq2nrycoIZBtOW826WnaJwHbFmp8DOTmbiZRvpkXtCvredGEY1zeWk1sF4DkJsrufeW729cgQZs3I4bJOj9TeLQg/1ly2QUay70RZGHTaLfWHADV3IEu7TXTVEfWOtLv7dHS6tH3NY16k1sXQNlkZgvTytPm24NJYauaqvcmJCRoW9YkIQubxlo1VtnWYsRBXL8thDvvCtwOEV1mrWCyqG/CT55bm/d04tc9TrOI6nw1tXadXEy/xfmGRsCZSNT0TZwzh+fu8MxiVzS6O2qjddLR11mPmcg880WaK+LbPmjJpTx/rYGJ1OHHnKpL/acVFRUV9ujRYxRyeh6rz/O57kSuk0vZQJp85Zr2sO0kn++l6QfQfoF3MtmCxEMbDrSXoQkiKSlpObJ/JXK3KDEx8a9yhpi52tB2N0551lv061Mcz6HvV+o5E/nLo4i0ZnVzG8+/hHaUsc/w7uKjTTPeC8Y2ztKlS//L5vdlfMrunh5udJFqqAjX1gkTJvwZ4VJrcvKoCzgkOxjVuJjtpyJEHwMENWnDCwXSkEY+RiiA9jEAEPk39y2gvKVqiAxwyYWa0e5JIVpvW/DIqMYAaNe4ceNNlNGIZ0i2sxXwiGmQ0UDfl6CGzbIq0QD9IgU6HnDsS/1fqa8bbk4IVYyso23c5LJODTneTP5cAKK52SmMrOP4Wj0ptCNqqjC9vJOyWmZs6cY7h6Ws9tqGnOtMmzUTVAVcTUV6Q9BWEgE1p327uInHe68OvMbNdWurtCcJgem7pKHUzUstfgPP97nb3AtQU9T+KzWnm330jx4fDdQW0dy2MQnX5KMm3lA2OO6vKfcv77xOHgg+uwIoxjwFgrnpC/eltY14nqHmrkqa0BadtV9LvblkyRJNYGtZferi157LdR00pLop9VtIW6bw/m+YZ4/relgc90ofJ6nSK7R3cUXAmOcvZFU4D0C+TpOjnBfmjXSCTktLewWt91mOr0ah2R0RBUXh1YBxFnVoIw1q165db+Wa2eURbx01ZgqXYCzJv/IG0K3sQEujL+svSstEff5jynQadSkDc8GMGTO+b2QTGnALQMUU65kIdj0E2u+tCNZuMzC0b99+uptPDIhugPTNaH3jOPcO76gtcwfnZyF02liNLuvIPXUB7SwGywpXKQC2Gl/VKHIuDgQrV97TQCVxk8ZeTUOtxN+CY5Th4WA0rQO4F1WOMnGYl87nag93Jzww3OkjrG24qUQ0bpDxSRAsqdti2msZGpIbaUvdpec+OYibcn2DYCff5ESFEBfL+saA7uDuP23TmPcy4GMpk5cZOWoywAt4R7OxtAoBHQsEZj66SrY36WelPV4tNtgm6r2dNl9KW9fnno5cH7NdA+gL6Ut39bcD+kU8R9ORyULd4GrJ5NGaCXVVSkrKOjN1OClrf9YH2QwkBo+YocM2YAw15lkdKbdh8GHOQuNbpxx9ER4wwWZr4tJqmlT4fzXt+6ArAvqiU7du3Rbm5+ev4fhLTDwXjR8//hsDBw58nnZ4cOHChf24Vi+f8zQHGeFoQA7vKieyrHjVK7qSKigoUO5eQAuXA/laxsgd1Gs0v1MMuqFt85xgy2MYnDVrVnHbtm1v0E957ty5lb6otjrc//aCsaxYfr7qP4SlUpQJ+nD4E9SYqbczu9+HYKWiYZgGqd6UKVMuDumYqk6cOPFibV8KkRSDzPQFCHXirj02h9Fout14p+4Ie2sE8zRA5hEGdDuX5wyG0QheIQN5tstugDsFUGvCfbFMCFzXVK8MQcp2CRqFXBilZR3xBUaArDJlHhc0t7XW3WujmTqeSa6cVUAM6AWiaJD5v+aBuMFfGpWjXTmqQ2AX89vJyBDbpdRlEaDXUtBmkpkoAHNNsSYx7+N8Y963N8c6Bk+I1dw/U74EXa2oeyLtmyGwMohzAehczi1EW2vK/ztpj3ZMch1CHZpQxgpu+5j3XUyZGRx3Q09wbq5NVBu02TQyMzMXZGdnGyjSivKb8Jw25jzk/Brqa2i5tmrrt8OQa93cBPC8vDxpLosBqS1q2UwUJdJ5OvkwQdQHlG8A+L5ndKZBK05EgHtOly5dzgGcFnxRHgKyyTFh7NJDR9Y55G2broQdO3ZUm+/GpDWbNlvPO/56zpw5J9DmAwDpDWiyb9F+13PP6aza2gLCyu+i3r1735qTk/MreZUPxrRlajDaZClttpnx8C5tdT1l3sIzruFYZ9pndnmTv3LHZLh3vB2tZGWHHTfF4eb0rWC4oYYwPYnQPMBAS2D2l7YwcebMmf0UwpC5YQcDr8SByIBuxABYpTbNIDnVXW+WX49w/lnKSjSjLoI5Fk0iTU8M/Tl1vGcA5aJZVUNjuZoyr2Aw/RbAWcE1dQDYnWZFNmyX+wwdjpmWHOARb7Kgqd8m1200szUDIcb1a5QT9+sX6+6/APJfnLyR6SNkXC6N+kHbYlRmpKmEIJZY9g0zr1iXYI6xfmqNlqONNbbK4b0KObfQyErB2jQ8TPpu6tRDm2rq7j4TT4GZjzUnaD+X/4OB3SxkfpY/dxzPWCp3BADakGe2dNOTurbgfJOQFsvr+5olw+tZLnfg3Xu6Q69rm25ulJGP9qgtWHrKQmlPZUSjP/ryLpkAyBYmvnFcnye4WX+9JWi75Qbu6OdM35pVuTHlSWy0jLoUmQaK598zefLk24LNPBboZxvwHt2QnRMpdwH9WumLyJloKieZ5cw3J6G/8mUfz58/fyPKw3i9P5QTZG8ysvsa9Tid9rnR1dmkSZPuQi5XaG7hPZt27tz5Wfr9E95L81sKcjauoumRfDfetYoyjcxNdRUyb9680pB3cNf+3uFQ53c8ojfwDpc/Z9cvinby8/ypUSHYawCVOxH0mgxEfZm6gx21AYlFgO8cBkFHw3MlRHcDjWWa2qBLbZ3nSwCSbmjATeRA5rd0j6vQuLO4dg3lN+ZzOcJfv1OnTn/jkfPQKI4LS/st+l9zrpa+yZqUGDC6zcWoIwVAACFGrC5wuomkq5Whw4KqmyJoTVxao3bQYGOEN5ZDvc2tZpoh7Vt6CEgnGQNkaR0jcI7MF2revMNxblzJnOZxBqDuaceZMw1Ak1e4AQO4mSYWd+4ju6bLeM05amGmpQcEVlPvBdR5DUCxleep3VWj/g35GJm1GXBZZjivG5mG7dJuXTUvBLpMDcsGiDQOKwY32drz7o1sW/onjfOy1C/huSsM4OC7ARNc85CxuSoAtNY62Ibc25W6pdJuG2iXtbS7m41ScApMsfx02roBmtX0/2aurUWb7aCO7dG0zcxcO4Bx5WhCC/bU6gDlS2rd8YRR0WQYT7mqz3NZwI426eI9Kcqe9x4nfYB5b4i9/ux8GvNRfqoij21zc3N/jPYur0VXtNHTqdd03kVGPN3aGug9xO9JnPsh33qtjKqIz3+QM90Yh2RlZQnwq+fOnXsTYHw2z5hDO/2Fvtt5NGm9n3kD7xgY71/7UNARONPZGPTxwKJFi85w443/5zpGAKHVgg8DtLk2RwEb7aofQLWkX79+FwA2S7URMxBuZuBfzr19+T5Z53gEdzaAkB2W8N2534zB2TxTVrDGpsExVZChwNxn5ottUvBKGSlXgkBhEIIgHDLyCjKyl+0O9J6CqqNZMp0dAo9amzZl/cbM7ya4mddM7wc3txCgGlKBCtLaqx1sYTPKaxy4htZWRdiqAV6mQzJYwjRAXqtbmNSWmxictl8y4JeilwL1MjPwGvPPmXeONlLzts6CdSMmoHQAvAXvtI1jS7XjagKizj1YXvej7MG8h26GsuP1D8EaE+Xv5Vgh4JFj27h55+QQzBe+YEHIiFzfHIZu0vHb7B5uMJk8YJFJYLX5azLhuHn1KuvvzPv149wQVz16v3B+i7ZqQZbn6mN7GudOt504vpj3+Mhkn/xvaHZd/dJ5l+fpWwNSYjwsZofWZc93j6LR4lcpZe33FdnYjsAfmXTzWM28hLZrx7u5cTBo2rRpI1iNpA0dOvR+Jpt/yWjHuSLqlUY/dE1OTtZP3kmpObLXiuN9kN/HkdFdFQFj3f947vmM4VOZeLrS562tT58+fR7i9+ivMpDriNrAO/Z34B1rBFZt8fX09HTTLV2B4K0CcF5kQH2XJer9RjT17dv3nwIToHtxXl5eY8ClXUZGxu7U1NSRgiAD/0TBifs76zLFQM6cNWvW0wD1kwyc5+i4Kdx7OUKb2b17dwNNhjA4LtKHlPvma0NGwDMZ9J+yNF0hIMojoOZrRJbCH0LJYwDqpoiaLP/rNudyfj3PWMFg2e2GG/fWdanOtRJyyF7WjHvWyrER2LyMeNuuBsgSf4taM+0QI0DimTKdxWyrwfZXJdie5U0QxN14O4P7dgE+AtQunuvAlTTd1FZ1AI7NUl/yXi1oq45GxfFOyzlvuvo6/N8eMDiLd+2oSSMQxGuzlXlNDXuw2UJ4VrZ8F1xjZFm6QM259TKvcX2b4D1hyiIj/0yltJVrUniPRLRFAVvTiRNqXcrpYVAC7z+HNtIzpi3nO3K8C6BSl7rZD2v0TeZPDxgngWLt2nw/A8iOtB255wZ+XxIIidxwNLmnEWjzAXltz2aW2WSmZk05mhq026rZRoQ7kb+2IBkR8EcERfH2/3gyKWRqZwBVy5mniYJvw6VbMCmsQfu9B01+HSs9w/iv1B9YmeRb89qzCxculFqzrjIUBR9V5M9n8hz9w6tEHj8JCQnL6fd/zpkz51iWj2NgfAhtOnsE3Q1GN9x+qzajttipU6cVBim4ucRgTef3LJmv0ALrIdgdX3755Yk9evR4CuB6XXOE7lMGF1hkx44dp2svZmn3Swbj7QjvwwDU84Dw3TxnUGJi4sM5OTl1+X2WLlgCAeWP0/VHwANIdsupoB2X7xgbnHhIXd24UzOqyQBvZeCDO+WmE5IsJlraSqpjZgfKzmHQLtK3l2epJRd53vI0SUjD6KAOIewxLUgQd3OM8qWq3KEftR4I1KMxZf4E4O3Fde8zAf0v5+YKDkbkyTOBhiYwqTVqb21J/RK412fO0SrE/VV5ZkeODzN1PYM8Ty1TzZyP4KVP7Uy9JGjzATKZcbyAybEN5Z9rSnjeaRplTTXcOmwCFoXAkI7BnKCLWlcDFLhuJ++6UA4Lyiri/ZdzbACge7b7sGrZatW0zVDOf8oz/sU1WTy7ZUggakSfgRf2/TKAbSPPm0/ZenKoZXfhmuqUl2GwCJ88QFgSom7MocUGkyQlJUmYr8atW53cJ3MA7aqy3IV3d3VTJ6wCDD4xVdhebdo+EcyN8Iy0aCc/6lkLAJ+J3OQDit1YvV1PPX8zZcqUjZmZmX/T+0MXQDOmMPFd3LVr199MmjTpWtndeFaF3HGsgzJJnU3sWoiMfMpzeqBQ3MckGyOoP2YXPsAK/HDbMBs3blxMoA735Ux86GvPnj3bABwvNWvWbALCfiUDbBzCn4BwJnOdbk2tXY5qFgi8xjEtwjIUUDTn19CcHzIAQX5fj7M8XA4g36zWkpKSch3XLaBd+puHjwHaW5dbBsv7gIeRTY051p82y2IgL660J/FmzG5aaQ/3b+xZbvjZ3y4XrY+alptlfrxHjVezhHIh0ArcgpAmDpae0kyq6Xh9b0DpG4Ir9fF5c3mndWj3y/QqYPL4LgOyBA38Nc7lBO+L2rybYcv6aJsGSFa1hQa7cDxJcwL1X6aGrpbpcbVY/m9CnUwQWkP/WMrRI0W3NP1m8yW30XZPXSdQxmjqlsk1v6DdzAy9gnJiXjAhL95kJyruSai0x/WsWTBj1NvTpSV6IUxGO1wKiP6QifcbBoYIfGrOgYbTIBZtxu/IAcFzMvj/Y679H+7pA+B9RN+MMpcc7XkZk3Gik5pRfkyYCym/gOf4fiuQl5nIzTfoRzXrtbSpZFS2u/ZzvWjeoqy3BG8zz9jfau60e13AdBLtqMklm2s1ExkoVJN6bNMtMtoUs78438MNZp77408++eQHvtP5559/OSu3F4N/+COA8GAmzTcB93T67UFk734mh1eRuTtcEVZEq1WuUSRcif2S99/ChHg+snvpzJkzFx2N4OoYZ0xU6tat2zEw/rJAWa20S5cuLslvYkClIsyPAV7XIeRT0Ur+BAieNXfu3DvRUmo5QCKqwPhP69at13fu3PkNtJt5CxYsOMWURLJnSW7DAKvO7xEMlLN1iKD8hbTRCTzPNEHp5n0DHJ7inOnUJbuR7F4QlpzI5Wl/PSMAgg81EXB9NwZrAzUv7l+kucWNO4GYQduYwSufhpSRVQDKTdqiKTeWSkpzB5OLKeMF08WaBTRd8I6St+/i/buaFl7ifVcNAFUN3cxojx6UpQ1Xd7gVgIwbl0XUz2gwgbZ+0Oi1o5oySdBXc1TDlJ9X742GmloodxjfabKtcZ08FCmCD+D2qunlef9zKKMd7/MMddelbTCfHmb75p6pmiZ43xN5XrtKe/ih1f42cD7bd6S+3+c9Enn+egmGjPbjfJ6gy31n0g996Kd1Jga1nbm+Jtd3BtD0Dok5gVt/+5n33Mi1trP+u2my1knJyWSbi+ZovXcYHi6YMmno2ZEQEhys5Lt5IJCyb7xmF+XNateu3fOUMYN33Mx7aeOWmnQeq41M3t99gaVOHnyvQ46MOOziyoL32cHk8PsPP/zwB8jb6uOPP/4q6v8+q6vXp06dOhzgzOP4h8jN48jqPQDJY8jty2q8Fd3D8TpWgc2YEO7Xfs6hO1FQdh+NWvExMP4K/hwwegrQ8G6a3crg2qAfMQL+bQT+B4Dn66NHjx6DUA4ORv3dAPhG7XEyk6mp2nGWwRJxZGJi4o0u+dFOfkn/dEbb+j8GZmcAUE3MTcKz9eFlQD/D89ayDBzE4FzAdS6btffG6uSmmC5KlN+ZZ9VlQKrhqRn2ClSTeZxbTX2b8OkFoMzj/wzqZ6LVidoQTdJJ/XOZINIkxKGOqwL9ZYx4XY8Ejm+KNHDtoy6nTa3EIO7BoG6mlkpd56sBMvjdeJMkfpuDPGiNMXOPtlBApyr14PXqx9jXnATENm2opqtH27oU4D9NWddEobYqNSTt5QZhAnVYSR3/Q3lrJA/i2vTAb6ygG9qbFcwiqYHDosg25KOZweg0SZ/a8VyBWNOIz5Fn+V3KTKd9zgZoOrkqMPecvBQcqxtxTTum3AR1UqEdLXMLAPcLADR/9uzZt8jyZ8QmWqiT9GDDxKnvtO3u+lavboBKOzOR8Ddf3/RFixadhwbchf9XMeFO5ndfPpkSULkRKbES7TfBQA9XK9abth5B2WkoAkbgNe7QocM87kmjrgW6FCJXz6KtnkIbF6NE/FUzFP37PeTmOD1LWKW9MmPGjJs1L1H+TZrmKjoeo2QKasjKtBvyRytH8TEw/go1ZD8ZGRnaTe9AuC9FC+mUnJw8GVB8xSVzfn7+d9BehjqQXdIzQO+lw3aiUd2KNtfBwaFmwfFRDKgfan9lYA9GEzuLwbfewelmF4P8YwbxbJaPFzFIZ/L/h3pNAApDOa6rWAcGkcvacZT5AdcU8P82QLxSZPd1Y88EoFJWslwdyD2D+D2ads+RTwBA2MxyXW1aAp0YARDAuotnxvhDeKdGArxpjOSe0OfXTByGNQMqbalzR+q+iYG51GU95Ww33Xskb9qOnSwot6UcHRzSH7BILwAZ0TTZGExBnesDsG15997U/Ww5eGVh42PGYs0GBaZIqrQnC7S+xf1oa0N93cDcpimj0p4oPO3ky432MyIwmB6cRPKo58RKe0Kpe3NM7VaX7NbUJVutU1u7HhWA8GAnkKivy9KeavbxQ1/tkABK2krfAYAbS93TOCefhT7VBvjouWH9DTBxEq8l7ad2bdpSKssqgHROIMXnZ4PxyhBlaOeuq281bdKLdtLbQ88F0yWtMmgmISHhF7RTmvXlvqnI0n+Qr3QJkDgvveZwZQ757A+ILxo2bFg6cnnTtGnT7jWVFf2+mXvrDBky5Lfc517GQY3HeHL9o9lOfAyMv8K/yG80KSlJfoZ+EtS4UcMAOJ7BcSqD8kUGQqNJkyb9EeFPSk9P/xiBvxDt57Lx48f/mcHlkj1mw+XckwCmg6h/Tk7O9S6l0XA+MFRYPgx9b7l2gi5vDOpcBv9qBpsuScnuZgue3LNQcODZjQHFj/gs4bzgoi24NuAoYFfp3r37p1wrcLQF/BLdeGJgS/xyAce3U+f53FMfkBHMlsvBAZA3UGMFBPRYMJGrocU1uK8R4J0A2JreZ6Zakj7I+mm71LZ9dOvi2uFoXBfKMKbpRS2Ve7UDNzSQwwzP1Gc1H00o1jeZ9u3Eey3R9svvdQCSJPEmF1WLnS+gulEWEQJpGtA0IUuYG368Vz3e5ZvOBdqJ+Wzg2DumwaJ+F/Octk4KRs7RTi3M6gIo1qf9mvOpHJ9Ituy4cfPMDCW8T8vgShijEA08HVtYut/GsZcp1+wZuyLypyjZqGYY2rWNKxYJk3Rv1FndycGNRicR6qdG3zR4xkgEpGlFH+xt/N+QZ6czYfaXUhMQGMH3FJ7Tz+SjPPtdfdW11Ztc1Y1XZOsPyOEFw4cPT9Ztb+LEie9Sv8a6ayKjXYYOHfosfXi5nhBRAoRjf8fA+IgC5Ghjzj+X37p/AdBmUfguAy+f/8dNnz79HpaKF/F7i2TpZqB2ySvfLwNb7dLw6nrRRpt2RDtXx3qWkdMTExPHMphacWwl9zfmGr0hdLNqRjl6ArShHLNdFHGvmTT0f24GaPZmcC7h/scZlHm0dUu0+FSe08vna2tkgE/RZUu7KOUKelsB2FaBJ6Ou9ljKasDzDCbJRZPKNRs2WpVE6yURY5xA7OYiy+JMN+t4V4l6jleDB9yGal7gOQZ1zAvmE5nY2lBGopFzwdVMG+yuiKHNTTM+OSHzs07NmkUks9E+qYZdX88AZZuyZ2l+MChEjwy+tblr214vs5v38DHY5gRArGa0uRpv04+3hcZHLEY8IPYNGn5u69atn6ZvFsyePfthAK6RICzxEyujcXzuQgudwqT7Xynvy24Gx2cIicj5o+c4QUcyxW9Z5gy5lhN7I+0q9/MFTkBowm+y0vnhkiVLvmU5nFvBJP4Qdbmfyb6mG8vNmjWbzwpHUD/XFVTz5s1vFzuQtz+zOpqUlZX1W7lAeJ+SM888cyByOvFo8xE+BsZfAzDel03ZgZSSkmIQxfXacBm8zzMwmi5dunSIJOZGKzFIPpDohQHWTvczBsQ3+dQuCwYhu0IRWvVPaaspnJZAPBnwU1ttuHbtWrUr7aPaayVxX6UvMIN4rEt3QNzyl7FkboGmOITrRgrADPCp1CEGMABUfZenpjUKG2lqYXXcBNL1SsDVV5kBLklQU8OX0QAXGeXGe21UqeP6tgB9f4ligitWR0DjG/yWK0Jgl95SrXV6MCNoKnCjbSnH5+iOxzUxjZiPPscFnHvXVQLPkUjFEOr1cl5omuCjP7H2W3PYmdtuE8/Ux1pQl3zeTb1P9THmuF4X7Xl/Azrq02ZVysu2Eo0PAdFMJADXBN53PdcPdKOONndD7T76czFL/0v0eHFjlGtnc91bgN08QLgk4uP4rBN8/OQQzwIXJfRNS0tTdf0f2r4Rk8Pf3UgElH8yYcKEH1KPnSgDbyckJEiNmUIbreL+J6jbraxOTgeo/0y/5/P7p9w7YtasWT/iexSAfR7lN0KrPx5NeflXmSj4GBgfA+NDqjE72NEi9ZzoDthd6vKdv4l6LzBwbmRQP8cAqJWenv7KvHnzvg9A/17yoX3ZqDt27Lh48ODB1zIYF/9/7J0HeJbV3f8JhJCwScggA0L2IJuNoIAyte5WbW0dtW5rh1r7uq1WbbW+VatVW/feCioyZI+QQRbZm4SEEMLIgEDI//NN78P/aV5Awgx6n+t6rud57nHWfZ/v+Z7f+Q1AoY5+G83Hj4H0ucQYugZQlI5sI+XtNM7Ppf2hzULY+GSp3VKPtdJvtV6gEUwAs60QRALhTEWQYnD7cLpchhsM+KnyWaEI2rRJrkAlP+7JMln6u54A0S5Y90jY2QW029PabJMFXK0VqVlGI4EWYBZpAtIxqbFJQ0KO4SlzqGX27K0NN4kjpMYlc2HKklGCYuflifn+p3vbXTUB0JdztGQXe6ZPKmCG+YogIzm6VAwV2ZsJ5GcA0QzpfANOzlp1HKqPBcLamBw2bNgaBtX9PLuF9M/vmHy04SWvfeWc3yRZMOUvoX7LAV45wu9QHzSGG0fzPpvJwRhzHC7ahq5VZGj6/mfSheawrASrqYP0oOt5l26Ud7sxY8Z8LOf4HPuQvkhYsWLFzfRTh/YN17rRztKxY8dey++lALQn7+GzElnRT7/medqGGzYYf78ekJiMdpsZwAkA26Uwqpm85AoRX6OgkgBlugwpAB//ZcuW/UJMlXFRJwbN8eFSBzNMCaYmPxM9AZ3SkSNHzmdJ+hR5jmC5/FCP/7hRDLAiPqQr2gjgIOOFvgy2SJn7MnhfoB7vAmJT+czg2ELY+hCZSUvOSpmp8vPLva5yuM5nmtgndSvgo4gS0r74VBtDgIAsEmWscRftuNTSVtjIoF/Jd642zGQCLZyTzFrnPTw8tCkl15RySiQtN4GrZLYCVAGEwFg+JRSKS7rKsXJIRJmpsNo2AHWkulXO3sl/Cn0RCAN8UfmSV7DEL0wq4wASWeRJ+0Nilv7S3JAIyZEJO7JPgY4V2aMOAH4Zdvg49Qulb65jUtNmZzrn13J9vpwZ8UxKpN9r4sUda1BSo7PLc5NetSbrPd/l9U3vlmVq3V/vDs/iDJ7XmTwbGdJsh/lO5H2QyEj9Ky0byZ6VrwvvVwnnh8s73ezZs++j/IdltUc+Ibyft9PWOQB6i224YYPx95IlC2StwTNAjFQbSpyuY6CfwYC/Rb4cVq5ceS5spXLChAmXcL46Ozv7LZa9U8yyVx+pWGkTSBjCoNkhvVdFsJaOrECXQTbYUsXqYHly4q5NM4WR4vMGYPO/nFfI9zvJ71tA4BUmBHkkk26swFuWf8rfm7JjxaTEPsljFp+ZktnyvYQJQUw5AYCcLlkw92RyLE06x9RBwVv7aqkvdTVpG/B7uzbMZCWmdhjZuBITi94DF9i2RBzS7pB+cl/6S3HrNnFvO0vniYrYTF0VFj5YDobohxomqEGA19WsMmKYIJyNkx0DZI7fRuxjvNZpoiSPPZSRQ798SDlfA+yKiXcNoOUtR+yUuQhQq5URjfHzYVj08VjGKz9WPXo3rgcAf0tdCvhcuWHDhu3fNS6MpofqIZVBQFbOoWI12SpKucRIvFMKG9ZjxowZd2iTmXfqvujo6D9S3icw/quzsrLumT59+mz6bZlUBmUcAqhcmJqaWmrLjU8cGNvT3ClIxjpKACA2BZNUiKFs4w6TgbcoKioqG5D6q0AWcPwKIEvW9YBbMiAzxQw6Btt2PhUA1whZVgFeQyT/JC8fWX0BnNthivXSGVYwTTmzBySlK5xCfkthh4U+Pj4yPFhIWTnUS3LWnXLyLaATEAvAAUoX6urMvaliySz5IwHAT/m9lvt2Sc4LMPXSh3L/zSeZOuwy4XUATJWhEFM9rIClHW03jnIsN6AdYCi5NW1QfQVKzWVlZf6ywgNk83UN1/YFIKZSpzg5FNKEANgnMXnIGfzAtLQ0b6PDbMy+HWWtpv9NYE9NAto0lQhCPkC8vb1XAkxp5BtIHS9XDD8rGsYCqecpb8fAsMfTB6/xfkb5c2HhF4eHh98LOD5Nva6gDv/4LgMMx7pILCWLPNq3LiEhIZ22vF1RUXGh/G3Adp1zcnJuCggIWJeUlHQ97bqR/tsBEfiQvrkTUvQK/b2Aa7fxrIfyPG/g2j9wf7stqjhBuGAz4+4D0Cb+n5ERKoQ5IHGxHOUA0O9K+TUvL+9xBqk2n7Qht02uKmG1AsH/2nByWGq3A+DaHHORUr80HizPYU3kuYLr62RFFxsb+3eAfJMiNggsda/YsHSBqcPQgoKCcAarjB/KGNSeMFcZXDRRvlxRdrA5GWzIwEMuPwXCUvfi+mGAgh9lFAIocjTkJsMQyY61QWgMZqiPLP/CFSGEeg6kLrXUaYmc/9C2YYGBgbnKk/svLCwsvBmAkN6xrMuczAapgL2zhaPpB6MDrBh20iPmW7ENtdkoA5MVcXFxfxAA05cBlBFFWfIzrXMfsgpZIuMFR4A/kZu9tFXfH0icIos4JsY7OPYc/f6AnnNXy7cCw4qh+dBvlzKJbuU9eljGHfTFw0z6TUzYsxh7nycmJs6kX89ctmzZ/cZJkfqVSSGfiTFeUTlsUYXNjL/XyTGuneXAR+FoOkx8eaCrFaFaLI1PAgBZ5ufn905kZOSrgIa3NtxgLHMYVDEMnJ5GFqo8ABD5OPY2S1fjZlEhngC9WWKi2ryBTY4nvzth5GvFXmFh0niYSr4/px4Rki8DCK9y/i+wpCoNUBmRmHL04gG8EpfIiY1U+SIB28tyc3NnyiwXMODyOukODxAYk0c24FcutTXqE8QSfCr18Zf6HIN9D+XnUPblch8qIw3qIKOIATC4MyQzd/QNomTYttqu/rNMu6X1IbHGRsrPtfx2NEmtTqsIUgjna5kMVnJM5uV3Uxd/maRzz3v03ZcbN248AMInA4Qsp/49FcFEYhYZ5Sh0lzYKj5Y46XnoeaWkpNQEBwc/Qzt6AcRaJUVKhq8JWOKY6OjolynzFiamy5gII5OTk3+syUF9yzuXJqMVe6TazPgHmxzlfwDwYJ7XTA43S8YrIwXY8VIZWMhjnCJPM4hnA9jT6UOpgw3iW7qlB3bmHQe9o96sgEYO01mKpuiYAn+Sj69hYtKbFbsCkNfCoiRLbALwauU4X57XKD+fiWE0dQiQlzLYnBjWIJb8inLbzEQRapmC75cTIMmM9ZwFdI4qZZ11bc2KwdS3s19fK8qK6t8Rk4/f+6lLOUvsbwH7hZRVI5GJgIT7hgPw55SUlNwGwIXw3xkQkp+MYpko04+LySNZ8e7E2k8GEz4Ym2Ii6089N9D3nrShlPpEAZC3lpeX/7MzMzZ67aYvDldXs+ICiIcDzmfxfCbzzO/NyMiQMU+PsWPHDi4rK/ucfng5LCwsdd68ecu1qUrfyYF/z0mTJl3IpLjMbFJ25R12CNVlM2MbjE898zUOxA3zNQPoSJevuteSmXaAM7/DyFfgJxeZXvJtID8FAEs+S2t3Bs4jgOIvtXmn8k34HLNZZliPqYtjtG5HUFTEC8tFopNjHD3TDv0XEzWGKQbkVY4MB2QRaNxnApSyPpM/CyfHaw/WX53rYtipfqv+1uZlK8y2jMtkMLJNm4h85nOuSI695bGMek22wlv5Um+pfG3g/kKZVZOXXHsqYug+iUE0cR2JKpmp14kYwOHh4a6bNm1KByQj1GdBQUF7+TwIc39EG7eOOsbqA8nY9TwkIxYD/i7AI/8Yvs6V+TX5pwHyL0mFUnsDCQkJSZT7njZgmZAVR3A3rLhYG7fc9+LR+KpQvtqo1qpFHuBOVN/ZYgo7HdELKbCSP4hBgwYpYnIETLMShlZ5pBOPGWAGWK2NsQJApUDMECboRBmJdXV1F8KOh/Nbvgw8FP4GQFzBIEpUkEw5Npc/BPm9kKoY+YxjIHo6hkYXC5ZaGUDWMVnr21G2bdpkJggjHui8kaVrKLenmXT0cgIYzp0tzg4FdOozy8VnndN/kjaP5Iy+Rn4sFEFDEaBpSwYgNIW2fsyL/5nEGPRTMGX9mO+JtDmbSepp2pFHPWsFPAJdTR6qd+cJ5rsmVU2IuqerDPFI9w4UVFTm0/TvnwBfP96b9UwsnyuGnmM91D8xMTH+XPN7GRDJN3FRUVGy4g0erB3mHp6vT3Fx8bW6hz4Lpm/+RZ90GKYAlvJlsVxOiBTRJD09fSbHZQnqasUa7NJ7r/0A6pjEu/4IbchnovxDdnZ2i40KNhifEkasAcBAGVlZWfkorGOsjCNGjhyZFx0dfU5KSsqmrg5WxwgPAkQNIgUHpZxUX1/fVAbvmXl5eS8yMMOYmb9gwN0/ZMiQGQyyrwGnEitYplxgKlDnRNjzowzGcWbjSwDFdR2h3AT0Jry62WDUQDdAbBi38c9szlvXKGCpk2G5h7NwM8fF9MQGAWCFW8qg3h+SVwb5eDGQtzK45UB+G+zMn/78iXSUySNCLjLp19ClS5c+Kr1oBn61HNtz/w01NTVVkm8bWbpZzjuaNh8puGhTk2cXI/8VANoG42PieCX1m7RMmDi+iIqKkjhI5trlAJj68r+eO89TJvN/gXlmSTc9KyvrA+6RwcYiiTMOFS+PvIPom8KAgIBXmFDkeElOlmRK3+FlLTY29n8p68f0YYcfYmmaKEQT/f+5+vFI26v+ogxpvvyD90mU2B+G/IC/v7+tlWGD8alhxbJ427Jlyx0rVqy4TMCsY/IHwaCeAtC9fawh3A2gCBAV8pwBswzwV4SM92FJk8aPH98CWD+pzSgjSjBgFBISsoR6XDd8+HBFlpBOricD5Sews0RhJXVPhjktkAhEfisASjFSMZteAEIf2GcY18bJYk7AIaBXaBBZ4nFc8eF6mXBBjgBuxBMCXn3oh/2KKi3jDUBgBUz/XUD1a4CgHrCRh7IJ5CF/DIrMEa64bQzmYPpOvjQU5mk7jHUz96zRSoCylrKsl9nyAbHDsWzAmfprYgJYZLI9SD6Fu+LrtyuALPZO3eUUaqejnwrHZy7ADQwM/IZ+ngQAu4vpyrxdk5Am6MNN6PSFNCge2bBhwwpAPVzqb2Zzl3Iz6MOrZNGpujCJ9ZFLU1lLamV2pJOX1ef+vANR48aNu54Jo5LyFvF8/yotHhsdbDA+JeyYl9wvKCgoB1ZXIgs2BtJ4KeAf7yWu5VeiR2pqatWYMWPOKy0tfXv58uWLWL7fyOD7SvI+LbO1eaV7FJGZQZIlx+oSmQiwwsLCPmZwT2Di2KHgmtpxN5aDgJGWqvIgJuxuYiAv4drB8rMsHV/5aKCtbkwKv+UeRfxwAiAbuaYPk0QfYyBhOdKRBzEZp1TKx4NMuOU2EiD+VOHdZUpNP91eVVU1U7Je+c6QBzbauFrqeoohR14CYzlZ304dNOn04PoeBjSOx96D8TWtScMKLfSW+lmioqMFYkdxjAHbzhPswX47HhNLVfgnwK2E5xgHK74G4PxSRjSHYsWajGnHN1xzE22RC869fGbJf7X6zgJqF/o9UGqGSUlJKxWRm/rulZP/rrTR2pOo5B1Ihtm/KM0WHx+fVbwf221UsMH4lCRLW2EPgPiCp6fns7zcPwGsEgCpFGMd1tVkRAoHAxwTtn3dunXbKPMCgOT+/Pz8f1H2OlhuLmUOs1wxamOuERalAJL7GKTpVnw3Rav+gOu8tOvOYFWMNDcZjiiWnN4bOZsRu5H3M5k289uH60bymSdWW15enko+bgzETAZ9LPmew8dD/nJVP/mMgG0tBASW8b2e/Mo1SViRNhK57nI5/OF/Gtfezv98yUIFshI3HEw7xFEEcbzU0ASUwcHBWt1cxHO7IDo6+i/p6ekKfnpgM/FogFhtJV85NOpLX+XJwKWrE4f6UZ7gmHyWKQqJ8jVM/VD1UntqampKeRc+p0/PpB718nzneA2gK7IgM3RnWUvSVk14MiGXn5PNXXnvy8rKWuizyyjrRiZz6Xa/SJ332SIKG4xPCRBroMmogsH8gFTAeBl/Hxoa+josNUdg3JUX04BOQECAGE5PAGq/sXLrXK7EHzDk3TDiuyMiIl4CTKdQ3kAGYDKDskxO2eXc3YgXuM2He26WpzcGXb1EBgDODgZRoQKKKp4f98u/xC5Aeq8j44KdDYBRz2CSuW/jxo336tqQkJB7Kfe9lJSUmSx99wG6vQBqmXun0A+ruabCbJ5RjoB8BuzsDJk/M1F9ybmHq6urOxwcCXwdZb0nYzAbeT/1nQ3IzWxoaJCb0d/QhmvEvo/F74S0CwC33yoAKhPkLNrYdjQsXv1gQPhQLLrze6FJjTat4e8ERZChPS9K9q0kzQcm7wiYbJyinCvGoALosqqbrwjWh9J+OVRZmjzT0tLkNfAhPWujDWJ7fzvIytZWbTvxyWy2AKDjGXTnW3HdnoZhtRyNNVVkZKTA8jE5wAkMDLwJwM1y1Gw42DLbhH83y2KxSytU0IG+FiuV1RxgPUQbfAykXWLYGlBGV/lgal3mmFTJYHuKQnGeQiMpEoWiU/C7L+UX+/n5vTRixIh1iggiyzr51uX8aOo3WR7b5IWNOs4HoFYooogmGQM4p0q8JDAGiK4A7OYo8KdWONT5imPxYGbUvcLDwxWLcDAT2EpNOF195zs/D8eN3cPdoyClWi3Rv1G0QQEB7gZ883SOd0vqcR+Vlpb+iLbLnH3ImDFjHuedeFBaEEe7v9FVVc7vQ7JV27ph0qCFFWtTZi1gt1ZMWZ+jBQc+c/Py8q6UG8tBgwbJv8CNRUVFh4zGYJbsxkrNcfCaSNVKAlzLZWeD4zVHykYFnrCgJljtu7C9d5koggDyXzAAf8S5uXV1dZP5XyXdVW3WSdYrp/Nc/wGTwwoml10ytjBqcqd6KWtkrExSXwG+9xcWFoZNmzbt4c7Prits0QCSmGxWVla2pd3QZZASuElVkondVabxpA7VND2Dw/Wb5Qw/gdXZ+dy3iOcQzeFwvvP0nvDcYiAJc3jHZG3nzES0GLB+KDk5ueVIwP5wbbaTDcbdBpA16Ixq0HdZS33HQJR57FYG47INGzZcBUDMl6xWgH+4gXio8hy9mB3LoDH3iklLlgmAlTC476eef/L19fUD9KVj3cuK+1YrXxcwwg4GrHscDTtOBQs+lPFJcXFxAyz2Uia9CMAs00S9MNZvWlEY/xxH2n8qq7MLz64wYrnX5PPT2traCzUPUu5AWO0bMNrPtIF3sPfA6P1S/1leXl7/5p61PKfX+V2iuoSEhMjy8jY+rnJIP3ToUIX6+tvGjRubj/XdsJMNxt1LJnSMsk7D1BiMn7i7u89at27dtTCY1uXLl78xfvz4iQB9bncQOzluoEl7A3CQyloZf8scQa6zOfapSMbqUCsOs3JwBB09L4nNMjIyMvmdaSwWTb0BwD4A9Nl8imHOeV0RsR3tZGzJ6EOYfC8HkG9tblYgbecJlZWVf5AXNvq75lD3WbriUk+U9z5p0lTD0jeqXazafGnnJeRZx+k22qSG+DGR9mAlZoPxCU52755mydoN10Apl79jBk6xnMXDMuXSstuFRTdA29ndpGHAJ9v3Q2eGKTl3QkKCR0RExLT4+HhvY13XuQ1ijpoIzQQiUPPz89P4eaqqqupxGOZ7sEjvkzXZSbuFVYV8OCuatfySvEc9l1D3i2G6/0fbxHEyp8+rYdTncn8cQD6EY07a0yCfyXLmxP3VsORk8uz/1Vdf/RPAPk8y7u72btlgbKdTCsQMlJ6wH2k/KFJGLwbRB8OHD/8ScHBx3NCx03f3pazpYmJixmVnZ69atmzZ4urq6i/4P+xQOrqdJw1FyW5paQlzc3Orra+vD2SC7N/5GuMk53g+F8uR/WapneXk5LyfmZm5hrYE8B4sKi4uvp1v34O1wfIIJ6AeCRMeqEjj/fr1K6T++2D4cWvWrHlaKxkYtw8rry+8vb0XaxLi2GWST3eepOxkg/EPGkAYJM4MkDi+/3zmmWf+WLqfALE3g2qrolBruW0D8pH1pdTLAOKnduzYMXjOnDkXy4k6n9vkhOlgzLIzWwaAWzw9Pf9In387evToCyorK4sdg4YaYxE58tFz+a48u8jqewKsDYpXFxQU9HpJScm9GzduvCM/Pz+E92PSwd4D/Zd8GyAe5evru4p2R/L9Ep/4tWvXfrhlyxYfmZLz7Q2oXyz5/tSpUx+AOQdyfLj91thgbCcraUlfUVHRyhLz23Xr1u0qKir6AHZ2K2z5x3zLhPhalts+dk8duZgCcKr38/OTzLQRRuhbU1MjQ4jvnNCM/nhGRsZ6wOtPWVlZ30p/1zhklwgmKiqqJ8v9i2Gef4+Pj58gR/3HA5BVNxh5PfluA4SvAXirAMzhZWVlswHWGv5nidEejKVbXv9cmpqaouRsCUa9GCB+uby8PEQAzjvm5O8vC+at58jzXWBg4IP0USX1HmzrBttg/INMnR3wmJ17Kedrk0gMRx7NGCARO3furNm0aZO8rClMvf1Mj3BiE3jCKh8CmGKWLFmyQH4uAKJvj1SX1hjWWBFIDmxw6V6AWD45rk5OTn5pwYIFt65YseILgC36eGxUKv+6urq2gICAW/nrV1BQ8BfYd+nEiRN/OW7cuOmy6DuYZafqx2pgMO9PEKw6k3foVUD3It6dJPphJez+79HR0fMTExN/CUgvGjBgwBLKcZWhEtdLHGOvuk5gsrUpuikQa9AyQJwZ0H1gbE0CYck4ZZTBMlomyuEMrLe3bdumQe8CY5bdv0IndQB4d9zM605JgCZ1OpbjKbDWafTjTPnJYML7+FAuKA+Vj2N0aYEzqxN9PwLLntLY2NhbzxKA9KCc2QMHDsyRLvfRaiYYAyJWQRMoo4x3Yaq7u3t/yhGz7yjfRDvp/E7p3eH7DIWroq3Pc3hIXl7enzm+mTxe4v16HYAfwDv0Y67pX11d/XsAu5+ClpL9LCb/D4/EX7KdbDD+Xi2fhw8fLnWll2ExETExMdcxCAYAHjNZSrbAhK4FbPcBwjurqqre0XJZgw1ANmpXQgcbiY+AHQvAYIdZWtqrD41LzK4uyY2fEEW1hqWOB+QuIv+du3bt6mvU+Pg9UR78ZNhyLGpiTLr9AfpnAeIPAPnHeEcajYbKodQnTaxB3pWR1OEVb2/vnSkpKbK0C4NN38WK4E1ZATJRzC4rK3uosrLSl2tqSkpKnuD6YvmElpZGVyYqO9lgfNon48ULhrub75Wwt78wgMcqXBGsR+Hot3B8k0QSxorOBN20ZIXtNis+8iTLQ+Mr+GiBRv3NEn8QP29lsrxSG2wSezCBygmTTOEb/Pz8Hs/KyjpmMAOIm1kV3cHPQrF7ozr4XQnwHgJ4X56YmHg1YHtbamrqedr0BWAld86VG04Y8M+ampqGWGb3nzKpzGKyGsLkHxsaGnrLqFGjnpUrVhuQbTD+QQCx1IhYigbCUgoGDx6cCXvzkhoTS8taGMpSlpVfMtA1+pY5yjeN316AwMkAsqNDd0fVpFOp39udViDqa/p4IH2xH1BqFGvtqjc2S8tF+V1XWFh4F327B/DaxXJ/JN/tCjGVlJT0PKuYDjeVhzJbP1I2v2nTpv3SKYaBDwkJCXEGWPcdzs+wcUzEJD6W9yVE5JoJ42Kd8/X1/QLmu5x3bVp1dfUvYO9DmJjkx3r76tWrb9BKwYpYXZubm/sgYLw7KCjo5cOZ39vJBuNum4wzd7PTfijTUuO4Jzg4OJYX/x0GWQAAvHXKlCnXAxQF/fr1S2dwfMXScr/xres4CC2W3IHCphwtLQGc/lwzFFDYyvlGbTbJ65hY9A8x7LrxqQzTk2vMmwCm38pfL0DzG5bxX7MSOfDMjpQVS0uBfvXgvmb6fC1sMl4Tpp6HFXOwTLLiY2WUlq65wHHK+vXrPwJks+Pi4m7PIB0sDJRRZwsPDw/hvXlIIbQAW0+pQlqXNIwcOfKvypc8F37xxRfzaEvzjBkz5m7bts2d+nsw+ZfTL3Np01S+45gEfkI735NYzGbIxy/ZO+8nMBlRgeSIMTExQ6OiomLi4+MHyZrpUAr0AmMG1ShtmowbN+6fvPR+sJUClqZ/yszMnA/z2h8WFhbAkvPXLIujOu9wK1+FTBIAjB492p3Beg/3rILlpMFm1jGgFnLuBc4Nkv7rD02RX0CsdvMcvAYNGnQjAPWLiIiI33Kqet68efPp+7cA5QFdEfNoMpRGBcD+jcI9AWqP+Pn5/RsAnM+xNvUxz3GAQNFEDDEOmrpiqGM2dnmfksrKyu7n+d+hCXbLli13y5LwYM/S2n/oxeT7V94jL+q6lwm9b2Rk5PMCUib8i8Xm6YefMyldRf5OkydPfrCkpGR1Xl7ePI6/lp2dvZS++rvlYH53amrqK7TvLE1Ax1N3+oeeej3wwAPdqkKKwSX53fdhCa02MOj7M0ge37hx4z94sX/D73MA5m9gujs6u700HrwYWLmwHzcG3PkA+DMMkC/lnEZLTQb6EH7fD7DeywBpYoAsMo5rDDBo0CYmJjqzTH5l/vz5t7D89Gbgu8FqPMvLy4NgNKOpxxxAXRE8Mh3v/76vUASI9Gko/f/W0qVLb+rTp88WnoeikvTnGZ3LM4oBqIobGxvTteowIOgYLso8K8f/CoHE86lTeC36eCrPLF8hqjg+mo+rj4/PTiaBPUyifQYOHDiAZxzAsTbq0yxGa3xefFfkaYGxu7v7JMaI9ITLd+zYMZH8xHI/kYjFqEAaIFabWRn1A7Sv5L5kxtdZlD0PUP2I6+bKcpBnP0LqfYDxDPrmW01SAHG76TOLce+kfR5cPwnGHE69Jcr4TGKMrqwifmgiR02SWsnYYHyKGZhl7//AypUr74CdLOPB1Obn50/kuy/LxHkH82GrdsNeJRNczcB9nRc+jQHwMwb2lbz0v9SmHfev5ngqDPs9GM82RwV/vQAql2tu+Prrr++AvbQwCPdSfiWDv4q8vGA1WwBkRe8IpIwXj3V3v7uvTswGp4wugoODwwCwWwCyUgDJHVYYSz9KvODBuzdOAEz/NQCcn6lPpSJo1AS1apF6mFmaW4FTOwBeMmNAL5w8buD6HfwvYRL8GRPqMMCyiQG5h3r48plIX4/nM4l+v5v7o5lgFeevSvlJfVHlCJyNOMVMBsYnBtfk8tz2bd68+UregxzqdC/lNOpetdHX13cQ3z5c08bzb+We1oCAgC2bNm26lGtrOf4Mv+sgCoW8gxfwPrylqOEA8mRWTL9iUio2wWdNuRqTtMmFtmjz2El+LaRtQfk7eF932dB77GBsy4xPIAhoUPHSRvNApOIUAAiMYKDXwb7mssR05yXf5siuHNmtJiVdw/J3Ji989fr165+CxfVkCT2PgfQtA+dbRy0AR+bEMnbEqlWr7lF0Zq7PYrC9wzUlDNhf8YLIFDYfQHFmvC6C2bR394nPsL3OjtTNx/Rh52W6kZfKYTrPYhwAM0tO7QHaFQ0NDXGKAwgrzmayvJXzezWpcU7fw7n2MYDHjW9nAFOO1wU4rnJVSb7NHN/LPa4yRZdLUz6DmeACJapgxfE4z+hyo9KiwKw8r17U4+eAfW/FC+S7WS4wKftVQPhmzv2dcnYBwoGAXC7PaD31qOM5if1uk1tM41UuNzdX0a8/kB9o44OaMkO5/mIAfgb//SnTh/rV876toh1fAPYrKeMMsVztNYwYMcKnuLj4RlZLfbluOuw9dMyYMfJN0RFZuvNegqW6t18y8KSkpOvWrFmjSCwKYLvbHu3HJ9lgfKKE8ZYcEWD8hCXfjwC9UJZ5lbzAXmK3fPfls01yN8mQBQTGGEAAIxDhMwom/XBiYuIZMJYzGHgjGMSrFMr9YBGDDRtXvDEG3VDAVpEZ+vJpZ3ZOB2hKlDeD0UfRfhmkyxWxorMjm5MR1sgRPDsbTji611RSX0g/F/BRpeSbY49EK2KxAihNemKVYqf0Rx+u2WMZvrhyX1Btbe3DLMHnAjx9mOAWpKWlXQirDLSCcxpDid7Sw42IiKigf3zpO4Wu30j/zOb5/YVjLgBkGX28F7Dy59stNDRUstRcgDKJ678CEB+h/HpA7n4+N5G/CyzUCRD8N2WHpKSk3EW9lgOEG3iWase3lg55HOcH0446Js5/cE0g5V3ENbKWi6Jd66mXxArreUfqpJEhts4z7EnfnEE/XMt7MpXfxbxj82jTdpVLPROY1MXEp+Xk5Oyjvs9Y5YbQJ6Mp1488WrnPiQlgJf17P0B/0E1dSxvHLzs7+wnuKeGdrZE5NSuL+q4617fTIcSadtilEyuqAESHZmZmZjN46hkgWXLAAqspCgkJieIF7s81sxk0iYDyJpjvqywRG8V29FwY3JIvaqBmw2qbNQAPZ5QgUGFwS8yxoqSkZCz96MLAr5FHNwZPEQMwmEHuHhUVlQxg+zJwVzL47wRMajtkVr167TXx1GTJd7yfgREZqB0CQU1EVij4DrmkvuUfQaIAAYLaA9i5c2ysLMCo01ja0pf+ywY4cjlewH+Fsx/AvVEA1RRAegTn6sh/ByDlI+BU0FT6cKhUtsh7H6uVfoDbO9Lbpk/iBeCUU08e7mKT5DOK/hnE0n6hYr/Rn7NgnFE8vy8DAwPf5Nz4oqKin2uSI+822tWPiS6d+jRTxyTyj6Rvt/E/D6BbywT5Mu3z5hnK74VcXe6iXn25tx95eknmS16+PIfw4cOHL+SeAu7tR17nyFAEEByiSNnUz5NrUxWeiraE8JzG8s2hgR8LTBUhmmub+d6pCRfmLWdAreTlzUTwBv0u2XJPjgVTpwpF8yDfGvpzM/9/n5qausnRrLvzKg8wvxT2/yT12EcZQ1h1Xc5E9fXB/GDYqethl2wwPgkPg5f9sfLy8uthtAMYPL0mT558B4Pn01WrVn0CsxglUGJgtPGyL4PBXrJhw4YGE2hS50z8uc4bO53ZpbyNAR4XkOeftdYGVEIBpV2AQ3/AxI3zrYByE/fIr8FaWM65wcHBxRzbzDGFvd8HCLbDAD8BGF4oLS09LqpvBoQlX1UgVQAxEbCYANDE0zZ3jlcAFJvEDLnWHeCcRHtc+a/Q8PtohwdtOEubkNIGAEB7q28Bxm2ASBbXDwPA5CCnDOD0FciEh4e/SRkjacMNlKN4ewMBTAGtJ0z1ScDyLfKYxOQ2mPubJQ9Vn9EX6dx3CWWEi4VzTYSW5yQngKqf6sT7OZT2tEnOSz559HEl/RutCUYyVfKMUUBVnmEOl5XSFln4tTE59OKcK++DNk752+ICKEfQ9kDqLwf8Go+76Z9kJgc3WO1vycONtlyvClCuJoULmAykbaMNtfk8q9c5FQ6jfZx7NpK/kzYjqecQyxFSMu/QFwqoKtm1pCa8izfSH9HUazvt/oZncl9GRkaNJuGDrYjU13oPY2Nj51D2+by7b1Leo3JQlZWVtdlWbzs+YGyLKU6kDAggkz4vIPAog0a+bhMBy2d5iT9as2bNaul8wmTnW6x4LyB6C9cOZ6AdiEFnovYezAOX2Io0LMRmJFOkjKEwlWfJKx2G9XcGYwKs/A4Ayo1l9NaJEye+umzZsl8LDACLHQyulVy7jAH+I3DIBzApI4+/c/351HE9zCxVA9SoVB0tCAukFASTup5BG/+wdu3a2dS5p+pvWL7ao+v0AlO3LfRJtXw2U5+nKFvqgD7cE0G2klEOUX04N5/+e1hqY7Sjmr4O554wGGENIDcJ9noh/TJC0VAA7m/lRF0AzqQ0D2C7gPL30ddbxJwpv5LzcfTDpQDYDvrrIeqTy7nhgGaIZM3UqYFnto9+q+faAK6VqMmN+lSw0nmMvHy4bjTg+jKAuogJJJTn56Y4dYDYXurcSN+3CHS5V2x3D+dKdL+8pdEOaUjoWU5jgkig7BbuKYCN/lSBQfnvyfmB3FNH/f4svWauPYNJ/j7qJnPuxQDydm3EUcYw+r4PeW6n77K1soAdPy09c1ZDCoe1SNoeEm3A2Gsk9jmYEYeei1QBaZ8Hq7pbyMePw1s4toT2bbZHuS0zPq028mAdO2Fwt8BMeilKhwa85JIzZ86MgIFdDDA/KEBh6fw55/Is5+EHBWEzQCRnBohGVldX/4a8Uxlcr4lVSb4I0PgyuMIYrGfCfNczUCOHDBmymmP9AIveANIXAIw3AzcboJIIRcBxCWW6Mvg/pW4yWHg8LCzsaeqzDmCokw8H4wnsSKz3dK3AVTrWlHOGtAxY9fxUGiQSncDG3iP/twUOYq3UsadYKsDwhNxacqwPgNJK+64GAIIBinZYbR9+u2mlALDr3BzJdKm/E3Vqof1OXONH/6yi7BT1B2W8SV9pmbWHMtZzXBugEn1kyy2kZMX0mQxhXMh3D2UrHP1iBUpVfkxU5QBrsVU/Vy4J5ng59+VTzki5seTaGo43838r5RdyzplvN+VB2f0oRzpyEkuIYu/lf2+1jQlvO9e0UUaoJSf24n8Az8Cd9uRJ7MH1W+j/GUxQ+VKD4xn6MqE/yoQ5hmcYY0WrFrgPpw5XSyuEMktpTwXlJPLxZpKq4LqB5K94g0PISyuJDfTfj6Kjo2dpIj8YEJtwVADxeJ7Ls7wDIdzXsGTJknvGjRv3qi2asMH49BLKW6xP2hFa2mojCnYUyPG9gMLNycnJ/6P3npfeVctOltV7juQlB2QHwTLfZrk4XoNm8uTJUbCVDynHi4E6CtB6GFAewoDPA3xfJs9yBt1kyt7NuUCufZtzrzLI3gIYHwEQBgJKZQzmIbDYlwEDP6k9MXjvpM5rqNtLAHQdgLRDG4hW+J6DThRW/bSZOIb8f7t8+fLLBM7kkZ+UlPQJ5b4gLQEd0849be8vWTq3xVGPkVpCG80Bo+LlqDUBI24E0NMAJh/aGEa9lwA2pZIj89s9NDT0X/TjdEDJnSX+75jwfLkuVGp+5DUccC0T+6Xs4UwUZQDRFo4P5Xgp/3cpICflOAOC3lynKB7SlnACQMVyNwNqLRzfxX+pHToBipJZu+txWxtiirriZkVrbmUS7kn9eslEmnP7uV8WcBJLDNEmm0Cecz3psyXS0IAJX8p/TQ5D6aN6sVfqMoU6DaB5n6s+1PEMyujLJLyS9t5HHgPJK8nb21ue1RSSaxDl/g/3+3PvVVlZWddzvg/X5sTHx9/Cu3c2ffg5fZN3OEtMyfe5f1pBQYHcbM4bO3bszzSxAuRXcL8bdW05luC6drJlxqcUnAGk4dnZ2Yvr6upCAMVNktMCTrsZjJfBotMMAz1UtGINHFjxJBj1Su7PlzMaBkuoZMLa8S8vLw+FzWjHvh1ADUxMTLxVZcXFxb2/cOHCrxS5gUF1K4NaIpOfcM00BvwagG8uAHYn36Esg7/hOr+8vLyX8vPzZ8PaSwGkPWLTgPcTgN16iWCMcx1jWSaNhsjIyMGA0G9WrFhxLwDgRLkfw8AeBxzWc127ni95XwzT+qlWBPwexO8xFhMTW9xOU/szeQxVSCDaq0msTCa8lFVKmdKPvVZdRHtf4JovAZc7Ab8kAOIu2urPsen8fofj0o1dqzxplw/f3oBVIfUYCjjXSWWN/KRq1kf+KQSYkmNLNs3v/VyriBqt1oasEEsPpxnQ7KX+kPqgXJiqD+hPZ9rroYmVvLW5t1OMnLrI94VWHT3JWyxe7Y/jtxv3bpXeuFZN9Msc8hjB9WmaSLimPwy7lGuiaH8hfSv5+Pm07xL6bSPP4kPprnN+JO08k/saNSlQ9x1S1aPeVZS5FyC+k0kRHA5dyXtzq9g9efyaSfq29PT0DYezwtTz5f3x4f73NPkB5BO12QmJSObdW0OZvyP/fcb83k62zPi0SQIsAK4iISHh6tTU1Pe1NBeoTJky5UrYYZpktI5aBnqgjqxFgGWZQAdZqnMFDDw3wCSUvPcD6P9gAF0A8HhqQxBwkJghksHeCqjeA4gGclx+Lt7JzMzUpp9A+EYY1fsw3v3+/v7buEYqdIMBQ7nx3KnoEQz2YVxTpWX2+vXr58XGxt6jexjUOwTK0oDw8/MTGJ9Du/5aUlISy/+MmTNnPgwj/pQ6JNHuP8LotBHnTd3DGLx9aEejgBLWtYCy+ouRAkTlfPehbU1ck0ZdV9IfU6SjS/llkr/KcIF+2s89y2B3gfz+honlZfIqkGViVFTUBxs3bhxLe1Ips5F7+wNCXkwye6RjTZ+VqL96/MfVqHZHncVG9Z9zDQo/xH2SE8tSUptt7QJegY6ei5L6n+ukFkaT9u0HhHvLxanEENpEE9iKJQOo0lUexrOQB7dtHB8mMQv9M5+8wvg/l1WOAoEWsCop4H84Hx+A9iPq60Y5I1Uv2nm2+oXn9a5YNeB4J5NwhMIlaQWhd8aYx2uvQRumRhddkyRAfIf6htXUjTzTz3neG3Tf4fYD9P5pcw8CcTHv50dpaWmrxowZc74igPD+/JWJ91H6+i5+t9sbeTYzPu2SBjPgo533e7TcZMBXMdjlfvESS+94PINkBANZjsil1naAdQjMpZHA/38tXrz4GmMdxmD5goH8HkvIK2GZo/l4MJCbAKMcBq0bzPbOoqKiBxTVAYC8kt/vStzAYOpNOQ8JmJgIAgGIp8g7nUG+XwMYBvoEADQDsIiTSIF77+PZNC5fvvwpALEMUH5ejsqpwxgGq1jSLMrrOWvWLMmc71YYI8D6KgDjQsmGAasG2l0E4DUBDJv5litQ+fzdLoZJ3ukM6l2AyTnSxaZesjBTG4YBDJ4ckypbrcyYtUHF/+0c3wGgSENBlnRusMgagGuKQs43SDG3rm4P1/ehf+qogwsgtYf8G7lHLHc/eUuE0Ed9II0DqW7xXNoVzp7fbXofjajE0dDEfEs/mbKEaM4wW5m/u2lDjnP9+R5MnWo4F0AVPMindtiwYbu4JpJ8p8i8mP7Poj6rAOgaJq0LAFQXru1FG4ZzPs4CdYl5FHj0S8ot4FldDgBeoMnbOJ7SZi5tXAujHszzjTB61DzH3axOHuB5PAkT/oh8z5w0adKFChV1JGNNbZfsGALhxvvzIWVukRtOnpczE+yr9PdG+utROQ76ITqespnxaZy0WSJjCwD0QwZXBL8nwooWwTbcAL2XYZ6XCdB4yZumTp16AwNSuq0HDEI0ABVmRwONASjH4q2wlScYgNMB4Jzq6up4AT6DeC/5pzEY9wDOl3HtRl4MAeS3igIsIOf3XhhoEWVcLTNerkviO5s67ZFRRXh4+DIG3NkMxGeoQ+jSpUsfYiA/PXny5CfKy8svZgDeQH2uFTvl00EuYWC5AFRpTk7Os5y/AiBpAriTqUem9J0FyNx7peYlQKmJdtQz+WQAXFkAfiQgVsz9FZT/C21Mgaf9tRnGdbIO6y8glsydj8DNR2pevPi9lChLQCqZ7Dpt/MEu9yiUveK+WR7PmgA8MexB9HFvy+xXfiO20b4+6jf6r93ysNZmgK7z6sQc1/W0yUkrEUB/ENdJS0LWlbpBqjCS0UdzTTttGKx7WXlcrbpSt2Qm1s8BZ4V86s/zu5621UuTgjYkaSOOPlvEpRLlBPKsxsH2J2gVIrarvqafdkrzRBGqBfi0v5oJ9Xna9r8yg6YfGrl+lbQfuPf5devW/UggzX2PMIGcQzubvguMxXjFoFnxtPBsH6ef5GpzMv10neLu8QwumD59+le8Q+kH8xxnJ3sDr9uLKxh8eTCZBxk8sQwavczTYZAzGIDVAJs/g1iK/5MA7zcdZc7aGILlfAaw/J4BqwjFlStXrvwXgyOMJfM6+QyQkQHXfMWgu1EGHAqfI+BjydkB5gIXR0dF+tbGHvVpgaXtkSWf5Jjks4R8lpJnK+D6KHUNS0lJuUW+F8hP3s2cBH4CLwa99JfrQ0JC5mVnZ9/FeW+Ww/JkVgp41FPGHtp1Hu0pAgiepR3a/GqmHrGAkAw0agAYP0XIgLF5ATCyaMgF8NIVXp5PIO2t5tuT/NoAkW30Ww395kIZUg1rAjScJb4Qu+Y7lzJcpTFB3XrJSIPJYTDHNGlIHNLMfa1ixOQh8twO0HR85L3sUCClNlvMp1263eTVlxXEEDFz8pB8uEl5cYkffSN5byZlBNHWzQDtONqVQT9uln8HVg3nMwFeJ4MOwDaKvpfptCuMait9uYr7vej7jdSvF3n0o01bVDQT6/rg4OC3ea6SCzfSp9t4BhelpaX9g7a7REVFvcZE/A/ud2Ky3bR27dqlTKqjpYUjlq0NTZ7BANX1SN5XM/HwTAuYqGeycrrC0lf/ND8/XyKM+yECF5aUlNjiChuMT33q7NXrcAzBCvWunepCXt5CASOsYzvg1aHbCyj7w5TTAcX/ZWn5X6CpQQG7ypo2bdqZDIK/yfmQVNbIsxlWPY489jLYKxhsH0nEIbU0ymgyLEdALJaoQQnQ9uL8dOmuymQXQP855ZaQXw7AvB3gkrOZFgby9QBFmLQPOOeRm5sr4N9HnV8PDQ3dweC8kLYPpX5u1G0aAzMPsHHhM4ZjMjbJlf4wgDtT6lEAT1++GwFbxYj7nOvuAVC8yHsV1UyU7JXvZfRFg+6nvtL5le6swK6cezs8nnF+EMC0U/q89Is6X+Goesm6kbrvByAbuHcgQNxLhhaSPFCXfYDoVtq1l3J7yqsa5Wli6Mlnr7UCaT/Ms2s3EVboNyGPE3lukw6wxCj8b6Vew8R+eRZiuldwfTb1C6bOzkxwc5YvXz7LeFnTCkcyXqPSqPpJh5k+v1ZiFfrTCUDfw6T7Gn31tXTTuc4H8J1IHhNpm5/U9Ki7DFpeZMK9mVXXOxJnALqefGLJJ4K6bKa8QXKhyfuximNbuiqmpC01vFcfZ2Zm3hoUFPQc/baBfM+UHJxnaYeYscG4ezBdbZgYfU39l4z1cEtAwyCMf1sAeCUv9gMMuCiWfa/AuBZmZWVt6+wMSPdJ3gvYZCQmJv6cwf0OLHuCNpjOOuusBdJPhQnOBxA+kjhC8j7HZAxGuNe/srLyea7zB0wjZULMJwRwf4rB+p524DnXxrEGyhrH/7MFkrC2jdTBC5BQePgLYegZAHcq1/gDNlthTlOpSwATyWKxJ45LB/ZyGGebxCaA4mLy2QgrlUx2Mv00V3q/CpTJWJZIYRf375QutLQb5JRHclxNGOTXn/9S/1Od5ORmK+AizQYZSIgte3NMjvTz+N0mMJOvBvLbx/OR6XJvsWpAuDeTkNixtA6aFT3D+BY+1DOz1NvazcSr6xSlWcyUCalRUhKYfyT1C+C3Kq2J05vJ4t9yDkQbtSEq44kLrdVJO3XbT33baIOLngmA1s5vZ64tgt0+xjVVmlg4NpJzK+k/WfvdzP1x9PUyqrKQelTL50R4ePhW+uwK9UthYeF0AHzTpEmT1sOWZRSSyYrlFok7eOZPa/UBmO/vyt6MrpWeOGBcrO/x48dvpm2reH4VrJSkarjfFlHYYHxKk8CNgaBl+nkMlDG86K0MmnwG0EewmyN64QWwsFI5C1rLwFkrWabkxGYQ/J8HB7sVm4I1b2K5OoOlqJbDvRgkF7P0HUVd3mYQHlI9Ljo62gngeEK/uf+flHUv/4fJJJl7Rm7YsOExgKQXYLVdAARYaQmu+55h4D0DWI8mq8epQzj1Pkv5JiQk/J46zCePPwLul3FuPCC9WAEtAYsB8ivBhDMF8P6Gy6fy20+aIJSXSVlZMv3Vph3X7qRMf7m4pJ3a3KuSzFKyZpiZkzbguH6QVHG5vhfXSCtCRh99ZFVHfhKJ7JMjdCY3sXPpDe+T5zTqtJf+3aeJC1ARqMtXg1YVeyl3/8E2oDo7UnI8LgAnH0X0iNKmKYf7yQRdMmqVR55viJnzPoTxHbBy5co/yiBEz1dsXI+D+sgiUip42/iUALItTFRrxWJ5ju/x2U1eibTZF/C/gvyLuObG8vJyiZQ6VkqSIzP5zVi0aNE/YP0p2gAGmG9YsmTJk/JfHRAQkMNzGAy7/hzQvJ08CkQWupKMv23KWk8+jcnJybfTjrsodyd5/4/2QX4IfrFtMO7GQCx/pQyiG7755pvnzQ67BumcOXOuZmC8eqT+ggXIYsHaBDkUCHe+XptsgG4LzCwVoHoWELw5Li7uQYChpbNanJIGLgxJ8s57ZVQAeNUwgJ+jnk3aMIRxu4uZyf8ty+HPZAGmkE2cj5dIgPwE1kMoK4B8pOeaR31HKGIELPk2bSAB2NJl7QU7+/G6det+ydI5HVDP5F5pRsiBjxyqjwfU5cRos8QP2ngj/40AaCS/y7UpxTWX0ZeydJOqmVxJetDP9XxLVLGbusvEfLeYM5/eXOsK0MmAYj95eMgiThOK1MuskFe6Z7dU2xSZiufSU25JpZam/4eyQpMHNAEnk8d+o5NrrCClzkeSzxF/7h9BG5WJnDvF0tal/N5Kuy4tKSn5CXXrxaTXEyDbDjjXUo/+9IWHtB14fnKluYC6yoJyOhPj3axA3pKsm759lL7QyuUb+uE5Jr8iTdzGa5/eubCwsN6saB6lfyq57zUZpzAp35qRkTE6KCiokXZ45eTkvKYVB89Mqo1PKY5dV8FT7xuT22qe6TufffbZdeS9g7yktDKTNi3V5GDLjI8u2c7lj4N4Qg69eQl/BwtbFBERcTdMoYaBcQYDk3Hn+Spspv1IX3pH9akjvV4vP4M5mAH/OKBRDpD+gaXwdnPeEYipo3STpzFxvCS853q52JSO6wIGVU8GlCzTZE0mPd9PacPj5L8SwJBxQYtkwgBDPNduBjhegw2tBWxWwA5flZyYtl7PRDAHQPgr/fAl9wynb6LIS5tNqQzms6Tixf2rqY88qUnzI5Q8tbGlcFEN0nEGPKq1EQVQyrVkgY7xLWc9g1RHsUY1T/49ZEgCwLTJpBmwk4lzL8m5ZfDAfRJVtFO25LhSU+tpJj355uV8K+AiE3Wnzv1lwJhVjxfPMZh7awU2OqYNTlj/OEBXKnsTAKNf0m9zZMVHnbbQXwWU70p//BRmKl8TfWTwQT67J0yYoNVFNnVNADwz+L2Gdg6ifn58h7H0L6Rfz+O+aOo3rrS09Comxmtgwp9xTFofByZZMynQ97Ngqr+XHIRJY4LyYWIeS5/ujY+PX5ibm5tE3QdRRy8m67+T1xqJSroKxmZfhDpH057x1rsuZ0p9vb29/01799vs+P8TNdu5/ElMevEkl4UNPs0guBRmKTHBRVoCMnj9YI/9LUusEzoZMDAuY6BvALAqAZdasWtHpqfrxOIA7Wkw4TeomzOsRrLlNAaRjEWe4JowBul1UVFRmxjwkYzr51JSUsQk5fPiPQDtPTMgxfalo2qYIkxuD6AwTxoc1OWvmZmZHwA6Z/F7OQwsBqC4l/K/lcUgwBcoyzsY7EZubaCuzlLf4likxBWUU6pNJuojzQmJLDy5tom8ZCBSR39LG0JiBZmRyxijr+W3wkXyW+on4NWmn3SHXVmWd1j9yW+vRBSSY/ORbbPk2dp8c5IGhVYSxpLMccOU57mVe7cZ9UIGlxODrJdU58h/OgB0Nu2XTvF++jNKm3hMjFM5PlwiFLFxS094m8QYrCB+LNee9NVfWI28RF9elJWV9bcpU6b8lOOfcb2nRDr0i8yN50j7g/adTdnJJgKH8f2hZ6yJgfKlQriXMnIpewx19pbOOgx2qVTcmDgyeE+W0dYK6vfG0QZHVX8EBgYOgjRdwAScQl8sZvK9nTYE824No26VNirYYopTBsYapHl5eesUQQPWNoMX88KzzjrrM9jQaAbC2Qyaj08U2xcwAnL9s7Ozf84Ak9FGKYNEwNDseI02F2GnU7/66itZww0YP378G7CuKJhZmkQL1PkaBm8lxwK5t5HJ5VnF6TNLYW3YdHZAb0yhTRJrTEtLa4NJ/gb2tREAXgI4vApwZaWnp08ChC5RPeinApjzIvrkAsoL0macNB3kzIa++qmy4pjCUvkAto0eHh6DAaYaymviekXG3kKfS/ygCknEIPeX2iCTpsQugNhN2hUcb5O8Vf44BEjURY5yVHdpJ8iMro0+k05xu9El7uyiVIn+ErNuEwgLVJkIpP52IQz493yGckkr+ckYpY3J7HyFt+L/LsrOlok1QPiknAAB3EkAdFxsbOzNXHcTE0QM56RPXW/54NjFxCUXp80A9VvcM4LnU7x+/frbKbPRTKoCYSZPeb2bpc1CrQBgz1OY+L/g+jL6yp88hsGmP6bO39KP0xMSEmawWtqiScnsRRzNuyYWTpkXU89xMO6f8K69D4ufIOtAvRY2IthgfMoBWWAFY9vOgHh/1KhRfgqfw8CbACgEnygZmlic9FwZ8BcBGNIbTQF4BKiNJhKIGUQawDD3WdXV1QMuuuiiuwICAv6yYcOG+Zxbw2AuIg9txmwDBB6QWIFB/zfJJU3dj2TpaYCbiUlg8RJ9MaywsPASBnAOE0EhbErO7eVHIwz2FiaTY+q7nTpEW34npAtdC+BJv3k0eRVxb61cSfJppH5tkt8CJgMU203hjmCS8v2wFxCSH+Ad5N9bgC2Akhy4w465vV0e17SC3yMPbwJITY5c24f8Zca8lxVNu8XyD4Sh+o91dI8OCzsmOQGym9x0SnTA9Y/IAb1WDYBvBZ/35TZT9ecj73jaLJMptiwWFZhUop2drDqm0j+19M0WJqc3+P1vmG8o18qHdYbKk65uYmLi76jvUzyDM5k47yPP56UvLis7QFYiiKd4fnNN0FQ9J9oh+bREBm1MpospT3UZwnvxa67dYsQSx+LYx9oTcbXEY321QgLwU3hfYmhzneN7ZycbjE+N8J3BoI8cssMKn+fFfI7B3CDn3dL1PVFgDBN3AojPnDBhwiMM4ksBpnIGfnPnqNMaiNpwAwx+AkBM5ZpxLG+XwGiyZcYK4DxmXCZq6SvRy9EOWN1PXXqMHTv2b/TJrxThhKXtOtjgk47smjpJBjzEMihwB5CGcWwT92ygHfnUcRCTXDMguJt6yVm6rOf2ST9Ym3D8b+a3nPX0tuTAAlox2AbAtw+TT3/NEdoc5FgrDJiq9e5pubLUJp+s+KR9Iec9+yVTN89R2gmAmZvkvpItA8Iu1H0Uk+xd1M2Z/CSOUey4wREREQ9Sr/dzcnJMJOWOD3WT6uB5fI+l7Gjehed4F2ql902bc+iTq+j/2+QAKCkpSX6nK4x1X1ZWlpw+3QrDVmCAXbpHx5nkfFJTUz/lvMRIHXVVf+s+WV7K90RQUNAH3PeoVAmpYzmMeL/qdaymyiYwqfzc80wbZQlJnvHU71JWQ09r09hWbbPBuNskayDtZvl5LUvxvgyEZg3yE8EWrMHRDrtrzM/Pv1yBNmWyzIDU0nmr43UajLDU9TCuSSxVr9FGH8del5MfDWiBtQWQHQP7SHwWfxdLprxdLI9/xgT1UEZGhlxj9pS/CPolKzs7e7JUygA2Wbu1W17GpAGSxv9/CThoxwABslw/ylCEdsrlsGTCkvv2pK7tkqfK4k4sVpE0JEtWZA6t6AFTRcbukAVbsd8ka27VJhrn94lpWq5AhccdAAzI9jL6xGLW8qvM8QCFx9KmGHUZO3r06HEszUdw76WTJk16nHzeh6l2gJ2ltdHBppkQLqTtEbDUOspuBizP4fiDaq98CAPQmYDmL8V25U+a+37BSuE1iRJU56KiIolPdhlPfZb2jCJQR6qukgnTxip+L5OjKEss5gRLfxDA1vM98CyP1/tnRf1IlwtS6n8Z/ZDIJP8m/fSUZVxkg4ANxt0HjK2lZocYtXPQ0OMtHtHAZfAtZ1DHAHJvMuCvOVh5DhZ/VQDCw5ogtMnYefAcL2aj8rRJRD8shQE+BCt+VfLGMWPGPKSVP+AyjfrWA6hyHqRNLhldOMtVJINdqm+DuUbO1aWWtofr5MdCLFe6ynJE0WrJT9u0iSetCkBJ7LZdDBkg30f7nGGbPTmu8z0l2tCGGqChjb5eclgvNTjdrzD35NWTPhrAcYk++srzGnWdxrFfUx9fOZKn/D1paWlPSJVOsfPkLY6JsIeJWuLYfsmyJfaQb4xRo0YtYKKM7/EfL3Ed/a76y3hHE2BYWNhGS3vkwHOQLjj3xnC8htWLnMwrX/lSFjhvJ88/yNES9f8SMJ6WnJy8KCAgYDn1rZD8/mCqeseaVGcm8I0xMTFXMAldQHm38DyWavVnA7ENxt2zY0+C9yojfgB0PvLz81NsuASY4H2wtK0HA1UzWEwU6hM9eNQHUlUEGBZNI7FieB9QuYQ6prAEr5bVmWS5gKVouRipG6ApsYDUz3YDrNJO2AH7lT5uh1c1OUXSxhzf8s+wV85+uFYqeR0bctKcgGUKfNvlwF0GFvLr0OM/G30dVm9MCq1i6RJfyAeFwjFxXv6GpZ0h50Ce1EvBT6+gXAUXzZOFIox6Pcx+oVxxkucZTCxPUt66zs7ZLT8fYtpLmCjrFf4pPj7+I+4bwjHjE7njOgGm5L4bSTqmvCzVOek2P5Senv5r8tCG52w5oFO/6B4mrQL68J8ytLBMsxMV8Ts4OPgPTBYnzD+E8hUDhgQsp387oosfKtCAnWww/sHJqgsLC7Wk/1yDVDJro/50uHtO5qSkzU1YW0FCQsKl1PV9gDJA8lw+AyVekFgA1imQlVOfYZLpco08jvUSExR4yauZRBoCOQGvnPPIv7FcYQpo5XtCxUnmDXDtlU6xWLCAmnMKgdQsMYec/EiMIeYsUYTUxxTdmWs6WCx1ied/rOIV8hkB4MklpSfAeyPXvMPKo1lgKf1ROWySmKfzxGss1QCsdCbJBbT9p1rOU1cfQNST+zd3vt74SDZGQ3JkBKuXFsQLTLJyJzqU43U827zY2NiXeM6z6Mt/0yeFlDMM1nzuhAkTrgb4M9VHJ5IMWM7xOyYRo+dup+PQr7bRx/dDNKLBYeS+3W03W/XRMwW8tkVGRmbn5ubeC0MeZIGa/E5oyS8m2QDDE9BWAybbpC3B7XsAMG28hclNpjbdpBusbAcOHNgotTOBskQO0i8WcMsIBOYqEYQ2JLVZ5wz47gaMZVYs8YREEvIB4SafzeQhQ5RhXBMEiF4uWS/18aJuqRxfy6TwJO/lMgBQRiQdfS2Rj9E7PtQz0XmY6rew3CbY5BnUb2B4ePg86lApMYLjvY66zRaD3x8UFFRB3eIDAgJkOLRCIik+bTD1L5gk0uT/g34NoH5FlHEfdVwuDZiTtSrrinHSDzF11ejDdi7/PU9md747JDF2RRoGoCJYcl/DEvxavmVtJ3nufgBlBy+vfHosA4AV8FJRL3oBnF789gYIayXrlbc2QLNFTuFJe+UASD4p5BBeLFuDAMCUc3wxa0XG6CULO4WlkuxYfoqljQFj9wbQhwOOsqKbDaMM0CYg4FcLu/47VX4RRrtDwOsYJLarfS/1w5CQkGgA+THqKU2E+zMyMooP5/vX0pQ5EK3DmNQbU3vJjbWBZ8oRG1b/2iy1+6SuOpe3Ee97noyZr0kayJqEdfxkg7QYm1TmUlNT83hR75w1a5aiRew3lm/SkqBO/RTzTW4hARsnsVt+y1evtEN6A2By8tMhWpBIAiBV4FCXqqoqucHsAwvpCWvsGRgY6Cx/zNoAlKc2QKq39JOlAwzY+0m7gvzd+T6PeoXLBJl7PpT6m8JEUae/pKWl7ZDGxdEuxU3/SsZaVlYmRz3zpYZHPX7HxNPbehaHXE2IlEgMoj4z5ER5qh8l1tCGnj66zmhN2On0TTYYf8/FF/L3YCJU6yOjB9ipNq9OietZE7xUu++Aogw9nARKMgYBtNy1gccxRdw4F5bqJREGrE+iCAGPDDpk/bZHqnBWm3oLsGHU+wFRmTnL34STzKMlD5ZDdor14BoZlAySY3r6I5TPj8DuiXwr7NXu8PDwm8WgIyMj82GuD2ZnZx/QOT7WpPoJkCn/dUWipm4RWg0ciXjnUHUwFpAnUlvHTic3dbsNPOOW0PZR3YUZ9RAWVTru7e0tvw9tsKv9lj8GJ0WSYAnfrACkJ4NNObqgdAQRYTPHFcGiA3BgeHJx6aoQRQDjSI6NgE2u49re8mes6wS2ls6wwinJx7E0LvZZsmQt56VFIXlxT/4LgGW4IdGFl0zwFARVYE/+Z3JsJPeWAeSrVq5c+QUgXBsfHz8rPT19qyOzPV4TY1ZWVnNsbOwD1HWSFKbtd9xO3RqMo6OjexhdSzsdWZIrREsH9b+Oa7BLlYqlrg/sb7Ni4nG4LyAkxzvlJ2tylX5xcHBwP4Wrr6ysrNey23K+v3ratGl/WrNmzW21tbUDtfRmgvAePnz4XlirQkdJoyFLLjKl1kZ7tLknVuxiGWnstYC53Vq6y7extDIkS5ZsWNZ5AnHtoEg2HTRw4MBqgHgC/SHQz6QMP8qeGxERId3ht1NTU9tOhBtI1dcyPhGzv93X17efj4/Pu13x6GcnG4xPaoIJ2U+li0kaKIdiWQDRAIsVVsoqTN7YPD09d/B9wqMyqE7SXIiLiwuAFX5AmZ4TJky4AVBaKDlnQUFBW2Bg4L3Tp09/i/8X5+TkXFtdXa1Yd9pg6wuDv5I8ishqhRzlSOzAt0QRzdZGnbQtOjahxfqlJwzACZzli6KPgoIqioYiRitwqUTKgOE0gFjaG7VMYHGA4rtc/6/i4uI2s3F8IlYLZjNPIpGWlpbdlD2Dd/0DJoJ9RwvGZjPPVi+zwdhO3SQdCogtfVcXPz+/LVq6b9my5SJAajgA9Hx5efkJlzUKKEJDQ+Uc/THY7zgBhru7+x89PDwWSSVN/2WpWFZWlhcZGflITExMWUBAwKzS0tKLFEVaHskAz+sA2f6KoSd5q8LDy9qOujtZhiDyaSx75nqZAm/btq2PFc24L8cGyS2nQJj/k3ft2hVN2VJ9U/RRNy8vr+soq9jyFXHCVMIsveEeUVFRHkwov6B+RbTzPSajfUc7IRrnT97e3h2aFNpotBm2DcZ26sYgLXNhmF+05KoswX8RGxurMDx7Tkb5AgeYoF9GRsaFAFGeZAew3QBAUKGUOpSiTXBUsfsRI0bI525BfX19dGFh4aiQkJB8wEubbJ5c86Wrq+tngKuMPLQrKVCV6ppAV5GhBypPaStwXP4ctPk3jnYPBbRnAtKjZSbN9Q1MEB9TlafT0tKaj4cDnSOZlGiXExPhX5mUrpIRDG2bO2bMmLlMBHnGh3JX82RVIZW9R6UFAqtfLzGPrfdrg7GdumGyZO+7YcQ3wESrYcglDGL5LjgphgECGYBwO+UWxMfH3wDAXgQYz4Cl7ukM2tp8o24lsLwxYWFhf4a5v6eQT4MGDaoCaJL6/kepdhifL7m+gm/Fm3PlmgH6LfDltzvfjZYFSBj5RdPunvKYNnny5BsAwThFIeH+P6ekpLSbSNknIzGR9Af4vcaPH//CggULbqB9QYmJidFUNU96xF1NAl36Zf/gwYM/oU+rjgbQ7WSDsZ1OIjMWg4KJKvzRPpbmqbm5uSdVvggA7VR0CUBwJoz8sqFDh5bvkzzhIMABcCrySCg/s4KCghZQ17OnTJnyHmC6V3H2aIMXdQ+iTau5f4c2Immjm8IeAbAjpDkB+LvwkXmzfBU3eHh4JI8cOTJXEwH3D46Li7uxoKCg/WSqhFnWeI0BAQFvV1VVXaJ5ZezYsW/CZL8UMz+aelgBbNvr6urWWlomNhif5skWMn3/kxzuKOx9EuwzT5oCJ2vQCmQkz4S9LQaELo2MjFRAzL5ubm4uneXcJmIKYLyLe24DsJzBbOecnJwz3d3dCwEfhWeS74p46n8h4HMZeZ3P77mw22DaJg2RYkD8U465yMEQbPyZiRMnzpI4g3tHcu6SzMzMryVfPZkTksqS8/rKysq3PD09fzNr1qxLhgwZciNtOyb/v8anRXeysrSTDcZ2OkiSJgOg5gMjfQiwGgNYSc7aIb44GTquJj4g3//y9fVdDWhuBYy+hcn+H2ZsPNABmh+ypFcIo76TJk16gbr7p6amjlFkZ9oi7/DbqL8Hn0CppZF/0JYtW4YBvrKg+0zqc7Df56ZOnTpOwUtLSkqeAOTj+H+24un5+fnJ//FJ12O3Yun1YDIoy8/P/ygjI6PxeICoDcI2GNupmyfj24Dl+kWwsojS0tK4gQMH/ighIcEV0OrYiT8ZoGyFYWoELO8BDLdSh7/V1tbuP5TP5Y0bN7YBlrcOHTp0AQD+odTwtm3b5rZhw4Y4OZnnmmYAeSeA3p98vAGj3ZZTem+OjYRx/hn2fyvnSrh2QGFh4S/5bly5cuVLfHJgkq+EhIQ4H84U+UQlI5823s5sILWTDcY/EDD28PDoCSidq/8wY7eFCxe+W1BQkMK5V2JiYqZHREScFEYouWhaWtqW6urqt2CGVQaMDnatJgfYbIfuLZPI5NDQ0Oc1qWiTiwnFFzDPV4w3RZDu169fo4+PzyZ3d/dtsOEHOH4TjDNb6nLa2AOUdwPon8KeR+Tk5MzkuH9KSsoVgGLCydq4s9msnWww/qE/WMAMxujNEj0MUN4BY2ySo3WYZ/SSJUuumjdv3gIY6P8EBwcf8KV7IusikDXhhA63YaVzljezKpbzt8PivwaQl8opkPxNwHSnA8L1AQEBL3JuYWVlZfyIESNe2b59+0vyJyHGa4UoalXIeyacu6dMmTIesJ4vS0DVg08f+w2xkw3GdjppCeAbymcQ4FUK8CqA5AHHMyz9ey1btuwBmGWYrB5PxrL9SKISG8fs1PkrNze3nQDsUxx2kctI+T4uKysbDqhrkjkXpj3Rz88vhev+5hj6yAox1Qhj/hbwfrqurm6m4t8JpM8666w/AfarT4WYwk52ssH4B5oAp60AcINEFgBRnZih/OPKLFpL/127dklb4bno6OgpkiN3F4BSfQHR6tGjR5/FZJHa1NQUpglk1KhRRZ6eno2w+zjA1aexsdHH39//5aKiop2d488p4CcTzvPe3t6f830zbU2cOnXqM1z3AMC93zYftlN3S06256jTP6Wmpvaora39L3UtiQMiIyOdYY/rAKYAwFeOgnyllSCtBr79OT5Uqm6+vr4tZ5DS09PTBITdIRlxA2ArRuzv4uISXVVVdR8APLC0tDQ6ISFhvsIYBQQEXES9Kw8m+lAeirwMoCsAqjv3lhUXF9ubZ3Y6WSvTLjmXt40+vscJMGoHdJoAXU+W+XUA04MeHh6p8t5WU1NzLsv4qzg/jCW9G+xTLiu7DRg7+j0mbYqLi5Njowrqn7tz507vioqKaWPHjn0AQK60AnL+H91h/ZdqHR8x553WCsF+MY5xgjTGRPbqwhZT2OnIB4/ipRUNGTJEoejLg4ODn4VBr+FwSkxMzIPx8fGz/fz8khXivl+/flndzXWp8UZmuZ9U9OZCORmSNoXcZa5du/amlpaWRyZMmOCrWGMHm0iMjPxEOgL6rmTA62Tpd5+oNoSGhvbgvRmXmJgYwWrKdnVrg7GdjujBWmF7AOOlCkUPm4xV4E6piAFo8mZ2GSA1SaHoYZhPwo4LuuvgsiJ6bG1sbDy3qKjoCUUHgenvok0BAPIf09PTF7EUDNYGXncDOxM7T+A1cuRIBUjtcbptHqq+il3IhHfj6tWr16aQgoKCJh9qArSTDcZ26gTG8g62ffv212fOnHkdgymVgTM3JCTkV/n5+cmffvrp2ytWrHgJpvN637597y4tLe22y04xYyaRXXIGX1FRMWnz5s0els/jPWFhYYUAdGRdXd3NPj4+3QocjD/nMWPGDHVxcXmOie+9pKSkOGmvnE4gpnZQZ2fem1ulty1VwoKCgqdYVbnZYGyDsZ2OEJCl8lVWVvayu7u7/DhUtLa2akmfOn369EemTZt2Bsv936alpbV193YAwO3+/v5P0Y5qaYEUFxd7b9261Y3fg2jP7ry8vB9zzr27gRiMvT8T3eupqak3lZeXz+D7Y1ilz2kqqmhjUlGYq1pSFKuTwbYP5eOX7N2M73kS221oaOhgySyR0/r165dmxZvrsWnTpg7T3O6wqSWGZfSQO4ec1zHVEwDOTExM/COk+AHAObCpqcmJiWYoE0zP0NDQPVzXbWQUag+gpSX+pUx2s88555xbaFMFy/zPORcBY645XcQVlqrgvtjY2N+lp6c/AxBPjo+Pf5R3qsbWxrLB2E5dHExKsrQTMDuCXHcBYi8vrx7Dhg1Lok4KZb9WYhNH9TOBsyJyAGKvAcifA8S/W7t27V319fXOAwcObB03btxvWQU0dBeVNaPhIb8YwcHB1YBWOZPJbSEhIWs5vUHP4nRhlaqn3hv695uRI0cm8b+/gFiTua1RYYOxnY4SILqjfq0GtJ+f34i6uro/sZQ/a8yYMdfBKt+US01HwNJvAQDL4wauXxAWFnZWYWHhpIkTJz4GUH8m15jdRXXNeKFrbGz8JDo6eujWrVsvCQwMTO3bt+9TmZmZ2083PWfjgY8+bqTujea52ckGYzt9T5KWuZbu6gBYb0lra+ssPkMOxaAjIyMlp3xs/fr157i5uZUDcBkA3NPyS9HddIgFVkVFRfs8PT2fZ3L5Fyy+Vc79jUjmdEs2+NpgbKfvOVuXut2OHTtyBg8evCIhIWE7g/717du3d2giGNAyOrpc719dXX0u4JYPAE+bO3fuHACuobsyTWOaXVtb22r0pu1NLzvZYGynbsu4SktL2wHYd11dXd9VjD6ZQQ8dOnRyS0vLCMBrd//+/dPy8vJKmpubc3x9fV/btGnTedOmTXuwoaHhawF3d7assxmlnWwwttNpk0xQUsmJxSBZ2sdUVVW93Nra2sSxkfwvGzVq1FWwzAx3d/d7+/Tp83BNTc1uPraJs51sMLaTnY43ICtZoaHqvby83nJxcWkoKyub3djYGFVYWPhme3t7kwJxxsTEPMI184yFm53sdNq//3YX2Km7JTHjkpKSahjv021tbQomPXL37t1DYMPN/N9bUVExfvXq1e8GBAQE297X7GSDsZ3sdALBWEYemZmZO2tqap4PCgqamJiYeO3evXtbhw8f/o2np2cVDHkvTLrWBmM72WBsJzudyBezZ88DmghpaWkNO3fu/NDf338xAP1HmHLf2NjYfwPOF0jV7XT1j2A5QDrmfL4PXuHsZMuM7dTNk1EFk0VeWFjYY3FxcWtcXFxKXV1dnYqLi1/x8/NL5/z207FtirYiZq9Ny2MBYvWRnCRJFVCaKI2NjbYc3QZjO9npxIgtxPxycnJ29+nTZ4FMiT08PHq4u7ufXVlZ2XK6GVGovgp9FRgYOAcw9aipqXmjc6SWroAxq4N+e/bsebyhoWEUK4abs7KycqSZYgOyLaawk51OCCALXATE+i3T3Ly8vGZArP10NaKg3opA0nq0qnkCYlYJ+jkbQD+zpaVlb3Z29icJCQlBindou7e0wdhOdjqhoGwBWYd+sSP7M3JTfXdn2anRqS4uLl4Js39PutJHy2LVH0xQ7uRZP3ny5Bm0f2dGRsZHI0aM6GeDsS2msJOdTnoS+Epu6urq2gHI2vjrzp7RHGXFx1pHueNsbm4Orquru6y1tbUPQO8bEBDgqviH9pthM2M72emkJTHhiIiI3l5eXvcASMks3Z9NSkoK6e5LdQPCR8vijSyd+xtpa4HCawHEAZ6enhv27NlTb2tW2GBsJzud1KQlPgCcuGnTpl8AvvsXL158c2Zm5udhYWFe3b3umjAk9z3aSUPsn3vzBg8evN7b2zu5X79+9eS3A4Zsvxg2GNvJTic3WUBWNmzYsC9GjRr1rL+/f3VxcXEkzDO0OwYpNXUOCQnpFxQUdGNsbGwcIHrU9dy6dWv10KFDU1asWLESEB6qKOByBm97hzu9ki0z/p4s03/ICv9qd35+fm1kZOQL9fX1v4IhbuT3+42NjRtkydcdQUkiBldX16iKiorHfHx83urbt+9N8j53NBt51dXVCqn1IeBe6ezsvKOwsDDPgLG9iXfqksZkV/rfyZYrnf5J4YgUVeKHzIQ0IWnzTvrHAFsvBkJbZWVlx2DojibTqpevr28fntsF1Dd/586dG47lGWrgm1WAftue7LrHM5Zhj6en5xFd//8EGAAEaRycVOrE5AAAAABJRU5ErkJggg==",minimumSpeed:23,maximumSpeed:24,minimumParticleLife:1,maximumParticleLife:1.3,emissionRate:1,radius:.5,color:[{startAge:0,endAge:1,startColor:.5,endColor:.4}],scale:[{startAge:0,endAge:1,startScale:.3,endScale:1}],randomFrameNumber:!0,applyGravity:t.CONST_G,repeatX:.8,randomXY:.04}],t.water=[];for(var i=0;i<t.particleOpt.length;i++){for(var n=[],a=0;a<t.particleOpt[i].color.length;a++)n.push({startAge:t.particleOpt[i].color[a].startAge,endAge:t.particleOpt[i].color[a].endAge,startColor:new THREE.Vector4(t.color.r,t.color.g,t.color.b,t.alpha*t.particleOpt[i].color[a].startColor),endColor:new THREE.Vector4(t.color.r,t.color.g,t.color.b,t.alpha*t.particleOpt[i].color[a].endColor)});var s=new r.ParticleSystem({emissionRate:Math.floor(t.particleOpt[i].emissionRate*(1+t.originIntensity)),emitPosition:new THREE.Vector3(0,0,0),originYaw:t.originYaw,originPitch:t.originPitch,minimumSpeed:t.particleOpt[i].minimumSpeed*t.originIntensity/t.zoomGis,maximumSpeed:t.particleOpt[i].maximumSpeed*t.originIntensity/t.zoomGis,size:t.particleScale*t.particleOpt[i].baseScale/t.zoomGis,minimumParticleLife:t.particleOpt[i].minimumParticleLife*t.originIntensity/1.1,maximumParticleLife:t.particleOpt[i].maximumParticleLife*t.originIntensity/1.1,imgTexture:t.loader.load(t.particleOpt[i].imageUrl),color:n,scale:t.particleOpt[i].scale,updateCallback:t.particleOpt[i].updateCallback,applyGravity:null!=t.particleOpt[i].applyGravity?t.particleOpt[i].applyGravity/t.zoomGis:null,randomXY:t.particleOpt[i].randomXY*t.spread,repeatX:0==t.originPitch?t.particleOpt[i].repeatX:1,repeatY:t.particleOpt[i].repeatY,radius:t.particleOpt[i].radius*t.radius/t.zoomGis,camera:t.camera,randomFrameNumber:t.particleOpt[i].randomFrameNumber});t.water.push(s),t.add(s.particleSystem)}}destroy(){for(var e=this,t=0;t<e.water.length;t++)e.water[t].destroy(),e.remove(e.water[t].particleSystem);e.loader=null}play(){for(var e=0;e<this.water.length;e++)this.water[e].play()}stop(){for(var e=0;e<this.water.length;e++)this.water[e].stop()}update(){for(var e=0;e<this.water.length;e++)this.water[e].render()}effectOpt(e){var t=this;t.setOpts(e);for(var i=0;i<t.water.length;i++){for(var r=[],n=0;n<t.particleOpt[i].color.length;n++)r.push({startAge:t.particleOpt[i].color[n].startAge,endAge:t.particleOpt[i].color[n].endAge,startColor:new THREE.Vector4(t.color.r,t.color.g,t.color.b,t.alpha*t.particleOpt[i].color[n].startColor),endColor:new THREE.Vector4(t.color.r,t.color.g,t.color.b,t.alpha*t.particleOpt[i].color[n].endColor)});t.water[i].effectOpt({size:t.particleScale*t.particleOpt[i].baseScale/t.zoomGis,repeatX:0==t.originPitch?t.particleOpt[i].repeatX:1,originPitch:t.originPitch,originYaw:t.originYaw,minimumParticleLife:t.particleOpt[i].minimumParticleLife*t.originIntensity/1.1,maximumParticleLife:t.particleOpt[i].maximumParticleLife*t.originIntensity/1.1,randomXY:t.particleOpt[i].randomXY*t.spread,randomXY:t.particleOpt[i].randomXY*t.spread,minimumSpeed:t.particleOpt[i].minimumSpeed*t.originIntensity/t.zoomGis,maximumSpeed:t.particleOpt[i].maximumSpeed*t.originIntensity/t.zoomGis,color:r,radius:t.particleOpt[i].radius*t.radius/t.zoomGis,emissionRate:Math.floor(t.particleOpt[i].emissionRate*(1+t.originIntensity))})}}hide(){for(var e=0;e<this.water.length;e++)this.water[e].hide()}show(){for(var e=0;e<this.water.length;e++)this.water[e].show()}setOpts(e){var t=this;e&&(void 0!==e.color&&null!==e.color&&(t.color=e.color),void 0!==e.alpha&&null!==e.alpha&&(t.alpha=e.alpha),void 0!==e.originPitch&&null!==e.originPitch&&(t.originPitch=e.originPitch),void 0!==e.originYaw&&null!==e.originYaw&&(t.originYaw=e.originYaw),void 0!==e.scale&&null!==e.scale&&(t.particleScale=e.scale/5),void 0!==e.originPosition&&null!==e.originPosition&&(t.originPosition=e.originPosition,t.position.set(t.originPosition.x,t.originPosition.y,t.originPosition.z),t.updateMatrixWorld()),void 0!==e.spread&&null!==e.spread&&(t.spread=e.spread),void 0!==e.originRadius&&null!==e.originRadius&&(t.radius=e.originRadius),void 0!==e.originIntensity&&null!==e.originIntensity&&(t.originIntensity=e.originIntensity+.1),null!==e.isGis&&1==e.isGis&&(t.zoomGis=1e3))}}r.SprayWater=e}(),r.Particle=class{constructor(e){var t=this;t.size=e.size,t.alpha=e.alpha,t.visible=0,t.birth=e.birth,t.age=e.age,t.minimumParticleLife=e.minimumParticleLife,t.maximumParticleLife=e.maximumParticleLife,t.minimumSpeed=e.minimumSpeed,t.maximumSpeed=e.maximumSpeed,t.scaleAry=e.scaleAry,t.colorAry=e.colorAry,t.emitPosition=e.emitPosition,t.radius=e.radius,t.initSize=e.initSize,t.updateCallback=e.updateCallback,t.camera=e.camera,t.life=0,t.initVelocity=e.initVelocity,t.normalizedAge=0,t.originPitch=e.originPitch,t.birthplace={x:0,y:0,z:0},t.velocity={x:0,y:0,z:0},t.position={x:0,y:0,z:0},t.randomXY=e.randomXY,t.applyGravity=e.applyGravity,t.randomFrameNumber=e.randomFrameNumber,t.color=new THREE.Color}updateStatus(e){var t=this;if(null!=t.birth&&e!=t.birth)if(t.age=e-t.birth,t.age>t.life)t.visible=0;else{t.visible=1,t.randomFrameNumber&&(t.age=t.age+50*(2*Math.random()-1),t.age<0&&(t.age=0),t.age>t.life&&(t.age=t.life)),t.normalizedAge=t.age/t.life;for(var i=0;i<t.scaleAry.length;i++)if(t.normalizedAge<=t.scaleAry[i].endAge){t.size=t.initSize*r.Math.tweens(t.scaleAry[i].startScale,t.scaleAry[i].endScale,t.normalizedAge-t.scaleAry[i].startAge,t.scaleAry[i].endAge-t.scaleAry[i].startAge);break}for(i=0;i<t.colorAry.length;i++)if(t.normalizedAge<=t.colorAry[i].endAge){var n=t.normalizedAge-t.colorAry[i].startAge,a=t.colorAry[i].endAge-t.colorAry[i].startAge;t.color.setRGB(r.Math.tweens(t.colorAry[i].startColor.x,t.colorAry[i].endColor.x,n,a),r.Math.tweens(t.colorAry[i].startColor.y,t.colorAry[i].endColor.y,n,a),r.Math.tweens(t.colorAry[i].startColor.z,t.colorAry[i].endColor.z,n,a)),t.alpha=r.Math.tweens(t.colorAry[i].startColor.w,t.colorAry[i].endColor.w,n,a);break}t.position={x:t.birthplace.x+t.velocity.x*t.normalizedAge,y:t.birthplace.y+t.velocity.y*t.normalizedAge,z:t.birthplace.z+t.velocity.z*t.normalizedAge},null!=t.applyGravity&&(t.position.z=t.position.z-t.applyGravity*Math.pow(t.age/1e3,2)*1e3),null!=t.updateCallback&&t.updateCallback(t)}}init(e){var t=this;t.birth=e,t.age=0,t.life=1e3*t.minimumParticleLife+Math.random()*(t.maximumParticleLife-t.minimumParticleLife)*1e3;var i=t.minimumSpeed+Math.random()*(t.maximumSpeed-t.minimumSpeed);t.normalizedAge=0,t.visible=1,null!=t.scaleAry&&(t.size=t.initSize*t.scaleAry[0].startScale),null!=t.colorAry&&(t.color.setRGB(t.colorAry[0].startColor.x,t.colorAry[0].startColor.y,t.colorAry[0].startColor.z),t.alpha=t.colorAry[0].startColor.w),t.velocity={x:t.initVelocity.x*i*t.life,y:t.initVelocity.y*i*t.life,z:t.initVelocity.z*i*t.life},null!=t.randomXY&&(t.velocity.x=t.velocity.x+i*t.life*t.randomXY*(2*Math.random()-1),t.velocity.y=t.velocity.y+i*t.life*t.randomXY*(2*Math.random()-1)),t.birthplace={x:t.emitPosition.x+(2*Math.random()-1)*t.radius,y:t.emitPosition.y+(2*Math.random()-1)*t.radius,z:t.emitPosition.z},t.position={x:t.birthplace.x,y:t.birthplace.y,z:t.birthplace.z}}destroy(){var e=this;e.velocity=null,e.position=null,e.birthplace=null,e.emitPosition=null,e.color=null}},function(){class e extends THREE.ShaderMaterial{constructor(e){super(e);var t=this;t.vertexShader=t.getVertexShader(),t.fragmentShader=t.getFragmentShader()}getVertexShader(){return"\n attribute float size;\n attribute float alpha;\n attribute vec3 color;\n\n varying vec3 vColor;\n varying float vAlpha;\n #include <common>\n #include <logdepthbuf_pars_vertex>\n void main() {\n vAlpha= alpha;\n vColor = color;\n vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\n gl_PointSize = size * ( 300.0 / -mvPosition.z );\n gl_Position = projectionMatrix * mvPosition;\n #include <logdepthbuf_vertex>\n }"}getFragmentShader(){return"\n mat2 rotate(float rad) {\n float c = cos(rad);\n float s = sin(rad);\n return mat2(\n c, s,\n -s, c\n );\n }\n uniform sampler2D pointTexture;\n uniform float repeatX;\n uniform float repeatY;\n varying vec3 vColor;\n varying float vAlpha;\n #include <logdepthbuf_pars_fragment>\n void main() {\n #include <logdepthbuf_fragment>\n vec2 pos = gl_PointCoord;\n float offsetX =(1.0-repeatX)/2.0;\n float offsetY =(1.0-repeatY)/2.0;\n if(pos.x-offsetX>repeatX || pos.x-offsetX<0.0 || pos.y-offsetY>repeatY || pos.y-offsetY<0.0) discard;\n vec4 img = texture2D(pointTexture, vec2((pos.x-offsetX)/repeatX, (pos.y-offsetY)/repeatY));\n vec4 color = vec4( vColor, vAlpha );\n gl_FragColor = vec4(color.xyz, color.w * img.w);\n }"}}r.ParticleMaterial=e}(),r.ParticleSystem=class{constructor(e){var t=this;t.showParticle=!0,t.particleSystemManager=new r.ParticleSystemManager(t,e),t.repeatX=1,t.repeatY=1,t.imgTexture=null,t.uniforms={pointTexture:{value:t.imgTexture},repeatX:{value:t.repeatX},repeatY:{value:t.repeatY}},t.setOpts(e),t.shaderMaterial=new r.ParticleMaterial({uniforms:t.uniforms,blending:THREE.NormalBlending,depthTest:!0,depthWrite:!1,transparent:!0}),t.geometry=new THREE.BufferGeometry,t.particleSystem=new THREE.Points(t.geometry,t.shaderMaterial)}destroy(){this.particleSystemManager.destroy()}stop(){this.particleSystemManager.stop()}play(){this.particleSystemManager.play()}render(){this.particleSystemManager.render()}hide(){var e=this;e.showParticle=!1,null!=e.particleSystem&&(e.particleSystem.visible=e.show)}show(){var e=this;e.showParticle=!0,null!=e.particleSystem&&(e.particleSystem.visible=e.show)}setOpts(e){var t=this;null!=e.repeatX&&(t.repeatX=e.repeatX,t.uniforms.repeatX.value=t.repeatX),null!=e.repeatY&&(t.repeatY=e.repeatY,t.uniforms.repeatY.value=t.repeatY),null!=e.imgTexture&&t.imgTexture!=e.imgTexture&&(t.imgTexture=e.imgTexture,t.imgTexture.wrapS=THREE.ClampToEdgeWrapping,t.imgTexture.wrapT=THREE.ClampToEdgeWrapping,t.imgTexture.minFilter=THREE.NearestFilter,t.uniforms.pointTexture.value=t.imgTexture)}effectOpt(e){this.setOpts(e),this.particleSystemManager.effectOpt(e)}update(e){var t=this;null==e.position||null!=t.geometry.attributes.position&&t.geometry.attributes.position.array.length==e.position.length||t.geometry.setAttribute("position",new THREE.Float32BufferAttribute(e.position,3)),null==e.color||null!=t.geometry.attributes.color&&t.geometry.attributes.color.array.length==e.color.length||t.geometry.setAttribute("color",new THREE.Float32BufferAttribute(e.color,3)),null==e.size||null!=t.geometry.attributes.size&&t.geometry.attributes.size.array.length==e.size.length||t.geometry.setAttribute("size",new THREE.Float32BufferAttribute(e.size,1).setUsage(THREE.DynamicDrawUsage)),null==e.alpha||null!=t.geometry.attributes.alpha&&t.geometry.attributes.alpha.array.length==e.alpha.length||t.geometry.setAttribute("alpha",new THREE.Float32BufferAttribute(e.alpha,1).setUsage(THREE.DynamicDrawUsage)),t.particleSystem.visible=t.showParticle;var i=t.geometry.attributes.size.array,r=t.geometry.attributes.color.array,n=t.geometry.attributes.alpha.array,a=t.geometry.attributes.position.array;if(null!=e.position)for(var s=0;s<e.position.length;s++)a[s]=e.position[s];if(null!=e.color)for(s=0;s<e.color.length;s++)r[s]=e.color[s];if(null!=e.alpha)for(s=0;s<e.alpha.length;s++)n[s]=e.alpha[s];if(null!=e.size)for(s=0;s<e.size.length;s++)i[s]=e.size[s];t.geometry.attributes.size.needsUpdate=e.sizeNeedsUpdate,t.geometry.attributes.color.needsUpdate=e.colorNeedsUpdate,t.geometry.attributes.alpha.needsUpdate=e.alphaNeedsUpdate,t.geometry.attributes.position.needsUpdate=e.positionNeedsUpdate}},r.ParticleSystemManager=class{constructor(e,t){var i=this;i.FPS=20,i.FPS_MS=1e3/i.FPS,i.particleSystem=e,i.particleList=[],i.initialOpts(t)}initialOpts(e){var t=this;t.setOpts(e);for(var i=0;i<t.count;i++)t.createParticle()}createParticle(){var e=this,t=new r.Particle({initSize:e.size,initVelocity:e.initVelocity,emitPosition:e.emitPosition,scaleAry:e.scale,colorAry:e.color,minimumSpeed:e.minimumSpeed,maximumSpeed:e.maximumSpeed,minimumParticleLife:e.minimumParticleLife,maximumParticleLife:e.maximumParticleLife,originPitch:e.originPitch,radius:e.radius,updateCallback:e.updateCallback,applyGravity:e.applyGravity,randomFrameNumber:e.randomFrameNumber,randomXY:e.randomXY,camera:e.camera});e.particleList.push(t)}setOpts(e){var t=this;null!=e.emissionRate&&(t.emissionRate=e.emissionRate),null!=e.minimumParticleLife&&(t.minimumParticleLife=e.minimumParticleLife),null!=e.maximumParticleLife&&(t.maximumParticleLife=e.maximumParticleLife),null!=e.originYaw&&(t.originYaw=e.originYaw),null!=e.originPitch&&(t.originPitch=e.originPitch),null!=e.originYaw&&(t.initVelocity={z:Math.cos(t.originPitch),x:Math.sin(t.originPitch)*Math.cos(t.originYaw),y:Math.sin(t.originPitch)*Math.sin(t.originYaw)}),null!=e.size&&(t.size=e.size),null!=e.emitPosition&&(t.emitPosition=e.emitPosition),null!=e.scale&&(t.scale=e.scale),null!=e.color&&(t.color=e.color),null!=e.minimumSpeed&&(t.minimumSpeed=e.minimumSpeed),null!=e.maximumSpeed&&(t.maximumSpeed=e.maximumSpeed),null!=e.radius&&(t.radius=e.radius),null!=e.updateCallback&&(t.updateCallback=e.updateCallback),null!=e.applyGravity&&(t.applyGravity=e.applyGravity),null!=e.randomFrameNumber&&(t.randomFrameNumber=e.randomFrameNumber),null!=e.randomXY&&(t.randomXY=e.randomXY),null!=e.camera&&(t.camera=e.camera),t.renderCount=Math.floor(t.FPS*t.maximumParticleLife),t.count=t.emissionRate*t.renderCount}effectOpt(e){var t=this;if(t.setOpts(e),t.count<t.particleList.length)t.particleList.length=t.count;else if(t.count>t.particleList.length)for(var i=t.particleList.length;i<t.count;i++)t.createParticle();for(i=0;i<t.particleList.length;i++)t.particleList[i].initSize=t.size,t.particleList[i].initVelocity=t.initVelocity,t.particleList[i].emitPosition=t.emitPosition,t.particleList[i].scaleAry=t.scale,t.particleList[i].colorAry=t.color,t.particleList[i].minimumSpeed=t.minimumSpeed,t.particleList[i].maximumSpeed=t.maximumSpeed,t.particleList[i].minimumParticleLife=t.minimumParticleLife,t.particleList[i].maximumParticleLife=t.maximumParticleLife,t.particleList[i].originPitch=t.originPitch,t.particleList[i].radius=t.radius,t.particleList[i].updateCallback=t.updateCallback,t.particleList[i].applyGravity=t.applyGravity,t.particleList[i].randomFrameNumber=t.randomFrameNumber,t.particleList[i].randomXY=t.randomXY,t.particleList[i].camera=t.camera}stop(){this.startTime=null}play(){var e=this;e.startTime=(new Date).getTime(),e.renderTimes=0,e.loops=0}render(){var e=this,t=(new Date).getTime();if(null!=e.startTime){var i=(t-e.startTime)%(1e3*e.maximumParticleLife),r=Math.floor((t-e.startTime)/(1e3*e.maximumParticleLife));for(r>e.loops?(e.loops=r,e.renderTimes=0):r<e.loops&&(e.loops=r);e.renderTimes*e.FPS_MS<=i;){for(var n=e.renderTimes*e.emissionRate;n<(e.renderTimes+1)*e.emissionRate;n++)n<e.particleList.length&&e.particleList[n].init(t-i+e.renderTimes*e.FPS_MS);e.renderTimes++}}var a={position:[],color:[],alpha:[],size:[]};for(n=0;n<e.count;n++)e.particleList[n].updateStatus(t),a.position.push(e.particleList[n].position.x),a.position.push(e.particleList[n].position.y),a.position.push(e.particleList[n].position.z),a.color.push(e.particleList[n].color.r),a.color.push(e.particleList[n].color.g),a.color.push(e.particleList[n].color.b),0==e.particleList[n].visible?a.alpha.push(0):a.alpha.push(e.particleList[n].alpha),a.size.push(e.particleList[n].size);a.angleNeedsUpdate=!0,a.sizeNeedsUpdate=!0,a.colorNeedsUpdate=!0,a.alphaNeedsUpdate=!0,a.positionNeedsUpdate=!0,e.particleSystem.update(a)}destroy(){this.particleSystem=null,this.initVelocity=null}},function(){class e extends THREE.Group{constructor(e){super();var t=this;t.disPickable=!0,t.autoAnimation=!0,null!=e.scene?t.scene=e.scene:t.scene=t,t.SQRT2=Math.SQRT2,t.setOpts(e),t.createLine(),t.createMesh(),t.show(),t.offsetHeight=0,t.hopFlg=!0}createMesh(){var e=this;e.meshGeometry=new THREE.BufferGeometry;let t=new Float32Array([0,0,0,e.radius_SQRT2,e.size,e.radius_SQRT2,e.radius_SQRT2,e.size,-e.radius_SQRT2,-e.radius_SQRT2,e.size,-e.radius_SQRT2,-e.radius_SQRT2,e.size,e.radius_SQRT2]);e.meshGeometry.setAttribute("position",new THREE.BufferAttribute(t,3));e.meshGeometry.setIndex([0,1,2,0,2,3,0,3,4,0,4,1,1,2,3,3,4,1]),e.meshGeometry.computeBoundingSphere(),e.meshMaterial=new THREE.MeshBasicMaterial({color:e.color,opacity:e.alpha,side:THREE.DoubleSide,depthTest:!0,transparent:!0,depthWrite:!1,blending:THREE.NormalBlending}),e.mesh=new THREE.Mesh(e.meshGeometry,e.meshMaterial),e.scene.add(e.mesh)}createLine(){var e=this;e.lineGeometry=new THREE.BufferGeometry;let t=new Float32Array([0,0,0,e.radius_SQRT2,e.size,e.radius_SQRT2,e.radius_SQRT2,e.size,-e.radius_SQRT2,-e.radius_SQRT2,e.size,-e.radius_SQRT2,-e.radius_SQRT2,e.size,e.radius_SQRT2]);e.lineGeometry.setAttribute("position",new THREE.BufferAttribute(t,3));e.lineGeometry.setIndex([0,1,2,0,2,3,0,3,4,0,4,1]),e.lineGeometry.computeBoundingSphere(),e.lineMaterial=new THREE.MeshBasicMaterial({color:e.wireframeColor,opacity:e.wireframeAlpha,depthTest:!0,transparent:!0,depthWrite:!1,wireframe:!0,wireframeLinewidth:1,wireframeLinejoin:"round"}),e.line=new THREE.Mesh(e.lineGeometry,e.lineMaterial),e.scene.add(e.line)}destroy(){this._clear()}_clear(){var e=this;null!=e.mesh&&e.scene.remove(e.mesh),null!=e.line&&e.scene.remove(e.line),null!=e.lineGeometry&&e.lineGeometry.dispose(),null!=e.lineMaterial&&e.lineMaterial.dispose(),null!=e.meshGeometry&&e.meshGeometry.dispose(),null!=e.meshMaterial&&e.meshMaterial.dispose()}update(){var e=this;if(e.hopFlg){var t=(new Date).getTime();e.offsetHeight=r.Math.breatheTweens(0,e.size/2,t,e.duration),e.position.set(e.originPosition.x,e.originPosition.y,e.originPosition.z+e.offsetHeight),e.updateMatrixWorld()}}play(){this.hopFlg=!0}stop(){this.hopFlg=!1}effectOpt(e){var t=this;t.setOpts(e),t._clear(),t.createMesh(),t.createLine()}hide(){this.lineMaterial.visible=!1,this.meshMaterial.visible=!1}show(){this.lineMaterial.visible=!0,this.meshMaterial.visible=!0}setOpts(e){var t=this;e&&(void 0!==e.color&&null!==e.color&&(t.color=e.color),void 0!==e.alpha&&null!==e.alpha&&(t.alpha=e.alpha),void 0!==e.wireframeColor&&null!==e.wireframeColor&&(t.wireframeColor=e.wireframeColor),void 0!==e.wireframeAlpha&&null!==e.wireframeAlpha&&(t.wireframeAlpha=e.wireframeAlpha),void 0!==e.duration&&null!==e.duration&&(t.duration=e.duration),void 0!==e.size&&null!==e.size&&(t.size=e.size),void 0!==e.originPosition&&null!==e.originPosition&&(t.originPosition=e.originPosition,t.position.set(t.originPosition.x,t.originPosition.y,t.originPosition.z),t.updateMatrixWorld()),t.radius_SQRT2=t.size/t.SQRT2/2)}changeRotation(){this.rotation.x=Math.PI/2,this.updateMatrixWorld()}}r.PrismPoint=e}(),function(){class e extends THREE.Group{constructor(e){super();var t=this;t.disPickable=!0,t.autoAnimation=!0,t.color=new THREE.Color(1,0,0),t.alpha=.8,t.duration=1e3,t.blendingRatio=0,t.directionType=0,t.directionReverse=0,t.height=1,t.wallTexture=null,t.stretch=!1,t.repeat=!0,t.path=[],t.sideSum=0,t.imageWidth=512,t.imageHeight=32,t.unitLength=1,null!=e.scene?t.scene=e.scene:t.scene=t,t.setOpts(e),t.createUpdateMesh(),t.show()}createUpdateMesh(){const e=this;null==e.meshGeometry&&(e.meshGeometry=new THREE.BufferGeometry),e.meshGeometry.dispose();const t=e.path.length;var i=[],n=[];e.sideSum=0;for(var a=0,s=0;s<t-1;s++){var o=Math.sqrt((e.path[s].x-e.path[s+1].x)*(e.path[s].x-e.path[s+1].x)+(e.path[s].y-e.path[s+1].y)*(e.path[s].y-e.path[s+1].y));i.push(o),e.sideSum=e.sideSum+o}for(s=0;s<t-1;s++)n.push(a/e.sideSum),a+=i[s];n.push(a/e.sideSum);let l=[];for(let i=0;i<t;i++)l.push(new THREE.Vector3(e.path[i].x,e.path[i].y,e.path[i].z),new THREE.Vector3(e.path[i].x,e.path[i].y,e.path[i].z+e.height));const d=[],h=[];for(let e=0;e<t-1;++e){var c=2*e;h.push(l[c],l[c+1],l[c+3]),h.push(l[c],l[c+2],l[c+3]),d.push(new THREE.Vector2(n[e],0),new THREE.Vector2(n[e],1),new THREE.Vector2(n[e+1],1)),d.push(new THREE.Vector2(n[e],0),new THREE.Vector2(n[e+1],0),new THREE.Vector2(n[e+1],1))}l=null;let u=new Float32Array(3*h.length),p=new Float32Array(2*d.length);e.meshGeometry.setAttribute("position",new THREE.BufferAttribute(u,3).copyVector3sArray(h)),e.meshGeometry.setAttribute("uv",new THREE.BufferAttribute(p,2).copyVector2sArray(d)),null==e.meshMaterial&&(e.meshMaterial=new r.WallMaterial({side:THREE.DoubleSide,depthTest:!0,transparent:!0,depthWrite:!1,blending:THREE.NormalBlending}),e.refreshUniforms(),null===e.meshGeometry.boundingSphere&&e.meshGeometry.computeBoundingSphere(),e.mesh=new THREE.Mesh(e.meshGeometry,e.meshMaterial),e.mesh.renderOrder=r.EnumRenderOrder.Effect,e.scene.add(e.mesh))}destroy(){this.clear()}clear(){var e=this;null!=e.mesh&&(e.scene.remove(e.mesh),e.mesh=null),null!=e.meshGeometry&&(e.meshGeometry.dispose(),e.meshGeometry=null),null!=e.meshMaterial&&(e.meshMaterial.dispose(),e.meshMaterial=null)}update(){var e=this,t=(new Date).getTime();1==e.directionReverse?e.meshMaterial.uniforms.time.value=r.Math.tweens(1,0,t,e.duration):e.meshMaterial.uniforms.time.value=r.Math.tweens(0,1,t,e.duration)}effectOpt(e){var t=this;t.setOpts(e),null!=t.resetPath&&(t.createUpdateMesh(),t.resetPath=null),t.refreshUniforms()}refreshUniforms(){var e=this;if(e.meshMaterial.color=e.color,e.meshMaterial.opacity=e.alpha,e.meshMaterial.uniforms.blendingRatio.value=e.blendingRatio,e.meshMaterial.uniforms.directionType.value=e.directionType,e.meshMaterial.uniforms.directionReverse.value=e.directionReverse,e.meshMaterial.uniforms.repeat.value=e.repeat?1:0,e.meshMaterial.map=e.wallTexture,0==e.stretch){var t=e.imageWidth/e.imageHeight;0==e.directionType?e.unitLength=e.sideSum/e.height/t:e.unitLength=e.height/e.sideSum/t}else e.unitLength=1;e.meshMaterial.uniforms.unitLength.value=e.unitLength}hide(){this.meshMaterial.visible=!1}show(){this.meshMaterial.visible=!0}setOpts(e){var t=this;e&&(void 0!==e.color&&null!==e.color&&(t.color=e.color),void 0!==e.alpha&&null!==e.alpha&&(t.alpha=e.alpha),void 0!==e.duration&&null!==e.duration&&(t.duration=e.duration),void 0!==e.blendingRatio&&null!==e.blendingRatio&&(t.blendingRatio=e.blendingRatio),void 0!==e.directionType&&null!==e.directionType&&("Tangent"==e.directionType?t.directionType=0:t.directionType=1),void 0!==e.directionReverse&&null!==e.directionReverse&&(0==e.directionReverse?t.directionReverse=0:t.directionReverse=1),void 0!==e.height&&null!==e.height&&(t.height=e.height),void 0!==e.wallTexture&&null!==e.wallTexture&&(t.wallTexture=e.wallTexture),void 0!==e.path&&null!==e.path&&(t.path=e.path),void 0!==e.stretch&&null!==e.stretch&&(t.stretch=e.stretch),void 0!==e.repeat&&null!==e.repeat&&(t.repeat=e.repeat),void 0!==e.imageWidth&&null!==e.imageWidth&&(t.imageWidth=e.imageWidth),void 0!==e.imageHeight&&null!==e.imageHeight&&(t.imageHeight=e.imageHeight))}}r.Wall=e}(),function(){class e extends THREE.Group{constructor(e){super();var t=this;t.disPickable=!0,t.autoAnimation=!0,t.viewer=e.viewer,t.modelManager=t.viewer.getModelManager(),null!=e.scene?t.scene=e.scene:t.scene=t,t.mesh=[],t.meshGeometry=[],t.angle=0,t.hiddenIds=[],t.externalObjectConverter=new r.ExternalObjectConverter(t.viewer),t.setOpts(e),t._updateGeometry(),t.createUpdateMesh(),t.show(),t.translateZ(.01)}_getRandomName(){return Math.floor(1e3*Math.random())+"_"+(new Date).getTime()}_cancelAllHidden(){for(var e=this,t=0;t<e.hiddenIds.length;t++)e.viewer.gisMode?e.viewer.getFilter().addToOverrideListByColor([e.hiddenIds[t].featureId],null,e.hiddenIds[t].modelId):e.viewer.getFilter().showByIds([e.hiddenIds[t].featureId],e.hiddenIds[t].modelId);e.hiddenIds=[]}_updateGeometry(){var e=this;if(e._cancelAllHidden(),e.meshLen=0,null!=e.boundaryGeometry)e._addGeometry(e.boundaryGeometry,new THREE.Matrix4);else{for(var t=0;t<e.ids.length;t++){var i=e.ids[t].objectIds;if(null==i)return void console.log("objectIds不能为空.");var r=e.ids[t].modelId;for(let t=0;t<i.length;t++)e.hiddenIds.push({modelId:r,featureId:i[t]});if(e.viewer.gisMode)e.viewer.getFilter().addToOverrideListByColor(i,{color:0,opacity:0},r);else{e.viewer.getFilter().hideByIds(i,r);for(let t=0;t<i.length;t++){var n=e.externalObjectConverter.convertToExternalObject(e._getRandomName(),i[t],!1);if(!(n.children.length<=0))for(var a=0,s=n.children.length;a<s;a++)e._addGeometry(n.children[a].geometry,n.children[a].matrix)}}}e.viewer.gisMode&&(e.tempMaterial=new THREE.ShaderMaterial)}e.meshGeometry.length>e.meshLen&&e.segmentationClear(e.meshLen)}createUpdateMesh(){var e=this;null==e.meshMaterial&&(e.meshMaterial=new r.PlaneScanMaterial({side:THREE.DoubleSide,depthTest:!0,transparent:!0,depthWrite:!1,blending:THREE.NormalBlending}),e.refreshUniforms());for(var t=!1,i=e.mesh.length;i<e.meshGeometry.length;i++){var n=new THREE.Mesh(e.meshGeometry[i],e.meshMaterial);n.renderOrder=r.EnumRenderOrder.Effect,e.scene.add(n),e.mesh.push(n),t=!0}t&&e.updateMatrixWorld()}_checkGeomtry(){var e=this;e.meshLen=e.meshGeometry.length;var t={};e.featureIdData={};for(var i=0;i<e.ids.length;i++)for(var r=e.ids[i].objectIds,n=e.ids[i].modelId,a=0;a<r.length;a++){var s={};s[r[a]]=!0,e.modelManager.traverseModels((function(i){i.id==n&&i.getPickingMeshes({skinningWireframeMaterial:e.tempMaterial,skinningSelectedMaterial:e.tempMaterial,selectedLineMaterial:e.tempMaterial,selectedMaterial:e.tempMaterial,wireframeMaterial:e.tempMaterial,instancedSelectedMaterial:e.tempMaterial,instancedWireFrameMaterial:e.tempMaterial},t,[r[a]],s,e.id+n)})),null!=t[n]&&e._getGeometry(t[n],n+"|"+r[a])}var o=!1;if(null!=e.featureIdDataBak){for(let t in e.featureIdDataBak)null==e.featureIdData[t]&&1==e.featureIdDataBak[t].visible&&(o=!0,e.featureIdDataBak[t].visible=!1);for(let t in e.featureIdData)if(null!=e.featureIdDataBak[t])if(e.featureIdData[t].drawcalls==e.featureIdDataBak[t].drawcalls)0==e.featureIdDataBak[t].visible&&(o=!0,e.featureIdDataBak[t].visible=!0),delete e.featureIdData[t];else{o=!0,e.featureIdDataBak[t]=e.featureIdData[t];for(a=e.mesh.length-1;a>=0;a--)e.mesh[a].geometry.mfKey==t&&(e.scene.remove(e.mesh[a]),e.mesh.splice(a,1),e.meshLen--)}else o=!0,e.featureIdDataBak[t]=e.featureIdData[t]}else e.featureIdDataBak=e.featureIdData,o=!0;if(0!=o){for(a=e.mesh.length-1;a>=0;a--)e.mesh[a].visible=e.featureIdDataBak[e.mesh[a].geometry.mfKey].visible;for(let i in e.featureIdData)for(let r=0;r<e.featureIdData[i].geometry.length;r++){var l=i.split("|")[0],d=t[l].matrix.clone();d=d.multiply(e.featureIdData[i].matrix[r]),e._addGeometry(e.featureIdData[i].geometry[r],d,i)}e.createUpdateMesh()}}_getGeometry(e,t){var i=this;if(null!=e.geometry){if(!e.isMesh)return;null==i.featureIdData[t]&&(i.featureIdData[t]={geometry:[],matrix:[],drawcalls:0,visible:!0}),i.featureIdData[t].geometry.push(e.geometry),i.featureIdData[t].matrix.push(e.matrix);for(var r=e.geometry.groups,n=0;n<r.length;n++)i.featureIdData[t].drawcalls+=e.geometry.groups[n].count}for(var a=e.children,s=0,o=a.length;s<o;s++)i._getGeometry(a[s],t)}_addGeometry(e,t,i){var r=this;let n=[],a=[],s=[];var o,l=e.getIndex().array,d=e.attributes.position.array;null!=e.attributes.uv?s=e.attributes.uv.array:(e.computeBoundingBox(),e.boundingBox.clone().applyMatrix4(t)),r.meshGeometry.length<=r.meshLen?(o=new THREE.BufferGeometry,r.meshGeometry.push(o)):o=r.meshGeometry[r.meshLen];for(var h={x:Number.MAX_VALUE,y:Number.MAX_VALUE},c={x:-Number.MAX_VALUE,y:-Number.MAX_VALUE},u=new THREE.Vector3,p=0;p<d.length;p+=3)u.set(d[p],d[p+1],d[p+2]),u.applyMatrix4(t),n.push(u.x),n.push(u.y),n.push(u.z),null==e.attributes.uv&&(s.push(u.x),s.push(u.y));var m=e.groups;if(null!=m&&0!=m.length)for(let t=0;t<m.length;t++)for(var f=m[t],g=f.start;g<f.start+f.count;g++)a.push(l[g]),null==e.attributes.uv&&(c.x=Math.max(c.x,n[3*l[g]]),c.y=Math.max(c.y,n[3*l[g]+1]),h.x=Math.min(h.x,n[3*l[g]]),h.y=Math.min(h.y,n[3*l[g]+1]));else if(a=l,null==e.attributes.uv)for(g=0;g<l.length;g++)c.x=Math.max(c.x,n[3*l[g]]),c.y=Math.max(c.y,n[3*l[g]+1]),h.x=Math.min(h.x,n[3*l[g]]),h.y=Math.min(h.y,n[3*l[g]+1]);if(null==e.attributes.uv)for(p=0;p<s.length;p++)if(p%2==0){var v=(s[p]-h.x)/(c.x-h.x);s[p]=v}else{var y=(s[p]-h.y)/(c.y-h.y);s[p]=y}o.setIndex(new THREE.Uint32BufferAttribute(a,1)),o.setAttribute("uv",new THREE.Float32BufferAttribute(s,2)),o.setAttribute("position",new THREE.Float32BufferAttribute(n,3)),null!=i&&(o.mfKey=i),r.meshLen++}destroy(){this.clear(),this.externalObjectConverter.destroy()}clear(){var e=this;if(null!=e.mesh&&e.mesh.length>0){for(var t=0;t<e.mesh.length;t++)e.scene.remove(e.mesh[t]);e.mesh=[]}if(null!=e.meshGeometry&&e.meshGeometry.length>0){for(t=0;t<e.meshGeometry.length;t++)e.meshGeometry[t].dispose();e.meshGeometry=[]}null!=e.meshMaterial&&e.meshMaterial.dispose(),e._cancelAllHidden()}segmentationClear(e=0){var t=this;if(t.featureIdDataBak=null,null!=t.mesh&&t.mesh.length>0){for(var i=e;i<t.mesh.length;i++)t.scene.remove(t.mesh[i]);t.mesh.length=e}if(null!=t.meshGeometry&&t.meshGeometry.length>0){for(i=e;i<t.meshGeometry.length;i++)t.meshGeometry[i].dispose();t.meshGeometry.length=e}}update(){var e=this;e.ids.length>0&&e.viewer.gisMode&&e._checkGeomtry();var t=(new Date).getTime();e.meshMaterial.uniforms.time.value=r.Math.tweens(0,1,t,e.duration)}effectOpt(e){var t=this;t.setOpts(e),null!=t.resetPath&&(t._updateGeometry(),t.createUpdateMesh(),t.resetPath=null),t.refreshUniforms()}refreshUniforms(){var e=this;null!=e.meshMaterial&&(e.meshMaterial.color=e.color,e.meshMaterial.opacity=e.alpha,e.meshMaterial.uniforms.blendingRatio.value=e.blendingRatio,e.meshMaterial.uniforms.angle.value=e.angle,e.meshMaterial.map=e.planeScanTexture)}hide(){null!=this.meshMaterial&&(this.meshMaterial.visible=!1)}show(){null!=this.meshMaterial&&(this.meshMaterial.visible=!0)}setOpts(e){var t=this;e&&(void 0!==e.color&&null!==e.color&&(t.color=e.color),void 0!==e.alpha&&null!==e.alpha&&(t.alpha=e.alpha),void 0!==e.duration&&null!==e.duration&&(t.duration=e.duration),void 0!==e.blendingRatio&&null!==e.blendingRatio&&(t.blendingRatio=e.blendingRatio),void 0!==e.direction&&null!==e.direction&&(t.direction=e.direction,0==t.direction.x&&0==t.direction.y?t.angle=0:0==t.direction.x&&0!=t.direction.y?t.angle=t.direction.y>0?Math.PI/2:3*Math.PI/2:0!=t.direction.x&&0==t.direction.y?t.angle=t.direction.x>0?0:Math.PI:(t.angle=Math.atan(t.direction.y/t.direction.x),t.direction.x<0&&(t.angle=t.angle+Math.PI))),void 0!==e.planeScanTexture&&null!==e.planeScanTexture&&(t.planeScanTexture=e.planeScanTexture),void 0===e.ids||null===e.ids||e.boundaryGeometry?void 0!==e.boundaryGeometry&&null!==e.boundaryGeometry&&(t.boundaryGeometry=e.boundaryGeometry,t.ids=[]):(t.ids=e.ids,t.boundaryGeometry=null))}}r.PlaneScan=e}(),function(){class e extends THREE.Group{constructor(e){super();var t=this;t.disPickable=!0,t.autoAnimation=!0,null!=e.scene?t.scene=e.scene:t.scene=t,t.setOpts(e),t.createUpdateMesh(),t.show()}createUpdateMesh(){var e=this;null==e.meshGeometry&&(e.meshGeometry=new THREE.BufferGeometry);var t=2*Math.PI;let i=new Float32Array(195);i.set([0,0,0]);let n=new Uint32Array(192),a=3,s=0;for(var o=0;o<64;o++){var l=o/64*t,d=Math.cos(l),h=Math.sin(l);i[a++]=e.radius*d,i[a++]=e.radius*h,i[a++]=0,o<63?(n[s++]=0,n[s++]=o+1,n[s++]=o+2):(n[s++]=0,n[s++]=o+1,n[s++]=1)}e.meshGeometry.setAttribute("position",new THREE.BufferAttribute(i,3)),e.meshGeometry.setIndex(new THREE.BufferAttribute(n,1)),null===e.meshGeometry.boundingSphere&&e.meshGeometry.computeBoundingSphere(),null==e.meshMaterial&&(e.meshMaterial=new r.FanScanMaterial({side:THREE.DoubleSide,depthTest:!0,transparent:!0,depthWrite:!1,blending:THREE.NormalBlending}),e.refreshUniforms(),e.mesh=new THREE.Mesh(e.meshGeometry,e.meshMaterial),e.scene.add(e.mesh))}destroy(){this._clear()}_clear(){var e=this;null!=e.mesh&&(e.scene.remove(e.mesh),e.mesh=null),null!=e.meshGeometry&&(e.meshGeometry.dispose(),e.meshGeometry=null),null!=e.meshMaterial&&(e.meshMaterial.dispose(),e.meshMaterial=null)}update(){var e=(new Date).getTime();this.meshMaterial.uniforms.time.value=r.Math.tweens(1,0,e,this.duration)}effectOpt(e){var t=this;t.setOpts(e),null!=t.resetMesh&&t.createUpdateMesh(),t.refreshUniforms(),t.resetMesh=null}refreshUniforms(){var e=this;e.meshMaterial.color=e.color,e.meshMaterial.opacity=e.alpha,e.meshMaterial.uniforms.backgroundColor.value=e.backgroundColor,e.meshMaterial.uniforms.backgroundOpacity.value=e.backgroundAlpha,e.meshMaterial.uniforms.fanAngle.value=e.fanAngle/(2*Math.PI)}hide(){this.meshMaterial.visible=!1}show(){this.meshMaterial.visible=!0}setOpts(e){var t=this;e&&(void 0!==e.color&&null!==e.color&&(t.color=e.color),void 0!==e.alpha&&null!==e.alpha&&(t.alpha=e.alpha),void 0!==e.backgroundColor&&null!==e.backgroundColor&&(t.backgroundColor=e.backgroundColor),void 0!==e.backgroundAlpha&&null!==e.backgroundAlpha&&(t.backgroundAlpha=e.backgroundAlpha),null!=e.fanAngle&&(t.fanAngle=e.fanAngle),null!=e.radius&&(t.radius=e.radius),void 0!==e.duration&&null!==e.duration&&(t.duration=e.duration),void 0!==e.originPosition&&null!==e.originPosition&&(t.originPosition=e.originPosition,t.position.set(t.originPosition.x,t.originPosition.y,t.originPosition.z),t.updateMatrixWorld()))}}r.FanScan=e}(),function(){class e extends THREE.Group{constructor(e){super();var t=this;t.viewer=e.engineViewer,t.modelManager=t.viewer.getModelManager(),t.scene=t.viewer.getScene(),t.refleRefraManager=t.viewer.refleRefraManager,t.externalObjectConverter=new r.ExternalObjectConverter(t.viewer),t.initNormalMap(e),t.initOption(e),t._updateGeometry(),t.addMesh(),t.translateZ(.01)}_cancelAllHidden(){for(var e=this,t=0;t<e.ids.length;t++){var i=e.ids[t].objectIds,r=e.ids[t].modelId;e.viewer.getFilter().addToOverrideListByColor(i,null,r),e.viewer.getFilter().showByIds(i,r)}}_getRandomName(){return Math.floor(1e3*Math.random())+"_"+(new Date).getTime()}_updateGeometry(){var e=this;if(e._cancelAllHidden(),e.meshLen=0,e.featureCount=0,e.isLoadedMeshes=!1,e.isAddUpdate=!1,null!=e.boundaryGeometry)e._addGeometry(e.boundaryGeometry,new THREE.Matrix4);else{for(var t=0;t<e.ids.length;t++){var i=e.ids[t].objectIds;if(null==i)return void console.log("objectIds不能为空.");var r=e.ids[t].modelId;let o=e.modelManager.getModel(r).transformMatrix;for(let t=0;t<i.length;t++){var n=e.externalObjectConverter.convertToExternalObject(e._getRandomName(),i[t],!1);if(n.children.length<=0)continue;let l=r+"|"+i[t];for(var a=0,s=n.children.length;a<s;a++){let t=(new THREE.Matrix4).copy(o).multiply(n.children[a].matrix);e._addGeometry(n.children[a].geometry,t,l)}}e.viewer.getFilter().addToOverrideListByColor(i,{color:0,opacity:0},r),e.featureCount+=i.length}e.viewer.gisMode&&(e.tempMaterial=new THREE.ShaderMaterial)}e.meshGeometry.length>e.meshLen&&e.segmentationClear(e.meshLen)}createMesh(e){var t=this,i=t.initMaterial(e);t.meshMaterial.push(i);var n=new THREE.Mesh(e,i);return n.type="Water",n.renderOrder=r.GlobalData.IncrementRender?r.EnumRenderOrder.Effect:r.EnumRenderOrder.BeforeComponent,t.shadow&&t.refleRefraManager.addWaterManager({textureWidth:t.textureWidth,textureHeight:t.textureHeight,clipBias:t.clipBias,mesh:n}),n}addMesh(){for(var e=this,t=e.mesh.length;t<e.meshGeometry.length;t++){var i=e.createMesh(e.meshGeometry[t]);e.add(i),i.translateZ(e.meshGeometry[t].initialOffset),e.mesh.push(i),e.isAddUpdate=!0}e.isAddUpdate&&e.updateMatrixWorld()}_checkVisible(){var e=this;for(var t in e.featureIdDataBak){var i=t.split("|"),r=i[0],n=i[1];let a=!e.viewer.getFilter().isHidden(n,r);if(e.viewer.gisMode){let t=e.modelManager.getNodeInfosByUserId(n,r),i=t[0].nodeId,s=e.modelManager.getModel(r).tilesLoader;null==s.getMeshNodeById(i)&&null==s.getInstanceMeshNodeById(i)&&(i=t[0].parent),a=a&&e.modelManager.getModel(r).isVisibleMesh(i)}a!=e.featureIdDataBak[t].visible&&(e.featureIdDataBak[t].visible=a,e.isAddUpdate=!0)}e.updateVisible()}updateVisible(){for(var e=this,t=e.mesh.length-1;t>=0;t--)void 0!==e.mesh[t]&&e.featureIdDataBak[e.mesh[t].geometry.mfKey]&&(e.mesh[t].visible=e.featureIdDataBak[e.mesh[t].geometry.mfKey].visible,e.mesh[t].material.visible=e.mesh[t].visible)}_checkGeomtry(){var e=this;e.meshLen=e.meshGeometry.length,e.featureIdData={};for(var t={},i=0;i<e.ids.length;i++)for(var r=e.ids[i].objectIds,n=e.ids[i].modelId,a=0;a<r.length;a++){var s={};s[r[a]]=!0,e.modelManager.traverseModels((function(i){i.id==n&&i.isVisible()&&i.getPickingMeshes({skinningWireframeMaterial:e.tempMaterial,skinningSelectedMaterial:e.tempMaterial,selectedLineMaterial:e.tempMaterial,selectedMaterial:e.tempMaterial,wireframeMaterial:e.tempMaterial,instancedSelectedMaterial:e.tempMaterial,instancedWireFrameMaterial:e.tempMaterial},t,[r[a]],s,e.id+n)})),null!=t[n]&&e._getGeometry(t[n],n+"|"+r[a])}var o=!1;if(null!=e.featureIdDataBak){for(let t in e.featureIdDataBak)null==e.featureIdData[t]&&1==e.featureIdDataBak[t].visible&&(o=!0,e.featureIdDataBak[t].visible=!1);for(let t in e.featureIdData)if(null!=e.featureIdDataBak[t])if(e.featureIdData[t].drawcalls==e.featureIdDataBak[t].drawcalls)0==e.featureIdDataBak[t].visible&&(o=!0,e.featureIdDataBak[t].visible=!0),delete e.featureIdData[t];else{o=!0,e.featureIdDataBak[t]=e.featureIdData[t];for(a=e.mesh.length-1;a>=0;a--)e.mesh[a].geometry.mfKey==t&&(e.shadow&&e.refleRefraManager.removeWaterManager(e.mesh[a].material.refleRefraId),e.remove(e.mesh[a]),e.mesh.splice(a,1),e.meshGeometry[a].dispose(),e.meshGeometry.splice(a,1),e.meshMaterial[a].dispose(),e.meshMaterial.splice(a,1),e.meshLen--)}else o=!0,e.featureIdDataBak[t]=e.featureIdData[t]}else e.featureIdDataBak=e.featureIdData,o=!0;0!=o&&(e.updateVisible(),e.isLoadedMeshes=e.featureCount==Object.keys(e.featureIdDataBak).length)}_getGeometry(e,t){var i=this;if(null!=e.geometry){if(!e.isMesh)return;null==i.featureIdData[t]&&(i.featureIdData[t]={geometry:[],matrix:[],drawcalls:0,visible:!0}),i.featureIdData[t].geometry.push(e.geometry),i.featureIdData[t].matrix.push(e.matrix);for(var r=e.geometry.groups,n=0;n<r.length;n++)i.featureIdData[t].drawcalls+=e.geometry.groups[n].count}for(var a=e.children,s=0,o=a.length;s<o;s++)i._getGeometry(a[s],t)}_addGeometry(e,t,i){var r=this,n=function(e){return e>=p.z-r.heightTolerance&&e<=p.z+r.heightTolerance};let a=[],s=[],o=[],l=[];var d=e.getIndex().array,h=e.attributes.position.array;e.computeBoundingBox();var c,u={x:Number.MAX_VALUE,y:Number.MAX_VALUE},p={x:-Number.MAX_VALUE,y:-Number.MAX_VALUE,z:-Number.MAX_VALUE};r.meshGeometry.length<=r.meshLen?(c=new THREE.BufferGeometry,r.meshGeometry.push(c)):c=r.meshGeometry[r.meshLen];var m=[],f=[],g=e.groups;if(null!=g&&0!=g.length){var v={},y=0;for(let e=0;e<g.length;e++)for(var M=g[e],E=M.start;E<M.start+M.count;E++)null==v[d[E]]?(m.push(y),v[d[E]]=y,y++,f.push(h[3*d[E]]),f.push(h[3*d[E]+1]),f.push(h[3*d[E]+2])):m.push(v[d[E]])}else m=d,f=h;for(var b,x,I,T,C=new THREE.Vector3,w=0;w<f.length;w+=3)C.set(f[w],f[w+1],f[w+2]),C.applyMatrix4(t),a.push(C.x),a.push(C.y),a.push(C.z),l.push(0),l.push(0),l.push(1),o.push(C.x),o.push(C.y);for(w=0;w<m.length;w++)b=m[w],x=void 0,I=void 0,T=void 0,x=a[3*b],I=a[3*b+1],T=a[3*b+2],p.x=Math.max(p.x,x),p.y=Math.max(p.y,I),p.z=Math.max(p.z,T),u.x=Math.min(u.x,x),u.y=Math.min(u.y,I);for(w=0;w<m.length;w+=3){let e=m[w],t=m[w+1],i=m[w+2];(null==r.heightTolerance||n(a[3*e+2])&&n(a[3*t+2])&&n(a[3*i+2]))&&(s.push(e),s.push(t),s.push(i))}for(w=2;w<a.length;w+=3)a[w]=0;for(w=0;w<o.length;w++)if(w%2==0){var S=(o[w]-u.x)/(p.x-u.x);o[w]=S}else{var A=(o[w]-u.y)/(p.y-u.y);o[w]=A}c.setIndex(new THREE.Uint32BufferAttribute(s,1)),c.setAttribute("uv",new THREE.Float32BufferAttribute(o,2)),c.setAttribute("position",new THREE.Float32BufferAttribute(a,3)),c.setAttribute("normal",new THREE.Float32BufferAttribute(l,3)),c.initialOffset=p.z,null!=i&&(c.mfKey=i),c.computeBoundingBox(),null==r.box&&(r.box=new THREE.Box3),r.box.expandByPoint(c.boundingBox.min),r.box.expandByPoint(c.boundingBox.max),r.meshLen++}destroy(){this.clear(),this.externalObjectConverter.destroy()}clear(){var e=this;if(null!=e.mesh&&e.mesh.length>0){for(var t=0;t<e.mesh.length;t++)e.shadow&&e.refleRefraManager.removeWaterManager(e.mesh[t].material.refleRefraId),e.remove(e.mesh[t]);e.mesh=[]}if(null!=e.meshGeometry&&e.meshGeometry.length>0){for(t=0;t<e.meshGeometry.length;t++)e.meshGeometry[t].dispose();e.meshGeometry=[]}if(null!=e.meshMaterial&&e.meshMaterial.length>0){for(t=0;t<e.meshMaterial.length;t++)e.meshMaterial[t].dispose();e.meshMaterial=[]}e._cancelAllHidden()}segmentationClear(e=0){var t=this;if(t.featureIdDataBak=null,null!=t.mesh&&t.mesh.length>0){for(var i=e;i<t.mesh.length;i++)t.shadow&&t.refleRefraManager.removeWaterManager(t.mesh[i].material.refleRefraId),t.remove(t.mesh[i]);t.mesh.length=e}if(null!=t.meshGeometry&&t.meshGeometry.length>0){for(i=e;i<t.meshGeometry.length;i++)t.meshGeometry[i].dispose();t.meshGeometry.length=e}}update(){var e=this;if(e.unrender=!1,e.isAddUpdate=!1,e.ids.length>0&&(null!=e.featureIdDataBak&&e.isLoadedMeshes?e._checkVisible():e._checkGeomtry()),e.flow){for(var t=e.clock.getDelta(),i=0;i<e.mesh.length;i++)if(e.mesh[i].visible){e.meshMaterial[i].uniforms.sunDirection.value=e.scene.sunDirection,e.meshMaterial[i].uniforms.flowTime.value+=1/120;var r=e.meshMaterial[i].uniforms.config;r.value.x+=e.flowSpeed*t,r.value.y=r.value.x+e.halfCycle,r.value.x>=e.cycle?(r.value.x=0,r.value.y=e.halfCycle):r.value.y>=e.cycle&&(r.value.y=r.value.y-e.cycle)}}else e.isAddUpdate||(e.unrender=!0)}setColor(e,t){var i=this;i.color=e,i.alpha=t;for(var r=0;r<i.meshMaterial.length;r++)i.meshMaterial[r].isUndersea=i.alpha<1,i.meshMaterial[r].uniforms.waterColor.value=new THREE.Vector4(i.color.r,i.color.g,i.color.b,i.alpha)}setScale(e){var t=this;t.wavesScale=e;for(var i=0;i<t.meshMaterial.length;i++)t.meshMaterial[i].uniforms.config.value.w=t.wavesScale}setDirection(e,t){var i=this;i.flowDirection=new THREE.Vector2(e,t);for(var r=0;r<i.meshMaterial.length;r++)i.meshMaterial[r].uniforms.flowDirection.value=i.flowDirection}initOption(e){var t=this;t.color=e.color,t.alpha=e.alpha,void 0!==e.ids&&null!==e.ids&&e.ids.length>0?(t.ids=e.ids,t.boundaryGeometry=null,t.componentIds=[]):void 0!==e.boundaryGeometry&&null!==e.boundaryGeometry&&(t.boundaryGeometry=e.boundaryGeometry,t.ids=[],t.componentIds=[]),void 0!==e.heightTolerance&&null!==e.heightTolerance?t.heightTolerance=e.heightTolerance:t.heightTolerance=null,t.flowDirection=e.flowDirection||new THREE.Vector2(1,0),t.flowMap=e.flowMap||void 0,t.flowSpeed=e.flowSpeed||.03,t.reflectivity=e.reflectivity||.1,t.wavesScale=e.scale||1,e.shadow?t.shadow=!0:t.shadow=!1,e.flow?t.flow=!0:t.flow=!1,t.cycle=e.cycle||.4,t.halfCycle=.5*t.cycle,t.clock=new THREE.Clock,t.hiddenIds=[],t.meshMaterial=[],t.mesh=[],t.meshGeometry=[]}initNormalMap(e){var t=this,i=new THREE.TextureLoader;t.textureWidth=e.textureWidth||512,t.textureHeight=e.textureHeight||512,t.clipBias=e.clipBias||0;var r=e.map0,n=e.map1;t.normalMap0=e.normalMap0||i.load(r),t.normalMap1=e.normalMap1||i.load(n),t.normalMap0.wrapS=t.normalMap0.wrapT=THREE.RepeatWrapping,t.normalMap1.wrapS=t.normalMap1.wrapT=THREE.RepeatWrapping}initMaterial(e){var t=new r.WaterMaterial;return t.initUniforms(this),t}}r.Water=e}(),r.RefleRefraManager=class{constructor(e){var t=this;t.viewer=e,t.scene=t.viewer.getScene(),t.refleRefraManager={}}getReflectorTexture(e){if(null!=this.refleRefraManager[e])return this.refleRefraManager[e].reflector.getRenderTarget().texture}getRefractorTexture(e){if(null!=this.refleRefraManager[e])return this.refleRefraManager[e].refractor.getRenderTarget().texture}_getRandomId(){return"RefleRefra-"+Math.floor(1e3*Math.random())+"-"+(new Date).getTime()}removeWaterManager(e){var t=this;null!=t.refleRefraManager[e]&&(t.refleRefraManager[e]=null,delete t.refleRefraManager[e])}addWaterManager(e){var t=this,i=t._getRandomId(),r=e.mesh,n=new THREE.Reflector(r.geometry,{textureWidth:e.textureWidth,textureHeight:e.textureHeight,clipBias:e.clipBias});n.matrixAutoUpdate=!1;var a=new THREE.Refractor(r.geometry,{textureWidth:e.textureWidth,textureHeight:e.textureHeight,clipBias:e.clipBias});a.matrixAutoUpdate=!1,t.refleRefraManager[i]={reflector:n,refractor:a,mesh:r},r.material.refleRefraId=i,r.material.uniforms.tReflectionMap.value=t.getReflectorTexture(i),r.material.uniforms.tRefractionMap.value=t.getRefractorTexture(i)}hideAllMesh(){for(var e in this.refleRefraManager)this.refleRefraManager[e].mesh.visible=!1}showAllMesh(){for(var e in this.refleRefraManager)this.refleRefraManager[e].mesh.visible=!0}render(e){var t=this;for(var i in t.refleRefraManager){var r=t.refleRefraManager[i],n=r.mesh;if(0!=r.mesh.visible){var a=n.material;a.textureMatrix.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),a.textureMatrix.multiply(t.viewer.camera.projectionMatrix),a.textureMatrix.multiply(t.viewer.camera.matrixWorldInverse),a.textureMatrix.multiply(n.matrixWorld),t.hideAllMesh(),r.reflector.matrixWorld.copy(n.matrixWorld),r.reflector.onBeforeRender(e,t.scene,t.viewer.camera),a.isUndersea&&(r.refractor.matrixWorld.copy(n.matrixWorld),r.refractor.onBeforeRender(e,t.scene,t.viewer.camera)),t.showAllMesh()}}}dispose(){var e=this;e.viewer=null,e.scene=null,e.refleRefraManager=null}},THREE.Reflector=function(e,t){THREE.Mesh.call(this,e),this.type="Reflector";var i=this,r=void 0!==(t=t||{}).color?new THREE.Color(t.color):new THREE.Color(8355711),n=t.textureWidth||512,a=t.textureHeight||512,s=t.clipBias||0,o=t.shader||THREE.Reflector.ReflectorShader,l=(void 0!==t.recursion&&t.recursion,new THREE.Plane),d=new THREE.Vector3,h=new THREE.Vector3,c=new THREE.Vector3,u=new THREE.Matrix4,p=new THREE.Vector3(0,0,-1),m=new THREE.Vector4,f=new THREE.Vector3,g=new THREE.Vector3,v=new THREE.Vector4,y=new THREE.Matrix4,M=new THREE.PerspectiveCamera,E={minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBFormat,stencilBuffer:!1},b=new THREE.WebGLRenderTarget(n,a,E);THREE.Math.isPowerOfTwo(n)&&THREE.Math.isPowerOfTwo(a)||(b.texture.generateMipmaps=!1);var x=new THREE.ShaderMaterial({uniforms:THREE.UniformsUtils.clone(o.uniforms),fragmentShader:o.fragmentShader,vertexShader:o.vertexShader});x.uniforms.tDiffuse.value=b.texture,x.uniforms.color.value=r,x.uniforms.textureMatrix.value=y,this.material=x,this.onBeforeRender=function(e,t,r){if(h.setFromMatrixPosition(i.matrixWorld),c.setFromMatrixPosition(r.matrixWorld),u.extractRotation(i.matrixWorld),d.set(0,0,1),d.applyMatrix4(u),f.subVectors(h,c),!(f.dot(d)>0)){f.reflect(d).negate(),f.add(h),u.extractRotation(r.matrixWorld),p.set(0,0,-1),p.applyMatrix4(u),p.add(c),g.subVectors(h,p),g.reflect(d).negate(),g.add(h),M.position.copy(f),M.up.set(0,1,0),M.up.applyMatrix4(u),M.up.reflect(d),M.lookAt(g),M.far=r.far,M.updateMatrixWorld(),M.matrixWorldInverse.copy(M.matrixWorld).invert(),M.projectionMatrix.copy(r.projectionMatrix),y.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),y.multiply(M.projectionMatrix),y.multiply(M.matrixWorldInverse),y.multiply(i.matrixWorld),l.setFromNormalAndCoplanarPoint(d,h),l.applyMatrix4(M.matrixWorldInverse),m.set(l.normal.x,l.normal.y,l.normal.z,l.constant);var n=M.projectionMatrix;v.x=(Math.sign(m.x)+n.elements[8])/n.elements[0],v.y=(Math.sign(m.y)+n.elements[9])/n.elements[5],v.z=-1,v.w=(1+n.elements[10])/n.elements[14],m.multiplyScalar(2/m.dot(v)),n.elements[2]=m.x,n.elements[6]=m.y,n.elements[10]=m.z+1-s,n.elements[14]=m.w,i.visible=!1;var a=e.getRenderTarget(),o=e.shadowMap.autoUpdate;e.shadowMap.autoUpdate=!1,e.setRenderTarget(b),e.render(t,M),e.shadowMap.autoUpdate=o,e.setRenderTarget(a),r.isArrayCamera&&e.state.viewport(r.viewport),i.visible=!0}},this.getRenderTarget=function(){return b}},THREE.Reflector.prototype=Object.create(THREE.Mesh.prototype),THREE.Reflector.prototype.constructor=THREE.Reflector,THREE.Reflector.ReflectorShader={uniforms:{color:{value:null},tDiffuse:{value:null},textureMatrix:{value:null}},vertexShader:["uniform mat4 textureMatrix;","varying vec4 vUv;","void main() {","\tvUv = textureMatrix * vec4( position, 1.0 );","\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n"),fragmentShader:["uniform vec3 color;","uniform sampler2D tDiffuse;","varying vec4 vUv;","float blendOverlay( float base, float blend ) {","\treturn( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );","}","vec3 blendOverlay( vec3 base, vec3 blend ) {","\treturn vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );","}","void main() {","\tvec4 base = texture2DProj( tDiffuse, vUv );","\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );","}"].join("\n")},THREE.Refractor=function(e,t){THREE.Mesh.call(this,e),this.type="Refractor";var i=this,r=void 0!==(t=t||{}).color?new THREE.Color(t.color):new THREE.Color(8355711),n=t.textureWidth||512,a=t.textureHeight||512,s=t.clipBias||0,o=t.shader||THREE.Refractor.RefractorShader,l=new THREE.PerspectiveCamera;l.matrixAutoUpdate=!1,l.userData.refractor=!0;var d=new THREE.Plane,h=new THREE.Matrix4,c={minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBFormat,stencilBuffer:!1},u=new THREE.WebGLRenderTarget(n,a,c);THREE.Math.isPowerOfTwo(n)&&THREE.Math.isPowerOfTwo(a)||(u.texture.generateMipmaps=!1),this.material=new THREE.ShaderMaterial({uniforms:THREE.UniformsUtils.clone(o.uniforms),vertexShader:o.vertexShader,fragmentShader:o.fragmentShader,transparent:!0}),this.material.uniforms.color.value=r,this.material.uniforms.tDiffuse.value=u.texture,this.material.uniforms.textureMatrix.value=h;var p,m,f,g,v,y,M,E,b=(p=new THREE.Vector3,m=new THREE.Vector3,f=new THREE.Matrix4,g=new THREE.Vector3,v=new THREE.Vector3,function(e){return p.setFromMatrixPosition(i.matrixWorld),m.setFromMatrixPosition(e.matrixWorld),g.subVectors(p,m),f.extractRotation(i.matrixWorld),v.set(0,0,1),v.applyMatrix4(f),g.dot(v)<0}),x=function(){var e=new THREE.Vector3,t=new THREE.Vector3,r=new THREE.Quaternion,n=new THREE.Vector3;return function(){i.matrixWorld.decompose(t,r,n),e.set(0,0,1).applyQuaternion(r).normalize(),e.negate(),d.setFromNormalAndCoplanarPoint(e,t)}}(),I=(y=new THREE.Plane,M=new THREE.Vector4,E=new THREE.Vector4,function(e){l.matrixWorld.copy(e.matrixWorld),l.matrixWorldInverse.copy(l.matrixWorld).invert(),l.projectionMatrix.copy(e.projectionMatrix),l.far=e.far,y.copy(d),y.applyMatrix4(l.matrixWorldInverse),M.set(y.normal.x,y.normal.y,y.normal.z,y.constant);var t=l.projectionMatrix;E.x=(Math.sign(M.x)+t.elements[8])/t.elements[0],E.y=(Math.sign(M.y)+t.elements[9])/t.elements[5],E.z=-1,E.w=(1+t.elements[10])/t.elements[14],M.multiplyScalar(2/M.dot(E)),t.elements[2]=M.x,t.elements[6]=M.y,t.elements[10]=M.z+1-s,t.elements[14]=M.w});this.onBeforeRender=function(e,t,r){!0!==r.userData.refractor&&!0!=!b(r)&&(x(),function(e){h.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),h.multiply(e.projectionMatrix),h.multiply(e.matrixWorldInverse),h.multiply(i.matrixWorld)}(r),I(r),function(e,t,r){i.visible=!1;var n=e.getRenderTarget(),a=e.shadowMap.autoUpdate;e.shadowMap.autoUpdate=!1,e.setRenderTarget(u),e.clear(),e.render(t,l),e.shadowMap.autoUpdate=a,e.setRenderTarget(n),r.isArrayCamera&&e.state.viewport(r.viewport),i.visible=!0}(e,t,r))},this.getRenderTarget=function(){return u}},THREE.Refractor.prototype=Object.create(THREE.Mesh.prototype),THREE.Refractor.prototype.constructor=THREE.Refractor,THREE.Refractor.RefractorShader={uniforms:{color:{value:null},tDiffuse:{value:null},textureMatrix:{value:null}},vertexShader:["uniform mat4 textureMatrix;","varying vec4 vUv;","void main() {","\tvUv = textureMatrix * vec4( position, 1.0 );","\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n"),fragmentShader:["uniform vec3 color;","uniform sampler2D tDiffuse;","varying vec4 vUv;","float blendOverlay( float base, float blend ) {","\treturn( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );","}","vec3 blendOverlay( vec3 base, vec3 blend ) {","\treturn vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );","}","void main() {","\tvec4 base = texture2DProj( tDiffuse, vUv );","\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );","}"].join("\n")},r.PickingEffecter=class{constructor(e){this.viewer=e;var t=1170103;this.wireframeMaterial=new r.MeshBasicClipMaterial({color:t,opacity:1,transparent:!0,blending:THREE.CustomBlending,blendSrc:THREE.OneFactor,blendDst:THREE.ZeroFactor,blendEquation:THREE.AddEquation}),this.selectedMaterial=new r.MeshBasicClipMaterial({color:t,opacity:.3,transparent:!0}),this.skinningWireframeMaterial=new r.MeshBasicClipMaterial({color:t,opacity:1,transparent:!0,blending:THREE.CustomBlending,blendSrc:THREE.OneFactor,blendDst:THREE.ZeroFactor,blendEquation:THREE.AddEquation,skinning:!0}),this.skinningSelectedMaterial=new r.MeshBasicClipMaterial({color:t,opacity:.3,transparent:!0,skinning:!0}),this.selectedLineMaterial=new THREE.LineMaterial({color:t,opacity:1,transparent:!0,linewidth:2,dashed:!1}),this.instancedWireFrameMaterial=new r.InstancedMeshBasicMaterial({color:t,opacity:1,transparent:!0,blending:THREE.CustomBlending,blendSrc:THREE.OneFactor,blendDst:THREE.ZeroFactor,blendEquation:THREE.AddEquation}),this.instancedSelectedMaterial=new r.InstancedMeshBasicMaterial({color:t,opacity:.3,transparent:!0}),this.selectionScene=new THREE.Scene,this.selectionScene.autoUpdate=!1,this.selectionObjectGroup=new r.ObjectGroup,this.selectionObjectGroup.name="PickingObjectGroup",this.selectionObjectGroup.matrixAutoUpdate=!1,this.selectionScene.add(this.selectionObjectGroup),this.lastSelectedUserIdMap=null,this.lastSelectedUserIds=null,this.selectedMaterialForClip=this.selectedMaterial.clone(),this.wireframeMaterialForClip=this.wireframeMaterial.clone(),this.instancedSelectedMaterialForClip=this.instancedSelectedMaterial.clone(),this.instancedWireFrameMaterialForClip=this.instancedWireFrameMaterial.clone(),this.selectedMaterialId=void 0}destroy(){this.wireframeMaterial.dispose(),this.wireframeMaterial=null,this.wireframeMaterialForClip.dispose(),this.wireframeMaterialForClip=null,this.selectedMaterial.dispose(),this.selectedMaterial=null,this.selectedMaterialForClip.dispose(),this.selectedMaterialForClip=null,this.skinningWireframeMaterial.dispose(),this.skinningWireframeMaterial=null,this.skinningSelectedMaterial.dispose(),this.skinningSelectedMaterial=null,this.selectedLineMaterial.dispose(),this.selectedLineMaterial=null,this.instancedWireFrameMaterial.dispose(),this.instancedWireFrameMaterial=null,this.instancedWireFrameMaterialForClip.dispose(),this.instancedWireFrameMaterialForClip=null,this.instancedSelectedMaterial.dispose(),this.instancedSelectedMaterial=null,this.instancedSelectedMaterialForClip.dispose(),this.instancedSelectedMaterialForClip=null,this.selectionObjectGroup.clear(),this.selectionObjectGroup=null,this.selectionScene=null,this.lastSelectedUserIdMap=null,this.lastSelectedUserIds=null,this.viewer=null}apply(e){var t=this.viewer,i=t.getSelectionWithModelId();if(!i||!i.length)return this._clearSelectedUserIdsCache(),void this._clearMeshesFromScene();(e||this.isSelectionsChanged())&&(this._cacheSelectedUserIds(i),this._updateScene(i)),this._render(t.rendererManager.getRenderer(),t.camera)}isSelectionsChanged(){const e=this.lastSelectedUserIdMap;if(!r.Utils.defined(e))return!0;const t=this.viewer.getSelectionWithModelId();if(t.length!==Object.keys(e).length)return!0;let i=!1;for(var n=t.length-1;n>=0;n--){const a=t[n],s=e[a.selectedId];if(!r.Utils.defined(s)){i=!0;break}if(s.modelId!==a.modelId){i=!0;break}}return!0===i||i}_cacheSelectedUserIds(e){this.lastSelectedUserIdMap={};for(let t=0;t<e.length;++t)this.lastSelectedUserIdMap[e[t].selectedId]=e[t]}_clearSelectedUserIdsCache(){this.lastSelectedUserIdMap=null}_render(e,t){var i=e.autoClearColor,r=e.autoClearDepth,n=e.autoClearStencil;e.autoClearColor=!1,e.autoClearDepth=!0,e.autoClearStencil=!1,e.render(this.selectionScene,t),e.autoClearColor=i,e.autoClearDepth=r,e.autoClearStencil=n}_updateScene(e){this._clearMeshesFromScene(),this._addMeshesToScene(this._getSelectedMeshes(e)),this._updateMatrixWorldForScene(),this._updateSelectedLineMaterial()}_clearMeshesFromScene(){this.selectionObjectGroup.clear()}_addMeshesToScene(e){let t=Object.keys(e);for(const i of t)this.selectionObjectGroup.add(e[i])}_updateMatrixWorldForScene(){this.selectionObjectGroup.matrix.copy(this.viewer.getScene().getMatrixGlobal()),this.selectionObjectGroup.updateMatrixWorld(!0)}_getSelectedMeshes(e){var t={},i=this;return this.viewer.getModelManager().traverseLoadedModels((function(n){const a=[];for(let t=0;t<e.length;++t){const i=e[t];i.modelId===n.databagId&&a.push(i.selectedId)}if(0===a.length)return;const s=r.Utils.arrayToMap(a);n.getPickingMeshes(i,t,a,s)})),t}_updateSelectedLineMaterial(){r.GlobalData.PickingLineWidthEnabled&&this.selectedLineMaterial.resolution.set(this.viewer.domElement.offsetWidth,this.viewer.domElement.offsetHeight)}},r.PickingNodeGenerator=class{constructor(e){this.manager=e,this.pickingNodeMap=null,this.pickingNodeGroup=null,this.nodeGroupName="PickingNodeGroup"}destroy(){this.clearData(),this.pickingNodeGroup=null,this.manager=null}clearData(){this.clearAllFromPickingNodeGroup(),this.clearAllFromPickingNodeMap()}addToPickingNodeMap(e,t){this.pickingNodeMap||(this.pickingNodeMap={}),this.pickingNodeMap[e]=t,this.addToPickingNodeGroup(t)}removeFromPickingNodeMap(e){this.pickingNodeMap&&this.pickingNodeMap[e]&&(this.removeFormPickingNodeGroup(e),this.disposePickingNodeById(e),delete this.pickingNodeMap[e])}addToPickingNodeGroup(e){this.pickingNodeGroup||(this.pickingNodeGroup=new THREE.Group,this.pickingNodeGroup.name=this.nodeGroupName);for(var t=0,i=e.length;t<i;t++)this.pickingNodeGroup.add(e[t])}removeFormPickingNodeGroup(e){if(this.pickingNodeGroup)for(var t=this.pickingNodeMap[e],i=0,r=t.length;i<r;i++)this.pickingNodeGroup.remove(t[i])}disposePickingNodeById(e){for(var t=this.pickingNodeMap[e],i=0,r=t.length;i<r;i++)t[i].material=null,t[i].geometry.dispose(),t[i]=null}clearAllFromPickingNodeMap(){if(this.pickingNodeMap){for(var e=this.pickingNodeMap,t=Object.keys(e),i=0,r=t.length;i<r;i++)this.disposePickingNodeById(t[i]);this.pickingNodeMap=null}}clearAllFromPickingNodeGroup(){this.pickingNodeGroup&&(this.pickingNodeGroup.children.length=0)}isPickingMeshesGenerated(){return!!this.pickingNodeMap}generatePickingMeshes(){}updatePickingMeshesState(e,t,i,r){}resetPickingMeshesState(){}updatePickingMeshes(e,t,i,r){return this.isPickingMeshesGenerated()||(this.generatePickingMeshes(),this.isPickingMeshesGenerated())?(this.resetPickingMeshesState(),this.updatePickingMeshesState(e,t,i,r),this.getPickingNodeGroup()):null}getPickingNodeGroup(){return this.pickingNodeGroup}getMeshesForCap(e,t){}updatePickingMeshesStateForCap(e,t,i){}},function(){class e extends r.PickingNodeGenerator{constructor(e){super(e),this.nodeGroupName="PickingBatchedMeshGroup"}disposePickingNodeById(e){for(var t=this.pickingNodeMap[e],i=0,r=t.length;i<r;i++)t[i]._indicesGroup=null,t[i].material=null,t[i].geometry.dispose(),t[i]=null}generatePickingMeshes(){for(var e=this.manager,t=Object.keys(e.mapMaterialIdToMergedNode),i=0,n=t.length;i<n;i++){for(var a=t[i],s=e.getPropertyValueByMaterialKey(a),o=e.mapMaterialIdToMergedNode[a],l=[],d=0,h=o.length;d<h;d++){var c=o[d],u=c.geometry,p=c.indices,m=new THREE.BufferGeometry;m.setAttribute("position",u.getAttribute("position")),m.setIndex(u.getIndex());var f="lines"===s.type?THREE.LineSegments:THREE.Mesh,g=r.MaterialUtil.DefaultMaterial;if(this.reserveMaterial){g=(g=c.mesh.material)instanceof Array?g[0]:g,u.getAttribute("uv")&&m.setAttribute("uv",u.getAttribute("uv"))}var v=new f(m,[g]);v.name=a,v.frustumCulled=!1,v.renderOrder=r.EnumRenderOrder.Component,v._indicesGroup=p,l.push(v)}this.addToPickingNodeMap(a,l)}}getMeshesForCap(e,t){for(var i=this.manager,n=Object.keys(i.mapMaterialIdToMergedNode),a=0,s=n.length;a<s;a++){for(var o=n[a],l=i.getPropertyValueByMaterialKey(o),d=i.mapMaterialIdToMergedNode[o],h=[],c=0,u=d.length;c<u;c++){var p=d[c],m=p.geometry,f=p.indices,g=new THREE.BufferGeometry;g.setAttribute("position",m.getAttribute("position")),g.setIndex(m.getIndex());var v="lines"===l.type?THREE.LineSegments:THREE.Mesh,y=p.mesh.material;if((y=y instanceof Array?y[0]:y).side==THREE.DoubleSide)continue;var M=new v(g,[y]);M.name=o,M.frustumCulled=!1,M.renderOrder=r.EnumRenderOrder.Component,M._indicesGroup=f;let i=[],n=[t[y.name]],a=[y.name];for(var E in f){let r=e[E][0].materialId,s=f[E];var b=a.indexOf(r);-1==b&&(a.push(r),n.push(t[r]),b=n.length-1);for(let e=0;e<s.length;e++)i.push({indexStart:s[e].indexStart,indexCount:s[e].indexCount,state:b}),s[e].capMaterialIndex=b}i.sort((function(e,t){return e.indexStart-t.indexStart}));for(let e=0,t=i.length;e<t;e++){var x=i[e].indexStart,I=i[e].indexCount,T=i[e].state;if(0===e)g.addGroup(x,I,T);else{var C=i[e-1].indexStart,w=i[e-1].indexCount;T===i[e-1].state&&x===C+w?g.groups[g.groups.length-1].count+=I:g.addGroup(x,I,T)}}M.material=n,h.push(M)}this.addToPickingNodeMap(o,h)}return this.getPickingNodeGroup()}updatePickingMeshesStateForCap(e,t,i){this.isPickingMeshesGenerated()||this.getMeshesForCap(t,i);for(var r,n,a,s,o=this.manager.manager,l=this.pickingNodeMap,d=Object.keys(l),h=e.getFilter(),c=0,u=d.length;c<u;c++)for(var p=l[d[c]],m=0,f=p.length;m<f;m++){let e=p[m];var g=e._indicesGroup;let t=Object.keys(g),i=g;var v=[];for(a=0,s=t.length;a<s;a++){var y=t[a];if(o.isPickableNode(y)&&i[y]){var M=g[y];if(M&&M.length>0){if(h.isHidden(y))continue;for(r=0,n=M.length;r<n;r++)v.push({indexStart:M[r].indexStart,indexCount:M[r].indexCount,state:M[r].capMaterialIndex})}}}e.visible=!0;var E=e.geometry;if(E.clearGroups(),0!==v.length)for(v.sort((function(e,t){return e.indexStart-t.indexStart})),r=0,n=v.length;r<n;r++){var b=v[r].indexStart,x=v[r].indexCount,I=v[r].state;if(0===r)E.addGroup(b,x,I);else{var T=v[r-1].indexStart,C=v[r-1].indexCount;I===v[r-1].state&&b===T+C?E.groups[E.groups.length-1].count+=x:E.addGroup(b,x,I)}}else e.visible=!1}return this.getPickingNodeGroup()}_rebuildGeometryGroup(e,t,i,n,a){var s,o,l,d,h,c,u=this.manager.manager,p=e._indicesGroup,m=Object.keys(p);m.length<t.length?(h=m,c=i):(h=t,c=p);var f=null,g=n.getFilter();g&&(f=g.getLocalClippingList());var v=[],y=[];let M={},E=r.Model.EnumFilterState.OVERRIDED;for(l=0,d=h.length;l<d;l++){var b=h[l];if(!u.isPickableNode(b)||!c[b])continue;const e=g._getOverrideMaterialById(b);var x=p[b];if(x&&x.length>0){if(f&&f[b]){var I="localClipping|"+b;y.push(I);var T=y.length-1;for(s=0,o=x.length;s<o;s++)v.push({indexStart:x[s].indexStart,indexCount:x[s].indexCount,state:1+T});continue}for(s=0,o=x.length;s<o;s++){let t=0;e&&!a.selectedMaterial&&(void 0===M[e.name]?(t=E,E++,M[e.name]={material:e,state:t}):t=M[e.name].state),v.push({indexStart:x[s].indexStart,indexCount:x[s].indexCount,state:t})}}}e.visible=!0;var C=e.geometry;if(C.clearGroups(),0===v.length)return void(e.visible=!1);for(v.sort((function(e,t){return e.indexStart-t.indexStart})),s=0,o=v.length;s<o;s++){var w=v[s].indexStart,S=v[s].indexCount,A=v[s].state;if(0===s)C.addGroup(w,S,A);else{var B=v[s-1].indexStart,R=v[s-1].indexCount;A===v[s-1].state&&w===B+R?C.groups[C.groups.length-1].count+=S:C.addGroup(w,S,A)}}var D=[a.selectedMaterial||e.material[0]];for(s=0,o=y.length;s<o;s++){var O;"localClipping"==y[s].split("|")[0]&&(O=a.selectedMaterialForClip),D.push(O)}for(const e in M){const t=M[e];D[t.state]=t.material}e.material=D}updatePickingMeshesState(e,t,i,r){for(var n=this.pickingNodeMap,a=Object.keys(n),s=0,o=a.length;s<o;s++){let o=!0;this.manager.getPropertyValueByMaterialKey(a[s]).materialId!=e.selectedMaterialId&&null!=e.selectedMaterialId&&(o=!1);for(var l=n[a[s]],d=0,h=l.length;d<h;d++)l[d].visible=!1,o&&this._rebuildGeometryGroup(l[d],t,i,r,e)}}}r.PickingBatchedMeshGenerator=e}(),function(){class e extends r.PickingNodeGenerator{constructor(e){super(e),this.nodeGroupName="PickingBatchedWireFrameGroup"}disposePickingNodeById(e){for(var t=this.pickingNodeMap[e],i=0,r=t.length;i<r;i++)t[i]._indicesGroup=null,t[i].material=null,t[i].geometry.dispose(),t[i]=null}generatePickingMeshes(){var e=this.manager.getWireFrameLineSegments();if(e)for(var t=0,i=e.length;t<i;t++){var n=e[t].geometry,a=new THREE.BufferGeometry;a.setAttribute("position",n.getAttribute("position")),a.setIndex(n.getIndex());var s=new THREE.LineSegments(a,r.MaterialUtil.DefaultMaterial);s._indicesGroup=e[t]._indicesGroup,s.frustumCulled=!1,s.renderOrder=r.EnumRenderOrder.WireFrame,this.addToPickingNodeMap(t,[s])}}_rebuildGeometryGroup(e,t,i,r,n){var a,s,o,l,d,h,c=this.manager.manager,u=e._indicesGroup,p=Object.keys(u);p.length<t.length?(d=p,h=i):(d=t,h=u);var m=null,f=r.getFilter();f&&(m=f.getLocalClippingList());var g=[],v=[];for(o=0,l=d.length;o<l;o++){var y=d[o];if(c.isPickableNode(y)&&h[y]){var M=u[y];if(M&&M.length>0){if(m&&m[y]){var E="localClipping|"+y;v.push(E);var b=v.length-1;for(a=0,s=M.length;a<s;a++)g.push({indexStart:M[a].indexStart,indexCount:M[a].indexCount,state:1+b});continue}for(a=0,s=M.length;a<s;a++)M[a].materialId!=n.selectedMaterialId&&null!=n.selectedMaterialId||g.push({indexStart:M[a].indexStart,indexCount:M[a].indexCount,state:0})}}}e.visible=!0;var x=e.geometry;if(x.clearGroups(),0!==g.length){for(g.sort((function(e,t){return e.indexStart-t.indexStart})),a=0,s=g.length;a<s;a++){var I=g[a].indexStart,T=g[a].indexCount,C=g[a].state;if(0===a)x.addGroup(I,T,C);else{var w=g[a-1].indexStart,S=g[a-1].indexCount;C===g[a-1].state&&I===w+S?x.groups[x.groups.length-1].count+=T:x.addGroup(I,T,C)}}var A=[n.wireframeMaterial];for(a=0,s=v.length;a<s;a++){var B;"localClipping"==v[a].split("|")[0]&&(B=n.wireframeMaterialForClip),A.push(B)}e.material=A}else e.visible=!1}updatePickingMeshesState(e,t,i,r){for(var n=this.pickingNodeMap,a=Object.keys(n),s=0,o=a.length;s<o;s++)for(var l=n[a[s]],d=0,h=l.length;d<h;d++)l[d].visible=!1,this._rebuildGeometryGroup(l[d],t,i,r,e)}}r.PickingBatchedWireFrameGenerator=e}(),function(){class e extends r.PickingNodeGenerator{constructor(e){super(e),this.nodeGroupName="PickingMeshGroup"}disposePickingNodeById(e){for(var t=Object.keys(this.pickingNodeMap[e]),i=0,r=t.length;i<r;i++)for(var n=this.pickingNodeMap[e][t[i]],a=0,s=n.length;a<s;a++)n[a].material=null,n[a].geometry.dispose(),n[a]=null}removeFormPickingNodeGroup(e){if(this.pickingNodeGroup)for(var t=Object.keys(this.pickingNodeMap[e]),i=0,r=t.length;i<r;i++)for(var n=0,a=this.pickingNodeMap[e][t[i]].length;n<a;n++)this.pickingNodeGroup.remove(nodes[n])}addToPickingNodeMap(e,t,i){this.pickingNodeMap||(this.pickingNodeMap={}),this.pickingNodeMap[e]||(this.pickingNodeMap[e]={}),this.pickingNodeMap[e][t]=i,this.addToPickingNodeGroup(i)}generatePickingMeshes(e){var t=this;this.manager.traverseActiveMeshMap(e,(function(e,i,n){if(!t._isExistNode(e,i)){for(var a=[],s=0,o=n.length;s<o;s++){var l=n[s],d=new THREE.BufferGeometry;d.setAttribute("position",l.geometry.getAttribute("position")),d.setIndex(l.geometry.getIndex()),d._withDrawRange&&d.setDrawRange(l.geometry.drawRange.start,l.geometry.drawRange.count);var h=new(l.isLineSegments?THREE.LineSegments:THREE.Mesh)(d,r.MaterialUtil.DefaultMaterial);r.GeomUtil.copyMeshProperties(h,l),h.renderOrder=r.EnumRenderOrder.WireFrame,a.push(h)}t.addToPickingNodeMap(e,i,a)}}))}_isExistNode(e,t){return!!(this.pickingNodeMap&&this.pickingNodeMap[e]&&this.pickingNodeMap[e][t])}updatePickingMeshesState(e,t,i){if(this.pickingNodeMap)for(var r=e.selectedMaterial,n=this.pickingNodeMap,a=this.manager,s=0,o=t.length;s<o;s++){var l=t[s];if(n[l]&&a.isPickableNode(l)){var d=a.getActiveMeshMapById(l);if(d)for(var h=Object.keys(n[l]),c=0,u=h.length;c<u;c++){var p=h[c];if(d[p]){var m=n[l][p];if(m)for(var f=0,g=m.length;f<g;f++)m[f].material=r,m[f].visible=!0}}}}}resetPickingMeshesState(){if(this.pickingNodeMap)for(var e=this.pickingNodeMap,t=Object.keys(e),i=0,r=t.length;i<r;i++)for(var n=t[i],a=Object.keys(e[n]),s=0,o=a.length;s<o;s++)for(var l=e[n][a[s]],d=0,h=l.length;d<h;d++)l[d].visible=!1}updatePickingMeshes(e,t,i){return this.generatePickingMeshes(t),this.resetPickingMeshesState(),this.updatePickingMeshesState(e,t,i),this.getPickingNodeGroup()}}r.PickingMeshGenerator=e}(),function(){class e extends r.PickingNodeGenerator{constructor(e){super(e),this.nodeGroupName="PickingWireFrameGroup"}disposePickingNodeById(e){for(var t=Object.keys(this.pickingNodeMap[e]),i=0,r=t.length;i<r;i++)for(var n=this.pickingNodeMap[e][t[i]],a=0,s=n.length;a<s;a++)n[a].material=null,n[a].geometry.dispose(),n[a]=null}addToPickingNodeMap(e,t,i){this.pickingNodeMap||(this.pickingNodeMap={}),this.pickingNodeMap[e]||(this.pickingNodeMap[e]={}),this.pickingNodeMap[e][t]=i,this.addToPickingNodeGroup(i)}removeFormPickingNodeGroup(e){if(this.pickingNodeGroup)for(var t=Object.keys(this.pickingNodeMap[e]),i=0,r=t.length;i<r;i++)for(var n=0,a=this.pickingNodeMap[e][t[i]].length;n<a;n++)this.pickingNodeGroup.remove(nodes[n])}generatePickingMeshes(e){var t=this,i=this.manager;this.manager.manager.getMeshManager().traverseActiveMeshMap(e,(function(e,n,a){if(!(a&&a.length&&a[0].isLineSegments||t._isExistNode(e,n))){var s,o,l=a[0].geometryId,d=[];for(s=0,o=a.length;s<o;s++)d.push(a[s].geometry);var h=i._getWireframeGeometryById(l,d),c=[];for(s=0,o=h.length;s<o;s++){var u=new THREE.LineSegments(h[s],r.MaterialUtil.DefaultMaterial);r.GeomUtil.copyMeshProperties(u,a[s]),u.renderOrder=r.EnumRenderOrder.Component,c.push(u)}t.addToPickingNodeMap(e,n,c)}}))}_isExistNode(e,t){return!!(this.pickingNodeMap&&this.pickingNodeMap[e]&&this.pickingNodeMap[e][t])}updatePickingMeshesState(e,t,i){if(this.pickingNodeMap)for(var r=e.selectedMaterial,n=this.pickingNodeMap,a=this.manager.manager.getMeshManager(),s=0,o=t.length;s<o;s++){var l=t[s];if(n[l]&&a.isPickableNode(l)){var d=a.getActiveMeshMapById(l);if(d)for(var h=Object.keys(n[l]),c=0,u=h.length;c<u;c++){var p=h[c];if(d[p]){var m=n[l][p];if(m)for(var f=0,g=m.length;f<g;f++)m[f].material=r,m[f].visible=!0}}}}}resetPickingMeshesState(){if(this.pickingNodeMap)for(var e=this.pickingNodeMap,t=Object.keys(e),i=0,r=t.length;i<r;i++)for(var n=t[i],a=Object.keys(e[n]),s=0,o=a.length;s<o;s++)for(var l=e[n][a[s]],d=0,h=l.length;d<h;d++)l[d].visible=!1}updatePickingMeshes(e,t,i){return this.generatePickingMeshes(t),this.resetPickingMeshesState(),this.updatePickingMeshesState(e,t,i),this.getPickingNodeGroup()}}r.PickingWireFrameGenerator=e}(),function(){class e extends r.PickingNodeGenerator{constructor(e){super(e),this.nodeGroupName="PickingInstancedMeshGroup"}generatePickingMeshes(){var e=this,t=this.manager,i=t.cachedInstance,n=!r.GlobalData.BatchMergeEnabled;t.traverseInstanceNodeMap(null,(function(t,a){for(var s=[],o=a[0],l=0,d=o.length;l<d;l++){var h=o[l].geometry,c=new THREE.InstancedBufferGeometry;c.setAttribute("position",h.getAttribute("position")),c.setAttribute("mcol0",h.getAttribute("mcol0")),c.setAttribute("mcol1",h.getAttribute("mcol1")),c.setAttribute("mcol2",h.getAttribute("mcol2")),c.setAttribute("mcol3",h.getAttribute("mcol3")),c.setAttribute("vState",new THREE.InstancedBufferAttribute(new Float32Array(i.vState[t]),1,!1,1)),c.setIndex(h.getIndex());var u=r.MaterialUtil.DefaultMaterial;e.reserveMaterial&&(u=o[l].material,c.setAttribute("muvCol0",h.getAttribute("muvCol0")),c.setAttribute("muvCol1",h.getAttribute("muvCol1")),c.setAttribute("muvCol2",h.getAttribute("muvCol2")));var p=new THREE.Mesh(c,u);p.name=t,p.frustumCulled=!1,p.renderOrder=n?r.EnumRenderOrder.AfterComponent:r.EnumRenderOrder.Component,s.push(p)}e.addToPickingNodeMap(t,s)}))}getMeshesForCap(e,t){var i=this,n=this.manager,a=n.cachedInstance,s=!r.GlobalData.BatchMergeEnabled;return n.traverseInstanceNodeMap(null,(function(e,n){for(var o=[],l=n[0],d=0,h=l.length;d<h;d++){var c=l[d].geometry,u=new THREE.InstancedBufferGeometry;u.setAttribute("position",c.getAttribute("position")),u.setAttribute("mcol0",c.getAttribute("mcol0")),u.setAttribute("mcol1",c.getAttribute("mcol1")),u.setAttribute("mcol2",c.getAttribute("mcol2")),u.setAttribute("mcol3",c.getAttribute("mcol3")),u.setAttribute("vState",new THREE.InstancedBufferAttribute(new Float32Array(a.vState[e]),1,!1,1)),u.setAttribute("aColor",c.getAttribute("aColor")),u.setIndex(c.getIndex());var p=t[l[d].material.name],m=new THREE.Mesh(u,p);m.name=e,m.frustumCulled=!1,m.renderOrder=s?r.EnumRenderOrder.AfterComponent:r.EnumRenderOrder.Component,o.push(m)}i.addToPickingNodeMap(e,o)})),this.getPickingNodeGroup()}updatePickingMeshesStateForCap(e,t,i){this.isPickingMeshesGenerated()||this.getMeshesForCap(t,i);for(var n=this.pickingNodeMap,a=0,s=(m=Object.keys(n)).length;a<s;a++)for(var o=0,l=(f=n[m[a]]).length;o<l;o++)f[o].visible=!0,f[o].geometry.getAttribute("vState").array.fill(r.EnumInstanceState.NONE),f[o].geometry.getAttribute("vState").needsUpdate=!0;var d=this.manager.manager;let h=e.filter,c=e.getModelDescriptor().getInstancedUserIds();for(a=0,s=c.length;a<s;a++){var u=c[a];if(h.isHidden(u)){var p=d.getMeshManager().getNodeIdxMapByUserId(u);if(p){var m;for(o=0,l=(m=Object.keys(p)).length;o<l;o++){var f,g=m[o];if(f=n[g])for(var v=p[g],y=0,M=f.length;y<M;y++){var E=f[y];E.visible=!0;for(var b=E.geometry,x=b.getAttribute("vState").array,I=0,T=v.length;I<T;I++)x[v[I]]=r.EnumInstanceState.HIDDEN;b.getAttribute("vState").needsUpdate=!0}}}}}return this.getPickingNodeGroup()}updatePickingMeshesState(e,t,i,n){if(this.pickingNodeMap){var a=this.manager.manager,s=this.pickingNodeMap,o=n.getFilter(),l=null;o&&(l=o.getLocalClippingList());for(var d=0,h=t.length;d<h;d++){var c=t[d];if(!a.isPickableNode(c))continue;var u=a.getMeshManager().getNodeIdxMapByUserId(c);if(!u)continue;let i=(e,t)=>{const i=[];for(let r=0;r<t;++r){const t=null!=e.opacity?e.opacity:1;i.push(e.r,e.g,e.b,t)}return new THREE.InstancedBufferAttribute(new Float32Array(i),4,!1,1)};const n=o._getOverrideMaterialById(c);for(var p=Object.keys(u),m=0,f=p.length;m<f;m++){var g=p[m];if(g.split("&")[0]==e.selectedMaterialId||null==e.selectedMaterialId){var v=s[g];if(v)for(var y=u[g],M=0,E=v.length;M<E;M++){var b=v[M];l&&l[c]?b.material=e.instancedSelectedMaterialForClip:e.instancedSelectedMaterial&&(b.material=e.instancedSelectedMaterial),b.visible=!0;var x=b.geometry,I=x.getAttribute("vState").array;if(n&&!e.instancedSelectedMaterial&&!x.getAttribute("aColor")){const e=i(b.material.color,I.length);x.setAttribute("aColor",e)}for(var T=0,C=y.length;T<C;T++)if(I[y[T]]=r.EnumInstanceState.NONE,n&&!e.instancedSelectedMaterial){const e=x.getAttribute("aColor").array;e[4*y[T]]=n.color.r,e[4*y[T]+1]=n.color.g,e[4*y[T]+2]=n.color.b,e[4*y[T]+3]=n.opacity,I[y[T]]=r.EnumInstanceState.OVERRIDED}x.getAttribute("vState").needsUpdate=!0}}}}}}resetPickingMeshesState(){if(this.pickingNodeMap)for(var e=this.pickingNodeMap,t=Object.keys(e),i=0,n=t.length;i<n;i++)for(var a=e[t[i]],s=0,o=a.length;s<o;s++)a[s].visible=!1,a[s].geometry.getAttribute("vState").array.fill(r.EnumInstanceState.HIDDEN),a[s].geometry.getAttribute("vState").needsUpdate=!0}}r.PickingInstancedMeshGenerator=e}(),function(){class e extends r.PickingNodeGenerator{constructor(e){super(e),this.nodeGroupName="PickingInstancedWireFrameGroup"}generatePickingMeshes(){var e=this,t=this.manager,i=t.manager.getCachedInstanceData(),n=!r.GlobalData.BatchMergeEnabled;t._traverseWireframeGeometryMap((function(t,a){for(var s=[],o=0,l=a.length;o<l;o++){var d=a[o],h=new THREE.InstancedBufferGeometry;h.setAttribute("position",d.getAttribute("position")),h.setAttribute("mcol0",d.getAttribute("mcol0")),h.setAttribute("mcol1",d.getAttribute("mcol1")),h.setAttribute("mcol2",d.getAttribute("mcol2")),h.setAttribute("mcol3",d.getAttribute("mcol3")),h.setAttribute("vState",new THREE.InstancedBufferAttribute(new Float32Array(i.vState[t]),1,!1,1)),h.setIndex(d.getIndex());var c=new THREE.LineSegments(h,r.MaterialUtil.DefaultMaterial);c.name=t,c.frustumCulled=!1,c.renderOrder=n?r.EnumRenderOrder.Component:r.EnumRenderOrder.WireFrame,s.push(c)}e.addToPickingNodeMap(t,s)}))}updatePickingMeshesState(e,t,i,n){if(this.pickingNodeMap){var a=this.manager.manager,s=this.pickingNodeMap,o=n.getFilter(),l=null;o&&(l=o.getLocalClippingList());for(var d=0,h=t.length;d<h;d++){var c=t[d];if(a.isPickableNode(c)){var u=a.getMeshManager().getNodeIdxMapByUserId(c);if(u)for(var p=Object.keys(u),m=0,f=p.length;m<f;m++){var g=p[m],v=s[g];if((g.split("&")[0]==e.selectedMaterialId||null==e.selectedMaterialId)&&v)for(var y=u[g],M=0,E=v.length;M<E;M++){var b=v[M];l&&l[c]?b.material=e.instancedWireFrameMaterialForClip:b.material=e.instancedWireFrameMaterial,b.visible=!0;for(var x=b.geometry,I=x.getAttribute("vState").array,T=0,C=y.length;T<C;T++)I[y[T]]=r.EnumInstanceState.NONE;x.getAttribute("vState").needsUpdate=!0}}}}}}resetPickingMeshesState(){if(this.pickingNodeMap)for(var e=this.pickingNodeMap,t=Object.keys(e),i=0,n=t.length;i<n;i++)for(var a=e[t[i]],s=0,o=a.length;s<o;s++)a[s].visible=!1,a[s].geometry.getAttribute("vState").array.fill(r.EnumInstanceState.HIDDEN),a[s].geometry.getAttribute("vState").needsUpdate=!0}}r.PickingInstancedWireFrameGenerator=e}(),function(){class e extends r.PickingNodeGenerator{constructor(e){super(e),this.nodeGroupName="PickingIncrementInstancedMeshGroup"}_isExistNode(e){return!(!this.pickingNodeMap||!this.pickingNodeMap[e])}generatePickingMeshes(){var e=this,t=this.manager,i=t.getCachedInstanceData(),n=!r.GlobalData.BatchMergeEnabled;t.traverseActiveMeshMap(null,(function(t,a){if(!e._isExistNode(t)){for(var s=[],o=0,l=a.length;o<l;o++){var d=a[o].geometry,h=new THREE.InstancedBufferGeometry;h.setAttribute("position",d.getAttribute("position")),h.setAttribute("mcol0",d.getAttribute("mcol0")),h.setAttribute("mcol1",d.getAttribute("mcol1")),h.setAttribute("mcol2",d.getAttribute("mcol2")),h.setAttribute("mcol3",d.getAttribute("mcol3")),h.setAttribute("vState",new THREE.InstancedBufferAttribute(new Float32Array(i.vState[t]),1,!1,1)),h.setIndex(d.getIndex());var c=new THREE.Mesh(h,r.MaterialUtil.DefaultMaterial);c.name=t,c.frustumCulled=!1,c.renderOrder=n?r.EnumRenderOrder.AfterComponent:r.EnumRenderOrder.Component,s.push(c)}e.addToPickingNodeMap(t,s)}}))}updatePickingMeshesState(e,t,i){if(this.pickingNodeMap)for(var n=e.selectedMaterial,a=this.manager.manager,s=this.pickingNodeMap,o=0,l=t.length;o<l;o++){var d=t[o];if(a.isPickableNode(d)){var h=a.getMeshManager().getNodeIdxMapByUserId(d);if(h){var c=Object.keys(h);a.getMeshManager().traverseActiveMeshMap(c,(function(e,t){if(s[e])for(var i=h[e],a=s[e],o=0,l=a.length;o<l;o++){var d=a[o];d.material=n,d.visible=!0;for(var c=d.geometry,u=c.getAttribute("vState").array,p=0,m=i.length;p<m;p++)u[i[p]]=r.EnumInstanceState.NONE;c.getAttribute("vState").needsUpdate=!0}}))}}}}resetPickingMeshesState(){if(this.pickingNodeMap)for(var e=this.pickingNodeMap,t=Object.keys(e),i=0,n=t.length;i<n;i++)for(var a=e[t[i]],s=0,o=a.length;s<o;s++)a[s].visible=!1,a[s].geometry.getAttribute("vState").array.fill(r.EnumInstanceState.HIDDEN),a[s].geometry.getAttribute("vState").needsUpdate=!0}updatePickingMeshes(e,t,i){return this.generatePickingMeshes(),this.resetPickingMeshesState(),this.updatePickingMeshesState(e,t,i),this.getPickingNodeGroup()}}r.PickingIncrementInstancedMeshGenerator=e}(),function(){class e extends r.PickingNodeGenerator{constructor(e){super(e),this.nodeGroupName="PickingIncrementInstancedWireFrameGroup"}_isExistNode(e){return!(!this.pickingNodeMap||!this.pickingNodeMap[e])}generatePickingMeshes(){var e=this,t=this.manager.manager,i=t.getMeshManager(),n=t.getWireFrameManager(),a=i.getCachedInstanceData(),s=!r.GlobalData.BatchMergeEnabled;i.traverseActiveMeshMap(null,(function(t,i){if(!e._isExistNode(t)){var o=[];n._createGeometryById(t),n._traverseWireframeGeometryMapById(t,(function(e,t){var i=new THREE.InstancedBufferGeometry;i.setAttribute("position",e.getAttribute("position")),i.setAttribute("mcol0",e.getAttribute("mcol0")),i.setAttribute("mcol1",e.getAttribute("mcol1")),i.setAttribute("mcol2",e.getAttribute("mcol2")),i.setAttribute("mcol3",e.getAttribute("mcol3")),i.setAttribute("vState",new THREE.InstancedBufferAttribute(new Float32Array(a.vState[t]),1,!1,1)),i.setIndex(e.getIndex());var n=new THREE.Mesh(i,r.MaterialUtil.DefaultMaterial);n.name=t,n.frustumCulled=!1,n.renderOrder=s?r.EnumRenderOrder.AfterComponent:r.EnumRenderOrder.Component,o.push(n)})),e.addToPickingNodeMap(t,o)}}))}updatePickingMeshesState(e,t,i){if(this.pickingNodeMap)for(var n=e.selectedMaterial,a=this.manager.manager,s=this.pickingNodeMap,o=0,l=t.length;o<l;o++){var d=t[o];if(a.isPickableNode(d)){var h=a.getMeshManager().getNodeIdxMapByUserId(d);if(h){var c=Object.keys(h);a.getMeshManager().traverseActiveMeshMap(c,(function(e,t){if(s[e])for(var i=h[e],a=s[e],o=0,l=a.length;o<l;o++){var d=a[o];d.material=n,d.visible=!0;for(var c=d.geometry,u=c.getAttribute("vState").array,p=0,m=i.length;p<m;p++)u[i[p]]=r.EnumInstanceState.NONE;c.getAttribute("vState").needsUpdate=!0}}))}}}}resetPickingMeshesState(){if(this.pickingNodeMap)for(var e=this.pickingNodeMap,t=Object.keys(e),i=0,n=t.length;i<n;i++)for(var a=e[t[i]],s=0,o=a.length;s<o;s++)a[s].visible=!1,a[s].geometry.getAttribute("vState").array.fill(r.EnumInstanceState.HIDDEN),a[s].geometry.getAttribute("vState").needsUpdate=!0}updatePickingMeshes(e,t,i){return this.generatePickingMeshes(),this.resetPickingMeshesState(),this.updatePickingMeshesState(e,t,i),this.getPickingNodeGroup()}}r.PickingIncrementInstancedWireFrameGenerator=e}(),function(){class e extends r.PickingNodeGenerator{constructor(e){super(e),this.nodeGroupName="PickingExternalMeshGroup",this.pickingEffecter=this.manager.getModelManager().viewer.rendererManager.getPickingEffecter()}destroy(){this.pickingEffecter=null,super.destroy()}_disposeGeometryByNode(e){e.traverseVisible((function(t){t!==e&&(t.isMesh||t.isLine)&&(t.material=null,t.geometry.dispose())}))}disposePickingNodeById(e){for(var t=this.pickingNodeMap[e],i=0,r=t.length;i<r;i++)this._disposeGeometryByNode(t[i]),t[i]=null}updatePickingMeshes(e,t,i){if(this.pickingNodeMap){for(var r=Object.keys(this.pickingNodeMap),n=0,a=r.length;n<a;n++){var s,o,l=r[n],d=this.pickingNodeMap[l];if(i[l]&&this.manager.isPickableNode({userId:l,name:l}))for(s=0,o=d.length;s<o;s++)d[s].visible=!0;else for(s=0,o=d.length;s<o;s++)d[s].visible=!1}return this.getPickingNodeGroup()}}addNode(e,t){this.addToPickingNodeMap(e,t)}removeNodeById(e){this.removeFromPickingNodeMap(e)}clearNodes(){this.clearData()}addToPickingNodeMap(e,t){for(var i=[],n=!r.GlobalData.BatchMergeEnabled,a=0,s=t.length;a<s;a++){var o=this._createPickingNodeBy(t[a],n);if(o)if(Array.isArray(o))for(var l=0,d=o.length;l<d;l++)o[l].name=e,i.push(o[l]),t[a]._oriMatrix&&(o[l]._oriMatrix=(new THREE.Matrix4).compose(o[l].position,o[l].quaternion,o[l].scale));else o.name=e,i.push(o),t[a]._oriMatrix&&(o._oriMatrix=(new THREE.Matrix4).compose(o.position,o.quaternion,o.scale))}this.pickingNodeMap||(this.pickingNodeMap={}),this.pickingNodeMap[e]=i,this.addToPickingNodeGroup(i)}_createPickingNodeBy(e,t){var i=this,n={},a={};if("Object3D"===e.type||e instanceof THREE.Group||e instanceof r.ObjectGroup){var s,o,l,d=new THREE.Group;d.copy(e,!1),e.animations&&(d.animations=e.animations),e.traverseVisible((function(s){if(s!==e){var o=null;if("Object3D"===s.type||s instanceof THREE.Group||s instanceof r.ObjectGroup||s instanceof THREE.Bone)(o=s instanceof THREE.Bone?new THREE.Bone:new THREE.Group).copy(s,!1),n[s.uuid]={destination:o,source:s};else{if(!s.isMesh&&!s.isLine)return;(o=i._createPickingMeshesBy(s,t))&&(a[s.uuid]={destination:o,source:s})}o=null}}));var h=Object.keys(n);for(s=0,o=h.length;s<o;s++){var c=n[h[s]];c.source.parent!==e?(l=c.source.parent.uuid,n[l]&&n[l].destination.add(c.destination)):d.add(c.destination)}var u=Object.keys(a);for(s=0,o=u.length;s<o;s++){var p,m,f=a[u[s]];if(f.source.parent===e)if(Array.isArray(f.destination))for(p=0,m=f.destination.length;p<m;p++)d.add(f.destination[p]);else d.add(f.destination);else if(l=f.source.parent.uuid,Array.isArray(f.destination))for(p=0,m=f.destination.length;p<m;p++)n[l].destination.add(f.destination[p]);else n[l].destination.add(f.destination)}return d}return e.isMesh||e.isLine?i._createPickingMeshesBy(e,t):null}_createLineMeshBy(e,t,i){var n,a,s=this.pickingEffecter;if(r.GlobalData.PickingLineWidthEnabled){n=this.reserveMaterial?e.material:s.selectedLineMaterial;var o=new THREE.LineSegmentsGeometry;e.isLineSegments?o.fromLineSegments(e):e.isLineLoop?o.fromLineLoop(e):o.fromLine(e),a=new THREE.LineSegments2(o,n),r.GeomUtil.copyMeshProperties(a,e),a.renderOrder=i?r.EnumRenderOrder.AfterComponent:r.EnumRenderOrder.Component}else n=s.selectedMaterial,a=e.isLineSegments?new THREE.LineSegments(t,n):e.isLineLoop?new THREE.LineLoop(t,n):new THREE.Line(t,n),r.GeomUtil.copyMeshProperties(a,e),a.renderOrder=i?r.EnumRenderOrder.AfterComponent:r.EnumRenderOrder.Component;return a}_createMeshBy(e,t,i){var n=this.reserveMaterial||e._originMaterial&&e._originMaterial instanceof r.MeshLineMaterial?e._originMaterial:this.pickingEffecter.selectedMaterial,a=new THREE.Mesh(t,n);return r.GeomUtil.copyMeshProperties(a,e),a.renderOrder=i?r.EnumRenderOrder.AfterComponent:r.EnumRenderOrder.Component,a._originMaterial||e._originMaterial||(a._originMaterial=e.material),a}_createSkinnedMeshBy(e,t,i){var n=this.reserveMaterial?e._originMaterial:this.pickingEffecter.skinningSelectedMaterial,a=new THREE.SkinnedMesh(t,n);return r.GeomUtil.copyMeshProperties(a,e),a.renderOrder=i?r.EnumRenderOrder.AfterComponent:r.EnumRenderOrder.Component,a.bindMatrix.copy(e.bindMatrix),a.bindMatrixInverse.copy(e.bindMatrixInverse),a.bindMode=e.bindMode,a.userData=e.userData,a.skeleton=e.skeleton,a._originMaterial||e._originMaterial||(a._originMaterial=e.material),a}_createSkinnedWireFrameBy(e,t,i){if(!t.index)return null;var n=this.pickingEffecter.skinningWireframeMaterial,a=r.BuildEdge(t.attributes.position.array,t.index.array),s=new THREE.BufferGeometry;s.setIndex(new THREE.Uint32BufferAttribute(a,1)),s.setAttribute("position",t.getAttribute("position")),s.setAttribute("skinIndex",t.getAttribute("skinIndex")),s.setAttribute("skinWeight",t.getAttribute("skinWeight"));var o=new r.SkinnedLineEx(s,n);return r.GeomUtil.copyMeshProperties(o,e),o.bindMatrix.copy(e.bindMatrix),o.bindMatrixInverse.copy(e.bindMatrixInverse),o.bindMode=e.bindMode,o.userData=e.userData,o.skeleton=e.skeleton,o.renderOrder=i?r.EnumRenderOrder.Component:r.EnumRenderOrder.AfterComponent,o}_createWireFrameBy(e,t,i){if(!t.index||t.getAttribute("previous"))return null;var n=this.pickingEffecter.wireframeMaterial,a=r.BuildEdge(t.attributes.position.array,t.index.array),s=new THREE.BufferGeometry;s.setIndex(new THREE.Uint32BufferAttribute(a,1)),s.setAttribute("position",t.getAttribute("position"));var o=new THREE.LineSegments(s,n);return r.GeomUtil.copyMeshProperties(o,e),o.renderOrder=i?r.EnumRenderOrder.Component:r.EnumRenderOrder.AfterComponent,o}_createPickingMeshesBy(e,t){var i,n,a=r.GeomUtil.createBufferGeometryWithPosAndSkin(e.geometry,this.reserveMaterial);return a?e.isLineSegments?this._createLineMeshBy(e,a,t):(e.isSkinnedMesh?(i=this._createSkinnedMeshBy(e,a,t),n=this._createSkinnedWireFrameBy(e,a,t)):(i=this._createMeshBy(e,a,t),n=this._createWireFrameBy(e,a,t)),n?[i,n]:i):null}_hasObjectId(e){return!(!this.pickingNodeMap||!this.pickingNodeMap[e])}setAccumulateTransform(e,t,i,r){if(this._hasObjectId(e))for(var n=this.pickingNodeMap[e],a=0,s=n.length;a<s;a++)this.manager.setAccumulateTransformForMesh(n[a],t,i,r)}setTransform(e,t,i,r,n){if(this._hasObjectId(e))for(var a=this.pickingNodeMap[e],s=0,o=a.length;s<o;s++)this.manager.setTransformForMesh(a[s],t,i,r,n)}rotateOnBasePoint(e,t,i,r){if(this._hasObjectId(e))for(var n=this.pickingNodeMap[e],a=0,s=n.length;a<s;a++){let e=n[a],s=e.quaternion.clone().clone().invert(),o=e.position.clone(),l=(new THREE.Quaternion).setFromAxisAngle(i,r);e.quaternion.multiply(l);let d=t.clone().sub(o).applyQuaternion(s).applyQuaternion(e.quaternion);e.position.sub(d).add(t.clone().sub(o)),e.updateMatrixWorld()}}scaleOnBasePoint(e,t,i){if(this._hasObjectId(e))for(var r=this.pickingNodeMap[e],n=0,a=r.length;n<a;n++){let e=r[n];e.scale.multiply(i);let a=i.clone().sub(new THREE.Vector3(1,1,1)),s=e.quaternion.clone(),o=s.clone().invert(),l=e.position.clone(),d=t.clone().sub(l).applyQuaternion(o).multiply(a).applyQuaternion(s);e.position.sub(d),e.updateMatrixWorld()}}applyTransform(e,t,i,r){if(this._hasObjectId(e)){var n=this.manager.getTransformMatrix(t,i,r);this.applyTransformMatrix(e,n)}}applyTransformMatrix(e,t,i){if(this._hasObjectId(e))for(var r=this.pickingNodeMap[e],n=0,a=r.length;n<a;n++)this.manager.updateMatrixWorldForMesh(r[n],t,i)}}r.PickingExternalMeshGenerator=e}(),function(){class e extends r.PickingNodeGenerator{constructor(e){super(e),this.nodeGroupName="PickingSegmentMeshGroup",this.pickingEffecter=this.manager.viewer.rendererManager.getPickingEffecter()}destroy(){this.pickingEffecter=null,super.destroy()}_createPickingMeshBy(e,t){var i=this.pickingEffecter.selectedMaterial,n=e.geometry,a=new THREE.BufferGeometry;a.setAttribute("position",n.getAttribute("position")),a.setIndex(n.getIndex());var s=new(e.isLineSegments?THREE.LineSegments:THREE.Mesh)(a,i);return r.GeomUtil.copyMeshProperties(s,e),s.renderOrder=t?r.EnumRenderOrder.AfterComponent:r.EnumRenderOrder.Component,s}_createPickingWireFrameBy(e,t){if(e.isLineSegments)return null;var i=this.pickingEffecter.wireframeMaterial,n=e.geometry,a=r.BuildEdge(n.attributes.position.array,n.index.array),s=new THREE.BufferGeometry;s.setAttribute("position",n.getAttribute("position")),s.setIndex(new THREE.Uint32BufferAttribute(a,1));var o=new THREE.LineSegments(s,i);return r.GeomUtil.copyMeshProperties(o,e),o.renderOrder=t?r.EnumRenderOrder.Component:r.EnumRenderOrder.AfterComponent,o}disposePickingNodeById(e){for(var t=Object.keys(this.pickingNodeMap[e]),i=0,r=t.length;i<r;i++)for(var n=this.pickingNodeMap[e][t[i]],a=0,s=n.length;a<s;a++)n[a].material=null,n[a].geometry.dispose(),n[a]=null}removeFormPickingNodeGroup(e){if(this.pickingNodeGroup)for(var t=Object.keys(this.pickingNodeMap[e]),i=0,r=t.length;i<r;i++)for(var n=0,a=this.pickingNodeMap[e][t[i]].length;n<a;n++)this.pickingNodeGroup.remove(nodes[n])}addToPickingNodeMap(e,t,i){this.pickingNodeMap||(this.pickingNodeMap={}),this.pickingNodeMap[e]||(this.pickingNodeMap[e]={}),this.pickingNodeMap[e][t]=i,this.addToPickingNodeGroup(i)}generatePickingMeshes(e){var t=this,i=this.manager,n=!r.GlobalData.BatchMergeEnabled;i.traverseMeshNodeMapByUserIds(e,(function(e,i,r){var a=r.userId;if(!t._isExistNode(a,i)){for(var s=[],o=0,l=e.length;o<l;o++){var d=e[o],h=t._createPickingMeshBy(d,n);s.push(h);var c=t._createPickingWireFrameBy(d,n);c&&s.push(c)}t.addToPickingNodeMap(a,i,s)}}))}_isExistNode(e,t){return!!(this.pickingNodeMap&&this.pickingNodeMap[e]&&this.pickingNodeMap[e][t])}updatePickingMeshesState(e,t,i){if(this.pickingNodeMap){e.selectedMaterial;for(var r=this.pickingNodeMap,n=this.manager,a=0,s=t.length;a<s;a++){var o=t[a];if(r[o]){var l=n.getNodeIdsByUserId(o);if(l&&l.length)for(var d=0,h=l.length;d<h;d++){var c=l[d],u=n.getNodeInfoByNodeId(c);if(n.isPickableNode(u)){var p=r[o][c];if(p)for(var m=0,f=p.length;m<f;m++)p[m].visible=!0}}}}}}resetPickingMeshesState(){if(this.pickingNodeMap)for(var e=this.pickingNodeMap,t=Object.keys(e),i=0,r=t.length;i<r;i++)for(var n=t[i],a=Object.keys(e[n]),s=0,o=a.length;s<o;s++)for(var l=e[n][a[s]],d=0,h=l.length;d<h;d++)l[d].visible=!1}updatePickingMeshes(e,t,i){return this.generatePickingMeshes(t),this.resetPickingMeshesState(),this.updatePickingMeshesState(e,t,i),this.getPickingNodeGroup()}}r.PickingSegmentMeshGenerator=e}();var U,G,z=z||{};z.brdf_vs=["varying vec2 vUV;","void main() {","\tvUV = uv;","\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);","}"].join("\n"),z.brdf_fs=["varying vec2 vUV;","uniform sampler2D HammersleyTable;","const float PI = 3.14159265358979;","float GGX(float NdotV, float alpha)","{","\tfloat alpha2 = pow(alpha, 2.0);","\treturn 2.0 * NdotV / (NdotV + sqrt(alpha2 + (1.0 - alpha2) * NdotV * NdotV));","}","float G_Smith(float NdotV, float NdotL, float roughness)","{","\tfloat alpha = pow(roughness, 2.0);","\treturn GGX(NdotV, alpha) * GGX(NdotL, alpha);","}","vec3 ImportanceSampleGGX(vec2 Xi, vec3 N, float roughness)","{","\tfloat a = roughness * roughness;","\tfloat Phi = 2.0 * PI * Xi.x; ","\tfloat CosTheta = sqrt((1.0 - Xi.y) / (1.0 + (a * a - 1.0) * Xi.y)); ","\tfloat SinTheta = sqrt(1.0 - CosTheta * CosTheta);","\tvec3 H;","\tH.x = SinTheta * cos(Phi); ","\tH.y = SinTheta * sin(Phi); ","\tH.z = CosTheta;","\tvec3 UpVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0); ","\tvec3 TangentX = normalize(cross(UpVector, N)); ","\tvec3 TangentY = cross(N, TangentX);","\treturn normalize(TangentX * H.x + TangentY * H.y + N * H.z);","}","vec2 IntegrateBRDF(float NdotV, float roughness)","{","\tvec3 N = vec3(0.0, 0.0, 1.0);","\tvec3 V = vec3(sqrt(1.0 - NdotV * NdotV), 0.0, NdotV);","\tvec2 result = vec2(0.0, 0.0);","\tconst int NumSamples = 1024;","\tfor (int i = 0; i < NumSamples; i++)","\t{","\t\tfloat u = float(i) / float(NumSamples);","\t\tvec2 Xi = vec2(u, texture2D(HammersleyTable, vec2(u)).r);","\t\tvec3 H = ImportanceSampleGGX(Xi, N, roughness);","\t\tvec3 L = 2.0 * dot(V, H) * H - V;","\t\tfloat NdotL = saturate(L.z);","\t\tfloat NdotH = saturate(H.z);","\t\tfloat VdotH = saturate(dot(V, H));","\t\tfloat NdotV = saturate(dot(N, V));","\t\tif (NdotL > 0.0)","\t\t{","\t\t\tfloat G = G_Smith(NdotV, NdotL, roughness);","\t\t\tfloat G_Vis = G * VdotH / (NdotH * NdotV); ","\t\t\tfloat F = pow(1.0 - VdotH, 5.0);","\t\t\tresult.x += (1.0 - F) * G_Vis;","\t\t\tresult.y += F * G_Vis;","\t\t}","\t}","\treturn result / float(NumSamples);","}","void main()","{","\tvec2 brdf = IntegrateBRDF(vUV.x, vUV.y);","\tgl_FragColor = vec4(brdf, 0.0, 1.0);","}"].join("\n"),z.BRDFMap=function(e,t){this.texture=null,this.resolution=t||512,this.brdfMaterial=new THREE.ShaderMaterial({vertexShader:z.brdf_vs,fragmentShader:z.brdf_fs,uniforms:{HammersleyTable:{value:e}},lights:!1}),this.quad=new THREE.Mesh(new THREE.PlaneBufferGeometry(window.innerWidth,window.innerHeight),this.brdfMaterial),this.quad.position.z=-100},z.BRDFMap.prototype.constructor=z.BRDFMap,z.BRDFMap.prototype.generateMap=function(e){var t=new THREE.Scene;t.add(this.quad);var i=new THREE.OrthographicCamera(window.innerWidth/-2,window.innerWidth/2,window.innerHeight/2,window.innerHeight/-2,-1e4,1e4);i.position.z=100;var r=new THREE.WebGLRenderTarget(this.resolution,this.resolution,{minFilter:THREE.LinearFilter,magFilter:THREE.NearestFilter,format:THREE.RGBFormat});e.render(t,i,r,!0),this.texture=r.texture},THREE.HDRCubeTextureLoader=function(e){THREE.Loader.call(this,e),this.hdrLoader=new THREE.RGBELoader,this.type=THREE.UnsignedByteType},THREE.HDRCubeTextureLoader.prototype=Object.assign(Object.create(THREE.Loader.prototype),{constructor:THREE.HDRCubeTextureLoader,load:function(e,t,i,r){Array.isArray(e)||(this.setDataType(e),e=t,t=i,i=r,r=arguments[4]);var n=new THREE.CubeTexture;switch(n.type=this.type,n.type){case THREE.UnsignedByteType:n.encoding=THREE.RGBEEncoding,n.format=THREE.RGBAFormat,n.minFilter=THREE.NearestFilter,n.magFilter=THREE.NearestFilter,n.generateMipmaps=!1;break;case THREE.FloatType:case THREE.HalfFloatType:n.encoding=THREE.LinearEncoding,n.format=THREE.RGBFormat,n.minFilter=THREE.LinearFilter,n.magFilter=THREE.LinearFilter,n.generateMipmaps=!1}var a=this,s=0;function o(t,i,r,o){new THREE.FileLoader(a.manager).setPath(a.path).setResponseType("arraybuffer").setWithCredentials(a.withCredentials).load(e[t],(function(e){s++;var r=a.hdrLoader.parse(e);if(r){if(void 0!==r.data){var o=new THREE.DataTexture(r.data,r.width,r.height);o.type=n.type,o.encoding=n.encoding,o.format=n.format,o.minFilter=n.minFilter,o.magFilter=n.magFilter,o.generateMipmaps=n.generateMipmaps,n.images[t]=o}6===s&&(n.needsUpdate=!0,i&&i(n))}}),r,o)}for(var l=0;l<e.length;l++)o(l,t,i,r);return n},setDataType:function(e){return this.type=e,this.hdrLoader.setDataType(e),this}}),z.HDRTextureLoader=function(e){this.manager=void 0!==e?e:THREE.DefaultLoadingManager,this.hdrLoader=new THREE.RGBELoader},z.HDRTextureLoader.prototype.load=function(e,t,i,r){var n=new THREE.DataTexture;return this.hdrLoader.load(e,(function(e,i){e.flipY=!0,e.type=THREE.FloatType,e.format=THREE.RGBFormat,e.minFilter=THREE.LinearFilter,e.magFilter=THREE.LinearFilter;for(var r=function(e,t,i,r){var n=e[t+3],a=Math.pow(2,n-128)/256;i[r+0]=e[t+0]*a,i[r+1]=e[t+1]*a,i[r+2]=e[t+2]*a},a=e.image.width*e.image.height*3,s=new Float32Array(a),o=0;o<a;o++)r(e.image.data,4*o,s,3*o);e.image.data=s,n=e,t&&t(n)}),i,r),n},z.equirectangular_vs=["varying vec3 pos;","void main() {","\tpos = vec3(modelMatrix * vec4(position, 1.0));","\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);","}"].join("\n"),z.equirectangular_fs=["varying vec3 pos;","uniform sampler2D map;","const float PI = 3.14159265358979;","const float INV_PI = 1.0 / PI;","vec2 sampleSphericalMap(vec3 v)","{","\tvec2 uv = vec2(atan(v.z, v.x), asin(v.y));","\tuv *= vec2(INV_PI * 0.5, INV_PI);","\tuv += 0.5;","\treturn uv;","}","void main() {","\tvec2 uv = sampleSphericalMap(normalize(pos));","\tvec4 color = texture2D(map, uv);","\tgl_FragColor = vec4(color.rgb, 1.0);","}"].join("\n"),z.EquirectangularMaterial=function(e){THREE.ShaderMaterial.call(this),this.type="EquirectangularMaterial",this.map=null,this.lights=!1,this.side=THREE.BackSide,this.defines={},this.uniforms=THREE.UniformsUtils.merge([{map:{value:null}}]),this.vertexShader=z.equirectangular_vs,this.fragmentShader=z.equirectangular_fs,this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},void 0!==e&&(void 0!==e.attributes&&console.error("IBLMaterial: attributes should now be defined in THREE.BufferGeometry instead."),this.setValues(e)),this.refreshUniforms()},z.EquirectangularMaterial.prototype=Object.create(THREE.ShaderMaterial.prototype),z.EquirectangularMaterial.prototype.constructor=z.EquirectangularMaterial,z.EquirectangularMaterial.prototype.isShaderMaterial=!0,z.EquirectangularMaterial.prototype.copy=function(e){return THREE.ShaderMaterial.prototype.copy.call(this,e),this.map=e.map,this},z.EquirectangularMaterial.prototype.refreshUniforms=function(){this.uniforms.map.value=this.map},z.HDRToCubeMap=function(e,t,i,r){var n=new THREE.CubeCamera(.1,10,r||512);if(i){var a={type:THREE.FloatType,format:THREE.RGBFormat,magFilter:THREE.LinearFilter,minFilter:THREE.LinearFilter};n.renderTarget=new THREE.WebGLRenderTargetCube(r||512,r||512,a)}var s=new THREE.Scene,o=new EquirectangularMaterial({map:e}),l=new THREE.Mesh(new THREE.BoxBufferGeometry(2,2,2),o);return s.add(l),n.updateCubeMap(t,s),n.renderTarget.texture},z.IBLMaps=function(e,t,i){this.environmentMap=null,this.irradianceMap=null,this.prefilterMap=null,this.brdfMap=null,e&&this.loadMaps(e,t,void 0,i)},z.IBLMaps.prototype.constructor=z.IBLMaps,z.IBLMaps.prototype.loadMaps=function(e,t,i,r){t?this.loadHDRMaps(e,i,r):this.loadJPGMaps(e,i,r)},z.IBLMaps.prototype.loadHDRMaps=function(e,t,i){for(var r=this,n=["posx.hdr","negx.hdr","posy.hdr","negy.hdr","posz.hdr","negz.hdr"],a=[],s=0;s<6;++s)a.push(e+"/EnvMap_"+n[s]);var o=new THREE.HDRCubeTextureLoader;o.load(THREE.FloatType,a,(function(t){r.environmentMap=t;for(var a=[],s=0;s<6;++s)a.push(e+"/IrradianceMap_"+n[s]);o.load(THREE.FloatType,a,(function(t){r.irradianceMap=t;for(var a=[],s=0;s<6;++s)a.push(e+"/PrefilterMap_"+n[s]);o.load(THREE.FloatType,a,(function(t){r.prefilterMap=t;var n=new z.HDRTextureLoader,a=e+"/brdf.hdr";n.load(a,(function(e){r.brdfMap=e,i(r,!0)}))}))}))}))},z.IBLMaps.prototype.loadJPGMaps=function(e,t,i){const r=new THREE.CubeTextureLoader;r.setCrossOrigin("anonymous"),r.load(e,(e=>{this.environmentMap=e,i(this,!1)}))},z.IBLMaterial=function(e){THREE.MeshStandardMaterial.call(this),this.type="IBLMaterial",this.IBLEnabled=!0,this.debug=0,this.iblFactor=1,this.gamma=2.2,this.color=new THREE.Color(16777215),this.roughness=1,this.metalness=0,this.originRoughness=1,this.originMetalness=0,this._referenceCount=1,this._imageByteSize=0,this.opacity=1,this.aoMap=null,this.IBLMaps=null,this.shift=.5,this.A=.27,this.B=.29,this.C=.052,this.D=.2,this.E=0,this.F=.18,this.scale=.897105;var t=(new THREE.Color).setHex(3330982),i=[t.r,t.g,t.b,1];this.colorState=r.EnumShaderColorState.NONE,this.blinkColor=(new THREE.Vector4).fromArray(i),this.blinkCoefficient=0,this.receiveIBL=!0,this.viewshedCount=-1,this.viewshedContents=[],this.viewshedDepthMaps=[],this.videoCastCount=-1,this.videoCastContents=[],this.videoCastDepthMaps=[],this.videoCastProjectorMaps=[],this.heightLimitSampler=null,this.heightColorSampler=null,this.heightLimitOrthoMatrix=new THREE.Matrix4,this.heightLimit=0,this.useHeightLimit=!1,this.emissive=new THREE.Color(0,0,0),this.useCompressedNormal=!1,this.useCompressedColor=!1,this.useCSM=r.GlobalData.EnableCSM,this.useAlphaMap=!1,this.useCompressedUv=!1,this.uvCenter=new THREE.Vector2(0,0),this.uvHalfExtent=new THREE.Vector2(0,0),this.useClampToBorder=!1,this.defines={},this.uniforms=THREE.UniformsUtils.merge([THREE.ShaderLib.standard.uniforms,{IBLEnabled:{value:!0},debug:{value:0},iblFactor:{value:1},gamma:{value:2.2},albedo:{value:new THREE.Color(16777215)},aoMap:{value:null},irradianceMap:{value:null},prefilterMap:{value:null},brdfMap:{value:null},shift:{value:.18},A:{value:.27},B:{value:.29},C:{value:.052},D:{value:.2},E:{value:0},F:{value:.18},scale:{value:.897105},colorState:{value:0},blinkColor:{value:(new THREE.Vector4).fromArray(i)},blinkCoefficient:{value:0}},{viewshedCount:{value:-1},viewshedContents:{value:[]},viewshedDepthMaps:{value:[]}},{videoCastCount:{value:-1},videoCastContents:{value:[]},videoCastDepthMaps:{value:[]},videoCastProjectorMaps:{value:[]}},{heightLimitSampler:{value:null},heightColorSampler:{value:null},heightLimitOrthoMatrix:{value:new THREE.Matrix4},heightLimit:{value:0},useHeightLimit:{value:!1}},{csmCascades:{value:null}}]),this.lights=!0,this.vertexShader=z.IBLVertexShader,this.fragmentShader=z.IBLFragmentShader,this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},void 0!==e&&(void 0!==e.attributes&&console.error("IBLMaterial: attributes should now be defined in THREE.BufferGeometry instead."),this.setValues(e)),this.useCSM?this.defines.USE_CSM="":delete this.defines.USE_CSM,this.useAlphaMap?this.defines.USE_ALPHAMAP="":delete this.defines.USE_ALPHAMAP},z.IBLMaterial.prototype=Object.create(THREE.MeshStandardMaterial.prototype),z.IBLMaterial.prototype.constructor=z.IBLMaterial,z.IBLMaterial.prototype.setValues=function(e){if(void 0!==e)for(var t in e){var i=e[t];if(void 0!==i){var r=this[t];void 0!==r&&(r&&r.isColor?r.set(i):r&&r.isVector3&&i&&i.isVector3?r.copy(i):this[t]="overdraw"===t?Number(i):i)}else console.warn("THREE.Material: '"+t+"' parameter is undefined.")}},z.IBLMaterial.prototype.copy=function(e){return THREE.MeshStandardMaterial.prototype.copy.call(this,e),this.IBLEnabled=e.IBLEnabled,this.debug=e.debug,this.gamma=e.gamma,this.color.copy(e.color),this.aoMap=e.aoMap,this.IBLMaps=e.IBLMaps,this.shift=e.shift,this.A=e.A,this.B=e.B,this.C=e.C,this.D=e.D,this.E=e.E,this.F=e.F,this.scale=e.scale,this.colorState=e.colorState,this.blinkColor.copy(e.blinkColor),this.blinkCoefficient=e.blinkCoefficient,this.viewshedCount=e.viewshedCount,this.viewshedContents=e.viewshedContents,this.viewshedDepthMaps=e.viewshedDepthMaps,this.videoCastCount=e.videoCastCount,this.videoCastContents=e.videoCastContents,this.videoCastDepthMaps=e.videoCastDepthMaps,this.videoCastProjectorMaps=e.videoCastProjectorMaps,this.iblFactor=e.iblFactor,this.useCSM=e.useCSM,this.heightLimitSampler=e.heightLimitSampler,this.heightColorSampler=e.heightColorSampler,this.heightLimitOrthoMatrix=e.heightLimitOrthoMatrix,this.heightLimit=e.heightLimit,this.useHeightLimit=e.useHeightLimit,this},z.IBLMaterial.prototype.refreshUniforms=function(){this.uniforms.IBLEnabled.value=this.IBLEnabled,this.uniforms.debug.value=this.debug,this.uniforms.gamma.value=this.gamma,this.uniforms.iblFactor.value=this.iblFactor,this.uniforms.albedo.value.set(this.color),this.uniforms.aoMap.value=this.aoMap,this.IBLMaps&&(this.uniforms.irradianceMap.value=this.IBLMaps.irradianceMap,this.uniforms.prefilterMap.value=this.IBLMaps.prefilterMap,this.uniforms.brdfMap.value=this.IBLMaps.brdfMap),this.uniforms.shift.value=this.shift,this.uniforms.A.value=this.A,this.uniforms.B.value=this.B,this.uniforms.C.value=this.C,this.uniforms.D.value=this.D,this.uniforms.E.value=this.E,this.uniforms.F.value=this.F,this.uniforms.scale.value=this.scale,this.uniforms.viewshedCount.value=this.viewshedCount,this.uniforms.viewshedContents.value=this.viewshedContents,this.uniforms.viewshedDepthMaps.value=this.viewshedDepthMaps,this.uniforms.videoCastCount.value=this.videoCastCount,this.uniforms.videoCastContents.value=this.videoCastContents,this.uniforms.videoCastDepthMaps.value=this.videoCastDepthMaps,this.uniforms.videoCastProjectorMaps.value=this.videoCastProjectorMaps,this.viewshedCount>0?this.defines.VIEW_SHED_MODE="":delete this.defines.VIEW_SHED_MODE,this.videoCastCount>0?this.defines.VIDEO_CAST_MODE="":delete this.defines.VIDEO_CAST_MODE,this.useCSM?this.defines.USE_CSM="":delete this.defines.USE_CSM,this.useCompressedColor?this.defines.CCOLOR="":delete this.defines.CCOLOR,this.useCompressedNormal?this.defines.CNORMAL="":delete this.defines.CNORMAL,this.uniforms.blinkColor.value.copy(this.blinkColor),this.uniforms.blinkCoefficient.value=this.blinkCoefficient,this.uniforms.colorState.value=this.colorState,this.heightLimitSampler?this.defines.HEIGHT_LIMIT_READ="":delete this.defines.HEIGHT_LIMIT_READ,this.uniforms.heightLimitOrthoMatrix.value=this.heightLimitOrthoMatrix,this.uniforms.heightLimitSampler.value=this.heightLimitSampler,this.uniforms.heightColorSampler.value=this.heightColorSampler,this.uniforms.heightLimit.value=this.heightLimit,this.uniforms.useHeightLimit.value=this.useHeightLimit,this.useClampToBorder?this.defines.USE_CLAMP_TO_BORDER="":delete this.defines.USE_CLAMP_TO_BORDER,this.useCompressedUv?this.defines.USE_COMPRESS_UV="":delete this.defines.USE_COMPRESS_UV},z.IBLMaterial.prototype.setBlinkColor=function(e){this.blinkColor.fromArray(e.toArray()),this.uniforms.blinkColor.value.copy(this.blinkColor),this.uniforms.blinkCoefficient.value=this.blinkCoefficient,this.uniforms.colorState.value=r.EnumShaderColorState.BLINK},z.IBLMaterial.prototype.updateBlinkUniformValue=function(e,t,i){this.uniforms.colorState.value=e,this.uniforms.blinkColor.value.copy(t),this.uniforms.blinkCoefficient.value=i},z.IBLMaterial.prototype.resetBlinkUniformValue=function(){this.uniforms.colorState.value=this.colorState,this.uniforms.blinkColor.value.copy(this.blinkColor),this.uniforms.blinkCoefficient.value=this.blinkCoefficient},z.IBLProbe=function(e,t,i,r,n,a,s){this.environmentMap=e,this.hammersleyTable=null,this.irradianceMap=null,this.prefilterMap=null,this.brdfMap=null,this.hammersleyUrl=t,this.irradianceResolution=r||32,this.prefilterResolution=n||128,this.brdfResolution=a||512,this.maxMipLevel=s||1,this.isHDR=!1,this.isComputed=!1,this.onSuccess=i,this.loadHammersleyTable()},z.IBLProbe.prototype.constructor=z.IBLProbe,z.IBLProbe.prototype.loadHammersleyTable=function(){var e=this;(new THREE.TextureLoader).load(this.hammersleyUrl,(function(t){e.hammersleyTable=t,e.initMap(),e.onSuccess&&e.onSuccess()}))},z.IBLProbe.prototype.initMap=function(){this.irradianceMap=new z.IrradianceMap(this.environmentMap,this.irradianceResolution),this.prefilterMap=new z.PrefilterMap(this.environmentMap,this.hammersleyTable,this.prefilterResolution,this.maxMipLevel),this.brdfMap=new z.BRDFMap(this.hammersleyTable,this.brdfResolution)},z.IBLProbe.prototype.setEnvironmentMap=function(e){this.environmentMap=e,this.irradianceMap.irradianceMaterial.uniforms.environmentMap.value=this.environmentMap,this.prefilterMap.prefilterMaterial.uniforms.environmentMap.value=this.environmentMap},z.IBLProbe.prototype.computed=function(e){this.irradianceMap.generateMap(e,this.isHDR),this.prefilterMap.generateMap(e,this.isHDR),this.brdfMap.generateMap(e),this.isComputed=!0},z.IBLVertexShader=["uniform mat3 uvTransform; ","varying vec2 vUv;","varying vec3 Normal;","varying vec3 Pos;","varying vec3 mvPosition;","varying vec3 mvNormal;","varying vec3 vViewPosition;","#include <shadowmap_pars_vertex>","#include <view_shed_pars_vertex>","#include <video_cast_pars_vertex>","#include <common>","#include <logdepthbuf_pars_vertex>","#include <heightLimit_pars_vertex>","#include <uv2_pars_vertex>","#include <CompressNormal_vertex>","#include <CompressColor_vertex>","#include <color_pars_vertex>","#ifdef USE_INSTANCE"," attribute float vState;"," attribute float vState2;"," attribute float vClipping;"," varying float fClipping;"," varying float fState;"," attribute vec4 aColor;"," varying vec4 vaColor;"," attribute vec3 mcol0;"," attribute vec3 mcol1;"," attribute vec3 mcol2;"," attribute vec3 mcol3;"," #if defined(USE_MAP)||defined(USE_BUMPMAP) "," attribute vec2 muvCol0;"," attribute vec2 muvCol1;"," attribute vec2 muvCol2;"," #endif"," #if defined(USE_LIGHTMAP)"," attribute vec4 uv2OffsetRepeat;"," #endif","#endif","mat3 inverse_mat3(in mat3 m)","{"," float determinant ="," m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2])"," - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2])"," + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]);"," mat3 inverse;"," inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]);"," inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]);"," inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]);"," inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]);"," inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]);"," inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]);"," inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]);"," inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]);"," inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]);"," inverse /= determinant;"," return inverse;","}","void main()","{"," vec3 vertexNormal = normal;"," #ifdef CNORMAL"," vertexNormal = octDecode();"," #endif"," vUv = ( uvTransform * vec3( uv, 1 ) ).xy;"," Pos = vec3(modelMatrix * vec4(position, 1.0));"," Normal = normalize(mat3(modelMatrix) * vertexNormal);"," mvPosition = vec3(modelViewMatrix * vec4(position, 1.0));"," mvNormal = normalize(normalMatrix * vertexNormal);","#include <begin_vertex>","#include <beginnormal_vertex>","#include <defaultnormal_vertex>","#include <color_vertex>","#if (defined(USE_MAP)||defined(USE_BUMPMAP)) && defined(USE_INSTANCE) "," vUv = vec2(mat3(vec3(muvCol0, 0.0),"," vec3(muvCol1, 0.0),"," vec3(muvCol2, 1.0)) * vec3(uv, 1.0));","vUv = ( uvTransform * vec3( vUv, 1 ) ).xy;","#endif","#include <uv2_vertex>","#if defined(USE_LIGHTMAP) && defined(USE_INSTANCE) "," vUv2.x = uv2OffsetRepeat.x*vUv2.x/ 65535.0 + uv2OffsetRepeat.z ;"," vUv2.y = uv2OffsetRepeat.y*vUv2.y/ 65535.0 + uv2OffsetRepeat.w ;","#endif","#ifdef USE_INSTANCE"," vaColor = aColor;"," fClipping = vClipping;"," #ifdef INSTANCE_STATE_SECONDARY"," fState = vState2;"," #else"," fState = vState;"," #endif"," transformed = vec3(mat4(vec4(mcol0, 0.0),"," vec4(mcol1, 0.0),"," vec4(mcol2, 0.0),"," vec4(mcol3, 1.0)) * vec4(transformed, 1.0));"," #ifdef USE_INSTANCE_NORMAL"," mat3 normalMat = mat3(mcol0, mcol1, mcol2);"," normalMat = inverse_mat3(normalMat);"," normalMat = transposeMat3(normalMat);"," objectNormal = normalMat * vertexNormal;"," transformedNormal = normalMatrix * vertexNormal;"," #ifdef FLIP_SIDED"," transformedNormal = - transformedNormal;"," #endif"," transformedNormal = normalize( transformedNormal );"," #endif"," mvNormal = transformedNormal;"," Normal = normalize(mat3(modelMatrix) * objectNormal);"," Pos = vec3(modelMatrix * vec4(transformed, 1.0));","#endif","#ifdef CCOLOR","ocColor = decodeColor();","#endif","#include <project_vertex>","#include <heightLimit_vertex>","#include <worldpos_vertex>","#include <shadowmap_vertex>","#include <logdepthbuf_vertex>","vViewPosition = - mvPosition.xyz;","vec3 vsWorldPosition = Pos;","#include <view_shed_vertex>","#include <video_cast_vertex>","}"].join("\n"),z.varying_pars=["varying vec2 vUv;","varying vec3 Normal;","varying vec3 Pos;","varying vec3 mvPosition;","varying vec3 mvNormal;"].join("\n"),z.clipping_pars=["#if NUM_CLIPPING_PLANES > 0"," uniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];","#endif"].join("\n"),z.maps_pars=["#ifdef USE_MAP"," uniform sampler2D map;","#endif","#ifdef USE_NORMALMAP"," uniform sampler2D normalMap;"," uniform vec2 normalScale;","vec3 perturbNormal2Arb(vec3 pos, vec3 normal)","{"," vec3 q0 = vec3(dFdx(pos.x), dFdx(pos.y), dFdx(pos.z));"," vec3 q1 = vec3(dFdy(pos.x), dFdy(pos.y), dFdy(pos.z));"," vec2 st0 = dFdx(vUv.st);"," vec2 st1 = dFdy(vUv.st);"," vec3 S = normalize(q0 * st1.t - q1 * st0.t);"," vec3 T = normalize(-q0 * st1.s + q1 * st0.s);"," vec3 N = normalize(normal);"," vec3 mapN = texture2D(normalMap, vUv).xyz * 2.0 - 1.0;"," mapN.xy = normalScale * mapN.xy;"," mat3 tsn = mat3(S, T, N);"," return normalize(tsn * mapN);","}","#endif","#ifdef USE_ROUGHNESSMAP"," uniform sampler2D roughnessMap;","#endif","#ifdef USE_METALNESSMAP"," uniform sampler2D metalnessMap;","#endif","#ifdef USE_AOMAP"," uniform sampler2D aoMap;"," uniform float aoMapIntensity;","#endif"].join("\n"),z.iblMaps_pars=["uniform samplerCube irradianceMap;","uniform samplerCube prefilterMap;","uniform sampler2D brdfMap;"].join("\n"),z.lighting_pars=["#include <packing>","#include <common>","#include <shadowmap_pars_fragment>","#include <lights_pars_begin>","float punctualLightIntensityToIrradianceFactor(const in float lightDistance, const in float cutoffDistance, const in float decayExponent)","{"," if(decayExponent > 0.0)"," {"," float distanceFalloff = 1.0 / max(pow(abs(lightDistance), decayExponent), 0.01);"," float maxDistanceCutoffFactor = pow(abs(clamp(1.0 - pow(abs(lightDistance / cutoffDistance), 4.0), 0.0, 1.0)), 2.0);"," return distanceFalloff * maxDistanceCutoffFactor;"," }"," float distanceFalloff = 1.0 / max(pow(abs(lightDistance), 2.0), 0.01);"," return distanceFalloff;","}"].join("\n"),z.toneMap_pars=["uniform float shift;","uniform float A;","uniform float B;","uniform float C;","uniform float D;","uniform float E;","uniform float F;","uniform float scale;","vec3 toneMapCanonFilmic(vec3 color)","{"," color *= (1.0 / shift);"," return (((color * (A * color + C * B)) / (color * (A * color + B) + D * F))) * (1.0 / scale);","}"].join("\n"),z.Uniforms=[z.varying_pars,z.clipping_pars,"uniform bool IBLEnabled;","uniform int debug;","uniform float gamma;","uniform vec3 albedo;","uniform float metalness;","uniform float roughness;","uniform float opacity;","uniform float iblFactor;","uniform vec4 blinkColor;","uniform float blinkCoefficient;","uniform float colorState;",z.maps_pars,z.iblMaps_pars,z.lighting_pars,z.toneMap_pars].join("\n"),z.IBLFragmentShader=[z.Uniforms,"#include <uv2_pars_fragment>","#include <lightmap_pars_fragment>","vec3 hdrDecode(in vec4 rgbm) {","const float rgbmScale = 2.82842712;","vec3 r = rgbm.rgb * (rgbmScale * (1.0 - rgbm.a));","return r * r;","}","#include <heightLimit_pars_fragment>","#include <bumpmap_pars_fragment>","#include <view_shed_pars_fragment>","#include <video_cast_pars_fragment>","#include <fog_pars_fragment>","#include <logdepthbuf_pars_fragment>","varying vec3 vViewPosition;","#include <csm_fragment>","#include <color_pars_fragment>","float D_GGX(float NdotH, float roughness)","{"," float alpha = pow(roughness, 2.0);"," float alpha2 = pow(alpha, 2.0);"," return alpha2 / (PI * pow(abs(NdotH * NdotH * (alpha2 - 1.0) + 1.0), 2.0));","}","float GGX_Schlick(float NdotV, float roughness)","{"," float k = (roughness + 1.0) * 0.125;"," return NdotV / (NdotV * (1.0 - k) + k);","}","float G_Smith(float NdotV, float NdotL, float roughness)","{"," return GGX_Schlick(NdotV, roughness) * GGX_Schlick(NdotL, roughness);","}","vec3 F_Schlick(float HdotV, vec3 F0)","{"," return F0 + (vec3(1.0) - F0) * pow((1.0 - HdotV), 5.0);","}","vec3 F_SchlickRoughness(float NdotV, vec3 F0, float roughness)","{"," return F0 + (max(vec3(1.0 - roughness), F0) - F0) * pow(1.0 - NdotV, 5.0);","}","#ifdef CCOLOR"," varying vec4 ocColor;","#endif","vec3 postProcessing(vec3 color, bool toneMap)","{"," vec3 result = toneMap ? toneMapCanonFilmic(color) : color;"," result = pow(result, vec3(1.0 / gamma));"," return result;","}","#ifdef USE_INSTANCE"," varying vec4 vaColor;"," varying float fState;"," varying float fClipping;","#endif","bool floatEqual(in float x, in float y) {"," return (x >= y - 0.01) && (x <= y + 0.01);","}","bool floatNotEqual(in float x, in float y) {"," return (x <= y - 0.01) || (x >= y + 0.01);","}","void main()","{","#if NUM_CLIPPING_PLANES > 0"," for (int i = 0; i < UNION_CLIPPING_PLANES; ++ i)"," {"," vec4 plane = clippingPlanes[ i ];"," if (dot(vViewPosition, plane.xyz) > plane.w) discard;"," }"," #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES"," bool clipped = true;"," for (int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; ++ i)"," {"," vec4 plane = clippingPlanes[ i ];"," clipped = (dot(vViewPosition, plane.xyz) > plane.w) && clipped;"," }"," if (clipped) discard;"," #endif","#endif","vec4 diffuseColor = vec4(albedo.rgb, opacity) ;","#include <vertex_color_frag>","vec3 baseColor = pow(diffuseColor.rgb, vec3(gamma));","#ifdef CCOLOR"," baseColor = pow(ocColor.rgb, vec3(gamma));","#endif","float realOpacity = opacity;","#ifdef USE_INSTANCE"," if (floatEqual(fState, -1.0)) "," discard;"," if (floatNotEqual(fState, 0.0)){"," baseColor = pow(vaColor.rgb, vec3(gamma));"," realOpacity = vaColor.a; }","#endif","vec3 keepColor = baseColor;","#ifdef USE_MAP"," baseColor = pow(texture2D(map, vUv).rgb, vec3(gamma));"," #ifdef USE_CLAMP_TO_BORDER"," baseColor = (vUv.x > 1.0 ||vUv.x < 0.0 || vUv.y < 0.0|| vUv.y > 1.0) ?keepColor:pow(texture2D(map, vUv).rgb, vec3(gamma));"," #endif"," #ifdef USE_INSTANCE"," if (floatNotEqual(fState, 0.0)) "," realOpacity = vaColor.a;"," if (floatEqual(fState, 3.0))"," baseColor = keepColor;"," #endif","#endif","#ifdef USE_ALPHAMAP"," realOpacity *= texture2D( map, vUv ).a;","#endif","#ifdef DOUBLE_SIDED"," float flipNormal = float(gl_FrontFacing) * 2.0 - 1.0;","#else"," float flipNormal = 1.0;","#endif"," vec3 normal = Normal * flipNormal;"," vec3 vNormal = mvNormal * flipNormal;","#ifdef USE_NORMALMAP"," normal = perturbNormal2Arb(Pos, normal);"," vNormal = perturbNormal2Arb(mvPosition, vNormal);","#endif","#ifdef USE_BUMPMAP"," normal = perturbNormalArb( mvPosition, normal, dHdxy_fwd(), 1.0);","#endif"," float roughnessFactor = roughness;","#ifdef USE_ROUGHNESSMAP"," roughnessFactor = texture2D(roughnessMap, vUv).r;","#endif"," float metalnessFactor = metalness;","#ifdef USE_METALNESSMAP"," metalnessFactor = texture2D(metalnessMap, vUv).r;","#endif","#ifdef USE_INSTANCE"," if (floatEqual(fState, 3.0)){"," roughnessFactor = 1.0;"," metalnessFactor = 0.0;"," }","#endif"," float aoFactor = 1.0;","#ifdef USE_AOMAP"," aoFactor = texture2D(aoMap, vUv).r;","#endif"," vec3 N = normal;"," vec3 V = normalize(cameraPosition - Pos);"," vec3 R = reflect(-V, N);"," vec3 F0 = vec3(0.04);"," F0 = mix(F0, baseColor, metalnessFactor);"," vec3 totalLightColor = vec3(0.0);"," vec3 viewVector = normalize(-mvPosition);"," vec3 normalVector = normalize(vNormal);"," float NdotV = max(dot(normalVector, viewVector), 0.0);"," totalLightColor += ambientLightColor * baseColor / PI;","#if NUM_DIR_LIGHTS > 0"," vec3 dirColor = vec3(0.0);","\n #if defined(USE_CSM)\n DirectionalLight directionalLight;\n float shadowValue = calcShadowFactor(normalVector);\n for (int i = 4; i < NUM_DIR_LIGHTS; ++i)\n {\n directionalLight = directionalLights[i];\n vec3 dirVector = normalize(directionalLight.direction);\n vec3 halfVector = normalize(dirVector + viewVector);\n \n float NdotL = max(dot(normalVector, dirVector), 0.0);\n float NdotH = max(dot(normalVector, halfVector), 0.0);\n float HdotV = max(dot(halfVector, viewVector), 0.0);\n \n vec3 F = F_Schlick(HdotV, F0);\n vec3 kS = F;\n vec3 kD = 1.0 - kS;\n kD *= 1.0 - metalnessFactor;\n \n float D = D_GGX(NdotH, roughnessFactor);\n float G = G_Smith(NdotV, NdotL, roughnessFactor);\n vec3 specular = D * G * F / (4.0 * NdotV * NdotL + 0.001);\n \n #ifdef USE_SHADOWMAP\n if(realOpacity > 0.9)\n directionalLight.color *= shadowValue;\n #endif\n \n \n dirColor += (kD * baseColor / PI + specular) * directionalLight.color * NdotL;\n }\n #else\n #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n DirectionalLightShadow directionalLightShadow;\n #endif\n\n DirectionalLight directionalLight;\n vec3 dirVector;\n vec3 halfVector;\n float NdotL;\n float NdotH;\n float HdotV;\n \n vec3 F;\n vec3 kS;\n vec3 kD;\n\n float D;\n float G;\n vec3 specular;\n\n #pragma unroll_loop_start\n for (int i = 0; i < NUM_DIR_LIGHTS; i++)\n {\n directionalLight = directionalLights[i];\n \n dirVector = normalize(directionalLight.direction);\n halfVector = normalize(dirVector + viewVector);\n \n NdotL = max(dot(normalVector, dirVector), 0.0);\n NdotH = max(dot(normalVector, halfVector), 0.0);\n HdotV = max(dot(halfVector, viewVector), 0.0);\n \n F = F_Schlick(HdotV, F0);\n kS = F;\n kD = 1.0 - kS;\n kD *= 1.0 - metalnessFactor;\n \n D = D_GGX(NdotH, roughnessFactor);\n G = G_Smith(NdotV, NdotL, roughnessFactor);\n specular = D * G * F / (4.0 * NdotV * NdotL + 0.001);\n \n #if defined( USE_SHADOWMAP ) && (NUM_DIR_LIGHT_SHADOWS > 0) && (UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n directionalLightShadow = directionalLightShadows[ i ];\n if(realOpacity > 0.9)\n directionalLight.color *= all( bvec2(receiveShadow, true ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n #endif\n \n dirColor += (kD * baseColor / PI + specular) * directionalLight.color * NdotL;\n }\n #pragma unroll_loop_end\n #endif\n "," totalLightColor += dirColor;","#endif","#if NUM_POINT_LIGHTS > 0"," vec3 pointColor = vec3(0.0);"," for (int i = 0; i < NUM_POINT_LIGHTS; ++i)"," {"," PointLight pointLight = pointLights[i];"," vec3 dirVector = pointLight.position - mvPosition;"," float distance = length(dirVector);"," dirVector = normalize(dirVector);"," vec3 halfVector = normalize(dirVector + viewVector);"," float NdotL = max(dot(normalVector, dirVector), 0.0);"," float NdotH = max(dot(normalVector, halfVector), 0.0);"," float HdotV = max(dot(halfVector, viewVector), 0.0);"," vec3 F = F_Schlick(HdotV, F0);"," vec3 kS = F;"," vec3 kD = 1.0 - kS;"," kD *= 1.0 - metalnessFactor;"," float D = D_GGX(NdotH, roughnessFactor);"," float G = G_Smith(NdotV, NdotL, roughnessFactor);"," vec3 specular = D * G * F / (4.0 * NdotV * NdotL + 0.001);"," pointColor += (kD * baseColor / PI + specular) * pointLight.color * NdotL * punctualLightIntensityToIrradianceFactor(distance, pointLight.distance, pointLight.decay);"," }"," totalLightColor += pointColor;","#endif","#if NUM_SPOT_LIGHTS > 0"," vec3 spotColor = vec3(0.0);"," for (int i = 0; i < NUM_SPOT_LIGHTS; ++i)"," {"," SpotLight spotLight = spotLights[i];"," vec3 dirVector = spotLight.position - mvPosition;"," float distance = length(dirVector);"," dirVector = normalize(dirVector);"," vec3 halfVector = normalize(dirVector + viewVector);"," float angleCos = dot(dirVector, spotLight.direction);"," if (angleCos > spotLight.coneCos)"," {"," float spotEffect = smoothstep(spotLight.coneCos, spotLight.penumbraCos, angleCos);"," float NdotL = max(dot(normalVector, dirVector), 0.0);"," float NdotH = max(dot(normalVector, halfVector), 0.0);"," float HdotV = max(dot(halfVector, viewVector), 0.0);"," vec3 F = F_Schlick(HdotV, F0);"," vec3 kS = F;"," vec3 kD = 1.0 - kS;"," kD *= 1.0 - metalnessFactor;"," float D = D_GGX(NdotH, roughnessFactor);"," float G = G_Smith(NdotV, NdotL, roughnessFactor);"," vec3 specular = D * G * F / (4.0 * NdotV * NdotL + 0.001);"," spotColor += (kD * baseColor / PI + specular) * spotLights[i].color * spotEffect * NdotL"," * punctualLightIntensityToIrradianceFactor(distance, spotLight.distance, spotLight.decay);"," totalLightColor += spotColor;"," }"," }","#endif","vec3 diffuseSpecularEmissive = vec3(0.0);","#ifdef USE_LIGHTMAP"," #ifdef USE_COMPONENT_LIGHTMAP"," vec3 lightMapIrradiance = (texture2D(lightMap, vUv2)).rgb * lightMapIntensity;"," #else"," vec3 lightMapIrradiance = hdrDecode(texture2D(lightMap, vUv2)) * lightMapIntensity;"," #endif"," vec3 diffuseSpecular = clamp(baseColor.rgb, vec3(0.0, 0.0, 0.0), vec3(1.0, 1.0, 1.0)) * lightMapIrradiance;"," diffuseSpecularEmissive = diffuseSpecular + baseColor.rgb * 0.0;","#endif","totalLightColor += diffuseSpecularEmissive;"," if (IBLEnabled)"," {"," vec3 Fr = F_SchlickRoughness(max(dot(N, V), 0.0), F0, roughnessFactor);"," vec3 kS = Fr;"," vec3 kD = 1.0 - kS;"," kD *= 1.0 - metalnessFactor;"," vec3 irradiance = textureCube(irradianceMap, N, 0.0).rgb;"," vec3 diffuse = irradiance * baseColor;"," const float MAX_REFLECTION_LOD = 1.0;"," vec3 prefilteredColor = textureCube(prefilterMap, R, roughnessFactor * MAX_REFLECTION_LOD).rgb;"," vec2 brdf = texture2D(brdfMap, vec2(max(dot(N, V), 0.0), roughnessFactor)).rg;"," vec3 specular = prefilteredColor* (Fr* brdf.x + brdf.y)*iblFactor;"," vec3 color = (kD * diffuse + specular + totalLightColor) * aoFactor;"," color = postProcessing(color, true);"," if (debug == 1) "," {"," baseColor = postProcessing(baseColor, false);"," gl_FragColor = vec4(baseColor, realOpacity);"," }"," else if (debug == 2)"," {"," irradiance = postProcessing(irradiance, true);"," gl_FragColor = vec4(irradiance, realOpacity);"," }"," else if (debug == 3)"," {"," prefilteredColor = postProcessing(prefilteredColor, true);"," gl_FragColor = vec4(prefilteredColor, realOpacity);"," }"," else if (debug == 4)"," {"," diffuse = postProcessing(diffuse, true);"," gl_FragColor = vec4(diffuse, realOpacity);"," }"," else if (debug == 5)"," {"," specular = postProcessing(specular, true);"," gl_FragColor = vec4(specular, realOpacity);"," }"," else if (debug == 6)"," {"," gl_FragColor = vec4(brdf, 0.0, realOpacity);"," }"," else if (debug == 7)"," {"," gl_FragColor = vec4(normal, realOpacity);"," }"," else"," {"," if(iblFactor > 1.0 && realOpacity < 0.6) realOpacity = 0.6;"," gl_FragColor = vec4(color, realOpacity);"," }"," }"," else"," {"," totalLightColor = postProcessing(totalLightColor, true);"," gl_FragColor = vec4(totalLightColor, realOpacity);"," }","#ifdef USE_INSTANCE"," if (floatEqual(fState, 5.0) && floatEqual(colorState, 1.0)) {"," gl_FragColor = mix(gl_FragColor, blinkColor, blinkCoefficient);"," }","#else"," if (floatEqual(colorState, 1.0)) {"," gl_FragColor = mix(gl_FragColor, blinkColor, blinkCoefficient);"," }","#endif","#include <view_shed_fragment>","#include <video_cast_fragment>","#include <heightLimit_fragment>","#include <fog_fragment>","#include <logdepthbuf_fragment>","}"].join("\n"),z.cube_vs=["varying vec3 pos;","void main()","{"," pos = position;"," gl_Position = projectionMatrix * mat4(mat3(viewMatrix)) * modelMatrix * vec4(position, 1.0);"," gl_Position = gl_Position.xyww;","}"].join("\n"),z.cube_fs=["varying vec3 pos;","uniform samplerCube environmentMap;","uniform bool hdr;","uniform float shift;","uniform float A;","uniform float B;","uniform float C;","uniform float D;","uniform float E;","uniform float F;","uniform float scale;","#include <fog_pars_fragment>","vec3 toneMapCanonFilmic(vec3 color)","{"," color *= (1.0 / shift);"," return (((color * (A * color + C * B)) / (color * (A * color + B) + D * F))) * (1.0 / scale);","}","void main()","{"," vec3 envColor = textureCube(environmentMap, pos, 0.0).rgb;"," if (hdr)"," {"," envColor = toneMapCanonFilmic(envColor);"," envColor = pow(envColor, vec3(1.0 / 2.2));"," }"," gl_FragColor = vec4(envColor, 1.0);","#include <fog_fragment>","}"].join("\n"),z.irradiance_vs=["varying vec3 pos;","void main() {","\tpos = vec3(modelMatrix * vec4(position, 1.0));","\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);","}"].join("\n"),z.irradiance_fs=["varying vec3 pos;","uniform samplerCube environmentMap;","const float PI = 3.14159265358979;","vec3 caluIrradiance(vec3 normal, vec3 up, vec3 right)","{","\tvec3 irradiance = vec3(0.0);","\tint count = 0;","\tconst int phiSampleCount = 1024;","\tconst int thetaSampleCount = phiSampleCount / 4;","\tfloat phiDelta = 2.0 * PI / float(phiSampleCount);","\tfloat thetaDelta = 0.5 * PI / float(thetaSampleCount);","\tfor(int i = 0; i < phiSampleCount; ++i)","\t{","\t\tfloat phi = float(i) * phiDelta;","\t\tfor(int j = 0; j < thetaSampleCount; ++j)","\t\t{","\t\t\tfloat theta = float(j) * thetaDelta;","\t\t\tvec3 tangentSample = vec3(sin(theta) * cos(phi), sin(theta) * sin(phi), cos(theta));","\t\t\tvec3 sampleVec = tangentSample.x * right + tangentSample.y * up + tangentSample.z * normal; ","\t\t\tirradiance += textureCube(environmentMap, sampleVec, 0.0).rgb * cos(theta) * sin(theta);","\t\t\t++count;","\t\t}","\t}","\tirradiance = PI * irradiance * (1.0 / float(count));","\treturn irradiance;","}","void main()","{","\tvec3 normal = normalize(pos);","\tvec3 up = vec3(0.0, 1.0, 0.0);","\tvec3 right = cross(up, normal);","\tup = cross(normal, right);","\tvec3 irradiance = caluIrradiance(normal, up, right);","\tgl_FragColor = vec4(irradiance, 1.0);","}"].join("\n"),z.IrradianceMap=function(e,t){this.cubeTexture=null,this.resolution=t||32,this.irradianceMaterial=new THREE.ShaderMaterial({vertexShader:z.irradiance_vs,fragmentShader:z.irradiance_fs,uniforms:{environmentMap:{value:e}},lights:!1,side:THREE.BackSide}),this.cube=new THREE.Mesh(new THREE.BoxBufferGeometry(2,2,2),this.irradianceMaterial)},z.IrradianceMap.prototype.constructor=z.IrradianceMap,z.IrradianceMap.prototype.generateMap=function(e,t){var i=new THREE.Scene;i.add(this.cube);var r=new THREE.CubeCamera(.1,10,this.resolution);if(t){var n={type:THREE.FloatType,format:THREE.RGBFormat,magFilter:THREE.LinearFilter,minFilter:THREE.LinearFilter};r.renderTarget=new THREE.WebGLRenderTargetCube(this.resolution,this.resolution,n)}r.updateCubeMap(e,i),this.cubeTexture=r.renderTarget.texture},z.prefilter_vs=["varying vec3 pos;","varying vec3 Normal;","void main() {","\tpos = vec3(modelMatrix * vec4(position, 1.0));","\tNormal = mat3(modelMatrix) * normal;","\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);","}"].join("\n"),z.prefilter_fs=["varying vec3 pos;","varying vec3 Normal;","uniform float roughness;","uniform samplerCube environmentMap;","uniform sampler2D HammersleyTable;","const float PI = 3.14159265358979;","float D_GGX(float NdotH, float roughness)","{","\tfloat alpha = pow(roughness, 2.0);","\tfloat alpha2 = pow(alpha, 2.0);","\treturn alpha2 / (PI * pow(NdotH * NdotH * (alpha2 - 1.0) + 1.0, 2.0));","}","vec3 ImportanceSampleGGX(vec2 Xi, vec3 N, float roughness) ","{","\tfloat a = roughness * roughness;","\tfloat Phi = 2.0 * PI * Xi.x; ","\tfloat CosTheta = sqrt((1.0 - Xi.y) / (1.0 + (a * a - 1.0) * Xi.y)); ","\tfloat SinTheta = sqrt(1.0 - CosTheta * CosTheta);","\tvec3 H;","\tH.x = SinTheta * cos(Phi); ","\tH.y = SinTheta * sin(Phi); ","\tH.z = CosTheta;","\tvec3 UpVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0); ","\tvec3 TangentX = normalize(cross(UpVector, N)); ","\tvec3 TangentY = cross(N, TangentX);","\treturn normalize(TangentX * H.x + TangentY * H.y + N * H.z);","}","void main()","{","\tvec3 N = normalize(pos);","\tvec3 R = N;","\tvec3 V = R;","\tconst int sampleCount = 1024;","\tfloat totalWeight = 0.0;","\tvec3 prefilteredColor = vec3(0.0);","\tfor (int i = 0; i < sampleCount; ++i) {","\t\tfloat u = float(i) / float(sampleCount);","\t\tvec2 Xi = vec2(u, texture2D(HammersleyTable, vec2(u)).r);","\t\tvec3 H = ImportanceSampleGGX(Xi, N, roughness);","\t\tvec3 L = normalize(2.0 * dot(V, H) * H - V);","\t\tfloat NdotL = max(dot(N, L), 0.0);","\t\tif(NdotL > 0.0)","\t\t{","\t\t\tfloat NdotH = max(dot(N, H), 0.0);","\t\t\tfloat D = D_GGX(NdotH, roughness);","\t\t\tfloat HdotV = max(dot(H, V), 0.0);","\t\t\tfloat pdf = D * NdotH / (4.0 * HdotV);","\t\t\tfloat resolution = 2048.0; // resolution of source cubemap (per face)","\t\t\tfloat solidAngleTexel= 4.0 * PI / (6.0 * resolution * resolution);","\t\t\tfloat solidAngleSample = 1.0 / (float(sampleCount) * pdf);","\t\t\tfloat mipLevel = roughness == 0.0 ? 0.0 : 0.5 * log2(solidAngleSample / solidAngleTexel);","\t\t\tprefilteredColor += textureCube(environmentMap, L, mipLevel).rgb * NdotL;","\t\t\ttotalWeight += NdotL;","\t\t}","\t}","\tprefilteredColor = prefilteredColor / totalWeight;","\tgl_FragColor = vec4(prefilteredColor, 1.0);","}"].join("\n"),z.PrefilterMap=function(e,t,i,r){this.cubeTexture=null,this.resolution=i||128,this.maxMipLevel=r||1,this.prefilterMaterial=new THREE.ShaderMaterial({vertexShader:z.prefilter_vs,fragmentShader:z.prefilter_fs,uniforms:{roughness:{value:0},environmentMap:{value:e},HammersleyTable:{value:t}},lights:!1,side:THREE.BackSide}),this.cube=new THREE.Mesh(new THREE.BoxBufferGeometry(2,2,2),this.prefilterMaterial)},z.PrefilterMap.prototype.constructor=z.PrefilterMap,z.PrefilterMap.prototype.generateMap=function(e,t){var i=new THREE.Scene;i.add(this.cube);var r=new THREE.CubeCamera(.1,10,this.resolution);if(t){var n={type:THREE.FloatType,format:THREE.RGBFormat,magFilter:THREE.LinearFilter,minFilter:THREE.LinearFilter};r.renderTarget=new THREE.WebGLRenderTargetCube(this.resolution,this.resolution,n)}for(var a=this.maxMipLevel<=1?1:this.maxMipLevel-1,s=0;s<this.maxMipLevel;s++){var o=this.resolution*Math.pow(.5,s);r.renderTarget.width=r.renderTarget.height=o;var l=s/a;this.prefilterMaterial.uniforms.roughness.value=l,r.renderTarget.activeMipMapLevel=s,r.updateCubeMap(e,i)}this.cubeTexture=r.renderTarget.texture},THREE.RGBELoader=function(e){THREE.DataTextureLoader.call(this,e),this.type=THREE.UnsignedByteType},THREE.RGBELoader.prototype=Object.assign(Object.create(THREE.DataTextureLoader.prototype),{constructor:THREE.RGBELoader,parse:function(e){var t=function(e,t){switch(e){case 1:console.error("THREE.RGBELoader Read Error: "+(t||""));break;case 2:console.error("THREE.RGBELoader Write Error: "+(t||""));break;case 3:console.error("THREE.RGBELoader Bad File Format: "+(t||""));break;default:case 4:console.error("THREE.RGBELoader: Error: "+(t||""))}return-1},i=function(e,t,i){t=t||1024;for(var r=e.pos,n=-1,a=0,s="",o=String.fromCharCode.apply(null,new Uint16Array(e.subarray(r,r+128)));0>(n=o.indexOf("\n"))&&a<t&&r<e.byteLength;)s+=o,a+=o.length,r+=128,o+=String.fromCharCode.apply(null,new Uint16Array(e.subarray(r,r+128)));return-1<n&&(!1!==i&&(e.pos+=a+n+1),s+o.slice(0,n))},r=function(e,t,i,r){var n=e[t+3],a=Math.pow(2,n-128)/255;i[r+0]=e[t+0]*a,i[r+1]=e[t+1]*a,i[r+2]=e[t+2]*a},n=function(e,t,i,r){var n=e[t+3],a=Math.pow(2,n-128)/255;i[r+0]=THREE.DataUtils.toHalfFloat(e[t+0]*a),i[r+1]=THREE.DataUtils.toHalfFloat(e[t+1]*a),i[r+2]=THREE.DataUtils.toHalfFloat(e[t+2]*a)},a=new Uint8Array(e);a.pos=0;var s=function(e){var r,n,a=/^\s*GAMMA\s*=\s*(\d+(\.\d+)?)\s*$/,s=/^\s*EXPOSURE\s*=\s*(\d+(\.\d+)?)\s*$/,o=/^\s*FORMAT=(\S+)\s*$/,l=/^\s*\-Y\s+(\d+)\s+\+X\s+(\d+)\s*$/,d={valid:0,string:"",comments:"",programtype:"RGBE",format:"",gamma:1,exposure:1,width:0,height:0};if(e.pos>=e.byteLength||!(r=i(e)))return t(1,"no header found");if(!(n=r.match(/^#\?(\S+)/)))return t(3,"bad initial token");for(d.valid|=1,d.programtype=n[1],d.string+=r+"\n";!1!==(r=i(e));)if(d.string+=r+"\n","#"!==r.charAt(0)){if((n=r.match(a))&&(d.gamma=parseFloat(n[1],10)),(n=r.match(s))&&(d.exposure=parseFloat(n[1],10)),(n=r.match(o))&&(d.valid|=2,d.format=n[1]),(n=r.match(l))&&(d.valid|=4,d.height=parseInt(n[1],10),d.width=parseInt(n[2],10)),2&d.valid&&4&d.valid)break}else d.comments+=r+"\n";return 2&d.valid?4&d.valid?d:t(3,"missing image size specifier"):t(3,"missing format specifier")}(a);if(-1!==s){var o=s.width,l=s.height,d=function(e,i,r){var n,a,s,o,l,d,h,c,u,p,m,f,g,v=i,y=r;if(v<8||v>32767||2!==e[0]||2!==e[1]||128&e[2])return new Uint8Array(e);if(v!==(e[2]<<8|e[3]))return t(3,"wrong scanline width");if(!(n=new Uint8Array(4*i*r)).length)return t(4,"unable to allocate buffer space");for(a=0,s=0,c=4*v,g=new Uint8Array(4),d=new Uint8Array(c);y>0&&s<e.byteLength;){if(s+4>e.byteLength)return t(1);if(g[0]=e[s++],g[1]=e[s++],g[2]=e[s++],g[3]=e[s++],2!=g[0]||2!=g[1]||(g[2]<<8|g[3])!=v)return t(3,"bad rgbe scanline format");for(h=0;h<c&&s<e.byteLength;){if((f=(o=e[s++])>128)&&(o-=128),0===o||h+o>c)return t(3,"bad scanline data");if(f)for(l=e[s++],u=0;u<o;u++)d[h++]=l;else d.set(e.subarray(s,s+o),h),h+=o,s+=o}for(p=v,u=0;u<p;u++)m=0,n[a]=d[u+m],m+=v,n[a+1]=d[u+m],m+=v,n[a+2]=d[u+m],m+=v,n[a+3]=d[u+m],a+=4;y--}return n}(a.subarray(a.pos),o,l);if(-1!==d){switch(this.type){case THREE.UnsignedByteType:var h=d,c=THREE.RGBEFormat,u=THREE.UnsignedByteType;break;case THREE.FloatType:for(var p=d.length/4*3,m=new Float32Array(p),f=0;f<p;f++)r(d,4*f,m,3*f);h=m,c=THREE.RGBFormat,u=THREE.FloatType;break;case THREE.HalfFloatType:p=d.length/4*3;var g=new Uint16Array(p);for(f=0;f<p;f++)n(d,4*f,g,3*f);h=g,c=THREE.RGBFormat,u=THREE.HalfFloatType;break;default:console.error("THREE.RGBELoader: unsupported type: ",this.type)}return{width:o,height:l,data:h,header:s.string,gamma:s.gamma,exposure:s.exposure,format:c,type:u}}}return null},setDataType:function(e){return this.type=e,this},load:function(e,t,i,r){return THREE.DataTextureLoader.prototype.load.call(this,e,(function(e,i){switch(e.type){case THREE.UnsignedByteType:e.encoding=THREE.RGBEEncoding,e.minFilter=THREE.NearestFilter,e.magFilter=THREE.NearestFilter,e.generateMipmaps=!1,e.flipY=!0;break;case THREE.FloatType:case THREE.HalfFloatType:e.encoding=THREE.LinearEncoding,e.minFilter=THREE.LinearFilter,e.magFilter=THREE.LinearFilter,e.generateMipmaps=!1,e.flipY=!0}t&&t(e,i)}),i,r)}}),r.IBLManager=function(e){this.viewer=e,this.IBLConfig=null,this.host="",this.isHDR=!0,this.textureLoad=!1;var t=0,i=null,n=null;this.enableIBL=function(e){r.GlobalData.IBL!==e&&(r.GlobalData.IBL=e,this.viewer.setRenderStateChanged(!0),e?null!=i?this.initIBLByName(i):this.initIBLByIndex(t):(this.viewer.modelManager.changeAllMaterials(!1),this.removeSkyBox()))},this.loadIBLConfig=function(e){var t=this,i=this.viewer;(new THREE.FileLoader).load(e,(function(e){t.IBLConfig=JSON.parse(e),r.GlobalData.IBL&&t.initIBLByIndex(0)}),void 0,(function(){i.modelManager.dispatchEvent({type:r.LOADERROREVENTS.LOAD_ERROR,errorType:r.LOADERROREVENTS.LOAD_IBLCONFIG_ERROR,event:event})}))},this.initIBLByIndex=function(e){if(r.GlobalData.IBL&&null!=this.IBLConfig){var n=Object.keys(this.IBLConfig);if(n.length>e){var a=this.IBLConfig[n[e]];this.loadIBLMaps(this.host+a.url,a.isHDR,!0,a.uniforms),t=e,i=n[e]}}},this.initIBLByName=function(e){if(r.GlobalData.IBL&&null!=this.IBLConfig&&this.IBLConfig.hasOwnProperty(e)){var t=this.IBLConfig[e];this.loadIBLMaps(this.host+t.url,t.isHDR,!0,t.uniforms),i=e}},this.loadIBLMaps=function(e,t,i,n,a){function s(e){for(var r in o.modelManager.changeAllMaterials(!0),o.modelManager.updateMaterialsValue("IBLMaps",e,!0),n)"shift"!=r&&o.modelManager.updateMaterialsValue(r,n[r],!0);i&&l.addSkyBox(t,n),l.textureLoad=!0,o.setRenderStateChanged(!0),o.render()}if(r.GlobalData.IBL){var o=this.viewer;!n.iblFactor&&o.modelManager.isMeterUnit()&&(n.iblFactor=10),this.IBLParams=n;var l=this,d=o.getScene();a?s(d.IBLMaps):d.IBLMaps.loadMaps(e,t,!1,s)}},this.loadSkyBox=function(e,t){var i=this,r=this.viewer;r.getScene().IBLMaps.loadMaps(e,t,!0,(function(e,t){i.addSkyBox(t),r.render()}))},this.addSkyBox=function(e,t){e=null==e?this.isHDR:e;this.isHDR=e;var i=null,n=this.viewer.getScene();n.hasObjectGroup(r.ObjectGroupType.IBLCUBE)?((i=n.getObjectGroup(r.ObjectGroupType.IBLCUBE).children[0]).material.uniforms.environmentMap.value=n.IBLMaps.environmentMap,i.material.uniforms.hdr.value=e):((i=new THREE.Mesh(new THREE.BoxBufferGeometry(2e3,2e3,2e3),new THREE.ShaderMaterial({uniforms:{environmentMap:{value:n.IBLMaps.environmentMap},hdr:{value:e},shift:{value:.18},A:{value:.27},B:{value:.29},C:{value:.052},D:{value:.2},E:{value:0},F:{value:.18},scale:{value:.897105},fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new THREE.Color(16777215)},postProcessMap:{value:null},postProcessAdditiveMap:{value:null},postProcessMixRate:{value:0},postProcessAdditiveRate:{value:0},viewportWidth:{value:0},viewportHeight:{value:0}},vertexShader:z.cube_vs,fragmentShader:z.cube_fs,side:THREE.DoubleSide,depthTest:!0,depthWrite:!0,fog:!0}))).frustumCulled=!1,n.getOrCreateObjectGroup(r.ObjectGroupType.IBLCUBE,{priority:10}).add(i));if(t){var a=i.material;for(var s in t)a.uniforms.hasOwnProperty(s)&&(a.uniforms[s].value=t[s])}},this.renderWithOrthCamera=function(e,t,i,n){var a=e.getScene(),s=i||e.camera;if(a.hasObjectGroup(r.ObjectGroupType.IBLCUBE)&&(a.getOrCreateObjectGroup(r.ObjectGroupType.IBLCUBE).visible=!0,!s.isPerspective)){t.autoClear=!0,e.switchToCamera("persp"),r.GlobalData.IncrementRender&&0==n&&t.setObjectListUpdateState(!0);for(var o=a.getObjectGroups(),l=o.length,d=new Array(l),h=0;h<l;++h)d[h]=o[h].visible,o[h].visible=!1;a.getOrCreateObjectGroup(r.ObjectGroupType.IBLCUBE).visible=!0,t.render(a,s);for(h=0;h<l;++h)o[h].visible=d[h];d=null,a.getOrCreateObjectGroup(r.ObjectGroupType.IBLCUBE).visible=!1,e.switchToCamera("orth"),t.autoClear=!1,r.GlobalData.IncrementRender&&t.resetIncrementRender()}},this.removeSkyBox=function(){var e=this.viewer.getScene();e.hasObjectGroup(r.ObjectGroupType.IBLCUBE)&&(e.removeObjectGroupByName(r.ObjectGroupType.IBLCUBE),this.viewer.render())},this.setSkyBoxType=function(e){n=e},this.getSkyBoxType=function(){return n}},r.VolumeShader={uniforms:{backWorldPositionMap:{type:"t",value:null},densityMap:{type:"t",value:null},paletteMap:{type:"t",value:null},normalizeMatrix:{type:"m4",value:new THREE.Matrix4},resolution:{type:"f",value:81}},vertexShader:"\n varying vec3 worldSpaceCoords;\n varying vec4 projectedCoords;\n uniform mat4 normalizeMatrix;\n\n void main()\n {\n //worldSpaceCoords = (modelMatrix * vec4(position + vec3(0.5, 0.5,0.5), 1.0 )).xyz;\n worldSpaceCoords = (normalizeMatrix * vec4(position , 1.0 )).xyz;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n projectedCoords = gl_Position;\n }\n ",fragmentShader:"\n\n varying vec3 worldSpaceCoords;\n varying vec4 projectedCoords;\n uniform sampler2D backWorldPositionMap, densityMap, paletteMap;\n uniform float resolution;\n float steps = 256.0;\n float alphaCorrection = 0.8;//1.0;\n // The maximum distance through our rendering volume is sqrt(3).\n // The maximum number of steps we take to travel a distance of 1 is 512.\n // ceil( sqrt(3) * 512 ) = 887\n // This prevents the back of the image from getting cut off when steps=512 & viewing diagonally.\n const int MAX_STEPS = 887;\n\n\n float getRealAlpha(float a){\n a = min(0.85, a) / 0.85;\n return a < 0.03 ? 0.02: a;\n }\n\n //Acts like a texture3D using Z slices and trilinear filtering.\n vec4 sampleAs3DTexture( vec3 texCoord )\n {\n float texLen = resolution - 1.0;\n float sqrLen = sqrt(resolution);\n\n vec4 colorSlice1, colorSlice2;\n vec2 texCoordSlice1, texCoordSlice2;\n\n //The z coordinate determines which Z slice we have to look for.\n //Z slice number goes from 0 to 255.\n float zSliceNumber1 = floor(texCoord.z * texLen);\n\n //As we use trilinear we go the next Z slice.\n float zSliceNumber2 = min( zSliceNumber1 + 1.0, texLen); //Clamp to 255\n\n //The Z slices are stored in a matrix of 16x16 of Z slices.\n //The original UV coordinates have to be rescaled by the tile numbers in each row and column.\n texCoord.xy /= sqrLen;\n\n texCoordSlice1 = texCoordSlice2 = texCoord.xy;\n\n //Add an offset to the original UV coordinates depending on the row and column number.\n texCoordSlice1.x += (mod(zSliceNumber1, sqrLen ) / sqrLen);\n texCoordSlice1.y += floor((texLen - zSliceNumber1) / sqrLen) / sqrLen;\n\n texCoordSlice2.x += (mod(zSliceNumber2, sqrLen ) / sqrLen);\n texCoordSlice2.y += floor((texLen - zSliceNumber2) / sqrLen) / sqrLen;\n\n //Get the opacity value from the 2D texture.\n //Bilinear filtering is done at each texture2D by default.\n colorSlice1.a = getRealAlpha(texture2D( densityMap, texCoordSlice1 ).x);//0.01\n colorSlice2.a = getRealAlpha(texture2D( densityMap, texCoordSlice2 ).x);\n\n //Based on the opacity obtained earlier, get the RGB color in the transfer function texture.\n colorSlice1.rgb = texture2D( paletteMap, vec2( colorSlice1.a, 1.0) ).rgb;\n colorSlice2.rgb = texture2D( paletteMap, vec2( colorSlice2.a, 1.0) ).rgb;\n\n //How distant is zSlice1 to ZSlice2. Used to interpolate between one Z slice and the other.\n float zDifference = mod(texCoord.z * texLen, 1.0);\n\n //Finally interpolate between the two intermediate colors of each Z slice.\n return mix(colorSlice1, colorSlice2, zDifference) ;\n }\n \n void main( void ) {\n //Transform the coordinates it from [-1;1] to [0;1]\n vec2 texc = vec2(((projectedCoords.x / projectedCoords.w) + 1.0 ) / 2.0,\n ((projectedCoords.y / projectedCoords.w) + 1.0 ) / 2.0 );\n\n //The back position is the world space position stored in the texture.\n vec3 backPos = texture2D(backWorldPositionMap, texc).xyz;\n\n //The front position is the world space position of the second render pass.\n vec3 frontPos = worldSpaceCoords;\n\n //Using NearestFilter for rtTexture mostly eliminates bad backPos values at the edges\n //of the cube, but there may still be no valid backPos value for the current fragment.\n if ((backPos.x == 0.0) && (backPos.y == 0.0))\n {\n gl_FragColor = vec4(0.0);\n return;\n }\n\n //The direction from the front position to back position.\n vec3 dir = backPos - frontPos;\n\n float rayLength = length(dir);\n\n //Calculate how long to increment in each step.\n float delta = 1.0 / steps;\n\n //The increment in each direction for each step.\n vec3 deltaDirection = normalize(dir) * delta;\n float deltaDirectionLength = length(deltaDirection);\n\n //Start the ray casting from the front position.\n vec3 currentPosition = frontPos;\n\n //The color accumulator.\n vec4 accumulatedColor = vec4(0.0);\n\n //The alpha value accumulated so far.\n float accumulatedAlpha = 0.0;\n\n //How long has the ray travelled so far.\n float accumulatedLength = 0.0;\n\n //If we have twice as many samples, we only need ~1/2 the alpha per sample.\n //Scaling by 256/10 just happens to give a good value for the alphaCorrection slider.\n float alphaScaleFactor = 25.6 * delta;\n\n vec4 colorSample;\n float alphaSample;\n\n //Perform the ray marching iterations\n for(int i = 0; i < MAX_STEPS; i++)\n {\n //Get the voxel intensity value from the 3D texture.\n colorSample = sampleAs3DTexture( currentPosition );\n\n //Allow the alpha correction customization.\n alphaSample = colorSample.a * alphaCorrection;\n\n //Applying this effect to both the color and alpha accumulation results in more realistic transparency.\n alphaSample *= (1.0 - accumulatedAlpha);\n\n //Scaling alpha by the number of steps makes the final color invariant to the step size.\n alphaSample *= alphaScaleFactor;\n\n //Perform the composition.\n accumulatedColor += colorSample * alphaSample;\n\n //Store the alpha accumulated so far.\n accumulatedAlpha += alphaSample;\n\n //Advance the ray.\n currentPosition += deltaDirection;\n accumulatedLength += deltaDirectionLength;\n\n //If the length traversed is more than the ray length, or if the alpha accumulated reaches 1.0 then exit.\n if(accumulatedLength >= rayLength || accumulatedAlpha >= 1.0 )\n break;\n }\n gl_FragColor = accumulatedColor;\n\n }\n "},r.BackWorldPosShader={uniforms:{normalizeMatrix:{type:"m4",value:new THREE.Matrix4}},vertexShader:"\n varying vec3 worldSpaceCoords;\n uniform mat4 normalizeMatrix;\n // #include <clipping_planes_pars_vertex>\n void main()\n {\n //Set the world space coordinates of the back faces vertices as output.\n worldSpaceCoords = (normalizeMatrix * vec4(position , 1.0 )).xyz; \n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n // #include <begin_vertex>\n // #include <project_vertex>\n // #include <clipping_planes_vertex>\n }\n ",fragmentShader:"\n varying vec3 worldSpaceCoords;\n // #include <clipping_planes_pars_fragment>\n void main()\n {\n //#include <clipping_planes_fragment>\n //The fragment's world space coordinates as fragment output.\n gl_FragColor = vec4( worldSpaceCoords.x , worldSpaceCoords.y, worldSpaceCoords.z, 1 );\n }\n "},function(){class e extends THREE.Mesh{constructor(e,t,i){super(t,i),this.viewer=e.viewer;let n=this.viewer.getRenderer();this.size=new THREE.Vector2,n.getDrawingBufferSize(this.size),this.radiusScale=e.radiusScale,this.resolution=e.resolution,this.gradient={.25:"rgb(0,0,255)",.55:"rgb(0,255,0)",.85:"yellow",1:"rgb(255,0,0)"},this.backSceneRenderTarget=new THREE.WebGLRenderTarget(this.size.x,this.size.y,{minFilter:THREE.NearestFilter,magFilter:THREE.NearestFilter,wrapS:THREE.ClampToEdgeWrapping,wrapT:THREE.ClampToEdgeWrapping,format:THREE.RGBFormat,type:THREE.FloatType,generateMipmaps:!1}),this.heatmapNum=0,this.sceneForBackPos=new THREE.Scene;var a=this.viewer.getScene().getRawMatrixGlobal();this.meshGroup=new r.ObjectGroup("backScene"),this.meshGroup.matrix.copy(a),this.meshGroup.matrixAutoUpdate=!1,this.meshGroup.updateMatrixWorld(!0),this.sceneForBackPos.add(this.meshGroup),this.material=new THREE.ShaderMaterial({uniforms:r.VolumeShader.uniforms,vertexShader:r.VolumeShader.vertexShader,fragmentShader:r.VolumeShader.fragmentShader,side:THREE.DoubleSide,transparent:!0}),this.material.uniforms.backWorldPositionMap.value=this.backSceneRenderTarget.texture,this.material.uniforms.densityMap.value=this._getDensityMap(e.data),this.material.uniforms.paletteMap.value=this._getPaletteMap(),this.material.uniforms.normalizeMatrix.value=e.normalizeMatrix,this.material.uniforms.resolution.value=e.resolution.x,this.geometry=this._getGeometry(e.boundary,e.height),this.position.z=e.offsetZ,this.updateMatrixWorld(),this.backMaterial=new THREE.ShaderMaterial({uniforms:r.BackWorldPosShader.uniforms,vertexShader:r.BackWorldPosShader.vertexShader,fragmentShader:r.BackWorldPosShader.fragmentShader,side:THREE.BackSide}),this.backMaterial.uniforms.normalizeMatrix.value=e.normalizeMatrix,this.backMesh=new THREE.Mesh(this.geometry,this.backMaterial),this.backMesh.position.z=e.offsetZ,this.backMesh.updateMatrixWorld(),this.meshGroup.add(this.backMesh),this.meshGroup.updateMatrixWorld(),this.renderOrder=r.GlobalData.IncrementRender?100:-1}onBeforeRender(e,t,i){e.getDrawingBufferSize(this.size);let r=this.backSceneRenderTarget;this.size.x==r.width&&this.size.y==r.height||r.setSize(this.size.x,this.size.y);var n=e.getRenderTarget();e.setRenderTarget(this.backSceneRenderTarget),e.clear(),e.render(this.sceneForBackPos,i),e.setRenderTarget(n)}_getGeometry(e,t){var i=new THREE.Shape(e),r={depth:t,bevelEnabled:!1};return new THREE.ExtrudeGeometry(i,r)}_getDensityMap(e){var t=this.resolution.x,i=this.resolution.y,r=this.resolution.z;let n=Math.sqrt(r),a=Math.sqrt(r),s=new Uint8Array(t*i*r);this._updateDensityMapData(s,e);var o=new THREE.DataTexture(s,t*n,i*a,THREE.LuminanceFormat);return o.minFilter=THREE.LinearFilter,o.magFilter=THREE.LinearFilter,o.generateMipmaps=!1,o.needsUpdate=!0,this.densityMap=o,this.densityMap}updateDensityMap(e){let t=this.densityMap.image.data;this._updateDensityMapData(t,e),this.densityMap.needsUpdate=!0}_updateDensityMapData(e,t){var i=this.resolution.x,r=this.resolution.y,n=this.resolution.z;let a=Math.sqrt(n),s=Math.sqrt(n);function o(e,t,i,r,n,a,s){return Math.sqrt(Math.pow((e-r)/s.x,2)+Math.pow((t-n)/s.y,2)+Math.pow((i-a)/s.z,2))}e.fill(0);let l=this.radiusScale;for(var d=0;d<t.length;d++){let m=t[d],f=Math.floor(Math.max(0,m.x-m.radius*l.x)),g=Math.floor(Math.max(0,m.y-m.radius*l.y)),v=Math.floor(Math.max(0,m.z-m.radius*l.z)),y=Math.ceil(Math.min(i,m.x+m.radius*l.x)),M=Math.ceil(Math.min(r,m.y+m.radius*l.y)),E=Math.ceil(Math.min(n,m.z+m.radius*l.z));for(var h=v;h<E;h++)for(var c=g;c<M;c++)for(var u=f;u<y;u++){var p=o(u,c,h,m.x,m.y,m.z,l);let t=u+h%s*i,d=n-h-1,f=c+Math.floor(d/a)*r,g=p<0*m.radius?m.value:(1-p/m.radius+0)*m.value,v=f*r*s+t;e[v]=Math.max(255*g,e[v])}}}_getPaletteMap(){var e=this.gradient,t=document.createElement("canvas"),i=t.getContext("2d");t.width=256,t.height=1;var r=i.createLinearGradient(0,0,256,1);for(var n in e)r.addColorStop(n,e[n]);i.fillStyle=r,i.fillRect(0,0,256,1);let a=new THREE.Texture(t);return a.wrapS=a.wrapT=THREE.ClampToEdgeWrapping,a.needsUpdate=!0,a}dispose(){this.geometry.dispose(),this.material.dispose()}setGradient(e){this.gradient=e,this.material.uniforms.paletteMap.value=this._getPaletteMap()}}r.Heatmap3D=e}();r.Storage=r.Storage||{},r.Storage.IndexedDBHelper=class{constructor(e){this.indexedDB=window.indexedDB||window.webkitIndexedDB||window.mozIndexedDB||window.msIndexedDB,this.indexedDB||console.log("IndexedDB not supported"),this._db=null,this._opt=e,this._onOpening=!1,this._onOpeningResolves=[],this._onOpeningRejects=[],this._temp={}}open(e,t){this._onOpening=!0;const i=e||this._opt.name,r=t||this._opt.version,n=this.indexedDB.open(i,r);return new Promise(((e,t)=>{n.onsuccess=i=>{let r=n.result,a=!1;if(this._opt.storeList){let i=Object.values(r.objectStoreNames);this._opt.storeList.some((n=>{if(-1===i.indexOf(n)){let{name:i,version:n}=r;return n++,r.close(),this.open(i,n).then(e).catch(t),a=!0}}))}a||(this._db=r,e(r))},n.onupgradeneeded=e=>{let t=this._db=e.target.result,i=this._opt.storeList||[];i.forEach((e=>!t.objectStoreNames.contains(e)&&t.createObjectStore(e))),Object.values(t.objectStoreNames).forEach((e=>-1===i.indexOf(e)&&t.deleteObjectStore(e)))},n.onerror=e=>{t(e)}}))}getDB(){return new Promise(((e,t)=>{this._db?e(this._db):this._onOpening?(this._onOpeningResolves.push(e),this._onOpeningRejects.push(t)):this.open().then((t=>{e(t),this._onOpeningResolves.forEach((e=>e(t)))})).catch((e=>{t(e),this._onOpeningRejects.forEach((t=>t(e)))}))}))}addObject(e,t,i){return new Promise(((r,n)=>{this.getDB().then((a=>{if(!a.objectStoreNames.contains(e))return void n();const s=a.transaction(e,"readwrite");s.objectStore(e).put(t,i).onsuccess=n=>{this._temp[e]&&this._temp[e].keys&&(this._temp[e].keys.push(i),this._temp[e].map[i]=t),r(n.target.result)},s.onerror=n})).catch(n)}))}getObject(e,t,i=!1){return new Promise(i?(i,r)=>{if(this._temp[e]){let n=this._temp[e].map[t];if(n)return void i(n);if(-1===this._temp[e].keys.indexOf(t))return void r()}this.getDB().then((n=>{if(!n.objectStoreNames.contains(e))return void r();const a=n.transaction(e,"readonly"),s=a.objectStore(e);let o=new Promise((e=>s.getAllKeys().onsuccess=t=>e(t.target.result))),l=new Promise((e=>s.getAll().onsuccess=t=>e(t.target.result)));Promise.all([o,l]).then((n=>{let[a,s]=n;this._temp[e]={keys:a,map:{}};let o=!1;a.forEach(((r,n)=>{t===r?(i(s[n]),o=!0):this._temp[e].map[r]=s[n]})),o||r()})),a.onerror=r})).catch(r)}:(i,r)=>{this.getDB().then((n=>{if(!n.objectStoreNames.contains(e))return void r();const a=n.transaction(e,"readonly");a.objectStore(e).get(t).onsuccess=e=>{let t=e.target.result;t?i(t):r(e)},a.onerror=r})).catch(r)})}deleteObject(e,t){return new Promise(((i,r)=>{this.getDB().then((n=>{if(!n.objectStoreNames.contains(e))return void r();const a=n.transaction(e,"readwrite");a.objectStore(e).delete(t).onsuccess=e=>{i(e.target.result)},a.onerror=r})).catch(r)}))}},r.Storage.IndexedDBHelper.loadWithStorage=(e,t,i,n,a,s=!1)=>{let o=()=>{i(t).then((i=>{let a=s?JSON.stringify(i):i;r.EnableStorage&&r.storageManager[`add${e}`](a,t),n&&n(i)})).catch((e=>a&&a(e)))};r.EnableStorage?r.storageManager[`get${e}`](t).then((e=>{let t=s?JSON.parse(e):e;n&&n(t)})).catch((e=>{o()})):o()};r.Storage.StorageManager=class{constructor(){this.helperMap={},r.storageManager=this}getHelper(e){return this.helperMap[e]=this.helperMap[e]||new r.Storage.IndexedDBHelper({name:`Bf_${e}`,storeList:["i","m","t"]}),this.helperMap[e]}getDatabagIdAndKeyByUrl(e){let t=/\/\/.*?\/(.+?)\/resource\/v3\/model\/(.+?)(\.gz)?(\?.+)?$/.exec(e);return t?{databagId:t[1],key:t[2]}:{databagId:"i",key:e}}getDatabagIdAndRootKeyByUrl(e){let t=/\/\/.*?\/(.+?)\/(.+?)(\.gz)?(\?.+)?$/.exec(e);return t?{databagId:t[1],key:t[2]}:{databagId:"i",key:e}}addData(e,t,i,r=!0){return new Promise(((n,a)=>{let s=r?this.getDatabagIdAndRootKeyByUrl(i):this.getDatabagIdAndKeyByUrl(i),{databagId:o,key:l}=s;this.getHelper(o).addObject(e,t,l).then((e=>n(e))).catch((e=>a(e)))}))}addModelData(e,t){return this.addData("m",e,t)}addInfoData(e,t){return this.addData("i",e,t)}getData(e,t,i=!0){return new Promise(((r,n)=>{let a=i?this.getDatabagIdAndRootKeyByUrl(e):this.getDatabagIdAndKeyByUrl(e),{databagId:s,key:o}=a;this.getHelper(s).getObject(t,o).then((e=>{r(e)})).catch((e=>n(e)))}))}getModelData(e){return this.getData(e,"m")}getInfoData(e){return this.getData(e,"i")}addTexture(e,t){const i=(e,t)=>{let i=this._canvas=this._canvas||document.createElement("canvas"),r=i.getContext("2d");return r.clearRect(0,0,i.width,i.height),i.width=t,i.height=t,r.drawImage(e,0,0,t,t),r.getImageData(0,0,t,t)};return new Promise(((n,a)=>{let s,o=this.getDatabagIdAndKeyByUrl(t),{databagId:l,key:d}=o;e.image instanceof HTMLImageElement?(e.image=r.MaterialUtil.ensurePowerOfTwo(e.image),s={type:"DataTexture",data:{image:i(e.image,e.image.width)}}):s={type:"CompressedTexture",data:{image:e.image}},["anisotropy","encoding","flipY","format","generateMipmaps","magFilter","mapping","minFilter","mipmaps","premultiplyAlpha","rotateMatrix","type","unpackAlignment","wrapS","wrapT"].forEach((t=>s.data[t]=e[t])),this.getHelper(l).addObject("t",s,d).then((e=>n(e))).catch((e=>a(e)))}))}getTexture(e){return new Promise(((t,i)=>{let r=this.getDatabagIdAndKeyByUrl(e),{databagId:n,key:a}=r;this.getHelper(n).getObject("t",a).then((e=>{if(!["DataTexture","CompressedTexture"].includes(e.type)||!e.data)return void this.getHelper(n).deleteObject("t",a).then((e=>i(e)));let r=new THREE[e.type];Object.keys(e.data).forEach((t=>r[t]=e.data[t])),r.needsUpdate=!0,t(r)})).catch((e=>i(e)))}))}addBimtiles(e,t){return new Promise(((i,r)=>{let n=this.getDatabagIdAndKeyByUrl(t),{databagId:a,key:s}=n;this.getHelper(a).addObject("t",e,s).then((e=>i(e))).catch((e=>r(e)))}))}getBimtiles(e){return new Promise(((t,i)=>{let r=this.getDatabagIdAndKeyByUrl(e),{databagId:n,key:a}=r;this.getHelper(n).getObject("t",a).then((e=>{t(e)})).catch((e=>i(e)))}))}};r.Storage.SceneStorageManager=class{constructor(e){this.helper=new r.Storage.IndexedDBHelper({name:`Bg_${e.sceneId}`,storeList:["i",...e.databagIdList]}),r.storageManager=this}getStoreNameAndKeyByUrl(e){let t=/\/\/.*?\/(.+?)\/resource\/v3\/model\/bimtiles\/(.+?)(\.gz)?$/.exec(e);return t?{storeName:t[1],key:t[2]}:{storeName:"i",key:e}}addTexture(e,t){const i=(e,t,i)=>{let r=this._canvas=this._canvas||document.createElement("canvas"),n=r.getContext("2d");return n.clearRect(0,0,r.width,r.height),r.width=t,r.height=i,n.drawImage(e,0,0,t,i),n.getImageData(0,0,t,i)};return new Promise(((r,n)=>{let a,s=this.getStoreNameAndKeyByUrl(t),{storeName:o,key:l}=s;a=e.image instanceof HTMLImageElement?{type:"Texture",data:{image:i(e.image,e.image.width,e.image.height)}}:{type:"CompressedTexture",data:{image:e.image}},["anisotropy","encoding","flipY","format","generateMipmaps","magFilter","mapping","minFilter","mipmaps","premultiplyAlpha","rotateMatrix","type","unpackAlignment","wrapS","wrapT"].forEach((t=>a.data[t]=e[t])),this.helper.addObject(o,a,l).then((e=>r(e))).catch((e=>n(e)))}))}getTexture(e){return new Promise(((t,i)=>{let r=this.getStoreNameAndKeyByUrl(e),{storeName:n,key:a}=r;this.helper.getObject(n,a).then((e=>{if(!["Texture","CompressedTexture"].includes(e.type)||!e.data)return void this.helper.deleteObject(n,a).then((e=>i(e)));let r=new THREE[e.type];Object.keys(e.data).forEach((t=>r[t]=e.data[t])),"Texture"===e.type&&(r.image=(e=>{let t=document.createElement("canvas"),i=t.getContext("2d");return t.width=e.width,t.height=e.height,i.putImageData(e,0,0),t})(e.data.image)),r.needsUpdate=!0,t(r)})).catch((e=>i(e)))}))}addBimtiles(e,t){return new Promise(((i,r)=>{let n=this.getStoreNameAndKeyByUrl(t),{storeName:a,key:s}=n;this.helper.addObject(a,e,s).then((e=>i(e))).catch((e=>r(e)))}))}getBimtiles(e){return new Promise(((t,i)=>{let r=this.getStoreNameAndKeyByUrl(e),{storeName:n,key:a}=r;this.helper.getObject(n,a).then((e=>{t(e)})).catch((e=>i(e)))}))}addInfoData(e,t){return this.addBimtiles(e,t)}getInfoData(e){return this.getBimtiles(e)}},(()=>{let e=new THREE.Vector3;r.ExplosionManager=class{constructor(e){this.modelManager=e,this.totalHeightMap={},this.explosionParamMap={},this.explodeCount=0,this.isElementExplodedMap={},this.isFloorExplodedMap={}}destroy(){this.modelManager=null,this.totalHeightMap=null,this.explosionParamMap=null,this.isElementExplodedMap=null,this.isFloorExplodedMap=null}getExplosionParam(e){return this.explosionParamMap[e]||(this.explosionParamMap[e]={explosionExtent:0,floorExplosionExtent:0,floorExplosionList:[],floorInfos:void 0,floorExplosionDirection:void 0}),this.explosionParamMap[e]}getExplosionExtent(e){if(e)return this.getExplosionParam(e).explosionExtent}setFloorInfos(t,i){if(i&&!this.getExplosionParam(i).floorInfos){for(var r=0,n=t.length;r<n;r++)t[r].explodedHeight=t[r].elevation,t[r].preExplodedHeight=t[r].elevation,t[r].preExplodedTranslation=null;this.getExplosionParam(i).floorInfos=t,this.totalHeightMap[i]={};const a=this.modelManager.getModel(i).getRawBoundingBox();this.totalHeightMap[i].totalHeight=a.getSize(e).z}}setExplosionExtent(t,i){if(!i)return;var n,a=t-this.getExplosionParam(i).explosionExtent;if(0==a)return;this.modelManager.modelCollection.traverse((e=>{var r=e.id,a=new THREE.Box3,s=r==i?t:this.getExplosionParam(r).explosionExtent;r!=i&&0===s?a=e.getBoundingBoxWorld():e.modelExplosion.preElementExplode(a,s),a&&(n?n.union(a):n=a)}));const s=this.modelManager.getModel(i),o=s.getBoundingBoxWorld().getCenter(e);let l=this.modelManager.modelCollection.getById("ExternalComponent");l&&l.elementExplode(s,a,o);let d=this.modelManager.modelCollection.getById("ExtrudeBodyManager");d&&d.elementExplode(s,t,o),this.explodeCount=1e4==this.explodeCount?0:this.explodeCount+1,this.isElementExplodedMap[i]=0!==t,this.modelManager.scene.setBoundingBoxWorld(n),4==r.GlobalData.LightPreset&&(this.modelManager.scene.lightManager.updateShadowLight(),this.modelManager.scene.lightManager.updateReceivingPlane()),r.GlobalData.EnableShadowMap&&this.modelManager.viewer.updateShadowMap(),this.modelManager.modelCollection.getById(i).modelExplosion.explode(),this.getExplosionParam(i).explosionExtent=t,this.modelManager.dispatchEvent({type:r.EVENTS.ON_EXPLOSION,extent:t})}setFloorExplosion(e,t,i,n){if(!n)return;if(n=n.toString(),this.getExplosionParam(n).floorExplosionDirection=i,null==this.getExplosionParam(n).floorInfos)return;this.getExplosionParam(n).floorExplosionList=[];var a=!0,s={};if(t){for(var o=0,l=t.length;o<l;o++)s[t[o]]=!0;if(a=!1,0==t.length)return}for(var d=this.getExplosionParam(n).floorInfos,h=d.length,c=e*this.totalHeightMap[n].totalHeight/(h-1),u=0,p=0;p<h;p++){d[p].name;var m=d[p].elevation+u*c;(a||s[d[p].id])&&(u++,this.getExplosionParam(n).floorExplosionList.push(d[p].id)),d[p].preExplodedHeight=d[p].explodedHeight,d[p].explodedHeight=m,d[p].preExplodedDirection=d[p].explodedDirection,d[p].explodedDirection=i}let f=this.modelManager.modelCollection.getById("ExtrudeBodyManager");f&&f.explode(n);let g=this.modelManager.modelCollection.getById("ExternalComponent");const v=this.modelManager.getModel(n);var y;g&&g.explode(v),this.modelManager.modelCollection.traverse((e=>{var t=e.id.toString();const i=this.getExplosionParam(t).floorExplosionDirection;var r=new THREE.Box3,n=this.getExplosionParam(t).floorInfos;if(i&&n&&n.length>0){let t=(new THREE.Matrix4).copy(e.getTransformMatrix()).invert();const a=i.clone().applyMatrix4(t).sub(new THREE.Vector3(0,0,0).applyMatrix4(t));e.modelExplosion.preFloorExplode(r,n,a),r&&(y?y.union(r):y=r)}else r=e.getBoundingBoxWorld(),y?y.union(r):y=r})),this.explodeCount=1e4==this.explodeCount?0:this.explodeCount+1,this.isFloorExplodedMap[n]=0!==e,this.modelManager.scene.setBoundingBoxWorld(y),this.modelManager.scene.updateBoundingBoxWorldWithoutDEM(y),this.modelManager.getFilter().needUpdateBoxAfterExplode(),this.modelManager.modelCollection.getById(n).modelExplosion.explode(),4==r.GlobalData.LightPreset&&this.modelManager.scene.lightManager.updateShadowLight(),r.GlobalData.EnableShadowMap&&this.modelManager.viewer.updateShadowMap(),this.getExplosionParam(n).floorExplosionExtent=e,0===e&&(this.getExplosionParam(n).floorExplosionList=[]),this.modelManager.dispatchEvent({type:r.EVENTS.ON_FLOOR_EXPLOSION,floorInfos:d,modelId:n})}getFloorInfos(e){if(e)return this.getExplosionParam(e).floorInfos}getFloorExplosionList(e){if(e)return this.getExplosionParam(e).floorExplosionList}getFloorExplosionExtent(e){if(e)return this.getExplosionParam(e).floorExplosionExtent}getFloorExplosionDirection(e){if(e)return this.getExplosionParam(e).floorExplosionDirection}destroy(){delete this.explosionParamMap}isExploded(e){return this.isElementExplodedMap[e]||this.isFloorExplodedMap[e]}}})(),r.BaseModelExplosion=class{constructor(e){this.model=e,this.explosionTranslation={}}explode(){this.model.explode()}preFloorExplode(e,t,i){}preElementExplode(e,t){}getExplosionTranslationByObjId(e){}getLevelNameByObjId(e){}},r.ModelView=r.ModelView||{},function(){class e{constructor(e,t){this.manager=e,this.setValues(t),this.castShadow=!0,this.receiveShadow=!0,t.loadConfig&&(this.castShadow=!r.Utils.isDefined(t.loadConfig.castShadow)||t.loadConfig.castShadow,this.receiveShadow=!r.Utils.isDefined(t.loadConfig.receiveShadow)||t.loadConfig.receiveShadow),this.localClippingMode=!1,this.localClippingPlanes=null,this.innerClippingMode=!1,this.innerClippingMatrix=null,this.filter=null,this.visible=!0,this.loaded=!1,this.emptyScene=!1,this.statistics={renderableCount:0,renderableTotal:r.GlobalData.maxObjectNumInPool,renderableTotalForPool:r.GlobalData.maxObjectNumInPool,numOfElements:0,numOfTriangles:0,numOfVertices:0,memoeryInfo:{maxMemorySize:0,minMemorySize:0,triangleNumber:0,instanceEnabled:r.GlobalData.Instance}},this.transformInfos={octreeTransformed:!1,boundingBox:new THREE.Box3,position:new THREE.Vector3,rotation:(new THREE.Quaternion).setFromEuler((new THREE.Euler).fromArray([-1.5708,0,0]),!1),scale:new THREE.Vector3(1,1,1),transformMatrix:new THREE.Matrix4},this.containsCamera=!1,this.destroyed=!1,this.boundaryPoints=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3],this.modelExplosion=new r.BaseModelExplosion(this),this.objectGroup=void 0}get sequence(){return this._sequence}set sequence(e){this._sequence=e}set config(e){this._config=e}get config(){return this._config}destroy(){this.destroyed=!0,this.statistics=null,this.transformInfos=null,this.transformMatrix=void 0,this.transformMatrixInverse=void 0,this.boundaryPoints=void 0,this._lengthUnitsMatrix=void 0,this.filter&&(this.filter.destroy(),this.filter=null),this.manager=null,this._config=void 0}setValues(e){this.id=e.modelId,this.databagId=this.id,this.fileId=e.fileId,this._sequence=e.priority,this._config=e.config,this._config&&this._config.metadata&&this._config.metadata.model_unit?this._unit="m"===this._config.metadata.model_unit?r.EnumLengthlUnits.Meter:r.EnumLengthlUnits.Millimeter:this._unit=this.getDefaultUnit(),this._lengthUnitsMatrix=void 0,this.transform={translation:new THREE.Vector3,rotation:new THREE.Quaternion,scale:new THREE.Vector3(1,1,1)},this.transformMatrix=new THREE.Matrix4,this.transformMatrixInverse=new THREE.Matrix4,this.setupTransformMatrix(e)}setupTransformMatrix(e){let t=e.loadConfig?e.loadConfig.transformMatrix:void 0;if(!t){let i=new THREE.Vector3,r=new THREE.Quaternion,n=new THREE.Vector3(1,1,1);e.loadConfig&&e.loadConfig.translation&&i.fromArray(e.loadConfig.translation),e.loadConfig&&e.loadConfig.rotation&&r.setFromEuler((new THREE.Euler).fromArray(e.loadConfig.rotation)),e.loadConfig&&e.loadConfig.scale&&n.fromArray(e.loadConfig.scale),t=(new THREE.Matrix4).compose(i,r,n)}this.setTransformMatrix(t)}calculateClippingIds(){}load(e){}prepare(e,t){}isEmptyScene(){return!1}isLayerData(){return!1}isLoaded(){return!0}isDataReady(){return!0}isVisible(){return this.visible}setVisible(e){this.visible=e}isUseable(){return this.isLoaded()&&this.isVisible()}isCulled(){return!0}getTransforms(){return this.transformInfos}getStatistics(){return this.statistics}getBoundingBoxWorld(){return this.getTransforms().boundingBox}getRawBoundingBox(){return this.getTransforms().boundingBox}applyFilter(){}applySelection(){}clearSelection(){}applyHover(){}clearHover(){}applyBlink(){}clearBlink(){}applyReplacement(){}getId(){return this.id}getDatabagId(){return this.databagId}getEncodedDatabagId(){return this.databagId}getOctreeRoots(e){}updateOctreeNode(e){}disposeBufferAfterVbo(){}setRenderableCount(e){}updateMeshNodes(){}getNodeInfosByUserId(e){return[]}getAllNodeInfos(){return{}}getMaterialByMaterialId(e){return null}updateMaterialsValue(e,t,i,r){}updateMaterials(){}switchNewStyleMaterial(e){}changeAllMaterials(e){}getImageByUrl(e){}getMeshesForCap(e,t){}getWireframeElementCount(){return 0}getCameraNameList(){return[]}getCamera(e){return null}calculateCameraModelRelation(e){this.containsCamera=!1}isUserIdExist(e){return!0}hasUserId(e){return!1}isHiddenUserId(e){return!1}hasTransforms(){return!0}explode(){}getFilter(){return this.filter}getModelManager(){return this.manager}isDestroyed(){return this.destroyed}getPickingMeshes(e,t,i,r,n){}getBlinkMaterials(){return[]}getLoadedUserIdsObject(){return null}dispatchEvent(e){}enableColorWithoutLight(e){}adjustVisibility(e){}changeVisibilityOfSelectedObjects(e){}changeVisibilityOfNonSelectedObjects(e){}adjustInstanceVisibility(e){}changeInstanceVisibilityOfSelectedObjects(e){}changeInstanceVisibilityOfNonSelectedObjects(e){}restoreVisibilityOfObjects(){}calculateClippingContours(){}preUpdate(){}update(){}postUpdate(){}getTransformMatrix(){return this.transformMatrix.clone()}setTransformMatrix(e){this.transformMatrix.copy(e),this.applyLengthUnitsMatrix(this.transformMatrix),this.transformMatrixInverse.copy(this.transformMatrix).invert(),e.decompose(this.transform.translation,this.transform.rotation,this.transform.scale)}rotateOnBasePoint(e,t,i){let r=this.transform.rotation.clone().clone().invert(),n=this.transform.translation.clone(),a=(new THREE.Quaternion).setFromAxisAngle(t,i);this.transform.rotation.multiply(a);let s=e.clone().sub(n).applyQuaternion(r).applyQuaternion(this.transform.rotation);this.transform.translation.sub(s).add(e.clone().sub(n)),this.updateTransformMatrix()}scaleOnBasePoint(e,t){this.transform.scale.multiply(t);let i=t.clone().sub(new THREE.Vector3(1,1,1)),r=this.transform.rotation.clone(),n=r.clone().invert(),a=this.transform.translation.clone(),s=e.clone().sub(a).applyQuaternion(n).multiply(i).applyQuaternion(r);this.transform.translation.sub(s),this.updateTransformMatrix()}translate(e){this.transform.translation.add(e),this.updateTransformMatrix(),this.updateMatrix(),this.manager.updateSceneBoundingBox()}updateMatrix(){}updateTransformMatrix(){let e=this.transform.translation,t=this.transform.scale,i=this.transform.rotation;this.transformMatrix.compose(e,i,t),this.applyLengthUnitsMatrix(this.transformMatrix),this.transformMatrixInverse.copy(this.transformMatrix).invert()}getBoundaryPoints(){let e=this.getRawBoundingBox();const t=this.getTransformMatrix(),i=this.boundaryPoints;return i[0].set(e.min.x,e.min.y,e.min.z).applyMatrix4(t),i[1].set(e.max.x,e.min.y,e.min.z).applyMatrix4(t),i[2].set(e.max.x,e.max.y,e.min.z).applyMatrix4(t),i[3].set(e.min.x,e.max.y,e.min.z).applyMatrix4(t),i[4].set(e.min.x,e.min.y,e.max.z).applyMatrix4(t),i[5].set(e.max.x,e.min.y,e.max.z).applyMatrix4(t),i[6].set(e.max.x,e.max.y,e.max.z).applyMatrix4(t),i[7].set(e.min.x,e.max.y,e.max.z).applyMatrix4(t),i}getGeometryBuffersByUserId(e){return this._handler?this._handler.getGeometryBuffersByUserId(e):[]}getRealUserId(e){return e}setCastShadow(e){this.castShadow=e}setReceiveShadow(e){this.receiveShadow=e}enableLocalClippingMode(e){this.localClippingMode=e}clone(t,i){i=r.Utils.defaultValue(i,{});const n=r.Utils.defaultValue(i.modelId,this.databagId);return r.Utils.defined(t)||(t=new e({modelId:n})),t}_copy(e){this.manager=e.manager,this.transform={translation:e.transform.translation.clone(),rotation:e.transform.rotation.clone(),scale:e.transform.scale.clone()},this.emptyScene=e.emptyScene,this.statistics=r.Utils.clone(e.statistics,!0),this.transformInfos={octreeTransformed:e.transformInfos.octreeTransformed,boundingBox:e.transformInfos.boundingBox.clone(),position:e.transformInfos.position.clone(),rotation:e.transformInfos.rotation.clone(),scale:e.transformInfos.scale.clone(),transformMatrix:e.transformInfos.transformMatrix.clone()},this._config=r.Utils.clone(e._config,!0),this._unit=e._unit,this._sequence=e._sequence,this.modelExplosion=new r.BaseModelExplosion(this)}isVisibleMesh(e){return!0}getDefaultUnit(){return r.EnumLengthlUnits.Meter}getUnit(){return this._unit}setLengthUnitsMatrix(e){e&&(this._lengthUnitsMatrix=e,this.updateTransformMatrix())}applyLengthUnitsMatrix(e){this._lengthUnitsMatrix&&e.multiply(this._lengthUnitsMatrix)}getLengthUnitsMatrix(){return this._lengthUnitsMatrix}getAllNodeGroups(){return this.objectGroup?this.objectGroup.children:[]}hideWireframeGroup(){const e=this.getAllWireframeGroupNames();this.getAllNodeGroups().forEach((t=>{if(this._isActiveNodeGroup(t))for(let i=0,r=e.length;i<r;i++)if(t.name===e[i]){t.visible=!1;break}}))}showWireframeGroup(){const e=this.getAllWireframeGroupNames();this.getAllNodeGroups().forEach((t=>{if(this._isActiveNodeGroup(t))for(let i=0,r=e.length;i<r;i++)if(t.name===e[i]){t.visible=!0;break}}))}hideExcludeWireframeGroup(){const e=this.getAllWireframeGroupNames();this.getAllNodeGroups().forEach((t=>{if(!this._isActiveNodeGroup(t))return;let i=!1;for(let r=0,n=e.length;r<n;r++)if(t.name===e[r]){i=!0;break}i||(t.visible=!1)}))}showExcludeWireframeGroup(){const e=this.getAllWireframeGroupNames();this.getAllNodeGroups().forEach((t=>{if(!this._isActiveNodeGroup(t))return;let i=!1;for(let r=0,n=e.length;r<n;r++)if(t.name===e[r]){i=!0;break}i||(t.visible=!0)}))}holdNodeGroupVisibility(){this.getAllNodeGroups().forEach((e=>{e._oriVisible=e.visible}))}resetNodeGroupVisibility(){this.getAllNodeGroups().forEach((e=>{e._oriVisible=void 0}))}_isActiveNodeGroup(e){return!!e._oriVisible}getAllWireframeGroupNames(){return[]}collectBlinkedMaterial(e,t){}}r.BaseModel=e}(),r.TaskWorker=function(e,t){this.MaxThreadCount=e||8;var i=this;i.todoList={},i.todoCount=0,i.doingCount=0,this.hasTask=function(){return i.todoCount>0},this.addItem=function(e,t){i.todoList[e]=t,i.todoCount++},this.clearTasks=function(){i.todoList={},i.todoCount=0},this.run=function(e,i){var n=this;if(!(n.doingCount>0)){var a=[],s=n.todoList;for(var o in s)s.hasOwnProperty(o)&&a.push(o);n.todoList={},n.todoCount=0;var l=a.length;if(0!==l){i&&a.sort(i);var d=Math.min(this.MaxThreadCount,r.GlobalData.ConcurrencyRequestCount,l);n.doingCount=l;for(var h=0;h<d;++h)c(h)}}function c(i){if(i>=l)n.doingCount<1&&t();else{var r=a[i];e(r,i+d,c)}}}},r.TaskWorker2=function(e){this.MaxThreadCount=e||8,this.todoList=[],this.doingCount=0,this.addItem=function(e){void 0!==e&&this.todoList.push(e)},this.run=function(e,t,i){if(!(this.doingCount>0))if(0!==this.todoList.length){var n=this.todoList,a=n.length;this.todoList=[],this.doingCount=a;for(var s=Math.min(this.MaxThreadCount,r.GlobalData.ConcurrencyRequestCount,a),o=this,l=0;l<s;++l)d(l)}else i();function d(r){r>=a?o.doingCount<1&&(t(o.doingCount,a),i()):(t(o.doingCount,a),e(n[r],r+s,d))}}},r.TaskManager=function(){this.worker=new r.TaskWorker2(8)},r.TaskManager.prototype={constructor:r.TaskManager,addTask:function(e){this.worker.addItem(e)},processTasks:function(e,t,i){t=t||function(){},i=i||function(){};var r=this.worker;this.worker.run((function(t,i,n){e(t,(function(){--r.doingCount,n(i)}))}),t,i)}},function(){function e(e,t,i){if(!t.receiveIBL)return null;var n,a=r.MaterialUtil.getMaterialParameters(t);return""!=t.defines.USE_INSTANCE&&""!=t.defines.USE_INSTANCE_NORMAL||(a.defines=t.defines),i?(delete a.textureColor,delete a.pureColor,delete a.imageFade,a.lights=!0,(n=new z.IBLMaterial(a)).type="IBL",n.refreshUniforms()):(delete a.iblProbe,a.lights=!e.lightmap,(n=r.MaterialUtil.createStandardMaterial(a)).roughness=a.originRoughness,n.metalness=a.originMetalness,n.refreshUniforms()),n.name=t.name,n._primary=t._primary,n.overrideColor=t.overrideColor,a=null,n}r.MaterialManager=class{constructor(e){this.instanceMaterials={},this.materials={},this.textures={},this.lightmaps={},this.ensureImagePowerOfTwo=!1,this.handlerUrl=null,this.textureLoader=null,this.textureManager=new r.TaskManager,this.enableCompressedTexture=!1,this.enableSmallTexture=!1,this.enablePkgTexture=!1,this.enableTexturePkgGz=!0,this.enableOrgTexture=!1,this.enableDdsTexture=!1,this.texturePkgLoadState=void 0,this.textureCount=0,this.pkgTextureMap={},this.pkgTextureArrayBufferMap={},this.texturePkgMap={},this.delayLoadTexture=!1,this.delayMaxCount=50,this.pkgCount=0,this.pkgLoadedCount=0,this.pkgLoadedParseCount=10,this.taskRunner=new r.LoadTaskRunner(5),this.delayLoadedTextureMap={},this.parsedMaterialMap={},this.textureNameMap={},this.basisTextureLoader=r.MaterialUtil.getBasisTextureLoader(),this.viewer=e,this.alphaMapArray=[],this.materialParams={}}destroy(){this.instanceMaterials=null,this.materials=null,this.textures=null,this.lightmaps=null,this.textureCount=void 0,this.handlerUrl=null,this.textureLoader=null,this.textureConfig=null,this.textureManager=null,this.pkgTextureMap=null,this.pkgTextureArrayBufferMap=null,this.texturePkgMap=null,this.delayLoadTexture=void 0,this.delayMaxCount=void 0,this.pkgCount=void 0,this.pkgLoadedCount=void 0,this.taskRunner=null,this.textureNameMap=null,this.alphaMapArray=null,this.parsedMaterialMap=null}disposeInstanceMaterials(e){var t=this.instanceMaterials;for(var i in t){var r=t[i];if(r instanceof Array)for(var n=0,a=r.length;n<a;n++)r[n].dispose();else r.dispose()}}disposeMaterials(e){for(var t in this.materials)this.materials[t].dispose();this.disposeInstanceMaterials(e)}updateMaterialsValue(e,t,i,r){let n=(e,t,i,r)=>{e&&e.hasOwnProperty(t)&&(r&&0==e.receiveIBL||(e[t]=i,void 0!==e.refreshUniforms&&e.refreshUniforms(),e.needsUpdate=!0))},a=this.materials;for(const e in a){let s=a[e];n(s,t,i,r)}let s=this.instanceMaterials;for(const e in s){let a=s[e];if(a instanceof Array)for(let e=0,s=a.length;e<s;e++)n(a[e],t,i,r);else n(a,t,i,r)}e.filter.materialSelector.getCustomizedMaterials({override:!0,isolate:!0,frozen:!0}).map((e=>{n(e,t,i,r)}))}enableColorWithoutLight(e){var t,i=this.materials,r=this.instanceMaterials;if(e){for(var n in i)(t=i[n])&&(t.defines.USE_COLORWITHOUTLIGHT="",t.needsUpdate=!0);for(var n in r)if(t=r[n])if(t instanceof Array)for(var a=0,s=t.length;a<s;a++)t[a].defines.USE_COLORWITHOUTLIGHT="",t[a].needsUpdate=!0;else t.defines.USE_COLORWITHOUTLIGHT="",t.needsUpdate=!0}else{for(var n in i)(t=i[n])&&(delete t.defines.USE_COLORWITHOUTLIGHT,t.needsUpdate=!0);for(var n in r)if(t=r[n])if(t instanceof Array)for(a=0,s=t.length;a<s;a++)delete t[a].defines.USE_COLORWITHOUTLIGHT,t[a].needsUpdate=!0;else delete t.defines.USE_COLORWITHOUTLIGHT,t.needsUpdate=!0}}_onLoadTexture(e){this.textureCount--,this.textureCount<=0&&e&&e()}_loadTextureByCrypto(e,t,i,n){let a=null,s=THREE.DefaultLoadingManager.getHandler(e);if(null!==s)a=s.load(e,t);else{a=new THREE.Texture,a.src=e;const i=e.lastIndexOf("/"),o=e.substring(i+1);if(this.textureNameMap[o]=a,this.enablePkgTexture&&o in this.pkgTextureMap){const e=new THREE.FileLoader;e.setResponseType("arraybuffer");const i=this.handlerUrl.texturePkgFileName(r.Compatibility.useMergeTexturePkg,this.enableTexturePkgGz,this.pkgTextureMap[o].pkg,this.pkgTextureMap[o].type),s=this.handlerUrl.textureUrl(i),l=this.pkgTextureMap[o].offset,d=this.pkgTextureMap[o].length;if(i in this.pkgTextureArrayBufferMap){const e=this.pkgTextureArrayBufferMap[i].slice(l,l+d);this.creatTextureImage(a,e,t,n)}else e.load(s,(e=>{this.pkgTextureArrayBufferMap[i]=e;const r=e.slice(l,l+d);this.creatTextureImage(a,r,t,n)}),(e=>{void 0!==n&&n(e)}))}else{const i=i=>{const n=new Blob([i],{type:"jpeg"});let s=new Image;s.onload=function(){a.image=r.MaterialUtil.ensurePowerOfTwo(s),a.needsUpdate=!0,t&&t(a)},s.onerror=i=>{console.log(`${e} load failed`),t(a)},s.src=URL.createObjectURL(n)},o=e=>{void 0!==n&&n(e)},l=()=>new Promise(((t,i)=>{s=new TEST.CryptoResourceLoader,s.loadURL(e,t,i)}));r.Storage.IndexedDBHelper.loadWithStorage("ModelData",e,l,i,o)}}return a}_loadCompressedTexture(e,t,i,n){const a=(e=e.substring(0,e.lastIndexOf("."))+".dds").lastIndexOf("/"),s=e.substring(a+1),o=new THREE.DDSLoader;if(this.enableDdsTexture&&s in this.pkgTextureMap){const e=this.handlerUrl.texturePkgFileName(r.Compatibility.useMergeTexturePkg,this.enableTexturePkgGz,this.pkgTextureMap[s].pkg,this.pkgTextureMap[s].type),i=(this.handlerUrl.textureUrl(e),this.pkgTextureMap[s].offset),n=this.pkgTextureMap[s].length,a=this.pkgTextureArrayBufferMap[e].slice(i,i+n);o.loadBuffer(a,t)}else o.load(e,t,i,(e=>{void 0!==n&&n(e)}))}_loadBasisTexture(e,t,i,n){const a=(e=e.substring(0,e.lastIndexOf("."))+".basis").lastIndexOf("/"),s=e.substring(a+1),o=this.basisTextureLoader;if(o.detectedSupport||o.detectSupport(this.viewer.getRenderer()),s in this.pkgTextureMap){const e=this.handlerUrl.texturePkgFileName(r.Compatibility.useMergeTexturePkg,this.enableTexturePkgGz,this.pkgTextureMap[s].pkg,this.pkgTextureMap[s].type),i=(this.handlerUrl.textureUrl(e),this.pkgTextureMap[s].offset),n=this.pkgTextureMap[s].length,a=this.pkgTextureArrayBufferMap[e].slice(i,i+n),l=new Blob([a],{});if(o.supportsImageBitmap&&o.supportsImageBitmap(l)){const i=e;o.loadFromBlob(i,l,t)}else{const e=(window.URL||window.webkitURL).createObjectURL(l);o.load(e,t)}}else o.load(e,t,i,(e=>{void 0!==n&&n(e)}))}creatTextureImage(e,t,i,n){(new TEST.CryptoResourceLoader).load(t,(t=>{const a=new Blob([t],{type:"jpeg"});let s=new Image;s.onload=()=>{e.image=r.MaterialUtil.ensurePowerOfTwo(s),e.needsUpdate=!0,i&&i(e)},s.onerror=e=>{n&&n(e)},s.src=URL.createObjectURL(a)}))}_parseTextureJson(e,t,i,n){let a=[];const s=window.TEST||{},o=i.type,l=i.data;let d=t.textureUrl(l.sourceFile);const h=this.enableSmallTexture&&l.texture_small;if(this.textureLoader=null,l.basis)this.textureLoader=this._loadBasisTexture;else if(!h&&this.enableCompressedTexture&&l.dds)this.textureLoader=this._loadCompressedTexture;else if(s.CryptoResourceLoader&&(this.textureLoader=this._loadTextureByCrypto),h){const e=d.lastIndexOf(".");d=d.substring(0,e)+"_s"+d.substring(e)}this.textures[e.name]=a,this.textureLoader(d,(t=>{t.encoding=THREE.GammaEncoding,t.repeat.fromArray([l.scale[0],l.scale[1]]),t.offset.fromArray([l.offset[0],l.offset[1]]),t.rotation=THREE.Math.degToRad(l.angle),r.MaterialUtil.updateUVMatrix(t),l.repeatU&&(t.wrapS=THREE.RepeatWrapping),l.repeatV&&(t.wrapT=THREE.RepeatWrapping),t.texturetype=o,"reliefMap"==o&&(t.texturetype="bumpMap"),l.dataType&&"NormalMap"==l.dataType&&(t.texturetype="normalMap"),l.alpha&&"map"==o&&(t.texturetype="alphaMap"),null!=l.depth&&(t.depth=l.depth),t&&a.push(t),this._updateMaterialTexture(e,a),this._onLoadTexture(n)}),void 0,(()=>{this._updateMaterialTexture(e,a),this._onLoadTexture(n)}))}_updateMaterialTexture(e,t){if(t){if(void 0===t.length)e.map=t;else for(var i=0;i<t.length;i++){switch(!this.ensureImagePowerOfTwo&&t[i].image&&(t[i]instanceof THREE.CompressedTexture?THREE.Math.isPowerOfTwo(t[i].image.width)&&THREE.Math.isPowerOfTwo(t[i].image.height)||console.log("Warning: THREE.CompressedTexture is not power of two."):t[i].image=r.MaterialUtil.ensurePowerOfTwo(t[i].image)),t[i].texturetype){case"map":e.map=t[i];break;case"bumpMap":e.bumpMap=t[i],null!=t[i].depth&&(e.bumpScale=t[i].depth);break;case"specularMap":e.specularMap=t[i];break;case"alphaMap":e.useAlphaMap=!0,e.alphaTest=.01,e.map=t[i],this._initAlphaMapProperty(e),this.alphaMapArray.push(e);break;case"emissiveMap":e.emissiveMap=t[i];break;case"environmentMap":e.envMap=t[i];break;case"normalMap":e.normalMap=t[i],t[i].depth&&e.normalScale.set(t[i].depth,t[i].depth);break;default:console.warn("This map type is not supported yet:",t[i].texturetype)}t[i].wrapS!=THREE.RepeatWrapping&&(e.useClampToBorder=!0)}e.refreshUniforms(),e.needsUpdate=!0}else e.textureColor&&e.color.setStyle(e.textureColor),e.needsUpdate=!0}updateTexturePkgMapping(e,t){!0===this.texturePkgLoadState&&(this._updateTextureMapping(e,t),t&&t()),void 0===this.texturePkgLoadState&&(this.texturePkgLoadState=!1,this._getPgkTexture((()=>{!0!==this.delayLoadTexture?(this.lastTextureEnabled=!1,this._updateTextureMapping(e,t),t&&t()):t&&t()})))}delayUpdateTexturePkgMapping(e,t){if(!1===this.delayLoadTexture)return void(t&&t());const i=new THREE.FileLoader;i.setResponseType("arraybuffer");for(let n=0;n<this.pkgCount;++n){const a=this.pkgTextureArrayBufferMap[n],s=this.handlerUrl.textureUrl(a);this.taskRunner.push(i,s,void 0,(i=>{this.pkgLoadedCount++,this.pkgTextureArrayBufferMap[a]=i.context;this.texturePkgMap[n].map((e=>{this.delayLoadedTextureMap[e]=!0})),this.pkgLoadedCount%this.pkgLoadedParseCount!=this.pkgLoadedParseCount-1&&this.pkgLoadedCount!==this.pkgCount||(this.lastTextureEnabled=!1,r.GlobalData.EnableTextureMapping=!0,this._updateTextureMapping(e,t))}))}}_parseMapTexture(e,t,i,r){for(let n=0,a=i.length;n<a;n++)this.textureCount++,this._parseTextureJson(e,t,i[n],r)}_createTextureMap(e){this.textures;const t=this.materials;let i=this.handlerUrl,n=this.textureDataArray;this.textureCount=0;for(const a in t){let s=t[a];if(s){const t=r.Utils.splitCombinedKeyString(a,"_")[0];let o=n[parseInt(t)];o&&this._parseMapTexture(s,i,o,e)}}}_updateTextureMapping(e,t){let i=r.GlobalData.EnableTextureMapping;this.ensureImagePowerOfTwo;if(this.lastTextureEnabled!==i){var n=this.textures,a=this.materials;let v=this.handlerUrl,y=this.textureDataArray;if(e)var s=e.manager.getMaterialOverrideSet(),o=s?s.materialsByName:null,l=s?s.textures:null;var d=this.instanceMaterials;let M=e=>{const t=e.data;let i=t.sourceFile;if(!0===t.basis){const e=i.lastIndexOf(".");return i=i.substring(0,e)+".basis",i}if(this.enableSmallTexture&&t.texture_small){const e=i.lastIndexOf(".");i=i.substring(0,e)+"_s"+i.substring(e)}return i};var h,c;if(i){for(h in this.textureCount=0,a)if(c=a[h]){var u=n[p=r.Utils.splitCombinedKeyString(h,"_")[0]];let e=y?y[parseInt(p)]:null;if(e&&this.delayLoadTexture){let i=!0;const r=e.length;for(let t=0;t<r;++t){const r=M(e[t]);i=i&&this.delayLoadedTextureMap[r]}i&&!this.parsedMaterialMap[p]&&(this.parsedMaterialMap[p]=!0,this._parseMapTexture(c,v,e,t));continue}if(!this.delayLoadTexture||this.delayLoadTexture&&!e||!0!==this.texturePkgLoadState){this._updateMaterialTexture(c,u);continue}}for(h in d)if(c=d[h]){u=n[p=r.Utils.splitCombinedKeyString(h,"_")[0]];var p,m=p.split("#")[0];if(l&&l[m]&&(u=l[m]),c instanceof Array)for(var f=0,g=c.length;f<g;f++)this._updateMaterialTexture(c[f],u);else this._updateMaterialTexture(c,u)}for(h in o)if(c=o[h]){u=l[m=h.split("#")[0]];this._updateMaterialTexture(c,u)}this.ensureImagePowerOfTwo=!0}else{for(h in a)(c=a[h])&&(c.map=null,c.needsUpdate=!0);for(h in d)if(c=d[h])if(c instanceof Array)for(f=0,g=c.length;f<g;f++)c[f].pureColor&&(c[f].color.setStyle(c[f].pureColor),c[f].map=null,c[f].needsUpdate=!0),c[f].map=null,c[f].needsUpdate=!0;else c.pureColor&&(c.color.setStyle(c.pureColor),c.map=null,c.needsUpdate=!0),c.map=null,c.needsUpdate=!0;for(h in o)(c=o[h])&&(c.map=null,c.needsUpdate=!0,c.pureColor&&c.color.setStyle(c.pureColor))}this.lastTextureEnabled=i}}updateMaterials(e){this._updateBasicMaterialsForIBL(e),this._updateInstanceMaterialsForIBL(e),this._updateFilterMaterialsForIBL(e)}_updateBasicMaterialsForIBL(e){const t=this.materials,i=Object.keys(t),r=e.manager.scene.IBLMaps;i.forEach((e=>{const i=t[e];i.IBLMaps=r,i.refreshUniforms()}))}_updateInstanceMaterialsForIBL(e){const t=this.instanceMaterials,i=Object.keys(t),r=e.manager.scene.IBLMaps;i.forEach((e=>{const i=t[e];i instanceof Array?i.forEach((e=>{e.IBLMaps=r,e.refreshUniforms()})):(i.IBLMaps=r,i.refreshUniforms())}))}_updateFilterMaterialsForIBL(e){const t=e.filter.materialSelector.getCustomizedMaterials({override:!0,isolate:!0,frozen:!0}),i=e.manager.scene.IBLMaps;t.forEach((e=>{e.IBLMaps=i,e.refreshUniforms()}))}_updateIBL(e){if(r.GlobalData.IBL){this.updateMaterials(e);var t=e.manager.viewer.getIBLManager().IBLParams;for(var i in t)this.updateMaterialsValue(e,i,t[i])}}_changeBasicMaterials(t,i){const r=this.materials;Object.keys(r).forEach((n=>{const a=r[n],s=e(t,a,i);s&&(r[n]=s)}))}_changeInstanceMaterials(t,i){const r=this.instanceMaterials;Object.keys(r).forEach((n=>{const a=r[n];if(a instanceof Array)a.forEach(((r,n)=>{const s=e(t,r,i);s&&(a[n]=s)}));else{const s=e(t,a,i);s&&(r[n]=s)}}))}_changeFilterMaterials(t,i){const r=t.filter.materialSelector.getAll();t.filter.materialSelector.getCustomizedMaterials({override:!0,isolate:!0,frozen:!0}).forEach((n=>{const a=e(t,n,i);a&&(r[n.name]=a)}))}changeAllMaterials(e,t){this._changeBasicMaterials(e,t),this._changeInstanceMaterials(e,t),this._changeFilterMaterials(e,t)}_switchNewStyleBasicMaterials(e,t){const i=this.materials;Object.keys(i).forEach((e=>{const n=i[e],a=r.MaterialUtil.getMaterialParameters(n),s=t?r.MaterialUtil.createNewStyleMaterial(a):r.MaterialUtil.createStandardMaterial(a);s.name=e,i[e]=s}))}_switchNewStyleInstanceMaterials(e,t){const i=this.instanceMaterials;Object.keys(i).forEach((e=>{const n=i[e];if(n instanceof Array)n.forEach(((e,i)=>{const a=r.MaterialUtil.getMaterialParameters(e),s=t?r.MaterialUtil.createNewStyleMaterial(a):r.MaterialUtil.createStandardMaterial(a);s.name=i,n[i]=s}));else{const a=r.MaterialUtil.getMaterialParameters(n),s=t?r.MaterialUtil.createNewStyleMaterial(a):r.MaterialUtil.createStandardMaterial(a);s.name=e,i[e]=s}}))}_switchNewStyleFilterMaterials(e,t){const i=e.filter.materialSelector.getAll();e.filter.materialSelector.getCustomizedMaterials({override:!0,isolate:!0,frozen:!0}).forEach((e=>{const n=r.MaterialUtil.getMaterialParameters(e),a=t?r.MaterialUtil.createNewStyleMaterial(n):r.MaterialUtil.createStandardMaterial(n);a.name=e.name,i[e.name]=a}))}switchNewStyleMaterial(e,t){this._switchNewStyleBasicMaterials(e,t),this._switchNewStyleInstanceMaterials(e,t),this._switchNewStyleFilterMaterials(e,t)}updateLightmapMaterial(e){if(!this.materials[e]){var t=this.materials,i=r.Utils.splitCombinedKeyString(e,"_"),n=i[0],a=i[1];if(a){var s=r.MaterialUtil.getMaterialParameters(t[n]);s.lights=!1;var o=this.lightmaps[a];s.lightMap=o,s.lightMapIntensity=r.GlobalData.LightmapIntensity,this.materials[e]=r.MaterialUtil.createStandardMaterial(s)}}}getInstanceMaterialById(e,t){if(this.instanceMaterials[e])return this.instanceMaterials[e];var i=r.Utils.splitCombinedKeyString(e,"_"),n=i[0],a=i[1],s=r.MaterialUtil.getMaterialParameters(t.manager.getOverrideMaterialByName(n)||this.getMaterialById(n)),o=s.transparent;if(t.lightmap&&a){s.lights=!1;var l=this.lightmaps[a];s.lightMap=l,s.lightMapIntensity=r.GlobalData.LightmapIntensity}var d=r.MaterialUtil.createInstanceMaterial(s,!0);d.transparent=!1,d.name=e;var h=r.MaterialUtil.createInstanceMaterial(s,!0);return h.transparent=!0,h.name=e,r.GlobalData.TranslucentDepthDisabled&&(h.depthWrite=!1),o===d.transparent?d._primary=!0:h._primary=!0,void 0===this.materials[e]&&(this.materials[e]=r.MaterialUtil.createStandardMaterial(s)),this.instanceMaterials[e]=[d,h],this.instanceMaterials[e]}getMaterialById(e){return this.materials[e]||r.MaterialUtil.getDefaultStandardMaterial()}_loadFileByPromise(e,t){let i=new THREE.FileLoader;return new Promise((function(n,a){r.Storage.IndexedDBHelper.loadWithStorage("ModelData",e,(()=>new Promise(((r,n)=>{i.setResponseType(t),i.load(e,r)}))),(e=>{"string"==typeof e?n(JSON.parse(e)):null==e.metadata?a(e):n(e)}))}))}_loadTexturePkgByIndex(e,t){const i=this.pkgTextureArrayBufferMap[e],n=this.handlerUrl.textureUrl(i),a=new THREE.FileLoader;r.Storage.IndexedDBHelper.loadWithStorage("ModelData",n,(()=>new Promise(((e,t)=>{a.setResponseType("arraybuffer"),a.load(n,e,void 0,t)}))),(e=>{this.pkgTextureArrayBufferMap[i]=e,t()}))}_getPgkTexture(e){if(!this.enablePkgTexture)return this._createTextureMap(e),void(this.texturePkgLoadState=!0);const t=this.handlerUrl;let i=[];this.pkgTextureMap={},this.texturePkgMap={};const n=1==this.enableTexturePkgGz?"gzip":"json",a=".gz"==r.GlobalData.ZipResourcePostfix?"gzip":"json";r.Compatibility.useMergeTexturePkg?i.push(this._loadFileByPromise(t.texturePkgIndexUrl(this.enableTexturePkgGz),n)):(this.enableOrgTexture&&i.push(this._loadFileByPromise(t.texturePkgOrgIndexUrl(),a)),this.enableSmallTexture&&i.push(this._loadFileByPromise(t.texturePkgSmallIndexUrl(),a))),Promise.all(i.map((e=>e.catch((e=>e))))).then((t=>{let i=0;for(const e in t)for(const n in t[e].textures){this.pkgTextureMap[n]=t[e].textures[n],null==this.pkgTextureMap[n].type&&(this.pkgTextureMap[n].type=t[e].metadata.type);const a=this.pkgTextureMap[n].pkg;void 0===this.texturePkgMap[a]?this.texturePkgMap[a]=[n]:this.texturePkgMap[a].push(n);const s=this.handlerUrl.texturePkgFileName(r.Compatibility.useMergeTexturePkg,this.enableTexturePkgGz,t[e].textures[n].pkg,t[e].metadata.type);s in this.pkgTextureArrayBufferMap||(this.pkgTextureArrayBufferMap[i]=s,this.pkgTextureArrayBufferMap[s]={},this.textureManager.addTask(i),i++)}if(this.pkgCount=i,i>this.delayMaxCount)return this.delayLoadTexture=!0,void(e&&e());this.textureManager.processTasks(this._loadTexturePkgByIndex.bind(this),void 0,(()=>{this.texturePkgLoadState=!0,this._createTextureMap(e)}))})).catch((function(e){console.log("promise reject failed reason",e)}))}getImageByUrl(e){const t=e.lastIndexOf("/"),i=e.substring(t+1),r=this.textureNameMap[i];return r&&r.image}_initAlphaMapProperty(e){e.forInstance||(e.transparent=e.opacity<1),e._transparent=e.transparent,e._transparent||(e.transparent=!1,e.blending=THREE.CustomBlending,e.blendSrc=THREE.SrcAlphaFactor,e.blendDst=THREE.OneMinusSrcAlphaFactor,e.blendSrcAlpha=THREE.OneFactor,e.blendDstAlpha=THREE.OneMinusSrcAlphaFactor,e.priorityOrderId=1)}updateAlphaMapProperties(e){const t=e?THREE.NormalBlending:THREE.CustomBlending,i=!!e,r=e?0:1;this.alphaMapArray.forEach((e=>{e._transparent||(e.transparent=i,e.blending=t,e.blendSrc=THREE.SrcAlphaFactor,e.blendDst=THREE.OneMinusSrcAlphaFactor,e.blendSrcAlpha=THREE.OneFactor,e.blendDstAlpha=THREE.OneMinusSrcAlphaFactor,e.priorityOrderId=r)}))}getBackMaterials(){if(this.backMaterials)return this.backMaterials;let e={},t=this.materials;for(const i in t){let r=t[i].clone();r.transparent=!1,r.useForCap=!0,r.uniforms.useForCap.value=!0,r.side=THREE.BackSide,r.shift=.5,r.uniforms.shift.value=.5,e[i]=r}let i=this.instanceMaterials,r={};for(const e in i){let t=i[e][0].clone();t.transparent=!1,t.useForCap=!0,t.uniforms.useForCap.value=!0,t.side=THREE.BackSide,t.shift=.5,t.uniforms.shift.value=.5,r[e]=t}return this.backMaterials={batchMaterials:e,instanceMaterials:r},this.backMaterials}storeMaterialParam(e){this.materialParams[e.name]||(this.materialParams[e.name]={color:e.color.clone(),opacity:e.opacity,transparent:e.transparent,map:e.map})}restoreMaterialParam(e){let t=this.materialParams[e.name];t&&(e.color.setRGB(t.color.r,t.color.g,t.color.b),e.opacity=t.opacity,e.transparent=t.transparent,e.map=t.map,e.needsUpdate=!0)}}}(),r.SourceObjectManager=class{constructor(){this.hiddenUserIdMap={}}destroy(){this.hiddenUserIdMap=null}hideByUserId(e,t,i){this.hiddenUserIdMap||(this.hiddenUserIdMap={}),this.hiddenUserIdMap[i]||(this.hiddenUserIdMap[i]={}),this.hiddenUserIdMap[i][e]=!!t}cancelHiddenByUserId(e){if(this.hiddenUserIdMap)for(const t in this.hiddenUserIdMap)delete this.hiddenUserIdMap[t][e]}cancelAllHidden(){this.hiddenUserIdMap=null}isHidden(e,t){if(!this.hiddenUserIdMap)return!1;if(t)return!!this.hiddenUserIdMap[t]&&this.hiddenUserIdMap[t][e];for(const t in this.hiddenUserIdMap)if(this.hiddenUserIdMap[t][e])return!0;return!1}hasHidden(){return!r.Utils.isEmptyObject(this.hiddenUserIdMap)}},function(){let e=new THREE.Vector3,t=new THREE.Box3;class i extends THREE.EventDispatcher{constructor(e){super(),r.GlobalData.IsMobile&&(r.GlobalData.maxObjectNumInPool=6e3,r.GlobalData.maxDrawCacheNum=4e3),this.viewer=e,this.scene=new r.Scene({gisMode:e.gisMode}),this.filterHelper=new r.ModelView.FilterHelper(this),this.filter=new r.ModelView.FilterDirector(this),this.crossOrigin=!0,this.loadingModels={},this.materialPool=null,this.occlusionCamera=null,this.containsCamera=!1,this.highPriorityCategories={inner:{},outer:{}},this.octantToObjectMap={},this.sceneState=new r.SceneStateHelper(this),this.rotation=new THREE.Quaternion,this.boundingBox=new THREE.Box3,this.IBLMaterial=!1,this.selectPriority=!0,this.materialOverrideSet=null,this._renderStateChanged=!1,this.explosionManager=new r.ExplosionManager(this),this.isDrawableModel=!1,this.filterApplied=!1,this.modelLoader=new r.ModelLoader,this.modelCollection=new r.ModelView.LayerCollection,this.blinkManager=new r.BlinkManager(this),this.rootMatrix=void 0,this.firstLoadedBmdLayer=void 0,this.demLoaded=!1,this.tilesCacheScheduler=new r.TilesCacheScheduler({maximumMemoryUsage:e._options.maxMemoryUsage}),this._unifiedLengthUnits=r.GlobalData.SceneUnit,this._firstModelLoaded=!1}destroy(){this.removeAllEventListener(),this.modelCollection.destroy(),this.blinkManager.destroy(),this.modelCollection=null,this.octantToObjectMap=null,this.materialPool&&(this.materialPool.destroy(),this.materialPool=null),this.occlusionCamera&&(this.occlusionCamera=null),this.loadOnDemandDirector&&(this.loadOnDemandDirector.destroy(),this.loadOnDemandDirector=null),this.highPriorityCategories=null,this.rotation=null,this.boundingBox=null,this.scene.destroy(),this.scene=null,this.filter.destroy(),this.filter=null,this.sceneState.destroy(),this.sceneState=null,this.filterHelper.destroy(),this.filterHelper=null,this.explosionManager.destroy(),this.explosionManager=null,this.rootMatrix=void 0,this.tilesCacheScheduler.destroy(),this.tilesCacheScheduler=void 0,this.viewer=void 0}getFilter(){return this.filter}getFilterHelper(){return this.filterHelper}removeAllEventListener(){this._listeners=void 0}_updateOcclusionCamera(e){var t=e.near,i=e.distanceFromWorldToDrawing(this.getMatrixWorldGlobal(),r.GlobalData.OcclusionDistanceToCamera);this.occlusionCamera?this.occlusionCamera.copy(e):this.occlusionCamera=e.clone(),this.occlusionCamera.setNearFar(t,i),this.occlusionCamera.updateMVP()}_clearMaterialPool(){this.materialPool&&this.materialPool.clear()}acquireMaterial(){return this.materialPool?this.materialPool.acquire():null}getObjectPool(){return this.scene.getObjectPool()}getFrustumFromOcclusionCamera(){return this.occlusionCamera.getFrustum(!1)}getOcclusionCamera(){return this.occlusionCamera}prepareScene(e,t){r.GlobalData.BatchMergeEnabled||(this.clearPool(),this.clearObjectRangeFromOctantMap()),r.GlobalData.OcclusionTranslucentEnabled&&(null==this.materialPool&&(this.materialPool=new r.ExpandableObjectPool,this.materialPool.init(r.MaterialEx,50)),this._clearMaterialPool(),this._updateOcclusionCamera(e)),this.modelCollection.traverse((i=>{i.isLoaded()&&!i.isEmptyScene()&&i.prepare(e,t)})),this.dealStateChanged()}clearPool(){this.scene.getObjectPool().clear()}clearObjectRangeFromOctantMap(){this.octantToObjectMap&&this.octantToObjectMap.pool&&(this.octantToObjectMap.pool={})}setDrawableModel(e){this.isDrawableModel=e}isDrawable(){return this.isDrawableModel}load(e,t,i){const n=this._preLoad(e);return r.Utils.isDefined(n)?(this._loadModels(n,t,i),n.modelId):null}_preLoad(e){let t=e.modelId;const i=r.Utils.clone(e,!0);if(i.notifyProgress=void 0===e.notifyProgress||e.notifyProgress,r.Utils.isDefined(t)){t=`${t}`;const e=this.modelCollection.getById(t);if(r.Utils.isDefined(e))return this.setDrawableModel(!0),e.isVisible()||(e.setVisible(!0),e.dispatchEvent({type:r.EVENTS.ON_LOAD_COMPLETE,modelId:t})),console.log(`[BIMFACE ERROR]: Failed to load model with id ${t}, a model with the same ID already exists`),null}else{t=e.modelFileId,t=r.Utils.isDefined(t)?`${t}`:r.Utils.getEncodedString(e.databagId);const i=this.modelCollection.getById(t);if(r.Utils.isDefined(i)){t=`${t}_${(new Date).getTime()}`}}return i.modelId=t,i.fileId=e.modelFileId||t,i}_loadModels(e,t,i){const n=this,{modelId:a}=e;return new Promise(((s,o)=>{this.modelLoader.load({viewer:this.viewer,manager:this,parameters:e,parseCfgFinish:t,debut:i},(function(t){n.modelCollection.add(t);const i=!r.Utils.isDefined(e.defaultVisible)||e.defaultVisible;t.setVisible(i),n.checkIfFirstLodedModelLayer({isBmdLayer:t.isBmdLayer,unit:t.getUnit()}),t.setLengthUnitsMatrix(n.getModelLengthUnitsMatrix(t)),delete n.loadingModels[a];const o=t.load(e.notifyProgress);o&&o.then((()=>{n.updateRenderLoopState(),s(t)})).catch((()=>{n.modelCollection.remove(a,!0),console.log(`[BIMFACE ERROR]:some error occurred when load config of model ${a}`)}))}),(function(){n.modelCollection.remove(a,!0),delete n.loadingModels[a],console.log(`[BIMFACE ERROR]:some error occurred when load model ${a}`)}))}))}_loadModelWithShell(e,t,i){if(!e.shell)return null;if(!e.shell.databagId)return null;const n=r.Utils.clone(e.shell,!0),a=void 0!==n.modelId?`${n.modelId}_shell`:`${r.Utils.getEncodedString(n.databagId)}_shell`;n.modelId=a,n.loadShell=!0,n.serverUrl=void 0!==n.serverUrl?n.serverUrl:e.serverUrl;const s=void 0===e.visible||e.visible,o=!s;return n.visible=s,n.notifyProgress=!1,e.visible=o,this._loadModels(n,t,i).then((r=>{this._loadModels(e,t,i).then((e=>{e.shellModel=r}))})).catch((()=>{this._loadModels(e,t,i),console.log(`can not load shell-${e.shell.databagId}`)})),a}setModelShellVisibility(e,t){var i=this.modelCollection.getById(e);i&&i.shellModel&&(t?(i.setVisible(!1),i.shellModel.setVisible(!0)):(i.setVisible(!0),i.shellModel.setVisible(!1)))}unload(e,t){e+="",this.modelCollection.remove(e,!0)&&(this.updateScene(),this.updateFilterManager(),this.getFilter().calculateVisibleComponentsBbox(),t&&t())}unloadAll(){const e=this.modelCollection.getIds();for(let t=0,i=e.length;t<i;++t)this.unload(e[t]);this.clearPool()}addModel(e){this.modelCollection.add(e)}removeModel(e){this.modelCollection.remove(e)}getModelIds(e){if(e){var t=[];return this.modelCollection.traverse((function(e){e.isUseable()&&t.push(e.id)})),t}return this.modelCollection.getIds()}setModelVisibility(e,t,i){var r=this.getModel(e);r&&(r.setVisible(t),i&&i())}updateScene(e,t){this._needUpdateScene()&&(t=r.Utils.defaultValue(t,{}),this.updateSceneBoundingBox(e),this.updateSceneRootMatrix(t.forceUpdate),this.updateSceneRenderable(),this.updateOctreeNode())}_needUpdateScene(){return this.modelCollection.some((e=>{if(!e.isEmptyScene()){let t=e.getBoundingBoxWorld();if(t&&!t.isEmpty())return!0}}))}_calculateSceneBoundingBox(){t.makeEmpty();const e=this.boundingBox.clone();e.makeEmpty();const i=[];if(this.modelCollection.traverse((n=>{if(n.isEmptyScene())return;if(n.loadMpkOnDemand)return void i.push(n);const a=n.getBoundingBoxWorld();a&&!a.isEmpty()&&(t.isEmpty()?(t.copy(a),n.id!=r.ObjectGroupType.TILEGROUP&&e.copy(a)):(t.union(a),n.id!=r.ObjectGroupType.TILEGROUP&&e.union(a)))})),this.hasLoadOnDemandDirector()){const i=this.getLoadOnDemandDirector().getBoundingBoxOnDemand();i&&(t.union(i),e.union(i))}else i.forEach((i=>{const r=i.getBoundingBoxWorld();r&&(t.union(r),e.union(r))}));t.isEmpty()&&(t=new THREE.Box3(new THREE.Vector3(-r.GlobalData.SceneSize,-r.GlobalData.SceneSize,-r.GlobalData.SceneSize),new THREE.Vector3(r.GlobalData.SceneSize,r.GlobalData.SceneSize,r.GlobalData.SceneSize)),e.copy(t)),this.boundingBox.copy(t),this.scene.setBoundingBoxWorld(t),this.scene.setBoundingBoxWorldWithoutDEM(e);let n=this.viewer.getUserInputEditor();n.resetMobileParamsByBox&&n.resetMobileParamsByBox(t)}updateSceneBoundingBox(e){if(r.Utils.isDefined(e)){const t=e.getBoundingBoxWorld();if(!r.Utils.isDefined(t))return;return this.scene.updateBoundingBoxWorld(t),e.id!=r.ObjectGroupType.TILEGROUP&&this.scene.updateBoundingBoxWorldWithoutDEM(t),this.boundingBox.expandByPoint(t.min),void this.boundingBox.expandByPoint(t.max)}this._calculateSceneBoundingBox()}updateSceneRootMatrix(t){var i=!1,n=new THREE.Matrix4,a=new THREE.Matrix4,s=new THREE.Quaternion;if(this.modelCollection.some((e=>{if(!e.isEmptyScene()&&e.hasTransforms())return s.copy(e.getTransforms().rotation),n.copy(e.getTransforms().transformMatrix),i=e.getTransforms().octreeTransformed,!0})),t=r.Utils.defaultValue(t,!1),void 0===this.rootMatrix||t){if(this.scene.setTransformMatrixGlobal(n),i)a.copy(n);else{var o=new THREE.Vector3(1,1,1),l=r.GlobalData.SceneSize,d=this.boundingBox.getSize(e),h=l/Math.max(d.x,d.y,d.z);o.multiplyScalar(h),a.makeRotationFromQuaternion(s),a.scale(o)}this.rootMatrix=a}this.scene.updateWorldMatrixByMatrix(this.rootMatrix),this.traverseValidModels((function(e){e.updateMatrix()}))}updateSceneRenderable(){var e=r.GlobalData.maxObjectNumInPool,t=[],i=0;this.modelCollection.traverse((e=>{e.isEmptyScene()||(i+=e.getStatistics().renderableTotalForPool,t.push(e.id))}));for(var n=0,a=0,s=t.length;a<s;++a){var o=t[a],l=this.modelCollection.getById(o),d=Math.floor(l.getStatistics().renderableTotalForPool/i*e);d>l.getStatistics().renderableTotalForPool&&(d=l.getStatistics().renderableTotalForPool),l.setRenderableCount(d),n+=d}this.scene.resizePool(n>e?e:n)}getVisibleLayersBoundingBox(){const e=new THREE.Box3;return this.modelCollection.traverse((t=>{if(t.id==r.ObjectGroupType.TILEGROUP)return;if(!t.isCulled())return;if(t.isEmptyScene())return;const i=t.getBoundingBoxWorld();r.Utils.isDefined(i)&&(i.isEmpty()||(e.expandByPoint(i.min),e.expandByPoint(i.max)))})),e.applyMatrix4(this.scene.geometryGroup.matrix),e}updateOctreeNode(){this.modelCollection.traverse((e=>{e.isLoaded()&&!e.isEmptyScene()&&e.updateOctreeNode(!0)}))}updateMaterials(){this.modelCollection.traverse((e=>{e.isLoaded()&&!e.isEmptyScene()&&e.updateMaterials()}))}updateMaterialsValue(e,t,i){this.modelCollection.traverse((r=>{r.isLoaded()&&!r.isEmptyScene()&&r.updateMaterialsValue(e,t,i)})),this.materialOverrideSet&&this.materialOverrideSet.updateMaterialsValue(e,t)}enableColorWithoutLight(e){this.modelCollection.traverse((t=>{t.isLoaded()&&!t.isEmptyScene()&&t.enableColorWithoutLight(e)}))}switchNewStyleMaterial(e){this.modelCollection.traverse((t=>{t.isLoaded()&&!t.isEmptyScene()&&t.switchNewStyleMaterial(e)}))}changeAllMaterials(e){this.IBLMaterial!=e&&(this.modelCollection.traverse((t=>{t.isEmptyScene()||t.changeAllMaterials(e)})),this.IBLMaterial=e)}setCrossOrigin(e){this.crossOrigin=e}getMatrixWorldGlobal(){return this.scene.getMatrixWorldGlobal()}hasModel(){return this.modelCollection.some((e=>e.isLoaded()))}hasModelDataReady(){if(0===this.modelCollection.length)return!1;return!this.modelCollection.some((e=>!e.isDataReady()))}isLayerData(){return this.modelCollection.some((e=>e.isLayerData()))}getModel(e){const t=this.modelCollection.getById(e+"");return t&&t.isLoaded()?t:null}getFirstModel(){return this.modelCollection.getByIndex(0)}showOctreeBox(e){if(r.GlobalData.ShowOctant){var t=this.scene.getOrCreateObjectGroup(r.ObjectGroupType.OCTREENODE,{pickable:0,priority:2});if(t.visible=!0,0===t.children.length){var i=new THREE.Box3(e.min,e.max),n=new r.BBoxNode(i,16711680);t.add(n),n.updateMatrixWorld(!0),function e(i){for(var n=0,a=i.childOctants.length;n<a;n++){var s=i.childOctants[n],o=new THREE.Box3(s.min,s.max),l=255;l<<=5*s.depth;var d=new r.BBoxNode(o,l);t.add(d),d.updateMatrixWorld(!0),e(s)}}(e)}}else this.scene.removeObjectGroupByName(r.ObjectGroupType.OCTREENODE)}setCategoriesToHighPriority(e,t){var i=e.length;if(!(i<1))for(var r=this.highPriorityCategories[t]={},n=0;n<i;++n)r[e[n]]=!0}getCategoriesFromHighPriority(e){return this.highPriorityCategories[e]}clearCategoriesFromHighPriority(e){this.highPriorityCategories[e]={}}clearAllCategoriesFromHighPriority(){this.clearCategoriesFromHighPriority("inner"),this.clearCategoriesFromHighPriority("outer")}calculateCameraModelRelation(e){var t=!1;this.modelCollection.traverse((i=>{i.isLoaded()&&!i.isEmptyScene()&&(i.calculateCameraModelRelation(e),t=t||i.containsCamera)})),this.containsCamera=t}getCameraNameList(){var e=[];return this.modelCollection.traverse((t=>{t.isEmptyScene()||(e=e.concat(t.getCameraNameList()))})),e}getCamera(e){var t=null;return this.modelCollection.some((i=>{if(!i.isEmptyScene()&&(t=i.getCamera(e)))return!0})),t}getNumOfElements(e){var t=0;if(e){var i=this.modelCollection.getById(e);i&&!i.isEmptyScene()&&(t+=i.getStatistics().numOfElements)}else this.modelCollection.traverse((e=>{e.isEmptyScene()||(t+=e.getStatistics().numOfElements)}));return t}getNumOfRenderables(e){var t=0;if(e){var i=this.modelCollection.getById(e);i&&!i.isEmptyScene()&&(t+=i.getStatistics().renderableTotal)}else this.modelCollection.traverse((e=>{e.isEmptyScene()||(t+=e.getStatistics().renderableTotal)}));return t}getNumOfTriangles(e){var t=0;if(e){var i=this.modelCollection.getById(e);i&&!i.isEmptyScene()&&(t+=i.getStatistics().numOfTriangles)}else this.modelCollection.traverse((e=>{e.isEmptyScene()||(t+=e.getStatistics().numOfTriangles)}));return t}getNumOfVertices(e){var t=0;if(e){var i=this.modelCollection.getById(e);i&&!i.isEmptyScene()&&(t+=i.getStatistics().numOfVertices)}else this.modelCollection.traverse((e=>{e.isEmptyScene()||(t+=e.getStatistics().numOfVertices)}));return t}getScene(){return this.scene}getOctreeRoots(){var e={};return this.modelCollection.traverse((t=>{if(t.isLoaded()&&!t.isEmptyScene()){var i=t.getEncodedDatabagId();e[i]=[],t.getOctreeRoots(e[i])}})),e}addMeshToOctantMap(e,t,i){var r=this.octantToObjectMap;r[e]||(r[e]={}),r[e].mesh||(r[e].mesh={}),r[e].mesh[t]||(r[e].mesh[t]=[]),r[e].mesh[t].push(i)}addNodeInfoToOctantMap(e,t,i){var r=this.octantToObjectMap;r[e]||(r[e]={}),r[e].info||(r[e].info={}),r[e].info[t]||(r[e].info[t]=[]),r[e].info[t].push(i)}removeNodeInfoFromOctantMap(e,t){var i=this.octantToObjectMap;if(i[e]&&i[e].info&&i[e].info[t.cellId])for(var r=i[e].info[t.cellId],n=r.length-1;n>=0;n--)if(t.nodeId===r[n].nodeId){r.splice(n);break}}clearNodeInfosFromOctantMap(e){var t=this.octantToObjectMap;t[e]&&t[e].info&&(t[e]=null)}removeAllFromOctantMap(e){var t=this.octantToObjectMap;t[e]&&delete t[e]}clearMeshFromOctantMap(e){var t=this.octantToObjectMap;t[e]&&t[e].mesh&&delete t[e].mesh}removeMeshFromOctantMap(e,t){var i=this.octantToObjectMap;if(i[e]&&i[e].mesh&&i[e].info){var r,n=i[e].info[t.cellId];for(r=n.length-1;r>=0;r--)if(t.nodeId===n[r].nodeId){n.splice(r);break}i[e].mesh[t.nodeId]&&delete i[e].mesh[t.nodeId]}}getOctantMap(){return this.octantToObjectMap}isFilterApplied(){return this.filterApplied}setFilterApplied(e){this.filterApplied=e}applyFilter(e){if(void 0===e)this.traverseValidModels((function(e){e.applyFilter()}));else{var t=this.getModel(e);t&&t.applyFilter()}this.setFilterApplied(!0)}applySelection(e){if(this.selectPriority=!0,void 0===e)this.traverseValidModels((function(e){e.applySelection()}));else{var t=this.getModel(e);t&&t.applySelection()}}clearSelection(e){if(this.selectPriority=!0,void 0===e)this.traverseValidModels((function(e){e.clearSelection()}));else{var t=this.getModel(e);t&&t.clearSelection()}}applyHover(e){if(r.GlobalData.Hover)if(void 0===e)this.traverseValidModels((function(e){e.applyHover()}));else{var t=this.getModel(e);t&&t.applyHover()}}clearHover(e){if(r.GlobalData.Hover)if(void 0===e)this.traverseValidModels((function(e){e.clearHover()}));else{var t=this.getModel(e);t&&t.clearHover()}}chooseRendering(e,t,i){if(!this.firstChooseRendering){if(this.firstChooseRendering=!0,t)return r.GlobalData.DynamicScheduling=!0,r.GlobalData.BatchMergeEnabled=!0,void(r.GlobalData.IncrementRender=!1);switch(console.log("Maximum Memory (M):",e.maxMemorySize),r.GlobalData.Renderer){case r.EnumRendererType.FULL:r.GlobalData.BatchMergeEnabled=!0,r.GlobalData.IncrementRender=!1;break;case r.EnumRendererType.INCREMENT:r.GlobalData.BatchMergeEnabled=!1,r.GlobalData.IncrementRender=!0;break;default:if(r.GlobalData.BatchMergeEnabled=!1,r.GlobalData.IncrementRender=!0,r.Compatibility.isUseDoubleMatrix(i.metadata.version)&&r.Compatibility.isUseINCREMENTByBmpkCount(i.metadata.bmpks,i.metadata.mpks))break;e.maxMemorySize<=r.GlobalData.MaxMemeorySizeToFullRender&&(r.GlobalData.BatchMergeEnabled=!0,r.GlobalData.IncrementRender=!1)}}}isUserIdExist(e,t){if(void 0===t)return this.modelCollection.some((t=>t.isUserIdExist(e)));const i=this.getModel(t);return!(!i||!i.isUserIdExist(e))}getNodeInfosByUserId(e,t){var i;return this.filterHelper.executeId(e,((e,t)=>{i&&0!==i.length||(i=e.getNodeInfosByUserId(t))}),t),i&&i.length>0?i:null}getNodeInfos(){let e={};return this.modelCollection.traverse((t=>{let i=t.getAllNodeInfos();i&&(e[t.id]=i)})),e}getMaterialByNodeId(e,t,i){var r=this.modelCollection.getById(e);if(!r)return null;for(var n=r.getNodeInfosByUserId(t),a=-1,s=0,o=n.length;s<o;s++)if(n[s].nodeId===i){a=s;break}return-1!==a?r.getMaterialByMaterialId(n[a].materialId):null}getImageByUrl(e){const t=this.modelCollection._layers;for(let i=0;i<t.length;i++){if(!t[i].dataUrl)continue;const r=e.lastIndexOf("/")-8;if(e.substring(0,r)!=t[i].dataUrl.databagPath)continue;const n=t[i].getImageByUrl(e);if(n)return n}return null}getNodeInfoByNodeId(e,t,i){var r=this.modelCollection.getById(e);if(!r)return null;for(var n=r.getNodeInfosByUserId(t),a=-1,s=0,o=n.length;s<o;s++)if(n[s].nodeId===i){a=s;break}return-1!==a?n[a]:null}getComponentInfoByUserId(e,t){var i=this.getNodeInfosByUserId(e,t);if(i&&i.length>0){for(var r=new THREE.Box3,n=[],a=0,s=i.length;a<s;a++){let e=i[0].transformMatrix||new THREE.Matrix4,t=i[a].boundingBox.clone().applyMatrix4(e);r.union(t),-1===n.indexOf(i[a].materialId)&&n.push(i[a].materialId)}return{userId:e,state:0,materials:n,boundingBox:r,userData:i[0].userData}}return null}getBoundingBoxByIds(e,t){var i=this.viewer,n=new THREE.Box3;for(var a in e)if(!this.isHiddenUserId(a)){var s=this.getComponentInfoByUserId(a,t);if(s)n.union(s.boundingBox);else{var o=r.ExtrudeBodyManager.getInstance(i).getNode(a);if(o){var l=o.geometry.boundingBox.clone();o.matrix&&l.applyMatrix4(o.matrix),n.union(l)}}}return n}createMaterialOverrideSet(e,t){this.materialOverrideSet=new r.MaterialOverriderSet(e,t),r.GlobalData.EnableTextureMapping=!0}getMaterialOverrideSet(){return this.materialOverrideSet}getOverrideMaterialByNodeInfo(e,t){return this.materialOverrideSet?this.materialOverrideSet.getOverrideMaterialByNodeInfo(e,t):null}getOverrideMaterialByName(e){return this.materialOverrideSet?this.materialOverrideSet.getOverrideMaterialByName(e):null}loadOverrideMaterialsByDemand(e,t){if(this.materialOverrideSet){var i=this.getConditions();this.materialOverrideSet.loadByDemand(i,e,t)}else t&&t()}getConditions(){let e={},t={},i={};return this.modelCollection.traverse((r=>{const n=r.getAllNodeInfos();if(n)for(const r in n)if(n.hasOwnProperty(r))for(let a=0,s=n[r].length;a<s;a++){const s=n[r][a].userData;t[n[r][a].userId]=!0,i[s.systemTypeId]=!0,e[s.familyId]=!0}})),{familyIds:e,elementIds:t,systemTypeIds:i}}isHiddenUserId(e){return this.modelCollection.some((t=>t.isHiddenUserId(e)))}updateMeshNodes(){r.GlobalData.BatchMergeEnabled&&this.modelCollection.traverse((e=>{!e.isEmptyScene()&&e.isLoaded()&&e.updateMeshNodes()}))}getMinDistanceObjects(e,t){var i={},{modelId:n,objectId:a}=this.filterHelper.distributeId(e),{modelId:s,objectId:o}=this.filterHelper.distributeId(t);if(n&&s&&n===s){var l=this.modelCollection.getById(n);l.minDistanceObjects={},l.getMeshesByUserIds(a,o),l.minDistanceObjects[a].length>0&&l.minDistanceObjects[o].length>0&&(i[e]=l.minDistanceObjects[a],i[t]=l.minDistanceObjects[o])}else{if(n){var d=this.modelCollection.getById(n);d.minDistanceObjects={},d.getMeshesByUserIds(a,a),d.minDistanceObjects[a].length>0&&(i[e]=d.minDistanceObjects[a])}if(s){var h=this.modelCollection.getById(s);h.minDistanceObjects={},h.getMeshesByUserIds(o,o),h.minDistanceObjects[o].length>0&&(i[t]=h.minDistanceObjects[o])}if(n&&s||this.modelCollection.traverse((r=>{"ExtrudeBodyManager"!==r.id&&"ExternalComponent"!==r.id&&(r.minDistanceObjects={},r.getMeshesByUserIds(a,o),!i[e]&&r.minDistanceObjects[a].length>0&&(i[e]=r.minDistanceObjects[a]),!i[t]&&r.minDistanceObjects[o].length>0&&(i[t]=r.minDistanceObjects[o]))})),!i[e]||!i[t]){function c(e,t,r){var n={};n.mesh=e;var a=new THREE.Matrix4;r?a.multiplyMatrices(r,e.matrix):a=e.matrix,n.matrix=a;var s=e.geometry.boundingBox;s||(e.geometry.computeBoundingBox(),s=n.mesh.geometry.boundingBox);var o=s.clone().applyMatrix4(a);n.boundingBox=o,i[t]||(i[t]=[]),i[t].push(n)}var u=this.scene.getObjectGroup("ExternalComponentManager");if(!u)return;for(var p=u.children,m=0,f=p.length;m<f;m++){var g=p[m];g.name!=e&&g.name!=t||(r.Utils.isGroupObject(g)?g.traverseVisible((function(e){r.Utils.isMeshObject(e)&&c(e,g.name,g.matrix)})):c(g,g.name))}}}return i[e]&&i[t]?i:null}adjustVisibility(e){r.GlobalData.BatchMergeEnabled&&this.modelCollection.traverse((t=>{t.adjustVisibility&&t.adjustVisibility(e)}))}changeVisibilityOfSelectedObjects(e){r.GlobalData.BatchMergeEnabled&&this.modelCollection.traverse((t=>{t.changeVisibilityOfSelectedObjects&&t.changeVisibilityOfSelectedObjects(e)}))}changeVisibilityOfNonSelectedObjects(e){r.GlobalData.BatchMergeEnabled&&this.modelCollection.traverse((t=>{t.changeVisibilityOfNonSelectedObjects&&t.changeVisibilityOfNonSelectedObjects(e)}))}adjustInstanceVisibility(e){r.GlobalData.BatchMergeEnabled&&this.modelCollection.traverse((t=>{t.adjustInstanceVisibility&&t.adjustInstanceVisibility(e)}))}changeInstanceVisibilityOfSelectedObjects(e){r.GlobalData.BatchMergeEnabled&&this.modelCollection.traverse((t=>{t.changeInstanceVisibilityOfSelectedObjects&&t.changeInstanceVisibilityOfSelectedObjects(e)}))}changeInstanceVisibilityOfNonSelectedObjects(e){r.GlobalData.BatchMergeEnabled&&this.modelCollection.traverse((t=>{t.changeInstanceVisibilityOfNonSelectedObjects&&t.changeInstanceVisibilityOfNonSelectedObjects(e)}))}adjustDemVisibility(e){r.GlobalData.BatchMergeEnabled&&this.modelCollection.traverse((t=>{t.isDemLayer&&t.tileManager&&(e?t.tileManager.showAllLayers(!0):t.tileManager.hideAllLayers(!1))}))}restoreVisibilityOfObjects(){r.GlobalData.BatchMergeEnabled&&this.modelCollection.traverse((e=>{e.restoreVisibilityOfObjects&&e.restoreVisibilityOfObjects()}))}isSelectPriority(){return this.selectPriority}getSceneState(){return this.sceneState}disposeBufferAfterVbo(){r.GlobalData.EnableDisposeBufferAfterVbo&&this.modelCollection.traverse((e=>{e.disposeBufferAfterVbo()}))}getSourceObjectManager(){return this.sourceObjectManager||(this.sourceObjectManager=new r.SourceObjectManager),this.sourceObjectManager}isHiddenSourceObjectUserId(e,t){return!!this.sourceObjectManager&&this.sourceObjectManager.isHidden(e,t)}hasHiddenSourceObjectUserId(){return!!this.sourceObjectManager&&this.sourceObjectManager.hasHidden()}traverseModels(e,t){this.modelCollection.traverseIf(e,t)}traverseLoadedModels(e){this.traverseValidModels(e)}traverseValidModels(e){this.viewer.globalRendering||this.modelCollection.traverse((t=>{t.isUseable()&&e(t)}))}dealStateChanged(){if(this.hasModelDataReady()&&(this.isRenderStateChanged()||this.filter.isStateChanged())){if(this.isRenderStateChanged()&&this.setRenderStateChanged(!1),this.filter.isStateChanged())r.GlobalData.EnableShadowMap&&this.viewer.updateShadowMap(),(e=this.scene.fillClipPlane)&&e.update(),this._updateMaterialProperties(),this.filter.disableStateChanged();if(this.filter.isVisibleStateChanged()){var e=this.scene.fillClipPlane,t=this.scene.clipPlanes,i=e&&e.isEnabled()?e:t;i&&r.GlobalData.ClippingCapsType>0&&(i.clearCapsWireframe(),i.reCalculateClippingIds(!0)),this.filter.disableVisibleStateChanged()}this.applyFilter(),this.viewer.viewshedManager&&this.viewer.viewshedManager.update()}}_updateMaterialProperties(){this._updateExposureShift()}_updateExposureShift(){const e=this.viewer.getExposureShift();void 0!==e&&this.setExposureShift(e)}setExposureShift(e){const t=e>0?-.4*e+.5:-4*e+.5;this.updateMaterialsValue("shift",t)}setRenderStateChanged(e){this._renderStateChanged=e}isRenderStateChanged(){return this._renderStateChanged}hasLoadOnDemandDirector(){return!!this.loadOnDemandDirector}getLoadOnDemandDirector(){return this.loadOnDemandDirector||(this.loadOnDemandDirector=new r.LoadOnDemandDirector(this)),this.loadOnDemandDirector}checkLayerDataLoading(){return!!(this.isLayerData()&&this.hasLoadOnDemandDirector()&&this.getLoadOnDemandDirector().isLoading())&&(this.filter.isStateChanged()&&this.filter.disableStateChanged(),!0)}updateFilterManager(){var e=this.getNodeInfos(),t=this.getFilter();t.clearFilterManager(),t.initFilterManager(e),t.isStateChanged()&&t.disableStateChanged(),this.updateMeshNodes(),this.applyFilter()}isDrawingBoardlineEnabled(){return!(!r.GlobalData.DrawingBoardlineEnabled||r.GlobalData.DrawingStyle!==r.DrawingStyle.BOARDLINE&&r.GlobalData.DrawingStyle!==r.DrawingStyle.SHADINGWITHLINE)}isOnlyWireframe(){return r.GlobalData.DrawingStyle===r.DrawingStyle.BOARDLINE}calculateClippingIds(e,t){this.modelCollection.traverse((i=>{i.calculateClippingIds(e,t)}))}calculateClippingContours(e){this.modelCollection.traverse((t=>{t.calculateClippingContours(e)}))}getInstanceDepthMaterial(){if(this.instanceDepthMaterial)return this.instanceDepthMaterial;var e=new r.InstancedDepthMaterial;return e.depthPacking=THREE.RGBADepthPacking,this.instanceDepthMaterial=e,this.instanceDepthMaterial}createDemModel(e,t){if(this.removeModel(r.ObjectGroupType.TILEGROUP),e=e||{},!r.GlobalData.EnableLodDemDom&&!t){const t=new r.DemModel(this.viewer,this,{});return t.loadTile(this.viewer,e),this.addModel(t),t}const i=e.loadConfig?e:{loadConfig:e};i.manager=this,this.checkIfFirstLodedModelLayer({isDemLayer:!0});const n=r.ModelFactory.globe(this.viewer,i);return this.addModel(n),n.load(),n}createLineModel(e){const t=new r.LineModel(this.viewer,this,e);return this.addModel(t),t.load(),t}setDemLoadedState(e){this.demLoaded=e,this.updateRenderLoopState()}isSceneChanged(){return this.isRenderStateChanged()||this.filter.isStateChanged()}isMeterUnit(){const e=this.getSceneUnit();if(e)return e===r.EnumLengthlUnits.Meter;let t=!1;return this.modelCollection.traverse((e=>{e._config&&e._config.metadata&&("bimtile"===e._config.metadata.asset||"bimtiles"===e._config.metadata.asset||"m"===e._config.metadata.model_unit)&&(t=!0)})),t}checkIfFirstLodedModelLayer(e){void 0===this.firstLoadedBmdLayer&&(this.firstLoadedBmdLayer=!!e.isBmdLayer,this._setDefaultSceneUnit(this.firstLoadedBmdLayer,e.unit),r.Tile.TileMath.unitScale=r.GlobalData.SceneUnit===r.EnumLengthlUnits.Millimeter?1e3:1)}updateRenderLoopState(){if(!this.viewer||!this.viewer.rendererManager)return;const e=this.viewer.rendererManager.renderer;e&&e.isBatched&&(this._isLoadedBmdModelOnly()?e.setRenderLoop(!1):e.setRenderLoop(!0))}_isLoadedBmdModelOnly(){return this.firstLoadedBmdLayer&&!this.demLoaded}_setDefaultSceneUnit(e,t){e?void 0===this.getSceneUnit()&&this.setSceneUnit(t):this.setSceneUnit(r.EnumLengthlUnits.Meter)}setSceneUnit(e){r.GlobalData.SceneUnit=e}getSceneUnit(){return r.GlobalData.SceneUnit}getModelLengthUnitsMatrix(e){const t=this.getSceneUnit()===r.EnumLengthlUnits.Meter,i=e.getUnit()===r.EnumLengthlUnits.Meter;return t&&!i?r.Utils.MatrixFromMillimeterToMeter:!t&&i?r.Utils.MatrixFromMeterToMillimeter:void 0}hasLoadedModel(){return this._firstModelLoaded}checkIfFirstModelLoaded(){this._firstModelLoaded||(this._firstModelLoaded=!0)}holdAllNodeGroupVisibility(){this.modelCollection.traverse((e=>{e.holdNodeGroupVisibility&&e.holdNodeGroupVisibility()}))}resetAllNodeGroupVisibility(){this.modelCollection.traverse((e=>{e.resetNodeGroupVisibility&&e.resetNodeGroupVisibility()}))}hideAllWireframes(){this.modelCollection.traverse((e=>{e.hideWireframeGroup&&e.hideWireframeGroup()}))}showAllWireframes(){this.modelCollection.traverse((e=>{e.showWireframeGroup&&e.showWireframeGroup()}))}hideAllExcludeWireframes(){this.modelCollection.traverse((e=>{e.hideExcludeWireframeGroup&&e.hideExcludeWireframeGroup()}))}showAllExcludeWireframes(){this.modelCollection.traverse((e=>{e.showExcludeWireframeGroup&&e.showExcludeWireframeGroup()}))}updateAlphaMapProperties(e){this.modelCollection.traverse((t=>{t.materialManager&&t.materialManager.updateAlphaMapProperties&&t.materialManager.updateAlphaMapProperties(e)}))}}r.ModelManager=i}(),r.ModelView.FilterDirector=class{constructor(e){this.modelManager=e,this.observerForSceneState=null,this.filterHelper=this.modelManager.getFilterHelper()}destroy(){this.modelManager=null,this.observerForSceneState=null,this.filterHelper=null}clear(e){if(void 0===e)this.modelManager.traverseValidModels((function(e){e.getFilter()&&e.getFilter().clear()}));else{var t=this.modelManager.getModel(e);t&&t.getFilter()&&t.getFilter().clear()}}setIsolateMaterial(e,t){if(void 0===t)this.modelManager.traverseValidModels((function(t){t.getFilter()&&t.getFilter().setIsolateMaterial(e)}));else{var i=this.modelManager.getModel(t);i&&i.getFilter()&&i.getFilter().setIsolateMaterial(e)}}resetIsolateMaterial(e){if(void 0===e)this.modelManager.traverseValidModels((function(e){e.getFilter()&&e.getFilter().resetIsolateMaterial()}));else{var t=this.modelManager.getModel(e);t&&t.getFilter()&&t.getFilter().resetIsolateMaterial()}}setFrozonMaterial(e,t){if(void 0===t)this.modelManager.traverseValidModels((function(t){t.getFilter()&&t.getFilter().setFrozonMaterial(e)}));else{var i=this.modelManager.getModel(t);i&&i.getFilter()&&i.getFilter().setFrozonMaterial(e)}}getFrozonMaterial(e){var t,i=[];if(void 0===e)this.modelManager.traverseValidModels((function(e){e.getFilter()&&(t=e.getFilter().getFrozonMaterial())&&i.push(t)}));else{var r=this.modelManager.getModel(e);r&&r.getFilter()&&(t=r.getFilter().getFrozonMaterial())&&i.push(t)}return i[0]}_getMaterialByName(e,t){var i,r=[];if(void 0===t)this.modelManager.traverseValidModels((function(t){t.getFilter()&&(i=t.getFilter()._getMaterialByName(e))&&r.push(i)}));else{var n=this.modelManager.getModel(t);n&&n.getFilter()&&(i=n.getFilter()._getMaterialByName(e))&&r.push(i)}return r[0]}_isolate(e,t,i){var n=e.getFilter();switch(i){case"hide":n.setIsolateConditions(t,r.EnumIsolateState.HIDDEN_OTHERS);break;case"translucent":n.setIsolateConditions(t,r.EnumIsolateState.TRANSLUCENT_OTHERS);break;default:console.log("no this isolate state : "+i)}}isolate(e,t,i){this.filterHelper.executeConditions(e,((e,i)=>{this._isolate(e,i,t)}),i)}setConditions(e,t,i){this.filterHelper.executeConditions(t,((t,i)=>{t.getFilter().setConditions(e,i)}),i)}setWireFrameVisibilityCondition(e,t){const i=this.modelManager.getModel(t);i&&i.getFilter()&&i.getFilter().setWireFrameVisibilityCondition(e)}isHidden(e,t){var i=!1;return this.filterHelper.executeId(e,((e,t)=>{i||(i=e.getFilter().isHidden(t))}),t),i}isFrozen(e,t){var i=!1;return this.filterHelper.executeId(e,((e,t)=>{i||(i=e.getFilter().isFrozen(t))}),t),i}isIsolate(e){var t=!1;if(void 0===e)this.modelManager.traverseModels((function(e){e.getFilter()&&(t=e.getFilter().isIsolate())}),(function(e){return t||!e.isUseable()}));else{var i=this.modelManager.getModel(e);i&&i.getFilter()&&(t=i.getFilter().isIsolate())}return t}isFiltering(e){var t=!1;if(void 0===e)this.modelManager.traverseModels((function(e){e.getFilter()&&(t=e.getFilter().isFiltering())}),(function(e){return t||!e.isUseable()}));else{var i=this.modelManager.getModel(e);i&&i.getFilter()&&(t=i.getFilter().isFiltering())}return t}getMatchIds(e,t){var i=[];return this.filterHelper.executeConditions(e,((e,t)=>{i=i.concat(e.getFilter().getMatchIds(t))}),t),i}isMatchConditions(e,t,i){var r=!1;return this.filterHelper.executeConditions(t,((t,i)=>{r=r||t.getFilter().getObjectInfoManager().isMatchConditions(e,i)}),i),r}deactivateByIds(e,t){this.filterHelper.executeIds(e,((e,t)=>{e.getFilter().deactivateByIds(t)}),t)}addToOverrideListByColor(e,t,i){this.filterHelper.executeIds(e,((e,i)=>{e.getFilter().addToOverrideListByColor(i,t)}),i)}addToOverrideListByOpacity(e,t,i){let n=(e,i)=>{if(e&&e instanceof r.BimTilesModel){for(let r=0;r<i.length;r++)e.getFilter().addToModifyOpacityList(i[r],t);return void e.getFilter().enableStateChanged()}let n={};for(let r=0;r<i.length;r++){let a=!0;const s=i[r];let o=null,l=null;const d=e.getFilter().getObjectInfoManager().getMaterial(s);if(d)o=d,o.originOpacity=d.opacity,o.name.indexOf("_opacity")<0&&(a=!1),o.map&&(l=o.map);else{const t=e._handler.getGeometryBuffersByUserId(s);if(t&&t.length>0){l=null;for(let e=0;e<t.length;e++){const i=t[e],r=this.modelManager.getMaterialByNodeId(i.databagId,s,i.nodeId);if(r.map){l=r.map,o=r;break}r.dispose()}const e=t[0];o||(o=this.modelManager.getMaterialByNodeId(e.databagId,s,e.nodeId))}}if(o){const e=o.color.getHex();o.dispose();let i=e+"";l&&(i+="_"+l.uuid),a&&(i+="_opacity"),n[i]?n[i].ids.push(s):(n[i]={color:{color:e,opacity:t},ids:[s]},a&&(n[i].color.setByOpacity=a),l&&(n[i].color.map=l)),l&&l.dispose(),l=null}}for(const t in n){const i=n[t];e.getFilter().addToOverrideListByColor(i.ids,i.color)}};if("conditions"===e.type){var a=e.param,s=(e,t)=>{e.getFilter().addToOpacityListByConditions(t,((t,i)=>{i&&n(e,t)}))};this.filterHelper.executeConditions(a,s,i)}else{var o=e.param;s=(e,t)=>{n(e,t)},this.filterHelper.executeIds(o,s,i)}}removeOverrideListByOpacity(e,t){let i=(e,i)=>{if(e&&e instanceof r.BimTilesModel)return e.getFilter().removeModifyOpacityList(i),void e.getFilter().enableStateChanged();let n=[];for(let t=0;t<i.length;t++){const r=i[t];let a=e.getFilter().getObjectInfoManager().getMaterial(r);a&&a.name.indexOf("_opacity")<0||n.push(r)}this.addToOverrideListByColor(n,null,t)};if("conditions"===e.type){const r=e.param,n=(e,t)=>{e.getFilter().addToOpacityListByConditions(t,((t,r)=>{r&&i(e,t)}))};this.filterHelper.executeConditions(r,n,t)}else{const r=e.param,n=(e,t)=>{i(e,t)};this.filterHelper.executeIds(r,n,t)}}addToOverrideListByMaterial(e,t,i){this.filterHelper.executeConditions(e,((e,i)=>{e.getFilter().addToOverrideListByMaterial(i,t)}),i)}addToOverrideListByConditions(e,t,i){this.filterHelper.executeConditions(e,((e,i)=>{e.getFilter().addToOverrideListByConditions(i,t)}),i)}addToOverrideListByMaterialAndId(e,t,i){this.filterHelper.executeIds(e,((e,i)=>{e.getFilter().addToOverrideListByMaterialAndId(i,t)}),i)}clearAllOverrideList(e){if(void 0===e)this.modelManager.traverseValidModels((function(e){e.getFilter()&&e.getFilter().clearAllOverrideList()}));else{var t=this.modelManager.getModel(e);t&&t.getFilter()&&t.getFilter().clearAllOverrideList()}}addToOverrideListForWireFrameByColor(e,t,i){this.filterHelper.executeIds(e,((e,i)=>{e.getFilter().addToOverrideListForWireFrameByColor(i,t)}),i)}addToOverrideListForWireFrameByConditions(e,t,i){this.filterHelper.executeConditions(e,((e,i)=>{e.getFilter().addToOverrideListForWireFrameByConditions(i,t)}),i)}addToLocalClippingList(e,t){var i=this,n=function(e,t){if(e&&e instanceof r.BimTilesModel)for(var n=e.getFilter().getLocalClippingList(),a=0;a<t.length;a++)n[s=t[a]]||e.getFilter().addToLocalClippingList(s);else if(e&&e.getFilter()&&e._handler)for(n=e.getFilter().getLocalClippingList(),a=0;a<t.length;a++){var s;if(!n[s=t[a]]){var o=e._handler.instancedManager.meshManager;o.traverseNodeIdxMapByUserId(s,(function(t,i){if(o.getInstanceGeometries(t)){var r=o.getMaterialIdByMeshId(t),n=e.materialManager.getInstanceMaterialById(r,e);if(n)if(n instanceof Array)for(var a=0;a<n.length;a++){var s=n[a];e.getFilter().addInstanceMaterialForClip(s.uuid,s)}else e.getFilter().addInstanceMaterialForClip(n.uuid,n)}}));var l=!0,d=i.modelManager.getNodeInfosByUserId(s,e.id);if(d)for(var h=0;h<d.length;h++)if(!d[h].instanceOrNot){l=!1;break}if(l)e.getFilter().addToLocalClippingList(s);else{var c=e._handler.getGeometryBuffersByUserId(s);if(c&&c.length>0)for(var u=0;u<c.length;u++){var p=c[u],m=i.modelManager.getMaterialByNodeId(p.databagId,s,p.nodeId);if(m){var f={};f.color=m.color.getHex(),f.opacity=m.opacity,f.side=m.side,m.map&&(f.map=m.map);var g=e.getWireframeMaterial(),v={};v.color=g.color.getHex(),v.opacity=g.opacity,v.side=g.side,e.getFilter().addToLocalClippingList(s,f,v,p.nodeId)}}}}}};if("conditions"===e.type){var a=e.param,s=(e,t)=>{e.getFilter().addToLocalClippingListByConditions(t,((t,i)=>{i&&n(e,t)}))};this.filterHelper.executeConditions(a,s,t)}else{var o=e.param;s=(e,t)=>{n(e,t)},this.filterHelper.executeIds(o,s,t)}}clearLocalClippingList(e){if(e){var t=this.modelManager.getModel(e);t&&t.getFilter()&&t.getFilter().clearLocalClippingList()}else this.modelManager.traverseValidModels((function(e){e.getFilter()&&e.getFilter().clearLocalClippingList()}))}addToIsolateList(e,t,i){this.filterHelper.executeIds(e,((e,i)=>{e.getFilter().addToIsolateList(i,t)}),i)}setIsolateConditions(e,t,i){this.filterHelper.executeConditions(e,((e,i)=>{e.getFilter().setIsolateConditions(i,t)}),i)}clearIsolation(e){if(void 0===e)this.modelManager.traverseValidModels((function(e){e.getFilter()&&e.getFilter().clearIsolation()}));else{var t=this.modelManager.getModel(e);t&&t.getFilter()&&t.getFilter().clearIsolation()}}clearAllIsolateConditions(e){if(void 0===e)this.modelManager.traverseValidModels((function(e){e.getFilter()&&e.getFilter().clearAllIsolateConditions()}));else{var t=this.modelManager.getModel(e);t&&t.getFilter()&&t.getFilter().clearAllIsolateConditions()}}showByIds(e,t){this.filterHelper.executeIds(e,((e,t)=>{e.getFilter().showByIds(t)}),t)}showByConditions(e,t){this.filterHelper.executeConditions(e,((e,t)=>{e.getFilter().showByConditions(t)}),t)}hideByIds(e,t){this.filterHelper.executeIds(e,((e,t)=>{e.getFilter().hideByIds(t)}),t)}hideByConditions(e,t){this.filterHelper.executeConditions(e,((e,t)=>{e.getFilter().hideByConditions(t)}),t)}hideOthersByConditions(e,t){this.filterHelper.executeConditions(e,((e,t)=>{e.getFilter().hideOthersByConditions(t)}),t)}showAll(e){if(void 0===e)this.modelManager.traverseValidModels((function(e){e.getFilter()&&e.getFilter().showAll()}));else{var t=this.modelManager.getModel(e);t&&t.getFilter()&&t.getFilter().showAll()}}hideAll(e){if(void 0===e)this.modelManager.traverseValidModels((function(e){e.getFilter()&&e.getFilter().hideAll()}));else{var t=this.modelManager.getModel(e);t&&t.getFilter()&&t.getFilter().hideAll()}}showScene(e){if(void 0===e)this.modelManager.traverseValidModels((function(e){e.getFilter()&&e.getFilter().showScene()}));else{var t=this.modelManager.getModel(e);t&&t.getFilter()&&t.getFilter().showScene()}}clearInactivatedIdMap(e){if(void 0===e)this.modelManager.traverseValidModels((function(e){e.getFilter()&&e.getFilter().clearInactivatedIdMap()}));else{var t=this.modelManager.getModel(e);t&&t.getFilter()&&t.getFilter().clearInactivatedIdMap()}}makeTranslucentByIds(e,t){this.filterHelper.executeIds(e,((e,t)=>{e.getFilter().makeTranslucentByIds(t)}),t)}makeTranslucentByConditions(e,t){this.filterHelper.executeConditions(e,((e,t)=>{e.getFilter().makeTranslucentByConditions(t)}),t)}makeTranslucentOthersByIds(e,t){this.filterHelper.executeIds(e,((e,t)=>{e.getFilter().makeTranslucentOthersByIds(t)}),t)}opaqueByIds(e,t){this.filterHelper.executeIds(e,((e,t)=>{e.getFilter().opaqueByIds(t)}),t)}opaqueByConditions(e,t){this.filterHelper.executeConditions(e,((e,t)=>{e.getFilter().opaqueByConditions(t)}),t)}opaqueAll(e){if(void 0===e)this.modelManager.traverseValidModels((function(e){e.getFilter()&&e.getFilter().opaqueAll()}));else{var t=this.modelManager.getModel(e);t&&t.getFilter()&&t.getFilter().opaqueAll()}}_hasVisibleFilter(e){var t=!1;if(void 0===e)this.modelManager.traverseModels((function(e){e.getFilter()&&(t=e.getFilter()._hasVisibleFilter())}),(function(e){return t||!e.isUseable()}));else{var i=this.modelManager.getModel(e);i&&i.getFilter()&&(t=i.getFilter()._hasVisibleFilter())}return t}_hasPickableFilter(e){var t=!1;if(void 0===e)this.modelManager.traverseModels((function(e){e.getFilter()&&(t=e.getFilter()._hasPickableFilter())}),(function(e){return t||!e.isUseable()}));else{var i=this.modelManager.getModel(e);i&&i.getFilter()&&(t=i.getFilter()._hasPickableFilter())}return t}_hasHiddenFileIdFilter(e){var t=!1;if(void 0===e)this.modelManager.traverseModels((function(e){e.getFilter()&&(t=e.getFilter()._hasHiddenFileIdFilter())}),(function(e){return t||!e.isUseable()}));else{var i=this.modelManager.getModel(e);i&&i.getFilter()&&(t=i.getFilter()._hasHiddenFileIdFilter())}return t}_hasOverrideMaterialFilter(e){var t=!1;if(void 0===e)this.modelManager.traverseModels((function(e){e.getFilter()&&(t=e.getFilter()._hasOverrideMaterialFilter())}),(function(e){return t||!e.isUseable()}));else{var i=this.modelManager.getModel(e);i&&i.getFilter()&&(t=i.getFilter()._hasOverrideMaterialFilter())}return t}_hasTransparentFilter(e){var t=!1;if(void 0===e)this.modelManager.traverseModels((function(e){e.getFilter()&&(t=e.getFilter()._hasTransparentFilter())}),(function(e){return t||!e.isUseable()}));else{var i=this.modelManager.getModel(e);i&&i.getFilter()&&(t=i.getFilter()._hasTransparentFilter())}return t}_hasOverrideMaterialFilterForWireFrame(e){var t=!1;if(void 0===e)this.modelManager.traverseModels((function(e){e.getFilter()&&(t=e.getFilter()._hasOverrideMaterialFilterForWireFrame())}),(function(e){return t||!e.isUseable()}));else{var i=this.modelManager.getModel(e);i&&i.getFilter()&&(t=i.getFilter()._hasOverrideMaterialFilterForWireFrame())}return t}_hasRenderWithBoardlineFilter(e){var t=!1;if(void 0===e)this.modelManager.traverseModels((function(e){e.getFilter()&&(t=e.getFilter()._hasRenderWithBoardlineFilter())}),(function(e){return t||!e.isUseable()}));else{var i=this.modelManager.getModel(e);i&&i.getFilter()&&(t=i.getFilter()._hasRenderWithBoardlineFilter())}return t}_isRenderWithBoardline(e,t){var i=!1;if(void 0===t)this.modelManager.traverseModels((function(t){t.getFilter()&&(i=t.getFilter()._isRenderWithBoardline(e))}),(function(e){return i||!e.isUseable()}));else{var r=this.modelManager.getModel(t);r&&r.getFilter()&&(i=r.getFilter()._isRenderWithBoardline(e))}return i}_isVisible(e,t){var i=!0;if(void 0===t)this.modelManager.traverseModels((function(t){t.getFilter()&&(i=t.getFilter()._isVisible(e))}),(function(e){return!i||!e.isUseable()}));else{var r=this.modelManager.getModel(t);r&&r.getFilter()&&(i=r.getFilter()._isVisible(e))}return i}_isPickable(e,t){var i=!0;if(void 0===t)this.modelManager.traverseModels((function(t){t.getFilter()&&(i=t.getFilter()._isPickable(e))}),(function(e){return!i||!e.isUseable()}));else{var r=this.modelManager.getModel(t);r&&r.getFilter()&&(i=r.getFilter()._isPickable(e))}return i}initFilterManager(e,t){if(void 0===t)this.modelManager.traverseValidModels((function(t){if(t.getFilter()){var i={};i[t.id]=e[t.id]||{},t.getFilter().initFilterManager(i)}}));else{var i=this.modelManager.getModel(t);if(i&&i.getFilter()){var r={};r[t]=e[t]||{},i.getFilter().initFilterManager(r)}}}reinitFilterManager(e,t){if(void 0===t)this.modelManager.traverseValidModels((function(t){if(t.getFilter()){var i={};i[t.id]=e[t.id]||{},t.getFilter().reinitFilterManager(i)}}));else{var i=this.modelManager.getModel(t);if(i&&i.getFilter()){var r={};r[t]=e[t]||{},i.getFilter().reinitFilterManager(r)}}}clearFilterManager(e){if(void 0===e)this.modelManager.traverseValidModels((function(e){e.getFilter()&&e.getFilter().clearFilterManager()}));else{var t=this.modelManager.getModel(e);t&&t.getFilter()&&t.getFilter().clearFilterManager()}}isStateChanged(e){var t=!1,i=this.modelManager;if(void 0===e)i.traverseModels((function(e){e.getFilter()&&(t=e.getFilter().isStateChanged())}),(function(e){return t||!e.isUseable()}));else{var r=i.getModel(e);r&&r.getFilter()&&(t=r.getFilter().isStateChanged())}return t}disableStateChanged(e){var t=this.modelManager;if(void 0===e)t.traverseValidModels((function(e){e.getFilter()&&e.getFilter().disableStateChanged()}));else{var i=t.getModel(e);i&&i.getFilter()&&i.getFilter().disableStateChanged()}}isVisibleStateChanged(e){var t=!1,i=this.modelManager;if(void 0===e)i.traverseModels((function(e){e.getFilter()&&(t=e.getFilter().isVisibleStateChanged())}),(function(e){return t||!e.isUseable()}));else{var r=i.getModel(e);r&&r.getFilter()&&(t=r.getFilter().isVisibleStateChanged())}return t}disableVisibleStateChanged(e){var t=this.modelManager;if(void 0===e)t.traverseValidModels((function(e){e.getFilter()&&e.getFilter().disableVisibleStateChanged()}));else{var i=t.getModel(e);i&&i.getFilter()&&i.getFilter().disableVisibleStateChanged()}}calculateVisibleComponentsBbox(){this.modelManager.traverseValidModels((function(e){if(e.getFilter()){var t=!0;"ExternalComponent"==e.id&&(e.checkVisibleComponentsBox()||(t=!1)),t&&e.getFilter().getObjectInfoManager().calculateVisibleComponentsBbox()}}))}getVisibleComponentsBbox(){var e,t=new THREE.Box3;return this.modelManager.traverseValidModels((function(i){if(i.getFilter()&&!(e=i.getFilter().getVisibleComponentsBbox()).isEmpty()){let r=i.getTransformMatrix();e.applyMatrix4(r),t.union(e)}})),t}setObserverForSceneState(e){this.observerForSceneState=e}getObserverForSceneState(){return this.observerForSceneState}isComponentActive(e,t){var i=!1;return this.filterHelper.executeId(e,((e,t)=>{i||(i=e.getFilter().isComponentActive(t))}),t),i}needUpdateBoxAfterExplode(){var e=!1;return this.modelManager.traverseModels((function(t){t.getFilter()&&(e=t.getFilter().needUpdateBoxAfterExplode())}),(function(t){return e||!t.isUseable()})),e}getVisibleComponentSet(e){var t={};return this.modelManager.traverseValidModels((function(i){if(i.getFilter()){var r=i.getFilter().getVisibleComponentSet(e);for(var n in r)i.isUserIdExist(n)&&(t[n]=r[n])}})),t}saveState(){var e={};this.modelManager.traverseValidModels((function(t){t.getFilter()&&(e[t.id]=t.getFilter().saveState())}));for(let t in e){const i=e[t].actions;if(!i)return;const r=i.length;for(let e=0;e<r;++e){const t=i[e];if(!t.material||!t.material.map)continue;const r=t.material.clone();r.map=null,t.material=r}}return JSON.stringify(e)}loadState(e){var t=JSON.parse(e);t.version?this.modelManager.traverseValidModels((function(e){e.getFilter()&&e.getFilter().loadState(t)})):this.modelManager.traverseValidModels((function(e){e.getFilter()&&t[e.id]&&e.getFilter().loadState(t[e.id])}))}getObjectsMap(e){var t={},i=this.modelManager;if(void 0===e)i.traverseValidModels((function(e){if(e.getFilter()){var i=e.getFilter().getObjectInfoManager().getObjectsMap();for(var r in i)t[r]=i[r]}}));else{var r=i.getModel(e);if(r&&r.getFilter()){var n=r.getFilter().getObjectInfoManager().getObjectsMap();for(var a in n)t[a]=n[a]}}return t}deactivateAll(e){var t=this.modelManager;if(void 0===e)t.traverseValidModels((function(e){e.getFilter()&&e.getFilter().deactivateAll()}));else{var i=t.getModel(e);i&&i.getFilter()&&i.getFilter().deactivateAll()}}activateAll(e){var t=this.modelManager;if(void 0===e)t.traverseValidModels((function(e){e.getFilter()&&e.getFilter().activateAll()}));else{var i=t.getModel(e);i&&i.getFilter()&&i.getFilter().activateAll()}}getInactivatedIdMap(e){const t=this.modelManager;if(e){const i=t.getModel(e);if(!i||!i.getFilter())return;return i.getFilter().getInactivatedIdMap()}let i={};return t.traverseValidModels((e=>{e.getFilter()&&(i[e.id]=e.getFilter().getInactivatedIdMap())})),i}},r.ModelView.FilterHelper=class{constructor(e){this.modelManager=e}destroy(){this.modelManager=null}distributeIdsByModelId(e){for(var t={},i=this.modelManager.getModelIds(!0),r=[],n=function(e,i){e&&(e=e.toString(),t[e]||(t[e]=[]),"[object String]"===Object.prototype.toString.call(i)?t[e].push(i):"[object Array]"===Object.prototype.toString.call(i)&&(t[e]=t[e].concat(i)))},a=0;a<e.length;a++){var{modelId:s,objectId:o}=this.distributeId(e[a]);s?n(s,o):r.push(o)}if(r.length>0)for(var l=0;l<i.length;l++)n(i[l],r);return t}distributeId(e){if(!e)return{modelId:void 0,objectId:e};var t,i,r=/\[(.*?)\](.*)/.exec(e.toString());return r?(t=r[1],i=r[2],this.modelManager.getModelIds(!0).indexOf(t)<0&&(t=void 0,i=e)):i=e,{modelId:t,objectId:i}}distributeConditionsByModelId(e){for(var t={},i=this.modelManager.getModelIds(!0),r=[],n=function(e,r){e&&(e=e.toString(),i.indexOf(e)>=0&&(t[e]||(t[e]=[]),"[object Object]"===Object.prototype.toString.call(r)?t[e].push(r):"[object Array]"===Object.prototype.toString.call(r)&&(t[e]=t[e].concat(r))))},a=0;a<e.length;a++){var s=e[a];if(s.hasOwnProperty("modelId")){var o=s.modelId;delete s.modelId,n(o,s)}else r.push(s)}if(r.length>0)for(var l=0;l<i.length;l++)n(i[l],r);return t}executeConditions(e,t,i){if(i)(a=this.modelManager.getModel(i))&&a.getFilter()&&(e&&0!==e.length?(r=this.distributeConditionsByModelId(e))[i]&&"[object Function]"===Object.prototype.toString.call(t)&&t(a,r[i]):"[object Function]"===Object.prototype.toString.call(t)&&t(a,e));else if(e&&0!==e.length){var r=this.distributeConditionsByModelId(e);for(var n in r){var a=this.modelManager.getModel(n),s=r[n];a&&a.getFilter()&&s&&s.length>0&&"[object Function]"===Object.prototype.toString.call(t)&&t(a,s)}}else this.modelManager.traverseValidModels((function(i){i.getFilter()&&"[object Function]"===Object.prototype.toString.call(t)&&t(i,e)}))}executeIds(e,t,i){if(i)(a=this.modelManager.getModel(i))&&a.getFilter()&&(e&&0!==e.length?(r=this.distributeIdsByModelId(e))[i]&&"[object Function]"===Object.prototype.toString.call(t)&&t(a,r[i]):"[object Function]"===Object.prototype.toString.call(t)&&t(a,e));else if(e&&0!==e.length){var r=this.distributeIdsByModelId(e);for(var n in r){var a=this.modelManager.getModel(n),s=r[n];a&&a.getFilter()&&s&&s.length>0&&"[object Function]"===Object.prototype.toString.call(t)&&t(a,s)}}else this.modelManager.traverseValidModels((function(i){i.getFilter()&&"[object Function]"===Object.prototype.toString.call(t)&&t(i,e)}))}executeId(e,t,i){var r,{modelId:n,objectId:a}=this.distributeId(e);i?n&&n.toString()!==i.toString()||(r=this.modelManager.getModel(i))&&r.getFilter()&&"[object Function]"===Object.prototype.toString.call(t)&&t(r,a):n?(r=this.modelManager.getModel(n))&&r.getFilter()&&"[object Function]"===Object.prototype.toString.call(t)&&t(r,a):this.modelManager.traverseValidModels((function(e){e.getFilter()&&"[object Function]"===Object.prototype.toString.call(t)&&t(e,a)}))}},r.BlinkManager=class{constructor(e){this._manager=e,this.modelCollection=e.modelCollection,this.sceneState=e.sceneState,this.blinkStartTimeMap={},this.blinkLastTimeMap={},this.positiveSequenceMap={},this.blinkTimesMap={},this.blinkEnabled=!1,this.blinkPermited=!1,this.defaultBlinkColor=r.Blink.DefaultBlinkColor.color,this.defaultBlinkAlpha=r.Blink.DefaultBlinkColor.opacity,this.blinkColorMap={},this.blinkIntervalTimeMap={}}destroy(){this.blinkIntervalTimeMap=null,this.defaultBlinkColor=null,this.blinkColorMap=null,this.blinkStartTimeMap=null,this.blinkLastTimeMap=null,this.positiveSequenceMap=null,this.blinkTimesMap=null,this.sceneState=null,this.modelCollection=null,this._manager=null}getBlinkMaterials(e){if(e)return this.modelCollection.getById(e).getBlinkMaterials();let t={};return this.modelCollection.traverse((e=>{e.getBlinkMaterials&&(t[e.id]=e.getBlinkMaterials())})),t}resetBlinkMaterial(e){const t=this.getBlinkMaterials(e);if(e)for(let e=0,i=t.length;e<i;e++)t[e].resetBlinkUniformValue();else for(let e in t){const i=t[e];for(let e=0,t=i.length;e<t;e++)i[e].resetBlinkUniformValue()}}updateBlinkMaterial(e){const t=e=>{var t=this.getBlinkColor(e),i=this.getBlinkMaterials(e);if(0!=i.length){var n=this._manager.getModel(e);if(n&&n.updateBlinkMaterial)n.updateBlinkMaterial();else{var a=0,s=r.EnumShaderColorState.BLINK;this.blinkIntervalTimeMap[e]=this.blinkIntervalTimeMap[e]||600;var o=this.blinkIntervalTimeMap[e],l=Date.now();if(void 0===this.blinkStartTimeMap[e]&&(this.positiveSequenceMap[e]=!0,this.blinkStartTimeMap[e]=l,this.blinkLastTimeMap[e]=l),!(l-this.blinkLastTimeMap[e]<=100)){l-this.blinkStartTimeMap[e]>o&&(this.positiveSequenceMap[e]=!this.positiveSequenceMap[e],this.blinkStartTimeMap[e]=l,this.blinkLastTimeMap[e]=l);var d=(l-this.blinkStartTimeMap[e])/o;a=this.positiveSequenceMap[e]?d:1-d;for(var h=0,c=i.length;h<c;h++)i[h].updateBlinkUniformValue(s,t,a);this.blinkLastTimeMap[e]=l}}}},i=this.sceneState.getBlinkComponentIdsDetailMap();if(Object.keys(i).length>0)this.updateBlinkMaterialByMap(i);else if(e)t(e);else{var n=this.getBlinkMaterials();Object.keys(n).forEach((e=>{t(e)}))}}clearTime(e){this.blinkTimesMap[e]=0}updateBlinkMaterialByMap(e){for(const t in e){const i=e[t];if(!1===i.enable)continue;if(void 0===i.materials){i.models.map((e=>{const t=e.modelId;var i=this._manager.getModel(t);i&&i.updateBlinkMaterial&&i.updateBlinkMaterial()}));continue}const n=i.detail,a=i.materials;let s=0;const o=r.EnumShaderColorState.BLINK,l=n.interval,d=100,h=Date.now();this.blinkTimesMap[t]=null==this.blinkTimesMap[t]?0:this.blinkTimesMap[t],n.color&&(this.blinkColorMap[t]=this.blinkColorMap[t]||new THREE.Vector4,this.blinkColorMap[t].set(n.color.red/255,n.color.green/255,n.color.blue/255,n.color.alpha));const c=this.blinkColorMap[t];if(void 0===this.blinkStartTimeMap[t]&&(this.positiveSequenceMap[t]=!0,this.blinkStartTimeMap[t]=h,this.blinkLastTimeMap[t]=h),h-this.blinkLastTimeMap[t]<=d)return;if(h-this.blinkStartTimeMap[t]>l&&(this.positiveSequenceMap[t]=!this.positiveSequenceMap[t],this.blinkStartTimeMap[t]=h,this.blinkLastTimeMap[t]=h,n.times&&(this.blinkTimesMap[t]++,this.blinkTimesMap[t]==2*n.times)))return this.blinkTimesMap[t]=0,void this.sceneState.clearBlinkComponentsByDetail(t);const u=(h-this.blinkStartTimeMap[t])/l;s=this.positiveSequenceMap[t]?u:1-u,this.blinkLastTimeMap[t]=h;for(const e of a)e.updateBlinkUniformValue(o,c,s)}}getBlinkColor(e){return this.blinkColorMap[e]||this.setBlinkColor(void 0,void 0,e),this.blinkColorMap[e]}setBlinkColor(e,t,i){const n=i=>{if(!this.blinkColorMap[i]&&(this.blinkColorMap[i]=new THREE.Vector4),e){var n=r.Utils.hexToRgb(e);this.blinkColorMap[i].fromArray([n.r,n.g,n.b,t||1])}else this.blinkColorMap[i].set(this.defaultBlinkColor.r,this.defaultBlinkColor.g,this.defaultBlinkColor.b,this.defaultBlinkAlpha)};if(i)n(i);else{var a=this.getBlinkMaterials();Object.keys(a).forEach((e=>{n(e)}))}}setBlinkIntervalTime(e,t){const i=t=>{this.blinkIntervalTimeMap[t]<=0||(this.blinkIntervalTimeMap[t]=e)};if(t)i(t);else{var r=this.getBlinkMaterials();Object.keys(r).forEach((e=>{i(e)}))}}enableBlink(e){this.blinkEnabled=e,!1===e&&(this.blinkStartTime=null,this.resetBlinkMaterial()),this.applyBlink()}getBlinkEnabled(){return!this.isBlinkPermited()&&this.blinkEnabled}getBlinkComponentsIdMap(e){return this.isBlinkPermited()?null:this.sceneState.getBlinkComponentsIdMap(e)}applyBlink(e){this.isBlinkPermited()||(this._manager.selectPriority=!1,e?this.modelCollection.getById(e).applyBlink():this.modelCollection.traverse((e=>{e.applyBlink()})))}clearBlink(e){this.isBlinkPermited()||(this._manager.selectPriority=!1,e?this.modelCollection.getById(e).clearBlink():this.modelCollection.traverse((e=>{e.clearBlink()})))}permitBlink(e){this.blinkPermited=e}isBlinkPermited(){return this.blinkPermited}},r.ModelView.LayerCollection=class{constructor(){this._layers=[],this._destroyed=!1,this.eventDispatcher=new r.EventDispatcher}get length(){return this._layers.length}destroy(){this._destroyed=!0,this.removeAll(!0),this.eventDispatcher.destroy(),this.eventDispatcher=null,this._layers=null}isDestroyed(){return this._destroyed}add(e){return!!e&&(!this.getById(e.id)&&(this._layers.push(e),void(void 0===e.sequence?e.sequence=this._layers.length-1:this.moveToIdx(e,e.sequence))))}remove(e,t){t=r.Utils.isDefined(t,!0);const i=this.getById(e);if(!i)return!1;this._layers.splice(this._layers.findIndex((t=>t.id==e)),1);const n=this._getByFilter();for(const e of n)!e.isDestroyed()&&e.sequence>i.sequence&&e.sequence--;return t&&i.destroy(),!0}removeAll(e){if(e){const e=this._getByFilter();for(let t=0,i=e.length;t<i;++t){if(e[t].isDestroyed())return;e[t].destroy()}}this._layers=[]}_getByFilter(e){const t=[];for(const i of this._layers)e&&!e(i)||t.push(i);return t}getById(e){return e&&(e=e.toString()),this._getByFilter((t=>t.id===e))[0]}getByIndex(e){return this._layers[e]}getMaxSequence(){return this._layers.length-1}getOrderedIds(){const e=Array.from(this._layers);return e.sort(((e,t)=>e.sequence-t.sequence)),e.map((e=>e.id))}getIds(){return this._layers.map((e=>e.id))}traverse(e,t){const i=t?Array.from(this._layers):this._layers;t&&i.sort(((e,t)=>e.sequence-t.sequence)),i.forEach((t=>e(t)))}traverseIf(e,t){const i=this._layers;for(let r=0,n=i.length;r<n;++r){let n=i[r];if(t&&t(n))break;e&&e(n)}}some(e){return this._layers.some((t=>e(t)))}moveToIdx(e,t){const i=this._layers,n=r.Math.clamp(t,0,i.length-1),a=e.sequence;for(const t of i)t.id===e.id?t.sequence=n:t.sequence>a&&t.sequence<=n?t.sequence--:t.sequence>=n&&t.sequence<a&&t.sequence++}shiftDown(e){e.sequence>0&&this.moveToIdx(e,e.sequence-1)}shiftUp(e){const t=this.getMaxSequence();e.sequence<t&&this.moveToIdx(e,e.sequence+1)}},r.ModelLoader=class{constructor(){this.loader=new THREE.FileLoader}destroy(){this.loader=null}load(e,t,i){var n=new r.Loader.Url({serverUrl:e.parameters.serverUrl,databagId:e.parameters.databagId,lightmapDatabagId:e.parameters.lightmapDatabagId});if(null==e.parameters.metaData){var a=this,s=this.loader;s.setResponseType("");var o=n.projectUrl();r.Storage.IndexedDBHelper.loadWithStorage("InfoData",o,(()=>new Promise(((e,t)=>{s.load(o,e,void 0,t)}))),(n=>{var s;try{s=JSON.parse(n)}catch(e){return i(e),void r.eventsDispatcher.dispatchEvent({type:r.EVENTS.ON_LOAD_INVALID_SCENE})}var o=a.getModel(s,e);t&&t(o)}),(e=>{console.log("Config load error!"),i(e),r.eventsDispatcher.dispatchEvent({type:r.EVENTS.ON_LOAD_INVALID_SCENE})}))}else{let i={};i.metadata=e.parameters.metaData,i.coordinateSystem=e.parameters.coordinateSystem;let r=this.getModel(i,e);t&&t(r)}}getModel(e,t){let i=e.metadata.asset?e.metadata.asset:"bmd";r.Utils.isDefined(e.metadata.FeatureType)&&"point"===e.metadata.FeatureType&&"0.0.1"===e.metadata.version&&(i="point"),"bmd"!==i&&"point"!==i&&e.metadata.content&&"bim"!==e.metadata.content&&(i="standardtiles");const n=e.metadata.root?e.metadata.root:void 0;t.parameters.rootPath=n;const a=e.metadata.FeatureType?"shp":e.metadata.content?e.metadata.content:"bim";t.parameters.resourceType=a;const s=!!(!0===e.metadata.onDemand||t.parameters.loadConfig&&!0===t.parameters.loadConfig.onDemand);t.parameters.onDemand=s;const o=!0===e.metadata.layer;t.parameters.demandConditions=t.parameters.loadConfig&&t.parameters.loadConfig.condition,t.parameters.hasLayerInfo=o;const l=void 0===e.metadata.detailLevel?[]:e.metadata.detailLevel;return t.parameters.detailLevelList=l,t.parameters.visualRange=t.parameters.loadConfig&&t.parameters.loadConfig.visualRange,t.parameters.disableUserData=!(!t.parameters.loadConfig||!0!==t.parameters.loadConfig.disableUserData),t.parameters.enableBorderLine=!(!t.parameters.loadConfig||!0!==t.parameters.loadConfig.enableBorderLine),t.parameters.maxDetailLevel=t.parameters.loadConfig&&t.parameters.loadConfig.maxDetailLevel,t.parameters.wireFrameVisibilityOption=!t.parameters.loadConfig||void 0===t.parameters.loadConfig.wireFrameVisibilityOption||t.parameters.loadConfig.wireFrameVisibilityOption,t.parameters.config=e,t.parameters.sequence=t.priority,r.ModelFactory[i](t.viewer,t.manager,t.parameters,t.index,t.parseCfgFinish,t.debut)}},r.ModelFactory={pointCloud:function(e,t,i,n,a,s){return new r.PointCloudModel(e,t,i,n,a,s)},"3dtiles":function(e,t,i,n,a,s){return new r.$3dTilesModel(e,t,i,n,a,s)},dem:function(e,t,i,n,a,s){return new r.DemModel(e,t,i,n,a,s)},bimtile:function(e,t,i,n,a,s){return new r.BimTilesModel(e,t,i,n,a,s)},bimtiles:function(e,t,i,n,a,s){return new r.BimTilesModel(e,t,i,n,a,s)},standardtiles:function(e,t,i,n,a,s){return new r.StandardTilesModel(e,t,i,n,a,s)},point:function(e,t,i,n,a,s){return new r.PointModel(e,t,i,a,s)},bmd:function(e,t,i,n,a,s){return new r.Model(t,i,n,a,s)},globe:function(e,t){return new r.Layer.GlobeLayer(e,t)}},function(){const e={split(e,t){if(e.indexOf("m.bimface.com")>=0||e.indexOf("m-test.bimface.com")>=0||window.hostConfig&&window.hostConfig.enableUrlSplit){let i=/http[s]?(:\/\/m[1]?[0-9]?(-test)?.)/.exec(e);if(i){let r=i[1],n=r.indexOf("-test")>=0?"-test":"";e=e.replace(r,`://m${t}${n}.`)}}return e},getHostNumByReg(e,t){let i=t.exec(e),r=i?i[1].charCodeAt()%10:0;return r+=1,r},splitByDatabagId(e){return this.split(e,this.getHostNumByReg(e,/.*\/(.+?).*\/resource/))},splitByTextureName(e){return this.split(e,this.getHostNumByReg(e,/texture\/(.+?).*/))},splitByContextId(e,t){const i=parseInt(t)%10+1;return this.split(e,i)},splitByUrlMd5(e){if(!0!==r.GlobalData.EnableDomainDiversion)return e;const t=r.Utils.charCodeUrl(e)%10+1;return this.split(e,t)}};r.RequestSpliter=e}(),function(){class e{static getBox(e,t){const i=new THREE.Box3;if(Array.isArray(e)&&e.length>=6&&i.setFromArray(e),e.region){const t=e.region;i.set(THREE.Math.radToDeg(t[0]),THREE.Math.radToDeg(t[2]),THREE.Math.radToDeg(t[1]),THREE.Math.radToDeg(t[3]))}if(e.box){const t=e.box,r=new THREE.Vector3(t[0],t[1],t[2]),n=r.x-Math.abs(t[3]),a=r.x+Math.abs(t[3]),s=r.y-Math.abs(t[7]),o=r.y+Math.abs(t[7]),l=r.z-Math.abs(t[11]),d=r.z+Math.abs(t[11]);i.set(new THREE.Vector3(n,s,l),new THREE.Vector3(a,o,d))}if(e.sphere){const t=new THREE.Sphere(new THREE.Vector3(e.sphere[0],e.sphere[1],e.sphere[2]),e.sphere[3]);i.copy(t.getBoundingBox())}return t&&i.applyMatrix4(t),i}static getDracoLibUrl(){return r.GlobalData.DracoLibUrl?r.GlobalData.DracoLibUrl:window.BimfaceLoaderConfig&&window.BimfaceLoaderConfig.fullStaticHost?(r.GlobalData.DracoLibUrl=window.BimfaceLoaderConfig.fullStaticHost+"/lib/draco/",r.GlobalData.DracoLibUrl):(r.GlobalData.DracoLibUrl="../../lib/draco/",r.GlobalData.DracoLibUrl)}static getDracoLoader(){return void 0===this.dracoLoader&&(this.dracoLoader=new THREE.DRACOLoader,this.dracoLoader.setDecoderPath(r.TilesUtil.getDracoLibUrl())),this.dracoLoader}static praseUserData(e){if(void 0===e)return;let t={};return e.map((e=>{t[e[0]]=e[1]})),t}static getDebugColor(e,t){if(-1===e)return r.Debug.DebugColor.BLACK;if(!t)return r.Debug.DebugColor.GRAY;const i=r.Debug.DebugColorArray;return i[e%i.length]}static nodeIndexGroupsSort(e){let t=[];for(const i in e){const r=e[i];for(let e=0,n=r.length;e<n;++e)t.push({userId:i,indexGroup:r[e]})}return t.sort(((e,t)=>e.indexGroup.indexStart-t.indexGroup.indexStart)),t}static matchWireFrameVisibilityOption(e,t){return t instanceof Object?void 0!==t.ids&&t.ids[e]?t.isVisible:!t.isVisible:t}static isNodeInVisible(e){return!(e&&!1!==e.visible&&(!e.parent||!1!==e.parent.visible))}static isInstanceNodeInVisible(e){return!e||!1===e.visible||void 0===e.geometry}}e.max_uncompressed_blob_size=8388608,e.TILE_DATA_INDEX="INDEX",e.TILE_DATA_USERDATA="USERDATA",e.TILE_DATA_MATERIAL="MATERIAL",e.TILE_TEXTURE_NONE="TEXTURENONE",e.TILE_TEXTURE_LOADING="TEXTURE_LOADING",e.TILE_TEXTURE_LOADED="TEXTURELOADED",e.TWO_ACCURACY=.01,e.SIX_ACCURACY=1e-7,e.BMD_GEOMETRIC_ERROR_COEFFICIENT=1,e.OP_GEOMETRIC_ERROR_COEFFICIENT=.25,e.Minimum_Setting_SSEHold=.001,e.MODEL_SSE_Threshold_MAP={"3dtiles":e.OP_GEOMETRIC_ERROR_COEFFICIENT,osgb:e.OP_GEOMETRIC_ERROR_COEFFICIENT,shp:e.OP_GEOMETRIC_ERROR_COEFFICIENT,bim:e.BMD_GEOMETRIC_ERROR_COEFFICIENT},e.PICK_EFFECT_MODEL_TYPE={bim:!0,shp:!0,kml:!0,citygml:!0},r.TilesUtil=e}(),function(){const e=(new THREE.FileLoader).setResponseType("json"),t=(new THREE.FileLoader).setResponseType("arraybuffer");class i{constructor(e){this._url=e.url,this._request=e.request,this._retryCallback=e.retryCallback,this._retryTimes=r.Utils.defaultValue(e.retryTimes,0),this._retryCount=0}destroy(){this._request&&(this._request.destroy(),this._request=void 0),this._retryCallback=void 0}clone(e){return e||(e=new i),e._url=this._url,e._retryCallback=this._retryCallback,e._retryTimes=this._retryTimes,e._retryCount=0,this._request&&(e._request=this._request.clone()),e}fetch(e){return this._makeRequest(e)}_checkRequest(e){return e.state===r.RequestState.ISSUED||e.state===r.RequestState.ACTIVE?(console.log("The Resource is already being fetched."),!1):(e.state=r.RequestState.UNISSUED,e.deferred=void 0,!0)}_getFetchCallback(i){return i.fetchCallback?i.fetchCallback:"arraybuffer"===i.responseType?t.load:e.load}_makeRequest(e){const t=this._request;if(!this._checkRequest(this._request))return;const i=this._getFetchCallback(e);t.url=this._url,t.requestCallback=function(){const e=new r.Deferred;return i(t.url,(function(t){e.resolve(t)}),(function(t){e.reject(t)})),t.cancelCallback=function(){},e.promise};const n=r.RequestScheduler.request(t);return n?n.then((function(e){return t.cancelCallback=void 0,e})).catch((function(e){return t.cancelCallback=void 0,Promise.reject(e)})):void 0}retryOnError(e){const t=this._retryCallback;return"function"!=typeof t||this._retryCount>=this.retryTimes?new Promise.resolve(!1):new Promise.resolve(t(this,e)).then((e=>(++this._retryCount,e)))}_fetchArrayBuffer(){return this._makeRequest({fetchCallback:t.load})}static fetchArrayBuffer(e){return i.create(e)._fetchArrayBuffer()}_fetchJson(){return this._makeRequest({fetchCallback:e.load})}static fetchJson(e){return i.create(e)._fetchJson()}static create(e){return new i(e)}static fromUrl(e,t){const r=i.create({url:e});return t.request&&(r._request=t.request),t.retryCallback&&(r._retryCallback=t.retryCallback),t.retryTimes&&(r._retryTimes=t.retryTimes),r}static createIfNeeded(e){return e instanceof i?e.fromResource({request:e.request}):"string"!=typeof e?e:i.create({url:e})}fromResource(e){const t=this.clone();return e.request&&(t._request=e.request),e.retryCallback&&(t._retryCallback=e.retryCallback),e.retryTimes&&(t._retryTimes=e.retryTimes),t}}r.Resource=i}(),function(){r.RequestState=Object.freeze({UNISSUED:0,ISSUED:1,ACTIVE:2,RECEIVED:3,CANCELLED:4,FAILED:5});r.RequestType=Object.freeze({TERRAIN:0,IMAGERY:1,BIMTILES:2,OTHER:3})}(),function(){class e{constructor(e){e=e||{},this.url=e.url,this.requestCallback=e.requestCallback,this.cancelCallback=e.cancelCallback,this.priorityCallback=e.priorityCallback,this.priority=e.priority||0,this.type=e.type||r.RequestType.OTHER,this.state=r.RequestState.UNISSUED,this.deferred=void 0,this.cancelled=!1,this.destroyed=!1}destroy(){this.destroyed=!0,this.requestCallback=void 0,this.cancelCallback=void 0,this.priorityCallback=void 0,this.deferred=this.deferred&&this.deferred.destroy()}isDestroyed(){return this.destroyed}cancel(){this.cancelled=!0}clone(t){return t?(t.url=this.url,t.requestCallback=this.requestCallback,t.cancelCallback=this.cancelCallback,t.priorityCallback=this.priorityCallback,t.priority=this.priority,t.state=r.RequestState.UNISSUED,t.deferred=void 0,t.cancelled=!1,t):new e(this)}}r.Request=e}(),function(){function e(e){e.priorityCallback&&(e.priority=e.priorityCallback())}function t(e){if(!e.isDestroyed())return e.state===r.RequestState.UNISSUED&&(e.state=r.RequestState.ISSUED,e.deferred=new r.Deferred),e.deferred.promise}function i(e){if(!e.isDestroyed()){var i=t(e);return e.state=r.RequestState.ACTIVE,l.push(e),++a.numberOfActiveRequests,e.requestCallback().then(function(e){return function(t){if(e.state===r.RequestState.CANCELLED)return;--a.numberOfActiveRequests,h.fireEvent(),e.state=r.RequestState.RECEIVED;const i=e.deferred;e.deferred=void 0,i.resolve(t)}}(e)).catch(function(e){return function(t){e.state!==r.RequestState.CANCELLED&&(++a.numberOfFailedRequests,--a.numberOfActiveRequests,h.fireEvent(t),e.state=r.RequestState.FAILED,e.deferred&&e.deferred.reject(t))}}(e)),i}}function n(e){var t=e.state===r.RequestState.ACTIVE;if(e.state=r.RequestState.CANCELLED,++a.numberOfCancelledRequests,e.deferred){const t=e.deferred;e.deferred=void 0,t.reject("cancelRequest:"+e.url)}t&&(--a.numberOfActiveRequests,++a.numberOfCancelledActiveRequests),e.cancelCallback&&e.cancelCallback()}var a={numberOfAttemptedRequests:0,numberOfActiveRequests:0,numberOfCancelledRequests:0,numberOfCancelledActiveRequests:0,numberOfFailedRequests:0,numberOfActiveRequestsEver:0,lastNumberOfActiveRequests:0},s=20,o=new r.Heap({comparator:function(e,t){return e.priority-t.priority}});o.maximumLength=s,o.reserve(s);var l=[],d=50,h=new r.Event;class c{static get maximumRequests(){return d}static set maximumRequests(e){d=e}static get statistics(){return a}static get priorityHeapLength(){return s}static set priorityHeapLength(e){if(e<s)for(;o.length>e;){n(o.pop())}s=e,o.maximumLength=e,o.reserve(e)}static update(){var t,a,s,d=0;for(t=0,a=l.length;t<a;++t)(s=l[t]).cancelled&&n(s),s.state===r.RequestState.ACTIVE?d>0&&(l[t-d]=s):++d;l.length-=d;var h=o.internalArray;for(t=0,a=o.length;t<a;++t)e(h[t]);o.resort();for(var u=Math.max(c.maximumRequests-l.length,0),p=0;p<u&&o.length>0;)(s=o.pop())&&(s.cancelled?n(s):(i(s),++p))}static request(i){if(++a.numberOfAttemptedRequests,!(l.length>=c.maximumRequests)){e(i);var r=o.insert(i);if(r){if(r===i)return;n(r)}return t(i)}}static clear(){for(;o.length>0;){n(o.pop())}for(var e=0,t=l.length;e<t;++e)n(l[e]);l.length=0,a.numberOfAttemptedRequests=0,a.numberOfActiveRequests=0,a.numberOfCancelledRequests=0,a.numberOfCancelledActiveRequests=0,a.numberOfFailedRequests=0,a.numberOfActiveRequestsEver=0,a.lastNumberOfActiveRequests=0}static get requestHeap(){return o}}r.RequestScheduler=c}(),r.FrameState=class{constructor(){this.frameNumber=0,this.newFrame=!1,this.time=void 0,this.camera=void 0,this.cameraPositionWc=new THREE.Vector3,this.cameraDirectionWc=new THREE.Vector3,this.cullingVolume=void 0,this.pixelRatio=window.devicePixelRatio||1,this.maximumScreenSpaceError=void 0,this.viewSize={width:0,height:0},this.globalInverseMatrix=void 0,this.globalMatrix=void 0,this.afterRenderFns=[],this.viewer=null}destroy(){this.afterRenderFns=void 0,this.viewSize=void 0,this.camera=void 0,this.cameraPositionWc=void 0,this.cameraDirectionWc=void 0,this.cullingVolume=void 0,this.globalInverseMatrix=void 0,this.globalMatrix=void 0,this.viewer=null}},r.Statistics=class{constructor(){this.selected=0,this.visited=0,this.numberOfAttemptedRequests=0,this.numberOfPendingRequests=0,this.numberOfTilesProcessing=0,this.numberOfTilesWithContentReady=0,this.numberOfTilesTotal=0,this.numberOfTilesLoadedTotal=0,this.numberOfTrianglesSelected=0,this.geometryByteLength=0,this.texturesByteLength=0}destroy(){}clear(){this.selected=0,this.visited=0,this.numberOfTrianglesSelected=0,this.numberOfAttemptedRequests=0}_updateMemoryCount(e,t,i){var r=e.trianglesLength,n=e.geometryByteLength,a=e.texturesByteLength;i?(this.geometryByteLength+=t?-n:n,this.texturesByteLength+=t?-a:a):this.numberOfTrianglesSelected+=t?-r:r}incrementSelectionCount(e){this._updateMemoryCount(e,!1,!1)}incrementGeometryMemoryCount(e){this.geometryByteLength+=e.geometryByteLength}incrementTextureMemoryCount(e){this.texturesByteLength+=e.texturesByteLength}decrementTextureMemoryCount(e){this.texturesByteLength-=e.texturesByteLength}incrementLoadCount(e){this._updateMemoryCount(e,!1,!0)}decrementLoadCount(e){this._updateMemoryCount(e,!0,!0)}copy(e){this.selected=e.selected,this.visited=e.visited,this.numberOfAttemptedRequests=e.numberOfAttemptedRequests,this.numberOfPendingRequests=e.numberOfPendingRequests,this.numberOfTilesProcessing=e.numberOfTilesProcessing,this.numberOfTilesWithContentReady=e.numberOfTilesWithContentReady,this.numberOfTilesTotal=e.numberOfTilesTotal,this.numberOfTrianglesSelected=e.numberOfTrianglesSelected,this.geometryByteLength=e.geometryByteLength,this.texturesByteLength=e.texturesByteLength}clone(){return(new this.constructor).copy(this)}},r.TileContentType={DATA_NULL:"NULL",DATA_TILE:"TILE",DATA_BIMTILE:"BIMTILE",DATA_MESH:"MESH",DATA_INSTANCE:"INSTANCE",DATA_B3DM:"B3DM",DATA_POINT:"POINT",DATA_LINE:"LINE",DATA_DEM:"DEM",DATA_CMPT:"CMPT",DATA_GLOBAL_USER_DATA:"GLOBAL_USER_DATA",DATA_GLOBAL_USER_ID:"GLOBAL_USER_ID",DATA_GLOBAL_TILE_ID:"GLOBAL_TILE_ID",DATA_GLOBAL_MATERIAL:"GLOBAL_MATERIAL"},r.TileContentState=Object.freeze({UNLOADED:0,LOADING:1,PROCESSING:2,CONSTRUCTING:3,READY:4,FAILED:5}),r.SharedGeometryState=Object.freeze({UNLOADED:0,PROCESSING:1,PROCESSED:2,FAILED:3,DESTROYED:4,CANCELED:5}),r.TileContentProcessState=Object.freeze({PENDING:0,LOADING:1,LOADED:2,PROCESSING:3,PROCESSED:4,CONSTRUCTING:5,CONSTRUCTED:6,READY:7,FAILED:8}),r.Layer.ImageryState=Object.freeze({UNLOADED:0,TRANSITIONING:1,RECEIVED:2,TEXTURE_LOADED:3,READY:4,FAILED:5,INVALID:6,PLACEHOLDER:7}),r.Layer.TerrainState=Object.freeze({FAILED:0,UNLOADED:1,RECEIVING:2,RECEIVED:3,TRANSFORMING:4,TRANSFORMED:5,READY:6}),r.TilesCache=class{constructor(e){this._list=new r.DoublyLinkedList,this._sentinel=this._list.add(),this._trimTiles=!1,this._tilesCacheScheduler=e}destroy(){this._list=null,this._sentinel=null,this._tilesCacheScheduler=null}reset(){this._list.splice(this._list.tail,this._sentinel)}touch(e){var t=e.cacheNode;t&&this._list.splice(this._sentinel,t)}add(e){e.cacheNode||(e.cacheNode=this._list.add(e))}unloadTile(e){var t=e.cacheNode;t&&(e._tileset.unloadTile(e),e.cacheNode=void 0,this._list.remove(t))}unloadTiles(){const e=this._trimTiles;this._trimTiles=!1;const t=this._list,i=this._sentinel;let n=t.head;for(;n!==i;){const t=n.item;n=n.next;const i=t._tileset;if(!r.Utils.isDefined(i))continue;const a=1024*i.maximumMemoryUsage*1024;(this._tilesCacheScheduler.totalMemoryUsageInBytes>a||e)&&this.unloadTile(t)}}trim(){this._trimTiles=!0}},function(){function e(e,t){return e._priority-t._priority}let t=new THREE.Box3;class i{constructor(e){e=r.Utils.defaultValue(e,{}),this._destroyed=!1,this._id=e.id||"DefaultTileset",this._databagId=e.databagId||this._id,this._fileId=e.fileId||this._databagId,this._type=e.type||r.RequestType.BIMTILES,this._objectGroup=e.objectGroup||null,this._debugShowBoundingBox=e.debugShowBoundingBox||!1,this._debugShowGeometricError=e.debugShowGeometricError||!1,this.debugShowGeometricErrorHelper=e.debugShowGeometricErrorHelper,this._debugShowStatistics=e.debugShowStatistics||!1,this._transformMatrix=e.transformMatrix||new THREE.Matrix4,this._maxDetailLevel=e.maxDetailLevel,this._visualRange=e.visualRange,this._sequence=0,this._geometricError=void 0,this._root=void 0,this._boundingBox=void 0,this._tilesCacheScheduler=e.tilesCacheScheduler,this._processingTiles=[],this._selectedTiles=[],this._requestedTiles=[],this._requestedTilesInFlight=[],this._priorityRange={max:{depth:0,distance:0,sse:0,foveate:0},min:{depth:0,distance:0,sse:0,foveate:0}},this._skipLodEnabled=e.skipLodEnabled||!1,this.maximumScreenSpaceError=r.Utils.defaultValue(e.maximumScreenSpaceError,16),this._foveatedConeLimit=r.Utils.defaultValue(e.foveatedConeLimit,{priorityEnabled:!1,foveatedConeFactor:1,foveatedSseRelaxation:0,degradedFactor:1}),this.tileLoadedEvent=new r.Event,this.tileUnloadEvent=new r.Event,this.tileFailedEvent=new r.Event,this.onDemandManager=e.onDemandManager,this.hasLayerInfo=e.hasLayerInfo,this._traversalController=void 0,this._createTraversalController()}destroy(){this._destroyed=!0,this._destroyAllTiles(),this._boundingBox=void 0,this._objectGroup=void 0,this._objectWireframeGroup=void 0,this._transformMatrix=void 0,this._tilesCacheScheduler=void 0,this._processingTiles=void 0,this._selectedTiles=void 0,this._requestedTiles=void 0,this._requestedTilesInFlight=void 0,this._priorityRange=void 0,this.tileLoadedEvent=void 0,this.tileUnloadEvent=void 0,this.tileFailedEvent=void 0,this.onDemandManager&&this.onDemandManager.destroy(),this.onDemandManager=null,this._traversalController.destroy(),this._traversalController=void 0}_destroyAllTiles(){if(!this._root)return;const e=[];for(e.push(this._root);e.length>0;){const t=e.pop(),i=t.childrenTree;for(let t=0,r=i.length;t<r;++t)e.push(i[t]);t.destroy()}this._root=void 0}isDestroyed(){return this._destroyed}set root(e){this._root=e}get root(){return this._root}get ready(){return!!this._root}get statistics(){return this._tilesCacheScheduler.statistics}get cache(){return this._tilesCacheScheduler.tilesCache}get maximumMemoryUsage(){return this._tilesCacheScheduler.maximumMemoryUsage}get totalMemoryUsageInBytes(){return this._tilesCacheScheduler.totalMemoryUsageInBytes}set sequence(e){this._sequence=e}get sequence(){return this._sequence}set type(e){this._type=e}get type(){return this._type}get foveatedConeFactor(){return this._foveatedConeLimit.foveatedConeFactor}get foveatedSseRelaxation(){return this._foveatedConeLimit.foveatedSseRelaxation}get degradedFactor(){return this._foveatedConeLimit.degradedFactor}get foveatedConePriorityEnabled(){return this._foveatedConeLimit.priorityEnabled}preUpdate(e){this.ready&&this.processTiles(e)}update(e){return!!this.ready&&(this.updateFrameState(e),this.resetMaxAndMinPriority(),this.selectTiles(e),this.requestTiles(e),this.updateTiles(e),!0)}postUpdate(e){this.ready&&this.cancelTileRequests(e)}selectTiles(e){this._requestedTiles.length=0,this._selectedTiles.length=0,this._clearDrawableOfTiles(),this.updateTile(this.root,e),this.root.visible&&this._inVisualRange(e)&&(this._traverseTiles(this.root,e),this._updatePriorityForRequestedTiles())}requestTiles(t){if(t.viewer.cameraControl.userInputWorking)return;let i=this._requestedTiles;i.sort(e);for(let e=0,t=i.length;e<t;++e)this.requestContent(i[e])}updateTiles(e){const t=this.statistics,i=this._selectedTiles;for(let r=0,n=i.length;r<n;++r){let n=i[r];n.update(e),t.incrementSelectionCount(n.content),++t.selected}this.debugShowStatistics(e)}processTiles(t){this._removeTilesFromProcessingQueue(t);let i=this._processingTiles;i.sort(e);for(let e=0,r=i.length;e<r;++e)i[e].process(t)}updateTile(e,t){this.updateTileVisibility(e,t),this.updateMaxAndMinPriority(e)}updateTileVisibility(e,t){e.updateVisibility(t),e.visible&&(e.meetsSSE(t)?e.refineReplace&&e.hasChildren()&&!this.anyChildrenVisible(e,t)&&(e._visible=!1):e._visible=!1)}anyChildrenVisible(e,t){let i=!1;return e.childrenTree.forEach((e=>{e.updateVisibility(t),i=i||e.visible})),i}touchTile(e,t){e._touchedFrame!==t.frameNumber&&(this.cache.touch(e),e._touchedFrame=t.frameNumber)}visitTile(e,t){++this.statistics.visited,e._visitedFrame=t.frameNumber}cacheTile(e){const t=this.statistics;--t.numberOfTilesProcessing,++t.numberOfTilesWithContentReady,++t.numberOfTilesLoadedTotal,e.getTexturesByteLength(),t.incrementLoadCount(e.content),this.cache.add(e),this.tileLoadedEvent.fireEvent(e)}updateTextureMemoryUsage(e){const t=this.statistics;t.decrementTextureMemoryCount(e.content),e.getTexturesByteLength(),t.incrementTextureMemoryCount(e.content)}resetCache(e){}requestContent(e){if(e.contentTypeNull)return;const t=this.statistics;e.requestContent()?(++t.numberOfPendingRequests,this._requestedTilesInFlight.push(e),e.contentProcessPromise&&e.contentProcessPromise.then(this._addTileToProcessingQueue(this,e)).catch((function(e){})),e.contentReadyPromise&&e.contentReadyPromise.then(this._handleTileContentSuccess(this,e)).catch(this._handleTileContentFailure(this,e))):++t.numberOfAttemptedRequests}cancelTileRequests(e){const t=this._requestedTilesInFlight;let i=0;for(let n=0,a=t.length;n<a;++n){const a=t[n];if(a._contentState!==r.TileContentState.LOADING){++i;continue}e.frameNumber-a._touchedFrame>=1?(a._request.cancel(),++i):i>0&&(t[n-i]=a)}t.length-=i}_canBeTraverse(e,t){return!!e.hasChildren()&&e.passSSE(t)}onDemandJudgment(e){return this.onDemandManager.onDemandJudgment(e)}_traverseTiles(e,t){this._traversalController.traverseTiles(this,e,t)}isCheckChildrenPassSSE(){return!1}anyChildrenPassSSE(e,t){let i=!1;return e.childrenTree.forEach((e=>{i=i||e.passSSE(t)})),i}_fetchChildrenOfTile(e,t){this.needLoadChildrenOfTile(e)&&(e._childrenState=r.TileContentState.READY,e.contentTypeTile&&this.loadChildrenOfTile(e,void 0,(function(){t.afterRenderFns.push((function(){}))})))}needLoadChildrenOfTile(e){return e.childrenUnload}loadChildrenOfTile(e,t,i){}updateFrameState(e){}_clearDrawableOfTiles(){this._objectGroup&&this._objectGroup.children.forEach((e=>{e.visible=!1})),this.debugShowGeometricErrorHelper&&this.debugShowGeometricErrorHelper.hideAll()}_updatePriorityForRequestedTiles(){const e=this._requestedTiles;for(let t=0,i=e.length;t<i;++t)e[t].clearPriority();for(let t=0,i=e.length;t<i;++t)e[t].computePriority();for(let t=0,i=e.length;t<i;++t)e[t].updatePriority()}resetMaxAndMinPriority(){let e=this._priorityRange.max,t=this._priorityRange.min;t.depth=Number.MAX_VALUE,t.distance=Number.MAX_VALUE,t.sse=Number.MAX_VALUE,t.foveate=Number.MAX_VALUE,e.depth=-Number.MAX_VALUE,e.distance=-Number.MAX_VALUE,e.sse=-Number.MAX_VALUE,e.foveate=-Number.MAX_VALUE}updateMaxAndMinPriority(e){let t=this._priorityRange.max,i=this._priorityRange.min;i.distance=Math.min(e._distance,i.distance),i.depth=Math.min(e._depth,i.depth),i.sse=Math.min(e.sse,i.sse),i.foveate=Math.min(e._foveatedFactor,i.foveate),t.distance=Math.max(e._distance,t.distance),t.depth=Math.max(e._depth,t.depth),t.sse=Math.max(e.sse,t.sse),t.foveate=Math.max(e._foveatedFactor,t.sse)}_addTileToSelectedQueue(e,t){e.contentAvailable&&e.isContentVisible(t)&&this._isAvailableDetailLevel(e,1)&&this._selectedTiles.push(e)}_addTileToRequestedQueue(e,t){e._requestedFrame!==t.frameNumber&&e.contentUnloaded&&this._isAvailableDetailLevel(e,1)&&(e._requestedFrame=t.frameNumber,this._requestedTiles.push(e))}_addTileToProcessingQueue(e,t){return function(){e._processingTiles.push(t),--e.statistics.numberOfPendingRequests,++e.statistics.numberOfTilesProcessing}}_removeTilesFromProcessingQueue(e){const t=this._processingTiles;let i=0;for(let r=0,n=t.length;r<n;++r){const n=t[r];if(n.contentProcessing){{const t=e.frameNumber-n._touchedFrame;if(e.newFrame?t>=2:t>=1){n.unloadContent(),++i;continue}}i>0&&(t[r-i]=n)}else++i}t.length-=i}_handleTileContentFailure(e,t){return function(i){var r=t.contentIndex,n=i.message?i.message:i;e.tileFailedEvent.numberOfListeners>0&&e.tileFailedEvent.fireEvent({url:r,message:n})}}_handleTileContentSuccess(e,t){return function(){t.isTilesetContent||e.cacheTile(t)}}unloadTile(e){this.tileUnloadEvent.fireEvent(e),--this.statistics.numberOfTilesWithContentReady,e.unloadContent()}createTile(){return null}loadTileset(e,t){}debugShowStatistics(e){if(!this._debugShowStatistics||0===this._selectedTiles.length)return;let t=0,i=0,n="";const a=this._selectedTiles;for(let e=0,s=a.length;e<s;++e){const s=a[e];n+="\nUrl: "+s._contentUrl,n+="\nLodLevel: "+s._debugLodLevel,s.content.trianglesLength>0&&(n+="\nTriangles: "+s.content.trianglesLength),n+="\nTexture Memory: "+r.Utils.toMemoryString(s.content.texturesByteLength),n+="\nGeometry Memory: "+r.Utils.toMemoryString(s.content.geometryByteLength),n+="\n",t+=s.content.geometryByteLength,i+=s.content.texturesByteLength}let s="";s+="\n -------------------------------- ",s+="\n[Statistics]",s+="\nFrameNumber: "+e.frameNumber,s+="\nTiles: "+a.length,s+="\nTotal Texture Memory: "+r.Utils.toMemoryString(i),s+="\nTotal Geometry Memory: "+r.Utils.toMemoryString(t),s+="\n",s+="\n[Detail]",s+=n,console.log(s)}explode(){}clone(e){return r.Utils.defined(e)||(e=new i),e.tileLoadedEvent=new r.Event,e.tileUnloadEvent=new r.Event,e.tileFailedEvent=new r.Event,e._copy(this),e}_copy(e){this._type=e._type,this._maximumMemoryUsage=e._maximumMemoryUsage,this._debugShowBoundingBox=e._debugShowBoundingBox,this._debugShowStatistics=e._debugShowStatistics,this._priorityRange=e._priorityRange,this._boundingBox=e._boundingBox.clone(),this._geometricError=e._geometricError,this.onDemand=e.onDemand,this.hasLayerInfo=e.hasLayerInfo,this._destroyed=e._destroyed}get maxDetailLevel(){return this._maxDetailLevel}set maxDetailLevel(e){this._maxDetailLevel=e}get visualRange(){return this._visualRange}set visualRange(e){this._visualRange=e}_isAvailableDetailLevel(e,t){return t=void 0===t?0:t,void 0===this._maxDetailLevel||void 0===e.detailLevel||e.detailLevel<this._maxDetailLevel+t}_inVisualRange(e){if(!this._boundingBox||!this._visualRange)return!0;const i=t.copy(this._boundingBox);i.copy(this._boundingBox),e.transformMatrix&&i.applyMatrix4(e.transformMatrix);const r=i.distanceToPoint(e.cameraPositionWc),n=void 0===this._visualRange.max?1/0:this._visualRange.max,a=void 0===this._visualRange.min?-1/0:this._visualRange.min;return r<=n&&r>=a}_createTraversalController(){this._traversalController=new r.TilesetTraversal}}r.AbstractTileset=i}(),function(){let e=new THREE.Box3,t=new THREE.Sphere,i=new THREE.Vector3;class n{constructor(e,t){this._tileset=r.Utils.defaultValue(e,null),this._parent=t,this._destroyed=!1,this._databagId=e._databagId,this._fileId=e._fileId,this._childrenTree=[],this._boundingBox=void 0,this._transformedBoundingBox=new THREE.Box3,this._transformMatrix=new THREE.Matrix4,t?(t.childrenTree.push(this),this._depth=t._depth+1):this._depth=0,this._visible=!1,this._content=void 0,this._contentUrl=void 0,this._contentOutlineUrl=void 0,this._contentType=void 0,this._contentIndex=void 0,this._contentState=r.TileContentState.UNLOADED,this._childrenState=r.TileContentState.UNLOADED,this._priority=0,this._visibilityPriority=5,this._distance=0,this._projectedDistanceFromCenter=0,this._contentProcessDeferred=void 0,this._contentReadyDeferred=void 0,this._request=void 0,this._instanceInfoArray=null,this._debugLodLevel=-1,this.refineReplace=void 0,this.geometricError=0,this.sse=0,t&&t.layerInfo?this.layerInfo=Object.assign({},t.layerInfo):this.layerInfo={},this._id=null,this.labelAdded=!1,this.buffer=null,this._foveatedFactor=0,this.priorityDegradation=!1,this.stateChangedRenderer=r.EnumChangedState.NONE,this.stateWireFrameChangedRenderer=r.EnumChangedState.START,this.forceUpdateWireFrame=!1}destroy(){this._destroyed=!0,this._clearContent(),this._tileset=void 0,this._parent=void 0,this._childrenTree=void 0,this._boundingBox=void 0,this._transformedBoundingBox=void 0,this._transformMatrix=void 0,this._contentType=void 0,this._contentState=void 0,this._contentUrl=void 0,this._contentOutlineUrl=void 0,this._ancestorWithContent=void 0,this._ancestorWithAvailableContent=void 0,this.labelAdded=void 0,this.debugShowGeometricErrorHelper&&this.debugShowGeometricErrorHelper.destroy(),this.debugShowGeometricErrorHelper=null,this.forceUpdateWireFrame=void 0,this.stateChangedRenderer=void 0,this.stateWireFrameChangedRenderer=void 0}isDestroyed(){return this._destroyed}get visible(){return this._visible}set visible(e){this._visible=e}get nodeId(){return this._id}set nodeId(e){this._id=e}set contentVisible(e){this._content&&(this._content.visible=e)}get contentVisible(){return!!this._content&&this._content.visible}get parent(){return this._parent}get childrenTree(){return this._childrenTree}get boundingBox(){return this._boundingBox}set boundingBox(e){return this._boundingBox=e}get depth(){return this._depth}set depth(e){return this._depth=e}get contentUrl(){return this._contentUrl}get contentOutlineUrl(){return this._contentOutlineUrl}set contentIndex(e){return this._contentIndex=e}get contentIndex(){return this._contentIndex}set contentUrl(e){return this._contentUrl=e}set contentOutlineUrl(e){return this._contentOutlineUrl=e}get content(){return this._content}set content(e){return this._content=e}get contentType(){return this._contentType}set contentType(e){this._contentType=e}get contentState(){return this._contentState}set contentState(e){this._contentState=e}get contentUnloaded(){return this._contentState===r.TileContentState.UNLOADED}get contentLoading(){return this._contentState===r.TileContentState.LOADING}get contentProcessing(){return this._contentState===r.TileContentState.PROCESSING}get contentConstructing(){return this._contentState===r.TileContentState.CONSTRUCTING}get childrenUnload(){return this._childrenState===r.TileContentState.UNLOADED}get childrenReady(){return this._childrenState===r.TileContentState.READY}get contentReady(){return this._contentState===r.TileContentState.READY}get contentAvailable(){return this.contentReady&&!this.contentTypeEmpty}get contentTypeTile(){return this.contentType===r.TileContentType.DATA_TILE||this.contentType===r.TileContentType.DATA_BIMTILE}get contentTypeMesh(){return this.contentType===r.TileContentType.DATA_MESH||this.contentType===r.TileContentType.DATA_B3DM}get contentTypeCMPT(){return this.contentType===r.TileContentType.DATA_CMPT}get contentTypePoint(){return this.contentType===r.TileContentType.DATA_POINT}get contentTypeInstance(){return this.contentType===r.TileContentType.DATA_INSTANCE}get contentTypeLine(){return this.contentType===r.TileContentType.DATA_LINE}get contentTypeMeshAvailable(){return this.contentTypeMesh||this.contentTypeInstance||this.contentTypePoint||this.contentTypeLine||this.contentTypeCMPT}get contentTypeEmpty(){return this.contentType===r.TileContentType.DATA_NULL||this.contentType===r.TileContentType.DATA_TILE||this.contentType===r.TileContentType.DATA_BIMTILE}get contentTypeNull(){return this.contentType===r.TileContentType.DATA_NULL}get contentProcessPromise(){if(this._contentProcessDeferred)return this._contentProcessDeferred.promise}get contentReadyPromise(){if(this._contentReadyDeferred)return this._contentReadyDeferred.promise}get instanceInfo(){return this._instanceInfoArray}set instanceInfo(e){this._instanceInfoArray=e}isContentVisible(e){return this.contentReady&&this.visible}getAbsoluteContentUrl(){return this._contentIndex}getOutlineContentUrl(){return this._contentOutlineUrl}update(e){if(!this.contentTypeEmpty){if(e.viewer.showTileType!=r.EnumShowTileType.All){if(e.viewer.showTileType==r.EnumShowTileType.OnlyInstance&&!this.contentTypeInstance)return;if(e.viewer.showTileType==r.EnumShowTileType.ExceptInstance&&this.contentTypeInstance)return}this.explode(),this.updateContent(e),this.applyFilter(),this.activateRenderables(),this.debugShowBoundingBox(e),this.debugShowGeometricError(e)}}process(e){this._content.update(e)}_makeRequest(e,t){const i=this;e.url=t.url,e.requestCallback=function(){const t=new r.Deferred;return i.fetchContentBlock(e.url,(function(e){t.resolve(e)}),(function(e){t.reject(e)})),e.cancelCallback=function(){},t.promise};const n=r.RequestScheduler.request(e);if(n)return n.then((function(t){return e.cancelCallback=void 0,t})).catch((function(t){return e.cancelCallback=void 0,Promise.reject(t)}))}requestContent(){const e=this.getAbsoluteContentUrl(),t=new r.Request({type:this._tileset.type,priorityCallback:this._createPriorityCallback(this)});this._request=t;let i=[e];const n=this.getOutlineContentUrl();n&&i.push(n);const a=this._makeRequest(t,{url:i});if(!a)return!1;const s=this._contentState;this._contentState=r.TileContentState.LOADING,this._contentProcessDeferred=new r.Deferred,this._contentReadyDeferred=new r.Deferred;const o=this._handleFailedContent(this,this._tileset),l=this;return a.then((function(e){l.isDestroyed()?o():l.parseContentBlock(e,(function(e){l._initialContent(e)}))})).catch((function(e){if(t.state===r.RequestState.CANCELLED)return l._contentState=s,--l._tileset.statistics.numberOfPendingRequests,++l._tileset.statistics.numberOfAttemptedRequests,void l._cancelSharedGeometryRequest();o(e)})),!0}parseContentBlock(e,t){t(e)}fetchContentBlock(e,t,i){r.Error.throwError(r.ERRORS.DEVELOPE_EXCEPTION,"Needs to be overridden by subclasses!")}createContent(e){return null}_initialContent(e){const t=this;t._content=t.createContent(e),t._contentState=r.TileContentState.PROCESSING,t._contentProcessDeferred.resolve(t._content),t._content.readyPromise.then((function(e){t._contentState=r.TileContentState.READY,t._contentReadyDeferred.resolve(e)}))}_createPriorityCallback(e){return function(){return e._priority}}_handleFailedContent(e,t){return function(i){e._contentState===r.TileContentState.PROCESSING?--t.statistics.numberOfTilesProcessing:--t.statistics.numberOfPendingRequests,e._contentState=r.TileContentState.FAILED,e._contentReadyDeferred&&e._contentReadyDeferred.reject(i),e._contentProcessDeferred&&e._contentProcessDeferred.reject(i)}}updateContent(e){this._content.update(e)}_clearContent(){this.cacheNode?this._tileset.cache.unloadTile(this):(this.unloadContent(),this._clearAllBuffer())}unloadContent(){this.disposeMeshIdMap(),this.disposeDebugBoundingBox(),this.disposeDebugGeometricError(),this._content&&this._content.destroy(),r.Utils.defined(this._content)&&this._tileset.statistics.decrementLoadCount(this._content),this._content=void 0,this._contentState=r.TileContentState.UNLOADED,this._request=this._request&&this._request.destroy(),this._contentProcessDeferred=this._contentProcessDeferred&&this._contentProcessDeferred.destroy(),this._contentReadyDeferred=this._contentReadyDeferred&&this._contentReadyDeferred.destroy(),this._clearAllBuffer(),this.stateChangedRenderer=r.EnumChangedState.NONE,this.stateWireFrameChangedRenderer=r.EnumChangedState.START,this.forceUpdateWireFrame=!1}updateVisibility(e){this.computeTransformedBoundingBox(e),this.computeDistanceToCamera(e),this.computeSSE(e),this.visible=this.culling(e),this.priorityDegradation=this.isPriorityDegradation(e),this.adjustSseIfNeeded()}adjustSseIfNeeded(){1!==this._tileset.degradedFactor&&this.priorityDegradation&&this._ancestorWithContent&&(this.sse=this.sse*this._tileset.degradedFactor)}isPriorityDegradation(e){const n=this._tileset,a=e.camera,s=this._transformedBoundingBox.getBoundingSphere(t),o=s.radius,l=i.copy(e.cameraDirectionWc).multiplyScalar(this._projectedDistanceFromCenter),d=l.addVectors(e.cameraPositionWc,l).sub(s.center);if(d.length()>o){const t=d.normalize().multiplyScalar(o).add(s.center).sub(e.cameraPositionWc);this._foveatedFactor=1-Math.abs(t.normalize().dot(e.cameraDirectionWc))}else this._foveatedFactor=0;if(!n.foveatedConePriorityEnabled)return!1;if(1===n.foveatedConeFactor)return!1;const h=1-Math.cos(THREE.Math.degToRad(.5*a.fov)),c=n.foveatedConeFactor*h;if(this._foveatedFactor<=c)return!1;const u=r.Math.clamp((this._foveatedFactor-c)/(h-c),0,1),p=THREE.Math.lerp(n.foveatedSseRelaxation,n.maximumScreenSpaceError,u);return(0===this.sse&&this.parent?.5*this.parent.sse:this.sse)+p>=n.maximumScreenSpaceError}clearPriority(){this.parent&&(this.parent._minChildPriority=Number.MAX_VALUE)}computePriority(){const e=this._tileset,t=e._priorityRange.max,i=e._priorityRange.min,n=r.Math.isolateDigits(r.Math.normalize(e.type,0,10),1,16),a=r.Math.isolateDigits(r.Math.normalize(e.sequence,0,1e3),3,13),s=r.Math.isolateDigits(r.Math.normalize(this.detailLevel,0,10),1,12),o=r.Math.isolateDigits(r.Math.normalize(this._visibilityPriority,0,10),1,11),l=this.priorityDegradation?r.Math.isolateDigits(.1,1,10):0,d=r.Math.isolateDigits(r.Math.normalize(this._foveatedFactor,i.foveate,t.foveate),4,6),h=r.Math.isolateDigits(r.Math.normalize(this._depth,i.depth,t.depth),2,4),c=this.refineReplace?r.Math.isolateDigits(r.Math.normalize(this._distance,i.distance,t.distance),4,0):r.Math.isolateDigits(r.Math.normalize(t.sse-this.sse,i.sse,t.sse),4,0);this._priority=n,this._priority+=a,this._priority+=s,this._priority+=o,this._priority+=l,this._priority+=d,this._priority+=h,this._priority+=c,this.parent&&(this.parent._minChildPriority=Math.min(this.parent._minChildPriority,this._priority))}updatePriority(){this.parent&&(this._priority=this.parent._minChildPriority)}subdivideNodeSubstractive(e){}culling(t){const i=e.copy(this._transformedBoundingBox);return i.applyMatrix4(t.globalMatrix),!!t.frustum.intersectsBox(i)}computeTransformedBoundingBox(e){this._transformedBoundingBox.copy(this._boundingBox),e.transformMatrix&&this._transformedBoundingBox.applyMatrix4(e.transformMatrix)}computeDistanceToCamera(e){const t=this._transformedBoundingBox;this._distance=t.distanceToPoint(e.cameraPositionWc),this._distance=this._distance<r.Math.EPSILON2?r.Math.EPSILON2:this._distance,t.getCenter(i),i.sub(e.cameraPositionWc),this._projectedDistanceFromCenter=i.dot(e.cameraDirectionWc)}passSSE(e){return this.sse>=e.maximumScreenSpaceError}meetsSSE(e){const t=this.parent;if(!t||t.refineReplace)return!0;return t.sse>e.maximumScreenSpaceError}computeSSE(e){const t=void 0!==e.geoErrScaleFactor?e.geoErrScaleFactor:1,i=this.geometricError*t;return this.sse=e.cameraPreSSE*(i/this._distance),this.sse}disposeMeshIdMap(){const e=this._content&&this._content._meshes;e&&e.traverse((e=>{"MeshEx"!==e.type&&"LineSegmentsEx"!==e.type||!e.name?"LineSegments"===e.type&&e.tileId&&(!0===e.isInstanceMeshNode?this.disposeInstanceLineNodeById(e.tileId):this.disposeLineNodeById(e.tileId)):!0===e.isInstanceMeshNode?this.disposeInstanceMeshNodeById(e.name):this.disposeMeshNodeById(e.name)}))}disposeMeshNodeById(e){}disposeInstanceLineNodeById(e){}disposeLineNodeById(e){}hasChildren(){return this._childrenTree.length>0}debugShowBoundingBox(){if(this._tileset._debugShowBoundingBox){if(!this._debugBoundingBox){const e=this._tileset._objectGroup,t=r.TilesUtil.getDebugColor(this._debugLodLevel,this.refineReplace);this._debugBoundingBox=new r.BBoxNode(this._boundingBox,t),this._debugBoundingBox.renderOrder=r.EnumRenderOrder.Effect-1,this._debugBoundingBox.matrixAutoUpdate=!1,e.add(this._debugBoundingBox),e.updateMatrixWorld(!0)}this._debugBoundingBox.visible=!0}}disposeDebugBoundingBox(){this._debugBoundingBox&&(this._debugBoundingBox.parent&&this._debugBoundingBox.parent.remove(this._debugBoundingBox),this._debugBoundingBox.geometry.dispose(),this._debugBoundingBox.material.dispose(),this._debugBoundingBox=void 0)}debugShowGeometricError(){if(!this._tileset._debugShowGeometricError)return;const e=this._tileset.debugShowGeometricErrorHelper;if(!1===this.labelAdded){this.labelAdded=!0;let t=this._boundingBox.getCenter(i);t.applyMatrix4(this._tileset._transformMatrix);const r={id:this._id,position:t,size:100,text:`${this._contentUrl}:${this.geometricError}`,tooltip:this.geometricError};e.addLabel(r)}e.showById(this._id),e.update()}disposeDebugGeometricError(){if(!this._tileset._debugShowGeometricError)return;this._tileset.debugShowGeometricErrorHelper.removeById(this._id),this.labelAdded=!1}applyFilter(){}activateRenderables(){this.contentVisible=!0}explode(){}getTexturesByteLength(){this.content.getTexturesByteLength()}sharedGeometryDestroy(){return!1}_cancelSharedGeometryRequest(){}_clearAllBuffer(){}clone(e){return r.Utils.defined(e)||(e=new n),e._copy(this),e}_copy(e){this.refineReplace=e.refineReplace,this.geometricError=e.geometricError,this._boundingBox=e._boundingBox,this._contentUrl=e._contentUrl,this._contentType=e._contentType,this._contentIndex=e._contentIndex,this._childrenState=e._childrenState,this._destroyed=e._destroyed,this._childrenTree=[],this._transformMatrix=e._transformMatrix.clone(),this._depth=e._depth,this._visible=e._visible,this._priority=e._priority,this._instanceInfoArray=null,this._debugLodLevel=e._debugLodLevel,this.layerInfo=e.layerInfo}}r.AbstractTile=n}(),function(){class e{constructor(e,t){this._tile=e,this._ready=!1,this._destroyed=!1,this._contentBuffer=t,this._geometryByteLength=0;for(const e in t)this._geometryByteLength+=t[e].byteLength;this._texturesByteLength=0,this._trianglesLength=0,this._state=r.TileContentProcessState.PENDING,this._meshes=new THREE.Group,this._meshes.name=r.Utils.getEncodedString(this._tile.getAbsoluteContentUrl())||e.name,this._meshes.databagId=e._databagId,this._meshes.fileId=e._fileId,this._meshes.matrixAutoUpdate=!1,this._readyDeferred=new r.Deferred,this._geometryOwner=0}destroy(){this._destroyed=!0,this._contentBuffer=void 0,this._readyDeferred=this._readyDeferred.destroy(),this.disposeGeometry(),this._tile=void 0}isDestroyed(){return this._destroyed}get tile(){return this._tile}get ready(){return this._ready}get geometryByteLength(){return this._geometryByteLength}set geometryByteLength(e){this._geometryByteLength=e}get texturesByteLength(){return this._texturesByteLength}get trianglesLength(){return this._trianglesLength}get readyPromise(){return this._readyDeferred.promise}get meshes(){return this._meshes}set visible(e){this._meshes.visible=e,this._outlineContent&&(this._outlineContent.visible=e)}get visible(){return this._meshes.visible}getTexturesByteLength(){const e=this._meshes.children;for(let t of e)if(t.children&&t.children.length>0){for(let e of t)if(e.material)for(let t of e.material)t._imageByteSize&&!t._sizeCached&&(this._texturesByteLength+=t._imageByteSize,t._sizeCached=!0)}else if(t.material)for(let e of t.material)e._imageByteSize&&!e._sizeCached&&(this._texturesByteLength+=e._imageByteSize,e._sizeCached=!0)}disposeGeometry(){if(this._meshes.parent&&this._meshes.parent.remove(this._meshes),!this.disposeShareGeometry())return;this._texturesByteLength=0;const e=this._meshes.children;for(let t=0,i=e.length;t<i;++t){const i=e[t];if(i.children&&i.children.length)for(let e=0,t=i.children.length;e<t;++e){const t=i.children[e],r=t.geometry;r&&r.dispose(),r.groups=void 0,r.index=void 0,r.attributes=void 0,t.geometry=void 0,this._disposeMaterials(t.material),t.material=void 0}else if(i.geometry){const e=i.geometry;e.dispose(),e.groups=void 0,e.index=void 0,e.attributes=void 0,i.geometry=void 0,this._disposeMaterials(i.material),i.material=void 0}}this._meshes=void 0}update(e){const t=this;let i=!1;this._state===r.TileContentProcessState.PENDING?(this._state=r.TileContentProcessState.PROCESSING,t.parseTileContent((function(e){t.attachToTilesGroup(e),t.disposeContentBuffer(),t._state=r.TileContentProcessState.PROCESSED}))):this._state===r.TileContentProcessState.PROCESSING||this._state===r.TileContentProcessState.PROCESSED&&(t._tile._clearAllBuffer(),i=!0),this._ready||i&&e.afterRenderFns.push((function(){t._ready=!0,t._readyDeferred&&t._readyDeferred.resolve(t)}))}parseTileContent(e){e&&e(this._tile)}attachToTilesGroup(e){const t=this._tile._tileset._objectGroup;t.add(this.meshes),t.updateMatrixWorld(!0)}disposeContentBuffer(){this._contentBuffer=void 0}disposeShareGeometry(){return!0}clone(t,i){return i=r.Utils.defaultValue(i,{}),(t=r.Utils.defaultValue(t,new e))._copy(this,i),t}_copy(e,t){this._tile=r.Utils.defaultValue(t.tile,e._tile),this._ready=e._ready,this._destroyed=e._destroyed,this._contentBuffer=e._contentBuffer,this._geometryByteLength=e._geometryByteLength,this._texturesByteLength=e._texturesByteLength,this._trianglesLength=0,this._state=r.TileContentProcessState.PENDING,this._meshes=e._meshes}_disposeMaterials(e){const t=this._tile._tileset.materialManager;if(r.Utils.isDefined(t)){let i=(e,t)=>{const i=t._imageByteSize;e.disposeMaterial(t)&&i&&(this._texturesByteLength+=i)};if(!(e instanceof Array))return void i(t,e);for(let r of e)r&&i(t,r)}}}r.AbstractTileContent=e}(),r.TileEmptyContent=class{constructor(e){this._tile=e}destroy(){this._tile=void 0}get geometryByteLength(){return 0}get texturesByteLength(){return 0}get trianglesLength(){return 0}get readyPromise(){}update(e){}},r.TileTilesetContent=class{constructor(e,t){this._tile=e,this._destroyed=!1,this._ready=!1,this._readyDeferred=new r.Deferred,this._initialize(t)}destroy(){this._destroyed=!0,this._tile=void 0,this._readyDeferred.destroy(),this._readyDeferred=void 0}isDestroyed(){return this._destroyed}_initialize(e){const t=this._tile;t._tileset.createChildrenOfTile(t,e)}get geometryByteLength(){return 0}get texturesByteLength(){return 0}get trianglesLength(){return 0}get readyPromise(){return this._readyDeferred.promise}update(e){this._ready||(this._ready=!0,this._readyDeferred&&this._readyDeferred.resolve(this),e.afterRenderFns.push((function(){})))}},r.TilesCacheScheduler=class{constructor(e){e=r.Utils.defaultValue(e,{}),this._maximumMemoryUsage=e.maximumMemoryUsage||2048,this._destroyed=!1,this._statistics=new r.Statistics,this._tilesCache=new r.TilesCache(this)}destroy(){this._destroyed=!0,this._tilesCache.destroy(),this._tilesCache=void 0,this._statistics.destroy(),this._statistics=void 0}isDestroyed(){return this._destroyed}get statistics(){return this._statistics}get tilesCache(){return this._tilesCache}get maximumMemoryUsage(){return this._maximumMemoryUsage}set maximumMemoryUsage(e){this._maximumMemoryUsage=e}get totalMemoryUsageInBytes(){var e=this._statistics;return e.texturesByteLength+e.geometryByteLength}clearStatistics(){this._statistics.clear()}resetTilesCache(e){e.newFrame&&this._tilesCache.reset()}update(){this._tilesCache.unloadTiles()}},r.TextureManager=class{constructor(e,t={}){this._textureMap={},this._imageUrlMap={},this._typicalTextureLoader=new r.TextureLoader,this._typicalTextureLoader.crossOrigin=!0,this._basisTextureLoader=r.MaterialUtil.getBasisTextureLoader(),this._ktx2TextureLoader=r.MaterialUtil.getKTX2TextureLoader(),this._textureLoader=this._typicalTextureLoader,this._viewer=e,this._textureEncoding=r.Utils.defaultValue(t.textureEncoding,THREE.GammaEncoding);const i=document.createElement("canvas"),n=i.getContext("2d");n.fillStyle="#FFFFFF",n.fillRect(0,0,1,1),this.defaultTexture=new THREE.CanvasTexture(i),this.defaultTexture.generateMipmaps=!1}destroy(){this._textureMap=null,this._typicalTextureLoader=null,this._basisTextureLoader=null,this._textureLoader=null,this._viewer=null}_dealWithTexturePara(e,t){const{textureName:i,textureEncoding:n,textureParm:a}=t;e.name=i,this._textureMap[i]=e,e._referenceCount=1,e.encoding=n,e.bumpScale=a.getDepth(),e.repeat.fromArray([a.getScaleU(),a.getScaleV()]),e.offset.fromArray([a.getOffsetU(),a.getOffsetV()]),e.rotation=THREE.Math.degToRad(a.getAngle()),r.MaterialUtil.updateUVMatrix(e),a.getRepeatU()&&(e.wrapS=THREE.RepeatWrapping),a.getRepeatV()&&(e.wrapT=THREE.RepeatWrapping)}getTextureFromURL(e,t,i){const n=r.Utils.defaultValue(i.textureEncoding,this._textureEncoding);e=r.RequestSpliter.splitByUrlMd5(e);const a=r.Utils.defaultValue(i.imageType,".png"),s=i.textureParm;return this._chooseTextureLoader(a),new Promise((i=>{const o=this._textureMap[t];if(r.Utils.isDefined(o))return o._referenceCount++,void i(o);r.EnableStorage?this._createTextureWithIndexDB(e,a).then((e=>{this._dealWithTexturePara(e,{textureName:t,textureEncoding:n,textureParm:s}),i(e)})):this._loadTextureFromURL(e).then((e=>{this._dealWithTexturePara(e,{textureName:t,textureEncoding:n,textureParm:s}),i(e)}))}))}getTextureFromBuffer(e,t,i){const n=r.Utils.defaultValue(i.textureEncoding,this._textureEncoding),a=i.textureParm,s=r.Utils.defaultValue(i.imageType,".png");return this._chooseTextureLoader(s),new Promise((i=>{const s=this._textureMap[t];if(r.Utils.isDefined(s))s._referenceCount++,i(s);else{const r=new Blob([e],{type:"image/jpeg"});if(this._textureLoader.supportsImageBitmap&&this._textureLoader.supportsImageBitmap(r)){const e=t;this._textureLoader.loadFromBlob(e,r,(e=>{e.flipY=!1,this._dealWithTexturePara(e,{textureName:t,textureEncoding:n,textureParm:a}),i(e)}))}else{const e=(window.URL||window.webkitURL).createObjectURL(r);this._textureLoader.load(e,(e=>{e.flipY=!1,this._dealWithTexturePara(e,{textureName:t,textureEncoding:n,textureParm:a}),i(e)}))}}}))}disposeTexture(e){return e._referenceCount--,!e._referenceCount&&(e.dispose(),delete this._textureMap[e.name],e=null,!0)}_createTextureWithIndexDB(e,t){return new Promise(((i,n)=>{r.storageManager.getTexture(e).then((t=>{let n=t;!0===this._imageUrlMap[e]?(n=t.clone(),n.needsUpdate=!0):this._imageUrlMap[e]=!0,n.image=r.MaterialUtil.ensurePowerOfTwo(t.image),n.wrapS=THREE.RepeatWrapping,n.wrapT=THREE.RepeatWrapping,i(n)})).catch((()=>{this._loadTextureFromURL(e,t).then((t=>{r.storageManager.addTexture(t,e).catch((e=>{})),i(t)})).catch((e=>{console.log(e),n()}))}))}))}_loadTextureFromURL(e,t){return new Promise((i=>{t&&this._chooseTextureLoader(t),this._textureLoader.load(e,(t=>{let n=t;!0===this._imageUrlMap[e]?(n=t.clone(),n.needsUpdate=!0):this._imageUrlMap[e]=!0,n.image=r.MaterialUtil.ensurePowerOfTwo(t.image),n.wrapS=THREE.RepeatWrapping,n.wrapT=THREE.RepeatWrapping,i(n)}),void 0,(()=>{i(this.defaultTexture)}))}))}_chooseTextureLoader(e){switch(e){case".basis":this._textureLoader=this._basisTextureLoader,this._textureLoader.detectedSupport||this._textureLoader.detectSupport(this._viewer.getRenderer());break;case".ktx2":this._textureLoader=this._ktx2TextureLoader,this._textureLoader.basisLoader.detectedSupport||this._textureLoader.basisLoader.detectSupport(this._viewer.getRenderer());break;default:this._textureLoader=this._typicalTextureLoader}return this._textureLoader}},function(){function e(e,t){return t._distance-e._distance}r.TilesetTraversal=class{constructor(){this.traversalStack=[],this.emptyTraversalStack=[],this.traversalDescendants=[]}destroy(){this.traversalStack=null,this.emptyTraversalStack=null,this.traversalDescendants=null}traverseTiles(e,t,i){const r=this.traversalStack;for(r.push(t);r.length>0;){const t=r.pop(),n=t.refineReplace,a=!t.parent||t.parent._refines;let s=!1;if(this.updateTileContentLinksToAncestor(t,i),e._isAvailableDetailLevel(t)){if(e._fetchChildrenOfTile(t,i),e.onDemandJudgment(t))continue;e._canBeTraverse(t,i)&&(s=this.subdivideTile(e,t,i),s=s&&a)}if(e._addTileToRequestedQueue(t,i),n){!s&&a&&e._addTileToSelectedQueue(t,i)}else e._addTileToSelectedQueue(t,i);e.visitTile(t,i),e.touchTile(t,i),t._refines=s}}subdivideTile(t,i,r){const n=this.traversalStack,a=i.childrenTree;a.forEach((e=>{t.updateTile(e,r)})),a.sort(e);const s=i.refineReplace&&!i.contentTypeEmpty;let o=!0,l=!1;return a.forEach((e=>{if(e.visible?(n.push(e),l=!0):s&&(t._addTileToRequestedQueue(e,r),t.visitTile(e,r),t.touchTile(e,r)),!s)return;const i=e.contentTypeEmpty?this.traverseTileWithEmptyContent(t,e,r):e.contentAvailable;o=o&&i})),l||(o=!1),o}traverseTileWithEmptyContent(e,t,i){const r=this.emptyTraversalStack;r.push(t);let n=!0;for(;r.length>0;){const t=r.pop();if(e._fetchChildrenOfTile(t,i),t.contentTypeTile&&!t.hasChildren()){n=!1;continue}let a=t.contentTypeEmpty&&e._canBeTraverse(t,i),s=t.contentTypeEmpty&&!t.hasChildren();a||t.contentAvailable||s||(n=!1),a&&t.childrenTree.forEach((t=>{e.updateTile(t,i),t.visible||(e._addTileToRequestedQueue(t,i),e.visitTile(t,i),e.touchTile(t,i)),r.push(t)}))}return n}updateTileContentLinksToAncestor(e,t){e._ancestorWithContent=void 0,e._ancestorWithAvailableContent=void 0;const i=e.parent;i&&(e._ancestorWithContent=i.contentTypeEmpty?i._ancestorWithContent:i,e._ancestorWithAvailableContent=i.contentAvailable?i:i._ancestorWithAvailableContent)}}}(),(()=>{let e=new THREE.Matrix4,t=new THREE.Vector3;class i extends r.BaseModelExplosion{constructor(e){super(e)}explode(){var e=this.model._getHandler();e&&e.explode()}preFloorExplode(e,t,i){let r={};for(var n=0,a=t.length;n<a;n++){let e=t[n].explodedHeight-t[n].elevation,a=new THREE.Vector3(i.x*e,i.y*e,i.z*e);t[n].preExplodedTranslation?r[t[n].name]=a.clone().sub(t[n].preExplodedTranslation):r[t[n].name]=a,t[n].preExplodedTranslation=a}const s=this,o=this.model.getAllNodeInfos(),l=Object.keys(o);let d=new THREE.Matrix4;for(let t=0,i=l.length;t<i;t++){const i=l[t],n=o[i];for(let t=0,a=n.length;t<a;t++){if(0==t){let e=r[n[t].userData.levelName]||new THREE.Vector3;d.makeTranslation(e.x,e.y,e.z),s.explosionTranslation[i]=e}n[t].boundingBox.applyMatrix4(d),n[t].matrix.multiplyMatrices(d,n[t].matrix),e.union(n[t].boundingBox)}}e.applyMatrix4(this.model.getTransformMatrix())}getExplosionTranslation(e){return this.explosionTranslation[e]||new THREE.Vector3}getExplosionTranslationByObjId(e){return this.explosionTranslation[e]||new THREE.Vector3}getLevelNameByObjId(e){return this.model.getAllNodeInfos()[e][0].userData.levelName}preElementExplode(i,n){const a=this.model.getBoundingBoxWorld();if(!a)return;const s=n-this.model.manager.explosionManager.getExplosionExtent(this.model.id);if(0==s)return;let o=new THREE.Matrix4;e.copy(this.model.transformMatrix).invert();const l=a.getCenter(t).applyMatrix4(e),d=this.model.getAllNodeInfos(),h=Object.keys(d);let c=this.explosionTranslation;for(let e=0,t=h.length;e<t;e++){let t=h[e],n=d[t],a=new THREE.Box3;for(let e=0,t=n.length;e<t;e++)n[e].originBox||(n[e].originBox=n[e].boundingBox.clone()),a.union(n[e].originBox);let u=r.Utils.computeExplodeTranslation(l,a,s);c[t]=u,o.makeTranslation(u.x,u.y,u.z);for(let e=0,t=n.length;e<t;e++)n[e].boundingBox.applyMatrix4(o),n[e].matrix.multiplyMatrices(o,n[e].matrix),i.union(n[e].boundingBox)}i.applyMatrix4(this.model.getTransformMatrix())}}r.BMDModelExplosion=i})(),r.Loader=r.Loader||{},r.Loader.Url=class{constructor(e){this.databagPath=`${e.serverUrl}${e.databagId}`,this.lightmapPath=e.lightmapDatabagId?`${e.serverUrl}${e.lightmapDatabagId}`:e.lightmapDatabagId,this.shellDatabagId=e.shellDatabagId?`${e.serverUrl}${e.shellDatabagId}`:null}projectUrl(){return this.databagPath+"/config.json"}sceneUrl(e){return e=e||0,this.databagPath+"/scene/scene_"+e+r.GlobalData.ZipResourcePostfix}sceneIdUrl(){return this.databagPath+"/scene/scene_id"+r.GlobalData.ZipResourcePostfix}userIdUrl(){return this.databagPath+"/scene/user_id"+r.GlobalData.ZipResourcePostfix}octreeUrl(e){return e=e||"o",this.databagPath+"/scene/octree_"+e+r.GlobalData.ZipResourcePostfix}symbolUrl(){return this.databagPath+"/symbol/symbol"+r.GlobalData.ZipResourcePostfix}mpkUrl(e){return e=e||0,this.databagPath+"/mpk/mpk_"+e+r.GlobalData.ZipResourcePostfix}bmpkUrl(e){e=e||0;const t=this.databagPath+"/bmpk/bmpk_"+e+r.GlobalData.ZipResourcePostfix;return r.RequestSpliter.splitByContextId(t,e)}bmpkIndexUrl(){return this.databagPath+"/bmpk/index"+r.GlobalData.ZipResourcePostfix}meshIdUrl(){return this.databagPath+"/mpk/mesh_id"+r.GlobalData.ZipResourcePostfix}materialUrl(){return this.databagPath+"/material/material"+r.GlobalData.ZipResourcePostfix}uv2Url(){return this.lightmapPath?this.lightmapPath+"/uv2/uvs1-export.buf":this.databagPath+"/uv2/uvs1-export.buf"}uv2MapItemUrl(){return this.lightmapPath?this.lightmapPath+"/uv2/uvs1-export.json":this.databagPath+"/uv2/uvs1-export.json"}lightmapTexUrl(e){return this.lightmapPath?this.lightmapPath+"/texture/"+e:this.databagPath+"/texture/"+e}lightmapProjectUrl(){return this.lightmapPath?this.lightmapPath+"/config.json":this.lightmapPath}materialIdUrl(){return this.databagPath+"/material/material_id"+r.GlobalData.ZipResourcePostfix}texturePkgOrgIndexUrl(){return this.databagPath+"/texture/pkg_org_index"+r.GlobalData.ZipResourcePostfix}texturePkgSmallIndexUrl(){return this.databagPath+"/texture/pkg_s_index"+r.GlobalData.ZipResourcePostfix}texturePkgIndexUrl(e){return e?this.databagPath+"/texture/pkg_index"+r.GlobalData.ZipResourcePostfix:this.databagPath+"/texture/pkg_index"+r.GlobalData.JsonResourcePostfix}texturePkgFileName(e,t,i,n){var a=void 0;return a=e?`pkg_${i}`:`pkg_${n}_${i}`,t&&(a+=r.GlobalData.ZipResourcePostfix),a}bmpkPkgIndexUrl(){return this.databagPath+"/bmpk/pkg_index"+r.GlobalData.ZipResourcePostfix}userDataUrl(){return this.databagPath+"/userdata/userdata"+r.GlobalData.ZipResourcePostfix}cameraUrl(){return this.databagPath+"/scene/camera"+r.GlobalData.ZipResourcePostfix}textureUrl(e){const t=this.databagPath+"/texture/"+e,i=e.replace(/[^0-9]/gi,"");return r.RequestSpliter.splitByContextId(t,i)}layerUrl(){return this.databagPath+"/scene/layer"+r.GlobalData.ZipResourcePostfix}layerKeyUrl(){return this.databagPath+"/scene/layer_key"+r.GlobalData.ZipResourcePostfix}lineUrl(){return this.databagPath+"/line/line"+r.GlobalData.ZipResourcePostfix}layerSceneUrl(e){return e=e||0,this.databagPath+"/layer/layer_"+e+r.GlobalData.ZipResourcePostfix}layerSceneCell(){return this.databagPath+"/layer/layer_cell"+r.GlobalData.ZipResourcePostfix}layerOctree(){return this.databagPath+"/layer/layer_octree"+r.GlobalData.ZipResourcePostfix}borderLineUrl(e){return e=e||0,this.databagPath+"/outline/outline_"+e+r.GlobalData.ZipResourcePostfix}mpkBorderLineUrl(e){return e=e||0,this.databagPath+"/outline/outline_mpk_"+e+r.GlobalData.ZipResourcePostfix}terrainUrl(e,t,i){return this.databagPath+"/terrain/"+e+"/"+t+"/"+i+"/"+r.GlobalData.TerrainResourceFileName}sceneStatisticsUrl(){return this.databagPath+"/sceneStatistics.json"}shellModelUrl(){return this.shellDatabagId?`${this.shellDatabagId}/config.json`:null}},r.ModelView.WireframeManager=class{constructor(){this.defaultWireframeColor=r.MaterialUtil.DefaultWireframeColor,this.wireframeMaterial=new r.MeshBasicClipMaterial(this.defaultWireframeColor),!1===r.GlobalData.TranslucentDepthDisabled&&(this.wireframeMaterial.transparent=!0),this.instanceWireframeMaterial=r.MaterialUtil.createInstanceMaterial(r.MaterialUtil.getMaterialParameters(this.wireframeMaterial)),!1===r.GlobalData.TranslucentDepthDisabled&&(this.instanceWireframeMaterial.transparent=!0),this.wireframeGeometryMap={}}destroy(){this.wireframeMaterial.dispose(),this.wireframeMaterial=null,this.instanceWireframeMaterial.destroy(),this.instanceWireframeMaterial=null,this.wireframeGeometryMap=null,this.defaultWireframeColor=null}setWireframeColor(e,t){this.wireframeMaterial.color=e,this.wireframeMaterial.opacity=t,this.wireframeMaterial.transparent=1!=t,this.instanceWireframeMaterial.color=e,this.instanceWireframeMaterial.opacity=t,this.instanceWireframeMaterial.transparent=1!=t}getWireframeColor(){var e=this.wireframeMaterial.color.clone();return e.opacity=this.wireframeMaterial.opacity,e}restoreWireframeColor(){var e=this.defaultWireframeColor;this.setWireframeColor(e.color,e.opacity)}},r.ModelView.ConfigLoader=class{constructor(e){this.model=e,this.config=null,this.statistics={renderableCount:0,renderableTotal:r.GlobalData.maxObjectNumInPool,renderableTotalForPool:r.GlobalData.maxObjectNumInPool,numOfElements:0,numOfTriangles:0,numOfVertices:0,memoeryInfo:null},this.transformInfos={octreeTransformed:!0,boundingBox:null,position:new THREE.Vector3,rotation:new THREE.Quaternion,scale:new THREE.Vector3(1,1,1),transformMatrix:new THREE.Matrix4},this.sceneStatistics=void 0}destroy(){this.model=null,this.config=null,this.statistics=null,this.transformInfos=null,this.sceneStatistics=null}load(e){var t=this,i=this.model,n=i.dataUrl,a=i.fileLoader;a.setResponseType(""),a.load(n.projectUrl(),(function(n){var a;try{a=JSON.parse(n)}catch(e){return console.log("Config data exceptions!"),void i.dispatchEvent({type:r.EVENTS.ON_LOAD_INVALID_SCENE})}if(r.Utils.checkVersionMatch(r.Version,a.metadata.version)){if(0===a.metadata.scenes)return i.setEmptyScene(!0),void i.dispatchEvent({type:r.EVENTS.ON_LOAD_EMPTY_SCENE});0==a.metadata.gz?r.GlobalData.ZipResourcePostfix="":r.GlobalData.ZipResourcePostfix=".gz",i.setEmptyScene(!1),t._loadDataForSceneStatistics((function(){t._parse(a),e&&e()}))}else i.dispatchEvent({type:r.EVENTS.ON_VERSION_NO_MATCH,version:{engine:r.Version,data:a.metadata.version}})}),void 0,(function(){console.log("Config load error!"),i.dispatchEvent({type:r.EVENTS.ON_LOAD_INVALID_SCENE})}))}loadWithConfig(e,t){var i=this,n=this.model;if(r.Utils.checkVersionMatch(r.Version,e.metadata.version)){if(0===e.metadata.scenes)return n.setEmptyScene(!0),console.warn("The scene is Empty!"),void n.dispatchEvent({type:r.EVENTS.ON_LOAD_EMPTY_SCENE});0==e.metadata.gz?r.GlobalData.ZipResourcePostfix="":r.GlobalData.ZipResourcePostfix=".gz",n.setEmptyScene(!1),i._loadDataForSceneStatistics((function(){i._parse(e),t&&t()}))}else n.dispatchEvent({type:r.EVENTS.ON_VERSION_NO_MATCH,version:{engine:r.Version,data:e.metadata.version}})}_loadDataForSceneStatistics(e){var t=this,i=this.model.fileLoader;const n=this.model.dataUrl.sceneStatisticsUrl();r.Storage.IndexedDBHelper.loadWithStorage("InfoData",n,(()=>new Promise(((e,t)=>{i.setResponseType(""),i.load(n,e,void 0,t)}))),(i=>{var r=JSON.parse(i);t.sceneStatistics=r.sceneStatistics,e&&e()}),e)}_parse(e){this.config=e,this._setMetadata(e),this._toStatistics(e),this._setTransformInfos(e),this._chooseRendering(e),this._setHandler(e)}_setMetadata(e){e.metadata.scenes=e.metadata.scenes?1:0,e.metadata.symbol=e.metadata.symbol?1:0,e.metadata.octree_o=e.metadata.octree_o?1:0,e.metadata.octree_i=e.metadata.octree_i?1:0,e.metadata.userdata=e.metadata.userdata?1:0,e.metadata.userId=1,e.metadata.camera=e.metadata.camera?1:0,e.metadata.material=e.metadata.material||0,e.metadata.material_json=e.metadata.material_json?1:0,e.metadata.lines=r.Compatibility.isLoadLinesEnabled(e.metadata.version)&&e.metadata.lines?1:0,e.metadata.outline_0=e.metadata.outline_0?1:0,e.metadata.outline_1=e.metadata.outline_1?1:0,e.metadata.outline_mpk=e.metadata.outline_mpk||0,e.metadata.mpk_shared_index=e.metadata.mpk_shared_index||e.metadata.outline_mpk}_getDataProvider(e){if(r.GlobalData.DataProvider===r.EnumDataProvider.MERGED&&void 0!==e.bmpks&&e.bmpks>0)return r.EnumDataProvider.MERGED;if(r.GlobalData.EnableLoadOnDemand&&e.layers){if(r.GlobalData.DataProvider===r.EnumDataProvider.LAYER_SCENE)return e.layers>1&&r.Compatibility.isLoadLayerSceneEnabled(e.version)?r.EnumDataProvider.LAYER_SCENE:r.EnumDataProvider.LAYER;if(r.GlobalData.DataProvider===r.EnumDataProvider.LAYER)return r.EnumDataProvider.LAYER}if(r.GlobalData.DataProvider===r.EnumDataProvider.AUTO){if(r.GlobalData.EnableLoadOnDemand&&e.layers)return e.layers>1&&r.Compatibility.isLoadLayerSceneEnabled(e.version)?r.EnumDataProvider.LAYER_SCENE:r.EnumDataProvider.LAYER;if(r.GlobalData.BatchMergeEnabled&&r.Compatibility.isLoadBMpkEnabled(e.version)&&void 0!==e.bmpks&&e.bmpks>0)return r.EnumDataProvider.MERGED}return r.EnumDataProvider.DEFAULT}_chooseRendering(e){this.model.manager.chooseRendering(this.statistics.memoeryInfo,!1,e)}_setHandler(e){var t=!(!r.GlobalData.CanUseWireframeFromData||!e.metadata.outline_0&&!e.metadata.outline_1),i=this._getDataProvider(e.metadata),n=null,a=this.model;if(r.GlobalData.BatchMergeEnabled)switch(i){case r.EnumDataProvider.LAYER:r.GlobalData.HasLayerData=!0,r.GlobalData.LoadMpkOnDemand=!0,n=new r.ModelView.LayerBatchedHandler(a,t),a.loadMpkOnDemand=!0;break;case r.EnumDataProvider.LAYER_SCENE:r.GlobalData.HasLayerData=!0,r.GlobalData.LoadMpkOnDemand=!0,n=new r.ModelView.LayerSceneBatchedHandler(a,t),a.loadMpkOnDemand=!0;break;case r.EnumDataProvider.MERGED:n=r.GlobalData.EnableWorker?new r.ModelView.WorkerDataBatchedHandler(a):new r.ModelView.DataBatchedHandler(a,t);break;default:n=r.GlobalData.EnableWorker?new r.ModelView.WorkerBatchedHandler(a):new r.ModelView.BatchedHandler(a,t)}else if(r.GlobalData.OrganizeNodesByCameraView)switch(i){case r.EnumDataProvider.LAYER:r.GlobalData.HasLayerData=!0,r.GlobalData.LoadMpkOnDemand=!0,n=new r.ModelView.LayerIncrementHandler(a),a.loadMpkOnDemand=!0;break;case r.EnumDataProvider.LAYER_SCENE:r.GlobalData.HasLayerData=!0,r.GlobalData.LoadMpkOnDemand=!0,n=new r.ModelView.LayerSceneIncrementHandler(a),a.loadMpkOnDemand=!0;break;case r.EnumDataProvider.MERGED:n=new r.ModelView.DataBatchedHandler(a,t);break;default:n=new r.ModelView.IncrementHandler(a)}else switch(i){case r.EnumDataProvider.LAYER:r.GlobalData.HasLayerData=!0,r.GlobalData.LoadMpkOnDemand=!0,n=new r.ModelView.FreeLayerIncrementHandler(a);break;case r.EnumDataProvider.LAYER_SCENE:r.GlobalData.HasLayerData=!0,r.GlobalData.LoadMpkOnDemand=!0,n=new r.ModelView.FreeLayerSceneIncrementHandler(a),a.loadMpkOnDemand=!0;break;case r.EnumDataProvider.MERGED:n=new r.ModelView.DataBatchedHandler(a);break;default:e.metadata.mpk_batched?(console.log("use batched mpks"),n=new r.ModelView.IncrementBatchedHandler(a)):n=new r.ModelView.FreeIncrementHandler(a)}a._handler=n}_setTransformInfos(e){if(0!==e.view.transform?this.transformInfos.octreeTransformed=!0:this.transformInfos.octreeTransformed=!1,this.transformInfos.boundingBox=r.Utils.box3FromArray(e.view.bbox),e.view.rotation){var t=new THREE.Euler;t.fromArray(e.view.rotation),this.transformInfos.rotation.setFromEuler(t,!1)}e.view.position&&this.transformInfos.position.fromArray(e.view.position),e.view.scale&&this.transformInfos.scale.fromArray(e.view.scale),this.transformInfos.transformMatrix.compose(this.transformInfos.position,this.transformInfos.rotation,this.transformInfos.scale)}_toStatistics(e){e.count.texture_pixels&&e.count.texture_pixels>r.GlobalData.MaxTexturePixels&&(r.GlobalData.EnableTextureLoading=!1),void 0!==e.count&&(void 0!==e.count.mesh_face&&(this.statistics.numOfTriangles+=e.count.mesh_face),this.statistics.renderableTotal=0,this.statistics.renderableTotalForPool=0,void 0!==e.count.geom_box&&void 0!==e.count.geom_pipe&&void 0!==e.count.geom_tube&&void 0!==e.count.mesh?(this.statistics.renderableTotal+=e.count.geom_box,this.statistics.renderableTotal+=e.count.geom_pipe,this.statistics.renderableTotal+=e.count.geom_tube,this.statistics.renderableTotal+=e.count.mesh,this.statistics.renderableTotalForPool+=6*e.count.geom_box,this.statistics.renderableTotalForPool+=3*e.count.geom_pipe,this.statistics.renderableTotalForPool+=e.count.geom_tube,this.statistics.renderableTotalForPool+=e.count.mesh,this.statistics.numOfTriangles+=12*e.count.geom_box,this.statistics.numOfTriangles+=32*e.count.geom_pipe,this.statistics.numOfTriangles+=32*e.count.geom_tube):void 0!==e.count.geom&&void 0!==e.count.mesh&&(this.statistics.renderableTotal+=e.count.geom,this.statistics.renderableTotal+=e.count.mesh,this.statistics.numOfTriangles+=12*e.count.geom,this.statistics.numOfElements=this.statistics.renderableTotal,this.statistics.renderableTotalForPool=this.statistics.renderableTotal),void 0!==e.count.item&&(this.statistics.numOfElements=e.count.element||e.count.item)),this.sceneStatistics?(this.statistics.numOfTriangles=this.sceneStatistics.triangleTotalCount,this.statistics.numOfVertices=this.sceneStatistics.vertexTotalCount,this.statistics.numOfElements=this.sceneStatistics.elementCount,this.statistics.memoeryInfo=this._computeMaximumMemoryUsage(e)):(this.statistics.numOfVertices=this._computeNumOfVertices(e),this.statistics.memoeryInfo=this._computeApproximateMemoryUsage(e))}_computeNumOfVertices(e){return void 0===e.count?0:(e.count.mesh_vertex||0)+24*(e.count.geom_box||0)+130*(e.count.geom_pipe||0)+24*(e.count.geom_box_m||0)}_computeMaximumMemoryUsage(e){var t=this.sceneStatistics,i=t.vertexTotalCount,n=t.triangleTotalCount,a=0;a+=8*i,a+=3*n;var s=e.count.texture_pixels||0;return r.GlobalData.EnableTextureLoading&&(a+=4*s),a*=4,a*=1/1048576,{maxMemorySize:a=Math.ceil(a),triangleNumber:n}}_computeApproximateMemoryUsage(e){var t=0,i=0,n=1/1048576,a=e.count.mesh_vertex||0,s=e.count.mesh_face||0,o=e.count.geom_box||0,l=e.count.geom_pipe||0,d=130,h=124,c=e.count.texture_pixels||0;i+=8*a,i+=3*s,i+=0,i+=0,t+=6*a,t+=3*s,t+=0,t+=0;var u=0;return u+=s,o>0&&(u+=12*o),l>0&&(u+=h*l),u+=0,r.GlobalData.Instance?(o>0&&(i+=192,i+=36,i+=24*o,t+=144,t+=36,t+=18*o),l>0&&(i+=1040,i+=372,i+=24*l,t+=780,t+=372,t+=18*l)):(o>0&&(i+=24*o*8,i+=12*o*3,t+=24*o*6,t+=12*o*3),l>0&&(i+=l*d*8,i+=l*h*3,t+=l*d*6,t+=l*h*3)),r.GlobalData.EnableTextureLoading&&(i+=4*c,t+=4*c),i*=4,t*=4,i*=n,t*=n,{maxMemorySize:i=Math.ceil(i),minMemorySize:t=Math.ceil(t),triangleNumber:u,instanceEnabled:r.GlobalData.Instance}}getMemoryInfo(){return this.statistics.memoeryInfo}getStatistics(){return this.statistics}getConfig(){return this.config}getTransforms(){return this.transformInfos}setRenderableCount(e){this.statistics.renderableCount=e}getVersion(){return this.config.metadata.version}},function(){class e extends r.BaseModel{constructor(e,t,i,n,a){super(e,t),this.isBmdLayer=!0,this.filter=new r.FilterManager,this.filter.setObserverForSceneState(this.manager.getFilter().getObserverForSceneState()),this.debut=a,this.dataUrl=new r.Loader.Url(t),this.fileLoader=new THREE.FileLoader(new THREE.LoadingManager),this.configLoader=new r.ModelView.ConfigLoader(this),this.pool=e.getObjectPool(),this.firstOctreeTransform=!0,this.selectedMaterial=this.manager.sceneState.selectionMaterial,this.materialManager=new r.MaterialManager(e.viewer),this.wireframeManager=new r.ModelView.WireframeManager,this.cameraList=[],this.index=i,this.parseCfgFinish=n,this.progressPercentage={load:.4,collect:.5,merge:.1};const s=r.GlobalData.BatchAsyncProcessingFrequency;this.progressFrequency="number"==typeof s?s:10,this._rootNodeGroupName=r.ObjectGroupType.MODEL+"|"+this.databagId,this._rootNodeGroup=this._createRootNodeGroup(),this._rootNodeGroup.transformMatrix=this.transformMatrix,this._handler=null,this.lightmap=null!=t.lightmapDatabagId,this.lightmapNum=0,this.enableLightmap=!1,this.lightmapIntensity=r.GlobalData.LightmapIntensity,this.minDistanceObjects={},this.prioritizedNodeCount=0,this.plugins=[],this.modelExplosion=new r.BMDModelExplosion(this),this.isAllMaterialChanged=!1,this.loadMpkOnDemand=!1,this._vertexOffsetMatrix=void 0}destroy(){this.selectedMaterial=null,this.cameraList=null,this.occlusionCamera&&(this.occlusionCamera=null),this._handler&&(this._handler.destroy(),this._handler=null),this.wireframeManager.destroy(),this.wireframeManager=null,this.materialManager.disposeMaterials(this),this.materialManager.destroy(),this.materialManager=null,this.pool=null;for(var e=0,t=this.plugins.length;e<t;e++)this.plugins[e].destroy(),this.plugins[e]=null;this.plugins=null,this.configLoader.destroy(),this.configLoader=null,this._removeMeshNodeGroup(),this.removeAllFromOctantMap(),this.dataUrl=null,this.fileLoader=null,this.debut=null,this.parseCfgFinish=null,this.progressPercentage=null,this.minDistanceObjects=null,this._vertexOffsetMatrix=void 0,super.destroy()}_createRootNodeGroup(){return this.manager.scene.getOrCreateObjectGroup(this._rootNodeGroupName,{pickableType:r.PICKABLETYPE.Geometry,globalSpace:!0})}_getWireframeGroupName(){return r.ObjectGroupType.WIREFRAME+"|"+this.getEncodedDatabagId()}load(e){var t=this;return new Promise(((i,r)=>{this.configLoader.loadWithConfig(this.config,(function(){t.parseCfgFinish&&t.parseCfgFinish(),t.manager.updateScene(),t._getHandler().load(e),i()}))}))}setCrossOrigin(e){this.fileLoader.setCrossOrigin(e)}prepare(e,t){var i=this._getHandler();i&&i.prepare(e,t)}dispatchEvent(e){this.manager.dispatchEvent(e)}setLoaded(e){this.loaded=e}isLoaded(){return!!this._handler&&this.loaded}isEmptyScene(){return this.emptyScene}setEmptyScene(e){this.emptyScene=e}isLayerData(){return!(!this._handler||"layer"!==this._handler.tag)}isVisible(){return this.visible}setVisible(e){this.visible=e,this._rootNodeGroup.visible!==e&&(this._rootNodeGroup.visible=e,this._rootNodeGroup.pickableType=e?r.PICKABLETYPE.Geometry:r.PICKABLETYPE.UnPickable,this.manager.setRenderStateChanged(!0))}calculateCameraModelRelation(e){this.containsCamera=this.getModelDescriptor().isOctreeOuter(e)}addCamera(e){this.cameraList.push(e)}getCameraNameList(){for(var e=[],t=this.cameraList.length-1;t>=0;t--)e.push(this.cameraList[t].name);return e}getCamera(e){for(var t=this.cameraList.length-1;t>=0;t--)if(this.cameraList[t].name===e)return this.cameraList[t];return null}updateOctreeNode(e){if(e||this.firstOctreeTransform){this.firstOctreeTransform&&(this.firstOctreeTransform=!1);var t=this.manager.scene.getMatrixGlobal();this.getModelDescriptor().updateOctreeNode(t,this.getTransformMatrix())}}isDataReady(){var e=this._handler;return!!e&&e.isDataReady()}updateMeshNodes(){var e=this._getHandler();e&&e.updateNodes()}_getHandler(){return this._handler}getMeshesByUserIds(e,t){if(e&&t){this.minDistanceObjects[e]=[],this.minDistanceObjects[t]=[];var i=this._getHandler();i&&i.getMeshesByUserIds(e,t);for(var r=0,n=this.plugins.length;r<n;r++)this.plugins[r].getMeshesByUserIds([e,t])}}applyFilter(){for(var e=0,t=this.plugins.length;e<t;e++)this.plugins[e].applyFilter();var i=this._getHandler();i&&i.applyFilter()}applySelection(){for(var e=0,t=this.plugins.length;e<t;e++)this.plugins[e].applySelection();var i=this._getHandler();i&&i.applySelection()}clearSelection(){for(var e=0,t=this.plugins.length;e<t;e++)this.plugins[e].clearSelection();var i=this._getHandler();i&&i.clearSelection()}applyHover(){for(var e=0,t=this.plugins.length;e<t;e++)this.plugins[e].applyHover();var i=this._getHandler();i&&i.applyHover()}clearHover(){for(var e=0,t=this.plugins.length;e<t;e++)this.plugins[e].clearHover();var i=this._getHandler();i&&i.clearHover()}applyBlink(){var e=this._getHandler();e&&e.applyBlink()}clearBlink(){var e=this._getHandler();e&&e.clearBlink()}applyReplacement(){var e=this._getHandler();e&&e.applyReplacement()}_removeMeshNodeGroup(){this._removeNodeGroup(r.ObjectGroupType.GEOMETRY),this._removeNodeGroup(r.ObjectGroupType.INSTANCEGEOMETRY),this._removeNodeGroup(r.ObjectGroupType.WIREFRAME),this._removeNodeGroup(r.ObjectGroupType.INSTANCEWIREFRAMEGEOMETRY),this._removeSceneGroup(),this._rootNodeGroup.transformMatrix=null,this._rootNodeGroup=null}_getNodeGroup(e,t){for(var i=this._rootNodeGroup.children,n=0,a=i.length;n<a;n++)if(i[n].name==e)return i[n];var s=new r.ObjectGroup(e,t);return this._rootNodeGroup.add(s),s.globalSpace&&(s.matrixAutoUpdate=!1,s.updateMatrixWorld(!0)),s}_removeNodeGroup(e){this._rootNodeGroup.removeByName(e)}_hasNodeGroup(e){return this._rootNodeGroup.hasChild(e)}_removeSceneGroup(){this.manager.scene.removeObjectGroupByName(this._rootNodeGroupName),this.manager.scene.removeObjectGroupByName(this._getWireframeGroupName())}removeAllFromOctantMap(){this.manager.removeAllFromOctantMap(this.getEncodedDatabagId())}clearMeshFromOctantMap(){this.manager.clearMeshFromOctantMap(this.getEncodedDatabagId())}getMaterialManager(){return this.materialManager}clearWireframeElementCount(){this.wireframeElementCount=void 0}getWireframeElementCount(){if(void 0!==this.wireframeElementCount)return this.wireframeElementCount;var e=this.getModelDescriptor().getAllNodeInfos(),t=this.getFilter(),i=0;for(var r in e){var n=e[r];t._hasRenderWithBoardlineFilter()&&!t._isRenderWithBoardline(n[0])||(i+=n.length)}return this.wireframeElementCount=i,i}isActivateWireframe(){return this.manager.isDrawingBoardlineEnabled()}isOnlyWireframe(){return this.manager.isOnlyWireframe()}getLoadedUserIdsObject(){return this._handler&&this._handler.getLoadedUserIdsObject?this._handler.getLoadedUserIdsObject():null}clearNodeGroup(){var e=this._getNodeGroup(r.ObjectGroupType.GEOMETRY,{globalSpace:!0});e.clear(),(e=this._getNodeGroup(r.ObjectGroupType.WIREFRAME,{globalSpace:!0})).clear(),(e=this._getNodeGroup(r.ObjectGroupType.INSTANCEGEOMETRY,{globalSpace:!0})).clear(),(e=this._getNodeGroup(r.ObjectGroupType.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0})).clear(),(e=this.manager.scene.getObjectGroup(this._getWireframeGroupName()))&&e.clear()}getWireframeMaterial(){return this.wireframeManager.wireframeMaterial}getInstanceWireframeMaterial(){return this.wireframeManager.instanceWireframeMaterial}getMaterialByMaterialId(e){return this.materialManager.materials[e]}adjustProgressPercentage(e,t,i){this.progressPercentage.load=e,this.progressPercentage.collect=t,this.progressPercentage.merge=i}setReplacedUserIdMap(e){r.Utils.isOwnEmptyObject(e)?this.replacedUserIdMap=null:this.replacedUserIdMap=e}hasReplacedUserId(){return!r.Utils.isEmptyObject(this.replacedUserIdMap)}isReplacedUserId(e){return this.replacedUserIdMap&&this.replacedUserIdMap[e]}registerPlugin(e){this.plugins.push(e)}disposeBufferAfterVbo(){var e=this._getHandler();e&&e.disposeBufferAfterVbo()}isHiddenUserId(e){var t=this._getHandler();return!!t&&t.isHiddenNode(e)}isHiddenSourceObjectUserId(e){return this.manager.isHiddenSourceObjectUserId(e)}hasHiddenSourceObjectUserId(){return this.manager.hasHiddenSourceObjectUserId()}getModelDescriptor(){return this._handler.loader.getDescriptor()}getLoader(){return this._handler.loader}getConfig(){return this.configLoader.getConfig()}getVersion(){return this.configLoader.getVersion()}getTransforms(){return this.configLoader.getTransforms()}getStatistics(){return this.configLoader.getStatistics()}setRenderableCount(e){this.configLoader.setRenderableCount(e),this._handler&&this._handler.clearPriorityNodesSet&&this._handler.clearPriorityNodesSet(!0)}getRenderableCount(){return this.configLoader.getStatistics().renderableCount}getBoundingBoxWorld(){if(!this.configLoader.getTransforms().boundingBox)return null;return this.configLoader.getTransforms().boundingBox.clone().applyMatrix4(this.getTransformMatrix())}calculateClippingIds(e,t){var i=this._getHandler();i&&i.calculateClippingIds(e,t)}calculateClippingContours(e){var t=this._getHandler();t&&t.calculateClippingContours(e)}getOctreeRoots(e){this.getModelDescriptor().getOctreeRoots(e)}isUserIdExist(e){return this.getModelDescriptor().isUserIdExist(e)}getNodeInfosByUserId(e){let t=this.getModelDescriptor().getNodeInfosByUserId(e);return t&&t instanceof Array&&(t[0].transformMatrix=this.getTransformMatrix()),t}getAllNodeInfos(){return this.getModelDescriptor().getAllNodeInfos()}updateMaterialsValue(e,t,i){this.materialManager.updateMaterialsValue(this,e,t,i)}updateMaterials(){this.materialManager.updateMaterials(this)}switchNewStyleMaterial(e){this.materialManager.switchNewStyleMaterial(this,e)}changeAllMaterials(e){this.materialManager.changeAllMaterials(this,e),this.isAllMaterialChanged=!0}adjustVisibility(e){this._getHandler().adjustVisibility(e)}changeVisibilityOfSelectedObjects(e){this._getHandler().changeVisibilityOfSelectedObjects(e)}changeVisibilityOfNonSelectedObjects(e){this._getHandler().changeVisibilityOfNonSelectedObjects(e)}adjustInstanceVisibility(e){this._getHandler().adjustInstanceVisibility(e)}changeInstanceVisibilityOfSelectedObjects(e){this._getHandler().changeInstanceVisibilityOfSelectedObjects(e)}changeInstanceVisibilityOfNonSelectedObjects(e){this._getHandler().changeInstanceVisibilityOfNonSelectedObjects(e)}restoreVisibilityOfObjects(){this._getHandler().restoreVisibilityOfObjects()}isUseable(){return this.isLoaded()&&this.isVisible()}getFilter(){return this.filter}getMeshesForCap(e,t){let i=this.getId();if(e[i]=new r.ObjectGroup,e[i].matrix.copy(this.getTransformMatrix()),e[i].matrixAutoUpdate=!1,!this._handler)return;let n=this.getModelDescriptor().getAllNodeInfos(),a=this.materialManager.getBackMaterials();var s=this._handler.instancedManager;if(s.hasNodeInfo(this)){(l=s.getMeshManager().getPickingNodeGenerator(t).updatePickingMeshesStateForCap(this,n,a.instanceMaterials))&&e[i].add(l)}var o=this._handler.defaultManager;if(o.hasNodeInfo(this)){var l=o.getMeshManager().getPickingNodeGenerator(t).updatePickingMeshesStateForCap(this,n,a.batchMaterials);l&&e[i].add(l)}}getPickingMeshes(e,t,i,n,a){let s=this.getId();t[s]=new r.ObjectGroup,t[s].matrix.copy(this.getTransformMatrix()),t[s].matrixAutoUpdate=!1,this._dealNonInstancedNodesForPicking(e,t[s],i,n,a),this._dealInstancedNodesForPicking(e,t[s],i,n,a),this._dealPluginNodesForPicking(e,t[s],i,n,a)}_dealNonInstancedNodesForPicking(e,t,i,r,n){if(this._handler){var a=this._handler.defaultManager;if(a.hasNodeInfo(this)){var s=a.getMeshManager().getPickingNodeGenerator(n),o=s.updatePickingMeshes(e,i,r,this);if(o&&t.add(o),!s.reserveMaterial){var l=a.getWireFrameManager().getPickingNodeGenerator(n).updatePickingMeshes(e,i,r,this);l&&t.add(l)}}}}_dealInstancedNodesForPicking(e,t,i,r,n){if(this._handler){var a=this._handler.instancedManager;if(a.hasNodeInfo(this)){var s=a.getMeshManager().getPickingNodeGenerator(n),o=s.updatePickingMeshes(e,i,r,this);if(o&&t.add(o),!s.reserveMaterial){var l=a.getWireFrameManager().getPickingNodeGenerator(n).updatePickingMeshes(e,i,r,this);l&&t.add(l)}}}}_dealPluginNodesForPicking(e,t,i,r,n){if(this._handler)for(var a=this.plugins,s=0,o=a.length;s<o;s++){var l=a[s].getPickingNodeGenerator(n).updatePickingMeshes(e,i,r);l&&t.add(l)}}getBlinkMaterials(){var e=this._getHandler();return e?e.getBlinkMaterials():[]}hasTransforms(){return!0}enableColorWithoutLight(e){this.materialManager.enableColorWithoutLight(e)}enableLocalClippingMode(e){this.localClippingMode=e;var t=this._handler.instancedManager.meshManager,i=this._handler.instancedManager.wireframeManager;if(t.updateInstanceClipping(e),i.updateInstanceWireframeClipping(e),!e){for(var r in this.localClippingPlanes=null,this.materialManager.materials){(n=this.materialManager.materials[r]).clippingPlanes=null}for(var r in this.materialManager.instanceMaterials){var n;if((n=this.materialManager.instanceMaterials[r])instanceof Array)for(var a=0,s=n.length;a<s;a++)n[a].clippingPlanes=null;else n.clippingPlanes=null}}}clone(){}getImageByUrl(e){return this.materialManager.getImageByUrl(e)}getDefaultUnit(){return r.EnumLengthlUnits.Millimeter}getVertexOffsetMatrix(){if(void 0!==this._vertexOffsetMatrix)return this._vertexOffsetMatrix;const e=this.config.view.translation;return this._vertexOffsetMatrix=e?(new THREE.Matrix4).makeTranslation(-e[0],-e[1],-e[2]):null,this._vertexOffsetMatrix}getAllNodeGroups(){return this._rootNodeGroup.children}getAllWireframeGroupNames(){return[r.ObjectGroupType.WIREFRAME,r.ObjectGroupType.INSTANCEWIREFRAMEGEOMETRY,this._getWireframeGroupName()]}collectBlinkedMaterial(e,t){for(const i of e){const e=this.getAllNodeInfos()[i];e&&e.map((e=>{if(!0===e.instanceOrNot){this.materialManager.instanceMaterials[e.materialId].map((e=>{t.push(e)}))}else{const r=this.filter._getOverrideMaterialById(i)||this.materialManager.materials[e.materialId],n=`blink#${r.name}#${i}`,a=this.manager.sceneState.getBlinkMaterial(r,n);t.push(a)}}))}}}e.EnumFilterState={CLIPPING:-2,HIDDEN:-1,NONE:0,SELECTED:1,BLINK:2,HOVER:3,TRANSPARENT:4,LOCALCLIPPING:5,OVERRIDED:6},r.Model=e}(),r.Loader.IdReader=function(e){var t=new Uint32Array(e,0,2);this.size=t[0],this.count=t[1],this.cache={},this.idBuffer=e.slice(8),t=null},r.Loader.IdReader.prototype={constructor:r.Loader.IdReader,getSize:function(){return this.size},getCount:function(){return this.count},getString:function(e){if(void 0!==this.cache[e])return this.cache[e];if(e>=0&&e<this.count){var t=new Uint8Array(this.idBuffer,this.size*e,this.size),i=String.fromCharCode.apply(null,t),r=i.indexOf("\0");return this.cache[e]=-1!==r?i.substring(0,r):i,this.cache[e]}},getIndex:function(e){if(null==e)return-1;for(var t=0,i=this.count-1,r=e.length;t<=i;){var n=Math.floor((t+i)/2),a=new Uint8Array(this.idBuffer,this.size*n,r),s=String.fromCharCode.apply(null,a),o=s.indexOf("\0"),l=0;if(0==(l=-1!==o?e.localeCompare(s.substring(0,o)):e.localeCompare(s)))return n;l<0?i=n-1:l>0&&(t=n+1)}return-1}},r.Loader.UserDataReader=function(e){for(var t in this.userData=JSON.parse(e),this.count=0,this.userData)this.userData.hasOwnProperty(t)&&this.count++;this.getCount=function(){return this.count},this.getData=function(){return this.userData},this.getUserData=function(e){if(e>=0&&e<this.count)return this.userData[e+""]}},r.Loader.OctNode=function(e,t){var i=new Uint32Array(e,t,5);this.cell_id=i[0],this.child_s=i[3],this.child_e=i[4];var r=new Float32Array(e,t+20,6);this.boundingBox=new THREE.Box3(new THREE.Vector3(r[0],r[1],r[2]),new THREE.Vector3(r[3],r[4],r[5]))},r.Loader.OctreeReader=function(e){var t=new Uint32Array(e,0,1);this.count=t[0],this.data=new Array(this.count);for(var i=0;i<this.count;++i)this.data[i]=new r.Loader.OctNode(e,4*(1+11*i))},r.Loader.OctreeReader.prototype={constructor:r.Loader.OctreeReader,getCount:function(){return this.count},getNode:function(e){if(e>=0&&e<this.count)return this.data[e]}},r.Loader.Material=function(e,t){var i=new Uint32Array(e,t,8);this.id=i[0],this.type=i[1],this.metal=i[2],this.color=i[3],this.emissive=i[4],this.specular=i[5],this.side=i[6],this.texture_n=i[7],this.texture_id=new Uint32Array(e,t+32,8);var r=new Float32Array(e,t+64,3);this.shininess=r[0],this.opacity=r[1],this.reflectivity=r[2],i=null,r=null},r.Loader.Texture=function(e,t){var i=new Uint32Array(e,t,4);this.id=i[0],this.type=i[1],this.repeat_u=i[2],this.repeat_v=i[3];var r=new Float32Array(e,t+16,5);this.angle=r[0],this.offset_u=r[1],this.offset_v=r[2],this.scale_u=r[3],this.scale_v=r[4];var n=new Uint8Array(e,t+36,8),a=String.fromCharCode.apply(null,n);this.file_name_ext=a.substring(0,a.indexOf("\0")),i=null,r=null,n=null},r.Loader.MaterialReader=function(e){var t=new Uint32Array(e,0,4);this.materialCount=t[0],this.materialOffset=t[1],this.textureCount=t[2],this.textureOffset=t[3],this.materialSize=76,this.textureSize=44,this.materialBuffer=e.slice(this.materialOffset,this.materialOffset+this.materialCount*this.materialSize),this.textureBuffer=e.slice(this.textureOffset,this.textureOffset+this.textureCount*this.textureSize),this.material_id=-1,this.texture_id=-1;var i=new ArrayBuffer(this.materialSize);this.material_cur=new r.Loader.Material(i,0),this.texture_cur=new r.Loader.Texture(i,0),t=null,i=null},r.Loader.MaterialReader.prototype={constructor:r.Loader.MaterialReader,getMaterial:function(e){if(e>=0&&e<this.materialCount)return new r.Loader.Material(this.materialBuffer,e*this.materialSize)},getTexture:function(e){if(e>=0&&e<this.textureCount)return new r.Loader.Texture(this.textureBuffer,e*this.textureSize)},getMaterialInfo:function(e){if(e==this.material_id)return this.material_cur;if(e>=0&&e<this.materialCount){var t=new Uint32Array(this.materialBuffer,e*this.materialSize,8);this.material_cur.id=t[0],this.material_cur.type=t[1],this.material_cur.metal=t[2],this.material_cur.color=t[3],this.material_cur.emissive=t[4],this.material_cur.specular=t[5],this.material_cur.side=t[6],this.material_cur.texture_n=t[7],this.material_cur.texture_id=new Uint32Array(this.materialBuffer,e*this.materialSize+32,8);var i=new Float32Array(this.materialBuffer,e*this.materialSize+64,3);return this.material_cur.shininess=i[0],this.material_cur.opacity=i[1],this.material_cur.reflectivity=i[2],t=null,i=null,this.material_id=e,this.material_cur}},getTextureInfo:function(e){if(e==this.texture_id)return this.texture_cur;if(e>=0&&e<this.textureCount){var t=new Uint32Array(this.textureBuffer,e*this.textureSize,4);this.texture_cur.id=t[0],this.texture_cur.type=t[1],this.texture_cur.repeat_u=t[2],this.texture_cur.repeat_v=t[3];var i=new Float32Array(this.textureBuffer,e*this.textureSize+16,5);this.texture_cur.angle=i[0],this.texture_cur.offset_u=i[1],this.texture_cur.offset_v=i[2],this.texture_cur.scale_u=i[3],this.texture_cur.scale_v=i[4];var r=new Uint8Array(this.textureBuffer,e*this.textureSize+36,8),n=String.fromCharCode.apply(null,r);return this.texture_cur.file_name_ext=n.substring(0,n.indexOf("\0")),t=null,i=null,r=null,this.texture_id=e,this.texture_cur}}},r.Loader.MaterialReaderJson=function(e){if(this.count=0,this.Data=JSON.parse(e),this.Data.hasOwnProperty("materials")&&(this.materials=this.Data.materials),this.Data.hasOwnProperty("metadata")&&(this.metadata=this.Data.metadata,this.metadata.hasOwnProperty("count")&&(this.count=this.metadata.count)),0===this.count)for(var t in this.materials)this.materials.hasOwnProperty(t)&&this.count++;this.getCount=function(){return this.count},this.getMaterial=function(e){if(e>=0&&e<this.count)return this.materials[e+""]}},r.Loader.LayerKeyReader=function(e){for(var t in this.LayerKey=JSON.parse(e),this.count=0,this.LayerKey)this.LayerKey.hasOwnProperty(t)&&this.count++;this.getCount=function(){return this.count},this.getData=function(){return this.LayerKey},this.getLayerKey=function(e){if(e>=0&&e<this.count)return this.LayerKey[e+""]}},r.Loader.LayerHeader=function(e){var t=new Uint32Array(e,0,4);this.layerCount=t[0],this.mpkBufferSize=t[1],this.layerOffset=t[2],this.mpkOffset=t[3];var i=new Float32Array(e,24,4);this.boundingBox=new THREE.Box3(new THREE.Vector3(i[0],i[1],i[2]),new THREE.Vector3(i[3],i[4],i[5])),t=null,i=null},r.Loader.LayerData=function(e,t){var i=new Int32Array(e,t,3);this.layer_id=i[0],this.layer_mpk_index=i[1],this.layer_mpk_count=i[2];var r=new Float32Array(e,t+12,6);this.boundingBox=new THREE.Box3(new THREE.Vector3(r[0],r[1],r[2]),new THREE.Vector3(r[3],r[4],r[5])),i=null,r=null},r.Loader.LayerReader=function(e){this.header=new r.Loader.LayerHeader(e),this.DataSize=36,this.dataBuffer=e.slice(this.header.layerOffset,this.header.layerOffset+this.header.layerCount*this.DataSize),this.mpkBuffer=e.slice(this.header.mpkOffset,this.header.mpkOffset+this.header.mpkBufferSize)},r.Loader.LayerReader.prototype={constructor:r.Loader.LayerReader,getLayerData:function(e){if(e>=0&&e<this.header.layerCount)return new r.Loader.LayerData(this.dataBuffer,e*this.DataSize)},getMpkList:function(e){var t=this.getLayerData(e);if(null!=t)return new Uint32Array(this.mpkBuffer,4*t.layer_mpk_index,t.layer_mpk_count)},getLayerCount:function(){return this.header.layerCount}},r.Loader.SymbolHeader=function(e){var t=new Uint32Array(e,0,9);this.blockId=t[0],this.symbolCount=t[1],this.itemCount=t[2],this.matrixCount=t[3],this.geomBuffSize=t[4],this.symbolOffset=t[5],this.itemOffset=t[6],this.matrixOffset=t[7],this.geomOffset=t[8];var i=new Float32Array(e,36,6);this.boundingBox=new THREE.Box3(new THREE.Vector3(i[0],i[1],i[2]),new THREE.Vector3(i[3],i[4],i[5])),t=null,i=null},r.Loader.Symbol=function(e,t){var i=new Int32Array(e,t,3);this.symbolId=i[0],this.itemIndex=i[1],this.itemCount=i[2];var r=new Float32Array(e,t+12,6);this.boundingBox=new THREE.Box3(new THREE.Vector3(r[0],r[1],r[2]),new THREE.Vector3(r[3],r[4],r[5])),i=null,r=null},r.Loader.SymbolReader=function(e,t){this.header=new r.Loader.SymbolHeader(e),this.symbolSize=36,this.itemSize=52,this.matrixSize=r.Compatibility.getMatrixSize(t),this.matrixDataType=r.Compatibility.getMatrixDatatype(t),this.geomSize=32,this.maxSize=256,this.boxUvSize=36,this.pipeUvSize=18,this.symbolBuffer=e.slice(this.header.symbolOffset,this.header.symbolOffset+this.header.symbolCount*this.symbolSize),this.itemBuffer=e.slice(this.header.itemOffset,this.header.itemOffset+this.header.itemCount*this.itemSize),this.matrixBuffer=e.slice(this.header.matrixOffset,this.header.matrixOffset+this.header.matrixCount*this.matrixSize),this.geomBuffer=e.slice(this.header.geomOffset,this.header.geomOffset+this.header.geomBuffSize),this.matr_cur_id=-1,this.pt_symb_min=new THREE.Vector3(0,0,0),this.pt_symb_max=new THREE.Vector3(0,0,0),this.pt_item_min=new THREE.Vector3(0,0,0),this.pt_item_max=new THREE.Vector3(0,0,0);var i=new ArrayBuffer(this.maxSize);this.symb_cur=new r.Loader.Symbol(i,0),this.item_cur=new r.Loader.Item(i,0),this.matr_cur=new r.Loader.Matrix(i,0,this.matrixDataType),this.pipe_cur=new r.Loader.GeomPipe(i,0),this.symb_cur.boundingBox.set(this.pt_symb_min,this.pt_symb_max),this.item_cur.boundingBox.set(this.pt_item_min,this.pt_item_max)},r.Loader.SymbolReader.prototype={constructor:r.Loader.SymbolReader,getSymbol:function(e){if(e>=0&&e<this.header.symbolCount)return new r.Loader.Symbol(this.symbolBuffer,e*this.symbolSize)},getItem:function(e){if(e>=0&&e<this.header.itemCount)return new r.Loader.Item(this.itemBuffer,e*this.itemSize)},getMatrix:function(e){if(e>=0&&e<this.header.matrixCount)return new r.Loader.Matrix(this.matrixBuffer,e*this.matrixSize,this.matrixDataType)},getGeomPipe:function(e){if(e>=0&&index<this.header.geomBuffSize)return new r.Loader.GeomPipe(this.geomBuffer,e)},getSymbolInfo:function(e){if(e>=0&&e<this.header.symbolCount){var t=new Int32Array(this.symbolBuffer,e*this.symbolSize,3);this.symb_cur.symbolId=t[0],this.symb_cur.itemIndex=t[1],this.symb_cur.itemCount=t[2];var i=new Float32Array(this.symbolBuffer,e*this.symbolSize+12,6);return this.pt_symb_min.set(i[0],i[1],i[2]),this.pt_symb_max.set(i[3],i[4],i[5]),this.symb_cur.boundingBox.set(this.pt_symb_min,this.pt_symb_max),this.symb_cur}},getItemInfo:function(e){if(e>=0&&e<this.header.itemCount){var t=new Int32Array(this.itemBuffer,e*this.itemSize,7);this.item_cur.ItemId=t[0],this.item_cur.originalId=t[1],this.item_cur.materialId=t[2],this.item_cur.userDataId=t[3],this.item_cur.matrixId=t[4],this.item_cur.type=t[5],this.item_cur.toData=t[6];var i=new Float32Array(this.itemBuffer,e*this.itemSize+28,6);return this.pt_item_min.set(i[0],i[1],i[2]),this.pt_item_max.set(i[3],i[4],i[5]),this.item_cur.boundingBox.set(this.pt_item_min,this.pt_item_max),this.item_cur}},getMatrixInfo:function(e){if(e==this.matr_cur_id)return this.matr_cur;if(e>=0&&e<this.header.matrixCount){const t=new this.matrixDataType(this.matrixBuffer,e*this.matrixSize,16);return this.matr_cur.matrix.fromArray(t),this.matr_cur_id=e,this.matr_cur}},getGeomPipeInfo:function(e){if(e>=0&&e<this.header.geomBuffSize){var t=new Float32Array(this.geomBuffer,e,8);return this.pipe_cur.startPt.set(t[0],t[1],t[2]),this.pipe_cur.endPt.set(t[3],t[4],t[5]),this.pipe_cur.radius=t[6],this.pipe_cur.thickness=t[7],this.pipe_cur}},getGeomBoxUvInfo:function(e){if(e>=0&&e+4*this.boxUvSize<=this.header.geomBuffSize)return new Float32Array(this.geomBuffer,e,this.boxUvSize)},getGeomPipeUvInfo:function(e){if(e>=0&&e+4*this.pipeUvSize<=this.header.geomBuffSize)return new Float32Array(this.geomBuffer,e,this.pipeUvSize)},getMpkID:function(e){return parseInt(e/65536)},getMeshIndex:function(e){return parseInt(e%65536)}},r.Loader.MPKHeader=function(e){var t=new Uint32Array(e,0,6);this.blockId=t[0],this.vtFormat=t[1],this.meshCount=t[2],this.meshOffset=t[3],this.bufferSize=t[4],this.bufferOffset=t[5],t=null},r.Loader.MeshData=function(e,t){var i=new Uint32Array(e,t,5);this.mesh_id=i[0],this.ptCount=i[1],this.idxCount=i[2],this.dataOffset=i[3],this.vertexFormat=i[4];var r=new Float32Array(e,t+20,4);this.baseScale=r[0],this.baseX=r[1],this.baseY=r[2],this.baseZ=r[3],i=null,r=null},r.Loader.MPKReader=function(e){this.header=new r.Loader.MPKHeader(e),this.meshSize=36,this.maxSize=256,this.meshBuffer=e.slice(this.header.meshOffset,this.header.meshOffset+this.header.meshCount*this.meshSize),this.geomBuffer=e.slice(this.header.bufferOffset,this.header.bufferOffset+this.header.bufferSize),this.mesh_cur_id=-1;var t=new ArrayBuffer(this.maxSize);this.mesh_cur=new r.Loader.MeshData(t,0)},r.Loader.MPKReader.prototype={constructor:r.Loader.MPKReader,getMeshData:function(e){if(e>=0&&e<this.header.meshCount)return new r.Loader.MeshData(this.meshBuffer,e*this.meshSize)},getMeshInfo:function(e){if(e==this.mesh_cur_id)return this.mesh_cur;if(e>=0&&e<this.header.meshCount){var t=new Uint32Array(this.meshBuffer,e*this.meshSize,5);this.mesh_cur.mesh_id=t[0],this.mesh_cur.ptCount=t[1],this.mesh_cur.idxCount=t[2],this.mesh_cur.dataOffset=t[3],this.mesh_cur.vertexFormat=t[4];var i=new Float32Array(this.meshBuffer,e*this.meshSize+20,4);return this.mesh_cur.baseScale=i[0],this.mesh_cur.baseX=i[1],this.mesh_cur.baseY=i[2],this.mesh_cur.baseZ=i[3],this.mesh_cur_id=e,this.mesh_cur}},getPtBuffer:function(e){if(e>=0&&e<this.header.meshCount){var t=this.getMeshInfo(e);if(void 0===t)return;return 0==t.baseScale?new Float32Array(this.geomBuffer,t.dataOffset,3*t.ptCount):new Uint16Array(this.geomBuffer,t.dataOffset,3*t.ptCount)}},getIdxBuffer:function(e){if(e>=0&&e<this.header.meshCount){var t=this.getMeshInfo(e);if(void 0===t)return;var i=t.dataOffset;return 0==t.baseScale?i+=3*t.ptCount*4:(i+=3*t.ptCount*2,t.ptCount%2==1&&(i+=2)),r.Compatibility.use32MpkData||t.ptCount>65535?new Uint32Array(this.geomBuffer,i,t.idxCount):new Uint16Array(this.geomBuffer,i,t.idxCount)}},getNormalBuffer:function(e){if(2==(2&this.header.vtFormat)&&e>=0&&e<this.header.meshCount){var t=this.getMeshInfo(e);if(void 0===t)return;var i=t.dataOffset;return 0==t.baseScale?i+=3*t.ptCount*4:(i+=3*t.ptCount*2,t.ptCount%2==1&&(i+=2)),r.Compatibility.use32MpkData||t.ptCount>65535?i+=4*t.idxCount:(i+=2*t.idxCount,t.idxCount%2==1&&(i+=2)),new Float32Array(this.geomBuffer,i,3*t.ptCount)}},getUVBuffer:function(e){if(e>=0&&e<this.header.meshCount){var t=this.getMeshInfo(e);if(void 0===t||4!=(4&t.vertexFormat))return;var i=t.dataOffset;return 0==t.baseScale?i+=3*t.ptCount*4:(i+=3*t.ptCount*2,t.ptCount%2==1&&(i+=2)),r.Compatibility.use32MpkData||t.ptCount>65535?i+=4*t.idxCount:(i+=2*t.idxCount,t.idxCount%2==1&&(i+=2)),2==(2&this.header.vtFormat)&&(i+=3*t.ptCount*4),new Float32Array(this.geomBuffer,i,2*t.ptCount)}},getOffsetIndexInfo:function(e,t){if(!(e<0||e>=this.header.meshCount)){var i=this.getMeshInfo(e),r=void 0!==t?!t:4==(4&i.vFormat);return{meshId:i.mesh_id,positionStart:i.vOffset/4,positionCount:3*i.ptCount,indexStart:i.iOffset/4,indexCount:i.idxCount,uvStart:r?i.tOffset/4:0,uvCount:r?2*i.ptCount:0}}},hasUV:function(e){if(!(e<0||e>=this.header.meshCount))return 4==(4&this.getMeshInfo(e).vFormat)}},r.Loader.BMPKHeader=function(e){var t=new Uint32Array(e,0,12);this.blockId=t[0],this.vtFormat=t[1],this.meshCount=t[2],this.meshOffset=t[3],this.ptBufferSize=t[4],this.ptBufferOffset=t[5],this.idxBufferSize=t[6],this.idxBufferOffset=t[7],this.norBufferSize=t[8],this.norBufferOffset=t[9],this.uvBufferSize=t[10],this.uvBufferOffset=t[11],t=null},r.Loader.BMeshData=function(e,t){var i=new Uint32Array(e,t,8);this.mesh_id=i[0],this.ptCount=i[1],this.idxCount=i[2],this.vFormat=i[3],this.vOffset=i[4],this.iOffset=i[5],this.nOffset=i[6],this.tOffset=i[7],i=null},r.Loader.BMPKReader=function(e){this.header=new r.Loader.BMPKHeader(e),this.meshSize=32,this.maxSize=256,this.meshBuffer=e.slice(this.header.meshOffset,this.header.meshOffset+this.header.meshCount*this.meshSize),this.vBuffer=e.slice(this.header.ptBufferOffset,this.header.ptBufferOffset+this.header.ptBufferSize),this.iBuffer=e.slice(this.header.idxBufferOffset,this.header.idxBufferOffset+this.header.idxBufferSize),this.nBuffer=e.slice(this.header.norBufferOffset,this.header.norBufferOffset+this.header.norBufferSize),this.tBuffer=e.slice(this.header.uvBufferOffset,this.header.uvBufferOffset+this.header.uvBufferSize),this.mesh_cur_id=-1;var t=new ArrayBuffer(this.maxSize);this.mesh_cur=new r.Loader.BMeshData(t,0)},r.Loader.BMPKReader.prototype={constructor:r.Loader.BMPKReader,getMeshData:function(e){if(e>=0&&e<this.header.meshCount)return new r.Loader.BMeshData(this.meshBuffer,e*this.meshSize)},getMeshInfo:function(e){if(e==this.mesh_cur_id)return this.mesh_cur;if(e>=0&&e<this.header.meshCount){var t=new Uint32Array(this.meshBuffer,e*this.meshSize,8);return this.mesh_cur.mesh_id=t[0],this.mesh_cur.ptCount=t[1],this.mesh_cur.idxCount=t[2],this.mesh_cur.vFormat=t[3],this.mesh_cur.vOffset=t[4],this.mesh_cur.iOffset=t[5],this.mesh_cur.nOffset=t[6],this.mesh_cur.tOffset=t[7],this.mesh_cur_id=e,this.mesh_cur}},getPtBuffer:function(e){if(e>=0&&e<this.header.meshCount){var t=this.getMeshInfo(e);if(void 0===t)return;return new Float32Array(this.vBuffer,t.vOffset,3*t.ptCount)}},getIdxBuffer:function(e){if(e>=0&&e<this.header.meshCount){var t=this.getMeshInfo(e);if(void 0===t)return;return new Uint32Array(this.iBuffer,t.iOffset,t.idxCount)}},getNormalBuffer:function(e){if(2==(2&this.header.vtFormat)&&e>=0&&e<this.header.meshCount){var t=this.getMeshInfo(e);if(void 0===t)return;return new Float32Array(this.nBuffer,t.nOffset,3*t.ptCount)}},getUVBuffer:function(e){if(e>=0&&e<this.header.meshCount){var t=this.getMeshInfo(e);if(void 0===t||4!=(4&t.vFormat))return;return new Float32Array(this.tBuffer,t.tOffset,2*t.ptCount)}},getOffsetIndexInfo:function(e,t){if(!(e<0||e>=this.header.meshCount)){var i=this.getMeshInfo(e),r=void 0!==t?!t:4==(4&i.vFormat);return{meshId:i.mesh_id,positionStart:i.vOffset/4,positionCount:3*i.ptCount,indexStart:i.iOffset/4,indexCount:i.idxCount,uvStart:r?i.tOffset/4:0,uvCount:r?2*i.ptCount:0}}},hasUV:function(e){if(!(e<0||e>=this.header.meshCount))return 4==(4&this.getMeshInfo(e).vFormat)}},r.Loader.BMeshIdReader=function(e){var t=new Uint32Array(e,0,1);this.count=t[0],this.cache={};for(var i=new Uint32Array(e,4,this.count),r=0;r<this.count;r+=2){var n=i[r];this.cache[n]=i[r+1]}t=null,i=null},r.Loader.BMeshIdReader.prototype={constructor:r.Loader.BMeshIdReader,getCount:function(){return this.count},getBMeshId:function(e){return this.cache[e]}},r.Loader.LineHeader=function(e){var t=new Uint32Array(e,0,7);this.blockId=t[0],this.lineCount=t[1],this.lineOffset=t[2],this.ptBufferSize=t[3],this.ptBufferOffset=t[4],this.idxBufferSize=t[5],this.idxBufferOffset=t[6],t=null},r.Loader.LineData=function(e,t){var i=new Uint32Array(e,t,6);this.line_id=i[0],this.lineType=i[1],this.ptCount=i[2],this.ptOffset=i[3],this.idxCount=i[4],this.idxOffset=i[5],i=null},r.Loader.LineReader=function(e){this.header=new r.Loader.LineHeader(e),this.lineSize=24,this.ptSize=12,this.lineBuffer=e.slice(this.header.lineOffset,this.header.lineOffset+this.header.lineCount*this.lineSize),this.ptBuffer=e.slice(this.header.ptBufferOffset,this.header.ptBufferOffset+this.header.ptBufferSize),this.idxBuffer=e.slice(this.header.idxBufferOffset,this.header.idxBufferOffset+this.header.idxBufferSize),this.line_cur_id=-1;var t=new ArrayBuffer(this.lineSize);this.line_cur=new r.Loader.LineData(t,0)},r.Loader.LineReader.prototype={constructor:r.Loader.LineReader,getLineData:function(e){if(e>=0&&e<this.header.lineCount)return new r.Loader.LineData(this.lineBuffer,e*this.lineSize)},getLineInfo:function(e){if(e==this.line_cur_id)return this.line_cur;if(e>=0&&e<this.header.lineCount){var t=new Uint32Array(this.lineBuffer,e*this.lineSize,6);return this.line_cur.line_id=t[0],this.line_cur.lineType=t[1],this.line_cur.ptCount=t[2],this.line_cur.ptOffset=t[3],this.line_cur.idxCount=t[4],this.line_cur.idxOffset=t[5],this.line_cur_id=e,this.line_cur}},getPtBuffer:function(e){if(e>=0&&e<this.header.lineCount){var t=this.getLineInfo(e);if(void 0===t)return;return new Float32Array(this.ptBuffer,t.ptOffset,3*t.ptCount)}},getIdxBuffer:function(e){if(e>=0&&e<this.header.lineCount){var t=this.getLineInfo(e);if(void 0===t)return;var i=new Uint32Array(this.idxBuffer,t.idxOffset,t.idxCount),r=t.ptOffset/this.ptSize;return i.forEach((function(e,t,i){i[t]-=r})),i}}},r.Loader.CameraReader=function(e){this.cameras=JSON.parse(e)},r.Loader.CameraReader.prototype.parse=function(e,t){function i(e,i){i.uuid=e.uuid,void 0!==e.name&&(i.name=e.name);var r=new THREE.Matrix4;if(void 0!==e.matrix)r.fromArray(e.matrix);else{var n=new THREE.Vector3,a=new THREE.Quaternion,s=new THREE.Vector3;if(void 0!==e.position&&n.fromArray(e.position),void 0!==e.rotation){var o=new THREE.Vector3;o.fromArray(e.rotation);var l=new THREE.Euler(o[0]*Math.PI/180,o[1]*Math.PI/180,o[2]*Math.PI/180,"XYZ");a.setFromEuler(l)}void 0!==e.quaternion&&a.fromArray(e.quaternion,0),void 0!==e.scale&&i.scale.fromArray(e.scale),r.compose(n,a,s)}r.multiply(t),r.decompose(i.position,i.quaternion,i.scale)}var n,a,s=this.cameras;if(s.Orthographic){var o=s.Orthographic;for(var l in o)i(a=o[l],n=new r.Camera(r.CAMERATYPE.ORTHOGRAPHIC,a)),e.addCamera(n)}if(s.Perspective){var d=s.Perspective;for(var l in d)a=d[l],n=new r.Camera(r.CAMERATYPE.PERSPECTIVE,a),void 0!==a.focus&&(n.focus=a.focus),void 0!==a.zoom&&(n.zoom=a.zoom),void 0!==a.filmGauge&&(n.filmGauge=a.filmGauge),void 0!==a.filmOffset&&(n.filmOffset=a.filmOffset),void 0!==a.view&&(n.view=Object.assign({},a.view)),i(a,n),e.addCamera(n)}},r.Loader.SceneHeader=function(e){var t=new Uint32Array(e,0,11);this.blockId=t[0],this.cellCount=t[1],this.itemCount=t[2],this.matrixCount=t[3],this.geomBuffSize=t[4],this.layerBuffSize=t[5],this.cellOffset=t[6],this.itemOffset=t[7],this.matrixOffset=t[8],this.geomOffset=t[9],this.layerOffset=t[10];var i=new Float32Array(e,44,6);this.boundingBox=new THREE.Box3(new THREE.Vector3(i[0],i[1],i[2]),new THREE.Vector3(i[3],i[4],i[5])),t=null,i=null},r.Loader.Cell=function(e,t){var i=new Int32Array(e,t,5);this.cellId=i[0],this.depth=i[1],this.itemIndex=i[2],this.itemCount=i[3],this.layerType=i[4],this.layerSize=new Int32Array(e,t+20,8),this.layerOffset=new Int32Array(e,t+52,8);var r=new Float32Array(e,t+84,6);this.boundingBox=new THREE.Box3(new THREE.Vector3(r[0],r[1],r[2]),new THREE.Vector3(r[3],r[4],r[5])),i=null,r=null},r.Loader.Item=function(e,t){var i=new Int32Array(e,t,7);this.ItemId=i[0],this.originalId=i[1],this.materialId=i[2],this.userDataId=i[3],this.matrixId=i[4],this.type=i[5],this.toData=i[6];var r=new Float32Array(e,t+28,6);this.boundingBox=new THREE.Box3(new THREE.Vector3(r[0],r[1],r[2]),new THREE.Vector3(r[3],r[4],r[5])),i=null,r=null},r.Loader.Matrix=function(e,t,i){var r=new i(e,t,16);this.matrix=(new THREE.Matrix4).fromArray(r),r=null},r.Loader.GeomPipe=function(e,t){var i=new Float32Array(e,t,8);this.startPt=new THREE.Vector3(i[0],i[1],i[2]),this.endPt=new THREE.Vector3(i[3],i[4],i[5]),this.radius=i[6],this.thickness=i[7],i=null},r.Loader.SceneReader=function(e,t){this.header=new r.Loader.SceneHeader(e),this.cellSize=108,this.itemSize=52,this.matrixSize=r.Compatibility.getMatrixSize(t),this.matrixDataType=r.Compatibility.getMatrixDatatype(t),this.maxSize=1024,this.boxUvSize=36,this.pipeUvSize=18,this.cellBuffer=e.slice(this.header.cellOffset,this.header.cellOffset+this.header.cellCount*this.cellSize),this.itemBuffer=e.slice(this.header.itemOffset,this.header.itemOffset+this.header.itemCount*this.itemSize),this.matrixBuffer=e.slice(this.header.matrixOffset,this.header.matrixOffset+this.header.matrixCount*this.matrixSize),this.geomBuffer=e.slice(this.header.geomOffset,this.header.geomOffset+this.header.geomBuffSize),this.layerBuffer=e.slice(this.header.layerOffset,this.header.layerOffset+this.header.layerBuffSize),this.matr_cur_id=-1,this.pt_cell_min=new THREE.Vector3(0,0,0),this.pt_cell_max=new THREE.Vector3(0,0,0),this.pt_item_min=new THREE.Vector3(0,0,0),this.pt_item_max=new THREE.Vector3(0,0,0);var i=new ArrayBuffer(this.maxSize);this.cell_cur=new r.Loader.Cell(i,0),this.item_cur=new r.Loader.Item(i,0),this.matr_cur=new r.Loader.Matrix(i,0,this.matrixDataType),this.pipe_cur=new r.Loader.GeomPipe(i,0),this.cell_cur.boundingBox.set(this.pt_cell_min,this.pt_cell_max),this.item_cur.boundingBox.set(this.pt_item_min,this.pt_item_max)},r.Loader.SceneReader.prototype={constructor:r.Loader.SceneReader,getCellMpks:function(e){if(e>=0&&e<this.header.cellCount){for(var t=[],i=this.getCellInfo(e),r=i.itemIndex;r<i.itemCount;++r){var n=this.getItemInfo(r);if(1===n.type){var a=this.getMpkID(n.toData);t.push(a)}}for(var s={},o=[],l=0;l<t.length;++l)s[t[l]]||(s[t[l]]=!0,o.push(t[l]));return o}},getCell:function(e){if(e>=0&&e<this.header.cellCount)return new r.Loader.Cell(this.cellBuffer,e*this.cellSize)},getItem:function(e){if(e>=0&&e<this.header.itemCount)return new r.Loader.Item(this.itemBuffer,e*this.itemSize)},getMatrix:function(e){if(e>=0&&e<this.header.matrixCount)return new r.Loader.Matrix(this.matrixBuffer,e*this.matrixSize,this.matrixDataType)},getGeomPipe:function(e){if(e>=0&&e<this.header.geomBuffSize)return new r.Loader.GeomPipe(this.geomBuffer,e)},getCellInfo:function(e){if(e>=0&&e<this.header.cellCount){var t=new Int32Array(this.cellBuffer,e*this.cellSize,5);this.cell_cur.cellId=t[0],this.cell_cur.depth=t[1],this.cell_cur.itemIndex=t[2],this.cell_cur.itemCount=t[3],this.cell_cur.layerType=t[4],this.cell_cur.layerSize=new Int32Array(this.cellBuffer,e*this.cellSize+20,8),this.cell_cur.layerOffset=new Int32Array(this.cellBuffer,e*this.cellSize+52,8);var i=new Float32Array(this.cellBuffer,e*this.cellSize+84,6);return this.pt_cell_min.set(i[0],i[1],i[2]),this.pt_cell_max.set(i[3],i[4],i[5]),this.cell_cur.boundingBox.set(this.pt_cell_min,this.pt_cell_max),this.cell_cur}},getItemInfo:function(e){if(e>=0&&e<this.header.itemCount){var t=new Int32Array(this.itemBuffer,e*this.itemSize,7);this.item_cur.ItemId=t[0],this.item_cur.originalId=t[1],this.item_cur.materialId=t[2],this.item_cur.userDataId=t[3],this.item_cur.matrixId=t[4],this.item_cur.type=t[5],this.item_cur.toData=t[6];var i=new Float32Array(this.itemBuffer,e*this.itemSize+28,6);return this.pt_item_min.set(i[0],i[1],i[2]),this.pt_item_max.set(i[3],i[4],i[5]),this.item_cur.boundingBox.set(this.pt_item_min,this.pt_item_max),this.item_cur}},getMatrixInfo:function(e){if(e==this.matr_cur_id)return this.matr_cur;if(e>=0&&e<this.header.matrixCount){const t=new this.matrixDataType(this.matrixBuffer,e*this.matrixSize,16);return this.matr_cur.matrix.fromArray(t),this.matr_cur_id=e,this.matr_cur}},getGeomPipeInfo:function(e){if(e>=0&&e<this.header.geomBuffSize){var t=new Float32Array(this.geomBuffer,e,8);return this.pipe_cur.startPt.set(t[0],t[1],t[2]),this.pipe_cur.endPt.set(t[3],t[4],t[5]),this.pipe_cur.radius=t[6],this.pipe_cur.thickness=t[7],this.pipe_cur}},getGeomBoxUvInfo:function(e){if(e>=0&&e+4*this.boxUvSize<=this.header.geomBuffSize)return new Float32Array(this.geomBuffer,e,this.boxUvSize)},getGeomPipeUvInfo:function(e){if(e>=0&&e+4*this.pipeUvSize<=this.header.geomBuffSize)return new Float32Array(this.geomBuffer,e,this.pipeUvSize)},getLayerInfo:function(e,t){if(e>=0&&e+t<=this.header.layerBuffSize){new Uint32Array(this.layerBuffer,e,t);return this.data}},getMpkID:function(e){return parseInt(e/65536)},getMeshIndex:function(e){return parseInt(e%65536)}},r.Loader.LayerIndex=function(e,t){var i=new Uint32Array(e,t,2);this.layer_id=i[0],this.item_index=i[1]},r.Loader.LayerIndexReader=function(e){var t=new Uint32Array(e,0,2);this.cell_count=t[0],this.data_count=t[1],this.headerSize=8,this.cellSize=108,this.dataSize=8;var i=this.cell_count*this.cellSize,r=this.data_count*this.dataSize;this.cellBuffer=e.slice(this.headerSize,this.headerSize+i),this.dataBuffer=e.slice(this.headerSize+i,this.headerSize+i+r)},r.Loader.LayerIndexReader.prototype={constructor:r.Loader.LayerIndexReader,getCell:function(e){if(e>=0&&e<this.cell_count)return new r.Loader.Cell(this.cellBuffer,e*this.cellSize)},getLayerIndex:function(e){if(e>=0&&e<this.data_count)return new r.Loader.LayerIndex(this.dataBuffer,e*this.dataSize)}},r.ModelView.MeshBaseManager=class{constructor(){this.geometries={}}destroy(){this.disposeGeometries(),this.geometries=null}disposeGeometries(){for(var e in this.geometries)this.disposeGeometry(e)}disposeGeometry(e){var t=this.geometries[e];if(t){if(t instanceof Array)for(var i=0,r=t.length;i<r;i++)t[i].dispose();else t.dispose();delete this.geometries[e]}}_hasGeometry(e){return!!this.geometries[e]}_cacheGeometry(e,t){void 0===this.geometries[e]&&(this.geometries[e]=t)}getGeometryById(e){return this.geometries[e]}getGeometryByNodeInfo(e,t){return this._hasGeometry(t.geometryIdCode)?this.getGeometryById(t.geometryIdCode):this._createGeometryByNodeInfo(e,t)}_createGeometryByNodeInfo(e,t){return this._createGeometry(t.type,t.geometryIdCode,t.fromMirror,e.getModelDescriptor().getReferencedMeshBufferById(t.geometryId),e.lightmap)}_createGeometry(e,t,i,r,n){if(this._hasGeometry(t))return this.getGeometryById(t);const a=this._createBufferGeometry(e,i,r,n);return a?(this._cacheGeometry(t,a),a):null}_createBufferGeometry(e,t,i,n){const a=r.ModelView.BaseDescriptor.EnumNodeItemType;let s=null;switch(e){case a.MESH:case a.MESH_REF:s=r.GeomUtil.getBufferGeometry(i,t);break;case a.LINE:s=r.GeomUtil.getLineBufferGeometry(i,t);break;case a.TUBE:case a.PIPE:s=r.GeomUtil.getPipeBufferGeometry(t,n);break;case a.PIPE_M:s=r.GeomUtil.getPipeMBufferGeometry(t,n);break;case a.BOX:s=r.GeomUtil.getBoxBufferGeometry(t,n);break;case a.BOX_M:s=r.GeomUtil.getBoxMBufferGeometry(t,n)}return s}createBufferByBufferDataWithUV2(e,t,i,r){var n=this.createBufferByBufferData(t,i,r);if(!n)return null;if(!e.lightmap)return n;var a=[],s=n.index,o=e.getLoader().getUV2ById(t.itemIdUV2,s.length);return o&&(t.lightmapIdx=o.lightmapIdx,t.materialId=t.materialId+"_"+t.lightmapIdx,a=o.uv2),this._expandNodeBufferWithUV2(n,a)}_expandNodeBufferWithUV2(e,t){for(var i=e.position,r=e.normal,n=e.uv,a=e.index,s=[],o=[],l=[],d=[],h=[],c=0,u=0;u<a.length;u++){var p=a[u];null==h[p]||t[2*h[p]]!=t[2*u]||t[2*h[p]+1]!=t[2*u+1]?(s.push(i[3*p]),s.push(i[3*p+1]),s.push(i[3*p+2]),r&&(o.push(r[3*p]),o.push(r[3*p+1]),o.push(r[3*p+2])),n&&(l.push(n[2*p]),l.push(n[2*p+1])),d.push(t[2*u]),d.push(t[2*u+1]),a[u]=c,c++,null==h[p]&&(h[p]=u)):a[u]=a[h[p]]}return i=null,r=null,n=null,t=null,h=null,e.uv2=d,e.position=s,e.normal=o,e.uv=l,e}createBufferForSharedMeshByBufferDataWithUV2(e,t,i,r){var n=this.createBufferByBufferData(t,i,r);if(!n)return null;if(!e.lightmap)return n;var a=[],s=n.index,o=e.getLoader().getInstanceUV2ForSharedMeshById(t.itemIdUV2,s.length);return o&&(t.uv2Info=o,t.lightmapIdx=o.lightmapIdx,t.materialId=t.materialId+"_"+t.lightmapIdx,a=o.uv2),this._expandNodeBufferWithUV2(n,a)}createBufferByBufferData(e,t,i){const n=r.ModelView.BaseDescriptor.EnumNodeItemType;let a=null;switch(e.type){case n.MESH:case n.MESH_REF:a=r.GeomUtil.getGeometryBuffer(t,e.matrix,e.fromMirror,i);break;case n.LINE:a=r.GeomUtil.getLineGeometryBuffer(t,e.matrix,e.fromMirror,i);break;case n.TUBE:case n.PIPE:a=r.GeomUtil.getPipeGeometryBuffer(e.matrix,e.fromMirror,i);break;case n.PIPE_M:a=r.GeomUtil.getPipeMGeometryBuffer(e.uvArrayBuffer,e.matrix,e.fromMirror,i);break;case n.BOX:case n.BOX_M:a=r.GeomUtil.getBoxMGeometryBuffer(e.uvArrayBuffer,e.matrix,e.fromMirror,i);break;default:console.log("error data!")}return a&&(e.uv=!!a.uv),a}},(()=>{new THREE.Vector3;let e=new THREE.Vector3;class t{constructor(){this.symbolReader=null,this.userIdReader=null,this.userDataReader=null,this.mapSceneReader={},this.lightmap=!1,this.mapNodeInfoByCategory={},this.mapNodeInfoByUserId={},this.mapNodeInfoByCellId={},this.mapNodeInfoByParameterizedDesc={},this.mapStandardNodeInfoByGeometryId=null,this.mapInstancedNodeInfoByGeometryId=null,this.referencedMeshCache={},this.cellCount=0,this.borderLines={},this.fullNodeInfoArray=[],this.sharedGeometryCounter={},this.octreeRootNode={inner:null,outer:null,layer:null},this._config=null}destroy(){this.destroyReader(),this.mapNodeInfoByCategory=null,this.mapNodeInfoByUserId=null,this.mapNodeInfoByCellId=null,this.mapNodeInfoByParameterizedDesc=null,this.mapStandardNodeInfoByGeometryId=null,this.mapInstancedNodeInfoByGeometryId=null,this.referencedMeshCache=null,this.borderLines=null,this.octreeRootNode=null,this.fullNodeInfoArray=null,this.sharedGeometryCounter=null,this._config=null}destroyReader(){this.userIdReader=null,this.userDataReader=null,this.symbolReader=null,this.mapSceneReader=null}setConfigure(e){this._config=e}getConfigure(){return this._config}getSceneReaderMap(){return this.mapSceneReader}isValidScene(){return!r.Utils.isEmptyObject(this.getSceneReaderMap())||(r.Logger.log("model load not started!"),!1)}_classifyNodeInfo(e){this._cacheNodeInfoByCellId(e),this._cacheNodeInfoByUserId(e),this._cacheNodeInfoByCategory(e),this._cacheNodeInfoByParameterizedDesc(e)}classifyAllNodeInfo(){this.fullNodeInfoArray.forEach((e=>{e.instanceOrNot=this._isInstancedNode(e),this._classifyNodeInfo(e)})),this.fullNodeInfoArray.length=0,this.sharedGeometryCounter={}}_cacheNodeInfoByCellId(e){void 0===this.mapNodeInfoByCellId[e.cellId]&&(this.mapNodeInfoByCellId[e.cellId]=[]),this.mapNodeInfoByCellId[e.cellId].push(e)}_cacheNodeInfoByUserId(e){void 0===this.mapNodeInfoByUserId[e.userId]&&(this.mapNodeInfoByUserId[e.userId]=[]),this.mapNodeInfoByUserId[e.userId].push(e)}_cacheNodeInfoByCategory(e){var t;t=e.instanceOrNot?r.ModelView.BaseDescriptor.NodeInfoCategory.INSTANCED:r.ModelView.BaseDescriptor.NodeInfoCategory.STANDARD,void 0===this.mapNodeInfoByCategory[t]&&(this.mapNodeInfoByCategory[t]={}),void 0===this.mapNodeInfoByCategory[t][e.userId]&&(this.mapNodeInfoByCategory[t][e.userId]=[]),this.mapNodeInfoByCategory[t][e.userId].push(e)}_cacheNodeInfoByParameterizedDesc(e){e.parameterizedDesc&&(void 0===this.mapNodeInfoByParameterizedDesc[e.type]&&(this.mapNodeInfoByParameterizedDesc[e.type]=[]),this.mapNodeInfoByParameterizedDesc[e.type].push(e))}_clearNodeInfoCacheWithParameterizedDesc(){this.mapNodeInfoByParameterizedDesc={}}_clearNodeInfoCacheWithCellId(){this.mapNodeInfoByCellId={}}_clearNodeInfoCacheWithCategory(){this.mapNodeInfoByCategory={}}_clearNodeInfoCacheWithUserId(){this.mapNodeInfoByUserId={}}clearNodeInfoCache(){this._clearNodeInfoCacheWithCellId(),this._clearNodeInfoCacheWithUserId(),this._clearNodeInfoCacheWithCategory(),this._clearNodeInfoCacheWithParameterizedDesc()}getNodeInfosByCellId(e){return this.mapNodeInfoByCellId[e]}getNodeInfosWithCellId(){return this.mapNodeInfoByCellId}getNodeInfosWithParameterizedDesc(){return this.mapNodeInfoByParameterizedDesc}getAllNodeInfos(){return this.mapNodeInfoByUserId}getNodeInfosByUserId(e){return this.mapNodeInfoByUserId[e]}getStandardNodeInfos(){return this.mapNodeInfoByCategory[r.ModelView.BaseDescriptor.NodeInfoCategory.STANDARD]}getInstancedNodeInfos(){return this.mapNodeInfoByCategory[r.ModelView.BaseDescriptor.NodeInfoCategory.INSTANCED]}getStandardUserIds(){return this.getStandardNodeInfos()?Object.keys(this.getStandardNodeInfos()):[]}getInstancedUserIds(){return this.getInstancedNodeInfos()?Object.keys(this.getInstancedNodeInfos()):[]}getStandardNodeInfosById(e){var t=this.getStandardNodeInfos();return t?t[e]:null}getInstancedNodeInfosById(e){var t=this.getInstancedNodeInfos();return t?t[e]:null}_getUserIdsByCategory(e,t){var i,n=[];if(i=t===r.ModelView.BaseDescriptor.NodeInfoCategory.INSTANCED?this.getInstancedNodeInfos():this.getStandardNodeInfos())for(var a=0,s=e.length;a<s;a++)i[e[a]]&&n.push(e[a]);return n}getInstancedUserIdsByCategory(e){return this._getUserIdsByCategory(e,r.ModelView.BaseDescriptor.NodeInfoCategory.INSTANCED)}getStandardUserIdsByCategory(e){return this._getUserIdsByCategory(e,r.ModelView.BaseDescriptor.NodeInfoCategory.STANDARD)}_traverseNodeInfosByIds(e,t,i){for(var r=0,n=t.length;r<n;r++){var a=t[r];i(a,e[a])}}traverseStandardNodeInfos(e,t){var i=this.getStandardNodeInfos();i&&(e=e||this.getStandardUserIds(),this._traverseNodeInfosByIds(i,e,t))}traverseInstancedNodeInfos(e,t){var i=this.getInstancedNodeInfos();i&&(e=e||this.getInstancedUserIds(),this._traverseNodeInfosByIds(i,e,t))}traverseNodeInfosByCell(e){for(var t=Object.keys(this.mapNodeInfoByCellId),i=0,r=t.length;i<r;i++)for(var n=t[i],a=this.mapNodeInfoByCellId[n],s=0,o=a.length;s<o;s++)e(n,a[s])}clearReferencedMeshCache(){for(var e in this.referencedMeshCache)delete this.referencedMeshCache[e];this.referencedMeshCache=null}cacheReferencedMeshBufferData(e,t){this.referencedMeshCache.bufferData||(this.referencedMeshCache.bufferData={}),this.referencedMeshCache.bufferData[e]=t}getReferencedMeshBufferData(){return this.referencedMeshCache.bufferData}getReferencedMeshBufferById(e){return this.referencedMeshCache&&this.referencedMeshCache.bufferData?this.referencedMeshCache.bufferData[e]:null}cacheReferencedMeshMpkIds(e,t){this.referencedMeshCache.mpkIds||(this.referencedMeshCache.mpkIds={}),this.referencedMeshCache.mpkIds[e]||(this.referencedMeshCache.mpkIds[e]=[]),this.referencedMeshCache.mpkIds[e].push(t)}clearReferencedMeshCacheByMpkIdxs(e,t){if(this.referencedMeshCache.mpkIds)for(var i=0,r=e.length;i<r;i++){var n=e[i],a=this.referencedMeshCache.mpkIds[n];if(a){for(var s=0,o=a.length;s<o;s++)t&&t(a[s]),delete this.referencedMeshCache[a[s]];delete this.referencedMeshCache.mpkIds[n]}}}cacheBorderLine(e,t){var i=e?"shared":"unique";this.borderLines[i]||(this.borderLines[i]=[]),this.borderLines[i].push(t)}getSharedBorderLineCache(){return this.borderLines.shared}getUniqueBorderLineCache(){return this.borderLines.unique}_isParameterizedNode(e){return t.isParameterizedNode(e)}_isGeometrySharedNode(e){return t.isGeometrySharedNode(e)}_isInstancedNode(e){if(!r.GlobalData.Instance)return!1;if(e.parameterizedDesc)return!0;if(!r.GlobalData.InstanceSharedMeshEnabled)return!1;if(!this._isGeometrySharedNode(e))return!1;const t=r.GlobalData.InstanceSharedMeshThreshold;return(this.sharedGeometryCounter[e.geometryId]||0)>t}getCellCount(){return this.cellCount}getOctreeRootNode(){return this.octreeRootNode}isUseInnerAndOuterOctree(){return!0}isOctreeOuter(e){var t=this.octreeRootNode.inner||this.octreeRootNode.outer;return!(e.x<t.min.x||e.x>t.max.x||e.y<t.min.y||e.y>t.max.y||e.z<t.min.z||e.z>t.max.z)}getOctreeRoots(e){this.octreeRootNode.outer&&e.push(this.octreeRootNode.outer),this.octreeRootNode.inner&&e.push(this.octreeRootNode.inner)}updateOctreeNodeBy(t,i){var r=new THREE.Box3;function n(t,i){r.copy(t.boundingBoxWorld),r.applyMatrix4(i),t.min.copy(r.min),t.max.copy(r.max),t.center=r.getCenter(t.center),t.size=r.getSize(e).lengthSq()}n(t,i),function e(t,i){for(var r=0,a=t.childOctants.length;r<a;++r){var s=t.childOctants[r];n(s,i),e(s,i)}}(t,i)}updateOctreeNode(e,t){let i=t.clone().premultiply(e);var r=this.getOctreeRootNode();r.outer&&this.updateOctreeNodeBy(r.outer,i),r.inner&&this.updateOctreeNodeBy(r.inner,i)}removeFromSceneReaderMap(e){for(var t=0,i=e.length;t<i;t++)this.mapSceneReader[e[t]]&&delete this.mapSceneReader[e[t]]}isUserIdExist(e){return!!this.getNodeInfosByUserId(e)}addToNodeInfoMap(e){for(var t=0,i=e.length;t<i;t++)this._cacheNodeInfoByUserId(e[t])}removeFromNodeInfoMap(e){for(var t=this.getAllNodeInfos(),i=0,r=e.length;i<r;i++){var n=e[i].userId;t[n]&&delete t[n]}}cacheNodeInfosOnGeometryId(){this.cacheStandardNodeInfosOnGeometryId(),this.cacheInstancedNodeInfosOnGeometryId()}cacheStandardNodeInfosOnGeometryId(){this.mapStandardNodeInfoByGeometryId={},this._cacheNodeInfosOnGeometryIdBy(this.getStandardNodeInfos(),this.mapStandardNodeInfoByGeometryId)}cacheInstancedNodeInfosOnGeometryId(){this.mapInstancedNodeInfoByGeometryId={},this._cacheNodeInfosOnGeometryIdBy(this.getInstancedNodeInfos(),this.mapInstancedNodeInfoByGeometryId)}_cacheNodeInfosOnGeometryIdBy(e,t){if(!e)return;Object.keys(e).forEach((i=>{e[i].forEach((e=>{e.geometryId=this.convertGeometryId(e.geometryId),t[e.geometryId]||(t[e.geometryId]=[]),t[e.geometryId].push(e)}))}))}getStandardNodeInfosOnGeometryId(){return this.mapStandardNodeInfoByGeometryId||this.cacheStandardNodeInfosOnGeometryId(),this.mapStandardNodeInfoByGeometryId}getInstancedNodeInfosOnGeometryId(){return this.mapInstancedNodeInfoByGeometryId||this.cacheInstancedNodeInfosOnGeometryId(),this.mapInstancedNodeInfoByGeometryId}clearNodeInfosWithGeometryId(){this.mapStandardNodeInfoByGeometryId=null,this.mapInstancedNodeInfoByGeometryId=null}convertGeometryId(e){return e}static getMeshIdFromOctantMap(e){return e.single?e.nodeId:e.instanceOrNot?e.uv2Info?r.Utils.getCombinedKeyString([e.materialId,e.geometryIdCode,e.uv2Info.byteOffset]):r.Utils.getCombinedKeyString([e.materialId,e.geometryIdCode]):r.GlobalData.BatchMergeEnabled?r.Utils.getCombinedKeyString([e.materialId,e.uv?"1":"0",e.type===t.EnumNodeItemType.LINE?"lines":"meshes"]):e.nodeId}static isParameterizedNode(e){return e.type===t.EnumNodeItemType.TUBE||e.type===t.EnumNodeItemType.PIPE||e.type===t.EnumNodeItemType.BOX||e.type===t.EnumNodeItemType.BOX_M||e.type===t.EnumNodeItemType.PIPE_M}static isParameterizedNodeType(e){return e===t.parameterizedNodeType.TUBE||e===t.parameterizedNodeType.PIPE||e===t.parameterizedNodeType.PIPE_M||e===t.parameterizedNodeType.BOX||e===t.parameterizedNodeType.BOX_M}static isGeometrySharedNode(e){return e.type===t.EnumNodeItemType.MESH_REF}static isLineNode(e){return e.type===t.EnumNodeItemType.LINE}}t.EnumNodeItemType={SYMBOL:0,MESH:1,TUBE:2,PIPE:3,BOX:4,BOX_M:5,PIPE_M:6,MESH_REF:7,LINE:8},t.NodeInfoCategory={INSTANCED:0,STANDARD:1},t.parameterizedNodeType={BOX:"box",BOX_M:"boxM",PIPE:"pipe",PIPE_M:"pipeM",TUBE:"tube"},r.ModelView.BaseDescriptor=t})(),(()=>{let e=new THREE.Vector3,t=new THREE.Vector3;r.ModelView.BaseLoader=class{constructor(e){this.handler=e,this.model=e.model,this.url=e.model.dataUrl,this.fileLoader=e.model.fileLoader,this.descriptor=null,this.loadTaskCount=0,this.maxLoadTaskCount=0,this.loadTextureCount=0,this.maxLoadTextureCount=0,this.textruesLoaded=!1,this.dataLoaded=!1,this.mpkTaskManager=new r.TaskManager,this.enableCompressedTexture=!1,this.startCallback=null,this.progressCallback=null,this.finishCallback=null}destroy(){this.mpkTaskManager=null,this.textureManager=null,this.url=null,this.fileLoader=null,this.descriptor&&(this.descriptor.destroy(),this.descriptor=null),this.model=null,this.handler=null,this.startCallback=null,this.progressCallback=null,this.finishCallback=null}getDescriptor(){return this.descriptor}setNotifyProgress(e){this.notifyProgress=e}load(e,t,i){this.startCallback=e,this.progressCallback=t,this.finishCallback=i;var r=this.url.lightmapProjectUrl();if(r){var n=this;this._loadLightmapConfig(r,(function(){n.loadData()}))}else this.loadData()}loadData(){var e=this,t=e.model,i=t.getConfig().metadata;let n=this.model.materialManager;this.descriptor.setConfigure(t.getConfig()),r.GlobalData.CanUseCompressedTexture&&i.texture_dds&&(n.enableCompressedTexture=!0,this.enableCompressedTexture=!0),r.GlobalData.CanUseSmallTexture&&i.texture_small&&(n.enableSmallTexture=!0),i.texture_pkg&&(n.enablePkgTexture=!0),i.texture_org&&(n.enableOrgTexture=!0),i.texture_dds&&(n.enableDdsTexture=!0),0==i.texture_pkg_gz&&(n.enableTexturePkgGz=!1),r.Compatibility.isUseMergeTexturePkg(i.version)?r.Compatibility.useMergeTexturePkg=!0:r.Compatibility.useMergeTexturePkg=!1,r.Compatibility.isUse32MpkData(i.version)?r.Compatibility.use32MpkData=!0:r.Compatibility.use32MpkData=!1;var a=this.getSceneTaskCount(i);e.maxLoadTaskCount=0,e.maxLoadTaskCount+=a,e.maxLoadTaskCount+=i.material,e.maxLoadTaskCount+=i.userId,e.maxLoadTaskCount+=i.userdata,e.maxLoadTaskCount+=i.camera,e.maxLoadTaskCount+=i.octree_o,e.maxLoadTaskCount+=i.octree_i,t.lightmap&&(e.maxLoadTaskCount+=2),e.startCallback&&e.startCallback();this.url;i.material?e._loadMaterial(i.material_json):e.textruesLoaded=!0,i.userId&&e._loadUserId(),i.userdata&&e._loadUserData(),i.camera&&e._loadCamera(),(i.octree_o||i.octree_i)&&e._loadOctree(i.octree_o,i.octree_i),t.lightmap&&e._loadUV2(),a&&e.loadSceneAndMpks(i)}loadSceneAndMpks(e){}getSceneTaskCount(e){return 0}loadWithStorage(e,t,i,n){r.Storage.IndexedDBHelper.loadWithStorage("ModelData",e,t,i,n)}_loadLightmapConfig(e,t){var i=this.model,n=this.descriptor;const a=e;this.loadWithStorage(a,(()=>new Promise(((e,t)=>{this.fileLoader.load(a,e)}))),(e=>{var a;try{a=JSON.parse(e)}catch(e){return void console.log("Lightmap config data exceptions!")}void 0!==a.count.lightmapNum&&a.count.lightmapNum>0&&(i.lightmapNum=a.count.lightmapNum,n.lightmap=!0,r.GlobalData.EnableLightmap=!0),t&&t()}))}_onTaskFinished(){var e=this.model;this.loadTaskCount++;var t=this.dealProgressSegment(e,this.loadTaskCount);if(this.notifyProgress){var i={total:this.maxLoadTaskCount,loaded:t};this.progressCallback&&this.progressCallback(i)}this.loadTaskCount>=this.maxLoadTaskCount&&(this.dataLoaded=!0,this.textruesLoaded&&this.finishCallback&&this.finishCallback())}_onLoadTexture(){this.loadTextureCount++,this.loadTextureCount>=this.maxLoadTextureCount&&(this.textruesLoaded=!0,this.pkgTextureMap=null,this.pkgTextureArrayBufferMap=null,this.textureManager=null,this.dataLoaded&&this.finishCallback&&this.finishCallback())}_loadScene(e){var t=this,i=this.model,n=this.url,a=this.fileLoader;const s=n.sceneUrl(e);this.loadWithStorage(s,(()=>new Promise(((e,t)=>{a.setResponseType("arraybuffer"),a.load(s,e,void 0,t)}))),(i=>{t._parseScene(i,e),t._onTaskFinished()}),(e=>{i.dispatchEvent({type:r.LOADERROREVENTS.LOAD_ERROR,errorType:r.LOADERROREVENTS.LOAD_SCENE_ERROR,event:e}),t._onTaskFinished()}))}_parseScene(e,t){const i=this.model.getConfig().metadata.version;let n=new r.Loader.SceneReader(e,i);this.descriptor.mapSceneReader[t]=n,n=null}_loadLine(){var e=this,t=this.model,i=this.url,n=this.fileLoader;const a=i.lineUrl();this.loadWithStorage(a,(()=>new Promise(((e,t)=>{n.setResponseType("arraybuffer"),n.load(a,e,void 0,t)}))),(t=>{e._parseLine(t),e._onTaskFinished()}),(i=>{t.dispatchEvent({type:r.LOADERROREVENTS.LOAD_ERROR,errorType:r.LOADERROREVENTS.LOAD_MATERIAL_ERROR,event:i}),e._onTaskFinished()}))}_parseLine(e){for(var t=new r.Loader.LineReader(e),i=0,n=t.header.lineCount;i<n;++i){var a=t.getPtBuffer(i),s=t.getIdxBuffer(i);if(null!=a&&null!=s){var o=t.getLineData(i);if(0===o.lineType){for(var l=[],d=1,h=s.length;d<h;d++)l.push(s[d-1]),l.push(s[d]);l.length&&(s=l)}this.descriptor.cacheReferencedMeshBufferData("line-"+o.line_id,{P:a,I:s})}else r.Logger.log("Error Geometry!")}t=null}_loadMaterial(e){var t=this,i=this.model,n=this.url,a=this.fileLoader;const s=n.materialUrl();this.loadWithStorage(s,(()=>new Promise(((t,i)=>{e?a.setResponseType(""):a.setResponseType("arraybuffer"),a.load(s,t,void 0,i)}))),(i=>{t._parseMaterial(i,e),t._onTaskFinished()}),(e=>{i.dispatchEvent({type:r.LOADERROREVENTS.LOAD_ERROR,errorType:r.LOADERROREVENTS.LOAD_MATERIAL_ERROR,event:e}),t.textruesLoaded=!0,t._onTaskFinished()}))}_loadMaterialId(e,t){var i=this,r=this.url,n=this.fileLoader;const a=r.materialIdUrl();this.loadWithStorage(a,(()=>new Promise(((e,t)=>{n.setResponseType(""),n.load(a,e,void 0,t)}))),(t=>{let r=JSON.parse(t);i.model.materialManager.materialIdMap=r.materials,e&&e(Object.keys(r.materials))}),(e=>{console.log("ERROR: there is no material_id.zip, please reTranslate the model"),t&&t()}))}_parseMaterial(e,t){t?this._parseMaterialJson(e):this._parseMaterialBinary(e)}_parseMaterialBinary(e){var t,i=this.url,n=this.model.materialManager,a=n.materials,s=n.textures,o=new r.Loader.MaterialReader(e),l=o.materialCount,d=this,h=[];if(!(l<0)){var c=this.model.manager.scene;for(t=0;t<l;++t){var u,p={},m=o.getMaterial(t);if(void 0!==m.color&&(p.color=m.color),void 0!==m.opacity&&(p.opacity=m.opacity,m.opacity<1&&(p.transparent=!0)),void 0!==m.side&&m.side&&(p.side=THREE.DoubleSide),void 0!==m.emissive&&(p.emissive=m.emissive),void 0!==m.environment&&(p.envMapIntensity=m.environment),void 0!==m.roughness&&(p.roughness=m.roughness,p.originRoughness=m.roughness),void 0!==m.metalness&&(p.metalness=m.metalness,p.originMetalness=m.metalness),r.GlobalData.IBL?(p.iblProbe=c.iblProbe,(u=new z.IBLMaterial(p)).type="IBL"):u=r.MaterialUtil.createStandardMaterial(p),u.name=t,a[t]=u,p=null,r.GlobalData.EnableTextureLoading){var f=null;m.texture_n>0&&(f=o.getTexture(m.texture_id[0])),f&&h.push({id:t,data:f})}}if(h.length>0){for(l=this.maxLoadTextureCount=h.length,t=0;t<l;t++)this._parseTexture(i,h[t],s);h=null}if(this.model.lightmap){var g=this.model.lightmapNum;for(this.maxLoadTextureCount+=g,t=0;t<g;t++){var v=this._loadTexture(i.textureUrl("lightmap-rgbm"+t+".png"),(function(){d._onLoadTexture()}),void 0,(function(){d._onLoadTexture()}));n.lightmaps[t]=v}}0==this.maxLoadTextureCount&&d._onLoadTexture(),o=null}}_parseMaterialJson(e){var t,i=this.url,n=this.model.materialManager,a=n.materials,s=(n.textures,new r.Loader.MaterialReaderJson(e)),o=s.count,l=this;let d={};if(!(o<0)){var h=this.model.manager.scene;for(t=0;t<o;++t){var c,u={},p=s.getMaterial(t),m=p.parameters;if(void 0!==m.color&&(u.color=m.color),void 0!==m.opacity&&(u.opacity=m.opacity,m.opacity<1&&(u.transparent=!0)),void 0!==m.side&&"double"==m.side&&(u.side=THREE.DoubleSide),void 0!==m.emissive&&(u.emissive=m.emissive),void 0!==m.environment&&(u.envMapIntensity=m.environment),void 0!==m.roughness&&(u.roughness=m.roughness,u.originRoughness=m.roughness),void 0!==m.metalness&&(u.metalness=m.metalness,u.originMetalness=m.metalness),void 0!==m.refractionRatio&&(u.refractionRatio=m.refractionRatio),void 0!==m.imageFade&&(u.imageFade=m.imageFade),null!=p.fillPattern){u.fillMap=r.MaterialUtil.loadFillMap(p.fillPattern);var f=this.model.getModelManager().viewer.domElement;u.viewportSize=new THREE.Vector2(f.offsetWidth,f.offsetHeight)}if("user"==p.tag&&(u.tag="user"),null!=p.receiveIBL&&(u.receiveIBL=p.receiveIBL),r.GlobalData.IBL?(u.iblProbe=h.iblProbe,(c=new z.IBLMaterial(u)).type="IBL"):(c=r.MaterialUtil.createStandardMaterial(u)).refreshUniforms(),c.name=t,a[t]=c,u=null,r.GlobalData.EnableTextureLoading){var g=[],v=p.textures;for(var y in v){var M=v[y];"reliefMap"==y&&v.bumpMap||g.push({type:y,data:M})}g.length>0&&(d[t]=g)}}if(n.handlerUrl=i,n.textureDataArray=d,Object.keys(d).length>0&&(this.maxLoadTextureCount++,n.updateTexturePkgMapping(void 0,(()=>{this._onLoadTexture()}))),this.model.lightmap){var E=this.model.lightmapNum;for(this.maxLoadTextureCount+=E,t=0;t<E;t++){var b=this._loadTexture(i.lightmapTexUrl("lightmap-rgbm"+t+".png"),(function(e){e.encoding=THREE.GammaEncoding,l._onLoadTexture()}),void 0,(function(){l._onLoadTexture()}));n.lightmaps[t]=b}}0==this.maxLoadTextureCount&&l._onLoadTexture(),s=null}}_loadTexture(e,t,i,n){var a,s=THREE.DefaultLoadingManager.getHandler(e),o=this;if(null!==s)a=s.load(e,t);else{a=new THREE.Texture;const l=e=>{let i=document.createElement("canvas");i.width=e.width,i.height=e.height,i.getContext("2d").putImageData(e,0,0),a.image=r.MaterialUtil.ensurePowerOfTwo(i),a.needsUpdate=!0,t&&t(a)},d=e=>{void 0!==n&&n(e),o.model.dispatchEvent({type:r.LOADERROREVENTS.LOAD_ERROR,errorType:r.LOADERROREVENTS.LOAD_TEXTURE_ERROR,event:e})},h=()=>new Promise(((t,r)=>{(s=new THREE.ImageLoader).setCrossOrigin("anonymous"),s.load(e,(function(e){let i=document.createElement("canvas");i.width=e.width,i.height=e.height;let r=i.getContext("2d");r.drawImage(e,0,0),t(r.getImageData(0,0,i.width,i.height))}),i,r)}));this.loadWithStorage(e,h,l,d)}return a}_parseTexture(e,t,i){var r=window.TEST||{},n=t.id,a=t.data,s=a.id+a.file_name_ext;const o=this.model.materialManager;this.enableCompressedTexture&&a.dds?this.textureLoader=o._loadCompressedTexture:r.CryptoResourceLoader?this.textureLoader=o._loadTextureByCrypto:this.textureLoader=o._loadTexture;var l=this;this.textureLoader(e.textureUrl(s),(function(e){e.repeat.fromArray([a.scale_u,a.scale_v]),e.offset.fromArray([a.offset_u,a.offset_v]),e.setRotateAngle&&e.setRotateAngle(a.angle),a.repeat_u&&(e.wrapS=THREE.RepeatWrapping),a.repeat_v&&(e.wrapT=THREE.RepeatWrapping),e&&(i[n]=e),l._onLoadTexture()}),void 0,(function(){l._onLoadTexture()}))}_loadUV2(){var e=this,t=this.url,i=this.fileLoader;(()=>{const r=t.uv2Url();this.loadWithStorage(r,(()=>new Promise(((e,t)=>{i.setResponseType("arraybuffer"),i.load(r,e,void 0,t)}))),(t=>{e.uv2Buffer=new Uint16Array(t),e._onTaskFinished()}),(t=>{e._onTaskFinished()}))})();(()=>{const r=t.uv2MapItemUrl();this.loadWithStorage(r,(()=>new Promise(((e,t)=>{i.setResponseType(""),i.load(r,e,void 0,t)}))),(t=>{e.uv2MapItem=JSON.parse(t),e._onTaskFinished()}),(t=>{e._onTaskFinished()}))})()}getUV2ById(e,t){if(this.uv2MapItem&&t){var i=this.uv2MapItem[e];if(i){var r=i.uv1Scale,n=i.uv1Translation,a=i.uv1ByteOffset/2,s=2*t;if(this.uv2Buffer){for(var o=this.uv2Buffer,l=[],d=a;d<a+s;d+=2)l.push(r[0]*(o[d]/65535)+n[0]),l.push(r[1]*(o[d+1]/65535)+n[1]);return{lightmapIdx:i.lightmapIdx,uv2:l}}}}}getInstanceUV2ForSharedMeshById(e,t){if(this.uv2MapItem&&t){var i=this.uv2MapItem[e];if(i){var r=i.uv1Scale,n=i.uv1Translation,a=i.uv1ByteOffset/2,s=2*t;if(this.uv2Buffer){for(var o=this.uv2Buffer,l=[],d=a;d<a+s;d+=2)l.push(o[d]),l.push(o[d+1]);var h=[];return h.push(r[0]),h.push(r[1]),h.push(n[0]),h.push(n[1]),{lightmapIdx:i.lightmapIdx,uv2:l,offsetRepeat:h}}}}}getInstanceUV2InfoById(e){if(this.uv2MapItem){var t=this.uv2MapItem[e];if(t){var i=t.uv1Scale,r=t.uv1Translation,n=[];return n.push(i[0]),n.push(i[1]),n.push(r[0]),n.push(r[1]),{lightmapIdx:t.lightmapIdx,byteOffset:t.uv1ByteOffset,offsetRepeat:n}}}}getInstanceUV2ById(e,t){var i=e/2;if(this.uv2Buffer)return this.uv2Buffer.slice(i,i+t)}_loadSymbol(e){var t=this,i=this.url,n=this.fileLoader;const a=i.symbolUrl();this.loadWithStorage(a,(()=>new Promise(((e,t)=>{n.setResponseType("arraybuffer"),n.load(a,e,void 0,t)}))),(i=>{t.parseSymbol(i),t._onTaskFinished(),e&&e()}),(i=>{t.model.dispatchEvent({type:r.LOADERROREVENTS.LOAD_ERROR,errorType:r.LOADERROREVENTS.LOAD_SYMBOL_ERROR,event:i}),t._onTaskFinished(),e&&e()}))}parseSymbol(e){const t=this.model.getConfig().metadata;this.descriptor.symbolReader=new r.Loader.SymbolReader(e,t.version)}_loadOctree(e,t){var i=null,r=this.model.configLoader.transformInfos.transformMatrix;this.model.configLoader.transformInfos.octreeTransformed&&(i=new THREE.Matrix4).copy(r).invert(),e&&this._loadOctreeBy(i,!1),t&&this._loadOctreeBy(i,!0)}_loadOctreeBy(e,t){var i=this,n=this.url,a=this.fileLoader;const s=t?n.octreeUrl("i"):n.octreeUrl("o");this.loadWithStorage(s,(()=>new Promise(((e,t)=>{a.setResponseType("arraybuffer"),a.load(s,e,void 0,t)}))),(r=>{i._parseOctree(r,e,t),i._onTaskFinished()}),(e=>{i.model.dispatchEvent({type:r.LOADERROREVENTS.LOAD_ERROR,errorType:r.LOADERROREVENTS.LOAD_OCTREEINNER_ERROR,event:e}),i._onTaskFinished()}))}_parseOctree(e,t,i){this.descriptor.octreeRootNode[i?"inner":"outer"]=this._getOctreeRootNode(e,t)}_getOctreeRootNode(i,n){function a(i,r){n&&r.boundingBox.applyMatrix4(n),i.boundingBoxWorld=r.boundingBox.clone(),i.min=r.boundingBox.min,i.max=r.boundingBox.max,i.center=r.boundingBox.getCenter(e).clone(),i.size=r.boundingBox.getSize(t).lengthSq(),i.childStart=r.child_s,i.childEnd=r.child_e}function s(e,t){e.octType=0,e.center.x<t.center.x&&(e.octType+=1),e.center.y<t.center.y&&(e.octType+=2),e.center.z<t.center.z&&(e.octType+=4)}var o=null,l=new r.Loader.OctreeReader(i);if(l.getCount()>0){var d=l.getNode(0),h=d.cell_id;a(o=new r.Loader.OctreeNode(h,0),d),function e(t,i){for(var n=t.childStart,o=t.childEnd,l=n;l<o;++l){var d=i.getNode(l),h=d.cell_id,c=new r.Loader.OctreeNode(h,t.depth);a(c,d),t.add(c),s(c,t),c.updateMaxDepth(),e(c,i)}}(o,l)}return l=null,o}_loadUserId(){var e=this,t=this.url,i=this.fileLoader;const n=t.userIdUrl();this.loadWithStorage(n,(()=>new Promise(((e,t)=>{i.setResponseType("arraybuffer"),i.load(n,e,void 0,t)}))),(t=>{e._parseUserId(t),e._onTaskFinished()}),(t=>{e.model.dispatchEvent({type:r.LOADERROREVENTS.LOAD_ERROR,errorType:r.LOADERROREVENTS.LOAD_USERID_ERROR,event:t}),e._onTaskFinished()}))}_parseUserId(e){this.descriptor.userIdReader=new r.Loader.IdReader(e)}_loadUserData(){var e=this,t=this.url,i=this.fileLoader;const n=t.userDataUrl();this.loadWithStorage(n,(()=>new Promise(((e,t)=>{i.setResponseType(""),i.load(n,e,void 0,t)}))),(t=>{e._parseUserData(t),e._onTaskFinished()}),(t=>{e.model.dispatchEvent({type:r.LOADERROREVENTS.LOAD_ERROR,errorType:r.LOADERROREVENTS.LOAD_USERDATA_ERROR,event:t}),e._onTaskFinished()}))}_parseUserData(e){this.descriptor.userDataReader=new r.Loader.UserDataReader(e)}_loadCamera(){var e=this,t=this.url,i=this.fileLoader;const n=t.cameraUrl();this.loadWithStorage(n,(()=>new Promise(((e,t)=>{i.setResponseType(""),i.load(n,e,void 0,t)}))),(t=>{e._parseCamera(t),e._onTaskFinished()}),(t=>{e.model.dispatchEvent({type:r.LOADERROREVENTS.LOAD_ERROR,errorType:r.LOADERROREVENTS.LOAD_CAMERA_ERROR,event:t}),e._onTaskFinished()}))}_parseCamera(e){var t=this.model.configLoader.transformInfos.transformMatrix;new r.Loader.CameraReader(e).parse(this.model,t)}_loadMpk(e,t){var i=this,n=this.fileLoader;const a=this.url.mpkUrl(e);this.loadWithStorage(a,(()=>new Promise(((e,t)=>{n.setResponseType("arraybuffer"),n.load(a,e,void 0,t)}))),(r=>{i._parseMpk(r,e),t(),i._onTaskFinished()}),(e=>{i.model.dispatchEvent({type:r.LOADERROREVENTS.LOAD_ERROR,errorType:r.LOADERROREVENTS.LOAD_MPK_ERROR,event:e}),t(),i._onTaskFinished()}))}_loadAllMpks(e){for(var t=0;t<e;++t)this.mpkTaskManager.addTask(t);this.mpkTaskManager.processTasks(this._loadMpk.bind(this))}_parseMpk(e,t){for(var i=new(this.model.getConfig().metadata.mpk_batched?r.Loader.BMPKReader:r.Loader.MPKReader)(e),n=new THREE.Matrix4,a=0,s=i.header.meshCount;a<s;++a){var o=i.getPtBuffer(a),l=i.getIdxBuffer(a),d=i.getNormalBuffer(a),h=i.getMeshData(a),c=i.getUVBuffer(a);null!=o&&null!=l?(void 0!==h.baseScale&&0!==h.baseScale&&(o=new Float32Array(o),n.identity(),n.setPosition(new THREE.Vector3(h.baseX,h.baseY,h.baseZ)),n.scale(new THREE.Vector3(h.baseScale,h.baseScale,h.baseScale)),r.GeomUtil.applyMatrix4ToBuffer(n,o)),this.descriptor.cacheReferencedMeshBufferData(h.mesh_id,{P:o,I:l,N:d,UV:c}),this.descriptor.cacheReferencedMeshMpkIds(t,h.mesh_id)):r.Logger.log("Error Geometry!")}i=null}_loadBorderline(e){var t=this,i=this.url,n=this.fileLoader;const a=e?i.borderLineUrl(1):i.borderLineUrl(0);this.loadWithStorage(a,(()=>new Promise(((e,t)=>{n.setResponseType("arraybuffer"),n.load(a,e,void 0,t)}))),(i=>{t._parseBorderLine(i,e),t._onTaskFinished()}),(e=>{t.model.dispatchEvent({type:r.LOADERROREVENTS.LOAD_ERROR,errorType:r.LOADERROREVENTS.LOAD_MATERIAL_ERROR,event:e}),t._onTaskFinished()}))}_parseBorderLine(e,t){for(var i=new r.Loader.LineReader(e),n=[],a=0,s=i.header.lineCount;a<s;++a){var o=i.getLineData(a);n.push({meshId:o.line_id,positionStart:o.ptOffset/4,positionCount:3*o.ptCount,indexStart:o.idxOffset/4,indexCount:o.idxCount})}this.descriptor.cacheBorderLine(t,{P:i.ptBuffer,I:i.idxBuffer,IndexInfos:n}),i=null}_isLoadMpkBorderlines(){var e=this.model.getConfig().metadata;return!(!r.GlobalData.BorderLineBatched||!e.outline_mpk)}getAllBorderlineCount(){var e=this.model.getConfig().metadata;return this._isLoadMpkBorderlines()?e.outline_mpk:e.outline_0+e.outline_1}_loadAllBorderlines(e){this._isLoadMpkBorderlines()?e.outline_mpk&&this._loadAllMpkBorderLines(e.outline_mpk):(e.outline_0&&this._loadBorderline(!1),e.outline_1&&this._loadBorderline(!0))}delayLoadBorderlines(e){this._isLoadMpkBorderlines()?this._delayLoadMpkBorderlines(e):this._delayLoadTogetherBorderlines(e)}_delayLoadMpkBorderlines(e){var t=this.model.getConfig().metadata;this.startCallback=null,this.progressCallback=null,this.finishCallback=e,this.loadTaskCount=0,this.maxLoadTaskCount=t.outline_mpk,t.outline_mpk&&this._loadAllMpkBorderLines(t.outline_mpk)}_delayLoadTogetherBorderlines(e){var t=this.model.getConfig().metadata;this.startCallback=null,this.progressCallback=null,this.finishCallback=e,this.loadTaskCount=0,this.maxLoadTaskCount=t.outline_0+t.outline_1,t.outline_0&&this._loadBorderline(!1),t.outline_1&&this._loadBorderline(!0)}_loadAllMpkBorderLines(e){this.mpkBorderLineTaskManager||(this.mpkBorderLineTaskManager=new r.TaskManager);for(var t=0;t<e;++t)this.mpkBorderLineTaskManager.addTask(t);this.mpkBorderLineTaskManager.processTasks(this._loadMpkBorderLine.bind(this))}_loadMpkBorderLine(e,t){var i=this,r=this.fileLoader,n=this.url,a=e>=this.model.getConfig().metadata.mpk_shared_index;const s=n.mpkBorderLineUrl(e);this.loadWithStorage(s,(()=>new Promise(((e,t)=>{r.setResponseType("arraybuffer"),r.load(s,e,void 0,t)}))),(e=>{i._parseMpkBorderLine(e,a),t(),i._onTaskFinished()}),(e=>{i._onTaskFinished()}))}_parseMpkBorderLine(e,t){for(var i=new r.Loader.LineReader(e),n=[],a=0,s=i.header.lineCount;a<s;++a){var o=i.getLineData(a);n.push({meshId:o.line_id,positionStart:o.ptOffset/4,positionCount:3*o.ptCount,indexStart:o.idxOffset/4,indexCount:o.idxCount})}this.descriptor.cacheBorderLine(t,{P:i.ptBuffer,I:i.idxBuffer,IndexInfos:n}),i=null}dealProgressSegment(e,t){return r.GlobalData.BatchMergeEnabled?t*e.progressPercentage.load:t}}})(),function(){class e extends r.ModelView.BaseLoader{constructor(e){super(e),this.descriptor=null}loadSceneAndMpks(e){e.symbol&&this._loadSymbol(),this._loadScene(0),e.lines&&this._loadLine(),e.mpks&&this._loadAllMpks(e.mpks),r.GlobalData.BorderLineDelayLoaded||this._loadAllBorderlines(e)}getSceneTaskCount(e){var t=e.scenes;return t+=e.symbol,t+=e.lines,t+=e.mpks,r.GlobalData.BorderLineDelayLoaded||(t+=this.getAllBorderlineCount()),t}}r.ModelView.DefaultBaseLoader=e}(),r.ModelView.ModelBaseHandler=class{constructor(e){this.model=e,this.defaultManager=null,this.instancedManager=null,this.loader=null,this.loaded=!1,this.dataReady=!1,this.borderlinesLoaded=!1,this.borderlinesGenerated=!1}destroy(){this.model=null,this.defaultManager.destroy(),this.defaultManager=null,this.instancedManager.destroy(),this.instancedManager=null,this.loader&&(this.loader.destroy(),this.loader=null)}load(e){var t=this,i=this.model;this.loader.setNotifyProgress(e),this.loader.load((function(){i.manager.dispatchEvent({type:r.EVENTS.ON_LOAD_START})}),(function(e){i.manager.dispatchEvent({type:r.EVENTS.ON_LOAD_PROGRESS,progress:e})}),(function(){console.time("PrepareData:"),t.prepareData((function(){console.timeEnd("PrepareData:"),t.processLoadCompleted((function(){i.manager.dispatchEvent({type:r.EVENTS.ON_LOAD_COMPLETE,modelId:i.id})}))}))}))}processLoadCompleted(e){var t=this.model;t.materialManager._updateTextureMapping(),t.materialManager._updateIBL(t),t.updateOctreeNode();var i=t.getFilter();let r={};r[t.fileId]=this.model.getAllNodeInfos(),i.initFilterManager(r),requestAnimationFrame((function(){t.setLoaded(!0),e&&e(),t.updateMeshNodes(),t.applyFilter(),t.debut(t)}))}prepareData(e){if(!this.dataReady){var t=this;this.loader.getDescriptor().parseItemData((function(){t.dataReady=!0,t.settleData(e)}))}}prepareWireframe(e,t){if(e.isActivateWireframe())if(r.GlobalData.BorderLineDelayLoaded&&this.loader.getAllBorderlineCount())if(this.borderlinesLoaded)this.borderlinesGenerated&&(this.defaultManager.asyncGenerateWireframe(e),this.instancedManager.generateWireframe(e));else{this.borderlinesLoaded=!0;var i=this;this.loader.delayLoadBorderlines((function(){i.instancedManager.generateWireframe(e),i.defaultManager.asyncGenerateWireframe(e,(function(){console.log("Delay loading borderline OK!"),i.borderlinesGenerated=!0,t&&t()}))}))}else this.defaultManager.generateWireframe(e),this.instancedManager.generateWireframe(e)}prepare(e){}needUpdate(){return!0}updateNodes(){this.needUpdate()&&(this.defaultManager.updateNodes(this.model),r.GlobalData.Instance&&this.instancedManager.updateNodes(this.model))}isLoaded(){return this.loaded}isDataReady(){return this.loaded}isAllReady(){return!0}isHidden(){var e=this.model;return!e.visible&&(e.manager.scene.removeObjectGroupByName(e._getWireframeGroupName()),!0)}settleData(e){}addNodeInfoToOctantMap(){}applyFilter(){this.isLoaded()&&(this.defaultManager.applyFilter(this.model),r.GlobalData.Instance&&this.instancedManager.applyFilter(this.model))}applySelection(){this.isLoaded()&&(this.defaultManager.applySelection(this.model),r.GlobalData.Instance&&this.instancedManager.applySelection(this.model))}clearSelection(){this.isLoaded()&&(this.defaultManager.clearSelection(this.model),r.GlobalData.Instance&&this.instancedManager.clearSelection(this.model))}applyHover(){this.isLoaded()&&(this.defaultManager.applyHover(this.model),r.GlobalData.Instance&&this.instancedManager.applyHover(this.model))}clearHover(){this.isLoaded()&&(this.defaultManager.clearHover(this.model),r.GlobalData.Instance&&this.instancedManager.clearHover(this.model))}applyBlink(){this.isLoaded()&&(this.defaultManager.applyBlink(this.model),r.GlobalData.Instance&&this.instancedManager.applyBlink(this.model))}clearBlink(){this.isLoaded()&&(this.defaultManager.clearBlink(this.model),r.GlobalData.Instance&&this.instancedManager.clearBlink(this.model))}applyReplacement(){this.isLoaded()&&(this.defaultManager.applyReplacement(this.model),r.GlobalData.Instance&&this.instancedManager.applyReplacement(this.model))}getMeshesByUserIds(e,t){this.isLoaded()&&(this.defaultManager.getMeshesByUserIds(this.model,e,t),r.GlobalData.Instance&&(this.instancedManager.getMeshesByUserId(this.model,e),this.instancedManager.getMeshesByUserId(this.model,t)))}rebuildIndicesforLightmap(){this.defaultManager.rebuildIndices(this.model)}adjustVisibility(e){this.defaultManager.adjustVisibility(this.model,e)}changeVisibilityOfSelectedObjects(e){this.defaultManager.changeVisibilityOfSelectedObjects(this.model,e)}changeVisibilityOfNonSelectedObjects(e){this.defaultManager.changeVisibilityOfNonSelectedObjects(this.model,e)}adjustInstanceVisibility(e){this.instancedManager.adjustVisibility(this.model,e)}changeInstanceVisibilityOfSelectedObjects(e){this.instancedManager.changeVisibilityOfSelectedObjects(this.model,e)}changeInstanceVisibilityOfNonSelectedObjects(e){this.instancedManager.changeVisibilityOfNonSelectedObjects(this.model,e)}restoreVisibilityOfObjects(){this.defaultManager.restoreVisibilityOfObjects(),this.instancedManager.restoreVisibilityOfObjects()}getBlinkMaterials(){var e=[],t=this.model.materialManager.instanceMaterials;for(var i in t)for(var r=t[i],n=0,a=r.length;n<a;n++)e.push(r[n]);return e=e.concat(this.defaultManager.meshManager.getBlinkMaterials())}disposeBufferAfterVbo(){this.isLoaded()&&(this.defaultManager.disposeBufferAfterVbo(),this.instancedManager.disposeBufferAfterVbo())}getGeometryBuffersByUserId(e){if(!this.isLoaded())return[];var t=[];return t=(t=t.concat(this.defaultManager.getGeometryBuffersByUserId(this.model,e))).concat(this.instancedManager.getGeometryBuffersByUserId(this.model,e))}explode(){this.isLoaded()&&(this.defaultManager.explode(this.model),r.GlobalData.Instance&&this.instancedManager.explode(this.model))}calculateClippingIds(e,t){if(!this.isLoaded()||!r.GlobalData.BatchMergeEnabled)return;if(e){let e=this.model.getModelDescriptor().getStandardUserIds(),t=this.model.getModelDescriptor().getStandardNodeInfos();if(this.defaultManager._collectFilteredUserIds(this.model,e,t),r.GlobalData.Instance){let e=this.model.getModelDescriptor().getInstancedUserIds(),t=this.model.getModelDescriptor().getInstancedNodeInfos();this.instancedManager._collectFilteredUserIds(this.model,e,t)}}var i=this.model.manager.scene.fillClipPlane;let n=i&&i.isEnabled();var a=this.model.manager.scene.clipPlanes;let s=n?i:a,o=s.renderClipPlane,l=n?s.capsIntersectPosition:s.capsIntersectPosition[s.selectIndex];l.length=0;let d=n?-1:s.selectIndex;a&&t&&this.defaultManager.clearClippingIdsForBox(),this.defaultManager.calculateClippingIds(o,l,d,this.model),r.GlobalData.Instance&&this.instancedManager.calculateClippingIds(o,l,this.model),s.addToCapsWireframe(this.model)}calculateClippingContours(e){const t=this.model.manager.scene;var i=r.FillClipPlaneManager.getInstance(t);const n=i.planeMesh;var a=i.renderClipPlane;const s=r.FillClipPlaneManager.getFillClipPlaneBoundingBoxWorld(t),o=this.model.id;i.capsIntersectContour[o]={},this.defaultManager.calculateClippingContours(o,a,n,s,e,i.capsIntersectContour),r.GlobalData.Instance&&this.instancedManager.calculateClippingContours(o,a,n,s,e,i.capsIntersectContour)}isHiddenNode(e){return this.defaultManager.isHiddenNode(e)||this.defaultManager.isHiddenNode(e)}},(()=>{class e extends r.ModelView.BaseDescriptor{constructor(){super()}parseItemData(e){var t=this.getSceneReaderMap();for(var i in t)for(var r=t[i],n=0,a=r.header.cellCount;n<a;++n)for(var s=r.getCellInfo(n),o=s.itemIndex;o<s.itemCount;++o)this._readItemData(r,o,n);e&&e()}asyncParseItemData(e){for(var t=this.getSceneReaderMap(),i=Object.keys(t),n=i.length,a=0,s=this,o=0;o<n;o++){i[o];var l=t[i[o]];r.Utils.asyncProcess(l,l.header.cellCount,100,(function(e,t){s._parseItemDataBy(e,t)}),(function(){++a===n&&e&&e()}))}}_parseItemDataBy(e,t){for(var i=e.getCellInfo(t),r=i.itemIndex;r<i.itemCount;++r)this._readItemData(e,r,t)}parseItemDataByCellId(e){var t=this.getSceneReaderMap();for(var i in t)this._parseItemDataBy(t[i],e)}_readItemData(e,t,i){var n=e.getItemInfo(t);void 0!==n&&(n.type===r.ModelView.BaseDescriptor.EnumNodeItemType.SYMBOL?this._readSymbolInfo(e,i,n):this._readMeshInfo(e,i,n,null))}_readSymbolInfo(e,t,i){var n=this.symbolReader;if(n){var a=n.header.symbolCount,s=i.toData,o=e.getMatrixInfo(i.matrixId).matrix.clone(),l={matrix:o,ItemId:i.ItemId,originalId:i.originalId,userDataId:i.userDataId,materialId:i.materialId};if(s>=0&&s<a)for(var d=n.getSymbolInfo(s),h=d.itemIndex;h<d.itemCount;++h){var c=n.getItemInfo(h);c.type!==r.ModelView.BaseDescriptor.EnumNodeItemType.SYMBOL&&this._readMeshInfo(n,t,c,l)}o=null,l=null,n=null}}_readMeshInfo(e,t,i,n){var a,s,o;if(null===n)a=i.userDataId,s=i.originalId,o=i.materialId;else{a=n.userDataId,s=n.originalId;var l=this.getConfigure();o=(!l||0===l.metadata.material_override||1===l.metadata.material_override&&(-1===i.materialId||void 0===i.materialId))&&n.materialId>-1?n.materialId:i.materialId}var d=null,h=r.ModelView.BaseDescriptor.EnumNodeItemType;switch(i.type){case h.MESH:d=this._getMeshNodeAttr(e,i,n);break;case h.TUBE:d=this._getMeshNodeAttrOfTube(e,i,n);break;case h.PIPE:d=this._getMeshNodeAttrOfPipe(e,i,n);break;case h.BOX:d=this._getMeshNodeAttrOfBox(e,i,n);break;case h.BOX_M:d=this._getMeshNodeAttrOfBoxM(e,i,n);break;case h.PIPE_M:d=this._getMeshNodeAttrOfPipeM(e,i,n);break;case h.MESH_REF:d=this._getMeshNodeAttrOfMeshRef(e,i,n);break;case h.LINE:d=this._getLineNodeAttr(e,i,n)}if(d){if(d.userId=this.userIdReader?this.userIdReader.getString(s):s,d.userData=this.userDataReader?this.userDataReader.getUserData(a):null,d.name=d.userId,d.type=i.type,d.cellId=t,d.materialId=o,d.state=r.EnumObjectState.Visible,d.material=null,this.lightmap){var c=i.ItemId;n&&(c=n.ItemId+"_"+i.ItemId),d.itemIdUV2=c}d.parameterizedDesc=this._isParameterizedNode(d),this._isGeometrySharedNode(d)&&(void 0===this.sharedGeometryCounter[d.geometryId]&&(this.sharedGeometryCounter[d.geometryId]=0),this.sharedGeometryCounter[d.geometryId]+=1),this.fullNodeInfoArray.push(d),d=null}}_getMeshNodeAttrOfPipe(e,t,i){const n=e.getMatrixInfo(t.matrixId).matrix.clone();i&&n.multiplyMatrices(i.matrix,n);const a=r.Utils.scratchVector_1,s=r.Utils.scratchVector_2,o=r.Utils.scratchVector_3,l=r.Utils.scratchMatrix4_1,d=r.Utils.scratchQuaternion_1,h=t.boundingBox.clone();h.applyMatrix4(n);let c=e.getGeomPipeInfo(t.toData);const u=c.startPt,p=c.endPt,m=o.copy(p).sub(u),f=m.length();m.normalize();let g=c.radius;const v=a.set(0,1,0),y=s.set(g,f,g),M=d.setFromUnitVectors(v,m),E=a.copy(u).addScaledVector(m,.5*f),b=l.identity().compose(E,M,y);n.multiply(b),c=null;const x=r.Math.isMirror(n),I=r.ModelView.BaseDescriptor.parameterizedNodeType.PIPE,T=x?I+"Mirror":I;return{nodeId:(i?i.ItemId+"_"+t.ItemId:t.ItemId)+"_"+I,geometryId:I,geometryIdCode:T,boundingBox:h,matrix:n,fromMirror:x}}_getMeshNodeAttrOfTube(e,t,i){return this._getMeshNodeAttrOfPipe(e,t,i)}_getMeshNodeAttrOfBox(e,t,i){const n=e.getMatrixInfo(t.matrixId).matrix.clone();i&&n.multiplyMatrices(i.matrix,n);const a=r.Utils.scratchVector_1,s=r.Utils.scratchMatrix4_1,o=t.boundingBox.clone();o.applyMatrix4(n);const l=t.boundingBox,d=l.getSize(a),h=s.identity().scale(d),c=l.getCenter(a);h.setPosition(c),n.multiply(h);const u=r.Math.isMirror(n),p=r.ModelView.BaseDescriptor.parameterizedNodeType.BOX,m=u?p+"Mirror":p;return{nodeId:(i?i.ItemId+"_"+t.ItemId:t.ItemId)+"_"+p,geometryId:p,geometryIdCode:m,boundingBox:o,matrix:n,fromMirror:u}}_getMeshNodeAttrOfBoxM(e,t,i){const n=e.getMatrixInfo(t.matrixId).matrix.clone();i&&n.multiplyMatrices(i.matrix,n);const a=t.boundingBox.clone();a.applyMatrix4(n);const s=r.Math.isMirror(n),o=r.ModelView.BaseDescriptor.parameterizedNodeType.BOX_M,l=s?o+"Mirror":o,d=e.getGeomBoxUvInfo(t.toData);return{nodeId:(i?i.ItemId+"_"+t.ItemId:t.ItemId)+"_"+o,geometryId:o,geometryIdCode:l,boundingBox:a,matrix:n,fromMirror:s,uvArrayBuffer:d}}_getMeshNodeAttrOfPipeM(e,t,i){const n=e.getMatrixInfo(t.matrixId).matrix.clone();i&&n.multiplyMatrices(i.matrix,n);const a=t.boundingBox.clone();a.applyMatrix4(n);const s=r.Math.isMirror(n),o=r.ModelView.BaseDescriptor.parameterizedNodeType.PIPE_M,l=s?o+"Mirror":o,d=e.getGeomPipeUvInfo(t.toData);return{nodeId:(i?i.ItemId+"_"+t.ItemId:t.ItemId)+"_"+o,geometryId:o,geometryIdCode:l,boundingBox:a,matrix:n,fromMirror:s,uvArrayBuffer:d}}_getMeshNodeAttrOfMeshRef(e,t,i){const n=e.getMatrixInfo(t.matrixId).matrix.clone();i&&n.multiplyMatrices(i.matrix,n);const a=t.boundingBox.clone();a.applyMatrix4(n);const s=r.Math.isMirror(n),o=t.toData,l=s?o+"Mirror":o;return{nodeId:"refMesh|"+(i?i.ItemId+"_"+t.ItemId:t.ItemId),geometryId:o,geometryIdCode:l,boundingBox:a,matrix:n,fromMirror:s}}_getMeshNodeAttr(e,t,i){const n=t.boundingBox.clone(),a=new THREE.Matrix4;-1!==t.matrixId?(a.copy(e.getMatrixInfo(t.matrixId).matrix),i&&a.multiplyMatrices(i.matrix,a),n.applyMatrix4(a)):i&&n.applyMatrix4(i.matrix);const s=r.Math.isMirror(a),o=t.toData,l=s?o+"Mirror":o;return{nodeId:i?i.ItemId+"_"+t.ItemId:t.ItemId,geometryId:o,geometryIdCode:l,boundingBox:n,matrix:a,fromMirror:s}}_getLineNodeAttr(e,t,i){const r=t.boundingBox.clone(),n=new THREE.Matrix4;-1!==t.matrixId?(n.copy(e.getMatrixInfo(t.matrixId).matrix),i&&n.multiplyMatrices(i.matrix,n),r.applyMatrix4(n)):i&&r.applyMatrix4(i.matrix);const a="line-"+t.toData,s=a;return{nodeId:i?"line-"+i.ItemId+"-"+t.ItemId:"line-"+t.ItemId,geometryId:a,geometryIdCode:s,boundingBox:r,matrix:n}}}r.ModelView.DefaultDescriptor=e})(),function(){class e extends r.ModelView.DefaultBaseLoader{constructor(e){super(e),this.descriptor=new r.ModelView.DefaultDescriptor}}r.ModelView.DefaultLoader=e}(),r.ModelView.InstancedBaseManager=class{constructor(){this.meshManager=null,this.wireframeManager=null}destroy(){this.meshManager.destroy(),this.meshManager=null,this.wireframeManager.destroy(),this.wireframeManager=null}clearData(){this.meshManager.clearData(),this.wireframeManager.clearData()}getGeometryByNodeInfo(e,t){return this.meshManager.getGeometryByNodeInfo(e,t)}getInstanceGeometries(){return this.meshManager.instanceGeometryMap}traverseInstanceGeometryMap(e){this.meshManager.traverseInstanceGeometryMap(e)}getCachedInstanceData(){return this.meshManager.cachedInstance}getBufferAttributesBy(e){return this.meshManager.getBufferAttributesBy(e)}traverseNodeIdxMapByUserId(e,t){this.meshManager.traverseNodeIdxMapByUserId(e,t)}traverseNodeIdxMap(e,t){this.meshManager.traverseNodeIdxMap(e,t)}getMeshesByUserId(e,t){this.meshManager.getMeshesByUserId(e,t)}_updateInstanceMaterialByUserId(e,t,i,r){this.meshManager.updateInstanceStateByUserId(e,t,i,r)}_updateInstanceClippingByUserId(e){this.meshManager.updateInstanceClippingByUserId(e)}_updateInstanceMaterialForWireFrameByUserId(e,t,i,r){this.wireframeManager.updateInstanceWireframeByUserId(e,t,i,r)}_updateInstanceWireframeClippingByUserId(e){this.wireframeManager.updateInstanceWireframeClippingByUserId(e)}_updateInstanceMaterial(e){r.Logger.time("update instance material");var t=r.Model.EnumFilterState;this.clearSelectedObjectIds();var i=null,n=e.getFilter();if(n&&(i=n.getLocalClippingList()),i)for(var a in i)this._updateInstanceClippingByUserId(a),this._updateInstanceWireframeClippingByUserId(a);for(var a in this.filteredIds){var s=this.filteredIds[a];if(s[t.HIDDEN])this._updateInstanceMaterialByUserId(e,a,r.EnumInstanceState.HIDDEN),this._updateInstanceMaterialForWireFrameByUserId(e,a,r.EnumInstanceState.HIDDEN);else if(s[t.TRANSPARENT])this._updateInstanceMaterialByUserId(e,a,r.EnumInstanceState.TRANSPARENT);else{if(e.manager.isSelectPriority()){if(s[t.SELECTED]){r.GlobalData.PickingEffect?s[t.OVERRIDED]&&this._updateInstanceMaterialByUserId(e,a,r.EnumInstanceState.OVERRIDED,s[t.OVERRIDED]):this._updateInstanceMaterialByUserId(e,a,r.EnumInstanceState.SELECTED);continue}if(s[t.BLINK]){s[t.OVERRIDED]?this._updateInstanceMaterialByUserId(e,a,r.EnumInstanceState.BLINK,s[t.OVERRIDED]):this._updateInstanceMaterialByUserId(e,a,r.EnumInstanceState.BLINK);continue}}else{if(s[t.BLINK]){s[t.OVERRIDED]?this._updateInstanceMaterialByUserId(e,a,r.EnumInstanceState.BLINK,s[t.OVERRIDED]):this._updateInstanceMaterialByUserId(e,a,r.EnumInstanceState.BLINK);continue}if(s[t.SELECTED]){r.GlobalData.PickingEffect?s[t.OVERRIDED]&&this._updateInstanceMaterialByUserId(e,a,r.EnumInstanceState.OVERRIDED,s[t.OVERRIDED]):this._updateInstanceMaterialByUserId(e,a,r.EnumInstanceState.SELECTED);continue}}s[t.HOVER]?s[t.OVERRIDED]?this._updateInstanceMaterialByUserId(e,a,r.EnumInstanceState.HOVER,s[t.OVERRIDED]):this._updateInstanceMaterialByUserId(e,a,r.EnumInstanceState.HOVER):s[t.OVERRIDED]&&this._updateInstanceMaterialByUserId(e,a,r.EnumInstanceState.OVERRIDED,s[t.OVERRIDED])}}this._updateInstanceMaterialForWireFrame(e),r.Logger.timeEnd("update instance material")}_updateInstanceMaterialForWireFrame(e){var t=this.mapFilteredUserIdsForWireFrame;if(t)for(var i=Object.keys(t),n=0,a=i.length;n<a;n++){var s=i[n];this.filteredIds&&this.filteredIds[s]&&this.filteredIds[s][r.Model.EnumFilterState.HIDDEN]||this._updateInstanceMaterialForWireFrameByUserId(e,s,r.EnumInstanceState.OVERRIDED,t[s])}}_resetInstanceMaterial(e,t){this.meshManager.resetInstanceMaterial(e),this.wireframeManager.resetInstanceMaterial(t)}_collectFilteredUserIds(e,t,i){var n=e.getFilter(),a=n._hasHiddenFileIdFilter(),s=n._hasVisibleFilter(),o=n._hasOverrideMaterialFilter(),l=n._hasTransparentFilter(),d=e.hasReplacedUserId(),h=e.hasHiddenSourceObjectUserId(),c=this.filteredIds={};if(a||s||o||l||d||h)for(var u=r.Model.EnumFilterState,p=0;p<t.length;++p){var m=t[p],f=i[m];if(f&&f.length){var g=f[0];if(a&&n._isHiddenFileId(g)||s&&!1===n._isVisible(g)||e.isReplacedUserId(m)||e.isHiddenSourceObjectUserId(m))c[m]||(c[m]={}),c[m][u.HIDDEN]=!0;else if(l&&n._isTransparent(g))c[m]||(c[m]={}),c[m][u.TRANSPARENT]=!0;else if(o&&n._hasOverrideMaterial(g)){var v=n._getOverrideMaterial(g),y=null!=v?v.name:"";""!==y&&(c[m]||(c[m]={}),c[m][u.OVERRIDED]=y)}}}}_collectFilteredUserIdsForWireFrame(e,t,i){var n=e.getFilter(),a=n._hasOverrideMaterialFilterForWireFrame();if(this.mapFilteredUserIdsForWireFrame={},a)for(var s=r.Model.EnumFilterState,o=0;o<t.length;++o){var l=t[o];if(!(this.filteredIds&&this.filteredIds[l]&&this.filteredIds[l][s.HIDDEN])){var d=i[l];if(d&&d.length){var h=d[0];if(n._hasOverrideMaterialForWireFrame(h)){var c=n._getOverrideMaterialForWireFrame(h),u=null!=c?c.name:"";""!==u&&(this.mapFilteredUserIdsForWireFrame[l]=u)}}}}}_collectSelectedUserIds(e,t){var i=this.filteredIds=this.filteredIds||{},n=r.Model.EnumFilterState,a={};for(var s in e)t[s]&&(i[s]||(i[s]={}),i[s][n.SELECTED]=!0,a[s]=!0);this.selectedUserIds=Object.keys(a)}_clearSelectedState(e){if(this.filteredIds&&this.selectedUserIds&&this.selectedUserIds.length){for(var t=0,i=this.selectedUserIds.length;t<i;t++){var n=this.selectedUserIds[t];this.filteredIds[n]&&(this.meshManager.clearInstanceStateByUserId(n),delete this.filteredIds[n][r.Model.EnumFilterState.SELECTED])}this.selectedUserIds=null}}_collectHoveredUserIds(e,t){var i=this.filteredIds=this.filteredIds||{};this.hoverdUserId=void 0,e&&t[e]&&(i[e]||(i[e]={}),i[e][r.Model.EnumFilterState.HOVER]=!0,this.hoverdUserId=e)}_clearHoveredState(e){this.filteredIds&&this.hoverdUserId&&this.filteredIds[this.hoverdUserId]&&(this.meshManager.clearInstanceStateByUserId(this.hoverdUserId),delete this.filteredIds[this.hoverdUserId][r.Model.EnumFilterState.HOVER],this.hoverdUserId=void 0)}_collectBlinkedUserIds(e,t){var i=this.filteredIds=this.filteredIds||{},n=r.Model.EnumFilterState,a={};for(var s in e)t[s]&&(i[s]||(i[s]={}),i[s][n.BLINK]=!0,a[s]=!0);this.blinkUserIds=Object.keys(a)}_clearBlinkedState(e){if(this.filteredIds&&this.blinkUserIds&&this.blinkUserIds.length){for(var t=0,i=this.blinkUserIds.length;t<i;t++){var n=this.blinkUserIds[t];this.filteredIds[n]&&(this.meshManager.clearInstanceStateByUserId(n),delete this.filteredIds[n][r.Model.EnumFilterState.BLINK])}this.blinkUserIds=null}}applyFilter(e,t){if(this.hasNodeInfo(e)){var i;this.updateNodes(e),this._resetInstanceMaterial(e.isAllMaterialChanged?e.materialManager.instanceMaterials:null,e),e.isAllMaterialChanged=!1,i=t||e.getModelDescriptor().getInstancedUserIds();var r=e.getModelDescriptor().getInstancedNodeInfos();this._collectFilteredUserIds(e,i,r),this._collectFilteredUserIdsForWireFrame(e,i,r),this._collectSelectedUserIds(e.manager.sceneState.selectionSet,r),this._collectBlinkedUserIds(e.manager.sceneState.getBlinkComponentsIdMap(e.id),r),this._collectHoveredUserIds(e.manager.sceneState.hoverId,r),this._updateInstanceMaterial(e)}}applySelection(e){if(this.hasNodeInfo(e)){var t=e.getModelDescriptor().getInstancedNodeInfos();this._clearSelectedState(e),this._clearHoveredState(e),this._collectSelectedUserIds(e.manager.sceneState.selectionSet,t),this._collectHoveredUserIds(e.manager.sceneState.hoverId,t),this._updateInstanceMaterial(e),this.updateNodes(e)}}clearSelection(e){this._clearSelectedState(e),this.applyHover(e)}applyHover(e){if(this.hasNodeInfo(e)){var t=e.getModelDescriptor().getInstancedNodeInfos();this._clearHoveredState(e),this._collectHoveredUserIds(e.manager.sceneState.hoverId,t),this._updateInstanceMaterial(e),this.updateNodes(e)}}clearHover(e){this._clearHoveredState(e),this._updateInstanceMaterial(e),this.updateNodes(e)}applyBlink(e){if(this.hasNodeInfo(e)){var t=e.getModelDescriptor().getInstancedNodeInfos();this._clearBlinkedState(e),this._clearHoveredState(e),this._collectBlinkedUserIds(e.manager.sceneState.getBlinkComponentsIdMap(e.id),t),this._collectHoveredUserIds(e.manager.sceneState.hoverId,t),this._updateInstanceMaterial(e),this.updateNodes(e)}}clearBlink(e){this._clearBlinkedState(e),this.applyHover(e)}applyReplacement(e){this._updateInstanceMaterial(e),this.updateNodes(e)}hasNodeInfo(e){return!!e.getModelDescriptor().getInstancedNodeInfos()}updateNodes(e){this.hasNodeInfo(e)&&(this.meshManager.updateNodes(e),this.wireframeManager.updateNodes(e))}generateWireframe(e,t){this.wireframeManager.generateWireframe(e,t)}createMeshNodes(e,t){this.meshManager.createMeshNodes(e,t)}asyncCreateMeshNodes(e,t,i){this.meshManager.asyncCreateMeshNodes(e,t,i)}clearCachedData(){}getMeshesByUserIds(e,t,i){this.meshManager.getMeshesByUserIds(e,t,i)}clearSelectedObjectIds(){this.meshManager.clearSelectedObjectIds()}adjustVisibility(e,t){this.meshManager.adjustVisibility(e,t),this.wireframeManager.adjustVisibility(e,t)}changeVisibilityOfSelectedObjects(e,t){this.meshManager.changeVisibilityOfSelectedObjects(e,t),this.wireframeManager.changeVisibilityOfSelectedObjects(e,t)}changeVisibilityOfNonSelectedObjects(e,t){this.meshManager.changeVisibilityOfNonSelectedObjects(e,t),this.wireframeManager.changeVisibilityOfNonSelectedObjects(e,t)}restoreVisibilityOfObjects(){this.meshManager.restoreVisibilityOfObjects(),this.wireframeManager.restoreVisibilityOfObjects()}disposeBufferAfterVbo(){this.meshManager.disposeBufferAfterVbo(),this.wireframeManager.disposeBufferAfterVbo()}addAllInstanceNodeToScene(e){this.meshManager.addAllInstanceNodeToScene(e)}getGeometryBuffersByUserId(e,t){return this.meshManager.getGeometryBuffersByUserId(e,t)}explode(e){this.meshManager.explode(e)}calculateClippingIds(e,t,i){this.meshManager.calculateClippingIds(e,t,i)}calculateClippingContours(e,t,i,r,n,a){this.meshManager.calculateClippingContours(e,t,i,r,n,a)}isPickableNode(e){if(!this.filteredIds||!this.filteredIds[e])return!0;var t=this.filteredIds[e],i=r.Model.EnumFilterState;return!t[i.HIDDEN]&&!t[i.TRANSPARENT]}isHiddenNode(e){return!!(this.filteredIds&&this.filteredIds[e]&&this.filteredIds[e][r.Model.EnumFilterState.HIDDEN])}getMeshManager(){return this.meshManager}getWireFrameManager(){return this.wireframeManager}},function(){function e(e,t,i){e.forEach((e=>{!function(e,t,i){const r=e.getAttribute("vState").array;for(let e=0,n=t.length;e<n;++e)r[t[e]]=i;e.getAttribute("vState").needsUpdate=!0}(e.geometry,t,i)}))}function t(e,t,i,r){e.forEach((e=>{!function(e,t,i,r){const n=e.getAttribute("vState").array,a=e.getAttribute("aColor"),s=a?a.array:null;for(let e=0,a=t.length;e<a;++e){const a=t[e];n[a]=i,null!==s&&null!==r&&(s[4*a]=r[0],s[4*a+1]=r[1],s[4*a+2]=r[2],s[4*a+3]=r[3])}e.getAttribute("vState").needsUpdate=!0,a&&(a.needsUpdate=!0)}(e.geometry,t,i,r)}))}function i(e,t,i){e.forEach((e=>{const r=e.geometry.getAttribute("vState");if(r.array.fill(t),r.needsUpdate=!0,i){var n=i[e.material.name];e.material=e.material.transparent?n[1]:n[0]}}))}class n extends r.ModelView.MeshBaseManager{constructor(e){super(),this.manager=e,this.instanceGeometryMap={},this.bufferAttributeMap={},this.instanceNodeMap={},this.nodeIdxMapFromUserId={},this.matrixInfoMapFromUserId={},this.cachedInstance={vState:{},vClipping:{},vColor:{},mcol0:{},mcol1:{},mcol2:{},mcol3:{},muvCol0:{},muvCol1:{},muvCol2:{},uv2OffsetRepeat:{},uv2:{}},this.selectedMeshes=[],this.nonSelectedMeshes=[],this.selectedObjectIds=[],this.meshesVisible=!0}destroy(){if(super.destroy(),this.cachedInstance=null,this.instanceNodeMap=null,this.bufferAttributeMap=null,this.nodeIdxMapFromUserId=null,this.matrixInfoMapFromUserId=null,this.disposeInstanceGeometries(),this.instanceGeometryMap=null,this.manager=null,this.selectedMeshes=null,this.nonSelectedMeshes=null,this.selectedObjectIds=null,this.pickingNodeGenerators){for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].destroy();this.pickingNodeGenerators=null}}clearData(){if(this.bufferDestroyed=!1,this.disposeGeometries(),this.disposeInstanceGeometries(),this.clearInstanceCache(),this.pickingNodeGenerators)for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].clearData()}clearInstanceCache(){this.cachedInstance.vState={},this.cachedInstance.vClipping={},this.cachedInstance.vColor={},this.cachedInstance.mcol0={},this.cachedInstance.mcol1={},this.cachedInstance.mcol2={},this.cachedInstance.mcol3={},this.cachedInstance.muvCol0={},this.cachedInstance.muvCol1={},this.cachedInstance.muvCol2={},this.cachedInstance.uv2OffsetRepeat={},this.cachedInstance.uv2={},this.bufferAttributeMap={},this.nodeIdxMapFromUserId={},this.instanceNodeMap={},this.instanceGeometryMap={},this.matrixInfoMapFromUserId={},this.geometries={}}updateNodes(e){this.meshesVisible=!e.isOnlyWireframe();const t=this._getNodeGroup(e);this.meshesVisible?t._adjustActivated||(t.visible=!0):t.visible=!1}createMeshNodes(e,t){this._collectSharedMeshBufferIds(e),this._createInstanceGeometries(e,t),this._makeInstanceNodes(e)}asyncCreateMeshNodes(e,t,i){if(0===t.length)return void(i&&i());const n=this,a=r.GlobalData.InstanceAsyncProcessingStep;this._collectSharedMeshBufferIds(e),r.Utils.asyncProcess(t,t.length,a,(function(t,i){n._createInstanceGeometries(e,[t[i]])}),(function(){n._makeInstanceNodes(e),i&&i()}))}_createInstanceGeometries(e,t){var i=this;e.getModelDescriptor().traverseInstancedNodeInfos(t,(function(t,r){for(var n=0,a=r.length;n<a;n++){var s=r[n],o=i.getGeometryByNodeInfo(e,s);if(o){var l=e.manager.getOverrideMaterialByNodeInfo(s,e.materialManager.getMaterialById(s.materialId));if(l&&(s.materialId=l.name),e.lightmap&&void 0===s.uv2Info){var d=e.getLoader().getInstanceUV2InfoById(s.itemIdUV2);s.uv2Info=d,s.materialId=s.uv2Info?s.materialId+"_"+s.uv2Info.lightmapIdx:s.materialId}var h=i.getMeshIdByNodeInfo(s),c=i.cacheInstanceAttributeStateBy(e,h,o,s,l);i.cacheNodeIdxByUserId(s.userId,h,c),i.cacheMatrixInfoByUserId(s.userId,h,{matrix:s.matrix,boundingBox:s.boundingBox}),i.cacheInstanceGeometries(h,o,s.uv2Info,e)}}}))}getBufferAttributesBy(e){if(this.bufferAttributeMap[e])return this.bufferAttributeMap[e];var t=this.cachedInstance,i=new THREE.InstancedBufferAttribute(new Float32Array(t.mcol0[e]),3,!1,1),r=new THREE.InstancedBufferAttribute(new Float32Array(t.mcol1[e]),3,!1,1),n=new THREE.InstancedBufferAttribute(new Float32Array(t.mcol2[e]),3,!1,1),a=new THREE.InstancedBufferAttribute(new Float32Array(t.mcol3[e]),3,!1,1),s=[],o=[],l=[];if(t.muvCol0[e])for(var d=0,h=t.muvCol0[e].length;d<h;d++)s.push(new THREE.InstancedBufferAttribute(new Float32Array(t.muvCol0[e][d]),2,!1,1)),o.push(new THREE.InstancedBufferAttribute(new Float32Array(t.muvCol1[e][d]),2,!1,1)),l.push(new THREE.InstancedBufferAttribute(new Float32Array(t.muvCol2[e][d]),2,!1,1));var c=new THREE.InstancedBufferAttribute(new Float32Array(t.uv2OffsetRepeat[e]),4,!1,1);new THREE.BufferAttribute(t.uv2[e],2);return this.bufferAttributeMap[e]={attributeMcol0:i,attributeMcol1:r,attributeMcol2:n,attributeMcol3:a,attributeMuvCol0Array:s,attributeMuvCol1Array:o,attributeMuvCol2Array:l,attributeUv2OffsetRepeat:c},this.bufferAttributeMap[e]}_addInstanceNodeToScene(e,t,i){this._getNodeGroup(e).add(i),i.updateMatrixWorld(!0),e.manager.addMeshToOctantMap(e.getEncodedDatabagId(),t,new r.InstancedCapsuleObject(t,i))}addAllInstanceNodeToScene(e){const t=e.getEncodedDatabagId();this.traverseInstanceNodeMap(null,(function(i,n){const a=n[0],s=n[1];let o,l;for(o=0,l=a.length;o<l;++o)e.manager.addMeshToOctantMap(t,i,new r.InstancedCapsuleObject(i,a[o]));for(o=0,l=s.length;o<l;++o)e.manager.addMeshToOctantMap(t,i,new r.InstancedCapsuleObject(i,s[o]))}))}_getMeshFrom(e,t,i,n,a,s,o){i.setAttribute("mcol0",o.attributeMcol0),i.setAttribute("mcol1",o.attributeMcol1),i.setAttribute("mcol2",o.attributeMcol2),i.setAttribute("mcol3",o.attributeMcol3),o.attributeMuvCol0Array.length>0&&(i.setAttribute("muvCol0",o.attributeMuvCol0Array[n]),i.setAttribute("muvCol1",o.attributeMuvCol1Array[n]),i.setAttribute("muvCol2",o.attributeMuvCol2Array[n])),e.lightmap&&i.setAttribute("uv2OffsetRepeat",o.attributeUv2OffsetRepeat),i.setAttribute("aColor",new THREE.InstancedBufferAttribute(new Float32Array(s.vColor[t]),4,!1,1)),i.setAttribute("vState",new THREE.InstancedBufferAttribute(new Float32Array(s.vState[t]),1,!1,1)),i.setAttribute("vClipping",new THREE.InstancedBufferAttribute(new Float32Array(s.vClipping[t]),1,!1,1));i.getAttribute("vClipping").array.fill(e.localClippingMode?r.EnumInstanceState.CLIPPING:r.EnumInstanceState.NONE);const l=new r.MeshEx(i,a);return l.databagId=e.databagId,l.fileId=e.fileId,l.frustumCulled=!1,r.GlobalData.EnableShadowMap&&(l.customDepthMaterial=e.manager.getInstanceDepthMaterial(),l.castShadow=e.castShadow,l.receiveShadow=e.receiveShadow),l}_cloneMeshFrom(e,t){const i=e.geometry,n=new THREE.InstancedBufferGeometry;n.setAttribute("position",i.getAttribute("position")),n.setAttribute("normal",i.getAttribute("normal")),i.getAttribute("uv")&&n.setAttribute("uv",i.getAttribute("uv")),i.getAttribute("uv2")&&n.setAttribute("uv2",i.getAttribute("uv2")),n.setAttribute("mcol0",i.getAttribute("mcol0")),n.setAttribute("mcol1",i.getAttribute("mcol1")),n.setAttribute("mcol2",i.getAttribute("mcol2")),n.setAttribute("mcol3",i.getAttribute("mcol3")),n.setAttribute("mcol0",i.getAttribute("mcol0")),n.setAttribute("mcol1",i.getAttribute("mcol1")),n.setAttribute("mcol2",i.getAttribute("mcol2")),n.setAttribute("mcol3",i.getAttribute("mcol3")),i.getAttribute("muvCol0")&&(n.setAttribute("muvCol0",i.getAttribute("muvCol0")),n.setAttribute("muvCol1",i.getAttribute("muvCol1")),n.setAttribute("muvCol2",i.getAttribute("muvCol2"))),i.getAttribute("uv2OffsetRepeat")&&n.setAttribute("uv2OffsetRepeat",i.getAttribute("uv2OffsetRepeat")),n.setAttribute("aColor",i.getAttribute("aColor")),n.setAttribute("vClipping",i.getAttribute("vClipping")),n.setAttribute("vState",i.getAttribute("vState").clone()),n.setIndex(i.getIndex());const a=new r.MeshEx(n,t);return a.databagId=e.databagId,a.fileId=e.fileId,a.frustumCulled=e.frustumCulled,e.customDepthMaterial&&(a.customDepthMaterial=e.customDepthMaterial,a.castShadow=e.castShadow,a.receiveShadow=e.receiveShadow),a}_makeInstanceNodeById(e,t,n){const a=e.materialManager,s=this.getMaterialIdByMeshId(t),o=a.getInstanceMaterialById(s,e);if(2!==o.length)return void console.log("instance material error!");const l=this.cachedInstance,d=this.getBufferAttributesBy(t),h=o[0],c=o[1],u=[],p=[];let m,f=n.length;for(m=0;m<f;m++){const i=this._getMeshFrom(e,t,n[m],m,h,l,d);u.push(i),this._addInstanceNodeToScene(e,t,i)}for(m=0;m<f;m++){const i=this._cloneMeshFrom(u[m],c);p.push(i),this._addInstanceNodeToScene(e,t,i)}const g=h._primary,v=r.EnumInstanceState.NONE,y=r.EnumInstanceState.HIDDEN;i(u,g?v:y),i(p,g?y:v),this.instanceNodeMap[t]=[u,p]}_makeInstanceNodes(e){var t=this;this.traverseInstanceGeometryMap((function(i,r){t._makeInstanceNodeById(e,i,r)}))}resetInstanceMaterial(e){const t=r.EnumInstanceState.NONE,n=r.EnumInstanceState.HIDDEN;this.traverseInstanceNodeMap(null,(function(r,a){const s=a[0],o=a[1],l=!!s[0].material._primary;i(s,l?t:n,e),i(o,l?n:t,e)}))}clearInstanceStateByUserId(t){const i=this,n=r.EnumInstanceState.NONE,a=r.EnumInstanceState.HIDDEN;this.traverseNodeIdxMapByUserId(t,(function(t,r){const s=i.getInstanceNodesById(t),o=s[0],l=s[1],d=!!o[0].material._primary;e(o,r,d?n:a),e(l,r,d?a:n)}))}updateInstanceStateByUserId(i,n,a,s){const o=i.materialManager,l=this;this.traverseNodeIdxMapByUserId(n,(function(d,h){const c=l.getInstanceNodesById(d);if(!c)return;const u=c[0],p=c[1],m=l.getMaterialIdByMeshId(d),f=o.getInstanceMaterialById(m,i),g=f[0],v=f[1],y=!!g._primary,M=l.getOriginalMaterialIdByMeshId(d),E=l.getUsableMaterialColorParamsBy(i,M,a,s),b=E.rgbaColor;let x=a,I=r.EnumInstanceState.HIDDEN;if(a===r.EnumInstanceState.TRANSPARENT&&(x=r.EnumInstanceState.OVERRIDED),a===r.EnumInstanceState.SELECTED&&l.cacheSelectedObjectIds(n,d),x===r.EnumInstanceState.BLINK){const e=i.manager.blinkManager.getBlinkColor(i.id);if(Object.keys(i.getModelManager().sceneState.blinkComponentIdsDetailMap).length>0){const e=i.getModelManager().sceneState.getBlinkComponentsColor(i.id,n);let t=t=>{let i=t.geometry.getAttribute("bColor");t.geometry.getAttribute("bColor")||(i=t.geometry.attributes.aColor.clone(),t.geometry.setAttribute("bColor",i));for(let t=0,r=h.length;t<r;++t){const r=h[t];i.array[4*r]=e.x,i.array[4*r+1]=e.y,i.array[4*r+2]=e.z,i.array[4*r+3]=e.w}t.geometry.getAttribute("bColor").needsUpdate=!0};u.map((e=>{t(e)})),p.map((e=>{t(e)})),g.useMultiBlinkColor=!0,v.useMultiBlinkColor=!0}else g.setBlinkColor(e),v.setBlinkColor(e)}if(x===r.EnumInstanceState.OVERRIDED&&(v.isOverrideOpacity=E.transparent),y){const i=g.transparent===E.transparent;t(u,h,i?x:I,b),e(p,h,i?I:x)}else{const i=v.transparent===E.transparent;t(p,h,i?x:I,b),e(u,h,i?I:x)}}))}updateInstanceClippingByUserId(e){function t(e,t){for(var i=e.getAttribute("vClipping").array,n=0;n<t.length;++n){i[t[n]]=r.EnumInstanceState.CLIPPING}e.getAttribute("vClipping").needsUpdate=!0}var i=this;this.traverseNodeIdxMapByUserId(e,(function(e,r){var n=i.getInstanceGeometries(e);if(n)for(var a=0,s=n.length;a<s;a++)t(n[a],r)}))}updateInstanceClipping(e){var t=this,i=e?r.EnumInstanceState.CLIPPING:r.EnumInstanceState.NONE;this.traverseNodeIdxMap((function(e,r){var n=t.getInstanceNodesById(e),a=n[0],s=n[1];a.forEach((e=>{const t=e.geometry.getAttribute("vClipping").array;for(let e=0,n=r.length;e<n;++e)t[r[e]]=i;e.geometry.getAttribute("vClipping").needsUpdate=!0})),s.forEach((e=>{const t=e.geometry.getAttribute("vClipping").array;for(let e=0,n=r.length;e<n;++e)t[r[e]]=i;e.geometry.getAttribute("vClipping").needsUpdate=!0}))}))}getUsableMaterialColorParamsBy(e,t,i,n){var a,s,o=e.selectedMaterial,l=e.getFilter()._getMaterialByName("scene"),d=e.materialManager,h=e.manager.getOverrideMaterialByName(t)||d.getMaterialById(t);switch(i){case r.EnumInstanceState.HOVER:n?(a=e.getFilter()._getMaterialByName(n),s=e.manager.sceneState.getHoverColorByMaterial(a)):s=e.manager.sceneState.getHoverColorByMaterial(h);break;case r.EnumInstanceState.SELECTED:s=r.MaterialUtil.getColorParamsByMaterial(o);break;case r.EnumInstanceState.TRANSPARENT:s=r.MaterialUtil.getColorParamsByMaterial(l);break;case r.EnumInstanceState.OVERRIDED:case r.EnumInstanceState.BLINK:n?(a=e.getFilter()._getMaterialByName(n),s=r.MaterialUtil.getColorParamsByMaterial(a)):s=r.MaterialUtil.getColorParamsByMaterial(h);break;default:s=r.MaterialUtil.getColorParamsByMaterial(h)}return s}getInstanceNodesById(e){return this.instanceNodeMap[e]}traverseInstanceNodeMap(e,t){for(var i=this.instanceNodeMap,r=0,n=(e=e||Object.keys(this.instanceNodeMap)).length;r<n;r++){var a=e[r];t(a,i[a])}}getInstanceGeometries(e){return this.instanceGeometryMap[e]}cacheInstanceGeometries(e,t,i,r){if(!this.instanceGeometryMap[e]){var n=this.instanceGeometryMap[e]=[];t instanceof Array||(t=[t]);for(var a=i?i.byteOffset:0,s=0,o=t.length;s<o;++s)if(n[s]=new THREE.InstancedBufferGeometry,n[s].setIndex(t[s].index),n[s].setAttribute("position",t[s].attributes.position),n[s].setAttribute("normal",t[s].attributes.normal),t[s].attributes.uv&&n[s].setAttribute("uv",t[s].attributes.uv),t[s].attributes.uv2)n[s].setAttribute("uv2",t[s].attributes.uv2);else if(i){var l=2*t[s].index.count,d=r.getLoader().getInstanceUV2ById(a,l);n[s].setAttribute("uv2",new THREE.Float32BufferAttribute(d,2)),a+=2*l}}}traverseInstanceGeometryMap(e){var t=this.instanceGeometryMap;for(var i in t)e(i,t[i])}disposeInstanceGeometries(){this.traverseInstanceGeometryMap((function(e,t){for(var i=0,r=t.length;i<r;i++)t[i].dispose()}))}cacheInstanceAttributeStateBy(e,t,i,n,a){var s=n.uv2Info?r.Utils.splitCombinedKeyString(n.materialId,"_")[0]:n.materialId,o=n.uvArrayBuffer;i instanceof Array||(i=[i]);var l=i.length,d=this.cachedInstance;if(!d.vState[t]){d.vState[t]=[],d.vClipping[t]=[],d.vColor[t]=[],d.mcol0[t]=[],d.mcol1[t]=[],d.mcol2[t]=[],d.mcol3[t]=[],d.muvCol0[t]=[],d.muvCol1[t]=[],d.muvCol2[t]=[];for(var h=0;h<l;++h)d.muvCol0[t][h]=[],d.muvCol1[t][h]=[],d.muvCol2[t][h]=[];n.uv2Info&&(d.uv2OffsetRepeat[t]=[])}var c=a||e.materialManager.getMaterialById(s);d.vColor[t].push(c.color.r,c.color.g,c.color.b,c.opacity),d.vState[t].push(0),d.vClipping[t].push(0);var u=n.matrix.elements;if(d.mcol0[t].push(u[0],u[1],u[2]),d.mcol1[t].push(u[4],u[5],u[6]),d.mcol2[t].push(u[8],u[9],u[10]),d.mcol3[t].push(u[12],u[13],u[14]),n.uv2Info){var p=n.uv2Info.offsetRepeat;d.uv2OffsetRepeat[t].push(p[0],p[1],p[2],p[3])}if(o)for(h=0;h<l;++h)d.muvCol0[t][h].push(o[6*h],o[6*h+1]),d.muvCol1[t][h].push(o[6*h+2],o[6*h+3]),d.muvCol2[t][h].push(o[6*h+4],o[6*h+5]);else for(h=0;h<l;++h)d.muvCol0[t][h].push(1,0),d.muvCol1[t][h].push(0,1),d.muvCol2[t][h].push(0,0);return d.vState[t].length-1}cacheNodeIdxByUserId(e,t,i){var r=this.nodeIdxMapFromUserId;r[e]||(r[e]={}),r[e][t]||(r[e][t]=[]),r[e][t].push(i)}getNodeIdxMapByUserId(e){return this.nodeIdxMapFromUserId[e]}traverseNodeIdxMapByUserId(e,t){var i=this.nodeIdxMapFromUserId[e];for(var r in i)t(r,i[r])}traverseNodeIdxMap(e,t){for(var i=Object.keys(this.nodeIdxMapFromUserId),r=0,n=i.length;r<n;r++){var a=i[r],s=this.nodeIdxMapFromUserId[a];if(!t||!t(a))for(var o in s)e(o,s[o])}}cacheMatrixInfoByUserId(e,t,i){var r=this.matrixInfoMapFromUserId;r[e]||(r[e]={}),r[e][t]||(r[e][t]=[]),r[e][t].push(i)}traverseMatrixInfoMapByUserId(e,t){var i=this.matrixInfoMapFromUserId[e];for(var r in i)t(r,i[r])}getMeshesByUserId(e,t){const i=this,r=e.getLengthUnitsMatrix();this.traverseMatrixInfoMapByUserId(t,(function(n,a){const s=i.getInstanceNodesById(n)[0];for(let i=0,n=a.length;i<n;i++)for(let n=0,o=s.length;n<o;n++){const l=a[i].matrix,d=s[n];let h;1===o?h=a[i].boundingBox:(h=d.geometry.boundingBox,h?h=h.clone():(d.geometry.computeBoundingBox(),h=d.geometry.boundingBox.clone()),h.applyMatrix4(l)),e.minDistanceObjects[t].push({mesh:s[n],matrix:l,unitsMatrix:r,boundingBox:h})}}))}_getNodeGroup(e){return e._getNodeGroup(r.ObjectGroupType.INSTANCEGEOMETRY,{globalSpace:!0})}_hasNodeGroup(e){return e._hasNodeGroup(r.ObjectGroupType.INSTANCEGEOMETRY)}clearSelectedObjectIds(){this.selectedObjectIds.length=0}cacheSelectedObjectIds(e,t){this.selectedObjectIds.push({uid:e,mgId:t})}adjustVisibility(e,t){if(!this.meshesVisible)return;const i=this._getNodeGroup(e);i._adjustActivated=!t,i.visible!==t&&(i.visible=t)}changeVisibilityOfSelectedObjects(e,t){function i(e,t){for(let i=0,n=e.length;i<n;i++){const n=e[i],a=[],s=n.geometry.getAttribute("vState").array;for(let e=0,t=s.length;e<t;e++)s[e]===r.EnumInstanceState.SELECTED&&(a.push({idx:e,state:s[e]}),s[e]=r.EnumInstanceState.HIDDEN);a.length?(n.geometry.getAttribute("vState").needsUpdate=!0,t.push({object:n,indices:a})):(t.push({object:n,indices:null,visibility:n.visible}),n.visible=!1)}}let n;if(t){n=this.selectedMeshes;for(let e=0,t=n.length;e<t;e++){const t=n[e].object,i=n[e].indices;if(i){if(i.length){const e=t.geometry.getAttribute("vState").array;for(var a=0,s=i.length;a<s;a++)i[a].state&&(e[i[a].idx]=i[a].state);t.geometry.getAttribute("vState").needsUpdate=!0}}else t.visible=n[e].visibility}}else{this.selectedMeshes.length=0,n=this.selectedMeshes;let e={};for(var o=0,l=this.selectedObjectIds.length;o<l;o++)e[this.selectedObjectIds[o].mgId]=!0;const t=Object.keys(e);this.traverseInstanceNodeMap(t,(function(e,t){const r=t[0],a=t[1];i(r,n),i(a,n)}))}}changeVisibilityOfNonSelectedObjects(e,t){function i(e,t,i){if(i)for(let i=0,n=e.length;i<n;i++){const n=e[i],a=[],s=n.geometry.getAttribute("vState").array;for(let e=0,t=s.length;e<t;e++)s[e]!==r.EnumInstanceState.SELECTED&&s[e]!==r.EnumInstanceState.HIDDEN&&(a.push({idx:e,state:s[e]}),s[e]=r.EnumInstanceState.HIDDEN);a.length?(n.geometry.getAttribute("vState").needsUpdate=!0,t.push({object:n,indices:a})):(t.push({object:n,indices:null,visibility:n.visible}),n.visible=!1)}else for(let i=0,r=e.length;i<r;i++){var n=e[i];t.push({object:n,indices:null,visibility:n.visible}),n.visible=!1}}let n;if(t){n=this.nonSelectedMeshes;for(let e=0,t=n.length;e<t;e++){const t=n[e].object,i=n[e].indices;if(i){if(i.length){const e=t.geometry.getAttribute("vState").array;for(let t=0,r=i.length;t<r;t++)i[t].state&&(e[i[t].idx]=i[t].state);t.geometry.getAttribute("vState").needsUpdate=!0}}else t.visible=n[e].visibility}}else{this.nonSelectedMeshes.length=0,n=this.nonSelectedMeshes;let e={};for(var a=0,s=this.selectedObjectIds.length;a<s;a++)e[this.selectedObjectIds[a].mgId]=!0;this.traverseInstanceNodeMap(null,(function(t,r){const a=r[0],s=r[1],o=e[t];i(a,n,o),i(s,n,o)}))}}restoreVisibilityOfObjects(){this.selectedMeshes.length=0,this.nonSelectedMeshes.length=0}getMeshIdByNodeInfo(e){return e.uv2Info?r.Utils.getCombinedKeyString([e.materialId,e.geometryIdCode,e.uv2Info.byteOffset]):r.Utils.getCombinedKeyString([e.materialId,e.geometryIdCode])}getMaterialIdByMeshId(e){return r.Utils.splitCombinedKeyString(e)[0]}getOriginalMaterialIdByMeshId(e){var t=r.Utils.splitCombinedKeyString(e);return r.Utils.splitCombinedKeyString(t[0],"_")[0]}disposeBufferAfterVbo(){var e;this.bufferDestroyed||(this.bufferDestroyed=!0,r.GlobalData.PickingEffect?e=["muvCol0","muvCol1","muvCol2","uv2OffsetRepeat"]:(e=["muvCol0","muvCol1","muvCol2","uv2OffsetRepeat","mcol0","mcol1","mcol2","mcol3"],r.GlobalData.EnableExplosion&&e.pop()),this.traverseInstanceGeometryMap((function(t,i){for(var n=0,a=i.length;n<a;n++)r.GeomUtil.disposeBufferFromGeometry(i[n],e)})))}getGeometryBuffersByUserId(e,t){var i=e.getModelDescriptor().getInstancedNodeInfosById(t);if(!i)return[];for(var n=[],a=e.getDatabagId(),s=r.ModelView.BaseDescriptor.EnumNodeItemType,o=0,l=i.length;o<l;o++){var d,h=i[o];switch(h.type){case s.BOX_M:d=r.GeomUtil.getBoxBufferGeometryWithUvMatrices(h.uvArrayBuffer);break;case s.PIPE_M:d=r.GeomUtil.getPipeBufferGeometryWithUvMatrices(h.uvArrayBuffer);break;default:d=this.getGeometryByNodeInfo(e,h)}var c=r.ModelView.BaseDescriptor.isLineNode(h);if(d instanceof Array)for(var u=0,p=d.length;u<p;u++){var m=d[u].getAttribute("uv");n.push({isLines:c,databagId:a,nodeId:h.nodeId,position:d[u].getAttribute("position").array,index:d[u].getIndex().array,matrix:h.matrix,uv:m?m.array:null})}else{m=d.getAttribute("uv");n.push({isLines:c,databagId:a,nodeId:h.nodeId,position:d.getAttribute("position").array,index:d.getIndex().array,matrix:h.matrix,uv:m?m.array:null})}}return n}explode(e){function t(e,t,i){for(var r=e.getAttribute("mcol3").array,n=0;n<t.length;++n){var a=t[n];r[3*a]+=i.x,r[3*a+1]+=i.y,r[3*a+2]+=i.z}e.getAttribute("mcol3").needsUpdate=!0}var i=this;for(var r in i.nodeIdxMapFromUserId)i.traverseNodeIdxMapByUserId(r,(function(n,a){var s=e.modelExplosion.getExplosionTranslation(r),o=i.getInstanceGeometries(n);o&&t(o[0],a,s)}))}getPickingNodeGenerator(e){return e=null==e?"pick":e,this.pickingNodeGenerators||(this.pickingNodeGenerators={}),this.pickingNodeGenerators[e]||(this.pickingNodeGenerators[e]=new r.PickingInstancedMeshGenerator(this),this.pickingNodeGenerators[e].reserveMaterial=!!e.startsWith("glow")),this.pickingNodeGenerators[e]}_traverseIntersectNode(e,t){for(let i in this.nodeIdxMapFromUserId)this.manager.isHiddenNode(i)||this.traverseMatrixInfoMapByUserId(i,((r,n)=>{const a=this.getInstanceNodesById(r)[0];for(let r=0,s=n.length;r<s;r++)for(let s=0,o=a.length;s<o;s++)a[s].intersectBoxWithClipPlane(e,n[r])&&t&&t(i,a[s],n[r])}))}_traverseIntersectNodeLimit(e,t,i){for(let r in this.nodeIdxMapFromUserId)this.manager.isHiddenNode(r)||this.traverseMatrixInfoMapByUserId(r,((n,a)=>{const s=this.getInstanceNodesById(n)[0];for(let n=0,o=a.length;n<o;n++)for(let o=0,l=s.length;o<l;o++)s[o].intersectBoxWithClipPlane(e,a[n])&&s[o].intersectBoxWithPlaneMesh(t,a[n])&&i&&i(r,s[o],a[n])}))}calculateClippingIds(e,t,i){let r=i.getFilter().getLocalClippingList(),n=i.manager.viewer.getRenderer().localClippingEnabled&&Object.keys(r).length>0;this._traverseIntersectNode(e,((i,a,s)=>{(!n||n&&r[i])&&a.getIntersectionPoints(e,s,t,!0)}))}calculateClippingContours(e,t,i,r,n,a){this._traverseIntersectNodeLimit(t,i,((i,s,o)=>{if(-1===n.indexOf(i))return;let l=[];if(s.getIntersectionContours(t,o,l,!0),0===l.length)return;let d=[];const h=s.material.color,c={red:parseInt(255*h.r),green:parseInt(255*h.g),blue:parseInt(255*h.b)};l.map((e=>{let t=[];e.map((e=>{r.containsPoint(e)&&t.push(e)})),t.length>0&&d.push(t)})),void 0===a[e][i]?a[e][i]={clippingContours:[d],colors:[c]}:(a[e][i].clippingContours.push(d),a[e][i].colors.push(c))}))}_createGeometryByNodeInfo(e,t){if(r.ModelView.BaseDescriptor.isParameterizedNode(t))return this._createGeometry(t.type,t.geometryIdCode,t.fromMirror,null,e.lightmap);const i=void 0!==t.bufferId?t.bufferId:t.geometryId;let n=e.getModelDescriptor().getReferencedMeshBufferById(i);if(!n)return null;if(n.IndexInfos){let i={buffer:n,indexInfo:n.IndexInfos[t.indexInfoIdx]};return this._createNodeBufferByMpkBufferData(e,t,i)}return this._createGeometry(t.type,t.geometryIdCode,t.fromMirror,n,e.lightmap)}_collectSharedMeshBufferIds(e){const t=e.getModelDescriptor().getInstancedNodeInfosOnGeometryId();let i=!1;for(let e in t)if(!r.ModelView.BaseDescriptor.isParameterizedNodeType(e)){i=!0;break}if(!i)return;const n=e.getModelDescriptor().getReferencedMeshBufferData();Object.keys(n).forEach((e=>{const i=n[e].IndexInfos;if(i)for(let r=0,n=i.length;r<n;r++){const n=t[i[r].meshId];n&&n.length&&n.forEach((t=>{t.bufferId=e,t.indexInfoIdx=r}))}}))}_createNodeBufferByMpkBufferData(e,t,i){let r=this.createBufferForSharedMeshByBufferDataWithUV2(e,t,i,!1);if(!r)return null;let n=new THREE.BufferGeometry;return n.setIndex(new THREE.BufferAttribute(new Uint32Array(r.index),1)),n.setAttribute("position",new THREE.BufferAttribute(new Float32Array(r.position),3)),r.normal&&n.setAttribute("normal",new THREE.BufferAttribute(new Float32Array(r.normal),3)),r.uv&&n.setAttribute("uv",new THREE.BufferAttribute(new Float32Array(r.uv),2)),r.uv2&&n.setAttribute("uv2",new THREE.BufferAttribute(new Float32Array(r.uv2),2)),e.lightmap&&void 0!==t.itemIdUV2&&(t.geometryIdCode=t.geometryIdCode+"_"+t.itemIdUV2),this._cacheGeometry(t.geometryIdCode,n),n}}r.ModelView.InstancedMeshManager=n}(),r.ModelView.InstancedWireframeManager=class{constructor(e){this.manager=e,this.wireframeGeometryMap={},this.noNeedWireframingIdMap={},this.generated=!1,this.meshesVisible=!0}destroy(){if(this.disposeGeometries(),this.wireframeGeometryMap=null,this.noNeedWireframingIdMap=null,this.manager=null,this.pickingNodeGenerators){for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].destroy();this.pickingNodeGenerators=null}}clearData(){if(this.generated=!1,this.bufferDestroyed=!1,this.disposeGeometries(),this.wireframeGeometryMap={},this.noNeedWireframingIdMap={},this.pickingNodeGenerators)for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].clearData()}disposeGeometries(){this._traverseWireframeGeometryMap((function(e,t){for(var i=0,r=t.length;i<r;i++)t[i].dispose()}))}updateNodes(e){this.meshesVisible=e.isActivateWireframe();const t=this._getNodeGroup(e);this.meshesVisible?t._adjustActivated||(t.updateMatrixWorld(!0),t.visible=!0):t.visible=!1}resetInstanceMaterial(e){var t=r.EnumInstanceState.NONE,i=e.localClippingMode?r.EnumInstanceState.CLIPPING:r.EnumInstanceState.NONE;this._traverseWireframeGeometryMap((function(e,r){for(var n=0,a=r.length;n<a;++n){for(var s=r[n].getAttribute("vState").array,o=r[n].getAttribute("vClipping").array,l=0,d=s.length;l<d;l++)s[l]=t,o[l]=i;r[n].getAttribute("vState").needsUpdate=!0,r[n].getAttribute("vClipping").needsUpdate=!0}})),this._updateNoWireframingState()}updateInstanceWireframeByUserId(e,t,i,n){if(i===r.EnumInstanceState.HIDDEN||i===r.EnumInstanceState.NONE||i===r.EnumInstanceState.OVERRIDED){if(!this._isNeedWireframing(t))return;var a;if(n){var s=e.getFilter()._getMaterialByName(n),o=r.MaterialUtil.getColorParamsByMaterial(s);a=o.rgbaColor}var l=this;this.manager.traverseNodeIdxMapByUserId(t,(function(e,t){l._setInstanceWireframeState(e,t,i,a)}))}}updateInstanceWireframeClippingByUserId(e){var t=this;this.manager.traverseNodeIdxMapByUserId(e,(function(e,i){var n=t._getWireframeGeometryById(e);if(n)for(var a=0,s=n.length;a<s;++a){for(var o=n[a].getAttribute("vClipping").array,l=0,d=i.length;l<d;++l)o[i[l]]=r.EnumInstanceState.CLIPPING;n[a].getAttribute("vClipping").needsUpdate=!0}}))}updateInstanceWireframeClipping(e){var t=this,i=e?r.EnumInstanceState.CLIPPING:r.EnumInstanceState.NONE;this.manager.traverseNodeIdxMap((function(e,r){var n=t._getWireframeGeometryById(e);if(n)for(var a=0,s=n.length;a<s;++a){for(var o=n[a].getAttribute("vClipping").array,l=0,d=r.length;l<d;++l)o[r[l]]=i;n[a].getAttribute("vClipping").needsUpdate=!0}}))}_updateNoWireframingState(){var e=this,t=r.EnumInstanceState.HIDDEN;this.manager.traverseNodeIdxMap((function(i,r){e._setInstanceWireframeState(i,r,t)}),(function(t){return e._isNeedWireframing(t)}))}_setInstanceWireframeState(e,t,i,r){var n=this._getWireframeGeometryById(e);if(n)for(var a=0,s=n.length;a<s;++a){var o=n[a].getAttribute("vState").array,l=null,d=null;r&&(d=(l=n[a].getAttribute("aColor"))?l.array:null);for(var h=0,c=t.length;h<c;++h){var u=t[h];o[u]=i,null!==d&&(d[4*u]=r[0],d[4*u+1]=r[1],d[4*u+2]=r[2],d[4*u+3]=r[3])}n[a].getAttribute("vState").needsUpdate=!0,l&&(l.needsUpdate=!0)}}_generateInstanceWireframe(e){this._collectNoWireframingIds(e),this._createInstanceWireframeGeometries(),this._makeInstanceWireframe(e),this._updateNoWireframingState()}generateWireframe(e){this.generated||(this._generateInstanceWireframe(e),this.generated=!0)}_collectNoWireframingIds(e){var t=this,i=e.getFilter();e.getModelDescriptor().traverseInstancedNodeInfos(null,(function(e,r){r&&i.getWireFrameVisibilityCondition()?i._isRenderWithWireFrame(r[0])||(t.noNeedWireframingIdMap[e]=!0):r&&i._hasRenderWithBoardlineFilter()&&!i._isRenderWithBoardline(r[0])&&(t.noNeedWireframingIdMap[e]=!0)}))}_createInstanceWireframeGeometries(){var e=this,t={};this.manager.traverseInstanceGeometryMap((function(i,r){for(var n=e._getWireframeBufferById(i,r,t),a=e.wireframeGeometryMap[i]=[],s=0,o=n.length;s<o;s++){var l=new THREE.InstancedBufferGeometry;l.setIndex(n[s].index),l.setAttribute("position",n[s].position),a.push(l)}})),t=null}_makeInstanceWireframe(e){var t=this,i=this.manager,n=i.getCachedInstanceData(),a=this._getWireframeMaterial(e),s=e.localClippingMode?r.EnumInstanceState.CLIPPING:r.EnumInstanceState.NONE;this._traverseWireframeGeometryMap((function(r,o){for(var l=i.getBufferAttributesBy(r),d=0,h=o.length;d<h;d++){o[d].setAttribute("vState",new THREE.InstancedBufferAttribute(new Float32Array(n.vState[r]),1,!1,1)),o[d].setAttribute("vClipping",new THREE.InstancedBufferAttribute(new Float32Array(n.vClipping[r]),1,!1,1)),o[d].setAttribute("mcol0",l.attributeMcol0),o[d].setAttribute("mcol1",l.attributeMcol1),o[d].setAttribute("mcol2",l.attributeMcol2),o[d].setAttribute("mcol3",l.attributeMcol3),o[d].getAttribute("vClipping").array.fill(s),t._setDefaultColorAttribute(e,o[d],n.vState[r].length);var c=new THREE.LineSegments(o[d],a);c.frustumCulled=!1,t._addWireframeNodeToScene(e,c)}}))}_setDefaultColorAttribute(e,t,i){for(var r=this._getWireframeMaterial(e),n=[],a=0;a<i;a++)n.push(r.color.r,r.color.g,r.color.b,r.opacity);t.setAttribute("aColor",new THREE.InstancedBufferAttribute(new Float32Array(n),4,!1,1))}_addWireframeNodeToScene(e,t){this._getNodeGroup(e).add(t),t.updateMatrixWorld(!0)}_isNeedWireframing(e){return!this.noNeedWireframingIdMap||!this.noNeedWireframingIdMap[e]}_getWireframeMaterial(e){return e.getInstanceWireframeMaterial()}_getWireframeBufferById(e,t,i){var n=this.getGeometryIdByMeshId(e);if(i[n])return i[n];i[n]=[];for(var a=0,s=t.length;a<s;a++){var o=t[a];i[n].push({index:r.BuildEdge(o.attributes.position.array,o.index.array),position:o.attributes.position})}return i[n]}_getWireframeGeometryById(e){return this.wireframeGeometryMap[e]}_traverseWireframeGeometryMap(e){var t=this.wireframeGeometryMap;for(var i in t)e(i,t[i])}_getNodeGroup(e){return e._getNodeGroup(r.ObjectGroupType.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0})}_hasNodeGroup(e){return e._hasNodeGroup(r.ObjectGroupType.INSTANCEWIREFRAMEGEOMETRY)}getGeometryIdByMeshId(e){return r.Utils.splitCombinedKeyString(e)[1]}adjustVisibility(e,t){if(!this.meshesVisible)return;const i=this._getNodeGroup(e);i._adjustActivated=!t,i.visible!==t&&(i.visible=t)}changeVisibilityOfSelectedObjects(e,t){}changeVisibilityOfNonSelectedObjects(e,t){this.adjustVisibility(e,t)}restoreVisibilityOfObjects(){}disposeBufferAfterVbo(){if(this.generated&&!this.bufferDestroyed){this.bufferDestroyed=!0;var e=["mcol0","mcol1","mcol2","mcol3"];r.GlobalData.EnableExplosion&&e.pop(),this._traverseWireframeGeometryMap((function(t,i){for(var n=0,a=i.length;n<a;n++)r.GeomUtil.disposeBufferFromGeometry(i[n],e)}))}}getPickingNodeGenerator(e){return e=null==e?"pick":e,this.pickingNodeGenerators||(this.pickingNodeGenerators={}),this.pickingNodeGenerators[e]||(this.pickingNodeGenerators[e]=new r.PickingInstancedWireFrameGenerator(this)),this.pickingNodeGenerators[e]}},function(){class e extends r.ModelView.InstancedBaseManager{constructor(){super(),this.meshManager=new r.ModelView.InstancedMeshManager(this),this.wireframeManager=new r.ModelView.InstancedWireframeManager(this)}}r.ModelView.InstancedManager=e}(),function(){class e extends r.ModelView.ModelBaseHandler{constructor(e){super(e),this.tag="default",this.defaultManager=null,this.instancedManager=null,this.loader=null}prepare(e,t){if(this.isLoaded()&&!this.isHidden()){this.prepareWireframe(this.model,t);var i=this.model.getMaterialManager().lastTextureEnabled;this.model.getMaterialManager()._updateTextureMapping(this.model,t),!this.model.lightmap||this.model.enableLightmap==r.GlobalData.EnableLightmap&&this.model.lightmapIntensity==r.GlobalData.LightmapIntensity&&i==r.GlobalData.EnableTextureMapping||(this.model.enableLightmap=r.GlobalData.EnableLightmap,this.model.lightmapIntensity=r.GlobalData.LightmapIntensity,this.rebuildIndicesforLightmap(),this.updateNodes())}}settleData(e){this.model.getModelDescriptor().classifyAllNodeInfo(),this.addNodeInfoToOctantMap(),this.createMeshNodes(e)}addNodeInfoToOctantMap(){var e=this.model.manager,t=this.model.getEncodedDatabagId();this.loader.getDescriptor().traverseNodeInfosByCell((function(i,r){e.addNodeInfoToOctantMap(t,i,r)}))}createMeshNodes(e){var t=this,i=this.model,r=this.loader.getDescriptor();this.instancedManager.createMeshNodes(i,r.getInstancedUserIds()),this.defaultManager.asyncCreateMeshNodes(i,r.getStandardUserIds(),(function(){i.getMaterialManager()._updateTextureMapping(),t.clearCachedData(i),t.loaded=!0,e&&e()}))}clearCachedData(){this.loader.getDescriptor().destroyReader(),this.loader.getDescriptor().clearReferencedMeshCache(),this.defaultManager.clearCachedData(),this.instancedManager.clearCachedData()}}r.ModelView.BatchedBaseHandler=e}(),r.ModelView.BatchedBaseManager=class{constructor(){this.meshManager=null,this.wireframeManager=null}destroy(){this.meshManager.destroy(),this.meshManager=null,this.wireframeManager.destroy(),this.wireframeManager=null,this._clearFilteredState(),this._clearSelectedState(),this._clearHoveredState(),this._clearBlinkedState()}updateNodes(e){this.meshManager.update(e),this.wireframeManager.update(e)}generateWireframe(e,t){this.wireframeManager.generateWireframe(e,t)}asyncGenerateWireframe(e,t){this.wireframeManager.asyncGenerateWireframe(e,t)}rebuildIndices(e){this._rebuildIndices(e)}clearData(){this.meshManager.clearData(),this.wireframeManager.clearData(),this._clearFilteredState(),this._clearSelectedState(),this._clearHoveredState(),this._clearBlinkedState()}createMeshNodes(e,t){this.meshManager.createMeshNodes(e,t)}asyncCreateMeshNodes(e,t,i){this.meshManager.asyncCreateMeshNodes(e,t,i)}hasNodeInfo(e){return!!e.getModelDescriptor().getStandardNodeInfos()}disposeGeometry(e){this.meshManager.disposeGeometry(e)}getMeshNode(){return this.meshManager.getMeshNode()}getPropertyValueByMaterialKey(e){return this.meshManager.getPropertyValueByMaterialKey(e)}getFilteredUserIds(){return this.mapMaterialIdToUserIdsForFilter}getSelectedUserIds(){return this.mapMaterialIdToUserIdsForSelection}getHoveredUserIds(){return this.mapMaterialIdToUserIdsForHover}getBlinkedUserIds(){return this.mapBlinkUserIds}getHiddenUserIds(){return this.hiddenUserIdSetObject}getTransparentUserIds(){return this.transparentUserIdSetObject}applyFilter(e,t){if(this.hasNodeInfo(e)){var i;i=t||e.getModelDescriptor().getStandardUserIds();var r=e.getModelDescriptor().getStandardNodeInfos();this._collectFilteredUserIds(e,i,r),this._collectSelectedUserIds(e.manager.sceneState.selectionSet,r),this._collectHoveredUserIds(e.manager.sceneState.hoverId,r),this._rebuildIndices(e),this.updateNodes(e)}}applySelection(e){if(this.hasNodeInfo(e)){var t=e.getModelDescriptor().getStandardNodeInfos();this._clearSelectedState(e),this._clearHoveredState(e),this._collectSelectedUserIds(e.manager.sceneState.selectionSet,t),this._collectHoveredUserIds(e.manager.sceneState.hoverId,t),this._rebuildIndices(e),this.updateNodes(e)}}clearSelection(e){this._clearSelectedState(e),this.applyHover(e)}applyHover(e){if(this.hasNodeInfo(e)){var t=e.getModelDescriptor().getStandardNodeInfos();this._clearHoveredState(e),this._collectHoveredUserIds(e.manager.sceneState.hoverId,t),this._rebuildIndices(e),this.updateNodes(e)}}clearHover(e){this._clearHoveredState(e),this._rebuildIndices(e),this.updateNodes(e)}applyBlink(e){if(this.hasNodeInfo(e)){var t=e.getModelDescriptor().getStandardNodeInfos();this._clearBlinkedState(e),this._clearHoveredState(e),this._collectBlinkedUserIds(e.manager.sceneState.getBlinkComponentsIdMap(e.id),t),this._collectHoveredUserIds(e.manager.sceneState.hoverId,t),this._rebuildIndices(e),this.updateNodes(e)}}clearBlink(e){this._clearBlinkedState(e),this.applyHover(e)}applyReplacement(e){this._rebuildIndices(e),this.updateNodes(e)}_collectFilteredUserIds(e,t,i){var n=e.getFilter(),a=n._hasHiddenFileIdFilter(),s=n._hasVisibleFilter(),o=n._hasOverrideMaterialFilter(),l=n._hasTransparentFilter(),d=e.hasReplacedUserId(),h=e.hasHiddenSourceObjectUserId(),c=this.mapMaterialIdToUserIdsForFilter={};if(this.hiddenUserIdSetObject={},this.overrideUserIdSetObject={},this.transparentUserIdSetObject={},a||s||o||l||d||h)for(var u=0;u<t.length;++u){var p=t[u],m=i[p];if(m&&m.length)for(var f=0,g=m.length;f<g;f++){var v=m[f];if(a&&n._isHiddenFileId(v)||s&&!1===n._isVisible(v)||e.isReplacedUserId(p)||e.isHiddenSourceObjectUserId(p))void 0===c[v.materialId]&&(c[v.materialId]={}),void 0===c[v.materialId][r.Model.EnumFilterState.HIDDEN]&&(c[v.materialId][r.Model.EnumFilterState.HIDDEN]={}),c[v.materialId][r.Model.EnumFilterState.HIDDEN][p]=!0,this.hiddenUserIdSetObject[p]=!0;else if(l&&n._isTransparent(v))void 0===c[v.materialId]&&(c[v.materialId]={}),void 0===c[v.materialId][r.Model.EnumFilterState.TRANSPARENT]&&(c[v.materialId][r.Model.EnumFilterState.TRANSPARENT]={}),c[v.materialId][r.Model.EnumFilterState.TRANSPARENT][p]=!0,this.transparentUserIdSetObject[p]=!0;else if(o&&n._hasOverrideMaterial(v)){var y=n._getOverrideMaterial(v),M=null!=y?y.name:"";""!==M&&(void 0===c[v.materialId]&&(c[v.materialId]={}),void 0===c[v.materialId][r.Model.EnumFilterState.OVERRIDED]&&(c[v.materialId][r.Model.EnumFilterState.OVERRIDED]={}),c[v.materialId][r.Model.EnumFilterState.OVERRIDED][p]=M,this.overrideUserIdSetObject[p]=M)}}}}_clearFilteredState(){this.mapMaterialIdToUserIdsForFilter=null}_collectSelectedUserIds(e,t){var i=this.mapMaterialIdToUserIdsForSelection={};for(var r in e){var n=t[r];if(n&&n.length)for(var a=0,s=n.length;a<s;a++)void 0===i[n[a].materialId]&&(i[n[a].materialId]={}),void 0===i[n[a].materialId][r]&&(i[n[a].materialId][r]=!0)}}_clearSelectedState(){this.mapMaterialIdToUserIdsForSelection&&(this.mapMaterialIdToUserIdsForSelection=null)}_collectHoveredUserIds(e,t){var i=this.mapMaterialIdToUserIdsForHover={};if(e&&t[e])for(var r=t[e],n=0,a=r.length;n<a;n++)void 0===i[r[n].materialId]&&(i[r[n].materialId]={}),void 0===i[r[n].materialId][e]&&(i[r[n].materialId][e]=!0)}_clearHoveredState(){this.mapMaterialIdToUserIdsForHover&&(this.mapMaterialIdToUserIdsForHover=null)}_collectBlinkedUserIds(e,t){var i=this.mapBlinkUserIds={};for(var r in e){var n=t[r];if(n&&n.length)for(var a=0,s=n.length;a<s;a++)void 0===i[n[a].materialId]&&(i[n[a].materialId]={}),void 0===i[n[a].materialId][r]&&(i[n[a].materialId][r]=!0)}}_clearBlinkedState(){this.mapBlinkUserIds&&(this.mapBlinkUserIds=null)}_rebuildIndices(e){this.meshManager.rebuildIndices(e),this.wireframeManager.rebuildIndices(e)}clearCachedData(){this.meshManager.clearAllNodeBuffer()}getMeshesByUserIds(e,t,i){this.meshManager.getMeshesByUserIds(e,t,i)}adjustVisibility(e,t){this.meshManager.adjustVisibility(e,t),this.wireframeManager.adjustVisibility(e,t)}changeVisibilityOfSelectedObjects(e,t){this.meshManager.changeVisibilityOfSelectedObjects(e,t),this.wireframeManager.changeVisibilityOfSelectedObjects(e,t)}changeVisibilityOfNonSelectedObjects(e,t){this.meshManager.changeVisibilityOfNonSelectedObjects(e,t),this.wireframeManager.changeVisibilityOfNonSelectedObjects(e,t)}restoreVisibilityOfObjects(){this.meshManager.restoreVisibilityOfObjects(),this.wireframeManager.restoreVisibilityOfObjects()}disposeBufferAfterVbo(){this.meshManager.disposeBufferAfterVbo(),this.wireframeManager.disposeBufferAfterVbo()}getGeometryBuffersByUserId(e,t){return this.meshManager.getGeometryBuffersByUserId(e,t)}explode(e){this.meshManager.explode(e),this.wireframeManager.explode(e)}isPickableNode(e){var t=this.getHiddenUserIds();if(t&&t[e])return!1;var i=this.getTransparentUserIds();return!i||!i[e]}isHiddenNode(e){var t=this.getHiddenUserIds();return!(!t||!t[e])}getMeshManager(){return this.meshManager}getWireFrameManager(){return this.wireframeManager}},function(){class e extends r.ModelView.DefaultBaseLoader{constructor(e){super(e),this.descriptor=new r.ModelView.BatchedDescriptor}}r.ModelView.BatchedLoader=e}(),function(){class e extends r.ModelView.DefaultDescriptor{constructor(){super()}}r.ModelView.BatchedDescriptor=e}(),function(){class e extends r.ModelView.MeshBaseManager{constructor(e){super(),this.manager=e,this._maxIndiceseNum=0,this._materialList=[],this.mapMaterialIdToMergedNode={},this.selectedMeshes=[],this.nonSelectedMeshes=[],this.selectedObjectIds=[],this.blinkMaterials=[],this.mapDestroyedBufferKey={},this.mapClippingIds={},this.mapClippingIdsBox=[[],[],[],[],[],[]],this.clippingIdsForInstance=[],this.isCalculatedClippingIds=!1,this.clippingMaterialMap={}}destroy(){if(super.destroy(),this.clearData(),this.mapMaterialIdToMergedNode=null,this.manager=null,this._materialList=null,this.selectedMeshes=null,this.nonSelectedMeshes=null,this.selectedObjectIds=null,this.blinkMaterials=null,this.mapDestroyedBufferKey=null,this.clippingMaterialMap=null,this.pickingNodeGenerators){for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].destroy();this.pickingNodeGenerators=null}}clearData(){if(this.bufferDestroyed=!1,this.clearAllNodeBuffer(),this._disposeMergedGeometries(),this.pickingNodeGenerators)for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].clearData()}getMeshesByUserIds(e,t,i){const r=e.getLengthUnitsMatrix();for(let n in this.mapMaterialIdToMergedNode){const a=this.mapMaterialIdToMergedNode[n];for(let n=0,s=a.length;n<s;n++){const s=a[n],o=s.indices;for(let n in o)if(n==t||n==i){const t=o[n];for(let i=0,a=t.length;i<a;i++)e.minDistanceObjects[n].push({mesh:s.mesh,indexInfo:t[i],boundingBox:t[i].boundingBox,unitsMatrix:r})}}}}_traverseIntersectNodeLimit(e,t,i){const r=this.manager.getHiddenUserIds();for(let n in this.mapMaterialIdToMergedNode){const a=this.mapMaterialIdToMergedNode[n];for(let n=0,s=a.length;n<s;n++){const s=a[n],o=s.mesh,l=s.indices;for(const n in l){if(r&&r[n])continue;const a=l[n];for(let r=0,n=a.length;r<n;r++)"LineSegmentsEx"!=o.type&&o.intersectBoxWithClipPlane(e,a[r])&&o.intersectBoxWithPlaneMesh(t,a[r])&&i&&i(o,a[r])}}}}_traverseIntersectNode(e,t){const i=this.manager.getHiddenUserIds();for(let r in this.mapMaterialIdToMergedNode){const n=this.mapMaterialIdToMergedNode[r];for(let r=0,a=n.length;r<a;r++){const a=n[r],s=a.mesh,o=a.indices;for(const r in o){if(i&&i[r])continue;const n=o[r];for(let i=0,r=n.length;i<r;i++)"LineSegmentsEx"!=s.type&&s.intersectBoxWithClipPlane(e,n[i])&&t&&t(s,n[i])}}}}preCalculateClippingIdsForInstance(e){if(this.isCalculatedClippingIds)return;let t=e.getModelDescriptor(),i=t.getStandardUserIds(),n=t.getInstancedNodeInfos();if(n){for(var a=0;a<i.length;a++){let e=i[a],t=n[e];if(t&&t instanceof Array)for(let i=0;i<t.length;i++)if(t[i].type==r.ModelView.BaseDescriptor.EnumNodeItemType.MESH_REF){this.clippingIdsForInstance.push(e);break}}this.isCalculatedClippingIds=!0}}clearClippingIdsForBox(){for(let e=0;e<this.mapClippingIdsBox.length;e++)this.mapClippingIdsBox[e].length=0}calculateClippingIds(e,t,i,r){let n=r.getFilter().getLocalClippingList(),a=r.manager.viewer.getRenderer().localClippingEnabled&&Object.keys(n).length>0;if(this.mapClippingIds={},this._traverseIntersectNode(e,((i,r)=>{(!a||a&&n[r.userId])&&(i.getIntersectionPoints(e,r,t),this.mapClippingIds[r.userId]=!0)})),i>=0){this.mapClippingIdsBox[i].length=0,this.mapClippingIdsBox[i]=Object.keys(this.mapClippingIds);let e=this.mapClippingIdsBox;for(let t=0;t<e.length;t++){let i=e[t];for(let e=0;e<i.length;e++)this.mapClippingIds[i[e]]=!0}}this.preCalculateClippingIdsForInstance(r);let s=this.clippingIdsForInstance;for(let e=0;e<s.length;e++)this.mapClippingIds[s[e]]=!0}calculateClippingContours(e,t,i,r,n,a){this._traverseIntersectNodeLimit(t,i,((i,s)=>{const o=s.userId;if(-1===n.indexOf(o))return;let l=[];if(i.getIntersectionContours(t,s,l),0===l.length)return;let d=[];const h=i.material[0].color,c={red:parseInt(255*h.r),green:parseInt(255*h.g),blue:parseInt(255*h.b)};l.map((e=>{let t=[];e.map((e=>{r.containsPoint(e)&&t.push(e)})),t.length>0&&d.push(t)})),void 0===a[e][o]?a[e][o]={clippingContours:[d],colors:[c]}:(a[e][o].clippingContours.push(d),a[e][o].colors.push(c))}))}rebuildIndices(e){this._materialList.length=0,this.clearSelectedObjectIds();var t=this.manager.getFilteredUserIds(),i=this.manager.getSelectedUserIds(),n=this.manager.getHoveredUserIds(),a=this.manager.getBlinkedUserIds(),s=this.mapClippingIds,o=!1,l=null,d=e.getFilter();for(var h in d&&(o=d._hasLocalClipping(),l=d.getLocalClippingList()),this.mapMaterialIdToMergedNode){var c,u,p,m,f=this.getPropertyValueByMaterialKey(h).materialId,g=null,v=null,y=null,M=null,E=null,b=null;i&&i[f]&&(M=i[f]),n&&n[f]&&(E=n[f]),a&&a[f]&&(b=a[f]),t&&t[f]&&(g=t[f][r.Model.EnumFilterState.HIDDEN],v=t[f][r.Model.EnumFilterState.OVERRIDED],y=t[f][r.Model.EnumFilterState.TRANSPARENT]);var x=this.mapMaterialIdToMergedNode[h];for(p=0,m=x.length;p<m;p++){var I=x[p],T=(I.mesh,I.indices),C=I.geometry;if(C.clearGroups(),C._visible=!0,M||g||v||E||y||s||o||b){var w=[];for(var S in T)if(T.hasOwnProperty(S)){if(g&&g[S])continue;var A=T[S];if(A&&A.length>0){if(A.sort((function(e,t){return e.indexStart-t.indexStart})),l&&l[S]){var B="localClipping#"+S+"#"+A[0].nodeId;y&&y[S]?B+="#transparent":b&&b[S]?(B+="#blink",v&&v[S]&&(B+="#"+v[S])):E&&E[S]?(B+="#hover",v&&v[S]&&(B+="#"+v[S])):v&&v[S]&&(B+="#override#"+v[S]),this._materialList.push(B);var R=this._materialList.length-1;for(c=0,u=A.length;c<u;c++)w.push({indexStart:A[c].indexStart,indexCount:A[c].indexCount,state:r.Model.EnumFilterState.OVERRIDED+R});continue}if(y&&y[S]){for(c=0,u=A.length;c<u;c++)w.push({indexStart:A[c].indexStart,indexCount:A[c].indexCount,state:r.Model.EnumFilterState.TRANSPARENT});continue}if(e.manager.isSelectPriority()){if(M&&M[S]){if(this.cacheSelectedObjectIds(S,h,p),r.GlobalData.PickingEffect){if(v&&v[S]){var D="selected#"+v[S];for(-1===(R=this._materialList.indexOf(D))&&(this._materialList.push(D),R=this._materialList.length-1),c=0,u=A.length;c<u;c++)w.push({indexStart:A[c].indexStart,indexCount:A[c].indexCount,state:r.Model.EnumFilterState.OVERRIDED+R});continue}for(c=0,u=A.length;c<u;c++)w.push({indexStart:A[c].indexStart,indexCount:A[c].indexCount,state:r.Model.EnumFilterState.NONE});continue}for(c=0,u=A.length;c<u;c++)w.push({indexStart:A[c].indexStart,indexCount:A[c].indexCount,state:r.Model.EnumFilterState.SELECTED});continue}if(b&&b[S]){let e;for(e=`blink#${f}#${S}`,v&&v[S]&&(e=`blink#${v[S]}#${S}`),-1===(R=this._materialList.indexOf(e))&&(this._materialList.push(e),R=this._materialList.length-1),c=0,u=A.length;c<u;c++)w.push({indexStart:A[c].indexStart,indexCount:A[c].indexCount,state:r.Model.EnumFilterState.OVERRIDED+R});continue}}else{if(b&&b[S]){let e;for(e=`blink#${f}#${S}`,v&&v[S]&&(e=`blink#${v[S]}#${S}`),-1===(R=this._materialList.indexOf(e))&&(this._materialList.push(e),R=this._materialList.length-1),c=0,u=A.length;c<u;c++)w.push({indexStart:A[c].indexStart,indexCount:A[c].indexCount,state:r.Model.EnumFilterState.OVERRIDED+R});continue}if(M&&M[S]){if(this.cacheSelectedObjectIds(S,h,p),r.GlobalData.PickingEffect){if(v&&v[S]){D="selected#"+v[S];for(-1===(R=this._materialList.indexOf(D))&&(this._materialList.push(D),R=this._materialList.length-1),c=0,u=A.length;c<u;c++)w.push({indexStart:A[c].indexStart,indexCount:A[c].indexCount,state:r.Model.EnumFilterState.OVERRIDED+R});continue}for(c=0,u=A.length;c<u;c++)w.push({indexStart:A[c].indexStart,indexCount:A[c].indexCount,state:r.Model.EnumFilterState.NONE});continue}for(c=0,u=A.length;c<u;c++)w.push({indexStart:A[c].indexStart,indexCount:A[c].indexCount,state:r.Model.EnumFilterState.SELECTED});continue}}if(E&&E[S]){if(v&&v[S]){D="hover#"+v[S];for(-1===(R=this._materialList.indexOf(D))&&(this._materialList.push(D),R=this._materialList.length-1),c=0,u=A.length;c<u;c++)w.push({indexStart:A[c].indexStart,indexCount:A[c].indexCount,state:r.Model.EnumFilterState.OVERRIDED+R});continue}for(c=0,u=A.length;c<u;c++)w.push({indexStart:A[c].indexStart,indexCount:A[c].indexCount,state:r.Model.EnumFilterState.HOVER});continue}if(v&&v[S]){D=v[S];for(-1===(R=this._materialList.indexOf(D))&&(this._materialList.push(D),R=this._materialList.length-1),c=0,u=A.length;c<u;c++)w.push({indexStart:A[c].indexStart,indexCount:A[c].indexCount,state:r.Model.EnumFilterState.OVERRIDED+R});continue}if(s[S])for(c=0,u=A.length;c<u;c++)w.push({indexStart:A[c].indexStart,indexCount:A[c].indexCount,state:r.Model.EnumFilterState.CLIPPING});for(c=0,u=A.length;c<u;c++)w.push({indexStart:A[c].indexStart,indexCount:A[c].indexCount,state:0})}}if(w.length>0)for(c=0,u=w.length;c<u;c++){var O=w[c].indexStart,L=w[c].indexCount,P=w[c].state;if(0===c)C.addGroup(O,L,P);else{var N=w[c-1].indexStart,H=w[c-1].indexCount;P===w[c-1].state&&O===N+H?C.groups[C.groups.length-1].count+=L:C.addGroup(O,L,P)}}else C._visible=!1}}}}update(e){var t,i,n,a,s=e.getFilter(),o=e.materialManager.materials,l=e.selectedMaterial,d=e.manager.sceneState;if(e.isOnlyWireframe())for(var h in this.mapMaterialIdToMergedNode){for(n=0,a=(A=this.mapMaterialIdToMergedNode[h]).length;n<a;n++){(O=A[n].mesh)&&(O.visible=!1)}}else{r.GlobalData.TranslucentDepthDisabled&&(l.transparent?l.depthWrite=!1:l.depthWrite=!0);var c=s._getMaterialByName("scene");r.GlobalData.TranslucentDepthDisabled&&(c.depthWrite=!1);var u=[];this.blinkMaterials.length=0;var p={},m=s.getLocalClippingList();for(t=0,i=this._materialList.length;t<i;t++){var f,g=this._materialList[t],v=g.split("#");if("hover"===v[0])f=s._getMaterialByName(v[1]),f=d.getHoverMaterial(f);else if("blink"===v[0])f=s._getMaterialByName(v[1])||o[v[1]],f=d.getBlinkMaterial(f,g),p[g]||(p[g]=f,this.blinkMaterials.push(f));else if("localClipping"===v[0]){var y=v[1],M=v[2],E=m[y].nodeMap.get(M),b=s.getMaterialForClipBy(E);if(v[3]&&"transparent"==v[3]){var x=E+v[3];(f=s.getMaterialForClipBy(x,b)).copy(c),f.isOverrideOpacity=f.transparent}else if(v[3]&&"blink"==v[3]){if(v[4]){x=E+v[3]+v[4];f=s.getMaterialForClipBy(x,b);var I=s._getMaterialByName(v[4]);I=d.getBlinkMaterial(I,e.id),f.copy(I)}else{x=E+v[3];f=s.getMaterialForClipBy(x,b);var T=d.getBlinkMaterial(f,e.id);f.copy(T)}p[f.name]||(p[g]=f,this.blinkMaterials.push(f))}else if(v[3]&&"hover"==v[3])if(v[4]){x=E+v[3]+v[4];f=s.getMaterialForClipBy(x,b);I=s._getMaterialByName(v[4]);I=d.getHoverMaterial(I),f.copy(I)}else{x=E+v[3];f=s.getMaterialForClipBy(x,b);var C=d.getHoverMaterial(f);f.copy(C)}else if(v[3]&&"override"==v[3]){x=E+v[3]+v[4];f=s.getMaterialForClipBy(x,b);I=s._getMaterialByName(v[4]);f.copy(I),f.isOverrideOpacity=I.transparent}else f=b;f.clippingPlanes=b.clippingPlanes,this.clippingMaterialMap[f.name]=!0}else f=s._getMaterialByName(g);r.GlobalData.TranslucentDepthDisabled&&(f.transparent?f.depthWrite=!1:f.depthWrite=!0),u[t]=f}for(var h in this.mapMaterialIdToMergedNode){var w=this.getPropertyValueByMaterialKey(h).materialId,S=e.manager.getOverrideMaterialByName(w)||o[w]||r.MaterialUtil.getDefaultStandardMaterial();r.GlobalData.TranslucentDepthDisabled&&(S.transparent?S.depthWrite=!1:S.depthWrite=!0);var A,B=d.getHoverMaterial(o[w]);for(r.GlobalData.TranslucentDepthDisabled&&(B.transparent?B.depthWrite=!1:B.depthWrite=!0),n=0,a=(A=this.mapMaterialIdToMergedNode[h]).length;n<a;n++){var R=A[n],D=R.geometry;if(null!==D){var O=R.mesh;if(D._visible){if(D.groups.length>0){r.GeomUtil.limitGeometryBufferSize(D);var L=[S,l,void 0,B,c,void 0];for(t=0,i=u.length;t<i;t++)this.clippingMaterialMap[u[t].name]||(u[t].side=S.side),L.push(u[t]);O.material=L}else r.GeomUtil.limitGeometryBufferSize(D),O.material=D.groups.length?[S]:S;O.visible=!0}else O.visible=!1}}S=null}}}explode(e){function t(e,t,i,r){for(var n=e.getAttribute("position").array,a=t;a<i;a+=3)n[a]+=r.x,n[a+1]+=r.y,n[a+2]+=r.z;e.getAttribute("position").needsUpdate=!0}for(var i in this.mapMaterialIdToMergedNode)for(var r=this.mapMaterialIdToMergedNode[i],n=0,a=r.length;n<a;n++){var s=r[n],o=s.geometry;if(null!==o){var l=s.indices;for(var d in l){var h=e.modelExplosion.getExplosionTranslation(d),c=l[d];if(c)for(var u=0,p=c.length;u<p;u++){var m=c[u].positionStart;t(o,m,m+c[u].positionCount,h)}}}}}_getNodeGroup(e){return e._getNodeGroup(r.ObjectGroupType.GEOMETRY,{globalSpace:!0})}_hasNodeGroup(e){return e._hasNodeGroup(r.ObjectGroupType.GEOMETRY)}_resetMaxIndicesNumberPerBathSegment(e){r.GlobalData.SegmentedBatchMergeEnable&&r.GlobalData.maxIndicesNumberPerBathSegment<this._maxIndiceseNum&&(console.log("adjust maxIndicesNumberPerBathSegment value from "+r.GlobalData.maxIndicesNumberPerBathSegment+" to "+this._maxIndiceseNum+"!"),r.GlobalData.maxIndicesNumberPerBathSegment=e)}asyncCreateMeshNodes(e,t,i){var r=this;t&&t.length?this._asyncMergeData(e,t,(function(){r._makeMeshNodes(e),i&&i()})):i&&i()}_asyncMergeData(e,t,i){var n={},a=this,s=e.getLoader().maxLoadTaskCount,o=e.progressPercentage.load,l=e.progressPercentage.collect,d=t.length,h=Math.ceil(d/e.progressFrequency),c=e.getModelDescriptor().getStandardNodeInfos();requestAnimationFrame(function u(p){var m=p;return function(){var p,f;for(f=m+h>d?d:m+h,p=m;p<f;p++){var g=t[p];if(a._collectMergedNodeInfosById(e,g,c,n),p===f-1)if(f!==d){var v={total:s,loaded:(p/d*l+o)*s};e.dispatchEvent({type:r.EVENTS.ON_LOAD_PROGRESS,progress:v}),requestAnimationFrame(u(p+1))}else{v={total:s,loaded:(l+o)*s};e.dispatchEvent({type:r.EVENTS.ON_LOAD_PROGRESS,progress:v}),a._asyncMergeGeometry(n,e,i)}}}}(0))}_asyncMergeGeometry(e,t,i){var n=[];for(var a in e)n.push(a);if(0!==n.length){this._resetMaxIndicesNumberPerBathSegment(this._maxIndiceseNum);var s=this,o=t.getLoader().maxLoadTaskCount,l=t.progressPercentage.load,d=t.progressPercentage.collect,h=t.progressPercentage.merge,c=n.length,u=Math.ceil(c/t.progressFrequency),p=this.mapMaterialIdToMergedNode;requestAnimationFrame(function a(m){var f=m;return function(){var m,g;for(g=f+u>c?c:f+u,m=f;m<g;m++)if(s._collectMergedGeometriesById(n[m],e,p),m===g-1)if(g!==n.length){var v={total:o,loaded:(m/c*h+l+d)*o};t.dispatchEvent({type:r.EVENTS.ON_LOAD_PROGRESS,progress:v}),requestAnimationFrame(a(m+1))}else i()}}(0))}else i()}_collectMergedNodeInfosById(e,t,i,r){for(var n=i[t],a=0,s=n.length;a<s;a++){var o=n[a];this._createNodeBuffer(e,o);var l=this._getNodeBufferBy(o.nodeId);if(l){var d=l.index;d&&d.length>this._maxIndiceseNum&&(this._maxIndiceseNum=d.length);var h=this._getMaterialKeyByNodeInfo(o,e);void 0===r[h]&&(r[h]=[]),r[h].push(o)}}}_collectMergedGeometriesById(e,t,i){var n=t[e],a=0,s=0,o=0,l=0,d=0,h=null;void 0===i[e]&&(i[e]=[]);var c=[],u=0;n.sort((function(e,t){return e.userId-t.userId}));for(var p=0,m=n.length;p<m;p++){var f=n[p];(h=this._getNodeBufferBy(f.nodeId))?(s+=h.index.length,a+=h.position.length,h.normal&&(o+=h.normal.length),h.uv&&(l+=h.uv.length),h.uv2&&(d+=h.uv2.length),r.GlobalData.SegmentedBatchMergeEnable&&s>r.GlobalData.maxIndicesNumberPerBathSegment?(s-=h.index.length,a-=h.position.length,h.normal&&(o-=h.normal.length),h.uv&&(l-=h.uv.length),h.uv2&&(d-=h.uv2.length),c.push({start:u,end:p,arrayPositionLength:a,arrayIndexLength:s,arrayNormalLength:o,arrayUVLength:l,arrayUV2Length:d}),a=0,s=0,o=0,l=0,d=0,u=p,p-=1):p===m-1&&c.push({start:u,end:m,arrayPositionLength:a,arrayIndexLength:s,arrayNormalLength:o,arrayUVLength:l,arrayUV2Length:d}),h=null):p===m-1&&c.push({start:u,end:m,arrayPositionLength:a,arrayIndexLength:s,arrayNormalLength:o,arrayUVLength:l,arrayUV2Length:d})}for(var g=0,v=c.length;g<v;g++){var y=c[g],M=new THREE.BufferGeometry,E={},b=new Float32Array(y.arrayPositionLength),x=new Uint32Array(y.arrayIndexLength),I=new Float32Array(y.arrayNormalLength),T=new Float32Array(y.arrayUVLength),C=new Float32Array(y.arrayUV2Length),w=0,S=0,A=0,B=0,R=0,D=[];for(p=y.start,m=y.end;p<m;p++){f=n[p];if(h=this._getNodeBufferBy(f.nodeId)){D.push(f.nodeId);var O=h.index,L=h.position,P=h.normal,N=h.uv,H=h.uv2;b.set(L,w);for(var F=Uint32Array.from(O),k=0,U=F.length;k<U;k++)F[k]+=w/3;x.set(F,S),void 0===E[f.userId]&&(E[f.userId]=[]),E[f.userId].push({userId:f.userId,nodeId:f.nodeId,positionStart:w,positionCount:L.length,indexStart:S,indexCount:O.length,lightmapIdx:f.lightmapIdx,boundingBox:f.boundingBox}),S+=O.length,w+=L.length,P&&(I.set(P,A),A+=P.length),N&&(T.set(N,B),B+=N.length),H&&(C.set(H,R),R+=H.length),O=null,L=null,P=null,N=null,H=null,h=null}}this.clearNodeBufferByNodeIds(D),M._visible=!0,M.setIndex(new THREE.BufferAttribute(x,1)),M.setAttribute("position",new THREE.BufferAttribute(b,3)),A>0&&M.setAttribute("normal",new THREE.BufferAttribute(I,3)),B>0&&M.setAttribute("uv",new THREE.BufferAttribute(T,2)),R>0&&M.setAttribute("uv2",new THREE.BufferAttribute(C,2)),i[e].push({geometry:M,indices:E})}}clearAllNodeBuffer(){this.cachedNodeBuffer&&(this.cachedNodeBuffer=null)}clearNodeBufferByNodeIds(e){if(this.cachedNodeBuffer)for(var t=0,i=e.length;t<i;t++)this.cachedNodeBuffer[e[t]]=null}_getNodeBufferByNodeInfo(e,t){return this.cachedNodeBuffer||this._createNodeBuffer(e,t),this.cachedNodeBuffer[t.nodeId]}_getNodeBufferBy(e){return this.cachedNodeBuffer?this.cachedNodeBuffer[e]:null}_createNodeBufferByMpkBufferData(e,t,i){this.cachedNodeBuffer||(this.cachedNodeBuffer={}),this.cachedNodeBuffer[t.nodeId]||(this.cachedNodeBuffer[t.nodeId]=this.createBufferByBufferDataWithUV2(e,t,i))}_createNodeBuffer(e,t){this._createNodeBufferByMpkBufferData(e,t,{buffer:e.getModelDescriptor().getReferencedMeshBufferById(t.geometryId),isDataView:!0})}_createGeometries(e,t){var i=this,r=e.getModelDescriptor().getStandardNodeInfosOnGeometryId(),n=e.getModelDescriptor().getReferencedMeshBufferData(),a=this._getClassifiedMeshes(r,n);this._dealDataMergedMeshs(e,a,n,r,(function(){i._dealDataMergeableMeshs(e,a,n,r,t)}))}_getClassifiedMeshes(e,t){var i={},n={};for(var a in t){var s=t[a].IndexInfos,o=void 0;if(s){if(s.length<1)continue;for(var l=0,d=s.length;l<d;l++){if((h=e[s[l].meshId])&&h.length){o=s[l].meshId;break}}}else{var h;(h=e[a])&&h.length&&(o=a)}if(void 0!==o)(h=e[o])&&h.length&&(h[0].type===r.ModelView.BaseDescriptor.EnumNodeItemType.LINE||!h[0].instanceOrNot&&h[0].type===r.ModelView.BaseDescriptor.EnumNodeItemType.MESH_REF?i[a]=!0:n[a]=!0)}if(!r.GlobalData.Instance)for(var a in e)n[a]||i[a]||(i[a]=!0);return{mergeableIdxs:Object.keys(i),mergedIdxs:Object.keys(n)}}_collectMergeableMeshesByIdxId(e,t,i,r,n){i[t]&&i[t].IndexInfos?this._collectSharedMeshesByIdxId(e,t,i,r,n):this._collectLineOrIntanceMeshesByIdxId(e,t,i,r,n)}_collectLineOrIntanceMeshesByIdxId(e,t,i,r,n){for(var a=r[t],s={buffer:e.getModelDescriptor().getReferencedMeshBufferById(t)},o=0,l=a.length;o<l;o++){var d=a[o];this._createNodeBufferByMpkBufferData(e,d,s);var h=this._getMaterialKeyByNodeInfo(d);n[h]||(n[h]=[]),n[h].push(d)}}_collectSharedMeshesByIdxId(e,t,i,r,n){for(var a=i[t].IndexInfos,s=0,o=a.length;s<o;s++){var l=r[a[s].meshId];if(l)for(var d={buffer:e.getModelDescriptor().getReferencedMeshBufferById(t),indexInfo:a[s]},h=0,c=l.length;h<c;h++){var u=l[h];this._createNodeBufferByMpkBufferData(e,u,d);var p=this._getMaterialKeyByNodeInfo(u);n[p]||(n[p]=[]),n[p].push(u)}}}_mergeMergeableMeshes(e,t,i,n){var a=Object.keys(t);if(0!==a.length){var s=this,o=e.getLoader().maxLoadTaskCount,l=a.length,d=e.progressPercentage.load,h=e.progressPercentage.collect,c=e.progressPercentage.merge,u=Math.ceil(l/e.progressFrequency);requestAnimationFrame(function p(m){var f=m;return function(){var m,g;for(g=f+u>l?l:f+u,m=f;m<g;m++)s._collectMergedGeometriesById(a[m],t,i),m===g-1&&(g!==l?(e.dispatchEvent({type:r.EVENTS.ON_LOAD_PROGRESS,progress:{total:o,loaded:(m/l*c+d+h)*o}}),requestAnimationFrame(p(m+1))):s._makeMeshNodes(e,n))}}(0))}else this._makeMeshNodes(e,n)}_dealDataMergeableMeshs(e,t,i,n,a){if(0!==t.mergeableIdxs.length){var s=this,o=this.mapMaterialIdToMergedNode,l={},d=t.mergedIdxs.length,h=t.mergeableIdxs.length,c=d+h,u=t.mergeableIdxs,p=e.getLoader().maxLoadTaskCount,m=e.progressPercentage.load,f=e.progressPercentage.collect,g=Math.ceil(h/e.progressFrequency);requestAnimationFrame(function t(v){var y=v;return function(){var v,M;for(M=y+g>h?h:y+g,v=y;v<M;v++)s._collectMergeableMeshesByIdxId(e,u[v],i,n,l),v===M-1&&(M!==h?(e.dispatchEvent({type:r.EVENTS.ON_LOAD_PROGRESS,progress:{total:p,loaded:((v+d)/c*f+m)*p}}),requestAnimationFrame(t(v+1))):(e.dispatchEvent({type:r.EVENTS.ON_LOAD_PROGRESS,progress:{total:p,loaded:(f+m)*p}}),s._mergeMergeableMeshes(e,l,o,a)))}}(0))}else this._makeMeshNodes(e,a)}_collectDataMergedMeshesByIdxId(e,t,i,r,n){var a=t[e],s=a.IndexInfos;if(s&&0!==s.length){var o=!1;a.UV&&(a.UV.byteLength||a.UV.length)&&(o=!0),n.lightmap&&(a=this.getAttributeForLightmapWithDataMerged(a,n,e));for(var l=void 0,d=-1,h=0,c=s.length;h<c;h++){var u=i[s[h].meshId];if(u&&0!==u.length){if(null!=a.lightmapIdx){var p=s[h];p.positionStart=3*(d+1),p.uvStart=2*(d+1);for(var m=p.indexStart,f=p.indexCount+p.indexStart;m<f;m++)d=d<a.I[m]?a.I[m]:d;var g=d+1;p.positionCount=3*g-p.positionStart,p.uvCount=2*g-p.uvStart}l=s[h].meshId;for(var v=0,y=u.length;v<y;v++)u[v].uv=o,null!=a.lightmapIdx&&(u[v].lightmapIdx=a.lightmapIdx,u[v].materialId=u[v].materialId+"_"+u[v].lightmapIdx)}}if(void 0!==l){var M=i[l][0],E={},b=this._getMaterialKeyByNodeInfo(M);void 0===r[b]&&(r[b]=[]);for(m=0,f=s.length;m<f;m++)i[s[m].meshId]&&(void 0===E[(M=i[s[m].meshId][0]).userId]&&(E[M.userId]=[]),s[m].userId=M.userId,s[m].nodeId=M.nodeId,s[m].boundingBox=M.boundingBox,E[M.userId].push(s[m]));var x=new THREE.BufferGeometry;x._visible=!0,x.setIndex(new THREE.BufferAttribute(new Uint32Array(a.I),1)),x.setAttribute("position",new THREE.BufferAttribute(new Float32Array(a.P),3)),a.N&&(a.N.byteLength||a.N.length)&&x.setAttribute("normal",new THREE.BufferAttribute(new Float32Array(a.N),3)),o&&x.setAttribute("uv",new THREE.BufferAttribute(new Float32Array(a.UV),2)),a.UV2&&(x.setAttribute("uv2",new THREE.BufferAttribute(new Float32Array(a.UV2),2)),x.lightmapIdx=a.lightmapIdx),r[b].push({geometry:x,indices:E})}}}getAttributeForLightmapWithDataMerged(e,t,i){var r=[],n=new Uint32Array(e.I),a=t.getLoader().getUV2ById("bmpk_"+i,n.length);if(!a)return e;var s=a.lightmapIdx;r=a.uv2;for(var o=new Float32Array(e.P),l=new Float32Array(e.N),d=new Float32Array(e.UV),h=[],c=[],u=[],p=[],m=[],f=0,g=0;g<n.length;g++){var v=n[g];null==m[v]||r[2*m[v]]!=r[2*g]||r[2*m[v]+1]!=r[2*g+1]?(h.push(o[3*v]),h.push(o[3*v+1]),h.push(o[3*v+2]),l.length>0&&(c.push(l[3*v]),c.push(l[3*v+1]),c.push(l[3*v+2])),d.length>0&&(u.push(d[2*v]),u.push(d[2*v+1])),p.push(r[2*g]),p.push(r[2*g+1]),n[g]=f,f++,null==m[v]&&(m[v]=g)):n[g]=n[m[v]]}return o=null,l=null,d=null,r=null,m=null,{I:n,UV2:p,P:h,N:c,UV:u,lightmapIdx:s}}_dealDataMergedMeshs(e,t,i,n,a){if(0!==t.mergedIdxs.length){var s=this,o=this.mapMaterialIdToMergedNode,l=t.mergedIdxs,d=l.length,h=t.mergedIdxs.length+t.mergeableIdxs.length,c=e.getLoader().maxLoadTaskCount,u=e.progressPercentage.load,p=e.progressPercentage.collect,m=Math.ceil(d/e.progressFrequency);requestAnimationFrame(function t(f){var g=f;return function(){var f,v;for(v=g+m>d?d:g+m,f=g;f<v;f++)s._collectDataMergedMeshesByIdxId(l[f],i,n,o,e),f===v-1&&(v!==d?(e.dispatchEvent({type:r.EVENTS.ON_LOAD_PROGRESS,progress:{total:c,loaded:(f/h*p+u)*c}}),requestAnimationFrame(t(f+1))):(e.dispatchEvent({type:r.EVENTS.ON_LOAD_PROGRESS,progress:{total:c,loaded:(f/h*p+u)*c}}),a&&a()))}}(0))}else a&&a()}_makeMeshNodes(e,t){var i=e.manager,n=e.databagId;let a=e.fileId;var s=e.getEncodedDatabagId(),o=this._getNodeGroup(e),l=this.mapMaterialIdToMergedNode;for(var d in l){var h=this.getPropertyValueByMaterialKey(d),c=l[d];if(e.lightmap){var u=h.materialId;e.materialManager.updateLightmapMaterial(u)}for(var p=0,m=c.length;p<m;p++){var f=c[p].geometry,g=c[p].indices,v=null;if("lines"===h.type)(v=new r.LineSegmentsEx(f)).databagId=n,v.fileId=a;else{var y={databagId:n,fileId:a};(v=new r.MeshEx(f)).spawn(y)}r.GlobalData.EnableShadowMap&&(v.castShadow=e.castShadow,v.receiveShadow=e.receiveShadow),v._indicesGroup=g,o.add(v),c[p].mesh=v,i.addMeshToOctantMap(s,d,new r.BatchedCapsuleObject(d,v)),g=null,v=null}}o.updateMatrixWorld(!0),e.dispatchEvent({type:r.EVENTS.ON_LOAD_PROGRESS,progress:{total:e.getLoader().maxLoadTaskCount,loaded:e.getLoader().maxLoadTaskCount}}),t&&t()}createMeshNodes(e,t){e.getModelDescriptor().getStandardNodeInfos()?this._createGeometries(e,(function(){t&&t()})):t&&t()}applySelection(e){}clearSelection(e){}applyHover(e){}clearHover(e){}getMeshNode(){return this.mapMaterialIdToMergedNode}_disposeMergedGeometries(){for(var e in this.mapMaterialIdToMergedNode){for(var t=this.mapMaterialIdToMergedNode[e],i=0,r=t.length;i<r;i++){t[i].geometry.dispose(),delete t[i].geometry,delete t[i].indices,t[i].mesh._indicesGroup=null,delete t[i].mesh}delete this.mapMaterialIdToMergedNode[e]}}_getMaterialKeyByNodeInfo(e,t){var i=e.materialId;if(t){var n=t.manager.getOverrideMaterialByNodeInfo(e,t.materialManager.getMaterialById(e.materialId));n&&(i=n.name,e.materialId=i)}return r.Utils.getCombinedKeyString([e.materialId,e.uv?"1":"0",e.type===r.ModelView.BaseDescriptor.EnumNodeItemType.LINE?"lines":"meshes"])}getPropertyValueByMaterialKey(e){var t=r.Utils.splitCombinedKeyString(e);return{materialId:t[0],uvProp:t[1],type:t[2]}}clearSelectedObjectIds(){this.selectedObjectIds.length=0}cacheSelectedObjectIds(e,t,i){this.selectedObjectIds.push({uid:e,mKey:t,idx:i})}adjustVisibility(e,t){var i=this._getNodeGroup(e),r=i.visible;r!=t&&(t&&!i.bVisible||(i.visible=t),i.bVisible=r)}changeVisibilityOfSelectedObjects(e,t){if(t)for(n=0,a=this.selectedMeshes.length;n<a;n++)for(c=this.selectedMeshes[n].object,m=0,f=(u=this.selectedMeshes[n].indices).length;m<f;m++){(g=c.geometry.groups[u[m].idx]).start=u[m].start,g.count=u[m].count}else{this.selectedMeshes.length=0;for(var i={},n=0,a=this.selectedObjectIds.length;n<a;n++)i[this.selectedObjectIds[n].mKey+"&"+this.selectedObjectIds[n].idx]=!0;for(var s=Object.keys(i),n=0,a=s.length;n<a;n++){for(var o=s[n].split("&"),l=o[0],d=o[1],h=this.mapMaterialIdToMergedNode[l][d],c=h.mesh,u=[],p=h.geometry.groups,m=0,f=p.length;m<f;m++){var g;(g=p[m]).materialIndex===r.Model.EnumFilterState.SELECTED&&(u.push({idx:m,start:g.start,count:g.count}),g.start=0,g.count=0)}u.length&&this.selectedMeshes.push({object:c,indices:u})}}}changeVisibilityOfNonSelectedObjects(e,t){if(t)for(n=0,a=this.nonSelectedMeshes.length;n<a;n++){c=this.nonSelectedMeshes[n].object;if(u=this.nonSelectedMeshes[n].indices)for(d=0,h=u.length;d<h;d++){(m=c.geometry.groups[u[d].idx]).start=u[d].start,m.count=u[d].count}else c.visible=this.nonSelectedMeshes[n].visibility}else{this.nonSelectedMeshes.length=0;for(var i={},n=0,a=this.selectedObjectIds.length;n<a;n++){var s=this.selectedObjectIds[n];i[s.mKey]||(i[s.mKey]={}),i[s.mKey][s.idx]=!0}for(var o in this.mapMaterialIdToMergedNode){var l=this.mapMaterialIdToMergedNode[o];if(i[o])for(var d=0,h=l.length;d<h;d++){var c=l[d].mesh;if(i[o][d]){var u=[],p=c.geometry.groups;for(n=0,a=p.length;n<a;n++){var m;(m=p[n]).materialIndex!==r.Model.EnumFilterState.SELECTED&&(u.push({idx:n,start:m.start,count:m.count}),m.start=0,m.count=0)}u.length?this.nonSelectedMeshes.push({object:c,indices:u}):(this.nonSelectedMeshes.push({object:c,indices:null,visibility:c.visible}),c.visible=!1)}else this.nonSelectedMeshes.push({object:c,indices:null,visibility:c.visible}),c.visible=!1}else for(var n=0,a=l.length;n<a;n++){var c=l[n].mesh;this.nonSelectedMeshes.push({object:c,indices:null,visibility:c.visible}),c.visible=!1}}}}restoreVisibilityOfObjects(){this.selectedMeshes.length=0,this.nonSelectedMeshes.length=0}getBlinkMaterials(){return this.blinkMaterials}disposeBufferAfterVbo(){if(!this.bufferDestroyed){var e=0;for(var t in this.mapMaterialIdToMergedNode)for(var i=this.mapMaterialIdToMergedNode[t],n=0,a=i.length;n<a;n++){var s=i[n],o=s.geometry;if(null!==o){e++;var l=t+"-"+n;this.mapDestroyedBufferKey[l]||s.mesh.visible&&(this.mapDestroyedBufferKey[l]=!0,r.GlobalData.EnableSplitComponent?r.GeomUtil.disposeBufferFromGeometry(o,["normal","uv2"]):r.GeomUtil.disposeBufferFromGeometry(o,["normal","uv","uv2"]))}}Object.keys(this.mapDestroyedBufferKey).length===e&&(this.mapDestroyedBufferKey={},this.bufferDestroyed=!0)}}_traverseMeshNodeMap(e){for(var t in this.mapMaterialIdToMergedNode)for(var i=this.mapMaterialIdToMergedNode[t],r=0,n=i.length;r<n;r++)e&&e(t,i[r])}getGeometryBuffersByUserId(e,t){var i=[],r=e.getDatabagId(),n=this;return this._traverseMeshNodeMap((function(e,a){var s=a.indices[t];if(s)for(var o=a.geometry,l=o.getIndex().array,d=o.getAttribute("position").array,h=o.getAttribute("uv"),c=h?h.array:null,u="lines"===n.getPropertyValueByMaterialKey(e).type,p=0,m=s.length;p<m;p++){var f=s[p],g=f.indexStart,v=f.indexStart+f.indexCount,y=l.slice(g,v),M=null;c&&(v=(g=f.positionStart/3*2)+f.positionCount/3*2,M=c.slice(g,v)),g=f.positionStart,v=f.positionStart+f.positionCount;var E=d.slice(g,v);g/=3,y.forEach((function(e,t,i){i[t]-=g})),i.push({isLines:u,databagId:r,nodeId:f.nodeId,position:E,index:y,uv:M})}})),i}getPickingNodeGenerator(e){return e=null==e?"pick":e,this.pickingNodeGenerators||(this.pickingNodeGenerators={}),this.pickingNodeGenerators[e]||(this.pickingNodeGenerators[e]=new r.PickingBatchedMeshGenerator(this),this.pickingNodeGenerators[e].reserveMaterial=!!e.startsWith("glow")),this.pickingNodeGenerators[e]}}r.ModelView.BatchedMeshManager=e}(),r.ModelView.BatchedWireframeManager=class{constructor(e){this.manager=e,this.generated=!1,this.wireframeLineSegment=null,this.wireframeGeometryMap=null,this.userIdMapForNoWireFrame={}}destroy(){if(this.clearData(),this.manager=null,this.userIdMapForNoWireFrame=null,this.pickingNodeGenerators){for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].destroy();this.pickingNodeGenerators=null}}clearData(){if(this.generated=!1,this.bufferDestroyed=!1,this.wireframeLineSegment&&(this.wireframeLineSegment._indicesGroup=null,this.wireframeLineSegment.geometry.dispose(),this.wireframeLineSegment=null),this.pickingNodeGenerators)for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].clearData();this.wireframeGeometryMap=null,this.userIdMapForNoWireFrame={}}_createWireframeGeometry(e,t){if(this.wireframeGeometryMap||(this.wireframeGeometryMap={}),!this.wireframeGeometryMap[t.nodeId]){for(var i=e.attributes.position.array.slice(t.positionStart,t.positionStart+t.positionCount),n=e.getIndex().array.slice(t.indexStart,t.indexStart+t.indexCount),a=0,s=n.length;a<s;a++)n[a]-=t.positionStart/3;var o=r.BuildEdge(i,n),l=new THREE.BufferGeometry;l.setIndex(new THREE.Uint32BufferAttribute(o,1)),l.setAttribute("position",new THREE.BufferAttribute(Float32Array.from(i),3)),l._userId=t.userId,this.wireframeGeometryMap[t.nodeId]=l}}_createWireframeGeometries(e){var t=e.getFilter(),i=e.getModelDescriptor().getStandardNodeInfos();function r(e){var r=i[e];return r&&t.getWireFrameVisibilityCondition()?!!t._isRenderWithWireFrame(r[0]):!(r&&t._hasRenderWithBoardlineFilter()&&!t._isRenderWithBoardline(r[0]))}var n=this.manager.getMeshNode();for(var a in n)if("meshes"===this.manager.getPropertyValueByMaterialKey(a).type)for(var s=n[a],o=0,l=s.length;o<l;o++){var d=s[o],h=d.geometry;if(null!==h){var c=d.indices;for(var u in c){r(u)||(this.userIdMapForNoWireFrame[u]=!0);for(var p=c[u],m=0,f=p.length;m<f;m++)this._createWireframeGeometry(h,p[m])}}}return!0}_makeWireframe(e){var t={},i=e.getWireframeMaterial();for(var n in this.wireframeGeometryMap){var a=this.wireframeGeometryMap[n],s=a._userId,o=new THREE.LineSegments(a,i);o.name=s,o.nodeId=s,t[s]||(t[s]=[]),t[s].push(o),o=null}var l=[];for(var s in t)for(var d=t[s],h=0,c=d.length;h<c;h++)l.push(d[h]);if(l.length>0){var u={},p=r.GeomUtil.mergeBufferGeometries(l,u);p&&(this.wireframeLineSegment=new THREE.LineSegments(p,e.getWireframeMaterial()),this.wireframeLineSegment._indicesGroup=u)}for(var s in l=null,t)delete t[s];t=null,this.wireframeGeometryMap=null}generateWireframe(e,t){this.generated||(this._createWireframeGeometries(e),this._makeWireframe(e),this.generated=!0,t&&t())}update(e){if(this.manager.hasNodeInfo(e))if(e.isActivateWireframe()){if(this.wireframeLineSegment){var t=this._getNodeGroup(e);t.clear(),t.add(this.wireframeLineSegment),t.updateMatrixWorld(!0)}}else e._hasNodeGroup(r.ObjectGroupType.WIREFRAME)&&e._removeNodeGroup(r.ObjectGroupType.WIREFRAME)}rebuildIndices(e){if(this.needDealWireframeLine(e)){this.wireframeLineSegment.visible=!0;var t=this.wireframeLineSegment._indicesGroup,i=this.wireframeLineSegment.geometry;i.clearGroups();var r=e.getWireframeMaterial();this.wireframeLineSegment.material=r;var n=this.manager.getFilteredUserIdsForWireFrame(),a=!(!n||!Object.keys(n).length);if(this._existHiddenUserId()||a){var s,o,l=[],d=[];for(var h in t)if(!this._isHiddenUserId(h)){var c=t[h];if(c&&c.length>0){if(n[h]){var u=n[h],p=l.indexOf(u);for(-1===p&&(l.push(u),p=l.length-1),s=0,o=c.length;s<o;s++)d.push({indexStart:c[s].indexStart,indexCount:c[s].indexCount,state:1+p});continue}for(s=0,o=c.length;s<o;s++)d.push({indexStart:c[s].indexStart,indexCount:c[s].indexCount,state:0})}}if(0!==d.length){for(d.sort((function(e,t){return e.indexStart-t.indexStart})),s=0,o=d.length;s<o;s++){var m=d[s].indexStart,f=d[s].indexCount,g=d[s].state;if(0===s)i.addGroup(m,f,g);else{var v=d[s-1].indexStart,y=d[s-1].indexCount;g===d[s-1].state&&m===v+y?i.groups[i.groups.length-1].count+=f:i.addGroup(m,f,g)}}var M=e.getFilter(),E=[r];for(s=0,o=l.length;s<o;s++){var b=M._getMaterialByName(l[s]);E.push(b)}this.wireframeLineSegment.material=E}else this.wireframeLineSegment.visible=!1}}}explode(e){if(this.wireframeLineSegment){var t=this.wireframeLineSegment._indicesGroup,i=this.wireframeLineSegment.geometry;for(var r in t){var n=t[r];if(n)for(var a=e.modelExplosion.getExplosionTranslation(r),s=0,o=n.length;s<o;s++){var l=n[s].indexStart;d(i,l,l+n[s].indexCount,a)}}}function d(e,t,i,r){for(var n=e.getAttribute("position").array,a=e.getIndex().array,s={},o=t;o<i;o++){var l=a[o];s[l]||(n[3*l]+=r.x,n[3*l+1]+=r.y,n[3*l+2]+=r.z,s[l]=!0)}e.getAttribute("position").needsUpdate=!0,s=null}}_getNodeGroup(e){return e._getNodeGroup(r.ObjectGroupType.WIREFRAME,{globalSpace:!0})}needDealWireframeLine(e){return!(!e.isActivateWireframe()||!this.wireframeLineSegment)}adjustVisibility(e,t){if(this.needDealWireframeLine(e)){var i=this._getNodeGroup(e),r=i.visible;r!=t&&(t&&!i.bVisible||(i.visible=t),i.bVisible=r)}}changeVisibilityOfSelectedObjects(e,t){}changeVisibilityOfNonSelectedObjects(e,t){this.adjustVisibility(e,t)}restoreVisibilityOfObjects(){}disposeBufferAfterVbo(){this.generated&&!this.bufferDestroyed&&this.wireframeLineSegment&&this.wireframeLineSegment.visible&&(this.bufferDestroyed=!0,r.GeomUtil.disposeBufferFromGeometry(this.wireframeLineSegment.geometry,["normal","uv","uv2"]))}_existHiddenUserId(){var e=this.manager.getHiddenUserIds();return!!(this.userIdMapForNoWireFrame&&Object.keys(this.userIdMapForNoWireFrame).length||e&&Object.keys(e).length)}_isHiddenUserId(e){if(this.userIdMapForNoWireFrame[e])return!0;var t=this.manager.getHiddenUserIds();return!(!t||!t[e])}getWireFrameLineSegments(){return this.wireframeLineSegment?[this.wireframeLineSegment]:null}getPickingNodeGenerator(e){return e=null==e?"pick":e,this.pickingNodeGenerators||(this.pickingNodeGenerators={}),this.pickingNodeGenerators[e]||(this.pickingNodeGenerators[e]=new r.PickingBatchedWireFrameGenerator(this)),this.pickingNodeGenerators[e]}},r.ModelView.BatchedManager=class{constructor(e){this.meshManager=new r.ModelView.BatchedMeshManager(this),this.wireframeManager=e?new r.ModelView.DataBatchedWireframeManager(this):new r.ModelView.BatchedWireframeManager(this)}destroy(){this.meshManager.destroy(),this.meshManager=null,this.wireframeManager.destroy(),this.wireframeManager=null,this._clearFilteredState(),this._clearSelectedState(),this._clearHoveredState(),this._clearBlinkedState()}updateNodes(e){this.meshManager.update(e),this.wireframeManager.update(e)}generateWireframe(e,t){this.wireframeManager.generateWireframe(e,t)}asyncGenerateWireframe(e,t){this.wireframeManager.asyncGenerateWireframe(e,t)}rebuildIndices(e){this._rebuildIndices(e)}clearData(){this.meshManager.clearData(),this.wireframeManager.clearData(),this._clearFilteredState(),this._clearSelectedState(),this._clearHoveredState(),this._clearBlinkedState()}createMeshNodes(e,t){this.meshManager.createMeshNodes(e,t)}asyncCreateMeshNodes(e,t,i){this.meshManager.asyncCreateMeshNodes(e,t,i)}hasNodeInfo(e){return!!e.getModelDescriptor().getStandardNodeInfos()}disposeGeometry(e){this.meshManager.disposeGeometry(e)}getMeshNode(){return this.meshManager.getMeshNode()}getPropertyValueByMaterialKey(e){return this.meshManager.getPropertyValueByMaterialKey(e)}getFilteredUserIds(){return this.mapMaterialIdToUserIdsForFilter}getSelectedUserIds(){return this.mapMaterialIdToUserIdsForSelection}getHoveredUserIds(){return this.mapMaterialIdToUserIdsForHover}getBlinkedUserIds(){return this.mapBlinkUserIds}getHiddenUserIds(){return this.hiddenUserIdSetObject}getTransparentUserIds(){return this.transparentUserIdSetObject}applyFilter(e,t){if(this.hasNodeInfo(e)){var i;i=t||e.getModelDescriptor().getStandardUserIds();var r=e.getModelDescriptor().getStandardNodeInfos();this._collectFilteredUserIds(e,i,r),this._collectFilteredUserIdsForWireFrame(e,i,r),this._collectSelectedUserIds(e.manager.sceneState.selectionSet,r),this._collectHoveredUserIds(e.manager.sceneState.hoverId,r),this._rebuildIndices(e),this.updateNodes(e)}}applySelection(e){if(this.hasNodeInfo(e)){var t=e.getModelDescriptor().getStandardNodeInfos();this._clearSelectedState(e),this._clearHoveredState(e),this._collectSelectedUserIds(e.manager.sceneState.selectionSet,t),this._collectHoveredUserIds(e.manager.sceneState.hoverId,t),this._rebuildIndices(e),this.updateNodes(e)}}clearSelection(e){this._clearSelectedState(e),this.applyHover(e)}applyHover(e){if(this.hasNodeInfo(e)){var t=e.getModelDescriptor().getStandardNodeInfos();this._clearHoveredState(e),this._collectHoveredUserIds(e.manager.sceneState.hoverId,t),this._rebuildIndices(e),this.updateNodes(e)}}clearHover(e){this._clearHoveredState(e),this._rebuildIndices(e),this.updateNodes(e)}applyBlink(e){if(this.hasNodeInfo(e)){var t=e.getModelDescriptor().getStandardNodeInfos();this._clearBlinkedState(e),this._clearHoveredState(e),this._collectBlinkedUserIds(e.manager.sceneState.getBlinkComponentsIdMap(e.id),t),this._collectHoveredUserIds(e.manager.sceneState.hoverId,t),this._rebuildIndices(e),this.updateNodes(e)}}clearBlink(e){this._clearBlinkedState(e),this.applyHover(e)}applyReplacement(e){this._rebuildIndices(e),this.updateNodes(e)}_collectFilteredUserIds(e,t,i){var n=e.getFilter(),a=n._hasHiddenFileIdFilter(),s=n._hasVisibleFilter(),o=n._hasOverrideMaterialFilter(),l=n._hasTransparentFilter(),d=e.hasReplacedUserId(),h=e.hasHiddenSourceObjectUserId(),c=this.mapMaterialIdToUserIdsForFilter={};if(this.hiddenUserIdSetObject={},this.overrideUserIdSetObject={},this.transparentUserIdSetObject={},a||s||o||l||d||h)for(var u=0;u<t.length;++u){var p=t[u],m=i[p];if(m&&m.length)for(var f=0,g=m.length;f<g;f++){var v=m[f];if(a&&n._isHiddenFileId(v)||s&&!1===n._isVisible(v)||e.isReplacedUserId(p)||e.isHiddenSourceObjectUserId(p))void 0===c[v.materialId]&&(c[v.materialId]={}),void 0===c[v.materialId][r.Model.EnumFilterState.HIDDEN]&&(c[v.materialId][r.Model.EnumFilterState.HIDDEN]={}),c[v.materialId][r.Model.EnumFilterState.HIDDEN][p]=!0,this.hiddenUserIdSetObject[p]=!0;else if(l&&n._isTransparent(v))void 0===c[v.materialId]&&(c[v.materialId]={}),void 0===c[v.materialId][r.Model.EnumFilterState.TRANSPARENT]&&(c[v.materialId][r.Model.EnumFilterState.TRANSPARENT]={}),c[v.materialId][r.Model.EnumFilterState.TRANSPARENT][p]=!0,this.transparentUserIdSetObject[p]=!0;else if(o&&n._hasOverrideMaterial(v)){var y=n._getOverrideMaterial(v),M=null!=y?y.name:"";""!==M&&(void 0===c[v.materialId]&&(c[v.materialId]={}),void 0===c[v.materialId][r.Model.EnumFilterState.OVERRIDED]&&(c[v.materialId][r.Model.EnumFilterState.OVERRIDED]={}),c[v.materialId][r.Model.EnumFilterState.OVERRIDED][p]=M,this.overrideUserIdSetObject[p]=M)}}}}_collectFilteredUserIdsForWireFrame(e,t,i){var r=e.getFilter(),n=r._hasOverrideMaterialFilterForWireFrame();if(this.mapFilteredUserIdsForWireFrame={},n)for(var a=0;a<t.length;++a){var s=t[a];if(!this.hiddenUserIdSetObject[s]){var o=i[s];if(o&&o.length)for(var l=0,d=o.length;l<d;l++){var h=o[l];if(r._hasOverrideMaterialForWireFrame(h)){var c=r._getOverrideMaterialForWireFrame(h),u=null!=c?c.name:"";""!==u&&(this.mapFilteredUserIdsForWireFrame[s]=u)}}}}}_clearFilteredState(){this.mapMaterialIdToUserIdsForFilter=null}_collectSelectedUserIds(e,t){var i=this.mapMaterialIdToUserIdsForSelection={};for(var r in e){var n=t[r];if(n&&n.length)for(var a=0,s=n.length;a<s;a++)void 0===i[n[a].materialId]&&(i[n[a].materialId]={}),void 0===i[n[a].materialId][r]&&(i[n[a].materialId][r]=!0)}}_clearSelectedState(){this.mapMaterialIdToUserIdsForSelection&&(this.mapMaterialIdToUserIdsForSelection=null)}_collectHoveredUserIds(e,t){var i=this.mapMaterialIdToUserIdsForHover={};if(e&&t[e])for(var r=t[e],n=0,a=r.length;n<a;n++)void 0===i[r[n].materialId]&&(i[r[n].materialId]={}),void 0===i[r[n].materialId][e]&&(i[r[n].materialId][e]=!0)}_clearHoveredState(){this.mapMaterialIdToUserIdsForHover&&(this.mapMaterialIdToUserIdsForHover=null)}_collectBlinkedUserIds(e,t){var i=this.mapBlinkUserIds={};for(var r in e){var n=t[r];if(n&&n.length)for(var a=0,s=n.length;a<s;a++)void 0===i[n[a].materialId]&&(i[n[a].materialId]={}),void 0===i[n[a].materialId][r]&&(i[n[a].materialId][r]=!0)}}clearClippingIdsForBox(){this.meshManager.clearClippingIdsForBox()}calculateClippingIds(e,t,i,r){this.meshManager.calculateClippingIds(e,t,i,r)}calculateClippingContours(e,t,i,r,n,a){this.meshManager.calculateClippingContours(e,t,i,r,n,a)}_clearBlinkedState(){this.mapBlinkUserIds&&(this.mapBlinkUserIds=null)}_rebuildIndices(e){this.meshManager.rebuildIndices(e),this.wireframeManager.rebuildIndices(e)}clearCachedData(){this.meshManager.clearAllNodeBuffer()}getMeshesByUserIds(e,t,i){this.meshManager.getMeshesByUserIds(e,t,i)}adjustVisibility(e,t){this.meshManager.adjustVisibility(e,t),this.wireframeManager.adjustVisibility(e,t)}changeVisibilityOfSelectedObjects(e,t){this.meshManager.changeVisibilityOfSelectedObjects(e,t),this.wireframeManager.changeVisibilityOfSelectedObjects(e,t)}changeVisibilityOfNonSelectedObjects(e,t){this.meshManager.changeVisibilityOfNonSelectedObjects(e,t),this.wireframeManager.changeVisibilityOfNonSelectedObjects(e,t)}restoreVisibilityOfObjects(){this.meshManager.restoreVisibilityOfObjects(),this.wireframeManager.restoreVisibilityOfObjects()}disposeBufferAfterVbo(){this.meshManager.disposeBufferAfterVbo(),this.wireframeManager.disposeBufferAfterVbo()}getGeometryBuffersByUserId(e,t){return this.meshManager.getGeometryBuffersByUserId(e,t)}explode(e){this.meshManager.explode(e),this.wireframeManager.explode(e)}isPickableNode(e){var t=this.getHiddenUserIds();if(t&&t[e])return!1;var i=this.getTransparentUserIds();return!i||!i[e]}isHiddenNode(e){var t=this.getHiddenUserIds();return!(!t||!t[e])}getMeshManager(){return this.meshManager}getWireFrameManager(){return this.wireframeManager}getFilteredUserIdsForWireFrame(){return this.mapFilteredUserIdsForWireFrame}},function(){class e extends r.ModelView.BatchedBaseHandler{constructor(e,t){super(e),this.defaultManager=new r.ModelView.BatchedManager(t),this.instancedManager=new r.ModelView.InstancedManager,this.loader=new r.ModelView.BatchedLoader(this)}}r.ModelView.BatchedHandler=e}(),function(){class e extends r.ModelView.BaseLoader{constructor(e){super(e),this.descriptor=null,this.enableBmpkMerged=!1,this.bmpkPkgIndex=null}praseBmpkPkgIndex(e){var t=this,i=this.url,n=this.fileLoader;t.bmpkPkgIndex={};const a=i.bmpkPkgIndexUrl();r.Storage.IndexedDBHelper.loadWithStorage("ModelData",a,(()=>new Promise(((e,t)=>{n.setResponseType("json"),n.load(a,e,void 0,t)}))),(i=>{for(var r in i.bmpks){var n=i.bmpks[r],a=parseInt(r.substring(5,r.length));for(var s in t.bmpkPkgIndex[a]={},n)t.bmpkPkgIndex[a][s]=n[s]}t._loadAllMpks(e)}))}loadSceneAndMpks(e){var t=this;e.bmpk_merged&&(t.enableBmpkMerged=!0),t.url.mpkUrl=t.url.bmpkUrl,e.symbol?this._loadSymbol((function(){t._loadScene(0)})):t._loadScene(0),t._loadBMpkIndex(),e.lines&&t._loadLine(),e.bmpks&&(t.enableBmpkMerged?t.praseBmpkPkgIndex(e.bmpks):t._loadAllMpks(e.bmpks)),r.GlobalData.BorderLineDelayLoaded||t._loadAllBorderlines(e)}getSceneTaskCount(e){var t=2;return t+=e.symbol,t+=e.lines,t+=e.bmpks,r.GlobalData.BorderLineDelayLoaded||(t+=this.getAllBorderlineCount()),t}_loadBMpkIndex(){var e=this,t=this.url,i=this.fileLoader;const n=t.bmpkIndexUrl();r.Storage.IndexedDBHelper.loadWithStorage("ModelData",n,(()=>new Promise(((e,t)=>{i.setResponseType("arraybuffer"),i.load(n,e,void 0,t)}))),(t=>{e._paserBMeshId(t),e._onTaskFinished()}),(t=>{e.model.dispatchEvent({type:r.LOADERROREVENTS.LOAD_ERROR,errorType:r.LOADERROREVENTS.LOAD_USERID_ERROR,event:t}),e._onTaskFinished()}))}_paserBMeshId(e){this.descriptor.bmeshIdReader=new r.Loader.BMeshIdReader(e)}_parseReferencedMeshBufferData(e,t,i,n,a,s){var o=[],l=this.model.getVersion();r.Compatibility.isUseMergeTextureOptimize(l)||a&&i>0&&(s=e.hasUV(t));for(var d=void 0!==s?!s:void 0,h=t;h<i;++h){var c=e.getOffsetIndexInfo(h,d);c&&o.push(c)}var u=o.length,p=4*o[0].positionStart,m=4*(o[u-1].positionStart+o[u-1].positionCount),f=e.vBuffer.slice(p,m),g=4*o[0].indexStart,v=4*(o[u-1].indexStart+o[u-1].indexCount),y=e.iBuffer.slice(g,v);if(a){var M=new Uint32Array(y),E=o[0].positionStart/3;M.forEach((function(e,t,i){i[t]-=E})),y=M}var b,x=e.getMeshData(t).nOffset,I=e.getMeshData(i-1).nOffset+3*e.getMeshData(i-1).ptCount*4,T=e.nBuffer.slice(x,I);if(d)b=null;else if(a){var C=4*o[0].uvStart,w=4*(o[u-1].uvStart+o[u-1].uvCount);b=e.tBuffer.slice(C,w)}else b=e.tBuffer.slice();var S=o[0].positionStart,A=o[0].indexStart,B=o[0].uvStart;if(0!=S)for(h=0;h<u;++h)o[h].positionStart-=S,o[h].indexStart-=A,o[h].uvStart-=B;this.descriptor.cacheReferencedMeshBufferData(n,{P:f,I:y,N:T,UV:b,IndexInfos:o})}_parseMpk(e,t){var i=new r.Loader.BMPKReader(e),n=this;if(n.enableBmpkMerged){var a=65536*t;if(t in n.bmpkPkgIndex){var s=Object.keys(n.bmpkPkgIndex[t]).length;if(1===s)n._parseReferencedMeshBufferData(i,0,i.header.meshCount,a);else{for(var o,l=n.bmpkPkgIndex[t],d=0,h=1;h<=s-1;h++){var c=l[h].mesh_index,u=a+d;o=l[h-1].texture,n._parseReferencedMeshBufferData(i,d,c,u,!0,o),d=c}d=l[s-1].mesh_index,o=l[s-1].texture;u=a+d;n._parseReferencedMeshBufferData(i,d,i.header.meshCount,u,!0,o)}}else n._parseReferencedMeshBufferData(i,0,i.header.meshCount,a)}else n._parseReferencedMeshBufferData(i,0,i.header.meshCount,t);i=null}}r.ModelView.DataBatchedBaseLoader=e}(),function(){class e extends r.ModelView.DataBatchedBaseLoader{constructor(e){super(e),this.descriptor=new r.ModelView.DataBatchedDescriptor}}r.ModelView.DataBatchedLoader=e}(),function(){class e extends r.ModelView.DefaultDescriptor{constructor(){super(),this.bmeshIdReader=null}destroy(){super.destroy(),this.bmeshIdReader=null}convertGeometryId(e){var t=this.bmeshIdReader.getBMeshId(e);return void 0===t&&(t=e),t}}r.ModelView.DataBatchedDescriptor=e}(),r.ModelView.DataBatchedWireframeManager=class{constructor(e){this.manager=e,this.generated=!1,this.wireframeLineSegments=[],this.parameterizedShapeWireframeBufferMap={},this.userIdMapForNoWireFrame={},this.processedThresholdPerShared=1e3,this.splitSegmentEnabled=!0,this.splitCountPerSegment=1e4}destroy(){this.manager=null,this.userIdMapForNoWireFrame=null;for(var e=0,t=this.wireframeLineSegments.length;e<t;e++)this.wireframeLineSegments[e]._indicesGroup=null,this.wireframeLineSegments[e].geometry.dispose(),this.wireframeLineSegments[e]=null;if(this.wireframeLineSegments=null,this.pickingNodeGenerators){for(var i in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(i)&&this.pickingNodeGenerators[i].destroy();this.pickingNodeGenerators=null}this.parameterizedShapeWireframeBufferMap=null}clearData(){this.generated=!1,this.userIdMapForNoWireFrame={};for(var e=0,t=this.wireframeLineSegments.length;e<t;e++)this.wireframeLineSegments[e]._indicesGroup=null,this.wireframeLineSegments[e].geometry.dispose(),this.wireframeLineSegments[e]=null;if(this.wireframeLineSegments=[],this.pickingNodeGenerators)for(var i in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(i)&&this.pickingNodeGenerators[i].clearData()}_needWireframing(e,t){var i=e.getFilter(),r=e.getModelDescriptor().getStandardNodeInfos();return!(!r||!r[t.userId]||(i.getWireFrameVisibilityCondition()?!i._isRenderWithWireFrame(t):i._hasRenderWithBoardlineFilter()&&!i._isRenderWithBoardline(t)))}_getWireframeBufferByIdForParameterizedShape(e,t){var i=this.parameterizedShapeWireframeBufferMap;if(i[e])return i[e];i[e]=[];for(var n=0,a=t.length;n<a;n++){var s=t[n];i[e].push({index:r.BuildEdge(s.attributes.position.array,s.index.array),position:s.attributes.position.array})}return i[e]}_dealWireframesForParameterizedShape(e){if(!r.GlobalData.Instance){for(var t=e.getModelDescriptor().getNodeInfosWithParameterizedDesc(),i={},n=e.getWireframeMaterial(),a=Object.keys(t),s=0,o=a.length;s<o;s++)for(var l=t[a[s]],d=0,h=l.length;d<h;d++){var c=l[d];this._needWireframing(e,c)||(this.userIdMapForNoWireFrame[c.userId]=!0);var u=this.manager.meshManager.getGeometryByNodeInfo(e,c);u instanceof Array||(u=[u]);for(var p=this._getWireframeBufferByIdForParameterizedShape(c.geometryId,u),m=0,f=p.length;m<f;m++){var g=p[m].index,v=p[m].position.slice();r.GeomUtil.applyMatrix4ToBuffer(c.matrix,v);var y=new THREE.BufferGeometry;y.setIndex(new THREE.Uint32BufferAttribute(g,1)),y.setAttribute("position",new THREE.BufferAttribute(v,3));var M=new THREE.LineSegments(y,n);M.name=c.userId,M.nodeId=c.userId,M.materialId=c.materialId,i[c.userId]||(i[c.userId]=[]),i[c.userId].push(M)}}var E=[];for(var b in i)for(var x=i[b],I=(m=0,x.length);m<I;m++)E.push(x[m]);if(E.length>0){var T={},C=r.GeomUtil.mergeBufferGeometries(E,T);if(C){var w=new THREE.LineSegments(C,n);w._indicesGroup=T,this.wireframeLineSegments.push(w)}}}}_dealSharedBorderLines(e){var t=e.getModelDescriptor().getSharedBorderLineCache();if(t){for(var i=e.getModelDescriptor().getStandardNodeInfosOnGeometryId(),n={},a=e.getWireframeMaterial(),s=this.processedThresholdPerShared,o=0,l=t.length;o<l;o++)for(var d=t[o],h=d.IndexInfos,c=0,u=h.length;c<u;c++){var p=h[c],m=i[e.getModelDescriptor().convertGeometryId(p.meshId)];if(m&&!(m.length>s))for(var f=new Uint32Array(d.I),g=new Float32Array(d.P),v=0,y=m.length;v<y;v++){var M=m[v];this._needWireframing(e,M)||(this.userIdMapForNoWireFrame[M.userId]=!0);var E=g.slice(p.positionStart,p.positionStart+p.positionCount),b=p.positionStart/3,x=f.slice(p.indexStart,p.indexStart+p.indexCount);x.forEach((function(e,t,i){i[t]-=b})),r.GeomUtil.applyMatrix4ToBuffer(M.matrix,E);var I=new THREE.BufferGeometry;I.setIndex(new THREE.Uint32BufferAttribute(x,1)),I.setAttribute("position",new THREE.BufferAttribute(E,3));var T=new THREE.LineSegments(I,a);T.name=M.userId,T.nodeId=M.userId,T.materialId=M.materialId,n[M.userId]||(n[M.userId]=[]),n[M.userId].push(T)}}var C=[];for(var w in n)for(var S=n[w],A=(c=0,S.length);c<A;c++)C.push(S[c]);if(!(C.length<1))if(this.splitSegmentEnabled){var B=this.splitCountPerSegment,R=Math.floor(C.length/B),D=C.length%B;for(c=0;c<R;c++){var O=C.slice(c*B,(c+1)*B),L={};(P=r.GeomUtil.mergeBufferGeometries(O,L))&&((N=new THREE.LineSegments(P,a))._indicesGroup=L,this.wireframeLineSegments.push(N))}D&&(O=C.slice(R*B,R*B+D),L={},(P=r.GeomUtil.mergeBufferGeometries(O,L))&&((N=new THREE.LineSegments(P,a))._indicesGroup=L,this.wireframeLineSegments.push(N)))}else{var P,N;L={},(P=r.GeomUtil.mergeBufferGeometries(C,L))&&((N=new THREE.LineSegments(P,a))._indicesGroup=L,this.wireframeLineSegments.push(N))}}}_dealUniqueBorderLines(e){var t=e.getModelDescriptor().getUniqueBorderLineCache();if(t)for(var i=e.getModelDescriptor().getStandardNodeInfosOnGeometryId(),r={},n=0,a=t.length;n<a;n++){for(var s=t[n],o=s.IndexInfos,l=0,d=o.length;l<d;l++){var h=o[l],c=i[e.getModelDescriptor().convertGeometryId(h.meshId)];if(c)for(var u=0,p=c.length;u<p;u++){var m,f,g=c[u];r[g.userId]||(r[g.userId]=[]),this._needWireframing(e,g)||(this.userIdMapForNoWireFrame[g.userId]=!0),m=h.indexStart,f=h.indexCount,r[g.userId].push({nodeId:g.nodeId,indexStart:m,indexCount:f,materialId:g.materialId})}}var v=new THREE.BufferGeometry;v.setIndex(new THREE.Uint32BufferAttribute(new Uint32Array(s.I),1)),v.setAttribute("position",new THREE.BufferAttribute(new Float32Array(s.P),3));var y=new THREE.LineSegments(v,e.getWireframeMaterial());y._indicesGroup=r,this.wireframeLineSegments.push(y)}}_createWireframeGeometries(e){this._dealWireframesForParameterizedShape(e),this._dealUniqueBorderLines(e),this._dealSharedBorderLines(e)}generateWireframe(e,t){e.isActivateWireframe()&&(this.generated||(this._createWireframeGeometries(e),this.generated=!0))}_asyncDealSharedBorderLines(e,t){var i=e.getModelDescriptor().getSharedBorderLineCache();if(i)for(var n=e.getModelDescriptor().getStandardNodeInfosOnGeometryId(),a={},s=e.getWireframeMaterial(),o=i.length,l=0,d=this,h=0;h<o;h++){var c=i[h];r.Utils.asyncProcess(c,c.IndexInfos.length,10,(function(t,i){var o=t,l=o.IndexInfos[i],h=e.getModelDescriptor().convertGeometryId(l.meshId),c=n[h];if(c)for(var u=new Uint32Array(o.I),p=new Float32Array(o.P),m=0,f=c.length;m<f;m++){var g=c[m];d._needWireframing(e,g)||(d.userIdMapForNoWireFrame[g.userId]=!0);var v=p.slice(l.positionStart,l.positionStart+l.positionCount),y=l.positionStart/3,M=u.slice(l.indexStart,l.indexStart+l.indexCount);M.forEach((function(e,t,i){i[t]-=y})),r.GeomUtil.applyMatrix4ToBuffer(g.matrix,v);var E=new THREE.BufferGeometry;E.setIndex(new THREE.Uint32BufferAttribute(M,1)),E.setAttribute("position",new THREE.BufferAttribute(v,3));var b=new THREE.LineSegments(E,s);b.name=g.userId,b.nodeId=g.userId,a[g.userId]||(a[g.userId]=[]),a[g.userId].push(b)}}),(function(){if(++l===o){var e=[];for(var i in a)for(var n=a[i],h=0,c=n.length;h<c;h++)e.push(n[h]);if(e.length>0){var u={},p=r.GeomUtil.mergeBufferGeometries(e,u);if(p){var m=new THREE.LineSegments(p,s);m._indicesGroup=u,d.wireframeLineSegments.push(m)}}t&&t()}}))}else t&&t()}_asyncDealUniqueBorderLines(e,t){var i=e.getModelDescriptor().getUniqueBorderLineCache();if(i)for(var n=e.getModelDescriptor().getStandardNodeInfosOnGeometryId(),a={},s=this,o=0,l=i.length,d=0;d<l;d++){var h=i[d];r.Utils.asyncProcess(h,h.IndexInfos.length,10,(function(t,i){var r=t.IndexInfos[i],o=e.getModelDescriptor().convertGeometryId(r.meshId),l=n[o];if(l)for(var d=0,h=l.length;d<h;d++){var c,u,p=l[d];a[p.userId]||(a[p.userId]=[]),s._needWireframing(e,p)||(s.userIdMapForNoWireFrame[p.userId]=!0),c=r.indexStart,u=r.indexCount,a[p.userId].push({nodeId:p.nodeId,indexStart:c,indexCount:u})}}),(function(i){o++;var r=i,n=new THREE.BufferGeometry;n.setIndex(new THREE.Uint32BufferAttribute(new Uint32Array(r.I),1)),n.setAttribute("position",new THREE.BufferAttribute(new Float32Array(r.P),3));var d=new THREE.LineSegments(n,e.getWireframeMaterial());d._indicesGroup=a,s.wireframeLineSegments.push(d),o===l&&t&&t()}))}else t&&t()}_asyncCreateWireframeGeometries(e,t){var i=this;this._dealWireframesForParameterizedShape(e),this._asyncDealUniqueBorderLines(e,(function(){i._asyncDealSharedBorderLines(e,(function(){t&&t()}))}))}asyncGenerateWireframe(e,t){e.isActivateWireframe()&&(this.generated||(this._asyncCreateWireframeGeometries(e,t),this.generated=!0))}update(e){if(this.manager.hasNodeInfo(e))if(e.isActivateWireframe()){if(this.wireframeLineSegments.length){var t=this._getNodeGroup(e);t.clear();for(var i=0,n=this.wireframeLineSegments.length;i<n;i++)t.add(this.wireframeLineSegments[i]);t.updateMatrixWorld(!0)}}else e._hasNodeGroup(r.ObjectGroupType.WIREFRAME)&&e._removeNodeGroup(r.ObjectGroupType.WIREFRAME)}rebuildIndicesForLineSegment(e,t){t.visible=!0;var i=t._indicesGroup,r=t.geometry;r.clearGroups();var n=e.getWireframeMaterial();t.material=n;var a,s,o=this.manager.getFilteredUserIdsForWireFrame(),l=null;(E=e.getFilter())&&(l=E.getLocalClippingList());var d=[],h=[];for(var c in i)if(!this._isHiddenUserId(c)){var u=i[c];if(u&&u.length>0){if(l&&l[c]){var p="localClipping|"+c;o&&o[c]&&(p+="|override|"+o[c]),d.push(p);var m=d.length-1;for(a=0,s=u.length;a<s;a++)h.push({indexStart:u[a].indexStart,indexCount:u[a].indexCount,state:1+m});continue}if(o&&o[c]){for(p=o[c],-1===(m=d.indexOf(p))&&(d.push(p),m=d.length-1),a=0,s=u.length;a<s;a++)h.push({indexStart:u[a].indexStart,indexCount:u[a].indexCount,state:1+m});continue}for(a=0,s=u.length;a<s;a++)h.push({indexStart:u[a].indexStart,indexCount:u[a].indexCount,state:0})}}if(0!==h.length){for(h.sort((function(e,t){return e.indexStart-t.indexStart})),a=0,s=h.length;a<s;a++){var f=h[a].indexStart,g=h[a].indexCount,v=h[a].state;if(0===a)r.addGroup(f,g,v);else{var y=h[a-1].indexStart,M=h[a-1].indexCount;v===h[a-1].state&&f===y+M?r.groups[r.groups.length-1].count+=g:r.addGroup(f,g,v)}}var E=e.getFilter(),b=[n];for(a=0,s=d.length;a<s;a++){var x,I=d[a].split("|");if("localClipping"==I[0]){var T=l[I[1]].wireframeMaterialName,C=E.getMaterialForClipBy(T);if(I[2]&&"override"==I[2]){var w=T+I[2]+I[3];x=E.getMaterialForClipBy(w,C);var S=E._getMaterialByName(I[3]);x.copy(S)}else x=C;x.clippingPlanes=C.clippingPlanes}else x=E._getMaterialByName(d[a]);b.push(x)}t.material=b}else t.visible=!1}rebuildIndices(e){if(this.needDealWireframeLine(e))for(var t=0,i=this.wireframeLineSegments.length;t<i;t++)this.rebuildIndicesForLineSegment(e,this.wireframeLineSegments[t])}_getNodeGroup(e){return e._getNodeGroup(r.ObjectGroupType.WIREFRAME,{globalSpace:!0})}needDealWireframeLine(e){return!!(e.isActivateWireframe()&&this.wireframeLineSegments&&this.wireframeLineSegments.length)}adjustVisibility(e,t){if(this.needDealWireframeLine(e)){var i=this._getNodeGroup(e),r=i.visible;r!=t&&(t&&!i.bVisible||(i.visible=t),i.bVisible=r)}}changeVisibilityOfSelectedObjects(e,t){}changeVisibilityOfNonSelectedObjects(e,t){this.adjustVisibility(e,t)}restoreVisibilityOfObjects(){}disposeBufferAfterVbo(){this.generated&&!this.bufferDestroyed&&this.wireframeLineSegment&&(this.bufferDestroyed=!0,r.GeomUtil.disposeBufferFromGeometry(this.wireframeLineSegment.geometry,["position","normal","uv","uv2"]))}explode(e){for(var t=0,i=this.wireframeLineSegments.length;t<i;t++){function r(e,t,i,r){for(var n=e.getAttribute("position").array,a=e.getIndex().array,s={},o=t;o<i;o++){var l=a[o];s[l]||(n[3*l]+=r.x,n[3*l+1]+=r.y,n[3*l+2]+=r.z,s[l]=!0)}e.getAttribute("position").needsUpdate=!0,s=null}var n=this.wireframeLineSegments[t],a=n._indicesGroup,s=n.geometry;for(var o in a){var l=a[o];if(l)for(var d=e.modelExplosion.getExplosionTranslation(o),h=0,c=l.length;h<c;h++){var u=l[h].indexStart;r(s,u,u+l[h].indexCount,d)}}}}_isHiddenUserId(e){if(this.userIdMapForNoWireFrame[e])return!0;var t=this.manager.getHiddenUserIds();return!(!t||!t[e])}getWireFrameLineSegments(){return this.wireframeLineSegments}getPickingNodeGenerator(e){return e=null==e?"pick":e,this.pickingNodeGenerators||(this.pickingNodeGenerators={}),this.pickingNodeGenerators[e]||(this.pickingNodeGenerators[e]=new r.PickingBatchedWireFrameGenerator(this)),this.pickingNodeGenerators[e]}},function(){class e extends r.ModelView.ModelBaseHandler{constructor(e){super(e),this.tag="merge_data",this.defaultManager=null,this.instancedManager=null,this.loader=null}prepare(e,t){if(this.isLoaded()&&!this.isHidden()){this.prepareWireframe(this.model,t);var i=this.model.getMaterialManager().lastTextureEnabled;this.model.getMaterialManager()._updateTextureMapping(this.model,t),!this.model.lightmap||this.model.enableLightmap==r.GlobalData.EnableLightmap&&this.model.lightmapIntensity==r.GlobalData.LightmapIntensity&&i==r.GlobalData.EnableTextureMapping||(this.model.enableLightmap=r.GlobalData.EnableLightmap,this.model.lightmapIntensity=r.GlobalData.LightmapIntensity,this.rebuildIndicesforLightmap(),this.updateNodes())}}settleData(e){this.model.getModelDescriptor().classifyAllNodeInfo(),this.model.getModelDescriptor().cacheNodeInfosOnGeometryId(),this.addNodeInfoToOctantMap(),this.createMeshNodes(e)}addNodeInfoToOctantMap(){var e=this.model.manager,t=this.model.getEncodedDatabagId();this.model.getModelDescriptor().traverseNodeInfosByCell((function(i,r){e.addNodeInfoToOctantMap(t,i,r)}))}createMeshNodes(e){const t=this,i=this.model;if(r.GlobalData.InstanceAsyncProcessing){const r=this.loader.getDescriptor();this.instancedManager.asyncCreateMeshNodes(i,r.getInstancedUserIds(),(()=>{this.defaultManager.createMeshNodes(i,(function(){i.getMaterialManager()._updateTextureMapping(),t.clearCachedData(i),t.loaded=!0,e&&e()}))}))}else this.instancedManager.createMeshNodes(i),this.defaultManager.createMeshNodes(i,(function(){i.getMaterialManager()._updateTextureMapping(),t.clearCachedData(i),t.loaded=!0,e&&e()}))}clearCachedData(e){e.getModelDescriptor().destroyReader(),e.getModelDescriptor().clearReferencedMeshCache(),this.defaultManager.clearCachedData(),this.instancedManager.clearCachedData()}}r.ModelView.DataBatchedBaseHandler=e}(),function(){class e extends r.ModelView.DataBatchedBaseHandler{constructor(e,t){super(e),this.defaultManager=new r.ModelView.BatchedManager(t),this.instancedManager=new r.ModelView.InstancedManager,this.loader=new r.ModelView.DataBatchedLoader(this)}}r.ModelView.DataBatchedHandler=e}(),r.ModelView.LayerBaseProvider=class{constructor(e){this.model=e,this.conditionsChanged=!0,this.nodeInfosWithLayerKey={},this.cachedLayerData={},this.cacheAttributes=null,this.cacheSpecialtysLevels={},this.mapLayerKeys={},this.lastUsedMpkIdxsObject=null,this.lastUsedLayerIdsObject=null,this.lastUsedLayerData=null,this.mapNeededConditions=null}destroy(){this.cachedLayerData=null,this.nodeInfosWithLayerKey=null,this.cacheAttributes=null,this.cacheSpecialtysLevels=null,this.mapLayerKeys=null,this.lastUsedLayerData=null,this.lastUsedMpkIdxsObject=null,this.lastUsedLayerIdsObject=null,this.mapNeededConditions=null,this.lastLayerKeyMap=null,this.cachedLayerKeys=null}clearData(){}loadLayerDataByIdxs(e,t,i,r){}dealLayerDataLoading(e,t,i,r,n){}loadMpkOnDemand(e,t,i,r,n){var a=e?this.getAllLayerIdxData():this.getUsedLayerIdxData();this.dealLayerDataLoading(this.getLayerIdxInfoByLayerData(a),t,i,r,n)}getUsedIdxsInfoFrom(e,t){var i,n={},a={},s={},o={};if(e&&e.length)for(var l=0,d=e.length;l<d;++l)n[i=e[l]]=!0;if(t)if(r.Utils.isEmptyObject(n))s=t;else{for(i in t)n[i]&&(o[i]=!0);if(r.Utils.isEmptyObject(o))a=n,s=t;else{for(i in t)o[i]||(s[i]=!0);for(i in n)o[i]||(a[i]=!0)}}else r.Utils.isEmptyObject(n)||(a=n);return{objCurrUsedIdxs:n,addIdxs:Object.keys(a),removeIdxs:Object.keys(s)}}getLayerIdxInfoByLayerData(e){var t,i;e?(t=e.layerIds,i=e.mpkIdxs):(t=null,i=null);var r=this.getUsedIdxsInfoFrom(t,this.lastUsedLayerIdsObject);this.lastUsedLayerIdsObject=r.objCurrUsedIdxs;var n=this.getUsedIdxsInfoFrom(i,this.lastUsedMpkIdxsObject);return this.lastUsedMpkIdxsObject=n.objCurrUsedIdxs,{layerScene:r,mpk:n}}getUsedLayerIdxData(){if(!this.isConditionsChanged()&&this.lastUsedLayerData)return this.lastUsedLayerData;this.setConditionsChanged(!1);var e=this.getConditionsOnDemand();if(!e)return this.lastUsedLayerData=null,null;var t=this.getCachedLayerData(),i=[],r=[],n=[],a=[];for(var s in e)if(t[s]){for(var o=t[s].mpkIdxs,l=0,d=o.length;l<d;++l)n.push(o[l]);i.push(s),r.push(t[s].layerId),a.push(t[s].boundingBox)}return this.lastUsedLayerData={layerIds:r,layerKeys:i,boundingBoxes:a,mpkIdxs:n},this.lastUsedLayerData}getAllLayerIdxData(){this.setConditionsChanged(!1);var e=this.getCachedLayerData();if(!e)return null;var t=[],i=[],r=[],n=[];for(var a in e){for(var s=e[a].mpkIdxs,o=0,l=s.length;o<l;++o)r.push(s[o]);t.push(a),i.push(e[a].layerId),n.push(e[a].boundingBox)}return{layerIds:i,layerKeys:t,boundingBoxes:n,mpkIdxs:r}}getUserIdsOnDemand(){var e={},t=this.nodeInfosWithLayerKey,i=this.getConditionsOnDemand();if(i){for(var r in i)if(s=t[r])for(var n=0,a=s.length;n<a;n++)e[s[n].userId]=!0}else for(var r in t){var s;if(s=t[r])for(n=0,a=s.length;n<a;n++)e[s[n].userId]=!0}return e}cacheLayerData(e,t){this.cachedLayerData[e]=t}getCachedLayerData(){return this.cachedLayerData}getCachedLayerKeys(){if(this.cachedLayerKeys)return this.cachedLayerKeys;this.cachedLayerKeys={};var e=this.getCachedLayerData();for(var t in e)e.hasOwnProperty(t)&&(this.cachedLayerKeys[t]=!0);return this.cachedLayerKeys}clearNodeInfoCacheWithLayerKey(){this.nodeInfosWithLayerKey={}}cacheNodeInfoByLayerKey(e,t){this.nodeInfosWithLayerKey[e]||(this.nodeInfosWithLayerKey[e]=[]),this.nodeInfosWithLayerKey[e].push(t)}cacheNodeInfosWithLayerKey(){var e=this.model.getModelDescriptor().getAllNodeInfos();for(var t in e)for(var i=e[t],r=0,n=i.length;r<n;r++){var a=i[r],s=this.formatLayerIds(a.userData);this.cacheNodeInfoByLayerKey(s[0],a)}}cacheLayerKeys(e){this.mapLayerKeys=e;var t={},i=this.getLayerKeyAttributes();for(var r in e){var n=e[r],a=n[i[0]],s=n[i[1]];t.hasOwnProperty(a)||(t[a]=[]),t.hasOwnProperty(s)||(t[s]=[]),t[a].push(s),t[s].push(a)}this.cacheSpecialtysLevels=t}getLayerKeyAttributes(){if(this.cacheAttributes)return this.cacheAttributes;var e=[],t=Object.keys(this.mapLayerKeys)[0],i=this.mapLayerKeys[t];for(var r in i)i.hasOwnProperty(r)&&e.push(r);return this.cacheAttributes=e,this.cacheAttributes}formatLayerIds(e){var t=[];if(!e)return t.push("unknown"),t;var i=this.getLayerKeyAttributes(),r=e[i[0]],n=e[i[1]];if(e.hasOwnProperty(i[0])&&e.hasOwnProperty(i[1]))if(r instanceof Array&&n instanceof Array)for(var a=0;a<r.length;a++)for(var s=0;s<n.length;s++){var o=r[a]+"-"+n[s];t.push(o)}else if(r instanceof Array)for(s=0;s<r.length;s++)o=r[s]+"-"+n,t.push(o);else if(n instanceof Array)for(s=0;s<n.length;s++)o=r+"-"+n[s],t.push(o);else o=r+"-"+n,t.push(o);else if(e.hasOwnProperty(i[0]))if(e.hasOwnProperty(i[1]))t.push("unknown"),console.warn("Object has no "+i[0]+" and "+i[1]);else if(r instanceof Array)for(s=0;s<r.length;s++)for(l=r[s],d=this.getLevelsOrSpecialtys(l),a=0;a<d.length;a++)o=l+"-"+d[a],t.push(o);else for(l=r,d=this.getLevelsOrSpecialtys(l),a=0;a<d.length;a++)o=l+"-"+d[a],t.push(o);else if(n instanceof Array)for(var s=0;s<n.length;s++)for(var l=n[s],d=this.getLevelsOrSpecialtys(l),a=0;a<d.length;a++)o=d[a]+"-"+l,t.push(o);else for(var l=n,d=this.getLevelsOrSpecialtys(l),a=0;a<d.length;a++)o=d[a]+"-"+l,t.push(o);return t}getLevelsOrSpecialtys(e){return this.cacheSpecialtysLevels.hasOwnProperty(e)?this.cacheSpecialtysLevels[e]:(console.warn("Attribute "+e+"has no according levels or specialtys."),[])}getUnionBoundingBoxOnDemand(){var e=this.getBoundingBoxesOnDemand();if(e&&e.length>0){for(var t=new THREE.Box3,i=0,r=e.length;i<r;++i)t.union(e[i]);return t}return null}getBoundingBoxesOnDemand(){var e=this.getUsedLayerIdxData();return e?e.boundingBoxes:null}setConditionsOnDemandLoad(e){var t={};if(e&&e instanceof Array){t={};for(var i=0,r=e.length;i<r;i++)for(var n=e[i],a=this.formatLayerIds(n),s=0;s<a.length;s++)t.hasOwnProperty(a[s])||(t[a[s]]=!0)}else t=this.getCachedLayerKeys();var o=this._isLayerKeysChanged(t);return o&&(this.mapNeededConditions=t,this.setConditionsChanged(!0)),o}_isLayerKeysChanged(e){var t=!1;if(void 0!==this.lastLayerKeyMap){var i=Object.keys(this.lastLayerKeyMap),r=Object.keys(e);if(i.length!==r.length)t=!0;else for(var n=0,a=r.length;n<a;n++){var s=r[n];if(void 0===this.lastLayerKeyMap[s]){t=!0;break}}}else t=!0;return t&&(this.lastLayerKeyMap=e),t}setConditionsChanged(e){this.conditionsChanged=e}getConditionsOnDemand(){return this.mapNeededConditions}isConditionsChanged(){return this.conditionsChanged}},function(){class e extends r.ModelView.BaseLoader{constructor(e){super(e),this._loadingOnDemand=!1}loadMpkOnDemand(e,t,i){for(var r=0,n=e.length;r<n;++r)this.mpkTaskManager.addTask(e[r]);var a=this;this.mpkTaskManager.processTasks(this._loadMpk.bind(this),t,(function(){a._loadingOnDemand=!1,i&&i()}))}resetProcessState(e){this.loadTaskCount=0,this.maxLoadTaskCount=e,this._loadingOnDemand=!0}dealProgressSegment(e,t){return r.GlobalData.BatchMergeEnabled&&this._loadingOnDemand?t*e.progressPercentage.load:t}_loadLayerKey(){var e=this,t=this.fileLoader,i=this.url,n=this.model,a=this.handler.getLayerProvider();const s=i.layerKeyUrl();r.Storage.IndexedDBHelper.loadWithStorage("ModelData",s,(()=>new Promise(((e,i)=>{t.setResponseType(""),t.load(s,e,void 0,i)}))),(t=>{var i=new r.Loader.LayerKeyReader(t),n=[],s=i.getData();a.cacheLayerKeys(s);for(var o=0,l=i.getCount();o<l;++o){var d=i.getLayerKey(o),h=a.formatLayerIds(d);n.push(h[0])}e._loadLayer(n)}),(t=>{n.dispatchEvent({type:r.LOADERROREVENTS.LOAD_ERROR,errorType:r.LOADERROREVENTS.LOAD_MPK_ERROR,event:event}),e._onTaskFinished()}))}_loadLayer(e){var t=this,i=this.fileLoader,n=this.url,a=this.model,s=this.handler.getLayerProvider();const o=n.layerUrl();r.Storage.IndexedDBHelper.loadWithStorage("ModelData",o,(()=>new Promise(((e,t)=>{i.setResponseType("arraybuffer"),i.load(o,e,void 0,t)}))),(i=>{for(var n=new r.Loader.LayerReader(i),a=0,o=n.getLayerCount();a<o;++a)if(void 0!==e[a]){for(var l=[],d=n.getLayerData(a),h=n.getMpkList(a),c=0,u=h.length;c<u;++c)l.push(h[c]);s.cacheLayerData(e[a],{layerId:d.layer_id,boundingBox:d.boundingBox,mpkIdxs:l})}t._onTaskFinished()}),(e=>{a.dispatchEvent({type:r.LOADERROREVENTS.LOAD_ERROR,errorType:r.LOADERROREVENTS.LOAD_MPK_ERROR,event:event}),t._onTaskFinished()}))}delayLoadResources(e){var t=this.model.getConfig().metadata;0!==t.lines?(this.startCallback=null,this.progressCallback=null,this.finishCallback=e,this.loadTaskCount=0,this.maxLoadTaskCount=0,this.maxLoadTaskCount+=t.lines,t.lines&&this._loadLine()):e&&e()}}r.ModelView.LayerBaseLoader=e}(),function(){class e extends r.ModelView.ModelBaseHandler{constructor(e){super(e),this.layerDataLoaded=!1,this.loadedUserIdsObject=null,this.loadedUserIds=null,this.layerProvider=null,this.firstToLoad=!0}destroy(){super.destroy(),this.loadedUserIdsObject=null,this.loadedUserIds=null,this.layerProvider.destroy(),this.layerProvider=null}getLayerProvider(){return this.layerProvider}load(e){var t=this,i=this.model;this.loader.setNotifyProgress(e),this.loader.load((function(){i.manager.dispatchEvent({type:r.EVENTS.ON_LOAD_START})}),(function(e){i.manager.dispatchEvent({type:r.EVENTS.ON_LOAD_PROGRESS,progress:e})}),(function(){t.processLoadCompleted((function(){i.manager.dispatchEvent({type:r.EVENTS.ON_LOAD_COMPLETE,modelId:i.id})}))}))}unload(e,t){}loadMpkOnDemand(e,t,i,n){var a=this,s=this.model,o=!e,l=function(e){s.manager.dispatchEvent({type:r.EVENTS.ON_DEMAND_LOAD_PROGRESS,progress:e})};this.firstToLoad?this.loader.delayLoadResources((function(){a.firstToLoad=!1,a.loader.finishCallback=null,a.prepareData((function(){a.loader.progressCallback=l,a.getLayerProvider().setConditionsOnDemandLoad(e),a._loadMpkOnDemand(o,t,i,n)}))})):(a.loader.progressCallback=l,a.getLayerProvider().setConditionsOnDemandLoad(e)?a._loadMpkOnDemand(o,t,i,n):(t&&t(),n&&n()))}_loadMpkOnDemand(e,t,i,n){var a=this,s=this.model;this.layerDataLoaded=!1,t&&t(),s.manager.dispatchEvent({type:r.EVENTS.ON_DEMAND_LOAD_START}),this.getLayerProvider().loadMpkOnDemand(e,(function(e){a.dealData(e)}),(function(e,t){a.unload(e,t)}),i,(function(){a.layerDataLoaded=!0,s.manager.updateFilterManager(),console.log("load finish"),s.manager.dispatchEvent({type:r.EVENTS.ON_DEMAND_LOAD_COMPLETE,data:{boundingBox:s.manager.getLoadOnDemandDirector().getBoundingBoxForUsedComponent()}}),n&&n()}))}processLoadCompleted(e){var t=this.model;t.materialManager._updateTextureMapping(),t.materialManager._updateIBL(t),t.loaded=!0,t.updateOctreeNode(),requestAnimationFrame((function(){e&&e(),t.debut(t)}))}isAllReady(){return!(!this.isLoaded()||this.isHidden()||!this.isLayerDataLoaded())}applyFilter(){if(this.isLoaded()&&this.isLayerDataLoaded()){var e=this.model.getModelDescriptor().getStandardUserIdsByCategory(this.loadedUserIds);if(e.length&&this.defaultManager.applyFilter(this.model,e),r.GlobalData.Instance){var t=this.model.getModelDescriptor().getInstancedUserIdsByCategory(this.loadedUserIds);t.length&&this.instancedManager.applyFilter(this.model,t)}}}needUpdate(){return!!this.isLayerDataLoaded()}clearData(){}initData(e){}dealMeshNodes(e){}dealData(e){var t=this;this.clearData(),this.initData((function(){t.model.manager.loadOverrideMaterialsByDemand((function(){t.dealMeshNodes(e)}),(function(){t.dealMeshNodes(e)}))}))}getLoadedUserIdsObject(){return this.loadedUserIdsObject}isLayerDataLoaded(){return this.layerDataLoaded}clearLoadedState(){this.layerDataLoaded=!1,this.loadedUserIdsObject=null,this.loadedUserIds=null}}r.ModelView.LayerBaseHandler=e}(),function(){class e extends r.ModelView.LayerBaseHandler{constructor(e){super(e),this.layerProvider=new r.ModelView.LayerProvider(e)}settleData(e){this.model.getModelDescriptor().classifyAllNodeInfo(),this.addNodeInfoToOctantMap(),this.getLayerProvider().cacheNodeInfosWithLayerKey(),this.model.getModelDescriptor().destroyReader(),this.loaded=!0,e&&e()}clearData(){this.model.clearNodeGroup(),this.model.clearMeshFromOctantMap(),this.getLayerProvider().clearData(),this.model.clearWireframeElementCount(),this.defaultManager.clearData(),this.instancedManager.clearData(),this.clearLoadedState()}addNodeInfoToOctantMap(){var e=this.model.manager,t=this.model.getEncodedDatabagId();this.model.getModelDescriptor().traverseNodeInfosByCell((function(i,r){e.addNodeInfoToOctantMap(t,i,r)}))}initData(e){this.loadedUserIdsObject=this.getLayerProvider().getUserIdsOnDemand(),this.loadedUserIds=Object.keys(this.loadedUserIdsObject),e&&e()}unload(e,t){var i=this;this.model.getModelDescriptor().clearReferencedMeshCacheByMpkIdxs(t,(function(e){i.defaultManager.disposeGeometry(e)}))}}r.ModelView.LayerHandler=e}(),function(){class e extends r.ModelView.LayerBaseProvider{constructor(e){super(e)}loadLayerDataByIdxs(e,t,i,r){this.model.getLoader().resetProcessState(t.length),this.model.getLoader().loadMpkOnDemand(t,(function(e,t){i&&i(t-e,t)}),r)}dealLayerDataLoading(e,t,i,r,n){var a=e.mpk;if(0!==a.addIdxs.length||0!==a.removeIdxs.length){var s=!1;a.removeIdxs.length>0&&(s=!0,i&&i(null,a.removeIdxs)),a.addIdxs.length>0?this.loadLayerDataByIdxs(null,a.addIdxs,r,(function(){t&&t(n)})):s?t&&t(n):n&&n()}else t&&t(n)}}r.ModelView.LayerProvider=e}(),function(){class e extends r.ModelView.DefaultDescriptor{constructor(){super()}}r.ModelView.LayerDescriptor=e}(),function(){class e extends r.ModelView.LayerBaseLoader{constructor(e){super(e),this.descriptor=new r.ModelView.LayerDescriptor}loadSceneAndMpks(e){e.symbol&&this._loadSymbol(),this._loadScene(0),this._loadLayerKey(),r.GlobalData.BorderLineDelayLoaded||this._loadAllBorderlines(e)}getSceneTaskCount(e){var t=2;return t+=e.symbol,r.GlobalData.BorderLineDelayLoaded||(t+=this.getAllBorderlineCount()),t}}r.ModelView.LayerLoader=e}(),function(){class e extends r.ModelView.LayerHandler{constructor(e,t){super(e),this.tag="layer",this.defaultManager=new r.ModelView.BatchedManager(t),this.instancedManager=new r.ModelView.InstancedManager,this.loader=new r.ModelView.LayerLoader(this)}prepare(e,t){this.isAllReady()&&(this.prepareWireframe(this.model,t),this.model.getMaterialManager()._updateTextureMapping(this.model))}dealMeshNodes(e){var t=this.model.getModelDescriptor().getInstancedUserIdsByCategory(this.loadedUserIds);t.length&&this.instancedManager.createMeshNodes(this.model,t);var i=this.model.getModelDescriptor().getStandardUserIdsByCategory(this.loadedUserIds);i.length?this.defaultManager.asyncCreateMeshNodes(this.model,i,e):e&&e()}}r.ModelView.LayerBatchedHandler=e}(),function(){class e extends r.ModelView.LayerBaseHandler{constructor(e){super(e),this.layerProvider=new r.ModelView.LayerSceneProvider(e)}prepareData(e){this.dataReady||(this.dataReady=!0,this.settleData(e))}settleData(e){this.loaded=!0,e&&e()}clearData(){this.model.clearNodeGroup(),this.model.removeAllFromOctantMap(),this.model.getModelDescriptor().clearNodeInfosWithGeometryId(),this.getLayerProvider().clearData(),this.model.clearWireframeElementCount(),this.defaultManager.clearData(),this.instancedManager.clearData(),this.clearLoadedState()}initData(e){this.model.getModelDescriptor().parseItemData(),this.model.getModelDescriptor().classifyAllNodeInfo(),this.getLayerProvider().cacheNodeInfosWithLayerKey(),this.addNodeInfoToOctantMap(),this.loadedUserIdsObject=this.getLayerProvider().getUserIdsOnDemand(),this.loadedUserIds=Object.keys(this.loadedUserIdsObject),e&&e()}addNodeInfoToOctantMap(){var e=this.model.manager,t=this.model.getEncodedDatabagId();this.model.getModelDescriptor().traverseNodeInfosByCell((function(i,r){e.addNodeInfoToOctantMap(t,i,r)}))}unload(e,t){var i=this;this.model.getModelDescriptor().removeFromSceneReaderMap(e),this.model.getModelDescriptor().clearReferencedMeshCacheByMpkIdxs(t,(function(e){i.defaultManager.disposeGeometry(e)}))}}r.ModelView.LayerSceneHandler=e}(),function(){class e extends r.ModelView.LayerBaseProvider{constructor(e){super(e)}clearData(){this.model.getModelDescriptor().clearNodeInfoCache(),this.clearNodeInfoCacheWithLayerKey()}loadLayerDataByIdxs(e,t,i,r){var n=this.model.getLoader(),a=e.length,s=t.length;if(a&&s){var o=a+s;n.resetProcessState(o),n.loadLayerScenesOnDemand(e,(function(e,t){i&&i(t-e,o)}),(function(){n.loadMpkOnDemand(t,(function(e,t){i&&i(t-e+a,o)}),r)}))}else a?(n.resetProcessState(a),n.loadLayerScenesOnDemand(e,(function(e,t){i&&i(t-e,t)}),r)):s&&(n.resetProcessState(s),n.loadMpkOnDemand(t,(function(e,t){i&&i(t-e,t)}),r))}dealLayerDataLoading(e,t,i,r,n){var a=e.mpk,s=e.layerScene;if(0!==a.addIdxs.length||0!==a.removeIdxs.length||0!==s.addIdxs.length||0!==s.removeIdxs.length){var o=!1;(a.removeIdxs.length>0||s.removeIdxs.length>0)&&(o=!0,i&&i(s.removeIdxs,a.removeIdxs)),s.addIdxs.length>0||a.addIdxs.length>0?this.loadLayerDataByIdxs(s.addIdxs,a.addIdxs,r,(function(){t&&t(n)})):o?t&&t(n):n&&n()}else t&&t(n)}}r.ModelView.LayerSceneProvider=e}(),function(){class e extends r.ModelView.DefaultDescriptor{constructor(){super()}parseItemData(){var e=this.getSceneReaderMap();for(var t in e)for(var i=e[t],r=0,n=i.header.itemCount;r<n;++r)this._readItemData(i,r,this.getCellId(t,r));return!0}parseItemDataByCellId(e){var t=this.getSceneReaderMap();for(var i in t){var r=t[i],n=this.getItemIdsBy(e,i);if(n)for(var a=0,s=n.length;a<s;++a){var o=n[a];this._readItemData(r,o,this.getCellId(i,o))}}return!0}getLayerIdsByCellId(e){return this.cellIdMap&&this.cellIdMap[e]?Object.keys(this.cellIdMap[e]):null}getItemIdsBy(e,t){return this.cellIdMap&&this.cellIdMap[e]?this.cellIdMap[e][t]:null}cacheToCellIdMap(e,t,i){this.layerIdMap||(this.layerIdMap={}),this.layerIdMap[t]||(this.layerIdMap[t]={}),this.layerIdMap[t][i]=e,this.cellIdMap||(this.cellIdMap={}),this.cellIdMap[e]||(this.cellIdMap[e]={}),this.cellIdMap[e][t]||(this.cellIdMap[e][t]=[]),this.cellIdMap[e][t].push(i)}getCellId(e,t){return this.layerIdMap&&this.layerIdMap[e]&&this.layerIdMap[e][t]||0}isOctreeOuter(e){var t=this.octreeRootNode.layer;return t||(t=this.octreeRootNode.inner||this.octreeRootNode.outer),!(e.x<t.min.x||e.x>t.max.x||e.y<t.min.y||e.y>t.max.y||e.z<t.min.z||e.z>t.max.z)}isUseInnerAndOuterOctree(){return!this.octreeRootNode.layer}getOctreeRoots(e){this.octreeRootNode.layer?e.push(this.octreeRootNode.layer):(this.octreeRootNode.inner&&e.push(this.octreeRootNode.inner),this.octreeRootNode.outer&&e.push(this.octreeRootNode.outer))}updateOctreeNode(e){this.octreeRootNode.layer?this.updateOctreeNodeBy(this.octreeRootNode.layer,e):(this.octreeRootNode.inner&&this.updateOctreeNodeBy(this.octreeRootNode.inner,e),this.octreeRootNode.outer&&this.updateOctreeNodeBy(this.octreeRootNode.outer,e))}}r.ModelView.LayerSceneDescriptor=e}(),function(){class e extends r.ModelView.LayerBaseLoader{constructor(e){super(e),this.layerSceneTaskManager=new r.TaskManager,this.descriptor=new r.ModelView.LayerSceneDescriptor}loadLayerScenesOnDemand(e,t,i){for(var r=0,n=e.length;r<n;++r)this.layerSceneTaskManager.addTask(e[r]);this.layerSceneTaskManager.processTasks(this._loadLayerScene.bind(this),t,i)}loadSceneAndMpks(e){e.symbol&&this._loadSymbol(),this._loadLayerCellIndex(),this._loadLayerOctree(),this._loadLayerKey(),r.GlobalData.BorderLineDelayLoaded||this._loadAllBorderlines(e)}getSceneTaskCount(e){var t=3;return t+=e.symbol,r.GlobalData.BorderLineDelayLoaded||(t+=this.getAllBorderlineCount()),t}_loadLayerCellIndex(){var e=this,t=this.fileLoader;const i=this.url.layerSceneCell();r.Storage.IndexedDBHelper.loadWithStorage("ModelData",i,(()=>new Promise(((e,r)=>{t.setResponseType("arraybuffer"),t.load(i,e,void 0,r)}))),(t=>{e._parseLayerCellIndex(t),e._onTaskFinished()}),(t=>{e._onTaskFinished()}))}_parseLayerCellIndex(e){for(var t=new r.Loader.LayerIndexReader(e),i=this.descriptor,n=0,a=t.cell_count;n<a;n++)for(var s=t.getCell(n),o=s.itemIndex;o<s.itemCount;o++){var l=t.getLayerIndex(o);i.cacheToCellIdMap(s.cellId,l.layer_id,l.item_index)}}_loadLayerOctree(){var e=this.fileLoader,t=this.url,i=this;const n=t.layerOctree();r.Storage.IndexedDBHelper.loadWithStorage("ModelData",n,(()=>new Promise(((t,i)=>{e.setResponseType("arraybuffer"),e.load(n,t,void 0,i)}))),(e=>{i._parseLayerOctree(e),i._onTaskFinished()}),(e=>{i._onTaskFinished()}))}_parseLayerOctree(e){this.descriptor.octreeRootNode.layer=this._getOctreeRootNode(e)}_loadLayerScene(e,t){var i=this,n=this.model,a=this.fileLoader;const s=this.url.layerSceneUrl(e);r.Storage.IndexedDBHelper.loadWithStorage("ModelData",s,(()=>new Promise(((e,t)=>{a.setResponseType("arraybuffer"),a.load(s,e,void 0,t)}))),(r=>{i._parseScene(r,e),t(),i._onTaskFinished()}),(e=>{n.dispatchEvent({type:r.LOADERROREVENTS.LOAD_ERROR,errorType:r.LOADERROREVENTS.LOAD_MPK_ERROR,event:event}),t(),i._onTaskFinished()}))}}r.ModelView.LayerSceneLoader=e}(),function(){class e extends r.ModelView.LayerSceneHandler{constructor(e,t){super(e),this.tag="layer",this.defaultManager=new r.ModelView.BatchedManager(t),this.instancedManager=new r.ModelView.InstancedManager,this.loader=new r.ModelView.LayerSceneLoader(this)}prepare(e,t){this.isAllReady()&&(this.prepareWireframe(this.model,t),this.model.getMaterialManager()._updateTextureMapping(this.model))}addNodeInfoToOctantMap(){var e=this.model.manager,t=this.model.getEncodedDatabagId();this.model.getModelDescriptor().traverseNodeInfosByCell((function(i,r){e.addNodeInfoToOctantMap(t,i,r)}))}dealMeshNodes(e){var t=this.model.getModelDescriptor().getInstancedUserIdsByCategory(this.loadedUserIds);t.length&&this.instancedManager.createMeshNodes(this.model,t);var i=this.model.getModelDescriptor().getStandardUserIdsByCategory(this.loadedUserIds);i.length?this.defaultManager.asyncCreateMeshNodes(this.model,i,e):e&&e()}}r.ModelView.LayerSceneBatchedHandler=e}(),r.LoadOnDemandDirector=class{constructor(e){this.manager=e,this.requestCount=0,this.maxRequestCount=1e5,this.loading=!1,this.delayIntervalTime=300}destroy(){this.manager=null,this.currentConditions=null,this.delayLoadTimer&&(clearTimeout(this.delayLoadTimer),this.delayLoadTimer=null)}isValidModel(e){return!(e.isEmptyScene()||!e.isLayerData())}loadMpkOnDemandByConditionsWithDelay(e,t,i,r){var n=this,a=this.delayIntervalTime;n.delayLoadTimer&&clearTimeout(n.delayLoadTimer),n.delayLoadTimer=setTimeout((function(){n.loadMpkOnDemandByConditions(e,t,i,r)}),a)}loadMpkOnDemandByConditions(e,t,i,r){if(this.currentConditions=e,++this.requestCount,this.requestCount>this.maxRequestCount&&(this.requestCount=0),!this.loading){this.loading=!0;var n=this;requestAnimationFrame(function e(a){var s=a,o=n.currentConditions;return function(){n._loadMpkOnDemandByConditions(o,t,i,(function(){s!==n.requestCount?requestAnimationFrame(e(n.requestCount)):(n.loading=!1,r&&r(o),o=null)}))}}(this.requestCount))}}_loadMpkOnDemandByConditions(e,t,i,r){var n=this;this.manager.traverseModels((function(a){n.isValidModel(a)&&a._getHandler().loadMpkOnDemand(e,t,i,r)}))}getBoundingBoxOnDemand(){var e=new THREE.Box3,t=this;return this.manager.traverseModels((function(i){if(t.isValidModel(i)){var r=i._getHandler().getLayerProvider().getUnionBoundingBoxOnDemand();if(r){var n=i.getVertexOffsetMatrix();n&&r.applyMatrix4(n),e.union(r)}}})),e.isEmpty()?null:e}isLoading(){return this.loading}getBoundingBoxForUsedComponent(){var e=this.manager,t=new THREE.Box3;return e.traverseModels((function(i){var r=i.getLoadedUserIdsObject();r&&t.union(e.getBoundingBoxByIds(r))})),t.isEmpty()?null:t}},function(){class e extends r.ModelView.BaseDescriptor{constructor(){super(),this.nodeInfoMapOnSceneId={},this.symbolBufferData=null}destroy(){super.destroy(),this.nodeInfoMapOnSceneId=null,this.symbolBufferData=null}updateNodeInfos(){for(var e=this.nodeInfoMapOnSceneId,t=Object.keys(e),i=0,n=t.length;i<n;i++)for(var a=e[t[i]],s=Object.keys(a),o=0,l=s.length;o<l;o++)for(var d=s[o],h=a[d],c=this.userIdReader?this.userIdReader.getString(d):d,u=this.userDataReader?this.userDataReader.getUserData(h[0].userDataId):null,p=0,m=h.length;p<m;p++){var f=h[p];f.userId=c,f.userData=u,f.name=f.userId,f.boundingBox=new THREE.Box3(new THREE.Vector3(f.boundingBox.min.x,f.boundingBox.min.y,f.boundingBox.min.z),new THREE.Vector3(f.boundingBox.max.x,f.boundingBox.max.y,f.boundingBox.max.z)),f.state=r.EnumObjectState.Visible,f.material=null,f.parameterizedDesc=this._isParameterizedNode(f),f.instanceOrNot=this._isInstancedNode(f),this._classifyNodeInfo(f)}}}r.ModelView.WorkerBatchedDescriptor=e}(),function(){class e extends r.ModelView.BaseLoader{constructor(e){super(e),this.descriptor=new r.ModelView.WorkerBatchedDescriptor}parseSymbol(e){this.descriptor.symbolBufferData=e}loadSceneAndMpks(e){var t=this;e.symbol?this._loadSymbol((function(){t._loadScene(0)})):t._loadScene(0),e.lines&&this._loadLine(),e.mpks&&this._loadAllMpks(e.mpks),r.GlobalData.BorderLineDelayLoaded||this._loadAllBorderlines(e)}getSceneTaskCount(e){var t=e.scenes;return t+=e.symbol,t+=e.lines,t+=e.mpks,r.GlobalData.BorderLineDelayLoaded||(t+=this.getAllBorderlineCount()),t}_loadScene(e){var t=this,i=this.model,n=this.url,a=this.fileLoader;a.setResponseType("arraybuffer"),a.load(n.sceneUrl(e),(function(i){t._parseScene(i,e)}),void 0,(function(e){i.dispatchEvent({type:r.LOADERROREVENTS.LOAD_ERROR,errorType:r.LOADERROREVENTS.LOAD_SCENE_ERROR,event:e}),t._onTaskFinished()}))}_parseScene(e,t){var i=this,n=r.Workers.WorkerLib.getSceneParseWorker();n.addEventListener("message",(function(e){var a=e.data;i.descriptor.nodeInfoMapOnSceneId[t]=JSON.parse(r.Utils.ab2str(a.nodeInfoMap)),i._onTaskFinished(),n.terminate()}),!1);var a=this.descriptor.symbolBufferData?[e,this.descriptor.symbolBufferData]:[e];n.postMessage({sceneBufferData:e,symbolBufferData:this.descriptor.symbolBufferData},a)}}r.ModelView.WorkerBatchedLoader=e}(),function(){class e extends r.ModelView.BatchedMeshManager{constructor(e){super(e)}_getUV2BufferData(e){var t=e.getLoader().uv2MapItem,i=e.getLoader().uv2Buffer;if(e.lightmap&&t&&i)return{uv2MapItem:t,uv2Buffer:i}}_createGeometries(e,t){var i=this,r=this._classifyGeometryIdxIds(e),n=!0,a=0,s=r.generalGeometryIdxIds.length?1:0;(s+=r.parameterizedGeometryIdxIds.length?1:0)>0&&(n=!1),r.generalGeometryIdxIds.length&&this._dealGeneralGeometries(e,r.generalGeometryIdxIds,(function(){++a===s&&i._makeMeshNodes(e,t)})),r.parameterizedGeometryIdxIds.length&&this._dealParameterizedGeometries(e,r.parameterizedGeometryIdxIds,(function(){++a===s&&i._makeMeshNodes(e,t)})),n&&this._makeMeshNodes(e,t)}_classifyGeometryIdxIds(e){for(var t=e.getModelDescriptor().getStandardNodeInfosOnGeometryId(),i=[],r=[],n=Object.keys(t),a=0,s=n.length;a<s;a++){var o=n[a],l=t[o];l.length<1||(l[0].parameterizedDesc?i.push(o):r.push(o))}return{generalGeometryIdxIds:r,parameterizedGeometryIdxIds:i}}_dealGeneralGeometries(e,t,i){for(var n=e.getModelDescriptor().getStandardNodeInfosOnGeometryId(),a=e.getModelDescriptor().getReferencedMeshBufferData(),s=this.mapMaterialIdToMergedNode,o=[],l=[],d=0,h=t.length;d<h;d++){var c=t[d],u=a[c];u&&(u.meshId=c,l.push(u),-1===o.indexOf(u.P.buffer)&&o.push(u.P.buffer),-1===o.indexOf(u.I.buffer)&&o.push(u.I.buffer),u.N&&-1===o.indexOf(u.N.buffer)&&o.push(u.N.buffer),u.UV&&-1===o.indexOf(u.UV.buffer)&&o.push(u.UV.buffer))}var p=r.Workers.WorkerLib.getMeshCreateWorker();p.addEventListener("message",(function(e){for(var t=e.data.dataBuffers,r=Object.keys(t),n=0,a=r.length;n<a;n++)for(var o=r[n],l=t[o],d=0,h=l.length;d<h;d++){var c=l[d],u=c.bufferData,m=c.indices,f=new THREE.BufferGeometry;f._visible=!0,f.setIndex(new THREE.BufferAttribute(new Uint32Array(u.index),1)),f.setAttribute("position",new THREE.BufferAttribute(new Float32Array(u.position),3)),u.normal>0&&f.setAttribute("normal",new THREE.BufferAttribute(new Float32Array(u.normal),3)),u.uv>0&&f.setAttribute("uv",new THREE.BufferAttribute(new Float32Array(u.uv),2)),u.uv2>0&&f.setAttribute("uv2",new THREE.BufferAttribute(new Float32Array(u.uv2),2)),s[o]||(s[o]=[]),s[o].push({geometry:f,indices:m})}i&&i(),p.terminate()}),!1);var m={type:"unique",segmentMergeEnabled:!!r.GlobalData.SegmentedBatchMergeEnable,maxIndicesNumberPerBathSegment:r.GlobalData.maxIndicesNumberPerBathSegment,nodeItemType:r.ModelView.BaseDescriptor.EnumNodeItemType,nodeInfoMap:n,uv2BufferData:this._getUV2BufferData(e)},f=r.Utils.str2ab(JSON.stringify(m));o.push(f),p.postMessage({brief:f,dataBuffers:l},o)}_dealParameterizedGeometries(e,t,i){for(var n=e.getModelDescriptor().getStandardNodeInfosOnGeometryId(),a=this.mapMaterialIdToMergedNode,s=[],o=[],l=0,d=t.length;l<d;l++)s.push({meshId:t[l]});var h=r.Workers.WorkerLib.getMeshCreateWorker();h.addEventListener("message",(function(e){for(var t=e.data.dataBuffers,r=Object.keys(t),n=0,s=r.length;n<s;n++)for(var o=r[n],l=t[o],d=0,c=l.length;d<c;d++){var u=l[d],p=u.bufferData,m=u.indices,f=new THREE.BufferGeometry;f._visible=!0,f.setIndex(new THREE.BufferAttribute(new Uint32Array(p.index),1)),f.setAttribute("position",new THREE.BufferAttribute(new Float32Array(p.position),3)),p.normal>0&&f.setAttribute("normal",new THREE.BufferAttribute(new Float32Array(p.normal),3)),p.uv>0&&f.setAttribute("uv",new THREE.BufferAttribute(new Float32Array(p.uv),2)),a[o]||(a[o]=[]),a[o].push({geometry:f,indices:m})}i&&i(),h.terminate()}),!1);var c={type:"parameterized",segmentMergeEnabled:!!r.GlobalData.SegmentedBatchMergeEnable,maxIndicesNumberPerBathSegment:r.GlobalData.maxIndicesNumberPerBathSegment,nodeItemType:r.ModelView.BaseDescriptor.EnumNodeItemType,nodeInfoMap:n},u=r.Utils.str2ab(JSON.stringify(c));o.push(u),h.postMessage({brief:u,dataBuffers:s},o)}}r.ModelView.WorkerBatchedMeshManager=e}(),function(){class e extends r.ModelView.BatchedWireframeManager{constructor(e){super(e)}}r.ModelView.WorkerBatchedWireframeManager=e}(),function(){class e extends r.ModelView.BatchedBaseManager{constructor(){super(),this.meshManager=new r.ModelView.WorkerBatchedMeshManager(this),this.wireframeManager=new r.ModelView.WorkerBatchedWireframeManager(this)}}r.ModelView.WorkerBatchedManager=e}(),function(){class e extends r.ModelView.InstancedMeshManager{constructor(e){super(e)}}r.ModelView.WorkerBatchedInstancedMeshManager=e}(),function(){class e extends r.ModelView.InstancedWireframeManager{constructor(e){super(e)}}r.ModelView.WorkerBatchedInstancedWireframeManager=e}(),function(){class e extends r.ModelView.InstancedBaseManager{constructor(){super(),this.meshManager=new r.ModelView.WorkerBatchedInstancedMeshManager(this),this.wireframeManager=new r.ModelView.WorkerBatchedInstancedWireframeManager(this)}}r.ModelView.WorkerBatchedInstancedManager=e}(),function(){class e extends r.ModelView.BatchedBaseHandler{constructor(e){super(e),this.tag="batched",this.defaultManager=new r.ModelView.WorkerBatchedManager,this.instancedManager=new r.ModelView.WorkerBatchedInstancedManager,this.loader=new r.ModelView.WorkerBatchedLoader(this)}prepareData(e){this.dataReady||(this.dataReady=!0,this.settleData(e))}settleData(e){this.loader.descriptor.updateNodeInfos(),this.model.getModelDescriptor().cacheNodeInfosOnGeometryId(),this.addNodeInfoToOctantMap(),this.createMeshNodes(e)}createMeshNodes(e){var t=this,i=this.model;this.defaultManager.createMeshNodes(i,(function(){i.getMaterialManager()._updateTextureMapping(),t.clearCachedData(i),t.loaded=!0,e&&e()})),this.instancedManager.createMeshNodes(i)}}r.ModelView.WorkerBatchedHandler=e}(),function(){class e extends r.ModelView.BaseDescriptor{constructor(){super(),this.bmeshIdReader=null,this.nodeInfoMapOnSceneId={},this.symbolBufferData=null}destroy(){super.destroy(),this.bmeshIdReader=null,this.nodeInfoMapOnSceneId=null,this.symbolBufferData=null}convertGeometryId(e){var t=this.bmeshIdReader.getBMeshId(e);return void 0===t&&(t=e),t}updateNodeInfos(){for(var e=this.nodeInfoMapOnSceneId,t=Object.keys(e),i=0,n=t.length;i<n;i++)for(var a=e[t[i]],s=Object.keys(a),o=0,l=s.length;o<l;o++)for(var d=s[o],h=a[d],c=this.userIdReader?this.userIdReader.getString(d):d,u=this.userDataReader?this.userDataReader.getUserData(h[0].userDataId):null,p=0,m=h.length;p<m;p++){var f=h[p];f.userId=c,f.userData=u,f.name=f.userId,f.boundingBox=new THREE.Box3(new THREE.Vector3(f.boundingBox.min.x,f.boundingBox.min.y,f.boundingBox.min.z),new THREE.Vector3(f.boundingBox.max.x,f.boundingBox.max.y,f.boundingBox.max.z)),f.state=r.EnumObjectState.Visible,f.material=null,f.parameterizedDesc=this._isParameterizedNode(f),f.instanceOrNot=this._isInstancedNode(f),this._classifyNodeInfo(f)}}}r.ModelView.WorkerDataBatchedDescriptor=e}(),function(){class e extends r.ModelView.DataBatchedBaseLoader{constructor(e){super(e),this.descriptor=new r.ModelView.WorkerDataBatchedDescriptor}parseSymbol(e){this.descriptor.symbolBufferData=e}_loadScene(e){var t=this,i=this.model,n=this.url,a=this.fileLoader;a.setResponseType("arraybuffer"),a.load(n.sceneUrl(e),(function(i){t._parseScene(i,e)}),void 0,(function(e){i.dispatchEvent({type:r.LOADERROREVENTS.LOAD_ERROR,errorType:r.LOADERROREVENTS.LOAD_SCENE_ERROR,event:e}),t._onTaskFinished()}))}_parseScene(e,t){var i=this,n=r.Workers.WorkerLib.getSceneParseWorker();n.addEventListener("message",(function(e){var a=e.data;i.descriptor.nodeInfoMapOnSceneId[t]=JSON.parse(r.Utils.ab2str(a.nodeInfoMap)),i._onTaskFinished(),n.terminate()}),!1);var a=this.descriptor.symbolBufferData?[e,this.descriptor.symbolBufferData]:[e];n.postMessage({sceneBufferData:e,symbolBufferData:this.descriptor.symbolBufferData},a)}}r.ModelView.WorkerDataBatchedLoader=e}(),function(){class e extends r.ModelView.BatchedMeshManager{constructor(e){super(e)}_createGeometries(e,t){var i=this,r=this._classifyGeometryIdxIds(e),n=!0,a=0,s=r.sharedGeometryIdxIds.length?1:0;s+=r.lineGeometryIdxIds.length?1:0,(s+=r.parameterizedGeometryIdxIds.length?1:0)>0&&(n=!1),r.sharedGeometryIdxIds.length&&this._dealSharedGeometries(e,r.sharedGeometryIdxIds,(function(){++a===s&&i._makeMeshNodes(e,t)})),r.lineGeometryIdxIds.length&&this._dealLineGeometries(e,r.lineGeometryIdxIds,(function(){++a===s&&i._makeMeshNodes(e,t)})),r.parameterizedGeometryIdxIds.length&&this._dealParameterizedGeometries(e,r.parameterizedGeometryIdxIds,(function(){++a===s&&i._makeMeshNodes(e,t)})),r.uniqueGeometryIdxIds.length&&this._dealUniqueGeometries(e,r.uniqueGeometryIdxIds),n&&this._makeMeshNodes(e,t)}_classifyGeometryIdxIds(e){for(var t=e.getModelDescriptor().getStandardNodeInfosOnGeometryId(),i=e.getModelDescriptor().getReferencedMeshBufferData(),n=Object.keys(i),a=[],s=[],o=[],l=[],d=0,h=n.length;d<h;d++){var c=n[d],u=i[c].IndexInfos;if(u){if(u.length<1)continue;if(!(g=t[u[0].meshId])||g.length<1)continue;g[0].instanceOrNot||g[0].type!==r.ModelView.BaseDescriptor.EnumNodeItemType.MESH_REF?a.push(c):s.push(c)}else{(g=t[c])&&g.length&&o.push(c)}}if(!r.GlobalData.Instance)for(var p=Object.keys(t),m=0,f=p.length;m<f;m++){var g,v=p[m];(g=t[v]).length<1||g[0].parameterizedDesc&&l.push(v)}return{uniqueGeometryIdxIds:a,sharedGeometryIdxIds:s,lineGeometryIdxIds:o,parameterizedGeometryIdxIds:l}}_dealUniqueGeometries(e,t){for(var i=e.getModelDescriptor().getStandardNodeInfosOnGeometryId(),r=e.getModelDescriptor().getReferencedMeshBufferData(),n=this.mapMaterialIdToMergedNode,a=0,s=t.length;a<s;a++){var o=t[a],l=r[o],d=l.IndexInfos;e.lightmap&&(l=this.getAttributeForLightmapWithDataMerged(l,e,o));var h,c,u=!(!l.UV||!l.UV.byteLength&&!l.UV.length),p=void 0;for(h=0,c=d.length;h<c;h++){var m=i[d[h].meshId];if(m&&0!==m.length){e.lightmap&&(d[h].lightmapIdx=l.lightmapIdx,d[h].positionStart=3*d[h].indexStart,d[h].positionCount=3*d[h].indexCount),p=d[h].meshId;for(var f=0,g=m.length;f<g;f++)m[f].uv=u}}if(void 0!==p){var v=i[p][0],y={},M=this._getMaterialKeyByNodeInfo(v);for(void 0===n[M]&&(n[M]=[]),h=0,c=d.length;h<c;h++)i[d[h].meshId]&&(void 0===y[(v=i[d[h].meshId][0]).userId]&&(y[v.userId]=[]),d[h].userId=v.userId,d[h].nodeId=v.nodeId,d[h].boundingBox=v.boundingBox,y[v.userId].push(d[h]));var E=new THREE.BufferGeometry;E._visible=!0,E.setIndex(new THREE.BufferAttribute(new Uint32Array(l.I),1)),E.setAttribute("position",new THREE.BufferAttribute(new Float32Array(l.P),3)),l.N&&(l.N.byteLength||l.N.length)&&E.setAttribute("normal",new THREE.BufferAttribute(new Float32Array(l.N),3)),u&&E.setAttribute("uv",new THREE.BufferAttribute(new Float32Array(l.UV),2)),l.UV2&&(E.setAttribute("uv2",new THREE.BufferAttribute(new Float32Array(l.UV2),2)),E.lightmapIdx=l.lightmapIdx),n[M].push({geometry:E,indices:y})}}}_getUV2BufferData(e){var t=e.getLoader().uv2MapItem,i=e.getLoader().uv2Buffer;if(e.lightmap&&t&&i)return{uv2MapItem:t,uv2Buffer:i}}_dealSharedGeometries(e,t,i){for(var n=e.getModelDescriptor().getStandardNodeInfosOnGeometryId(),a=e.getModelDescriptor().getReferencedMeshBufferData(),s=this.mapMaterialIdToMergedNode,o=[],l=[],d=0,h=t.length;d<h;d++){var c=a[t[d]];c&&(l.push(c),o.push(c.P),o.push(c.I),c.N&&o.push(c.N),c.UV&&o.push(c.UV))}var u=r.Workers.WorkerLib.getMeshCreateWorker();u.addEventListener("message",(function(e){for(var t=e.data.dataBuffers,r=Object.keys(t),n=0,a=r.length;n<a;n++)for(var o=r[n],l=t[o],d=0,h=l.length;d<h;d++){var c=l[d],p=c.bufferData,m=c.indices,f=new THREE.BufferGeometry;f._visible=!0,f.setIndex(new THREE.BufferAttribute(new Uint32Array(p.index),1)),f.setAttribute("position",new THREE.BufferAttribute(new Float32Array(p.position),3)),p.normal>0&&f.setAttribute("normal",new THREE.BufferAttribute(new Float32Array(p.normal),3)),p.uv>0&&f.setAttribute("uv",new THREE.BufferAttribute(new Float32Array(p.uv),2)),p.uv2>0&&f.setAttribute("uv2",new THREE.BufferAttribute(new Float32Array(p.uv2),2)),s[o]||(s[o]=[]),s[o].push({geometry:f,indices:m})}i&&i(),u.terminate()}),!1);var p={type:"shared",segmentMergeEnabled:!!r.GlobalData.SegmentedBatchMergeEnable,maxIndicesNumberPerBathSegment:r.GlobalData.maxIndicesNumberPerBathSegment,nodeItemType:r.ModelView.BaseDescriptor.EnumNodeItemType,nodeInfoMap:n,uv2BufferData:this._getUV2BufferData(e)},m=r.Utils.str2ab(JSON.stringify(p));o.push(m),u.postMessage({brief:m,dataBuffers:l},o)}_dealLineGeometries(e,t,i){for(var n=e.getModelDescriptor().getStandardNodeInfosOnGeometryId(),a=e.getModelDescriptor().getReferencedMeshBufferData(),s=this.mapMaterialIdToMergedNode,o=[],l=[],d=0,h=t.length;d<h;d++){var c=t[d],u=a[c];u&&(u.meshId=c,l.push(u),-1===o.indexOf(u.P.buffer)&&o.push(u.P.buffer),-1===o.indexOf(u.I.buffer)&&o.push(u.I.buffer))}var p=r.Workers.WorkerLib.getMeshCreateWorker();p.addEventListener("message",(function(e){for(var t=e.data.dataBuffers,r=Object.keys(t),n=0,a=r.length;n<a;n++)for(var o=r[n],l=t[o],d=0,h=l.length;d<h;d++){var c=l[d],u=c.bufferData,m=c.indices,f=new THREE.BufferGeometry;f._visible=!0,f.setIndex(new THREE.BufferAttribute(new Uint32Array(u.index),1)),f.setAttribute("position",new THREE.BufferAttribute(new Float32Array(u.position),3)),s[o]||(s[o]=[]),s[o].push({geometry:f,indices:m})}i&&i(),p.terminate()}),!1);var m={type:"unique",segmentMergeEnabled:!!r.GlobalData.SegmentedBatchMergeEnable,maxIndicesNumberPerBathSegment:r.GlobalData.maxIndicesNumberPerBathSegment,nodeItemType:r.ModelView.BaseDescriptor.EnumNodeItemType,nodeInfoMap:n,uv2BufferData:this._getUV2BufferData(e)},f=r.Utils.str2ab(JSON.stringify(m));o.push(f),p.postMessage({brief:f,dataBuffers:l},o)}_dealParameterizedGeometries(e,t,i){for(var n=e.getModelDescriptor().getStandardNodeInfosOnGeometryId(),a=this.mapMaterialIdToMergedNode,s=[],o=0,l=t.length;o<l;o++)s.push({meshId:t[o]});var d=r.Workers.WorkerLib.getMeshCreateWorker();d.addEventListener("message",(function(e){for(var t=e.data.dataBuffers,r=Object.keys(t),n=0,s=r.length;n<s;n++)for(var o=r[n],l=t[o],h=0,c=l.length;h<c;h++){var u=l[h],p=u.bufferData,m=u.indices,f=new THREE.BufferGeometry;f._visible=!0,f.setIndex(new THREE.BufferAttribute(new Uint32Array(p.index),1)),f.setAttribute("position",new THREE.BufferAttribute(new Float32Array(p.position),3)),p.normal>0&&f.setAttribute("normal",new THREE.BufferAttribute(new Float32Array(p.normal),3)),p.uv>0&&f.setAttribute("uv",new THREE.BufferAttribute(new Float32Array(p.uv),2)),a[o]||(a[o]=[]),a[o].push({geometry:f,indices:m})}i&&i(),d.terminate()}),!1);var h={type:"parameterized",segmentMergeEnabled:!!r.GlobalData.SegmentedBatchMergeEnable,maxIndicesNumberPerBathSegment:r.GlobalData.maxIndicesNumberPerBathSegment,nodeItemType:r.ModelView.BaseDescriptor.EnumNodeItemType,nodeInfoMap:n},c=r.Utils.str2ab(JSON.stringify(h));transferableObjects.push(c),d.postMessage({brief:c,dataBuffers:s})}}r.ModelView.WorkerDataBatchedMeshManager=e}(),function(){class e extends r.ModelView.DataBatchedWireframeManager{constructor(e){super(e)}_dealSharedBorderLines(e){var t=e.getModelDescriptor().getSharedBorderLineCache();if(t){console.time("T_createBorderLines");for(var i=this,n=[],a=0,s=t.length;a<s;a++){var o=t[a];n.push(o.P),n.push(o.I);for(var l=o.IndexInfos,d=0,h=l.length;d<h;d++)l[d].meshId=e.getModelDescriptor().convertGeometryId(l[d].meshId)}var c=e.getModelDescriptor().getStandardNodeInfosOnGeometryId(),u=e.getWireframeMaterial(),p=r.Workers.WorkerLib.getBorderLineCreateWorker();p.addEventListener("message",(function(e){var t=e.data,r=JSON.parse(t.groupIndices),n=t.bufferData.index,a=t.bufferData.position,s=new THREE.BufferGeometry;s.setIndex(new THREE.BufferAttribute(n.array,n.itemSize,n.normalized)),s.setAttribute("position",new THREE.BufferAttribute(a.array,a.itemSize,a.normalized));var o=new THREE.LineSegments(s,u);o._indicesGroup=r,i.wireframeLineSegments.push(o),console.timeEnd("T_createBorderLines"),p.terminate()}),!1);var m=r.Utils.str2ab(JSON.stringify(c));n.push(m),p.postMessage({infos:m,bufferDataArray:t},n)}}}r.ModelView.WorkerDataBatchedWireframeManager=e}(),function(){class e extends r.ModelView.BatchedBaseManager{constructor(){super(),this.meshManager=new r.ModelView.WorkerDataBatchedMeshManager(this),this.wireframeManager=new r.ModelView.WorkerDataBatchedWireframeManager(this)}}r.ModelView.WorkerDataBatchedManager=e}(),function(){class e extends r.ModelView.InstancedMeshManager{constructor(e){super(e)}}r.ModelView.WorkerDataBatchedInstancedMeshManager=e}(),function(){class e extends r.ModelView.InstancedWireframeManager{constructor(e){super(e)}}r.ModelView.WorkerDataBatchedInstancedWireframeManager=e}(),function(){class e extends r.ModelView.InstancedBaseManager{constructor(){super(),this.meshManager=new r.ModelView.WorkerDataBatchedInstancedMeshManager(this),this.wireframeManager=new r.ModelView.WorkerDataBatchedInstancedWireframeManager(this)}}r.ModelView.WorkerDataBatchedInstancedManager=e}(),function(){class e extends r.ModelView.DataBatchedBaseHandler{constructor(e){super(e),this.tag="worker_merge_data",this.defaultManager=new r.ModelView.WorkerDataBatchedManager,this.instancedManager=new r.ModelView.WorkerDataBatchedInstancedManager,this.loader=new r.ModelView.WorkerDataBatchedLoader(this)}prepareData(e){this.dataReady||(this.dataReady=!0,this.settleData(e))}settleData(e){this.loader.descriptor.updateNodeInfos(),this.model.getModelDescriptor().cacheNodeInfosOnGeometryId(),this.addNodeInfoToOctantMap(),this.createMeshNodes(e)}}r.ModelView.WorkerDataBatchedHandler=e}(),function(){class e extends r.ModelView.MeshBaseManager{constructor(e){super(),this.manager=e,this.occlusionVisibleOctant=[],this.usedNodeInfoMap={},this.lineNodes={},this.activeMeshMap={}}destroy(){if(super.destroy(),this.clearData(),this.pickingNodeGenerators){for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].destroy();this.pickingNodeGenerators=null}this.activeMeshMap=null,this.manager=null,this.occlusionVisibleOctant=null,this.usedNodeInfoMap=null,this.lineNodes=null}disposeLineNodes(){for(var e in this.lineNodes){var t=this.lineNodes[e];t.geometry.dispose(),t=null,delete this.lineNodes[e]}}clearData(){if(this.pickingNodeGenerators)for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].clearData();this._clearActiveMeshMap(),this.disposeGeometries(),this.disposeLineNodes(),this.usedNodeInfoMap={},this.occlusionVisibleOctant.length=0}updateNode(e,t,i){var n,a=this,s=e.getFilter()._hasOverrideMaterialFilter(),o=e.selectedMaterial;n=0===i?a._getUsableMaterial(e,t,o,s):a._getUsableMaterial(e,t,null,s),r.ModelView.BaseDescriptor.isLineNode(t)?a._dealLineSegments(e,t,n):a._dealMeshes(e,t,n),n=null}cullNodes(e,t,i){var r=this._getUsedNodeInfosByOctantId(t),n=this;if(r||(this.manager.traverseNodeInfoMapByOctantId(t,(function(t,i){n._isSatisfied(e,i)&&n._cacheToUsedNodeInfoMap(t,i)})),r=this._getUsedNodeInfosByOctantId(t)),!r)return i;for(var a=0,s=r.length;a<s&&(i=this.collectNodeInfo(e,r[a],i),!this.manager.isFull(e,i));a++);return i}_getUsableMaterial(e,t,i,n){var a=t.materialId,s=t.userId,o=e.materialManager.materials,l=e.manager.sceneState,d=e.getFilter(),h=null,c=l.isSelected(s);1!=c||d._isPickable(t)||(c=!1),i?r.GlobalData.PickingEffect?h=d._getOverrideMaterial(t):(h=d._getOverrideMaterial(t))&&!c||(h=i):n&&(h=d._getOverrideMaterial(t));var u=e.manager.getOverrideMaterialByNodeInfo(t,e.materialManager.getMaterialById(t.materialId));return h=h||u||o[a]||r.MaterialUtil.getDefaultStandardMaterial(),r.GlobalData.Hover&&l.hoverId===s&&!1===c&&(h=l.getHoverMaterial(h)),h}collectNodeInfo(e,t,i){var r=e.getFilter(),n=r._hasHiddenFileIdFilter(),a=r._hasOverrideMaterialFilter(),s=e.manager.sceneState.selectionSet,o=r._hasRenderPromotionFilter(),l=e.manager.getCategoriesFromHighPriority("inner");return e.isReplacedUserId(t.userId)||e.isHiddenSourceObjectUserId(t.userId)||n&&r._isHiddenFileId(t)||!1===r._isVisible(t)?i:s[t.userId]||a&&r._hasHighPriorityOverrideMaterial(t)?(this.manager.addToPriorityNodesSet(0,t),++i):o&&r._isRenderPromotion(t)||t.userData&&t.userData.categoryId&&l[t.userData.categoryId]?(this.manager.addToPriorityNodesSet(1,t),++i):(this.manager.isFull(e,i)||(this.manager.addToPriorityNodesSet(2,t),i++),i)}getMeshesByUserIds(e,t,i){const r=e.pool._pool,n=t.toString(),a=i.toString(),s=e.getLengthUnitsMatrix();for(let t=0;t<r.length;t++){const i=r[t];if(i.name==n||i.name==a){let t=i.geometry.boundingBox;t||(i.geometry.computeBoundingBox(),t=i.geometry.boundingBox),e.minDistanceObjects[i.name].push({mesh:i,matrix:i.matrix,unitsMatrix:s,boundingBox:t})}}}_getUsedGeometry(e,t){if(!r.GlobalData.Instance&&t.uvArrayBuffer){var i,n=t.geometryId+"|"+t.nodeId;if(i=this.getGeometryById(n))return i;var a=this._createGeometryByNodeInfo(e,t);a instanceof Array||(a=[a]),i=[];for(var s=new THREE.Matrix3,o=new THREE.Vector3,l=t.uvArrayBuffer,d=0,h=a.length;d<h;d++){var c=new THREE.BufferGeometry;c.setIndex(a[d].index),c.setAttribute("position",a[d].attributes.position),c.setAttribute("normal",a[d].attributes.normal),s.set(l[6*d],l[6*d+2],l[6*d+4],l[6*d+1],l[6*d+3],l[6*d+5],0,0,1);for(var u=[],p=a[d].attributes.uv.array,m=0,f=p.length;m<f;m+=2)o.set(p[m],p[m+1],1),o.applyMatrix3(s),u.push(o.x),u.push(o.y);c.setAttribute("uv",new THREE.Float32BufferAttribute(u,2)),i.push(c)}this._cacheGeometry(n,i)}else i=this.getGeometryByNodeInfo(e,t);return i}_dealMeshes(e,t,i){const n=this._getNodeGroupRenderOrder(t,i);let a=this._getUsedGeometry(e,t);a instanceof Array||(a=[a]);for(var s=0,o=a.length;s<o;s++){const o=e.pool.get({databagId:e.databagId,meshId:t.nodeId,userId:t.userId,originalId:t.originalId,userData:t.userData,geometry:a[s],matrix:t.matrix,material:i,isMesh:!0,isLine:!1,isLineSegments:!1,groupOrder:n.groupRenderOrder,renderOrder:n.renderOrder});o&&(o.geometryId=t.geometryId,this._cacheActiveMesh(t.userId,t.nodeId,o),e.manager.addMeshToOctantMap(e.getEncodedDatabagId(),t.nodeId,new r.SingleCapsuleObject(t.nodeId,o)))}}_dealLineSegments(e,t,i){const n=this.getGeometryByNodeInfo(e,t);if(!n)return;const a=this._getNodeGroupRenderOrder(t,i),s=e.pool.get({databagId:e.databagId,meshId:t.nodeId,userId:t.userId,originalId:t.originalId,userData:t.userData,geometry:n,matrix:t.matrix,material:i,isMesh:!1,isLine:!0,isLineSegments:!0,groupOrder:a.groupRenderOrder,renderOrder:a.renderOrder});s&&(s.geometryId=t.geometryId,this._cacheActiveMesh(t.userId,t.nodeId,s),e.manager.addMeshToOctantMap(e.getEncodedDatabagId(),t.nodeId,new r.SingleCapsuleObject(t.nodeId,s)))}_getUsedNodeInfosByOctantId(e){return this.usedNodeInfoMap[e]}_cacheToUsedNodeInfoMap(e,t){this.usedNodeInfoMap[e]||(this.usedNodeInfoMap[e]=[]),this.usedNodeInfoMap[e].push(t)}traverseUsedNodeInfoMap(e,t){const i=this.usedNodeInfoMap[e];for(let r=0,n=i.length;r<n;r++)t(e,i[r])}_isSatisfied(e,t){const i=e.getLoadedUserIdsObject();return!i||!!i[t.userId]}_applyOcclusionTranslucent(e){if(r.GlobalData.OcclusionTranslucentEnabled){var t=e.pool.getObjects(),i=e.manager.octantToObjectMap,n=this.occlusionVisibleOctant.length;if(n>0)for(var a=e.manager.getFrustumFromOcclusionCamera(),s=0;s<n;++s){var o=i[this.occlusionVisibleOctant[s].octantId];if(o&&o.length>0)for(var l=0,d=o.length;l<d;l+=2)for(var h=o[l];h<=o[l+1];h++){var c=t[h];r.CameraUtil.intersectObjectWithFrustum(c,a)&&this._overrideOcclusionMaterial(c)}}}}_overrideOcclusionMaterial(e,t){var i=t.material;if(i&&!1===i.transparent){var n=e.manager.acquireMaterial(),a=n.material;i.color?a.color.copy(i.color):n.resetColor(),a.opacity=r.GlobalData.OcclusionOpacity,t.material=a,t.material.needsUpdate=!0}}getGeometryBuffersByUserId(e,t){var i=e.getModelDescriptor().getStandardNodeInfosById(t);if(!i)return[];for(var n=[],a=e.getDatabagId(),s=0,o=i.length;s<o;s++){var l=i[s],d=this.getGeometryByNodeInfo(e,l);if(d){var h=r.ModelView.BaseDescriptor.isLineNode(l);if(d instanceof Array)for(var c=0,u=d.length;c<u;c++)n.push({isLines:h,databagId:a,nodeId:l.nodeId,position:d[c].getAttribute("position").array,index:d[c].getIndex().array,matrix:l.matrix});else n.push({isLines:h,databagId:a,nodeId:l.nodeId,position:d.getAttribute("position").array,index:d.getIndex().array,matrix:l.matrix})}}return n}disposeBufferAfterVbo(){}traverseActiveMeshMap(e,t){for(var i=0,r=(e=e||Object.keys(this.activeMeshMap)).length;i<r;i++){var n=e[i];if(this.activeMeshMap[n])for(var a=Object.keys(this.activeMeshMap[n]),s=0,o=a.length;s<o;s++){var l=a[s];t(n,l,this.activeMeshMap[n][l])}}}getActiveMeshMapById(e){return this.activeMeshMap[e]}_cacheActiveMesh(e,t,i){this.activeMeshMap[e]||(this.activeMeshMap[e]={}),this.activeMeshMap[e][t]||(this.activeMeshMap[e][t]=[]),this.activeMeshMap[e][t].push(i)}_clearActiveMeshMap(){this.activeMeshMap={}}getPickingNodeGenerator(e){return e=null==e?"pick":e,this.pickingNodeGenerators||(this.pickingNodeGenerators={}),this.pickingNodeGenerators[e]||(this.pickingNodeGenerators[e]=new r.PickingMeshGenerator(this),this.pickingNodeGenerators[e].reserveMaterial=!!e.startsWith("glow")),this.pickingNodeGenerators[e]}_getNodeGroupRenderOrder(e,t){return{groupRenderOrder:t&&t.transparent?0:e.cellDepth,renderOrder:e.octantId}}}r.ModelView.IncrementedMeshManager=e}(),r.ModelView.IncrementedWireframeManager=class{constructor(e){this.manager=e,this.wireframeGeometryMap={},this.usedNodeInfoMap={}}destroy(){if(this.pickingNodeGenerators){for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].destroy();this.pickingNodeGenerators=null}this._disposeGeometries(),this.wireframeGeometryMap=null,this.usedNodeInfoMap=null,this.manager=null}clearData(){if(this.pickingNodeGenerators)for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].clearData();this._disposeGeometries(),this.wireframeGeometryMap={},this.usedNodeInfoMap={}}cullNodes(e,t,i){var r=this,n=this._getUsedNodeInfosByOctantId(t);if(n||(this.manager.traverseNodeInfoMapByOctantId(t,(function(t,i){r._isSatisfied(e,i)&&r._cacheToUsedNodeInfoMap(t,i)})),n=this._getUsedNodeInfosByOctantId(t)),!n)return i;for(var a=0,s=n.length;a<s&&(i=this._collectNodeInfo(e,n[a],i),!this.manager.isFull(e,i));a++);return i}updateNode(e,t){const i=e.getFilter()._getOverrideWireFrameMaterial(t)||e.getWireframeMaterial(),r=this._getWireframeGeometryByNodeInfo(e,t),n=this._getNodeGroupRenderOrder(t,i);for(let a=0,s=r.length;a<s;a++)e.pool.get({databagId:e.databagId,meshId:t.nodeId,userId:t.userId,geometry:r[a],matrix:t.matrix,material:i,isMesh:!1,isLine:!0,isLineSegments:!0,pickable:!1,groupOrder:n.groupRenderOrder,renderOrder:n.renderOrder})}_getUsedNodeInfosByOctantId(e){return this.usedNodeInfoMap[e]}_cacheToUsedNodeInfoMap(e,t){this.usedNodeInfoMap[e]||(this.usedNodeInfoMap[e]=[]),this.usedNodeInfoMap[e].push(t)}_collectNodeInfo(e,t,i){var r=e.getFilter(),n=r._hasHiddenFileIdFilter();return e.isReplacedUserId(t.userId)||e.isHiddenSourceObjectUserId(t.userId)||n&&r._isHiddenFileId(t)||!1===r._isVisible(t)||this.manager.isFull(e,i)||(this.manager.addToPriorityNodesSet(2,{nodeInfo:t,wireframe:!0}),i++),i}_getWireframeGeometryByNodeInfo(e,t){return this._getWireframeGeometryById(t.geometryId,this.manager.getGeometryByNodeInfo(e,t))}_getWireframeGeometryById(e,t){if(this.wireframeGeometryMap[e])return this.wireframeGeometryMap[e];var i,n,a=[];if(t instanceof Array)for(var s=0,o=t.length;s<o;s++)n=r.BuildEdge(t[s].attributes.position.array,t[s].index.array),(i=new THREE.BufferGeometry).setIndex(new THREE.Uint32BufferAttribute(n,1)),i.setAttribute("position",t[s].attributes.position,3),a.push(i);else n=r.BuildEdge(t.attributes.position.array,t.index.array),(i=new THREE.BufferGeometry).setIndex(new THREE.Uint32BufferAttribute(n,1)),i.setAttribute("position",t.attributes.position,3),a.push(i);return this.wireframeGeometryMap[e]=a,this.wireframeGeometryMap[e]}_traverseWireframeGeometryMap(e){for(var t=Object.keys(this.wireframeGeometryMap),i=0,r=t.length;i<r;i++){var n=this.wireframeGeometryMap[t[i]];if(n)for(var a=0,s=n.length;a<s;a++)e(n[a])}}_disposeGeometries(){this._traverseWireframeGeometryMap((function(e){e.dispose()}))}_isSatisfied(e,t){if(!this.manager.isNeedWireframing(t.userId))return!1;var i=e.getLoadedUserIdsObject();return!(i&&!i[t.userId])}disposeBufferAfterVbo(){}getPickingNodeGenerator(e){return e=null==e?"pick":e,this.pickingNodeGenerators||(this.pickingNodeGenerators={}),this.pickingNodeGenerators[e]||(this.pickingNodeGenerators[e]=new r.PickingWireFrameGenerator(this)),this.pickingNodeGenerators[e]}_getNodeGroupRenderOrder(e,t){return{groupRenderOrder:t&&t.transparent?0:e.cellDepth,renderOrder:e.octantId}}},function(){class e extends r.ModelView.MeshBaseManager{constructor(e){super(),this.manager=e,this.instanceGeometryMap={},this.bufferAttributeMap={},this.nodeIdxMapFromUserId={},this.matrixInfoMapFromUserId={},this.cachedInstance={vState:{},vColor:{},mcol0:{},mcol1:{},mcol2:{},mcol3:{},muvCol0:{},muvCol1:{},muvCol2:{}},this.selectedMeshes=[],this.nonSelectedMeshes=[],this.selectedObjectIds=[],this.mgIdMapFromOctantId={},this.activeMeshMap={}}destroy(){if(super.destroy(),this.pickingNodeGenerators){for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].destroy();this.pickingNodeGenerators=null}this.activeMeshMap=null,this.cachedInstance=null,this.bufferAttributeMap=null,this.nodeIdxMapFromUserId=null,this.matrixInfoMapFromUserId=null,this.disposeInstanceGeometries(),this.instanceGeometryMap=null,this.manager=null,this.selectedMeshes=null,this.nonSelectedMeshes=null,this.selectedObjectIds=null,this.mgIdMapFromOctantId=null}clearData(){if(this.pickingNodeGenerators)for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].clearData();this._clearActiveMeshMap(),this.bufferDestroyed=!1,this.disposeGeometries(),this.disposeInstanceGeometries(),this.clearInstanceCache()}clearInstanceCache(){this.cachedInstance.vState={},this.cachedInstance.vColor={},this.cachedInstance.mcol0={},this.cachedInstance.mcol1={},this.cachedInstance.mcol2={},this.cachedInstance.mcol3={},this.cachedInstance.muvCol0={},this.cachedInstance.muvCol1={},this.cachedInstance.muvCol2={},this.bufferAttributeMap={},this.nodeIdxMapFromUserId={},this.instanceGeometryMap={},this.matrixInfoMapFromUserId={},this.geometries={}}getBufferAttributesBy(e){if(this.bufferAttributeMap[e])return this.bufferAttributeMap[e];var t=this.cachedInstance,i=new THREE.InstancedBufferAttribute(new Float32Array(t.mcol0[e]),3,!1,1),r=new THREE.InstancedBufferAttribute(new Float32Array(t.mcol1[e]),3,!1,1),n=new THREE.InstancedBufferAttribute(new Float32Array(t.mcol2[e]),3,!1,1),a=new THREE.InstancedBufferAttribute(new Float32Array(t.mcol3[e]),3,!1,1),s=[],o=[],l=[];if(t.muvCol0[e])for(var d=0,h=t.muvCol0[e].length;d<h;d++)s.push(new THREE.InstancedBufferAttribute(new Float32Array(t.muvCol0[e][d]),2,!1,1)),o.push(new THREE.InstancedBufferAttribute(new Float32Array(t.muvCol1[e][d]),2,!1,1)),l.push(new THREE.InstancedBufferAttribute(new Float32Array(t.muvCol2[e][d]),2,!1,1));return this.bufferAttributeMap[e]={attributeMcol0:i,attributeMcol1:r,attributeMcol2:n,attributeMcol3:a,attributeMuvCol0Array:s,attributeMuvCol1Array:o,attributeMuvCol2Array:l},this.bufferAttributeMap[e]}resetInstanceMaterial(){var e=this;this.traverseInstanceGeometryMap((function(t,i){for(var n=0,a=i.length;n<a;++n)e._hasStateAttribute(i[n])&&(i[n].getAttribute("vState").array.fill(r.EnumInstanceState.NONE),i[n].getAttribute("vState").needsUpdate=!0,i[n].getAttribute("vState2").array.fill(r.EnumInstanceState.HIDDEN),i[n].getAttribute("vState2").needsUpdate=!0)}))}clearInstanceStateByUserId(e){function t(e,t,i,r){for(var n=e.getAttribute("vState").array,a=e.getAttribute("vState2").array,s=0;s<t.length;++s){var o=t[s];n[o]=i,a[o]=r}e.getAttribute("vState").needsUpdate=!0,e.getAttribute("vState2").needsUpdate=!0}var i=this,n=r.EnumInstanceState.NONE,a=r.EnumInstanceState.HIDDEN;this.traverseNodeIdxMapByUserId(e,(function(e,r){var s=i.getInstanceGeometries(e);if(s)for(var o=0,l=s.length;o<l;o++)i._hasStateAttribute(s[o])&&t(s[o],r,n,a)}))}updateInstanceStateByUserId(e,t,i,n){function a(e,t,i,r,n){for(var a=e.getAttribute("vState").array,s=e.getAttribute("vState2").array,o=e.getAttribute("aColor"),l=o?o.array:null,d=0;d<t.length;++d){var h=t[d];a[h]=i,s[h]=r,null!==l&&null!==n&&(l[4*h]=n[0],l[4*h+1]=n[1],l[4*h+2]=n[2],l[4*h+3]=n[3])}e.getAttribute("vState").needsUpdate=!0,e.getAttribute("vState2").needsUpdate=!0,o&&(o.needsUpdate=!0)}var s=e.materialManager,o=this;this.traverseNodeIdxMapByUserId(t,(function(l,d){var h=o.getInstanceGeometries(l);if(h){var c=o.manager.getMaterialIdByMeshId(l),u=o.getUsableMaterialColorParamsBy(e,c,i,n),p=u.rgbaColor,m=i;i===r.EnumInstanceState.TRANSPARENT&&(m=r.EnumInstanceState.OVERRIDED),i===r.EnumInstanceState.SELECTED&&o.cacheSelectedObjectIds(t,l);var f,g,v=s.getInstanceMaterialById(c,e)[0];v.transparent===u.transparent?(f=m,g=r.EnumInstanceState.HIDDEN):(f=r.EnumInstanceState.HIDDEN,g=m),m===r.EnumInstanceState.BLINK&&v.setBlinkColor(e.manager.blinkManager.getBlinkColor(e.id));for(var y=0,M=h.length;y<M;y++)o._hasStateAttribute(h[y])&&a(h[y],d,f,g,p)}}))}getUsableMaterialColorParamsBy(e,t,i,n){var a,s,o=e.selectedMaterial,l=e.getFilter()._getMaterialByName("scene"),d=e.materialManager,h=e.manager.getOverrideMaterialByName(t)||d.getMaterialById(t);switch(i){case r.EnumInstanceState.HOVER:n?(a=e.getFilter()._getMaterialByName(n),s=e.manager.sceneState.getHoverColorByMaterial(a)):s=e.manager.sceneState.getHoverColorByMaterial(h);break;case r.EnumInstanceState.SELECTED:s=r.MaterialUtil.getColorParamsByMaterial(o);break;case r.EnumInstanceState.TRANSPARENT:s=r.MaterialUtil.getColorParamsByMaterial(l);break;case r.EnumInstanceState.OVERRIDED:case r.EnumInstanceState.BLINK:n?(a=e.getFilter()._getMaterialByName(n),s=r.MaterialUtil.getColorParamsByMaterial(a)):s=r.MaterialUtil.getColorParamsByMaterial(h);break;default:s=r.MaterialUtil.getColorParamsByMaterial(h)}return s}getInstanceGeometries(e){return this.instanceGeometryMap[e]}_cacheInstanceGeometries(e,t){if(!this.instanceGeometryMap[e]){t instanceof Array||(t=[t]);for(var i=this.instanceGeometryMap[e]=[],r=0,n=t.length;r<n;++r)i[r]=new THREE.InstancedBufferGeometry,i[r].setIndex(t[r].index),i[r].setAttribute("position",t[r].attributes.position),i[r].setAttribute("normal",t[r].attributes.normal),i[r].setAttribute("uv",t[r].attributes.uv)}}traverseInstanceGeometryMap(e){var t=this.instanceGeometryMap;for(var i in t)e(i,t[i])}traverseInstanceGeometryMapById(e,t){var i=this.instanceGeometryMap[e];if(i)for(var r=0,n=i.length;r<n;r++)t(i[r],e)}disposeInstanceGeometries(){this.traverseInstanceGeometryMap((function(e,t){for(var i=0,r=t.length;i<r;i++)t[i].dispose()}))}cacheInstanceAttributeStateBy(e,t,i,r,n){var a=r.materialId,s=r.uvArrayBuffer;i instanceof Array||(i=[i]);var o=i.length,l=this.cachedInstance;if(!l.vState[t]){l.vState[t]=[],l.vColor[t]=[],l.mcol0[t]=[],l.mcol1[t]=[],l.mcol2[t]=[],l.mcol3[t]=[],l.muvCol0[t]=[],l.muvCol1[t]=[],l.muvCol2[t]=[];for(var d=0;d<o;++d)l.muvCol0[t][d]=[],l.muvCol1[t][d]=[],l.muvCol2[t][d]=[]}var h=n||e.materialManager.getMaterialById(a);l.vColor[t].push(h.color.r,h.color.g,h.color.b,h.opacity),l.vState[t].push(0);var c=r.matrix.elements;if(l.mcol0[t].push(c[0],c[1],c[2]),l.mcol1[t].push(c[4],c[5],c[6]),l.mcol2[t].push(c[8],c[9],c[10]),l.mcol3[t].push(c[12],c[13],c[14]),s)for(d=0;d<o;++d)l.muvCol0[t][d].push(s[6*d],s[6*d+1]),l.muvCol1[t][d].push(s[6*d+2],s[6*d+3]),l.muvCol2[t][d].push(s[6*d+4],s[6*d+5]);else for(d=0;d<o;++d)l.muvCol0[t][d].push(1,0),l.muvCol1[t][d].push(0,1),l.muvCol2[t][d].push(0,0);return l.vState[t].length-1}_cacheNodeIdxByUserId(e,t,i){var r=this.nodeIdxMapFromUserId;r[e]||(r[e]={}),r[e][t]||(r[e][t]=[]),r[e][t].push(i)}getNodeIdxMapByUserId(e){return this.nodeIdxMapFromUserId[e]}traverseNodeIdxMapByUserId(e,t){var i=this.nodeIdxMapFromUserId[e];for(var r in i)t(r,i[r])}traverseNodeIdxMap(e,t){for(var i=Object.keys(this.nodeIdxMapFromUserId),r=0,n=i.length;r<n;r++){var a=i[r];if(!t||!t(a)){var s=this.nodeIdxMapFromUserId[a];for(var o in s)e(o,s[o])}}}_cacheMatrixInfoByUserId(e,t,i){var r=this.matrixInfoMapFromUserId;r[e]||(r[e]={}),r[e][t]||(r[e][t]=[]),r[e][t].push(i)}traverseMatrixInfoMapByUserId(e,t){var i=this.matrixInfoMapFromUserId[e];for(var r in i)t(r,i[r])}getMeshesByUserId(e,t){var i=this;this.traverseMatrixInfoMapByUserId(t,(function(r,n){for(var a=i.getInstanceNodesById(r),s=0,o=n.length;s<o;s++)for(var l=0,d=a.length;l<d;l++){var h={};if(h.matrix=n[s].matrix,h.mesh=a[l],1===d)h.boundingBox=n[s].boundingBox;else{var c=h.mesh.geometry.boundingBox;c?c=c.clone():(h.mesh.geometry.computeBoundingBox(),c=h.mesh.geometry.boundingBox.clone()),c.applyMatrix4(h.matrix),h.boundingBox=c}e.minDistanceObjects[t].push(h)}}))}clearSelectedObjectIds(){}cacheSelectedObjectIds(e,t){}adjustVisibility(e,t){}changeVisibilityOfSelectedObjects(e,t){}changeVisibilityOfNonSelectedObjects(e,t){}restoreVisibilityOfObjects(){}disposeBufferAfterVbo(){}_cacheToMgIdMapFromOctantId(e,t,i){this.mgIdMapFromOctantId[e]||(this.mgIdMapFromOctantId[e]={}),this.mgIdMapFromOctantId[e][i]||(this.mgIdMapFromOctantId[e][i]={cellId:e,cellDepth:t,mgId:i})}traverseMgIdMapByOctantId(e,t,i){if(this.mgIdMapFromOctantId[e])for(var r=this.mgIdMapFromOctantId[e],n=Object.keys(r),a=0,s=n.length;a<s;a++){var o=r[n[a]];if(i&&i(o.mgId))break;t(e,o)}}_createGeometryById(e){if(this.geometryMap||(this.geometryMap={}),!this.geometryMap[e]){this.geometryMap[e]=!0;for(var t=this.cachedInstance,i=this.getBufferAttributesBy(e),n=this.getInstanceGeometries(e),a=0,s=n.length;a<s;a++){n[a].setAttribute("mcol0",i.attributeMcol0),n[a].setAttribute("mcol1",i.attributeMcol1),n[a].setAttribute("mcol2",i.attributeMcol2),n[a].setAttribute("mcol3",i.attributeMcol3),i.attributeMuvCol0Array.length>0&&(n[a].setAttribute("muvCol0",i.attributeMuvCol0Array[a]),n[a].setAttribute("muvCol1",i.attributeMuvCol1Array[a]),n[a].setAttribute("muvCol2",i.attributeMuvCol2Array[a])),n[a].setAttribute("aColor",new THREE.InstancedBufferAttribute(new Float32Array(t.vColor[e]),4,!1,1)),n[a].setAttribute("vState",new THREE.InstancedBufferAttribute(new Float32Array(t.vState[e]),1,!1,1)),n[a].setAttribute("vState2",new THREE.InstancedBufferAttribute(new Float32Array(t.vState[e]),1,!1,1));var o=n[a].getAttribute("vState").array,l=n[a].getAttribute("vState2").array;o.fill(r.EnumInstanceState.NONE),l.fill(r.EnumInstanceState.HIDDEN);var d=n[a].index;n[a].addGroup(0,d.count,0),n[a].addGroup(0,d.count,1)}}}cullNodes(e,t,i){var r=this;return this.traverseMgIdMapByOctantId(t,(function(e,t){r.manager.addToPriorityNodesSet(2,t)}),(function(t){return i+=1,!!r.manager.isFull(e,i)&&(i-=1,!0)})),i}updateNode(e,t){const i=this,n=this.manager.getMaterialIdByMeshId(t.mgId),a=e.materialManager.getInstanceMaterialById(n,e),s=this._getNodeGroupRenderOrder(t,a[0]);this._createGeometryById(t.mgId),this.traverseInstanceGeometryMapById(t.mgId,(function(n,o){const l=e.pool.get({databagId:e.databagId,meshId:o,geometry:n,material:a,isMesh:!0,isLine:!1,isLineSegments:!1,instanceOrNot:!0,groupOrder:s.groupRenderOrder,renderOrder:s.renderOrder});l&&(i._cacheActiveMesh(t.mgId,l),e.manager.addMeshToOctantMap(e.getEncodedDatabagId(),o,new r.InstancedCapsuleObject(o,l)))}))}createInstanceNodeInfo(e,t,i){var r=this;this.octantIdMap||(this.octantIdMap={}),this.octantIdMap[t]||(this.octantIdMap[t]=!0,this.manager.traverseNodeInfoMapByOctantId(t,(function(t,n){var a=r.getGeometryByNodeInfo(e,n),s=e.manager.getOverrideMaterialByNodeInfo(n,e.materialManager.getMaterialById(n.materialId));s&&(n.materialId=s.name);var o=r.manager.getMeshIdByNodeInfo(n),l=r.cacheInstanceAttributeStateBy(e,o,a,n,s);r._cacheNodeIdxByUserId(n.userId,o,l),r._cacheMatrixInfoByUserId(n.userId,o,{matrix:n.matrix,boundingBox:n.boundingBox}),r._cacheInstanceGeometries(o,a),r._cacheToMgIdMapFromOctantId(t,i,o)})))}getCachedInstanceData(){return this.cachedInstance}_hasStateAttribute(e){return!!e.attributes.vState}getGeometryBuffersByUserId(e,t){var i=e.getModelDescriptor().getInstancedNodeInfosById(t);if(!i)return[];for(var n=[],a=e.getDatabagId(),s=0,o=i.length;s<o;s++){var l=i[s],d=this.getGeometryByNodeInfo(e,l);if(d){var h=r.ModelView.BaseDescriptor.isLineNode(l);if(d instanceof Array)for(var c=0,u=d.length;c<u;c++)n.push({isLines:h,databagId:a,nodeId:l.nodeId,position:d[c].getAttribute("position").array,index:d[c].getIndex().array,matrix:l.matrix});else n.push({isLines:h,databagId:a,nodeId:l.nodeId,position:d.getAttribute("position").array,index:d.getIndex().array,matrix:l.matrix})}}return n}traverseActiveMeshMap(e,t){for(var i=0,r=(e=e||Object.keys(this.activeMeshMap)).length;i<r;i++){var n=e[i];if(this.activeMeshMap[n])t(n,this.activeMeshMap[n])}}getActiveMeshMapById(e){return this.activeMeshMap[e]}_cacheActiveMesh(e,t){this.activeMeshMap[e]||(this.activeMeshMap[e]=[]),this.activeMeshMap[e].push(t)}_clearActiveMeshMap(){this.activeMeshMap={}}getPickingNodeGenerator(e){return e=null==e?"pick":e,this.pickingNodeGenerators||(this.pickingNodeGenerators={}),this.pickingNodeGenerators[e]||(this.pickingNodeGenerators[e]=new r.PickingIncrementInstancedMeshGenerator(this),this.pickingNodeGenerators[e].reserveMaterial=!!e.startsWith("glow")),this.pickingNodeGenerators[e]}_getNodeGroupRenderOrder(e,t){return{groupRenderOrder:t&&t.transparent?0:e.cellDepth,renderOrder:e.octantId}}}r.ModelView.IncrementInstancedMeshManager=e}(),r.ModelView.IncrementInstancedWireframeManager=class{constructor(e){this.manager=e,this.wireframeGeometryMap={},this.wireframeBufferMap={}}destroy(){if(this.pickingNodeGenerators){for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].destroy();this.pickingNodeGenerators=null}this.disposeGeometries(),this.wireframeGeometryMap=null,this.wireframeBufferMap=null,this.manager=null}clearData(){if(this.pickingNodeGenerators)for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].clearData();this.disposeGeometries(),this.wireframeGeometryMap={},this.wireframeBufferMap={}}disposeGeometries(){this._traverseWireframeGeometryMap((function(e){e.dispose()}))}cullNodes(e,t,i){var r=this;return this.manager.getMeshManager().traverseMgIdMapByOctantId(t,(function(e,t){r.manager.addToPriorityNodesSet(2,{wireframe:!0,nodeInfo:t})}),(function(t){return i+=1,!!r.manager.isFull(e,i)&&(i-=1,!0)})),i}updateNode(e,t){const i=e.pool,r=e.getInstanceWireframeMaterial(),n=this._getNodeGroupRenderOrder(t,r);this._createGeometryById(t.mgId),this._traverseWireframeGeometryMapById(t.mgId,(function(t,a){i.get({databagId:e.databagId,meshId:a,geometry:t,material:r,isMesh:!1,isLine:!0,isLineSegments:!0,groupOrder:n.groupRenderOrder,renderOrder:n.renderOrder})}))}resetInstanceMaterial(){var e=r.EnumInstanceState.NONE,t=this;this._traverseWireframeGeometryMap((function(i){if(t._hasStateAttribute(i)){for(var r=i.getAttribute("vState").array,n=0,a=r.length;n<a;n++)r[n]=e;i.getAttribute("vState").needsUpdate=!0}})),this._updateNoWireframingState()}updateInstanceWireframeByUserId(e,t){if(t===r.EnumInstanceState.HIDDEN||t===r.EnumInstanceState.NONE){var i=this;this.manager.traverseNodeIdxMapByUserId(e,(function(e,r){i._setInstanceWireframeState(e,r,t)}))}}_getWireframeBufferById(e){var t=this.manager.getCombinedKeys(e).geometryId;if(this.wireframeBufferMap[t])return this.wireframeBufferMap[t];var i=this.manager.getMeshManager().getInstanceGeometries(e);if(!i)return[];for(var n=this.wireframeBufferMap[t]=[],a=0,s=i.length;a<s;a++){var o=i[a];n.push({index:r.BuildEdge(i[a].attributes.position.array,o.index.array),position:o.attributes.position})}return n}_traverseWireframeGeometryMap(e){for(var t=Object.keys(this.wireframeGeometryMap),i=0,r=t.length;i<r;i++)this._traverseWireframeGeometryMapById(t[i],e)}_traverseWireframeGeometryMapById(e,t){var i=this.wireframeGeometryMap[e];if(i)for(var r=0,n=i.length;r<n;r++)t(i[r],e)}_createGeometryById(e){if(!this.wireframeGeometryMap[e])for(var t=this.wireframeGeometryMap[e]=[],i=this.manager.getMeshManager().getBufferAttributesBy(e),r=this.manager.getMeshManager().getCachedInstanceData(),n=this._getWireframeBufferById(e),a=0,s=n.length;a<s;a++){var o=new THREE.InstancedBufferGeometry;o.setIndex(n[a].index),o.setAttribute("position",n[a].position),o.setAttribute("vState",new THREE.InstancedBufferAttribute(new Float32Array(r.vState[e]),1,!1,1)),o.setAttribute("mcol0",i.attributeMcol0),o.setAttribute("mcol1",i.attributeMcol1),o.setAttribute("mcol2",i.attributeMcol2),o.setAttribute("mcol3",i.attributeMcol3),t.push(o)}}_updateNoWireframingState(){var e=this,t=r.EnumInstanceState.HIDDEN;this.manager.traverseNodeIdxMap((function(i,r){e._setInstanceWireframeState(i,r,t)}),(function(t){return e.manager.isNeedWireframing(t)}))}_setInstanceWireframeState(e,t,i){var r=this;this._traverseWireframeGeometryMapById(e,(function(e){if(r._hasStateAttribute(e)){for(var n=e.getAttribute("vState").array,a=0,s=t.length;a<s;++a)n[t[a]]=i;e.getAttribute("vState").needsUpdate=!0}}))}adjustVisibility(e,t){}changeVisibilityOfSelectedObjects(e,t){}changeVisibilityOfNonSelectedObjects(e,t){this.adjustVisibility(e,t)}restoreVisibilityOfObjects(){}disposeBufferAfterVbo(){}_hasStateAttribute(e){return!!e.attributes.vState}getPickingNodeGenerator(e){return e=null==e?"pick":e,this.pickingNodeGenerators||(this.pickingNodeGenerators={}),this.pickingNodeGenerators[e]||(this.pickingNodeGenerators[e]=new r.PickingIncrementInstancedWireFrameGenerator(this)),this.pickingNodeGenerators[e]}_getNodeGroupRenderOrder(e,t){return{groupRenderOrder:t&&t.transparent?0:e.cellDepth,renderOrder:e.octantId}}},r.ModelView.IncrementInstancedManager=class{constructor(){this.meshManager=new r.ModelView.IncrementInstancedMeshManager(this),this.wireframeManager=new r.ModelView.IncrementInstancedWireframeManager(this),this.nodeInfoMapFromOctant={}}destroy(){this.meshManager.destroy(),this.meshManager=null,this.wireframeManager.destroy(),this.wireframeManager=null,this.nodeInfoMapFromOctant=null}clearData(){this.clearNodeInfoMap(),this.meshManager.clearData(),this.wireframeManager.clearData()}getGeometryByNodeInfo(e,t){return this.meshManager.getGeometryByNodeInfo(e,t)}traverseInstanceGeometryMap(e){this.meshManager.traverseInstanceGeometryMap(e)}traverseNodeIdxMapByUserId(e,t){this.meshManager.traverseNodeIdxMapByUserId(e,t)}traverseNodeIdxMap(e,t){this.meshManager.traverseNodeIdxMap(e,t)}getMeshesByUserId(e,t){this.meshManager.getMeshesByUserId(e,t)}_updateInstanceMaterialByUserId(e,t,i,r){this.meshManager.updateInstanceStateByUserId(e,t,i,r),this.wireframeManager.updateInstanceWireframeByUserId(t,i)}_updateInstanceMaterial(e){r.Logger.time("update instance material");var t=r.Model.EnumFilterState;for(var i in this.clearSelectedObjectIds(),this.filteredIds){var n=this.filteredIds[i];if(n[t.HIDDEN])this._updateInstanceMaterialByUserId(e,i,r.EnumInstanceState.HIDDEN);else if(n[t.TRANSPARENT])this._updateInstanceMaterialByUserId(e,i,r.EnumInstanceState.TRANSPARENT);else{if(e.manager.isSelectPriority()){if(n[t.SELECTED]){r.GlobalData.PickingEffect?n[t.OVERRIDED]&&this._updateInstanceMaterialByUserId(e,i,r.EnumInstanceState.OVERRIDED,n[t.OVERRIDED]):this._updateInstanceMaterialByUserId(e,i,r.EnumInstanceState.SELECTED);continue}if(n[t.BLINK]){n[t.OVERRIDED]?this._updateInstanceMaterialByUserId(e,i,r.EnumInstanceState.BLINK,n[t.OVERRIDED]):this._updateInstanceMaterialByUserId(e,i,r.EnumInstanceState.BLINK);continue}}else{if(n[t.BLINK]){n[t.OVERRIDED]?this._updateInstanceMaterialByUserId(e,i,r.EnumInstanceState.BLINK,n[t.OVERRIDED]):this._updateInstanceMaterialByUserId(e,i,r.EnumInstanceState.BLINK);continue}if(n[t.SELECTED]){r.GlobalData.PickingEffect?n[t.OVERRIDED]&&this._updateInstanceMaterialByUserId(e,i,r.EnumInstanceState.OVERRIDED,n[t.OVERRIDED]):this._updateInstanceMaterialByUserId(e,i,r.EnumInstanceState.SELECTED);continue}}n[t.HOVER]?n[t.OVERRIDED]?this._updateInstanceMaterialByUserId(e,i,r.EnumInstanceState.HOVER,n[t.OVERRIDED]):this._updateInstanceMaterialByUserId(e,i,r.EnumInstanceState.HOVER):n[t.OVERRIDED]&&this._updateInstanceMaterialByUserId(e,i,r.EnumInstanceState.OVERRIDED,n[t.OVERRIDED])}}r.Logger.timeEnd("update instance material")}_resetInstanceMaterial(){this.meshManager.resetInstanceMaterial(),this.wireframeManager.resetInstanceMaterial()}_collectFilteredUserIds(e,t,i){var n=e.getFilter(),a=n._hasHiddenFileIdFilter(),s=n._hasVisibleFilter(),o=n._hasOverrideMaterialFilter(),l=n._hasTransparentFilter(),d=e.hasReplacedUserId(),h=e.hasHiddenSourceObjectUserId(),c=this.filteredIds={};if(a||s||o||l||d||h)for(var u=r.Model.EnumFilterState,p=0;p<t.length;++p){var m=t[p],f=i[m];if(f&&f.length){var g=f[0];if(a&&n._isHiddenFileId(g)||s&&!1===n._isVisible(g)||e.isReplacedUserId(m)||e.isHiddenSourceObjectUserId(m))c[m]||(c[m]={}),c[m][u.HIDDEN]=!0;else if(l&&n._isTransparent(g))c[m]||(c[m]={}),c[m][u.TRANSPARENT]=!0;else if(o&&n._hasOverrideMaterial(g)){var v=n._getOverrideMaterial(g),y=null!=v?v.name:"";""!==y&&(c[m]||(c[m]={}),c[m][u.OVERRIDED]=y)}}}}_collectSelectedUserIds(e,t){var i=this.filteredIds=this.filteredIds||{},n=r.Model.EnumFilterState,a={};for(var s in e)t[s]&&(i[s]||(i[s]={}),i[s][n.SELECTED]=!0,a[s]=!0);this.selectedUserIds=Object.keys(a)}_clearSelectedState(e){if(this.filteredIds&&this.selectedUserIds&&this.selectedUserIds.length){for(var t=0,i=this.selectedUserIds.length;t<i;t++){var n=this.selectedUserIds[t];this.filteredIds[n]&&(this.meshManager.clearInstanceStateByUserId(n),delete this.filteredIds[n][r.Model.EnumFilterState.SELECTED])}this.selectedUserIds=null}}_collectHoveredUserIds(e,t){var i=this.filteredIds=this.filteredIds||{};this.hoverdUserId=void 0,e&&t[e]&&(i[e]||(i[e]={}),i[e][r.Model.EnumFilterState.HOVER]=!0,this.hoverdUserId=e)}_clearHoveredState(e){this.filteredIds&&this.hoverdUserId&&this.filteredIds[this.hoverdUserId]&&(this.meshManager.clearInstanceStateByUserId(this.hoverdUserId),delete this.filteredIds[this.hoverdUserId][r.Model.EnumFilterState.HOVER],this.hoverdUserId=void 0)}_collectBlinkedUserIds(e,t){var i=this.filteredIds=this.filteredIds||{},n=r.Model.EnumFilterState,a={};for(var s in e)t[s]&&(i[s]||(i[s]={}),i[s][n.BLINK]=!0,a[s]=!0);this.blinkUserIds=Object.keys(a)}_clearBlinkedState(e){if(this.filteredIds&&this.blinkUserIds&&this.blinkUserIds.length){for(var t=0,i=this.blinkUserIds.length;t<i;t++){var n=this.blinkUserIds[t];this.filteredIds[n]&&(this.meshManager.clearInstanceStateByUserId(n),delete this.filteredIds[n][r.Model.EnumFilterState.BLINK])}this.blinkUserIds=null}}applyFilter(e,t){if(this.hasNodeInfo(e)){var i;this.updateNodes(e),this._resetInstanceMaterial(),i=t||e.getModelDescriptor().getInstancedUserIds();var r=e.getModelDescriptor().getInstancedNodeInfos();this._collectFilteredUserIds(e,i,r),this._collectSelectedUserIds(e.manager.sceneState.selectionSet,r),this._collectBlinkedUserIds(e.manager.sceneState.getBlinkComponentsIdMap(e.id),r),this._collectHoveredUserIds(e.manager.sceneState.hoverId,r),this._updateInstanceMaterial(e)}}applySelection(e){if(this.hasNodeInfo(e)){var t=e.getModelDescriptor().getInstancedNodeInfos();this._clearSelectedState(e),this._clearHoveredState(e),this._collectSelectedUserIds(e.manager.sceneState.selectionSet,t),this._collectHoveredUserIds(e.manager.sceneState.hoverId,t),this._updateInstanceMaterial(e),this.updateNodes(e)}}clearSelection(e){this._clearSelectedState(e),this.applyHover(e)}applyHover(e){if(this.hasNodeInfo(e)){var t=e.getModelDescriptor().getInstancedNodeInfos();this._clearHoveredState(e),this._collectHoveredUserIds(e.manager.sceneState.hoverId,t),this._updateInstanceMaterial(e),this.updateNodes(e)}}clearHover(e){this._clearHoveredState(e),this._updateInstanceMaterial(e),this.updateNodes(e)}applyBlink(e){if(this.hasNodeInfo(e)){var t=e.getModelDescriptor().getInstancedNodeInfos();this._clearBlinkedState(e),this._clearHoveredState(e),this._collectBlinkedUserIds(e.manager.sceneState.getBlinkComponentsIdMap(e.id),t),this._collectHoveredUserIds(e.manager.sceneState.hoverId,t),this._updateInstanceMaterial(e),this.updateNodes(e)}}clearBlink(e){this._clearBlinkedState(e),this.applyHover(e)}applyReplacement(e){this._updateInstanceMaterial(e),this.updateNodes(e)}updateNode(e,t){t.wireframe?this.wireframeManager.updateNode(e,t.nodeInfo):this.meshManager.updateNode(e,t)}updateNodes(e){}createMeshNodes(e,t,i){this.meshManager.createMeshNodes(e,t,i)}clearCachedData(){this.meshManager.disposeGeometries()}getMeshesByUserIds(e,t,i){this.meshManager.getMeshesByUserIds(e,t,i)}clearSelectedObjectIds(){this.meshManager.clearSelectedObjectIds()}adjustVisibility(e,t){this.meshManager.adjustVisibility(e,t),this.wireframeManager.adjustVisibility(e,t)}changeVisibilityOfSelectedObjects(e,t){this.meshManager.changeVisibilityOfSelectedObjects(e,t),this.wireframeManager.changeVisibilityOfSelectedObjects(e,t)}changeVisibilityOfNonSelectedObjects(e,t){this.meshManager.changeVisibilityOfNonSelectedObjects(e,t),this.wireframeManager.changeVisibilityOfNonSelectedObjects(e,t)}restoreVisibilityOfObjects(){this.meshManager.restoreVisibilityOfObjects(),this.wireframeManager.restoreVisibilityOfObjects()}disposeBufferAfterVbo(){this.meshManager.disposeBufferAfterVbo(),this.wireframeManager.disposeBufferAfterVbo()}cullNodes(e,t,i,r,n){return this.hasOctantId(t)?(this.meshManager.createInstanceNodeInfo(e,t,i),0===r?this.meshManager.cullNodes(e,t,n):1===r?this.wireframeManager.cullNodes(e,t,n):n):n}clearNodeInfoMap(){this.nodeInfoMapFromOctant={}}cacheToNodeInfoMap(e,t){this.nodeInfoMapFromOctant[e]||(this.nodeInfoMapFromOctant[e]=[]),this.nodeInfoMapFromOctant[e].push(t)}traverseNodeInfoMapByOctantId(e,t){if(this.nodeInfoMapFromOctant[e])for(var i=0,r=this.nodeInfoMapFromOctant[e].length;i<r;i++)t(e,this.nodeInfoMapFromOctant[e][i])}traverseNodeInfoMap(e){for(var t=Object.keys(this.nodeInfoMapFromOctant),i=0,r=t.length;i<r;i++)this.traverseNodeInfoMapByOctantId(t[i],e)}traverseNodeInfoMapByIds(e,t){if(e)for(var i=Object.keys(this.nodeInfoMapFromOctant),r=0,n=i.length;r<n;r++)for(var a=i[r],s=this.nodeInfoMapFromOctant[a],o=0,l=s.length;o<l;o++)e[s[o].userId]&&t(a,s[o]);else this.traverseNodeInfoMap(t)}hasNodeInfo(){return!r.Utils.isEmptyObjectSimple(this.nodeInfoMapFromOctant)}hasOctantId(e){return!(!this.nodeInfoMapFromOctant[e]||!this.nodeInfoMapFromOctant[e].length)}addToPriorityNodesSet(e,t){this.handler.addToPriorityNodesSet(e,t)}isFull(e,t){return this.handler.isFull(e,t)}isNeedWireframing(e){return this.handler.isNeedWireframing(e)}getMeshIdByNodeInfo(e){return r.Utils.getCombinedKeyString([e.materialId,e.geometryId,e.cellId])}getMaterialIdByMeshId(e){return r.Utils.splitCombinedKeyString(e)[0]}getCombinedKeys(e){var t=r.Utils.splitCombinedKeyString(e);return{materialId:t[0],geometryId:t[1],cellId:t[2]}}getNodeInfoCountById(e){var t=this.meshManager.getCachedInstanceData();return t.vState[e]?t.muvCol0&&t.muvCol0[e]&&t.muvCol0[e].length?t.muvCol0[e].length*t.vState[e].length:t.vState[e].length:0}getGeometryBuffersByUserId(e,t){return this.meshManager.getGeometryBuffersByUserId(e,t)}isPickableNode(e){if(!this.filteredIds||!this.filteredIds[e])return!0;var t=this.filteredIds[e],i=r.Model.EnumFilterState;return!t[i.HIDDEN]&&!t[i.TRANSPARENT]}isHiddenNode(e){return!!(this.filteredIds&&this.filteredIds[e]&&this.filteredIds[e][r.Model.EnumFilterState.HIDDEN])}getMeshManager(){return this.meshManager}getWireFrameManager(){return this.wireframeManager}},r.ModelView.IncrementedManager=class{constructor(){this.meshManager=new r.ModelView.IncrementedMeshManager(this),this.wireframeManager=new r.ModelView.IncrementedWireframeManager(this),this.nodeInfoMapFromOctant={},this.handler=null}destroy(){this.meshManager.destroy(),this.meshManager=null,this.wireframeManager.destroy(),this.wireframeManager=null,this.nodeInfoMapFromOctant=null,this.handler=null}clearData(){this.clearNodeInfoMap(),this.meshManager.clearData(),this.wireframeManager.clearData()}disposeGeometry(e){this.meshManager.disposeGeometry(e)}clearNodeInfoMap(){this.nodeInfoMapFromOctant={}}cacheToNodeInfoMap(e,t){this.nodeInfoMapFromOctant[e]||(this.nodeInfoMapFromOctant[e]=[]),this.nodeInfoMapFromOctant[e].push(t)}traverseNodeInfoMapByOctantId(e,t){if(this.nodeInfoMapFromOctant[e])for(var i=0,r=this.nodeInfoMapFromOctant[e].length;i<r;i++)t(e,this.nodeInfoMapFromOctant[e][i])}hasNodeInfo(){return!r.Utils.isEmptyObjectSimple(this.nodeInfoMapFromOctant)}hasOctantId(e){return!(!this.nodeInfoMapFromOctant[e]||!this.nodeInfoMapFromOctant[e].length)}cullNodes(e,t,i,r,n){return this.hasOctantId(t)?0===r?this.meshManager.cullNodes(e,t,n):1===r?this.wireframeManager.cullNodes(e,t,n):n:n}updateNode(e,t,i){t.wireframe?this.wireframeManager.updateNode(e,t.nodeInfo,i):this.meshManager.updateNode(e,t,i)}updateNodes(e){}applyFilter(e,t){}applySelection(e){}clearSelection(e){}applyHover(e){}clearHover(e){}applyBlink(e){}clearBlink(e){}applyReplacement(e){}getGeometryByNodeInfo(e,t){return this.meshManager.getGeometryByNodeInfo(e,t)}getLoader(e){return e.loader}getMeshesByUserIds(e,t,i){this.meshManager.getMeshesByUserIds(e,t,i)}disposeBufferAfterVbo(){this.meshManager.disposeBufferAfterVbo(),this.wireframeManager.disposeBufferAfterVbo()}addToPriorityNodesSet(e,t){this.handler.addToPriorityNodesSet(e,t)}isFull(e,t){return this.handler.isFull(e,t)}isNeedWireframing(e){return this.handler.isNeedWireframing(e)}getGeometryBuffersByUserId(e,t){return this.meshManager.getGeometryBuffersByUserId(e,t)}isPickableNode(e){return!0}isHiddenNode(e){return!1}getMeshManager(){return this.meshManager}getWireFrameManager(){return this.wireframeManager}},r.ModelView.IncrementCompositedManager=class{constructor(){this.defaultManager=new r.ModelView.IncrementedManager,this.instancedManager=new r.ModelView.IncrementInstancedManager,this.defaultManager.handler=this,this.instancedManager.handler=this,this.priorityNodesSet=[[],[],[]],this.octantManager=new r.OctantManager,this.noNeedWireframingIdMap={}}destroy(){this.defaultManager.handler=null,this.instancedManager.handler=null,this.defaultManager=null,this.instancedManager=null,this.clearPriorityNodesSet(),this.priorityNodesSet=null,this.octantManager.destroy(),this.octantManager=null,this.noNeedWireframingIdMap=null}clearData(){this.clearNoNeedWireframingIdMap(),this.defaultManager.clearData(),this.instancedManager.clearData()}settleData(e,t){var i=this.octantManager.getAllOctants(e);i.length>0?this._parseItemDataByOctants(e,i,(function(){t&&t()})):t&&t()}cullNodes(e,t){this.clearPriorityNodesSet(),this._collectNoWireframingIds(e);var i=this.octantManager.getVisibleOctants(e,t,!0);if(i.length){var r=0;if(!e.isOnlyWireframe())return e.isActivateWireframe()?(r=this._cullNodesByVisibleOctant(e,i,0,r),void this._cullNodesByVisibleOctant(e,i,1,r)):void this._cullNodesByVisibleOctant(e,i,0,r);this._cullNodesByVisibleOctant(e,i,1,r)}}_cullNodesByVisibleOctant(e,t,i,r){for(var n=0,a=t.length;n<a;++n){var s=t[n].octantId,o=t[n].depth;if(r=this.defaultManager.cullNodes(e,s,o,i,r),r=this.instancedManager.cullNodes(e,s,o,i,r),this.isFull(e,r))break}return r}updateNodes(e){var t=this;this.traversePriorityNodesSet((function(i,r){t._isInstanceNode(r)?t.instancedManager.updateNode(e,r):t.defaultManager.updateNode(e,r,i)})),r.GlobalData.DEBUG&&this.octantManager.showOctreeBox(e)}_collectNoWireframingIds(e){if(!this.wireframingIdCollected){this.wireframingIdCollected=!0;var t=this,i=e.getFilter();e.getModelDescriptor().traverseNodeInfosByCell((function(e,n){(nodeInfos&&i.getWireFrameVisibilityCondition()&&!i._isRenderWithWireFrame(n)||n.type===r.ModelView.BaseDescriptor.EnumNodeItemType.LINE||i._hasRenderWithBoardlineFilter()&&!i._isRenderWithBoardline(n))&&(t.noNeedWireframingIdMap[n.userId]=!0)}))}}isNeedWireframing(e){return!this.noNeedWireframingIdMap||!this.noNeedWireframingIdMap[e]}clearNoNeedWireframingIdMap(){this.wireframingIdCollected=!1,this.noNeedWireframingIdMap={}}disposeBufferAfterVbo(){this.defaultManager.disposeBufferAfterVbo(),this.instancedManager.disposeBufferAfterVbo()}isFull(e,t){return!(t<e.getRenderableCount())}clearPriorityNodesSet(){this.priorityNodesSet[0]=[],this.priorityNodesSet[1]=[],this.priorityNodesSet[2]=[]}addToPriorityNodesSet(e,t){e=e<0||e>2?2:e,this.priorityNodesSet[e].push(t)}traversePriorityNodesSet(e){for(var t=this.priorityNodesSet,i=0,r=t.length;i<r;++i)for(var n=t[i],a=0,s=Object.keys(n).length;a<s;++a)e(i,n[a])}_parseItemDataByOctants(e,t,i){var r=this,n=t.length;requestAnimationFrame(function a(s){var o=s;return function(){var s=t[o].octantId,l=t[o].depth;r._parseItemDataByOctantId(e,s,l),o<n-1?requestAnimationFrame(a(o+1)):i&&i()}}(0))}_parseItemDataByOctantId(e,t,i){e.getModelDescriptor().parseItemDataByCellId(t);var r=e.getModelDescriptor().getNodeInfosByCellId(t);if(r)for(var n,a=0,s=r.length;a<s;a++)(n=r[a]).cellDepth=i,n.instanceOrNot?this.instancedManager.cacheToNodeInfoMap(t,n):this.defaultManager.cacheToNodeInfoMap(t,n),e.manager.addNodeInfoToOctantMap(e.getEncodedDatabagId(),t,n)}_isInstanceNode(e){return!!(e.mgId||e.nodeInfo&&e.nodeInfo.mgId)}},function(){class e extends r.ModelView.ModelBaseHandler{constructor(e){super(e),this.tag="default",this.compositedManager=new r.ModelView.IncrementCompositedManager,this.defaultManager=this.compositedManager.defaultManager,this.instancedManager=this.compositedManager.instancedManager,this.loader=new r.ModelView.DefaultLoader(this)}destroy(){this.compositedManager.destroy(),this.compositedManager=null,super.destroy()}prepareData(e){if(!this.dataReady){var t=this;this.compositedManager.settleData(this.model,(function(){t.dataReady=!0,t.settleData(e)}))}}settleData(e){this.model.getModelDescriptor().classifyAllNodeInfo(),this.model.getModelDescriptor().destroyReader(),this.loaded=!0,e&&e()}isAllReady(){return!(!this.isLoaded()||this.isHidden())}prepare(e){this.isAllReady()&&(this.model.getMaterialManager()._updateTextureMapping(),this.model.clearMeshFromOctantMap(),this.compositedManager.cullNodes(this.model,e),this.compositedManager.updateNodes(this.model))}updateNodes(){}}r.ModelView.IncrementHandler=e}(),function(){let e=new THREE.Vector3;class t extends r.ModelView.MeshBaseManager{constructor(e){super(),this.manager=e,this.nodePriority={high:[],medium:[],low:[]},this.visibleOctant=[],this.occlusionVisibleOctant=[],this.usedNodeInfosObject={},this.lineNodes={},this.blinkMaterials=[],this.activeMeshMap={},this._priorityRange={max:0,min:0}}destroy(){if(super.destroy(),this.clearData(),this.pickingNodeGenerators){for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].destroy();this.pickingNodeGenerators=null}this.activeMeshMap=null,this.manager=null,this.nodePriority=null,this.visibleOctant=null,this.occlusionVisibleOctant=null,this.nodePriority=null,this.lineNodes=null,this.blinkMaterials=null}disposeLineNodes(){for(var e in this.lineNodes){var t=this.lineNodes[e];t.geometry.dispose(),t=null,delete this.lineNodes[e]}}clearData(){if(this.pickingNodeGenerators)for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].clearData();this._clearActiveMeshMap(),this.disposeGeometries(),this.disposeLineNodes(),this._clearNodePriorityData(!0),this._clearUsedNodeInfosObject(),this.visibleOctant.length=0,this.occlusionVisibleOctant.length=0}update(e){var t=this._updateMeshNodes(e);return this._applyOcclusionTranslucent(e),t}cullNodes(e,t){this._clearNodePriorityData(!0),this._adjustLowNodePriorityLength(e);var i=0;i=r.GlobalData.EnableOctant?this._cullNodesWithOctant(e,t):this._cullNodesWithFull(e),e.prioritizedNodeCount=this._calcPrioritizedNodeCount(e,i)}getPriorityNodes(){return[this.nodePriority.high,this.nodePriority.medium,this.nodePriority.low]}_cullNodesWithInnerAndOuterOctree(e,t){var i=0,r=0,n=e.getModelDescriptor().getOctreeRootNode(),a=n.inner,s=n.outer;if(this.manager.getContainsCamera(e)||!s)return this.visibleOctant.length=0,a&&this._frustumCull(e,t,a),s&&this._frustumCull(e,t,s),(r=this.visibleOctant.length)>0&&(this._sortVisibleOctant(t),i=this._logicCull(e,!0,!0,i,r)),i;s&&(this.visibleOctant.length=0,this._frustumCull(e,t,s),(r=this.visibleOctant.length)>0&&(this._sortVisibleOctant(t),i=this._logicCull(e,!0,!1,i,r)));var o=this.manager.getFilter(e);return(Object.keys(this.nodePriority.low).length+this.nodePriority.high.length+this.nodePriority.medium.length<this.manager.getRenderableCount(e)||o._hasRenderPromotionFilter())&&a&&(this.visibleOctant.length=0,this._frustumCull(e,t,a),(r=this.visibleOctant.length)>0&&(this._sortVisibleOctant(e,t),i=this._logicCull(e,!0,!1,i,r))),i}_cullNodesWithLayerOctree(e,t){var i=0;this.visibleOctant.length=0;var r=e.getModelDescriptor().getOctreeRootNode().layer;r._isLayerOctree=!0,this._frustumCull(e,t,r),r._isLayerOctree=void 0;var n=this.visibleOctant.length;return n>0&&(this._sortVisibleOctant(t),i=this._logicCull(e,!0,!0,i,n)),i}_cullNodesWithOctant(e,t){return this._resetMaxAndMinPriority(),e.getModelDescriptor().isUseInnerAndOuterOctree()?this._cullNodesWithInnerAndOuterOctree(e,t):this._cullNodesWithLayerOctree(e,t)}_cullNodesWithFull(e){var t=e.getModelDescriptor().getCellCount();return 0===t?0:this._logicCullWithFull(e,t)}_calcPrioritizedNodeCount(e,t){var i=t+this.nodePriority.high.length+this.nodePriority.medium.length;return i>this.manager.getRenderableCount(e)&&(i=this.manager.getRenderableCount(e)),i}_updateMeshNodes(e){if(this._clearActiveMeshMap(),this._clearLineSegmentsNodeGroup(e),this.filter=e.getFilter(),e.isOnlyWireframe())return 0;var t=e.prioritizedNodeCount;if(0===t)return 0;var i=[this.nodePriority.high,this.nodePriority.medium,this.nodePriority.low],n=null;i[0].length>0&&(n=e.selectedMaterial);var a=e.getFilter()._hasOverrideMaterialFilter(),s={octantStartIndex:-1,curOctantId:-1};this.blinkMaterials.length=0;for(var o=0,l=0,d=0,h=i.length;d<h;++d)for(var c=i[d],u=0,p=Object.keys(c).length;u<p&&!(o>t);++u){l++;var m,f=c[u];m=0===d?this._getUsableMaterial(e,f,n,a):this._getUsableMaterial(e,f,null,a);var g=!f.instanceOrNot;if(r.ModelView.BaseDescriptor.isLineNode(f))this._dealLineSegments(e,f,g,m);else{var v=e.pool.counter;this._dealMeshes(e,f,g,m,s);var y=e.pool.counter-v;o+=y,t+=y-1}m=null}return n=null,i=null,l}_getUsableMaterial(e,t,i,n){var a=t.materialId,s=t.userId,o=e.materialManager.materials,l=e.manager.sceneState,d=e.getFilter(),h=null,c=l.isSelected(s);1!=c||d._isPickable(t)||(c=!1),i?r.GlobalData.PickingEffect?h=d._getOverrideMaterial(t):(h=d._getOverrideMaterial(t))&&!c||(h=i):n&&(h=d._getOverrideMaterial(t));var u=e.manager.getOverrideMaterialByNodeInfo(t,e.materialManager.getMaterialById(t.materialId));return h=h||u||o[a]||r.MaterialUtil.getDefaultStandardMaterial(),r.GlobalData.Hover&&l.hoverId===s&&!1===c&&(h=l.getHoverMaterial(h)),h}getMeshesByUserIds(e,t,i){const r=e.pool._pool,n=t.toString(),a=i.toString(),s=e.getLengthUnitsMatrix();for(let t=0;t<r.length;t++){const i=r[t];if(i.name==n||i.name==a){let t=i.geometry.boundingBox;t||(i.geometry.computeBoundingBox(),t=i.geometry.boundingBox),e.minDistanceObjects[i.name].push({mesh:i,matrix:i.matrix,unitsMatrix:s,boundingBox:t})}}}explode(e){for(var t=e.pool._pool,i=0;i<t.length;i++){var r=t[i],n=e.modelExplosion.getExplosionTranslation(r.name);r.translateZ(n.z),r.updateMatrix(),r.updateMatrixWorld()}}_getUsedGeometry(e,t){if(!r.GlobalData.Instance&&t.uvArrayBuffer){var i,n=t.geometryId+"|"+t.nodeId;if(i=this.getGeometryById(n))return i;var a=this._createGeometryByNodeInfo(e,t);a instanceof Array||(a=[a]),i=[];for(var s=new THREE.Matrix3,o=new THREE.Vector3,l=t.uvArrayBuffer,d=0,h=a.length;d<h;d++){var c=new THREE.BufferGeometry;c.setIndex(a[d].index),c.setAttribute("position",a[d].attributes.position),c.setAttribute("normal",a[d].attributes.normal),s.set(l[6*d],l[6*d+2],l[6*d+4],l[6*d+1],l[6*d+3],l[6*d+5],0,0,1);for(var u=[],p=a[d].attributes.uv.array,m=0,f=p.length;m<f;m+=2)o.set(p[m],p[m+1],1),o.applyMatrix3(s),u.push(o.x),u.push(o.y);c.setAttribute("uv",new THREE.Float32BufferAttribute(u,2)),i.push(c)}this._cacheGeometry(n,i)}else i=this.getGeometryByNodeInfo(e,t);return i}_dealMeshes(e,t,i,n,a){const s=e.pool,o=this._getNodeGroupRenderOrder(t,n);let l=this._getUsedGeometry(e,t);l instanceof Array||(l=[l]);for(let a=0,d=l.length;a<d;a++){const d=s.get({databagId:e.databagId,nodeId:t.nodeId,userId:t.userId,userData:t.userData,geometry:l[a],matrix:t.matrix,material:n,groupOrder:o.groupRenderOrder,renderOrder:o.renderOrder,visible:i});d&&(d.geometryId=t.geometryId,this._cacheActiveMesh(t.userId,t.nodeId,d),e.manager.addMeshToOctantMap(e.getEncodedDatabagId(),t.nodeId,new r.SingleCapsuleObject(t.nodeId,d)))}}_dealLineSegments(e,t,i,n){var a=this.getGeometryByNodeInfo(e,t);if(a){var s=this._getLineSegmentsNodeGroup(e),o=this.lineNodes[t.nodeId];o||((o=new r.LineSegmentsEx(a,n)).databagId=e.databagId,o.name=t.userId,o.nodeId=t.nodeId,o.geometryId=t.geometryId,t.matrix&&(o.matrix.copy(t.matrix),o.matrixAutoUpdate=!1),this.lineNodes[t.nodeId]=o),o.material=n,o.visible=i,s.add(o),o.updateMatrixWorld(!0),this._cacheActiveMesh(t.userId,t.nodeId,o)}}_frustumCull(t,i,n){var a=t.manager,s=i.getFrustum(),o=n._isLayerOctree?r.GlobalData.MaximumDepth+1:r.GlobalData.OctantDepth,l=i.projScreenMatrix,d=new THREE.Box3;function h(t,i,r,n,a){var s;if(i&&t.depth<r&&(d.set(t.min,t.max),s=i.intersectsBox(d)),s){if(n){var o=d.applyMatrix4(l),c=o.getSize(e).length(),u=o.getCenter(e).z;u=u>1e-6?u:1e-6,t.priority=c}a.push(t);for(var p=0,m=t.childOctants.length;p<m;++p)h(t.childOctants[p],i,r,n,a)}}(r.GlobalData.DEBUG&&a.showOctreeBox(n),h(n,s,o,!0,this.visibleOctant),r.GlobalData.OcclusionTranslucentEnabled)&&h(n,this.manager.getFrustumFromOcclusionCamera(),o,!1,this.occlusionVisibleOctant);return!0}_logicCull(e,t,i,n,a){var s=e.manager,o=e.getFilter(),l=o._hasHiddenFileIdFilter(),d=o._hasOverrideMaterialFilter(),h=s.sceneState.selectionSet,c=o._hasRenderPromotionFilter(),u=this.nodePriority.high,p=this.nodePriority.medium,m=this.nodePriority.low,f=this.nodePriority.low.length,g=e.getModelDescriptor().getNodeInfosWithCellId();function v(t,i){if(!e.isReplacedUserId(t.userId)&&!e.isHiddenSourceObjectUserId(t.userId)&&!(l&&o._isHiddenFileId(t)||!1===o._isVisible(t)))if(h.hasOwnProperty(t.userId)||d&&o._hasHighPriorityOverrideMaterial(t))u.push(t);else{var r=!1;if(c&&o._isRenderPromotion(t)&&(r=!0),i){var a=t.userData,s=a?a.categoryId:void 0;s&&i[s]&&(r=!0)}r?p.push(t):n<f&&(m[n]=t,n++)}}var y=s.getCategoriesFromHighPriority("outer");!0===i&&(y=s.getCategoriesFromHighPriority("inner"));for(var M,E=0,b=0;b<a;++b){var x,I=0;t?(x=this.visibleOctant[b].octantId,I=this.visibleOctant[b].depth):x=b;var T=g[x];if(T){var C=this._getUsedNodeInfosByCellId(x);if(!C){for(M=0,E=T.length;M<E;++M){(S=T[M]).octantId=x,S.cellDepth=I,S._measurement=this._calcNodeMeasurement(S),this._isSatisfied(e,S)&&this._cacheUsedNodeInfosByCellId(x,S)}C=this._getUsedNodeInfosByCellId(x)}if(C){var w=C.default;for(M=0,E=w.length;M<E;M++){var S=w[M];this._updateMaxAndMinPriority(S),v(S,y)}}}}return r.Logger.timeEnd("collectNodeInfo"),n}_clearUsedNodeInfosObject(){for(var e in this.usedNodeInfosObject)delete this.usedNodeInfosObject[e].default,delete this.usedNodeInfosObject[e].instance,delete this.usedNodeInfosObject[e];this.usedNodeInfosObject={}}_getUsedNodeInfosByCellId(e){return this.usedNodeInfosObject[e]}_cacheUsedNodeInfosByCellId(e,t){this.usedNodeInfosObject[e]||(this.usedNodeInfosObject[e]={},this.usedNodeInfosObject[e].default=[],this.usedNodeInfosObject[e].instance=[]),t.instanceOrNot||this.usedNodeInfosObject[e].default.push(t)}_isSatisfied(e,t){var i=e.getLoadedUserIdsObject();return!i||!!i[t.userId]}_logicCullWithFull(e,t){return this._logicCull(e,!1,!0,0,t)}_sortVisibleOctant(e,t){var i=null;if(this.manager.getContainsCamera(e)&&null!=this.manager.getLoader(e).octreeRootNodeI){var n=new r.OctantNeighborUtil(t,this.manager.getLoader(e).octreeRootNodeI);i=n.getAncestorAndNeighbors()}this.visibleOctant.sort((function(e,t){if(null!=i){if(null!=i[e.octantId])return-1;if(null!=i[t.octantId])return 1}return e.priority>t.priority?-1:e.priority<t.priority?1:0}))}_applyOcclusionTranslucent(e){if(r.GlobalData.OcclusionTranslucentEnabled){var t=e.pool.getObjects(),i=e.manager.octantToObjectMap,n=this.occlusionVisibleOctant.length;if(n>0)for(var a=e.manager.getFrustumFromOcclusionCamera(),s=0;s<n;++s){var o=i[this.occlusionVisibleOctant[s].octantId];if(o&&o.length>0)for(var l=0,d=o.length;l<d;l+=2)for(var h=o[l];h<=o[l+1];h++){var c=t[h];r.CameraUtil.intersectObjectWithFrustum(c,a)&&this._overrideOcclusionMaterial(c)}}}}_overrideOcclusionMaterial(e,t){var i=t.material;if(i&&!1===i.transparent){var n=e.manager.acquireMaterial(),a=n.material;i.color?a.color.copy(i.color):n.resetColor(),a.opacity=r.GlobalData.OcclusionOpacity,t.material=a,t.material.needsUpdate=!0}}_clearNodePriorityData(e){var t=this.nodePriority;t.high.length=0,t.medium.length=0,e&&(t.low.length=0)}_adjustLowNodePriorityLength(e){0===this.nodePriority.low.length&&(this.nodePriority.low.length=this.manager.getRenderableCount(e))}_clearLineSegmentsNodeGroup(e){this._getLineSegmentsNodeGroup(e).clear()}_getLineSegmentsNodeGroup(e){return e._getNodeGroup(r.ObjectGroupType.LINESEGMENTS,{globalSpace:!0})}getBlinkMaterials(){return this.blinkMaterials}getGeometryBuffersByUserId(e,t){var i=e.getModelDescriptor().getStandardNodeInfosById(t);if(!i)return[];for(var n=[],a=e.getDatabagId(),s=0,o=i.length;s<o;s++){var l=i[s],d=this.getGeometryByNodeInfo(e,l);if(d){var h=r.ModelView.BaseDescriptor.isLineNode(l);if(d instanceof Array)for(var c=0,u=d.length;c<u;c++){var p=d[c].getAttribute("uv");n.push({isLines:h,databagId:a,nodeId:l.nodeId,position:d[c].getAttribute("position").array,index:d[c].getIndex().array,matrix:l.matrix,uv:p?p.array:null})}else{p=d.getAttribute("uv");n.push({isLines:h,databagId:a,nodeId:l.nodeId,position:d.getAttribute("position").array,index:d.getIndex().array,matrix:l.matrix,uv:p?p.array:null})}}}return n}disposeBufferAfterVbo(){}traverseActiveMeshMap(e,t){for(var i=0,r=(e=e||Object.keys(this.activeMeshMap)).length;i<r;i++){var n=e[i];if(this.activeMeshMap[n])for(var a=Object.keys(this.activeMeshMap[n]),s=0,o=a.length;s<o;s++){var l=a[s];t(n,l,this.activeMeshMap[n][l])}}}getActiveMeshMapById(e){return this.activeMeshMap[e]}_cacheActiveMesh(e,t,i){this.activeMeshMap[e]||(this.activeMeshMap[e]={}),this.activeMeshMap[e][t]||(this.activeMeshMap[e][t]=[]),this.activeMeshMap[e][t].push(i)}_clearActiveMeshMap(){this.activeMeshMap={}}getPickingNodeGenerator(e){return e=null==e?"pick":e,this.pickingNodeGenerators||(this.pickingNodeGenerators={}),this.pickingNodeGenerators[e]||(this.pickingNodeGenerators[e]=new r.PickingMeshGenerator(this),this.pickingNodeGenerators[e].reserveMaterial=!!e.startsWith("glow")),this.pickingNodeGenerators[e]}isPickableNode(e){return!this.filter||this.filter._isPickable({name:e})}_getNodeGroupRenderOrder(e,t){return{groupRenderOrder:t&&t.transparent?0:e.cellDepth,renderOrder:this._getNodePriority(e)}}_calcNodeMeasurement(e){return e.boundingBox.getSize(r.Utils.scratchVector_1).length()}_resetMaxAndMinPriority(){this._priorityRange.min=Number.MAX_VALUE,this._priorityRange.max=-Number.MAX_VALUE}_updateMaxAndMinPriority(e){let t=this._priorityRange;t.min=Math.min(e._measurement,t.min),t.max=Math.max(e._measurement,t.max)}_getNodePriority(e){if(void 0===e._measurement)return e.octantId;const t=this._priorityRange.min,i=this._priorityRange.max;return e._priority=r.Math.isolateDigits(r.Math.normalize(i-e._measurement,t,i),4,0),e._priority}}r.ModelView.FreeIncrementedMeshManager=t}(),r.ModelView.FreeIncrementedWireframeManager=class{constructor(e){this.manager=e,this.wireframeGeometryMap={},this.wireframeLineMeshes={}}destroy(){if(this.pickingNodeGenerators){for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].destroy();this.pickingNodeGenerators=null}this._clearWireframeLineMeshes(),this.wireframeLineMeshes=null,this._disposeGeometries(),this.wireframeGeometryMap=null,this.manager=null}clearData(){if(this.pickingNodeGenerators)for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].clearData();this._clearWireframeLineMeshes(),this._disposeGeometries()}update(e,t){0!==t?this.isActivateWireframe(e)?(this._clearWireframeGroupNode(e),this._generateWireframeNodes(e,t),this._getWireWireframeGroupNode(e).updateMatrixWorld(!0)):this._removeWireframeGroupNode(e):this._clearWireframeGroupNode(e)}_disposeGeometries(){for(var e in this.wireframeGeometryMap)this._disposeGeometry(e)}_disposeGeometry(e){var t=this.wireframeGeometryMap[e];if(t){if(t instanceof Array)for(var i=0,r=t.length;i<r;i++)t[i].dispose();else t.dispose();delete this.wireframeGeometryMap[e]}}_clearWireframeLineMeshes(){for(var e in this.wireframeLineMeshes)delete this.wireframeLineMeshes[e];this.wireframeLineMeshes={}}_clearWireframeGroupNode(e){this._getWireWireframeGroupNode(e).clear()}_removeWireframeGroupNode(e){e.manager.scene.removeObjectGroupByName(this._getWireframeGroupName(e))}isActivateWireframe(e){return e.isActivateWireframe()}_getWireWireframeGroupNode(e){return e.manager.scene.getOrCreateObjectGroup(this._getWireframeGroupName(e),{globalSpace:!0})}_getWireframeGeometryByNodeInfo(e,t){return this._getWireframeGeometryById(t.geometryId,this.manager.getGeometryByNodeInfo(e,t))}_getWireframeGeometryById(e,t){if(this.wireframeGeometryMap[e])return this.wireframeGeometryMap[e];var i,n,a=[];if(t instanceof Array)for(var s=0,o=t.length;s<o;s++)n=r.BuildEdge(t[s].attributes.position.array,t[s].index.array),(i=new THREE.BufferGeometry).setIndex(new THREE.Uint32BufferAttribute(n,1)),i.setAttribute("position",t[s].attributes.position,3),a.push(i);else n=r.BuildEdge(t.attributes.position.array,t.index.array),(i=new THREE.BufferGeometry).setIndex(new THREE.Uint32BufferAttribute(n,1)),i.setAttribute("position",t.attributes.position,3),a.push(i);return this.wireframeGeometryMap[e]=a,this.wireframeGeometryMap[e]}_makeWireframeLineMeshes(e,t,i){if(t.type!==r.ModelView.BaseDescriptor.EnumNodeItemType.LINE){var n=this.wireframeLineMeshes[t.nodeId];if(!n){n=this.wireframeLineMeshes[t.nodeId]=[];for(var a=this._getWireframeGeometryByNodeInfo(e,t),s=0,o=a.length;s<o;s++){var l=new THREE.LineSegments(a[s],this._getWireframeMaterial(e));l.name=t.nodeId+"_"+s,l.applyMatrix4(t.matrix),n.push(l)}}if(!e.isReplacedUserId(t.userId)&&!e.isHiddenSourceObjectUserId(t.userId)&&function(e,t){return!(r.GlobalData.Instance&&(e.geometryId===r.ModelView.BaseDescriptor.parameterizedNodeType.BOX||e.geometryId==r.ModelView.BaseDescriptor.parameterizedNodeType.BOX_M)||(e&&t.getWireFrameVisibilityCondition()?!t._isRenderWithWireFrame(e):t._hasRenderWithBoardlineFilter()&&!t._isRenderWithBoardline(e)))}(t,this._getFilter(e)))for(var d=this._getFilter(e)._getOverrideWireFrameMaterial(t)||this._getWireframeMaterial(e),h=0,c=n.length;h<c;h++)n[h].material=d,i.add(n[h])}}_generateWireframeNodes(e,t){for(var i=this._getWireWireframeGroupNode(e),r=this.manager.getPriorityNodes(),n=0,a=0,s=r.length;a<s;++a)for(var o=r[a],l=0,d=Object.keys(o).length;l<d&&!(++n>t);++l){var h=o[l];this._makeWireframeLineMeshes(e,h,i)}}_getWireframeGroupName(e){return e._getWireframeGroupName()}_getWireframeMaterial(e){return e.getWireframeMaterial()}_getFilter(e){return e.getFilter()}explode(e){for(var t=new THREE.Matrix4,i=e.getModelDescriptor().getAllNodeInfos(),r=Object.keys(i),n=0,a=r.length;n<a;n++){var s=r[n],o=i[s],l=e.modelExplosion.getExplosionTranslation(s);t.makeTranslation(l.x,l.y,l.z);for(var d=0,h=o.length;d<h;d++){var c=this.wireframeLineMeshes[o[d].nodeId];if(c)for(var u=0;u<c.length;u++)c[u].applyMatrix4(t)}}}disposeBufferAfterVbo(){}getPickingNodeGenerator(e){return e=null==e?"pick":e,this.pickingNodeGenerators||(this.pickingNodeGenerators={}),this.pickingNodeGenerators[e]||(this.pickingNodeGenerators[e]=new r.PickingWireFrameGenerator(this)),this.pickingNodeGenerators[e]}},r.ModelView.FreeIncrementedManager=class{constructor(){this.meshManager=new r.ModelView.FreeIncrementedMeshManager(this),this.wireframeManager=new r.ModelView.FreeIncrementedWireframeManager(this)}destroy(){this.meshManager.destroy(),this.meshManager=null,this.wireframeManager.destroy(),this.wireframeManager=null}clearData(){this.meshManager.clearData(),this.wireframeManager.clearData()}disposeGeometry(e){this.meshManager.disposeGeometry(e)}cullNodes(e,t){this.hasNodeInfo(e)&&this.meshManager.cullNodes(e,t)}hasNodeInfo(e){return!!e.getModelDescriptor().getStandardNodeInfos()}updateNodes(e){if(this.hasNodeInfo(e)){var t=this.meshManager.update(e);this.wireframeManager.update(e,t)}}applyFilter(e,t){}applySelection(e){}clearSelection(e){}applyHover(e){}clearHover(e){}applyBlink(e){}clearBlink(e){}applyReplacement(e){}getPriorityNodes(){return this.meshManager.getPriorityNodes()}getGeometryByNodeInfo(e,t){return this.meshManager.getGeometryByNodeInfo(e,t)}getRenderableCount(e){return e.getRenderableCount()}getLoader(e){return e.getLoader()}getContainsCamera(e){return e.containsCamera}getFilter(e){return e.getFilter()}getMeshesByUserIds(e,t,i){this.meshManager.getMeshesByUserIds(e,t,i)}disposeBufferAfterVbo(){this.meshManager.disposeBufferAfterVbo(),this.wireframeManager.disposeBufferAfterVbo()}getGeometryBuffersByUserId(e,t){return this.meshManager.getGeometryBuffersByUserId(e,t)}explode(e){this.hasNodeInfo(e)&&(this.meshManager.explode(e),this.wireframeManager.explode(e))}getMeshManager(){return this.meshManager}getWireFrameManager(){return this.wireframeManager}isHiddenNode(e){return!1}},function(){class e extends r.ModelView.ModelBaseHandler{constructor(e){super(e),this.tag="default",this.defaultManager=new r.ModelView.FreeIncrementedManager,this.instancedManager=new r.ModelView.InstancedManager,this.loader=new r.ModelView.DefaultLoader(this)}prepareData(e){if(!this.dataReady){var t=this;this.loader.getDescriptor().asyncParseItemData((function(){t.dataReady=!0,t.settleData(e)}))}}prepare(e){this.isLoaded()&&!this.isHidden()&&(this.model.getMaterialManager()._updateTextureMapping(),this.model.clearMeshFromOctantMap(),this.instancedManager.addAllInstanceNodeToScene(this.model),this.defaultManager.cullNodes(this.model,e),this.prepareWireframe(this.model),this.updateNodes())}prepareWireframe(e,t){e.isActivateWireframe()&&this.instancedManager.generateWireframe(e)}settleData(e){this.model.getModelDescriptor().classifyAllNodeInfo(),this.addNodeInfoToOctantMap(),this.model.getModelDescriptor().destroyReader(),this.createMeshNodes(e)}addNodeInfoToOctantMap(){var e=this.model.manager,t=this.model.getEncodedDatabagId();this.model.getModelDescriptor().traverseNodeInfosByCell((function(i,r){e.addNodeInfoToOctantMap(t,i,r)}))}createMeshNodes(e){var t=this.model.getModelDescriptor().getInstancedUserIds();if(0===t.length)return this.loaded=!0,void(e&&e());this.instancedManager.asyncCreateMeshNodes(this.model,t,(()=>{this.loaded=!0,e&&e()}))}disposeBufferAfterVbo(){}}r.ModelView.FreeIncrementHandler=e}(),function(){class e extends r.ModelView.LayerHandler{constructor(e){super(e),this.tag="layer",this.defaultManager=new r.ModelView.FreeIncrementedManager,this.instancedManager=new r.ModelView.InstancedManager,this.loader=new r.ModelView.LayerLoader(this)}prepare(e){!this.isHidden()&&this.loaded&&this.layerDataLoaded&&(this.model.getMaterialManager()._updateTextureMapping(this.model),this.model.clearMeshFromOctantMap(),this.instancedManager.addAllInstanceNodeToScene(this.model),this.defaultManager.cullNodes(this.model,e),this.prepareWireframe(this.model),this.updateNodes())}prepareWireframe(e,t){e.isActivateWireframe()&&this.instancedManager.generateWireframe(e)}dealMeshNodes(e){var t=this.model.getModelDescriptor().getInstancedUserIdsByCategory(this.loadedUserIds);t.length&&this.instancedManager.createMeshNodes(this.model,t),e&&e()}disposeBufferAfterVbo(){}}r.ModelView.FreeLayerIncrementHandler=e}(),function(){class e extends r.ModelView.LayerSceneHandler{constructor(e){super(e),this.tag="layer",this.defaultManager=new r.ModelView.FreeIncrementedManager,this.instancedManager=new r.ModelView.InstancedManager,this.loader=new r.ModelView.LayerSceneLoader(this)}prepare(e){!this.isHidden()&&this.loaded&&this.layerDataLoaded&&(this.model.getMaterialManager()._updateTextureMapping(this.model),this.model.clearMeshFromOctantMap(),this.instancedManager.addAllInstanceNodeToScene(this.model),this.defaultManager.cullNodes(this.model,e),this.prepareWireframe(this.model),this.updateNodes())}prepareWireframe(e,t){e.isActivateWireframe()&&this.instancedManager.generateWireframe(e)}dealMeshNodes(e){var t=this.model.getModelDescriptor().getInstancedUserIdsByCategory(this.loadedUserIds);t.length&&this.instancedManager.createMeshNodes(this.model,t),e&&e()}disposeBufferAfterVbo(){}}r.ModelView.FreeLayerSceneIncrementHandler=e}(),function(){class e extends r.ModelView.LayerHandler{constructor(e){super(e),this.tag="layer",this.compositedManager=new r.ModelView.IncrementCompositedManager,this.defaultManager=this.compositedManager.defaultManager,this.instancedManager=this.compositedManager.instancedManager,this.loader=new r.ModelView.LayerLoader(this)}destroy(){this.compositedManager.destroy(),this.compositedManager=null,super.destroy()}prepareData(e){if(!this.dataReady){var t=this;this.compositedManager.settleData(this.model,(function(){t.dataReady=!0,t.settleData(e)}))}}prepare(e){this.isAllReady()&&(this.model.getMaterialManager()._updateTextureMapping(),this.model.clearMeshFromOctantMap(),this.compositedManager.cullNodes(this.model,e),this.compositedManager.updateNodes(this.model))}updateNodes(){}addNodeInfoToOctantMap(){}dealMeshNodes(e){e&&e()}disposeBufferAfterVbo(){}}r.ModelView.LayerIncrementHandler=e}(),function(){class e extends r.ModelView.LayerSceneHandler{constructor(e){super(e),this.tag="layer",this.compositedManager=new r.ModelView.IncrementCompositedManager,this.defaultManager=this.compositedManager.defaultManager,this.instancedManager=this.compositedManager.instancedManager,this.loader=new r.ModelView.LayerSceneLoader(this)}destroy(){this.compositedManager.destroy(),this.compositedManager=null,super.destroy()}initData(e){var t=this;this.compositedManager.settleData(this.model,(function(){t.model.getModelDescriptor().classifyAllNodeInfo(),t.getLayerProvider().cacheNodeInfosWithLayerKey(),t.addNodeInfoToOctantMap(),t.loadedUserIdsObject=t.getLayerProvider().getUserIdsOnDemand(),t.loadedUserIds=Object.keys(t.loadedUserIdsObject),e&&e()}))}prepare(e){this.isAllReady()&&(this.model.getMaterialManager()._updateTextureMapping(),this.model.clearMeshFromOctantMap(),this.compositedManager.cullNodes(this.model,e),this.compositedManager.updateNodes(this.model))}updateNodes(){}addNodeInfoToOctantMap(){}clearData(){this.model.removeAllFromOctantMap(),this.getLayerProvider().clearData(),this.model.clearWireframeElementCount(),this.compositedManager.clearData(),this.clearLoadedState()}dealMeshNodes(e){e&&e()}disposeBufferAfterVbo(){}}r.ModelView.LayerSceneIncrementHandler=e}(),function(){class e extends r.ModelView.DefaultDescriptor{constructor(){super(),this.bufferDataObjectMap={},this.bufferDataObjectIdMap={},this.parameterizedBufferMap={},this.geometryIdMapOnBufferDataObjectId={},this.mpkIdMapOnCellId={}}destroy(){super.destroy(),this.geometryIdMapOnbufferDataObjectId=void 0}setToBufferDataObjectMap(e,t){if(!this.bufferDataObjectMap[e]){var i=null;if(t){var n=t.bufferData,a=t.positionOffsetMap;return(i=new THREE.BufferGeometry).setIndex(new THREE.BufferAttribute(n.index,1)),i.setAttribute("position",new THREE.BufferAttribute(n.position,3)),n.normal?i.setAttribute("normal",new THREE.BufferAttribute(n.normal,3)):i.computeVertexNormals(),n.uv&&i.setAttribute("uv",new THREE.BufferAttribute(n.uv,2)),void(this.bufferDataObjectMap[e]=new r.ModelView.BatchedBufferDataObject(e,a,i))}var s=r.ModelView.BaseDescriptor.parameterizedNodeType;switch(e){case s.PIPE:i=r.GeomUtil.UnitCylinderInstance;break;case s.PIPE_M:i=r.GeomUtil.getUnitTextureCylinder();break;case s.BOX:i=r.GeomUtil.UnitBoxInstance;break;case s.BOX_M:i=r.GeomUtil.getUnitTextureBox()}i&&(i.clearGroups&&i.clearGroups(),this.bufferDataObjectMap[e]=new r.ModelView.BatchedBufferDataObject(e,void 0,i))}}removeFromBufferDataObjectMap(e){var t=this.bufferDataObjectMap[e];t&&(t.destroy(),delete this.bufferDataObjectMap[e])}getBufferDataObjectById(e){return this.bufferDataObjectMap[e]}getBufferDataObjectByGeometryId(e){var t=this.getBufferDataObjectIdByGeometryId(e);return void 0!==t?this.getBufferDataObjectById(t):void 0}setToBufferDataObjectIdMap(e,t){this.bufferDataObjectIdMap[e]=t}_isParameterizedNodeType(e){return r.ModelView.BaseDescriptor.isParameterizedNodeType(e)}getBufferDataObjectIdByGeometryId(e){var t=this.bufferDataObjectIdMap[e];if(void 0!==t)return t;if(this._isParameterizedNodeType(e)){var i=r.ModelView.BaseDescriptor.parameterizedNodeType;return t=e===i.TUBE?i.PIPE:e,this.setToBufferDataObjectMap(t),this.setToBufferDataObjectIdMap(e,t),this.setToGeometryIdMap(t,e),this.bufferDataObjectIdMap[e]}}setToGeometryIdMap(e,t){this.geometryIdMapOnBufferDataObjectId[e]||(this.geometryIdMapOnBufferDataObjectId[e]={}),this.geometryIdMapOnBufferDataObjectId[e][t]=!0}getGeometryIdsByBufferDataObjectId(e){return this.geometryIdMapOnBufferDataObjectId[e]}_classifyNodeInfo(e){super._classifyNodeInfo(e),this._cacheMpkIdsByCellId(e)}_cacheMpkIdsByCellId(e){void 0===this.mpkIdMapOnCellId[e.cellId]&&(this.mpkIdMapOnCellId[e.cellId]={});var t=this.getBufferDataObjectIdByGeometryId(e.geometryId);void 0!==t&&(this.mpkIdMapOnCellId[e.cellId][t]=!0)}getMpkIdsByCellId(){return this.mpkIdMapOnCellId[nodeInfo.cellId]}}r.ModelView.IncrementBatchedDescriptor=e,r.ModelView.BatchedBufferDataObject=class{constructor(e,t,i){this.id=e,this.positionOffsetMap=t,this.geometry=i,this.object=new r.MeshEx(i)}destroy(){this.positionOffsetMap=null,this.geometry.dispose(),this.geometry=null}getPositionAndIndexOffset(e){return this.positionOffsetMap?this.positionOffsetMap[e]:null}}}(),function(){class e extends r.ModelView.DefaultBaseLoader{constructor(e){super(e),this.descriptor=new r.ModelView.IncrementBatchedDescriptor}_parseMpkWithNoBatch(e,t){var i,n,a,s,o,l,d,h,c=new r.Loader.MPKReader(e),u=new THREE.Matrix4,p=[],m=0,f=0,g=[],v=0,y=0;for(i=0,n=c.header.meshCount;i<n;++i){var M=c.getPtBuffer(i),E=c.getIdxBuffer(i),b=c.getNormalBuffer(i);if(null!=M&&null!=E&&null!=b){var x=c.getMeshData(i),I=c.getUVBuffer(i);0!==x.baseScale&&(M=new Float32Array(M),u.identity(),u.setPosition(new THREE.Vector3(x.baseX,x.baseY,x.baseZ)),u.scale(new THREE.Vector3(x.baseScale,x.baseScale,x.baseScale)),r.GeomUtil.applyMatrix4ToBuffer(u,M)),E instanceof Uint16Array&&(E=Uint32Array.from(E)),I&&I.length?(g.push({meshId:x.mesh_id,position:M,index:E,normal:b,uv:I,positionOffset:v,indexOffset:y}),v+=M.length,y+=E.length):(p.push({meshId:x.mesh_id,position:M,index:E,normal:b,positionOffset:m,indexOffset:f}),m+=M.length,f+=E.length)}else r.Logger.log("Error Geometry!")}var T={},C={};if(g.length){for(s=new Uint32Array(y),a=new Float32Array(v),o=new Float32Array(v),l=new Float32Array(v),i=0,n=g.length;i<n;i++){var w=(D=g[i]).meshId,S=D.positionOffset,A=D.position.length,B=D.indexOffset,R=D.index.length;for(d=0,h=D.index.length;d<h;d++)D.index[d]+=S/3;a.set(D.position,S),s.set(D.index,B),o.set(D.normal,S),l.set(D.uv,2*S/3),T[w]={positionStart:S,positionCount:A,indexStart:B,indexCount:R,uvStart:2*S/3,uvCount:2*A/3},this.descriptor.setToGeometryIdMap(t,w),this.descriptor.setToBufferDataObjectIdMap(w,t)}C={index:new Uint32Array(s),position:new Float32Array(a),normal:new Float32Array(o),uv:new Float32Array(l)}}else{for(s=new Uint32Array(f),a=new Float32Array(m),o=new Float32Array(m),i=0,n=p.length;i<n;i++){var D;w=(D=p[i]).meshId,S=D.positionOffset,B=D.indexOffset,A=D.position.length,R=D.index.length;for(D.index instanceof Uint16Array&&(D.index=Uint32Array.from(D.index)),d=0,h=D.index.length;d<h;d++)D.index[d]+=S/3;a.set(D.position,S),s.set(D.index,B),o.set(D.normal,S),T[w]={positionStart:S,positionCount:A,indexStart:B,indexCount:R},this.descriptor.setToGeometryIdMap(t,w),this.descriptor.setToBufferDataObjectIdMap(w,t)}C={index:new Uint32Array(s),position:new Float32Array(a),normal:new Float32Array(o)}}this.descriptor.setToBufferDataObjectMap(t,{bufferData:C,positionOffsetMap:T}),c=null}_parseMpk(e,t){var i,n,a,s,o=new r.Loader.BMPKReader(e),l={},d={};if(o.tBuffer.byteLength){for(i=0,n=o.header.meshCount;i<n;++i)l[s=(a=o.getMeshData(i)).mesh_id]={positionStart:a.vOffset/4,positionCount:3*a.ptCount,indexStart:a.iOffset/4,indexCount:a.idxCount,uvStart:a.tOffset/4,uvCount:2*a.ptCount},this.descriptor.setToGeometryIdMap(t,s),this.descriptor.setToBufferDataObjectIdMap(s,t);d={index:new Uint32Array(o.iBuffer),position:new Float32Array(o.vBuffer),normal:new Float32Array(o.nBuffer),uv:new Float32Array(o.tBuffer)}}else{for(i=0,n=o.header.meshCount;i<n;++i)l[s=(a=o.getMeshData(i)).mesh_id]={positionStart:a.vOffset/4,positionCount:3*a.ptCount,indexStart:a.iOffset/4,indexCount:a.idxCount},this.descriptor.setToGeometryIdMap(t,s),this.descriptor.setToBufferDataObjectIdMap(s,t);d={index:new Uint32Array(o.iBuffer),position:new Float32Array(o.vBuffer),normal:new Float32Array(o.nBuffer)}}this.descriptor.setToBufferDataObjectMap(t,{bufferData:d,positionOffsetMap:l}),o=null}}r.ModelView.IncrementBatchedLoader=e}(),function(){let e=new THREE.Vector3,t=new THREE.Vector3;class i extends r.ModelView.MeshBaseManager{constructor(e){super(),this.manager=e,this.nodePriority={high:[],medium:[],low:[]},this.visibleOctant=[],this.occlusionVisibleOctant=[],this.usedNodeInfosObject={},this.lineNodes={},this.blinkMaterials=[],this.activeMeshMap={}}destroy(){if(super.destroy(),this.clearData(),this.pickingNodeGenerators){for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].destroy();this.pickingNodeGenerators=null}this.activeMeshMap=null,this.manager=null,this.nodePriority=null,this.visibleOctant=null,this.occlusionVisibleOctant=null,this.nodePriority=null,this.lineNodes=null,this.blinkMaterials=null}disposeLineNodes(){for(var e in this.lineNodes){var t=this.lineNodes[e];t.geometry.dispose(),t=null,delete this.lineNodes[e]}}clearData(){if(this.pickingNodeGenerators)for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].clearData();this._clearActiveMeshMap(),this.disposeGeometries(),this.disposeLineNodes(),this._clearNodePriorityData(!0),this._clearUsedNodeInfosObject(),this.visibleOctant.length=0,this.occlusionVisibleOctant.length=0}update(e){var t=this._updateMeshNodes(e);return this._applyOcclusionTranslucent(e),t}cullNodes(e,t){this._clearNodePriorityData(!0),this._adjustLowNodePriorityLength(e);var i=0;i=r.GlobalData.EnableOctant?this._cullNodesWithOctant(e,t):this._cullNodesWithFull(e),e.prioritizedNodeCount=this._calcPrioritizedNodeCount(e,i)}getPriorityNodes(){return[this.nodePriority.high,this.nodePriority.medium,this.nodePriority.low]}_cullNodesWithInnerAndOuterOctree(e,t){var i=0,r=0,n=e.getModelDescriptor().getOctreeRootNode(),a=n.inner,s=n.outer;if(this.manager.getContainsCamera(e)||!s)return this.visibleOctant.length=0,a&&this._frustumCull(e,t,a),s&&this._frustumCull(e,t,s),(r=this.visibleOctant.length)>0&&(this._sortVisibleOctant(t),i=this._logicCull(e,!0,!0,i,r)),i;s&&(this.visibleOctant.length=0,this._frustumCull(e,t,s),(r=this.visibleOctant.length)>0&&(this._sortVisibleOctant(t),i=this._logicCull(e,!0,!1,i,r)));var o=this.manager.getFilter(e);return(Object.keys(this.nodePriority.low).length+this.nodePriority.high.length+this.nodePriority.medium.length<this.manager.getRenderableCount(e)||o._hasRenderPromotionFilter())&&a&&(this.visibleOctant.length=0,this._frustumCull(e,t,a),(r=this.visibleOctant.length)>0&&(this._sortVisibleOctant(e,t),i=this._logicCull(e,!0,!1,i,r))),i}_cullNodesWithLayerOctree(e,t){var i=0;this.visibleOctant.length=0;var r=e.getModelDescriptor().getOctreeRootNode().layer;this._frustumCull(e,t,r);var n=this.visibleOctant.length;return n>0&&(this._sortVisibleOctant(t),i=this._logicCull(e,!0,!0,i,n)),i}_cullNodesWithOctant(e,t){return e.getModelDescriptor().isUseInnerAndOuterOctree()?this._cullNodesWithInnerAndOuterOctree(e,t):this._cullNodesWithLayerOctree(e,t)}_cullNodesWithFull(e){var t=e.getModelDescriptor().getCellCount();return 0===t?0:this._logicCullWithFull(e,t)}_calcPrioritizedNodeCount(e,t){var i=t+this.nodePriority.high.length+this.nodePriority.medium.length;return i>this.manager.getRenderableCount(e)&&(i=this.manager.getRenderableCount(e)),i}_updateMeshNodes(e){if(this._clearActiveMeshMap(),this._clearLineSegmentsNodeGroup(e),e.isOnlyWireframe())return 0;var t=e.prioritizedNodeCount;if(0===t)return 0;var i=[this.nodePriority.high,this.nodePriority.medium,this.nodePriority.low],n=null;i[0].length>0&&(n=e.selectedMaterial);var a=e.getFilter()._hasOverrideMaterialFilter(),s={octantStartIndex:-1,curOctantId:-1};this.blinkMaterials.length=0;for(var o=0,l=0,d=0,h=i.length;d<h;++d)for(var c=i[d],u=0,p=Object.keys(c).length;u<p&&!(o>t);++u){l++;var m,f=c[u];m=0===d?this._getUsableMaterial(e,f,n,a):this._getUsableMaterial(e,f,null,a);var g=!f.instanceOrNot;if(r.ModelView.BaseDescriptor.isLineNode(f))this._dealLineSegments(e,f,g,m);else{var v=e.pool.counter;this._dealMeshes(e,f,g,m,s);var y=e.pool.counter-v;o+=y,t+=y-1}m=null}return n=null,i=null,l}_getUsableMaterial(e,t,i,n){var a=t.materialId,s=t.userId,o=e.materialManager.materials,l=e.manager.sceneState,d=e.getFilter(),h=null,c=l.isSelected(s);1!=c||d._isPickable(t)||(c=!1),i?r.GlobalData.PickingEffect?h=d._getOverrideMaterial(t):(h=d._getOverrideMaterial(t))&&!c||(h=i):n&&(h=d._getOverrideMaterial(t));var u=e.manager.getOverrideMaterialByNodeInfo(t,e.materialManager.getMaterialById(t.materialId));return h=h||u||o[a]||r.MaterialUtil.getDefaultStandardMaterial(),r.GlobalData.Hover&&l.hoverId===s&&!1===c&&(h=l.getHoverMaterial(h)),h}getMeshesByUserIds(e,t,i){const r=e.pool._pool,n=t.toString(),a=i.toString(),s=e.getLengthUnitsMatrix();for(let t=0;t<r.length;t++){const i=r[t];if(i.name==n||i.name==a){let t=i.geometry.boundingBox;t||(i.geometry.computeBoundingBox(),t=i.geometry.boundingBox),e.minDistanceObjects[i.name].push({mesh:i,matrix:i.matrix,unitsMatrix:s,boundingBox:t})}}}explode(e){for(var t=e.pool._pool,i=0;i<t.length;i++){var r=t[i],n=e.modelExplosion.getExplosionTranslation(r.name);r.translateZ(n.z),r.updateMatrix(),r.updateMatrixWorld()}}getGeometryByNodeInfo(e,t){var i=!!e.getModelDescriptor()._isParameterizedNodeType(t.geometryId),n=i?t.geometryId+"|"+t.nodeId:t.nodeId;if(this._hasGeometry(n))return this.getGeometryById(n);if(r.ModelView.BaseDescriptor.isLineNode(t))return this._createGeometryForLineNodeByNodeInfo(e,t);var a=i?this._createGeometryForParameterizedNodeByNodeInfo(e,t):this._createGeometryByNodeInfo(e,t);return a?(this._cacheGeometry(n,a),a):null}_createGeometryForParameterizedNodeByNodeInfo(e,t){if(t.instanceOrNot)return null;var i=e.getModelDescriptor().getBufferDataObjectByGeometryId(t.geometryId);if(!i)return null;if(!t.uvArrayBuffer)return i.geometry;var r=[],n=i.geometry;n instanceof Array||(n=[n]);for(var a=new THREE.Matrix3,s=new THREE.Vector3,o=t.uvArrayBuffer,l=0,d=n.length;l<d;l++){var h=new THREE.BufferGeometry;h.setIndex(n[l].index),h.setAttribute("position",n[l].attributes.position),h.setAttribute("normal",n[l].attributes.normal),a.set(o[6*l],o[6*l+2],o[6*l+4],o[6*l+1],o[6*l+3],o[6*l+5],0,0,1);for(var c=[],u=n[l].attributes.uv.array,p=0,m=u.length;p<m;p+=2)s.set(u[p],u[p+1],1),s.applyMatrix3(a),c.push(s.x),c.push(s.y);h.setAttribute("uv",new THREE.Float32BufferAttribute(c,2)),r.push(h)}return r}_createGeometryByNodeInfo(e,t){var i=t.geometryId,r=e.getModelDescriptor().getBufferDataObjectByGeometryId(i);if(!r)return null;var n=new THREE.BufferGeometry;n.setIndex(r.geometry.getIndex()),n.setAttribute("position",r.geometry.getAttribute("position"));var a=r.geometry.getAttribute("normal");a&&n.setAttribute("normal",a);var s=r.geometry.getAttribute("uv");s&&n.setAttribute("uv",s);var o=r.getPositionAndIndexOffset(i);return n.setDrawRange(o.indexStart,o.indexCount),n._withDrawRange=!0,n._positionOffset=o,n}_createGeometryForLineNodeByNodeInfo(e,t){return this._createGeometryByNodeInfo(e,t)}_dealMeshes(e,t,i,n,a){let s=this.getGeometryByNodeInfo(e,t);if(!s)return;s instanceof Array||(s=[s]);const o=e.pool,l=this._getNodeGroupRenderOrder(t,n);for(var d=0,h=s.length;d<h;d++){const a=o.get({databagId:e.databagId,nodeId:t.nodeId,userId:t.userId,userData:t.userData,geometry:s[d],matrix:t.matrix,material:n,groupOrder:l.groupRenderOrder,renderOrder:l.renderOrder,visible:i});a&&(a.geometryId=t.geometryId,this._cacheActiveMesh(t.userId,t.nodeId,a),e.manager.addMeshToOctantMap(e.getEncodedDatabagId(),t.nodeId,new r.SingleCapsuleObjectWithDrawRange(t.nodeId,a)))}}_dealLineSegments(e,t,i,n){var a=this.getGeometryByNodeInfo(e,t);if(a){var s=this._getLineSegmentsNodeGroup(e),o=this.lineNodes[t.nodeId];o||((o=new r.LineSegmentsEx(a,n)).databagId=e.databagId,o.name=t.userId,o.nodeId=t.nodeId,o.geometryId=t.geometryId,t.matrix&&(o.matrix.copy(t.matrix),o.matrixAutoUpdate=!1),this.lineNodes[t.nodeId]=o),o.material=n,o.visible=i,s.add(o),o.updateMatrixWorld(!0),this._cacheActiveMesh(t.userId,t.nodeId,new r.SingleCapsuleObject(o))}}_frustumCull(i,n,a){var s=i.manager,o=n.getFrustum(),l=r.GlobalData.OctantDepth,d=n.projScreenMatrix,h=new THREE.Box3;function c(i,r,n,a,s){var o;if(r&&i.depth<n&&(h.set(i.min,i.max),o=r.intersectsBox(h)),o){if(a){var l=h.applyMatrix4(d),u=l.getSize(e).length();l.getCenter(t);var p=t.z;p=p>1e-6?p:1e-6,i.priority=u/p,s.push(i)}else s.push(i);for(var m=0,f=i.childOctants.length;m<f;++m)c(i.childOctants[m],r,n,a,s)}}(r.GlobalData.DEBUG&&s.showOctreeBox(a),c(a,o,l,!0,this.visibleOctant),r.GlobalData.OcclusionTranslucentEnabled)&&c(a,this.manager.getFrustumFromOcclusionCamera(),l,!1,this.occlusionVisibleOctant);return!0}_logicCull(e,t,i,n,a){var s=e.manager,o=e.getFilter(),l=o._hasHiddenFileIdFilter(),d=o._hasOverrideMaterialFilter(),h=s.sceneState.selectionSet,c=o._hasRenderPromotionFilter(),u=this.nodePriority.high,p=this.nodePriority.medium,m=this.nodePriority.low,f=this.nodePriority.low.length,g=e.getModelDescriptor().getNodeInfosWithCellId();function v(t,i){if(!e.isReplacedUserId(t.userId)&&!e.isHiddenSourceObjectUserId(t.userId)&&!(l&&o._isHiddenFileId(t)||!1===o._isVisible(t)))if(h.hasOwnProperty(t.userId)||d&&o._hasHighPriorityOverrideMaterial(t))u.push(t);else{var r=!1;if(c&&o._isRenderPromotion(t)&&(r=!0),i){var a=t.userData,s=a?a.categoryId:void 0;s&&i[s]&&(r=!0)}r?p.push(t):n<f&&(m[n]=t,n++)}}var y=s.getCategoriesFromHighPriority("outer");!0===i&&(y=s.getCategoriesFromHighPriority("inner"));for(var M,E=0,b=0;b<a;++b){var x,I=0;t?(x=this.visibleOctant[b].octantId,I=this.visibleOctant[b].depth):x=b;var T=g[x];if(T){var C=this._getUsedNodeInfosByCellId(x);if(!C){for(M=0,E=T.length;M<E;++M){(S=T[M]).octantId=x,S.cellDepth=I,this._isSatisfied(e,S)&&this._cacheUsedNodeInfosByCellId(x,S)}C=this._getUsedNodeInfosByCellId(x)}if(C){var w=C.default;for(M=0,E=w.length;M<E;M++){var S;v(S=w[M],y)}}}}return r.Logger.timeEnd("collectNodeInfo"),n}_clearUsedNodeInfosObject(){for(var e in this.usedNodeInfosObject)delete this.usedNodeInfosObject[e].default,delete this.usedNodeInfosObject[e].instance,delete this.usedNodeInfosObject[e];this.usedNodeInfosObject={}}_getUsedNodeInfosByCellId(e){return this.usedNodeInfosObject[e]}_cacheUsedNodeInfosByCellId(e,t){this.usedNodeInfosObject[e]||(this.usedNodeInfosObject[e]={},this.usedNodeInfosObject[e].default=[],this.usedNodeInfosObject[e].instance=[]),t.instanceOrNot||this.usedNodeInfosObject[e].default.push(t)}_isSatisfied(e,t){var i=e.getLoadedUserIdsObject();return!i||!!i[t.userId]}_logicCullWithFull(e,t){return this._logicCull(e,!1,!0,0,t)}_sortVisibleOctant(e,t){var i=null;if(this.manager.getContainsCamera(e)&&null!=this.manager.getLoader(e).octreeRootNodeI){var n=new r.OctantNeighborUtil(t,this.manager.getLoader(e).octreeRootNodeI);i=n.getAncestorAndNeighbors()}this.visibleOctant.sort((function(e,t){if(null!=i){if(null!=i[e.octantId])return-1;if(null!=i[t.octantId])return 1}return e.priority>t.priority?-1:e.priority<t.priority?1:0}))}_applyOcclusionTranslucent(e){if(r.GlobalData.OcclusionTranslucentEnabled){var t=e.pool.getObjects(),i=e.manager.octantToObjectMap,n=this.occlusionVisibleOctant.length;if(n>0)for(var a=e.manager.getFrustumFromOcclusionCamera(),s=0;s<n;++s){var o=i[this.occlusionVisibleOctant[s].octantId];if(o&&o.length>0)for(var l=0,d=o.length;l<d;l+=2)for(var h=o[l];h<=o[l+1];h++){var c=t[h];r.CameraUtil.intersectObjectWithFrustum(c,a)&&this._overrideOcclusionMaterial(c)}}}}_overrideOcclusionMaterial(e,t){var i=t.material;if(i&&!1===i.transparent){var n=e.manager.acquireMaterial(),a=n.material;i.color?a.color.copy(i.color):n.resetColor(),a.opacity=r.GlobalData.OcclusionOpacity,t.material=a,t.material.needsUpdate=!0}}_clearNodePriorityData(e){var t=this.nodePriority;t.high.length=0,t.medium.length=0,e&&(t.low.length=0)}_adjustLowNodePriorityLength(e){0===this.nodePriority.low.length&&(this.nodePriority.low.length=this.manager.getRenderableCount(e))}_clearLineSegmentsNodeGroup(e){this._getLineSegmentsNodeGroup(e).clear()}_getLineSegmentsNodeGroup(e){return e._getNodeGroup(r.ObjectGroupType.LINESEGMENTS,{globalSpace:!0})}getBlinkMaterials(){return this.blinkMaterials}getGeometryBuffersByUserId(e,t){var i=e.getModelDescriptor().getStandardNodeInfosById(t);if(!i)return[];for(var n=[],a=e.getDatabagId(),s=0,o=i.length;s<o;s++){var l=i[s],d=this.getGeometryByNodeInfo(e,l);if(d){var h=r.ModelView.BaseDescriptor.isLineNode(l);if(d instanceof Array)for(var c=0,u=d.length;c<u;c++)n.push({isLines:h,databagId:a,nodeId:l.nodeId,position:d[c].getAttribute("position").array,index:d[c].getIndex().array,matrix:l.matrix});else n.push({isLines:h,databagId:a,nodeId:l.nodeId,position:d.getAttribute("position").array,index:d.getIndex().array,matrix:l.matrix})}}return n}disposeBufferAfterVbo(){}traverseActiveMeshMap(e,t){for(var i=0,r=(e=e||Object.keys(this.activeMeshMap)).length;i<r;i++){var n=e[i];if(this.activeMeshMap[n])for(var a=Object.keys(this.activeMeshMap[n]),s=0,o=a.length;s<o;s++){var l=a[s];t(n,l,this.activeMeshMap[n][l])}}}getActiveMeshMapById(e){return this.activeMeshMap[e]}_cacheActiveMesh(e,t,i){this.activeMeshMap[e]||(this.activeMeshMap[e]={}),this.activeMeshMap[e][t]||(this.activeMeshMap[e][t]=[]),this.activeMeshMap[e][t].push(i)}_clearActiveMeshMap(){this.activeMeshMap={}}getPickingNodeGenerator(e){return e=null==e?"pick":e,this.pickingNodeGenerators||(this.pickingNodeGenerators={}),this.pickingNodeGenerators[e]||(this.pickingNodeGenerators[e]=new r.PickingMeshGenerator(this),this.pickingNodeGenerators[e].reserveMaterial=!!e.startsWith("glow")),this.pickingNodeGenerators[e]}_getNodeGroupRenderOrder(e,t){return{groupRenderOrder:t&&t.transparent?0:e.cellDepth,renderOrder:e.octantId}}}r.ModelView.IncrementBatchedMeshManager=i}(),r.ModelView.IncrementBatchedWireFrameManager=class{constructor(e){this.manager=e,this.wireframeGeometryMap={},this.wireframeLineMeshes={}}destroy(){if(this.pickingNodeGenerators){for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].destroy();this.pickingNodeGenerators=null}this._clearWireframeLineMeshes(),this.wireframeLineMeshes=null,this._disposeGeometries(),this.wireframeGeometryMap=null,this.manager=null}clearData(){if(this.pickingNodeGenerators)for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].clearData();this._clearWireframeLineMeshes(),this._disposeGeometries()}update(e,t){0!==t?this.isActivateWireframe(e)?(this._clearWireframeGroupNode(e),this._generateWireframeNodes(e,t),this._getWireWireframeGroupNode(e).updateMatrixWorld(!0)):this._removeWireframeGroupNode(e):this._clearWireframeGroupNode(e)}_disposeGeometries(){for(var e in this.wireframeGeometryMap)this._disposeGeometry(e)}_disposeGeometry(e){var t=this.wireframeGeometryMap[e];if(t){if(t instanceof Array)for(var i=0,r=t.length;i<r;i++)t[i].dispose();else t.dispose();delete this.wireframeGeometryMap[e]}}_clearWireframeLineMeshes(){for(var e in this.wireframeLineMeshes)delete this.wireframeLineMeshes[e];this.wireframeLineMeshes={}}_clearWireframeGroupNode(e){this._getWireWireframeGroupNode(e).clear()}_removeWireframeGroupNode(e){e.manager.scene.removeObjectGroupByName(this._getWireframeGroupName(e))}isActivateWireframe(e){return e.isActivateWireframe()}_getWireWireframeGroupNode(e){return e.manager.scene.getOrCreateObjectGroup(this._getWireframeGroupName(e),{globalSpace:!0})}_getWireframeGeometryByNodeInfo(e,t){return this._getWireframeGeometryById(t.geometryId,this.manager.getGeometryByNodeInfo(e,t))}_buildGeometryEdge(e){var t,i=e.attributes.position.array,n=e.index.array;if(e._withDrawRange){var a=e._positionOffset,s=n.slice(a.indexStart,a.indexStart+a.indexCount),o=i.slice(a.positionStart,a.positionStart+a.positionCount),l=a.positionStart/3;s.forEach((function(e,t,i){i[t]-=l})),(t=r.BuildEdge(o,s)).forEach((function(e,t,i){i[t]+=l}))}else t=r.BuildEdge(i,n);return t}_getWireframeGeometryById(e,t){if(this.wireframeGeometryMap[e])return this.wireframeGeometryMap[e];Array.isArray(t)||(t=[t]);for(var i,r=[],n=0,a=t.length;n<a;n++){var s=t[n],o=this._buildGeometryEdge(s);(i=new THREE.BufferGeometry).setIndex(new THREE.Uint32BufferAttribute(o,1)),i.setAttribute("position",s.getAttribute("position")),r.push(i)}return this.wireframeGeometryMap[e]=r,this.wireframeGeometryMap[e]}_makeWireframeLineMeshes(e,t,i){if(!r.ModelView.BaseDescriptor.isLineNode(t)){var n=this.wireframeLineMeshes[t.nodeId];if(!n){n=this.wireframeLineMeshes[t.nodeId]=[];for(var a=this._getWireframeGeometryByNodeInfo(e,t),s=0,o=a.length;s<o;s++){var l=new THREE.LineSegments(a[s],this._getWireframeMaterial(e));l.name=t.nodeId+"_"+s,l.applyMatrix4(t.matrix),n.push(l)}}if(!e.isReplacedUserId(t.userId)&&!e.isHiddenSourceObjectUserId(t.userId)&&function(e,t){return!(r.GlobalData.Instance&&(e.geometryId===r.ModelView.BaseDescriptor.parameterizedNodeType.BOX||e.geometryId===r.ModelView.BaseDescriptor.parameterizedNodeType.BOX_M)||(t.getWireFrameVisibilityCondition()?!t._isRenderWithWireFrame(e):t._hasRenderWithBoardlineFilter()&&!t._isRenderWithBoardline(e)))}(t,this._getFilter(e)))for(var d=0,h=n.length;d<h;d++)i.add(n[d])}}_generateWireframeNodes(e,t){for(var i=this._getWireWireframeGroupNode(e),r=this.manager.getPriorityNodes(),n=0,a=0,s=r.length;a<s;++a)for(var o=r[a],l=0,d=Object.keys(o).length;l<d&&!(++n>t);++l){var h=o[l];this._makeWireframeLineMeshes(e,h,i)}}_getWireframeGroupName(e){return e._getWireframeGroupName()}_getWireframeMaterial(e){return e.getWireframeMaterial()}_getFilter(e){return e.getFilter()}explode(e){for(var t=new THREE.Matrix4,i=e.getModelDescriptor().getAllNodeInfos(),r=Object.keys(i),n=0,a=r.length;n<a;n++){var s=r[n],o=i[s],l=e.modelExplosion.getExplosionTranslation(s);t.makeTranslation(l.x,l.y,l.z);for(var d=0,h=o.length;d<h;d++){var c=this.wireframeLineMeshes[o[d].nodeId];if(c)for(var u=0;u<c.length;u++)c[u].applyMatrix4(t)}}}disposeBufferAfterVbo(){}getPickingNodeGenerator(e){return e=null==e?"pick":e,this.pickingNodeGenerators||(this.pickingNodeGenerators={}),this.pickingNodeGenerators[e]||(this.pickingNodeGenerators[e]=new r.PickingWireFrameGenerator(this)),this.pickingNodeGenerators[e]}},r.ModelView.IncrementBatchedManager=class{constructor(){this.meshManager=new r.ModelView.IncrementBatchedMeshManager(this),this.wireframeManager=new r.ModelView.IncrementBatchedWireFrameManager(this)}destroy(){this.meshManager.destroy(),this.meshManager=null,this.wireframeManager.destroy(),this.wireframeManager=null}clearData(){this.meshManager.clearData(),this.wireframeManager.clearData()}disposeGeometry(e){this.meshManager.disposeGeometry(e)}cullNodes(e,t){this.hasNodeInfo(e)&&this.meshManager.cullNodes(e,t)}hasNodeInfo(e){return!!e.getModelDescriptor().getStandardNodeInfos()}updateNodes(e){if(this.hasNodeInfo(e)){var t=this.meshManager.update(e);this.wireframeManager.update(e,t)}}applyFilter(e,t){}applySelection(e){}clearSelection(e){}applyHover(e){}clearHover(e){}applyBlink(e){}clearBlink(e){}applyReplacement(e){}getPriorityNodes(){return this.meshManager.getPriorityNodes()}getGeometryByNodeInfo(e,t){return this.meshManager.getGeometryByNodeInfo(e,t)}getRenderableCount(e){return e.getRenderableCount()}getLoader(e){return e.getLoader()}getContainsCamera(e){return e.containsCamera}getFilter(e){return e.getFilter()}getMeshesByUserIds(e,t,i){this.meshManager.getMeshesByUserIds(e,t,i)}disposeBufferAfterVbo(){this.meshManager.disposeBufferAfterVbo(),this.wireframeManager.disposeBufferAfterVbo()}getGeometryBuffersByUserId(e,t){return this.meshManager.getGeometryBuffersByUserId(e,t)}explode(e){this.hasNodeInfo(e)&&(this.meshManager.explode(e),this.wireframeManager.explode(e))}getMeshManager(){return this.meshManager}getWireFrameManager(){return this.wireframeManager}isHiddenNode(e){return!1}isParameterizedNode(e){}},function(){class e extends r.ModelView.InstancedMeshManager{constructor(e){super(e)}}r.ModelView.IncrementInstanceBatchedMeshManager=e}(),function(){class e extends r.ModelView.InstancedWireframeManager{constructor(e){super(e)}}r.ModelView.IncrementInstanceBatchedWireFrameManager=e}(),function(){class e extends r.ModelView.InstancedBaseManager{constructor(){super(),this.meshManager=new r.ModelView.IncrementInstanceBatchedMeshManager(this),this.wireframeManager=new r.ModelView.IncrementInstanceBatchedWireFrameManager(this)}}r.ModelView.IncrementInstanceBatchedManager=e}(),function(){class e extends r.ModelView.ModelBaseHandler{constructor(e){super(e),this.tag="default",this.defaultManager=new r.ModelView.IncrementBatchedManager,this.instancedManager=new r.ModelView.IncrementInstanceBatchedManager,this.loader=new r.ModelView.IncrementBatchedLoader(this)}prepareData(e){if(!this.dataReady){var t=this;this.loader.getDescriptor().asyncParseItemData((function(){t.dataReady=!0,t.settleData(e)}))}}prepare(e){this.isLoaded()&&!this.isHidden()&&(this.model.getMaterialManager()._updateTextureMapping(),this.model.clearMeshFromOctantMap(),this.instancedManager.addAllInstanceNodeToScene(this.model),this.defaultManager.cullNodes(this.model,e),this.prepareWireframe(this.model),this.updateNodes())}prepareWireframe(e,t){e.isActivateWireframe()&&this.instancedManager.generateWireframe(e)}settleData(e){this.model.getModelDescriptor().classifyAllNodeInfo(),this.addNodeInfoToOctantMap(),this.model.getModelDescriptor().destroyReader(),this.createMeshNodes(e)}addNodeInfoToOctantMap(){var e=this.model.manager,t=this.model.getEncodedDatabagId();this.model.getModelDescriptor().traverseNodeInfosByCell((function(i,r){e.addNodeInfoToOctantMap(t,i,r)}))}createMeshNodes(e){var t=this,i=this.model.getModelDescriptor().getInstancedUserIds();if(0===i.length)return t.loaded=!0,void(e&&e());r.Utils.asyncProcess(i,i.length,500,(function(e,i){t.instancedManager.meshManager._createInstanceGeometries(t.model,[e[i]])}),(function(){t.instancedManager.meshManager._makeInstanceNodes(t.model),t.loaded=!0,e&&e()}))}disposeBufferAfterVbo(){}}r.ModelView.IncrementBatchedHandler=e}(),(()=>{let e=new THREE.Vector3;r.OctantNeighborUtil=function(e,t){this.camera=e,this.root=t,this.searchNeighborOfNeighbor=!1,this.containChildOfNeighbor=!1,this.containedOctants=[],this.father=function(e){return++e<this.containedOctants.length?this.containedOctants[e]:null},this.adjFace=function(e,t){return i[8*e+t]},this.adjEdge=function(e,t){return r[8*e+t]},this.adjVertex=function(e,t){return e==t},this.refelectFace=function(e,t){return n[8*e+t]},this.refelectEdge=function(e,t){return a[8*e+t]},this.refelectVertex=function(e,t){return this.OctType.MAXTYPEID-t},this.common_face_edge=function(e,t){return s[8*e+t]},this.common_face_vertex=function(e,t){return o[8*e+t]},this.common_edge=function(e,t){return l[8*e+t]},this.son=function(e,t){var i,r=e.childOctants.length;for(i=0;i<r;i++)if(e.childOctants[i].octType==t)return e.childOctants[i];return null},this.FaceType={L:0,R:1,D:2,U:3,B:4,F:5,UNKNOWN:6},this.EdgeType={LD:0,LU:1,LB:2,LF:3,RD:4,RU:5,RB:6,RF:7,DB:8,DF:9,UB:10,UF:11,UNKNOWN:12},this.OctType={RUF:0,LUF:1,RDF:2,LDF:3,RUB:4,LUB:5,RDB:6,LDB:7,MAXTYPEID:7};var i=[!1,!0,!1,!0,!1,!0,!1,!0,!0,!1,!0,!1,!0,!1,!0,!1,!1,!1,!0,!0,!1,!1,!0,!0,!0,!0,!1,!1,!0,!0,!1,!1,!1,!1,!1,!1,!0,!0,!0,!0,!0,!0,!0,!0,!1,!1,!1,!1],r=[!1,!1,!1,!0,!1,!1,!1,!0,!1,!0,!1,!1,!1,!0,!1,!1,!1,!1,!1,!1,!1,!0,!1,!0,!1,!0,!1,!0,!1,!1,!1,!1,!1,!1,!0,!1,!1,!1,!0,!1,!0,!1,!1,!1,!0,!1,!1,!1,!1,!1,!1,!1,!0,!1,!0,!1,!0,!1,!0,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!0,!0,!1,!1,!0,!0,!1,!1,!1,!1,!1,!1,!1,!1,!0,!0,!1,!1,!0,!0,!1,!1,!1,!1,!1,!1],n=[1,0,3,2,5,4,7,6,1,0,3,2,5,4,7,6,2,3,0,1,6,7,4,5,2,3,0,1,6,7,4,5,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3],a=[3,2,1,0,7,6,5,4,3,2,1,0,7,6,5,4,5,4,7,6,1,0,3,2,5,4,7,6,1,0,3,2,3,2,1,0,7,6,5,4,3,2,1,0,7,6,5,4,5,4,7,6,1,0,3,2,5,4,7,6,1,0,3,2,6,7,4,5,2,3,0,1,6,7,4,5,2,3,0,1,6,7,4,5,2,3,0,1,6,7,4,5,2,3,0,1],s=[6,0,2,6,6,0,2,6,3,6,6,0,3,6,6,0,6,0,6,0,4,6,4,6,5,6,5,6,6,0,6,0,1,6,6,2,1,6,6,2,6,3,1,6,6,3,1,6,1,6,1,6,6,4,6,4,6,5,6,5,1,6,1,6,6,6,2,2,4,4,6,6,5,5,6,6,6,6,2,2,3,3,6,6,6,6,4,4,6,6,5,5,3,3,6,6],o=[6,6,6,5,6,3,1,6,6,6,5,6,3,6,6,0,6,5,6,6,1,6,6,2,5,6,6,6,6,0,2,6,6,3,1,6,6,6,6,4,3,6,6,0,6,6,4,6,1,6,6,2,6,4,6,6,6,0,2,6,1,6,6,6],l=[12,11,7,12,5,12,12,12,11,12,12,3,12,1,12,12,7,12,12,9,12,12,4,12,12,3,9,12,12,12,12,0,5,12,12,12,12,10,6,12,12,1,12,12,10,12,12,2,12,12,4,12,6,12,12,8,12,12,12,0,12,2,8,12]},r.OctantNeighborUtil.prototype.findFaceNeighborImpl=function(e,t){var i={node:null,cont:!1},r=this.containedOctants,n=r[e];if(e>=r.length)return i;if(this.father(e)&&this.adjFace(t,n.octType)?i=this.findFaceNeighborImpl(e+1,t):(i.node=this.father(e),i.cont=!0),i.cont&&null!==i.node&&i.node.childOctants.length>0){var a=this.son(i.node,this.refelectFace(t,n.octType));return a?{node:a,cont:!0}:{node:i.node,cont:!1}}return i},r.OctantNeighborUtil.prototype.findFaceNeighbor=function(e,t){var i=this.findFaceNeighborImpl(e,t);return i.node&&!i.node.isRoot()?i.node:null},r.OctantNeighborUtil.prototype.findEdgeNeighborImpl=function(e,t){var i={node:null,cont:!1},r=this.containedOctants,n=r[e];if(e>=r.length)return i;if(this.father(e)&&(this.adjEdge(t,n.octType)?i=this.findEdgeNeighborImpl(e+1,t):this.common_face_edge(t,n.octType)!==this.FaceType.UNKNOWN?i=this.findFaceNeighborImpl(e+1,this.common_face_edge(t,n.octType)):(i.node=this.father(e),i.cont=!0)),i.cont&&null!==i.node&&i.node.childOctants.length>0){var a=this.son(i.node,this.refelectEdge(t,n.octType));return a?{node:a,cont:!0}:{node:i.node,cont:!1}}return i},r.OctantNeighborUtil.prototype.findEdgeNeighbor=function(e,t){var i=this.findEdgeNeighborImpl(e,t);return i.node&&!i.node.isRoot()?i.node:null},r.OctantNeighborUtil.prototype.findVertexNeighborImpl=function(e,t){var i={node:null,cont:!1},r=this.containedOctants,n=r[e];if(e>=r.length)return i;if(this.father(e)&&(this.adjVertex(t,n.octType)?i=this.findVertexNeighborImpl(e+1,t):this.common_edge(t,n.octType)!==this.EdgeType.UNKNOWN?i=this.findVertexNeighborImpl(e+1,this.common_edge(t,n.octType)):this.common_face_vertex(t,n.octType)!=this.FaceType.UNKNOWN?i=this.findVertexNeighborImpl(e+1,this.common_face_vertex(t,n.octType)):(i.node=this.father(e),i.cont=!0)),i.cont&&null!==i.node&&i.node.childOctants.length>0){var a=this.son(i.node,this.refelectVertex(t,n.octType));return a?{node:a,cont:!0}:{node:i.node,cont:!1}}return i},r.OctantNeighborUtil.prototype.findVertexNeighbor=function(e,t){var i=this.findVertexNeighborImpl(e,t);return i.node&&!i.node.isRoot()?i.node:null},r.OctantNeighborUtil.prototype.findContainNode=function(e){var t,i=this.camera.position;if(!(i.x<e.min.x||i.x>e.max.x||i.y<e.min.y||i.y>e.max.y||i.z<e.min.z||i.z>e.max.z)){var r,n;if(0!=e.childOctants.length)for(r=0,n=e.childOctants.length;r<n&&(t=e.childOctants[r],!this.findContainNode(t));++r);return this.containedOctants.push(e),!0}return!1},r.OctantNeighborUtil.prototype.findNeighborNode=function(){var t,i=this.searchNeighborOfNeighbor,r=this.containChildOfNeighbor,n=this.camera,a=this.containedOctants,s=this.OctType,o=this.EdgeType,l=[];if(0==a.length)return l;var d,h,c,u,p,m,f,g,v=n.frustum,y=a[0];f=y.min,g=y.max;var M=n.target,E=n.position,b=new THREE.Vector3(M.x-E.x,M.y-E.y,M.z-E.z),x=new THREE.Ray(E,b),I=[],T=new THREE.Box3(f,g),C=x.intersectBox(T,e);if(C&&(C.y==f.y||C.y==g.y?C.x<=g.x&&C.x>=f.x&&C.z<=g.z&&C.z>=f.z&&(C.y==f.y?I.push(2):I.push(3)):C.z==f.z||C.z==g.z?C.x<=g.x&&C.x>=f.x&&C.y<=g.y&&C.y>=f.y&&(C.z==f.z?I.push(4):I.push(5)):C.x!=f.x&&C.x!=g.x||C.z<=g.z&&C.z>=f.z&&C.y<=g.y&&C.y>=f.y&&(C.x==f.x?I.push(0):I.push(1))),0==I.length)return l;u=g.x-f.x,(p=g.y-f.y)>u&&(u=p),(m=g.z-f.z)>u&&(u=m);var w=u,S=new THREE.Vector3;for(d=0;d<6;d++)if(d!=I[0]){switch(S.copy(y.center),d){case 0:S.x-=w;break;case 1:S.x+=w;break;case 2:S.y-=w;break;case 3:S.y+=w;break;case 4:S.z-=w;break;case 5:S.z+=w}var A=w/2,B=new THREE.Box3(new THREE.Vector3(S.x-A,S.y-A,S.z-A),new THREE.Vector3(S.x+A,S.y+A,S.z+A));v.intersectsBox(B)&&I.push(d)}if(I.length>1&&I.sort(),I.length>2){var R=0;for(d=0;d<I.length;d++)for(h=d+1;h<I.length;h++)for(c=h+1;c<I.length;c++){if(1==I[d]&&3==I[h]&&5==I[c])R=s.RUF;else if(0==I[d]&&3==I[h]&&5==I[c])R=s.LUF;else if(1==I[d]&&2==I[h]&&5==I[c])R=s.RDF;else if(0==I[d]&&2==I[h]&&5==I[c])R=s.LDF;else if(1==I[d]&&3==I[h]&&4==I[c])R=s.RUB;else if(0==I[d]&&3==I[h]&&4==I[c])R=s.LUB;else if(1==I[d]&&2==I[h]&&4==I[c])R=s.RDB;else{if(0!=I[d]||2!=I[h]||4!=I[c])continue;R=s.LDB}(t=this.findVertexNeighbor(0,R))&&(l.push(t),r&&this.getChildOfOctant(t,2,R,l),i&&(t=this.getNeighborOfSecondLevel(t,2,R))&&l.push(t))}}if(I.length>1){var D=0;for(d=0;d<I.length;d++)for(h=d+1;h<I.length;h++){if(0==I[d]&&2==I[h])D=o.LD;else if(0==I[d]&&3==I[h])D=o.LU;else if(0==I[d]&&4==I[h])D=o.LB;else if(0==I[d]&&5==I[h])D=o.LF;else if(1==I[d]&&2==I[h])D=o.RD;else if(1==I[d]&&3==I[h])D=o.RU;else if(1==I[d]&&4==I[h])D=o.RB;else if(1==I[d]&&5==I[h])D=o.RF;else if(2==I[d]&&4==I[h])D=o.DB;else if(2==I[d]&&5==I[h])D=o.DF;else if(3==I[d]&&4==I[h])D=o.UB;else{if(3!=I[d]||5!=I[h])continue;D=o.UF}(t=this.findEdgeNeighbor(0,D))&&(l.push(t),r&&this.getChildOfOctant(t,1,D,l),i&&(t=this.getNeighborOfSecondLevel(t,1,D))&&l.push(t))}}for(d=0;d<I.length;d++)(t=this.findFaceNeighbor(0,I[d]))&&(l.push(t),r&&this.getChildOfOctant(t,0,I[d],l),i&&(t=this.getNeighborOfSecondLevel(t,0,I[d]))&&l.push(t));return l.sort((function(e,t){return e.octantId<t.octantId?-1:1})),l},r.OctantNeighborUtil.prototype.getChildOfOctant=function(e,t,i,r){if(!(0==e.childOctants.length||e.depth<4)){var n=this.FaceType,a=[];switch(t){case 0:a.push(i%2==0?i+1:i-1);break;case 1:var s=this.EdgeType;switch(i){case s.LD:a.push(n.R),a.push(n.U);break;case s.LU:a.push(n.R),a.push(n.D);break;case s.LB:a.push(n.R),a.push(n.F);break;case s.LF:a.push(n.R),a.push(n.B);break;case s.RD:a.push(n.L),a.push(n.U);break;case s.RU:a.push(n.L),a.push(n.D);break;case s.RB:a.push(n.L),a.push(n.F);break;case s.RF:a.push(n.L),a.push(n.B);break;case s.DB:a.push(n.U),a.push(n.F);break;case s.DF:a.push(n.U),a.push(n.B);break;case s.UB:a.push(n.D),a.push(n.F);break;case s.UF:a.push(n.D),a.push(n.B)}break;case 2:var o=this.OctType;switch(i){case o.RUF:a.push(n.L),a.push(n.D),a.push(n.B);break;case o.LUF:a.push(n.R),a.push(n.D),a.push(n.B);break;case o.RDF:a.push(n.L),a.push(n.U),a.push(n.B);break;case o.LDF:a.push(n.R),a.push(n.U),a.push(n.B);break;case o.RUB:a.push(n.L),a.push(n.D),a.push(n.F);break;case o.LUB:a.push(n.R),a.push(n.D),a.push(n.F);break;case o.RDB:a.push(n.L),a.push(n.U),a.push(n.F);break;case o.LDB:a.push(n.R),a.push(n.U),a.push(n.F)}}for(var l=0;l<a.length;l++)this.getFaceChildOfOctant(e,a[l],r)}},r.OctantNeighborUtil.prototype.getFaceChildOfOctant=function(e,t,i){for(var r,n,a=0,s=e.childOctants.length;a<s;a++)if(r=e.childOctants[a],this.adjFace(t,r.octType))i.push(r),this.getFaceChildOfOctant(r,t,i);else{n=this.refelectFace(t,r.octType);for(var o=0;o<s&&e.childOctants[o].octType!=n;o++);o==s&&(i.push(r),this.getFaceChildOfOctant(r,t,i))}},r.OctantNeighborUtil.prototype.getNeighborOfSecondLevel=function(e,t,i){var n=[],a=[];a[0]=e,this.getAncestorNodes(this.root,a,0,[],n);var s=new r.OctantNeighborUtil(this.camera,this.root);s.containedOctants=n;var o=null;switch(t){case 0:o=s.findFaceNeighbor(0,i);break;case 1:o=s.findEdgeNeighbor(0,i);break;case 2:o=s.findVertexNeighbor(0,i)}return o},r.OctantNeighborUtil.prototype.getAncestorAndNeighbors=function(){this.searchNeighborOfNeighbor=!0,this.containChildOfNeighbor=!0;var e=this.containedOctants;this.findContainNode(this.root);var t=this.findNeighborNode(this.camera,e),i=[];this.getAncestorNodes(this.root,t,0,[],i);var r,n,a={};for(r=0,n=e.length;r<n;r++)a[e[r].octantId]=1;for(r=0,n=t.length;r<n;r++)a[t[r].octantId]=1;for(r=0,n=i.length;r<n;r++)a[i[r].octantId]=1;return a},r.OctantNeighborUtil.prototype.getAncestorNodes=function(e,t,i,r,n){var a,s,o;for(a=0,s=e.childOctants.length;a<s&&i<t.length;a++){if(o=e.childOctants[a],r.push(o),o.octantId==t[i].octantId){for(var l=r.length-1;l>=0;l--)n.push(r[l]);i++}else(a==s-1||e.childOctants[a+1].octantId>t[i].octantId)&&(i=this.getAncestorNodes(o,t,i,r,n));r.pop()}return i},r.OctantNeighborUtil.prototype.outputOctants=function(e,t){console.group(),console.log("Node that contains camera: %d",t.octantId);var i="",r=0;for(var n in e)i+=n,i+=" ",r%9==0&&(i+="\n"),r++;console.log("nodes: %s",i),console.groupEnd()},r.OctantNeighborUtil.prototype.outputOctree=function(e,t){var i;console.group();var r="";for(i=0;i<e.depth;i++)r+=" ";console.log("%sNode id: %i, depth: %i, octType: %i, parent: %i",r,e.octantId,e.depth,e.octType,t),console.log("%s size: %f, center: %f, %f, %f",r,e.size,e.center.x,e.center.y,e.center.z),console.log("%s child number: %i",r,e.childOctants.length);var n="";for(i=0;i<e.childOctants.length;i++)n+=e.childOctants[i].octantId,n+=" ";for(console.log("%s children: %i",r,n),i=0;i<e.childOctants.length;i++)this.outputOctree(e.childOctants[i],e.octantId);console.groupEnd()}})(),r.Loader.OctreeNode=function(e,t){void 0===e&&alert("Invalid Octant Id"),this.octantId=e,this.childOctants=new Array,this.min=null,this.max=null,this.depth=t||0,this.center=null,this.size=-1,this.priority=-1,this.octType=-1},r.Loader.OctreeNode.prototype.isRoot=function(){return 0==this.depth},r.Loader.OctreeNode.prototype.add=function(e){e.depth=this.depth+1,this.childOctants.push(e)},r.Loader.OctreeNode.prototype.updateMaxDepth=function(){this.depth>r.GlobalData.MaximumDepth&&(r.GlobalData.MaximumDepth=this.depth)},function(){let e=new THREE.Vector3;r.OctantManager=class{constructor(){this.visibleOctantList=[]}destroy(){this.visibleOctantList=null}_getVisibleOctantsWithInnerAndOuterOctree(e,t,i){this.visibleOctantList.length=0;var n=e.getModelDescriptor().getOctreeRootNode(),a=n.inner,s=n.outer;if(!a&&!s)return[];var o=null;if(e.containsCamera)a&&(o=new r.OctantNeighborUtil(t,a).getAncestorAndNeighbors(),this._frustumCull(t,a,i,this.visibleOctantList)),s&&this._frustumCull(t,s,i,this.visibleOctantList),this._sortOctantList(this.visibleOctantList,o);else{var l=[],d=[];s&&(this._frustumCull(t,s,!0,l),this._sortOctantList(l,o)),a&&(o=new r.OctantNeighborUtil(t,a).getAncestorAndNeighbors(),this._frustumCull(t,a,i,d),this._sortOctantList(d,o));var h,c=l.length,u=d.length;for(h=0;h<c;h++)this.visibleOctantList[h]=l[h];for(h=0;h<u;h++)this.visibleOctantList[c+h]=d[h]}return this.visibleOctantList}_getVisibleOctantsWithLayerOctree(e,t,i){this.visibleOctantList.length=0;var r=e.getModelDescriptor().getOctreeRootNode().layer;return this._frustumCull(t,r,i,this.visibleOctantList),this._sortOctantList(this.visibleOctantList),this.visibleOctantList}getVisibleOctants(e,t,i){return e.getModelDescriptor().isUseInnerAndOuterOctree()?this._getVisibleOctantsWithInnerAndOuterOctree(e,t,i):this._getVisibleOctantsWithLayerOctree(e,t,i)}_sortOctantList(e,t){e.sort((function(e,i){if(null!=t){if(null!=t[e.octantId])return-1;if(null!=t[i.octantId])return 1}return e.priority>i.priority?-1:e.priority<i.priority?1:0}))}showOctreeBox(e){if(r.GlobalData.DEBUG){var t=e.getModelDescriptor().getOctreeRootNode();e.getModelDescriptor().isUseInnerAndOuterOctree()?(t.inner&&e.manager.showOctreeBox(t.inner),t.outer&&e.manager.showOctreeBox(t.outer)):t.layer&&e.manager.showOctreeBox(t.layer)}}_frustumCull(t,i,n,a){var s=t.getFrustum(),o=r.GlobalData.OctantDepth,l=t.projScreenMatrix,d=new THREE.Box3,h=1e-6;!function t(i,r,n,a,s){var o;if(r&&i.depth<n&&(d.set(i.min,i.max),o=r.intersectsBox(d)),o){if(a){var c=d.applyMatrix4(l),u=c.getCenter(e).z;u=u>h?u:h;var p=c.getSize(e).length();i.priority=p/u,s.push(i)}else s.push(i);for(var m=0,f=i.childOctants.length;m<f;++m){t(i.childOctants[m],r,n,a,s)}}}(i,s,o,n,a)}_traverseOctants(e,t){!function e(t,i){i.push(t);for(var r=0,n=t.childOctants.length;r<n;++r){e(t.childOctants[r],i)}}(e,t)}getAllOctants(e){var t=[],i=e.getModelDescriptor().getOctreeRootNode();return e.getModelDescriptor().isUseInnerAndOuterOctree()?(i.inner&&this._traverseOctants(i.inner,t),i.outer&&this._traverseOctants(i.outer,t)):i.layer&&this._traverseOctants(i.layer,t),t}}}(),r.MaterialSelector=class{constructor(){const e=[{name:"scene",param:{name:"scene",color:8947848,opacity:.4,transparent:!0,side:THREE.DoubleSide}},{name:"darkRed",param:{name:"darkRed",color:10496040,opacity:1,transparent:!1,side:THREE.DoubleSide}},{name:"lightBlue",param:{name:"lightBlue",color:1275840,opacity:1,transparent:!1,side:THREE.DoubleSide}},{name:"black",param:{name:"black",color:0,opacity:.3,transparent:!0,side:THREE.DoubleSide}},{name:"add",param:{name:"add",color:65280,opacity:1,transparent:!0,side:THREE.DoubleSide}},{name:"delete",param:{name:"delete",color:16711680,opacity:.5,transparent:!0,side:THREE.DoubleSide}},{name:"beforeEdit",param:{name:"beforeEdit",color:16432389,opacity:.5,transparent:!0,side:THREE.DoubleSide}},{name:"afterEdit",param:{name:"afterEdit",color:16432389,opacity:1,transparent:!0,side:THREE.DoubleSide}}];this._materials={},this._materials.selection=r.MaterialUtil.createHighlightMaterial(),this._materials.selection.name="selection";for(let t=0,i=e.length;t<i;++t){const i=e[t],n=i.name,a=i.param;this._materials[n]=r.MaterialUtil.createStandardMaterial(a)}this._materials.red=this._materials.delete,this._materials.green=this._materials.add,this._materials.yellow=this._materials.beforeEdit,this._materials.blue=this._materials.selection,this._isolateMaterialDefaultParams={color:8947848,opacity:.2,transparent:!0,side:THREE.DoubleSide},this._isolateMaterial=r.MaterialUtil.createStandardMaterial(this._isolateMaterialDefaultParams),this._isolateMaterial.name="isolate",this._frozenMaterialDefaultParams={color:8947848,opacity:.2,transparent:!0,side:THREE.DoubleSide},this._frozenMaterial=r.MaterialUtil.createStandardMaterial(this._frozenMaterialDefaultParams),this._frozenMaterial.name="frozen",this._selectedMaterialDefaultParams={color:15293,side:THREE.DoubleSide},this._selectedMaterial=r.MaterialUtil.createStandardMaterial(this._selectedMaterialDefaultParams),this._selectedMaterial.name="selected",this._instanceMaterialsForClip={},this._materialsForClip={},this._materialsForModifyOpacity={}}getDefaultMaterialName(){return"lightBlue"}get(e){return this._materials[e]}getAll(){return this._materials}add(e){let t,i,n={};return e&&e.hasOwnProperty("uuid")?(t="override_"+e.uuid,delete e.uuid,i=this._materials[t],i||(e.name=t,i=r.MaterialUtil.createStandardMaterial(e),i.overrideColor=!0,this._materials[t]=i),t):(e&&e.hasOwnProperty("color")&&(n.color=e.color,e.hasOwnProperty("opacity")&&(n.opacity=e.opacity,n.transparent=1!=e.opacity),e.hasOwnProperty("map")&&(n.map=e.map,e.hasOwnProperty("bumpMap")&&(n.bumpMap=e.bumpMap))),t=this._getMaterialName(e),i=this._materials[t],i||(n.name=t,i=r.MaterialUtil.createStandardMaterial(n),i.overrideColor=!0,this._materials[t]=i),t)}remove(e){let t,i;t=this._getMaterialName(e),i=this._materials[t],i&&delete this._materials[t]}has(e){return!!this._materials[e]}getMaterialNameByColor(e){let t,i;return t=this._getMaterialName(e),i=this._materials[t],i?t:this.add(e)}addOverrideMaterial(e){if(!e)return;const t=e.name;e.overrideColor=!0,this._materials[t]||(this._materials[t]=e)}getMaterialParamsFromName(e){let t={};const i=e.split("_");return"mat"==i[0]?(t.color=parseInt(i[1]),t.opacity=1):(t.color=parseInt(i[0]),t.opacity=parseFloat(i[1])),t}_getMaterialName(e){let t;return e&&e.hasOwnProperty("color")?(t=e.hasOwnProperty("opacity")?e.color+"_"+e.opacity:"mat_"+e.color,e.hasOwnProperty("map")&&(t+="_"+e.map.uuid),e.hasOwnProperty("setByOpacity")&&(t+="_opacity")):t="mat_"+e,t}setFrozonMaterial(e){void 0!==e.color?this._frozenMaterial.color.setHex(e.color):this._frozenMaterial.color.setHex(this._frozenMaterialDefaultParams.color),void 0!==e.opacity?this._frozenMaterial.opacity=e.opacity:this._frozenMaterial.opacity=this._frozenMaterialDefaultParams.opacity,void 0!==e.transparent?this._frozenMaterial.transparent=e.transparent:this._frozenMaterial.transparent=this._frozenMaterialDefaultParams.transparent,void 0!==e.side?this._frozenMaterial.side=e.side:this._frozenMaterial.side=this._frozenMaterialDefaultParams.side,this._frozenMaterial.needsUpdate=!0}getFrozonMaterial(){return this._frozenMaterial}setSelectedMaterial(e){void 0!==e.color?this._selectedMaterial.color.setHex(e.color):this._selectedMaterial.color.setHex(this._selectedMaterialDefaultParams.color),void 0!==e.opacity?this._selectedMaterial.opacity=e.opacity:this._selectedMaterial.opacity=this._selectedMaterialDefaultParams.opacity,void 0!==e.transparent?this._selectedMaterial.transparent=e.transparent:this._selectedMaterial.transparent=this._selectedMaterialDefaultParams.transparent,void 0!==e.side?this._selectedMaterial.side=e.side:this._selectedMaterial.side=this._selectedMaterialDefaultParams.side,this._selectedMaterial.needsUpdate=!0}getSelectedMaterial(){return this._selectedMaterial}setIsolateMaterial(e){void 0!==e.color?this._isolateMaterial.color.setHex(e.color):this._isolateMaterial.color.setHex(this._isolateMaterialDefaultParams.color),void 0!==e.opacity?this._isolateMaterial.opacity=e.opacity:this._isolateMaterial.opacity=this._isolateMaterialDefaultParams.opacity,void 0!==e.transparent?this._isolateMaterial.transparent=e.transparent:this._isolateMaterial.transparent=this._isolateMaterialDefaultParams.transparent,void 0!==e.side?this._isolateMaterial.side=e.side:this._isolateMaterial.side=this._isolateMaterialDefaultParams.side,this._isolateMaterial.needsUpdate=!0}getIsolateMaterial(){return this._isolateMaterial}resetIsolateMaterial(){this._isolateMaterial.color.setHex(this._isolateMaterialDefaultParams.color),this._isolateMaterial.opacity=this._isolateMaterialDefaultParams.opacity,this._isolateMaterial.transparent=this._isolateMaterialDefaultParams.transparent,this._isolateMaterial.side=this._isolateMaterialDefaultParams.side,this._isolateMaterial.needsUpdate=!0}addInstanceMaterialForClip(e,t){void 0===this._instanceMaterialsForClip[e]&&(this._instanceMaterialsForClip[e]={}),this._instanceMaterialsForClip[e].instanceMaterial=t}getAllInstanceMaterialsForClip(){return this._instanceMaterialsForClip}clearInstanceMaterialsForClip(){this._instanceMaterialsForClip={}}addMaterialForClip(e){const t=this.getMaterialNameBy(e);let i=this._materialsForClip[t];if(!i){let n={};e.hasOwnProperty("color")&&(n.color=e.color),e.hasOwnProperty("opacity")&&(n.opacity=e.opacity,n.transparent=1!=e.opacity),e.hasOwnProperty("map")&&(n.map=e.map),n.side=r.Utils.isDefined(e.side)?e.side:THREE.DoubleSide,n.name=t,i=r.MaterialUtil.createStandardMaterial(n),this._materialsForClip[t]=i}return i}getMaterialForClipBy(e,t){let i=this._materialsForClip[e];return i||t&&(i=t.clone(),i.name=e,this._materialsForClip[e]=i),i}getAllMaterialsForClip(){return this._materialsForClip}clearMaterialsForClip(){for(const e in this._materialsForClip)this._materialsForClip[e].dispose();this._materialsForClip={}}getMaterialForModifyOpacityBy(e,t){let i=this._materialsForModifyOpacity[e];return i||t&&(i=t.clone(),i.name=e,this._materialsForModifyOpacity[e]=i),i}clearMaterialsForModifyOpacity(){for(const e in this._materialsForModifyOpacity)this._materialsForModifyOpacity[e].dispose();this._materialsForModifyOpacity={}}getMaterialNameBy(e){let t="";return e.hasOwnProperty("color")&&(t+=e.color),e.hasOwnProperty("opacity")&&(t+="_"+e.opacity),e.hasOwnProperty("map")&&(t+="_"+e.map.uuid),t}getAllTypeMaterial(){let e=Object.values(this._materials);return e.push(this._isolateMaterial,this._frozenMaterial,this._selectedMaterial),e}getCustomizedMaterials(e){let t=Object.values(this._materials);const i=e.override;return t=t.filter((function(e){return i&&!0===e.overrideColor})),e.isolate&&t.push(this._isolateMaterial),e.frozen&&t.push(this._frozenMaterial),e.selected&&t.push(this._selectedMaterial),t}},function(){r.EnumConditionType={HIDDEN_OTHERS:0,TRANSLUCENT_OTHERS:1,OVERRIDE:2,BORDERLINE:3},r.EnumIdBasedType={FILE_VISIBLE:0,FILE_HIDDEN:1,VISIBLE:2,HIDDEN:3,TRANSLUCENT:4,TRANSLUCENT_OTHERS:5,RENDER_PROMOTION:6},r.EnumUserType={HIDDEN_DATA:0,OVERRIDE_DATA:1},r.EnumIsolateState={HIDDEN:0,HIDDEN_OTHERS:1,TRANSLUCENT:2,TRANSLUCENT_OTHERS:3},r.EnumSceneState={DISABLED:0,TRANSLUCENT:1,HIDDEN:2},r.EnumChangedState={NONE:-1,START:1,END:1e4};r.FilterManager=class{constructor(){this.sceneStateHelper=null,this._filterImpl=new r.FilterManager2,this.filterActionList=[],this.isolateFilterAction=null,this.materialSelector=this._filterImpl.getMaterialSelector(),this.objectInfoManager=new r.ObjectInfoManager,this.filterManagerIO=new r.FilterManagerIO(this.materialSelector),this.observerForSceneState=null,this._stateChanged=!1,this._visibleStateChanged=!1}destroy(){}setObserverForSceneState(e){this.observerForSceneState=e}setSceneStateHelper(e){this.sceneStateHelper=e}getFilterActionList(){return this.filterActionList}clearFilterActionList(){this.filterActionList=[]}initFilterManager(e){this.objectInfoManager.init(e)}reinitFilterManager(e){this.objectInfoManager.reinit(e)}clearFilterManager(){this.objectInfoManager.clearData()}isStateChanged(){return this._stateChanged}enableStateChanged(){this._stateChanged=!0}disableStateChanged(){this._stateChanged=!1}isVisibleStateChanged(){return this._visibleStateChanged}disableVisibleStateChanged(){this._visibleStateChanged=!1}enableVisibleStateChanged(){this._visibleStateChanged=!0}getIsolateFilterAction(){return this.isolateFilterAction}setIsolateAction(e){this.isolateFilterAction=e,this.isolateFilterAction.apply()}getVisibleComponentsBbox(){return this.objectInfoManager.getVisibleComponentsBbox()}pushBack(e){var t=e.getClassName();"IsolateIdsFA"==t||"IsolateConditionFA"==t?this.isolateFilterAction=e:this.filterActionList.push(e),"VisibleIdsFA"!=t&&"VisibleConditionFA"!=t||this.enableVisibleStateChanged(!0),this._stateChanged=!0,e.applyFilter(this.objectInfoManager)}removeFilterActionByName(e){for(var t=0;t<this.filterActionList.length;){e==this.filterActionList[t].getClassName()?this.filterActionList.splice(t,1):t++}}showAll(){this.removeFilterActionByName("VisibleIdsFA"),this.removeFilterActionByName("VisibleConditionFA"),this.objectInfoManager.clearVisible(),this.objectInfoManager.calculateVisibleComponentsBbox(),this.enableStateChanged()}hideAll(){var e=new r.VisibleIdsFA(!1,!1);e.ids=[],this.pushBack(e)}getObjectInfoManager(){return this.objectInfoManager}getMatchIds(e){return this.objectInfoManager.getMatchIds(e)}_isVisible(e){var t=e.name;return!this.objectInfoManager.isHidden(t)}isHidden(e){return this.objectInfoManager.isHidden(e)}isFrozen(e){return this.objectInfoManager.isFrozen(e)}_isTransparent(e){var t=e.name;return this.objectInfoManager.isTransparent(t)}_isPickable(e){var t=e.name;return this.isComponentActive(t)&&!this.objectInfoManager.isFrozen(t)}_getOverrideMaterial(e){var t=e.name;return this._getOverrideMaterialById(t)}_getOverrideMaterialById(e){return this.objectInfoManager.isFrozen(e)?this._filterImpl.getFrozonMaterial():this.objectInfoManager.getMaterial(e)}_getMaterialName(e){return this._filterImpl._getMaterialName(e)}_getMaterialByName(e){return this._filterImpl._getMaterialByName(e)}_hasOverrideMaterial(e){var t=e.name;return this.objectInfoManager.hasOverrideMaterial(t)}_hasHighPriorityOverrideMaterial(e){return this._filterImpl._hasHighPriorityOverrideMaterial(e)}_isHiddenFileId(e){return this._filterImpl._isHiddenFileId(e)}_isRenderPromotion(e){return this._filterImpl._isRenderPromotion(e)}_isRenderWithBoardline(e){return this._filterImpl._isRenderWithBoardline(e)}_hasHiddenFileIdFilter(){return this._filterImpl._hasHiddenFileIdFilter()}_hasVisibleFilter(){return this.objectInfoManager.hasObjectHidden()}_hasPickableFilter(){return this.objectInfoManager.hasObjectCantSelected()}_hasTransparentFilter(){return this.objectInfoManager.hasObjectTransparent()}_hasOverrideMaterialFilter(){return this.objectInfoManager.hasOverrideMaterial()}_hasLowPriorityOverride(){return this._filterImpl._hasLowPriorityOverride()}_hasRenderPromotionFilter(){return this._filterImpl._hasRenderPromotionFilter()}_hasRenderWithBoardlineFilter(){return this._filterImpl._hasRenderWithBoardlineFilter()}saveState(){return this.filterManagerIO.saveState(this)}loadState(e){this.filterManagerIO.loadState(e,this)}clear(){this.objectInfoManager.resetAll(),this._stateChanged=!0}clearAll(){return this.enableStateChanged(),this._filterImpl.clearAll()}clearIsolate(){this.objectInfoManager.clearIsolates()}clearFrozenList(){return this.enableStateChanged(),this._filterImpl.clearFrozenList()}addToFrozenList(e){return this.enableStateChanged(),this._filterImpl.addToFrozenList(e)}removeFromFrozenList(e){return this.enableStateChanged(),this._filterImpl.removeFromFrozenList(e)}setFrozenList(e){return this.enableStateChanged(),this._filterImpl.setFrozenList(e)}setFrozenConditions(e){this.enableStateChanged(),this._filterImpl.setFrozenConditions(e)}getFrozenConditions(){return this._filterImpl.getFrozenConditions()}clearFrozenConditions(){this.enableStateChanged(),this._filterImpl.clearFrozenConditions()}clearFrozen(){this.enableStateChanged(),this.clearFrozenList(),this.clearFrozenConditions()}clearAllIdList(){return this.enableStateChanged(),this._filterImpl.clearAllIdList()}clearIdList(e){return this.enableStateChanged(),this._filterImpl.clearIdList(e)}addToIdList(e,t){return this.enableStateChanged(),this._filterImpl.addToIdList(e,t)}removeFromIdList(e,t){return this.enableStateChanged(),this._filterImpl.removeFromIdList(e,t)}setIdList(e,t){return this.enableStateChanged(),this._filterImpl.setIdList(e,t)}clearAllOverrideList(){this.removeFilterActionByName("OverrideIdsFA"),this.removeFilterActionByName("OverrideConditionFA"),this.objectInfoManager.clearMaterial(),this.clearModifyOpacityList(),this.enableStateChanged()}clearOverrideList(e){return this.enableStateChanged(),this._filterImpl.clearOverrideList(e)}addToOverrideList(e,t,i){return this.enableStateChanged(),this._filterImpl.addToOverrideList(e,t,i)}removeFromOverrideList(e,t){return this.enableStateChanged(),this._filterImpl.removeFromOverrideList(e,t)}setOverrideList(e,t,i){return this.enableStateChanged(),this._filterImpl.setOverrideList(e,t,i)}addToOverrideListByColor(e,t){var i=null;if(t){var n=this._filterImpl.getMaterialNameByColor(t);i=this._filterImpl.getMaterialByName(n)}var a=new r.OverrideIdsFA(!0,i);a.ids=e,this.pushBack(a)}addToOverrideListByConditions(e,t){var i=null;if(t){var n=this._filterImpl.getMaterialNameByColor(t);i=this._filterImpl.getMaterialByName(n)}var a=new r.OverrideConditionFA(!0,i);a.conditions=e,this.pushBack(a)}addToOverrideListByMaterial(e,t){this._filterImpl.addOverrideMaterial(t);var i=new r.OverrideConditionFA(!0,t);i.conditions=e,this.pushBack(i)}addToOverrideListByMaterialAndId(e,t){t&&(t.vertexColors=!1),this._filterImpl.addOverrideMaterial(t);var i=new r.OverrideIdsFA(!0,t);i.ids=e,this.pushBack(i)}setOverrideListByColor(e,t,i){for(var r=0;r<t.length;r++){var n=this._filterImpl.getMaterialNameByColor(i),a=this._filterImpl.getMaterialByName(n);this.objectInfoManager.setMaterial(t[r],a)}}getVisibleComponentSet(e){for(var t={},i=Object.keys(e),r=0;r<i.length;r++)this._isVisible({name:i[r]})&&(t[i[r]]=!0);return t}clearAllUserList(){return this.enableStateChanged(),this._filterImpl.clearAllUserList()}clearUserListByType(e){return this.enableStateChanged(),this._filterImpl.clearUserListByType(e)}clearUserList(e,t){return this.enableStateChanged(),this._filterImpl.clearUserList(e,t)}addToUserList(e,t,i,r){return this.enableStateChanged(),this._filterImpl.addToUserList(e,t,i,r)}removeFromUserList(e,t,i){this.enableStateChanged(),this._filterImpl.removeFromUserList(e,t,i)}setUserList(e,t,i,r){this.enableStateChanged(),this._filterImpl.setUserList(e,t,i,r)}isIsolate(){var e=this.objectInfoManager.getObjectsMap();for(var t in e){if(e.hasOwnProperty(t))var i=e[t];for(var r in i){var n=this.objectInfoManager.isIsolateHide(r);if(n|=this.objectInfoManager.isIsolateTransparent(r))return!0}}return!1}isFiltering(){var e=this.filterActionList.length>0;return this.isIsolate()||e}getFrozonMaterial(){return this._filterImpl.getFrozonMaterial()}setIsolateMaterial(e){this.enableStateChanged(),this._filterImpl.setIsolateMaterial(e)}getIsolateMaterial(){return this._filterImpl.getIsolateMaterial()}resetIsolateMaterial(){this.enableStateChanged(),this._filterImpl.resetIsolateMaterial()}clearAllIsolateList(){this.objectInfoManager.clearIsolates(),this.enableStateChanged()}clearIsolation(){this.objectInfoManager.clearIsolates(),this.isolateFilterAction=null,this.enableStateChanged()}addToIsolateList(e,t){var i="HideOthers"==t,n=new r.IsolateIdsFA(i);n.ids=e,this.pushBack(n),this.clearFilterActionList(),i&&this.enableVisibleStateChanged(!0)}removeFromIsolateList(e,t){this.enableStateChanged(),this._filterImpl.removeFromIsolateList(e,t)}setIsolateList(e,t){var i=new r.IsolateIdsFA(t);i.ids=e,this.pushBack(i),t&&this.enableVisibleStateChanged(!0)}removeFromIsolateList(e,t){this.enableStateChanged(),this._filterImpl.removeFromIsolateList(e,t)}setIsolateConditions(e,t){var i=t==r.EnumIsolateState.HIDDEN_OTHERS,n=new r.IsolateConditionFA(i);n.conditions=e,this.pushBack(n),this.clearFilterActionList(),i&&this.enableVisibleStateChanged(!0)}getIsolateConditions(e){return this._filterImpl.getIsolateConditions(e)}clearIsolateConditions(e){this.enableStateChanged(),this._filterImpl.clearIsolateConditions(e)}clearAllIsolateConditions(){this.enableStateChanged(),this._filterImpl.clearAllIsolateConditions()}setConditions(e,t){if(0==e){this.objectInfoManager.hideAll();var i=new r.VisibleConditionFA(!0,!0);i.conditions=t,this.pushBack(i)}3==e&&this._filterImpl.setConditions(e,t)}getConditions(e){return this._filterImpl.getConditions(e)}clearConditions(e){this.enableStateChanged(),this._filterImpl.clearConditions(e)}clearAllConditions(){this.enableStateChanged(),this._filterImpl.clearAllConditions()}makeSceneTranslucent(){this.enableStateChanged(),this._filterImpl.makeSceneTranslucent()}cancelSceneTranslucent(){this.enableStateChanged(),this._filterImpl.cancelSceneTranslucent()}hideScene(){this.enableStateChanged(),this._filterImpl.hideScene()}showScene(){this.enableStateChanged(),this._filterImpl.showScene()}setSceneState(e){this.enableStateChanged(),this._filterImpl.setSceneState(e)}getSceneState(){return this._filterImpl.getSceneState()}cancelHidden(){this.enableStateChanged(),this._filterImpl.cancelHidden()}cancelTranslucent(){this.enableStateChanged(),this._filterImpl.cancelTranslucent()}hideByIds(e){var t=new r.VisibleIdsFA(!0,!1);t.ids=e,this.pushBack(t)}hideByConditions(e){var t=new r.VisibleConditionFA(!0,!1);t.conditions=e,this.pushBack(t)}hideOthersByConditions(e){var t=new r.VisibleConditionFA(!1,!1);t.conditions=e,this.pushBack(t)}showByIds(e){var t=new r.VisibleIdsFA(!0,!0);t.ids=e,this.pushBack(t)}showByConditions(e){var t=new r.VisibleConditionFA(!0,!0);t.conditions=e,this.pushBack(t)}makeTranslucentByIds(e){var t=new r.TransparentIdsFA(!0,!1);t.ids=e,this.pushBack(t)}makeTranslucentByConditions(e){var t=new r.TransparentConditionFA(!0,!1);t.conditions=e,this.pushBack(t)}opaqueByIds(e){var t=new r.TransparentIdsFA(!0,!0);t.ids=e,this.pushBack(t)}opaqueByConditions(e){var t=new r.TransparentConditionFA(!0,!0);t.conditions=e,this.pushBack(t)}setFrozonMaterial(e){this._filterImpl.setFrozonMaterial(e),this.enableStateChanged()}makeTranslucentOthersByIds(e){var t=new r.TransparentIdsFA(!1,!1);t.ids=e,this.pushBack(t)}opaqueAll(){this.removeFilterActionByName("TransparentIdsFA"),this.removeFilterActionByName("TransparentConditionFA"),this.objectInfoManager.clearTransparent(),this.enableStateChanged()}deactivateByIds(e){this.objectInfoManager.deactivateByIds(e),this.observerForSceneState&&this.observerForSceneState(e)}clearInactivatedIdMap(){this.objectInfoManager.clearInactivatedIdMap()}getInactivatedIdMap(){return this.objectInfoManager.getInactivatedIdMap()}deactivateAll(){this.objectInfoManager.deactivateAll()}activateAll(){this.objectInfoManager.activateAll()}isComponentActive(e){return this.objectInfoManager.isActive(e)}getFilterType(){return this._filterImpl.getFilterType()}_hasOverrideMaterialForWireFrame(e){var t=e.name;return this.objectInfoManager.hasOverrideMaterialForWireFrame(t)}_hasOverrideMaterialFilterForWireFrame(){return this.objectInfoManager.hasOverrideMaterialForWireFrame()}_getOverrideMaterialForWireFrame(e){return this.objectInfoManager.getWireFrameMaterial(e.name)}_getOverrideWireFrameMaterial(e){return this.objectInfoManager.getWireFrameMaterial(e.name)}addToOverrideListForWireFrameByColor(e,t){var i=null;if(t){var n=this._filterImpl.getMaterialNameByColor(t);i=this._filterImpl.getMaterialByName(n)}var a=new r.OverrideIdsForWireFrameFA(!0,i);a.ids=e,this.pushBack(a)}addToOverrideListForWireFrameByConditions(e,t){var i=null;if(t){var n=this._filterImpl.getMaterialNameByColor(t);i=this._filterImpl.getMaterialByName(n)}var a=new r.OverrideConditionForWireFrameFA(!0,i);a.conditions=e,this.pushBack(a)}needUpdateBoxAfterExplode(){this.getObjectInfoManager().needUpdateBoxAfterExplode()}addToOpacityListByConditions(e,t){this.getObjectInfoManager().matchConditions(e,t)}addToModifyOpacityList(e,t){this.getObjectInfoManager().addToModifyOpacityList(e,t)}removeModifyOpacityList(e){this.getObjectInfoManager().removeModifyOpacityList(e)}getModifyOpacityList(){return this.objectInfoManager.modifyOpacityList}clearModifyOpacityList(){this.objectInfoManager.clearModifyOpacityList(),this._filterImpl.clearMaterialsForModifyOpacity()}_hasModifyOpacityList(){return this.objectInfoManager.hasModifyOpacityList}getMaterialForModifyOpacityFrom(e,t){if(e){var i={};i.color=e.color.getHex(),i.opacity=t,i.side=e.side,e.map&&(i.map=e.map);var r=this._filterImpl.getMaterialNameBy(i),n=this._filterImpl.getMaterialForModifyOpacityBy(r,e);return n.opacity=t,n.transparent=t<1,n}}addToLocalClippingListByConditions(e,t){this.getObjectInfoManager().matchConditions(e,t)}addToLocalClippingList(e,t,i,r){if(t&&i){this.addMaterialForClip(t),this.addMaterialForClip(i);var n=this._filterImpl.getMaterialNameBy(t),a=this._filterImpl.getMaterialNameBy(i);this.objectInfoManager.addToLocalClippingList(e,n,a,r)}else this.objectInfoManager.addToLocalClippingList(e);this.enableStateChanged()}getLocalClippingList(){return this.objectInfoManager.localClippingList}clearLocalClippingList(){this.objectInfoManager.clearLocalClippingList(),this._filterImpl.clearInstanceMaterialsForClip(),this._filterImpl.clearMaterialsForClip(),this.enableStateChanged()}_hasLocalClipping(){return this.objectInfoManager.hasLocalClipping}addInstanceMaterialForClip(e,t){this._filterImpl.addInstanceMaterialForClip(e,t),this.enableStateChanged()}getAllInstanceMaterialsForClip(){return this._filterImpl.getAllInstanceMaterialsForClip()}addMaterialForClip(e){this._filterImpl.addMaterialForClip(e),this.enableStateChanged()}getMaterialForClipBy(e,t){return this._filterImpl.getMaterialForClipBy(e,t)}getMaterialForClipFrom(e){if(e){var t={};t.color=e.color.getHex(),t.opacity=e.opacity,t.side=e.side,e.map&&(t.map=e.map);var i=this._filterImpl.getMaterialNameBy(t);return this._filterImpl.getMaterialForClipBy(i,e)}}getAllMaterialsForClip(){return this._filterImpl.getAllMaterialsForClip()}setWireFrameVisibilityCondition(e){this._filterImpl.setWireFrameVisibilityCondition(e)}getWireFrameVisibilityCondition(){return this._filterImpl.getWireFrameVisibilityCondition()}_isRenderWithWireFrame(e){return this._filterImpl._isRenderWithWireFrame(e)}}}(),r.FilterManager2=function(){var e,t,i=r.EnumIdBasedType,n=r.EnumSceneState,a=r.FilterResultMode,s={IDFILTER_OFFSET:0,FILE_VISIBLE:0,FILE_HIDDEN:1,VISIBLE:2,HIDDEN:3,TRANSLUCENT:4,TRANSLUCENT_OTHERS:5,RENDER_PROMOTION:6,IDFILTER_ENDOFFSET:6,ISOLATEFILTER_OFFSET:7,ISOLATE_HIDDEN:7,ISOLATE_HIDDEN_OTHERS:8,ISOLATE_TRANSLUCENT:9,ISOLATE_TRANSLUCENT_OTHERS:10,ISOLATEFILTER_ENDOFFSET:10,USERFILTER_OFFSET:11,USER_HIDDEN:11,USER_OVERRIDE:12,USERFILTER_ENDOFFSET:12,CONDITIONFILTER_OFFSET:13,CONDITION_HIDDEN_OTHERS:13,CONDITION_TRANSLUCENT_OTHERS:14,CONDITION_OVERRIDE:15,CONDITION_BORDERLINE:16,CONDITIONFILTER_ENDOFFSET:16,ISOLATECONDITIONFILTER_OFFSET:17,ISOLATE_CONDITION_HIDDEN:17,ISOLATE_CONDITION_HIDDEN_OTHERS:18,ISOLATE_CONDITION_TRANSLUCENT:19,ISOLATE_CONDITION_TRANSLUCENT_OTHERS:20,ISOLATECONDITIONFILTER_ENDOFFSET:20,FROZENFILTER:21,FROZENCONDITIONFILTER:22,OVERRIDEFILTER:23,BASICFILTER_COUNT:23},o=new r.CompoundFilter(!0),l=new r.CompoundFilter(!0),d=new r.CompoundFilter(!1),h=new r.CompoundFilter(!0),c=new r.CompoundFilter(!1),u=new r.CompoundFilter(!1),p=new r.CompoundFilter(!1),m=[],f=n.DISABLED,g=new r.MaterialSelector,v=null;!function(){var i;m[s.FILE_VISIBLE]=new r.FileIdFilter(s.FILE_VISIBLE,"FILE_VISIBLE"),m[s.FILE_HIDDEN]=new r.FileIdFilter(s.FILE_HIDDEN,"FILE_HIDDEN"),m[s.VISIBLE]=new r.GeneralIdFilter(s.VISIBLE,"VISIBLE"),m[s.HIDDEN]=new r.GeneralIdFilter(s.HIDDEN,"HIDDEN"),m[s.TRANSLUCENT]=new r.GeneralIdFilter(s.TRANSLUCENT,"TRANSLUCENT"),m[s.TRANSLUCENT_OTHERS]=new r.GeneralIdFilter(s.TRANSLUCENT_OTHERS,"TRANSLUCENT_OTHERS"),m[s.RENDER_PROMOTION]=new r.GeneralIdFilter(s.RENDER_PROMOTION,"RENDER_PROMOTION"),m[s.ISOLATE_HIDDEN]=new r.GeneralIdFilter(s.ISOLATE_HIDDEN,"ISOLATE_HIDDEN"),m[s.ISOLATE_HIDDEN_OTHERS]=new r.GeneralIdFilter(s.ISOLATE_HIDDEN_OTHERS,"ISOLATE_HIDDEN_OTHERS"),m[s.ISOLATE_TRANSLUCENT]=new r.GeneralIdFilter(s.ISOLATE_TRANSLUCENT,"ISOLATE_TRANSLUCENT"),m[s.ISOLATE_TRANSLUCENT_OTHERS]=new r.GeneralIdFilter(s.ISOLATE_TRANSLUCENT_OTHERS,"ISOLATE_TRANSLUCENT_OTHERS"),m[s.USER_HIDDEN]=new r.UserListFilter(s.USER_HIDDEN,"USER_HIDDEN"),m[s.USER_OVERRIDE]=new r.UserListFilter(s.USER_OVERRIDE,"USER_OVERRIDE"),m[s.CONDITION_HIDDEN_OTHERS]=new r.ConditionFilter(s.CONDITION_HIDDEN_OTHERS,"CONDITION_HIDDEN_OTHERS"),m[s.CONDITION_TRANSLUCENT_OTHERS]=new r.ConditionFilter(s.CONDITION_TRANSLUCENT_OTHERS,"CONDITION_TRANSLUCENT_OTHERS"),m[s.CONDITION_OVERRIDE]=new r.MultiConditionFilter(s.CONDITION_OVERRIDE,"CONDITION_OVERRIDE"),m[s.CONDITION_BORDERLINE]=new r.ConditionFilter(s.CONDITION_BORDERLINE,"CONDITION_BORDERLINE"),m[s.ISOLATE_CONDITION_HIDDEN]=new r.ConditionFilter(s.ISOLATE_CONDITION_HIDDEN,"ISOLATE_CONDITION_HIDDEN"),m[s.ISOLATE_CONDITION_HIDDEN_OTHERS]=new r.ConditionFilter(s.ISOLATE_CONDITION_HIDDEN_OTHERS,"ISOLATE_CONDITION_HIDDEN_OTHERS"),m[s.ISOLATE_CONDITION_TRANSLUCENT]=new r.ConditionFilter(s.ISOLATE_CONDITION_TRANSLUCENT,"ISOLATE_CONDITION_TRANSLUCENT"),m[s.ISOLATE_CONDITION_TRANSLUCENT_OTHERS]=new r.ConditionFilter(s.ISOLATE_CONDITION_TRANSLUCENT_OTHERS,"ISOLATE_CONDITION_TRANSLUCENT_OTHERS"),t=new r.GeneralIdFilter(s.FROZENFILTER,"FROZENFILTER"),m[s.FROZENCONDITIONFILTER]=new r.ConditionFilter(s.FROZENCONDITIONFILTER,"FROZENCONDITIONFILTER"),m[s.FROZENFILTER]=t,e=new r.OverrideListFilter(s.OVERRIDEFILTER,"OVERRIDEFILTER"),m[s.OVERRIDEFILTER]=e;var n={};for(i in n[s.HIDDEN]=a.MATCH_RETURN_FALSE,n[s.VISIBLE]=a.NOMATCH_RETURN_FALSE,n[s.USER_HIDDEN]=a.MATCH_RETURN_FALSE,n[s.CONDITION_HIDDEN_OTHERS]=a.NOMATCH_RETURN_FALSE,n[s.ISOLATE_HIDDEN]=a.MATCH_RETURN_FALSE,n[s.ISOLATE_HIDDEN_OTHERS]=a.NOMATCH_RETURN_FALSE,n[s.ISOLATE_CONDITION_HIDDEN_OTHERS]=a.NOMATCH_RETURN_FALSE,o.setFilterMode(n),n)m[i].registerToCompoundFilter(o);var f={};for(i in f[s.FROZENFILTER]=a.MATCH_RETURN_FALSE,f[s.FROZENCONDITIONFILTER]=a.MATCH_RETURN_FALSE,f[s.TRANSLUCENT]=a.MATCH_RETURN_FALSE,f[s.TRANSLUCENT_OTHERS]=a.NOMATCH_RETURN_FALSE,f[s.CONDITION_TRANSLUCENT_OTHERS]=a.NOMATCH_RETURN_FALSE,f[s.ISOLATE_TRANSLUCENT]=a.MATCH_RETURN_FALSE,f[s.ISOLATE_TRANSLUCENT_OTHERS]=a.NOMATCH_RETURN_FALSE,f[s.ISOLATE_CONDITION_TRANSLUCENT_OTHERS]=a.NOMATCH_RETURN_FALSE,h.setFilterMode(f),f)m[i].registerToCompoundFilter(h);var g={};g[s.ISOLATE_TRANSLUCENT]=a.MATCH_RETURN_TRUE,g[s.ISOLATE_TRANSLUCENT_OTHERS]=a.NOMATCH_RETURN_TRUE,g[s.ISOLATE_CONDITION_TRANSLUCENT_OTHERS]=a.NOMATCH_RETURN_TRUE,g[s.CONDITION_TRANSLUCENT_OTHERS]=a.NOMATCH_RETURN_TRUE,g[s.TRANSLUCENT]=a.MATCH_RETURN_TRUE,g[s.TRANSLUCENT_OTHERS]=a.NOMATCH_RETURN_TRUE,g[s.OVERRIDEFILTER]=a.MATCH_RETURN_TRUE,g[s.USER_OVERRIDE]=a.MATCH_RETURN_TRUE,g[s.CONDITION_OVERRIDE]=a.MATCH_RETURN_TRUE,g[s.FROZENFILTER]=a.MATCH_RETURN_TRUE,g[s.FROZENCONDITIONFILTER]=a.MATCH_RETURN_TRUE;var v={};for(i in v[s.ISOLATE_TRANSLUCENT]=5,v[s.ISOLATE_TRANSLUCENT_OTHERS]=5,v[s.ISOLATE_CONDITION_TRANSLUCENT_OTHERS]=5,v[s.CONDITION_TRANSLUCENT_OTHERS]=5,v[s.TRANSLUCENT]=5,v[s.TRANSLUCENT_OTHERS]=5,v[s.OVERRIDEFILTER]=0,v[s.USER_OVERRIDE]=0,v[s.CONDITION_OVERRIDE]=0,v[s.FROZENFILTER]=3,v[s.FROZENCONDITIONFILTER]=3,l.setFilterMode(g),l.setFilterPriority(v),g)m[i].registerToCompoundFilter(l);var y={};for(i in y[s.OVERRIDEFILTER]=a.MATCH_RETURN_TRUE,y[s.USER_OVERRIDE]=a.MATCH_RETURN_TRUE,y[s.CONDITION_OVERRIDE]=a.MATCH_RETURN_TRUE,y[s.CONDITION_TRANSLUCENT_OTHERS]=a.MATCH_RETURN_TRUE,d.setFilterMode(y),y)m[i].registerToCompoundFilter(d);var M={};for(i in M[s.FILE_VISIBLE]=a.NOMATCH_RETURN_TRUE,M[s.FILE_HIDDEN]=a.MATCH_RETURN_TRUE,c.setFilterMode(M),M)m[i].registerToCompoundFilter(c);var E={};for(i in E[s.RENDER_PROMOTION]=a.MATCH_RETURN_TRUE,E[s.ISOLATE_CONDITION_TRANSLUCENT_OTHERS]=a.MATCH_RETURN_TRUE,u.setFilterMode(E),E)m[i].registerToCompoundFilter(u);var b={};for(i in b[s.CONDITION_BORDERLINE]=a.MATCH_RETURN_TRUE,p.setFilterMode(b),b)m[i].registerToCompoundFilter(p)}(),this.getMaterialSelector=function(){return g},this.getBasicFilterList=function(){return m},this.getFilterType=function(){return s},this.saveState=function(){for(var e,t={},i=0,r=m.length;i<r;i++)t[(e=m[i]).getName()]=e.getAll();return t.sceneState=this.getSceneState(),t.version="0.4",t},this.loadState=function(e){if(this.clearAll(),e.hasOwnProperty("version")){if("0.4"==e.version){for(var t={},i=0,n=m.length;i<n;i++)t[m[i].getName()]=i;for(var a in e)"sceneState"!==a&&"version"!==a&&(t.hasOwnProperty(a)?m[t[a]].setByData(e[a]):r.Logger.warn("Warning: Not supported filter '"+a+"'"))}}else for(var o in e)"sceneState"!==o&&(o<2?m[o].setByData(e[o]):o>2?o<s.BASICFILTER_COUNT+2&&m[o-1].setByData(e[o]):2==o&&r.Logger.warn("Warning: Old version filter data! The selection state is out of the filter, can not restore it."));this.setSceneState(e.sceneState)},this.clear=function(){for(var e=0,t=m.length;e<t;e++){var i=m[e].getType();i!==s.FROZENFILTER&&i!==s.CONDITION_BORDERLINE&&m[e].clearAll()}this.setSceneState(n.DISABLED)},this.clearAll=function(){for(var e=0,t=m.length;e<t;e++)m[e].clearAll();this.setSceneState(n.DISABLED)},this.clearIsolate=function(){this.clearAllIsolateList(),this.clearAllIsolateConditions()},this.clearFrozenList=function(){t.clearAll()},this.addToFrozenList=function(e){t.add(e)},this.removeFromFrozenList=function(e){t.remove(e)},this.setFrozenList=function(e){this.clearFrozenList(),this.addToFrozenList(e)},this.setFrozenConditions=function(e){m[s.FROZENCONDITIONFILTER].setByData(e)},this.getFrozenConditions=function(){return m[s.FROZENCONDITIONFILTER].getAll()},this.clearFrozenConditions=function(){m[s.FROZENCONDITIONFILTER].clear()},this.clearFrozen=function(){this.clearFrozenList(),this.clearFrozenConditions()},this.clearAllIdList=function(){var e;for(e=s.IDFILTER_OFFSET;e<=s.IDFILTER_ENDOFFSET;e++)m[e].clearAll()},this.clearIdList=function(e){var t=s.IDFILTER_OFFSET+e;t>=s.IDFILTER_OFFSET&&t<=s.IDFILTER_ENDOFFSET&&m[t].clear()},this.addToIdList=function(e,t){var i=s.IDFILTER_OFFSET+e;i>=s.IDFILTER_OFFSET&&i<=s.IDFILTER_ENDOFFSET&&m[i].add(t)},this.removeFromIdList=function(e,t){var i=s.IDFILTER_OFFSET+e;i>=s.IDFILTER_OFFSET&&i<=s.IDFILTER_ENDOFFSET&&m[i].remove(t)},this.setIdList=function(e,t){this.clearIdList(e),this.addToIdList(e,t)},this.clearAllOverrideList=function(){e.clearAll()},this.clearOverrideList=function(t){e.clear(t)},this.addToOverrideList=function(t,i,r){i&&i.length>0&&(g.has(r)||(r=g.getDefaultMaterialName()),e.add(t,i,r))},this.removeFromOverrideList=function(t,i){e.remove(t,i)},this.setOverrideList=function(e,t,i){this.clearOverrideList(e),this.addToOverrideList(e,t,i)},this.addToOverrideListByColor=function(t,i,r){var n=g.add(r);e.add(t,i,n)},this.setOverrideListByColor=function(e,t,i){this.clearOverrideList(e),this.addToOverrideListByColor(e,t,i)},this.clearAllUserList=function(){var e;for(e=s.USERFILTER_OFFSET;e<=s.USERFILTER_ENDOFFSET;e++)m[e].clearAll()},this.clearUserListByType=function(e){var t=s.USERFILTER_OFFSET+e;t>=s.USERFILTER_OFFSET&&t<=s.USERFILTER_ENDOFFSET&&m[t].clearAll()},this.clearUserList=function(e,t){var i=s.USERFILTER_OFFSET+e;i>=s.USERFILTER_OFFSET&&i<=s.USERFILTER_ENDOFFSET&&m[i].clear(t)},this.addToUserList=function(e,t,i,r){var n=s.USERFILTER_OFFSET+e;n>=s.USERFILTER_OFFSET&&n<=s.USERFILTER_ENDOFFSET&&m[n].add(t,i,r)},this.removeFromUserList=function(e,t,i){var r=s.USERFILTER_OFFSET+e;r>=s.USERFILTER_OFFSET&&r<=s.USERFILTER_ENDOFFSET&&m[r].remove(t,i)},this.setUserList=function(e,t,i,r){this.clearUserList(e,t),this.addToUserList(e,t,i,r)},this.isIsolate=function(){var e;for(e=s.ISOLATEFILTER_OFFSET;e<=s.ISOLATEFILTER_ENDOFFSET;e++)if(!m[e].isEmpty())return!0;return!1},this.isFiltering=function(){return!!this.isIsolate()||!(m[s.HIDDEN].isEmpty()&&m[s.VISIBLE].isEmpty()&&m[s.TRANSLUCENT].isEmpty()&&m[s.TRANSLUCENT_OTHERS].isEmpty()&&this.getSceneState()===n.DISABLED)},this.setFrozonMaterial=function(e){g.setFrozonMaterial(e)},this.getFrozonMaterial=function(){return g.getFrozonMaterial()},this.setSelectedMaterial=function(e){g.setSelectedMaterial(e)},this.getSelectedMaterial=function(){return g.getSelectedMaterial()},this.setIsolateMaterial=function(e){g.setIsolateMaterial(e)},this.getIsolateMaterial=function(){return g.getIsolateMaterial()},this.resetIsolateMaterial=function(){g.resetIsolateMaterial()},this.clearAllIsolateList=function(){var e;for(e=s.ISOLATEFILTER_OFFSET;e<=s.ISOLATEFILTER_ENDOFFSET;e++)m[e].clear()},this.clearIsolateList=function(e){var t=s.ISOLATEFILTER_OFFSET+e;t>=s.ISOLATEFILTER_OFFSET&&t<=s.ISOLATEFILTER_ENDOFFSET&&m[t].clear()},this.addToIsolateList=function(e,t){var i=s.ISOLATEFILTER_OFFSET+e;i>=s.ISOLATEFILTER_OFFSET&&i<=s.ISOLATEFILTER_ENDOFFSET&&m[i].add(t)},this.removeFromIsolateList=function(e,t){var i=s.ISOLATEFILTER_OFFSET+e;i>=s.ISOLATEFILTER_OFFSET&&i<=s.ISOLATEFILTER_ENDOFFSET&&m[i].remove(t)},this.setIsolateList=function(e,t){this.clearIsolateList(e),this.addToIsolateList(e,t)},this.setIsolateConditions=function(e,t){var i=s.ISOLATECONDITIONFILTER_OFFSET+t;i>=s.ISOLATECONDITIONFILTER_OFFSET&&i<=s.ISOLATECONDITIONFILTER_ENDOFFSET&&m[i].setByData(e)},this.getIsolateConditions=function(e){var t=null,i=s.ISOLATECONDITIONFILTER_OFFSET+e;return i>=s.ISOLATECONDITIONFILTER_OFFSET&&i<=s.ISOLATECONDITIONFILTER_ENDOFFSET&&(t=m[i].getAll()),t},this.clearIsolateConditions=function(e){var t=s.ISOLATECONDITIONFILTER_OFFSET+e;t>=s.ISOLATECONDITIONFILTER_OFFSET&&t<=s.ISOLATECONDITIONFILTER_ENDOFFSET&&m[t].clear()},this.clearAllIsolateConditions=function(){var e;for(e=s.ISOLATECONDITIONFILTER_OFFSET;e<=s.ISOLATECONDITIONFILTER_ENDOFFSET;e++)m[e].clearAll()},this.setConditions=function(e,t){var i=s.CONDITIONFILTER_OFFSET+e;i>=s.CONDITIONFILTER_OFFSET&&i<=s.CONDITIONFILTER_ENDOFFSET&&m[i].setByData(t)},this.getConditions=function(e){var t=null,i=s.CONDITIONFILTER_OFFSET+e;return i>=s.CONDITIONFILTER_OFFSET&&i<=s.CONDITIONFILTER_ENDOFFSET&&(t=m[i].get()),t},this.clearConditions=function(e){var t=s.CONDITIONFILTER_OFFSET+e;t>=s.CONDITIONFILTER_OFFSET&&t<=s.CONDITIONFILTER_ENDOFFSET&&m[t].clearAll()},this.clearAllConditions=function(){var e;for(e=s.CONDITIONFILTER_OFFSET;e<=s.CONDITIONFILTER_ENDOFFSET;e++)m[e].clear()},this.makeSceneTranslucent=function(){this.setSceneState(n.TRANSLUCENT)},this.cancelSceneTranslucent=function(){this.setSceneState(n.DISABLED)},this.hideScene=function(){this.setSceneState(n.HIDDEN)},this.showScene=function(){this.setSceneState(n.DISABLED)},this.setSceneState=function(e){f=e},this.getSceneState=function(){return f},this.cancelTranslucent=function(){this.clearIdList(i.TRANSLUCENT),this.clearIdList(i.TRANSLUCENT_OTHERS)},this._addIdsToFilter=function(e,t){var i=s.IDFILTER_OFFSET+e;i>=s.IDFILTER_OFFSET&&i<=s.IDFILTER_ENDOFFSET&&m[i].add(t)},this.hideByIds=function(e){this._addIdsToFilter(i.HIDDEN,e)},this.showByIds=function(e){this._addIdsToFilter(i.VISIBLE,e)},this.makeTranslucentByIds=function(e){this._addIdsToFilter(i.TRANSLUCENT,e)},this.makeTranslucentOthersByIds=function(e){this._addIdsToFilter(i.TRANSLUCENT_OTHERS,e)},this._isVisible=function(e){return this.getSceneState()!==n.HIDDEN&&o.apply(e)},this._isSelectable=function(e){return this.getSceneState()!==n.TRANSLUCENT&&h.apply(e,this.getSceneState())},this.getMaterialNameByColor=function(e){return g.getMaterialNameByColor(e)},this.addOverrideMaterial=function(e){g.addOverrideMaterial(e)},this.getMaterialByName=function(e){return g.get(e)},this._getOverrideMaterial=function(e){if(this.getSceneState()===n.TRANSLUCENT)return g.get("scene");var t=l.getApplyFilterId(e),i=null,r="";switch(t){case s.ISOLATE_TRANSLUCENT:case s.ISOLATE_TRANSLUCENT_OTHERS:case s.ISOLATE_CONDITION_TRANSLUCENT_OTHERS:i=this.getIsolateMaterial();break;case s.CONDITION_TRANSLUCENT_OTHERS:case s.TRANSLUCENT:case s.TRANSLUCENT_OTHERS:i=g.get("scene");break;case s.FROZENFILTER:case s.FROZENCONDITIONFILTER:break;case s.OVERRIDEFILTER:case s.USER_OVERRIDE:case s.CONDITION_OVERRIDE:var a=m[t].getMatchItem(e);r=a.hasOwnProperty("color")?g.getMaterialNameByColor(a.color):a.material?a.material:a}return i||""===r||(g.has(r)||(r=g.getDefaultMaterialName()),i=g.get(r)),i},this._getMaterialName=function(e){if(this.getSceneState()===n.TRANSLUCENT)return"scene";var t=l.getApplyFilterId(e),i="";switch(t){case s.ISOLATE_TRANSLUCENT:case s.ISOLATE_TRANSLUCENT_OTHERS:case s.ISOLATE_CONDITION_TRANSLUCENT_OTHERS:i=this.getIsolateMaterial().name;break;case s.CONDITION_TRANSLUCENT_OTHERS:case s.TRANSLUCENT:case s.TRANSLUCENT_OTHERS:i="scene";break;case s.FROZENFILTER:case s.FROZENCONDITIONFILTER:break;case s.OVERRIDEFILTER:case s.USER_OVERRIDE:case s.CONDITION_OVERRIDE:var r=m[t].getMatchItem(e);i=r.hasOwnProperty("color")?g.getMaterialNameByColor(r.color):r.material?r.material:r}return i},this._getMaterialByName=function(e){return"isolate"==e?g.getIsolateMaterial():"frozen"==e||"scene"==e?g.getFrozonMaterial():"selected"==e?g.getSelectedMaterial():g.get(e)},this._hasHighPriorityOverrideMaterial=function(e){return this.getSceneState()===n.TRANSLUCENT||d.apply(e)},this._hasOverrideMaterial=function(e){return this.getSceneState()===n.TRANSLUCENT||d.apply(e)||l.apply(e)},this._isHiddenFileId=function(e){return c.apply(e)},this._hasHiddenFileIdFilter=function(){return!c.isEmpty()},this._hasVisibleFilter=function(){return this.getSceneState()===n.HIDDEN||!o.isEmpty()},this._hasSelectableFilter=function(){return this.getSceneState()===n.TRANSLUCENT||!h.isEmpty()},this._hasOverrideMaterialFilter=function(){return this.getSceneState()===n.TRANSLUCENT||!l.isEmpty()},this._hasLowPriorityOverride=function(){return l.hasFilterNotIn(d)},this._isRenderPromotion=function(e){return u.apply(e)},this._hasRenderPromotionFilter=function(){return!u.isEmpty()},this._isRenderWithBoardline=function(e){return p.apply(e)},this._hasRenderWithBoardlineFilter=function(){return!p.isEmpty()},this.addInstanceMaterialForClip=function(e,t){g.addInstanceMaterialForClip(e,t)},this.clearInstanceMaterialsForClip=function(){g.clearInstanceMaterialsForClip()},this.getAllInstanceMaterialsForClip=function(){return g.getAllInstanceMaterialsForClip()},this.addMaterialForClip=function(e){g.addMaterialForClip(e)},this.getMaterialForClipBy=function(e,t){return g.getMaterialForClipBy(e,t)},this.getAllMaterialsForClip=function(){return g.getAllMaterialsForClip()},this.clearMaterialsForClip=function(){g.clearMaterialsForClip()},this.getMaterialForModifyOpacityBy=function(e,t){return g.getMaterialForModifyOpacityBy(e,t)},this.clearMaterialsForModifyOpacity=function(){g.clearMaterialsForModifyOpacity()},this.getMaterialNameBy=function(e){return g.getMaterialNameBy(e)},this.setWireFrameVisibilityCondition=function(e){e.condition&&e.condition.ids&&(e.userIdMap={},e.condition.ids.map((t=>{e.userIdMap[t]=!0})),delete e.condition.ids),e.condition&&e.condition.objectData&&(e.objectData=e.condition.objectData,delete e.condition.objectData),e.condition&&void 0!==e.condition.all&&(e.all=e.condition.all,delete e.condition.all),delete e.condition,v=e},this.getWireFrameVisibilityCondition=function(){return v},this._isRenderWithWireFrame=function(e){const t=v.isVisible;if(!0===v.all)return t;if(!1===v.all)return!t;if(!v.userIdMap&&!v.objectData)return t;if(v.userIdMap&&!0===v.userIdMap[e.userId])return t;const i=e.userData,r=v.objectData;return i&&r?((e,t,i)=>{let r;const n=e.length;for(let s=0;s<n;++s){r=!0;var a=e[s];for(const e in a){if(!(a[e]instanceof Array)&&t[e]!==a[e]){r=!1;break}if(a[e]instanceof Array&&-1==a[e].indexOf(t[e])){r=!1;break}}if(r)return i}return!i})(r,i,t):!t}},r.BasicFilter=function(e,t){this._type=e,this._name=t,this._enabled=!1,this._items={},this._relatedCompoundFilterList=[]},r.BasicFilter.prototype.getType=function(){return this._type},r.BasicFilter.prototype.getName=function(){return this._name},r.BasicFilter.prototype.get=function(){return this._items},r.BasicFilter.prototype.getAll=function(){return this._items},r.BasicFilter.prototype.clearAll=function(){var e=this;e._items={},e._enabled&&(e._enabled=!1,e.enableStateChanged())},r.BasicFilter.prototype.clear=function(){this.clearAll()},r.BasicFilter.prototype.isEmpty=function(){return!this._enabled},r.BasicFilter.prototype.forceEnable=function(){this._enabled||(this._enabled=!0,this.enableStateChanged())},r.BasicFilter.prototype.setByData=function(e){var t=this;!function(e){if(null==e)return!0;if("object"!=typeof e)return!0;for(var t in e)if(e.hasOwnProperty(t))return!1;return!0}(e)?(t._items=e,t._enabled||(t._enabled=!0,t.enableStateChanged())):(t._items={},t._enabled&&(t._enabled=!1,t.enableStateChanged()))},r.BasicFilter.prototype.match=function(e){return!1},r.BasicFilter.prototype.registerToCompoundFilter=function(e){this._relatedCompoundFilterList.push(e)},r.BasicFilter.prototype.enableStateChanged=function(){for(var e=this,t=0,i=e._relatedCompoundFilterList.length;t<i;t++)e._enabled?e._relatedCompoundFilterList[t].addBaseFilter(e):e._relatedCompoundFilterList[t].removeBaseFilter(e)},r.BasicIdFilter=function(e,t){r.BasicFilter.call(this,e,t)},r.BasicIdFilter.prototype=Object.create(r.BasicFilter.prototype),r.BasicIdFilter.prototype.constructor=r.BasicIdFilter,r.BasicIdFilter.prototype.add=function(e){var t=this,i=t._items;if(e&&e.length>0){for(var r=0,n=e.length;r<n;++r)i[e[r]]=!0;t._enabled||(t._enabled=!0,t.enableStateChanged())}},r.BasicIdFilter.prototype.remove=function(e){var t=this,i=t._items;if(e&&e.length>0){for(var r=0,n=e.length;r<n;++r){var a=e[r];i.hasOwnProperty(a)&&delete i[a]}0===i.length&&t._enabled&&(t._enabled=!1,t.enableStateChanged())}},r.ListFilter=function(e,t){r.BasicFilter.call(this,e,t)},r.ListFilter.prototype=Object.create(r.BasicFilter.prototype),r.ListFilter.prototype.constructor=r.ListFilter,r.ListFilter.prototype.remove=function(e,t){var i=this,n=i._items[e];if(n&&t&&t.length>0){for(var a=0,s=t.length;a<s;++a){var o=t[a];n.hasOwnProperty(o)&&delete n[o]}r.Utils.isEmptyObject(i._items)&&i._enabled&&(i._enabled=!1,i.enableStateChanged())}},r.ListFilter.prototype.add=function(e,t,i){var r=this,n=r._items,a=n[e];if(t&&t.length>0){void 0===i&&(i=!0),a||(a=n[e]={});for(var s=0,o=t.length;s<o;++s)a[t[s]]=i;r._enabled||(r._enabled=!0,r.enableStateChanged())}},r.ListFilter.prototype.clear=function(e){var t=this,i=t._items;i.hasOwnProperty(e)&&(delete i[e],r.Utils.isEmptyObject(i)&&t._enabled&&(t._enabled=!1,t.enableStateChanged()))},r.UserListFilter=function(e,t){r.BasicFilter.call(this,e,t)},r.UserListFilter.prototype=Object.create(r.ListFilter.prototype),r.UserListFilter.prototype.constructor=r.UserListFilter,r.UserListFilter.prototype.match=function(e){return null!==this.getMatchItem(e)},r.UserListFilter.prototype.getMatchItem=function(e){var t=this._items,i=e.userData;if(i)for(var r in t){var n=t[r],a=i[r];if(a&&void 0!==n[a])return n[a]}return null},r.OverrideListFilter=function(e,t){r.BasicFilter.call(this,e,t)},r.OverrideListFilter.prototype=Object.create(r.ListFilter.prototype),r.OverrideListFilter.prototype.constructor=r.OverrideListFilter,r.OverrideListFilter.prototype.match=function(e){return null!==this.getMatchItem(e)},r.OverrideListFilter.prototype.getMatchItem=function(e){var t=this._items,i=e.name;for(var r in t){var n=t[r];if(n[i])return n[i]}return null},r.ConditionFilter=function(e,t){r.BasicFilter.call(this,e,t)},r.ConditionFilter.prototype=Object.create(r.BasicFilter.prototype),r.ConditionFilter.prototype.constructor=r.ConditionFilter,r.ConditionFilter.prototype.match=function(e){var t=e.userData;return!!t&&function(e,t){for(var i,r=0,n=e.length;r<n;++r){i=!0;var a=e[r];for(var s in a){if(!(a[s]instanceof Array)&&t[s]!=a[s]){i=!1;break}if(a[s]instanceof Array&&-1==a[s].indexOf(t[s])){i=!1;break}}if(i)return!0}return!1}(this._items,t)},r.MultiConditionFilter=function(e,t){r.BasicFilter.call(this,e,t)},r.MultiConditionFilter.prototype=Object.create(r.BasicFilter.prototype),r.MultiConditionFilter.prototype.constructor=r.MultiConditionFilter,r.MultiConditionFilter.prototype.match=function(e){return null!==this.getMatchItem(e)},r.MultiConditionFilter.prototype.getMatchItem=function(e){var t,i=this._items,r=e.userData;if(r)for(var n=i.length,a=0;a<n;++a){var s=i[a],o=s.condition;for(var l in t=!0,o)if(o[l]!=r[l]){t=!1;break}if(t)return s}return null},r.FileIdFilter=function(e,t){r.BasicIdFilter.call(this,e,t)},r.FileIdFilter.prototype=Object.create(r.BasicIdFilter.prototype),r.FileIdFilter.prototype.constructor=r.FileIdFilter,r.FileIdFilter.prototype.match=function(e){var t=e.name;if(t){var i=t.indexOf(".");if(-1!==i){var r=t.substring(0,i);return!!this._items[r]}}var n=e.userData;if(n&&(r=n.sceneId))return!!this._items[r];return!1},r.GeneralIdFilter=function(e,t){r.BasicIdFilter.call(this,e,t)},r.GeneralIdFilter.prototype=Object.create(r.BasicIdFilter.prototype),r.GeneralIdFilter.prototype.constructor=r.GeneralIdFilter,r.GeneralIdFilter.prototype.match=function(e){return!!this._items[e.name]},r.FilterResultMode={MATCH_RETURN_TRUE:0,MATCH_RETURN_FALSE:1,NOMATCH_RETURN_TRUE:2,NOMATCH_RETURN_FALSE:3},r.CompoundFilter=function(e){this._activeFilterList=[],this._filterResultModes={},this._defaultRetValue=e,this._filterPriority=null},r.CompoundFilter.prototype.setFilterMode=function(e){this._filterResultModes=e},r.CompoundFilter.prototype.setFilterPriority=function(e){this._filterPriority=e},r.CompoundFilter.prototype.addBaseFilter=function(e){var t=this._activeFilterList,i=t.indexOf(e);if(null===this._filterPriority)-1===i?t.push(e):i!==t.length-1&&(t.splice(i,1),t.push(e));else if(0===t.length)t.push(e);else{-1!==i&&i!==t.length-1&&t.splice(i,1);for(var r=this._filterPriority[e.getType()],n=0,a=t.length;n<a;n++)if(this._filterPriority[t[n].getType()]>r){t.splice(n,0,e);break}n===a&&t.push(e)}},r.CompoundFilter.prototype.removeBaseFilter=function(e){var t=this._activeFilterList.indexOf(e);-1!==t&&this._activeFilterList.splice(t,1)},r.CompoundFilter.prototype.isEmpty=function(){return 0===this._activeFilterList.length},r.CompoundFilter.prototype.hasFilterNotIn=function(e){for(var t=this._activeFilterList,i=t.length-1;i>=0;i--){var r=t[i];if(void 0===e._filterResultModes[r.getType()])return!0}return!1},r.CompoundFilter.prototype.apply=function(e){for(var t,i=this,n=r.FilterResultMode,a=i._activeFilterList.length-1;a>=0;a--)switch(t=i._activeFilterList[a],i._filterResultModes[t.getType()]){case n.MATCH_RETURN_TRUE:if(t.match(e))return!0;break;case n.MATCH_RETURN_FALSE:if(t.match(e))return!1;break;case n.NOMATCH_RETURN_TRUE:if(!t.match(e))return!0;break;case n.NOMATCH_RETURN_FALSE:if(!t.match(e))return!1}return i._defaultRetValue},r.CompoundFilter.prototype.getApplyFilterId=function(e){for(var t,i=this,n=r.FilterResultMode,a=i._activeFilterList.length-1;a>=0;a--)switch(t=i._activeFilterList[a],i._filterResultModes[t.getType()]){case n.MATCH_RETURN_TRUE:case n.MATCH_RETURN_FALSE:if(t.match(e))return t.getType();break;case n.NOMATCH_RETURN_TRUE:case n.NOMATCH_RETURN_FALSE:if(!t.match(e))return t.getType()}return-1},r.FilterAction=function(){this.className="FilterAction"},r.FilterAction.prototype.getClassName=function(){return this.className},r.FilterAction.prototype.applyFilter=function(e){},r.IdsFilterAction=function(){r.FilterAction.call(this),this.className="IdsFilterAction",this.ids=[]},r.IdsFilterAction.prototype=Object.create(r.FilterAction.prototype),r.IdsFilterAction.prototype.arrayToMap=function(e){for(var t={},i=0;i<e.length;i++){var r=e[i];t[r]=r}return t},r.IdsFilterAction.prototype.constructor=r.IdsFilterAction,r.VisibleIdsFA=function(e,t){r.IdsFilterAction.call(this),this.className="VisibleIdsFA",this.flag=e,this.isVisible=t},r.IdsFilterAction.prototype.setIds=function(e){this.ids=e},r.VisibleIdsFA.prototype=Object.create(r.IdsFilterAction.prototype),r.VisibleIdsFA.prototype.constructor=r.VisibleIdsFA,r.VisibleIdsFA.prototype.applyFilter=function(e){this.ids instanceof Array?(e.setVisible(this.ids,this.isVisible,this.flag),e.calculateVisibleComponentsBbox()):console.warn("Ids should be type of array.")},r.OverrideIdsFA=function(e,t){r.IdsFilterAction.call(this),this.className="OverrideIdsFA",this.flag=e,this.material=t},r.OverrideIdsFA.prototype=Object.create(r.IdsFilterAction.prototype),r.OverrideIdsFA.prototype.constructor=r.OverrideIdsFA,r.OverrideIdsFA.prototype.applyFilter=function(e){this.ids instanceof Array?e.setMaterial(this.ids,this.material,this.flag):console.warn("Ids should be type of array.")},r.OverrideIdsForWireFrameFA=function(e,t){r.IdsFilterAction.call(this),this.className="OverrideIdsForWireFrameFA",this.flag=e,this.material=t},r.OverrideIdsForWireFrameFA.prototype=Object.create(r.IdsFilterAction.prototype),r.OverrideIdsForWireFrameFA.prototype.constructor=r.OverrideIdsForWireFrameFA,r.OverrideIdsForWireFrameFA.prototype.applyFilter=function(e){this.ids instanceof Array?e.setWireFrameMaterial(this.ids,this.material,this.flag):console.warn("Ids should be type of array.")},r.IsolateIdsFA=function(e){r.IdsFilterAction.call(this),this.className="IsolateIdsFA",this.isolateHide=e},r.IsolateIdsFA.prototype=Object.create(r.IdsFilterAction.prototype),r.IsolateIdsFA.prototype.constructor=r.IsolateIdsFA,r.IsolateIdsFA.prototype.applyFilter=function(e){this.ids instanceof Array?(e.clearIsolates(),this.isolateHide?(e.setIsolateHide(this.ids,!0,!1),e.calculateVisibleComponentsBbox()):e.setIsolateTransparent(this.ids,!0,!1)):console.warn("Ids should be type of array.")},r.TransparentIdsFA=function(e,t){r.IdsFilterAction.call(this),this.className="TransparentIdsFA",this.flag=e,this.isOpaque=t},r.TransparentIdsFA.prototype=Object.create(r.IdsFilterAction.prototype),r.TransparentIdsFA.prototype.constructor=r.TransparentIdsFA,r.TransparentIdsFA.prototype.applyFilter=function(e){this.ids instanceof Array?e.setTransparent(this.ids,!this.isOpaque,this.flag):console.warn("Ids should be type of array.")},r.ConditionFilterAction=function(){r.FilterAction.call(this),this.className="ConditionFilterAction",this.conditions=null},r.ConditionFilterAction.prototype=Object.create(r.FilterAction.prototype),r.ConditionFilterAction.prototype.constructor=r.ConditionFilterAction,r.VisibleConditionFA=function(e,t){r.ConditionFilterAction.call(this),this.className="VisibleConditionFA",this.flag=e,this.isVisible=t},r.VisibleConditionFA.prototype=Object.create(r.ConditionFilterAction.prototype),r.VisibleConditionFA.prototype.constructor=r.VisibleConditionFA,r.VisibleConditionFA.prototype.applyFilter=function(e){var t=this;this.conditions instanceof Array?(e.matchConditions(this.conditions,(function(i,r){t.flag==r&&(e.setVisible(i,t.isVisible),i=null)})),e.calculateVisibleComponentsBbox()):console.warn("Conditions should be type of array.")},r.OverrideConditionFA=function(e,t){r.ConditionFilterAction.call(this),this.className="OverrideConditionFA",this.flag=e,this.material=t},r.OverrideConditionFA.prototype=Object.create(r.ConditionFilterAction.prototype),r.OverrideConditionFA.prototype.constructor=r.OverrideConditionFA,r.OverrideConditionFA.prototype.applyFilter=function(e,t){var i=this;this.conditions instanceof Array?e.matchConditions(this.conditions,(function(t,r){i.flag==r&&(e.setMaterial(t,i.material),t=null)})):console.warn("Conditions should be type of array.")},r.OverrideConditionForWireFrameFA=function(e,t){r.ConditionFilterAction.call(this),this.className="OverrideConditionForWireFrameFA",this.flag=e,this.material=t},r.OverrideConditionForWireFrameFA.prototype=Object.create(r.ConditionFilterAction.prototype),r.OverrideConditionForWireFrameFA.prototype.constructor=r.OverrideConditionForWireFrameFA,r.OverrideConditionForWireFrameFA.prototype.applyFilter=function(e,t){var i=this;this.conditions instanceof Array?e.matchConditions(this.conditions,(function(t,r){i.flag==r&&(e.setWireFrameMaterial(t,i.material),t=null)})):console.warn("Conditions should be type of array.")},r.TransparentConditionFA=function(e,t){r.ConditionFilterAction.call(this),this.className="TransparentConditionFA",this.flag=e,this.isOpaque=t},r.TransparentConditionFA.prototype=Object.create(r.ConditionFilterAction.prototype),r.TransparentConditionFA.prototype.constructor=r.TransparentConditionFA,r.TransparentConditionFA.prototype.applyFilter=function(e){var t=this;this.conditions instanceof Array?e.matchConditions(this.conditions,(function(i,r){t.flag==r&&(e.setTransparent(i,!t.isOpaque),i=null)})):console.warn("Conditions should be type of array.")},r.IsolateConditionFA=function(e){r.ConditionFilterAction.call(this),this.className="IsolateConditionFA",this.isolateHide=e},r.IsolateConditionFA.prototype=Object.create(r.ConditionFilterAction.prototype),r.IsolateConditionFA.prototype.constructor=r.IsolateConditionFA,r.IsolateConditionFA.prototype.applyFilter=function(e){e.clearIsolates();var t=this.isolateHide;this.conditions instanceof Array?e.matchConditions(this.conditions,(function(i,r){1!=r?(t?(e.setIsolateHide(i,!r),e.calculateVisibleComponentsBbox()):e.setIsolateTransparent(i,!r),i=null):i=null})):console.warn("Conditions should be type of array.")},r.EnumObjectState={Visible:1,HideByIsolate:2,Transparent:4,TransparentByIsolate:8},r.ObjectInfo={userData:null,state:r.EnumObjectState.Visible,material:null},r.ObjectInfoDict=function(){var e={},t={};this.init=function(i){for(var r in e=i)t.hasOwnProperty(r)||void 0===e[r]||(t[r]=Object.keys(e[r]))},this.reinit=function(i){for(var r in e=i)t[r]=Object.keys(i[r])},this.clear=function(){e={},t={}},this.getObjectsMap=function(){return e},this.getObjectIds=function(e){return t.hasOwnProperty(e)?t[e]:[]}},r.ObjectInfoManager=function(){var e=new r.ObjectInfoDict,t=!1,i=!1,n=!1,a=!1,s=!1,o=!1,l=new THREE.Box3,d=!1;this.inactivatedIdMap={},this.inactivatedIds=[],this.bIsInactivateAll=!1,this.localClippingList={},this.hasLocalClipping=!1,this.modifyOpacityList={},this.hasModifyOpacityList=!1,this.init=function(t){e.init(t)},this.reinit=function(t){e.reinit(t)},this.clearData=function(){e.clear()},this.getObjectsMap=function(){return e.getObjectsMap()},this.calculateVisibleComponentsBbox=function(){l.makeEmpty();var t=e.getObjectsMap();for(var i in t)for(var r=t[i],n=e.getObjectIds(i),a=0,s=n.length;a<s;a++){var o=n[a];this.isHidden(o)||r[o].map((e=>{const t=e.boundingBox;t&&!t.isEmpty()?(l.expandByPoint(t.min),l.expandByPoint(t.max)):console.warn("Object has no boundingBox, id is "+o)}))}d=!1},this.getVisibleComponentsBbox=function(){return(d||l.isEmpty())&&this.calculateVisibleComponentsBbox(),l.clone()},this.needUpdateBoxAfterExplode=function(){d=!0},this.arrayToMap=function(e){for(var t={},i=0;i<e.length;i++){var r=e[i];t[r]=r}return t},this.isMatchConditions=function(e,t){for(var i=!0,r=0,n=t.length;r<n;r++){var a=t[r];for(var s in a){if(!(a[s]instanceof Array)&&e[s]!=a[s]){i=!1;break}if(a[s]instanceof Array&&-1==a[s].indexOf(e[s])){i=!1;break}}if(1==i)break;r<t.length-1&&(i=!0)}return i},this.matchConditions=function(t,i){var r=e.getObjectsMap();for(var n in r){for(var a=[],s=[],o=r[n],l=e.getObjectIds(n),d=0,h=l.length;d<h;d++){var c=l[d],u=o[c][0].userData||{};u.elementId=o[c][0].userId,this.isMatchConditions(u,t)?a.push(c):s.push(c)}i&&i(a,!0),i&&i(s,!1)}},this.getMatchIds=function(t){var i=e.getObjectsMap(),r=[];for(var n in i)for(var a=i[n],s=e.getObjectIds(n),o=0,l=s.length;o<l;o++){var d=s[o],h=a[d][0].userData||{};h.elementId=a[d][0].userId,1==this.isMatchConditions(h,t)&&r.push(d)}return r},this.setVisible=function(t,i,a){var s=function(e){i?e.state=e.state|r.EnumObjectState.Visible:(n=!0,e.state=e.state&~r.EnumObjectState.Visible)},o=e.getObjectsMap();for(var l in o){var d=o[l];if(null==a||!0===a)for(var h=0,c=t.length;h<c;h++){var u=t[h];if(d.hasOwnProperty(u)){var p=d[u][0];s(p)}}else{for(var m=this.arrayToMap(t),f=e.getObjectIds(l),g=0,v=f.length;g<v;g++){u=f[g];m.hasOwnProperty(u)||s(p=d[u][0])}m=null}}},this.isVisible=function(t){var i=e.getObjectsMap();for(var n in i){var a=i[n];if(a.hasOwnProperty(t))return a[t][0].state&r.EnumObjectState.Visible>0}},this.clearVisible=function(){var t=e.getObjectsMap();for(var i in n=!1,t)for(var a=t[i],s=e.getObjectIds(i),o=0,l=s.length;o<l;o++){var d=a[s[o]][0];d.state=d.state|r.EnumObjectState.Visible}},this.hideAll=function(){var t=e.getObjectsMap();for(var i in n=!0,t)for(var a=t[i],s=e.getObjectIds(i),o=0,l=s.length;o<l;o++){var d=a[s[o]][0];d.state=d.state&~r.EnumObjectState.Visible}},this.setTransparent=function(i,n,a){var o=function(e){n?(e.state=e.state|r.EnumObjectState.Transparent,t=!0,s=!0):e.state=e.state&~r.EnumObjectState.Transparent},l=e.getObjectsMap();for(var d in l){var h=l[d];if(null==a||!0===a)for(var c=0,u=i.length;c<u;c++){var p=i[c];if(this.isActive(p)&&h.hasOwnProperty(p)){var m=h[p][0];o(m)}}else{for(var f=this.arrayToMap(i),g=e.getObjectIds(d),v=0,y=g.length;v<y;v++){p=g[v];this.isActive(p)&&!f.hasOwnProperty(p)&&o(m=h[p][0])}f=null}}},this.isTransparent=function(t){var i=e.getObjectsMap();for(var n in i){var a=i[n];if(a.hasOwnProperty(t)){var s=a[t][0],o=(s.state&r.EnumObjectState.Transparent)>0;return o=o||(s.state&r.EnumObjectState.TransparentByIsolate)>0}}},this.clearTransparent=function(){var t=e.getObjectsMap();for(var i in s=!1,t)for(var n=t[i],a=e.getObjectIds(i),o=0,l=a.length;o<l;o++){var d=a[o];if(this.isActive(d)){var h=n[d][0];h.state=h.state&~r.EnumObjectState.Transparent}}},this.setMaterial=function(i,r,n){var a=e.getObjectsMap();for(var s in a){var o=a[s];if(null==n||!0===n)for(var l=0,d=i.length;l<d;l++){var h=i[l];if(this.isActive(h)&&o.hasOwnProperty(h)){var c=o[h][0];c.material=r,t=!0}}else{for(var u=this.arrayToMap(i),p=e.getObjectIds(s),m=0,f=p.length;m<f;m++){h=p[m];this.isActive(h)&&!u.hasOwnProperty(h)&&((c=o[h][0]).material=r,t=!0)}u=null}}},this.getMaterial=function(t){var i=e.getObjectsMap();for(var r in i){var n=i[r];if(n.hasOwnProperty(t))return n[t][0].material}},this.clearMaterial=function(){var t=e.getObjectsMap();for(var i in t){var r=t[i];for(var n in r)this.isActive(n)&&(r[n][0].material=null)}},this.setWireFrameMaterial=function(t,r,n){var a=e.getObjectsMap();for(var s in a){var o=a[s];if(null==n||!0===n)for(var l=0,d=t.length;l<d;l++){var h=t[l];if(o.hasOwnProperty(h)){var c=o[h][0];c.wireFrameMaterial=r,i=!0}}else{for(var u=this.arrayToMap(t),p=e.getObjectIds(s),m=0,f=p.length;m<f;m++){h=p[m];u.hasOwnProperty(h)||((c=o[h][0]).wireFrameMaterial=r,i=!0)}u=null}}},this.getWireFrameMaterial=function(t){var i=e.getObjectsMap();for(var r in i){var n=i[r];if(n.hasOwnProperty(t))return n[t][0].wireFrameMaterial}},this.clearWireFrameMaterial=function(){var t=e.getObjectsMap();for(var i in t){var r=t[i];for(var n in r)r[n][0].wireFrameMaterial=null}},this.setIsolateHide=function(t,i,n){var s=function(e){i?(a=!0,e.state=e.state|r.EnumObjectState.HideByIsolate):e.state=e.state&~r.EnumObjectState.HideByIsolate},o=e.getObjectsMap();for(var l in o){var d=o[l];if(null==n||!0===n)for(var h=0,c=t.length;h<c;h++){var u=t[h];if(d.hasOwnProperty(u)){var p=d[u][0];s(p)}}else{for(var m=this.arrayToMap(t),f=e.getObjectIds(l),g=0,v=f.length;g<v;g++){u=f[g];m.hasOwnProperty(u)||s(p=d[u][0])}m=null}}},this.isIsolateHide=function(t){var i=e.getObjectsMap();for(var n in i){return(i[n][t][0].state&r.EnumObjectState.HideByIsolate)>0}},this.setIsolateTransparent=function(i,n,a){var s=function(e){n?(e.state=e.state|r.EnumObjectState.TransparentByIsolate,t=!0,o=!0):e.state=e.state&~r.EnumObjectState.TransparentByIsolate},l=e.getObjectsMap();for(var d in l){var h=l[d];if(null==a||!0===a)for(var c=0,u=i.length;c<u;c++){var p=i[c];if(this.isActive(p)&&h.hasOwnProperty(p)){var m=h[p][0];s(m)}}else{for(var f=this.arrayToMap(i),g=e.getObjectIds(d),v=0,y=g.length;v<y;v++){p=g[v];this.isActive(p)&&!f.hasOwnProperty(p)&&s(m=h[p][0])}f=null}}},this.isIsolateTransparent=function(t){var i=e.getObjectsMap();for(var n in i){var a=i[n];if(a.hasOwnProperty(t))return(a[t][0].state&r.EnumObjectState.TransparentByIsolate)>0}},this.clearIsolateHide=function(){var t=e.getObjectsMap();for(var i in a=!1,t){var r=e.getObjectIds(i);r.length>0&&this.setIsolateHide(r,!1)}},this.clearIsolates=function(){var t=e.getObjectsMap();for(var i in o=!1,a=!1,t){var r=e.getObjectIds(i);r.length>0&&(this.setIsolateHide(r,!1),this.setIsolateTransparent(r,!1))}},this.clearTransparentByIsolate=function(){var t=e.getObjectsMap();for(var i in o=!1,t)for(var n=t[i],a=e.getObjectIds(i),s=0,l=a.length;s<l;s++){var d=a[s];if(this.isActive(d)){var h=n[d][0];h.state=h.state&~r.EnumObjectState.TransparentByIsolate}}},this.isHidden=function(t){var i=e.getObjectsMap();for(var n in i){var a=i[n];if(a&&a.hasOwnProperty(t)){var s=a[t][0],o=0==(s.state&r.EnumObjectState.Visible);return o=o||(s.state&r.EnumObjectState.HideByIsolate)>0}}},this.isFrozen=function(t){var i=e.getObjectsMap();for(var n in i){var a=i[n];if(a.hasOwnProperty(t)){var s=a[t][0],o=(s.state&r.EnumObjectState.Transparent)>0;return o=o||(s.state&r.EnumObjectState.TransparentByIsolate)>0}}},this.resetAll=function(){var i=e.getObjectsMap();for(var l in i)for(var d=i[l],h=e.getObjectIds(l),c=0,u=h.length;c<u;c++){var p=h[c];d[p][0].state|=r.EnumObjectState.Visible,this.isActive(p)&&(d[p][0].material=null)}t=!1,n=a=!1,s=o=!1},this.hasOverrideMaterial=function(i){var r=e.getObjectsMap();if(null==i)return t;for(var n in r){var a=r[n];if(a.hasOwnProperty(i))return null!=a[i][0].material||this.isTransparent(i)}},this.hasOverrideMaterialForWireFrame=function(t){var r=e.getObjectsMap();if(null==t)return i;for(var n in r){var a=r[n];if(a.hasOwnProperty(t))return null!=a[t][0].wireFrameMaterial}},this.hasObjectInactivated=function(){return this.inactivatedIds.length>0},this.hasObjectHidden=function(){return n||a},this.hasObjectCantSelected=function(){return this.hasObjectHidden()||this.hasObjectTransparent()||this.hasObjectInactivated()},this.hasObjectTransparent=function(){if(this.hasObjectInactivated()){var e=!1;for(const t of this.inactivatedIds)if(this.isTransparent(t)){e=!0;break}return e}return s||o},this.deactivateByIds=function(e){for(const t of e)this.inactivatedIdMap[t]=!0;this.inactivatedIds=Object.keys(this.inactivatedIdMap)},this.clearInactivatedIdMap=function(){this.inactivatedIdMap={},this.inactivatedIds=[]},this.isActive=function(e){return 0==this.bIsInactivateAll&&!(1==this.inactivatedIdMap[e])},this.deactivateAll=function(){this.bIsInactivateAll=!0},this.activateAll=function(){this.bIsInactivateAll=!1},this.getInactivatedIdMap=function(){return this.inactivatedIdMap},this.addToModifyOpacityList=function(e,t){var i=this.modifyOpacityList;void 0===i[e]&&(i[e]={}),i[e].opacity=t,this.hasModifyOpacityList=!0},this.removeModifyOpacityList=function(e){let t=this.modifyOpacityList;e.map((e=>{delete t[e]})),0===Object.keys(t)&&(this.hasModifyOpacityList=!1)},this.clearModifyOpacityList=function(){this.modifyOpacityList={},this.hasModifyOpacityList=!1},this.addToLocalClippingList=function(e,t,i,n){var a=this.localClippingList;void 0===a[e]&&(a[e]={}),r.Utils.isDefined(n)&&(null==a[e].nodeMap&&(a[e].nodeMap=new Map),a[e].nodeMap.set(n.toString(),t)),i&&(a[e].wireframeMaterialName=i),this.hasLocalClipping=!0},this.clearLocalClippingList=function(){this.localClippingList={},this.hasLocalClipping=!1},this.activeLocalClipping=function(){this.hasLocalClipping=!0}},r.FilterManagerIO=function(e){this.materialSelector=e;var t=function(e){var t=[];for(var i in e)1==e[i]&&t.push(i);return t};this.saveState=function(e){return{isolateAction:e.getIsolateFilterAction(),actions:e.getFilterActionList(),sceneState:e.getSceneState(),version:"1.0"}},this.createAction=function(e){var t=e.className,i=null;switch(t){case"IsolateIdsFA":(i=new r.IsolateIdsFA(e.isolateHide)).ids=e.ids;break;case"VisibleIdsFA":(i=new r.VisibleIdsFA(e.flag,e.isVisible)).ids=e.ids;break;case"OverrideIdsFA":case"OverrideIdsForWireFrameFA":if(s=e.material){var n={color:s.color};s.hasOwnProperty("opacity")&&(n.opacity=s.opacity);var a=this.materialSelector.getMaterialNameByColor(n);s=this.materialSelector.get(a)}(i="OverrideIdsFA"===t?new r.OverrideIdsFA(e.flag,s):new r.OverrideIdsForWireFrameFA(e.flag,s)).ids=e.ids;break;case"TransparentIdsFA":(i=new r.TransparentIdsFA(e.flag,e.isOpaque)).ids=e.ids;break;case"VisibleConditionFA":(i=new r.VisibleConditionFA(e.flag,e.isVisible)).conditions=e.conditions;break;case"OverrideConditionFA":case"OverrideConditionForWireFrameFA":var s;if(s=e.material){n={opacity:s.opacity,color:s.color},a=this.materialSelector.getMaterialNameByColor(n);s=this.materialSelector.get(a)}(i="OverrideConditionFA"===t?new r.OverrideConditionFA(e.flag,s):new r.OverrideConditionForWireFrameFA(e.flag,s)).conditions=e.conditions;break;case"TransparentConditionFA":(i=new r.TransparentConditionFA(e.flag,e.isOpaque)).conditions=e.conditions;break;case"IsolateConditionFA":(i=new r.IsolateConditionFA(e.isolateHide)).conditions=e.conditions;break;default:r.Logger.warn("Warning: Not supported filterAction '"+t+"'")}return i},this.createActionByOldFilter=function(e,i){var n=[];switch(e){case"CONDITION_OVERRIDE":for(var a=[],s=0;s<i.length;s++){var o=i[s];a.push(o.condition)}var l=o.color,d=this.materialSelector.add(l),h=this.materialSelector.get(d);(f=new r.OverrideConditionFA(!0,h)).conditions=a,n.push(f);break;case"CONDITION_TRANSLUCENT_OTHERS":(f=new r.TransparentConditionFA(!1,!1)).conditions=i,n.push(f);break;case"ISOLATE_CONDITION_HIDEEN_OTHERS":(f=new r.IsolateConditionFA(!0)).conditions=i,n.push(f);break;case"ISOLATE_CONDITION_TRANSLUCENT_OTHERS":(f=new r.IsolateConditionFA(!1)).conditions=i,n.push(f);break;case"ISOLATE_HIDDEN_OTHERS":(f=new r.IsolateIdsFA(!0)).ids=t(i),n.push(f);break;case"ISOLATE_TRANSLUCENT_OTHERS":(f=new r.IsolateIdsFA(!1)).ids=t(i),n.push(f);break;case"OVERRIDEFILTER":for(var c in i)if(i.hasOwnProperty(c)){var u=[],p=i[c];for(var m in p)u.push(m);l=this.materialSelector.getMaterialParamsFromName(p[m]),d=this.materialSelector.add(l),h=this.materialSelector.get(d);(f=new r.OverrideIdsFA(!0,h)).ids=u,n.push(f)}break;case"TRANSLUCENT":(f=new r.TransparentIdsFA(!0,!1)).ids=t(i),n.push(f);break;case"TRANSLUCTANT_OTHERS":(f=new r.TransparentIdsFA(!1,!1)).ids=t(i),n.push(f);break;case"VISIBLE":var f;(f=new r.VisibleIdsFA(!0,!0)).ids=t(i),n.push(f);break;default:r.Logger.warn("Warning: Not supported filter '"+e+"'")}return n},this.loadState=function(e,t){t.clearFilterActionList(),t.getObjectInfoManager().resetAll();var i=e;if(i.hasOwnProperty("version"))if("1.0"==i.version){var r=i.isolateAction;if(r){var n=this.createAction(r);t.pushBack(n)}for(var a=i.actions,s=0;s<a.length;s++){n=this.createAction(a[s]);t.pushBack(n)}}else if("0.4"==i.version){for(var o={},l=t._filterImpl.getBasicFilterList(),d=(s=0,l.length);s<d;s++)o[l[s].getName()]=s;for(var h in i)if("sceneState"!==h&&"version"!==h&&o.hasOwnProperty(h)){if("{}"==JSON.stringify(i[h])||"[]"==JSON.stringify(i[h]))continue;var c=this.createActionByOldFilter(h,i[h]);for(s=0;s<c.length;s++)t.pushBack(c[s])}}t.setSceneState(i.sceneState)}},r.Workers=r.Workers||{},r.Workers.WorkerChunk=r.Workers.WorkerChunk||{},r.Workers.WorkerLib=r.Workers.WorkerLib||{},r.Workers.WorkerChunk.NamespaceChunk="\n var CLOUD = {};\n CLOUD.Utils = {}; \n CLOUD.Math = {};\n CLOUD.GeomUtil = {};\n CLOUD.Reader = {};\n ",r.Workers.WorkerChunk.MathChunk="\n\n (function(){\n\n var _Math = {\n\n DEG2RAD: Math.PI / 180,\n RAD2DEG: 180 / Math.PI,\n\n generateUUID: function () {\n\n // http://www.broofa.com/Tools/Math.uuid.htm\n\n var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');\n var uuid = new Array(36);\n var rnd = 0,\n r;\n\n return function generateUUID() {\n\n for (var i = 0; i < 36; i++) {\n\n if (i === 8 || i === 13 || i === 18 || i === 23) {\n\n uuid[i] = '-';\n\n } else if (i === 14) {\n\n uuid[i] = '4';\n\n } else {\n\n if (rnd <= 0x02) rnd = 0x2000000 + (Math.random() * 0x1000000) | 0;\n r = rnd & 0xf;\n rnd = rnd >> 4;\n uuid[i] = chars[(i === 19) ? (r & 0x3) | 0x8 : r];\n\n }\n\n }\n\n return uuid.join('');\n\n };\n\n }(),\n\n clamp: function (value, min, max) {\n\n return Math.max(min, Math.min(max, value));\n\n },\n\n // compute euclidian modulo of m % n\n // https://en.wikipedia.org/wiki/Modulo_operation\n\n euclideanModulo: function (n, m) {\n\n return ((n % m) + m) % m;\n\n },\n\n // Linear mapping from range <a1, a2> to range <b1, b2>\n\n mapLinear: function (x, a1, a2, b1, b2) {\n\n return b1 + (x - a1) * (b2 - b1) / (a2 - a1);\n\n },\n\n // https://en.wikipedia.org/wiki/Linear_interpolation\n\n lerp: function (x, y, t) {\n\n return (1 - t) * x + t * y;\n\n },\n\n // http://en.wikipedia.org/wiki/Smoothstep\n\n smoothstep: function (x, min, max) {\n\n if (x <= min) return 0;\n if (x >= max) return 1;\n\n x = (x - min) / (max - min);\n\n return x * x * (3 - 2 * x);\n\n },\n\n smootherstep: function (x, min, max) {\n\n if (x <= min) return 0;\n if (x >= max) return 1;\n\n x = (x - min) / (max - min);\n\n return x * x * x * (x * (x * 6 - 15) + 10);\n\n },\n\n // Random integer from <low, high> interval\n\n randInt: function (low, high) {\n\n return low + Math.floor(Math.random() * (high - low + 1));\n\n },\n\n // Random float from <low, high> interval\n\n randFloat: function (low, high) {\n\n return low + Math.random() * (high - low);\n\n },\n\n // Random float from <-range/2, range/2> interval\n\n randFloatSpread: function (range) {\n\n return range * (0.5 - Math.random());\n\n },\n\n degToRad: function (degrees) {\n\n return degrees * _Math.DEG2RAD;\n\n },\n\n radToDeg: function (radians) {\n\n return radians * _Math.RAD2DEG;\n\n },\n\n isPowerOfTwo: function (value) {\n\n return (value & (value - 1)) === 0 && value !== 0;\n\n },\n\n nearestPowerOfTwo: function (value) {\n\n return Math.pow(2, Math.round(Math.log(value) / Math.LN2));\n\n },\n\n nextPowerOfTwo: function (value) {\n\n value--;\n value |= value >> 1;\n value |= value >> 2;\n value |= value >> 4;\n value |= value >> 8;\n value |= value >> 16;\n value++;\n\n return value;\n\n }\n\n };\n\n function Vector3(x, y, z) {\n\n this.x = x || 0;\n this.y = y || 0;\n this.z = z || 0;\n\n }\n\n Object.assign(Vector3.prototype, {\n\n isVector3: true,\n\n set: function (x, y, z) {\n\n this.x = x;\n this.y = y;\n this.z = z;\n\n return this;\n\n },\n\n setScalar: function (scalar) {\n\n this.x = scalar;\n this.y = scalar;\n this.z = scalar;\n\n return this;\n\n },\n\n setX: function (x) {\n\n this.x = x;\n\n return this;\n\n },\n\n setY: function (y) {\n\n this.y = y;\n\n return this;\n\n },\n\n setZ: function (z) {\n\n this.z = z;\n\n return this;\n\n },\n\n setComponent: function (index, value) {\n\n switch (index) {\n\n case 0:\n this.x = value;\n break;\n case 1:\n this.y = value;\n break;\n case 2:\n this.z = value;\n break;\n default:\n throw new Error('index is out of range: ' + index);\n\n }\n\n return this;\n\n },\n\n getComponent: function (index) {\n\n switch (index) {\n\n case 0:\n return this.x;\n case 1:\n return this.y;\n case 2:\n return this.z;\n default:\n throw new Error('index is out of range: ' + index);\n\n }\n\n },\n\n clone: function () {\n\n return new this.constructor(this.x, this.y, this.z);\n\n },\n\n copy: function (v) {\n\n this.x = v.x;\n this.y = v.y;\n this.z = v.z;\n\n return this;\n\n },\n\n add: function (v, w) {\n\n if (w !== undefined) {\n\n console.warn('THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.');\n return this.addVectors(v, w);\n\n }\n\n this.x += v.x;\n this.y += v.y;\n this.z += v.z;\n\n return this;\n\n },\n\n addScalar: function (s) {\n\n this.x += s;\n this.y += s;\n this.z += s;\n\n return this;\n\n },\n\n addVectors: function (a, b) {\n\n this.x = a.x + b.x;\n this.y = a.y + b.y;\n this.z = a.z + b.z;\n\n return this;\n\n },\n\n addScaledVector: function (v, s) {\n\n this.x += v.x * s;\n this.y += v.y * s;\n this.z += v.z * s;\n\n return this;\n\n },\n\n sub: function (v, w) {\n\n if (w !== undefined) {\n\n console.warn('THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.');\n return this.subVectors(v, w);\n\n }\n\n this.x -= v.x;\n this.y -= v.y;\n this.z -= v.z;\n\n return this;\n\n },\n\n subScalar: function (s) {\n\n this.x -= s;\n this.y -= s;\n this.z -= s;\n\n return this;\n\n },\n\n subVectors: function (a, b) {\n\n this.x = a.x - b.x;\n this.y = a.y - b.y;\n this.z = a.z - b.z;\n\n return this;\n\n },\n\n multiply: function (v, w) {\n\n if (w !== undefined) {\n\n console.warn('THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.');\n return this.multiplyVectors(v, w);\n\n }\n\n this.x *= v.x;\n this.y *= v.y;\n this.z *= v.z;\n\n return this;\n\n },\n\n multiplyScalar: function (scalar) {\n\n this.x *= scalar;\n this.y *= scalar;\n this.z *= scalar;\n\n return this;\n\n },\n\n multiplyVectors: function (a, b) {\n\n this.x = a.x * b.x;\n this.y = a.y * b.y;\n this.z = a.z * b.z;\n\n return this;\n\n },\n\n applyEuler: function () {\n\n var quaternion = new Quaternion();\n\n return function applyEuler(euler) {\n\n if ((euler && euler.isEuler) === false) {\n\n console.error('THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.');\n\n }\n\n return this.applyQuaternion(quaternion.setFromEuler(euler));\n\n };\n\n }(),\n\n applyAxisAngle: function () {\n\n var quaternion = new Quaternion();\n\n return function applyAxisAngle(axis, angle) {\n\n return this.applyQuaternion(quaternion.setFromAxisAngle(axis, angle));\n\n };\n\n }(),\n\n applyMatrix3: function (m) {\n\n var x = this.x,\n y = this.y,\n z = this.z;\n var e = m.elements;\n\n this.x = e[0] * x + e[3] * y + e[6] * z;\n this.y = e[1] * x + e[4] * y + e[7] * z;\n this.z = e[2] * x + e[5] * y + e[8] * z;\n\n return this;\n\n },\n\n applyMatrix4: function (m) {\n\n var x = this.x,\n y = this.y,\n z = this.z;\n var e = m.elements;\n\n this.x = e[0] * x + e[4] * y + e[8] * z + e[12];\n this.y = e[1] * x + e[5] * y + e[9] * z + e[13];\n this.z = e[2] * x + e[6] * y + e[10] * z + e[14];\n var w = e[3] * x + e[7] * y + e[11] * z + e[15];\n\n return this.divideScalar(w);\n\n },\n\n applyQuaternion: function (q) {\n\n var x = this.x,\n y = this.y,\n z = this.z;\n var qx = q.x,\n qy = q.y,\n qz = q.z,\n qw = q.w;\n\n // calculate quat * vector\n\n var ix = qw * x + qy * z - qz * y;\n var iy = qw * y + qz * x - qx * z;\n var iz = qw * z + qx * y - qy * x;\n var iw = -qx * x - qy * y - qz * z;\n\n // calculate result * inverse quat\n\n this.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n this.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n this.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n\n return this;\n\n },\n\n project: function () {\n\n var matrix = new Matrix4();\n\n return function project(camera) {\n\n matrix.multiplyMatrices(camera.projectionMatrix, matrix.getInverse(camera.matrixWorld));\n return this.applyMatrix4(matrix);\n\n };\n\n }(),\n\n unproject: function () {\n\n var matrix = new Matrix4();\n\n return function unproject(camera) {\n\n matrix.multiplyMatrices(camera.matrixWorld, matrix.getInverse(camera.projectionMatrix));\n return this.applyMatrix4(matrix);\n\n };\n\n }(),\n\n transformDirection: function (m) {\n\n // input: THREE.Matrix4 affine matrix\n // vector interpreted as a direction\n\n var x = this.x,\n y = this.y,\n z = this.z;\n var e = m.elements;\n\n this.x = e[0] * x + e[4] * y + e[8] * z;\n this.y = e[1] * x + e[5] * y + e[9] * z;\n this.z = e[2] * x + e[6] * y + e[10] * z;\n\n return this.normalize();\n\n },\n\n divide: function (v) {\n\n this.x /= v.x;\n this.y /= v.y;\n this.z /= v.z;\n\n return this;\n\n },\n\n divideScalar: function (scalar) {\n\n return this.multiplyScalar(1 / scalar);\n\n },\n\n min: function (v) {\n\n this.x = Math.min(this.x, v.x);\n this.y = Math.min(this.y, v.y);\n this.z = Math.min(this.z, v.z);\n\n return this;\n\n },\n\n max: function (v) {\n\n this.x = Math.max(this.x, v.x);\n this.y = Math.max(this.y, v.y);\n this.z = Math.max(this.z, v.z);\n\n return this;\n\n },\n\n clamp: function (min, max) {\n\n // This function assumes min < max, if this assumption isn't true it will not operate correctly\n\n this.x = Math.max(min.x, Math.min(max.x, this.x));\n this.y = Math.max(min.y, Math.min(max.y, this.y));\n this.z = Math.max(min.z, Math.min(max.z, this.z));\n\n return this;\n\n },\n\n clampScalar: function () {\n\n var min = new Vector3();\n var max = new Vector3();\n\n return function clampScalar(minVal, maxVal) {\n\n min.set(minVal, minVal, minVal);\n max.set(maxVal, maxVal, maxVal);\n\n return this.clamp(min, max);\n\n };\n\n }(),\n\n clampLength: function (min, max) {\n\n var length = this.length();\n\n return this.multiplyScalar(Math.max(min, Math.min(max, length)) / length);\n\n },\n\n floor: function () {\n\n this.x = Math.floor(this.x);\n this.y = Math.floor(this.y);\n this.z = Math.floor(this.z);\n\n return this;\n\n },\n\n ceil: function () {\n\n this.x = Math.ceil(this.x);\n this.y = Math.ceil(this.y);\n this.z = Math.ceil(this.z);\n\n return this;\n\n },\n\n round: function () {\n\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n this.z = Math.round(this.z);\n\n return this;\n\n },\n\n roundToZero: function () {\n\n this.x = (this.x < 0) ? Math.ceil(this.x) : Math.floor(this.x);\n this.y = (this.y < 0) ? Math.ceil(this.y) : Math.floor(this.y);\n this.z = (this.z < 0) ? Math.ceil(this.z) : Math.floor(this.z);\n\n return this;\n\n },\n\n negate: function () {\n\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n\n return this;\n\n },\n\n dot: function (v) {\n\n return this.x * v.x + this.y * v.y + this.z * v.z;\n\n },\n\n // TODO lengthSquared?\n\n lengthSq: function () {\n\n return this.x * this.x + this.y * this.y + this.z * this.z;\n\n },\n\n length: function () {\n\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n\n },\n\n lengthManhattan: function () {\n\n return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z);\n\n },\n\n normalize: function () {\n\n return this.divideScalar(this.length());\n\n },\n\n setLength: function (length) {\n\n return this.multiplyScalar(length / this.length());\n\n },\n\n lerp: function (v, alpha) {\n\n this.x += (v.x - this.x) * alpha;\n this.y += (v.y - this.y) * alpha;\n this.z += (v.z - this.z) * alpha;\n\n return this;\n\n },\n\n lerpVectors: function (v1, v2, alpha) {\n\n return this.subVectors(v2, v1).multiplyScalar(alpha).add(v1);\n\n },\n\n cross: function (v, w) {\n\n if (w !== undefined) {\n\n console.warn('THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.');\n return this.crossVectors(v, w);\n\n }\n\n var x = this.x,\n y = this.y,\n z = this.z;\n\n this.x = y * v.z - z * v.y;\n this.y = z * v.x - x * v.z;\n this.z = x * v.y - y * v.x;\n\n return this;\n\n },\n\n crossVectors: function (a, b) {\n\n var ax = a.x,\n ay = a.y,\n az = a.z;\n var bx = b.x,\n by = b.y,\n bz = b.z;\n\n this.x = ay * bz - az * by;\n this.y = az * bx - ax * bz;\n this.z = ax * by - ay * bx;\n\n return this;\n\n },\n\n projectOnVector: function (vector) {\n\n var scalar = vector.dot(this) / vector.lengthSq();\n\n return this.copy(vector).multiplyScalar(scalar);\n\n },\n\n projectOnPlane: function () {\n\n var v1 = new Vector3();\n\n return function projectOnPlane(planeNormal) {\n\n v1.copy(this).projectOnVector(planeNormal);\n\n return this.sub(v1);\n\n };\n\n }(),\n\n reflect: function () {\n\n // reflect incident vector off plane orthogonal to normal\n // normal is assumed to have unit length\n\n var v1 = new Vector3();\n\n return function reflect(normal) {\n\n return this.sub(v1.copy(normal).multiplyScalar(2 * this.dot(normal)));\n\n };\n\n }(),\n\n angleTo: function (v) {\n\n var theta = this.dot(v) / (Math.sqrt(this.lengthSq() * v.lengthSq()));\n\n // clamp, to handle numerical problems\n\n return Math.acos(_Math.clamp(theta, -1, 1));\n\n },\n\n distanceTo: function (v) {\n\n return Math.sqrt(this.distanceToSquared(v));\n\n },\n\n distanceToSquared: function (v) {\n\n var dx = this.x - v.x,\n dy = this.y - v.y,\n dz = this.z - v.z;\n\n return dx * dx + dy * dy + dz * dz;\n\n },\n\n distanceToManhattan: function (v) {\n\n return Math.abs(this.x - v.x) + Math.abs(this.y - v.y) + Math.abs(this.z - v.z);\n\n },\n\n setFromSpherical: function (s) {\n\n var sinPhiRadius = Math.sin(s.phi) * s.radius;\n\n this.x = sinPhiRadius * Math.sin(s.theta);\n this.y = Math.cos(s.phi) * s.radius;\n this.z = sinPhiRadius * Math.cos(s.theta);\n\n return this;\n\n },\n\n setFromCylindrical: function (c) {\n\n this.x = c.radius * Math.sin(c.theta);\n this.y = c.y;\n this.z = c.radius * Math.cos(c.theta);\n\n return this;\n\n },\n\n setFromMatrixPosition: function (m) {\n\n return this.setFromMatrixColumn(m, 3);\n\n },\n\n setFromMatrixScale: function (m) {\n\n var sx = this.setFromMatrixColumn(m, 0).length();\n var sy = this.setFromMatrixColumn(m, 1).length();\n var sz = this.setFromMatrixColumn(m, 2).length();\n\n this.x = sx;\n this.y = sy;\n this.z = sz;\n\n return this;\n\n },\n\n setFromMatrixColumn: function (m, index) {\n\n\n return this.fromArray(m.elements, index * 4);\n\n },\n\n equals: function (v) {\n\n return ((v.x === this.x) && (v.y === this.y) && (v.z === this.z));\n\n },\n\n fromArray: function (array, offset) {\n\n if (offset === undefined) offset = 0;\n\n this.x = array[offset];\n this.y = array[offset + 1];\n this.z = array[offset + 2];\n\n return this;\n\n },\n\n toArray: function (array, offset) {\n\n if (array === undefined) array = [];\n if (offset === undefined) offset = 0;\n\n array[offset] = this.x;\n array[offset + 1] = this.y;\n array[offset + 2] = this.z;\n\n return array;\n\n },\n\n fromBufferAttribute: function (attribute, index, offset) {\n\n if (offset !== undefined) {\n\n console.warn('THREE.Vector3: offset has been removed from .fromBufferAttribute().');\n\n }\n\n this.x = attribute.getX(index);\n this.y = attribute.getY(index);\n this.z = attribute.getZ(index);\n\n return this;\n\n }\n\n });\n\n function Vector4(x, y, z, w) {\n\n this.x = x || 0;\n this.y = y || 0;\n this.z = z || 0;\n this.w = (w !== undefined) ? w : 1;\n\n }\n\n Object.assign(Vector4.prototype, {\n\n isVector4: true,\n\n set: function (x, y, z, w) {\n\n this.x = x;\n this.y = y;\n this.z = z;\n this.w = w;\n\n return this;\n\n },\n\n setScalar: function (scalar) {\n\n this.x = scalar;\n this.y = scalar;\n this.z = scalar;\n this.w = scalar;\n\n return this;\n\n },\n\n setX: function (x) {\n\n this.x = x;\n\n return this;\n\n },\n\n setY: function (y) {\n\n this.y = y;\n\n return this;\n\n },\n\n setZ: function (z) {\n\n this.z = z;\n\n return this;\n\n },\n\n setW: function (w) {\n\n this.w = w;\n\n return this;\n\n },\n\n setComponent: function (index, value) {\n\n switch (index) {\n\n case 0:\n this.x = value;\n break;\n case 1:\n this.y = value;\n break;\n case 2:\n this.z = value;\n break;\n case 3:\n this.w = value;\n break;\n default:\n throw new Error('index is out of range: ' + index);\n\n }\n\n return this;\n\n },\n\n getComponent: function (index) {\n\n switch (index) {\n\n case 0:\n return this.x;\n case 1:\n return this.y;\n case 2:\n return this.z;\n case 3:\n return this.w;\n default:\n throw new Error('index is out of range: ' + index);\n\n }\n\n },\n\n clone: function () {\n\n return new this.constructor(this.x, this.y, this.z, this.w);\n\n },\n\n copy: function (v) {\n\n this.x = v.x;\n this.y = v.y;\n this.z = v.z;\n this.w = (v.w !== undefined) ? v.w : 1;\n\n return this;\n\n },\n\n add: function (v, w) {\n\n if (w !== undefined) {\n\n console.warn('THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.');\n return this.addVectors(v, w);\n\n }\n\n this.x += v.x;\n this.y += v.y;\n this.z += v.z;\n this.w += v.w;\n\n return this;\n\n },\n\n addScalar: function (s) {\n\n this.x += s;\n this.y += s;\n this.z += s;\n this.w += s;\n\n return this;\n\n },\n\n addVectors: function (a, b) {\n\n this.x = a.x + b.x;\n this.y = a.y + b.y;\n this.z = a.z + b.z;\n this.w = a.w + b.w;\n\n return this;\n\n },\n\n addScaledVector: function (v, s) {\n\n this.x += v.x * s;\n this.y += v.y * s;\n this.z += v.z * s;\n this.w += v.w * s;\n\n return this;\n\n },\n\n sub: function (v, w) {\n\n if (w !== undefined) {\n\n console.warn('THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.');\n return this.subVectors(v, w);\n\n }\n\n this.x -= v.x;\n this.y -= v.y;\n this.z -= v.z;\n this.w -= v.w;\n\n return this;\n\n },\n\n subScalar: function (s) {\n\n this.x -= s;\n this.y -= s;\n this.z -= s;\n this.w -= s;\n\n return this;\n\n },\n\n subVectors: function (a, b) {\n\n this.x = a.x - b.x;\n this.y = a.y - b.y;\n this.z = a.z - b.z;\n this.w = a.w - b.w;\n\n return this;\n\n },\n\n multiplyScalar: function (scalar) {\n\n this.x *= scalar;\n this.y *= scalar;\n this.z *= scalar;\n this.w *= scalar;\n\n return this;\n\n },\n\n applyMatrix4: function (m) {\n\n var x = this.x,\n y = this.y,\n z = this.z,\n w = this.w;\n var e = m.elements;\n\n this.x = e[0] * x + e[4] * y + e[8] * z + e[12] * w;\n this.y = e[1] * x + e[5] * y + e[9] * z + e[13] * w;\n this.z = e[2] * x + e[6] * y + e[10] * z + e[14] * w;\n this.w = e[3] * x + e[7] * y + e[11] * z + e[15] * w;\n\n return this;\n\n },\n\n divideScalar: function (scalar) {\n\n return this.multiplyScalar(1 / scalar);\n\n },\n\n setAxisAngleFromQuaternion: function (q) {\n\n // http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n // q is assumed to be normalized\n\n this.w = 2 * Math.acos(q.w);\n\n var s = Math.sqrt(1 - q.w * q.w);\n\n if (s < 0.0001) {\n\n this.x = 1;\n this.y = 0;\n this.z = 0;\n\n } else {\n\n this.x = q.x / s;\n this.y = q.y / s;\n this.z = q.z / s;\n\n }\n\n return this;\n\n },\n\n setAxisAngleFromRotationMatrix: function (m) {\n\n // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n var angle, x, y, z, // variables for result\n epsilon = 0.01, // margin to allow for rounding errors\n epsilon2 = 0.1, // margin to distinguish between 0 and 180 degrees\n\n te = m.elements,\n\n m11 = te[0],\n m12 = te[4],\n m13 = te[8],\n m21 = te[1],\n m22 = te[5],\n m23 = te[9],\n m31 = te[2],\n m32 = te[6],\n m33 = te[10];\n\n if ((Math.abs(m12 - m21) < epsilon) &&\n (Math.abs(m13 - m31) < epsilon) &&\n (Math.abs(m23 - m32) < epsilon)) {\n\n // singularity found\n // first check for identity matrix which must have +1 for all terms\n // in leading diagonal and zero in other terms\n\n if ((Math.abs(m12 + m21) < epsilon2) &&\n (Math.abs(m13 + m31) < epsilon2) &&\n (Math.abs(m23 + m32) < epsilon2) &&\n (Math.abs(m11 + m22 + m33 - 3) < epsilon2)) {\n\n // this singularity is identity matrix so angle = 0\n\n this.set(1, 0, 0, 0);\n\n return this; // zero angle, arbitrary axis\n\n }\n\n // otherwise this singularity is angle = 180\n\n angle = Math.PI;\n\n var xx = (m11 + 1) / 2;\n var yy = (m22 + 1) / 2;\n var zz = (m33 + 1) / 2;\n var xy = (m12 + m21) / 4;\n var xz = (m13 + m31) / 4;\n var yz = (m23 + m32) / 4;\n\n if ((xx > yy) && (xx > zz)) {\n\n // m11 is the largest diagonal term\n\n if (xx < epsilon) {\n\n x = 0;\n y = 0.707106781;\n z = 0.707106781;\n\n } else {\n\n x = Math.sqrt(xx);\n y = xy / x;\n z = xz / x;\n\n }\n\n } else if (yy > zz) {\n\n // m22 is the largest diagonal term\n\n if (yy < epsilon) {\n\n x = 0.707106781;\n y = 0;\n z = 0.707106781;\n\n } else {\n\n y = Math.sqrt(yy);\n x = xy / y;\n z = yz / y;\n\n }\n\n } else {\n\n // m33 is the largest diagonal term so base result on this\n\n if (zz < epsilon) {\n\n x = 0.707106781;\n y = 0.707106781;\n z = 0;\n\n } else {\n\n z = Math.sqrt(zz);\n x = xz / z;\n y = yz / z;\n\n }\n\n }\n\n this.set(x, y, z, angle);\n\n return this; // return 180 deg rotation\n\n }\n\n // as we have reached here there are no singularities so we can handle normally\n\n var s = Math.sqrt((m32 - m23) * (m32 - m23) +\n (m13 - m31) * (m13 - m31) +\n (m21 - m12) * (m21 - m12)); // used to normalize\n\n if (Math.abs(s) < 0.001) s = 1;\n\n // prevent divide by zero, should not happen if matrix is orthogonal and should be\n // caught by singularity test above, but I've left it in just in case\n\n this.x = (m32 - m23) / s;\n this.y = (m13 - m31) / s;\n this.z = (m21 - m12) / s;\n this.w = Math.acos((m11 + m22 + m33 - 1) / 2);\n\n return this;\n\n },\n\n min: function (v) {\n\n this.x = Math.min(this.x, v.x);\n this.y = Math.min(this.y, v.y);\n this.z = Math.min(this.z, v.z);\n this.w = Math.min(this.w, v.w);\n\n return this;\n\n },\n\n max: function (v) {\n\n this.x = Math.max(this.x, v.x);\n this.y = Math.max(this.y, v.y);\n this.z = Math.max(this.z, v.z);\n this.w = Math.max(this.w, v.w);\n\n return this;\n\n },\n\n clamp: function (min, max) {\n\n // This function assumes min < max, if this assumption isn't true it will not operate correctly\n\n this.x = Math.max(min.x, Math.min(max.x, this.x));\n this.y = Math.max(min.y, Math.min(max.y, this.y));\n this.z = Math.max(min.z, Math.min(max.z, this.z));\n this.w = Math.max(min.w, Math.min(max.w, this.w));\n\n return this;\n\n },\n\n clampScalar: function () {\n\n var min = new Vector4();\n var max = new Vector4();\n\n return function clampScalar(minVal, maxVal) {\n\n min.set(minVal, minVal, minVal, minVal);\n max.set(maxVal, maxVal, maxVal, maxVal);\n\n return this.clamp(min, max);\n\n };\n\n }(),\n\n floor: function () {\n\n this.x = Math.floor(this.x);\n this.y = Math.floor(this.y);\n this.z = Math.floor(this.z);\n this.w = Math.floor(this.w);\n\n return this;\n\n },\n\n ceil: function () {\n\n this.x = Math.ceil(this.x);\n this.y = Math.ceil(this.y);\n this.z = Math.ceil(this.z);\n this.w = Math.ceil(this.w);\n\n return this;\n\n },\n\n round: function () {\n\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n this.z = Math.round(this.z);\n this.w = Math.round(this.w);\n\n return this;\n\n },\n\n roundToZero: function () {\n\n this.x = (this.x < 0) ? Math.ceil(this.x) : Math.floor(this.x);\n this.y = (this.y < 0) ? Math.ceil(this.y) : Math.floor(this.y);\n this.z = (this.z < 0) ? Math.ceil(this.z) : Math.floor(this.z);\n this.w = (this.w < 0) ? Math.ceil(this.w) : Math.floor(this.w);\n\n return this;\n\n },\n\n negate: function () {\n\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n this.w = -this.w;\n\n return this;\n\n },\n\n dot: function (v) {\n\n return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n },\n\n lengthSq: function () {\n\n return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n },\n\n length: function () {\n\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w);\n\n },\n\n lengthManhattan: function () {\n\n return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w);\n\n },\n\n normalize: function () {\n\n return this.divideScalar(this.length());\n\n },\n\n setLength: function (length) {\n\n return this.multiplyScalar(length / this.length());\n\n },\n\n lerp: function (v, alpha) {\n\n this.x += (v.x - this.x) * alpha;\n this.y += (v.y - this.y) * alpha;\n this.z += (v.z - this.z) * alpha;\n this.w += (v.w - this.w) * alpha;\n\n return this;\n\n },\n\n lerpVectors: function (v1, v2, alpha) {\n\n return this.subVectors(v2, v1).multiplyScalar(alpha).add(v1);\n\n },\n\n equals: function (v) {\n\n return ((v.x === this.x) && (v.y === this.y) && (v.z === this.z) && (v.w === this.w));\n\n },\n\n fromArray: function (array, offset) {\n\n if (offset === undefined) offset = 0;\n\n this.x = array[offset];\n this.y = array[offset + 1];\n this.z = array[offset + 2];\n this.w = array[offset + 3];\n\n return this;\n\n },\n\n toArray: function (array, offset) {\n\n if (array === undefined) array = [];\n if (offset === undefined) offset = 0;\n\n array[offset] = this.x;\n array[offset + 1] = this.y;\n array[offset + 2] = this.z;\n array[offset + 3] = this.w;\n\n return array;\n\n },\n\n fromBufferAttribute: function (attribute, index, offset) {\n\n if (offset !== undefined) {\n\n console.warn('THREE.Vector4: offset has been removed from .fromBufferAttribute().');\n\n }\n\n this.x = attribute.getX(index);\n this.y = attribute.getY(index);\n this.z = attribute.getZ(index);\n this.w = attribute.getW(index);\n\n return this;\n\n }\n\n });\n\n function Quaternion(x, y, z, w) {\n\n this._x = x || 0;\n this._y = y || 0;\n this._z = z || 0;\n this._w = (w !== undefined) ? w : 1;\n\n }\n\n Object.assign(Quaternion, {\n\n slerp: function (qa, qb, qm, t) {\n\n return qm.copy(qa).slerp(qb, t);\n\n },\n\n slerpFlat: function (dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t) {\n\n // fuzz-free, array-based Quaternion SLERP operation\n\n var x0 = src0[srcOffset0 + 0],\n y0 = src0[srcOffset0 + 1],\n z0 = src0[srcOffset0 + 2],\n w0 = src0[srcOffset0 + 3],\n\n x1 = src1[srcOffset1 + 0],\n y1 = src1[srcOffset1 + 1],\n z1 = src1[srcOffset1 + 2],\n w1 = src1[srcOffset1 + 3];\n\n if (w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1) {\n\n var s = 1 - t,\n\n cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\n dir = (cos >= 0 ? 1 : -1),\n sqrSin = 1 - cos * cos;\n\n // Skip the Slerp for tiny steps to avoid numeric problems:\n if (sqrSin > Number.EPSILON) {\n\n var sin = Math.sqrt(sqrSin),\n len = Math.atan2(sin, cos * dir);\n\n s = Math.sin(s * len) / sin;\n t = Math.sin(t * len) / sin;\n\n }\n\n var tDir = t * dir;\n\n x0 = x0 * s + x1 * tDir;\n y0 = y0 * s + y1 * tDir;\n z0 = z0 * s + z1 * tDir;\n w0 = w0 * s + w1 * tDir;\n\n // Normalize in case we just did a lerp:\n if (s === 1 - t) {\n\n var f = 1 / Math.sqrt(x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0);\n\n x0 *= f;\n y0 *= f;\n z0 *= f;\n w0 *= f;\n\n }\n\n }\n\n dst[dstOffset] = x0;\n dst[dstOffset + 1] = y0;\n dst[dstOffset + 2] = z0;\n dst[dstOffset + 3] = w0;\n\n }\n\n });\n\n Object.defineProperties(Quaternion.prototype, {\n\n x: {\n\n get: function () {\n\n return this._x;\n\n },\n\n set: function (value) {\n\n this._x = value;\n this.onChangeCallback();\n\n }\n\n },\n\n y: {\n\n get: function () {\n\n return this._y;\n\n },\n\n set: function (value) {\n\n this._y = value;\n this.onChangeCallback();\n\n }\n\n },\n\n z: {\n\n get: function () {\n\n return this._z;\n\n },\n\n set: function (value) {\n\n this._z = value;\n this.onChangeCallback();\n\n }\n\n },\n\n w: {\n\n get: function () {\n\n return this._w;\n\n },\n\n set: function (value) {\n\n this._w = value;\n this.onChangeCallback();\n\n }\n\n }\n\n });\n\n Object.assign(Quaternion.prototype, {\n\n set: function (x, y, z, w) {\n\n this._x = x;\n this._y = y;\n this._z = z;\n this._w = w;\n\n this.onChangeCallback();\n\n return this;\n\n },\n\n clone: function () {\n\n return new this.constructor(this._x, this._y, this._z, this._w);\n\n },\n\n copy: function (quaternion) {\n\n this._x = quaternion.x;\n this._y = quaternion.y;\n this._z = quaternion.z;\n this._w = quaternion.w;\n\n this.onChangeCallback();\n\n return this;\n\n },\n\n setFromEuler: function (euler, update) {\n\n if ((euler && euler.isEuler) === false) {\n\n throw new Error('THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.');\n\n }\n\n var x = euler._x,\n y = euler._y,\n z = euler._z,\n order = euler.order;\n\n // http://www.mathworks.com/matlabcentral/fileexchange/\n // \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n //\tcontent/SpinCalc.m\n\n var cos = Math.cos;\n var sin = Math.sin;\n\n var c1 = cos(x / 2);\n var c2 = cos(y / 2);\n var c3 = cos(z / 2);\n\n var s1 = sin(x / 2);\n var s2 = sin(y / 2);\n var s3 = sin(z / 2);\n\n if (order === 'XYZ') {\n\n this._x = s1 * c2 * c3 + c1 * s2 * s3;\n this._y = c1 * s2 * c3 - s1 * c2 * s3;\n this._z = c1 * c2 * s3 + s1 * s2 * c3;\n this._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n } else if (order === 'YXZ') {\n\n this._x = s1 * c2 * c3 + c1 * s2 * s3;\n this._y = c1 * s2 * c3 - s1 * c2 * s3;\n this._z = c1 * c2 * s3 - s1 * s2 * c3;\n this._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n } else if (order === 'ZXY') {\n\n this._x = s1 * c2 * c3 - c1 * s2 * s3;\n this._y = c1 * s2 * c3 + s1 * c2 * s3;\n this._z = c1 * c2 * s3 + s1 * s2 * c3;\n this._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n } else if (order === 'ZYX') {\n\n this._x = s1 * c2 * c3 - c1 * s2 * s3;\n this._y = c1 * s2 * c3 + s1 * c2 * s3;\n this._z = c1 * c2 * s3 - s1 * s2 * c3;\n this._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n } else if (order === 'YZX') {\n\n this._x = s1 * c2 * c3 + c1 * s2 * s3;\n this._y = c1 * s2 * c3 + s1 * c2 * s3;\n this._z = c1 * c2 * s3 - s1 * s2 * c3;\n this._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n } else if (order === 'XZY') {\n\n this._x = s1 * c2 * c3 - c1 * s2 * s3;\n this._y = c1 * s2 * c3 - s1 * c2 * s3;\n this._z = c1 * c2 * s3 + s1 * s2 * c3;\n this._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n }\n\n if (update !== false) this.onChangeCallback();\n\n return this;\n\n },\n\n setFromAxisAngle: function (axis, angle) {\n\n // http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n // assumes axis is normalized\n\n var halfAngle = angle / 2,\n s = Math.sin(halfAngle);\n\n this._x = axis.x * s;\n this._y = axis.y * s;\n this._z = axis.z * s;\n this._w = Math.cos(halfAngle);\n\n this.onChangeCallback();\n\n return this;\n\n },\n\n setFromRotationMatrix: function (m) {\n\n // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n var te = m.elements,\n\n m11 = te[0],\n m12 = te[4],\n m13 = te[8],\n m21 = te[1],\n m22 = te[5],\n m23 = te[9],\n m31 = te[2],\n m32 = te[6],\n m33 = te[10],\n\n trace = m11 + m22 + m33,\n s;\n\n if (trace > 0) {\n\n s = 0.5 / Math.sqrt(trace + 1.0);\n\n this._w = 0.25 / s;\n this._x = (m32 - m23) * s;\n this._y = (m13 - m31) * s;\n this._z = (m21 - m12) * s;\n\n } else if (m11 > m22 && m11 > m33) {\n\n s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33);\n\n this._w = (m32 - m23) / s;\n this._x = 0.25 * s;\n this._y = (m12 + m21) / s;\n this._z = (m13 + m31) / s;\n\n } else if (m22 > m33) {\n\n s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33);\n\n this._w = (m13 - m31) / s;\n this._x = (m12 + m21) / s;\n this._y = 0.25 * s;\n this._z = (m23 + m32) / s;\n\n } else {\n\n s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22);\n\n this._w = (m21 - m12) / s;\n this._x = (m13 + m31) / s;\n this._y = (m23 + m32) / s;\n this._z = 0.25 * s;\n\n }\n\n this.onChangeCallback();\n\n return this;\n\n },\n\n setFromUnitVectors: function () {\n\n // assumes direction vectors vFrom and vTo are normalized\n\n var v1 = new Vector3();\n var r;\n\n var EPS = 0.000001;\n\n return function setFromUnitVectors(vFrom, vTo) {\n\n if (v1 === undefined) v1 = new Vector3();\n\n r = vFrom.dot(vTo) + 1;\n\n if (r < EPS) {\n\n r = 0;\n\n if (Math.abs(vFrom.x) > Math.abs(vFrom.z)) {\n\n v1.set(-vFrom.y, vFrom.x, 0);\n\n } else {\n\n v1.set(0, -vFrom.z, vFrom.y);\n\n }\n\n } else {\n\n v1.crossVectors(vFrom, vTo);\n\n }\n\n this._x = v1.x;\n this._y = v1.y;\n this._z = v1.z;\n this._w = r;\n\n return this.normalize();\n\n };\n\n }(),\n\n inverse: function () {\n\n return this.conjugate().normalize();\n\n },\n\n conjugate: function () {\n\n this._x *= -1;\n this._y *= -1;\n this._z *= -1;\n\n this.onChangeCallback();\n\n return this;\n\n },\n\n dot: function (v) {\n\n return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n },\n\n lengthSq: function () {\n\n return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n },\n\n length: function () {\n\n return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w);\n\n },\n\n normalize: function () {\n\n var l = this.length();\n\n if (l === 0) {\n\n this._x = 0;\n this._y = 0;\n this._z = 0;\n this._w = 1;\n\n } else {\n\n l = 1 / l;\n\n this._x = this._x * l;\n this._y = this._y * l;\n this._z = this._z * l;\n this._w = this._w * l;\n\n }\n\n this.onChangeCallback();\n\n return this;\n\n },\n\n multiply: function (q, p) {\n\n if (p !== undefined) {\n\n console.warn('THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.');\n return this.multiplyQuaternions(q, p);\n\n }\n\n return this.multiplyQuaternions(this, q);\n\n },\n\n premultiply: function (q) {\n\n return this.multiplyQuaternions(q, this);\n\n },\n\n multiplyQuaternions: function (a, b) {\n\n // from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n var qax = a._x,\n qay = a._y,\n qaz = a._z,\n qaw = a._w;\n var qbx = b._x,\n qby = b._y,\n qbz = b._z,\n qbw = b._w;\n\n this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n this.onChangeCallback();\n\n return this;\n\n },\n\n slerp: function (qb, t) {\n\n if (t === 0) return this;\n if (t === 1) return this.copy(qb);\n\n var x = this._x,\n y = this._y,\n z = this._z,\n w = this._w;\n\n // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n var cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n if (cosHalfTheta < 0) {\n\n this._w = -qb._w;\n this._x = -qb._x;\n this._y = -qb._y;\n this._z = -qb._z;\n\n cosHalfTheta = -cosHalfTheta;\n\n } else {\n\n this.copy(qb);\n\n }\n\n if (cosHalfTheta >= 1.0) {\n\n this._w = w;\n this._x = x;\n this._y = y;\n this._z = z;\n\n return this;\n\n }\n\n var sinHalfTheta = Math.sqrt(1.0 - cosHalfTheta * cosHalfTheta);\n\n if (Math.abs(sinHalfTheta) < 0.001) {\n\n this._w = 0.5 * (w + this._w);\n this._x = 0.5 * (x + this._x);\n this._y = 0.5 * (y + this._y);\n this._z = 0.5 * (z + this._z);\n\n return this;\n\n }\n\n var halfTheta = Math.atan2(sinHalfTheta, cosHalfTheta);\n var ratioA = Math.sin((1 - t) * halfTheta) / sinHalfTheta,\n ratioB = Math.sin(t * halfTheta) / sinHalfTheta;\n\n this._w = (w * ratioA + this._w * ratioB);\n this._x = (x * ratioA + this._x * ratioB);\n this._y = (y * ratioA + this._y * ratioB);\n this._z = (z * ratioA + this._z * ratioB);\n\n this.onChangeCallback();\n\n return this;\n\n },\n\n equals: function (quaternion) {\n\n return (quaternion._x === this._x) && (quaternion._y === this._y) && (quaternion._z === this._z) && (quaternion._w === this._w);\n\n },\n\n fromArray: function (array, offset) {\n\n if (offset === undefined) offset = 0;\n\n this._x = array[offset];\n this._y = array[offset + 1];\n this._z = array[offset + 2];\n this._w = array[offset + 3];\n\n this.onChangeCallback();\n\n return this;\n\n },\n\n toArray: function (array, offset) {\n\n if (array === undefined) array = [];\n if (offset === undefined) offset = 0;\n\n array[offset] = this._x;\n array[offset + 1] = this._y;\n array[offset + 2] = this._z;\n array[offset + 3] = this._w;\n\n return array;\n\n },\n\n onChange: function (callback) {\n\n this.onChangeCallback = callback;\n\n return this;\n\n },\n\n onChangeCallback: function () {}\n\n });\n\n function Matrix4() {\n\n this.elements = [\n\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1\n\n ];\n\n if (arguments.length > 0) {\n\n console.error('THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.');\n\n }\n\n }\n\n Object.assign(Matrix4.prototype, {\n\n isMatrix4: true,\n\n set: function (n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) {\n\n var te = this.elements;\n\n te[0] = n11;\n te[4] = n12;\n te[8] = n13;\n te[12] = n14;\n te[1] = n21;\n te[5] = n22;\n te[9] = n23;\n te[13] = n24;\n te[2] = n31;\n te[6] = n32;\n te[10] = n33;\n te[14] = n34;\n te[3] = n41;\n te[7] = n42;\n te[11] = n43;\n te[15] = n44;\n\n return this;\n\n },\n\n identity: function () {\n\n this.set(\n\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1\n\n );\n\n return this;\n\n },\n\n clone: function () {\n\n return new Matrix4().fromArray(this.elements);\n\n },\n\n copy: function (m) {\n\n var te = this.elements;\n var me = m.elements;\n\n te[0] = me[0];\n te[1] = me[1];\n te[2] = me[2];\n te[3] = me[3];\n te[4] = me[4];\n te[5] = me[5];\n te[6] = me[6];\n te[7] = me[7];\n te[8] = me[8];\n te[9] = me[9];\n te[10] = me[10];\n te[11] = me[11];\n te[12] = me[12];\n te[13] = me[13];\n te[14] = me[14];\n te[15] = me[15];\n\n return this;\n\n },\n\n copyPosition: function (m) {\n\n var te = this.elements,\n me = m.elements;\n\n te[12] = me[12];\n te[13] = me[13];\n te[14] = me[14];\n\n return this;\n\n },\n\n extractBasis: function (xAxis, yAxis, zAxis) {\n\n xAxis.setFromMatrixColumn(this, 0);\n yAxis.setFromMatrixColumn(this, 1);\n zAxis.setFromMatrixColumn(this, 2);\n\n return this;\n\n },\n\n makeBasis: function (xAxis, yAxis, zAxis) {\n\n this.set(\n xAxis.x, yAxis.x, zAxis.x, 0,\n xAxis.y, yAxis.y, zAxis.y, 0,\n xAxis.z, yAxis.z, zAxis.z, 0,\n 0, 0, 0, 1\n );\n\n return this;\n\n },\n\n extractRotation: function () {\n\n var v1 = new Vector3();\n\n return function extractRotation(m) {\n\n var te = this.elements;\n var me = m.elements;\n\n var scaleX = 1 / v1.setFromMatrixColumn(m, 0).length();\n var scaleY = 1 / v1.setFromMatrixColumn(m, 1).length();\n var scaleZ = 1 / v1.setFromMatrixColumn(m, 2).length();\n\n te[0] = me[0] * scaleX;\n te[1] = me[1] * scaleX;\n te[2] = me[2] * scaleX;\n\n te[4] = me[4] * scaleY;\n te[5] = me[5] * scaleY;\n te[6] = me[6] * scaleY;\n\n te[8] = me[8] * scaleZ;\n te[9] = me[9] * scaleZ;\n te[10] = me[10] * scaleZ;\n\n return this;\n\n };\n\n }(),\n\n makeRotationFromEuler: function (euler) {\n\n if ((euler && euler.isEuler) === false) {\n\n console.error('THREE.Matrix: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.');\n\n }\n\n var te = this.elements;\n\n var x = euler.x,\n y = euler.y,\n z = euler.z;\n var a = Math.cos(x),\n b = Math.sin(x);\n var c = Math.cos(y),\n d = Math.sin(y);\n var e = Math.cos(z),\n f = Math.sin(z);\n\n if (euler.order === 'XYZ') {\n\n var ae = a * e,\n af = a * f,\n be = b * e,\n bf = b * f;\n\n te[0] = c * e;\n te[4] = -c * f;\n te[8] = d;\n\n te[1] = af + be * d;\n te[5] = ae - bf * d;\n te[9] = -b * c;\n\n te[2] = bf - ae * d;\n te[6] = be + af * d;\n te[10] = a * c;\n\n } else if (euler.order === 'YXZ') {\n\n var ce = c * e,\n cf = c * f,\n de = d * e,\n df = d * f;\n\n te[0] = ce + df * b;\n te[4] = de * b - cf;\n te[8] = a * d;\n\n te[1] = a * f;\n te[5] = a * e;\n te[9] = -b;\n\n te[2] = cf * b - de;\n te[6] = df + ce * b;\n te[10] = a * c;\n\n } else if (euler.order === 'ZXY') {\n\n var ce = c * e,\n cf = c * f,\n de = d * e,\n df = d * f;\n\n te[0] = ce - df * b;\n te[4] = -a * f;\n te[8] = de + cf * b;\n\n te[1] = cf + de * b;\n te[5] = a * e;\n te[9] = df - ce * b;\n\n te[2] = -a * d;\n te[6] = b;\n te[10] = a * c;\n\n } else if (euler.order === 'ZYX') {\n\n var ae = a * e,\n af = a * f,\n be = b * e,\n bf = b * f;\n\n te[0] = c * e;\n te[4] = be * d - af;\n te[8] = ae * d + bf;\n\n te[1] = c * f;\n te[5] = bf * d + ae;\n te[9] = af * d - be;\n\n te[2] = -d;\n te[6] = b * c;\n te[10] = a * c;\n\n } else if (euler.order === 'YZX') {\n\n var ac = a * c,\n ad = a * d,\n bc = b * c,\n bd = b * d;\n\n te[0] = c * e;\n te[4] = bd - ac * f;\n te[8] = bc * f + ad;\n\n te[1] = f;\n te[5] = a * e;\n te[9] = -b * e;\n\n te[2] = -d * e;\n te[6] = ad * f + bc;\n te[10] = ac - bd * f;\n\n } else if (euler.order === 'XZY') {\n\n var ac = a * c,\n ad = a * d,\n bc = b * c,\n bd = b * d;\n\n te[0] = c * e;\n te[4] = -f;\n te[8] = d * e;\n\n te[1] = ac * f + bd;\n te[5] = a * e;\n te[9] = ad * f - bc;\n\n te[2] = bc * f - ad;\n te[6] = b * e;\n te[10] = bd * f + ac;\n\n }\n\n // last column\n te[3] = 0;\n te[7] = 0;\n te[11] = 0;\n\n // bottom row\n te[12] = 0;\n te[13] = 0;\n te[14] = 0;\n te[15] = 1;\n\n return this;\n\n },\n\n makeRotationFromQuaternion: function (q) {\n\n var te = this.elements;\n\n var x = q._x,\n y = q._y,\n z = q._z,\n w = q._w;\n var x2 = x + x,\n y2 = y + y,\n z2 = z + z;\n var xx = x * x2,\n xy = x * y2,\n xz = x * z2;\n var yy = y * y2,\n yz = y * z2,\n zz = z * z2;\n var wx = w * x2,\n wy = w * y2,\n wz = w * z2;\n\n te[0] = 1 - (yy + zz);\n te[4] = xy - wz;\n te[8] = xz + wy;\n\n te[1] = xy + wz;\n te[5] = 1 - (xx + zz);\n te[9] = yz - wx;\n\n te[2] = xz - wy;\n te[6] = yz + wx;\n te[10] = 1 - (xx + yy);\n\n // last column\n te[3] = 0;\n te[7] = 0;\n te[11] = 0;\n\n // bottom row\n te[12] = 0;\n te[13] = 0;\n te[14] = 0;\n te[15] = 1;\n\n return this;\n\n },\n\n lookAt: function () {\n\n var x = new Vector3();\n var y = new Vector3();\n var z = new Vector3();\n\n return function lookAt(eye, target, up) {\n\n var te = this.elements;\n\n z.subVectors(eye, target);\n\n if (z.lengthSq() === 0) {\n\n // eye and target are in the same position\n\n z.z = 1;\n\n }\n\n z.normalize();\n x.crossVectors(up, z);\n\n if (x.lengthSq() === 0) {\n\n // eye and target are in the same vertical\n\n z.z += 0.0001;\n x.crossVectors(up, z);\n\n }\n\n x.normalize();\n y.crossVectors(z, x);\n\n te[0] = x.x;\n te[4] = y.x;\n te[8] = z.x;\n te[1] = x.y;\n te[5] = y.y;\n te[9] = z.y;\n te[2] = x.z;\n te[6] = y.z;\n te[10] = z.z;\n\n return this;\n\n };\n\n }(),\n\n multiply: function (m, n) {\n\n if (n !== undefined) {\n\n console.warn('THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.');\n return this.multiplyMatrices(m, n);\n\n }\n\n return this.multiplyMatrices(this, m);\n\n },\n\n premultiply: function (m) {\n\n return this.multiplyMatrices(m, this);\n\n },\n\n multiplyMatrices: function (a, b) {\n\n var ae = a.elements;\n var be = b.elements;\n var te = this.elements;\n\n var a11 = ae[0],\n a12 = ae[4],\n a13 = ae[8],\n a14 = ae[12];\n var a21 = ae[1],\n a22 = ae[5],\n a23 = ae[9],\n a24 = ae[13];\n var a31 = ae[2],\n a32 = ae[6],\n a33 = ae[10],\n a34 = ae[14];\n var a41 = ae[3],\n a42 = ae[7],\n a43 = ae[11],\n a44 = ae[15];\n\n var b11 = be[0],\n b12 = be[4],\n b13 = be[8],\n b14 = be[12];\n var b21 = be[1],\n b22 = be[5],\n b23 = be[9],\n b24 = be[13];\n var b31 = be[2],\n b32 = be[6],\n b33 = be[10],\n b34 = be[14];\n var b41 = be[3],\n b42 = be[7],\n b43 = be[11],\n b44 = be[15];\n\n te[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n te[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n te[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n te[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n te[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n te[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n te[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n te[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n te[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n te[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n te[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n te[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n te[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n te[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n te[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n te[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n return this;\n\n },\n\n multiplyScalar: function (s) {\n\n var te = this.elements;\n\n te[0] *= s;\n te[4] *= s;\n te[8] *= s;\n te[12] *= s;\n te[1] *= s;\n te[5] *= s;\n te[9] *= s;\n te[13] *= s;\n te[2] *= s;\n te[6] *= s;\n te[10] *= s;\n te[14] *= s;\n te[3] *= s;\n te[7] *= s;\n te[11] *= s;\n te[15] *= s;\n\n return this;\n\n },\n\n applyToBufferAttribute: function () {\n\n var v1 = new Vector3();\n\n return function applyToBufferAttribute(attribute) {\n\n for (var i = 0, l = attribute.count; i < l; i++) {\n\n v1.x = attribute.getX(i);\n v1.y = attribute.getY(i);\n v1.z = attribute.getZ(i);\n\n v1.applyMatrix4(this);\n\n attribute.setXYZ(i, v1.x, v1.y, v1.z);\n\n }\n\n return attribute;\n\n };\n\n }(),\n\n determinant: function () {\n\n var te = this.elements;\n\n var n11 = te[0],\n n12 = te[4],\n n13 = te[8],\n n14 = te[12];\n var n21 = te[1],\n n22 = te[5],\n n23 = te[9],\n n24 = te[13];\n var n31 = te[2],\n n32 = te[6],\n n33 = te[10],\n n34 = te[14];\n var n41 = te[3],\n n42 = te[7],\n n43 = te[11],\n n44 = te[15];\n\n //TODO: make this more efficient\n //( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n return (\n n41 * (\n +n14 * n23 * n32 -\n n13 * n24 * n32 -\n n14 * n22 * n33 +\n n12 * n24 * n33 +\n n13 * n22 * n34 -\n n12 * n23 * n34\n ) +\n n42 * (\n +n11 * n23 * n34 -\n n11 * n24 * n33 +\n n14 * n21 * n33 -\n n13 * n21 * n34 +\n n13 * n24 * n31 -\n n14 * n23 * n31\n ) +\n n43 * (\n +n11 * n24 * n32 -\n n11 * n22 * n34 -\n n14 * n21 * n32 +\n n12 * n21 * n34 +\n n14 * n22 * n31 -\n n12 * n24 * n31\n ) +\n n44 * (\n -n13 * n22 * n31 -\n n11 * n23 * n32 +\n n11 * n22 * n33 +\n n13 * n21 * n32 -\n n12 * n21 * n33 +\n n12 * n23 * n31\n )\n\n );\n\n },\n\n transpose: function () {\n\n var te = this.elements;\n var tmp;\n\n tmp = te[1];\n te[1] = te[4];\n te[4] = tmp;\n tmp = te[2];\n te[2] = te[8];\n te[8] = tmp;\n tmp = te[6];\n te[6] = te[9];\n te[9] = tmp;\n\n tmp = te[3];\n te[3] = te[12];\n te[12] = tmp;\n tmp = te[7];\n te[7] = te[13];\n te[13] = tmp;\n tmp = te[11];\n te[11] = te[14];\n te[14] = tmp;\n\n return this;\n\n },\n\n setPosition: function (v) {\n\n var te = this.elements;\n\n te[12] = v.x;\n te[13] = v.y;\n te[14] = v.z;\n\n return this;\n\n },\n\n getInverse: function (m, throwOnDegenerate) {\n\n // based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n var te = this.elements,\n me = m.elements,\n\n n11 = me[0],\n n21 = me[1],\n n31 = me[2],\n n41 = me[3],\n n12 = me[4],\n n22 = me[5],\n n32 = me[6],\n n42 = me[7],\n n13 = me[8],\n n23 = me[9],\n n33 = me[10],\n n43 = me[11],\n n14 = me[12],\n n24 = me[13],\n n34 = me[14],\n n44 = me[15],\n\n t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n var det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n if (det === 0) {\n\n var msg = \"THREE.Matrix4.getInverse(): can't invert matrix, determinant is 0\";\n\n if (throwOnDegenerate === true) {\n\n throw new Error(msg);\n\n } else {\n\n console.warn(msg);\n\n }\n\n return this.identity();\n\n }\n\n var detInv = 1 / det;\n\n te[0] = t11 * detInv;\n te[1] = (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * detInv;\n te[2] = (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * detInv;\n te[3] = (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * detInv;\n\n te[4] = t12 * detInv;\n te[5] = (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * detInv;\n te[6] = (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * detInv;\n te[7] = (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * detInv;\n\n te[8] = t13 * detInv;\n te[9] = (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * detInv;\n te[10] = (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * detInv;\n te[11] = (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * detInv;\n\n te[12] = t14 * detInv;\n te[13] = (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * detInv;\n te[14] = (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * detInv;\n te[15] = (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * detInv;\n\n return this;\n\n },\n\n scale: function (v) {\n\n var te = this.elements;\n var x = v.x,\n y = v.y,\n z = v.z;\n\n te[0] *= x;\n te[4] *= y;\n te[8] *= z;\n te[1] *= x;\n te[5] *= y;\n te[9] *= z;\n te[2] *= x;\n te[6] *= y;\n te[10] *= z;\n te[3] *= x;\n te[7] *= y;\n te[11] *= z;\n\n return this;\n\n },\n\n getMaxScaleOnAxis: function () {\n\n var te = this.elements;\n\n var scaleXSq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2];\n var scaleYSq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6];\n var scaleZSq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10];\n\n return Math.sqrt(Math.max(scaleXSq, scaleYSq, scaleZSq));\n\n },\n\n makeTranslation: function (x, y, z) {\n\n this.set(\n\n 1, 0, 0, x,\n 0, 1, 0, y,\n 0, 0, 1, z,\n 0, 0, 0, 1\n\n );\n\n return this;\n\n },\n\n makeRotationX: function (theta) {\n\n var c = Math.cos(theta),\n s = Math.sin(theta);\n\n this.set(\n\n 1, 0, 0, 0,\n 0, c, -s, 0,\n 0, s, c, 0,\n 0, 0, 0, 1\n\n );\n\n return this;\n\n },\n\n makeRotationY: function (theta) {\n\n var c = Math.cos(theta),\n s = Math.sin(theta);\n\n this.set(\n\n c, 0, s, 0,\n 0, 1, 0, 0,\n -s, 0, c, 0,\n 0, 0, 0, 1\n\n );\n\n return this;\n\n },\n\n makeRotationZ: function (theta) {\n\n var c = Math.cos(theta),\n s = Math.sin(theta);\n\n this.set(\n\n c, -s, 0, 0,\n s, c, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1\n\n );\n\n return this;\n\n },\n\n makeRotationAxis: function (axis, angle) {\n\n // Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n var c = Math.cos(angle);\n var s = Math.sin(angle);\n var t = 1 - c;\n var x = axis.x,\n y = axis.y,\n z = axis.z;\n var tx = t * x,\n ty = t * y;\n\n this.set(\n\n tx * x + c, tx * y - s * z, tx * z + s * y, 0,\n tx * y + s * z, ty * y + c, ty * z - s * x, 0,\n tx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n 0, 0, 0, 1\n\n );\n\n return this;\n\n },\n\n makeScale: function (x, y, z) {\n\n this.set(\n\n x, 0, 0, 0,\n 0, y, 0, 0,\n 0, 0, z, 0,\n 0, 0, 0, 1\n\n );\n\n return this;\n\n },\n\n makeShear: function (x, y, z) {\n\n this.set(\n\n 1, y, z, 0,\n x, 1, z, 0,\n x, y, 1, 0,\n 0, 0, 0, 1\n\n );\n\n return this;\n\n },\n\n compose: function (position, quaternion, scale) {\n\n this.makeRotationFromQuaternion(quaternion);\n this.scale(scale);\n this.setPosition(position);\n\n return this;\n\n },\n\n decompose: function () {\n\n var vector = new Vector3();\n var matrix = new Matrix4();\n\n return function decompose(position, quaternion, scale) {\n\n var te = this.elements;\n\n var sx = vector.set(te[0], te[1], te[2]).length();\n var sy = vector.set(te[4], te[5], te[6]).length();\n var sz = vector.set(te[8], te[9], te[10]).length();\n\n // if determine is negative, we need to invert one scale\n var det = this.determinant();\n if (det < 0) sx = -sx;\n\n position.x = te[12];\n position.y = te[13];\n position.z = te[14];\n\n // scale the rotation part\n matrix.copy(this);\n\n var invSX = 1 / sx;\n var invSY = 1 / sy;\n var invSZ = 1 / sz;\n\n matrix.elements[0] *= invSX;\n matrix.elements[1] *= invSX;\n matrix.elements[2] *= invSX;\n\n matrix.elements[4] *= invSY;\n matrix.elements[5] *= invSY;\n matrix.elements[6] *= invSY;\n\n matrix.elements[8] *= invSZ;\n matrix.elements[9] *= invSZ;\n matrix.elements[10] *= invSZ;\n\n quaternion.setFromRotationMatrix(matrix);\n\n scale.x = sx;\n scale.y = sy;\n scale.z = sz;\n\n return this;\n\n };\n\n }(),\n\n makePerspective: function (left, right, top, bottom, near, far) {\n\n if (far === undefined) {\n\n console.warn('THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.');\n\n }\n\n var te = this.elements;\n var x = 2 * near / (right - left);\n var y = 2 * near / (top - bottom);\n\n var a = (right + left) / (right - left);\n var b = (top + bottom) / (top - bottom);\n var c = -(far + near) / (far - near);\n var d = -2 * far * near / (far - near);\n\n te[0] = x;\n te[4] = 0;\n te[8] = a;\n te[12] = 0;\n te[1] = 0;\n te[5] = y;\n te[9] = b;\n te[13] = 0;\n te[2] = 0;\n te[6] = 0;\n te[10] = c;\n te[14] = d;\n te[3] = 0;\n te[7] = 0;\n te[11] = -1;\n te[15] = 0;\n\n return this;\n\n },\n\n makeOrthographic: function (left, right, top, bottom, near, far) {\n\n var te = this.elements;\n var w = 1.0 / (right - left);\n var h = 1.0 / (top - bottom);\n var p = 1.0 / (far - near);\n\n var x = (right + left) * w;\n var y = (top + bottom) * h;\n var z = (far + near) * p;\n\n te[0] = 2 * w;\n te[4] = 0;\n te[8] = 0;\n te[12] = -x;\n te[1] = 0;\n te[5] = 2 * h;\n te[9] = 0;\n te[13] = -y;\n te[2] = 0;\n te[6] = 0;\n te[10] = -2 * p;\n te[14] = -z;\n te[3] = 0;\n te[7] = 0;\n te[11] = 0;\n te[15] = 1;\n\n return this;\n\n },\n\n equals: function (matrix) {\n\n var te = this.elements;\n var me = matrix.elements;\n\n for (var i = 0; i < 16; i++) {\n\n if (te[i] !== me[i]) return false;\n\n }\n\n return true;\n\n },\n\n fromArray: function (array, offset) {\n\n if (offset === undefined) offset = 0;\n\n for (var i = 0; i < 16; i++) {\n\n this.elements[i] = array[i + offset];\n\n }\n\n return this;\n\n },\n\n toArray: function (array, offset) {\n\n if (array === undefined) array = [];\n if (offset === undefined) offset = 0;\n\n var te = this.elements;\n\n array[offset] = te[0];\n array[offset + 1] = te[1];\n array[offset + 2] = te[2];\n array[offset + 3] = te[3];\n\n array[offset + 4] = te[4];\n array[offset + 5] = te[5];\n array[offset + 6] = te[6];\n array[offset + 7] = te[7];\n\n array[offset + 8] = te[8];\n array[offset + 9] = te[9];\n array[offset + 10] = te[10];\n array[offset + 11] = te[11];\n\n array[offset + 12] = te[12];\n array[offset + 13] = te[13];\n array[offset + 14] = te[14];\n array[offset + 15] = te[15];\n\n return array;\n\n }\n\n });\n\n function Matrix3() {\n\n this.elements = [\n \n 1, 0, 0,\n 0, 1, 0,\n 0, 0, 1\n \n ];\n \n if ( arguments.length > 0 ) {\n \n console.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' );\n \n }\n \n }\n \n Object.assign( Matrix3.prototype, {\n \n isMatrix3: true,\n \n set: function ( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n \n var te = this.elements;\n \n te[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n te[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n te[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n \n return this;\n \n },\n \n identity: function () {\n \n this.set(\n \n 1, 0, 0,\n 0, 1, 0,\n 0, 0, 1\n \n );\n \n return this;\n \n },\n \n clone: function () {\n \n return new this.constructor().fromArray( this.elements );\n \n },\n \n copy: function ( m ) {\n \n var te = this.elements;\n var me = m.elements;\n \n te[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n te[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n \n return this;\n \n },\n \n setFromMatrix4: function ( m ) {\n \n var me = m.elements;\n \n this.set(\n \n me[ 0 ], me[ 4 ], me[ 8 ],\n me[ 1 ], me[ 5 ], me[ 9 ],\n me[ 2 ], me[ 6 ], me[ 10 ]\n \n );\n \n return this;\n \n },\n \n applyToBufferAttribute: function () {\n \n var v1 = new Vector3();\n \n return function applyToBufferAttribute( attribute ) {\n \n for ( var i = 0, l = attribute.count; i < l; i ++ ) {\n \n v1.x = attribute.getX( i );\n v1.y = attribute.getY( i );\n v1.z = attribute.getZ( i );\n \n v1.applyMatrix3( this );\n \n attribute.setXYZ( i, v1.x, v1.y, v1.z );\n \n }\n \n return attribute;\n \n };\n \n }(),\n \n multiply: function ( m ) {\n \n return this.multiplyMatrices( this, m );\n \n },\n \n premultiply: function ( m ) {\n \n return this.multiplyMatrices( m, this );\n \n },\n \n multiplyMatrices: function ( a, b ) {\n \n var ae = a.elements;\n var be = b.elements;\n var te = this.elements;\n \n var a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n var a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n var a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n \n var b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n var b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n var b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n \n te[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n te[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n te[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n \n te[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n te[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n te[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n \n te[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n te[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n te[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n \n return this;\n \n },\n \n multiplyScalar: function ( s ) {\n \n var te = this.elements;\n \n te[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n te[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n te[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n \n return this;\n \n },\n \n determinant: function () {\n \n var te = this.elements;\n \n var a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n d = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n g = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n \n return a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n \n },\n \n getInverse: function ( matrix, throwOnDegenerate ) {\n \n if ( matrix && matrix.isMatrix4 ) {\n \n console.error( \"THREE.Matrix3.getInverse no longer takes a Matrix4 argument.\" );\n \n }\n \n var me = matrix.elements,\n te = this.elements,\n \n n11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ],\n n12 = me[ 3 ], n22 = me[ 4 ], n32 = me[ 5 ],\n n13 = me[ 6 ], n23 = me[ 7 ], n33 = me[ 8 ],\n \n t11 = n33 * n22 - n32 * n23,\n t12 = n32 * n13 - n33 * n12,\n t13 = n23 * n12 - n22 * n13,\n \n det = n11 * t11 + n21 * t12 + n31 * t13;\n \n if ( det === 0 ) {\n \n var msg = \"THREE.Matrix3.getInverse(): can't invert matrix, determinant is 0\";\n \n if ( throwOnDegenerate === true ) {\n \n throw new Error( msg );\n \n } else {\n \n console.warn( msg );\n \n }\n \n return this.identity();\n \n }\n \n var detInv = 1 / det;\n \n te[ 0 ] = t11 * detInv;\n te[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n te[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n \n te[ 3 ] = t12 * detInv;\n te[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n te[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n \n te[ 6 ] = t13 * detInv;\n te[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n te[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n \n return this;\n \n },\n \n transpose: function () {\n \n var tmp, m = this.elements;\n \n tmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n tmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n tmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n \n return this;\n \n },\n \n getNormalMatrix: function ( matrix4 ) {\n \n return this.setFromMatrix4( matrix4 ).getInverse( this ).transpose();\n \n },\n \n transposeIntoArray: function ( r ) {\n \n var m = this.elements;\n \n r[ 0 ] = m[ 0 ];\n r[ 1 ] = m[ 3 ];\n r[ 2 ] = m[ 6 ];\n r[ 3 ] = m[ 1 ];\n r[ 4 ] = m[ 4 ];\n r[ 5 ] = m[ 7 ];\n r[ 6 ] = m[ 2 ];\n r[ 7 ] = m[ 5 ];\n r[ 8 ] = m[ 8 ];\n \n return this;\n \n },\n \n equals: function ( matrix ) {\n \n var te = this.elements;\n var me = matrix.elements;\n \n for ( var i = 0; i < 9; i ++ ) {\n \n if ( te[ i ] !== me[ i ] ) return false;\n \n }\n \n return true;\n \n },\n \n fromArray: function ( array, offset ) {\n \n if ( offset === undefined ) offset = 0;\n \n for ( var i = 0; i < 9; i ++ ) {\n \n this.elements[ i ] = array[ i + offset ];\n \n }\n \n return this;\n \n },\n \n toArray: function ( array, offset ) {\n \n if ( array === undefined ) array = [];\n if ( offset === undefined ) offset = 0;\n \n var te = this.elements;\n \n array[ offset ] = te[ 0 ];\n array[ offset + 1 ] = te[ 1 ];\n array[ offset + 2 ] = te[ 2 ];\n \n array[ offset + 3 ] = te[ 3 ];\n array[ offset + 4 ] = te[ 4 ];\n array[ offset + 5 ] = te[ 5 ];\n \n array[ offset + 6 ] = te[ 6 ];\n array[ offset + 7 ] = te[ 7 ];\n array[ offset + 8 ] = te[ 8 ];\n \n return array;\n \n }\n \n } );\n\n /**\n * @author bhouston / http://clara.io\n * @author WestLangley / http://github.com/WestLangley\n */\n\n function Box3(min, max) {\n\n this.min = (min !== undefined) ? min : new Vector3(+Infinity, +Infinity, +Infinity);\n this.max = (max !== undefined) ? max : new Vector3(-Infinity, -Infinity, -Infinity);\n\n }\n\n Object.assign(Box3.prototype, {\n\n isBox3: true,\n\n set: function (min, max) {\n\n this.min.copy(min);\n this.max.copy(max);\n\n return this;\n\n },\n\n setFromArray: function (array) {\n\n var minX = +Infinity;\n var minY = +Infinity;\n var minZ = +Infinity;\n\n var maxX = -Infinity;\n var maxY = -Infinity;\n var maxZ = -Infinity;\n\n for (var i = 0, l = array.length; i < l; i += 3) {\n\n var x = array[i];\n var y = array[i + 1];\n var z = array[i + 2];\n\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (z < minZ) minZ = z;\n\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n if (z > maxZ) maxZ = z;\n\n }\n\n this.min.set(minX, minY, minZ);\n this.max.set(maxX, maxY, maxZ);\n\n return this;\n\n },\n\n setFromBufferAttribute: function (attribute) {\n\n var minX = +Infinity;\n var minY = +Infinity;\n var minZ = +Infinity;\n\n var maxX = -Infinity;\n var maxY = -Infinity;\n var maxZ = -Infinity;\n\n for (var i = 0, l = attribute.count; i < l; i++) {\n\n var x = attribute.getX(i);\n var y = attribute.getY(i);\n var z = attribute.getZ(i);\n\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (z < minZ) minZ = z;\n\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n if (z > maxZ) maxZ = z;\n\n }\n\n this.min.set(minX, minY, minZ);\n this.max.set(maxX, maxY, maxZ);\n\n return this;\n\n },\n\n setFromPoints: function (points) {\n\n this.makeEmpty();\n\n for (var i = 0, il = points.length; i < il; i++) {\n\n this.expandByPoint(points[i]);\n\n }\n\n return this;\n\n },\n\n setFromCenterAndSize: function () {\n\n var v1 = new Vector3();\n\n return function setFromCenterAndSize(center, size) {\n\n var halfSize = v1.copy(size).multiplyScalar(0.5);\n\n this.min.copy(center).sub(halfSize);\n this.max.copy(center).add(halfSize);\n\n return this;\n\n };\n\n }(),\n\n setFromObject: function (object) {\n\n this.makeEmpty();\n\n return this.expandByObject(object);\n\n },\n\n clone: function () {\n\n return new this.constructor().copy(this);\n\n },\n\n copy: function (box) {\n\n this.min.copy(box.min);\n this.max.copy(box.max);\n\n return this;\n\n },\n\n makeEmpty: function () {\n\n this.min.x = this.min.y = this.min.z = +Infinity;\n this.max.x = this.max.y = this.max.z = -Infinity;\n\n return this;\n\n },\n\n isEmpty: function () {\n\n // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n return (this.max.x < this.min.x) || (this.max.y < this.min.y) || (this.max.z < this.min.z);\n\n },\n\n getCenter: function (optionalTarget) {\n\n var result = optionalTarget || new Vector3();\n return this.isEmpty() ? result.set(0, 0, 0) : result.addVectors(this.min, this.max).multiplyScalar(0.5);\n\n },\n\n getSize: function (optionalTarget) {\n\n var result = optionalTarget || new Vector3();\n return this.isEmpty() ? result.set(0, 0, 0) : result.subVectors(this.max, this.min);\n\n },\n\n expandByPoint: function (point) {\n\n this.min.min(point);\n this.max.max(point);\n\n return this;\n\n },\n\n expandByVector: function (vector) {\n\n this.min.sub(vector);\n this.max.add(vector);\n\n return this;\n\n },\n\n expandByScalar: function (scalar) {\n\n this.min.addScalar(-scalar);\n this.max.addScalar(scalar);\n\n return this;\n\n },\n\n expandByObject: function () {\n\n // Computes the world-axis-aligned bounding box of an object (including its children),\n // accounting for both the object's, and children's, world transforms\n\n var v1 = new Vector3();\n\n return function expandByObject(object) {\n\n var scope = this;\n\n object.updateMatrixWorld(true);\n\n object.traverse(function (node) {\n\n var i, l;\n\n var geometry = node.geometry;\n\n if (geometry !== undefined) {\n\n if (geometry.isGeometry) {\n\n var vertices = geometry.vertices;\n\n for (i = 0, l = vertices.length; i < l; i++) {\n\n v1.copy(vertices[i]);\n v1.applyMatrix4(node.matrixWorld);\n\n scope.expandByPoint(v1);\n\n }\n\n } else if (geometry.isBufferGeometry) {\n\n var attribute = geometry.attributes.position;\n\n if (attribute !== undefined) {\n\n for (i = 0, l = attribute.count; i < l; i++) {\n\n v1.fromBufferAttribute(attribute, i).applyMatrix4(node.matrixWorld);\n\n scope.expandByPoint(v1);\n\n }\n\n }\n\n }\n\n }\n\n });\n\n return this;\n\n };\n\n }(),\n\n containsPoint: function (point) {\n\n return point.x < this.min.x || point.x > this.max.x ||\n point.y < this.min.y || point.y > this.max.y ||\n point.z < this.min.z || point.z > this.max.z ? false : true;\n\n },\n\n containsBox: function (box) {\n\n return this.min.x <= box.min.x && box.max.x <= this.max.x &&\n this.min.y <= box.min.y && box.max.y <= this.max.y &&\n this.min.z <= box.min.z && box.max.z <= this.max.z;\n\n },\n\n getParameter: function (point, optionalTarget) {\n\n // This can potentially have a divide by zero if the box\n // has a size dimension of 0.\n\n var result = optionalTarget || new Vector3();\n\n return result.set(\n (point.x - this.min.x) / (this.max.x - this.min.x),\n (point.y - this.min.y) / (this.max.y - this.min.y),\n (point.z - this.min.z) / (this.max.z - this.min.z)\n );\n\n },\n\n intersectsBox: function (box) {\n\n // using 6 splitting planes to rule out intersections.\n return box.max.x < this.min.x || box.min.x > this.max.x ||\n box.max.y < this.min.y || box.min.y > this.max.y ||\n box.max.z < this.min.z || box.min.z > this.max.z ? false : true;\n\n },\n\n intersectsSphere: (function () {\n\n var closestPoint = new Vector3();\n\n return function intersectsSphere(sphere) {\n\n // Find the point on the AABB closest to the sphere center.\n this.clampPoint(sphere.center, closestPoint);\n\n // If that point is inside the sphere, the AABB and sphere intersect.\n return closestPoint.distanceToSquared(sphere.center) <= (sphere.radius * sphere.radius);\n\n };\n\n })(),\n\n intersectsPlane: function (plane) {\n\n // We compute the minimum and maximum dot product values. If those values\n // are on the same side (back or front) of the plane, then there is no intersection.\n\n var min, max;\n\n if (plane.normal.x > 0) {\n\n min = plane.normal.x * this.min.x;\n max = plane.normal.x * this.max.x;\n\n } else {\n\n min = plane.normal.x * this.max.x;\n max = plane.normal.x * this.min.x;\n\n }\n\n if (plane.normal.y > 0) {\n\n min += plane.normal.y * this.min.y;\n max += plane.normal.y * this.max.y;\n\n } else {\n\n min += plane.normal.y * this.max.y;\n max += plane.normal.y * this.min.y;\n\n }\n\n if (plane.normal.z > 0) {\n\n min += plane.normal.z * this.min.z;\n max += plane.normal.z * this.max.z;\n\n } else {\n\n min += plane.normal.z * this.max.z;\n max += plane.normal.z * this.min.z;\n\n }\n\n return (min <= plane.constant && max >= plane.constant);\n\n },\n\n clampPoint: function (point, optionalTarget) {\n\n var result = optionalTarget || new Vector3();\n return result.copy(point).clamp(this.min, this.max);\n\n },\n\n distanceToPoint: function () {\n\n var v1 = new Vector3();\n\n return function distanceToPoint(point) {\n\n var clampedPoint = v1.copy(point).clamp(this.min, this.max);\n return clampedPoint.sub(point).length();\n\n };\n\n }(),\n\n getBoundingSphere: function () {\n\n var v1 = new Vector3();\n\n return function getBoundingSphere(optionalTarget) {\n\n var result = optionalTarget || new Sphere();\n\n this.getCenter(result.center);\n\n result.radius = this.getSize(v1).length() * 0.5;\n\n return result;\n\n };\n\n }(),\n\n intersect: function (box) {\n\n this.min.max(box.min);\n this.max.min(box.max);\n\n // ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n if (this.isEmpty()) this.makeEmpty();\n\n return this;\n\n },\n\n union: function (box) {\n\n this.min.min(box.min);\n this.max.max(box.max);\n\n return this;\n\n },\n\n applyMatrix4: function () {\n\n var points = [\n new Vector3(),\n new Vector3(),\n new Vector3(),\n new Vector3(),\n new Vector3(),\n new Vector3(),\n new Vector3(),\n new Vector3()\n ];\n\n return function applyMatrix4(matrix) {\n\n // transform of empty box is an empty box.\n if (this.isEmpty()) return this;\n\n // NOTE: I am using a binary pattern to specify all 2^3 combinations below\n points[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(matrix); // 000\n points[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(matrix); // 001\n points[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(matrix); // 010\n points[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(matrix); // 011\n points[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(matrix); // 100\n points[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(matrix); // 101\n points[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(matrix); // 110\n points[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(matrix); // 111\n\n this.setFromPoints(points);\n\n return this;\n\n };\n\n }(),\n\n translate: function (offset) {\n\n this.min.add(offset);\n this.max.add(offset);\n\n return this;\n\n },\n\n equals: function (box) {\n\n return box.min.equals(this.min) && box.max.equals(this.max);\n\n }\n\n });\n \n CLOUD.Math.Quaternion = Quaternion;\n CLOUD.Math.Vector3 = Vector3;\n CLOUD.Math.Vector4 = Vector4;\n CLOUD.Math.Matrix4 = Matrix4;\n CLOUD.Math.Matrix3 = Matrix3;\n CLOUD.Math.Box3 = Box3;\n\n })();\n \n ",r.Workers.WorkerChunk.UtilsChunk="\n\n (function(){\n\n function applyMatrix3ToBuffer() {\n\n var v1 = new CLOUD.Math.Vector3();\n\n return function applyMatrix3ToBuffer( matrix, array ) {\n\n for ( var i = 0, len = array.length; i < len; i += 3 ) {\n\n v1.x = array[i + 0];\n v1.y = array[i + 1];\n v1.z = array[i + 2];\n\n v1.applyMatrix3( matrix );\n\n array[ i + 0 ] = v1.x;\n array[ i + 1 ] = v1.y;\n array[ i + 2 ] = v1.z;\n\n }\n\n return array;\n\n };\n }\n\n function applyMatrix4ToBuffer () {\n\n var v1 = new CLOUD.Math.Vector3();\n\n return function applyMatrix4ToBuffer( matrix, array ) {\n\n for ( var i = 0, len = array.length; i < len; i += 3 ) {\n\n v1.x = array[i + 0];\n v1.y = array[i + 1];\n v1.z = array[i + 2];\n\n v1.applyMatrix4( matrix );\n\n array[ i + 0 ] = v1.x;\n array[ i + 1 ] = v1.y;\n array[ i + 2 ] = v1.z;\n\n }\n\n return array;\n\n };\n }\n\n function normalizeBuffer(array) {\n var x, y, z, n;\n\n for ( var i = 0, il = array.length; i < il; i += 3 ) {\n\n x = array[i];\n y = array[i + 1];\n z = array[i + 2];\n\n n = 1.0 / Math.sqrt( x * x + y * y + z * z );\n\n array[ i + 0 ] = x * n;\n array[ i + 1 ] = y * n;\n array[ i + 2 ] = z * n;\n\n }\n }\n\n function isMirror(matrixArray) {\n\n var vx = new CLOUD.Math.Vector3(matrixArray[0], matrixArray[1], matrixArray[2]);\n var vy = new CLOUD.Math.Vector3(matrixArray[4], matrixArray[5], matrixArray[6]);\n var vz = new CLOUD.Math.Vector3(matrixArray[8], matrixArray[9], matrixArray[10]);\n\n var vc = new CLOUD.Math.Vector3().crossVectors(vx, vy);\n var d = vc.dot(vz);\n\n if (d < 0.0) {\n return true;\n }\n\n return false;\n }\n\n function mergeBufferAttributes(attributes) {\n\n var TypedArray;\n var itemSize;\n var normalized;\n var arrayLength = 0;\n \n for (var i = 0; i < attributes.length; ++i) {\n \n var attribute = attributes[i];\n \n if (TypedArray === undefined) {\n TypedArray = attribute.array.constructor;\n }\n if (TypedArray !== attribute.array.constructor) {\n return null;\n }\n \n if (itemSize === undefined) {\n itemSize = attribute.itemSize;\n }\n if (itemSize !== attribute.itemSize) {\n return null;\n }\n \n if (normalized === undefined) {\n normalized = attribute.normalized;\n }\n if (normalized !== attribute.normalized) {\n return null;\n }\n \n arrayLength += attribute.array.length;\n \n }\n \n var array = new TypedArray(arrayLength);\n var offset = 0;\n \n for (var j = 0; j < attributes.length; ++j) {\n \n array.set(attributes[j].array, offset);\n \n offset += attributes[j].array.length;\n \n }\n \n return {\n array: array,\n itemSize: itemSize,\n normalized: normalized\n };\n \n }\n \n function mergeBuffers(buffers, indicesGroup) {\n \n var positionList = [];\n var indexList = [];\n var indexOffset = 0;\n var indexTotal = 0; //\n \n for (var i = 0; i < buffers.length; ++i) {\n \n positionList.push(buffers[i].position);\n \n var index = buffers[i].index;\n \n if (indexOffset > 0) {\n \n index = {\n array: index.array,\n itemSize: index.itemSize,\n count: index.count,\n normalized: index.normalized\n };\n \n for (var j = 0; j < index.count; ++j) {\n \n index.array[j * index.itemSize] += indexOffset;\n \n }\n \n }\n \n indexList.push(index);\n indexOffset += buffers[i].position.count;\n \n if (indicesGroup[buffers[i].name] === void 0) {\n indicesGroup[buffers[i].name] = [];\n }\n \n indicesGroup[buffers[i].name].push({\n nodeId: buffers[i].nodeId,\n indexStart: indexTotal,\n indexCount: index.count\n });\n indexTotal += index.count;\n }\n \n var newIndex = mergeBufferAttributes(indexList);\n var newPosition = mergeBufferAttributes(positionList);\n \n return {\n index: newIndex,\n position: newPosition\n };\n \n }\n\n function getCombinedKeyString(keyArray, separator) {\n separator = separator || '&';\n return keyArray.join(separator);\n }\n\n function splitCombinedKeyString(keySting, separator){\n separator = separator || '&';\n return keySting.split(separator);\n }\n\n // ArrayBuffer转为字符串,参数为ArrayBuffer对象\n function ab2str(buf) {\n return new TextDecoder().decode(new Uint8Array(buf));\n }\n\n // 字符串转为ArrayBuffer对象,参数为字符串\n function str2ab(str){\n return new TextEncoder().encode(str).buffer;\n }\n\n CLOUD.Utils.applyMatrix3ToBuffer = applyMatrix3ToBuffer();\n CLOUD.Utils.applyMatrix4ToBuffer = applyMatrix4ToBuffer();\n CLOUD.Utils.normalizeBuffer = normalizeBuffer;\n CLOUD.Utils.mergeBuffers = mergeBuffers;\n CLOUD.Utils.isMirror = isMirror;\n CLOUD.Utils.getCombinedKeyString = getCombinedKeyString;\n CLOUD.Utils.splitCombinedKeyString = splitCombinedKeyString;\n CLOUD.Utils.ab2str = ab2str;\n CLOUD.Utils.str2ab = str2ab;\n\n })();\n \n ",r.Workers.WorkerChunk.GeomUtilChunk="\n\n function getBoxData(idx) {\n\n // left side\n var vertexArray = [\n [-0.5, -0.5, -0.5,\n -0.5, -0.5, 0.5,\n -0.5, 0.5, -0.5,\n -0.5, 0.5, 0.5\n ],\n\n // down side\n [-0.5, -0.5, -0.5,\n -0.5, -0.5, 0.5,\n 0.5, -0.5, -0.5,\n 0.5, -0.5, 0.5\n ],\n\n // back side\n [-0.5, -0.5, -0.5,\n -0.5, 0.5, -0.5,\n 0.5, -0.5, -0.5,\n 0.5, 0.5, -0.5\n ],\n\n // front side\n [-0.5, -0.5, 0.5,\n -0.5, 0.5, 0.5,\n 0.5, -0.5, 0.5,\n 0.5, 0.5, 0.5\n ],\n\n // up side\n [-0.5, 0.5, -0.5,\n -0.5, 0.5, 0.5,\n 0.5, 0.5, -0.5,\n 0.5, 0.5, 0.5\n ],\n\n // right side\n [0.5, -0.5, -0.5,\n 0.5, -0.5, 0.5,\n 0.5, 0.5, -0.5,\n 0.5, 0.5, 0.5\n ]\n ];\n\n var indexArray = [\n // left\n [0, 1, 2, 3, 2, 1],\n // down\n [2, 1, 0, 1, 2, 3],\n // back\n [0, 1, 2, 3, 2, 1],\n // front\n [2, 1, 0, 1, 2, 3],\n // up\n [0, 1, 2, 3, 2, 1],\n // right\n [2, 1, 0, 1, 2, 3]\n ];\n\n var normalArray = [\n [],\n [],\n [],\n [],\n [],\n []\n ];\n for (var j = 0; j < 4; ++j) {\n normalArray[0].push(-1.0, 0.0, 0.0);\n }\n for (var j = 0; j < 4; ++j) {\n normalArray[1].push(0.0, -1.0, 0.0);\n }\n for (var j = 0; j < 4; ++j) {\n normalArray[2].push(0.0, 0.0, -1.0);\n }\n for (var j = 0; j < 4; ++j) {\n normalArray[3].push(0.0, 0.0, 1.0);\n }\n for (var j = 0; j < 4; ++j) {\n normalArray[4].push(0.0, 1.0, 0.0);\n }\n for (var j = 0; j < 4; ++j) {\n normalArray[5].push(1.0, 0.0, 0.0);\n }\n\n var uvArray = [\n [],\n [],\n [],\n [],\n [],\n []\n ];\n uvArray[0] = uvArray[2] = uvArray[4] = [-0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5];\n //改变贴图上下的方向\n uvArray[1] = uvArray[3] = uvArray[5] = [-0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5];\n\n return {\n vertex: vertexArray[idx],\n normal: normalArray[idx],\n uv: uvArray[idx],\n index: indexArray[idx]\n };\n\n }\n\n function getPipeData(num_edges) {\n\n if (num_edges === undefined || num_edges < 8)\n num_edges = 8;\n\n if (num_edges > 256)\n num_edges = 256;\n\n var PI = 3.14159265357;\n var PIPE_SIZE = 1.0;\n var PIPE_SIZE_HALF = PIPE_SIZE / 2.0;\n\n var num_vertices = num_edges * 4 + 2;\n var num_indices = (num_edges * 4 - 4) * 3;\n var num_circle = num_edges + 1;\n\n var step_len = 1.0 / num_edges;\n var step_angle = PI * 2.0 / num_edges;\n var i, n;\n\n // ini circle buffer\n var circleArray = [];\n for (i = 0; i < num_edges; ++i) {\n circleArray.push(PIPE_SIZE_HALF * Math.cos(i * step_angle));\n circleArray.push(PIPE_SIZE_HALF * Math.sin(i * step_angle));\n }\n circleArray.push(PIPE_SIZE_HALF);\n circleArray.push(0.0);\n\n // add vertices\n var vertexArray = [];\n n = num_circle * 2;\n for (i = 0; i < n; i += 2) {\n vertexArray.push(circleArray[i]);\n vertexArray.push(circleArray[i + 1]);\n vertexArray.push(PIPE_SIZE_HALF);\n }\n for (i = 0; i < n; i += 2) {\n vertexArray.push(circleArray[i]);\n vertexArray.push(circleArray[i + 1]);\n vertexArray.push(-PIPE_SIZE_HALF);\n }\n\n n = num_edges * 2;\n for (i = 0; i < n; i += 2) {\n vertexArray.push(circleArray[i]);\n vertexArray.push(circleArray[i + 1]);\n vertexArray.push(PIPE_SIZE_HALF);\n }\n for (i = n; i > 0; i -= 2) {\n vertexArray.push(circleArray[i]);\n vertexArray.push(circleArray[i + 1]);\n vertexArray.push(-PIPE_SIZE_HALF);\n }\n\n // add indices\n var indexArray = [];\n var len_edges = num_edges + 1;\n for (i = 0; i < num_edges; ++i) {\n indexArray.push(i);\n indexArray.push(i + len_edges);\n indexArray.push(i + 1);\n\n indexArray.push(i + 1);\n indexArray.push(i + len_edges);\n indexArray.push(i + len_edges + 1);\n }\n\n var idx_s = num_circle * 2;\n for (i = 1; i < num_edges - 1; ++i) {\n indexArray.push(idx_s);\n indexArray.push(idx_s + i);\n indexArray.push(idx_s + i + 1);\n }\n\n idx_s = idx_s + num_edges;\n for (i = 1; i < num_edges - 1; ++i) {\n indexArray.push(idx_s);\n indexArray.push(idx_s + i);\n indexArray.push(idx_s + i + 1);\n }\n\n // add uv\n var uvArray = [];\n for (i = num_edges; i >= 0; --i) {\n uvArray.push(i * step_len - PIPE_SIZE_HALF);\n uvArray.push(-PIPE_SIZE_HALF);\n }\n for (i = num_edges; i >= 0; --i) {\n uvArray.push(i * step_len - PIPE_SIZE_HALF);\n uvArray.push(PIPE_SIZE_HALF);\n }\n\n n = num_edges * 2;\n for (i = 0; i < n; i += 2) {\n uvArray.push(circleArray[i]);\n uvArray.push(circleArray[i + 1]);\n }\n for (i = n; i > 0; i -= 2) {\n uvArray.push(circleArray[i]);\n uvArray.push(circleArray[i + 1]);\n }\n\n // add normals\n n = num_vertices * 3;\n var normalArray = [];\n for (i = 0; i < n; ++i) {\n normalArray.push(0.0);\n }\n\n var vA, vB, vC;\n var pA = new CLOUD.Math.Vector3(),\n pB = new CLOUD.Math.Vector3(),\n pC = new CLOUD.Math.Vector3();\n var cb = new CLOUD.Math.Vector3(),\n ab = new CLOUD.Math.Vector3();\n for (i = 0; i < num_indices; i += 3) {\n vA = indexArray[i] * 3;\n vB = indexArray[i + 1] * 3;\n vC = indexArray[i + 2] * 3;\n\n pA.fromArray(vertexArray, vA);\n pB.fromArray(vertexArray, vB);\n pC.fromArray(vertexArray, vC);\n\n cb.subVectors(pC, pB);\n ab.subVectors(pA, pB);\n cb.cross(ab);\n\n normalArray[vA] += cb.x;\n normalArray[vA + 1] += cb.y;\n normalArray[vA + 2] += cb.z;\n\n normalArray[vB] += cb.x;\n normalArray[vB + 1] += cb.y;\n normalArray[vB + 2] += cb.z;\n\n normalArray[vC] += cb.x;\n normalArray[vC + 1] += cb.y;\n normalArray[vC + 2] += cb.z;\n }\n\n var vector = new CLOUD.Math.Vector3();\n n = num_vertices * 3;\n for (i = 0; i < n; i += 3) {\n vector.fromArray(normalArray, i);\n vector.normalize();\n normalArray[i] = vector.x;\n normalArray[i + 1] = vector.y;\n normalArray[i + 2] = vector.z;\n }\n\n return {\n vertex: vertexArray,\n normal: normalArray,\n uv: uvArray,\n index: indexArray,\n edges: num_edges\n };\n } \n\n function getBoxMBuffer() {\n\n var j, jLen;\n var vertex = [];\n var normal = [];\n var index = [];\n var indexOffset = 0;\n\n for (var i = 0; i < 6; ++i) {\n var boxData = getBoxData(i);\n for (j = 0, jLen = boxData.vertex.length; j < jLen; j++) {\n vertex.push(boxData.vertex[j]);\n }\n\n for (j = 0, jLen = boxData.index.length; j < jLen; j++) {\n index.push(boxData.index[j] + indexOffset);\n }\n indexOffset += boxData.vertex.length / 3;\n\n for (j = 0, jLen = boxData.normal.length; j < jLen; j++) {\n normal.push(boxData.normal[j]);\n }\n }\n\n return function getBoxMBuffer(uvMatricesArrayBuffer) {\n\n var uv = null;\n\n if (uvMatricesArrayBuffer) {\n var uvMatrix = new CLOUD.Math.Matrix3();\n var uvTmp = new CLOUD.Math.Vector3();\n uv = [];\n for (var i = 0; i < 6; ++i) {\n var data = getBoxData(i);\n uvMatrix.set(uvMatricesArrayBuffer[i * 6], uvMatricesArrayBuffer[i * 6 + 2], uvMatricesArrayBuffer[i * 6 + 4],\n uvMatricesArrayBuffer[i * 6 + 1], uvMatricesArrayBuffer[i * 6 + 3], uvMatricesArrayBuffer[i * 6 + 5],\n 0, 0, 1.0);\n for (var j = 0, jLen = data.uv.length; j < jLen; j += 2) {\n uvTmp.set(data.uv[j], data.uv[j + 1], 1.0);\n uvTmp.applyMatrix3(uvMatrix);\n uv.push(uvTmp.x);\n uv.push(uvTmp.y);\n }\n }\n }\n\n return {\n vertex: vertex,\n normal: normal,\n uv: uv,\n index: index\n };\n }\n }\n\n function getPipeMBuffer() {\n\n var data2 = getPipeData(32);\n var edges = data2.edges;\n var vertex = data2.vertex;\n var normal = data2.normal;\n var index = data2.index;\n\n return function getPipeMBuffer(uvMatricesArrayBuffer) {\n\n var uv = null;\n var hasUV = (uvMatricesArrayBuffer && uvMatricesArrayBuffer.length === 18) ? true : false;\n\n if (hasUV) {\n uv = [];\n var matrices = [];\n for (var i = 0, len = uvMatricesArrayBuffer.length / 6; i < len; i++) {\n var uvMatrix = new CLOUD.Math.Matrix3();\n uvMatrix.set(\n uvMatricesArrayBuffer[i * 6], uvMatricesArrayBuffer[i * 6 + 2], uvMatricesArrayBuffer[i * 6 + 4],\n uvMatricesArrayBuffer[i * 6 + 1], uvMatricesArrayBuffer[i * 6 + 3], uvMatricesArrayBuffer[i * 6 + 5],\n 0, 0, 1.0);\n matrices.push(uvMatrix);\n }\n\n // Remark:这里又有一次调用???\n var data = getPipeData(32); \n var uvNum1 = (edges + 1) * 4; //edges = 8时为36\n var uvNum2 = uvNum1 + edges * 2; //edges = 8时为52\n var uvTmp = new CLOUD.Math.Vector3();\n for (var j = 0, jLen = data.uv.length; j < jLen; j += 2) {\n uvTmp.set(data.uv[j], data.uv[j + 1], 1.0);\n if (j < uvNum1) {\n uvTmp.applyMatrix3(matrices[0]);\n } else if (j < uvNum2) {\n uvTmp.applyMatrix3(matrices[1]);\n } else {\n uvTmp.applyMatrix3(matrices[2]);\n }\n uv.push(uvTmp.x);\n uv.push(uvTmp.y);\n }\n }\n\n return {\n vertex: vertex,\n normal: normal,\n uv: uv,\n index: index\n };\n }\n }\n\n CLOUD.GeomUtil.getBoxMBuffer = getBoxMBuffer();\n CLOUD.GeomUtil.getPipeMBuffer = getPipeMBuffer();\n \n ",r.Workers.WorkerChunk.SceneReaderChunk="\n\n (function () {\n\n /**\n * @author muwj 2016/12/15\n */\n\n function SceneHeader(buffer) {\n\n var header = new Uint32Array(buffer, 0, 11);\n\n this.blockId = header[0];\n this.cellCount = header[1];\n this.itemCount = header[2];\n this.matrixCount = header[3];\n this.geomBuffSize = header[4];\n this.layerBuffSize = header[5];\n this.cellOffset = header[6];\n this.itemOffset = header[7];\n this.matrixOffset = header[8];\n this.geomOffset = header[9];\n this.layerOffset = header[10];\n\n var bbox = new Float32Array(buffer, 4 * 11, 6);\n this.boundingBox = new CLOUD.Math.Box3(\n new CLOUD.Math.Vector3(bbox[0], bbox[1], bbox[2]),\n new CLOUD.Math.Vector3(bbox[3], bbox[4], bbox[5]));\n\n header = null;\n bbox = null;\n }\n\n function Cell(buffer, offset) {\n\n var cell_i = new Int32Array(buffer, offset, 5);\n\n this.cellId = cell_i[0];\n this.depth = cell_i[1];\n this.itemIndex = cell_i[2];\n this.itemCount = cell_i[3];\n\n this.layerType = cell_i[4];\n this.layerSize = new Int32Array(buffer, offset + 5 * 4, 8);\n this.layerOffset = new Int32Array(buffer, offset + (5 + 8) * 4, 8);\n\n var bbox = new Float32Array(buffer, offset + (5 + 8 + 8) * 4, 6);\n this.boundingBox = new CLOUD.Math.Box3(\n new CLOUD.Math.Vector3(bbox[0], bbox[1], bbox[2]),\n new CLOUD.Math.Vector3(bbox[3], bbox[4], bbox[5]));\n\n cell_i = null;\n bbox = null;\n }\n\n function Item(buffer, offset) {\n\n var item_i = new Int32Array(buffer, offset, 7);\n\n this.ItemId = item_i[0];\n this.originalId = item_i[1];\n this.materialId = item_i[2];\n this.userDataId = item_i[3];\n this.matrixId = item_i[4];\n this.type = item_i[5];\n this.toData = item_i[6];\n\n var bbox = new Float32Array(buffer, offset + 4 * 7, 6);\n this.boundingBox = new CLOUD.Math.Box3(\n new CLOUD.Math.Vector3(bbox[0], bbox[1], bbox[2]),\n new CLOUD.Math.Vector3(bbox[3], bbox[4], bbox[5]));\n\n item_i = null;\n bbox = null;\n }\n\n function Matrix(buffer, offset) {\n\n var matrixData = new Float32Array(buffer, offset, 4 * 4);\n this.matrix = new CLOUD.Math.Matrix4().fromArray(matrixData);\n matrixData = null;\n }\n\n function GeomPipe(buffer, offset) {\n\n var geomData = new Float32Array(buffer, offset, 8);\n\n this.startPt = new CLOUD.Math.Vector3(geomData[0], geomData[1], geomData[2]);\n this.endPt = new CLOUD.Math.Vector3(geomData[3], geomData[4], geomData[5]);\n this.radius = geomData[6];\n this.thickness = geomData[7];\n\n geomData = null;\n }\n\n function SceneReader(buffer) {\n\n this.header = new SceneHeader(buffer);\n\n this.cellSize = 4 * (5 + 8 + 8 + 6);\n this.itemSize = 4 * 13;\n this.matrixSize = 4 * 16;\n this.maxSize = 4 * 256;\n this.boxUvSize = 36;\n this.pipeUvSize = 18;\n\n this.cellBuffer = buffer.slice(this.header.cellOffset, this.header.cellOffset + this.header.cellCount * this.cellSize);\n this.itemBuffer = buffer.slice(this.header.itemOffset, this.header.itemOffset + this.header.itemCount * this.itemSize);\n this.matrixBuffer = buffer.slice(this.header.matrixOffset, this.header.matrixOffset + this.header.matrixCount * this.matrixSize);\n this.geomBuffer = buffer.slice(this.header.geomOffset, this.header.geomOffset + this.header.geomBuffSize);\n this.layerBuffer = buffer.slice(this.header.layerOffset, this.header.layerOffset + this.header.layerBuffSize);\n\n // for data reading\n this.matr_cur_id = -1;\n this.pt_cell_min = new CLOUD.Math.Vector3(0.0, 0.0, 0.0);\n this.pt_cell_max = new CLOUD.Math.Vector3(0.0, 0.0, 0.0);\n this.pt_item_min = new CLOUD.Math.Vector3(0.0, 0.0, 0.0);\n this.pt_item_max = new CLOUD.Math.Vector3(0.0, 0.0, 0.0);\n\n var tmp_buffer = new ArrayBuffer(this.maxSize);\n this.cell_cur = new Cell(tmp_buffer, 0);\n this.item_cur = new Item(tmp_buffer, 0);\n this.matr_cur = new Matrix(tmp_buffer, 0);\n this.pipe_cur = new GeomPipe(tmp_buffer, 0);\n\n this.cell_cur.boundingBox.set(this.pt_cell_min, this.pt_cell_max);\n this.item_cur.boundingBox.set(this.pt_item_min, this.pt_item_max);\n }\n\n SceneReader.prototype = {\n\n constructor: SceneReader,\n\n getCellMpks: function (index) {\n\n if (index >= 0 && index < this.header.cellCount) {\n var src = [];\n var cell = this.getCellInfo(index);\n for (var i = cell.itemIndex; i < cell.itemCount; ++i) {\n var item = this.getItemInfo(i);\n if (item.type === 1) { // mesh\n\n var blockId = this.getMpkID(item.toData);\n src.push(blockId);\n }\n }\n\n var key = {};\n var dist = [];\n for (var j = 0; j < src.length; ++j) {\n if (!key[src[j]]) {\n key[src[j]] = true;\n dist.push(src[j]);\n }\n }\n return dist;\n }\n },\n\n getCell: function (index) {\n\n if (index >= 0 && index < this.header.cellCount) {\n return new Cell(this.cellBuffer, index * this.cellSize);\n }\n },\n\n getItem: function (index) {\n\n if (index >= 0 && index < this.header.itemCount) {\n return new Item(this.itemBuffer, index * this.itemSize);\n }\n },\n\n getMatrix: function (index) {\n\n if (index >= 0 && index < this.header.matrixCount) {\n return new Matrix(this.matrixBuffer, index * this.matrixSize);\n }\n },\n\n getGeomPipe: function (offset) {\n\n if (offset >= 0 && offset < this.header.geomBuffSize) {\n return new GeomPipe(this.geomBuffer, offset);\n }\n },\n\n getCellInfo: function (index) {\n\n if (index >= 0 && index < this.header.cellCount) {\n\n var data_i = new Int32Array(this.cellBuffer, index * this.cellSize, 5);\n this.cell_cur.cellId = data_i[0];\n this.cell_cur.depth = data_i[1];\n this.cell_cur.itemIndex = data_i[2];\n this.cell_cur.itemCount = data_i[3];\n\n this.cell_cur.layerType = data_i[4];\n this.cell_cur.layerSize = new Int32Array(this.cellBuffer, index * this.cellSize + 5 * 4, 8);\n this.cell_cur.layerOffset = new Int32Array(this.cellBuffer, index * this.cellSize + (5 + 8) * 4, 8);\n\n var data_f = new Float32Array(this.cellBuffer, index * this.cellSize + (5 + 8 + 8) * 4, 6);\n this.pt_cell_min.set(data_f[0], data_f[1], data_f[2]);\n this.pt_cell_max.set(data_f[3], data_f[4], data_f[5]);\n this.cell_cur.boundingBox.set(this.pt_cell_min, this.pt_cell_max);\n\n return this.cell_cur;\n }\n },\n\n getItemInfo: function (index) {\n\n if (index >= 0 && index < this.header.itemCount) {\n\n var data_i = new Int32Array(this.itemBuffer, index * this.itemSize, 7);\n this.item_cur.ItemId = data_i[0];\n this.item_cur.originalId = data_i[1];\n this.item_cur.materialId = data_i[2];\n this.item_cur.userDataId = data_i[3];\n this.item_cur.matrixId = data_i[4];\n this.item_cur.type = data_i[5];\n this.item_cur.toData = data_i[6];\n\n var data_f = new Float32Array(this.itemBuffer, index * this.itemSize + 4 * 7, 6);\n this.pt_item_min.set(data_f[0], data_f[1], data_f[2]);\n this.pt_item_max.set(data_f[3], data_f[4], data_f[5]);\n this.item_cur.boundingBox.set(this.pt_item_min, this.pt_item_max);\n\n return this.item_cur;\n }\n },\n\n getMatrixInfo: function (index) {\n\n if (index == this.matr_cur_id) {\n return this.matr_cur;\n }\n\n if (index >= 0 && index < this.header.matrixCount) {\n\n var data = new Float32Array(this.matrixBuffer, index * this.matrixSize, 4 * 4);\n this.matr_cur.matrix.fromArray(data);\n\n this.matr_cur_id = index;\n return this.matr_cur;\n }\n },\n\n getGeomPipeInfo: function (offset) {\n\n if (offset >= 0 && offset < this.header.geomBuffSize) {\n\n var data = new Float32Array(this.geomBuffer, offset, 8);\n this.pipe_cur.startPt.set(data[0], data[1], data[2]);\n this.pipe_cur.endPt.set(data[3], data[4], data[5]);\n this.pipe_cur.radius = data[6];\n this.pipe_cur.thickness = data[7];\n\n return this.pipe_cur;\n }\n },\n\n getGeomBoxUvInfo: function (offset) {\n\n if (offset >= 0 && (offset + this.boxUvSize * 4) <= this.header.geomBuffSize) {\n\n return new Float32Array(this.geomBuffer, offset, this.boxUvSize);\n }\n },\n\n getGeomPipeUvInfo: function (offset) {\n\n if (offset >= 0 && (offset + this.pipeUvSize * 4) <= this.header.geomBuffSize) {\n\n return new Float32Array(this.geomBuffer, offset, this.pipeUvSize);\n }\n },\n\n getLayerInfo: function (offset, size) {\n\n if (offset >= 0 && (offset + size) <= this.header.layerBuffSize) {\n\n var data = new Uint32Array(this.layerBuffer, offset, size);\n return this.data;\n }\n },\n\n getMpkID: function (mesh_id) {\n\n return parseInt(mesh_id / 65536);\n },\n\n getMeshIndex: function (mesh_id) {\n\n return parseInt(mesh_id % 65536);\n }\n };\n\n CLOUD.Reader.SceneHeader = SceneHeader;\n CLOUD.Reader.Cell = Cell;\n CLOUD.Reader.Item = Item;\n CLOUD.Reader.Matrix = Matrix;\n CLOUD.Reader.GeomPipe = GeomPipe;\n CLOUD.Reader.SceneReader = SceneReader;\n // 模型数据项类型\n CLOUD.Reader.EnumNodeItemType = {\n SYMBOL: 0,\n MESH: 1,\n TUBE: 2,\n PIPE: 3,\n BOX: 4,\n BOX_M: 5,\n PIPE_M: 6,\n MESH_REF: 7,\n LINE: 8\n };\n\n })();\n\n ",r.Workers.WorkerChunk.SymbolReaderChunk="\n\n /**\n * @author muwj 2016/12/29\n */\n\n CLOUD.Reader.SymbolHeader = function (buffer) {\n\n var header = new Uint32Array(buffer, 0, 9);\n\n this.blockId = header[0];\n this.symbolCount = header[1];\n this.itemCount = header[2];\n this.matrixCount = header[3];\n this.geomBuffSize = header[4];\n this.symbolOffset = header[5];\n this.itemOffset = header[6];\n this.matrixOffset = header[7];\n this.geomOffset = header[8];\n\n var bbox = new Float32Array(buffer, 4 * 9, 6);\n this.boundingBox = new CLOUD.Math.Box3(\n new CLOUD.Math.Vector3(bbox[0], bbox[1], bbox[2]),\n new CLOUD.Math.Vector3(bbox[3], bbox[4], bbox[5]));\n\n header = null;\n bbox = null;\n };\n\n CLOUD.Reader.Symbol = function (buffer, offset) {\n\n var item_i = new Int32Array(buffer, offset, 3);\n\n this.symbolId = item_i[0];\n this.itemIndex = item_i[1];\n this.itemCount = item_i[2];\n\n var bbox = new Float32Array(buffer, offset + 4 * 3, 6);\n this.boundingBox = new CLOUD.Math.Box3(\n new CLOUD.Math.Vector3(bbox[0], bbox[1], bbox[2]),\n new CLOUD.Math.Vector3(bbox[3], bbox[4], bbox[5]));\n\n item_i = null;\n bbox = null;\n };\n\n CLOUD.Reader.SymbolReader = function (buffer) {\n\n this.header = new CLOUD.Reader.SymbolHeader(buffer);\n\n this.symbolSize = 4 * 9;\n this.itemSize = 4 * 13;\n this.matrixSize = 4 * 16;\n this.geomSize = 4 * 8;\n this.maxSize = 4 * 64;\n this.boxUvSize = 36;\n this.pipeUvSize = 18;\n\n this.symbolBuffer = buffer.slice(this.header.symbolOffset, this.header.symbolOffset + this.header.symbolCount * this.symbolSize);\n this.itemBuffer = buffer.slice(this.header.itemOffset, this.header.itemOffset + this.header.itemCount * this.itemSize);\n this.matrixBuffer = buffer.slice(this.header.matrixOffset, this.header.matrixOffset + this.header.matrixCount * this.matrixSize);\n this.geomBuffer = buffer.slice(this.header.geomOffset, this.header.geomOffset + this.header.geomBuffSize);\n\n // for data reading\n this.matr_cur_id = -1;\n\n this.pt_symb_min = new CLOUD.Math.Vector3(0.0, 0.0, 0.0);\n this.pt_symb_max = new CLOUD.Math.Vector3(0.0, 0.0, 0.0);\n this.pt_item_min = new CLOUD.Math.Vector3(0.0, 0.0, 0.0);\n this.pt_item_max = new CLOUD.Math.Vector3(0.0, 0.0, 0.0);\n\n var tmp_buffer = new ArrayBuffer(this.maxSize);\n this.symb_cur = new CLOUD.Reader.Symbol(tmp_buffer, 0);\n this.item_cur = new CLOUD.Reader.Item(tmp_buffer, 0);\n this.matr_cur = new CLOUD.Reader.Matrix(tmp_buffer, 0);\n this.pipe_cur = new CLOUD.Reader.GeomPipe(tmp_buffer, 0);\n\n this.symb_cur.boundingBox.set(this.pt_symb_min, this.pt_symb_max);\n this.item_cur.boundingBox.set(this.pt_item_min, this.pt_item_max);\n };\n\n CLOUD.Reader.SymbolReader.prototype = {\n\n constructor: CLOUD.Reader.SymbolReader,\n\n getSymbol: function (index) {\n\n if (index >= 0 && index < this.header.symbolCount) {\n return new CLOUD.Reader.Symbol(this.symbolBuffer, index * this.symbolSize);\n }\n },\n\n getItem: function (index) {\n\n if (index >= 0 && index < this.header.itemCount) {\n return new CLOUD.Reader.Item(this.itemBuffer, index * this.itemSize);\n }\n },\n\n getMatrix: function (index) {\n\n if (index >= 0 && index < this.header.matrixCount) {\n return new CLOUD.Math.Matrix(this.matrixBuffer, index * this.matrixSize);\n }\n },\n\n getGeomPipe: function (offset) {\n\n if (offset >= 0 && index < this.header.geomBuffSize) {\n return new CLOUD.Reader.GeomPipe(this.geomBuffer, offset);\n }\n },\n\n getSymbolInfo: function (index) {\n\n if (index >= 0 && index < this.header.symbolCount) {\n\n var item_i = new Int32Array(this.symbolBuffer, index * this.symbolSize, 3);\n this.symb_cur.symbolId = item_i[0];\n this.symb_cur.itemIndex = item_i[1];\n this.symb_cur.itemCount = item_i[2];\n\n var data_f = new Float32Array(this.symbolBuffer, index * this.symbolSize + 4 * 3, 6);\n this.pt_symb_min.set(data_f[0], data_f[1], data_f[2]);\n this.pt_symb_max.set(data_f[3], data_f[4], data_f[5]);\n this.symb_cur.boundingBox.set(this.pt_symb_min, this.pt_symb_max);\n\n return this.symb_cur;\n }\n },\n\n getItemInfo: function (index) {\n\n if (index >= 0 && index < this.header.itemCount) {\n\n var data_i = new Int32Array(this.itemBuffer, index * this.itemSize, 7);\n this.item_cur.ItemId = data_i[0];\n this.item_cur.originalId = data_i[1];\n this.item_cur.materialId = data_i[2];\n this.item_cur.userDataId = data_i[3];\n this.item_cur.matrixId = data_i[4];\n this.item_cur.type = data_i[5];\n this.item_cur.toData = data_i[6];\n\n var data_f = new Float32Array(this.itemBuffer, index * this.itemSize + 4 * 7, 6);\n this.pt_item_min.set(data_f[0], data_f[1], data_f[2]);\n this.pt_item_max.set(data_f[3], data_f[4], data_f[5]);\n this.item_cur.boundingBox.set(this.pt_item_min, this.pt_item_max);\n\n return this.item_cur;\n }\n },\n\n getMatrixInfo: function (index) {\n\n if (index == this.matr_cur_id) {\n return this.matr_cur;\n }\n\n if (index >= 0 && index < this.header.matrixCount) {\n\n var data = new Float32Array(this.matrixBuffer, index * this.matrixSize, 4 * 4);\n this.matr_cur.matrix.fromArray(data);\n\n this.matr_cur_id = index;\n return this.matr_cur;\n }\n },\n\n getGeomPipeInfo: function (offset) {\n\n if (offset >= 0 && offset < this.header.geomBuffSize) {\n\n var data = new Float32Array(this.geomBuffer, offset, 8);\n\n this.pipe_cur.startPt.set(data[0], data[1], data[2]);\n this.pipe_cur.endPt.set(data[3], data[4], data[5]);\n this.pipe_cur.radius = data[6];\n this.pipe_cur.thickness = data[7];\n\n return this.pipe_cur;\n }\n },\n\n getGeomBoxUvInfo: function (offset) {\n\n if (offset >= 0 && (offset + this.boxUvSize * 4) <= this.header.geomBuffSize) {\n\n return new Float32Array(this.geomBuffer, offset, this.boxUvSize);\n }\n },\n\n getGeomPipeUvInfo: function (offset) {\n\n if (offset >= 0 && (offset + this.pipeUvSize * 4) <= this.header.geomBuffSize) {\n\n return new Float32Array(this.geomBuffer, offset, this.pipeUvSize);\n }\n },\n\n getMpkID: function (mesh_id) {\n\n return parseInt(mesh_id / 65536);\n },\n\n getMeshIndex: function (mesh_id) {\n\n }\n };\n \n ",r.Workers.WorkerChunk.SceneParseChunk="\n\n function parseItemData(sceneReader, symbolReader) {\n\n var nodeMap = {};\n\n for (var i = 0, iLen = sceneReader.header.cellCount; i < iLen; ++i) {\n\n var cell = sceneReader.getCellInfo(i);\n\n for (var j = cell.itemIndex; j < cell.itemCount; ++j) {\n\n readItemData(sceneReader, symbolReader, j, i, nodeMap);\n\n }\n }\n\n return nodeMap;\n\n }\n\n /**\n * 读取mesh信息或symbol信息\n *\n * @param {Object} sceneReader - 场景reader\n * @param {Number} idx - 项目索引\n * @param {Number} cellId - 空间cell id\n */\n function readItemData(sceneReader, symbolReader, idx, cellId, nodeMap) {\n\n var item = sceneReader.getItemInfo(idx);\n\n if (item === void 0) {\n return;\n }\n\n if (item.type === CLOUD.Reader.EnumNodeItemType.SYMBOL) {\n readSymbolInfo(sceneReader, symbolReader, cellId, item, nodeMap);\n } else {\n readMeshInfo(sceneReader, cellId, item, null, nodeMap);\n }\n\n }\n\n /**\n * 读取symbol信息\n *\n * @param {Object} sceneReader - 场景reader\n * @param {Number} cellId - 空间cell id\n * @param {Object} item - ItemInfo\n */\n function readSymbolInfo(sceneReader, symbolReader, cellId, item, nodeMap) {\n\n // var symbolReader = this.symbolReader;\n if (!symbolReader) {\n return;\n }\n\n var symbolCount = symbolReader.header.symbolCount;\n var id = item.toData;\n\n if (id < 0 || id > symbolCount) {\n return;\n }\n\n var matrixParent = sceneReader.getMatrixInfo(item.matrixId).matrix.clone();\n var itemParent = {\n matrix: matrixParent,\n ItemId: item.ItemId,\n originalId: item.originalId,\n userDataId: item.userDataId,\n materialId: item.materialId\n };\n\n var symbolCurrent = symbolReader.getSymbolInfo(id);\n\n for (var i = symbolCurrent.itemIndex; i < symbolCurrent.itemCount; ++i) {\n\n var symbolItem = symbolReader.getItemInfo(i);\n\n if (symbolItem.type === CLOUD.Reader.EnumNodeItemType.SYMBOL) {\n continue;\n }\n\n readMeshInfo(symbolReader, cellId, symbolItem, itemParent, nodeMap);\n }\n\n matrixParent = null;\n itemParent = null;\n }\n\n /**\n * 读取mesh信息\n *\n * @param {Object} reader - scene reader | symbol reader\n * @param {Number} cellId - 空间cell id\n * @param {Object} item - item info\n * @param {Object} itemParent - parent item info\n */\n function readMeshInfo(reader, cellId, item, itemParent, nodeMap) {\n\n var userDataId;\n var originalId;\n var mtlId;\n\n if (itemParent === null) {\n userDataId = item.userDataId;\n originalId = item.originalId;\n mtlId = item.materialId;\n } else { // itemParent存在, 表示读取symbol数据\n userDataId = itemParent.userDataId;\n originalId = itemParent.originalId;\n // BIMFACEDM-2599\n // symbol instance's material id: exist(>=0) or non-exist(-1)\n // if symbol instance get own material, all child element of symbol use instance'\n // material, else use child's own material\n mtlId = (itemParent.materialId > -1) ? itemParent.materialId : item.materialId;\n }\n\n var nodeInfo = null;\n var nodeItemType = CLOUD.Reader.EnumNodeItemType;\n switch (item.type) {\n case nodeItemType.MESH:\n nodeInfo = getMeshNodeAttr(reader, item, itemParent);\n break;\n case nodeItemType.TUBE:\n nodeInfo = getMeshNodeAttrOfTube(reader, item, itemParent);\n break;\n case nodeItemType.PIPE:\n nodeInfo = getMeshNodeAttrOfPipe(reader, item, itemParent);\n break;\n case nodeItemType.BOX:\n nodeInfo = getMeshNodeAttrOfBox(reader, item, itemParent);\n break;\n case nodeItemType.BOX_M:\n nodeInfo = getMeshNodeAttrOfBoxM(reader, item, itemParent);\n break;\n case nodeItemType.PIPE_M:\n nodeInfo = getMeshNodeAttrOfPipeM(reader, item, itemParent);\n break;\n case nodeItemType.MESH_REF:\n nodeInfo = getMeshNodeAttrOfMeshRef(reader, item, itemParent);\n break;\n case nodeItemType.LINE:\n nodeInfo = getLineNodeAttr(reader, item, itemParent);\n break;\n default:\n break;\n }\n\n if (!nodeInfo) {\n return;\n }\n\n nodeInfo.userId = originalId;\n nodeInfo.userDataId = userDataId;\n nodeInfo.type = item.type;\n nodeInfo.cellId = cellId;\n nodeInfo.materialId = mtlId;\n nodeInfo.itemIdUV2 = itemParent ? itemParent.ItemId + \"_\" + item.ItemId : item.ItemId;\n\n if (!nodeMap[nodeInfo.userId]) {\n nodeMap[nodeInfo.userId] = [];\n }\n\n nodeMap[nodeInfo.userId].push(nodeInfo);\n\n }\n\n /**\n * 获得 pipe node info\n *\n * @param {Object} reader - scene reader | symbol reader\n * @param {Object} item - item info\n * @param {Object} itemParent - parent item info\n */\n function getMeshNodeAttrOfPipe(sceneOrSymbolReader, item, itemParent) {\n\n var matrix = sceneOrSymbolReader.getMatrixInfo(item.matrixId).matrix.clone();\n if (itemParent) {\n matrix.multiplyMatrices(itemParent.matrix, matrix);\n }\n\n var boundingBox = item.boundingBox.clone();\n boundingBox.applyMatrix4(matrix);\n\n var geomAttr = sceneOrSymbolReader.getGeomPipeInfo(item.toData);\n var startPt = geomAttr.startPt;\n var endPt = geomAttr.endPt;\n\n var dir = new CLOUD.Math.Vector3();\n dir.subVectors(endPt, startPt);\n\n var len = dir.length();\n dir.normalize();\n\n var radius = geomAttr.radius;\n if (radius <= 1) {\n radius = 100;\n }\n\n var unitY = new CLOUD.Math.Vector3(0, 1, 0);\n var scale = new CLOUD.Math.Vector3(radius, len, radius);\n var quaternion = new CLOUD.Math.Quaternion().setFromUnitVectors(unitY, dir);\n var position = startPt.clone().addScaledVector(dir, len * 0.5);\n var matrixTmp = new CLOUD.Math.Matrix4().compose(position, quaternion, scale);\n matrix.multiply(matrixTmp);\n\n geomAttr = null;\n\n return {\n nodeId: (itemParent ? itemParent.ItemId + \"_\" + item.ItemId : item.ItemId) + '_pipe',\n geometryId: 'pipe',\n boundingBox: boundingBox,\n matrix: matrix\n };\n }\n\n /**\n * 获得 tube node info\n *\n * @param {Object} reader - scene reader | symbol reader\n * @param {Object} item - item info\n * @param {Object} itemParent - parent item info\n */\n function getMeshNodeAttrOfTube(sceneOrSymbolReader, item, itemParent) {\n\n var nodeInfo = getMeshNodeAttrOfPipe(sceneOrSymbolReader, item, itemParent);\n nodeInfo.nodeId += \"_tube\";\n nodeInfo.geometryId = \"tube\";\n\n return nodeInfo;\n }\n\n /**\n * 获得 box node info\n *\n * @param {Object} reader - scene reader | symbol reader\n * @param {Object} item - item info\n * @param {Object} itemParent - parent item info\n */\n function getMeshNodeAttrOfBox(sceneOrSymbolReader, item, itemParent) {\n\n var matrix = sceneOrSymbolReader.getMatrixInfo(item.matrixId).matrix.clone();\n if (itemParent) {\n matrix.multiplyMatrices(itemParent.matrix, matrix);\n }\n\n var boundingBox = item.boundingBox.clone();\n boundingBox.applyMatrix4(matrix);\n\n var bBox = item.boundingBox;\n var boxSize = bBox.getSize();\n var boxCenter = bBox.getCenter();\n\n var matrixTmp = new CLOUD.Math.Matrix4().scale(new CLOUD.Math.Vector3(boxSize.x, boxSize.y, boxSize.z));\n matrixTmp.setPosition(boxCenter);\n matrix.multiply(matrixTmp);\n\n return {\n nodeId: (itemParent ? itemParent.ItemId + \"_\" + item.ItemId : item.ItemId) + '_box',\n geometryId: 'box',\n boundingBox: boundingBox,\n matrix: matrix\n };\n }\n\n /**\n * 获得 boxM node info\n *\n * @param {Object} reader - scene reader | symbol reader\n * @param {Object} item - item info\n * @param {Object} itemParent - parent item info\n */\n function getMeshNodeAttrOfBoxM(sceneOrSymbolReader, item, itemParent) {\n\n var matrix = sceneOrSymbolReader.getMatrixInfo(item.matrixId).matrix.clone();\n if (itemParent) {\n matrix.multiplyMatrices(itemParent.matrix, matrix);\n }\n\n var boundingBox = item.boundingBox.clone();\n boundingBox.applyMatrix4(matrix);\n\n return {\n nodeId: (itemParent ? itemParent.ItemId + \"_\" + item.ItemId : item.ItemId) + '_boxM',\n geometryId: 'boxM',\n boundingBox: boundingBox,\n matrix: matrix,\n uvArrayBuffer: sceneOrSymbolReader.getGeomBoxUvInfo(item.toData)\n };\n }\n\n /**\n * 获得 pipeM node info\n *\n * @param {Object} reader - scene reader | symbol reader\n * @param {Object} item - item info\n * @param {Object} itemParent - parent item info\n */\n function getMeshNodeAttrOfPipeM(sceneOrSymbolReader, item, itemParent) {\n\n var matrix = sceneOrSymbolReader.getMatrixInfo(item.matrixId).matrix.clone();\n if (itemParent) {\n matrix.multiplyMatrices(itemParent.matrix, matrix);\n }\n\n var boundingBox = item.boundingBox.clone();\n boundingBox.applyMatrix4(matrix);\n\n return {\n nodeId: (itemParent ? itemParent.ItemId + \"_\" + item.ItemId : item.ItemId) + '_pipeM',\n geometryId: 'pipeM',\n boundingBox: boundingBox,\n matrix: matrix,\n uvArrayBuffer: sceneOrSymbolReader.getGeomPipeUvInfo(item.toData)\n };\n }\n\n /**\n * 获得共享的 mesh node info\n *\n * @param {Object} reader - scene reader | symbol reader\n * @param {Object} item - item info\n * @param {Object} itemParent - parent item info\n */\n function getMeshNodeAttrOfMeshRef(sceneOrSymbolReader, item, itemParent) {\n\n var matrix = sceneOrSymbolReader.getMatrixInfo(item.matrixId).matrix.clone();\n if (itemParent) {\n matrix.multiplyMatrices(itemParent.matrix, matrix);\n }\n\n var boundingBox = item.boundingBox.clone();\n boundingBox.applyMatrix4(matrix);\n\n return {\n nodeId: \"refMesh|\" + (itemParent ? itemParent.ItemId + \"_\" + item.ItemId : item.ItemId),\n geometryId: item.toData,\n boundingBox: boundingBox,\n matrix: matrix\n };\n }\n\n /**\n * 获得 mesh node info\n *\n * @param {Object} reader - scene reader | symbol reader\n * @param {Object} item - item info\n * @param {Object} itemParent - parent item info\n */\n function getMeshNodeAttr(sceneOrSymbolReader, item, itemParent) {\n\n var boundingBox = item.boundingBox.clone();\n var matrix;\n\n if (item.matrixId !== -1) {\n\n matrix = sceneOrSymbolReader.getMatrixInfo(item.matrixId).matrix.clone();\n if (itemParent) {\n matrix.multiplyMatrices(itemParent.matrix, matrix);\n }\n boundingBox.applyMatrix4(matrix);\n\n } else {\n\n matrix = new CLOUD.Math.Matrix4();\n if (itemParent) {\n boundingBox.applyMatrix4(itemParent.matrix);\n }\n\n }\n\n return {\n nodeId: itemParent ? itemParent.ItemId + \"_\" + item.ItemId : item.ItemId,\n geometryId: item.toData,\n boundingBox: boundingBox,\n matrix: matrix\n };\n }\n\n /**\n * 获得 line node info\n *\n * @param {Object} reader - scene reader | symbol reader\n * @param {Object} item - item info\n * @param {Object} itemParent - parent item info\n */\n function getLineNodeAttr(sceneOrSymbolReader, item, itemParent) {\n\n var boundingBox = item.boundingBox.clone();\n var matrix;\n\n if (item.matrixId !== -1) {\n\n matrix = sceneOrSymbolReader.getMatrixInfo(item.matrixId).matrix.clone();\n if (itemParent) {\n matrix.multiplyMatrices(itemParent.matrix, matrix);\n }\n boundingBox.applyMatrix4(matrix);\n\n } else {\n\n matrix = new CLOUD.Math.Matrix4();\n if (itemParent) {\n boundingBox.applyMatrix4(itemParent.matrix);\n }\n\n }\n\n return {\n nodeId: itemParent ? 'line-' + itemParent.ItemId + \"-\" + item.ItemId : 'line-' + item.ItemId,\n geometryId: 'line-' + item.toData,\n boundingBox: boundingBox,\n matrix: matrix\n };\n }\n\n function isParameterized(nodeInfo) {\n\n return (nodeInfo.type === CLOUD.Reader.EnumNodeItemType.TUBE ||\n nodeInfo.type === CLOUD.Reader.EnumNodeItemType.PIPE ||\n nodeInfo.type === CLOUD.Reader.EnumNodeItemType.BOX ||\n nodeInfo.type === CLOUD.Reader.EnumNodeItemType.BOX_M ||\n nodeInfo.type === CLOUD.Reader.EnumNodeItemType.PIPE_M);\n\n }\n\n function parseScene(parameters) {\n \n var sceneBufferData = parameters.sceneBufferData;\n var symbolBufferData = parameters.symbolBufferData;\n var sceneReader = new CLOUD.Reader.SceneReader(sceneBufferData);\n var symbolReader = symbolBufferData ? new CLOUD.Reader.SymbolReader(symbolBufferData) : null;\n var nodeInfoMap = parseItemData(sceneReader, symbolReader);\n\n return {\n nodeInfoMap: CLOUD.Utils.str2ab(JSON.stringify(nodeInfoMap))\n };\n\n }\n\n self.addEventListener('message', function (event) {\n\n var data = event.data;\n\n //console.time('T_parseScene_worker');\n var result = parseScene(data);\n //console.timeEnd('T_parseScene_worker');\n\n self.postMessage(result, [result.nodeInfoMap]);\n self.close();\n\n }, false);\n\n ",r.Workers.WorkerChunk.MeshCreateChunk="\n\n function mergeBuffersBy(materialKey, nodeInfoMapOnMaterial, nodeBufferMapOnNodeId, brief, mergedBufferMap) {\n\n var nodeInfos = nodeInfoMapOnMaterial[materialKey];\n var segmentMergeEnabled = brief.segmentMergeEnabled;\n var maxIndicesNumberPerBathSegment = brief.maxIndicesNumberPerBathSegment;\n var arrayPositionLength = 0;\n var arrayIndexLength = 0;\n var arrayNormalLength = 0;\n var arrayUVLength = 0;\n var arrayUV2Length = 0;\n var nodeBuffer = null;\n var sections = [];\n var start = 0;\n\n for (var i = 0, len = nodeInfos.length; i < len; i++) {\n var nodeInfo = nodeInfos[i];\n nodeBuffer = nodeBufferMapOnNodeId[nodeInfo.nodeId];\n if (!nodeBuffer) {\n // 最后一个\n if (i === len - 1) {\n sections.push({\n start: start,\n end: len,\n arrayPositionLength: arrayPositionLength,\n arrayIndexLength: arrayIndexLength,\n arrayNormalLength: arrayNormalLength,\n arrayUVLength: arrayUVLength,\n arrayUV2Length: arrayUV2Length\n });\n }\n continue;\n }\n\n arrayIndexLength += nodeBuffer.index.length;\n arrayPositionLength += nodeBuffer.position.length;\n if (nodeBuffer.normal) {\n arrayNormalLength += nodeBuffer.normal.length;\n }\n if (nodeBuffer.uv) {\n arrayUVLength += nodeBuffer.uv.length;\n }\n if (nodeBuffer.uv2) {\n arrayUV2Length += nodeBuffer.uv2.length;\n }\n\n if (segmentMergeEnabled) {\n\n if (arrayIndexLength > maxIndicesNumberPerBathSegment) {\n\n arrayIndexLength -= nodeBuffer.index.length;\n arrayPositionLength -= nodeBuffer.position.length;\n if (nodeBuffer.normal) {\n arrayNormalLength -= nodeBuffer.normal.length;\n }\n if (nodeBuffer.uv) {\n arrayUVLength -= nodeBuffer.uv.length;\n }\n if (nodeBuffer.uv2) {\n arrayUV2Length -= nodeBuffer.uv2.length;\n }\n\n sections.push({\n start: start,\n end: i,\n arrayPositionLength: arrayPositionLength,\n arrayIndexLength: arrayIndexLength,\n arrayNormalLength: arrayNormalLength,\n arrayUVLength: arrayUVLength,\n arrayUV2Length: arrayUV2Length\n });\n\n arrayPositionLength = 0;\n arrayIndexLength = 0;\n arrayNormalLength = 0;\n arrayUVLength = 0;\n arrayUV2Length = 0;\n start = i;\n i -= 1; //上一个\n } else {\n if (i === len - 1) {\n sections.push({\n start: start,\n end: len,\n arrayPositionLength: arrayPositionLength,\n arrayIndexLength: arrayIndexLength,\n arrayNormalLength: arrayNormalLength,\n arrayUVLength: arrayUVLength,\n arrayUV2Length: arrayUV2Length\n });\n }\n }\n } else {\n if (i === len - 1) {\n sections.push({\n start: start,\n end: len,\n arrayPositionLength: arrayPositionLength,\n arrayIndexLength: arrayIndexLength,\n arrayNormalLength: arrayNormalLength,\n arrayUVLength: arrayUVLength,\n arrayUV2Length: arrayUV2Length\n });\n }\n }\n\n nodeBuffer = null;\n }\n\n for (var k = 0, kLen = sections.length; k < kLen; k++) {\n var section = sections[k];\n var indicesGroup = {};\n\n var arrayPosition = new Float32Array(section.arrayPositionLength);\n var arrayIndex = new Uint32Array(section.arrayIndexLength);\n var arrayNormal = new Float32Array(section.arrayNormalLength);\n var arrayUV = new Float32Array(section.arrayUVLength);\n var arrayUV2 = new Float32Array(section.arrayUV2Length);\n var offsetPosition = 0;\n var offsetIndex = 0;\n var offsetNormal = 0;\n var offsetUV = 0;\n var offsetUV2 = 0;\n\n var nodeIdArray = [];\n\n for (var i = section.start, len = section.end; i < len; i++) {\n var nodeInfo = nodeInfos[i];\n nodeBuffer = nodeBufferMapOnNodeId[nodeInfo.nodeId];\n if (!nodeBuffer) {\n continue;\n }\n\n nodeIdArray.push(nodeInfo.nodeId);\n\n var index = nodeBuffer.index;\n var position = nodeBuffer.position;\n var normal = nodeBuffer.normal;\n var uv = nodeBuffer.uv;\n var uv2 = nodeBuffer.uv2;\n\n arrayPosition.set(position, offsetPosition);\n var indexTmp = Uint32Array.from(index);\n for (var j = 0, jLen = indexTmp.length; j < jLen; j++) {\n indexTmp[j] += offsetPosition / 3;\n }\n arrayIndex.set(indexTmp, offsetIndex);\n\n // 建立索引表\n if (indicesGroup[nodeInfo.userId] === void 0) {\n indicesGroup[nodeInfo.userId] = [];\n }\n indicesGroup[nodeInfo.userId].push({\n userId: nodeInfo.userId,\n nodeId: nodeInfo.nodeId,\n positionStart: offsetPosition,\n positionCount: position.length,\n indexStart: offsetIndex,\n indexCount: index.length,\n lightmapIdx: nodeInfo.lightmapIdx,\n boundingBox: nodeInfo.boundingBox\n });\n\n offsetIndex += index.length;\n offsetPosition += position.length;\n\n if (normal) {\n arrayNormal.set(normal, offsetNormal);\n offsetNormal += normal.length;\n }\n\n if (uv) {\n arrayUV.set(uv, offsetUV);\n offsetUV += uv.length;\n }\n\n if (uv2) {\n arrayUV2.set(uv2, offsetUV2);\n offsetUV2 += uv2.length;\n }\n\n index = null;\n position = null;\n normal = null;\n uv = null;\n uv2 = null;\n nodeBuffer = null;\n\n }\n\n if (mergedBufferMap[materialKey] === void 0) {\n mergedBufferMap[materialKey] = [];\n }\n\n mergedBufferMap[materialKey].push({\n bufferData: {\n index: arrayIndex.buffer,\n position: arrayPosition.buffer,\n normal: offsetNormal > 0 ? arrayNormal.buffer : undefined,\n uv: offsetUV > 0 ? arrayUV.buffer : undefined,\n uv2: offsetUV2 > 0 ? arrayUV2.buffer : undefined\n },\n indices: indicesGroup\n });\n }\n }\n\n function createNodeBuffer(nodeInfo, nodeItemType, bufferDataObject) {\n\n var buffer = bufferDataObject ? bufferDataObject.buffer : undefined;\n var indexInfo = bufferDataObject ? bufferDataObject.indexInfo : undefined;\n var position, index, normal, uv;\n\n switch (nodeInfo.type) {\n case nodeItemType.LINE:\n case nodeItemType.MESH:\n case nodeItemType.MESH_REF:\n\n if (!buffer) {\n return null;\n }\n\n index = new Uint32Array(buffer.I);\n position = new Float32Array(buffer.P);\n normal = buffer.N && buffer.N.byteLength ? new Float32Array(buffer.N) : null;\n uv = buffer.UV && buffer.UV.byteLength ? new Float32Array(buffer.UV) : null;\n\n if (indexInfo) {\n\n index = index.slice(indexInfo.indexStart,\n indexInfo.indexStart + indexInfo.indexCount);\n position = position.slice(indexInfo.positionStart,\n indexInfo.positionStart + indexInfo.positionCount);\n normal = normal ? normal.slice(indexInfo.positionStart,\n indexInfo.positionStart + indexInfo.positionCount) : null;\n uv = uv ? uv.slice(indexInfo.uvStart,\n indexInfo.uvStart + indexInfo.uvCount) : null;\n\n var startPositon = indexInfo.positionStart / 3;\n index.forEach(function (element, index, array) {\n array[index] -= startPositon;\n });\n\n } else {\n\n index = index.slice(0);\n position = position.slice(0);\n normal = normal ? normal.slice(0) : null;\n uv = uv ? uv.slice(0) : null;\n\n }\n\n // 是否镜像\n if (CLOUD.Utils.isMirror(nodeInfo.matrix.elements)) {\n\n for (var i = 0, iLen = index.length; i < iLen; i += 3) {\n var tmp = index[i + 1];\n index[i + 1] = index[i + 2];\n index[i + 2] = tmp;\n }\n\n }\n\n break;\n case nodeItemType.BOX:\n case nodeItemType.BOX_M:\n case nodeItemType.PIPE:\n case nodeItemType.TUBE:\n case nodeItemType.PIPE_M:\n\n var dataM = (nodeInfo.type === nodeItemType.BOX_M ||\n nodeInfo.type === nodeItemType.BOX) ?\n CLOUD.GeomUtil.getBoxMBuffer(nodeInfo.uvArrayBuffer) :\n CLOUD.GeomUtil.getPipeMBuffer(nodeInfo.uvArrayBuffer);\n\n index = Uint32Array.from(dataM.index);\n position = Float32Array.from(dataM.vertex);\n normal = Float32Array.from(dataM.normal);\n\n if (dataM.uv) {\n uv = Float32Array.from(dataM.uv);\n delete dataM.uv;\n } else {\n uv = null;\n } \n\n break;\n\n default:\n console.log(\"error data!\");\n break;\n }\n\n var matrix = nodeInfo.matrix;\n\n // 变换顶点坐标\n CLOUD.Utils.applyMatrix4ToBuffer(matrix, position);\n\n // 变换法线\n if (normal) {\n var normalMatrix = new CLOUD.Math.Matrix3();\n normalMatrix.getNormalMatrix(matrix);\n CLOUD.Utils.applyMatrix3ToBuffer(normalMatrix, normal);\n CLOUD.Utils.normalizeBuffer(normal);\n }\n\n return {\n index: index,\n position: position,\n normal: normal,\n uv: uv\n };\n }\n\n /**\n *\n * @param {string} itemId -itemId有两种:\"scene\"+itemId; \"symbol\"+itemId\n * @param {number} indexNum -item的index数量,即uv的数量\n */\n function getUV2ById(uv2BufferData, itemId, indexNum){\n\n if (!uv2BufferData || !indexNum){\n return null;\n }\n\n var uv2MapItem = uv2BufferData.uv2MapItem[itemId];\n if (!uv2MapItem) {\n return null;\n }\n\n var scale = uv2MapItem.uv1Scale;\n var translation = uv2MapItem.uv1Translation;\n\n var offset = uv2MapItem.uv1ByteOffset / 2;\n var length = indexNum * 2;\n\n var uv2Array = uv2BufferData.uv2Buffer.slice(offset, offset + length);\n var uv2 = [];//与index对应的uv2\n for (var i = 0; i < length; i += 2) {\n uv2.push((scale[0] * (uv2Array[i] / 65535.0) + translation[0]));\n uv2.push((scale[1] * (uv2Array[i + 1] / 65535.0) + translation[1]));\n }\n\n return {\n lightmapIdx: uv2MapItem.lightmapIdx, \n uv2: uv2\n };\n\n }\n\n function createNodeBufferWithUV2(nodeInfo, nodeItemType, bufferDataObject){\n\n var nodeBuffer = createNodeBuffer(nodeInfo, nodeItemType, bufferDataObject);\n \n if (!bufferDataObject || !bufferDataObject.uv2BufferData) {\n return nodeBuffer;\n }\n\n //数据中存在lightmap就需要展开psition等属性\n var uv2 = [];\n var index = nodeBuffer.index;\n var uv2Info = getUV2ById(bufferDataObject.uv2BufferData, nodeInfo.itemIdUV2, index.length);\n\n if (uv2Info) {\n nodeInfo.lightmapIdx = uv2Info.lightmapIdx;\n uv2 = uv2Info.uv2;\n }\n\n //不同三角面片的同一个点可能对应不同的uv2,需要展开\n var position2 = nodeBuffer.position;\n var normal2 = nodeBuffer.normal;\n var uvv = nodeBuffer.uv;\n\n var position = [];\n var normal = [];\n var uv = [];\n\n for (var i = 0; i < index.length; i++) {\n\n var idx = index[i];\n\n position.push(position2[idx * 3]);\n position.push(position2[idx * 3 + 1]);\n position.push(position2[idx * 3 + 2]);\n\n if(normal2)\n {\n normal.push(normal2[idx * 3]);\n normal.push(normal2[idx * 3 + 1]);\n normal.push(normal2[idx * 3 + 2]);\n }\n\n\n if (uvv) {\n uv.push(uvv[idx * 2]);\n uv.push(uvv[idx * 2 + 1]);\n }\n\n index[i] = i;\n }\n\n position2 = null;\n normal2 = null;\n uvv = null;\n\n nodeBuffer.uv2 = uv2;\n nodeBuffer.position = position;\n nodeBuffer.normal = normal;\n nodeBuffer.uv = uv;\n\n return nodeBuffer;\n }\n\n function getMaterialKeyByNodeInfo(nodeInfo, nodeItemType) {\n\n return CLOUD.Utils.getCombinedKeyString([\n nodeInfo.materialId,\n nodeInfo.uv ? '1' : '0',\n nodeInfo.type === nodeItemType.LINE ? 'lines' : 'meshes'\n ]);\n\n }\n\n function getPropertyValueByMaterialKey(key) {\n\n var splitArr = CLOUD.Utils.splitCombinedKeyString(key);\n\n return {\n materialId: splitArr[0],\n uvProp: splitArr[1],\n type: splitArr[2],\n }\n }\n\n function collectNodeInfos(dataBuffers, brief, nodeInfoMapOnMaterial, nodeBufferMapOnNodeId) {\n\n var i, iLen;\n\n if (brief.type === 'shared') {\n\n for (i = 0, iLen = dataBuffers.length; i < iLen; i++) {\n collectNodeInfosFromSharedGeometries(dataBuffers[i], brief, nodeInfoMapOnMaterial, nodeBufferMapOnNodeId);\n }\n\n }\n\n if (brief.type === 'unique') {\n\n for (i = 0, iLen = dataBuffers.length; i < iLen; i++) {\n collectNodeInfosFromUniqueGeometries(dataBuffers[i], brief, nodeInfoMapOnMaterial, nodeBufferMapOnNodeId);\n }\n\n }\n\n if (brief.type === 'parameterized') {\n\n for (i = 0, iLen = dataBuffers.length; i < iLen; i++) {\n collectNodeInfosFromParameterizedGeometries(dataBuffers[i], brief, nodeInfoMapOnMaterial, nodeBufferMapOnNodeId);\n }\n\n }\n\n }\n\n function collectNodeInfosFromParameterizedGeometries(bufferData, brief, nodeInfoMapOnMaterial, nodeBufferMapOnNodeId) {\n\n var meshId = bufferData.meshId;\n var nodeItemType = brief.nodeItemType;\n var nodeInfoMap = brief.nodeInfoMap;\n var nodeInfos = nodeInfoMap[meshId];\n\n if (!nodeInfos) {\n return;\n }\n\n for (var i = 0, iLen = nodeInfos.length; i < iLen; i++) {\n\n var nodeInfo = nodeInfos[i];\n var nodeBuffer = createNodeBuffer(nodeInfo, nodeItemType);\n\n // 缓存buffer用于合并\n nodeBufferMapOnNodeId[nodeInfo.nodeId] = nodeBuffer;\n // 是否存在uv\n nodeInfo.uv = nodeBuffer.uv ? true : false;\n\n // 根据materialId&uv&type编码\n var materialKey = getMaterialKeyByNodeInfo(nodeInfo, nodeItemType);\n\n if (!nodeInfoMapOnMaterial[materialKey]) {\n nodeInfoMapOnMaterial[materialKey] = [];\n }\n\n nodeInfoMapOnMaterial[materialKey].push(nodeInfo);\n }\n\n }\n\n function collectNodeInfosFromUniqueGeometries(bufferData, brief, nodeInfoMapOnMaterial, nodeBufferMapOnNodeId) {\n\n var meshId = bufferData.meshId;\n var nodeItemType = brief.nodeItemType;\n var nodeInfoMap = brief.nodeInfoMap;\n var nodeInfos = nodeInfoMap[meshId]; \n var uv2BufferData = brief.uv2BufferData;\n\n if (!nodeInfos) {\n return;\n }\n\n for (var i = 0, iLen = nodeInfos.length; i < iLen; i++) {\n\n var nodeInfo = nodeInfos[i];\n var nodeBuffer = createNodeBufferWithUV2(nodeInfo, nodeItemType, {\n buffer: bufferData,\n uv2BufferData: uv2BufferData\n });\n\n // 缓存buffer用于合并\n nodeBufferMapOnNodeId[nodeInfo.nodeId] = nodeBuffer;\n // 是否存在uv\n nodeInfo.uv = nodeBuffer.uv ? true : false;\n\n // 根据materialId&uv&type编码\n var materialKey = getMaterialKeyByNodeInfo(nodeInfo, nodeItemType);\n\n if (!nodeInfoMapOnMaterial[materialKey]) {\n nodeInfoMapOnMaterial[materialKey] = [];\n }\n\n nodeInfoMapOnMaterial[materialKey].push(nodeInfo);\n }\n\n }\n\n function collectNodeInfosFromSharedGeometries(bufferData, brief, nodeInfoMapOnMaterial, nodeBufferMapOnNodeId) {\n\n var indexInfos = bufferData.IndexInfos;\n var nodeItemType = brief.nodeItemType;\n var nodeInfoMap = brief.nodeInfoMap; \n var uv2BufferData = brief.uv2BufferData;\n\n for (var i = 0, iLen = indexInfos.length; i < iLen; i++) {\n\n var indexInfo = indexInfos[i];\n var nodeInfos = nodeInfoMap[indexInfo.meshId];\n\n if (!nodeInfos) {\n continue;\n }\n\n for (var k = 0, kLen = nodeInfos.length; k < kLen; k++) {\n\n var nodeInfo = nodeInfos[k];\n var nodeBuffer = createNodeBufferWithUV2(nodeInfo, nodeItemType, {\n buffer: bufferData,\n indexInfo: indexInfo,\n uv2BufferData: uv2BufferData\n });\n\n // 缓存buffer用于合并\n nodeBufferMapOnNodeId[nodeInfo.nodeId] = nodeBuffer;\n\n // 是否存在uv\n nodeInfo.uv = nodeBuffer.uv ? true : false;\n\n // 根据materialId&uv&type编码\n var materialKey = getMaterialKeyByNodeInfo(nodeInfo, nodeItemType);\n\n if (!nodeInfoMapOnMaterial[materialKey]) {\n nodeInfoMapOnMaterial[materialKey] = [];\n }\n\n nodeInfoMapOnMaterial[materialKey].push(nodeInfo);\n }\n\n }\n\n }\n\n function createMeshes(parameters) {\n\n // var brief = {\n // type,\n // segmentEnabled,\n // maxIndicesNumberPerBathSegment,\n // nodeItemType,\n // nodeInfoMap\n // };\n var brief = JSON.parse(CLOUD.Utils.ab2str(parameters.brief));\n var dataBuffers = parameters.dataBuffers;\n var nodeInfoMapOnMaterial = {};\n var nodeBufferMapOnNodeId = {};\n var mergedBufferMap = {};\n\n // 收集nodeInfos\n collectNodeInfos(dataBuffers, brief, nodeInfoMapOnMaterial, nodeBufferMapOnNodeId);\n \n // 合并buffers\n var materialKeys = Object.keys(nodeInfoMapOnMaterial);\n\n for (var i = 0, iLen = materialKeys.length; i < iLen; i++) {\n mergeBuffersBy(materialKeys[i], nodeInfoMapOnMaterial, nodeBufferMapOnNodeId, brief, mergedBufferMap);\n }\n\n var transferableObjects = [];\n\n for (var j = 0, jLen = materialKeys.length; j < jLen; j++) {\n\n var mergedBuffers = mergedBufferMap[materialKeys[j]];\n\n for (var k = 0, kLen = mergedBuffers.length; k < kLen; k++) {\n\n var bufferData = mergedBuffers[k].bufferData;\n\n transferableObjects.push(bufferData.index);\n transferableObjects.push(bufferData.position);\n\n if (bufferData.normal) {\n transferableObjects.push(bufferData.normal);\n }\n\n if (bufferData.uv) {\n transferableObjects.push(bufferData.uv);\n }\n\n if (bufferData.uv2) {\n transferableObjects.push(bufferData.uv2);\n }\n }\n\n }\n\n return {\n data: {dataBuffers: mergedBufferMap},\n transferableObjects: transferableObjects\n };\n }\n\n self.addEventListener('message', function (event) {\n\n var data = event.data;\n\n console.time('T_worker_createMeshes');\n\n var result = createMeshes(data);\n\n console.timeEnd('T_worker_createMeshes');\n\n self.postMessage(result.data, result.transferableObjects);\n\n self.close();\n\n }, false);\n ",r.Workers.WorkerChunk.BorderLineCreateChunk="\n\n function createBorderLines(parameters) {\n \n var nodeInfosObject = JSON.parse(CLOUD.Utils.ab2str(parameters.infos));\n var bufferDataArray = parameters.bufferDataArray;\n var i, iLen;\n var j, jLen;\n \n var userIdMap = {};\n \n for (var k = 0, kLen = bufferDataArray.length; k < kLen; k++) {\n \n var bufferData = bufferDataArray[k];\n var indexInfos = bufferData.IndexInfos;\n \n var arrIndex = new Uint32Array(bufferData.I);\n var arrPosition = new Float32Array(bufferData.P);\n \n // 按 userId 收集边框线\n for (i = 0, iLen = indexInfos.length; i < iLen; i++) {\n \n var indexInfo = indexInfos[i];\n var geometryId = indexInfo.meshId;\n var nodeInfos = nodeInfosObject[geometryId];\n if (!nodeInfos) {\n continue;\n } \n \n for (j = 0, jLen = nodeInfos.length; j < jLen; j++) {\n \n var nodeInfo = nodeInfos[j];\n var newPosition = arrPosition.slice(indexInfo.positionStart, indexInfo.positionStart + indexInfo.positionCount);\n var startPositon = indexInfo.positionStart / 3;\n var newIndex = arrIndex.slice(indexInfo.indexStart, indexInfo.indexStart + indexInfo.indexCount);\n newIndex.forEach(function (element, index, array) {\n array[index] -= startPositon;\n });\n \n CLOUD.Utils.applyMatrix4ToBuffer(nodeInfo.matrix, newPosition);\n \n var lineMesh = {\n name: nodeInfo.userId,\n nodeId: nodeInfo.userId,\n index: {\n array: newIndex,\n itemSize: 1,\n count: newIndex.length,\n normalized: false\n },\n position: {\n array: newPosition,\n itemSize: 3,\n count: newPosition.length / 3,\n normalized: false\n }\n };\n \n if (!userIdMap[nodeInfo.userId]) {\n userIdMap[nodeInfo.userId] = [];\n }\n \n userIdMap[nodeInfo.userId].push(lineMesh);\n }\n }\n \n }\n \n // 按 userId 顺序收集边框线\n var lineSegments = [];\n var userIds = Object.keys(userIdMap);\n \n for (j = 0, jLen = userIds.length; j < jLen; j++) {\n \n var wireFrames = userIdMap[userIds[j]];\n \n for (i = 0, iLen = wireFrames.length; i < iLen; i++) {\n lineSegments.push(wireFrames[i]);\n }\n \n }\n \n // 合并边框线\n if (lineSegments.length === 0) {\n return {\n data:{\n success: false\n } \n };\n }\n \n var groupIndices = {};\n var newBuffer = CLOUD.Utils.mergeBuffers(lineSegments, groupIndices);\n var transferableObjects = [newBuffer.index.array.buffer, newBuffer.position.array.buffer];\n \n return {\n data: {\n success: true, \n groupIndices: JSON.stringify(groupIndices),\n bufferData: newBuffer,\n }, \n transferableObjects: transferableObjects\n };\n }\n \n self.addEventListener('message', function (event) {\n \n var data = event.data;\n var result = createBorderLines(data);\n \n if (result.data.success) {\n self.postMessage(result.data, result.transferableObjects);\n } else {\n self.postMessage(result.data);\n }\n \n self.close();\n \n }, false);\n \n ",r.Workers.WorkerLib.getBorderLineCreateWorker=(U=r.Workers.WorkerChunk.NamespaceChunk,U+=r.Workers.WorkerChunk.MathChunk,U+=r.Workers.WorkerChunk.UtilsChunk,U+=r.Workers.WorkerChunk.BorderLineCreateChunk,U=window.URL.createObjectURL(new Blob([U])),function(){return new Worker(U)}),r.Workers.WorkerLib.getMeshCreateWorker=function(){var e=r.Workers.WorkerChunk.NamespaceChunk;e+=r.Workers.WorkerChunk.MathChunk,e+=r.Workers.WorkerChunk.UtilsChunk,e+=r.Workers.WorkerChunk.GeomUtilChunk,e+=r.Workers.WorkerChunk.MeshCreateChunk;var t=window.URL.createObjectURL(new Blob([e]));return function(){return new Worker(t)}}(),r.Workers.WorkerLib.getSceneParseWorker=function(){var e=r.Workers.WorkerChunk.NamespaceChunk;e+=r.Workers.WorkerChunk.MathChunk,e+=r.Workers.WorkerChunk.UtilsChunk,e+=r.Workers.WorkerChunk.SceneReaderChunk,e+=r.Workers.WorkerChunk.SymbolReaderChunk,e+=r.Workers.WorkerChunk.SceneParseChunk;var t=window.URL.createObjectURL(new Blob([e]));return function(){return new Worker(t)}}(),function(){class e extends r.BaseModel{constructor(e,t,i,n,a,s){super(t,i),this.viewer=e,this.unitScale=1,this.pntLoader=new r.PntLoader(5,this.unitScale),this.index=n,this.parseCfgFinish=a,this.debut=s,this.url=i.serverUrl+""+i.databagId+"/tileset.json"}destroy(){super.destroy(),this.pntLoader=null,this.parseCfgFinish=null,this.debut=null,this.viewer=null}load(e){var t=this;this.manager.chooseRendering(this.statistics.memoeryInfo),this.parseCfgFinish&&this.parseCfgFinish(),this.manager.dispatchEvent({type:r.EVENTS.ON_LOAD_START}),this.pntLoader.loadPntTotalJson(this.url,(function(e){var i=new THREE.Vector3(e[0],e[1],e[2]),r=new THREE.Vector3(e[3],e[4],e[5]),n=new THREE.Vector3(e[6],e[7],e[8]),a=new THREE.Vector3(e[9],e[10],e[11]),s=r.clone().add(n).add(a);t.getTransforms().boundingBox=new THREE.Box3(i.clone().sub(s),i.clone().add(s)),t.manager.updateScene(t)})).then((e=>{let i=t.viewer.getScene().getMatrixGlobal().clone(),n=new THREE.Matrix4;n.copy(i).invert();let a=t.viewer.getScene(),s=(new THREE.Matrix4).makeScale(t.unitScale,t.unitScale,t.unitScale);for(const t of e)t.matrix.copy(i).multiply(s),t.matrixAutoUpdate=!1,t.updateMatrixWorld(!0),a.children[0].add(t);t.viewer.addRenderCallback((function(){let e=t.viewer.domElement.offsetHeight;t.pntLoader.updatePreSse(t.viewer.camera,e),t.pntLoader.ProcessTileIndexs(t.viewer.camera,n)})),t.manager.dispatchEvent({type:r.EVENTS.ON_LOAD_COMPLETE,modelId:t.id}),t.debut(t)}))}}r.PointCloudModel=e}(),function(){class e extends r.BaseModel{constructor(e,t,i,n,a){super(t,i),this._viewer=e,this._configLoadCb=n,this._modelLoadCb=a,this._loader=new r.GeoJsonModelLoader,this._crs=null,this.features=[],this._parser=new r.GeoJsonParser(e);const s=`${i.serverUrl}${i.databagId}`;this.url=`${s}/../../../metadata/Points.json.gz`}load(e){this.manager.chooseRendering(this.statistics.memoeryInfo,!0),this._configLoadCb&&this._configLoadCb();const t=this;this._loader.loadModel(t.url).then((e=>{t._getBoundingBox(e),t._parser.parse(e,t),t.manager.dispatchEvent({type:r.EVENTS.ON_LOAD_COMPLETE,modelId:t.id}),t.debut&&t.debut(t)})).catch((()=>{console.log(`load model ${t.url} failed`)}))}getFeatureByID(e){if(r.Utils.isDefined(this.features[e]))return this.features[e]}getAllFeature(){return this.features}select(e){if(!r.Utils.isDefined(e.key))return this.getAllFeature();const t=e.key+"",i=e.value+"";let n=[];for(let e=0;e<this.features.length;++e){let r=this.features[e];r.properties[t]===i&&n.push(r)}return n}_getBoundingBox(e){const t=this._viewer;let i=new THREE.Vector3;if(r.Utils.isDefined(t.basePointPositionOnLonLat)&&r.Utils.isDefined(e.center)){const n=new THREE.Vector3;r.Projection.lonLatToGauss(new THREE.Vector2(t.basePointPositionOnLonLat[0],t.basePointPositionOnLonLat[1]),r.geoCoordinateSystem.WGS84,n,{span:3,withLineCode:!1});const a=new THREE.Vector3;r.Projection.lonLatToGauss(new THREE.Vector2(e.center[0],e.center[1]),r.geoCoordinateSystem.WGS84,a,{span:3,withLineCode:!1});const s=new THREE.Vector2;s.subVectors(a,n),i.setX(s.x),i.setY(s.y)}let n=r.Utils.box3FromSize(i,new THREE.Vector3(e.size[0],e.size[1],e.size[2]));this.getTransforms().boundingBox=n,this.manager.updateScene(this)}}r.PointModel=e}(),function(){class e extends r.PointModel{constructor(e,t,i){super(t,t,i),this.id=i.modelId,this.databagId=this.id,this._viewer=e,this.features={};const n=`${i.serverUrl}/${i.databagId}`;i.rootPath?this.url=`${n}/${i.rootPath}`:this.url=`${n}/../../../metadata/Points.json.gz`;const a=`${this.id}_${r.ObjectGroupType.GEOJSONGROUP}`;this.objectGroup=e.getScene().getOrCreateObjectGroup(a,{pickableType:r.PICKABLETYPE.Geometry,globalSpace:!0}),this.objectGroup.renderOrder=r.EnumRenderOrder.WireFrame}destroy(){this._loader=null,this._parser=null,this.features=null,this.manager.scene.removeObjectGroupByName(r.ObjectGroupType.GEOJSONGROUP),super.destroy()}setVisible(e){this.visible=e,this.objectGroup&&(this.objectGroup.visible=e)}load(e){this.manager.chooseRendering(this.statistics.memoeryInfo,!0),this._configLoadCb&&this._configLoadCb();const t=this;this._loader.loadModel(t.url).then((e=>{t._getBoundingBox(e),t._parser.parse(e,t),t.manager.dispatchEvent({type:r.EVENTS.ON_LOAD_COMPLETE,modelId:t.id}),t.debut&&t.debut(t)})).catch((()=>{console.log(`load model ${t.url} failed`)}))}addFeature(e,t){this.features[e]=t}createLineMesh(e,t){let i=null;i=!0===t.useLineWidth?new r.MeshLineMaterial({color:t.color,opacity:t.opacity,resolution:new THREE.Vector2(window.innerWidth,window.innerHeight),linewidth:t.lineWidth,sizeAttenuation:!0,depthWrite:!1,transparent:!0}):new THREE.LineBasicMaterial({color:t.color});for(const n in e){let a,s,o=e[n];!0===t.useLineWidth?(a=new r.MeshLineGeometry,a.setPositions(o),s=new r.MeshLine(a,i)):(a=new THREE.BufferGeometry,a.setAttribute("position",new THREE.Float32BufferAttribute(o,3)),s=new THREE.Line(a,i)),this.getFeatureByID(n).addMesh(s),this.objectGroup.add(s),s.updateMatrixWorld(!0),o.length=0}e=null}getFeatureByID(e){if(r.Utils.isDefined(this.features[e]))return this.features[e]}getAllFeature(){return this.features}select(e){if(!r.Utils.isDefined(e.key))return this.getAllFeature();const t=e.key+"",i=e.value+"";let n=[];return this.features.map((e=>{e.properties[t]===i&&n.push(e)})),n}updateMaterialByFeatureIds(e,t){const i=new r.MeshLineMaterial({color:t.color,opacity:t.opacity,resolution:new THREE.Vector2(window.innerWidth,window.innerHeight),linewidth:t.lineWidth,sizeAttenuation:!0,depthWrite:!1,transparent:!0});e.map((e=>{const t=this.getFeatureByID(e);if(!t)return;t.meshList.map((e=>{e.material=i}))}))}}r.LineModel=e}(),r.GeoJsonModelLoader=class{constructor(){this.jsonLoader=new THREE.FileLoader,this.jsonLoader.setResponseType("json")}loadModel(e){return new Promise(((t,i)=>{this.jsonLoader.load(e,(function(e){t(e)}),void 0,(function(){i()}))}))}},function(){class e{constructor(){this._geometryLngLat=null,this._geometryWorld=null,this._properties=null,this._id=null,this.type="point"}get properties(){return this._properties}set properties(e){this._properties=e}get geometry(){return this._geometryLngLat}get geometryWorld(){return this._geometryWorld}get id(){return this._id}set id(e){this._id=e}}function t(e,t,i,n){if(r.Utils.isDefined(e.geometry)){var a=e.geometry.type,o=s[a];r.Utils.isDefined(o)?o(e,t,i,n):console.log("Unknown geometry type")}}function i(e,t,i,n){!function(e,t,i,n,a){const s=new r.LineFeature;s.id=e.id,s._geometryLngLat=[];for(let e=0;e<t.length;e++){const i=t[e];let r=[];for(let e=0;e<i.length;e++){const t=i[e],n=new THREE.Vector2(t[0],t[1]);r.push(n)}s._geometryLngLat.push(r)}const o=e.properties;r.Utils.isDefined(o)&&(s.properties=o);n.addFeature(e.id,s)}(e,e.geometry.coordinates,0,i)}function n(e,t,i,n,a){const s=new r.PointFeature;s.id=e.id;new THREE.Vector2;let o=new THREE.Vector2(t[0],t[1]);s._geometryLngLat=o,s.geometry.crsFunction=i;var l=e.properties;r.Utils.isDefined(l)&&(s.properties=l),n.features.push(s)}var a={FeatureCollection:function(e,i,r,n){for(var a=e.features,s=0,o=a.length;s<o;s++)t(a[s],i,r,n)}},s={Point:function(e,t,i,r){n(e,e.geometry.coordinates,t,i,r)},MultiPoint:function(e,t,i,r){for(var a=e.geometry.coordinates,s=0;s<a.length;s++)n(e,a[s],t,i,r)},Polygon:i,MultiPolygon:function(e,t,i,n){!function(e,t,i,n,a){const s=new r.LineFeature;s.id=e.id,s._geometryLngLat=[],t.map((e=>{e.map((e=>{let t=[];e.map((e=>{const i=new THREE.Vector2(e[0],e[1]);t.push(i)})),s._geometryLngLat.push(t)}))}));const o=e.properties;r.Utils.isDefined(o)&&(s.properties=o);n.addFeature(e.id,s)}(e,e.geometry.coordinates,0,i)},LineString:i},o={"EPSG:4549":"CGCS_GAUSS_3_ZONE_40","EPSG:4326":"EPSG:4326"};r.PointFeature=e,r.LineFeature=class extends e{constructor(){super(),this.type="Line",this._meshList=[]}get meshList(){return this._meshList}addMesh(e){this._meshList.push(e)}clearMesh(){this._meshList.length=0}},r.GeoJsonParser=class{constructor(e){this._viewer=e}parse(e,t){let i=a[e.type];if(!r.Utils.isDefined(i))return void console.log("Unsupported GeoJSON object type: "+e.type);let n=e.crs,s=null;if(r.Utils.isDefined(n)){if(!r.Utils.isDefined(n.properties))return void console.log("crs.properties is undefined.");if(s=function(e){const t=e.properties;let i=null;"name"===e.type?(i=o[t.name],r.Utils.isDefined(i)||console.log(`Unknown crs name: ${t.name}`)):"EPSG"===e.type?(i=o["EPSG:"+t.code],r.Utils.isDefined(i)||console.log(`Unknown crs EPSG code: ${t.code}`)):console.log(`Unknown crs type: ${e.type}`);return i}(n),!r.Utils.isDefined(s))return void console.log("Unknown crs type")}return i(e,s,t,this._viewer),this.features}}}();r.BatchTable=class{constructor(e,t,i){void 0!==t&&console.warn("Binary batch table content not supported yet."),this.content=e,null!=i?this.batchLength=i:0===Object.keys(this.content).length?(console.warn("Batch table is empty."),this.batchLength=0):this.batchLength=this.content[Object.keys(this.content)[0]].length,this.extensions={}}getPickingInfo(e){const t={};if(0===this.batchLength)return;if(e<0)throw new Error(`Batch Id (${e}) must be positive to access\n feature properties from the batch table.`);if(!(e<this.batchLength))throw new Error(`Batch Id (${e}) must be inferior to batch length\n (${this.batchLength}) to access feature properties in batch\n table.`);Object.keys(this.content).forEach((i=>{t[i]=this.content[i][e]}));const i={BatchTable:t};return this.extensions&&Object.keys(this.extensions).forEach((t=>{const r={[t]:this.extensions[t].getPickingInfo(e)};Object.assign(i,r)})),i}removeExtensionFromContent(e){this.content.extensions[e]&&delete this.content.extensions[e],0===Object.keys(this.content.extensions).length&&delete this.content.extensions}};class V{constructor(){}}V.parse=function(e,t,i){let n,a=e;t>0&&(n=e.slice(e.byteLength-t),a=e.slice(0,e.byteLength-t));const s=new TextDecoder("utf-8").decode(new Uint8Array(a)),o=JSON.parse(s),l=new r.BatchTable(o,n,i);return Promise.all([]).then((()=>l))},r.BatchTableParser=V,r.B3dmParser=class{constructor(){this.utf8Decoder=new TextDecoder("utf-8"),this.glTFLoader=new THREE.GLTFLoader,this.glTF2Loader=new THREE.GLTF2Loader,this.matrixChangeUpVectorZtoY=(new THREE.Matrix4).makeRotationX(Math.PI/2),this.matrixChangeUpVectorZtoX=(new THREE.Matrix4).makeRotationZ(-Math.PI/2)}b3dmToMesh(e,t){var i={gltfUpAxis:void 0,urlBase:THREE.LoaderUtils.extractUrlBase(t),overrideMaterials:!1,doNotPatchMaterial:void 0,opacity:1};return this.parse(e,i).then((function(e){return{batchTable:e.batchTable,object3d:e.gltf.scene}}))}filterUnsupportedSemantics(e){const t=["MODELVIEW","MODELVIEWINVERSETRANSPOSE","PROJECTION","JOINTMATRIX"];if(e.gltfShader){const i=[];for(const t in e.gltfShader.boundUniforms)i.push(t);for(const r of i){const i=e.gltfShader.boundUniforms[r].semantic;t.includes(i)||delete e.gltfShader.boundUniforms[r]}}}parse(e,t){var i=this;const n=t.gltfUpAxis,a=t.urlBase;if(!e)throw new Error("No array buffer provided.");const s=new DataView(e,4);let o=0;const l={};if(l.magic=i.utf8Decoder.decode(new Uint8Array(e,0,4)),l.magic){l.version=s.getUint32(o,!0),o+=Uint32Array.BYTES_PER_ELEMENT,l.byteLength=s.getUint32(o,!0),o+=Uint32Array.BYTES_PER_ELEMENT,l.FTJSONLength=s.getUint32(o,!0),o+=Uint32Array.BYTES_PER_ELEMENT,l.FTBinaryLength=s.getUint32(o,!0),o+=Uint32Array.BYTES_PER_ELEMENT,l.BTJSONLength=s.getUint32(o,!0),o+=Uint32Array.BYTES_PER_ELEMENT,l.BTBinaryLength=s.getUint32(o,!0),o+=Uint32Array.BYTES_PER_ELEMENT;const d=o+4,h=[];let c={};const u=new THREE.Vector3;if(l.FTJSONLength>0){const t=d,r=e.slice(t,l.FTJSONLength+t),n=i.utf8Decoder.decode(new Uint8Array(r));c=JSON.parse(n),c.RTC_CENTER?u.fromArray(c.RTC_CENTER):u.set(0,0,0)}if(l.FTBinaryLength>0&&console.warn("3D Tiles feature table binary not supported yet."),l.BTJSONLength>0){const t=d+l.FTJSONLength+l.FTBinaryLength;h.push(r.BatchTableParser.parse(e.slice(t,l.BTJSONLength+t),l.BTBinaryLength,c.BATCH_LENGTH))}else h.push(Promise.resolve({}));const p=d+l.FTJSONLength+l.FTBinaryLength+l.BTJSONLength+l.BTBinaryLength,m=e.slice(p),f=new DataView(m,0,20);return h.push(new Promise((e=>{const r=r=>{for(const e of r.scenes)e.traverse(i.filterUnsupportedSemantics);void 0===n||"Y"===n?r.scene.applyMatrix4(i.matrixChangeUpVectorZtoY):"X"===n&&r.scene.applyMatrix4(i.matrixChangeUpVectorZtoX),r.scene.position.copy(u);const a=new Uint8Array(m,20,f.getUint32(12,!0)),s=i.utf8Decoder.decode(new Uint8Array(a)),o=JSON.parse(s);o.extensions&&o.extensions.CESIUM_RTC&&(r.scene.position.fromArray(o.extensions.CESIUM_RTC.center),r.scene.updateMatrixWorld(!0)),r.scene.traverse((function(e){if(e.frustumCulled=!1,e.material){if(t.overrideMaterials){if(Array.isArray(e.material))for(const t of e.material)t.dispose();else e.material.dispose();"object"==typeof t.overrideMaterials&&t.overrideMaterials.isMaterial?e.material=t.overrideMaterials:e.material=new THREE.MeshLambertMaterial({color:16777215})}e.material.transparent=t.opacity<1,e.material.opacity=t.opacity}})),e(r)};1===f.getUint32(4,!0)?i.glTFLoader.parse(m,r,a):i.glTF2Loader.parse(m,r,a)}))),Promise.all(h).then((e=>({gltf:e[1],batchTable:e[0]})))}throw new Error("Invalid b3dm file.")}parseFeatureBinary(e,t,i){const r=new THREE.BufferGeometry,n=this.utf8Decoder.decode(new Uint8Array(e,t,i)),a=JSON.parse(n);let s;if(a.POINTS_LENGTH&&(s=a.POINTS_LENGTH),a.POSITION){const i=a.POSITION.byteOffset+n.length+t,o=new Float32Array(e,i,3*s);r.setAttribute("position",new THREE.BufferAttribute(o,3))}if(a.RGB){const i=a.RGB.byteOffset+n.length+t,o=new Uint8Array(e,i,3*s);r.setAttribute("color",new THREE.BufferAttribute(o,3,!0))}if(a.POSITION_QUANTIZED)throw new Error("For pnts loader, POSITION_QUANTIZED: not yet managed");if(a.RGBA)throw new Error("For pnts loader, RGBA: not yet managed");if(a.RGB565)throw new Error("For pnts loader, RGB565: not yet managed");if(a.NORMAL){const i=a.RGB.byteOffset+n.length+t,o=new Float32Array(e,i,3*s);r.setAttribute("normal",new THREE.BufferAttribute(o,3))}if(a.NORMAL_OCT16P)throw new Error("For pnts loader, NORMAL_OCT16P: not yet managed");if(a.BATCH_ID)throw new Error("For pnts loader, BATCH_ID: not yet managed");return{geometry:r,offset:a.RTC_CENTER?(new THREE.Vector3).fromArray(a.RTC_CENTER):void 0}}},function(){class e extends r.AbstractTileContent{constructor(e,t){super(e,t),this._loader=e._loader}destroy(){super.destroy(),this._loader=void 0}parseTileContent(e){this._loader.parseTileContent(this._tile,this._contentBuffer,(function(t){e(t)}))}attachToTilesGroup(e){e.object3d?this._addB3dmMesh(e.object3d):this._addPointMesh(e.point)}_addB3dmMesh(e){const t=this._tile._tileset._objectGroup,i=this.meshes;for(let t=0,r=e.children.length;t<r;++t)i.add(e.children[0]);t.add(i),t.updateMatrixWorld(!0)}_addPointMesh(e){const t=this._tile._tileset._objectGroup,i=this.meshes,r=new THREE.PointsMaterial({size:.05,vertexColors:THREE.VertexColors}),n=new THREE.Points(e.geometry,r);e.offset&&n.position.copy(e.offset),i.add(n),t.add(i),t.updateMatrixWorld(!0)}}r.$3dTileContent=e}(),function(){class e extends r.AbstractTile{constructor(e,t,i,r){super(e,t),this._loader=e._loader,this._header=i,this._contentFolder=r,this.matrix=null,this.initialize()}destroy(){super.destroy(),this.matrix=void 0,this._loader=void 0,this._header=void 0,this._contentFolder=void 0}initialize(){this._parseTile(this._tileset,this,this._header,this._contentFolder)}_parseTile(e,t,i,n){if(t.boundingBox=r.TilesUtil.getBox(i.boundingVolume),i.refine?("replace"!==i.refine&&"add"!==i.refine||console.warn("lowercase-refine",'This tile uses a lowercase refine "'+i.refine+'". Instead use "'+i.refine.toUpperCase()+'".'),t.refineReplace="REPLACE"===i.refine.toUpperCase()):t.parent?t.refineReplace=t.parent.refineReplace:t.refineReplace=!0,t.geometricError=i.geometricError,i.content?(t.contentUrl=i.content.uri||i.content.url,t.contentUrl.endsWith(".b3dm")?t.contentType=r.TileContentType.DATA_B3DM:t.contentUrl.endsWith(".json")?t.contentType=r.TileContentType.DATA_TILE:t.contentUrl.endsWith(".pnts")?t.contentType=r.TileContentType.DATA_POINT:t.contentType=r.TileContentType.DATA_NULL,t.contentIndex=n+t.contentUrl):t.contentType=r.TileContentType.DATA_NULL,t.contentTypeEmpty&&(t._contentState=r.TileContentState.READY),i.transform&&(t.matrix=(new THREE.Matrix4).fromArray(i.transform)),i.children)for(const a of i.children)new r.$3dTileNode(e,t,a,n)}fetchContentBlock(e,t,i){this._loader.loadArrayBufferImmediately(e,(function(e){t(e)}),(function(e){i(e)}))}createContent(e){return new r.$3dTileContent(this,e)}}r.$3dTileNode=e}(),r.$3dTileLoader=class{constructor(){this.jsonLoader=new THREE.FileLoader,this.jsonLoader.setResponseType("json"),this.arrayBufferLoader=new THREE.FileLoader,this.arrayBufferLoader.setResponseType("arraybuffer"),this.taskRunner=new r.LoadTaskRunner(6),this.utf8Decoder=new TextDecoder("utf-8"),this.b3dmParser=new r.B3dmParser,this.pntParser=new r.PntsParser}destroy(){this.jsonLoader=null,this.arrayBufferLoader=null,this.taskRunner=null,this.utf8Decoder=null,this.b3dmParser=null,this.pntParser=null}loadJson(e,t,i){this.taskRunner.push(this.jsonLoader,e,t,(function(e){i&&i(e)}))}loadArrayBuffer(e,t,i){this.taskRunner.push(this.arrayBufferLoader,e,t,(function(e){i&&i(e)}))}loadArrayBufferImmediately(e,t,i){this.arrayBufferLoader.load(e,(function(e){t(e)}),void 0,(function(){i&&i(event)}))}parseTileContent(e,t,i){if(!t)return;const r=this,n=r.utf8Decoder.decode(new Uint8Array(t,0,4));if("{"!==n[0])if("b3dm"==n){console.log("b3dm is load");const n=e.getAbsoluteContentUrl();r.b3dmParser.b3dmToMesh(t,n).then((e=>{i(e)}))}else"pnts"==n?(console.log("pnts is load"),r.pntParser.parse(t).then((e=>{i(e)}))):console.log("Unsupported magic code:"+n)}},function(){class e extends r.AbstractTileset{constructor(e){super(e),this._loader=e.loader,this.maximumScreenSpaceError=void 0}destroy(){super.destroy(),this._loader=void 0}loadTileset(e,t){const i=this;this._loader.loadJson(e,void 0,(function(n){const a=e.slice(0,e.lastIndexOf("/")+1),s=i.createTile(a,n.context);void 0===s&&r.Error.throwError(r.ERRORS.DEVELOPE_EXCEPTION,"Tile data error!"),i.root=s,i._boundingBox=s.boundingBox.clone(),i.maximumScreenSpaceError=s.geometricError*r.TilesUtil.OP_GEOMETRIC_ERROR_COEFFICIENT,t&&t(i)}))}createTile(e,t,i){if(t.root&&t.root.boundingVolume)return new r.$3dTileNode(this,i,t.root,e)}loadChildrenOfTile(e,t,i){const r=this,n=e.getAbsoluteContentUrl(),a=n.slice(0,n.lastIndexOf("/")+1);this._loader.loadJson(n,t,(function(t){if(r.isDestroyed())return;const n=r.createTile(a,t.context,e);i&&i(n)}))}updateFrameState(e){e.transformMatrix=this._transformMatrix,e.maximumScreenSpaceError=this.maximumScreenSpaceError}updateGlobalMatrix(e){this._objectGroup.matrix.copy(e),this._objectGroup.matrix.multiplyMatrices(e,this._transformMatrix),this._objectGroup.matrixAutoUpdate=!1,this._objectGroup.updateMatrixWorld(!0)}statisticsMeshInformation(){for(var e={meshCount:0,visibleCount:0},t=this._objectGroup.children,i=0,n=t.length;i<n;i++){var a=t[i];r.Utils.isGroupObject(a)&&(e.meshCount++,a.visible&&e.visibleCount++)}return e}hideAllMesh(){for(var e in this._objectGroup.children)this._objectGroup.children[e].visible=!1}}r.$3dTileset=e}(),function(){class e extends r.BaseModel{constructor(e,t,i,n,a,s){super(t,i),this.viewer=e,this.index=n,this.parseCfgFinish=a,this.debut=s,this.url=i.serverUrl+""+i.databagId+"/tileset.json",this.tilesLoader=new r.$3dTileLoader,this.objectGroup=t.getScene().getOrCreateObjectGroup(r.GlobalData.TdTileGroupName,{pickableType:r.PICKABLETYPE.Geometry,globalSpace:!0}),i.loadConfig&&i.loadConfig.transformMatrix?(this.setTransformMatrix(i.loadConfig.transformMatrix),this.objectGroup.transformMatrix=this.transformMatrix):(this.setTransformMatrix(new THREE.Matrix4),this.objectGroup.transformMatrix=this.transformMatrix),this._tileset=new r.$3dTileset({loader:this.tilesLoader,objectGroup:this.objectGroup,transformMatrix:this.transformMatrix,tilesCacheScheduler:this.manager.tilesCacheScheduler,debugShowBoundingBox:e._options.debugShowBoundingBox,debugShowStatistics:e._options.debugShowStatistics,databagId:this.databagId}),this._modelMatrix=new THREE.Matrix4}destroy(){super.destroy(),this._tileset=this._tileset&&this._tileset.destroy(),this.manager.scene.removeObjectGroupByName(r.GlobalData.TdTileGroupName),this.objectGroup=null,this.tilesLoader.destroy(),this.tilesLoader=null,this._modelMatrix=null,this.parseCfgFinish=null,this.debut=null,this.viewer=null}load(e){var t=this;this.manager.chooseRendering(this.statistics.memoeryInfo,!0),this.parseCfgFinish&&this.parseCfgFinish(),this.manager.dispatchEvent({type:r.EVENTS.ON_LOAD_START});return new Promise(((e,i)=>{this._tileset.loadTileset(this.url,(function(i){t.getTransforms().boundingBox=i._boundingBox.clone(),t.manager.updateScene(t);var n=t.viewer.getScene().getRawMatrixGlobal();i.updateGlobalMatrix(n),t.manager.dispatchEvent({type:r.EVENTS.ON_LOAD_COMPLETE,modelId:t.id}),t.debut(t),e()}))}))}updateMatrix(){const e=this.viewer.getScene().getRawMatrixGlobal();this._tileset.updateGlobalMatrix(e)}hasTransforms(){return!0}preUpdate(e){this._tileset.preUpdate(e)}update(e){this._tileset.update(e)}postUpdate(e){this._tileset.postUpdate(e)}setVisible(e){this.visible=e,this.objectGroup.visible!==e&&(this.objectGroup.visible=e,this.objectGroup.pickableType=e?r.PICKABLETYPE.Geometry:r.PICKABLETYPE.UnPickable,this.manager.setRenderStateChanged(!0))}get sequence(){return this._tileset.sequence}set sequence(e){this._tileset.sequence=e}}r.$3dTilesModel=e}(),r.Tile=r.Tile||{};r.Tile.DemUrl=class{constructor(e){if(this.terrainPath=e,-1===e.indexOf("terrain.")){this.terrainPath=`${e}{z}/{x}/{y}.${r.GlobalData.TerrainZipResourceFileName}`;!0===e.indexOf("srtm/v1")>-1&&(this.terrainPath=`${e}{z}/{x}/{y}/${r.GlobalData.TerrainResourceFileName}`)}}terrainUrl(e,t,i){return r.Layer.ImageryProvider.getRequestMapUrl(this.terrainPath,t,i,e)}},function(){class e extends r.BaseModel{constructor(e,t){super(e.modelManager,{modelId:"earthModel"}),t=r.Utils.defaultValue(t,{}),this.radius=r.Utils.defaultValue(t.radius,5e3),this.autoRotation=r.Utils.defaultValue(t.autoRotation,!0),this.rotationSpeed=r.Utils.defaultValue(t.rotationSpeed,2*Math.PI/360),this.earthResource=r.Utils.defaultValue(t.earthResource,"earth_0_satellite_ch.basis"),this.isBasisResource=null==t.earthResource,this.spherePrecision=r.Utils.defaultValue(t.spherePrecision,100),this.animationTime=r.Utils.defaultValue(t.animationTime,5),this._baseGeoCoordinates=t._baseGeoCoordinates,this.focusLonLat=r.Utils.defaultValue(t.focusLonLat,{lon:null,lat:20,height:null}),this.viewer=e,this._rotationAngle=0,this._globeHomeCameraInfo=null,this.earth=null,this.earthMaterial=null,this.animator=null,this._maxRotationLon=Math.PI/THREE.Math.DEG2RAD,this._initEarthRatio=1.5}destroy(){this.earth=null,this.earthMaterial=null}get homeCameraInfo(){return this._globeHomeCameraInfo}setupEarth(){const e=this.viewer,t=this.earthGroup=e.getScene().getOrCreateObjectGroup(r.ObjectGroupType.GLOBALEARTH,{pickableType:r.PICKABLETYPE.UnPickable,globalSpace:!1});var i=new THREE.TextureLoader;const a=this;i.crossOrigin=!0,this.isBasisResource&&(i=r.MaterialUtil.getBasisTextureLoader()).detectSupport(new THREE.WebGLRenderer({antialias:!0}));const s=`${e._staticResourcesHost}/Earth/${this.earthResource}`;return new Promise(((r,o)=>{i.load(s,(i=>{i.encoding=THREE.GammaEncoding;var s=new THREE.SphereBufferGeometry(a.radius,a.spherePrecision,a.spherePrecision),o=a.earthMaterial=new THREE.MeshLambertMaterial({map:i,color:16777215}),l=a.earth=new THREE.Mesh(s,o);s.computeBoundingBox();const d=s.boundingBox;t.add(l),t.updateMatrixWorld(!0),a.getTransforms().boundingBox=d.clone(),a.modelLoaded=!0,this._setCamera(),a._globeHomeCameraInfo={position:e.camera.position.clone(),target:e.camera.target.clone(),up:e.camera.realUp.clone()||e.camera.up.clone(),zoom:e.camera.zoom},a.autoRotation?n(this,(()=>{r()})):r()}),void 0,(e=>{o()}))}))}_setCamera(){let e=this._baseGeoCoordinates.lon+Math.PI/THREE.Math.DEG2RAD;e>Math.PI/THREE.Math.DEG2RAD&&(e-=2*Math.PI/THREE.Math.DEG2RAD);const t=this.viewer.camera;this.focusLonLat.lon=r.Utils.defaultValue(this.focusLonLat.lon,e);const i=this.radius*this._initEarthRatio/Math.sin(.5*THREE.Math.DEG2RAD*t.fov),n=i-this.radius,a=r.Tile.TileMath.fromDegreesYUp(this.focusLonLat.lon,this.focusLonLat.lat,n,this.radius),s=new THREE.Vector3(-a.x,-a.y,-a.z);t.LookAt(new THREE.Vector3,s,THREE.Object3D.DefaultUp),this.focusLonLat.height=r.Utils.defaultValue(this.focusLonLat.height,i),this._maxRotationLat=this._baseGeoCoordinates.lat-this.focusLonLat.lat,this._maxRotationLat=this._maxRotationLat>180?180:this._maxRotationLat}_autoRotationAnimation(e){const t=this;let i=t._globeHomeCameraInfo.position.clone();const r=new THREE.Vector3(0,1,0),n=new THREE.Vector3(0,0,0);window.requestAnimationFrame((function a(){let s=i.clone();s.applyAxisAngle(r,t.rotationSpeed),s.multiplyScalar(.998),i=s;const o=new THREE.Vector3(-s.x,-s.y,-s.z);t.viewer.camera.LookAt(n,o,THREE.Object3D.DefaultUp),t._rotationAngle<=1.5*Math.PI?(t._rotationAngle+=t.rotationSpeed,window.requestAnimationFrame(a)):e&&e()}))}_animation(e){const t=this.viewer,i=t.camera,n=this._globeHomeCameraInfo.position.clone(),a=Math.tan(.5*THREE.Math.DEG2RAD*i.fov),s=r.Tile.TileMath.fromDegreesYUp(this._baseGeoCoordinates.lon,this._baseGeoCoordinates.lat,a,this.radius);let o=new THREE.Vector3(0,0,0);const l={position:s,target:o,up:THREE.Object3D.DefaultUp,zoom:i.zoom};var d={position:n,target:o,up:THREE.Object3D.DefaultUp,zoom:i.zoom};this.animator.active(d,l,t,(function(e){t.cameraControl.update(!0,!0)}),(function(){e&&e()}))}}let t=1,i=new THREE.Vector3(0,0,0);function n(e,a){const s=e.viewer,o=s.cameraControl,l=o.camera,d=l.position.clone(),h=1-t/e.animationTime,c=h*(e.focusLonLat.height-e.focusLonLat.height/e._initEarthRatio)+e.focusLonLat.height/e._initEarthRatio-e.radius;let u=e.focusLonLat.lon+(1-h)*e._maxRotationLon;u>Math.PI/THREE.Math.DEG2RAD&&(u-=2*Math.PI/THREE.Math.DEG2RAD);let p=e.focusLonLat.lat+(1-h)*e._maxRotationLat;const m={position:r.Tile.TileMath.fromDegreesYUp(u,p,c,e.radius),target:i,up:THREE.Object3D.DefaultUp,zoom:l.zoom};var f={position:d,target:i,up:THREE.Object3D.DefaultUp,zoom:l.zoom};t++;const g=new r.CameraAnimator;g.setDuration(1e3),g.active(f,m,s,(function(e){o.update(!0,!0)}),(function(){t<=e.animationTime?n(e,a):a&&a()}))}r.VirtualEarth=e}();r.Tile.TextureLayer=class{constructor(e,t){this._url=t.url,this.imageryProviderType=r.Utils.defaultValue(t.imageryProviderType,"UrlTemplate"),this.imageryProvider=new r.Layer.ImageryProviderFactory[this.imageryProviderType]({mapUrl:this._url}),this.id=t.layerId||r.Utils.getEncodedString(this._url),this.hasTileMapResource=t.hasTileMapResource||!1,this.layerName=void 0===t.layerName?r.ObjectGroupType.ROADNETWORK:t.layerName,this.tileGroup=e.getScene().getOrCreateObjectGroup(this.layerName,{pickableType:r.PICKABLETYPE.Map,globalSpace:!0}),this._priority=0,this.materialMap={},this.meshNodeMap={},this.loadStateMap={},this._opacity=1,this.mapStyle={},this._fetchMetadata()}destroy(){this.url=void 0,this.priority=void 0,this.opacity=void 0,this.disposeMaterial(),this.disposeMeshNode(),this.loadStateMap=null,this.tileGroup.clear(),this.tileGroup=null,this.imageryProviderType=void 0,this.imageryProvider=null,this.mapStyle=null}_fetchMetadata(){if(!this.hasTileMapResource)return;const e=this._url.substring(0,this._url.indexOf("{")),t=r.DomUtil.loadXMLDoc(e+"tilemapresource.xml",!1);if(!t)return;const i=r.DomUtil.getXMLAttributeValues(t,"BoundingBox");this.boundingBox=i?new THREE.Box2(new THREE.Vector2(parseFloat(i.minx),parseFloat(i.miny)),new THREE.Vector2(parseFloat(i.maxx),parseFloat(i.maxy))):void 0;const n=r.DomUtil.getXMLAttributeValues(t,"TileFormat");this.tileFormat=n?{mimeType:n["mime-type"],extension:n.extension}:void 0;const a=r.DomUtil.getXMLAttributeValuesByAttrName(t,"TileSet","order");this.minLevel=1/0,this.maxLevel=-1/0,a.forEach((e=>{const t=parseInt(e);t>this.maxLevel&&(this.maxLevel=t),t<this.minLevel&&(this.minLevel=t)}))}getRequestUrl(e,t,i){return this.imageryProvider.getImageryUrl(e,t,i)}isAvailableTile(e,t,i){if(this.maxLevel&&(i<this.minLevel||i>this.maxLevel))return!1;if(this.boundingBox){const n=r.Tile.TileMath.long2tile(this.boundingBox.min.x,i),a=r.Tile.TileMath.long2tile(this.boundingBox.max.x,i),s=r.Tile.TileMath.lat2tile(this.boundingBox.min.y,i),o=r.Tile.TileMath.lat2tile(this.boundingBox.max.y,i),l=Math.min(s,o),d=Math.max(s,o);if(e<n||e>a||t<l||t>d)return!1}return!0}contentLoaded(e,t,i){return this.loadStateMap[e]&&this.loadStateMap[e][t]&&this.loadStateMap[e][t][i]===r.Tile.DemTilesUtil.LOAD_STATE.LOADED}contentUnLoad(e,t,i){return void 0===this.loadStateMap[e]?(this.loadStateMap[e]={},this.loadStateMap[e][t]={},this.loadStateMap[e][t][i]=r.Tile.DemTilesUtil.LOAD_STATE.UNLOADED,!0):void 0===this.loadStateMap[e][t]?(this.loadStateMap[e][t]={},this.loadStateMap[e][t][i]=r.Tile.DemTilesUtil.LOAD_STATE.UNLOADED,!0):void 0===this.loadStateMap[e][t][i]?(this.loadStateMap[e][t][i]=r.Tile.DemTilesUtil.LOAD_STATE.UNLOADED,!0):this.loadStateMap[e][t][i]===r.Tile.DemTilesUtil.LOAD_STATE.UNLOADED}contentUnLoading(e,t,i){return this.loadStateMap[e][t][i]===r.Tile.DemTilesUtil.LOAD_STATE.MAT_PARSING}setContentUnLoad(e,t,i){this.loadStateMap[e][t][i]=r.Tile.DemTilesUtil.LOAD_STATE.UNLOADED}setContentLoaded(e,t,i){this.loadStateMap[e][t][i]=r.Tile.DemTilesUtil.LOAD_STATE.LOADED}setContentLoading(e,t,i){this.loadStateMap[e][t][i]=r.Tile.DemTilesUtil.LOAD_STATE.MAT_PARSING}disposeMeshNode(){for(var e in this.meshNodeMap)for(var t in this.meshNodeMap[e])for(var i in this.meshNodeMap[e][t])this.meshNodeMap[e][t][i]&&this.meshNodeMap[e][t][i].parent.remove(this.meshNodeMap[e][t][i]);this.meshNodeMap=null}disposeMaterial(){for(var e in this.materialMap)for(var t in this.materialMap[e])for(var i in this.materialMap[e][t])this.materialMap[e][t][i]&&this.materialMap[e][t][i].dispose();this.materialMap=null}get opacity(){return this._opacity}set opacity(e){this._opacity=e}get url(){return this._url}set url(e){this._url=e}get priority(){return this._priority}set priority(e){this._priority=e}show(){this.tileGroup?this.tileGroup.visible=!0:console.warn("The tile doesn't exist.")}hide(){this.tileGroup?this.tileGroup.visible=!1:console.warn("The tile doesn't exist.")}setStyle(e){for(var t in this.mapStyle=e,this.materialMap){var i=this.materialMap[t];i.updateStyle&&i.updateStyle(e)}}updateMeshRenderOrder(e){for(let t in this.meshNodeMap)for(let i in this.meshNodeMap[t])for(let r in this.meshNodeMap[t][i])this.meshNodeMap[t][i][r]&&(this.meshNodeMap[t][i][r].renderOrder=e)}},function(){class e{constructor(){}}e.LOAD_STATE={UNLOADED:0,GEO_LOADING:1,GEO_LOADED:2,MAT_PARSING:3,LOADED:4,FAILED:5},e.TWO_ACCURACY=.01,e.InvalidTerrainValue=-32768,e.isTransparent=function(t){return 1-t>e.TWO_ACCURACY},r.Tile.DemTilesUtil=e}();r.Tile.DemTile=class{constructor(e,t,i){this.zoom=e,this.x=t,this.y=i,this.longLatBox=r.Tile.TileMath.tile2boundingBox(t,i,e),this.box=null,this.meshNode=null,this.meshLoadState=r.Tile.DemTilesUtil.LOAD_STATE.UNLOADED,this.skirt=null,this.geometry=null,this.skirtGeometry=null,this.texture=null,this.material=null,this.needUpdateTexture=!1}destroy(){this.zoom=null,this.x=null,this.y=null,this.longLatBox=null,this.box=null,this.geometryLoadState=null,this.skirt&&this.skirt.parent.remove(this.skirt),this.meshNode&&(this.meshNode.parent.remove(this.meshNode),this.material.dispose(),this.texture.dispose()),this.geometry&&this.geometry.dispose(),this.skirtGeometry&&this.skirtGeometry.dispose(),this.meshNode=null,this.skirt=null,this.geometry=null,this.skirtGeometry=null,this.texture=null,this.material=null,this.needUpdateTexture=void 0}},function(){r.Tile=r.Tile||{};class e{constructor(){}}e.earthRadius=6371e3,e.mercatorPerimeter=20037508.3427892,e.unitScale=1e3,e.earthHighestAltitude=8865.43*e.unitScale*2,e.isLongitude=function(e){return e>=-180&&e<=180},e.isLatitude=function(e){return e>=-85.0511&&e<=85.0511},e.long2tile=function(e,t){return Math.floor((e+180)/360*Math.pow(2,t))},e.lat2tile=function(e,t){return Math.floor((1-Math.log(Math.tan(e*Math.PI/180)+1/Math.cos(e*Math.PI/180))/Math.PI)/2*Math.pow(2,t))},e.tile2long=function(e,t){return e/Math.pow(2,t)*360-180},e.tile2lat=function(e,t){var i=Math.PI-2*Math.PI*e/Math.pow(2,t);return 180/Math.PI*Math.atan(.5*(Math.exp(i)-Math.exp(-i)))},e.tile2boundingBox=function(e,t,i){return{north:this.tile2lat(t,i),south:this.tile2lat(t+1,i),west:this.tile2long(e,i),east:this.tile2long(e+1,i)}},e.boundingBox2Tiles=function(t,i,r,n,a){var s,o,l,d,h=[],c=e.long2tile(t,a),u=e.long2tile(i,a),p=e.lat2tile(r,a),m=e.lat2tile(n,a);s=Math.min(c,u),l=Math.max(c,u),o=Math.min(p,m),d=Math.max(p,m);for(var f=s;f<=l;f++)for(var g=o;g<=d;g++)h.push({tileX:f,tileY:g});return h},e.getMercatorPerimeterByLat=function(e,t){return(t=r.Utils.defaultValue(t,r.GIS.Ellipsoid.WGS84)).getPerimeterByLat(e)/2},e.wgs84ToGCJ02=function(t,i){var r=.006693421622965943,n=(i=+i,t=+t,e._transformLat(t-105,i-35)),a=e._transformLng(t-105,i-35),s=i/180*Math.PI,o=Math.sin(s);o=1-r*o*o;var l=Math.sqrt(o);return n=180*n/(e.earthRadius*(1-r)/(o*l)*Math.PI),[t+(a=180*a/(e.earthRadius/l*Math.cos(s)*Math.PI)),i+n]},e._transformLat=function(e,t){var i=2*(e=+e)-100+3*(t=+t)+.2*t*t+.1*e*t+.2*Math.sqrt(Math.abs(e));return i+=2*(20*Math.sin(6*e*Math.PI)+20*Math.sin(2*e*Math.PI))/3,i+=2*(20*Math.sin(t*Math.PI)+40*Math.sin(t/3*Math.PI))/3,i+=2*(160*Math.sin(t/12*Math.PI)+320*Math.sin(t*Math.PI/30))/3},e._transformLng=function(e,t){var i=300+(e=+e)+2*(t=+t)+.1*e*e+.1*e*t+.1*Math.sqrt(Math.abs(e));return i+=2*(20*Math.sin(6*e*Math.PI)+20*Math.sin(2*e*Math.PI))/3,i+=2*(20*Math.sin(e*Math.PI)+40*Math.sin(e/3*Math.PI))/3,i+=2*(150*Math.sin(e/12*Math.PI)+300*Math.sin(e/30*Math.PI))/3},e.lonLat2Mercator=function(t,i,r,n){r=r||e.mercatorPerimeter,n=n||e.unitScale;var a=new THREE.Vector2,s=t*r/180,o=Math.log(Math.tan((90+i)*Math.PI/360))/(Math.PI/180);return o=o*r/180,a.x=s*n,a.y=o*n,a},e.mercator2lonLat=function(t,i,r){i=i||e.mercatorPerimeter,r=r||e.unitScale;var n=new THREE.Vector2,a=t.x/(r*i)*180,s=t.y/(r*i)*180;return s=180/Math.PI*(2*Math.atan(Math.exp(s*Math.PI/180))-Math.PI/2),n.x=a,n.y=s,n},e.toRadians=function(e){return e*Math.PI/180},e.fromDegreesYUp=function(t,i,n,a){a=r.Utils.defaultValue(a,e.earthRadius);const s=(t+90)*(Math.PI/180),o=(90-i)*(Math.PI/180),l=Math.pow(a,2),d=new THREE.Vector3(l,l,l),h=Math.sin(o);var c=new THREE.Vector3;c.x=h*Math.sin(s),c.y=Math.cos(o),c.z=h*Math.cos(s),c.normalize();var u=new THREE.Vector3;u.multiplyVectors(d,c);var p=Math.sqrt(c.dot(u));return u.divideScalar(p),c.multiplyScalar(n),u.add(c)},e.fromDegrees=function(e,t,i,n){i=null==i?0:i,e=this.toRadians(e),t=this.toRadians(t);var a=new THREE.Vector3,s=new THREE.Vector3,o=r.Utils.isDefined(n)?n.radiiSquared:r.GIS.Ellipsoid.WGS84.radiiSquared,l=Math.cos(t);a.x=l*Math.cos(e),a.y=l*Math.sin(e),a.z=Math.sin(t),a.normalize(),s.multiplyVectors(o,a);var d=Math.sqrt(a.dot(s));return s.divideScalar(d),a.multiplyScalar(i),s.add(a)},e.createHeightArray=function(e,t){for(var i=new Array(t+1),r=0;r<i.length;r++)i[r]=new Array(t+1);var n=e.length,a=t/(n-1);for(r=0;r<n-1;++r)for(var s=0;s<n-1;++s)for(var o=[e[r][s],e[r][s+1],e[r+1][s],e[r+1][s+1]],l=this.sampleSquare(o,a),d=r*a;d<=(r+1)*a;++d)for(var h=s*a;h<=(s+1)*a;++h)i[d][h]=l[d-r*a][h-s*a];return i},e.sampleSquare=function(e,t){for(var i=new Array(t+1),r=0;r<i.length;r++)i[r]=new Array(t+1);for(r=0;r<=t;++r)i[0][r]=(t-r)/t*e[0]+(1-(t-r)/t)*e[1],i[t][r]=(t-r)/t*e[2]+(1-(t-r)/t)*e[3],i[r][0]=(t-r)/t*e[0]+(1-(t-r)/t)*e[2],i[r][t]=(t-r)/t*e[1]+(1-(t-r)/t)*e[3];for(r=1;r<t;++r)for(var n=1;n<t;++n)i[r][n]=i[r][0]+(i[r][t]-i[r][0])/t*n;return i},e.generateHeight=function(e,t){for(var i=e*t,r=new Uint8Array(i),n=this.improvedNoise(),a=1,s=100*Math.random(),o=0;o<4;o++){for(var l=0;l<i;l++){var d=l%e,h=~~(l/e);r[l]+=Math.abs(n.noise(d/a,h/a,s)*a*1.75)}a*=5}return r},e.improvedNoise=function(){for(var e=[151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208,89,18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180],t=0;t<256;t++)e[256+t]=e[t];function i(e){return e*e*e*(e*(6*e-15)+10)}function r(e,t,i){return t+e*(i-t)}function n(e,t,i,r){var n=15&e,a=n<8?t:i,s=n<4?i:12==n||14==n?t:r;return(0==(1&n)?a:-a)+(0==(2&n)?s:-s)}return{noise:function(t,a,s){var o=Math.floor(t),l=Math.floor(a),d=Math.floor(s),h=255&o,c=255&l,u=255&d,p=(t-=o)-1,m=(a-=l)-1,f=(s-=d)-1,g=i(t),v=i(a),y=i(s),M=e[h]+c,E=e[M]+u,b=e[M+1]+u,x=e[h+1]+c,I=e[x]+u,T=e[x+1]+u;return r(y,r(v,r(g,n(e[E],t,a,s),n(e[I],p,a,s)),r(g,n(e[b],t,m,s),n(e[T],p,m,s))),r(v,r(g,n(e[E+1],t,a,f),n(e[I+1],p,a,s-1)),r(g,n(e[b+1],t,m,f),n(e[T+1],p,m,f))))}}},r.Tile.TileMath=e}(),function(){r.Tile=r.Tile||{};class e extends r.Tile.TileMath{constructor(){super()}}e.isLatitude=function(e){return e>=-90&&e<=90},e.long2tile=function(t,i){return Math.floor(Math.pow(2,i-26)*t*Math.PI*e.earthRadius/180)},e.lat2tile=function(t,i){return Math.floor(Math.pow(2,i-26)*e.earthRadius*Math.log(Math.tan(t*Math.PI/180)+Math.cos(t*Math.PI/180)))},r.Tile.TileMathBd=e}();r.Tile.TerrainScheduler=class{constructor(e,t){this.limit=e,this.bufferSize=t,this.store=[],this.active=0,this.taskInfo={},this.terrainLoader=new THREE.FileLoader,this.terrainLoader.setResponseType("arraybuffer"),this.terrainLoader.crossOrigin=!0}destroy(){this.limit=null,this.store=null,this.active=null,this.taskInfo=null,this.bufferSize=null,this.terrainLoader=null}clear(){this.taskInfo={}}next(){if(this.store.length){var e=this.store.shift(),t=e[0],i=e[1],r=e[2];this.taskInfo[t].added?this.taskInfo[t].data?"failure"==scope.taskInfo[t].data?r():i(this.taskInfo[t].data):(this.taskInfo[t].successCallbackList.push(i),this.taskInfo[t].failureCallbackList.push(r)):this.runTask(t)}}runTask(e){var t=this;t.active++,t.taskInfo[e].added=!0,t.terrainLoader.load(e,(function(i){t.active--,t.taskInfo[e].data=i;for(var r=0,n=t.taskInfo[e].successCallbackList.length;r<n;++r)t.taskInfo[e].successCallbackList[r](i);t.next()}),void 0,(function(i){t.active--,t.taskInfo[e].data="failure";for(var r=0,n=t.taskInfo[e].failureCallbackList.length;r<n;++r)t.taskInfo[e].failureCallbackList[r]();t.next()}))}push(e,t,i){this.taskInfo[e]?this.taskInfo[e].data?t(this.taskInfo[e].data):(this.taskInfo[e].successCallbackList.push(t),this.taskInfo[e].failureCallbackList.push(i)):(this.taskInfo[e]={},this.taskInfo[e].successCallbackList=[t],this.taskInfo[e].failureCallbackList=[i],this.active<this.limit?this.runTask(e):this.store.push([e,t,i]))}};r.Tile.TileBuilder=class{constructor(){this.indexMap={},this.uvMap={}}destroy(){this.indexMap=null,this.uvMap=null}getIndexBySeg(e){if(this.indexMap[e])return this.indexMap[e];for(var t=[],i=[],r=0,n=0;n<=e;n++){for(var a=[],s=0;s<=e;s++)a.push(r),r++;i.push(a)}for(n=0;n<e;n++)for(s=0;s<e;s++){const e=i[n][s+1],r=i[n][s],a=i[n+1][s],o=i[n+1][s+1];this.bufferize(o,r,e,t),this.bufferize(o,a,r,t)}return this.indexMap[e]=t,t}bufferize(e,t,i,r){r.push(e),r.push(t),r.push(i)}computeBuffer(){}createSkirt(e,t,i,r,n,a){e=e.concat(t.reverse());var s=[];const o=(new THREE.Vector3).fromArray(n.position).distanceTo((new THREE.Vector3).fromArray(n.position,3));for(var l=0;l<e.length;l++){const t=e[l],a=3*i,d=3*t;n.position[a+0]=n.position[d+0]-n.normal[d+0]*o,n.position[a+1]=n.position[d+1]-n.normal[d+1]*o,n.position[a+2]=n.position[d+2]-n.normal[d+2]*o,n.normal[a+0]=n.normal[d+0],n.normal[a+1]=n.normal[d+1],n.normal[a+2]=n.normal[d+2],n.uvs[2*i+0]=n.uvs[2*t+0],n.uvs[2*i+1]=n.uvs[2*t+1];const h=(l+1)%e.length,c=t,u=i,p=0===h?r:i+1,m=e[h];this.bufferize(c,u,p,s),this.bufferize(c,p,m,s),i++}return a=a.concat(s)}createSkirt2(e,t,i,r,n,a){e=e.concat(t.reverse());var s=[];const o=(new THREE.Vector3).fromArray(n.position).distanceTo((new THREE.Vector3).fromArray(n.position,3));var l={index:null,position:null,normal:null,uvs:[],center:null};const d=4*(e.length/4)*2;l.position=new Float32Array(3*d),l.normal=new Float32Array(3*d),l.uvs=new Float32Array(3*d);for(var h=0;h<e.length;h++){const t=e[h],i=6*h,r=4*h,a=3*t;l.position[i+0]=n.position[a+0],l.position[i+1]=n.position[a+1],l.position[i+2]=n.position[a+2],l.position[i+3]=n.position[a+0]-n.normal[a+0]*o,l.position[i+4]=n.position[a+1]-n.normal[a+1]*o,l.position[i+5]=n.position[a+2]-n.normal[a+2]*o,l.normal[i+0]=n.normal[a+0],l.normal[i+1]=n.normal[a+1],l.normal[i+2]=n.normal[a+2],l.normal[i+3]=n.normal[a+0],l.normal[i+4]=n.normal[a+1],l.normal[i+5]=n.normal[a+2],l.uvs[r+0]=n.uvs[2*t+0],l.uvs[r+1]=n.uvs[2*t+1],l.uvs[r+2]=n.uvs[2*t+0],l.uvs[r+3]=n.uvs[2*t+1];const d=(h+1)%e.length,c=2*h,u=2*h+1,p=0===d?1:2*h+3,m=0===d?0:2*h+2;this.bufferize(c,u,p,s),this.bufferize(c,p,m,s)}l.index=s;var c=new THREE.BufferGeometry;return c.setIndex(l.index),c.setAttribute("position",new THREE.BufferAttribute(l.position,3)),c.setAttribute("uv",new THREE.BufferAttribute(l.uvs,2)),c.setAttribute("normal",new THREE.Float32BufferAttribute(l.normal,3)),c.computeVertexNormals(),c}},(()=>{let e=new THREE.Vector3,t=new THREE.Matrix4,i=new THREE.Vector2,n=new THREE.Vector2;class a extends r.Tile.TileBuilder{constructor(){super()}destroy(){}computePlaneGeometry(e,t,i,n,a,s){s=s||r.Tile.TileMath.unitScale;const o={index:null,position:null,normal:null,uvs:[],center:null},l=((i=null==i?16:i)+1)*(i+1);o.position=new Float32Array(3*l),o.normal=new Float32Array(3*l),o.uvs=new Float32Array(2*l);let d=[];const h=[];let c=0;for(var u=e/2,p=t/2,m=e/i,f=t/i,g=0;g<=i;++g){const e=[];for(var v=g*f-p,y=0;y<=i;++y){var M=y*m-u;o.position[3*c]=M,o.position[3*c+1]=v,o.position[3*c+2]=n[i-g][y]*s*r.GlobalData.TerrainScale,o.normal[3*c]=0,o.normal[3*c+1]=0,o.normal[3*c+2]=1,o.uvs[2*c]=y/i,o.uvs[2*c+1]=g/i,a||0!==g&&g!==i&&(y===i?d.push(c):0===y&&h.push(c)),e.push(c),c++}0===g?d=d.concat(e):g===i&&(d=d.concat(e.slice().reverse()))}var E=this.getIndexBySeg(i);const b=c;var x=null;a||(x=this.createSkirt2(d,h,c,b,o,E)),o.index=E;var I=new THREE.BufferGeometry;return I.setIndex(o.index),I.setAttribute("position",new THREE.BufferAttribute(o.position,3)),I.setAttribute("uv",new THREE.BufferAttribute(o.uvs,2)),I.setAttribute("normal",new THREE.Float32BufferAttribute(o.normal,3)),I.computeVertexNormals(),[I,x]}getTileGeometryTriangular(t,i,r){if(r){var n,a;null!=r.prePositionArray?(n=[...r.prePositionArray],a=[...r.preIndexArray]):(n=[...r.attributes.position.array],a=[...r.index.array]);for(var s=[],o=[],l=[],d=0;d<a.length;d+=3){var h=n[3*a[d]],c=n[3*a[d]+1],u=n[3*a[d]+2],p=n[3*a[d+1]],m=n[3*a[d+1]+1],f=n[3*a[d+1]+2],g=n[3*a[d+2]],v=n[3*a[d+2]+1],y=n[3*a[d+2]+2],M=0;e.set(h,c,u),e.applyMatrix4(i);var E=t.isInRegionDrawing(e);E&&M++,e.set(p,m,f),e.applyMatrix4(i);var b=t.isInRegionDrawing(e);if(b&&M++,e.set(g,v,y),e.applyMatrix4(i),t.isInRegionDrawing(e)&&M++,1==M){var x=[];if(E?(C={x:h,y:c,z:u},x.push({x:p,y:m,z:f}),x.push({x:g,y:v,z:y})):b?(C={x:p,y:m,z:f},x.push({x:h,y:c,z:u}),x.push({x:g,y:v,z:y})):(C={x:g,y:v,z:y},x.push({x:h,y:c,z:u}),x.push({x:p,y:m,z:f})),2==(T=t.getIntersectPos(C,x)).length&&T[0].index!=T[1].index&&null!=T[0].point){var I=T[0].point;t.checkHighLowTerrain([C.x,C.y,C.z],[T[0].x,T[0].y,T[0].z],[I.x,I.y,I.z],s,o,l),t.checkHighLowTerrain([C.x,C.y,C.z],[T[1].x,T[1].y,T[1].z],[I.x,I.y,I.z],s,o,l)}else 2==T.length&&t.checkHighLowTerrain([C.x,C.y,C.z],[T[0].x,T[0].y,T[0].z],[T[1].x,T[1].y,T[1].z],s,o,l)}else if(2==M){var T,C=[];if(E?b?(x={x:g,y:v,z:y},C.push({x:h,y:c,z:u}),C.push({x:p,y:m,z:f})):(x={x:p,y:m,z:f},C.push({x:h,y:c,z:u}),C.push({x:g,y:v,z:y})):(x={x:h,y:c,z:u},C.push({x:p,y:m,z:f}),C.push({x:g,y:v,z:y})),2==(T=t.getIntersectPos(x,C)).length&&T[0].index!=T[1].index&&null!=T[0].point){I=T[0].point;t.checkHighLowTerrain([C[0].x,C[0].y,C[0].z],[C[1].x,C[1].y,C[1].z],[I.x,I.y,I.z],s,o,l),t.checkHighLowTerrain([C[0].x,C[0].y,C[0].z],[T[0].x,T[0].y,T[0].z],[I.x,I.y,I.z],s,o,l),t.checkHighLowTerrain([C[1].x,C[1].y,C[1].z],[T[1].x,T[1].y,T[1].z],[I.x,I.y,I.z],s,o,l)}else 2==T.length&&(t.checkHighLowTerrain([C[0].x,C[0].y,C[0].z],[C[1].x,C[1].y,C[1].z],[T[0].x,T[0].y,T[0].z],s,o,l),t.checkHighLowTerrain([T[0].x,T[0].y,T[0].z],[T[1].x,T[1].y,T[1].z],[C[1].x,C[1].y,C[1].z],s,o,l))}else 3==M&&t.checkHighLowTerrain([h,c,u],[p,m,f],[g,v,y],s,o,l)}}return[s,o,l]}updateGeometryForFlatten(a,s,o,l,d,h,c,u,p,m,f){o=null==o?16:o;let g=0;if(t.copy(u).invert(),p){p.prePositionArray||(p.prePositionArray=[...p.attributes.position.array],p.preNormalArray=[...p.attributes.normal.array],p.preUVArray=[...p.attributes.uv.array],p.preIndexArray=[...p.index.array]);var v=[...p.prePositionArray],y=[...p.preNormalArray],M=[...p.preUVArray],E=[...p.preIndexArray],b={};if(!f)for(var x=[...E],I=0;I<x.length;I+=3){var T=v[3*x[I]],C=v[3*x[I]+1],w=p.prePositionArray[3*x[I]+2],S=v[3*x[I+1]],A=v[3*x[I+1]+1],B=p.prePositionArray[3*x[I+1]+2],R=v[3*x[I+2]],D=v[3*x[I+2]+1],O=p.prePositionArray[3*x[I+2]+2];e.set(T,C,w),e.applyMatrix4(u),e.y=e.z;var L=0;(de=c.isInFlattenRegionDrawing(e))&&L++,e.set(S,A,B),e.applyMatrix4(u),e.y=e.z,(he=c.isInFlattenRegionDrawing(e))&&L++,e.set(R,D,O),e.applyMatrix4(u),e.y=e.z,(ce=c.isInFlattenRegionDrawing(e))&&L++;var P=M[2*x[I]],N=M[2*x[I]+1],H=M[2*x[I+1]],F=M[2*x[I+1]+1],k=M[2*x[I+2]],U=M[2*x[I+2]+1];if(1==L)if(de){v[3*x[I]+2]=de.elevation*h*r.GlobalData.TerrainScale,(ue=b[de.id])||(ue=de.transformPolygon(t),b[de.id]=ue),i.set(T,C),n.set(S,A);var G=r.Utils.linePolygonIntersection(i,n,ue);i.set(R,D),n.set(T,C);var z=r.Utils.linePolygonIntersection(i,n,ue);v.push(G.x),v.push(G.y),v.push(B),v.push(z.x),v.push(z.y),v.push(O),v.push(G.x),v.push(G.y),v.push(de.elevation*h*r.GlobalData.TerrainScale),v.push(z.x),v.push(z.y),v.push(de.elevation*h*r.GlobalData.TerrainScale);var V=(G.x-T)/(S-T+r.Math.EPSILON6),j=(G.y-C)/(A-C+r.Math.EPSILON6),_=(z.x-R)/(T-R+r.Math.EPSILON6),W=(z.y-D)/(C-D+r.Math.EPSILON6);M.push(P+(H-P)*V),M.push(N+(F-N)*j),M.push(k+(P-k)*_),M.push(U+(N-U)*W),M.push(P+(H-P)*V),M.push(N+(F-N)*j),M.push(k+(P-k)*_),M.push(U+(N-U)*W),y.push(0),y.push(0),y.push(1),y.push(0),y.push(0),y.push(1),y.push(0),y.push(0),y.push(1),y.push(0),y.push(0),y.push(1);var Y=v.length/3;E.push(Y-4),E.push(Y-3),E.push(Y-1),E.push(Y-4),E.push(Y-1),E.push(Y-2),E.push(E[I+1]),E.push(E[I+2]),E.push(Y-3),E.push(E[I+1]),E.push(Y-3),E.push(Y-4),E[I+1]=Y-2,E[I+2]=Y-1}else if(he){v[3*x[I+1]+2]=he.elevation*h*r.GlobalData.TerrainScale,(ue=b[he.id])||(ue=he.transformPolygon(t),b[he.id]=ue),i.set(T,C),n.set(S,A);G=r.Utils.linePolygonIntersection(i,n,ue);i.set(S,A),n.set(R,D);var Z=r.Utils.linePolygonIntersection(i,n,ue);v.push(G.x),v.push(G.y),v.push(w),v.push(Z.x),v.push(Z.y),v.push(O),v.push(G.x),v.push(G.y),v.push(he.elevation*h*r.GlobalData.TerrainScale),v.push(Z.x),v.push(Z.y),v.push(he.elevation*h*r.GlobalData.TerrainScale);V=(G.x-T)/(S-T+r.Math.EPSILON6),j=(G.y-C)/(A-C+r.Math.EPSILON6);var Q=(Z.x-S)/(R-S+r.Math.EPSILON6),J=(Z.y-A)/(D-A+r.Math.EPSILON6);M.push(P+(H-P)*V),M.push(N+(F-N)*j),M.push(H+(k-H)*Q),M.push(F+(U-F)*J),M.push(P+(H-P)*V),M.push(N+(F-N)*j),M.push(H+(k-H)*Q),M.push(F+(U-F)*J),y.push(0),y.push(0),y.push(1),y.push(0),y.push(0),y.push(1),y.push(0),y.push(0),y.push(1),y.push(0),y.push(0),y.push(1);Y=v.length/3;E.push(Y-2),E.push(Y-1),E.push(Y-3),E.push(Y-2),E.push(Y-3),E.push(Y-4),E.push(E[I]),E.push(Y-4),E.push(Y-3),E.push(E[I]),E.push(Y-3),E.push(E[I+2]),E[I]=E[I+1],E[I+1]=Y-1,E[I+2]=Y-2}else{v[3*x[I+2]+2]=ce.elevation*h*r.GlobalData.TerrainScale,(ue=b[ce.id])||(ue=ce.transformPolygon(t),b[ce.id]=ue),i.set(T,C),n.set(R,D);var X=r.Utils.linePolygonIntersection(i,n,ue);i.set(R,D),n.set(S,A);var K=r.Utils.linePolygonIntersection(i,n,ue);v.push(X.x),v.push(X.y),v.push(w),v.push(K.x),v.push(K.y),v.push(B),v.push(X.x),v.push(X.y),v.push(ce.elevation*h*r.GlobalData.TerrainScale),v.push(K.x),v.push(K.y),v.push(ce.elevation*h*r.GlobalData.TerrainScale);var q=(X.x-T)/(R-T+r.Math.EPSILON6),$=(X.y-C)/(D-C+r.Math.EPSILON6),ee=(K.x-R)/(S-R+r.Math.EPSILON6),te=(K.y-D)/(A-D+r.Math.EPSILON6);M.push(P+(k-P)*q),M.push(N+(U-N)*$),M.push(k+(H-k)*ee),M.push(U+(F-U)*te),M.push(P+(k-P)*q),M.push(N+(U-N)*$),M.push(k+(H-k)*ee),M.push(U+(F-U)*te),y.push(0),y.push(0),y.push(1),y.push(0),y.push(0),y.push(1),y.push(0),y.push(0),y.push(1),y.push(0),y.push(0),y.push(1);Y=v.length/3;E.push(Y-4),E.push(Y-1),E.push(Y-2),E.push(Y-4),E.push(Y-3),E.push(Y-1),E.push(E[I]),E.push(E[I+1]),E.push(Y-3),E.push(E[I]),E.push(Y-3),E.push(Y-4),E[I]=E[I+2],E[I+1]=Y-2,E[I+2]=Y-1}else if(2==L)if(de)if(he){v[3*x[I]+2]=de.elevation*h*r.GlobalData.TerrainScale,v[3*x[I+1]+2]=he.elevation*h*r.GlobalData.TerrainScale,(fe=b[de.id])||(fe=de.transformPolygon(t),b[de.id]=fe),(me=b[he.id])||(me=he.transformPolygon(t),b[he.id]=me),i.set(T,C),n.set(R,D),(X=r.Utils.linePolygonIntersection(i,n,fe))||(X=r.Utils.linePolygonIntersection(i,n,me)),i.set(R,D),n.set(S,A),(K=r.Utils.linePolygonIntersection(i,n,fe))||(K=r.Utils.linePolygonIntersection(i,n,me)),v.push(X.x),v.push(X.y),v.push(de.elevation*h*r.GlobalData.TerrainScale),v.push(K.x),v.push(K.y),v.push(de.elevation*h*r.GlobalData.TerrainScale),v.push(X.x),v.push(X.y),v.push(O),v.push(K.x),v.push(K.y),v.push(O);q=(X.x-T)/(R-T+r.Math.EPSILON6),$=(X.y-C)/(D-C+r.Math.EPSILON6),ee=(K.x-R)/(S-R+r.Math.EPSILON6),te=(K.y-D)/(A-D+r.Math.EPSILON6);M.push(P+(k-P)*q),M.push(N+(U-N)*$),M.push(k+(H-k)*ee),M.push(U+(F-U)*te),M.push(P+(k-P)*q),M.push(N+(U-N)*$),M.push(k+(H-k)*ee),M.push(U+(F-U)*te),y.push(0),y.push(0),y.push(1),y.push(0),y.push(0),y.push(1),y.push(0),y.push(0),y.push(1),y.push(0),y.push(0),y.push(1);Y=v.length/3;E.push(E[I]),E.push(Y-3),E.push(Y-4),E.push(Y-4),E.push(Y-3),E.push(Y-1),E.push(Y-4),E.push(Y-1),E.push(Y-2),E.push(E[I+2]),E.push(Y-2),E.push(Y-1),E[I+2]=Y-3}else{v[3*x[I]+2]=de.elevation*h*r.GlobalData.TerrainScale,v[3*x[I+2]+2]=ce.elevation*h*r.GlobalData.TerrainScale,(fe=b[de.id])||(fe=de.transformPolygon(t),b[de.id]=fe),(ge=b[ce.id])||(ge=ce.transformPolygon(t),b[ce.id]=ge),i.set(T,C),n.set(S,A),(G=r.Utils.linePolygonIntersection(i,n,fe))||(G=r.Utils.linePolygonIntersection(i,n,ge)),i.set(S,A),n.set(R,D),(Z=r.Utils.linePolygonIntersection(i,n,fe))||(Z=r.Utils.linePolygonIntersection(i,n,ge)),v.push(G.x),v.push(G.y),v.push(de.elevation*h*r.GlobalData.TerrainScale),v.push(Z.x),v.push(Z.y),v.push(de.elevation*h*r.GlobalData.TerrainScale),v.push(G.x),v.push(G.y),v.push(B),v.push(Z.x),v.push(Z.y),v.push(B);V=(G.x-T)/(S-T+r.Math.EPSILON6),j=(G.y-C)/(A-C+r.Math.EPSILON6),Q=(Z.x-S)/(R-S+r.Math.EPSILON6),J=(Z.y-A)/(D-A+r.Math.EPSILON6);M.push(P+(H-P)*V),M.push(N+(F-N)*j),M.push(H+(k-H)*Q),M.push(F+(U-F)*J),M.push(P+(H-P)*V),M.push(N+(F-N)*j),M.push(H+(k-H)*Q),M.push(F+(U-F)*J),y.push(0),y.push(0),y.push(1),y.push(0),y.push(0),y.push(1),y.push(0),y.push(0),y.push(1),y.push(0),y.push(0),y.push(1);Y=v.length/3;E.push(E[I+2]),E.push(Y-4),E.push(Y-3),E.push(Y-2),E.push(Y-3),E.push(Y-4),E.push(Y-2),E.push(Y-1),E.push(Y-3),E.push(E[I+1]),E.push(Y-1),E.push(Y-2),E[I+1]=Y-4}else{v[3*x[I+1]+2]=he.elevation*h*r.GlobalData.TerrainScale,v[3*x[I+2]+2]=ce.elevation*h*r.GlobalData.TerrainScale,(me=b[he.id])||(me=he.transformPolygon(t),b[he.id]=me),(ge=b[ce.id])||(ge=ce.transformPolygon(t),b[ce.id]=ge),i.set(T,C),n.set(S,A),(G=r.Utils.linePolygonIntersection(i,n,me))||(G=r.Utils.linePolygonIntersection(i,n,ge)),i.set(R,D),n.set(T,C),(z=r.Utils.linePolygonIntersection(i,n,me))||(z=r.Utils.linePolygonIntersection(i,n,ge)),v.push(G.x),v.push(G.y),v.push(he.elevation*h*r.GlobalData.TerrainScale),v.push(z.x),v.push(z.y),v.push(he.elevation*h*r.GlobalData.TerrainScale),v.push(G.x),v.push(G.y),v.push(w),v.push(z.x),v.push(z.y),v.push(w);var V=(G.x-T)/(S-T+r.Math.EPSILON6),j=(G.y-C)/(A-C+r.Math.EPSILON6);_=(z.x-R)/(T-R+r.Math.EPSILON6),W=(z.y-D)/(C-D+r.Math.EPSILON6);M.push(P+(H-P)*V),M.push(N+(F-N)*j),M.push(k+(P-k)*_),M.push(U+(N-U)*W),M.push(P+(H-P)*V),M.push(N+(F-N)*j),M.push(k+(P-k)*_),M.push(U+(N-U)*W),y.push(0),y.push(0),y.push(1),y.push(0),y.push(0),y.push(1),y.push(0),y.push(0),y.push(1),y.push(0),y.push(0),y.push(1);var Y=v.length/3;E.push(E[I+1]),E.push(E[I+2]),E.push(Y-3),E.push(Y-4),E.push(Y-1),E.push(Y-2),E.push(Y-4),E.push(Y-3),E.push(Y-1),E.push(E[I]),E.push(Y-2),E.push(Y-1),E[I]=E[I+1],E[I+1]=Y-3,E[I+2]=Y-4}else 3==L&&(v[3*x[I]+2]=de.elevation*h*r.GlobalData.TerrainScale,v[3*x[I+1]+2]=he.elevation*h*r.GlobalData.TerrainScale,v[3*x[I+2]+2]=ce.elevation*h*r.GlobalData.TerrainScale)}p.setIndex(E),p.deleteAttribute("position"),p.deleteAttribute("uv"),p.deleteAttribute("normal"),p.setAttribute("position",new THREE.Float32BufferAttribute(v,3)),p.setAttribute("uv",new THREE.Float32BufferAttribute(M,2)),p.setAttribute("normal",new THREE.Float32BufferAttribute(y,3))}if(m){m.prePositionArray||(m.prePositionArray=[...m.attributes.position.array]);var ie=[...m.prePositionArray];if(!f){let a=[];const s=[];for(var re=0;re<=o;++re){const e=[];for(var ne=0;ne<=o;++ne)d||0!==re&&re!==o&&(ne===o?a.push(g):0===ne&&s.push(g)),e.push(g),g++;0===re?a=a.concat(e):re===o&&(a=a.concat(e.slice().reverse()))}var ae=y.slice(0,p.preNormalArray.length),se=v.slice(0,p.prePositionArray.length);a=a.concat(s.reverse());const l=(new THREE.Vector3).fromArray(se).distanceTo((new THREE.Vector3).fromArray(se,3));for(I=0;I<a.length;I++){const e=6*I,t=3*a[I];ie[e+2]=se[t+2],ie[e+5]=se[t+2]-ae[t+2]*l}var oe=m.index.array,le=[...ie];for(I=0;I<oe.length;I+=3){T=ie[3*oe[I]],C=ie[3*oe[I]+1],w=m.prePositionArray[3*oe[I]+2],S=ie[3*oe[I+1]],A=ie[3*oe[I+1]+1],B=m.prePositionArray[3*oe[I+1]+2],R=ie[3*oe[I+2]],D=ie[3*oe[I+2]+1],O=m.prePositionArray[3*oe[I+2]+2];e.set(T,C,w),e.applyMatrix4(u),e.y=e.z;var de,he,ce;L=0;if((de=c.isInFlattenRegionDrawing(e))&&L++,e.set(S,A,B),e.applyMatrix4(u),e.y=e.z,(he=c.isInFlattenRegionDrawing(e))&&L++,e.set(R,D,O),e.applyMatrix4(u),e.y=e.z,(ce=c.isInFlattenRegionDrawing(e))&&L++,1==L){if(de)(ue=b[de.id])||(ue=de.transformPolygon(t),b[de.id]=ue),i.set(T,C),n.set(S,A),pe=r.Utils.linePolygonIntersection(i,n,ue);else if(he){(ue=b[he.id])||(ue=he.transformPolygon(t),b[he.id]=ue),i.set(T,C),n.set(S,A),pe=r.Utils.linePolygonIntersection(i,n,ue)}else{var ue;(ue=b[ce.id])||(ue=ce.transformPolygon(t),b[ce.id]=ue),i.set(T,C),n.set(R,D),pe=r.Utils.linePolygonIntersection(i,n,ue)}pe&&(le[3*oe[I]]=pe.x,le[3*oe[I]+1]=pe.y,le[3*oe[I+1]]=pe.x,le[3*oe[I+1]+1]=pe.y,le[3*oe[I+2]]=pe.x,le[3*oe[I+2]+1]=pe.y)}else if(2==L){var pe;if(de)if(he){var me;(fe=b[de.id])||(fe=de.transformPolygon(t),b[de.id]=fe),(me=b[he.id])||(me=he.transformPolygon(t),b[he.id]=me),i.set(T,C),n.set(R,D),(pe=r.Utils.linePolygonIntersection(i,n,fe))||(pe=r.Utils.linePolygonIntersection(i,n,me))}else{var fe,ge;(fe=b[de.id])||(fe=de.transformPolygon(t),b[de.id]=fe),(ge=b[ce.id])||(ge=ce.transformPolygon(t),b[ce.id]=ge),i.set(T,C),n.set(S,A),(pe=r.Utils.linePolygonIntersection(i,n,fe))||(pe=r.Utils.linePolygonIntersection(i,n,ge))}else(me=b[he.id])||(me=he.transformPolygon(t),b[he.id]=me),(ge=b[ce.id])||(ge=ce.transformPolygon(t),b[ce.id]=ge),i.set(T,C),n.set(S,A),(pe=r.Utils.linePolygonIntersection(i,n,me))||(pe=r.Utils.linePolygonIntersection(i,n,ge));pe&&(le[3*oe[I]]=pe.x,le[3*oe[I]+1]=pe.y,le[3*oe[I+1]]=pe.x,le[3*oe[I+1]+1]=pe.y,le[3*oe[I+2]]=pe.x,le[3*oe[I+2]+1]=pe.y)}}ie=le}m.deleteAttribute("position"),m.setAttribute("position",new THREE.Float32BufferAttribute(ie,3))}}computeSideNormal(e,t,i,r){for(var n=t.length,a=0;a<n;++a){var s=t[a],o=r[a],l=(e.attributes.normal.array[3*s]+i.attributes.normal.array[3*o])/2;e.attributes.normal.array[3*s]=l,i.attributes.normal.array[3*o]=l;var d=(e.attributes.normal.array[3*s+1]+i.attributes.normal.array[3*o+1])/2;e.attributes.normal.array[3*s+1]=d,i.attributes.normal.array[3*o+1]=d;var h=(e.attributes.normal.array[3*s+2]+i.attributes.normal.array[3*o+2])/2;e.attributes.normal.array[3*s+2]=h,i.attributes.normal.array[3*o+2]=h}}computeNearNormal(e,t,i,r){for(var n=0,a=1,s=new Array(i+1),o=0;o<=i;++o)s[o]=n+a*o;n=0,a=i+1;var l=new Array(i+1);for(o=0;o<=i;++o)l[o]=n+a*o;n=i,a=i+1;var d=new Array(i+1);for(o=0;o<=i;++o)d[o]=n+a*o;n=i*(i+1),a=1;var h=new Array(i+1);for(o=0;o<=i;++o)h[o]=n+a*o;"left"===r&&this.computeSideNormal(e,l,t,d),"right"===r&&this.computeSideNormal(e,d,t,l),"top"===r&&this.computeSideNormal(e,s,t,h),"bottom"===r&&this.computeSideNormal(e,h,t,s)}}r.Tile.PlaneTileBuilder=a})();class j extends r.Tile.TileBuilder{constructor(){super()}destroy(){}computeBuffer(e,t,i,n,a,s,o){o=o||r.Tile.TileMath.unitScale;const l={index:null,position:null,normal:null,uvs:[],center:null};n=null==n?16:n;var d=r.Tile.TileMath.tile2boundingBox(e,t,i),h=(d.east+d.west)/2,c=(d.north+d.south)/2,u=r.Tile.TileMath.fromDegrees(h,c),p=(d.east-d.west)/n,m=(d.north-d.south)/n;l.center=u;const f=(n+1)*(n+1)+(a?0:4*n);l.position=new Float32Array(3*f),l.normal=new Float32Array(3*f),l.uvs=new Float32Array(3*f);let g=[];const v=[];let y=0;for(var M,E,b,x=1/n,I=0;I<=n;++I){const e=[];E=d.south+m*I;for(var T=0;T<=n;++T){M=d.west+p*T,b=r.Tile.TileMath.fromDegrees(M,E),l.position[3*y]=(b.x-u.x)*o,l.position[3*y+1]=(b.y-u.y)*o,l.position[3*y+2]=(b.z-u.z)*o;var C=b.clone().normalize();l.normal[3*y]=C.x,l.normal[3*y+1]=C.y,l.normal[3*y+2]=C.z,s&&(l.position[3*y]+=C.x*s[n-I][T]*o*r.GlobalData.TerrainScale,l.position[3*y+1]+=C.y*s[n-I][T]*o*r.GlobalData.TerrainScale,l.position[3*y+2]+=C.z*s[n-I][T]*o*r.GlobalData.TerrainScale);var w=I*x,S=T*x;l.uvs[2*y]=S,l.uvs[2*y+1]=w,a||0!==I&&I!==n&&(T===n?g.push(y):0===T&&v.push(y)),e.push(y),y++}0===I?g=g.concat(e):I===n&&(g=g.concat(e.slice().reverse()))}var A=this.getIndexBySeg(n);const B=y;return a||(A=this.createSkirt(g,v,y,B,l,A)),l.index=A,l}}r.Tile.GlobeTileBuilder=j,(()=>{let e=new THREE.Vector3;r.Tile.TileTextureManager=class{constructor(e,t){this.viewer=e,!this.viewer||!this.viewer instanceof r.Viewer?console.log("ERROR::viewer must not be empty or viewer2d."):!t.startPosition||t.startPosition<2?console.log("ERROR::startPosition must not be empty or less than 2 in length."):!t.endPosition||t.endPosition<2?console.log("ERROR::endPosition must not be empty or less than 2 in length."):r.Tile.TileMath.isLongitude(t.startPosition[0])&&r.Tile.TileMath.isLongitude(t.endPosition[0])&&r.Tile.TileMath.isLatitude(t.startPosition[1])&&r.Tile.TileMath.isLatitude(t.startPosition[1])?t.startPosition[0]>t.endPosition[0]||t.startPosition[1]>t.endPosition[1]?console.log("ERROR::range definition error."):Math.abs(t.startPosition[0]-t.endPosition[0])>.2||Math.abs(t.startPosition[1]-t.endPosition[1])>.2?console.log(" Longitude or latitude range is too big."):(r.GlobalData.EnableGisMap=!0,r.GlobalData.ConstraintZoom=!1,this.westEdge=t.startPosition[0],this.eastEdge=t.endPosition[0],this.northEdge=t.endPosition[1],this.southEdge=t.startPosition[1],this.mapCount=0,this.externalObjectId="tilePlane",this.geometry=null,this.tileMaterials=new Array,!t.modelPosition||t.modelPosition<2?console.log("ERROR::model position must not be empty or less than 2 in length."):r.Tile.TileMath.isLongitude(t.modelPosition[0])&&r.Tile.TileMath.isLatitude(t.modelPosition[1])?(this.modelLongitude=t.modelPosition[0],this.modelLatitude=t.modelPosition[1],this.modelLongitude<this.westEdge||this.modelLongitude>this.eastEdge||this.modelLatitude<this.southEdge||this.modelLatitude>this.northEdge?console.log("ERROR::the input position must in range"):(this.zoom=t.zoom,this.zoom<0||this.zoom>18?console.log("ERROR::the input zoom is invalid"):(this.height=0,this.externalComponentManager=new r.ExternalComponentManager(e)))):console.log("ERROR::number exceeds normal latitude and longitude range.")):console.log("ERROR::number exceeds normal latitude and longitude range.")}destroy(){this.viewer=null,this.westEdge=null,this.eastEdge=null,this.northEdge=null,this.southEdge=null,this.mapCount=null,this.externalObjectId=null,this.geometry=null,this.tileMaterials=null,this.modelLongitude=null,this.modelLatitude=null,this.zoom=null,this.height=null,this.externalComponentManager=null,this.tileLength=null,this.topTile=null,this.leftTile=null,this.bottomTile=null,this.rightTile=null,this.planeWidth=null,this.planeHeight=null,this.mapCount=null,this.geometry=null,this.tilesMesh=null,this.tileArray[xIndex]=null}loadMapsByZoom(e,t){this.zoom=e,this.tileLength=r.Tile.TileMath.mercatorPerimeter/Math.pow(2,this.zoom)*r.Tile.TileMath.unitScale*2,this.tileArray=new Array,this.topTile=r.Tile.TileMath.lat2tile(this.northEdge,this.zoom),this.leftTile=r.Tile.TileMath.long2tile(this.westEdge,this.zoom),this.bottomTile=r.Tile.TileMath.lat2tile(this.southEdge,this.zoom),this.rightTile=r.Tile.TileMath.long2tile(this.eastEdge,this.zoom),this.planeWidth=this.rightTile-this.leftTile+1,this.planeHeight=this.bottomTile-this.topTile+1,this.mapCount=this.planeWidth*this.planeHeight,this.geometry=new THREE.PlaneGeometry(this.tileLength*this.planeWidth,this.tileLength*this.planeHeight,this.planeWidth,this.planeHeight),this.tilesMesh=null;var i=this,n=0;for(let e=i.leftTile;e<=i.rightTile;++e){let o=e-i.leftTile;i.tileArray[o]=new Array;for(let l=i.topTile;l<=i.bottomTile;++l){let d=l-i.topTile;if(i.tileArray[o][d]={},i.tileArray[o][d].x=o*i.tileLength,i.tileArray[o][d].y=-d*i.tileLength,i.tileArray[o][d].center=new THREE.Vector3((o+.5)*i.tileLength,-(d+.5)*i.tileLength,i.height),i.tileArray[o][d].bound=r.Tile.TileMath.tile2boundingBox(e,l,i.zoom),!(e>i.rightTile||l>i.bottomTile)){var a=`https://mt3.google.cn/vt/lyrs=y&hl=zh-CN&gl=cn&x=${e}&y=${l}&z=${i.zoom}`,s=new THREE.TextureLoader;s.crossOrigin=!0,s.load(a,(function(e){var r=new THREE.MeshBasicMaterial({map:e,transparent:!0,side:THREE.DoubleSide}),a=o+d*(i.rightTile-i.leftTile+1);i.geometry.faces[2*a].materialIndex=a,i.geometry.faces[2*a+1].materialIndex=a,i.geometry.faceVertexUvs[0][2*a]=[new THREE.Vector2(0,1),new THREE.Vector2(0,0),new THREE.Vector2(1,1)],i.geometry.faceVertexUvs[0][2*a+1]=[new THREE.Vector2(0,0),new THREE.Vector2(1,0),new THREE.Vector2(1,1)],i.tileMaterials[a]=r,++n>=i.mapCount&&i.onTextureLoaded(t)}))}}}}onTextureLoaded(t){this.tilesMesh=new THREE.Mesh(this.geometry,this.tileMaterials);var i=this.externalComponentManager.objectIds;null!=i&&-1!=i.indexOf(this.externalObjectId)&&this.viewer.removeNodeById(this.externalObjectId),this.externalComponentManager.addNode(this.externalObjectId,this.tilesMesh),this.positionX=0,this.positionY=0;for(var r=0,n=this.tileArray.length;r<n;r++)for(var a=0,s=this.tileArray[r].length;a<s;a++)if(this.tileArray[r][a].bound.west<=this.modelLongitude&&this.modelLongitude<this.tileArray[r][a].bound.east&&this.tileArray[r][a].bound.south<=this.modelLatitude&&this.modelLatitude<this.tileArray[r][a].bound.north){var o=(this.modelLongitude-this.tileArray[r][a].bound.west)/(this.tileArray[r][a].bound.east-this.tileArray[r][a].bound.west),l=(this.modelLatitude-this.tileArray[r][a].bound.south)/(this.tileArray[r][a].bound.north-this.tileArray[r][a].bound.south);this.positionX=-(r+o)*this.tileLength+this.planeWidth/2*this.tileLength,this.positionY=-(s-a-1+l)*this.tileLength+this.planeHeight/2*this.tileLength;break}var d=new THREE.Quaternion,h=this.viewer.getScene().getBoundingBoxWorld(),c=h.getCenter(e);this.externalComponentManager.setTransform(this.externalObjectId,new THREE.Vector3(this.positionX+c.x,this.positionY+c.y,h.min.z),new THREE.Vector3(1,1,1),d),this.viewer.render(),t&&t()}}})(),function(){let e=new THREE.Vector3;r.Tile.TileDemandManager=class{constructor(e,t){if(this.viewer=e,!this.viewer||!this.viewer instanceof r.Viewer)console.log("ERROR::viewer must not be empty or viewer2d.");else if(!t.modelPosition||t.modelPosition<2)console.log("ERROR::model position must not be empty or less than 2 in length.");else if(r.Tile.TileMath.isLongitude(t.modelPosition[0])&&r.Tile.TileMath.isLatitude(t.modelPosition[1]))if(this.zoom=t.zoom?t.zoom:17,this.zoom<1||this.zoom>18)console.log("ERROR::the input zoom is invalid");else{this.zoom<11&&console.warn("Tile resolution may be too low"),r.GlobalData.EnableGisMap=!0,r.GlobalData.ConstraintZoom=!1,this.modelLongitude=t.modelPosition[0],this.modelLatitude=t.modelPosition[1],this.tileArray={},this.tileArray[this.zoom]={},this.externalObjectId="tileDemandPlane",this.tileLimit=t.tileLimit?t.tileLimit:40,this.modelOffset=t.modelOffset,this.allGroup=new THREE.Group,this.groupArray={},this.groupArray[this.zoom]=new THREE.Group,this.allGroup.add(this.groupArray[this.zoom]),this.externalComponentManager=new r.ExternalComponentManager(e);var i=this.externalComponentManager.objectIds;null!=i&&-1!=i.indexOf(this.externalObjectId)&&this.viewer.removeNodeById(this.externalObjectId),this.externalComponentManager.addNode(this.externalObjectId,this.allGroup),this.globalMatrix=this.viewer.modelManager.getMatrixWorldGlobal(),this.globalMatrixInverse=new THREE.Matrix4,this.globalMatrixInverse.copy(this.globalMatrix).invert(),this.loader=new THREE.TextureLoader,this.loader.crossOrigin=!0,this.modelBox=this.viewer.getScene().getBoundingBoxWorld();var n=this;this.loader.load("https://mt3.google.cn/vt/lyrs=y&hl=zh-CN&gl=cn&x=0&y=0&z=0",(function(e){n.groupArray[0]=new THREE.Group;var t=new THREE.SphereGeometry(r.Tile.TileMath.earthRadius,200,200);t.translate(5517447847.510659,3185499999.9999995,0);var i=new THREE.MeshLambertMaterial({map:e,overdraw:.5}),a=new THREE.Mesh(t,i);n.groupArray[0].add(a)}));n=this;this.viewer.registerEventListener(r.EVENTS.ON_CAMERA_CHANGED_AND_RENDERED,(function(e){var t=n.viewer.rendererManager.renderer.domElement.height,i=n.viewer.camera.position.clone().applyMatrix4(n.globalMatrixInverse),r=n.calculateZoom(i,t);if(r!=n.zoom){if(n.allGroup.remove(n.groupArray[n.zoom]),0==r)return n.allGroup.add(n.groupArray[0]),n.allGroup.updateMatrixWorld(!0),void(n.zoom=r);null==n.groupArray[r]&&(n.groupArray[r]=new THREE.Group),n.allGroup.add(n.groupArray[r])}0!=r&&(n.zoom=r,n.updateZoom(r))}))}else console.log("ERROR::number exceeds normal latitude and longitude range.")}destroy(){this.viewer=null,this.zoom=null,this.modelLongitude=null,this.modelLatitude=null,this.tileArray=null,this.externalObjectId=null,this.modelOffset=null,this.tileLimit=null,this.allGroup=null,this.groupArray=null,this.tileMaterials=null,this.globalMatrix=null,this.globalMatrixInverse=null,this.loader=null,this.modelBox=null,this.tileLength=null,this.modelTileX=null,this.modelTileY=null,this.offset=null,this.inGeometry=null,this.tileBox=null,this.externalComponentManager=null}calculateZoom(e,t){return this.zoom}updateZoom(t){null==this.tileArray[t]&&(this.tileArray[t]={}),this.tileLength=r.Tile.TileMath.mercatorPerimeter/Math.pow(2,t)*r.Tile.TileMath.unitScale*2,this.modelTileX=r.Tile.TileMath.long2tile(this.modelLongitude,t),this.modelTileY=r.Tile.TileMath.lat2tile(this.modelLatitude,t);var i=r.Tile.TileMath.tile2boundingBox(this.modelTileX,this.modelTileY,t),n=(this.modelLongitude-i.west)/(i.east-i.west),a=(this.modelLatitude-i.north)/(i.north-i.south);this.modelBox.getCenter(e);var s=-n*this.tileLength+.5*this.tileLength+e.x,o=-a*this.tileLength-.5*this.tileLength+e.y;this.offset=new THREE.Vector3(s,o,this.modelBox.min.z-this.modelOffset*r.Tile.TileMath.unitScale);var l=new THREE.Quaternion;this.externalComponentManager.setTransform(this.externalObjectId,this.offset,new THREE.Vector3(1,1,1),l),this.inGeometry=new THREE.PlaneBufferGeometry(this.tileLength,this.tileLength),this.inGeometry.computeBoundingBox(),this.tileBox=this.inGeometry.boundingBox,this.addTile(this.modelTileX,this.modelTileY,new THREE.Vector3(0),t),this.updateGroup(t)}addTile(e,t,i,r,n){var a=this;return a.tileArray[r][e]&&a.tileArray[r][e][t]?(a.tileArray[r][e][t].visible=!0,void a.allGroup.updateMatrixWorld(!0)):new Promise((function(s,o){var l=`https://mt3.google.cn/vt/lyrs=y&hl=zh-CN&gl=cn&x=${e}&y=${t}&z=${r}`;a.loader.load(l,(function(o){o.wrapS=THREE.ClampToEdgeWrapping,o.wrapT=THREE.ClampToEdgeWrapping;var l=new THREE.MeshBasicMaterial({map:o,transparent:!0,side:THREE.DoubleSide}),d=a.inGeometry.clone();d.translate(i.x,i.y,i.z);var h=new THREE.Mesh(d,l);null==a.tileArray[r][e]&&(a.tileArray[r][e]={}),a.tileArray[r][e][t]||(a.tileArray[r][e][t]=h,h.name=`${r}-${e}-${t}`,a.groupArray[r].add(h),a.allGroup.updateMatrixWorld(!0)),s(n)}))}))}updateGroup(e){var t=this,i=t.viewer.camera;i.updateMatrix(),i.updateMatrixWorld(),this.frustum=new THREE.Frustum,this.frustum.setFromProjectionMatrix((new THREE.Matrix4).multiplyMatrices(i.projectionMatrix,i.matrixWorldInverse));for(var r=t.modelTileX,n=t.modelTileY,a=2;a<t.tileLimit;){for(var s=1;s<a;s++)r+=1,t.addNode(r,n,e);for(s=1;s<a;s++)n+=1,t.addNode(r,n,e);a++;for(s=1;s<a;s++)r-=1,t.addNode(r,n,e);for(s=1;s<a;s++)n-=1,t.addNode(r,n,e);a++}}addNode(e,t,i){if(!(e>=Math.pow(2,i)||e<0||t>=Math.pow(2,i)||t<0)){var r=this,n=(e-r.modelTileX)*r.tileLength,a=-(t-r.modelTileY)*r.tileLength,s=new THREE.Vector3(n+r.offset.x,a+r.offset.y,r.offset.z);this.tileBox=this.inGeometry.boundingBox;var o=this.tileBox.clone();if(o.translate(s),o.applyMatrix4(r.globalMatrix),r.frustum.intersectsBox(o)){var l=new THREE.Vector3(n,a,0);r.addTile(e,t,l,i,void 0)}else null!=r.tileArray[i][e]&&null!=r.tileArray[i][e][t]&&(r.tileArray[i][e][t].visible=!1)}}}}();r.Tile.TileManager=class{constructor(e,t,i){this.modelLayer=e,this.viewer=e.viewer,!this.viewer||!this.viewer instanceof r.Viewer?console.log("ERROR::viewer must not be empty or viewer2d."):!t.modelPosition||t.modelPosition<2?console.log("ERROR::model position must not be empty or less than 2 in length."):r.Tile.TileMath.isLongitude(t.modelPosition[0])&&r.Tile.TileMath.isLatitude(t.modelPosition[1])?(r.GlobalData.EnableGisMap=!0,this.modelLongitude=t.modelPosition[0],this.modelLatitude=t.modelPosition[1],this.tileAroundNum=8,this.maxZoom=t.maxZoom,this.modelTileX=r.Tile.TileMath.long2tile(this.modelLongitude,this.maxZoom),this.modelTileY=r.Tile.TileMath.lat2tile(this.modelLatitude,this.maxZoom),this.basePoint=t.basePoint,this.modelRotationZ=t.modelRotationZ,this.modelAltitude=t.modelAltitude,this.globalLayer={},this.tileGroup=i,this.tileGroup.altitudeOffset=this.modelAltitude,this.loader=new THREE.TextureLoader,this.loader.crossOrigin=!0,this.globalMatrix=this.viewer.modelManager.getMatrixWorldGlobal(),this.globalMatrixInverse=new THREE.Matrix4,this.globalMatrixInverse.copy(this.globalMatrix).invert(),this.frustum=new THREE.Frustum,this.earthMatrix=this.tileGroup.matrixWorld,t.terrainOnlineConfig&&this.dealOnlineTerrainConfig(t.terrainOnlineConfig),this.useTerrain=t.useTerrain,this.renderFunction=null,this.tileOpacity=t.opacity,this.mapStyle=t.mapStyle||{},this.mapExcavation=t.mapExcavation||{},this.materialMap={},this.disableSkirt=!1,this.mapUrl=t.mapUrl,this.layerList=[],this.baseRenderOrder=10,this.seg=16,this.terrainScheduler=new r.Tile.TerrainScheduler(6,(this.seg+1)*(this.seg+1)*2),t.maxTerrainLevel&&t.useTerrain&&(this.maxTerrainLevel=t.maxTerrainLevel,this.minTerrainLevel=t.minTerrainLevel,this.maxTerrainLevel+4<this.maxZoom&&(this.maxZoom=this.maxTerrainLevel+4)),this.modelTileAttitude=0,t.terrainPath?this.dataUrl=new r.Tile.DemUrl(t.terrainPath):this.dataUrl=t.dataUrl,this.isCreated=!1,this.terrainTileCount=0,this.tileCount=0,this.useClipping=t.useClipping,this.imageryProviderType=r.Utils.defaultValue(t.imageryProviderType,"UrlTemplate"),this.imageryProvider=new r.Layer.ImageryProviderFactory[this.imageryProviderType]({mapUrl:t.mapUrl}),this._contentReadyDeferred=void 0,this._requestCount=-1):console.log("ERROR::number exceeds normal latitude and longitude range.")}destroy(){this.clearTiles(),this.terrainScheduler.destroy(),this.terrainScheduler=null,this.modelLongitude=null,this.modelLatitude=null,this.tileAroundNum=null,this.maxZoom=null,this.modelTileX=null,this.modelTileY=null,this.globalLayer=null,this.tileGroup.clear(),this.tileGroup=null,this.loader=null,this.globalMatrix=null,this.globalMatrixInverse=null,this.frustum=null,this.earthMatrix=null,this.useTerrain=null,this.modelRotationZ=null,this.basePoint=null,this.modelAltitude=null,this.tileOpacity=null,this.mapStyle=null,this.mapExcavation=null,this.materialMap=null,this.disableSkirt=null,this.mapUrl=null,this.layerList=null,this.baseRenderOrder=void 0,this.seg=void 0,this.maxTerrainLevel=void 0,this.modelTileAttitude=void 0,this.dataUrl=null,this.isCreated=void 0,this.terrainTileCount=void 0,this.tileCount=void 0,this.modelLayer=void 0,this.removeRenderCallback(),this._contentReadyDeferred&&(this._contentReadyDeferred.destroy(),this._contentReadyDeferred=void 0),this.viewer=void 0,this.imageryProviderType=void 0,this.imageryProvider=null,this._requestCount=-1}getLayer(){return this.modelLayer}dealOnlineTerrainConfig(e){(this.modelLongitude<e.longitude[0]||this.modelLongitude>e.longitude[1]||this.modelLatitude<e.latitude[0]||this.modelLatitude>e.latitude[1])&&console.warn("the model LongLat not in online terrain Scale"),this.terrainZoomScale=e.zoom;const t=e.boundary,i=t.leftX,r=t.rightX,n=t.upY,a=t.bottomY;this.textureXYZScale={};const s=this.terrainZoomScale[0];this.textureXYZScale[s]={},this.textureXYZScale[s].leftX=i+1,this.textureXYZScale[s].rightX=r-1,this.textureXYZScale[s].upY=n+1,this.textureXYZScale[s].bottomY=a-1;for(let e=this.terrainZoomScale[0]+1;e<=this.terrainZoomScale[1]+4;++e)this.textureXYZScale[e]={},this.textureXYZScale[e].leftX=2*this.textureXYZScale[e-1].leftX,this.textureXYZScale[e].rightX=2*this.textureXYZScale[e-1].rightX,this.textureXYZScale[e].upY=2*this.textureXYZScale[e-1].upY,this.textureXYZScale[e].bottomY=2*this.textureXYZScale[e-1].bottomY}addExternalObject(){var e=this.externalComponentManager.objectIds;null!=e&&-1!=e.indexOf(this.externalObjectId)&&this.viewer.removeNodeById(this.externalObjectId),this.externalComponentManager.addNode(this.externalObjectId,this.tileGroup)}onLoadTerrain(){!1===this.isCreated&&(!1===this.useTerrain||this.terrainTileCount<=0)&&(this.isCreated=!0,this.viewer.modelManager.dispatchEvent({type:r.EVENTS.ON_MAP_CREATED}))}addRenderCallback(){var e=this;this.renderFunction=function(){e.updateEarth(),e.tileGroup.updateMatrixWorld(!0);for(var t=e.layerList.length,i=0;i<t;++i){e.layerList[i].tileGroup.updateMatrixWorld(!0)}},e.viewer.addCallbacks(r.EnumRenderCallbackType.PRE_RENDER,e.renderFunction),e.viewer.render()}removeRenderCallback(){this.renderFunction&&(this.viewer.removeCallbacks(r.EnumRenderCallbackType.PRE_RENDER,this.renderFunction),this.renderFunction=null)}updateModelLngLatByBasePoint(){}updateEarthMatrix(){}show(){this.tileGroup?this.tileGroup.visible=!0:console.warn("The tile doesn't exist.")}hide(){this.tileGroup?this.tileGroup.visible=!1:console.warn("The tile doesn't exist.")}hideAllLayers(){this.hide();for(const e of this.layerList)e.hide()}showAllLayers(){this.show();for(const e of this.layerList)e.show()}getModelRotationZ(){return this.modelRotationZ}setModelRotationZ(e){this.modelRotationZ=e,this.updateEarthMatrix()}getBasePoint(){return this.basePoint}getModelPosition(){return[this.modelLongitude,this.modelLatitude]}setModelPosition(e){this.clearTiles(),this.modelLongitude=e[0],this.modelLatitude=e[1],this.modelTileX=r.Tile.TileMath.long2tile(this.modelLongitude,this.maxZoom),this.modelTileY=r.Tile.TileMath.lat2tile(this.modelLatitude,this.maxZoom),this.updateEarthMatrix()}getModelAltitude(){return this.modelAltitude}setModelAltitude(e){this.modelAltitude=e,this.tileGroup.altitudeOffset=this.modelAltitude,this.updateEarthMatrix()}setModelRotationZ(e){this.modelRotationZ=e,this.updateEarthMatrix()}getLayerById(e){for(const t of this.layerList)if(t.id===e)return t}getOpacity(e){if(void 0===e)return this.tileOpacity;return this.getLayerById(e).opacity}setOpacity(e,t){if(void 0===t)this.tileOpacity=e;else{this.getLayerById(t).opacity=e}for(var i in this.materialMap)this.materialMap[i].opacity=this.tileOpacity,1-this.tileOpacity>r.Tile.DemTilesUtil.TWO_ACCURACY?this.materialMap[i].transparent=!0:this.materialMap[i].transparent=!1;1-this.tileOpacity>r.Tile.DemTilesUtil.TWO_ACCURACY?this.hideSkirt():this.showSkirt()}setStyle(e,t){if(e)if(t){const i=this.getLayerById(t);if(void 0===i)return;i.setStyle(e)}else for(var i in this.mapStyle=e,this.materialMap){var r=this.materialMap[i];r.updateStyle&&r.updateStyle(e)}}setExcavation(e){if(e)for(var t in this.mapExcavation=e,this.materialMap){var i=this.materialMap[t];i.updateExcavation&&i.updateExcavation(e),i.updateSide&&i.updateSide({isExcavation:e&&e.isExcavation})}}updateMaterialsSide(){for(var e in this.materialMap){var t=this.materialMap[e];t.updateSide&&t.updateSide({isExcavation:this.mapExcavation&&this.mapExcavation.isExcavation})}}clearTiles(){for(var e in this.globalLayer)for(var t in this.globalLayer[e])for(var i in this.globalLayer[e][t])this.globalLayer[e][t][i]&&this.globalLayer[e][t][i].destroy();this.globalLayer={},this.tileGroup.clear()}hideSkirt(){for(var e in this.disableSkirt=!0,this.globalLayer)for(var t in this.globalLayer[e])for(var i in this.globalLayer[e][t])this.globalLayer[e][t][i]&&this.globalLayer[e][t][i].skirt&&(this.globalLayer[e][t][i].skirt.visible=!1)}showSkirt(){for(var e in this.disableSkirt=!1,this.globalLayer)for(var t in this.globalLayer[e])for(var i in this.globalLayer[e][t])this.globalLayer[e][t][i]&&this.globalLayer[e][t][i].skirt&&(this.globalLayer[e][t][i].skirt.visible=!0)}hideAllNodes(){for(var e in this.globalLayer)for(var t in this.globalLayer[e])for(var i in this.globalLayer[e][t])this.globalLayer[e][t][i]&&this.globalLayer[e][t][i].meshNode&&(this.globalLayer[e][t][i].meshNode.visible=!1)}_increaseRequestCount(){this._deferContentUpdate(),++this._requestCount}_decreaseRequestContent(){--this._requestCount,this._resolveContentUpdate()}_deferContentUpdate(){this._contentReadyDeferred||(this._requestCount=0,this._contentReadyDeferred=new r.Deferred,this._contentReadyDeferred.promise.then((()=>{this._contentReadyDeferred.destroy(),this._contentReadyDeferred=void 0,this.viewer.render()})).catch((()=>{this._contentReadyDeferred.destroy(),this._contentReadyDeferred=void 0,this.viewer.render()})))}_resolveContentUpdate(){0===this._requestCount&&this._contentReadyDeferred&&this._contentReadyDeferred.resolve()}updateEarth(){if(this.mapUrl){var e=this.viewer.camera;e.updateMatrix(),e.updateMatrixWorld(),this.frustum.setFromProjectionMatrix((new THREE.Matrix4).multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse)),this.modelTileX=r.Tile.TileMath.long2tile(this.modelLongitude,this.maxZoom),this.modelTileY=r.Tile.TileMath.lat2tile(this.modelLatitude,this.maxZoom),this.updateModelLngLatByBasePoint();for(var t=(this.modelTileX,this.modelTileX),i=(this.modelTileY,this.modelTileY),n=this.tileAroundNum,a=this.maxZoom,s=(t=this.modelTileX-this.modelTileX%n,i=this.modelTileY-this.modelTileY%n,t);s<t+n;++s)for(var o=i;o<i+n;++o)this.addNode(s,o,a);this.updateTile(t,i,a,n)}}updateTile(e,t,i,r){var n=e/2,a=t/2;if((n=Math.floor(n-r/4))%2==1&&n--,(a=Math.floor(a-r/4))%2==1&&a--,!((i=i-1)<0)){for(var s=n;s<n+r;++s)for(var o=a;o<a+r;++o)s>=e/2&&s<e/2+r/2&&o>=t/2&&o<t/2+r/2||s>=Math.pow(2,i)||s<0||o>=Math.pow(2,i)||o<0||this.addNode(s,o,i);this.updateTile(n,a,i,r)}}getTerrainData(e,t,i,n,a){var s=this,o=this.seg,l=Math.pow(2,i-s.maxTerrainLevel),d=parseInt(e/l),h=parseInt(t/l),c=e%l,u=t%l,p=s.dataUrl.terrainUrl(i,e,t);i>s.maxTerrainLevel&&(p=s.dataUrl.terrainUrl(s.maxTerrainLevel,d,h)),s.terrainScheduler.push(p,(function(a){for(var d=Array.prototype.slice.call(new Int16Array(a)),h=new Array(o+1),p=0;p<h.length;p++){h[p]=new Array(o+1);for(var m=0;m<o+1;m++)d[p*(o+1)+m]!==r.Tile.DemTilesUtil.InvalidTerrainValue?h[p][m]=d[p*(o+1)+m]:h[p][m]=0}if(s.modelTileX==e&&s.modelTileY==t){var f=d[0],g=d.length;for(p=0;p<g;p++)d[p]<f&&(f=d[p]);s.modelTileAttitude=f}var v=h;if(i>s.maxTerrainLevel){var y=c*(o/l),M=u*(o/l),E=o/l,b=new Array(E+1);for(p=0;p<b.length;p++){b[p]=new Array(E+1);for(m=0;m<=E;++m)b[p][m]=h[M+p][y+m]}v=r.Tile.TileMath.createHeightArray(b,o)}n&&n(v)}),(function(){a&&a()}))}addNode(e,t,i){if(!(e>=Math.pow(2,i)||e<0||t>=Math.pow(2,i)||t<0)){var n=this;if(null==n.globalLayer[i]&&(n.globalLayer[i]={}),null==n.globalLayer[i][e]&&(n.globalLayer[i][e]={}),null==n.globalLayer[i][e][t]&&(n.globalLayer[i][e][t]=new r.Tile.DemTile(i,e,t)),n.globalLayer[i][e][t].meshLoadState==r.Tile.DemTilesUtil.LOAD_STATE.UNLOADED)this.tileCount++,n.globalLayer[i][e][t].meshLoadState=r.Tile.DemTilesUtil.LOAD_STATE.GEO_LOADING,n.createTileGeometry(e,t,i,!0,(function(){n.createTileGeometryFinished(e,t,i)}));else if(n.globalLayer[i][e][t].meshLoadState==r.Tile.DemTilesUtil.LOAD_STATE.LOADED||n.globalLayer[i][e][t].meshLoadState==r.Tile.DemTilesUtil.LOAD_STATE.GEO_LOADED){n.globalLayer[i][e][t].geometry.computeBoundingBox();var a=n.globalLayer[i][e][t].geometry.boundingBox.clone();a.applyMatrix4(n.earthMatrix),n.globalLayer[i][e][t].box=a,n.createTileGeometryFinished(e,t,i)}}}createTileGeometryFinished(e,t,i){if(this.frustum.intersectsBox(this.globalLayer[i][e][t].box)){this.globalLayer[i][e][t].meshLoadState===r.Tile.DemTilesUtil.LOAD_STATE.LOADED&&(this.globalLayer[i][e][t].meshNode.visible=!0),this.globalLayer[i][e][t].meshLoadState===r.Tile.DemTilesUtil.LOAD_STATE.GEO_LOADED&&this.createMaterial(e,t,i,this.mapUrl),this.globalLayer[i][e][t].needUpdateTexture&&this.globalLayer[i][e][t].meshLoadState===r.Tile.DemTilesUtil.LOAD_STATE.LOADED&&this.updateMaterialTexture(e,t,i);for(var n=this.layerList.length,a=0;a<n;++a){(s=this.layerList[a]).contentUnLoad(i,e,t)&&this.globalLayer[i][e][t].meshLoadState>=r.Tile.DemTilesUtil.LOAD_STATE.GEO_LOADED&&this.createLayerMaterial(s,e,t,i),s.contentLoaded(i,e,t)&&(s.meshNodeMap[i][e][t].visible=!0)}}else{this.globalLayer[i][e][t].meshLoadState==r.Tile.DemTilesUtil.LOAD_STATE.LOADED&&(this.globalLayer[i][e][t].meshNode.visible=!1);for(n=this.layerList.length,a=0;a<n;++a){var s;(s=this.layerList[a]).contentLoaded(i,e,t)&&(s.meshNodeMap[i][e][t].visible=!1)}}}createTileGeometry(e,t,i){}createLayerMaterial(e,t,i,n){if(!e.isAvailableTile(t,i,n))return;var a=this;e.setContentLoading(n,t,i),this._increaseRequestCount();const s=e.getRequestUrl(t,i,n);a.loader.load(s,(function(s){var o=new r.MapTileMaterial({map:s,transparent:!0,side:THREE.FrontSide});a.useClipping&&(o.defines.USE_CLIPPING=""),o.updateStyle(e.mapStyle),o.updateExcavation(a.mapExcavation),o.updateSide({isExcavation:a.mapExcavation&&a.mapExcavation.isExcavation});var l=`${n}-${t}-${i}`;o.opacity=e.opacity,null==e.materialMap[n]&&(e.materialMap[n]={}),null==e.materialMap[n][t]&&(e.materialMap[n][t]={}),e.materialMap[n][t][i]=o;var d=new THREE.Mesh(a.globalLayer[n][t][i].geometry,o);if(null==e.meshNodeMap[n]&&(e.meshNodeMap[n]={}),null==e.meshNodeMap[n][t]&&(e.meshNodeMap[n][t]={}),e.meshNodeMap[n][t][i]=d,d.name=l,a.globalLayer[n][t][i].skirtGeometry){const r=`Skirt-${n}-${t}-${i}`,s=new THREE.Mesh(a.globalLayer[n][t][i].skirtGeometry,o);s.name=r,s.renderOrder=a.baseRenderOrder+1+e.priority,e.tileGroup.add(s)}(a.tileOpacity<1||a.disableSkirt)&&a.globalLayer[n][t][i].skirt&&(skirtMeshNode.visible=!1),d.renderOrder=a.baseRenderOrder+1+e.priority,e.tileGroup.add(d),e.tileGroup.updateMatrixWorld(!0),e.setContentLoaded(n,t,i),a._decreaseRequestContent()}))}updateMaterialTexture(e,t,i){const n=this;this._increaseRequestCount(),this.globalLayer[i][e][t].meshLoadState=r.Tile.DemTilesUtil.LOAD_STATE.MAT_PARSING;const a=n.imageryProvider.getImageryUrl(e,t,i);this.loader.load(a,(a=>{this.globalLayer[i][e][t].needUpdateTexture=!1,this.globalLayer[i][e][t].texture=a,this.globalLayer[i][e][t].material.map=a,this.globalLayer[i][e][t].meshLoadState=r.Tile.DemTilesUtil.LOAD_STATE.LOADED,n._decreaseRequestContent()}))}createMaterial(e,t,i,n){var a=this;if(!1!==a.imageryProvider.ready)return a.globalLayer[i][e][t].meshLoadState=r.Tile.DemTilesUtil.LOAD_STATE.MAT_PARSING,new Promise((function(s,o){a._increaseRequestCount();const l=a.imageryProvider.getImageryUrl(e,t,i);a.loader.load(l,(function(o){if(n===a.mapUrl){o.encoding=THREE.GammaEncoding;var l=new r.MapTileMaterial({map:o,transparent:!1,side:THREE.FrontSide});a.useClipping&&(l.defines.USE_CLIPPING=""),l.updateStyle(a.mapStyle),l.updateExcavation(a.mapExcavation),l.updateSide({isExcavation:a.mapExcavation&&a.mapExcavation.isExcavation});var d=`${i}-${e}-${t}`;if(l.opacity=a.tileOpacity,a.tileOpacity<1&&(l.transparent=!0),a.globalLayer[i][e][t].meshNode)return a.globalLayer[i][e][t].meshLoadState=r.Tile.DemTilesUtil.LOAD_STATE.LOADED,s(a.globalLayer[i][e][t]),void a._decreaseRequestContent();if(a.materialMap[d]=l,a.globalLayer[i][e][t].texture=o,a.globalLayer[i][e][t].material=l,a.globalLayer[i][e][t].meshNode=new THREE.Mesh(a.globalLayer[i][e][t].geometry,a.materialMap[d]),a.globalLayer[i][e][t].meshNode.name=d,a.globalLayer[i][e][t].meshNode.renderOrder=a.baseRenderOrder,a.tileGroup.add(a.globalLayer[i][e][t].meshNode),a.globalLayer[i][e][t].skirtGeometry){var h=`Skirt-${i}-${e}-${t}`;a.globalLayer[i][e][t].skirt=new THREE.Mesh(a.globalLayer[i][e][t].skirtGeometry,a.materialMap[d]),a.globalLayer[i][e][t].skirt.name=h,a.globalLayer[i][e][t].skirt.renderOrder=a.baseRenderOrder,a.tileGroup.add(a.globalLayer[i][e][t].skirt)}(a.tileOpacity<1||a.disableSkirt)&&a.globalLayer[i][e][t].skirt&&(a.globalLayer[i][e][t].skirt.visible=!1),a.globalLayer[i][e][t].meshLoadState=r.Tile.DemTilesUtil.LOAD_STATE.LOADED,a.onLoadTerrain(),s(a.globalLayer[i][e][t]),a._decreaseRequestContent(),a.tileCount--}else a._decreaseRequestContent()}),void 0,(e=>{console.log(e),a._decreaseRequestContent(),a.tileCount--}))}))}setMapLayer(e){this.mapUrl=`https://mt3.google.cn/vt/lyrs=${e}&hl=zh-CN&gl=cn&x={x}&y={y}&z={z}`,this.clearTiles()}setMapUrl(e,t){this.mapUrl=e,this.imageryProviderType=r.Utils.defaultValue(t,"UrlTemplate"),this.imageryProvider=new r.Layer.ImageryProviderFactory[t]({mapUrl:e}),this.imageryProvider.setReadyCallback((()=>{this.viewer.render()})),this.clearTiles()}isUseTerrain(){return this.useTerrain}applyTerrain(e){this.useTerrain=e,this.clearTiles()}addRoad(e,t){const i=new r.Tile.TextureLayer(this.viewer,{url:e});return i.priority=t,this.layerList[0]=i,this.updateEarthMatrix(),i}removeRoad(e){(e||this.layerList[0]).destroy(),this.layerList=[]}addImageryLayer(e,t){const i=e.mapUrl||e.url,n=e.imageryProviderType,a=e.hasTileMapResource,s=void 0===e.layerName?r.Utils.getEncodedId(i):e.layerName,o=this.layerList,l=t>=0&&t<o.length?t:o.length;let d,h=-1;for(let e=0,t=o.length;e<t;++e)if(o[e].url===i){h=e;break}return-1!==h?(d=o[h],o.splice(h,1)):d=new r.Tile.TextureLayer(this.viewer,{url:i,imageryProviderType:n,hasTileMapResource:a,layerName:s}),o.splice(l,0,d),this._updateLayerList(),this.updateEarthMatrix(),d.id}removeImageryLayer(e){const t=this.layerList,i=this.getLayerById(e);if(!i)return;const r=t.indexOf(i);-1!==r&&(t.splice(r,1),i.destroy(),this._updateLayerList(),this.updateEarthMatrix())}_updateLayerList(){const e=this.baseRenderOrder+1,t=this.layerList;for(let i=0,r=t.length;i<r;i++){const r=t[i];if(r.priority=i,r.meshNodeMap){const t=e+r.priority;r.updateMeshRenderOrder(t)}}}getMaxLevel(){return this.maxZoom}setMaxLevel(e){this.maxZoom=e,this.clearTiles()}},(()=>{let e=new THREE.Box3,t=new THREE.Matrix4,i=new THREE.Vector3;class n extends r.Tile.TileManager{constructor(e,t,i){super(e,t,i),this.mercatorPerimeter=r.Tile.TileMath.mercatorPerimeter,this.updateEarthMatrix(),this.tileGroup.name=r.GlobalData.TilePlaneGroupName,this.tileBuilder=new r.Tile.PlaneTileBuilder,this.terrainTileCount=this.tileAroundNum**2+(this.tileAroundNum**2-(this.tileAroundNum/2)**2)*(this.maxZoom-this.minTerrainLevel)}destroy(){this.viewer.modelManager.scene.removeObjectGroupByName(r.GlobalData.TilePlaneGroupName),this.offset=null,this.mercatorPerimeter=null,this.terrainLoader=null,this.tileBuilder=null,super.destroy()}updateModelLngLatByBasePoint(){let e=this.viewer.getBoundingBoxWorld().getCenter(i);const t=(new THREE.Matrix4).makeTranslation(-this.basePoint.x,-this.basePoint.y,0),n=(new THREE.Matrix4).makeRotationZ(this.modelRotationZ),a=(new THREE.Matrix4).makeTranslation(this.basePoint.x,this.basePoint.y,0);e.applyMatrix4(t),e.applyMatrix4(n),e.applyMatrix4(a);const s=this.mercator2lonLat(e);this.modelTileX=r.Tile.TileMath.long2tile(s.x,this.maxZoom),this.modelTileY=r.Tile.TileMath.lat2tile(s.y,this.maxZoom)}updateEarthMatrix(){this.mercatorPerimeter=r.Tile.TileMath.getMercatorPerimeterByLat(this.modelLatitude),this.modelTileX=r.Tile.TileMath.long2tile(this.modelLongitude,this.maxZoom),this.modelTileY=r.Tile.TileMath.lat2tile(this.modelLatitude,this.maxZoom),this.updateModelLngLatByBasePoint();var e=r.Tile.TileMath.tile2boundingBox(this.modelTileX,this.modelTileY,this.maxZoom),t=(this.modelLongitude-e.west)/(e.east-e.west),i=(this.modelLatitude-e.north)/(e.north-e.south),n=this.mercatorPerimeter/Math.pow(2,this.maxZoom)*r.Tile.TileMath.unitScale*2,a=-t*n+.5*n-.5*n,s=-i*n-.5*n+.5*n,o=(new THREE.Matrix4).makeTranslation(a+this.basePoint.x,s+this.basePoint.y,-this.modelAltitude*r.Tile.TileMath.unitScale),l=(new THREE.Matrix4).makeTranslation(a,s,0),d=(new THREE.Matrix4).makeRotationZ(-this.modelRotationZ),h=(new THREE.Matrix4).makeTranslation(-a,-s,0);this.tileGroup.matrix.identity(),this.tileGroup.applyMatrix4(l),this.tileGroup.applyMatrix4(d),this.tileGroup.applyMatrix4(h),this.tileGroup.applyMatrix4(o),this.tileGroup.applyMatrix4(this.globalMatrix),this.tileGroup.matrixAutoUpdate=!1,this.tileGroup.updateMatrixWorld(!0);for(var c=this.layerList.length,u=0;u<c;++u){var p=this.layerList[u];p.tileGroup.matrix.identity(),p.tileGroup.applyMatrix4(l),p.tileGroup.applyMatrix4(d),p.tileGroup.applyMatrix4(h),p.tileGroup.applyMatrix4(o),p.tileGroup.applyMatrix4(this.globalMatrix),p.tileGroup.matrixAutoUpdate=!1,p.tileGroup.updateMatrixWorld(!0)}this.viewer.render()}createTerrainGeometry(e,t,i,r,n,a,s){var o=this.tileBuilder.computePlaneGeometry(i,i,t,a,!1),l=o[0];return s&&(this.globalLayer[e][r-1]&&this.globalLayer[e][r-1][n]&&this.globalLayer[e][r-1][n].geometry&&this.tileBuilder.computeNearNormal(l,this.globalLayer[e][r-1][n].geometry,t,"left"),this.globalLayer[e][r+1]&&this.globalLayer[e][r+1][n]&&this.globalLayer[e][r+1][n].geometry&&this.tileBuilder.computeNearNormal(l,this.globalLayer[e][r+1][n].geometry,t,"right"),this.globalLayer[e][r]&&this.globalLayer[e][r][n-1]&&this.globalLayer[e][r][n-1].geometry&&this.tileBuilder.computeNearNormal(l,this.globalLayer[e][r][n-1].geometry,t,"bottom"),this.globalLayer[e][r]&&this.globalLayer[e][r][n+1]&&this.globalLayer[e][r][n+1].geometry&&this.tileBuilder.computeNearNormal(l,this.globalLayer[e][r][n+1].geometry,t,"top")),o}updateTileMeshForFlatten(){for(var e in this.globalLayer)for(var t in this.globalLayer[e])for(var i in this.globalLayer[e][t])this.globalLayer[e][t][i]&&this._updateTileMeshForFlatten(this.globalLayer[e][t][i])}_updateTileMeshForFlatten(i){if(i.box&&i.terrainData){var n=i.x,a=i.y,s=i.zoom,o=i.terrainData,l=this.mercatorPerimeter/Math.pow(2,this.maxZoom)*r.Tile.TileMath.unitScale*2,d=(n*Math.pow(2,this.maxZoom-s)-this.modelTileX)*l+Math.pow(2,this.maxZoom-s)/2*l,h=-(a*Math.pow(2,this.maxZoom-s)-this.modelTileY)*l-Math.pow(2,this.maxZoom-s)/2*l;t.makeTranslation(d,h,0),t.multiplyMatrices(this.earthMatrix,t);var c=this.mercatorPerimeter/Math.pow(2,s)*r.Tile.TileMath.unitScale*2,u=this.seg,p=i.geometry,m=i.skirtGeometry;e.copy(i.box),e.min.y=e.max.y=0;var f=this.viewer.terrainOperationManager.isIntersectFlattenBboxDrawing(e);if(!f&&i.isFlattened)return p.translate(-d,-h,0),m.translate(-d,-h,0),this.tileBuilder.updateGeometryForFlatten(c,c,u,o,!1,r.Tile.TileMath.unitScale,this.viewer.terrainOperationManager,t,p,m,!0),p.translate(d,h,0),m.translate(d,h,0),void(i.isFlattened=!1);f&&(p.translate(-d,-h,0),m.translate(-d,-h,0),this.tileBuilder.updateGeometryForFlatten(c,c,u,o,!1,r.Tile.TileMath.unitScale,this.viewer.terrainOperationManager,t,p,m,!1),p.translate(d,h,0),m.translate(d,h,0),i.isFlattened=!0)}}translateGeometry(e,t,i,n,a,s){var o=this;null==a&&(a=0);var l=o.mercatorPerimeter/Math.pow(2,o.maxZoom)*r.Tile.TileMath.unitScale*2,d=(i*Math.pow(2,o.maxZoom-t)-o.modelTileX)*l+Math.pow(2,o.maxZoom-t)/2*l,h=-(n*Math.pow(2,o.maxZoom-t)-o.modelTileY)*l-Math.pow(2,o.maxZoom-t)/2*l;e.translate(d,h,a),o.globalLayer[t][i][n].geometry=e,e.computeBoundingBox();var c=e.boundingBox.clone();c.applyMatrix4(o.earthMatrix),o.globalLayer[t][i][n].box=c,o.globalLayer[t][i][n].meshLoadState=r.Tile.DemTilesUtil.LOAD_STATE.GEO_LOADED,s&&s()}translateGeometryWithSkirt(e,t,i,n,a,s,o){var l=e[0],d=e[1],h=this;null==a&&(a=0);var c=h.mercatorPerimeter/Math.pow(2,h.maxZoom)*r.Tile.TileMath.unitScale*2,u=(i*Math.pow(2,h.maxZoom-t)-h.modelTileX)*c+Math.pow(2,h.maxZoom-t)/2*c,p=-(n*Math.pow(2,h.maxZoom-t)-h.modelTileY)*c-Math.pow(2,h.maxZoom-t)/2*c;l.translate(u,p,a),d.translate(u,p,a),h.globalLayer[t][i][n].geometry=l,h.globalLayer[t][i][n].skirtGeometry=d,l.computeBoundingBox();var m=l.boundingBox.clone();m.applyMatrix4(h.earthMatrix),h.globalLayer[t][i][n].box=m,h.globalLayer[t][i][n].terrainData=s,h.globalLayer[t][i][n].meshLoadState=r.Tile.DemTilesUtil.LOAD_STATE.GEO_LOADED,o&&o(),h._updateTileMeshForFlatten(h.globalLayer[t][i][n])}getTerrainGeometry(e,t,i,r,n,a,s){this.getTerrainData(e,t,i,(o=>{let l=this.createTerrainGeometry(i,r,n,e,t,o,a);this.translateGeometryWithSkirt(l,i,e,t,null,o,s),this.terrainTileCount--,this.onLoadTerrain()}),(()=>{this.terrainTileCount--,this.onLoadTerrain();let a=new THREE.PlaneBufferGeometry(n,n,r);this.translateGeometry(a,i,e,t,null,s)}))}createTileGeometry(e,t,i,n,a){const s=this.mercatorPerimeter/Math.pow(2,i)*r.Tile.TileMath.unitScale*2,o=this.seg;if(this.useTerrain&&this.textureXYZScale&&this.textureXYZScale[i]&&this.textureXYZScale[i].leftX<=e&&this.textureXYZScale[i].rightX>=e&&this.textureXYZScale[i].upY<=t&&this.textureXYZScale[i].bottomY>=t)this.getTerrainGeometry(e,t,i,o,s,n,a);else if(this.useTerrain&&!this.textureXYZScale&&i>=this.minTerrainLevel)this.getTerrainGeometry(e,t,i,o,s,n,a);else{var l=new THREE.PlaneBufferGeometry(s,s,o);this.translateGeometry(l,i,e,t,null,a)}}worldPositionToLngLat(e){return this.mercator2lonLat(e)}lngLatToWorldPosition(e,t){var i=this.lonLat2Mercator(e[0],e[1]);return this.useTerrain&&t?this.getTileIntersectPoint(e,i,t):t&&t(i),i}_lngLatToWorldPosition2(e){var t=this.lonLat2Mercator(e[0],e[1]);return this.useTerrain?this.getTerrainHeight(t):t}getTerrainHeight(e){var t,i=e.applyMatrix4(this.globalMatrix),n=new r.Raycaster(new THREE.Vector3(i.x,i.y,i.z),new THREE.Vector3(0,-1,0)),a=[];return this.raycast(this.tileGroup,n,a),a.length>0?((t=a[0].point.clone()).applyMatrix4(this.globalMatrixInverse),t):(n=new r.Raycaster(new THREE.Vector3(i.x,i.y,i.z),new THREE.Vector3(0,1,0)),a=[],this.raycast(this.tileGroup,n,a),a.length>0?((t=a[0].point.clone()).applyMatrix4(this.globalMatrixInverse),t):void 0)}raycast(e,t,i){for(var n=0,a=e.children.length;n<a;n++){var s=e.children[n];if(r.Utils.isGroupObject(s))this.raycast(s,t,i);else{if(-1!=s.name.indexOf("Skirt"))continue;s.raycast(t,i)}}}lonLat2Mercator(e,t){var i=new THREE.Vector3,n=r.Tile.TileMath.lonLat2Mercator(e,t,this.mercatorPerimeter),a=r.Tile.TileMath.lonLat2Mercator(this.modelLongitude,this.modelLatitude,this.mercatorPerimeter).sub(new THREE.Vector2(this.basePoint.x,this.basePoint.y));return i.x=n.x-a.x,i.y=n.y-a.y,i.z=-this.modelAltitude*r.Tile.TileMath.unitScale,i}mercator2lonLat(e){var t=r.Tile.TileMath.lonLat2Mercator(this.modelLongitude,this.modelLatitude,this.mercatorPerimeter).sub(new THREE.Vector2(this.basePoint.x,this.basePoint.y));return r.Tile.TileMath.mercator2lonLat(new THREE.Vector2(e.x+t.x,e.y+t.y),this.mercatorPerimeter)}getTileIntersectPoint(e,t,i){e[0],e[1];let n=!1;var a=this;t.z=r.Tile.TileMath.earthHighestAltitude;var s=t.clone().applyMatrix4(this.globalMatrix);for(let e=this.maxZoom;e>=3;e--){var o=this.globalLayer[e];for(let l in o)for(let d in o[l]){let h=o[l][d].box;null!==h&&(s.x<=h.max.x&&s.x>=h.min.x&&s.z<=h.max.z&&s.z>=h.min.z&&(n=!0,a.globalLayer[e][l][d].meshLoadState=r.Tile.DemTilesUtil.LOAD_STATE.GEO_LOADING,a.createTileGeometry(l,d,e,!0,(function(){a.createMaterial(l,d,e,a.mapUrl).then((function(e){var n=new r.Raycaster(new THREE.Vector3(s.x,s.y,s.z),new THREE.Vector3(0,-1,0)),o=[];e.meshNode.raycast(n,o);var l=void 0;if(o.length>0)return(l=o[0].point.clone()).applyMatrix4(a.globalMatrixInverse),l.x=t.x,l.y=t.y,void(i&&i(l))}))}))))}}0==n&&(t.z=-a.modelAltitude*r.Tile.TileMath.unitScale,i&&i(t))}_getOnlineTerrainHeight2(e,t){var i=r.Tile.TileMath.long2tile(e,this.maxZoom),n=r.Tile.TileMath.lat2tile(t,this.maxZoom),a=Math.pow(2,this.maxZoom-this.maxTerrainLevel),s=parseInt(i/a),o=parseInt(n/a),l=i%a,d=n%a,h=new THREE.FileLoader;h.setResponseType("arraybuffer");var c=this.dataUrl.terrainUrl(this.maxTerrainLevel,s,o),u=this;h.load(c,(function(a){for(var s=Array.prototype.slice.call(new Uint16Array(a)),o=new Array(17),h=0;h<o.length;h++){o[h]=new Array(17);for(var c=0;c<17;c++)o[h][c]=s[17*h+c]}var p=o[d][l],m=o[d][l+1],f=o[d+1][l],g=o[d+1][l+1],v=r.Tile.TileMath.tile2boundingBox(i,n,u.maxZoom),y=p+(f-p)*(v.north-t)/(v.north-v.south),M=y+(m+(g-m)*(v.north-t)/(v.north-v.south)-y)*(e-v.west)/(v.east-v.west);console.log(M)}))}}r.Tile.TilePlaneManager=n})();class _ extends r.Tile.TileManager{constructor(e,t,i){super(e,t,i),this.tileGroup.name=r.GlobalData.TileGlobalGroupName,this.tileBuilder=new r.Tile.GlobeTileBuilder,this.updateEarthMatrix()}destroy(){this.offset=null,this.tileBuilder=null,super.destroy()}updateEarthMatrix(){this.earthPos=r.Tile.TileMath.fromDegrees(this.modelLongitude,this.modelLatitude),this.offset=new THREE.Vector3(this.basePoint.x*r.Tile.TileMath.unitScale/1e3,this.basePoint.y*r.Tile.TileMath.unitScale/1e3,-r.Tile.TileMath.earthRadius*r.Tile.TileMath.unitScale-this.modelAltitude*r.Tile.TileMath.unitScale);var e=this.earthPos.clone().normalize(),t=(new THREE.Quaternion).setFromUnitVectors(e,new THREE.Vector3(0,0,1)),i=(new THREE.Quaternion).setFromAxisAngle(new THREE.Vector3(0,0,1),THREE.Math.degToRad(270-this.modelLongitude)-this.modelRotationZ);t.premultiply(i);var n=(new THREE.Matrix4).makeRotationFromQuaternion(t),a=(new THREE.Matrix4).makeTranslation(this.offset.x,this.offset.y,this.offset.z);this.tileGroup.matrix.identity(),this.tileGroup.applyMatrix4(n),this.tileGroup.applyMatrix4(a),this.tileGroup.applyMatrix4(this.globalMatrix),this.tileGroup.matrixAutoUpdate=!1,this.tileGroup.updateMatrixWorld(!0);for(var s=this.layerList.length,o=0;o<s;++o){var l=this.layerList[o];l.tileGroup.matrix.identity(),l.tileGroup.applyMatrix4(n),l.tileGroup.applyMatrix4(a),l.tileGroup.applyMatrix4(this.globalMatrix),l.tileGroup.matrixAutoUpdate=!1,l.tileGroup.updateMatrixWorld(!0)}this.viewer.render()}translateGeometry(e,t,i,n){var a=new THREE.BufferGeometry;a.setIndex(n.index),a.setAttribute("position",new THREE.BufferAttribute(n.position,3)),a.setAttribute("uv",new THREE.BufferAttribute(n.uvs,2)),a.translate(n.center.x*r.Tile.TileMath.unitScale,n.center.y*r.Tile.TileMath.unitScale,n.center.z*r.Tile.TileMath.unitScale),this.globalLayer[i][e][t].geometry=a,a.computeBoundingBox();var s=a.boundingBox.clone();s.applyMatrix4(this.earthMatrix),this.globalLayer[i][e][t].box=s,this.globalLayer[i][e][t].meshLoadState=r.Tile.DemTilesUtil.LOAD_STATE.GEO_LOADED}createStandardGlobalGeometry(e,t,i){var r=this.tileBuilder.computeBuffer(e,t,i,void 0,!1);this.translateGeometry(e,t,i,r)}createTerrainGlobalGeometry(e,t,i,r){const n=this.tileBuilder.computeBuffer(e,t,i,void 0,!1,r);this.translateGeometry(e,t,i,n)}createTileGeometry(e,t,i,r,n){this.seg;var a=this;a.useTerrain&&i>=a.minTerrainLevel?a.getTerrainData(e,t,i,(function(r){a.createTerrainGlobalGeometry(e,t,i,r),n&&n()}),(function(){a.createStandardGlobalGeometry(e,t,i),n&&n()})):(a.createStandardGlobalGeometry(e,t,i),n&&n())}}r.Tile.TileGlobalManager=_,r.Tile.TileManagerFactory={TilePlaneManager:function(e,t,i){return new r.Tile.TilePlaneManager(e,t,i)},TileGlobalManager:function(e,t,i){return new r.Tile.TileGlobalManager(e,t,i)}},function(){class e extends r.BaseModel{constructor(e,t,i,n,a,s){super(t,i),this.isDemLayer=!0,this.id=r.ObjectGroupType.TILEGROUP,this.databagId=this.id,this.viewer=e,this.parseCfgFinish=a,this.debut=s,this.dataUrl=new r.Loader.Url(i),this.tileManager=null,this.loadTileConfig=i.loadConfig,this.ObjectGroup=e.getScene().getOrCreateObjectGroup(r.ObjectGroupType.TILEGROUP,{pickableType:r.PICKABLETYPE.Map,globalSpace:!0})}destroy(){this.manager.removeModel(this.id,!1),this.tileManager.destroy(),this.manager.scene.removeObjectGroupByName(r.ObjectGroupType.TILEGROUP),this.parseCfgFinish=null,this.debut=null,this.viewer=null,super.destroy()}load(e){var t=this;this.manager.chooseRendering(this.statistics.memoeryInfo),this.parseCfgFinish&&this.parseCfgFinish(),this.manager.dispatchEvent({type:r.EVENTS.ON_LOAD_START});var i=new THREE.FileLoader;i.setResponseType("json"),i.load(this.dataUrl.projectUrl(),(function(e){var i=e.metadata.longitude,n=e.metadata.latitude,a=e.metadata.zoom;r.GlobalData.ConstraintZoom=!0;t.viewer.cameraControl.setMaximalRangeofCamera(100),t.viewer.lockAxisZ("Z",[.1,Math.PI/2.01]),t.loadTile(t.viewer,t.loadTileConfig,i,n,a),t.manager.dispatchEvent({type:r.EVENTS.ON_LOAD_COMPLETE,modelId:t.id}),t.debut(t)}))}loadTile(e,t){e.getScene().geometryGroup.boundingBox||(this.getTransforms().boundingBox=new THREE.Box3(new THREE.Vector3(-r.GlobalData.SceneSize,-r.GlobalData.SceneSize,-r.GlobalData.SceneSize),new THREE.Vector3(r.GlobalData.SceneSize,r.GlobalData.SceneSize,r.GlobalData.SceneSize)),this.manager.updateScene(this));var i=e.getScene().getMatrixGlobal().clone();(new THREE.Matrix4).copy(i).invert();var n={};if(t&&"[object Number]"===Object.prototype.toString.call(t.modelAltitude)?n.modelAltitude=t.modelAltitude:(console.log("modelAltitude not in loadConfig, default 0"),n.modelAltitude=0),t&&"[object Number]"===Object.prototype.toString.call(t.modelRotationZ)?n.modelRotationZ=t.modelRotationZ:(console.log("modelRotationZ not in loadConfig, default 0"),n.modelRotationZ=0),t&&t.basePoint?n.basePoint=t.basePoint:(console.log("basePoint not in loadConfig, default (0,0)"),n.basePoint=new THREE.Vector3(0,0,0)),t&&t.modelPosition){n.modelPosition=t.modelPosition,n.useTerrain=t&&t.useTerrain,n.terrainPath=t.terrainPath,n.opacity=t.opacity,n.mapUrl=t.mapUrl,n.terrainOnlineConfig=t.terrainOnlineConfig,n.mapStyle=t.mapStyle,n.useClipping=t.sectionable,n.dataUrl=this.dataUrl,n.maxTerrainLevel=void 0===t.maxTerrainLevel?14:t.maxTerrainLevel,n.minTerrainLevel=void 0===t.minTerrainLevel?10:t.minTerrainLevel,n.maxZoom=void 0===t.maxLevel?18:t.maxLevel,n.imageryProviderType=void 0===t.imageryProviderType?"UrlTemplate":t.imageryProviderType;var a="TilePlaneManager";n.useUnitMeter=t&&t.useUnitMeter,!0===n.useUnitMeter?r.Tile.TileMath.unitScale=1:"global"===n.useUnitMeter&&(a="TileGlobalManager",r.Tile.TileMath.unitScale=1),n.mapLayer=t.mapLayer,this.tileManager=r.Tile.TileManagerFactory[a](this,n,this.ObjectGroup),this.tileManager.addRenderCallback()}else console.log("modelPosition not in loadConfig")}updateMatrix(){this.tileManager&&this.tileManager.updateEarthMatrix()}}r.DemModel=e}(),function(){class e extends r.Tile.TilePlaneManager{constructor(e,t,i){super(e,t,i),this.loadAll=!1}destroy(){this.loadAll=void 0}update(){this.updateEarthMatrix(),this.updateEarth(),this.viewer.render(),this.onLoadTile()}updateEarthMatrix(){this.globalMatrix=this.viewer.getScene().getMatrixGlobal(),this.mercatorPerimeter=r.Tile.TileMath.getMercatorPerimeterByLat(this.modelLatitude),this.modelTileX=r.Tile.TileMath.long2tile(this.modelLongitude,this.maxZoom),this.modelTileY=r.Tile.TileMath.lat2tile(this.modelLatitude,this.maxZoom);var e=r.Tile.TileMath.tile2boundingBox(this.modelTileX,this.modelTileY,this.maxZoom),t=(this.modelLongitude-e.west)/(e.east-e.west),i=(this.modelLatitude-e.north)/(e.north-e.south),n=this.mercatorPerimeter/Math.pow(2,this.maxZoom)*r.Tile.TileMath.unitScale*2,a=-t*n+.5*n-.5*n,s=-i*n-.5*n+.5*n,o=(new THREE.Matrix4).makeTranslation(a,s,0);this.tileGroup.matrix.identity(),this.tileGroup.applyMatrix4(o),this.tileGroup.applyMatrix4(this.globalMatrix),this.tileGroup.matrixAutoUpdate=!1,this.tileGroup.updateMatrixWorld(!0);for(var l=this.layerList.length,d=0;d<l;++d){var h=this.layerList[d];h.tileGroup.matrix.identity(),h.tileGroup.applyMatrix4(o),h.tileGroup.applyMatrix4(this.globalMatrix),h.tileGroup.matrixAutoUpdate=!1,h.tileGroup.updateMatrixWorld(!0)}this.viewer.render()}updateModelLngLatByBasePoint(){}onLoadTile(){!1===this.loadAll&&this.tileCount<=3&&(this.loadAll=!0,this.viewer.modelManager.setRenderStateChanged(!0),this.viewer.modelManager.dispatchEvent({type:r.EVENTS.ON_MAP_LOAD_ALL}))}createTileGeometryFinished(e,t,i){this.globalLayer[i][e][t].meshLoadState===r.Tile.DemTilesUtil.LOAD_STATE.GEO_LOADED&&this.createMaterial(e,t,i,this.mapUrl),this.globalLayer[i][e][t].needUpdateTexture&&this.globalLayer[i][e][t].meshLoadState===r.Tile.DemTilesUtil.LOAD_STATE.LOADED&&this.updateMaterialTexture(e,t,i);for(var n=this.layerList.length,a=0;a<n;++a){var s=this.layerList[a];s.contentUnLoad(i,e,t)&&this.globalLayer[i][e][t].meshLoadState>=r.Tile.DemTilesUtil.LOAD_STATE.GEO_LOADED&&this.createLayerMaterial(s,e,t,i),s.contentLoaded(i,e,t)&&(s.meshNodeMap[i][e][t].visible=!0)}}}r.Tile.FullPlaneTileManager=e}(),function(){class e extends r.Tile.TilePlaneManager{constructor(e,t,i){super(e,t,i),this.loadAll=!1;const n=this.mercatorPerimeter/Math.pow(2,this.maxZoom)*r.Tile.TileMath.unitScale*2;this.commonGeometry=new THREE.PlaneBufferGeometry(n,n,1),this.commonBox=(new THREE.Box3).setFromArray([-n/2,-n/2,0,n/2,n/2,0])}destroy(){this.loadAll=void 0}update(){this.updateEarthMatrix(),this.updateEarth(),this.onLoadTile()}updateEarthMatrix(){this.globalMatrix=this.viewer.getScene().getMatrixGlobal(),this.mercatorPerimeter=r.Tile.TileMath.getMercatorPerimeterByLat(this.modelLatitude),this.modelTileX=r.Tile.TileMath.long2tile(this.modelLongitude,this.maxZoom),this.modelTileY=r.Tile.TileMath.lat2tile(this.modelLatitude,this.maxZoom);var e=r.Tile.TileMath.tile2boundingBox(this.modelTileX,this.modelTileY,this.maxZoom),t=(this.modelLongitude-e.west)/(e.east-e.west),i=(this.modelLatitude-e.north)/(e.north-e.south),n=this.mercatorPerimeter/Math.pow(2,this.maxZoom)*r.Tile.TileMath.unitScale*2,a=-t*n+.5*n-.5*n,s=-i*n-.5*n+.5*n,o=(new THREE.Matrix4).makeTranslation(a,s,0);this.tileGroup.matrix.identity(),this.tileGroup.applyMatrix4(o),this.tileGroup.applyMatrix4(this.globalMatrix),this.tileGroup.matrixAutoUpdate=!1,this.tileGroup.updateMatrixWorld(!0);for(var l=this.layerList.length,d=0;d<l;++d){var h=this.layerList[d];h.tileGroup.matrix.identity(),h.tileGroup.applyMatrix4(o),h.tileGroup.applyMatrix4(this.globalMatrix),h.tileGroup.matrixAutoUpdate=!1,h.tileGroup.updateMatrixWorld(!0)}}updateModelLngLatByBasePoint(){}onLoadTile(){!1===this.loadAll&&this.tileCount<=3&&(this.loadAll=!0,this.viewer.modelManager.setRenderStateChanged(!0),this.viewer.modelManager.dispatchEvent({type:r.EVENTS.ON_MAP_LOAD_ALL}))}addNode(e,t,i){e>=Math.pow(2,i)||e<0||t>=Math.pow(2,i)||t<0||(null==this.globalLayer[i]&&(this.globalLayer[i]={}),null==this.globalLayer[i][e]&&(this.globalLayer[i][e]={}),null==this.globalLayer[i][e][t]&&(this.globalLayer[i][e][t]=new r.Tile.DemTile(i,e,t)),this.globalLayer[i][e][t].meshLoadState==r.Tile.DemTilesUtil.LOAD_STATE.UNLOADED?(this.tileCount++,this.globalLayer[i][e][t].meshLoadState=r.Tile.DemTilesUtil.LOAD_STATE.GEO_LOADING,this.createTileGeometry(e,t,i,!0,(()=>{this.createTileGeometryFinished(e,t,i)}))):this.globalLayer[i][e][t].meshLoadState!=r.Tile.DemTilesUtil.LOAD_STATE.LOADED&&this.globalLayer[i][e][t].meshLoadState!=r.Tile.DemTilesUtil.LOAD_STATE.GEO_LOADED||this.createTileGeometryFinished(e,t,i))}createTileGeometry(e,t,i,n,a){const s=this.mercatorPerimeter/Math.pow(2,i)*r.Tile.TileMath.unitScale*2,o=this.seg;this.useTerrain&&this.textureXYZScale&&this.textureXYZScale[i]&&this.textureXYZScale[i].leftX<=e&&this.textureXYZScale[i].rightX>=e&&this.textureXYZScale[i].upY<=t&&this.textureXYZScale[i].bottomY>=t||this.useTerrain&&!this.textureXYZScale&&i>=this.minTerrainLevel?this.getTerrainGeometry(e,t,i,o,s,n,a):this.translateGeometry(this.commonGeometry,i,e,t,null,a)}translateGeometry(e,t,i,n,a,s){null==a&&(a=0);const o=this.mercatorPerimeter/Math.pow(2,this.maxZoom)*r.Tile.TileMath.unitScale*2,l=Math.pow(2,this.maxZoom-t),d=(i*l-this.modelTileX)*o+l/2*o,h=-(n*l-this.modelTileY)*o-l/2*o;let c=new THREE.Matrix4;c.compose(new THREE.Vector3(d,h,1),new THREE.Quaternion,new THREE.Vector3(l,l,l)),this.globalLayer[t][i][n].tileMatrix=c;let u=this.commonBox.clone().applyMatrix4(c);u.applyMatrix4(this.earthMatrix),this.globalLayer[t][i][n].box=u,this.globalLayer[t][i][n].meshLoadState=r.Tile.DemTilesUtil.LOAD_STATE.GEO_LOADED,s&&s()}translateGeometryWithSkirt(e,t,i,n,a,s){null==a&&(a=0);let o=e[0],l=e[1];const d=this.mercatorPerimeter/Math.pow(2,this.maxZoom)*r.Tile.TileMath.unitScale*2,h=Math.pow(2,this.maxZoom-t),c=(i*h-this.modelTileX)*d+h/2*d,u=-(n*h-this.modelTileY)*d-h/2*d;let p=new THREE.Matrix4;p.compose(new THREE.Vector3(c,u,1),new THREE.Quaternion,new THREE.Vector3(1,1,1)),this.globalLayer[t][i][n].tileMatrix=p,this.globalLayer[t][i][n].geometry=o,this.globalLayer[t][i][n].skirtGeometry=l,o.computeBoundingBox();var m=o.boundingBox.clone().applyMatrix4(p);m.applyMatrix4(this.earthMatrix),this.globalLayer[t][i][n].box=m,this.globalLayer[t][i][n].meshLoadState=r.Tile.DemTilesUtil.LOAD_STATE.GEO_LOADED,s&&s()}createTileGeometryFinished(e,t,i){this.globalLayer[i][e][t].meshLoadState===r.Tile.DemTilesUtil.LOAD_STATE.GEO_LOADED&&this.createMaterial(e,t,i,this.mapUrl),this.globalLayer[i][e][t].needUpdateTexture&&this.globalLayer[i][e][t].meshLoadState===r.Tile.DemTilesUtil.LOAD_STATE.LOADED&&this.updateMaterialTexture(e,t,i);for(var n=this.layerList.length,a=0;a<n;++a){var s=this.layerList[a];s.contentUnLoad(i,e,t)&&this.globalLayer[i][e][t].meshLoadState>=r.Tile.DemTilesUtil.LOAD_STATE.GEO_LOADED&&this.createLayerMaterial(s,e,t,i),s.contentLoaded(i,e,t)&&(s.meshNodeMap[i][e][t].visible=!0)}}createMaterial(e,t,i){this.globalLayer[i][e][t].meshLoadState=r.Tile.DemTilesUtil.LOAD_STATE.MAT_PARSING;var n=this;return new Promise(((a,s)=>{const o=n.imageryProvider.getImageryUrl(e,t,i);this.loader.load(o,(s=>{let o=new r.MapTileMaterial({map:s,transparent:!1,side:THREE.FrontSide});this.useClipping&&(o.defines.USE_CLIPPING=""),o.updateStyle(n.mapStyle);let l=`${i}-${e}-${t}`;if(o.opacity=this.tileOpacity,this.tileOpacity<1&&(o.transparent=!0),this.globalLayer[i][e][t].meshNode)return this.globalLayer[i][e][t].meshLoadState=r.Tile.DemTilesUtil.LOAD_STATE.LOADED,void a(this.globalLayer[i][e][t]);this.materialMap[l]=o,this.globalLayer[i][e][t].texture=s,this.globalLayer[i][e][t].material=o;let d=null;if(d=this.useTerrain&&this.globalLayer[i][e][t].geometry?new THREE.Mesh(this.globalLayer[i][e][t].geometry,this.materialMap[l]):new THREE.Mesh(this.commonGeometry,this.materialMap[l]),this.globalLayer[i][e][t].meshNode=d,this.globalLayer[i][e][t].meshNode.name=l,this.globalLayer[i][e][t].meshNode.renderOrder=this.baseRenderOrder,this.globalLayer[i][e][t].meshNode.matrix=this.globalLayer[i][e][t].tileMatrix,this.globalLayer[i][e][t].meshNode.matrixAutoUpdate=!1,this.tileGroup.add(this.globalLayer[i][e][t].meshNode),this.globalLayer[i][e][t].skirtGeometry){var h=`Skirt-${i}-${e}-${t}`;this.globalLayer[i][e][t].skirt=new THREE.Mesh(this.globalLayer[i][e][t].skirtGeometry,this.materialMap[l]),this.globalLayer[i][e][t].skirt.name=h,this.globalLayer[i][e][t].skirt.renderOrder=this.baseRenderOrder,this.globalLayer[i][e][t].skirt.matrix=this.globalLayer[i][e][t].tileMatrix,this.globalLayer[i][e][t].skirt.matrixAutoUpdate=!1,this.tileGroup.add(this.globalLayer[i][e][t].skirt)}(this.tileOpacity<1||this.disableSkirt)&&this.globalLayer[i][e][t].skirt&&(this.globalLayer[i][e][t].skirt.visible=!1),this.globalLayer[i][e][t].meshLoadState=r.Tile.DemTilesUtil.LOAD_STATE.LOADED,this.viewer.render(),this.onLoadTerrain(),a(this.globalLayer[i][e][t]),this.tileCount--}),void 0,(()=>{this.tileCount--}))}))}}r.Tile.FullPlaneTileManager2=e}(),function(){class e extends r.BaseModel{constructor(e,t,i,n,a,s){super(t,i),this.id=r.ObjectGroupType.TILEGROUP,this.databagId=this.id,this.viewer=e,this.index=n,this.parseCfgFinish=a,this.debut=s,this.dataUrl=new r.Loader.Url(i),this.loadTileConfig=i.loadConfig,this.tileBuilder=new r.Tile.GlobeTileBuilder,this.objectGroup=t.getScene().getOrCreateObjectGroup(r.GlobalData.TileGlobalGroupName,{pickableType:r.PICKABLETYPE.Map,globalSpace:!0}),this.manager.addModel(this),this.tileManager=null,this._modelMatrix=new THREE.Matrix4}destroy(){this._modelMatrix=null,this.manager.scene.removeObjectGroupByName(r.ObjectGroupType.TILEGROUP),this.tileManager.destroy(),this.tileBuilder.destroy(),this.tileBuilder=null,this.parseCfgFinish=null,this.debut=null,this.viewer=null,this.dataUrl=null,this.loadTileConfig=null,super.destroy()}load(e){this.manager.setDrawableModel(!0),this.manager.chooseRendering(this.statistics.memoeryInfo,!0),this.viewer.rendererManager.setupRenderer(this.viewer.renderSettings),this.parseCfgFinish&&this.parseCfgFinish(),this.manager.dispatchEvent({type:r.EVENTS.ON_LOAD_START});const t=r.GlobalData.SceneSize;this.getTransforms().boundingBox=(new THREE.Box3).setFromArray([-t,-t,-t,t,t,t]),this.manager.updateScene(this);this.viewer.getScene().getMatrixGlobal().clone();this.loadModelConfig(this.viewer,this.loadTileConfig),this.manager.dispatchEvent({type:r.EVENTS.ON_LOAD_COMPLETE})}loadModelConfig(e,t){r.Tile.TileMath.unitScale=1,t.dataUrl=this.dataUrl,this.tileManager=new r.Tile.FullPlaneTileManager2(this,t,this.objectGroup)}hasTransforms(){return!0}preUpdate(e){}update(e){this.tileManager&&this.tileManager.update()}postUpdate(e){}isUserIdExist(e){return!1}}r.Tile.FullPlaneTileModel=e}(),r.Layer.Imagery=class{constructor(e){this.imageryLayer=e.layer,this.x=e.x,this.y=e.y,this.level=e.level,this.request=void 0,this.state=r.Layer.ImageryState.UNLOADED,this.imageUrl=void 0,this.image=void 0,this.texture=void 0,this._destroyed=!1,this.referenceCount=0}destroy(){this._destroyed=!0,this.image&&this.image.destroy&&this.image.destroy(),this.image=void 0,this.texture&&this.texture.destroy&&this.texture.destroy(),this.texture=void 0,this.request&&(this.request.destroy(),this.request=void 0),this.imageryLayer.removeImagery(this),this.imageryLayer=void 0}isDestroyed(){return this._destroyed}addReference(){++this.referenceCount}releaseReference(){return--this.referenceCount,0!==this.referenceCount?this.referenceCount:(this.destroy(),0)}get contentUnloaded(){return this.state===r.Layer.ImageryState.UNLOADED}get contentFailed(){return this.state===r.Layer.ImageryState.FAILED}get contentReady(){return this.state===r.Layer.ImageryState.READY}},function(){class e{constructor(e){this.imageryProvider=e.imageryProvider,this.show=r.Utils.defaultValue(e.show,!0),this.lastShow=!0,this.layerIndex=-1,this.baseLayer=!1,this._imageryCache={},this._destroyed=!1,this._skeleton=new r.Layer.Imagery({layer:this,x:0,y:0,level:0})}destroy(){this._destroyed=!0,this._skeleton.destroy(),this._skeleton=void 0,this.destroyAllImagery(),this._imageryCache=void 0,this.imageryProvider&&this.imageryProvider.destroy&&this.imageryProvider.destroy(),this.imageryProvider=void 0}isDestroyed(){return this._destroyed}static getImageryCacheKey(e,t,i){return`${e}-${t}-${i}`}_createTileImagerySkeletons(e,t,i){if(r.Utils.defined(this._minTerrainLevel)&&e.level<this._minTerrainLevel)return!1;if(r.Utils.defined(this._maxTerrainLevel)&&e.level>this._maxTerrainLevel)return!1;const n=this.imageryProvider;return r.Utils.defined(i)||(insertionPoint=e.imageries.length),n.ready?void 0:(this._skeleton.addReference(),e.imageries.splice(i,0,this._skeleton),!0)}getImagery(t,i,n){const a=e.getImageryCacheKey(t,i,n);let s=this._imageryCache[a];return r.Utils.defined(s)||(s=new r.Layer.Imagery({layer:this,x:t,y:i,level:n}),this._imageryCache[a]=s),s.addReference(),s}destroyAllImagery(){Object.keys(this._imageryCache).forEach((e=>{let t=this._imageryCache[e];t.isDestroyed()||t.destroy(),delete this._imageryCache[e]}))}removeImagery(t){if(!this._imageryCache)return;const i=e.getImageryCacheKey(t.x,t.y,t.level);delete this._imageryCache[i]}}r.Layer.ImageryLayer=e}(),r.Layer.ImageryLayerCollection=class{constructor(){this._layers=[],this.layerAdded=new r.Event,this.layerRemoved=new r.Event,this.layerMoved=new r.Event,this.layerShownOrHidden=new r.Event,this._destroyed=!1}destroy(){this._destroyed=!0,this.removeAll(!0),this._layers=void 0,this.layerAdded=void 0,this.layerRemoved=void 0,this.layerShownOrHidden=void 0}isDestroyed(){return this.destroyed}get length(){return this._layers.length}add(e,t){void 0===t?(t=this._layers.length,this._layers.push(e)):this._layers.splice(t,0,e),this.update(),this.layerAdded.fireEvent(e,t)}addImageryLayer(e,t){const i=new r.Layer.ImageryLayer({imageryProvider:e});return this.add(i,t),i}traverse(e,t){const i=t?Array.from(this._layers):this._layers;t&&i.sort(((e,t)=>e.sequence-t.sequence)),i.forEach((t=>e(t)))}remove(e,t){t=r.Utils.defaultValue(t,!0);const i=this._layers.indexOf(e);return-1!==i&&(this._layers.splice(i,1),this.update(),this.layerRemoved.fireEvent(e,i),t&&e.destroy(),!0)}removeAll(e){e=r.Utils.defaultValue(e,!0),this._layers.forEach(((t,i)=>{this.layerRemoved.fireEvent(t,i),e&&t.destroy()})),this._layers=[]}contains(e){return-1!==this._layers.indexOf(e)}get(e){return this._layers[e]}getByFilter(e){const t=[];return this._layers.forEach((i=>{e&&!e(i)||t.push(i)})),t}update(){const e=this._layers;let t,i=!0;e.forEach(((e,n)=>{e.layerIndex=n,e.show?(e.baseLayer=i,i=!1):e.baseLayer=!1,e.show!==e.lastShow&&(r.Utils.defined(e.lastShow)&&(r.Utils.defined(t)||(t=[]),t.push(e)),e.lastShow=e.show)})),r.Utils.defined(t)&&t.forEach((e=>{this.layerShownOrHidden.fireEvent(e,e.layerIndex,e.show)}))}getLayerIndex(e){return this._layers.indexOf(e)}moveToTop(e){const t=this._layers,i=this.getLayerIndex(e);i!==t.length-1&&(t.splice(i,1),t.push(e),this.update(),this.layerMoved.fireEvent(e,t.length-1,i))}moveToBottom(e){const t=this._layers,i=this.getLayerIndex(e);0!==i&&(t.splice(i,1),t.splice(0,0,e),this.update(),this.layerMoved.fireEvent(e,0,i))}moveToIdx(e,t){const i=this._layers,r=this.getLayerIndex(e);r!==t&&(t<0||t>i.length-1||(i.splice(r,1),i.splice(t,0,e),this.update(),this.layerMoved.fireEvent(e,t,r)))}},function(){class e{constructor(e){e=r.Utils.defaultValue(e,{}),this._option=e,this.mapUrl=e.mapUrl,this.id=e.layerId||r.Utils.getEncodedString(this.mapUrl),this.useClipping=e.useClipping,this._destroyed=!1,this._textureLoader=new THREE.TextureLoader,this._textureLoader.crossOrigin=!0,this.ready=!0,this._readyPromise=void 0,this.maxLimitedLevel=void 0}get readyPromise(){return this._readyPromise}destroy(){this._destroyed=!0,this._textureLoader=void 0,this._readyPromise=void 0}isDestroyed(){return this._destroyed}isAvailableTile(e,t,i){return void 0===this.maxLimitedLevel||i<=this.maxLimitedLevel}getImageryUrl(t,i,r){return e.getRequestMapUrl(this.mapUrl,t,i,r)}getTileMaterial(e){if(!e.texture)return;e.texture.encoding=THREE.GammaEncoding;const t=new r.MapTileMaterial({map:e.texture,transparent:!e.imageryLayer.baseLayer,side:THREE.FrontSide});t._originalTransparent=t.transparent;const i=r.MaterialUtil.getImageByteSize(e.texture.image);return t._imageByteSize+=i,this.useClipping&&(t.defines.USE_CLIPPING=""),t}loadArrayBufferImmediately(e,t,i){if(!this.isDestroyed())if(r.EnableStorage)r.storageManager.getTexture(e).then((e=>t(e))).catch((n=>{if(this.isDestroyed())return;this._textureLoader.load(e,(function(i){t(i),r.storageManager.addTexture(i,e).catch((e=>{}))}),void 0,(function(e){i(e)}))}));else{this._textureLoader.load(e,(function(e){t(e)}),void 0,(function(e){i(e)}))}}cloneParameters(){return Object.assign(this._option)}setReadyCallback(e){}getQuadX(e,t){return e}getQuadY(e,t){return e}static getRequestMapUrl(e,t,i,r){var n={"{x}":t.toString(),"{y}":i.toString(),"{z}":r.toString()},a=new RegExp(Object.keys(n).join("|"),"gi");return e=e.replace(a,(function(e){return n[e]}))}}r.Layer.ImageryProvider=e}(),function(){class e extends r.Layer.ImageryProvider{constructor(e){super(e)}getImageryUrl(e,t,i){return r.Layer.ImageryProvider.getRequestMapUrl(this.mapUrl,e,t,i)}}r.Layer.UrlTemplateImageryProvider=e}(),function(){class e extends r.Layer.ImageryProvider{constructor(e){super(e)}getImageryUrl(e,t,i){let r=this.mapUrl;const n=i%8;var a={"{x}":t.toString(),"{y}":e.toString(),"{z}":i.toString()},s=new RegExp(Object.keys(a).join("|"),"gi");if(r=r.replace(s,(function(e){return a[e]})),r.indexOf("tianditu.gov.cn")>=0){let e=/http[s]?(:\/\/t[1]?[0-9].)/.exec(r);if(e){let t=e[1];r=r.replace(t,`://t${n}.`)}}return r}}r.Layer.WebMapTileServiceTDUImageryProvider=e}(),function(){let e=new THREE.Vector2,t=new THREE.Vector2,i=new THREE.Box2;class n extends r.Layer.ImageryProvider{constructor(e){super(e),this._jsonLoader=new THREE.FileLoader,this._jsonLoader.setResponseType("json"),this._imagePostfix=void 0,this._urlTemplate=void 0,this.ready=!1,this._availableTilesChecked=!1,this._readyCallback=null,this.checkIfReady()}destroy(){this._jsonLoader=void 0,this._readyCallback=null,super.destroy()}setReadyCallback(e){this._readyCallback=e}checkIfReady(){this._readyPromise=this._fetchMetadata().then((()=>{this.ready=!0,this._readyCallback&&this._readyCallback()})).catch((()=>{this.ready=!1}))}_fetchMetadata(){const e=this._textureLoader,t=this._jsonLoader,i=this.mapUrl,r=[],n=new Promise(((e,r)=>{const n=`${i}/meta.json`;t.load(n,(t=>{this._parseMetaConfig(t),e()}),void 0,(()=>{r()}))})),a=new Promise(((e,r)=>{const n=`${i}/layer.json`;t.load(n,(t=>{this._parseLayerConfig(t),e()}),void 0,(()=>{r()}))}));return r.push(n),r.push(a),new Promise(((t,i)=>{Promise.all(r).then((()=>{const r=this.getImageryUrl(0,0,0);r?e.load(r,(function(){t()}),void 0,(function(){i()})):i()})).catch((e=>{console.log(e)}))}))}_parseMetaConfig(e){const t=e.contentType?e.contentType.split("/")[1]:void 0;this._imagePostfix=r.Utils.defaultValue(t,"png"),this._bounds=e.bounds,this._maxzoom=e.maxzoom,this._minzoom=e.minzoom}_parseLayerConfig(i){this._projection=i.projection,this._scheme=i.scheme;const n=i.tiles?i.tiles[0].split(".")[0]:void 0;if(this._urlTemplate=r.Utils.defaultValue(n,"{z}/{x}/{y}"),this._availableTiles=i.available,this._availableTiles&&this._availableTiles.length){this._availableTileBounds=new THREE.Box2;const i=this._availableTileBounds;this._availableTiles.forEach((r=>{r.forEach((r=>{i.expandByPoint(e.set(r.startX,r.startY)),i.expandByPoint(t.set(r.endX,r.endY))}))}))}}isAvailableTile(n,a,s){if(void 0!==this.maxLimitedLevel&&s>this.maxLimitedLevel)return!1;if(this._maxzoom&&(s<this._minzoom||s>this._maxzoom))return!1;const o=this._bounds;if(o){const e=r.Tile.TileMath.long2tile(o.west,s),t=r.Tile.TileMath.long2tile(o.east,s),i=r.Tile.TileMath.lat2tile(o.south,s),l=r.Tile.TileMath.lat2tile(o.north,s),d=Math.min(i,l),h=Math.max(i,l);if(n<e||n>t||a<d||a>h)return!1}if(this._availableTilesChecked){const r=this._availableTileBounds;if(r&&!r.containsPoint({x:n,y:a}))return!1;const s=this._availableTiles;if(s){return s.some((r=>r.some((r=>(i.makeEmpty(),i.expandByPoint(e.set(r.startX,r.startY)),i.expandByPoint(t.set(r.endX,r.endY)),i.containsPoint({x:n,y:a}))))))}}return!0}getImageryUrl(e,t,i){if(!this._imagePostfix||!this._urlTemplate)return;let n=`${this.mapUrl}/${this._urlTemplate}.${this._imagePostfix}`;return r.Layer.ImageryProvider.getRequestMapUrl(n,e,t,i)}}r.Layer.SpecificMapServiceImageryProvider=n}(),r.Layer.ImageryProviderFactory={UrlTemplate:function(e){return new r.Layer.UrlTemplateImageryProvider(e)},WebMapTileServiceTDU:function(e){return new r.Layer.WebMapTileServiceTDUImageryProvider(e)},SpecificMapService:function(e){return new r.Layer.SpecificMapServiceImageryProvider(e)},TileMapBingMapService:function(e){return new r.Layer.TileMapBingMapServiceProvider(e)},TileMapTencentMapService:function(e){return new r.Layer.TileMapTencentMapServiceProvider(e)},TileMapService:function(e){return new r.Layer.TileMapServiceProvider(e)},WebMapService:function(e){return new r.Layer.WebMapServiceProvider(e)},WebMapTileService:function(e){return new r.Layer.WebMapTileServiceTDUImageryProvider(e)},BdMapService:function(e){return new r.Layer.BdImageryProvider(e)}},function(){class e extends r.Layer.ImageryProvider{constructor(e){super(e)}getImageryUrl(e,t,i){let r=this.mapUrl;const n=i%8;let a="";for(let r=i;r>0;r--){let i=0,n=1<<r-1;0!=(e&n)&&i++,0!=(t&n)&&(i++,i++),a+=i.toString()}""===a&&(a="0");var s={"{x}":a},o=new RegExp(Object.keys(s).join("|"),"gi");r=r.replace(o,(function(e){return s[e]}));let l=/http[s]?(:\/\/ecn.t[1]?[0-9].)/.exec(r);if(l){let e=l[1];r=r.replace(e,`://t${n}.`)}return r}}r.Layer.TileMapBingMapServiceProvider=e}(),function(){class e extends r.Layer.ImageryProvider{constructor(e){super(e)}getImageryUrl(e,t,i){let r=this.mapUrl;const n=i%4,a=(1<<i)-t-1;var s={"{x}":e,"{y}":a,"{sx}":e>>4,"{sy}":a>>4,"{z}":i},o=new RegExp(Object.keys(s).join("|"),"gi");r=r.replace(o,(function(e){return s[e]}));let l=/http[s]?(:\/\/p[1]?[0-9].)/.exec(r);if(l){let e=l[1];r=r.replace(e,`://p${n}.`)}return r}}r.Layer.TileMapTencentMapServiceProvider=e}(),function(){class e extends r.Layer.ImageryProvider{constructor(e){super(e)}getImageryUrl(e,t,i){const n=(1<<i)-t-1;return r.Layer.ImageryProvider.getRequestMapUrl(this.mapUrl,e,n,i)}getQuadY(e,t){return(1<<t)-e-1}}r.Layer.TileMapServiceProvider=e}(),function(){class e extends r.Layer.ImageryProvider{constructor(e){super(e)}getImageryUrl(e,t,i){const n=r.Tile.TileMath.tile2boundingBox(e,t,i);return this.mapUrl+`&bbox=${n.west}%2C${n.south}%2C${n.east}%2C${n.north}`}}r.Layer.WebMapServiceProvider=e}(),function(){class e extends r.Layer.ImageryProvider{constructor(e){super(e)}getImageryUrl(e,t,i){let r=this.mapUrl;const n=1<<i,a=1<<i,s=i+1,o=(e+t)%4;if(r.indexOf("bdimg.com")>=0){let e=/http[s]?(:\/\/maponline[1]?[0-9].)/.exec(r);if(e){let t=e[1];r=r.replace(t,`://maponline${o}.`)}}return r=r.replace("{x}",e-n/2).replace("{y}",a/2-t-1).replace("{z}",s),r}}r.Layer.BdImageryProvider=e}(),r.Layer.Terrain=class{constructor(e){this.state=r.Layer.TerrainState.UNLOADED,this.terrainData=void 0,this.request=void 0}destroy(){this.terrainData=void 0,this.request&&(this.request.destroy(),this.request=void 0)}unload(){this.state=r.Layer.TerrainState.UNLOADED,this.terrainData=void 0,this.request&&(this.request.destroy(),this.request=void 0)}get contentUnloaded(){return this.state===r.Layer.TerrainState.UNLOADED}get contentFailed(){return this.state===r.Layer.TerrainState.FAILED}get contentReady(){return this.state===r.Layer.TerrainState.READY}},r.Layer.TerrainProvider=class{constructor(e){this._levelZeroXTilesNumber=r.Utils.defaultValue(e.levelZeroXTilesNumber,1),this._levelZeroYTilesNumber=r.Utils.defaultValue(e.levelZeroYTilesNumber,1);const t=e.terrainMetadata;this.updateTerrainMetadata(t),this.terrainDataUrl=e.terrainPath?new r.Tile.DemUrl(e.terrainPath):void 0,this.useTerrain=!!this.terrainDataUrl&&r.Utils.defaultValue(e.useTerrain,!1),this.tileGeometrySegments=r.Utils.defaultValue(e.tileGeometrySegments,16),this.maxLimitedLevel=r.Utils.defaultValue(e.maxLevel,18),this._heightmapQuality=.25,this._maximumRadius=6378137,this._unitScale=r.Utils.defaultValue(e.unitScale,1),this._levelZeroMaxGeometricError=this._unitScale*this.getLevelZeroGeometricError(64,this.getXTilesNumber(0)),this.mercatorPerimeter=this._unitScale*r.Utils.defaultValue(e.mercatorPerimeter,2*r.Tile.TileMath.mercatorPerimeter),this.tileBuilder=new r.Tile.PlaneTileBuilder,this.defaultTileGeometry=new THREE.PlaneBufferGeometry(1,1,this.tileGeometrySegments),this.defaultTileGeometry._onlyShared=!0,this.ready=!1,this.getTerrainMetadata(),this.terrainLoader=new THREE.FileLoader,this.terrainLoader.setResponseType("arraybuffer"),this.terrainLoader.crossOrigin=!0,this.terrainSeamThreshold=.5*this._unitScale,this.planeSeamThreshold=1*this._unitScale}destroy(){this.tileBuilder.destroy(),this.tileBuilder=void 0,this.defaultTileGeometry.dispose(),this.defaultTileGeometry=void 0,this.terrainLoader=void 0}setSource(e,t){return this.terrainDataUrl.terrainPath=e.url,this.getTerrainMetadata(t)}getSource(){return this.terrainDataUrl.terrainPath}getXTilesNumber(e){return this._levelZeroXTilesNumber<<e}getYTilesNumber(e){return this._levelZeroYTilesNumber<<e}getLevelZeroGeometricError(e,t){return 2*this._maximumRadius*Math.PI*this._heightmapQuality/(e*t)}getLevelMaxGeometricError(e){return this._levelZeroMaxGeometricError/(1<<e)}createTerrain(e,t,i,n){return new r.Layer.Terrain({})}updateTerrainMetadata(e){this.terrainBoundary=e.boundary,this._minTerrainLevel=e.minLevel,this._maxTerrainLevel=e.maxLevel}getTerrainMetadata(e){if(!1===this.useTerrain)return void(this.ready=!0);const t=this.terrainDataUrl.terrainPath,i=t.indexOf("{z}"),r=`${t.slice(0,i)}layer.json.gz`;let n=new THREE.FileLoader;return n.setResponseType("json"),new Promise(((t,i)=>{n.load(r,(i=>{this.terrainMetadata=i,this.updateTerrainMetadata(this.terrainMetadata),this.ready=!0,e&&e(),t()}),void 0,(()=>{this.ready=!0,e&&e(),i()}))}))}isAvailableTile(e,t,i){if(!this.useTerrain)return!0;if(i<this._minTerrainLevel)return!1;let r=this.terrainBoundary[i];if(!r){const e=this.terrainBoundary[this._maxTerrainLevel],t=1<<i-this._maxTerrainLevel,n=e.leftX*t+0,a=e.upY*t+0,s=e.rightX*t+1,o=e.bottomY*t+1;this.terrainBoundary[i]={},this.terrainBoundary[i].leftX=n,this.terrainBoundary[i].upY=a,this.terrainBoundary[i].rightX=s,this.terrainBoundary[i].bottomY=o,r=this.terrainBoundary[i]}return e>=r.leftX&&e<=r.rightX&&t>=r.upY&&t<=r.bottomY}getAvailableTile(e,t,i,r){if(0===i)return;const n=(i/r|0)*r,a=1<<i-n;return{level:n,x:e/a|0,y:t/a|0}}getTileAvailable(e,t,i){}getTileBoundingBox(e,t,i){const r=this.mercatorPerimeter/Math.pow(2,i),n=-.5*this.mercatorPerimeter+e*r,a=n+r,s=.5*this.mercatorPerimeter-t*r,o=s-r;return new THREE.Box3(new THREE.Vector3(n,o,-1),new THREE.Vector3(a,s,1))}isOverMaxLevel(e){return!!this.useTerrain&&e>this._maxTerrainLevel}getLevelXYOfDataSource(e,t,i){const r=this._maxTerrainLevel;if(i>r)return this.getParentLevelXY(e,t,i,r)}getParentLevelXY(e,t,i,r){const n=1<<i-r;return{x:e/n|0,y:t/n|0,level:r,divisor:n,xIndex:e%n,yIndex:t%n}}getTerrainUrl(e,t,i){if(this.useTerrain)return this.terrainDataUrl.terrainUrl(i,e,t)}getTileGeometry(e){if(!this.useTerrain)return{geometry:this.defaultTileGeometry,matrix:this._getTileTransformMatrix(e,!0)};const{x:t,y:i,level:r}=e,n=e.tileTerrain.terrainData,a=this.getTileGeometryByData(n,t,i,r,!1),s=a.geometry;return s.computeBoundingBox(),e.updateTerrainHeight(s.boundingBox),a}getTileGeometryByData(e,t,i,r,n){const a=this.tileGeometrySegments,s=this.mercatorPerimeter/Math.pow(2,r)+this.terrainSeamThreshold,o=this.tileBuilder.computePlaneGeometry(s,s,a,e,n,this._unitScale);return{geometry:o[0],skirtGeometry:o[1],matrix:this._getTileTransformMatrix({x:t,y:i,level:r},!1)}}updateTileGeometryForFlatten(e,t,i,r,n,a){if(!this.useTerrain)return;const s=this.tileGeometrySegments,o=e.tileTerrain.terrainData,l=this.mercatorPerimeter/Math.pow(2,e.level)+this.terrainSeamThreshold;this.tileBuilder.updateGeometryForFlatten(l,l,s,o,!1,this._unitScale,t,i,r,n,a)}getTerrainDataArray(e){const t=this.tileGeometrySegments,i=Array.prototype.slice.call(new Int16Array(e));let n=new Array(t+1);for(let e=0,a=n.length;e<a;e++){n[e]=new Array(t+1);for(let a=0,s=t+1;a<s;a++)i[e*(t+1)+a]!==r.Tile.DemTilesUtil.InvalidTerrainValue?n[e][a]=i[e*(t+1)+a]:n[e][a]=0}return n}getTerrainDataArrayOutOfLevel(e){if(e.parent&&e.parent.tileTerrain.terrainData)return this.getTerrainDataArrayFromParent(e)}getTerrainDataArrayFromParent(e){const t=e._parent.tileTerrain.terrainData,i=this.tileGeometrySegments,{divisor:n,xIndex:a,yIndex:s}=this.getParentLevelXY(e.x,e.y,e.level,e._parent.level),o=i/n,l=a*o,d=s*o;let h=new Array(o+1);for(let e=0,i=h.length;e<i;e++){h[e]=new Array(o+1);for(let i=0;i<=o;++i)h[e][i]=t[d+e][l+i]}return r.Tile.TileMath.createHeightArray(h,i)}_getTileTransformMatrix(e,t){const{x:i,y:r,level:n}=e,a=n>0?Math.pow(2,n)/2:0,s=this.mercatorPerimeter/Math.pow(2,n),o=s+this.planeSeamThreshold,l=t?(new THREE.Matrix4).makeScale(o,o,1):new THREE.Matrix4,d=i*s+.5*s-a*s,h=-(r*s+.5*s-a*s),c=(new THREE.Matrix4).makeTranslation(d,h,0),u=new THREE.Matrix4;return u.premultiply(l).premultiply(c),u}loadArrayBufferImmediately(e,t,i){this.terrainLoader.load(e,(function(e){t(e)}),void 0,(function(e){i(e)}))}getMaxMinTerrainLevel(){return{maxLevel:this._maxTerrainLevel,minLevel:this._minTerrainLevel}}setMercatorPerimeter(e){this.mercatorPerimeter=this._unitScale*e}},function(){let e=new THREE.Box3,t=new THREE.Matrix4;r.Layer.GlobeTileProvider=class{constructor(e){if(this.imageryLayers=new r.Layer.ImageryLayerCollection,this.terrainProvider=new r.Layer.TerrainProvider(e.loadConfig),this.terrainOperationManager=e.terrainOperationManager,this.globeLayer=e.globeLayer,this.mapExcavation=e.loadConfig.mapExcavation||{},this.mapStyle={},this.presetOpacity=1,this.tileOpacity={},this.tileVisible={},this.show=!0,this.skirtShow=!0,this._layerOrderChanged=!1,this._materialCache={},this._skirtMeshCache={},!1!==e.loadConfig.useDefaultImagery&&e.loadConfig.mapUrl){this.baseLayerId=this.addImageryLayer({imageryProviderType:e.loadConfig.imageryProviderType,useClipping:e.loadConfig.sectionable,mapLayer:e.loadConfig.mapLayer,mapUrl:e.loadConfig.mapUrl});const t=e.loadConfig.opacity||1;this.tileOpacity[this.baseLayerId]=t,this.tileVisible[this.baseLayerId]=!0,this.mapStyle[this.baseLayerId]=e.loadConfig.mapStyle||{}}}destroy(){this.terrainProvider.destroy(),this.terrainProvider=void 0,this.imageryLayers.destroy(),this.ImageryLayers=void 0,this._materialCache=void 0,this._skirtMeshCache=void 0,this.terrainOperationManager=void 0,this.baseLayerId=void 0,this.presetOpacity=void 0}static getTileCacheKey(e,t,i){return`${e}-${t}-${i}`}setPresetOpacity(e){this.presetOpacity=e}getPresetOpacity(){return this.presetOpacity}get ready(){return this.terrainProvider.ready&&this.imageryLayers.length&&this.imageryLayers.get(0).imageryProvider.ready}canRefine(e){return!!e.terrainData||void 0!==this.terrainProvider.getTileDataAvailable(2*e.x,2*e.y,e.level+1)}_onLayerAdded(e,t){this._layerOrderChanged=!0}_onLayerRemoved(e,t){this._layerOrderChanged=!0}_onLayerMoved(e,t,i){this._layerOrderChanged=!0}parseTileContent(e,t){e.isDestroyed()||(this._createTileMesh(e),t(e))}_createTileMesh(e){const t=e.content.meshes,i=this.terrainProvider.getTileGeometry(e),n=r.EnumLayerBaseRenderOrder.MAP;e.imageries.forEach(((a,s)=>{const o=a.imageryLayer.imageryProvider,l=o.id,d=o.getTileMaterial(a);if(!d)return;this.updateTileMaterial(d,l);const h=n+s;let c=new r.MeshEx(i.geometry,d);if(c.name=e.name,c.renderOrder=h,c.layerId=l,i.matrix&&c.matrix.copy(i.matrix),r.GlobalData.EnableShadowMap&&(c.castShadow=this.globeLayer.castShadow,c.receiveShadow=this.globeLayer.receiveShadow),t.add(c),this.updateTileMesh(c,l),i.skirtGeometry){let n=new r.MeshEx(i.skirtGeometry,d);n.name=`Skirt-${e.name}`,n.renderOrder=h,n.layerId=l,i.matrix&&n.matrix.copy(i.matrix),r.GlobalData.EnableShadowMap&&(n.castShadow=this.globeLayer.castShadow,n.receiveShadow=this.globeLayer.receiveShadow),t.add(n),this.updateSkirtVisible(n,l),this._cacheSkirtMesh(l,n)}this._cacheMaterial(l,d)})),this.updateTileMeshForFlatten(e)}setBaseLayerId(e){this.baseLayerId=e}getBaseLayerId(){return this.baseLayerId}getAllLayerIds(){const e=this.imageryLayers.getByFilter();let t=[];for(const i of e)t.push(i.imageryProvider.id);return t}updateTileMeshForFlatten(i){if(i.content){var r=i.content.meshes;if(r&&2==r.children.length){var n=r.children[0],a=r.children[1],s=this.terrainOperationManager,o=i._tileset._objectGroup.matrix,l=!1;if(i.boundingBox&&(e.copy(i.boundingBox),e.applyMatrix4(o),e.min.y=0,e.max.y=0,l=s.isIntersectFlattenBboxDrawing(e)),!l&&i.isFlattened)return this.terrainProvider.updateTileGeometryForFlatten(i,s,t,n.geometry,a.geometry,!0),void(i.isFlattened=!1);if(l){var d=n.matrix;t.multiplyMatrices(o,d),this.terrainProvider.updateTileGeometryForFlatten(i,s,t,n.geometry,a.geometry,!1),i.isFlattened=!0}}}}clearMaterialAndSkirtCache(){for(let e in this._materialCache)delete this._materialCache[e];for(let e in this._skirtMeshCache)delete this._skirtMeshCache[e]}removeFromMaterialAndSkirtCache(e){this._materialCache[e]&&delete this._materialCache[e],this._skirtMeshCache[e]&&delete this._skirtMeshCache[e]}_cacheMaterial(e,t){this._materialCache[e]||(this._materialCache[e]=[]),this._materialCache[e].push(t)}_cacheSkirtMesh(e,t){this._skirtMeshCache[e]||(this._skirtMeshCache[e]=[]),this._skirtMeshCache[e].push(t)}setOpacity(e,t){this.tileOpacity[t]=e;const i=r.Tile.DemTilesUtil.isTransparent(e),n=this._materialCache[t];n&&(n.forEach((e=>{this.updateTileMaterialOpacity(e,t)})),i?this.hideSkirt():this.showSkirt())}getOpacity(e){return this.tileOpacity[e]}setImageryLayerVisible(e,t){this.tileVisible[e]=t,this.globeLayer.setImageryLayerVisible(e,t)}hasImageryLayerVisible(){return Object.keys(this.tileVisible).some((e=>!0===this.tileVisible[e]))}setStyle(e,t){this.mapStyle[t]=e;const i=this._materialCache[t];i&&i.forEach((e=>{this.updateTileMaterialStyle(e,t)}))}setExcavation(e){this.mapExcavation=e;for(const e in this._materialCache){this._materialCache[e].forEach((e=>{this.updateTileMaterialExcavation(e),this.updateTileMaterialSide(e)}))}}updateMaterialsSide(){const e=this.getBaseLayerId();this._materialCache[e].forEach((e=>{this.updateTileMaterialSide(e)}))}updateTileMaterialStyle(e,t){e.updateStyle&&this.mapStyle[t]&&e.updateStyle(this.mapStyle[t])}updateTileMaterialExcavation(e){e.updateExcavation&&e.updateExcavation(this.mapExcavation)}updateTileMaterialSide(e){e.updateSide&&e.updateSide({isExcavation:this.mapExcavation&&this.mapExcavation.isExcavation})}updateTileMaterial(e,t){this.updateTileMaterialStyle(e,t),this.updateTileMaterialOpacity(e,t),this.updateTileMaterialExcavation(e),this.updateTileMaterialSide(e)}updateTileMesh(e,t){const i=this.tileVisible[t];e.visible=i}updateTileMaterialOpacity(e,t){const i=this.tileOpacity[t];e.opacity=i,e._originalTransparent||(e.transparent=r.Tile.DemTilesUtil.isTransparent(i))}updateMaterialsValue(e,t,i,r){for(const e in this._materialCache){this._materialCache[e].forEach((e=>{if(e&&e.hasOwnProperty(t)){if(r&&0==e.receiveIBL)return;e[t]=i,void 0!==e.refreshUniforms&&e.refreshUniforms(),e.needsUpdate=!0}}))}}hideSkirt(){this.skirtShow=!1;for(const e in this._skirtMeshCache){this._skirtMeshCache[e].forEach((e=>{e.visible=!1}))}}showSkirt(){this.skirtShow=!0;for(const e in this._skirtMeshCache){this._skirtMeshCache[e].forEach((e=>{e.visible=!0}))}}updateSkirtVisible(e,t){if(this.tileVisible[t]){r.Tile.DemTilesUtil.isTransparent(this.tileOpacity[t])&&this.skirtShow&&(this.skirtShow=!1),e.visible=this.skirtShow}else e.visible=!1}getMaxLimitedLevel(){return this.terrainProvider.maxLimitedLevel}setMaxLimitedLevel(e){this.terrainProvider.maxLimitedLevel=e}setTerrainEnabled(e){return this.terrainProvider.terrainDataUrl?this.terrainProvider.useTerrain!==e&&(this.terrainProvider.useTerrain=e,!0):(console.log("No terrain data is set, cannot switch terrain!"),!1)}setTerrainProvider(e,t){return this.terrainProvider.setSource(e,t)}getTerrainUrl(){return this.terrainProvider.getSource()}getMaxImageryLevel(e){const t=this.getImageryLayerById(e);return t?t.imageryProvider.maxLimitedLevel:this.terrainProvider.maxLimitedLevel}setMaxImageryLevel(e,t){const i=this.getImageryLayerById(e);i&&(i.imageryProvider.maxLimitedLevel=t)}createDefaultImageryProvider(e){return void 0===e.imageryProviderType&&(e.imageryProviderType="UrlTemplate"),new r.Layer.ImageryProviderFactory[e.imageryProviderType](e)}getBaseImageryLayer(){const e=this.imageryLayers.getByFilter();return e.length>0?e[0]:void 0}getImageryLayerById(e){const t=this.imageryLayers.getByFilter((t=>t.imageryProvider.id===e));return t.length>0?t[0]:void 0}getImageryLayerByMapUrl(e){const t=this.imageryLayers.getByFilter((t=>t.imageryProvider.mapUrl===e));return t.length>0?t[0]:void 0}addImageryLayer(e,t){const i=this.imageryLayers.addImageryLayer(this.createDefaultImageryProvider(e),t).imageryProvider.id;return this.tileOpacity[i]=e.opacity||this.presetOpacity,this.tileVisible[i]=r.Utils.defaultValue(e.visible,!0),i}removeImageryLayer(e){delete this.tileOpacity[e],delete this.tileVisible[e],this.removeFromMaterialAndSkirtCache(e);const t=this.getImageryLayerById(e);t&&this.imageryLayers.remove(t)}adjustImageryLayer(e,t){const i=this.getImageryLayerById(e);i&&this.imageryLayers.moveToIdx(i,t)}getImageryLayerIndex(e){const t=this.getImageryLayerById(e);return t?this.imageryLayers.getLayerIndex(t):-1}}}(),function(){class e{static makeRequest(e,t){e.requestCallback=function(){const i=new r.Deferred;return t(e.url,(function(e){i.resolve(e)}),(function(e){i.reject(e)})),e.cancelCallback=function(){},i.promise};const i=r.RequestScheduler.request(e);if(i)return i.then((function(t){return e.cancelCallback=void 0,t})).catch((function(t){return e.cancelCallback=void 0,Promise.reject(t)}))}static processTerrain(e,t){}static requestTerrain(t){const i=t.tileTerrain;if(!i.contentUnloaded)return;const n=r.Layer.TerrainState,a=t._tileset.tileProvider.terrainProvider,s=a.getTerrainUrl(t.x,t.y,t.level);function o(e){i.terrainData=e,i.state=n.READY,i.request=void 0}function l(){i.state=n.FAILED,i.request=void 0}if(a.isAvailableTile(t.x,t.y,t.level))if(s)if(a.isOverMaxLevel(t.level)){const e=a.getTerrainDataArrayOutOfLevel(t);e&&o(e)}else!function(){const a=new r.Request({url:s,type:r.RequestType.TERRAIN,priorityCallback:t._createPriorityCallback(t)});i.request=a,i.state=n.RECEIVING;const h=e.makeRequest(a,d);if(!h)return i.state=n.UNLOADED,void(i.request=void 0);h.then((function(e){t.isDestroyed()?l():o(e)})).catch((function(e){!function(){if(i.request&&i.request.state===r.RequestState.CANCELLED)return i.terrainData=void 0,i.state=n.UNLOADED,i.request=void 0,--t._tileset.statistics.numberOfPendingRequests,void++t._tileset.statistics.numberOfAttemptedRequests;i.state=n.FAILED,i.request=void 0;const e=`Failed to obtain terrain tile X: ${t.x} Y: ${t.y} Level: ${t.level}.`;console.log(e)}()}))}();else o();else l();function d(e,i,r){a.loadArrayBufferImmediately(e,(function(e){i(a.getTerrainDataArray(e))}),(function(){const e=a.getTerrainDataArrayOutOfLevel(t);e?i(e):r()}))}}static requestImageries(t){const i=t._tileset.tileProvider.imageryLayers._layers;t.imageries.length=0,i.forEach((i=>{const r=i.getImagery(t.x,t.y,t.level);t.imageries.push(r),e.requestImagery(t,r)}))}static requestImagery(t,i){const n=i.imageryLayer.imageryProvider;if(!i.contentUnloaded||!n.ready||!n.mapUrl)return;const a=r.Layer.ImageryState;function s(){i.state=a.FAILED,i.request=void 0}if(!n.isAvailableTile(t.x,t.y,t.level))return void s();const o=n.getImageryUrl(t.x,t.y,t.level);function l(e,t,i){n.loadArrayBufferImmediately(e,t,i)}!function(){const n=new r.Request({url:o,type:r.RequestType.IMAGERY,priorityCallback:t._createPriorityCallback(t)});i.request=n,i.state=a.TRANSITIONING;const d=e.makeRequest(n,l);if(!d)return i.state=a.UNLOADED,void(i.request=void 0);d.then((function(e){var r;t.isDestroyed()?s():(r=e,i.texture=r,i.state=a.READY,i.request=void 0)})).catch((function(e){!function(){if(i.request&&i.request.state===r.RequestState.CANCELLED)return i.state=a.UNLOADED,void(i.request=void 0);i.state=a.FAILED,i.request=void 0;const e=`Failed to obtain image tile X: ${i.x} Y: ${i.y} Level: ${i.level}.`;console.log(e)}()}))}()}static processImageries(t,i){let r=!1,n=!0;return t.imageries.forEach((a=>{const s=e.processImagery(t,a,i);n=n&&s,r=r||s})),t.renderable=t.renderable&&(r||n),n}static processImagery(t,i,n){const a=r.Layer.ImageryState;return i.state===a.UNLOADED&&(i.state=a.TRANSITIONING,e.requestImagery(t,i)),i.state===a.RECEIVED&&(i.state=a.TRANSITIONING,i.imageryLayer._createTexture(i,n)),i.state===a.TEXTURE_LOADED&&(i.state=a.TRANSITIONING,i.imageryLayer._reprojectTexture(i,n)),i.state===a.READY||(i.state===a.FAILED||i.state===a.INVALID)}}r.Layer.GlobeTileScheduler=e}(),function(){class e extends r.AbstractTileContent{constructor(e,t){super(e,t),this._geometryByteLength=0}destroy(){super.destroy()}getTexturesByteLength(){const e=this._meshes.children;for(let t of e)if(t.children&&t.children.length>0)for(let e of t){const t=e.material;t&&t._imageByteSize&&!t._sizeCached&&(this._texturesByteLength+=t._imageByteSize,t._sizeCached=!0)}else if(t.material){const e=t.material;e._imageByteSize&&!e._sizeCached&&(this._texturesByteLength+=e._imageByteSize,e._sizeCached=!0)}}disposeGeometry(){this._meshes.parent&&this._meshes.parent.remove(this._meshes);const e=this._meshes.children;for(let t=0,i=e.length;t<i;++t){const i=e[t];if(i.children&&i.children.length)for(let e=0,t=i.children.length;e<t;++e){const t=i.children[e];t.geometry._onlyShared||t.geometry.dispose(),t.geometry=void 0,this._disposeMaterial(t.material),t.material=void 0}else i.geometry&&(i.geometry._onlyShared||i.geometry.dispose(),i.geometry=void 0,this._disposeMaterial(i.material),i.material=void 0)}this._meshes=void 0}parseTileContent(e){this._tile._tileset.tileProvider.parseTileContent(this._tile,(function(t){e(t)}))}disposeContentBuffer(){}_disposeMaterial(e){r.Utils.isDefined(e.map)&&(e.map.dispose(),e.map=null),e.dispose()}}r.Layer.GlobeTileContent=e}(),function(){let e=new THREE.Box3;class t extends r.AbstractTile{constructor(e,t){super(e,t.parent),this.x=t.x,this.y=t.y,this.level=t.level,this.name=`${this.x}-${this.y}-${this.level}`,this.refineReplace=!0,this.isGlobeTile=!0,this._contentType=r.TileContentType.DATA_MESH,this._contentIndex=this.name,this._debugLodLevel=this._parent?this._parent._debugLodLevel+1:0;const i=e.tileProvider.terrainProvider;this._boundingBox=i.getTileBoundingBox(this.x,this.y,this.level),this.geometricError=i.getLevelMaxGeometricError(this.level),this.invalid=!1,this.tileTerrain=new r.Layer.Terrain,this.renderable=!1,this.terrainMaxHeight=this._boundingBox.max.z,this.terrainMinHeight=this._boundingBox.min.z,this.imageries=[]}destroy(){super.destroy(),this.tileTerrain.destroy(),this.tileTerrain=null,this.imageries=null}get needsLoading(){return!this.isTerrainFailed()&&(!this.isTerrainReady()||this._isAnyImageryNoReady())}get contentDataAvailable(){return!this.contentTypeEmpty&&this.contentReady&&this._isAnyImageryReady()}fetchContentBlock(e,t,i){t()}createContent(e){return new r.Layer.GlobeTileContent(this,e)}isTerrainReady(){return this.tileTerrain.contentReady}isTerrainFailed(){return this.tileTerrain.contentFailed}_isAnyImageryNoReady(){return 0===this.imageries.length||this.imageries.some((e=>!e.contentFailed&&!e.contentReady))}_isAnyImageryReady(){return this.imageries.some((e=>e.contentReady))}_isAllImageryReady(){if(0===this.imageries.length)return!1;let e=!0,t=!1;return this.imageries.forEach((i=>{e=e&&(i.contentReady||i.contentFailed),t=t||i.contentReady})),e&&t}_checkIfTerrainLoadingDone(){return this.renderable=!1,this.tileTerrain.contentFailed?(this._contentType=r.TileContentType.DATA_TILE,this._contentState=r.TileContentState.READY,!1):!!this.tileTerrain.contentReady&&(this.renderable=!0,!0)}_checkIfImageryLoadingDone(){let e=!0;return this.imageries.forEach((t=>{e=e&&(t.contentReady||t.contentFailed)})),e}requestContent(){if(r.Layer.GlobeTileScheduler.requestTerrain(this),!this._checkIfTerrainLoadingDone())return!1;if(r.Layer.GlobeTileScheduler.requestImageries(this),!this._checkIfImageryLoadingDone()||!this.contentUnloaded)return!1;this._contentState=r.TileContentState.LOADING,this._contentProcessDeferred=new r.Deferred,this._contentReadyDeferred=new r.Deferred;const e=this._handleFailedContent(this,this._tileset),t=this;return Promise.resolve(this.tileTerrain.terrainData).then((function(i){t.isDestroyed()?e():t._initialContent(i)})).catch((function(i){t._contentState=r.TileContentState.UNLOADED,e(i)})),!0}updateTerrainHeight(e){this.terrainMaxHeight=e.max.z,this.terrainMinHeight=e.min.z}_unloadContent(){super.unloadContent()}unloadContent(){this._contentType=r.TileContentType.DATA_MESH,this.tileTerrain.unload(),this._unloadImageryContent()}_unloadImageryContent(){this.imageries.forEach((e=>{e.isDestroyed()||e.destroy()})),this.imageries.length=0,this._unloadContent()}resetImageryContent(){this._unloadImageryContent()}resetTerrainContent(){this._contentType=r.TileContentType.DATA_MESH,this.tileTerrain.unload(),this._unloadContent()}resetBoundingBox(){const e=this._tileset.tileProvider.terrainProvider;this._boundingBox=e.getTileBoundingBox(this.x,this.y,this.level),this.terrainMaxHeight=this._boundingBox.max.z,this.terrainMinHeight=this._boundingBox.min.z}computeTransformedBoundingBox(e){const t=this._transformedBoundingBox.copy(this._boundingBox);e.useTerrain&&(t.max.z=this.terrainMaxHeight),e.transformMatrix&&t.applyMatrix4(e.transformMatrix)}computeDistanceToCamera(e){const t=this._transformedBoundingBox;this._distance=t.distanceToPoint(e.cameraPositionWc)}culling(t){const i=e.copy(this._transformedBoundingBox);return t.useTerrain&&(i.max.z=t.cameraPositionWc.z),i.applyMatrix4(t.globalMatrix),!!t.frustum.intersectsBox(i)}computePriority(){const e=this._tileset,t=e._priorityRange.max,i=e._priorityRange.min,n=r.Math.isolateDigits(r.Math.normalize(e.type,0,10),1,16),a=r.Math.isolateDigits(r.Math.normalize(e.sequence,0,100),1,14),s=e._skipLodEnabled?t.depth-this._depth:this._depth,o=r.Math.isolateDigits(r.Math.normalize(s,i.depth,t.depth),2,4),l=r.Math.isolateDigits(r.Math.normalize(this._distance,i.distance,t.distance),4,0);this._priority=n,this._priority+=a,this._priority+=o,this._priority+=l,this.parent&&(this.parent._minChildPriority=Math.min(this.parent._minChildPriority,this._priority))}}r.Layer.GlobeTile=t}(),function(){function e(e,t){return e._priority-t._priority}class t extends r.AbstractTileset{constructor(e){super(e),this.maximumScreenSpaceError=e.maximumScreenSpaceError||2,this.tileProvider=new r.Layer.GlobeTileProvider(e),this._lastReady=void 0,this._ready=void 0}destroy(){this._lastReady=void 0,this._ready=void 0,this.tileProvider.destroy(),this.tileProvider=void 0,super.destroy()}get ready(){return this._ready}_isReady(){return!(!this._root||!this.tileProvider.ready)}checkReadyPreUpdate(e){void 0===this._lastReady&&(this._lastReady=this._isReady()),this._ready=this._lastReady}checkReadyPostUpdate(e){this._lastReady=this._isReady(),this._lastReady&&!this._ready&&e.afterRenderFns.push((function(){}))}createTile(e){return new r.Layer.GlobeTile(this,e)}loadTileset(e,t,i){this.root=this.createTile({x:0,y:0,level:0})}updateFrameState(e){e.transformMatrix=this._transformMatrix,e.maximumScreenSpaceError=this.maximumScreenSpaceError,e.geoErrScaleFactor=1,e.useTerrain=this.tileProvider.terrainProvider.useTerrain}_fetchChildrenOfTile(e,t){this.needLoadChildrenOfTile(e)&&(e._childrenState=r.TileContentState.READY,this.loadChildrenOfTile(e))}needLoadChildrenOfTile(e){return e.childrenUnload&&e.level<this.tileProvider.getMaxLimitedLevel()}_isAvailableLevel(e){return e.level<this.tileProvider.getMaxLimitedLevel()}loadChildrenOfTile(e,t,i){e.isDestroyed()||(this.createTile({x:2*e.x,y:2*e.y,level:e.level+1,parent:e}),this.createTile({x:2*e.x+1,y:2*e.y,level:e.level+1,parent:e}),this.createTile({x:2*e.x,y:2*e.y+1,level:e.level+1,parent:e}),this.createTile({x:2*e.x+1,y:2*e.y+1,level:e.level+1,parent:e}),i&&i())}_canBeTraverse(e,t){return 0!==e.childrenTree.length&&e.sse>t.maximumScreenSpaceError}_addTileToRequestedQueue(e,t){e._requestedFrame!==t.frameNumber&&(e._requestedFrame=t.frameNumber,this._requestedTiles.push(e))}requestTiles(t){let i=!1,r=this._requestedTiles;r.sort(e);for(let e=0,t=r.length;e<t;++e)i=this.requestContent(r[e])||i;i&&t.afterRenderFns.push((function(){}))}requestContent(e){if(e.contentTypeEmpty)return!1;const t=this.statistics;return e.requestContent()?(++t.numberOfPendingRequests,this._requestedTilesInFlight.push(e),e.contentProcessPromise.then(this._addTileToProcessingQueue(this,e)).catch((function(e){})),e.contentReadyPromise.then(this._handleTileContentSuccess(this,e)).catch(this._handleTileContentFailure(this,e)),!1):(++t.numberOfAttemptedRequests,e.needsLoading)}clearLoadedTilesCache(){}invalidateImageryOfAllTiles(){this.clearLoadedTilesCache(),this._traverseAllTiles((e=>{e.resetImageryContent()}))}invalidateTerrainOfAllTiles(){this.clearLoadedTilesCache(),this._traverseAllTiles((e=>{e.resetTerrainContent()}))}resetAllTiles(){this.clearLoadedTilesCache(),this._traverseAllTiles((e=>{e.resetBoundingBox(),e.resetTerrainContent()}))}updateTileMeshForFlatten(){const e=this.tileProvider;this._traverseAllTiles((t=>{e.updateTileMeshForFlatten(t)}))}getTileMesh(){const e=[];return this._traverseAllTiles((t=>{e.push(t)})),e}_traverseAllTiles(e){if(!this._root)return;const t=[];for(t.push(this._root);t.length>0;){const i=t.pop(),r=i.childrenTree;for(let e=0,i=r.length;e<i;++e)t.push(r[e]);e(i)}}_createTraversalController(){this._traversalController=new r.GlobeTilesetTraversal}}r.Layer.GlobeTileset=t}(),function(){class e extends r.BaseModel{constructor(e,t){super(t.manager,t),this.viewer=e,this.isDemLayer=!0,this.objectGroupName=r.GlobalData.TilePlaneGroupName,this.objectGroup=this._createObjectGroup(),this.objectGroup.transformMatrix=this.transformMatrix,this.objectGroup.altitudeOffset=this.basePointAltitude;const i=Object.assign({},t,{id:this.id,type:r.RequestType.IMAGERY,objectGroup:this.objectGroup,transformMatrix:this.transformMatrix,debugShowBoundingBox:e._options.debugShowBoundingBox,terrainOperationManager:e.terrainOperationManager,tilesCacheScheduler:this.manager.tilesCacheScheduler,skipLodEnabled:t.loadConfig?t.loadConfig.skipLodEnabled:void 0,globeLayer:this});this._tileset=new r.Layer.GlobeTileset(i),this.tileManager=new r.Layer.GlobeTileManager(this),this.viewer.basePointPositionOnLonLat=this.basePointPositionOnLonLat,this.viewer._globeTileManager=this.tileManager}destroy(){this.manager.removeModel(this.id,!1),this.tileManager.destroy(),this.tileManager=void 0,this._tileset.destroy(),this._tileset=null,this._removeObjectGroup(),this.objectGroup=null,this.viewer=null,this.manager.setDemLoadedState(!1),super.destroy()}setValues(e){this._setupParameters(e),super.setValues(e)}_setupParameters(e){e.modelId=r.Utils.defaultValue(e.modelId,r.ObjectGroupType.TILEGROUP);const t=e.loadConfig;e.priority=r.Utils.defaultValue(t.priority,0),this.unitScale=r.Tile.TileMath.unitScale,t.unitScale=this.unitScale;const i=r.Utils.defaultValue(t.modelPosition,[0,0]);this.semiMercatorPerimeter=r.Tile.TileMath.getMercatorPerimeterByLat(i[1]),t.mercatorPerimeter=2*this.semiMercatorPerimeter,this.basePointPositionOnLonLat=i,this.basePointAltitude=r.Utils.defaultValue(t.modelAltitude,0),this.basePointRotationZ=r.Utils.defaultValue(t.modelRotationZ,0),this.basePoint=r.Utils.defaultValue(t.basePoint,{x:0,y:0})}setupTransformMatrix(){const e=this.basePointPositionOnLonLat,t=this.basePointAltitude,i=this.basePointRotationZ,n=this.basePoint,a=this.unitScale,s=this.semiMercatorPerimeter,o=r.Tile.TileMath.lonLat2Mercator(e[0],e[1],s,a),l=(new THREE.Matrix4).makeTranslation(-o.x,-o.y,-t*a),d=new THREE.Matrix4;i&&d.makeRotationFromEuler((new THREE.Euler).fromArray([0,0,-i]));const h=(new THREE.Matrix4).makeTranslation(n.x,n.y,0),c=(new THREE.Matrix4).premultiply(l).premultiply(d).premultiply(h);this.setTransformMatrix(c)}transformLayer(){const e=this.basePointPositionOnLonLat;this.semiMercatorPerimeter=r.Tile.TileMath.mercatorPerimeter*Math.cos(e[1]*Math.PI/180),this._tileset.tileProvider.terrainProvider.setMercatorPerimeter(2*this.semiMercatorPerimeter),this._tileset.resetAllTiles(),this.setupTransformMatrix(),this._updateObjectGroup(),this.manager.setRenderStateChanged(!0)}_createObjectGroup(){return this.viewer.getScene().getOrCreateObjectGroup(this.objectGroupName,{pickableType:r.PICKABLETYPE.Map,globalSpace:!0})}_removeObjectGroup(){this.viewer.getScene().removeObjectGroupByName(this.objectGroupName)}_updateObjectGroup(){const e=this.viewer.getScene().getRawMatrixGlobal(),t=this.objectGroup;t.matrix.multiplyMatrices(e,t.transformMatrix),t.matrixAutoUpdate=!1,t.updateMatrixWorld(!0)}load(e){const t=this.viewer,i=this.manager,n=!t.getScene().hasBoundingBox();if(n){i.dispatchEvent({type:r.EVENTS.ON_LOAD_START}),i.setDrawableModel(!0),i.chooseRendering(this.statistics.memoeryInfo,!0),t.rendererManager.setupRenderer(t.renderSettings);const e=.5*r.GlobalData.SceneSize;this.getTransforms().boundingBox=(new THREE.Box3).setFromArray([-e,-e,-e,e,e,e]),i.updateScene(this)}i.setDemLoadedState(!0);let a=t.getScene().getRawMatrixGlobal();this.updateMatrixOfObjectGroup(a),r.GlobalData.EnableGisMap=!0,this._tileset.loadTileset(),this.loaded=!0,n&&i.dispatchEvent({type:r.EVENTS.ON_LOAD_COMPLETE,modelId:this.id}),Promise.resolve().then((()=>{i.setRenderStateChanged(!0),i.dispatchEvent({type:r.EVENTS.ON_MAP_LOAD_ALL})}))}updateMatrixOfObjectGroup(e){const t=this.objectGroup;t.matrix.copy(t.transformMatrix),t.matrix.multiplyMatrices(e,t.matrix),t.matrixAutoUpdate=!1,t.updateMatrixWorld(!0)}preUpdate(e){this._tileset.checkReadyPreUpdate(e),this._tileset.preUpdate(e)}update(e){this._tileset.update(e)}postUpdate(e){this._tileset.postUpdate(e),this._tileset.checkReadyPostUpdate(e)}addImageryLayer(e){return this._tileset.addImageryLayer(e)}traverseMeshByLayerId(e,t){this.objectGroup.traverse((i=>{"MeshEx"===i.type&&i.layerId===e&&t&&t(i)}))}setImageryLayerVisible(e,t){this.traverseMeshByLayerId(e,(e=>{e.visible=t}))}setAllLayerVisible(e){this.visible=e,this.objectGroup.visible!==e&&(this.objectGroup.visible=e,this.manager.setRenderStateChanged(!0))}setRenderStateChanged(e){this.manager.setRenderStateChanged(e)}getRawTransformMatrix(){return this.transformMatrix}getTransformMatrixInverse(){return this.transformMatrixInverse}updateMaterialsValue(e,t,i){this.tileManager&&this.tileManager.tileProvider&&this.tileManager.tileProvider.updateMaterialsValue(this,e,t,i)}setCastShadow(e){super.setCastShadow(e),this.viewer.traverseGroupEnableShadow(this.objectGroup,this.castShadow,this.receiveShadow),this.viewer.updateShadowMap()}setReceiveShadow(e){super.setReceiveShadow(e),this.viewer.traverseGroupEnableShadow(this.objectGroup,this.castShadow,this.receiveShadow),this.viewer.updateShadowMap()}rayCastVertical(e){const t=this.objectGroup,i=this.viewer.getScene().getInverseMatrixGlobal(),n=(new THREE.Box3).setFromObject(t);n.applyMatrix4(i);const a=this.viewer.getScene().getRawMatrixGlobal(),s=new THREE.Vector3(e.x,e.y,n.max.z+10);s.applyMatrix4(a);const o=new r.Raycaster(s,new THREE.Vector3(0,-1,0)),l=[];if(this._tileset._traverseAllTiles((e=>{if(!e||!e._content||!e._content._meshes||!1===e._content._meshes.visible)return;e._content._meshes.traverse((e=>{if("MeshEx"!==e.type||e.name.indexOf("Skirt")>-1)return;const t=[];e.raycast(o,t),t.length>0&&l.push(t[0])}))})),0===l.length)return;const d=l[0].point;return d.applyMatrix4(i),d}}r.Layer.GlobeLayer=e}(),r.Layer.GlobeTileManager=class{constructor(e){this.globeLayer=e,this.tileProvider=e._tileset.tileProvider,this.layerList=[]}destroy(){this.layerList=void 0,this.tileProvider=void 0,this.globeLayer=void 0}getLayer(){return this.globeLayer}lonLat2Mercator(e,t){const i=.5*this.tileProvider.terrainProvider.mercatorPerimeter,n=r.Tile.TileMath.lonLat2Mercator(e,t,i,1),a=this.globeLayer.getRawTransformMatrix();return new THREE.Vector3(n.x,n.y,0).applyMatrix4(a)}mercator2lonLat(e){const t=.5*this.tileProvider.terrainProvider.mercatorPerimeter,i=this.globeLayer.getTransformMatrixInverse(),n=new THREE.Vector3(e.x,e.y,0).applyMatrix4(i);return r.Tile.TileMath.mercator2lonLat(n,t,1)}worldPositionToLngLat(e){return this.mercator2lonLat(e)}lngLatToWorldPosition(e,t){const i=e[0],n=e[1];function a(e,t,i){const r=e.lonLat2Mercator(t,i);return r.z=0,r}let s=a(this,i,n);if(!this.isUseTerrain())return s;if(!t){const e=this.globeLayer.rayCastVertical(s);return void 0===e?(delete s.z,s):e}const o=this.tileProvider.terrainProvider,l=o.getMaxMinTerrainLevel().maxLevel,d=r.Tile.TileMath.long2tile(i,l),h=r.Tile.TileMath.lat2tile(n,l),c=o.getTerrainUrl(d,h,l),u=.5*o.mercatorPerimeter,p=r.Tile.TileMath.lonLat2Mercator(i,n,u,1),m=new THREE.Vector3(p.x,p.y,r.Tile.TileMath.earthHighestAltitude),f=new r.Raycaster(m,new THREE.Vector3(0,0,-1)),g=this.globeLayer.getRawTransformMatrix();o.loadArrayBufferImmediately(c,(e=>{const c=o.getTerrainDataArray(e),u=o.getTileGeometryByData(c,d,h,l,!0),p=new r.MeshEx(u.geometry);p.name=`${d}-${h}-${l}`,u.matrix&&p.matrix.copy(u.matrix),p.updateMatrixWorld(!0);const m=[];p.raycast(f,m),s=m.length>0?m[0].point.applyMatrix4(g):a(this,i,n),t(s)}),(function(){s=a(this,i,n),t(s)}))}get modelRotationZ(){return this.globeLayer.basePointRotationZ}set modelRotationZ(e){this.globeLayer.basePointRotationZ=e,this.globeLayer.transformLayer()}getModelRotationZ(){return this.modelRotationZ}setModelRotationZ(e){this.modelRotationZ=e}get modelPosition(){return this.globeLayer.basePointPositionOnLonLat}set modelPosition(e){this.globeLayer.basePointPositionOnLonLat=e,this.globeLayer.transformLayer()}setModelPosition(e){this.modelPosition=e}getModelPosition(){return this.modelPosition}get modelAltitude(){return this.globeLayer.basePointAltitude}set modelAltitude(e){this.globeLayer.basePointAltitude=e,this.globeLayer.objectGroup.altitudeOffset=e,this.globeLayer.transformLayer()}setModelAltitude(e){this.modelAltitude=e}getModelAltitude(){return this.modelAltitude}get basePoint(){return this.globeLayer.basePoint}getBasePoint(){return this.globeLayer.basePoint}clearTiles(){}addRenderCallback(){}setOpacity(e,t){if(void 0!==t)return void this.tileProvider.setOpacity(e,t);const i=this.getAllLayerIds();0!==i.length?i.map((t=>{this.tileProvider.setOpacity(e,t)})):this.tileProvider.setPresetOpacity(e)}getOpacity(e){return this.tileProvider.getOpacity(e)}setMapLayer(e){let t;const i=this.tileProvider.getImageryLayerByMapLayer(e);if(i)t=i.imageryProvider.id,this.tileProvider.adjustImageryLayer(t,0);else{let i={};const r=this.tileProvider.getBaseImageryLayer();r&&(i=r.imageryProvider.cloneParameters(),this.globeLayer._tileset.invalidateImageryOfAllTiles(),this.tileProvider.removeImageryLayer(r)),i.mapLayer=e,t=this.tileProvider.addImageryLayer(i,0)}return this.tileProvider.setBaseLayerId(t),t}getBaseLayerId(){return this.tileProvider.getBaseLayerId()}getAllLayerIds(){return this.tileProvider.getAllLayerIds()}getMapUrl(e){const t=this.tileProvider.getImageryLayerById(e);if(t)return t.imageryProvider.mapUrl}setMapUrl(e,t){return this.setImageryLayer({mapUrl:e,imageryProviderType:t})}setImageryLayer(e){if(void 0===e.mapUrl)return void console.log("options.mapUrl is required.");let t;const i=this.tileProvider.getImageryLayerByMapUrl(e.mapUrl),r=this.tileProvider.getBaseImageryLayer();return i?(r&&r!==i&&(this.globeLayer._tileset.invalidateImageryOfAllTiles(),this.tileProvider.removeImageryLayer(r.imageryProvider.id)),t=i.imageryProvider.id,this.tileProvider.adjustImageryLayer(t,0)):(r&&(this.globeLayer._tileset.invalidateImageryOfAllTiles(),this.tileProvider.removeImageryLayer(r.imageryProvider.id)),t=this.tileProvider.addImageryLayer(e,0)),this.tileProvider.setBaseLayerId(t),t}addImageryLayer(e,t){if(void 0===e.mapUrl)return void console.log("options.mapUrl is required.");let i;const r=this.tileProvider.getImageryLayerByMapUrl(e.mapUrl);return r?(i=r.imageryProvider.id,this.tileProvider.adjustImageryLayer(i,t)):(this.globeLayer._tileset.invalidateImageryOfAllTiles(),i=this.tileProvider.addImageryLayer(e,t)),0===t&&this.tileProvider.setBaseLayerId(i),i}removeImageryLayer(e){this.tileProvider.removeImageryLayer(e),this.globeLayer._tileset.invalidateImageryOfAllTiles()}adjustImageryLayer(e,t){this.tileProvider.adjustImageryLayer(e,t)}updateImageryLayer(e,t){if(void 0===t.mapUrl)return void console.log("options.mapUrl is required.");const i=this.tileProvider.getImageryLayerIndex(e);if(-1===i)return;let r;this.removeImageryLayer(e);const n=this.tileProvider.getImageryLayerByMapUrl(t.mapUrl);return n?(r=n.imageryProvider.id,this.tileProvider.adjustImageryLayer(r,i)):r=this.tileProvider.addImageryLayer(t,i),0===index&&this.tileProvider.setBaseLayerId(r),r}getImageryLayerIndex(e){return this.tileProvider.getImageryLayerIndex(e)}setTerrain(e,t){return this.tileProvider.setTerrainProvider(e,(()=>{this.tileProvider.clearMaterialAndSkirtCache(),this.globeLayer._tileset.invalidateTerrainOfAllTiles(),t&&t()}))}getTerrain(){return this.tileProvider.getTerrainUrl()}applyTerrain(e){this.tileProvider.setTerrainEnabled(e)&&(this.tileProvider.clearMaterialAndSkirtCache(),this.globeLayer._tileset.invalidateTerrainOfAllTiles())}isUseTerrain(){return this.tileProvider.terrainProvider.useTerrain}setStyle(e,t){e&&this.tileProvider.setStyle(e,t)}setExcavation(e){e&&this.tileProvider.setExcavation(e)}updateMaterialsSide(){this.tileProvider.updateMaterialsSide()}updateTileMeshForFlatten(){this.globeLayer._tileset.updateTileMeshForFlatten()}show(e){this.tileProvider.setImageryLayerVisible(e,!0),this.tileProvider.hasImageryLayerVisible()&&this.globeLayer.setVisible(!0),this.globeLayer.setRenderStateChanged(!0)}hide(e){this.tileProvider.setImageryLayerVisible(e,!1),this.tileProvider.hasImageryLayerVisible()||this.globeLayer.setVisible(!1),this.globeLayer.setRenderStateChanged(!0)}hideAllLayers(){this.globeLayer.setAllLayerVisible(!1)}showAllLayers(){this.globeLayer.setAllLayerVisible(!0)}getMaxLevel(e){this.getMaxTerrainLevel(maxLevel)}setMaxLevel(e,t){this.setMaxTerrainLevel(e)}getMaxTerrainLevel(){return this.tileProvider.getMaxLimitedLevel()}setMaxTerrainLevel(e){this.tileProvider.setMaxLimitedLevel(e)}getMaxImageryLevel(e){return this.tileProvider.getMaxImageryLevel(e)}setMaxImageryLevel(e,t){this.tileProvider.setMaxImageryLevel(e,t),this.globeLayer._tileset.invalidateImageryOfAllTiles()}},function(){function e(e,t){return t._distance-e._distance}class t extends r.TilesetTraversal{constructor(){super()}traverseTiles(e,t,i){const r=this.traversalStack;for(r.push(t);r.length>0;){const t=r.pop(),n=t.refineReplace,a=!t.parent||t.parent._refines;let s=!1;if(e._isAvailableLevel(t)&&(e._fetchChildrenOfTile(t,i),e._canBeTraverse(t,i)&&(s=this.subdivideTile(e,t,i),s=s&&a)),n){const r=!s&&a;this._selectRefiningTile(e,t,i,r)}else e._addTileToRequestedQueue(t,i),e._addTileToSelectedQueue(t,i);e.visitTile(t,i),e.touchTile(t,i),t._refines=s}}subdivideTile(e,t,i){return e._skipLodEnabled?this._subdivideTileBySkippingLod(e,t,i):super.subdivideTile(e,t,i)}_selectRefiningTile(e,t,i,r){e._skipLodEnabled?r&&(e._addTileToRequestedQueue(t,i),e._addTileToSelectedQueue(t,i)):(e._addTileToRequestedQueue(t,i),r&&e._addTileToSelectedQueue(t,i))}_subdivideTileBySkippingLod(t,i,r){const n=this.traversalStack,a=i.childrenTree;let s=!1;if(a.forEach((e=>{t.updateTile(e,r),s=s||e.passSSE(r)})),a.sort(e),!s)return!1;const o=i.refineReplace&&!i.contentTypeEmpty;let l=!0,d=!1;return a.forEach((e=>{e.visible?(n.push(e),d=!0):o&&(t.visitTile(e,r),t.touchTile(e,r))})),d||(l=!1),l}}r.GlobeTilesetTraversal=t}(),function(){let e=new THREE.Matrix4,t=new THREE.Vector3;class i extends r.BaseModelExplosion{constructor(e){super(e),this.explosionBegin=!1,this.explosionOffset={}}explode(){this.model._tileset.explode(this)}preFloorExplode(e,t,i){this.explosionBegin=!0;let r={},n={};for(var a=0,s=t.length;a<s;a++){let e=t[a].explodedHeight-t[a].elevation,s=new THREE.Vector3(i.x*e,i.y*e,i.z*e);r[t[a].name]=s;let o=null;o=t[a].preExplodedTranslation?s.clone().sub(t[a].preExplodedTranslation):s.clone(),n[t[a].name]=o,t[a].preExplodedTranslation=s}let o=this.explosionTranslation;const l=this.model.getAllNodeInfos(),d=Object.keys(l);let h=new THREE.Matrix4,c=new THREE.Matrix4,u=3;const p=d.length;if(p>0){const e=l[0][0].userData;for(const t in e){"levelName"===this.model.tilesLoader.tileReader.getUserDataStringMapByIndex(t)[0]&&(u=t)}}for(let t=0;t<p;t++){const i=d[t],a=l[i];for(let t=0,s=a.length;t<s;t++){if(0==t){let e=a[t].userData[u],s=this.model.tilesLoader.tileReader.getUserDataStringMapByIndex(u,e)[1],l=r[s]||new THREE.Vector3;o[i]=l,h.makeTranslation(l.x,l.y,l.z);let d=n[s]||new THREE.Vector3;c.makeTranslation(d.x,d.y,d.z)}a[t].boundingBox.applyMatrix4(c),a[t].matrix?(a[t].matrix.multiplyMatrices(c,a[t].matrix),e.union(a[t].boundingBox)):a[t].explodeMatrix=h.clone()}}e.applyMatrix4(this.model.getTransformMatrix())}preElementExplode(i,n){this.explosionBegin=!0;const a=this.model.getBoundingBoxWorld();if(!a)return;const s=n-this.model.manager.explosionManager.getExplosionExtent(this.model.id);if(0==s)return;let o=new THREE.Matrix4,l=new THREE.Matrix4;e.copy(this.model.transformMatrix).invert(),a.getCenter(t),t.applyMatrix4(e);const d=this.model.getAllNodeInfos(),h=Object.keys(d);let c=this.explosionTranslation;for(let e=0,a=h.length;e<a;e++){let a=h[e],u=d[a],p=new THREE.Box3;for(let e=0,t=u.length;e<t;e++)u[e].originBox||(u[e].originBox=u[e].boundingBox.clone()),p.union(u[e].originBox);let m=r.Utils.computeExplodeTranslation(t,p,n);c[a]=m,o.makeTranslation(m.x,m.y,m.z);let f=r.Utils.computeExplodeTranslation(t,p,s);l.makeTranslation(f.x,f.y,f.z),this.explosionOffset[a]=f;for(let e=0,t=u.length;e<t;e++)u[e].boundingBox.applyMatrix4(l),u[e].matrix?(u[e].matrix.multiplyMatrices(l,u[e].matrix),i.union(u[e].boundingBox)):u[e].explodeMatrix=o.clone()}i.applyMatrix4(this.model.getTransformMatrix())}getExplosionTranslation(e){return this.explosionTranslation[e]||new THREE.Vector3}getExplosionTranslationByObjId(e){const t=this.model.tilesLoader.tileReader.getIndexByUserId(e);return this.explosionOffset[t]||new THREE.Vector3}getLevelNameByObjId(e){let t=this.model.getAllNodeInfos()[this.model.tilesLoader.tileReader.getIndexByUserId(e)][0].userData[3];return this.model.tilesLoader.tileReader.getUserDataStringMapByIndex(3,t)[1]}standardExplode(e){function t(e,t,n,a,s){for(var o=e.getAttribute("position").array,l=t;l<n;l+=3)i.set(o[l],o[l+1],o[l+2]),i.applyMatrix4(s),i.add(a),r.copy(s).invert(),i.applyMatrix4(r),o[l]=i.x,o[l+1]=i.y,o[l+2]=i.z;e.getAttribute("position").needsUpdate=!0}if(e.explodeCount==this.model.manager.explosionManager.explodeCount)return;let i=new THREE.Vector3,r=new THREE.Matrix4;const n=e._content.meshes,a=e._content._outlineContent.outlineMeshes;new THREE.Matrix4,new THREE.Matrix4;let s=new THREE.Vector3,o=new THREE.Vector3(0),l=e=>{if("MeshEx"!==e.type&&"LineSegmentsEx"!==e.type)return;let i=e.geometry;const r=e.indexGroups;for(const a in r){const l=r[a];for(let r=0,d=l.length;r<d;++r){const d=l[r];let h=this.getExplosionTranslation(a),c=d.preTranslation?d.preTranslation:o;if(s.set(h.x-c.x,h.y-c.y,h.z-c.z),0!=s.x||0!=s.y||0!=s.z){var n=d.positionStart;t(i,n,n+d.positionCount,s,e.matrix),d.preTranslation=h}}}};n.traverse((e=>{l(e)})),a.traverse((e=>{l(e)})),e.explodeCount=this.model.manager.explosionManager.explodeCount}instanceExplode(e){function t(e,t,i,r){var n=e.getAttribute("mcol3").array;n[3*t]+=i.x,n[3*t+1]+=i.y,n[3*t+2]+=i.z,e.getAttribute("mcol3").needsUpdate=!0}if(e.explodeCount==this.model.manager.explosionManager.explodeCount)return;const i=this.model.getDescriptor().getInstancedNodeInfos(),n=e.instanceInfo.entityInfoArray;let a=new THREE.Vector3,s=new THREE.Vector3(0);for(let e=0,o=n.length;e<o;e++){const o=n[e].userID;let l=this.getExplosionTranslation(o),d=n[e].preTranslation?n[e].preTranslation:s;if(a.set(l.x-d.x,l.y-d.y,l.z-d.z),0==a.x&&0==a.y&&0==a.z)continue;const h=i[o],c=h.length;for(let i=0;i<c;++i){const s=h[i];if(null==s.index)continue;const o=s.index,d=this.model.tilesLoader.getInstanceMeshNodeById(s.parent);for(const i in d){const h=d[i].mesh;let c=h.geometry;if(r.TilesUtil.isInstanceNodeInVisible(h))continue;if(!h||!1===h.visible)continue;t(c,o,a,h.matrix),n[e].preTranslation=l;const u=s.lineId,p=this.model.tilesLoader.getInstanceLineNodeById(u);if(!p)continue;t(p.geometry,o,a,h.matrix)}}}e.explodeCount=this.model.manager.explosionManager.explodeCount}}r.BimTilesModelExplosion=i}(),r.BimTileNodeManager=class{constructor(){this._nodeMap={}}destroy(){this._nodeMap=null}addNode(e){this._nodeMap[e.nodeId]=e}getNode(e){return this._nodeMap[e]}},function(){class e{constructor(){this._owner=0,this._bufferGeometries=[],this._id=null,this._state=r.SharedGeometryState.UNLOADED,this._byteLength=0}get owner(){return this._owner}set owner(e){this._owner=e}get bufferGeometry(){return this._bufferGeometries}get id(){return this._id}set id(e){this._id=e}get byteLength(){return this._byteLength}set byteLength(e){this._byteLength=e}get state(){return this._state}set state(e){this._state=e}addBufferGeometry(e){this._bufferGeometries.push(e)}destroy(){this._bufferGeometries=[],this._state=r.SharedGeometryState.DESTROYED,this._id=null,this._byteLength=0}}class t{constructor(){this._geometryMap={}}destroy(){this._geometryMap=null}setByteLength(e,t){r.Utils.defined(this._geometryMap[e])&&(this._geometryMap[e].byteLength=t)}addGeometryById(t,i){let n=this._geometryMap[t];return r.Utils.defined(n)||(n=this._geometryMap[t]=new e),r.Utils.defined(i)&&n.addBufferGeometry(i),n}removeGeometryById(e){const t=this._geometryMap[e];r.Utils.defined(t)&&0===t.owner&&t.state!==r.SharedGeometryState.DESTROYED&&t.destroy()}setGeometryByteLength(e,t){const i=this._geometryMap[e];r.Utils.defined(i)&&(i.byteLength=t)}getGeometry(e){return this._geometryMap[e]}addGeometryOwner(e){const t=this._geometryMap[e];r.Utils.defined(t)&&(t.owner+=1)}removeGeometryOwner(e){const t=this._geometryMap[e];r.Utils.defined(t)&&(t.owner-=1)}resetGeometryOwner(){for(const[e,t]of Object.entries(this._geometryMap)){const e=t;r.Utils.defined(e)&&(e.owner=0)}}setShareGeometryState(e,t){const i=this.getGeometry(e);r.Utils.defined(i)&&(i.state=t)}disposeShareGeometry(e){const t=this.getGeometry(e);return!r.Utils.defined(t)||t.state!==r.SharedGeometryState.PROCESSING&&(t.owner-=1,0===t.owner&&(t.destroy(),!0))}createMesh(e,t,n){const a=e.bufferGeometry;e.owner+=1,a.forEach((e=>{e.instance?function(e,t,n){const a=e.pbfNodeInfo,s=i(e.bufferGeometry,!0,a);var o=new r.MeshEx(s,e.material);o.frustumCulled=!1,o.name=a.nodeIndexId,o.indexGroups=a.indexGroups,o.indexCount=a.indexCount,o.databagId=a.databagId,o.isInstanceMeshNode=!0,e.tileMatrix&&o.applyMatrix4(e.tileMatrix);t.content.meshes.add(o),n.addInstanceMeshIdMap(a.nodeIndexId,0,o),n.addInstanceInfo(a.nodeIndexId,a.instanceInfo),n.renderableCount++}(e,t,n):function(e,t,n){const a=e.pbfNodeInfo,s=i(e.bufferGeometry,!1,a);let o=new r.MeshEx(s,[e.material.clone()]);a.indexInfos||(a.indexInfos={});o.applyMatrix4(a.matrix),o.name=a.nodeIndexId,o.indexGroups=a.indexInfos;for(const e in a.indexInfos)t.userIndexMap[e]=!0;o.databagId=t._tileset._databagId,o.indexCount=e.bufferGeometry.index.couwdnt,n.addMeshIdMap(o.name,o),n.getDescriptor().cacheReferencedMeshBufferData(a.nodeIndexId,{IndexInfos:a.indexInfos}),function(e,t){const i=e.nodeInfos,n=e.indexInfos;for(const[e,a]of Object.entries(n)){const n=i[e],s=t.getDescriptor().getAllNodeInfos()[e];for(let e=0;e<a.length;++e){const t=a[e];if(r.Utils.defined(n))for(let e=0;e<n.length;++e){const i=n[e];if(i.nodeId===t.meshId){const t=s[e];r.Utils.defined(t)&&(t.parent=i.parent,t.materialId=i.materialId,t.matrix=i.matrix.clone(),r.Utils.defined(t.explodeMatrix)&&(t.explodeMatrix=i.explodeMatrix.clone),t.type=i.type,t.cellId=i.cellId)}}}}}(a,n),t.content.meshes.add(o),a.userIdMapIndex&&n.addUserIdMapIndices(a.userIdMapIndex,o.name)}(e,t,n)})),t.needUpdateFilter=!0}}function i(e,t,i){let n;(t=r.Utils.defaultValue(t,!1))?(n=new THREE.InstancedBufferGeometry,n.groups.push({start:0,count:i.indexCount,materialIndex:0}),n.groups.push({start:0,count:i.indexCount,materialIndex:1})):(n=new THREE.BufferGeometry,n.groups.push({start:0,count:i.iAccInfoCount,materialIndex:0}));for(const[t,i]of Object.entries(e.attributes))n.setAttribute(t,i);const a=e.boundingBox;null!==a&&(n.boundingBox=a.clone());const s=e.boundingSphere;return null!==s&&(n.boundingSphere=s.clone()),n.drawRange.start=e.drawRange.start,n.drawRange.count=e.drawRange.count,n.index=e.index,n}t.SharedGeometry=e,r.BimTileGeometryManager=t}(),function(){let e=new THREE.Matrix4;class t extends r.BaseModel{constructor(e,t,i,n,a,s){super(t,i),this.viewer=e,this.parseCfgFinish=a,this.debut=s,this.url=i.serverUrl+""+i.databagId,i.rootPath?this.url+="/"+i.rootPath:this.url+="/bimtiles.json",this.objectGroup=t.getScene().getOrCreateObjectGroup(`${r.ObjectGroupType.BIMTILESGROUP}|${this.databagId}`,{pickableType:r.PICKABLETYPE.Geometry,globalSpace:!0}),this.objectGroup.transformMatrix=this.transformMatrix,this._getNodeGroup(r.ObjectGroupType.GEOMETRY,{pickableType:r.PICKABLETYPE.Geometry,globalSpace:!0}),this._getNodeGroup(r.ObjectGroupType.INSTANCEGEOMETRY,{pickableType:r.PICKABLETYPE.Geometry,globalSpace:!0}),this._getNodeGroup(r.ObjectGroupType.WIREFRAME,{pickableType:r.PICKABLETYPE.UnPickable,globalSpace:!0}),this._getNodeGroup(r.ObjectGroupType.INSTANCEWIREFRAMEGEOMETRY,{pickableType:r.PICKABLETYPE.UnPickable,globalSpace:!0}),this._errorCoefficient=r.TilesUtil.BMD_GEOMETRIC_ERROR_COEFFICIENT;let o=r.TilesUtil.MODEL_SSE_Threshold_MAP[i.resourceType.toLowerCase()];i.resourceType&&o&&(this._errorCoefficient=o),this.disableUserData=i.disableUserData,this._enableBorderLine=i.enableBorderLine,this._maxDetailLevel=i.maxDetailLevel,this._detailLevelList=i.detailLevelList,this._visualRange=i.visualRange,this._onDemand=i.onDemand,this._hasLayerInfo=i.hasLayerInfo,!0===i.onDemand&&!1===i.hasLayerInfo&&console.warn("the model has no layer info, will show nothing on demand"),this.delayLoadTexture=r.GlobalData.DelayLoadTexture,this.sceneState=e.modelManager.sceneState,this.isOsgb=this._config.metadata&&"osgb"===this._config.metadata.content,this.filter=!0===this.isOsgb?new r.StandardTilesFilterManager(this):new r.BimTileFilterManager(this),this.filter.setObserverForSceneState(this.manager.getFilter().getObserverForSceneState()),this.sceneState.transparentMaterial=this.getFilter()._getMaterialByName("scene"),this.sceneState.frozonMaterial=this.getFilter().getFrozonMaterial(),this.sceneState.frozonMaterial.side=THREE.FrontSide,this.materialManager=new r.BimTileMaterialManager({viewer:e,isUseColorWithoutLight:this.isOsgb}),this.materialManager._updateIBL(this),this.modelExplosion=new r.BimTilesModelExplosion(this);const l=this._config.metadata&&"point"===this._config.metadata.FeatureType&&"shp"===this._config.metadata.content;this.tilesLoader=new r.BimTilesLoader({batchMergeEnabled:!0,sceneState:this.sceneState,delayLoadTexture:this.delayLoadTexture,materialManager:this.materialManager,enableBorderLine:this._enableBorderLine,filter:this.filter,disableUserData:this.disableUserData,modelExplosion:this.modelExplosion,wireFrameVisibilityOption:i.wireFrameVisibilityOption,renderFunction:()=>{this.manager.setRenderStateChanged(!0)},isShpPoint:l}),!0===l&&(this.objectGroup.pickableType=r.PICKABLETYPE.Marker3d,this.objectGroup.hoverEnabled=!0),this._onDemandConditions=void 0===i.demandConditions?[]:i.demandConditions,this.onDemandManager=new r.BimTileOnDemandManager(this),this.modelLoaded=!1,this._shellModel=null,this.minDistanceObjects={},this.blinkStartTimeMap={},this.blinkLastTimeMap={},this.positiveSequenceMap={},this.blinkColorMap={},this.blinkTimesMap={},this.exposureShift=0,this._tileSequence=0,this._parameters=i,this._cloneCursor=0,this.mapClippingIds={},this.plugins=[],this._setStatistics(this._config),this.lastHoverId=void 0}destroy(){this._tileset=this._tileset&&this._tileset.destroy(),this.clearGroups(),this.manager.scene.removeObjectGroupByName(`${r.ObjectGroupType.BIMTILESGROUP}|${this.databagId}`),this.objectGroup.transformMatrix=void 0,this.objectGroup=null,this.manager.scene.removeObjectGroupByName(`${r.ObjectGroupType.BIMTILESWIREFRAMEGROUP}|${this.databagId}`),this.tilesLoader.destroy(),this.tilesLoader=null,this.parseCfgFinish=null,this.debut=null,this.viewer=null,this.delayLoadTexture=void 0,this.sceneState=null,this.filter.destroy(),this.materialManager.destroy(),this.materialManager=null,this.blinkStartTimeMap=null,this.blinkLastTimeMap=null,this.positiveSequenceMap=null,this.blinkColorMap=null,this.blinkTimesMap=null,super.destroy(),this._shellModel=null,this.disableUserData=void 0,this._maxDetailLevel=void 0,this._detailLevelList=null,this._visualRange=null,this._parameters=null;for(var e=0,t=this.plugins.length;e<t;e++)this.plugins[e].destroy(),this.plugins[e]=null;this.plugins=null,this.lastHoverId=void 0}clearGroups(){let e=this._getNodeGroup(r.ObjectGroupType.GEOMETRY);e.clear(),e=this._getNodeGroup(r.ObjectGroupType.WIREFRAME),e.clear(),e=this._getNodeGroup(r.ObjectGroupType.INSTANCEGEOMETRY),e.clear(),e=this._getNodeGroup(r.ObjectGroupType.INSTANCEWIREFRAMEGEOMETRY),e.clear()}load(e){var t=this;this.manager.chooseRendering(this.statistics.memoeryInfo,!0),this.parseCfgFinish&&this.parseCfgFinish(),this.manager.dispatchEvent({type:r.EVENTS.ON_LOAD_START_NO_PROGRESS}),this._createTileSet();return new Promise(((e,i)=>{this._tileset.loadTileset(this.url,(function(i){t.getTransforms().boundingBox=i._boundingBox.clone(),t.modelLoaded=!0,t.manager.updateScene(t),t.filter._updateFilterManager();const n=t.viewer.getScene().getRawMatrixGlobal();i.updateGlobalMatrix(n),t.updateModelMaximumScreenSpaceError(),t.manager.dispatchEvent({type:r.EVENTS.ON_LOAD_COMPLETE,modelId:t.id}),t.debut&&t.debut(t),t._onDemand&&t._tileset.updateOnDemandConditions(t._onDemandConditions),!1===t.disableUserData&&t.tilesLoader.praseWireFrameVisibilityOption(t._parameters.wireFrameVisibilityOption),e()}),(function(){void 0===t._tileset.root&&(t.manager.dispatchEvent({type:r.EVENTS.ON_LOAD_EMPTY_SCENE,modelId:t.id}),console.warn("The scene is Empty!"),i()),t.manager.dispatchEvent({type:r.EVENTS.ON_LOAD_INVALID_SCENE,modelId:t.id}),i()}))}))}_createTileSet(){if(!this._tileset)return this._tileset=this._createNewTileset({loader:this.tilesLoader,objectGroup:this.objectGroup,transformMatrix:this.transformMatrix,batchMergeEnabled:!0,tilesCacheScheduler:this.manager.tilesCacheScheduler,onDemandManager:this.onDemandManager,enableBorderLine:this._enableBorderLine,maxDetailLevel:this._maxDetailLevel,visualRange:this._visualRange,hasLayerInfo:this._hasLayerInfo,errorCoefficient:this._errorCoefficient,debugShowBoundingBox:this.viewer._options.debugShowBoundingBox,debugShowStatistics:this.viewer._options.debugShowStatistics,debugShowGeometricErrorHelper:new r.LabelCollection(this.viewer),databagId:this.databagId,fileId:this.fileId,disableUserData:this.disableUserData,sequence:0,materialManager:this.materialManager,skipLodEnabled:this._parameters.skipLodEnabled,foveatedConeLimit:this.viewer._foveatedConeLimit}),this._tileset}_getNodeGroup(e,t){const i=this.objectGroup.children;for(let t=0,r=i.length;t<r;t++)if(i[t].name==e)return i[t];const n=new r.ObjectGroup(e,t);return this.objectGroup.add(n),n.globalSpace&&(n.matrixAutoUpdate=!1,n.updateMatrixWorld(!0)),n}_removeNodeGroup(e){this._rootNodeGroup.removeByName(e)}_createNewTileset(e){return new r.BimTileset(e)}clone(e,t){let i=(e=r.Utils.defaultValue(e,{})).transformMatrix;r.Utils.defined(i)||(i=new THREE.Matrix4),i=this.transformMatrix.clone().multiply(i),this._cloneCursor++;const n=r.Utils.defaultValue(e.modelId,`${this.id}_${this._cloneCursor}`);if(!r.Utils.defined(t)){const e={serverUrl:this._parameters.serverUrl,databagId:this._parameters.databagId,rootPath:this._parameters.rootPath,resourceType:this._parameters.resourceType,onDemand:this._parameters.onDemand,hasLayerInfo:this._parameters.hasLayerInfo,loadConfig:{transformMatrix:i},modelId:n};t=this._createNewModel(this.viewer,this.manager,e)}const a=t;return super.clone(a),a._copy(this),this._cloneTileSet(a),this.manager.addModel(a),this.manager.updateFilterManager(),this.manager.getFilter().calculateVisibleComponentsBbox(),this.manager.updateScene(this),this.viewer.render(),t}_createNewModel(e,i,r){return new t(e,i,r)}_copy(e){super._copy(e),this.modelLoaded=e.modelLoaded,this._shellModel=null}_cloneTileSet(e){this._tileset||console.log(`there is not tileset in model ${this.id}, please check it`);const t=e._createTileSet();this._tileset.clone(t,e.tilesLoader)}loadOnDemand(e){this._tileset.updateOnDemandConditions(e),this.manager.setRenderStateChanged(!0)}isEmptyScene(){return!this.modelLoaded}updateModelMaximumScreenSpaceError(){const e=this.viewer,t=e.domElement.offsetHeight;this._tileset.updateMaximumScreenSpaceError({camera:e.camera,globalMatrix:e.getScene().getRawMatrixGlobal(),globalInverseMatrix:e.getScene().getInverseMatrixGlobal(),transformMatrix:this.transformMatrix,cameraPreSSE:t/e.camera.frustumHeightFactor})}updateMaterialsValue(e,t,i){this.materialManager.updateMaterialsValue(this,e,t,i)}changeAllMaterials(e){this.materialManager.changeAllMaterials(this,e),this.tilesLoader.batchedMeshManager.changeAllMaterials(this.materialManager.materialMap),this.tilesLoader.instancedMeshManager.changeAllMaterials(this.materialManager.materialMap)}getBoundingBoxWorld(){return this.getTransforms().boundingBox.clone().applyMatrix4(this.getTransformMatrix())}setModelMaximumScreenSpaceError(e){this._tileset.setMaximumScreenSpaceError(e)}setDetailRatio(e){this._tileset.setGeoErrScaleFactor(e),this.manager.setRenderStateChanged(!0)}getDetailRatio(e){return this._tileset.getGeoErrScaleFactor()}getMeshesByUserIds(e,t){e&&t&&(this.minDistanceObjects[e]=[],this.minDistanceObjects[t]=[],this.getMeshesByUserId(e),this.getMeshesByUserId(t))}getMeshesByUserId(e){const t=this.tilesLoader.tileReader.getIndexByUserId(e);let i=this.getDescriptor().getNodeInfosByUserId(t);const r=i.length;for(let n=0;n<r;++n){const r=i[n],a=r.parent||r.nodeId;let s={};if(s.boundingBox=r.boundingBox,s.matrix=r.matrix,!1===r.instanceOrNot){const i=this.tilesLoader.getMeshNodeById(a);if(!i)continue;s.mesh=i;s.mesh.indexGroups[t].map((t=>{s.indexInfo=t,this.minDistanceObjects[e].push(s)}))}else{const t=this.tilesLoader.getInstanceMeshNodeById(a);if(!t)continue;for(const i in t){const n=t[i];s.matrix=n.matrix.clone().multiply(r.matrix),s.mesh=n.mesh,this.minDistanceObjects[e].push(s)}}}}calculateClippingIds(e,t){}calculateClippingContours(t){const i=this.manager.scene;let n=r.FillClipPlaneManager.getInstance(i),a=n.renderClipPlane;n.planeMesh;const s=r.FillClipPlaneManager.getFillClipPlaneBoundingBoxWorld(i);e.copy(this.transformMatrix).invert();const o=s.clone().applyMatrix4(e),l=this.id;n.capsIntersectContour[l]={};const d=this.manager.getScene().getInverseMatrixGlobal();let h=a.clone().applyMatrix4(d);const c=this.tilesLoader.getDescriptor().getAllNodeInfos();t.map((e=>{const t=this.tilesLoader.tileReader.getIndexByUserId(e),i=c[t];i&&i.map((i=>{const r=i.boundingBox.clone().applyMatrix4(this.transformMatrix);(r.intersectsPlane(h)||r.intersectsBox(o))&&(i.instanceOrNot?this.tilesLoader.instancedMeshManager.calculateClippingContours(l,a,s,t,e,i,this.transformMatrix,n.capsIntersectContour):this.tilesLoader.batchedMeshManager.calculateClippingContours(l,a,s,t,e,i,this.transformMatrix,n.capsIntersectContour))}))}))}getUserIdMapByFrustum(e){let t={},i=new THREE.Box3;var n=this.viewer.getScene().getMatrixGlobal();const a=this.transformMatrix,s=this.tilesLoader.tileReader.getSearchTreeBuffer();for(const l in s){const d=s[l].searchTreeBlob,h=s[l].box;if(i.copy(h),i.applyMatrix4(a).applyMatrix4(n),!e.intersectsBox(i))continue;const c=d.getNodeIdsList();function o(s,l){const d=r.TilesUtil.getBox(l.getBboxList());if(i.copy(d),i.applyMatrix4(a).applyMatrix4(n),!e.intersectsBox(i))return;let h=l.getNodesList();const u=h.length;for(let s=0;s<u;++s){const o=h[s],l=c[o],d=r.TilesUtil.getBox(l.getBboxList());if(i.copy(d),i.applyMatrix4(a).applyMatrix4(n),!e.intersectsBox(i))continue;const u=`${l.getTileId()}_${l.getBlockId()}_${l.getNodeId()}`;void 0===t[l.getUserId()]?t[l.getUserId()]=[u]:t[l.getUserId()].push(u)}l.getChildrenList().map((e=>{const t=s[e];o(s,t)}))}o(d.getOctreeList(),d.getOctreeList()[0])}return t}getRealUserId(e){return this.tilesLoader.tileReader.getUserIdByIndex(e)}getGeometryBuffersByUserId(e){let t=[];const i=this.getDescriptor().getNodeInfosByUserId(e);if(!i)return[];const r=i.length;let n=new Set;for(let a=0;a<r;++a){const r=i[a],s=r.parent||r.nodeId;n.has(s)||(!1===r.instanceOrNot?this.tilesLoader.batchedMeshManager.getGeometryBuffersByNodeInfo(s,e,this.databagId,t):this.tilesLoader.instancedMeshManager.getGeometryBuffersByNodeInfo(s,r,this.databagId,t),n.add(s))}return t}getNodeInfosByUserId(e){const t=this.tilesLoader.tileReader.getIndexByUserId(e);let i=this.getDescriptor().getNodeInfosByUserId(t),r=new THREE.Box3;if(i&&i instanceof Array){let e=[];for(let t=0,n=i.length;t<n;t++){e[t]=Object.create(i[t]),e[t].transformMatrix=this.getTransformMatrix();const n=e[t].userData;let a={};for(let e in n){const[t,i]=this.tilesLoader.tileReader.getUserDataStringMapByIndex(e,n[e]);a[t]=i}e[t].userData=a;const s=i[t].boundingBox;r.union(s)}return e.boundingBox=r,e}return i}getMaterialByMaterialId(e,t){if(e)return this.materialManager.materialMap[e];const i=t.nodeId,r=this.tilesLoader.getInstanceMeshNodeById(i);return r?r[0].mesh.material[0]:void 0}getPickingMeshes(e,t,i,n,a){let s=this.getId();t[s]=new r.ObjectGroup,t[s].matrix.copy(this.getTransformMatrix()),t[s].matrixAutoUpdate=!1;var o=!(!a||"string"!=typeof a||!a.startsWith("glow"));this._dealNonInstancedNodesForPicking(e,t[s],i,n,o),this._dealInstancedNodesForPicking(e,t[s],i,n,o)}_dealNonInstancedNodesForPicking(e,t,i,n,a){let s=new r.ObjectGroup;const o=e.selectedMaterial,l=i.length,d=this.getDescriptor().mapNodeInfoByUserId;if(d&&"{}"!==d&&!1!==this.visible){for(let e=0;e<l;++e){const t=this.tilesLoader.tileReader.getIndexByUserId(i[e]),r=d[t];if(!r||!this.filter.isPickable(t))continue;const n=r.length;for(let e=0;e<n;++e){const i=r[e];!0!==i.instanceOrNot&&this.filter._isPickable(i)&&(this.tilesLoader.batchedMeshManager.updatePickingMeshes(i,t,o,s,a),this.tilesLoader.batchedWireframeManager.updatePickingMeshes(i.lineId,t,o,s))}}t.add(s)}}_dealInstancedNodesForPicking(e,t,i,n,a){let s=new r.ObjectGroup;const o=e.selectedMaterial,l=i.length,d=this.getDescriptor().mapNodeInfoByUserId;if(d&&"{}"!==d&&!1!==this.visible){if(a){const e={mapNodeInfoByUserId:d,instanceMeshGroup:s,selectedIds:i};return this.tilesLoader.instancedMeshManager.updatePickingMeshesByIds(e),void t.add(s)}for(let e=0;e<l;++e){const t=this.tilesLoader.tileReader.getIndexByUserId(i[e]),r=d[t];if(!r||!this.filter.isPickable(t))continue;const n=r.length;for(let e=0;e<n;++e){const i=r[e];if(!1===i.instanceOrNot)continue;const n=i.parent;this.tilesLoader.instancedMeshManager.updatePickingMeshes(n,o,i.matrix,s,a,i.index),this.tilesLoader.instancedWireframeManager.updatePickingMeshes(i.lineId,t,o,i.matrix,s)}}t.add(s)}}isHiddenSourceObjectUserId(e){return this.manager.isHiddenSourceObjectUserId(e,this.id)}hasHiddenSourceObjectUserId(){return this.manager.hasHiddenSourceObjectUserId()}getModelMaximumScreenSpaceError(){return this._tileset.getMaximumScreenSpaceError()}updateMatrix(){const e=this.viewer.getScene().getRawMatrixGlobal();this._tileset.updateGlobalMatrix(e)}hasTransforms(){return!0}preUpdate(e){this._tileset.preUpdate(e)}update(e){this._tileset.update(e)}postUpdate(e){this._tileset.postUpdate(e)}updateUnitScale(e){e.unitScale=this.unitScale}isCulled(){return!!this.isUseable()&&this._tileset.root.visible}_hasNode(){return 0!==this.objectGroup.children.length}getDescriptor(){return this.tilesLoader.getDescriptor()}getAllNodeInfos(){return this.getDescriptor().getAllNodeInfos()}applyFilter(){}applySelection(){this.applyFilter()}clearHover(){this.sceneState.hoverId=void 0,this.lastHoverId=this.sceneState.hoverId,this.filter.enableStateChanged()}applyHover(){this.sceneState.hoverId!==this.lastHoverId&&(this.lastHoverId=this.sceneState.hoverId,this.filter.enableStateChanged())}clearSelection(){this.applyFilter()}setVisible(e){this.visible=e,this.objectGroup.visible!==e&&(this.objectGroup.visible=e,this.objectGroup.pickableType=e?r.PICKABLETYPE.Geometry:r.PICKABLETYPE.UnPickable,this.manager.setRenderStateChanged(!0))}isUserIdExist(e){const t=this.tilesLoader.tileReader.getIndexByUserId(e);return this.getDescriptor().isUserIdExist(t)}getBlinkMaterials(){return this.filter.getBlinkMaterials()}updateBlinkMaterial(){var e=this.sceneState.getBlinkComponentsIdMap(this.id),t=this.filter.blinkMaterials,i=this.manager.blinkManager;for(var n in e){var a=e[n],s=this.tilesLoader.tileReader.getIndexByUserId(n),o=t[this.filter.getBlinkMaterialName(s,a)];if(o){a.color&&(this.blinkColorMap[n]=this.blinkColorMap[n]||new THREE.Vector4,this.blinkColorMap[n].set(a.color.red/255,a.color.green/255,a.color.blue/255,a.color.alpha));var l=this.blinkColorMap[n]||i.getBlinkColor(this.id),d=0,h=r.EnumShaderColorState.BLINK,c=a.interval||600,u=Date.now();if(this.blinkTimesMap[n]=null==this.blinkTimesMap[n]?0:this.blinkTimesMap[n],void 0===this.blinkStartTimeMap[n]&&(this.positiveSequenceMap[n]=!0,this.blinkStartTimeMap[n]=u,this.blinkLastTimeMap[n]=u),u-this.blinkLastTimeMap[n]<=100)return;if(u-this.blinkStartTimeMap[n]>c&&(this.positiveSequenceMap[n]=!this.positiveSequenceMap[n],this.blinkStartTimeMap[n]=u,this.blinkLastTimeMap[n]=u,a.times&&(this.blinkTimesMap[n]++,this.blinkTimesMap[n]==2*a.times)))return this.blinkTimesMap[n]=0,void this.sceneState.clearBlinkComponentsById([n],this.id);var p=(u-this.blinkStartTimeMap[n])/c;for(var m in d=this.positiveSequenceMap[n]?p:1-p,this.blinkLastTimeMap[n]=u,o){o[m].updateBlinkUniformValue(h,l,d)}}}}setExposureShift(e){this.exposureShift=e,r.GlobalData.ToneMapping=1;const t=e>0?-.4*e+.5:-4*e+.5;this.materialManager.updateMaterialsValue(this,"shift",t),this.manager.setRenderStateChanged(!0)}getExposureShift(){return this.exposureShift}setBorderLineVisible(e){this._enableBorderLine=e,this._getNodeGroup(r.ObjectGroupType.WIREFRAME).visible=e,this._getNodeGroup(r.ObjectGroupType.INSTANCEWIREFRAMEGEOMETRY).visible=e}isBorderLineVisible(){return this._enableBorderLine}_setStatistics(e){e&&e.count&&(this.statistics.numOfElements=e.count.element,this.statistics.numOfTriangles=e.count.mesh_face,this.statistics.numOfVertices=e.count.mesh_vertex)}loadBusinessResources(e){!1!==this.disableUserData&&this._tileset.loadUserIdResources((()=>{this.tilesLoader.recoverIndexInfo((()=>{this.tilesLoader.recoverNodeInfo(),this.tilesLoader.recoverLineNode(),this.filter._updateFilterManager(),this.tilesLoader.praseWireFrameVisibilityOption(this._parameters.wireFrameVisibilityOption),this.disableUserData=!1,this._tileset.disableUserData=!1,this.tilesLoader.disableUserData=!1,e&&e()}))}))}debugShowGeometricError(e){this._tileset&&this._tileset.debugShowGeometricError(e)}get sequence(){return this._tileSequence}set sequence(e){this._tileSequence=e}set shellModel(e){this._shellModel=e}get shellModel(){return this._shellModel}set config(e){this._config=e}get config(){return this._config}setCastShadow(e){super.setCastShadow(e),this.viewer.traverseGroupEnableShadow(this.objectGroup,this.castShadow,this.receiveShadow),this.viewer.updateShadowMap()}setReceiveShadow(e){super.setReceiveShadow(e),this.viewer.traverseGroupEnableShadow(this.objectGroup,this.castShadow,this.receiveShadow),this.viewer.updateShadowMap()}enableLocalClippingMode(e){if(this.localClippingMode=e,this.tilesLoader.instancedMeshManager.updateInstanceClipping(e),!e)for(var t in this.localClippingPlanes=null,this.materialManager.materialMap){this.materialManager.materialMap[t].clippingPlanes=null}}getPolygonOutLine(e,t){t&&this.tilesLoader.loadPolygonOutLine(e,t)}isVisibleMesh(e){const t=this.tilesLoader.batchedMeshManager.getMeshNodeById(e);if(t&&!0===t.visible&&t.parent&&!0===t.parent.visible)return!0;const i=this.tilesLoader.instancedMeshManager.getInstanceMeshNodeById(e);for(const e in i){const t=i[e].mesh;if(!r.TilesUtil.isInstanceNodeInVisible(t))return!0}return!1}setMaxDetailLevel(e){if(this._detailLevelList.length>0){const t=this._detailLevelList[0];if(e<t)return console.log(`${this.id} minDetailLevel is ${t}, ${e} set`),void(this._tileset.maxDetailLevel=t)}this._tileset.maxDetailLevel=e}getMaxDetailLevel(){return this._tileset.maxDetailLevel}setVisualRange(e){this._tileset.visualRange=e}getVisualRange(){return this._tileset.visualRange}getRootGeoErrDistance(){const e=this.viewer.domElement.offsetHeight/this.viewer.camera.frustumHeightFactor;return this._tileset.getRootGeoErrDistance(e)}rayCastVertical(e){const t=new THREE.Vector3(e.x,e.y,this.getBoundingBoxWorld().max.z+10),i=this.viewer.getScene().getRawMatrixGlobal();t.applyMatrix4(i);const n=new r.Raycaster(t,new THREE.Vector3(0,-1,0)),a=[];if(this._tileset.traverseContentAvailableNode((e=>{e._content._meshes.traverse((e=>{if("MeshEx"!==e.type)return;const t=[];e.raycast(n,t),t.length>0&&a.push(t[0])}))})),0===a.length)return;a.sort(((e,t)=>e.distance-t.distance));const s=a[0].point,o=this.viewer.getScene().getInverseMatrixGlobal();return s.applyMatrix4(o),s}setReplacedUserIdMap(e){r.Utils.isOwnEmptyObject(e)?this.replacedUserIdMap=null:this.replacedUserIdMap=e}hasReplacedUserId(){return!r.Utils.isEmptyObject(this.replacedUserIdMap)}isReplacedUserId(e){return this.replacedUserIdMap&&this.replacedUserIdMap[e]}registerPlugin(e){this.plugins.push(e)}getModelDescriptor(){return this.getDescriptor()}_getNodeGroup(e,t){const i=this.objectGroup.children;for(let t=0,r=i.length;t<r;t++)if(i[t].name==e)return i[t];const n=new r.ObjectGroup(e,t);return this.objectGroup.add(n),n.globalSpace&&(n.matrixAutoUpdate=!1,n.updateMatrixWorld(!0)),n}getWireframeMaterial(){return this.tilesLoader.bimTileOutlineBlobParser.getLineParser().wireframeMaterial}getInstanceWireframeMaterial(){return this.tilesLoader.bimTileOutlineBlobParser.getLineParser().instanceWireframeMaterial}setWireframeColor(e,t){this.tilesLoader.bimTileOutlineBlobParser.getLineParser().setWireframeColor(e,t)}getWireframeColor(){return this.tilesLoader.bimTileOutlineBlobParser.getLineParser().getWireframeColor()}restoreWireframeColor(){return this.tilesLoader.bimTileOutlineBlobParser.getLineParser().restoreWireframeColor()}getAllWireframeGroupNames(){return[r.ObjectGroupType.WIREFRAME,r.ObjectGroupType.INSTANCEWIREFRAMEGEOMETRY]}adjustVisibility(e){this._getNodeGroup(r.ObjectGroupType.GEOMETRY).visible=e,this._getNodeGroup(r.ObjectGroupType.WIREFRAME).visible=e}adjustInstanceVisibility(e){this._getNodeGroup(r.ObjectGroupType.INSTANCEGEOMETRY).visible=e,this._getNodeGroup(r.ObjectGroupType.INSTANCEWIREFRAMEGEOMETRY).visible=e}applyBlink(){this.filter.enableStateChanged()}setExcavation(e){this.materialManager.setExcavation(e)}}r.BimTilesModel=t}(),function(){class e extends r.AbstractTileContent{constructor(e,t){super(e,t),this._outlineContent=new r.BimTileOutlineContent(e),this._loader=e._loader,this.contentBufferNum=0}destroy(){this._outlineContent.destroy(),this._outlineContent=void 0,super.destroy(),this._loader=null}update(e){const t=this._tile;this._state===r.TileContentProcessState.PENDING&&(this._state=r.TileContentProcessState.PROCESSING,t.parseContentBlock(this._contentBuffer,(()=>{this.parseTileContent((i=>{this._state=r.TileContentProcessState.PROCESSED,this.attachToTilesGroup(i),this.disposeContentBuffer(),t._clearMeshBuffer(),t._clearLineBuffer(),this._readyDeferred&&this._readyDeferred.resolve(this),this._ready=!0,e.afterRenderFns.push((function(){}))}))}))),this._state,r.TileContentProcessState.PROCESSED,this._ready&&t.isOutlineActivated()&&this._outlineContent.update()}parseTileContent(e){const t=this;if(this._tile.contentTypeInstance)this._loader.parseTileContent(this._tile,(i=>{r.Utils.defined(t._tile)&&(t._tile.setByteLength(t.geometryByteLength),e(i),t.setShareGeometryProcessed())}));else{this.contentBufferNum=Object.keys(this._contentBuffer).length;for(const i in this._contentBuffer)i===this._tile.getAbsoluteContentUrl()?this._loader.parseTileContent(this._tile,(i=>{this.contentBufferNum--,0===this.contentBufferNum&&r.Utils.defined(t._tile)&&(t._tile.setByteLength(t.geometryByteLength),e(i),t.setShareGeometryProcessed())})):this._loader.parseTileLineContent(this._tile,(i=>{this.contentBufferNum--,0===this.contentBufferNum&&r.Utils.defined(t._tile)&&e(i)}))}}clone(t){t=r.Utils.defaultValue(t,new e),super.clone(t)}attachToTilesGroup(e){const t=e.contentType===r.TileContentType.DATA_INSTANCE?this._tile._tileset._objectGroup.getObjectByName(r.ObjectGroupType.INSTANCEGEOMETRY):this._tile._tileset._objectGroup.getObjectByName(r.ObjectGroupType.GEOMETRY);t.add(this.meshes),t.updateMatrixWorld(!0)}disposeShareGeometry(){const e=this._tile._tileset.geometryManager;return!r.Utils.defined(e)||e.disposeShareGeometry(this._tile.nodeId)}setShareGeometryProcessed(){const e=this._tile._tileset.geometryManager;r.Utils.defined(e)&&(e.setShareGeometryState(this._tile.nodeId,r.SharedGeometryState.PROCESSED),e.addGeometryOwner(this._tile.nodeId))}isOutlineContentReady(){return this._outlineContent.contentReady}}r.BimTileContent=e}(),r.BimTileOutlineContent=class{constructor(e){this._tile=e,this._url=void 0,this._state=r.TileContentProcessState.PENDING,this._request=void 0,this._destroyed=!1,this._buffer=void 0,this._outlineMeshes=new THREE.Group,this._outlineMeshes.name=r.Utils.getEncodedString(this._tile.getAbsoluteContentUrl())||e.name,this._outlineMeshes.databagId=e._databagId,this._outlineMeshes.fileId=e._fileId,this._outlineMeshes.matrixAutoUpdate=!1}destroy(){this._destroyed=!0,this._tile=void 0,this._request&&(this._request.destroy(),this._request=void 0),this.disposeLineGeometry(),this._buffer=void 0}isDestroyed(){return this._destroyed}get contentReady(){return this._state===r.TileContentProcessState.READY}get outlineMeshes(){return this._outlineMeshes}set visible(e){this._outlineMeshes.visible=e}disposeLineGeometry(){this._outlineMeshes.parent&&this._outlineMeshes.parent.remove(this._outlineMeshes);const e=this._outlineMeshes.children;for(let t=0,i=e.length;t<i;++t){const i=e[t],r=i.geometry;r.dispose(),r.groups=void 0,r.index=void 0,r.attributes=void 0,i.geometry=void 0,i.material=void 0}}requestContent(){const e=this._tile,t=new r.Request({type:e._tileset.type,url:e.getOutlineContentUrl(),priorityCallback:e._createPriorityCallback(e)});this._request=t;const i=this._fetchContent(t);if(!i)return!1;const n=this._state;this._state=r.TileContentProcessState.LOADING;const a=this._handleFailedContent(this,e._tileset);return++e._tileset.statistics.numberOfPendingRequests,i.then((t=>{if(this.isDestroyed())return void a();--e._tileset.statistics.numberOfPendingRequests,this._state=r.TileContentProcessState.LOADED;const i=Object.keys(t);this._buffer=t[i[0]]})).catch((i=>{if(t.state===r.RequestState.CANCELLED)return this._state=n,--e._tileset.statistics.numberOfPendingRequests,void++e._tileset.statistics.numberOfAttemptedRequests;a(i)})),!0}_fetchContent(e){const t=this;e.requestCallback=function(){const i=new r.Deferred;return t._loadArrayBuffer(e.url,i),i.promise},e.cancelCallback=function(){};const i=r.RequestScheduler.request(e);if(i)return i.then((function(t){return e.cancelCallback=void 0,t})).catch((function(t){return e.cancelCallback=void 0,Promise.reject(t)}))}_handleFailedContent(e,t){return function(i){e._state===r.TileContentProcessState.PROCESSING?--t.statistics.numberOfTilesProcessing:--t.statistics.numberOfPendingRequests,e._state=r.TileContentProcessState.FAILED}}_loadArrayBuffer(e,t){this._tile.fetchContentBlock([e],(function(e){t.resolve(e)}),(function(e){t.reject(e)}))}parseContentBlock(){this._state=r.TileContentProcessState.PROCESSING,this._tile.parseOutlineContentBlock(this._buffer,(()=>{this._state=r.TileContentProcessState.PROCESSED}))}createMesh(){const e=this._tile,t=e._loader;this._state=r.TileContentProcessState.CONSTRUCTING,t.parseTileOutlineContent(e,(()=>{if(this.isDestroyed())return this._state=r.TileContentProcessState.FAILED,void this.disposeContentBuffer();this._state=r.TileContentProcessState.READY,this.updateContentLength(),this.attachToTilesGroup(e),this.disposeContentBuffer()}))}disposeContentBuffer(){this._buffer=void 0}attachToTilesGroup(e){const t=e.contentType===r.TileContentType.DATA_INSTANCE?this._tile._tileset._objectGroup.getObjectByName(r.ObjectGroupType.INSTANCEWIREFRAMEGEOMETRY):this._tile._tileset._objectGroup.getObjectByName(r.ObjectGroupType.WIREFRAME);t.add(this.outlineMeshes),t.updateMatrixWorld(!0)}updateContentLength(){this._tile._content._geometryByteLength+=this._buffer.byteLength}processState(){this._state===r.TileContentProcessState.PENDING&&this.requestContent(),this._state===r.TileContentProcessState.LOADED&&this.parseContentBlock(),this._state===r.TileContentProcessState.PROCESSED&&this.createMesh(),this._state,r.TileContentProcessState.READY}update(){this.processState()}},function(){class e extends r.AbstractTile{constructor(e,t,i,r){super(e,t),this._loader=e._loader,this._header=i,this._contentFolder=r,this.matrix=new THREE.Matrix4,this.localIndexList=[],this.userIndexMap={},this.isInstanceTile=!1,this.explodeCount=0,this.needUpdateFilter=!1,this._resource=void 0,this.loadedCount=0,this.loadedLineCount=0,this.loadedOutlineCount=0,this._fetchContentBlockBind=this.fetchContentBlock.bind(this),this._getTilesetContentCallbackBind=this._getTilesetContentCallback.bind(this)}destroy(){super.destroy(),this.matrix=void 0,this._loader=void 0,this._header=void 0,this._contentFolder=void 0,this.localIndexList=void 0,this._resource&&(this._resource.destroy(),this._resource=void 0),this._fetchContentBlockBind=void 0,this._getTilesetContentCallbackBind=void 0}build(){this._parseTile(this._tileset,this,this._header,this._contentFolder)}_parseTile(e,t,i,n){if(t.boundingBox=r.TilesUtil.getBox(i.boundingVolume),i.refine?("replace"!==i.refine&&"add"!==i.refine||console.warn("lowercase-refine",'This tile uses a lowercase refine "'+i.refine+'". Instead use "'+i.refine.toUpperCase()+'".'),t.refineReplace="REPLACE"===i.refine.toUpperCase()):t.parent?t.refineReplace=t.parent.refineReplace:t.refineReplace=!0,t.geometricError=i.geometricError<r.TilesUtil.SIX_ACCURACY?t._parent?t._parent.geometricError:1/r.TilesUtil.Minimum_Setting_SSEHold:i.geometricError,t.contentIndex=null,i.content?(t.contentId=i.content.id,t.contentUrl=i.content.uri||i.content.url,t.contentType=i.content.type,t.contentIndex=n+t.contentUrl,t.contentInsModel=r.Utils.isDefined(i.content.model)?i.content.model:null,void 0!==i.content.index&&(t.contentCMPTIndex=i.content.index),void 0!==i.content.offset&&(t.contentCMPTOffset=i.content.offset),void 0!==i.content.size&&(t.contentCMPTSize=i.content.size)):t.contentType=r.TileContentType.DATA_NULL,i.outline&&(t.contentOutlineUrl=n+i.outline),r.Utils.isDefined(i.visibilityPriority)?t._visibilityPriority=i.visibilityPriority:r.Utils.isDefined(t.parent)&&(t._visibilityPriority=t.parent._visibilityPriority),t.detailLevel=r.Utils.isDefined(i.detailLevel)?i.detailLevel:4,t.contentTypeNull&&(t._content=t.createEmptyContent(),t._contentState=r.TileContentState.READY),t.contentTypeTile&&(t.isTilesetContent=!0),i.transform&&16===i.transform.length&&t.matrix.fromArray(i.transform),t._parent?t.matrix=t._parent.matrix.clone().multiply(t.matrix):t.matrix.identity(),t.boundingBox=r.TilesUtil.getBox(i.boundingVolume,t.matrix),t._parent&&t._parent.refineReplace?t._parent.contentTypeEmpty?t._debugLodLevel=t._parent._debugLodLevel:t._debugLodLevel=t._parent._debugLodLevel+1:t.refineReplace&&(t._debugLodLevel=0),i.properties&&i.properties.LocalIndex){i.properties.LocalIndex.map((e=>{const t={box:r.TilesUtil.getBox(e.boundingVolume),url:n+e.content.url};this.localIndexList.push(t),this._loader.addSearchTree(t.url,t.box)}))}if(i.properties&&i.properties.layerKey&&(this.layerInfo[i.properties.layerKey]&&console.warn("repeated Key"),this.layerInfo[i.properties.layerKey]=i.properties.layerValue),i.children)for(const r of i.children){const i=this._createNewTile(e,t,r,n);i.build(),i._generateNodeId()}}clone(e,t,i){return r.Utils.defined(i)||(i=this._createNewTile(e,t)),super.clone(i),i._loader=e._loader,i._header=this._header,i._contentFolder=this._contentFolder,i.matrix=this.matrix.clone(),i.localIndexList=this.localIndexInfo,i.userIndexMap=this.userIndexMap,i.isInstanceTile=this.isInstanceTile,i.isTilesetContent=this.isTilesetContent,i._id=this._id,i._tileset=e,i}fetchContentBlock(e,t,i){let n=e.length,a={};for(let s=0;s<n;++s){const o=r.RequestSpliter.splitByUrlMd5(e[s]);this.contentTypeCMPT?this._loader.loadCMPTArrayBufferImmediately(o,(function(i){n--,a[e[s]]=i,0===n&&t(a)}),(function(e){i(e)})):this._loader.loadArrayBufferImmediately(o,(function(i){n--,a[e[s]]=i,0===n&&t(a)}),(function(e){i(e)}))}}parseCMPTContentBlock(e,t){const i=this._loader.tileReader;this.arrayBufferNum=1;for(const n in e){const a={node:this,type:proto.bimtile_pbf.BlockHeader.BlockType.BT_MESH,url:this.getAbsoluteContentUrl()},s=r.RequestSpliter.splitByUrlMd5(n);let o=this._loader.CMPTUrlMap[s].buffer.slice(this.contentCMPTOffset,this.contentCMPTOffset+this.contentCMPTSize);i.parseBlock(o,a,(()=>{this.arrayBufferNum--,o=null,0===this.arrayBufferNum&&t(e)}))}}parseContentBlock(e,t){if("CMPT"===this.contentType)return this.parseCMPTContentBlock(e,t);const i=this._loader.tileReader;this.arrayBufferNum=Object.keys(e).length;for(const r in e){let n=i.getBlockType(this.contentType),a=this.getAbsoluteContentUrl();r!==a&&(n=proto.bimtile_pbf.BlockHeader.BlockType.BT_LINE,a=this.getOutlineContentUrl());const s={node:this,type:n,url:a};i.parseBlock(e[r],s,(()=>{this.arrayBufferNum--,0===this.arrayBufferNum&&t(e)}))}}parseLineContentBlock(e,t){const i=this._loader.tileReader,r={node:this,type:proto.bimtile_pbf.BlockHeader.BlockType.BT_LINE,url:this.getAbsoluteContentUrl()};i.parseBlock(e,r,(function(){t(e)}))}parseOutlineContentBlock(e,t){const i=this._loader.tileReader,r={node:this,outline:!0,type:proto.bimtile_pbf.BlockHeader.BlockType.BT_LINE,url:this.getOutlineContentUrl()};i.parseBlock(e,r,(function(){t(e)}))}createContent(e){return this.isTilesetContent?new r.TileTilesetContent(this,e):new r.BimTileContent(this,e)}getAbsoluteContentFolder(){return this._contentFolder}computeMeshNodeCount(e){this.loadedCount=0,this.loadedLineCount=0;for(let c in this.buffer){var t=this.getBuffer(c);if(t.type==proto.BlockHeader.BlockType.BT_MESH){var i=t.content;if(i)for(var r=i.getScenesList(),n=r.length,a=0;a<n;++a)for(var s=r[a].getNodesList(),o=s.length,l=0;l<o;++l){var d=s[l],h=i.getNodesList()[d];this.getNodeCount(h,i,e)}}}}getNodeCount(e,t,i){const r=e.getPrimitivesList();e.getPrimitivesList().length;var n=e.getNodeType();(!0===i&&n!=proto.bimtile_pbf.Node.NodeType.NT_BATCHED_SUB_NODE||!1===i&&n!=proto.bimtile_pbf.Node.NodeType.NT_BATCHED_MAIN_NODE)&&r.map((e=>{switch(t.getPrimitivesList()[e].getMode()){case proto.bimtile_pbf.Primitive.PrimitiveMode.PM_TRIANGLES:case proto.bimtile_pbf.Primitive.PrimitiveMode.PM_POINTS:this.loadedCount++;break;case proto.bimtile_pbf.Primitive.PrimitiveMode.PM_LINES:this.loadedLineCount++}}));var a=e.getChildrenList();if(0!==a.length)for(const e of a){var s=t.getNodesList()[e];this.getNodeCount(s,t,i)}}computePointNodeCount(){this.loadedCount=0;for(let r in this.buffer){var e=this.getBuffer(r);if(e.type==proto.BlockHeader.BlockType.BT_POINT){var t=e.content;if(t){var i=t.getPointsList();this.loadedCount=i.length}}}}computeLineNodeCount(){this.loadedLineCount=0;for(let e in this.lineBuffer){const t=this.getLineBuffer(e);if(t.type!=proto.BlockHeader.BlockType.BT_LINE)continue;const i=t.content;if(!i)continue;const r=i.getScenesList();for(let e=0,t=r.length;e<t;++e){const t=r[e].getNodesList();this.loadedLineCount+=t.length}}}computeOutlineNodeCount(){this.loadedOutlineCount=0;for(let e in this.outlineBuffer){const t=this.getOutlineBuffer(e);if(t.type!=proto.BlockHeader.BlockType.BT_LINE)continue;const i=t.content;if(!i)continue;const r=i.getScenesList();for(let e=0,t=r.length;e<t;++e){const t=r[e].getNodesList();this.loadedOutlineCount+=t.length}}}_clearAllBuffer(){this._clearMeshBuffer(),this._clearLineBuffer(),this._clearOutlineBuffer()}_clearBufferData(e){for(let t in e)e[t].content&&(e[t].content=null),e[t]=null}_clearMeshBuffer(){this.buffer&&(this._clearBufferData(this.buffer),this.buffer=null)}_clearLineBuffer(){this.lineBuffer&&(this._clearBufferData(this.lineBuffer),this.lineBuffer=null)}_clearOutlineBuffer(){this.outlineBuffer&&(this._clearBufferData(this.outlineBuffer),this.outlineBuffer=null)}getBuffer(e){return this.buffer[e]}getLineBuffer(e){return this.lineBuffer[e]}getOutlineBuffer(e){return this.outlineBuffer[e]}disposeMeshNodeById(e){this._loader.disposeMeshNodeById(e)}disposeInstanceMeshNodeById(e){this._loader.disposeInstanceMeshNodeById(e)}disposeLineNodeById(e){this._loader.disposeLineNodeById(e)}disposeInstanceLineNodeById(e){this._loader.disposeInstanceLineNodeById(e)}onSelectionChanged(){const e=this._loader.tileReader,t=this._loader.filter.model.id,i=this._loader.sceneState.selectionSet[t];if(this.selection={},void 0===i||0===Object.keys(i).length)return!1;for(const t in this.userIndexMap){const r=e.getUserIdByIndex(t);i[r]&&(this.selection[r]=!0)}if(Object.keys(this.selection).length===Object.keys(this.preSelection).length){for(const e in this.selection)if(!this.preSelection[e])return this.preSelection=Object.assign(this.selection),!0;return!1}return this.preSelection=Object.assign(this.selection),!0}applyFilter(){if(this._loader.disableUserData)return;const e=this._loader.filter;this.stateChangedRenderer===r.EnumChangedState.NONE&&(this.stateChangedRenderer=r.EnumChangedState.START,e._stateChanged=!0),this.isInstanceTile?(e.instanceApply(this),e.wireFrameInstanceApply(this)):(e.standardApply(this),e.wireFrameStandardApply(this))}applyOnDemand(){if(!this.isInstanceTile)return;const e=this._tileset.onDemandManager;!1!==e.onDemand&&e.instanceApply(this)}explode(){const e=this._loader.modelExplosion;this.isInstanceTile?e.instanceExplode(this):e.standardExplode(this)}_generateNodeId(e){let t=e;if(!r.Utils.defined(t)){const e=this._header.content;if(r.Utils.defined(e)){const i=e.uri||e.url;t=`${this._contentFolder}_${i}`,this.contentCMPTIndex&&(t+=`_${this.contentCMPTIndex}`)}else t=`${this._contentFolder}_root`}return this._id=r.Utils.getEncodedString(t),this._id}setByteLength(e){r.Utils.defined(this._tileset)&&this._tileset.geometryManager.setByteLength(this.nodeId,e)}sharedGeometryDestroy(){const e=this._tileset.geometryManager;if(!r.Utils.defined(e))return!1;const t=e.getGeometry(this._id);return!!r.Utils.defined(t)&&t.state===r.SharedGeometryState.DESTROYED}_setSharedGeometryProcressingState(){if(this.contentTypeTile)return;const e=this._tileset.geometryManager;if(r.Utils.defined(e)){e.addGeometryById(this.nodeId).state=r.SharedGeometryState.PROCESSING}}requestContent(){if(this._requestContentIfCloned())return!0;if(this._requestContentIfShared())return!0;const e=this._requestContent();return e&&this._setSharedGeometryProcressingState(),e}_requestContentIfCloned(){return!!(this.contentTypeTile&&this.childrenUnload&&this._tileset.cloneChildrenOfTile(this))}_requestContentIfShared(){if(this.contentTypeTile)return!1;const e=this._tileset.geometryManager;if(r.Utils.defined(e)){const t=e.getGeometry(this._id);if(r.Utils.defined(t)){if(t.state===r.SharedGeometryState.PROCESSING)return!1;if(t.state===r.SharedGeometryState.PROCESSED)return this._content=this.createContent(),this._content.geometryByteLength=t.byteLength,this._contentProcessDeferred=new r.Deferred,this._contentReadyDeferred=new r.Deferred,e.createMesh(t,this,this._tileset._loader),this._contentState=r.TileContentState.READY,this._contentReadyDeferred.resolve(this._content),this._content._state=r.TileContentProcessState.PROCESSED,this._content.attachToTilesGroup(this),!0}}return!1}_requestContent(){const e=new r.Request({type:this._tileset.type,priorityCallback:this._createPriorityCallback(this)});this._request=e;const t=this._getResource();t._request=e;const i=t.fetch({fetchCallback:this._getContentBlockCallback()});if(!i)return!1;const n=this._contentState;this._contentState=r.TileContentState.LOADING,this._contentProcessDeferred=new r.Deferred,this._contentReadyDeferred=new r.Deferred;const a=this._handleFailedContent(this,this._tileset),s=this;return i.then((function(e){if(!s.isDestroyed())return s._content=s.createContent(e),s._contentState=r.TileContentState.PROCESSING,s._contentProcessDeferred.resolve(s._content),s._content.readyPromise.then((function(e){s._contentState=r.TileContentState.READY,s._contentReadyDeferred.resolve(e)}));a()})).catch((function(t){if(e.state===r.RequestState.CANCELLED)return s._contentState=n,--s._tileset.statistics.numberOfPendingRequests,++s._tileset.statistics.numberOfAttemptedRequests,void s._cancelSharedGeometryRequest();a(t)})),!0}_getResource(){const e=this._resource;if(e)return e;const t=this.getAbsoluteContentUrl();return r.Resource.create({url:this.isTilesetContent?t:[t]})}_getContentBlockCallback(){return this.isTilesetContent?this._getTilesetContentCallbackBind:this._fetchContentBlockBind}_getTilesetContentCallback(e,t,i){this._loader.loadJson(e,void 0,t)}_cancelSharedGeometryRequest(){const e=this._tileset.geometryManager;r.Utils.defined(e)&&e.setShareGeometryState(this.nodeId,r.SharedGeometryState.CANCELED)}checkIfProcessingTileAvailable(){return!this.isDestroyed()&&(!!this.content&&(!!this.contentProcessing||(this.unloadContent(),!1)))}checkIfTileAvailable(){return!this.isDestroyed()&&!(!this.content||!this.contentAvailable)}_createNewTile(e,t,i,n){return new r.BimTileNode(e,t,i,n)}isOutlineActivated(){return!!this.getOutlineContentUrl()&&this._tileset.isOutlineEnabled()}get needsLoading(){return!this.contentReady||this.isOutlineLoading()}isOutlineLoading(){return!!this.isOutlineActivated()&&!this._content.isOutlineContentReady()}createEmptyContent(){return new r.TileEmptyContent(this)}}r.BimTileNode=e}(),r.BimTileMeshParser=class{constructor(e){this.materialManager=e.materialManager,this.batchMergeEnabled=e.batchMergeEnabled,this.delayLoadTexture=e.delayLoadTexture,this.renderFunction=e.renderFunction}destroy(){this.materialManager.destroy(),this.materialManager=null,this.renderFunction=null}loadMesh(e,t){}_getAccInfo(e,t){if(t<0)return{offset:0,length:0,count:0};const i=e.getBufferaccsList()[t];return{offset:i.getByteOffset(),length:i.getByteLength(),count:i.getCount(),valueType:i.getValueType()}}_getAccColorArray(e,t,i,r){const n=e._getAccInfo(t,r.getAccColor()),a=i.slice(n.offset,n.offset+n.length).buffer;return new Uint8Array(a)}_getAccVertexArray(e,t,i,r){const n=e._getAccInfo(t,r.getAccVertices()),a=i.slice(n.offset,n.offset+n.length).buffer;return new Float32Array(a)}_getAccIndicesArray(e,t,i,r){const n=e._getAccInfo(t,r.getAccIndices()),a=i.slice(n.offset,n.offset+n.length).buffer;let s=null;switch(n.valueType){case proto.bimtile_pbf.BufferAcc.ComponentType.CT_USHORT:s=new Uint16Array(a);break;default:s=new Uint32Array(a)}return s}_getMeshBuffer(e,t,i){var r=i.meshBlob.getBlobHeader(),n=r.getBufferBlockId(),a=r.getMaterialBlockId(),s=(r.getUserdataBlockId(),e.tileReader.getBuffer(t,n,proto.BlockHeader.BlockType.BT_BUFFER)),o=e.tileReader.getBuffer(t,a,proto.BlockHeader.BlockType.BT_MATERIAL);i.buffer=s,i.materialBlockId=a,i.material=o,s&&(i.bufferData=s.getBuffer())}createMeshNode(e,t,i,n,a,s,o){if(!this.checkIfTileAvailable(n))return void this._deleteNodeBuffer(t,n);let l=null;switch(i.mode){case proto.bimtile_pbf.Primitive.PrimitiveMode.PM_LINES:l=new r.LineSegmentsEx(a,[s]);break;default:l=new r.MeshEx(a,[s])}i.indexInfos||(i.indexInfos={}),l.applyMatrix4(i.matrix),l.name=i.nodeIndexId;var d=e.filter.model;r.GlobalData.EnableShadowMap&&(l.castShadow=d.castShadow,l.receiveShadow=d.receiveShadow),l.indexGroups=i.indexInfos,l.indexCount=a.index.count;for(const e in l.indexGroups)l.indexGroups[e].preTranslation=void 0,n.userIndexMap[e]=!0;e.addMeshIdMap(l.name,l),n.content.meshes.add(l),l.databagId=n.content.meshes.databagId,l.fileId=n.content.meshes.fileId,i.userIdMapIndex&&e.addUserIdMapIndices(i.userIdMapIndex,l.name),e.renderableCount++;const h={id:n.nodeId,bufferGeometry:a,material:s,pbfNodeInfo:i,node:n};return n._tileset.geometryManager.addGeometryById(n.nodeId,h),this.decreaseLoadedCount(n),this.checkIfTileParseFinish(n)&&(o&&o(n),this.delayLoadTexture||this._deleteNodeBuffer(t,n)),l}createMeshMaterial(e){this.delayLoadTexture?this.createMeshTextureDelay(e):this.createMeshTextureImmediately(e)}createMeshTextureDelay(e){let{that:t,loader:i,meshBufferObject:r,pbfNodeInfo:n,treeNode:a,primitive:s,bufferGeometry:o,onTileContentReadyCallback:l,callback:d}=e,h=t.createMeshNode(i,r,n,a,o,this.materialManager.globalMaterial,l);d&&d(),h&&new Promise((e=>{t.materialManager.getMaterial(i,r,s,(t=>{e(t)}))})).then((e=>{void 0!==h.material&&(h.material[0]=e,a._tileset.updateTextureMemoryUsage(a),t.renderFunction())}))}createMeshTextureImmediately(e){let{that:t,loader:i,meshBufferObject:r,pbfNodeInfo:n,treeNode:a,primitive:s,bufferGeometry:o,onTileContentReadyCallback:l,callback:d}=e;new Promise((e=>{t.materialManager.getMaterial(i,r,s,(t=>{e(t)}))})).then((e=>{t.createMeshNode(i,r,n,a,o,e,l),d&&d()}))}_deleteNodeBuffer(e,t){e.materialBlockId=void 0,e.contentIndex=void 0,e.bufferId=void 0,e.material=null,e.bufferData=null,e.buffer=null,e.meshBlob=null,e.matrix=null;var i=this.getFullBuffer(t);for(const e in i)i[e].content=null}getFullBuffer(e){return e.buffer}checkIfTileAvailable(e){return e.checkIfProcessingTileAvailable()}decreaseLoadedCount(e){e.loadedCount--}checkIfTileParseFinish(e){return e.loadedCount<=0&&e.loadedLineCount<=0&&e.loadedOutlineCount<=0}getLoadedCount(e){return e.loadedCount}},function(){class e extends r.BimTileMeshParser{constructor(e){super(e)}_getSubNodeInfo(e,t,i,r,n,a){const s=n.nodeIndex,o=`${r.bufferId}_${s}`;if(n.nodeIndexId=o,i.clearGroups(),i.groups.push({start:0,count:n.iAccInfoCount,materialIndex:0}),t.getDescriptor().getReferencedMeshBufferById(o)){let e=t.pbfNodeInfoMap[o];return e.userIdMapIndex=[],e}const l=r.meshBlob.getNodesList()[s],d=l.getChildrenList(),h=r.meshBlob;let c={};const u={};if(n.userIdMapIndex=[],r.primitiveMaterialId=a.getMaterialId(),d.map(((i,a)=>{const s=h.getNodesList()[i],o=s.getPrimitivesList(),l=o.length;for(let d=0;d<l;d++){const l=o[d],u=h.getPrimitivesList()[l],p=e._addNodeInfo(e,t,h,r,s,u,n,i,a);void 0===c[p.userId]?c[p.userId]=[p.subIndexInfo]:c[p.userId].push(p.subIndexInfo)}})),0===Object.keys(c).length){const i=e._addNodeInfo(e,t,h,r,l,a,n,s,0);c[i.userId]=[i.subIndexInfo]}for(const[e,i]of Object.entries(c))u[e]=t.getDescriptor().getAllNodeInfos()[e];return n.indexInfos=c,n.nodeInfos=u,t.getDescriptor().cacheReferencedMeshBufferData(o,{IndexInfos:c}),t.pbfNodeInfoMap[o]=n,n}_createIndexGroup(e){return{start:e.indexStart,count:e.indexCount,materialIndex:0,userId:e.userId}}_addNodeInfo(e,t,i,n,a,s,o,l,d){const h=o.nodeIndexId,c=this._getAccInfo(i,s.getAccVertices()),u=this._getAccInfo(i,s.getAccIndices()),p=this._getAccInfo(i,s.getAccTexcoords()),m=`${n.bufferId}_${l}`,f=a.getUserId(),g=(c.offset-o.vAccInfoStart)/4,v=3*c.count;let y=0;switch(u.valueType){case proto.bimtile_pbf.BufferAcc.ComponentType.CT_USHORT:y=(u.offset-o.iAccInfoStart)/2;break;default:y=(u.offset-o.iAccInfoStart)/4}const M=u.count,E=(p.offset-o.tAccInfoStart)/4,b=2*p.count,x=s.getAccColor(),I=this._getAccInfo(i,x),T=(I.offset-o.cAccInfoStart)/4,C=I.count;let w,S;const A=this._getAccInfo(i,s.getAccNormals());A.valueType===proto.bimtile_pbf.BufferAcc.ComponentType.CT_UBYTE&&(w=(A.offset-o.nAccInfoStart)/2,S=A.count);let B={userId:f,subIndexInfo:{meshId:m,positionStart:g,positionCount:v,indexStart:y,indexCount:M,uvStart:E,uvCount:b,colorStart:T,colorCount:C,cNormalStart:w,cNormalCount:S}};o.userIdMapIndex.push({userId:f,index:d});const R=r.BimTileMaterialManager.generateMaterialName(n,n.primitiveMaterialId,!1),D={parent:h,matrix:o.matrix,materialId:R,type:proto.bimtile_pbf.Node.NodeType.NT_BATCHED_SUB_NODE,cellId:null};return t.disableUserData?(t.addNoUserDataMeshNodeInfo(f,m,D),B):(t.patchMeshNodeInfo(f,m,D),B)}loadMesh(e,i){let{that:r,loader:n,meshBufferObject:a,pbfNodeInfo:s,primitive:o,treeNode:l,onTileContentReadyCallback:d}=e;if((o.getAccVertices()<0||o.getAccIndices()<0)&&o.getAccArchive()<0)return void console.warn("invalid acc info");if(r._getMeshBuffer(n,l,a),!a.buffer)return;let h=new THREE.BufferGeometry;const c=a.meshBlob,u=a.bufferData;this._createNormalBuffer(s,h,u,c,o);const p=r._getAccInfo(c,o.getAccVertices()),m=r._getAccVertexArray(r,c,u,o);h.setAttribute("position",new THREE.BufferAttribute(m,3)),s.vAccInfoStart=p.offset;const f=r._getAccInfo(c,o.getAccIndices()),g=r._getAccIndicesArray(r,c,u,o);h.setIndex(new THREE.BufferAttribute(g,1)),s.iAccInfoStart=f.offset,s.iAccInfoCount=f.count,s.tAccInfoStart=0,o.useCompressedUv=!1;t(r._getAccInfo(c,o.getAccTexcoords()),u,o,a,h,s,1);t(r._getAccInfo(c,o.getAccTexcoords2()),u,o,a,h,s,2),this._createColorBuffer(s,h,u,c,o),s=Object.assign(r._getSubNodeInfo(r,n,h,a,s,o)),h.getAttribute("uv2")?o.hasLightMap=!0:o.hasLightMap=!1;const v={that:r,loader:n,meshBufferObject:a,pbfNodeInfo:s,treeNode:l,primitive:o,bufferGeometry:h,onTileContentReadyCallback:d,callback:i};r.createMeshMaterial(v)}_createNormalBuffer(e,t,i,r,n){n.useCompressedNormal=!1;const a=this._getAccInfo(r,n.getAccNormals());if(a.count>0){let r;const s=i.slice(a.offset,a.offset+a.length).buffer;switch(a.valueType){case proto.bimtile_pbf.BufferAcc.ComponentType.CT_UBYTE:r=new Uint8Array(s),t.setAttribute("cNormal",new THREE.BufferAttribute(r,2)),e.nAccInfoStart=a.offset,e.nAccInfoCount=a.count,n.useCompressedNormal=!0;break;case proto.bimtile_pbf.BufferAcc.ComponentType.CT_FLOAT:r=new Float32Array(s),t.setAttribute("normal",new THREE.BufferAttribute(r,3)),e.nAccInfoStart=a.offset,e.nAccInfoCount=a.count,n.useCompressedNormal=!1}}}_createColorBuffer(e,t,i,r,n){const a=n.getAccColor(),s=this._getAccInfo(r,a);if(s.count<=0||a<=0)return n.vertexColors=!1,!1;const o=this._getAccColorArray(this,r,i,n);let l=s.length/s.count,d=new THREE.Uint8BufferAttribute(o,l);return d.normalized=!0,t.setAttribute("color",d),e.cAccInfoStart=s.offset,e.cAccInfoCount=s.count,n.vertexColors=!0,!0}}function t(e,t,i,r,n,a,s){if(e.count<=0)return;const o=t.slice(e.offset,e.offset+e.length).buffer;let l=null;e.valueType==proto.bimtile_pbf.BufferAcc.ComponentType.CT_SHORT?(i.useCompressedUv=!0,l=new Int16Array(o)):(i.useCompressedUv=!1,l=new Float32Array(o));const d=1===s?"uv":`uv${s}`;n.setAttribute(d,new THREE.BufferAttribute(l,2)),a.tAccInfoStart=e.offset}r.BimTileMeshNodeParser=e}(),function(){class e extends r.BimTileMeshParser{constructor(e){super(e)}destroy(){super.destroy()}loadMesh(e,t){let{that:i,loader:n,meshBufferObject:a,pbfNodeInfo:s,primitive:o,treeNode:l,onTileContentReadyCallback:d}=e;if((o.getAccVertices()<0||o.getAccIndices()<0)&&o.getAccArchive()<0)return void console.warn("invalid acc info");if(i._getMeshBuffer(n,l,a),!a.buffer)return;const h=a.meshBlob,c=a.bufferData,u=a.material,p=h.getBufferaccsList()[o.getAccArchive()],m=p.getByteOffset(),f=p.getByteLength(),g=(p.getCount(),c.slice(m,m+f).buffer);r.TilesUtil.getDracoLoader().decodeDracoFile(g,(function(e){if(!(u&&o.getMaterialId()>=-1))return;e.clearGroups(),e.groups.push({start:0,count:e.index.count,materialIndex:0});const r={that:i,loader:n,meshBufferObject:a,pbfNodeInfo:s,treeNode:l,primitive:o,bufferGeometry:e,onTileContentReadyCallback:d,callback:t};i.createMeshMaterial(r)}))}}r.BimTileDracoParser=e}(),function(){let e=new THREE.Matrix4;class t extends r.BimTileMeshNodeParser{constructor(e){super(e)}loadMesh(e,t){let{that:i,loader:r,meshBufferObject:n,pbfNodeInfo:a,primitive:s,treeNode:o,onTileContentReadyCallback:l}=e;if((s.getAccVertices()<0||s.getAccIndices()<0)&&s.getAccArchive()<0)return void console.warn("invalid acc info");if(i._getMeshBuffer(r,o,n),!n.buffer)return;if(!i.checkIfTileAvailable(o))return void i._deleteNodeBuffer(n,o);let d=i._createBatchGeometry(i,r,n,a,s);if(!(n.material&&s.getMaterialId()>=-1))return;const h=i.materialManager.getLineMaterial(r,n,s);i.createMeshNode(r,n,a,o,d,h,l),t&&t()}loadLineInstanceMesh(e,t){let{that:i,loader:n,meshBufferObject:a,pbfNodeInfo:s,primitive:o,treeNode:l,onTileContentReadyCallback:d}=e;if(!i.checkIfTileAvailable(l))return void i._deleteNodeBuffer(a,l);let h=new THREE.InstancedBufferGeometry;const c=a.meshBlob,u=a.bufferData,p=i._getAccVertexArray(i,c,u,o),m=i._getAccIndicesArray(i,c,u,o);h.setAttribute("position",new THREE.BufferAttribute(p,3)),h.setIndex(new THREE.BufferAttribute(m,1));let f=new r.LineSegmentsEx(h,i.instanceWireframeMaterial);f.name=s.nodeIndexId,f.tileId=s.tileId,f.frustumCulled=!1,h.addGroup(0,h.index.count,0),l.wireFrameVisibilityOption=n.wireFrameVisibilityOption,f.isInstanceMeshNode=!0;const g=this.getContentMeshGroup(l);f.visible=n.isBorderLineVisible(),f.renderOrder=r.EnumRenderOrder.WireFrame,n.disableUserData&&(f.visible=!1),g.add(f),f.databagId=g.databagId,f.fileId=g.fileId,i.setInstanceLineAttributeBuffer(n,l,f),i.decreaseLoadedCount(l),this.checkIfTileParseFinish(l)&&(g.updateMatrixWorld(!0),d&&d(l),i._deleteNodeBuffer(a,l))}setInstanceLineAttributeBuffer(t,i,n){const a=t.getInstanceMeshNodeById(i.nodeIndexId),s=Object.keys(a);if(s.length<1)return void console.log("no instance mesh!");const o=i.instanceInfo.entityInfoArray;let l=n.geometry;const d=a[s[0]],h=d.mesh.matrixRoot,c=d.matrix,u=function(e){const t=r.MaterialUtil.DefaultWireframeColor,i=[];for(let r=0;r<e;++r)i.push(t.color.r,t.color.g,t.color.b,t.opacity);return new THREE.InstancedBufferAttribute(new Float32Array(i),4,!1,1)}(o.length);l.setAttribute("aColor",u);const p=function(t,i){const r={column0:[],column1:[],column2:[],column3:[]};for(let n=0;n<t.length;++n){let a=e.copy(t[n].entityMatrix);i&&(a=a.multiply(i));const s=a.elements;r.column0.push(s[0],s[1],s[2]),r.column1.push(s[4],s[5],s[6]),r.column2.push(s[8],s[9],s[10]),r.column3.push(s[12],s[13],s[14])}const n=[];for(let e=0;e<4;++e){const t=r["column"+e.toString()],i=new THREE.InstancedBufferAttribute(new Float32Array(t),3,!1,1);n.push(i)}return n}(o,h);for(let e=0;e<p.length;++e)l.setAttribute("mcol"+e.toString(),p[e]);const m=function(e,t){const i=e.length,n=new Array(i),a=(e[0].userData,e[0].userID);return r.TilesUtil.matchWireFrameVisibilityOption(a,t.wireFrameVisibilityOption)?n.fill(r.EnumInstanceState.NONE):n.fill(r.EnumInstanceState.HIDDEN),new THREE.InstancedBufferAttribute(new Float32Array(n),1,!1,1)}(o,i);l.setAttribute("vState",m),n.applyMatrix4(c),t.addInstanceLineNodeById(n.tileId,n)}loadLineMesh(e,t){let{that:i,loader:n,meshBufferObject:a,pbfNodeInfo:s,primitive:o,treeNode:l,onTileContentReadyCallback:d}=e;if(!i.checkIfTileAvailable(l))return void i._deleteNodeBuffer(a,l);let h=i._createBatchGeometry(i,n,a,s,o),c=new r.LineSegmentsEx(h,[i.wireframeMaterial]);c.applyMatrix4(s.matrix),c.name=s.nodeIndexId,c.tileId=s.tileId,c.indexGroups=s.indexInfos,n.addLineNodeById(c.tileId,s.nodeIndexId,c),s.userIdMapIndex&&n.addUserIdMapIndices(s.userIdMapIndex,c.name);const u=this.getContentMeshGroup(l);n.dealLineMeshVisible(c),u.add(c),c.databagId=u.databagId,c.fileId=u.fileId,c.renderOrder=r.EnumRenderOrder.WireFrame,i.decreaseLoadedCount(l),this.checkIfTileParseFinish(l)&&(u.updateMatrixWorld(!0),d&&d(l),i._deleteNodeBuffer(a,l))}_deleteNodeBuffer(e,t){e.bufferData=null,e.bufferBlob=null,e.blobHeader=null,e.meshBlob=null,e.buffer=null;var i=this.getFullBuffer(t);for(var r in i)i[r].content=null}_createBatchGeometry(e,t,i,r,n){let a=new THREE.BufferGeometry;const s=i.meshBlob,o=i.bufferData,l=e._getAccVertexArray(e,s,o,n),d=e._getAccIndicesArray(e,s,o,n),h=e._getAccInfo(s,n.getAccIndices()),c=e._getAccInfo(s,n.getAccVertices());return r.vAccInfoStart=c.offset,r.iAccInfoStart=h.offset,r.iAccInfoCount=h.count,r=Object.assign(r,e._getSubNodeInfo(e,t,a,i,r,n)),a.setAttribute("position",new THREE.BufferAttribute(l,3)),a.setIndex(new THREE.BufferAttribute(d,1)),a}loadLineGeometryBuffer(e,t,i,r,n,a,s,o){if(!e.checkIfTileAvailable(a))return void e._deleteNodeBuffer(i,a);const l=e._createBatchGeometry(e,t,i,r,n);a.geometry=l,a.indexGroups=r.indexInfos,a.matrix.copy(r.matrix),e._deleteNodeBuffer(i,a),s&&s()}getContentMeshGroup(e){return e.content.meshes}getFullBuffer(e){return e.lineBuffer}checkIfTileAvailable(e){return e.checkIfProcessingTileAvailable()}decreaseLoadedCount(e){e.loadedLineCount--}getLoadedCount(e){return e.loadedLineCount}}r.BimTileLineParser=t}(),function(){class e extends r.BimTileLineParser{constructor(e){super(e),this.defaultWireframeColor=r.MaterialUtil.DefaultWireframeColor,this.wireframeMaterial=new r.MeshBasicClipMaterial(this.defaultWireframeColor),this.wireframeMaterial.transparent=!0,this.instanceWireframeMaterial=r.MaterialUtil.createInstanceMaterial(r.MaterialUtil.getMaterialParameters(this.wireframeMaterial)),this.instanceWireframeMaterial.transparent=!0}destroy(){this.defaultWireframeColor=void 0,this.wireframeMaterial=void 0,this.instanceWireframeMaterial=void 0,super.destroy()}getContentMeshGroup(e){return e._content._outlineContent.outlineMeshes}getFullBuffer(e){return e.outlineBuffer}checkIfTileAvailable(e){return e.checkIfTileAvailable()}decreaseLoadedCount(e){e.loadedOutlineCount--}getLoadedCount(e){return e.loadedOutlineCount}setWireframeColor(e,t){this.wireframeMaterial.color=e,this.wireframeMaterial.opacity=t,this.wireframeMaterial.transparent=1!=t,this.instanceWireframeMaterial.color=e,this.instanceWireframeMaterial.opacity=t,this.instanceWireframeMaterial.transparent=1!=t}getWireframeColor(){let e=this.wireframeMaterial.color.clone();return e.opacity=this.wireframeMaterial.opacity,e}restoreWireframeColor(){const e=this.defaultWireframeColor;this.setWireframeColor(e.color,e.opacity)}}r.BimTileOutlineParser=e}(),r.BimTileBatchBlobParser=class{constructor(e){this.options=Object.assign({},e),this.taskRunner=new r.TaskRunner,this.blockType=null}destroy(){this.taskRunner=null,this.blockType=null,this.options=null}parseBlobs(e,t,i){this.computeNodeCount(t,e.batchMergeEnabled);const r=this.blockType,n=this.getFullBuffer(t);for(let o in n){if(null===this.getFullBuffer(t))return;var a=this.getBufferByIdx(t,o);if(a.type==r){var s=a.content;s&&this.parseBlob(e,s,t,o,i)}}}parseBlob(e,t,i,n,a){if(!t)return;let s={};s.contentIndex=this.getContentIndex(i),s.meshBlob=t;const o=t.getScenesList(),l=o.length;if(0===l)return;const d=t.getBlobHeader(),h=d.getBufferBlockId(),c=this.getBufferBlock(e,i,h);if(!c)return;const u=c.getBuffer();s.buffer=c,s.bufferData=u;const p=this.getTileId(i,d),m=t.getNodesList();s.bufferId=`${p}_${n}`;for(let t=0;t<l;++t){const l=o[t].getNodesList(),d=l.length;for(let t=0;t<d;++t){const o=m[l[t]];let d={};d.tileId=p,d.nodeIndex=l[t],d.nodeIndexId=`${i.contentId}_${n}`,d.lineTileId=`${p}_${d.nodeIndex}`;let h=new THREE.Matrix4;if(16==o.getMatrixList().length){h.fromArray(o.getMatrixList());let e=o.getTranslationList();r.Utils.isDefined(e)&&3===e.length&&h.setPosition(e[0],e[1],e[2])}d.matrix=h.multiply(i.matrix),this.parseNode(e,s,o,d,i,a)}}}parseNode(e,t,i,r,n,a){const s=t.meshBlob,o=i.getPrimitivesList(),l=o.length,d=i.getNodeType(),h=i.getBboxList();let c=new THREE.Vector2(0,0),u=new THREE.Vector2(0,0);if(h.length>=10&&(c.x=(h[6]+h[7])/2,c.y=(h[8]+h[9])/2,u.x=(h[7]-h[6])/2,u.y=(h[9]-h[8])/2),d!=proto.bimtile_pbf.Node.NodeType.NT_BATCHED_SUB_NODE)for(let i=0;i<l;i++){const l=o[i],d=s.getPrimitivesList()[l];d.uvCenter=c,d.uvHalfExtent=u;let h=this.chooseParser(d,d.getMode());const p=this.getLoadCallback(n,h);r.mode=d.getMode();const m={that:h,loader:e,meshBufferObject:t,pbfNodeInfo:r,primitive:d,treeNode:n,onTileContentReadyCallback:a};this.taskRunner.runTask(p,m,(function(){}))}}getLoadCallback(e,t){}chooseParser(e,t){}getBufferBlock(e,t,i){}getTileId(e){}getContentIndex(e){return e.contentIndex}isBufferDeleted(e){}computeNodeCount(e){}getFullBuffer(e){}getBufferByIdx(e,t){}},function(){class e extends r.BimTileBatchBlobParser{constructor(e){super(e),this.blockType=proto.BlockHeader.BlockType.BT_MESH}destroy(){super.destroy(),this.bimtileMeshNodeParser&&this.bimtileMeshNodeParser.destroy(),this.bimtileMeshNodeParser=void 0,this.bimtileDracoParser&&this.bimtileDracoParser.destroy(),this.bimtileDracoParser=void 0,this.bimtileLineParser&&this.bimtileLineParser.destroy(),this.bimtileLineParser=void 0,this.bimtilePointParser&&this.bimtilePointParser.destroy(),this.bimtilePointParser=void 0}getLoadCallback(e,t){return t.loadMesh}chooseParser(e,t){switch(t){case proto.bimtile_pbf.Primitive.PrimitiveMode.PM_TRIANGLES:return e.getAccArchive()>=0?this.getDracoParser():this.getMeshParser();case proto.bimtile_pbf.Primitive.PrimitiveMode.PM_LINES:return this.getLineParser();case proto.bimtile_pbf.Primitive.PrimitiveMode.PM_POINTS:return this.getPointParser()}}getBufferBlock(e,t,i){return e.tileReader.getBuffer(t,i,proto.BlockHeader.BlockType.BT_BUFFER)}getContentIndex(e){return e.contentIndex}getTileId(e,t){return t.getTileId()}getDracoParser(){return this.bimtileDracoParser||(this.bimtileDracoParser=new r.BimTileDracoParser(this.options)),this.bimtileDracoParser}getMeshParser(){return this.bimtileMeshNodeParser||(this.bimtileMeshNodeParser=new r.BimTileMeshNodeParser(this.options)),this.bimtileMeshNodeParser}getLineParser(){return this.bimtileLineParser||(this.bimtileLineParser=new r.BimTileLineParser(this.options)),this.bimtileLineParser}getPointParser(){return this.bimtilePointParser||(this.bimtilePointParser=new r.BimTilePointParser(this.options)),this.bimtilePointParser}computeNodeCount(e,t){e.computeMeshNodeCount(t)}getFullBuffer(e){return e.buffer}getBufferByIdx(e,t){return e.getBuffer(t)}}r.BimTileMeshBlobParser=e}(),function(){class e extends r.BimTileBatchBlobParser{constructor(e){super(e),this.blockType=proto.BlockHeader.BlockType.BT_LINE}destroy(){this.bimtileLineParser&&this.bimtileLineParser.destroy(),super.destroy()}getLoadCallback(e,t){return e.contentTypeBufferOnly?t.loadLineGeometryBuffer:!0===e.contentTypeInstance?t.loadLineInstanceMesh:t.loadLineMesh}chooseParser(){return this.getLineParser()}getTileId(e){return`line_${e.contentId}`}getBufferBlock(e,t,i){return e.tileReader.getLineBuffer(t,i,proto.BlockHeader.BlockType.BT_BUFFER)}getContentIndex(e){return e.contentIndex}computeNodeCount(e){e.computeLineNodeCount()}getFullBuffer(e){return e.lineBuffer}getBufferByIdx(e,t){return e.getLineBuffer(t)}}r.BimTileLineBlobParser=e}(),function(){class e extends r.BimTileBatchBlobParser{constructor(e){super(e),this.blockType=proto.BlockHeader.BlockType.BT_POINT}destroy(){this.bimTilePointParser&&this.bimTilePointParser.destroy(),super.destroy()}parseBlob(e,t,i,r,n){if(!t)return;var a={};if(a.pointBlob=t,0===t.getPointsList().length)return;var s=t.getBlobHeader();(s.getTranslationList().length>0||s.getMatrixList().length>0)&&console.log("Translation"),a.blobHeader=s;var o=s.getBufferBlockId(),l=this.getBufferBlock(e,i,o);if(a.bufferBlob=l,!l)return;var d=l.getBuffer();a.bufferData=d;var h=l.getBlobHeader(),c=h.getBufferTypeList(),u=h.getBufferSizeList(),p=h.getBufferOffsetList(),m=p.length;this.setLoadedCount(i,m);for(var f=0;f<m;++f){var g=p[f],v=u[f],y=d.slice(g,g+v).buffer;switch(c[f]){case proto.BufferBlobHeader.BufferType.BT_UNKNOW:const t={that:M,loader:e,pointBufferObject:a,subPointBuffer:y,treeNode:i,onTileContentReadyCallback:n};this.taskRunner.runTask(this.loadDracoPoint,t,(function(){}));break;case proto.BufferBlobHeader.BufferType.BT_VERTEX:a.vertexArray=new Float32Array(y);break;case proto.BufferBlobHeader.BufferType.BT_COLOR:const r=new Uint8Array(y),s=a.blobHeader.getAttributeDataList()[f];let o=[];if(s==proto.PointBlobHeader.AttributeData.AD_COLOR_RGBA_I)r.forEach((e=>o.push(e/255)));else if(s==proto.PointBlobHeader.AttributeData.AD_COLOR_565_S)for(let e=0;e<r.length;e+=2){const t=r[e+0],i=r[e+1],n=(t>>3)/255,a=((3&t)<<3&i>>5)/255,s=(31&i)/255,l=1;o.push(n,a,s,l)}a.colorArray=new Float32Array(o);break;case proto.BufferBlobHeader.BufferType.BT_NORMAL:a.normalArray=new Float32Array(y)}}if(!a.vertexArray)return;const M=this.chooseParser(),E=this.getLoadCallback(i,M),b={that:M,loader:e,pointBufferObject:a,treeNode:i,onTileContentReadyCallback:n};this.taskRunner.runTask(E,b,(function(){}))}getPointParser(){return this.bimtilePointParser||(this.bimtilePointParser=new r.BimTilePointParser(this.options)),this.bimtilePointParser}getLoadCallback(e,t){return t.loadBufferPointMesh}chooseParser(){return this.getPointParser()}computeNodeCount(e){e.computePointNodeCount()}getBufferBlock(e,t,i){return e.tileReader.getBuffer(t,i,proto.BlockHeader.BlockType.BT_BUFFER)}getFullBuffer(e){return e.buffer}getBufferByIdx(e,t){return e.getBuffer(t)}setLoadedCount(e,t){e.loadedCount=t}}r.BimTilePointBlobParser=e}(),function(){class e extends r.BimTileLineBlobParser{constructor(e){super(e),this.blockType=proto.BlockHeader.BlockType.BT_LINE,this.lineParser=new r.BimTileOutlineParser(e)}destroy(){this.lineParser.destroy(),this.lineParser=void 0,super.destroy()}getLineParser(){return this.lineParser}getTileId(e){return`outline_${e.contentId}`}getBufferBlock(e,t,i){return e.tileReader.getOutlineBuffer(t,i,proto.BlockHeader.BlockType.BT_BUFFER)}getContentIndex(e){return e.getOutlineContentUrl()}computeNodeCount(e){e.computeOutlineNodeCount()}getFullBuffer(e){return e.outlineBuffer}getBufferByIdx(e,t){return e.getOutlineBuffer(t)}}r.BimTileOutlineBlobParser=e}(),r.BimTileWireframeManager=class{constructor(e){this.loader=e,this.reader=e.reader,this.selectedMaterial=new r.MeshBasicClipMaterial({color:1170103,opacity:1,transparent:!1})}destroy(){}travelLineMesh(e,t,i){}updatePickingMeshes(){}},r.BimTileBatchedMeshManager=class{constructor(e){this.loader=e,this.reader=e.reader,this.batchMeshIdNodeMap={},this.noUserDataMeshNodeInfoMap={}}destroy(){this.batchMeshIdNodeMap=null,this.noUserDataMeshNodeInfoMap=null}addMeshIdMap(e,t){this.batchMeshIdNodeMap[e]||(this.batchMeshIdNodeMap[e]=t)}getMeshNodeById(e){return this.batchMeshIdNodeMap[e]}disposeMeshNodeById(e){this.batchMeshIdNodeMap[e]=null}addNoUserDataMeshNodeInfo(e,t,i){void 0===this.noUserDataMeshNodeInfoMap[e]&&(this.noUserDataMeshNodeInfoMap[e]={}),this.noUserDataMeshNodeInfoMap[e][t]=i}patchMeshNodeInfo(e,t,i){let r=this.loader.getDescriptor().getAllNodeInfos()[e];if(!r)return;const n=r.length;for(let e=0;e<n;++e){const n=r[e];n.nodeId==t&&(n.parent=i.parent,n.materialId=i.materialId,n.matrix=i.matrix,n.explodeMatrix&&(n.matrix=i.matrix.clone(),n.matrix.multiplyMatrices(n.explodeMatrix,n.matrix)),n.type=i.type,n.cellId=null)}}recoverNodeInfo(){for(const e in this.noUserDataMeshNodeInfoMap){const t=this.noUserDataMeshNodeInfoMap[e];for(const i in t)this.patchMeshNodeInfo(e,i,t[i])}this.noUserDataMeshNodeInfoMap=null}getGeometryBuffersByNodeInfo(e,t,i,r){const n=this.getMeshNodeById(e);if(!n||!1===n.visible)return;const a=n.geometry,s=a.getIndex().array,o=a.getAttribute("position").array,l=a.getAttribute("uv"),d=l?l.array:null,h=a.getAttribute("color"),c=h?h.array:null,u=a.getAttribute("cNormal"),p=u?u.array:null,m=n.indexGroups[t];for(let t=0,a=m.length;t<a;++t){const a=m[t];let l=a.indexStart,h=a.indexStart+a.indexCount;const u=s.slice(l,h);let f,g,v=null;d&&(l=a.positionStart/3*2,h=l+a.positionCount/3*2,v=d.slice(l,h)),c&&(l=a.positionStart/3*4,h=l+a.positionCount/3*4,f=c.slice(l,h)),p&&(l=a.cNormalStart,h=l+a.cNormalCount,g=p.slice(l,h)),l=a.positionStart,h=a.positionStart+a.positionCount;const y=o.slice(l,h);l/=3,u.forEach((function(e,t,i){i[t]-=l})),r.push({isLines:!1,databagId:i,nodeId:e,position:y,index:u,uv:v,matrix:n.matrix,color:f,cNormal:g})}}updatePickingMeshes(e,t,i,n,a){const s=e.parent,o=this.getMeshNodeById(s);if(!o||!o.indexGroups||!1===o.visible||null!=o.parent.parent&&0==o.parent.parent.visible)return;const l=o.geometry,d=o.indexGroups;let h=new THREE.BufferGeometry;h.setAttribute("position",l.getAttribute("position"));let c=l.getAttribute("uv");a&&c&&h.setAttribute("uv",c),h.setIndex(l.getIndex());let u="LineSegmentsEx"===o.type?new THREE.LineSegments(h,r.MaterialUtil.DefaultMaterial):new THREE.Mesh(h,r.MaterialUtil.DefaultMaterial);u.name=o.name,u.frustumCulled=!1,u.renderOrder=r.EnumRenderOrder.Component,u._indicesGroup=d,u.material=i?[i]:o.material,u.matrix.copy(o.matrix),u.matrixAutoUpdate=!1;const p=d[t];let m={};i||l.groups.map((e=>{m[e.start]=e.materialIndex}));for(let e=0,t=p.length;e<t;++e){const t=p[e];let r=0;i||(r=m[t.indexStart]),u.geometry.addGroup(t.indexStart,t.indexCount,r),n.add(u)}}calculateClippingContours(e,t,i,r,n,a,s,o){const l=a.parent,d=this.getMeshNodeById(l);if(!d||!d.indexGroups||"MeshEx"!==d.type||!1===d.visible||!1===d.parent.visible)return;const h=d.indexGroups,c=d.matrix,u=h[r];for(let r=0,l=u.length;r<l;++r){const l=u[r];if(l.meshId!==a.nodeId)continue;let h=[];if(d.getIntersectionContours(t,l,h),0===h.length)return;let p=[];if(h.map((e=>{let t=[];e.map((e=>{e.applyMatrix4(c).applyMatrix4(s),i.containsPoint(e)&&t.push(e)})),t.length>0&&p.push(t)})),0===p.length)return;const m=d.material[0].color,f={red:parseInt(255*m.r),green:parseInt(255*m.g),blue:parseInt(255*m.b)};void 0===o[e][n]?o[e][n]={clippingContours:[p],colors:[f]}:(o[e][n].clippingContours.push(p),o[e][n].colors.push(f))}}changeAllMaterials(e){for(let t in this.batchMeshIdNodeMap){let i=this.batchMeshIdNodeMap[t].material;if(!i)return;for(let t=0;t<i.length;t++){if(!i[t])continue;let r=i[t].name;e[r]&&(i[t]=e[r])}}}},r.BimTileInstancedMeshManager=class{constructor(e){this.loader=e,this.reader=e.tileReader,this.instanceMeshIdNodeMap={},this.instanceInfoMap={},this.noUserDataInstanceNodeInfoMap={},this.overrideMaterialMap={}}destroy(){this.instanceMeshNodeMap=null,this.InstanceInfoMap=null,this.noUserDataInstanceNodeInfoMap=null,this.overrideMaterialMap=null}addInstanceInfo(e,t){this.instanceInfoMap[e]||(this.instanceInfoMap[e]=t)}getInstanceInfoById(e){return this.instanceInfoMap[e]}addInstanceMeshIdMap(e,t,i,r){this.instanceMeshIdNodeMap[e]&&this.instanceMeshIdNodeMap[e][t]||(void 0===this.instanceMeshIdNodeMap[e]&&(this.instanceMeshIdNodeMap[e]={},this.instanceMeshIdNodeMap[e][t]={}),void 0===this.instanceMeshIdNodeMap[e][t]&&(this.instanceMeshIdNodeMap[e][t]={}),this.instanceMeshIdNodeMap[e][t].mesh=i,this.instanceMeshIdNodeMap[e][t].matrix=r)}getInstanceMeshNodeById(e){return this.instanceMeshIdNodeMap[e]}disposeInstanceMeshNodeById(e){this.instanceMeshIdNodeMap[e]=null,delete this.instanceMeshIdNodeMap[e]}addNoUserDataInstanceNodeInfo(e,t,i){if(void 0===this.noUserDataInstanceNodeInfoMap[e])return this.noUserDataInstanceNodeInfoMap[e]={},void(this.noUserDataInstanceNodeInfoMap[e][t]=[i]);void 0!==this.noUserDataInstanceNodeInfoMap[e][t]?this.noUserDataInstanceNodeInfoMap[e][t].push(i):this.noUserDataInstanceNodeInfoMap[e][t]=[i]}recoverNodeInfo(){for(const e in this.noUserDataInstanceNodeInfoMap){const t=this.noUserDataInstanceNodeInfoMap[e];for(const i in t)t[i].map((t=>{this.patchInstanceNodeInfo(e,i,t)}))}this.noUserDataInstanceNodeInfoMap=null}patchInstanceNodeInfo(e,t,i){let r=this.loader.getDescriptor().getAllNodeInfos()[e];if(!r)return;const n=r.length;for(let e=0;e<n;++e){const n=r[e];if(n.nodeId===i.bufferId&&n.index===i.instanceIndex){n.geometryId=t,n.parent=t,n.matrix=i.entityMatrix,n.explodeMatrix&&(n.matrix=i.entityMatrix.clone(),n.matrix.multiplyMatrices(n.explodeMatrix,n.matrix)),n.type=i.type,n.cellId=null;break}}}getGeometryBuffersByNodeInfo(e,t,i,n){const a=this.getInstanceMeshNodeById(e);if(a)for(const s in a){const o=a[s].matrix,l=a[s].mesh;if(r.TilesUtil.isInstanceNodeInVisible(l))continue;let d=t.matrix.clone();d=d.multiply(o);const h=l.geometry,c=h.getAttribute("uv"),u=r.ModelView.BaseDescriptor.isLineNode(t);n.push({isLines:u,databagId:i,nodeId:e,position:h.getAttribute("position").array,index:h.getIndex().array,matrix:d,uv:c?c.array:null})}}_createInstanceMaterial(e,t,i){const n=e.getAttribute("aColor").array,a=e.getAttribute("vState").array,s=e.getAttribute("vState2").array,o=n[4*t],l=n[4*t+1],d=n[4*t+2];let h=Math.floor(100*n[4*t+3])/100;const c=new THREE.Color(o,l,d);0!==a[t]&&0!==s[t]||(h=i);let u=!1;h<1&&(u=!0);const p={color:c.getHex(),opacity:h,transparent:u},m=`${p.color}_${h}`;let f=this.overrideMaterialMap[m];return f||(f=r.MaterialUtil.createStandardMaterial(p),this.overrideMaterialMap[m]=f,f)}updatePickingMeshes(e,t,i,n,a,s){const o=this.getInstanceMeshNodeById(e);if(o)for(const e in o){const a=o[e].matrix,l=o[e].mesh;if(r.TilesUtil.isInstanceNodeInVisible(l))continue;const d=l.geometry;let h=new THREE.BufferGeometry;h.setAttribute("position",d.getAttribute("position")),h.setIndex(d.getIndex());let c=new THREE.Mesh(h,t||this._createInstanceMaterial(d,s,l.material[0].opacity));c.name=l.name,c.frustumCulled=!1,c.matrix.copy(a).multiply(i),c.matrixAutoUpdate=!1,n.add(c)}}calculateClippingContours(e,t,i,n,a,s,o,l){const d=this.getInstanceMeshNodeById(s.nodeId);if(d)for(const n in d){const h=d[n].matrix,c=d[n].mesh;if(r.TilesUtil.isNodeInVisible(c))continue;let u=s.matrix.clone();u=u.multiply(h);let p=[],m={matrix:u};c.getIntersectionContours(t,m,p,!0);let f=[];p.map((e=>{let t=[];e.map((e=>{e.applyMatrix4(o),i.containsPoint(e)&&t.push(e)})),t.length>0&&f.push(t)}));const g=c.material[0].color,v={red:parseInt(255*g.r),green:parseInt(255*g.g),blue:parseInt(255*g.b)};if(0===f.length)return;void 0===l[e][a]?l[e][a]={clippingContours:[f],colors:[v]}:(l[e][a].clippingContours.push(f),l[e][a].colors.push(v))}}updateInstanceClipping(e){var t=e?r.EnumInstanceState.CLIPPING:r.EnumInstanceState.NONE;for(var i in this.instanceMeshIdNodeMap){var n=this.instanceMeshIdNodeMap[i];for(var a in n){var s=n[a].mesh.geometry;const e=s.getAttribute("vClipping").array;e&&(e.fill(t),s.getAttribute("vClipping").needsUpdate=!0)}}}updatePickingMeshesByIds(e){let t={};const{mapNodeInfoByUserId:i,instanceMeshGroup:n,selectedIds:a}=e,s=a.length,o=this.loader.filter;for(let e=0;e<s;++e){const r=this.reader.getIndexByUserId(a[e]),n=i[r];if(!n||!o.isPickable(r))continue;const s=n.length;for(let e=0;e<s;++e){const i=n[e];if(!1===i.instanceOrNot)continue;const r=i.parent;t[r]||(t[r]={}),t[r][i.index]=!0}}for(const e in t){const i=this.getInstanceMeshNodeById(e);if(!i)continue;let a=(e,t)=>{const i=e.length;for(let r=0;r<i;++r)!0!==t[r]&&(e[r]=-1)};for(const s in i){const o=i[s].matrix,l=i[s].mesh;if(r.TilesUtil.isInstanceNodeInVisible(l))continue;let d=l.geometry.clone();const h=d.getAttribute("vState").array,c=d.getAttribute("vState2").array;a(h,t[e]),a(c,t[e]);let u=new THREE.Mesh(d,l.material);u.name=l.name,u.frustumCulled=!1,u.matrix.copy(o),u.matrixAutoUpdate=!1,n.add(u)}}}changeAllMaterials(e){for(let t in this.instanceMeshIdNodeMap){let i=this.instanceMeshIdNodeMap[t];for(let t in i){let r=i[t].mesh.material;if(!r)return;for(let t=0;t<r.length;t++){if(!r[t])continue;let i=r[t].name;e[i]&&(r[t]=e[i])}}}}},function(){class e extends r.BimTileWireframeManager{constructor(e){super(e),this.batchedMeshIdNodeMap={}}destroy(){super.destroy(),this.batchedMeshIdNodeMap=null}addLineNodeById(e,t,i){this.batchedMeshIdNodeMap[e]||(this.batchedMeshIdNodeMap[e]={}),this.batchedMeshIdNodeMap[e][t]=i}getLineNodeById(e,t){return this.batchedMeshIdNodeMap[e][t]}disposeLineNodeById(e){this.batchedMeshIdNodeMap[e]=null,delete this.batchedMeshIdNodeMap[e]}travelLineMesh(e,t,i){const n=this.batchedMeshIdNodeMap[e];if(n)for(const e in n){const a=n[e];a.indexGroups[t]&&(r.TilesUtil.isNodeInVisible(a)||i&&i(a))}}updatePickingMeshes(e,t,i,n){this.travelLineMesh(e,t,(e=>{const a=e.geometry,s=e.indexGroups;let o=new THREE.BufferGeometry;o.setAttribute("position",a.getAttribute("position")),o.setIndex(a.getIndex());let l=new THREE.LineSegments(o,this.selectedMaterial);l.name=e.name,l.frustumCulled=!1,l.renderOrder=r.EnumRenderOrder.WireFrame,l._indicesGroup=s,l.material=[i],l.matrix.copy(e.matrix),l.matrixAutoUpdate=!1;const d=s[t];for(let e=0,t=d.length;e<t;++e){const t=d[e];l.geometry.addGroup(t.indexStart,t.indexCount,0),n.add(l)}}))}enableWireFrame(e){for(const t in this.batchedMeshIdNodeMap){const i=this.batchedMeshIdNodeMap[t];for(const t in i)i[t].visible=e}}dealLineMeshVisible(e){if(e.visible=this.loader.isBorderLineVisible(),!0===this.loader.wireFrameVisibilityOption)return;const t=this.loader.getDescriptor().getAllNodeInfos(),i=e.indexGroups;let n={};for(const e in i){t[e][0].userData;r.TilesUtil.matchWireFrameVisibilityOption(e,this.loader.wireFrameVisibilityOption)&&(n[e]=i[e])}e.geometry.clearGroups();const a=r.TilesUtil.nodeIndexGroupsSort(n),s=a.length;if(s<1)return;let o=a[0].indexGroup.indexStart,l=a[0].indexGroup.indexCount;for(let t=1;t<s;++t){const i=a[t].indexGroup;i.indexStart===a[t-1].indexGroup.indexStart+a[t-1].indexGroup.indexCount?l+=i.indexCount:(e.geometry.addGroup(o,l,0),o=i.indexStart,l=i.indexCount)}e.geometry.addGroup(o,l,0)}recoverLineNode(){for(const e in this.batchedMeshIdNodeMap){const t=this.batchedMeshIdNodeMap[e];for(const e in t){const i=t[e];this.dealLineMeshVisible(i)}}}}r.BimTileBatchedWireframeManager=e}(),function(){class e extends r.BimTileWireframeManager{constructor(e){super(e),this.instanceMeshIdNodeMap={}}destroy(){super.destroy(),this.instanceMeshIdNodeMap=null}addInstanceLineNodeById(e,t){this.instanceMeshIdNodeMap[e]=t}getInstanceLineNodeById(e){return this.instanceMeshIdNodeMap[e]}disposeInstanceLineNodeById(e){this.instanceMeshIdNodeMap[e]=null,delete this.instanceMeshIdNodeMap[e]}travelLineMesh(e,t,i){const n=this.instanceMeshIdNodeMap[e];n&&(r.TilesUtil.isInstanceNodeInVisible(n)||i&&i(n))}updatePickingMeshes(e,t,i,n,a){this.travelLineMesh(e,t,(e=>{const t=e.geometry;let i=new THREE.BufferGeometry;i.setAttribute("position",t.getAttribute("position")),i.setIndex(t.getIndex());let s=new THREE.LineSegments(i,this.selectedMaterial);s.name=e.name,s.frustumCulled=!1,s.renderOrder=r.EnumRenderOrder.WireFrame,s.matrix.copy(e.matrix).multiply(n),s.matrixAutoUpdate=!1,a.add(s)}))}enableWireFrame(e){for(const t in this.instanceMeshIdNodeMap)this.instanceMeshIdNodeMap[t].visible=e}recoverLineNode(){for(const e in this.instanceMeshIdNodeMap){const t=this.instanceMeshIdNodeMap[e],i=t.name,n=this.loader.getInstanceInfoById(i);if(t.visible=this.loader.isBorderLineVisible(),void 0===t.geometry)continue;const a=n.length,s=new Array(a),o=n[0].userDataID,l=n[0].userID;this.loader.tileReader.getUserDataByIndex(o);r.TilesUtil.matchWireFrameVisibilityOption(l,this.loader.wireFrameVisibilityOption)?s.fill(r.EnumInstanceState.NONE):s.fill(r.EnumInstanceState.HIDDEN);const d=new THREE.InstancedBufferAttribute(new Float32Array(s),1,!1,1);t.geometry.setAttribute("vState",d)}}}r.BimTileInstancedWireframeManager=e}(),function(){class e{constructor(e){this.materialMap={},this.globalMaterial=new THREE.MeshBasicMaterial({color:9143938}),this.settingMaterialPara={},this.materialsOpacity=null,this.viewer=e.viewer,this.mapExcavation=null,this.isUseColorWithoutLight=e.isUseColorWithoutLight,this.IBLParams={A:!0,B:!0,C:!0,D:!0,E:!0,F:!0,IBLMaps:!0,metalness:!0,roughness:!0,scale:!0,iblFactor:!0}}destroy(){this.materialMap=null,this.settingMaterialPara={},this.mapExcavation=null}getMaterial(t,i,n,a){const s=t.filter.model,o=n.getMaterialId(),l=null!=i.renderInstance&&!0===i.renderInstance,d=e.generateMaterialName(i,o,l),h=this.getMaterialByName(d);if(r.Utils.isDefined(h))return void a(h);if(-1===o&&!l){const e=r.MaterialUtil.getDefaultStandardMaterial();return r.MaterialUtil.setCompressParm(e,n),this.dealMaterialDefines(e),e.name=d,this.materialMap[d]=e,void a(e)}if(-1===o&&l){const e=r.MaterialUtil.getDefaultInstanceMaterial();r.MaterialUtil.setCompressParm(e,n),this.dealMaterialDefines(e),e.name=d,this.materialMap[d]=e;let t=e.clone();t.transparent=!0,t.defines.INSTANCE_STATE_SECONDARY="";const i=d+"_second";return this.materialMap[i]=t,void a(e)}const c=i.bufferData,u=i.material,p=u.getMaterialsList()[o],m=this._createMaterial(d,p,l,n);if(m.srcOpacity=m.opacity,null!=this.materialsOpacity&&(m.opacity=m.srcOpacity*this.materialsOpacity,m.transparent=!(m.opacity>1-r.TilesUtil.TWO_ACCURACY)),s.localClippingMode&&(m.clippingPlanes=s.localClippingPlanes,m.innerClipping=s.innerClippingMode,m.orthoViewProjMatrix.copy(s.innerClippingMatrix)),this.materialMap[d]=m,l){const e=r.MaterialUtil.getMaterialParameters(m);let t=r.MaterialUtil.createInstanceMaterial(e,!0);!0===m.transparent?t.transparent=!1:t.transparent=!0,t.defines.INSTANCE_STATE_SECONDARY="",this.dealMaterialDefines(t),r.MaterialUtil.setCompressParm(t,n);const i=d+"_second";this.materialMap[i]=t}r.Utils.isDefined(n.uvCenter)&&(m.uvCenter=n.uvCenter,m.uvHalfExtent=n.uvHalfExtent),r.MaterialUtil.setCompressParm(m,n);const f={currentTextureParm:p.getTexturesList(),totalTextureParm:u.getTexturesList(),totalImageParm:u.getImagesList(),meshBufferData:c};this._createTextureForMaterial(t.rootUrl,m,f).then((e=>{a(e)}))}getLineMaterial(e,t,i){const r=i.getMaterialId();const n=`${-1===t.materialBlockId?t.materialBlockId:`${t.bufferId}+${t.materialBlockId}`}_line_${r}`,a=this.materialMap[n];if(a)return a._referenceCount++,a;t.bufferData;const s=t.material.getMaterialsList()[r];return this._createLineMaterial(e,n,s)}dealMaterialDefines(e,t){!0===this.isUseColorWithoutLight&&(e.defines.USE_COLORWITHOUTLIGHT=""),this.mapExcavation&&e.updateExcavation&&(e.updateExcavation(this.mapExcavation),e.updateSide({isExcavation:this.mapExcavation&&this.mapExcavation.isExcavation}))}dealMaterialParm(e){e.transparent=!(e.opacity>1-r.TilesUtil.TWO_ACCURACY),e.side=0===e.doubleSide?THREE.FrontSide:THREE.DoubleSide,e.originMetalness=e.metalness,e.originRoughness=e.roughness,e.receiveIBL=0!=e.receiveIbl,e.light=!0!==e.hasLightMap,delete e.hasLightMap}_createLineMaterial(e,t,i){const n=i.toObject(),a=new THREE.LineBasicMaterial({linewidth:1});a._imageByteSize=0,a.srcOpacity=a.opacity,null!=this.materialsOpacity&&(a.opacity=a.srcOpacity*this.materialsOpacity,a.transparent=!(a.opacity>1-r.TilesUtil.TWO_ACCURACY));const s=e.filter.model;return s.localClippingMode&&(a.clippingPlanes=s.localClippingPlanes,a.innerClipping=s.innerClippingMode,a.orthoViewProjMatrix.copy(s.innerClippingMatrix)),a.color.setHex(n.color),a.needsUpdate=!0,this.materialMap[t]=a,a._referenceCount=1,a}_createMaterial(e,t,i,n){const a=t.toObject();a.hasLightMap=n.hasLightMap,a.vertexColors=!!r.Utils.isDefined(n.vertexColors)&&n.vertexColors,this.dealMaterialParm(a);let s=i?r.MaterialUtil.createInstanceMaterial(a,!0,a.receiveIBL&&r.GlobalData.IBL):r.MaterialUtil.createStandardMaterial(a,a.receiveIBL&&r.GlobalData.IBL);s.name=e,this.dealMaterialDefines(s);for(let e in this.settingMaterialPara)this._isIBLParams(e)&&!a.receiveIBL||s.hasOwnProperty(e)&&(s[e]=this.settingMaterialPara[e],void 0!==s.refreshUniforms&&s.refreshUniforms());return s}_isIBLParams(e){return this.IBLParams[e]}_createTextureForMaterial(e,t,i){i=r.Utils.defaultValue(i,{});return new Promise(((n,a)=>{const s=i.currentTextureParm;r.Utils.isDefined(s)||n();const o=i.totalTextureParm,l=i.totalImageParm,d=[];for(let n=0;n<s.length;++n){const a=new Promise(((a,d)=>{const h=s[n],c=o[h];(!r.Utils.isDefined(c)||c.getImage()<0)&&a();const u=l[c.getImage()],p=c.getAlpha()>0?proto.bimtile_pbf.Texture.TextureType.TT_ALPHA:c.getType(),m=u.getUrl(),f=u.getType();let g=c.getName();const v=JSON.stringify(c.toObject());if(m){const i=`${e}${m}`;g=g||r.Utils.getEncodedString(i+v),this.viewer.TextureManager.getTextureFromURL(i,g,{textureParm:c,imageType:f}).then((e=>{this._setTexture(p,t,e),a()}))}else if(u.getBufferId()>=0){const s=this._getImageBuffer(i.meshBufferData,u);g=g||r.Utils.getEncodedString(`${e}${t.name}_${n}_texture_${v}`),this.viewer.TextureManager.getTextureFromBuffer(s,g,{textureParm:c,imageType:f}).then((e=>{this._setTexture(p,t,e),a()})).catch((()=>{d()}))}else a()}));d.push(a)}Promise.all(d).then((()=>{n(t)}))}))}_setTexture(e,t,i){const n=r.MaterialUtil.getImageByteSize(i.image);switch(t._imageByteSize+=n,e){case proto.bimtile_pbf.Texture.TextureType.TT_DIFFUSE:t.map=i;break;case proto.bimtile_pbf.Texture.TextureType.TT_SPECULAR:t.specularMap=i;break;case proto.bimtile_pbf.Texture.TextureType.TT_EMISSIVE:t.emissiveMap=i;break;case proto.bimtile_pbf.Texture.TextureType.TT_ENVIRONMENT:t.envMap=i;break;case proto.bimtile_pbf.Texture.TextureType.TT_ALPHA:t.useAlphaMap=!0,t.map=i,t.transparent=!0,t.alphaTest=.01;break;case proto.bimtile_pbf.Texture.TextureType.TT_RELIEF:case proto.bimtile_pbf.Texture.TextureType.TT_BUMP:t.bumpMap=i,t.bumpScale=i.bumpScale;break;case proto.bimtile_pbf.Texture.TextureType.TT_LIGHT:t.lightMap=i,t.defines.USE_COMPONENT_LIGHTMAP="",t.lightMapIntensity=r.GlobalData.LightmapIntensity}if(t.refreshUniforms(),t.needsUpdate=!0,""===t.defines.USE_INSTANCE){const r=t.name+"_second";let n=this.materialMap[r];if(!n)return;i._referenceCount++,this._setTexture(e,n,i)}}_updateIBL(e){if(r.GlobalData.IBL){this.settingMaterialPara.IBLMaps=e.manager.scene.IBLMaps,this.settingMaterialPara.iblFactor=10;var t=e.manager.viewer.getIBLManager().IBLParams;for(var i in t)this.settingMaterialPara[i]=t[i]}}_getImageBuffer(e,t){const i=t.getByteOffset(),r=t.getByteLength();return e.slice(i,i+r).buffer}delayUpdateTexturePkgMapping(){}updateMaterialsValue(e,t,i,r){this.settingMaterialPara[t]=i;const n=this.materialMap;for(const e in n){let a=n[e];if(a&&a.hasOwnProperty(t)){if(r&&0==a.receiveIBL)continue;a[t]=i,void 0!==a.refreshUniforms&&a.refreshUniforms(),a.needsUpdate=!0}}}changeAllMaterials(e,t){const i=this.materialMap;for(var n in i)if(i.hasOwnProperty(n)){var a=i[n];if(!a.receiveIBL)continue;var s,o=r.MaterialUtil.getMaterialParameters(a);""!=a.defines.USE_INSTANCE&&""!=a.defines.USE_INSTANCE_NORMAL||(o.defines=a.defines),t?(delete o.textureColor,delete o.pureColor,delete o.imageFade,o.lights=!0,(s=new z.IBLMaterial(o)).type="IBL",s.refreshUniforms()):(delete o.iblProbe,o.lights=!e.lightmap,(s=r.MaterialUtil.createStandardMaterial(o)).roughness=o.originRoughness,s.metalness=o.originMetalness,s.refreshUniforms()),s.name=n,i[n]=s,o=null}if(!t)for(let e in this.IBLParams)delete this.settingMaterialPara[e]}setMaterialsOpacity(e){for(var t in this.materialsOpacity=e,this.materialMap){var i=this.materialMap[t];i.opacity=i.srcOpacity*this.materialsOpacity,i.transparent=!(i.opacity>1-r.TilesUtil.TWO_ACCURACY)}}disposeMaterial(e){return e._referenceCount--,!e._referenceCount&&(e.dispose(),this._disposeTextures(e),delete this.materialMap[e.name],e=null,!0)}_disposeTextures(e){r.Utils.isDefined(e.map)&&(this.viewer.TextureManager.disposeTexture(e.map),e.map=null),r.Utils.isDefined(e.alphaMap)&&(this.viewer.TextureManager.disposeTexture(e.alphaMap),e.alphaMap=null),r.Utils.isDefined(e.bumpMap)&&(this.viewer.TextureManager.disposeTexture(e.bumpMap),e.bumpMap=null),r.Utils.isDefined(e.lightMap)&&(this.viewer.TextureManager.disposeTexture(e.lightMap),e.lightMap=null)}getMaterialByName(e){let t=this.materialMap[e];return r.Utils.isDefined(t)?(t._referenceCount++,t):null}getMaterialById(e){return this.getMaterialByName(e)}setExcavation(e){if(e){this.mapExcavation=e;for(const t in this.materialMap){const i=this.materialMap[t];i.updateExcavation&&(i.updateExcavation(e),i.updateSide({isExcavation:e&&e.isExcavation}),i.needsUpdate=!0)}}}}e.generateMaterialName=function(e,t,i){if(-1===t)return i?"-1_instance":"-1_standard";let r=-1===e.materialBlockId?e.materialBlockId:`${e.bufferId}+${e.materialBlockId}`;r=i?`${r}_instance`:`${r}_standard`;return`${r}_${t}`},r.BimTileMaterialManager=e}(),function(){class e extends r.BimTileMeshParser{constructor(e){if(super(r.Utils.defaultValue(e,{})),this.taskRunner=new r.TaskRunner(5),this.pointAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Uint8Array",uv:"Float32Array"},this.pointSize=.5,this.shpPointMaterial=null,e&&e.isShpPoint){this.shpPointMaterial=new r.PointsMaterial({size:20,sizeAttenuation:!1,positionOffset:!1,sizeAttribute:!0,depthTest:!0,alphaTest:.001,transparent:!0});const e="https://static.bimface.com/attach/9cc8aabfabd0467bad0206bad79c349e_shp-point.png";(new THREE.TextureLoader).load(e,(e=>{this.shpPointMaterial.map=e,this.shpPointMaterial.needsUpdate=!0}))}}destroy(){this.taskRunner=null,this.pointAttributeTypes=null,this.shpPointMaterial&&this.shpPointMaterial.dispose(),this.shpPointMaterial=null}loadDracoPoint(e,t){const{that:i,loader:n,pointBufferObject:a,subPointBuffer:s,treeNode:o,onTileContentReadyCallback:l}=e;r.TilesUtil.getDracoLoader().decodeDracoFile(s,(function(e){e.attributes.color.normalized=!0,i.createMeshNode(n,a,o,e,l),t&&t()}),void 0,i.pointAttributeTypes)}loadMesh(e,t){let{that:i,loader:r,meshBufferObject:n,pbfNodeInfo:a,primitive:s,treeNode:o,onTileContentReadyCallback:l}=e;if((s.getAccVertices()<0||s.getAccIndices()<0)&&s.getAccArchive()<0)return void console.warn("invalid acc info");if(!this.checkIfTileAvailable(o))return this._deleteNodeBuffer(n,o),void(t&&t());let d=new THREE.BufferGeometry;const h=n.meshBlob,c=n.bufferData,u=i._getAccVertexArray(i,h,c,s),p=i._getAccIndicesArray(i,h,c,s);d.setAttribute("position",new THREE.BufferAttribute(u,3)),d.setIndex(new THREE.BufferAttribute(p,1)),i.createMeshNode(r,n,o,d,l),t&&t()}loadBufferPointMesh(e,t){const{that:i,loader:n,pointBufferObject:a,treeNode:s,onTileContentReadyCallback:o}=e,l=new THREE.BufferGeometry;l.setAttribute("position",new THREE.BufferAttribute(a.vertexArray,3)),a.colorArray&&l.setAttribute("color",new THREE.BufferAttribute(a.colorArray,4)),a.normalArray&&l.setAttribute("normal",new THREE.BufferAttribute(a.normalArray,3));const d=new THREE.PointsMaterial({size:i.pointSize});l.getAttribute("color")&&(d.vertexColors=!0);const h=new THREE.Points(l,d);h.name=s._contentIndex,s.content.meshes.add(h),o&&o(s),s.contentState=r.TileContentState.READY,s.content.meshes.matrix=s.matrix,s.content.meshes.updateMatrixWorld(!0),i._deleteNodeBuffer(a,s),t&&t()}createMeshNode(e,t,i,n,a){if(!this.checkIfTileAvailable(i))return void this._deleteNodeBuffer(t,i);let s=new r.PointsMaterial({size:this.pointSize,vertexColors:THREE.VertexColors});if(this.shpPointMaterial){const e=n.getAttribute("position").count,t=new Boolean,i=new Float32Array(e);for(let r=0;r<e;++r)t[r]=!0,i[r]=20;n.setAttribute("attrSize",new THREE.BufferAttribute(i,1)),n.setAttribute("attrHoverAnimation",new THREE.BufferAttribute(t,1)),s=this.shpPointMaterial}const o=new r.PointsEx(n,s);o.name=i._contentIndex,i.content.meshes.add(o),this.decreaseLoadedCount(i),this.getLoadedCount(i)<=0&&(a&&a(i),i.contentState=r.TileContentState.READY,i.content.meshes.matrix=i.matrix,i.content.meshes.updateMatrixWorld(!0),this._deleteNodeBuffer(t,i))}_deleteNodeBuffer(e,t){e.bufferData=null,e.bufferBlob=null,e.blobHeader=null,e.pointBlob=null,e.vertexArray=null,e.colorArray=null,e.normalArray=null;var i=this.getFullBuffer(t);for(var r in i)i[r].content=null}getLoadedCount(e){return e.loadedCount}decreaseLoadedCount(e){e.loadedCount--}checkIfTileAvailable(e){return e.checkIfProcessingTileAvailable()}}r.BimTilePointParser=e}(),function(){let e=new THREE.Matrix4;function t(t,n,a,s,o,l){!function(t,n,a,s,o){var l=o.filter.model.localClippingMode?r.EnumInstanceState.CLIPPING:r.EnumInstanceState.NONE;const d=function(t,i){const r={column0:[],column1:[],column2:[],column3:[]};for(let n=0;n<t.length;++n){let a=e.copy(t[n].entityMatrix);i&&(a=a.multiply(i));const s=a.elements;r.column0.push(s[0],s[1],s[2]),r.column1.push(s[4],s[5],s[6]),r.column2.push(s[8],s[9],s[10]),r.column3.push(s[12],s[13],s[14])}const n=[];for(let e=0;e<4;++e){const t=r["column"+e.toString()],i=new THREE.InstancedBufferAttribute(new Float32Array(t),3,!1,1);n.push(i)}return n}(a,n.meshInfo.matrixRoot);for(let e=0;e<d.length;++e)t.setAttribute("mcol"+e.toString(),d[e]);const h=function(e){const t={column0:[],column1:[],column2:[]},i=new THREE.Matrix3;for(let r=0;r<e;++r){const e=i.elements;t.column0.push(e[0],e[1],e[2]),t.column1.push(e[3],e[4],e[5]),t.column2.push(e[6],e[7],e[8])}const r=[];for(let e=0;e<3;++e){e.toString();const i=t["column"+e.toString()],n=new THREE.InstancedBufferAttribute(new Float32Array(i),3,!1,1);r.push(n)}return r}(a.length);for(let e=0;e<h.length;++e)t.setAttribute("muvCol"+e.toString(),h[e]);const c=function(e,t){const i=[];for(let r=0;r<t;++r){const t=null!=e.opacity?e.opacity:1;i.push(e.r,e.g,e.b,t)}return new THREE.InstancedBufferAttribute(new Float32Array(i),4,!1,1)}(n.meshMaterial.color,a.length);t.setAttribute("aColor",c);const u=i(a.length,r.EnumInstanceState.NONE);t.setAttribute("vState",u);const p=i(a.length,r.EnumInstanceState.HIDDEN);t.setAttribute("vState2",p);const m=function(e,t){const i=new Array(e);i.fill(t);return new THREE.InstancedBufferAttribute(new Float32Array(i),1,!1,1)}(a.length,l);t.setAttribute("vClipping",m)}(t,n[a],s.entityInfoArray,0,l);const d=n[a].meshMaterial,h=d.name+"_second",c=l.materialManager.getMaterialByName(h);let u=new r.MeshEx(t,[d,c]);u.frustumCulled=!1;let p=new THREE.Matrix4;p.copy(o.matrix),s.rootMatrix&&(p=p.multiply(s.rootMatrix)),u.applyMatrix4(p);const{meshInfo:m}=n[a];u.name=o.nodeIndexId,u.indexGroups=m.indexGroups,u.indexCount=m.iAccInfoCount,u.databagId=o.content.meshes.databagId,u.fileId=o.content.meshes.fileId,u.isInstanceMeshNode=!0,u.matrixRoot=m.matrixRoot,o.content.meshes.add(u),l.addInstanceMeshIdMap(o.nodeIndexId,a,u,p),l.addInstanceInfo(o.nodeIndexId,s.entityInfoArray),l.renderableCount++,function(){const e={id:o.nodeId,bufferGeometry:t,material:[d,c],tileMatrix:p,node:o,instance:!0,pbfNodeInfo:{nodeIndexId:o.nodeIndexId,databagId:o.content.meshes.databagId,fileId:o.content.meshes.databagId,indexGroups:m.indexGroups,indexCount:m.iAccInfoCount,instanceInfo:o.instanceInfo}};o._tileset.geometryManager.addGeometryById(o.nodeId,e)}()}function i(e,t){const i=new Array(e);i.fill(t);return new THREE.InstancedBufferAttribute(new Float32Array(i),1,!1,1)}function n(e,t){let i=null;i=t?new THREE.BufferGeometry:new THREE.InstancedBufferGeometry;const n=e.meshMaterial;return r.Utils.isDefined(n)&&n.useCompressedNormal?e.normal&&i.setAttribute("cNormal",e.normal):e.normal&&i.setAttribute("normal",e.normal),i.setAttribute("position",e.position),e.uv&&i.setAttribute("uv",e.uv),i.setIndex(e.index),i.clearGroups(),i.groups.push({start:0,count:e.meshInfo.iAccInfoCount,materialIndex:0}),i.groups.push({start:0,count:e.meshInfo.iAccInfoCount,materialIndex:1}),i}r.InstanceRenderManager=class{constructor(){}static attachToNode(e,i,r,a,s){null!=s.renderDirectly&&!0===s.renderDirectly?function(e,i,r,a){for(let s=0;s<a.length;++s)for(let s=0;s<e.length;++s){t(n(e[s],!0),e,s,a,i,r)}}(e,i,r,a):function(e,i,r,a){for(let s=0;s<e.length;++s){t(n(e[s],!1),e,s,a,i,r)}}(e,i,r,a)}}}();r.SharedGeometryLoader=class{constructor(e){this._loader=e,this._entityMap={},this._waitingTaskMap={}}destroy(){this._entityMap=null,this._waitingTaskMap=null}loadArrayBuffer(e,t,i){return new Promise(((r,n)=>{const a=this._entityMap[e];if(void 0!==a)if("loaded"===a.status){const e=a.geoArrayBuffer;r(e)}else if("loading"===a.status){function s(e){r(e)}this._waitingTaskMap[e].push(s)}else"failed"===a.status&&n("load entity failed");else{function s(e){r(e)}this._entityMap[e]={status:"loading",geoArrayBuffer:null},this._waitingTaskMap[e]=[s];(o=t+e,l=i,new Promise(((e,t)=>{l.loadArrayBufferImmediately(o,(t=>{e(t)}),(e=>{t(e)}))}))).then((t=>{this._entityMap[e].geoArrayBuffer=t,this._entityMap[e].status="loaded";const i=this._waitingTaskMap[e];for(let e=0;e<i.length;++e)i[e](t);this._waitingTaskMap[e]=null})).catch((()=>{this._entityMap[e].status="failed",this._waitingTaskMap[e]=null}))}var o,l}))}},function(){function e(e,t,i,r,n,a){const s=i.userID,o=r,l={bufferId:r,instanceIndex:n,entityMatrix:i.entityMatrix,type:proto.bimtile_pbf.Node.NodeType.NT_BATCHED_SUB_NODE};e.disableUserData?e.addNoUserDataInstanceNodeInfo(s,o,l):e.patchInstanceNodeInfo(s,o,l)}function t(e){const t={};for(const[i,r]of Object.entries(e.attributes))t[i]=r;return t.index=e.index,t}r.BimTileInstanceParser=class{constructor(e){this._contentFolder,this._delayLoadTexture=e.delayLoadTexture,this._renderDirectly=null!=e.renderDirectly&&!0===e.renderDirectly&&e.renderDirectly,this._sharedGeometryLoader=new r.SharedGeometryLoader,this.materialManager=e.materialManager}set contentFolder(e){this._contentFolder=e}get contentFolder(){return this._contentFolder}destroy(){this._sharedGeometryLoader.destroy(),this._sharedGeometryLoader=void 0,this.materialManager=null}parseBlobs(e,t,i){t.isInstanceTile=!0,t.userIndexMap={};const r=proto.BlockHeader.BlockType.BT_INSTANCE;for(let s in t.buffer){var n=t.getBuffer(s);if(n.type==r){var a=n.content;a&&this.parseBlob(e,a,t,i)}}}parseBlob(i,n,a,s){if(!n)return;const o=n.getBlobHeader();let l=r.Utils.isDefined(a.contentInsModel)?a.contentInsModel:o.getEntityUrl();const d=`${r.Utils.isDefined(a.contentId)?a.contentId:o.getTileId()}_${o.getBlockId()}`,h=function(t,i,n,a){const s=n.getBlobHeader(),o=new THREE.Matrix4,l=[],d=s.getMatrixList();if(16===d.length){o.fromArray(d);let e=s.getTranslationList();r.Utils.isDefined(e)&&3===e.length&&o.setPosition(e[0],e[1],e[2])}const h=n.getInstancesList(),c=a;for(let n=0;n<h.length;++n){const a=h[n],s=new THREE.Matrix4,d=a.getMatrixList();16===d.length&&s.fromArray(d);const u=a.getUserId();i.userIndexMap[u]=!0;const p=a.getUserdataId(),m={userID:u,userDataID:p,userData:r.TilesUtil.praseUserData(t.tileReader.getUserDataByIndex(p)),entityMatrix:s};l.push(m),t.getDescriptor().getReferencedMeshBufferById(c)||e(t,a,m,c,n,o)}return t.getDescriptor().cacheReferencedMeshBufferData(c,{}),{entityInfoArray:l,rootMatrix:o}}(i,a,n,d),c={entityID:l,entityInfoArray:h.entityInfoArray};a.instanceInfo=c,this._sharedGeometryLoader.loadArrayBuffer(l,a._contentFolder,i).then((e=>{a.checkIfProcessingTileAvailable()&&function(e,i,n,a){return new Promise(((s,o)=>{const l=function(e,t){const i={parent:!0},r={node:i,type:proto.bimtile_pbf.BlockHeader.BlockType.BT_MESH};return t.parseBlock(e,r),i}(e,i.tileReader);l.contentIndex=n.contentIndex;const d=new r.BimTileInstanceMeshBlobParser({_delayLoadTexture:null,renderDirectly:a,materialManager:i.materialManager});d.parse(i,l).then((()=>{const e=function(e){const i=[];for(const[r,n]of Object.entries(e._geoBuffers)){const e=n;for(let r=0;r<e.length;++r)if(e[r].meshInfo.useDraco){const n=t(e[r].bufferGeometry);n.meshInfo=e[r].meshInfo,n.meshMaterial=e[r].meshMaterial,i.push(n)}else i.push(e[r])}return i}(d);d.destroy(),s(e)})).catch((e=>{o(e)}))}))}(e,i,a,this._renderDirectly).then((e=>{a.checkIfProcessingTileAvailable()&&(a.nodeIndexId=d,r.InstanceRenderManager.attachToNode(e,a,i,h,{renderDirectly:this._renderDirectly}),s&&s(a))}))})).catch((e=>{console.log(e)}))}}}(),r.BimTileInstanceMeshBlobParser=class{constructor(e){this._geoBuffers={},this.materialManager=e.materialManager,this._renderDirectly=null!=e.renderDirectly&&!0===e.renderDirectly,this._parsePromiseArray=[]}get renderDirectly(){return this._renderDirectly}destroy(){this._parsePromiseArray=null,this._geoBuffers=null,this.materialManager=null}parse(e,t){if(!t||!t.buffer)return;const i=this._getBufferInfo(e,t);if(!i)return;const r=i.meshBlob.getScenesList();if(!r.length)return;this._traverseScenes(r,i);const n=this;return new Promise(((e,t)=>{Promise.all(n._parsePromiseArray).then((()=>{n._parsePromiseArray=null,e()})).catch((()=>{n._parsePromiseArray=null,t("some error when paser mesh block "+i.bufferId)}))}))}_getBufferInfo(e,t){const i=t.buffer[0].content,r=i.getBlobHeader(),n=r.getBufferBlockId(),a=t.buffer[n].content;if(!a)return null;const s=a.getBuffer();let o={};return o.contentIndex=t.contentIndex,o.meshBlob=i,o.buffer=a,o.bufferData=s,o.bufferId=`${r.getTileId()}_${n}`,o.loader=e,o.node=t,o.renderInstance=!this._renderDirectly,o}_traverseScenes(e,t){const i=e.length;for(let r=0;r<i;++r){const i=e[r],n=i.getNodesList(),a=i.getName();this._traverseNodesPerScene(n,t,a)}}_traverseNodesPerScene(e,t,i){const r=e.length;for(let n=0;n<r;++n){const r=e[n],a=t.meshBlob.getNodesList()[r];let s=new THREE.Matrix4;16==a.getMatrixList().length&&s.fromArray(a.getMatrixList());const o={};o.nodeIndex=r,o.matrix=s,o.sceneName=i,this._parseBufferNode(a,o,t)}}_parseBufferNode(e,t,i){const r=e.getPrimitivesList();return e.getNodeType()!=proto.bimtile_pbf.Node.NodeType.NT_BATCHED_SUB_NODE&&this._traversePrimitivesPerNode(r,t,i),!0}_traversePrimitivesPerNode(e,t,i){const r=e.length;if(!r)return;++this._meshCount;const n=new Promise((n=>{let a=0;for(let s=0;s<r;s++){const o=e[s],l=i.meshBlob.getPrimitivesList()[o];if(l.getMode()===proto.bimtile_pbf.Primitive.PrimitiveMode.PM_TRIANGLES){let e=null;if(e=l.getAccArchive()>=0?this._getBufferByPrimitive_Draco(l,t,i):this._getBufferByPrimitive(l,t,i),e){const t=this;e.then((e=>{++a,t._geoBuffers[e.meshInfo.sceneName]?t._geoBuffers[e.meshInfo.sceneName].push(e):t._geoBuffers[e.meshInfo.sceneName]=[e],a===r&&n()})).catch((e=>{console.log(e)}))}}}}));return this._parsePromiseArray.push(n),n}_getBufferByPrimitive(e,t,i){if((e.getAccVertices()<0||e.getAccIndices()<0)&&e.getAccArchive()<0)return;if(this._resetMeshBuffer(i),!i.buffer)return;const{meshBlob:r}=i,{bufferData:n}=i,a={nodeIndex:t.nodeIndex,matrixRoot:t.matrix,sceneName:t.sceneName,useDraco:!1},s=this._getNormal(r,n,a,e),o=this._getVertex(r,n,a,e),l=this._getIndex(r,n,a,e),d=this._getTextureCoord(r,n,a,e),h=this;return new Promise(((t,r)=>{h.materialManager.getMaterial(i.loader,i,e,(e=>{if(e){const i={normal:s||null,position:o.vertexBufferAttribute,index:l.indexBufferAttribute,uv:d?d.uvBufferAttribute:null,meshMaterial:e,meshInfo:a};t(i)}else r("get material faild")}))}))}_getBufferByPrimitive_Draco(e,t,i){if((e.getAccVertices()<0||e.getAccIndices()<0)&&e.getAccArchive()<0)return;if(this._resetMeshBuffer(i),!i.buffer)return;const{meshBlob:n}=i,{bufferData:a}=i,{material:s}=i,o=n.getBufferaccsList()[e.getAccArchive()],l=o.getByteOffset(),d=o.getByteLength(),h=a.slice(l,l+d).buffer,c=this,u={nodeIndex:t.nodeIndex,matrixRoot:t.matrix,sceneName:t.sceneName,useDraco:!0};return new Promise((t=>{r.TilesUtil.getDracoLoader().decodeDracoFile(h,(function(r){s&&e.getMaterialId()>=-1&&(r.clearGroups(),r.groups.push({start:0,count:r.index.count,materialIndex:0}),u.iAccInfoCount=r.index.count,c.materialManager.getMaterial(i.loader,i,e,(e=>{t({bufferGeometry:r,meshMaterial:e,meshInfo:u})})))}))}))}_resetMeshBuffer(e){const t=e.meshBlob.getBlobHeader(),i=t.getBufferBlockId(),r=t.getMaterialBlockId(),n=t.getUserdataBlockId(),a=e.node.buffer[i].content,s=-1===r?e.loader.tileReader.globalMaterialBuffer:e.node.buffer[r].content;e.buffer=a,e.materialBlockId=r,e.material=s,e.userdataBlockId=n,a&&(e.bufferData=a.getBuffer())}_getAccInfo(e,t){if(t<0)return{offset:0,length:0,count:0};const i=e.getBufferaccsList()[t];return{offset:i.getByteOffset(),length:i.getByteLength(),count:i.getCount(),valueType:i.getValueType()}}_getNormal(e,t,i,r){const n=this._getAccInfo(e,r.getAccNormals());if(n.count>0){let e,a;const s=t.slice(n.offset,n.offset+n.length).buffer;switch(i.nAccInfoStart=n.offset,i.nAccInfoCount=n.count,n.valueType){case proto.bimtile_pbf.BufferAcc.ComponentType.CT_UBYTE:e=new Uint8Array(s),r.useCompressedNormal=!0,a=new THREE.BufferAttribute(e,2);break;case proto.bimtile_pbf.BufferAcc.ComponentType.CT_FLOAT:e=new Float32Array(s),r.useCompressedNormal=!1,a=new THREE.BufferAttribute(e,3)}return a}return null}_getVertex(e,t,i,r){const n=this._getAccInfo(e,r.getAccVertices()),a=t.slice(n.offset,n.offset+n.length).buffer;let s=new Float32Array(a);return i.vAccInfoStart=n.offset,{vertexBufferData:a,vertexBufferAttribute:new THREE.BufferAttribute(s,3)}}_getIndex(e,t,i,r){const n=this._getAccInfo(e,r.getAccIndices()),a=t.slice(n.offset,n.offset+n.length).buffer;let s=null;switch(n.valueType){case proto.bimtile_pbf.BufferAcc.ComponentType.CT_USHORT:s=new Uint16Array(a);break;default:s=new Uint32Array(a)}return i.iAccInfoStart=n.offset,i.iAccInfoCount=n.count,{indexBufferData:a,indexBufferAttribute:new THREE.BufferAttribute(s,1)}}_getTextureCoord(e,t,i,r){i.tAccInfoStart=0;const n=this._getAccInfo(e,r.getAccTexcoords());if(n.count>0){const e=t.slice(n.offset,n.offset+n.length).buffer;i.tAccInfoStart=n.offset;let r=new Float32Array(e);return{uvBufferData:e,uvBufferAttribute:new THREE.BufferAttribute(r,2)}}return null}},r.BimTileSearchTreeManager=class{constructor(e){this.reader=e,this.searchTreeBuffer={}}destroy(){this.reader=null,this.searchTreeBuffer=null}addSearchTreeBuffer(e,t,i){void 0===this.searchTreeBuffer[e]&&(this.searchTreeBuffer[e]={},this.searchTreeBuffer[e].searchTreeBlob=i,this.searchTreeBuffer[e].box=t)}getSearchTreeBuffer(){return this.searchTreeBuffer}},r.BimTileReader=class{constructor(){this.descriptor=new r.ModelView.DefaultDescriptor,this.searchTreeManager=new r.BimTileSearchTreeManager,this.globalMaterialId=-1,this.globalUserdataId=-1,this.globalMaterialUrl=void 0,this.globalUserDataUrl=void 0,this.globalTileIdUrl=void 0,this.globalInstance=void 0,this.globalLodUrl=void 0,this.globalVisibilityUrl=void 0,this.globalUserIDInfo=null,this.globalUserIDBuffer={},this.globalMaterialBuffer=null,this.globalUserdataBuffer=null,this.globalTileIdBuffer=null,this.referencedMeshCache={},this.tileIdMap={}}destroy(){this.descriptor.destroy(),this.descriptor=null,this.searchTreeManager.destroy(),this.searchTreeManager=null,this.globalUserIDInfo=null,this.globalUserIDBuffer=null,this.globalMaterialBuffer=null,this.globalUserdataBuffer=null,this.globalMaterialUrl=void 0,this.globalUserDataUrl=void 0,this.globalTileIdUrl=void 0,this.globalInstance=void 0,this.referencedMeshCache=null,this.globalTileIdBuffer=null,this.tileIdMap=null}getDescriptor(){return this.descriptor}getBuffer(e,t,i){return-1===t&&i===proto.BlockHeader.BlockType.BT_MATERIAL?this.globalMaterialBuffer:-1===t&&i===proto.BlockHeader.BlockType.BT_USERDATA?this.globalUserdataBuffer:e.getBuffer(t).content}getLineBuffer(e,t,i){return e.getLineBuffer(t).content}getOutlineBuffer(e,t,i){return e.getOutlineBuffer(t).content}_getUserIdBufferByIndex(e){let t=null,i=0,r=0;const n=this.globalUserIDInfo.length;for(let a=0;a<n;a++){const n=this.globalUserIDInfo[a];if(e>=i&&e<=n.maxUserIDIndex){t=n.globalUserIdUrl,r=e-i;break}i=n.maxUserIDIndex+1}return{buffer:this.globalUserIDBuffer[t],index:r}}_getUserIdBufferById(e){let t=null,i=0;if(null===this.globalUserIDInfo)return;const r=this.globalUserIDInfo.length;for(let n=0;n<r;n++){const r=this.globalUserIDInfo[n];if(e<=r.maxUserIDString){t=r.globalUserIdUrl;break}i=r.maxUserIDIndex+1}return{buffer:this.globalUserIDBuffer[t],index:i}}getUserIdByIndex(e){if(!this.globalUserIDInfo)return;const t=this._getUserIdBufferByIndex(e);return void 0!==t.buffer?t.buffer.getUserIdsList()[t.index]:void 0}getIndexByUserId(e){if(!this.globalUserIDInfo)return;const t=this._getUserIdBufferById(e);if(void 0===t||void 0===t.buffer)return;const i=t.buffer.getUserIdsList().findIndex((t=>t===e));return-1!==i?t.index+i:void 0}getNodeIdsByUserIndex(e){if(!this.globalUserIDInfo)return;const t=this._getUserIdBufferByIndex(e);if(void 0===t.buffer)return;const i=t.buffer.getNodeIdsList();let r=t.index,n=i.length,a=[];for(let t=r;t<n;++t){const r=i[t].getUserId();if(e===r){const e={tileId:i[t].getTileId(),blockId:i[t].getBlockId(),nodeId:i[t].getNodeId()};a.push(e)}if(r>e)break}return a}getUserDataByIndex(e){if(!this.globalUserdataBuffer)return;const t=this.globalUserdataBuffer.getUserdataArrayList()[e];return void 0!==t?t.getValuesStringMap().getEntryList():void 0}getUserDataStringMapByIndex(e,t){if(this.globalUserdataBuffer)return[this.globalUserdataBuffer.getBlobHeader().getKeysList()[e],this.globalUserdataBuffer.getBlobHeader().getValuesList()[t]]}getUserDataIndexListMapByString(e,t){if(!this.globalUserdataBuffer)return;if(!(t instanceof Array))return t;let i={};const r=this.getUserDataIndexKeyByString(e);i.key=r,i.value={};for(let e=0,r=t.length;e<r;++e){const r=this.getUserDataIndexValueByString(t[e]);r>-1&&(i.value[r]=!0)}return i}getUserDataIndexMapByString(e,t){if(this.globalUserdataBuffer)return{key:this.getUserDataIndexKeyByString(e),value:this.getUserDataIndexValueByString(t)}}getUserDataIndexKeyByString(e){return this.globalUserdataBuffer.getBlobHeader().getKeysList().findIndex((t=>t===e))}getUserDataIndexValueByString(e){const t=this.globalUserdataBuffer.getBlobHeader().getValuesList();if(e instanceof Array){let i=[];return e.map((e=>{i.push(t.findIndex((t=>t===e)))})),i}return t.findIndex((t=>t===e))}parseSchemaProperties(e,t){if(void 0===e)return;this.layerKey=e.layerKey,this.layerValue=e.layerValue,this.globalMaterialUrl=e.globalMaterial?t+e.globalMaterial.content.url:void 0,this.globalUserDataUrl=e.globalUserdata?t+e.globalUserdata.content.url:void 0,this.globalTileIdUrl=e.globalTileID?t+e.globalTileID.content.url:void 0,this.globalInstance=e.instanceTiles?t+e.instanceTiles.content.url:void 0,this.globalLodUrl=e.groupTiles?t+e.groupTiles.content.url:void 0,this.globalVisibilityUrl=e.visibilityTiles?t+e.visibilityTiles.content.url:void 0;const i=e.globalUserID;i&&(i.map((e=>{e.globalUserIdUrl=t+e.content.url,delete e.content})),this.globalUserIDInfo=i)}parseBlock(e,t,i){const n=t.node,a=t.type,s=t.url,o=t.outline;let l=!0,d=0,h=[];n.bufferType=a;let c=0;const u=e.byteLength;for(n.buffer=r.Utils.isDefined(n.buffer)?n.buffer:{},n.lineBuffer=r.Utils.isDefined(n.lineBuffer)?n.lineBuffer:{},n.outlineBuffer=r.Utils.defaultValue(n.outlineBuffer,{});c<u;){const t=e.slice(c,c+4);let i=new Uint32Array(t)[0];c+=4;const u=new Uint8Array(e,c,i);c+=i;const m=proto.bimtile_pbf.BlockHeader.deserializeBinary(u);l&&m.getDataType(),i=m.getDataSize(),r.TilesUtil.max_uncompressed_blob_size;var p=new Uint8Array(e,c,i);if(c+=i,m.getCompressType()!=proto.bimtile_pbf.BlockHeader.CompressType.CT_NULL)return void console.warn("uncompress data into buffer");const f=m.getDataType();let g={};switch(f){case proto.BlockHeader.BlockType.BT_INDEX:const e=proto.bimtile_pbf.SearchTreeBlob.deserializeBinary(p);g.type=f,g.content=e,n.buffer[d]=g;break;case proto.BlockHeader.BlockType.BT_USERID:const t=proto.bimtile_pbf.UserIDBlob.deserializeBinary(p);if(g.type=f,g.content=t,a===r.TileContentType.DATA_GLOBAL_USER_ID){this.globalUserIDBuffer[s]=t;break}n.buffer[d]=g;break;case proto.BlockHeader.BlockType.BT_MATERIAL:const i=proto.bimtile_pbf.MaterialBlob.deserializeBinary(p);if(g.type=f,g.content=i,a===r.TileContentType.DATA_GLOBAL_MATERIAL){this.globalMaterialBuffer=i;break}n.buffer[d]=g;break;case proto.BlockHeader.BlockType.BT_USERDATA:const l=proto.bimtile_pbf.UserdataBlob.deserializeBinary(p);if(g.type=f,g.content=l,a===r.TileContentType.DATA_GLOBAL_USER_DATA){this.globalUserdataBuffer=l;break}n.buffer[d]=g;break;case proto.BlockHeader.BlockType.BT_BUFFER:const h=proto.bimtile_pbf.BufferBlob.deserializeBinary(p);g.type=f,g.content=h,a===proto.BlockHeader.BlockType.BT_LINE?o?n.outlineBuffer[d]=g:n.lineBuffer[d]=g:n.buffer[d]=g;break;case proto.BlockHeader.BlockType.BT_MESH:const c=proto.bimtile_pbf.MeshBlob.deserializeBinary(p);g.type=f,g.content=c,n.buffer[d]=g;break;case proto.BlockHeader.BlockType.BT_POINT:const u=proto.bimtile_pbf.PointBlob.deserializeBinary(p);g.type=f,g.content=u,n.buffer[d]=g;break;case proto.BlockHeader.BlockType.BT_TILEID:const m=proto.bimtile_pbf.TileIDBlob.deserializeBinary(p);if(g.type=f,g.content=m,a===r.TileContentType.DATA_GLOBAL_TILE_ID){this.globalTileIdBuffer=m;break}n.buffer[d]=g;break;case proto.BlockHeader.BlockType.BT_INSTANCE:const v=proto.bimtile_pbf.InstanceBlob.deserializeBinary(p);g.type=f,g.content=v,n.buffer[d]=g;break;case proto.BlockHeader.BlockType.BT_LINE:const y=proto.bimtile_pbf.MeshBlob.deserializeBinary(p);g.type=f,g.content=y,a===proto.BlockHeader.BlockType.BT_LINE&&o?n.outlineBuffer[d]=g:n.lineBuffer[d]=g;break;default:return void console.warn("Parse unknow block faild! ")}l&&(l=!1),h[d]=d,d++}i&&i()}getBlockType(e){switch(e){case"MESH":return proto.bimtile_pbf.BlockHeader.BlockType.BT_MESH;case"POINT":return proto.bimtile_pbf.BlockHeader.BlockType.BT_POINT;case"INSTANCE":return proto.bimtile_pbf.BlockHeader.BlockType.BT_INSTANCE;case"LINE":return proto.bimtile_pbf.BlockHeader.BlockType.BT_LINE}}addSearchTreeBuffer(e,t,i){this.searchTreeManager.addSearchTreeBuffer(e,t,i)}getSearchTreeBuffer(){return this.searchTreeManager.getSearchTreeBuffer()}createTileIdMap(){if(!this.globalTileIdBuffer)return;const e=this.globalTileIdBuffer.getTilePathList(),t=this.globalTileIdBuffer.getTileIdsList();e.map(((e,i)=>{this.tileIdMap[e]=t[i]}))}getTileIdByPath(e){return this.tileIdMap[e]}createNodeInfoMap(){for(const e in this.globalUserIDBuffer)this.globalUserIDBuffer[e].getNodeIdsList().map((e=>{const t=e.getUserId(),i=e.getUserdataId(),n=r.TilesUtil.praseUserData(this.getUserDataByIndex(i)),a=e.getBboxList(),s=r.TilesUtil.getBox(a).clone(),o=e.getTileId();let l=`${o}_${e.getBlockId()}_${e.getNodeId()}`;const d=`outline_${o}`;let h,c=!1;if(this.globalTileIdBuffer){const t=this.globalTileIdBuffer.getTileIdsList()[o];-1!==this.globalTileIdBuffer.getTilePathList()[t].indexOf("instance")&&(c=!0,l=`${o}_${e.getBlockId()}`,h=e.getNodeId())}this.getDescriptor()._classifyNodeInfo({nodeId:l,name:t,userId:t,userData:n,boundingBox:s,instanceOrNot:c,state:r.EnumObjectState.Visible,index:h,lineId:d,tileId:o})}))}clone(e){e.globalMaterialId=this.globalMaterialId,e.globalUserdataId=this.globalUserdataId,e.globalMaterialUrl=this.globalMaterialUrl,e.globalUserDataUrl=this.globalUserDataUrl,e.globalTileIdUrl=this.globalTileIdUrl,e.globalInstance=this.globalInstance,e.globalUserIDInfo=this.globalUserIDInfo,e.globalUserIDBuffer=this.globalUserIDBuffer,e.globalMaterialBuffer=this.globalMaterialBuffer,e.globalUserdataBuffer=this.globalUserdataBuffer,e.globalTileIdBuffer=this.globalTileIdBuffer,e.searchTreeManager=this.searchTreeManager}getPolygonOutLinePathByUserId(e){if(!this.globalUserIDBuffer)return null;const t=this.getDescriptor().getNodeInfosByUserId(e);if(!t)return null;const i={MultiPolygoin:!0,PolygonWithHoles:!0,SimplePolygon:!0},r=this.getUserDataIndexKeyByString("polygonType");if(-1===r)return null;const n=this.globalUserdataBuffer.getBlobHeader().getValuesList(),a={};let s=!1;return t.forEach((e=>{const t=e.userData;if(!t||void 0===t[r])return;const o=t[r],l=n[o];if(void 0===l||!i[l])return;const d=this.getTilePathByTileId(e.tileId);d&&(a[d]||(a[d]={}),a[d]={tileId:e.tileId,polygonType:l},s=!0)})),s?a:null}getTilePathByTileId(e){const t=this.globalTileIdBuffer;if(!t)return;const i=t.getTileIdsList()[e];return t.getTilePathList()[i]}},r.BimTilesLoader=class{constructor(e){this.jsonLoader=new THREE.FileLoader,this.jsonLoader.setResponseType("json"),this.arrayBufferLoader=new THREE.FileLoader,this.arrayBufferLoader.setResponseType("arraybuffer"),this.taskRunner=new r.LoadTaskRunner(4),this.tileReader=new r.BimTileReader,this.batchMergeEnabled=e.batchMergeEnabled,this.filter=e.filter,this.modelExplosion=e.modelExplosion,this.wireFrameVisibilityOption=e.wireFrameVisibilityOption,this.materialManager=e.materialManager;const t={batchMergeEnabled:e.batchMergeEnabled,delayLoadTexture:e.delayLoadTexture,materialManager:this.materialManager,renderFunction:e.renderFunction,isShpPoint:e.isShpPoint};this.bimTileParser={},this.bimTileParser[r.TileContentType.DATA_MESH]=new r.BimTileMeshBlobParser(t),this.bimTileParser[r.TileContentType.DATA_CMPT]=this.bimTileParser[r.TileContentType.DATA_MESH],this.bimTileParser[r.TileContentType.DATA_INSTANCE]=new r.BimTileInstanceParser(t),delete t.isShpPoint,this.bimTileParser[r.TileContentType.DATA_POINT]=new r.BimTilePointBlobParser(t),this.bimTileOutlineBlobParser=new r.BimTileOutlineBlobParser(t),this.bimTileLineBlobParser=new r.BimTileLineBlobParser(t),this.batchedWireframeManager=new r.BimTileBatchedWireframeManager(this),this.instancedWireframeManager=new r.BimTileInstancedWireframeManager(this),this.batchedMeshManager=new r.BimTileBatchedMeshManager(this),this.instancedMeshManager=new r.BimTileInstancedMeshManager(this),this._rootUrl=void 0,this.sceneState=e.sceneState,this.userIdMapIndices={},this.pbfNodeInfoMap={},this._enableBorderLine=e.enableBorderLine,this.disableUserData=e.disableUserData,this.indexInfoMap={},this.selectionMeshIdSet={},this.lastSelectionMeshIdSet={},this.CMPTUrlMap={}}destroy(){this.globalIndexId=null,this.globalMaterialId=null,this.globalUserdataId=null,this.jsonLoader=null,this.arrayBufferLoader=null,this.taskRunner=null,this.tileReader.destroy(),this.tileReader=void 0,this.bimTileParser[r.TileContentType.DATA_MESH].destroy(),this.bimTileParser[r.TileContentType.DATA_INSTANCE].destroy(),this.bimTileParser[r.TileContentType.DATA_POINT].destroy(),this.bimTileLineBlobParser.destroy(),this.bimTileLineBlobParser=void 0,this.bimTileOutlineBlobParser.destroy(),this.bimTileOutlineBlobParser=void 0,this.bimTileParser=void 0,this._rootUrl=void 0,this.sceneState=null,this.userIdMapIndices=null,this.materialManager=null,this.batchedWireframeManager.destroy(),this.instancedWireframeManager.destroy(),this.batchedMeshManager.destroy(),this.instancedMeshManager.destroy(),this.batchedWireframeManager=null,this.instancedWireframeManager=null,this.batchedMeshManager=null,this.instancedMeshManager=null,this.pbfNodeInfoMap=null,this._enableBorderLine=void 0,this.wireFrameVisibilityOption=null,this.indexInfoMap=null,this.noUserDataMeshNodeInfoMap=null,this.noUserDataInstanceNodeInfoMap=null,this.selectionMeshIdSet=null,this.lastSelectionMeshIdSet=null,this.CMPTUrlMap={}}set rootUrl(e){this._rootUrl=e}get rootUrl(){return this._rootUrl}getDescriptor(){return this.tileReader.getDescriptor()}loadJson(e,t,i){e=r.RequestSpliter.splitByUrlMd5(e);const n=()=>{this.taskRunner.push(this.jsonLoader,e,t,(function(t){r.EnableStorage&&r.storageManager.addBimtiles(JSON.stringify(t),e).catch((e=>{})),i&&i(t)}))};r.EnableStorage?r.storageManager.getBimtiles(e).then((e=>i&&i(JSON.parse(e)))).catch((e=>{n()})):n()}loadJsonImmediately(e,t,i){e=r.RequestSpliter.splitByUrlMd5(e);const n=()=>{this.jsonLoader.load(e,(function(i){r.EnableStorage&&r.storageManager.addBimtiles(JSON.stringify(i),e).catch((e=>{})),t(i)}),void 0,(function(){i&&i(event)}))};r.EnableStorage?r.storageManager.getBimtiles(e).then((e=>t(JSON.parse(e)))).catch((e=>{n()})):n()}loadArrayBuffer(e,t,i){this.taskRunner.push(this.arrayBufferLoader,e,t,(function(e){i&&i(e)}))}loadArrayBufferDirectly(e,t){const i=()=>{this.arrayBufferLoader.load(e,(function(i){t(i),r.EnableStorage&&r.storageManager.addBimtiles(i,e).catch((e=>{}))}))};r.EnableStorage?r.storageManager.getBimtiles(e).then((e=>t(e))).catch((e=>{i()})):i()}loadCMPTArrayBufferImmediately(e,t,i){void 0===this.CMPTUrlMap[e]?(this.CMPTUrlMap[e]={state:r.TileContentState.LOADING,buffer:null,callbacks:[]},this.loadArrayBufferImmediately(e,t,i)):this.CMPTUrlMap[e].state===r.TileContentState.READY?t(this.CMPTUrlMap[e].buffer):this.CMPTUrlMap[e].state===r.TileContentState.LOADING&&this.CMPTUrlMap[e].callbacks.push(t)}loadArrayBufferImmediately(e,t,i){const n=i=>{this.CMPTUrlMap[e]&&(this.CMPTUrlMap[e].state=r.TileContentState.READY,this.CMPTUrlMap[e].buffer=i,this.CMPTUrlMap[e].callbacks.map((e=>{e&&e(i)}))),t(i)},a=()=>{this.arrayBufferLoader.load(e,(t=>{n(t),r.EnableStorage&&r.storageManager.addBimtiles(t,e).catch((e=>{}))}),void 0,(()=>{i&&i(event)}))};r.EnableStorage?r.storageManager.getBimtiles(e).then((e=>n(e))).catch((e=>{a()})):a()}loadBlock(e,t,i,r){const n=this.tileReader,a={node:t,type:i,url:e};this.loadArrayBufferDirectly(e,(e=>{n.parseBlock(e,a,r)}))}loadUserIdResources(e,t){var i=this.tileReader;let n=1,a=()=>{n--,n<=0&&t()};if(i.globalUserDataUrl&&(n++,this.loadBlock(i.globalUserDataUrl,e,r.TileContentType.DATA_GLOBAL_USER_DATA,(()=>{a()}))),i.globalUserIDInfo){const t=i.globalUserIDInfo.length;n+=t,i.globalUserIDInfo.map((t=>{this.loadBlock(t.globalUserIdUrl,e,r.TileContentType.DATA_GLOBAL_USER_ID,(()=>{a()}))}))}i.globalTileIdUrl&&(n++,this.loadBlock(i.globalTileIdUrl,e,r.TileContentType.DATA_GLOBAL_TILE_ID,(()=>{a()}))),a()}loadGlobalResources(e){const{tileReader:t}=this;return new Promise((i=>{r.Utils.isDefined(t.globalMaterialUrl)?this.loadBlock(t.globalMaterialUrl,e,r.TileContentType.DATA_GLOBAL_MATERIAL,(()=>{i()})):i()}))}loadInstanceResources(e){const{tileReader:t}=this;if(!t.globalInstance)return;const i=this;return new Promise(((n,a)=>{const s=t.globalInstance;i.loadJsonImmediately(s,(t=>{const a=s.slice(0,s.lastIndexOf("/")+1),o=e.createTile(a,t);if(o.localIndexList&&o.localIndexList.length>0){const e=o.localIndexList.length;for(let t=0;t<e;++t){const e=o.localIndexList[t];i.addSearchTree(e.url,e.box)}}o._childrenState=r.TileContentState.READY,n(o)}),(()=>{a("can not load intance root json")}))}))}loadLodResources(e){const{tileReader:t}=this;if(!t.globalLodUrl)return;const i=this;return new Promise(((n,a)=>{const s=t.globalLodUrl;i.loadJsonImmediately(s,(t=>{t.root.visibilityPriority=9;const a=s.slice(0,s.lastIndexOf("/")+1),o=e.createTile(a,t);if(o.localIndexList&&o.localIndexList.length>0){const e=o.localIndexList.length;for(let t=0;t<e;++t){const e=o.localIndexList[t];i.addSearchTree(e.url,e.box)}}o._childrenState=r.TileContentState.READY,n(o)}),(()=>{a("can not load group root json")}))}))}loadVisibilityResources(e){const{tileReader:t}=this;if(!t.globalVisibilityUrl)return;const i=this;return new Promise(((n,a)=>{const s=t.globalVisibilityUrl;i.loadJsonImmediately(s,(t=>{const a=s.slice(0,s.lastIndexOf("/")+1);t.root.visibilityPriority=1;const o=e.createTile(a,t);if(o.localIndexList&&o.localIndexList.length>0){const e=o.localIndexList.length;for(let t=0;t<e;++t){const e=o.localIndexList[t];i.addSearchTree(e.url,e.box)}}o._childrenState=r.TileContentState.READY,n(o)}),(()=>{a("can not load visibility root json")}))}))}parseTileContent(e,t){this.bimTileParser[e.contentType].parseBlobs(this,e,t)}parseTileLineContent(e,t){this.bimTileLineBlobParser.parseBlobs(this,e,t)}parseTileOutlineContent(e,t){this.bimTileOutlineBlobParser.parseBlobs(this,e,t)}setBorderLineVisible(e){this._enableBorderLine=e}isBorderLineVisible(){return this._enableBorderLine}praseWireFrameVisibilityOption(e){if(!0===e)return void(this.wireFrameVisibilityOption=!0);if(!0===e.condition.all)return void(this.wireFrameVisibilityOption=e.isVisible);this.wireFrameVisibilityOption={ids:Object.create(null)},this.wireFrameVisibilityOption.isVisible=e.isVisible;const t=e.condition.ids;let i=e=>{e.map((e=>{this.wireFrameVisibilityOption.ids[e]=!0}))};void 0!==t&&i(this.filter._parseIds(t));const r=e.condition.objectData;void 0!==r&&i(this.filter.getMatchIndexes(r))}updateWireFrameVisibilityOption(e){this.praseWireFrameVisibilityOption(e)}addMeshIdMap(e,t){this.batchedMeshManager.addMeshIdMap(e,t)}getMeshNodeById(e){return this.batchedMeshManager.getMeshNodeById(e)}disposeMeshNodeById(e){this.batchedMeshManager.disposeMeshNodeById(e)}addInstanceMeshIdMap(e,t,i,r){this.instancedMeshManager.addInstanceMeshIdMap(e,t,i,r)}getInstanceMeshNodeById(e){return this.instancedMeshManager.getInstanceMeshNodeById(e)}disposeInstanceMeshNodeById(e){this.instancedMeshManager.disposeInstanceMeshNodeById(e)}addInstanceInfo(e,t){this.instancedMeshManager.addInstanceInfo(e,t)}getInstanceInfoById(e){return this.instancedMeshManager.getInstanceInfoById(e)}addLineNodeById(e,t,i){this.batchedWireframeManager.addLineNodeById(e,t,i)}addInstanceLineNodeById(e,t){this.instancedWireframeManager.addInstanceLineNodeById(e,t)}getLineNodeById(e,t){return this.batchedWireframeManager.getLineNodeById(e,t)}getInstanceLineNodeById(e){return this.instancedWireframeManager.getInstanceLineNodeById(e)}disposeLineNodeById(e){this.batchedWireframeManager.disposeLineNodeById(e)}disposeInstanceLineNodeById(e){this.instancedWireframeManager.disposeInstanceLineNodeById(e)}addUserIdMapIndices(e,t){e.map((e=>{const i=e.userId;void 0===this.userIdMapIndices[i]?this.userIdMapIndices[i]=[{meshId:t,indexId:e.index}]:this.userIdMapIndices[i].push({meshId:t,indexId:e.index})}))}addSearchTree(e,t){this.disableUserData?this.indexInfoMap[e]=t:this.addSearchTreeUrl(e,t)}addSearchTreeUrl(e,t,i){let r={};this.loadBlock(e,r,proto.bimtile_pbf.BlockHeader.BlockType.BT_INDEX,(()=>{this.tileReader.addSearchTreeBuffer(e,t,r.buffer[0].content),i&&i()}))}recoverIndexInfo(e){let t=Object.keys(this.indexInfoMap).length;if(0!==t)for(const i in this.indexInfoMap)this.addSearchTreeUrl(i,this.indexInfoMap[i],(()=>{t--,0===t&&e&&e()}));else e&&e()}recoverNodeInfo(){this.batchedMeshManager.recoverNodeInfo(),this.instancedMeshManager.recoverNodeInfo()}addNoUserDataMeshNodeInfo(e,t,i){this.batchedMeshManager.addNoUserDataMeshNodeInfo(e,t,i)}addNoUserDataInstanceNodeInfo(e,t,i){this.instancedMeshManager.addNoUserDataInstanceNodeInfo(e,t,i)}patchMeshNodeInfo(e,t,i){this.batchedMeshManager.patchMeshNodeInfo(e,t,i)}patchInstanceNodeInfo(e,t,i){this.instancedMeshManager.patchInstanceNodeInfo(e,t,i)}dealLineMeshVisible(e){this.disableUserData?!0===this.wireFrameVisibilityOption?e.visible=this.isBorderLineVisible():e.visible=!1:this.batchedWireframeManager.dealLineMeshVisible(e)}recoverLineNode(){this.batchedWireframeManager.recoverLineNode(),this.instancedWireframeManager.recoverLineNode()}loadPolygonOutLine(e,t){const i=this,r=this.tileReader,n=r.getIndexByUserId(e);if(void 0===n)return void t(null);const a=r.getPolygonOutLinePathByUserId(n);if(!a)return void t(null);const s=Object.keys(a),o=this.rootUrl,l=[];s.forEach((e=>{const t=new Promise(((t,i)=>{this.loadArrayBufferImmediately(o+e,(function(i){t({buffer:i,polygonType:a[e].polygonType,tileId:a[e].tileId})}),(function(){i()}))}));l.push(t)})),Promise.all(l).then((e=>{i._parsePolygonOutLineBlobs(e,(function(e){const r=[];e.forEach((e=>{const t=i._getPolygonOutLineData(e,n);r.push(t)})),t(r),console.log(JSON.stringify(r))}))})).catch((e=>{console.log(e)}))}_parsePolygonOutLineBlobs(e,t){const i=this.tileReader,r=this.bimTileOutlineBlobParser,n=[],a=this;e.forEach((e=>{const t={buffer:{},contentType:"LINE",contentId:e.tileId,contentTypeBufferOnly:!0,matrix:new THREE.Matrix4,polygonType:e.polygonType,getLineBuffer:function(e){return this.lineBuffer[e]},computeLineNodeCount:function(){},getOutlineContentUrl:function(){}},s=i.getBlockType(t.contentType),o={node:t,type:s},l=new Promise(((n,s)=>{i.parseBlock(e.buffer,o,(()=>{r.parseBlobs(a,t,(function(){n(t)}))}))}));n.push(l)})),Promise.all(n).then((e=>{t(e)})).catch((e=>{console.log(e)}))}_getPolygonOutLineData(e,t){const i=e.geometry,r=e.indexGroups,n=e.matrix,a=i.getIndex().array,s=i.getAttribute("position").array,o=r[t],l=e.polygonType,d=[];return o.forEach((e=>{let t=e.indexStart,i=e.indexStart+e.indexCount;const r=a.slice(t,i);t=e.positionStart,i=e.positionStart+e.positionCount;const o=s.slice(t,i);t/=3,r.forEach((function(e,i,r){r[i]-=t}));const h=this._extractPolygonOutLinePositions(l,o,r,n);d.push(h)})),d}_extractPolygonOutLinePositions(e,t,i,r){const n=[];let a=new THREE.Vector3,s=new THREE.Vector3;for(let e=0,o=i.length-1;e<o;e+=2){const o=i[e],l=i[e+1];a.fromArray(t,3*o),s.fromArray(t,3*l),a.applyMatrix4(r),s.applyMatrix4(r),n.push({x:a.x,y:a.y,z:a.z}),n.push({x:s.x,y:s.y,z:s.z})}return n}getSelectionMeshId(){this.selectionMeshIdSet={};const e=this.sceneState.getSelectionSet();for(const t in e){const e=this.tileReader.getIndexByUserId(t),i=this.tileReader.getDescriptor().getAllNodeInfos()[e];i&&i.map((e=>{this.selectionMeshIdSet[e.parent]=!0}))}return this.selectionMeshIdSet}getLastSelectionMeshId(){return this.lastSelectionMeshIdSet=Object.assign(this.selectionMeshIdSet),this.lastSelectionMeshIdSet}clearSelectionMeshId(){this.selectionMeshIdSet={}}},function(){let e=new THREE.Box3,t=new THREE.Vector3,i=new THREE.Vector3;class n extends r.AbstractTileset{constructor(e){super(e=r.Utils.defaultValue(e,{})),this._loader=e.loader,this._errorCoefficient=e.errorCoefficient,this.enableBorderLine=!0===e.enableBorderLine,this.disableUserData=e.disableUserData,this.materialManager=e.materialManager,this.geoErrScaleFactor=1,this.conditions=[],this._nodeManager=new r.BimTileNodeManager,this._geometryManager=new r.BimTileGeometryManager,this._boundingBox=new THREE.Box3}destroy(){super.destroy(),this._loader=void 0,this.geoErrScaleFactor=void 0,this._geometryManager=null,this._nodeManager=null}get geometryManager(){return this._geometryManager}_clearDrawableOfTiles(){if(this._objectGroup){this._objectGroup.children.forEach((e=>{e.children.forEach((e=>{e.visible=!1}))}))}this.debugShowGeometricErrorHelper&&this.debugShowGeometricErrorHelper.hideAll()}loadChildrenOfTile(e,t,i){}_getEncodedTileNodeId(e){const t=`${e.getAbsoluteContentUrl()}_root`;return r.Utils.getEncodedString(t)}isCloneChildrenOnly(e){if(!e.contentTypeTile)return!1;const t=this._getEncodedTileNodeId(e);return!!this._nodeManager.getNode(t)}cloneChildrenOfTile(e){const t=this._getEncodedTileNodeId(e),i=this._nodeManager.getNode(t);return!!i&&(this._cloneChildTiles(this,i,e),!0)}createChildrenOfTile(e,t){const i=this._loader,n=e.getAbsoluteContentUrl(),a=n.slice(0,n.lastIndexOf("/")+1),s=this.createTile(a,t.context,e);if(s.nodeId=this._getEncodedTileNodeId(e),this._nodeManager.addNode(s),s._childrenState=r.TileContentState.READY,s.localIndexList.length>0){const e=s.localIndexList.length;for(let t=0;t<e;++t){const e=s.localIndexList[t];i.addSearchTree(e.url,e.box)}}}createTile(e,t,i){if(!t.root||!t.root.boundingVolume)return;t.properties&&(t.root.properties=t.properties);const r=this._createNewTile(this,i,t.root,e);return r.build(),r}_createNewTile(e,t,i,n){return new r.BimTileNode(e,t,i,n)}loadUserIdResources(e){var t=this._loader,i=t.tileReader;t.loadUserIdResources(this.root,(()=>{i.createNodeInfoMap(),i.createTileIdMap(),e&&e()}))}loadTileset(e,t,i){var n=this,a=this._loader,s=a.tileReader;a.loadJsonImmediately(e,(function(i){var o=e.slice(0,e.lastIndexOf("/")+1),l=n.createTile(o,i);l._childrenState=r.TileContentState.READY,s.parseSchemaProperties(i.properties,o),a.rootUrl=o;let d=1;a.loadGlobalResources(l).then((()=>{n.root=l,n._boundingBox.union(l.boundingBox),!0===n.disableUserData?p():n.loadUserIdResources((()=>{p()}))}));const h=a.loadInstanceResources(n);h&&(d++,h.then((e=>{l.childrenTree.push(e),l.geometricError<e.geometricError&&(l.geometricError=e.geometricError),n._boundingBox.union(e.boundingBox),p()})).catch((e=>{console.log(e)})));const c=a.loadLodResources(n);c&&(d++,c.then((e=>{l.childrenTree.push(e),l.geometricError<e.geometricError&&(l.geometricError=e.geometricError),n._boundingBox.union(e.boundingBox),p()})).catch((e=>{console.log(e)})));const u=a.loadVisibilityResources(n);function p(){d--,0===d&&t(n)}u&&(d++,u.then((e=>{l.childrenTree.push(e),l.geometricError<e.geometricError&&(l.geometricError=e.geometricError),n._boundingBox.union(e.boundingBox),p()})).catch((e=>{console.log(e)})))}),(function(){i(n)}))}preUpdate(e){this.ready&&this.processTiles(e)}isCheckChildrenPassSSE(){return!0}resetGeometryOwner(){this._geometryManager&&this._geometryManager.resetGeometryOwner()}getMaxGeoErrNode(e){var t=null,i=-1;for(var r of e)r.geometricError>i&&(i=r.geometricError,t=r);return t}updateFrameState(e){e.transformMatrix=this._transformMatrix,e.maximumScreenSpaceError=this.maximumScreenSpaceError,e.geoErrScaleFactor=this.geoErrScaleFactor}updateGlobalMatrix(e){this._objectGroup.matrix.copy(e),this._objectGroup.matrix.multiplyMatrices(e,this._transformMatrix),this._objectGroup.matrixAutoUpdate=!1,this._objectGroup.updateMatrixWorld(!0)}updateHomePositionWorld(r){const n=e.copy(this.root.boundingBox).applyMatrix4(r.transformMatrix).applyMatrix4(r.globalMatrix),a=n.getSize(i),s=Math.max(a.x,a.y,a.z);n.getCenter(t).sub(new THREE.Vector3(s,-s,-s)),r.cameraPositionWc=t.applyMatrix4(r.globalInverseMatrix)}updateMaximumScreenSpaceError(e){this.updateHomePositionWorld(e),e.geoErrScaleFactor=this.geoErrScaleFactor,this.maximumScreenSpaceError=this.maximumScreenSpaceError*this._errorCoefficient}setMaximumScreenSpaceError(e){this.maximumScreenSpaceError=e}getMaximumScreenSpaceError(){return this.maximumScreenSpaceError}getGeoErrScaleFactor(){return this.geoErrScaleFactor}setGeoErrScaleFactor(e){this.geoErrScaleFactor=e}statisticsMeshInformation(){var e={meshCount:0,visibleCount:0},t=this._objectGroup.children;e.meshCount=t.length;for(var i=0,n=t.length;i<n;i++){var a=t[i];r.Utils.isGroupObject(a)&&a.visible&&e.visibleCount++}return e}explode(){let e=this._selectedTiles;for(let t=0,i=e.length;t<i;t++)e[t].explode()}updateOnDemandConditions(e){this.onDemandManager.updateOnDemandConditions(e)}unloadTile(e){super.unloadTile(e),r.Utils.defined(this.geometryManager)&&this.geometryManager.removeGeometryById(e.nodeId)}_createNewTileset(){return new n}clone(e,t){r.Utils.defined(e)||(e=this._createNewTileset()),super.clone(e),e._errorCoefficient=this.errorCoefficient,e.sseThreshold=this.sseThreshold,e.geoErrScaleFactor=this.geoErrScaleFactor,e._loader=t,e._loader.rootUrl=this._loader.rootUrl,e._nodeManager=this._nodeManager,e._geometryManager=this._geometryManager;const i=this._root.clone(e,void 0);return e._root=i,this._cloneChildTiles(e,this._root,i),this._loader.tileReader.clone(e._loader.tileReader),e._loader.tileReader.createNodeInfoMap(),e._loader.pbfNodeInfoMap=this._loader.pbfNodeInfoMap,e}_cloneChildTiles(e,t,i){const n=t.childrenTree;n.length&&(i._childrenState=r.TileContentState.READY,n.forEach((t=>{const r=t.clone(e,i);this._cloneChildTiles(e,t,r)})))}debugShowGeometricError(e){this._debugShowGeometricError=e}needLoadChildrenOfTile(e){return void 0!==e.detailLevel&&e.detailLevel<=2?e.childrenUnload&&e.contentReady:e.childrenUnload}traverseContentAvailableNode(e){let t=i=>{i.childrenTree.forEach((i=>{!0===i.contentAvailable&&e&&e(i),t(i)}))};t(this._root)}traverseContentReadyNode(e){let t=i=>{i.childrenTree.forEach((i=>{!0===i.contentReady&&e&&e(i),t(i)}))};t(this._root)}getRootGeoErrDistance(e){return e*this.root.geometricError/this.maximumScreenSpaceError}_createTraversalController(){this._traversalController=new r.BimTilesetTraversal}updateTiles(e){let t=!1;const i=this.statistics,r=this._selectedTiles;for(let n=0,a=r.length;n<a;++n){let a=r[n];a.update(e),t=a.needsLoading||t,i.incrementSelectionCount(a.content),++i.selected}this.debugShowStatistics(e),t&&e.afterRenderFns.push((function(){}))}isOutlineEnabled(){return this._loader.isBorderLineVisible()}}r.BimTileset=n}(),r.BimTileOnDemandManager=class{constructor(e,t){this.model=e,this._filter=e.filter,this._onDemand=e._onDemand,this._hasLayerInfo=e._hasLayerInfo,this._idMap={},this.demandCount=0}destroy(){this._filter.destroy(),this._filter=null,this._onDemand=void 0,this._hasLayerInfo=void 0,this._conditions=null,this._idMap=null,this.demandCount=void 0}updateOnDemandConditions(e){this._conditions=void 0===e?[]:e,this._conditions=e,this.demandCount++}onDemandJudgment(e){if(!1===this._onDemand)return!1;if(!0===this._onDemand&&!1===this._hasLayerInfo)return!0;if(0===Object.keys(e.layerInfo).length)return!1;const t=this._conditions.length;let i=!0;for(let r=0;r<t;++r){const t=this._conditions[r];let n=!0;for(let i in t)if(e.layerInfo[i]&&t[i]!==e.layerInfo[i]){n=!1;break}n&&(i=!1)}return i}instanceApply(e){if(e.demandCount===this.demandCount)return;const t=e.userIndexMap,i=this.model.getDescriptor().getInstancedNodeInfos();this._filter._updateInstanceDemandMaterial(e,t,i),e.demandCount=this.demandCount}get onDemand(){return this._onDemand}set onDemand(e){this._onDemand=e}get hasLayerInfo(){return this._hasLayerInfo}set hasLayerInfo(e){this._hasLayerInfo=e}get conditions(){return this._conditions}set conditions(e){this._conditions=e}get idMap(){return this._idMap}},function(){class e extends r.FilterManager{constructor(e){super(),this.model=e,this.mergedMeshesStates={},this.blinkMaterials={},this.idCacheMap=new Map,this.stateChangedRenderer=r.EnumChangedState.START,this.stateWireFrameChangedRenderer=r.EnumChangedState.START}destroy(){this.mergedMeshesStates=null,this.blinkMaterials=null,super.destroy(),this.model=null}pushBack(e){super.pushBack(e),this.enableStateChanged()}_parseIds(e){let t=[];const i=e.length;for(let r=0;r<i;++r){const i=e[r],n=this.model.tilesLoader.tileReader.getIndexByUserId(i);void 0!==n&&t.push(n)}return t}_parseIndexIds(e){let t=[];const i=e.length;for(let r=0;r<i;++r){const i=e[r],n=this.model.getRealUserId(i);t.push(n)}return t}_parseConditions(e){let t=[];const i=e.length;for(let r=0;r<i;++r){const i=e[r],n={};for(const e in i){const t=this.model.tilesLoader.tileReader.getUserDataIndexMapByString(e,i[e]);t&&(n[t.key]=t.value)}t.push(n)}return t}hideAll(){super.hideAll(),this.enableWireFrameStateChanged()}showAll(){super.showAll(),this.enableWireFrameStateChanged()}hideByIds(e){const t=this._parseIds(e);super.hideByIds(t),this.enableWireFrameStateChanged()}hideByConditions(e){const t=this._parseConditions(e);super.hideByConditions(t),this.enableWireFrameStateChanged()}hideOthersByConditions(e){const t=this._parseConditions(e);super.hideOthersByConditions(t),this.enableWireFrameStateChanged()}getMatchIndexes(e){const t=this._parseConditions(e);return super.getMatchIds(t)}getMatchIds(e){return this._parseIndexIds(this.getMatchIndexes(e))}addToFrozenList(e){const t=this._parseIds(e);super.addToFrozenList(t)}removeFromFrozenList(e){const t=this._parseIds(e);super.removeFromFrozenList(t)}setFrozenList(e){const t=this._parseIds(e);super.setFrozenList(t)}setFrozenConditions(e){const t=this._parseConditions(e);super.setFrozenConditions(t)}getFrozenConditions(){return super.getFrozenConditions()}addToIdList(e,t){const i=this._parseIds(t);super.addToIdList(e,i)}setIdList(e,t){const i=this._parseIds(t);super.setIdList(e,i)}removeFromIdList(e,t){const i=this._parseIds(t);super.removeFromIdList(e,i)}addToOverrideList(e,t,i){const r=this._parseIds(t);super.addToOverrideList(e,r,i)}removeFromOverrideList(e,t){const i=this._parseIds(t);super.removeFromOverrideList(e,i)}setOverrideList(e,t,i){const r=this._parseIds(t);super.setOverrideList(e,r,i)}addToOverrideListByColor(e,t){const i=this._parseIds(e);super.addToOverrideListByColor(i,t)}addToOverrideListByConditions(e,t){const i=this._parseConditions(e);super.addToOverrideListByConditions(i,t)}addToOverrideListByMaterial(e,t){const i=this._parseConditions(e);super.addToOverrideListByMaterial(i,t)}addToOverrideListByMaterialAndId(e,t){const i=this._parseIds(e);super.addToOverrideListByMaterialAndId(i,t)}setOverrideListByColor(e,t,i){const r=this._parseIds(t);super.setOverrideListByColor(e,r,i)}addToOpacityListByConditions(e,t){const i=this._parseConditions(e),r=this;this.getObjectInfoManager().matchConditions(i,((e,i)=>{if(i){for(var n in this.enableStateChanged(),e){var a=e[n];e[n]=r.model.tilesLoader.tileReader.getUserIdByIndex(a)}t(e,i)}}))}removeOpacityListByConditions(e,t){const i=this._parseConditions(e);this.getObjectInfoManager().matchConditions(i,((e,i)=>{if(i){for(var r in this.enableStateChanged(),e){var n=e[r];e[r]=scope.model.tilesLoader.tileReader.getUserIdByIndex(n)}t(e,i)}}))}addToLocalClippingList(e,t,i,r){super.addToLocalClippingList(e,t,i,r),this.enableWireFrameStateChanged()}addToLocalClippingListByConditions(e,t){const i=this._parseConditions(e);this.getObjectInfoManager().matchConditions(i,((e,i)=>{if(i){for(var r in this.enableStateChanged(),this.enableWireFrameStateChanged(),e){var n=this.model.tilesLoader.tileReader.getUserIdByIndex(e[r]);e[r]=n}t(e,i)}}))}addToOverrideListForWireFrameByColor(e,t){const i=this._parseIds(e);super.addToOverrideListForWireFrameByColor(i,t),this.decreaseStateChanged(),this.enableWireFrameStateChanged()}addToOverrideListForWireFrameByConditions(e,t){const i=this._parseConditions(e);super.addToOverrideListForWireFrameByConditions(i,t),this.decreaseStateChanged(),this.enableWireFrameStateChanged()}addToIsolateList(e,t){const i=this._parseIds(e);super.addToIsolateList(i,t),"HideOthers"==t&&this.enableWireFrameStateChanged()}removeFromIsolateList(e,t){const i=this._parseIds(e);super.removeFromIsolateList(i,t)}setIsolateList(e,t){const i=this._parseIds(e);super.setIsolateList(i,t)}removeFromIsolateList(e,t){const i=this._parseIds(t);super.removeFromIsolateList(e,i)}setIsolateConditions(e,t){const i=this._parseConditions(e);super.setIsolateConditions(i,t)}getIsolateConditions(){super.getIsolateConditions()}setConditions(e,t){const i=this._parseConditions(t);super.setConditions(e,i)}getConditions(){super.getConditions()}showByIds(e){const t=this._parseIds(e);super.showByIds(t)}showByConditions(e){const t=this._parseConditions(e);super.showByConditions(t)}makeTranslucentByIds(e){const t=this._parseIds(e);super.makeTranslucentByIds(t)}makeTranslucentByConditions(e){const t=this._parseConditions(e);super.makeTranslucentByConditions(t)}makeTranslucentOthersByIds(e){const t=this._parseIds(e);super.makeTranslucentOthersByIds(t)}opaqueAll(){super.opaqueAll()}opaqueByIds(e){const t=this._parseIds(e);super.opaqueByIds(t)}opaqueByConditions(e){const t=this._parseConditions(e);super.opaqueByConditions(t)}deactivateByIds(e){const t=this._parseIds(e);this.objectInfoManager.deactivateByIds(t),this.observerForSceneState&&this.observerForSceneState(e)}getInactivatedIdMap(){if(!0===this.objectInfoManager.bIsInactivateAll)return{all:!0};let e={};const t=this._parseIndexIds(this.objectInfoManager.inactivatedIds);return 0===t.length?{}:(t.map((t=>{e[t]=!0})),e)}isComponentUserIndexActive(e){return super.isComponentActive(e)}isComponentActive(e){const t=this.model.tilesLoader.tileReader.getIndexByUserId(e);return super.isComponentActive(t)}_isPickable(e){const t=e.userId;return this.isComponentUserIndexActive(t)&&!this.objectInfoManager.isFrozen(t)}getBlinkMaterials(){let e=[];for(const t in this.blinkMaterials){const i=this.blinkMaterials[t];for(const t in i)e.push(i[t])}return e}_updateFilterManager(){let e={};e[this.model.id]=this.model.getAllNodeInfos(),this.model.getAllNodeInfos()!=={}&&this.reinitFilterManager(e)}resetWireFrameNodeStates(e){e.traverse((e=>{if("LineSegmentsEx"!==e.type)return;e.material=[e.material[0]];let t=e.geometry;t.clearGroups(),t._visible=!0,t.addGroup(0,t.index.count,r.Model.EnumFilterState.NONE)}))}resetStandardNodeStates(e){e.traverse((e=>{if("MeshEx"!==e.type&&"LineSegmentsEx"!==e.type)return;e.material=[e.material[0]];let t=e.geometry;t.clearGroups(),t._visible=!0,t.addGroup(0,t.index.count,r.Model.EnumFilterState.NONE)}))}_needsUpdate(e){return 0!==e.blinkUserIdSetObject.size||0!==e.hoverUserIdSetObject.size||0!==e.localClipUserIdSetObject.size||0!==e.modifyOpacityUserIdSetObject.size||0!==e.hiddenUserIdSetObject.size||0!==e.overrideUserIdSetObject.size||0!==e.transparentUserIdSetObject.size}_needsWireFrameUpdate(e){return 0!==e.hiddenUserIdSetObject.size||0!==e.overrideWireFrameUserIdSetObject.size||0!==e.hiddenWireFrameUserIdSetObject.size||0!==e.localClipUserIdSetObject.size}releaseObject(e){e.blinkUserIdSetObject=null,e.hoverUserIdSetObject=null,e.modifyOpacityUserIdSetObject=null,e.overrideUserIdSetObject=null,e.transparentUserIdSetObject=null,e.stateChangedRenderer=this.stateChangedRenderer}releaseWireFrameObject(e){e.overrideWireFrameUserIdSetObject=null,e.hiddenUserIdSetObject=null,e.localClipUserIdSetObject=null,e.hiddenWireFrameUserIdSetObject=null,e.stateWireFrameChangedRenderer=this.stateWireFrameChangedRenderer,e.forceUpdateWireFrame=!1}standardApply(e){if(this.stateChangedRenderer===e.stateChangedRenderer)return;const t=e._content.meshes,i=e.userIndexMap,r=this.model.getDescriptor().getStandardNodeInfos();if(this._collectBlinkUserIds(e,i),this._collectHoverUserIds(e,i),this._collectLocalClipUserIds(e,i),this._collectModifyOpacityUserIds(e,i),this._collectFilteredUserIds(e,i,r),!this._needsUpdate(e))return this.resetStandardNodeStates(t),void this.releaseObject(e);this.resetStandardNodeStates(t),this.rebuildIndices(e,r),this.releaseObject(e)}wireFrameStandardApply(e){if(e.isOutlineLoading())return;if(!1===e.forceUpdateWireFrame&&this.stateWireFrameChangedRenderer===e.stateWireFrameChangedRenderer)return;const t=e._content._outlineContent.outlineMeshes,i=e.userIndexMap,r=this.model.getDescriptor().getStandardNodeInfos();if(this._collectWireFrameFilteredUserIds(e,i,r),!this._needsWireFrameUpdate(e))return this.resetWireFrameNodeStates(t),void this.releaseWireFrameObject(e);this.resetWireFrameNodeStates(t),this.rebuildWireFrameIndices(e,r),this.releaseWireFrameObject(e)}instanceApply(e){if(this.stateChangedRenderer===e.stateChangedRenderer)return;const t=e._content.meshes,i=e.userIndexMap,r=this.model.getDescriptor().getInstancedNodeInfos();if(this._collectBlinkUserIds(e,i),this._collectHoverUserIds(e,i),this._collectLocalClipUserIds(e,i),this._collectModifyOpacityUserIds(e,i),this._collectFilteredUserIds(e,i,r),!this._needsUpdate(e))return this.resetInstanceMaterial(t),void this.releaseObject(e);this.resetInstanceMaterial(t),this._updateInstanceMaterial(e,r),this.releaseObject(e)}wireFrameInstanceApply(e){if(e.isOutlineLoading())return;if(!1===e.forceUpdateWireFrame&&this.stateWireFrameChangedRenderer===e.stateWireFrameChangedRenderer)return;const t=e.userIndexMap,i=this.model.getDescriptor().getInstancedNodeInfos(),r=e._content._outlineContent.outlineMeshes;if(this._collectWireFrameFilteredUserIds(e,t,i),!this._needsWireFrameUpdate(e))return this.resetInstanceMaterial(r),void this.releaseWireFrameObject(e);this.resetInstanceWireFrameMaterial(r),this._updateInstanceWireFrameMaterial(e,i),this.releaseWireFrameObject(e)}_isEqual(e,t){if(void 0===t)return!1;if(Object.getOwnPropertyNames(e).length!==Object.getOwnPropertyNames(t).length)return!1;for(const i in e)if(e[i]!==t[i])return!1;return!0}apply(){}traverseInstanceGeometryMap(e,t){e.traverse((e=>{"MeshEx"===e.type&&t(e.geometry)}))}traverseInstanceLineGeometryMap(e,t){e.traverse((e=>{"LineSegmentsEx"===e.type&&t(e.geometry)}))}resetInstanceMaterial(e){var t=this.model.localClippingMode?r.EnumInstanceState.CLIPPING:r.EnumInstanceState.NONE;this.traverseInstanceGeometryMap(e,(e=>{e.getAttribute("vState").array.fill(r.EnumInstanceState.NONE),e.getAttribute("vState").needsUpdate=!0,e.getAttribute("vClipping").array.fill(t),e.getAttribute("vClipping").needsUpdate=!0,e.getAttribute("vState2").array.fill(r.EnumInstanceState.HIDDEN),e.getAttribute("vState2").needsUpdate=!0}))}resetInstanceWireFrameMaterial(e){this.traverseInstanceLineGeometryMap(e,(e=>{e.getAttribute("vState").array.fill(r.EnumInstanceState.NONE),e.getAttribute("vState").needsUpdate=!0}))}_updateInstanceMaterial(e,t){for(const i of e.hiddenUserIdSetObject.keys())this._dealHideUserIndex(i,t);for(const i of e.localClipUserIdSetObject.keys()){const e=t[i];if(!e)continue;const n=e.length;for(let t=0;t<n;++t){const i=e[t],n=i.index,a=this.model.tilesLoader.getInstanceMeshNodeById(i.parent);for(const e in a){const t=a[e].mesh;if(r.TilesUtil.isInstanceNodeInVisible(t))continue;if(!t||!1===t.visible)continue;const i=r.MaterialUtil.getColorParamsByMaterial(t.material[0]),s=r.EnumInstanceState.CLIPPING;this.updateInstanceGeometry(t,i,s,n)}}}for(const i of e.transparentUserIdSetObject.keys()){const e=t[i];if(!e)continue;const n=this.model.sceneState.frozonMaterial,a=r.MaterialUtil.getColorParamsByMaterial(n),s=r.EnumInstanceState.OVERRIDED;this.updateInstanceGeometryByNodeInfos(e,a,s)}for(const n of e.overrideUserIdSetObject.keys()){const a=t[n];if(!a)continue;const s=a.length;for(let t=0;t<s;++t){const s=a[t],o=s.index,l=this.model.tilesLoader.getInstanceMeshNodeById(s.parent),d=e.overrideUserIdSetObject&&e.overrideUserIdSetObject.get(n);var i;for(const t in l){const a=l[t].mesh;if(r.TilesUtil.isInstanceNodeInVisible(a))continue;let s=1;-1!==d.indexOf("material_modifyOpacity")?(s=e.modifyOpacityUserIdSetObject.get(n).opacity,i=this.getMaterialForModifyOpacityFrom(a.material[0],s)):(i=this._getMaterialByName(d),e.modifyOpacityUserIdSetObject&&e.modifyOpacityUserIdSetObject.get(n)&&(s=e.modifyOpacityUserIdSetObject.get(n).opacity,i=this.getMaterialForModifyOpacityFrom(i,s))),i.srcOpacity=s,this.model.materialManager.materialMap[d]=i;const h=r.MaterialUtil.getColorParamsByMaterial(i),c=r.EnumInstanceState.OVERRIDED;this.updateInstanceGeometry(a,h,c,o)}}}for(const i of e.hoverUserIdSetObject.keys()){const e=t[i];if(!e)continue;const n=e.length;for(let t=0;t<n;++t){const i=e[t],n=i.index,a=this.model.tilesLoader.getInstanceMeshNodeById(i.parent);for(const e in a){const t=a[e].mesh;if(r.TilesUtil.isInstanceNodeInVisible(t))continue;const i=this.model.sceneState.getHoverMaterial(t.material[0]),s=r.MaterialUtil.getColorParamsByMaterial(i),o=r.EnumInstanceState.HOVER;this.updateInstanceGeometry(t,s,o,n)}}}for(const i of e.blinkUserIdSetObject.keys()){const a=t[i];if(!a)continue;const s=a.length;for(let t=0;t<s;++t){const s=a[t],o=s.index,l=this.model.tilesLoader.getInstanceMeshNodeById(s.parent);for(const t in l){const a=l[t].mesh;if(r.TilesUtil.isInstanceNodeInVisible(a))continue;if(!a||!1===a.visible)continue;const s=r.MaterialUtil.getColorParamsByMaterial(a.material[0]),d=r.EnumInstanceState.BLINK;var n=this.getBlinkMaterialName(i,e.blinkUserIdSetObject.get(i));null==this.blinkMaterials[n]&&(this.blinkMaterials[n]={}),null==this.blinkMaterials[n][a.material[0].uuid]&&(this.blinkMaterials[n][a.material[0].uuid]=a.material[0]),this.updateInstanceGeometry(a,s,d,o)}}}}updateInstanceGeometry(e,t,i,n){const a=e.material[0]||e.material,s=t.rgbaColor;let o,l;a.transparent===t.transparent?(o=i,l=r.EnumInstanceState.HIDDEN):(o=r.EnumInstanceState.HIDDEN,l=i),void 0===e.material[0]&&(o=i,s.a>.999&&(a.transparent=!0,s.a=.999));let d=e.geometry;if(d.getAttribute("vState").array[n]=o,d.getAttribute("vState").needsUpdate=!0,void 0!==d.getAttribute("vState2")&&(d.getAttribute("vState2").array[n]=l),void 0!==d.getAttribute("vState2")&&(d.getAttribute("vState2").needsUpdate=!0),d.getAttribute("aColor").array[4*n]=s[0],d.getAttribute("aColor").array[4*n+1]=s[1],d.getAttribute("aColor").array[4*n+2]=s[2],d.getAttribute("aColor").array[4*n+3]=s[3],d.getAttribute("aColor").needsUpdate=!0,i==r.EnumInstanceState.CLIPPING){if(void 0!==d.getAttribute("vClipping")&&(d.getAttribute("vClipping").array[n]=i),void 0!==d.getAttribute("vClipping")&&(d.getAttribute("vClipping").needsUpdate=!0),e.material instanceof Array)return this.addInstanceMaterialForClip(e.material[0].uuid,e.material[0]),void this.addInstanceMaterialForClip(e.material[1].uuid,e.material[1]);this.addInstanceMaterialForClip(e.material.uuid,e.material)}if(e.material instanceof Array)return e.material[0].needsUpdate=!0,void(e.material[1].needsUpdate=!0);e.material.needsUpdate=!0}updateInstanceGeometryByNodeInfos(e,t,i){const n=e.length;for(let a=0;a<n;++a){const n=e[a],s=n.index,o=this.model.tilesLoader.getInstanceMeshNodeById(n.parent);for(const e in o){const n=o[e].mesh;r.TilesUtil.isInstanceNodeInVisible(n)||this.updateInstanceGeometry(n,t,i,s)}}}_updateInstanceWireFrameMaterial(e,t){for(const i of e.hiddenUserIdSetObject.keys()){const e=t[i];if(!e)continue;const n=e.length;for(let t=0;t<n;++t){const i=e[t],n=i.lineId,a=i.index,s=this.model.tilesLoader.getInstanceLineNodeById(n);if(r.TilesUtil.isInstanceNodeInVisible(s))continue;let o=s.geometry;o.getAttribute("vState").array[a]=r.EnumInstanceState.HIDDEN,o.getAttribute("vState").needsUpdate=!0}}for(const i of e.hiddenWireFrameUserIdSetObject.keys()){const e=t[i];if(!e)continue;const n=e.length;for(let t=0;t<n;++t){const i=e[t],n=i.lineId,a=i.index,s=this.model.tilesLoader.getInstanceLineNodeById(n);if(r.TilesUtil.isInstanceNodeInVisible(s))continue;let o=s.geometry;o.getAttribute("vState").array[a]=r.EnumInstanceState.HIDDEN,o.getAttribute("vState").needsUpdate=!0}}for(const i of e.overrideWireFrameUserIdSetObject.keys()){const n=t[i];if(!n)continue;const a=e.overrideWireFrameUserIdSetObject.get(i),s=this._getMaterialByName(a);if(-1!==a.indexOf("material_modifyOpacity"))continue;const o=r.MaterialUtil.getColorParamsByMaterial(s),l=r.EnumInstanceState.OVERRIDED;this.updateInstanceWireFrameGeometryByNodeInfos(n,o,l)}}updateInstanceWireFrameGeometryByNodeInfos(e,t,i){const n=e.length;for(let a=0;a<n;++a){const n=e[a],s=n.lineId,o=this.model.tilesLoader.getInstanceLineNodeById(s);r.TilesUtil.isInstanceNodeInVisible(o)||this.updateInstanceGeometry(o,t,i,n.index)}}resetAllStates(){treeNode._content.meshes.traverse((e=>{if(e.isMesh){let e=mesh.geometry;e.clearGroups(),e._visible=!0,e.addGroup(0,mesh.indexCount,r.Model.EnumFilterState.NONE)}}))}isHidden(e){const t=this.model.tilesLoader.tileReader.getIndexByUserId(e);return this.objectInfoManager.isHidden(t)}isFrozen(e){const t=this.model.tilesLoader.tileReader.getIndexByUserId(e);return this.objectInfoManager.isFrozen(t)}isTransparent(e){const t=this.model.tilesLoader.tileReader.getIndexByUserId(e);return this.objectInfoManager.isTransparent(t)}isPickable(e){return super.isComponentActive(e)&&!this.objectInfoManager.isFrozen(e)&&!this.objectInfoManager.isHidden(e)}_insertIndexMeshes(e,t,i,r,n){void 0===e.mergedMeshesStates[t]?(e.mergedMeshesStates[t]={},e.mergedMeshesStates[t][i]={},e.mergedMeshesStates[t][i].state=r,e.mergedMeshesStates[t][i].userId=n):void 0===e.mergedMeshesStates[t][i]&&(e.mergedMeshesStates[t][i]={},e.mergedMeshesStates[t][i].state=r,e.mergedMeshesStates[t][i].userId=n)}_collectLineMeshState(e,t,i){for(const r of t.keys()){const t=this.model.tilesLoader.userIdMapIndices[r];t&&t.map((t=>{const n=t.indexId,a=t.meshId;-1!==a.indexOf("line")&&this._insertIndexMeshes(e,a,n,i,r)}))}}_collectLineCategoryMeshState(e,t,i,n){for(let a in e.userIndexMap){const s=this.model.tilesLoader.userIdMapIndices[a];if(!s)continue;const o=s.length;for(let l=0;l<o;++l){const o=s[l],d=o.indexId,h=o.meshId;if(-1===h.indexOf("line"))continue;const c=i[a];if(!c)continue;c[0].userData;r.TilesUtil.matchWireFrameVisibilityOption(a,t)||this._insertIndexMeshes(e,h,d,n,a)}}}_collectMeshState(e,t,i){for(const r of t.keys()){const t=this.model.tilesLoader.userIdMapIndices[r];t&&t.map((t=>{const n=t.indexId,a=t.meshId;this._insertIndexMeshes(e,a,n,i,r)}))}}_collectMeshState2(e,t,i){for(const r in t){const t=this.model.tilesLoader.userIdMapIndices[r];t&&t.map((t=>{const n=t.indexId,a=t.meshId;this._insertIndexMeshes(e,a,n,i,r)}))}}rebuildWireFrameIndices(e,t){e.mergedMeshesStates={},this._collectLineMeshState(e,e.hiddenUserIdSetObject,r.Model.EnumFilterState.HIDDEN),this._collectLineMeshState(e,e.hiddenWireFrameUserIdSetObject,r.Model.EnumFilterState.HIDDEN),this._collectLineMeshState(e,e.overrideWireFrameUserIdSetObject,r.Model.EnumFilterState.OVERRIDED),this._collectLineMeshState(e,e.localClipUserIdSetObject,r.Model.EnumFilterState.LOCALCLIPPING);const i=e._content._outlineContent.outlineMeshes;for(const t in e.mergedMeshesStates){let r=i.getObjectByName(t);r&&this.rebuildMesh(r,t,e,[])}}rebuildIndices(e,t){e.mergedMeshesStates={},this._collectMeshState(e,e.hiddenUserIdSetObject,r.Model.EnumFilterState.HIDDEN),this._collectLineCategoryMeshState(e,this.model.tilesLoader.wireFrameVisibilityOption,t,r.Model.EnumFilterState.HIDDEN),this._collectMeshState(e,e.overrideUserIdSetObject,r.Model.EnumFilterState.OVERRIDED),this._collectMeshState(e,e.transparentUserIdSetObject,r.Model.EnumFilterState.TRANSPARENT),this._collectMeshState(e,e.hoverUserIdSetObject,r.Model.EnumFilterState.HOVER),this._collectMeshState(e,e.blinkUserIdSetObject,r.Model.EnumFilterState.BLINK),this._collectMeshState2(e,this.model.mapClippingIds,r.Model.EnumFilterState.CLIPPING),this._collectMeshState(e,e.localClipUserIdSetObject,r.Model.EnumFilterState.LOCALCLIPPING);const i=this.model.sceneState.getHoverMaterial(),n=this.model.sceneState.frozonMaterial,a=[];a[r.Model.EnumFilterState.HOVER]=i,a[r.Model.EnumFilterState.TRANSPARENT]=n;const s=e._content.meshes;for(const t in e.mergedMeshesStates){let i=s.getObjectByName(t);i&&this.rebuildMesh(i,t,e,a)}}rebuildMesh(e,t,i,n){if(!e)return;let a=(e,t,i,n,a)=>{let s,o=null,l=t,d=0,h=!1;switch(t>r.Model.EnumFilterState.OVERRIDED&&(t=r.Model.EnumFilterState.OVERRIDED,n.overrideUserIdSetObject.get(i)||(t=r.Model.EnumFilterState.BLINK)),t){case r.Model.EnumFilterState.NONE:case r.Model.EnumFilterState.CLIPPING:break;case r.Model.EnumFilterState.HOVER:o=this.model.sceneState.getHoverMaterial(e.material[0]),e.material[r.Model.EnumFilterState.HOVER]=o;break;case r.Model.EnumFilterState.BLINK:s=this.getBlinkMaterialName(i,n.blinkUserIdSetObject.get(i)),null==this.blinkMaterials[s]?(this.blinkMaterials[s]={},o=this.model.sceneState.getBlinkMaterial(e.material[0],`${this.model.id}_${s}`),this.blinkMaterials[s][s]=o,o.name=s):null==this.blinkMaterials[s][s]?(o=this.model.sceneState.getBlinkMaterial(e.material[0],`${this.model.id}_${s}`),this.blinkMaterials[s][s]=o,o.name=s):o=this.blinkMaterials[s][s],n.localClipUserIdSetObject&&n.localClipUserIdSetObject.get(i)&&(o=this.getMaterialForClipFrom(o),this.blinkMaterials[s]=o),d=Math.max(e.material.length,t),h=!1;for(let i=t;i<d;++i)e.material[i]&&s===e.material[i].name&&(h=!0,l=i);if(!1===h){let t=d;d===r.Model.EnumFilterState.BLINK+1&&(t=r.Model.EnumFilterState.OVERRIDED+1),e.material[t]=o,l=t}break;case r.Model.EnumFilterState.OVERRIDED:s=n.overrideUserIdSetObject&&n.overrideUserIdSetObject.get(i);let c=1;e.name.indexOf("line")>-1&&n.overrideWireFrameUserIdSetObject&&n.overrideWireFrameUserIdSetObject.get(i)&&(s=n.overrideWireFrameUserIdSetObject.get(i)),-1!==s.indexOf("material_modifyOpacity")?(c=n.modifyOpacityUserIdSetObject.get(i).opacity,o=this.getMaterialForModifyOpacityFrom(e.material[0],c),!e.material[0].useCompressedColor||"cloudStandard"!==o.type&&"IBLMaterial"!==o.type||(o.defines.CCOLOR="",o.useCompressedColor=!0)):(o=this._getMaterialByName(s),n.modifyOpacityUserIdSetObject&&n.modifyOpacityUserIdSetObject.get(i)&&(c=n.modifyOpacityUserIdSetObject.get(i).opacity,o=this.getMaterialForModifyOpacityFrom(o,c))),o.srcOpacity=c,this.model.materialManager.materialMap[s]=o,n.localClipUserIdSetObject&&n.localClipUserIdSetObject.get(i)&&(o=this.getMaterialForClipFrom(o)),o.side=e.material[0].side,!e.material[0].useCompressedNormal||"cloudStandard"!==o.type&&"IBLMaterial"!==o.type||(o.defines.CNORMAL="",o.useCompressedNormal=!0),r.Utils.isDefined(e.material[0].useCompressedUv)&&e.material[0].useCompressedUv&&"cloudStandard"===o.type&&(o.uvCenter=e.material[0].uvCenter,o.uvHalfExtent=e.material[0].uvHalfExtent,o.defines.USE_COMPRESS_UV="",o.useCompressedUv=!0),d=Math.max(e.material.length,t),h=!1;for(let i=t;i<d;++i)s===e.material[i].name&&(h=!0,l=i);!1===h&&(e.material[d]=o,l=d);break;case r.Model.EnumFilterState.LOCALCLIPPING:o=this.getMaterialForClipFrom(e.material[0]),e.material[r.Model.EnumFilterState.LOCALCLIPPING]=o;break;default:a[t]&&(e.material[t]=a[t])}return l};const s=i.mergedMeshesStates[t];let o=e.geometry;o.clearGroups(),o._visible=!0;const l=e.indexGroups;let d=0;const h=r.TilesUtil.nodeIndexGroupsSort(l),c=h.length;let u=h[0].indexGroup.indexCount,p=r.Model.EnumFilterState.NONE;if(s[0]&&s[0].state!==r.Model.EnumFilterState.NONE){p=s[0].state;p=a(e,p,s[0].userId,i,n)}for(let t=1;t<c;++t){const l=h[t].indexGroup;if(s[t]){const r=s[t].userId,h=a(e,s[t].state,r,i,n);h===p?u+=l.indexCount:(o.addGroup(d,u,p),p=h,d=l.indexStart,u=l.indexCount)}else if(p===r.Model.EnumFilterState.NONE)u+=l.indexCount;else{o.addGroup(d,u,p);a(e,p,s[t-1].userId,i,n),p=r.Model.EnumFilterState.NONE,d=l.indexStart,u=l.indexCount}}if(u>0&&p!==r.Model.EnumFilterState.HIDDEN){const t=a(e,p,s[c-1]&&s[c-1].userId,i,n);o.addGroup(d,u,t)}}_collectSelectUserIds(e,t){if(e.selectUserIdSetObject=new Map,this.model.sceneState.selectionSet&&this.model.sceneState.selectionSet[this.model.id]){const r=this.model.sceneState.selectionSet[this.model.id];for(var i in r){const r=this.model.tilesLoader.tileReader.getIndexByUserId(i);t[r]&&e.selectUserIdSetObject.set(r.toString(),!0)}}}_collectHoverUserIds(e,t){if(e.hoverUserIdSetObject=new Map,this.model.sceneState.hoverId){const i=this.model.tilesLoader.tileReader.getIndexByUserId(this.model.sceneState.hoverId);t[i]&&e.hoverUserIdSetObject.set(i.toString(),!0)}}_collectBlinkUserIds(e,t){e.blinkUserIdSetObject=new Map;var i=this.model.sceneState.getBlinkComponentsIdMap(this.model.id);for(var r in i){var n;this.idCacheMap.get(r)?n=this.idCacheMap.get(r):(n=this.model.tilesLoader.tileReader.getIndexByUserId(r),this.idCacheMap.set(r,n)),t[n]&&e.blinkUserIdSetObject.set(n.toString(),i[r])}}_collectLocalClipUserIds(e,t){e.localClipUserIdSetObject=new Map;var i=this.getLocalClippingList();for(var r in i){var n;this.idCacheMap.get(r)?n=this.idCacheMap.get(r):(n=this.model.tilesLoader.tileReader.getIndexByUserId(r),this.idCacheMap.set(r,n)),t[n]&&e.localClipUserIdSetObject.set(n.toString(),!0)}}_collectModifyOpacityUserIds(e,t){e.modifyOpacityUserIdSetObject=new Map;var i=this.getModifyOpacityList();for(var r in i){var n;this.idCacheMap.get(r)?n=this.idCacheMap.get(r):(n=this.model.tilesLoader.tileReader.getIndexByUserId(r),this.idCacheMap.set(r,n)),t[n]&&e.modifyOpacityUserIdSetObject.set(n.toString(),i[r])}}getBlinkMaterialName(e,t){var i=e.toString();return t&&(t.color&&(i+="|"+t.color.getHEX()),t.interval&&(i+="|"+t.interval.toString())),i}_collectWireFrameFilteredUserIds(e,t,i){const n=this._hasOverrideMaterialFilterForWireFrame(),a=this.model.tilesLoader.wireFrameVisibilityOption,s=!0!==a;if(e.hiddenUserIdSetObject||(e.hiddenUserIdSetObject=new Map),e.localClipUserIdSetObject||(e.localClipUserIdSetObject=new Map),e.hiddenWireFrameUserIdSetObject=new Map,e.overrideWireFrameUserIdSetObject=new Map,!n&&!s)return!1;for(const i in t){if(!this._hasOverrideMaterialForWireFrame({name:i}))continue;const t=this._getOverrideMaterialForWireFrame({name:i});e.overrideWireFrameUserIdSetObject.set(i,t.name)}for(const i in t)r.TilesUtil.matchWireFrameVisibilityOption(i,a)||e.hiddenWireFrameUserIdSetObject.set(i,!0);return!0}_collectFilteredUserIds(e,t,i){const n=this._hasHiddenFileIdFilter(),a=this._hasVisibleFilter()||this.model.hasHiddenSourceObjectUserId(),s=this._hasOverrideMaterialFilter(),o=this._hasTransparentFilter(),l=e.blinkUserIdSetObject.size>0,d=this._hasLocalClipping(),h=this._hasModifyOpacityList();let c=this.mapMaterialIdToUserIdsForFilter={};if(e.hiddenUserIdSetObject=new Map,e.overrideUserIdSetObject=new Map,e.transparentUserIdSetObject=new Map,n||a||s||o||l||d||h)for(const m in t){const t=i[m];if(!t||0===t.length)continue;const f=t.length;for(let i=0;i<f;i++){const f=t[i];if(n&&this._isHiddenFileId(f)||a&&!1===this._isVisible(f)||this.model.isHiddenSourceObjectUserId(m))void 0===c[f.materialId]&&(c[f.materialId]={}),void 0===c[f.materialId][r.Model.EnumFilterState.HIDDEN]&&(c[f.materialId][r.Model.EnumFilterState.HIDDEN]={}),c[f.materialId][r.Model.EnumFilterState.HIDDEN][m]=!0,e.hiddenUserIdSetObject.set(m,!0);else if(d&&e.localClipUserIdSetObject.get(m)&&(void 0===c[f.materialId]&&(c[f.materialId]={}),void 0===c[f.materialId][r.Model.EnumFilterState.LOCALCLIPPING]&&(c[f.materialId][r.Model.EnumFilterState.LOCALCLIPPING]={}),c[f.materialId][r.Model.EnumFilterState.LOCALCLIPPING][m]=!0),o&&this._isTransparent(f))void 0===c[f.materialId]&&(c[f.materialId]={}),void 0===c[f.materialId][r.Model.EnumFilterState.TRANSPARENT]&&(c[f.materialId][r.Model.EnumFilterState.TRANSPARENT]={}),c[f.materialId][r.Model.EnumFilterState.TRANSPARENT][m]=!0,e.transparentUserIdSetObject.set(m,!0);else if(l&&e.blinkUserIdSetObject.get(m))void 0===c[f.materialId]&&(c[f.materialId]={}),void 0===c[f.materialId][r.Model.EnumFilterState.BLINK]&&(c[f.materialId][r.Model.EnumFilterState.BLINK]={}),c[f.materialId][r.Model.EnumFilterState.BLINK][m]=!0;else if(s&&this._hasOverrideMaterial(f)){var u=this._getOverrideMaterial(f);""!==(p=null!=u?u.name:"")&&(void 0===c[f.materialId]&&(c[f.materialId]={}),void 0===c[f.materialId][r.Model.EnumFilterState.OVERRIDED]&&(c[f.materialId][r.Model.EnumFilterState.OVERRIDED]={}),c[f.materialId][r.Model.EnumFilterState.OVERRIDED][m]=p,e.overrideUserIdSetObject.set(m,p))}else if(h&&e.modifyOpacityUserIdSetObject.get(m)){var p=`material_modifyOpacity_${e.modifyOpacityUserIdSetObject.get(m).opacity}`;e.overrideUserIdSetObject.set(m,p)}else;}}}_dealHideUserIndex(e,t){const i=t[e];if(!i)return;const n=i.length;for(let e=0;e<n;++e){const t=i[e],n=t.index,a=this.model.tilesLoader.getInstanceMeshNodeById(t.parent);for(const e in a){const t=a[e].mesh;if(r.TilesUtil.isInstanceNodeInVisible(t))continue;let i=t.geometry;i.getAttribute("vState").array[n]=r.EnumInstanceState.HIDDEN,i.getAttribute("vState").needsUpdate=!0,i.getAttribute("vState2").array[n]=r.EnumInstanceState.HIDDEN,i.getAttribute("vState2").needsUpdate=!0}}}_updateInstanceDemandMaterial(e,t,i){const r=this.model.onDemandManager.idMap;for(let e in t)r[e]||this._dealHideUserIndex(e,i)}decreaseStateChanged(){this.stateChangedRenderer--}enableStateChanged(){this.stateChangedRenderer++,this.stateChangedRenderer>r.EnumChangedState.END&&(this.stateChangedRenderer=r.EnumChangedState.START)}enableWireFrameStateChanged(){this.stateWireFrameChangedRenderer++,this.stateWireFrameChangedRenderer>r.EnumChangedState.END&&(this.stateWireFrameChangedRenderer=r.EnumChangedState.START)}}r.BimTileFilterManager=e}(),function(){function e(e,t){return t._distance-e._distance}class t extends r.TilesetTraversal{constructor(){super()}traverseTiles(e,t,i){const r=this.traversalStack;for(r.push(t);r.length>0;){const t=r.pop(),n=t.refineReplace,a=!t.parent||t.parent._refines;let s=!1;if(this.updateTileContentLinksToAncestor(t,i),e._isAvailableDetailLevel(t)){if(e._fetchChildrenOfTile(t,i),e.onDemandJudgment(t))continue;e._canBeTraverse(t,i)&&(s=this.subdivideTile(e,t,i),s=s&&a)}if(n){const r=!s&&a;e._addTileToRequestedQueue(t,i),r&&t.passSSE(i)&&e._addTileToSelectedQueue(t,i)}else e._addTileToRequestedQueue(t,i),t.passSSE(i)&&e._addTileToSelectedQueue(t,i);e.visitTile(t,i),e.touchTile(t,i),t._refines=s}}subdivideTile(t,i,r){const n=this.traversalStack,a=i.childrenTree;if(a.forEach((e=>{t.updateTile(e,r)})),a.sort(e),t.isCheckChildrenPassSSE()&&!t.anyChildrenPassSSE(i,r))return!1;const s=i.refineReplace&&!i.contentTypeEmpty;let o=!0,l=!1;return a.forEach((e=>{if(e.visible?(n.push(e),l=!0):s&&(t._addTileToRequestedQueue(e,r),t.visitTile(e,r),t.touchTile(e,r)),!s)return;const i=e.contentTypeEmpty?this.traverseTileWithEmptyContent(t,e,r):e.contentAvailable;o=o&&i})),l||(o=!1),o}traverseTileWithEmptyContent(e,t,i){this.traversalDescendants.length=0;const r=this.emptyTraversalStack;r.push(t);let n=!0;for(;r.length>0;){const t=r.pop();if(t.contentTypeEmpty){if(!t.childrenReady){e._fetchChildrenOfTile(t,i),n=!1;break}if(t.contentTypeTile&&!t.hasChildren()){n=!1;break}let a=e._canBeTraverse(t,i);if(a){const n=t.childrenTree;n.forEach((t=>{e.updateTile(t,i),t.visible||(e._addTileToRequestedQueue(t,i),e.visitTile(t,i),e.touchTile(t,i))})),t.refineReplace&&(e.isCheckChildrenPassSSE()&&(e.anyChildrenPassSSE(t,i)||(a=!1)),a&&n.forEach((e=>{r.push(e)})))}}else if(!t.contentAvailable){n=!1;break}}return n}}r.BimTilesetTraversal=t}(),function(){class e extends r.BimTileContent{constructor(e,t){super(e,t)}}r.StandardTileContent=e}(),function(){class e extends r.BimTileNode{constructor(e,t,i,r){super(e,t,i,r)}createContent(e){return this.isTilesetContent?new r.TileTilesetContent(this,e):new r.StandardTileContent(this,e)}_createNewTile(e,t,i,n){return new r.StandardTile(e,t,i,n)}}r.StandardTile=e}(),function(){class e extends r.BimTileset{constructor(e){super(e)}_canBeTraverse(e,t){return!!e.hasChildren()&&(!!e.contentTypeEmpty||e.passSSE(t))}_createNewTileset(){return new e}_createNewTile(e,t,i,n){return new r.StandardTile(e,t,i,n)}_createTraversalController(){this._traversalController=new r.TilesetTraversal}isCheckChildrenPassSSE(){return!1}}r.StandardTileset=e}(),function(){class e extends r.BimTilesModel{constructor(e,t,i,r,n,a){super(e,t,i,r,n,a)}_createNewTileset(e){return new r.StandardTileset(e)}_createNewModel(t,i,r){return e(t,i,r)}}r.StandardTilesModel=e}(),function(){class e extends r.BimTileFilterManager{constructor(e){super(e)}standardApply(e){if(this.stateChangedRenderer===e.stateChangedRenderer)return;e._content.meshes.traverse((e=>{if("MeshEx"!==e.type)return;const t=e.geometry,i=t.groups[0].start,n=t.groups[0].count;if(t.clearGroups(),t._visible=!0,!0===this.objectInfoManager.hasLocalClipping){const a=this.getMaterialForClipFrom(e.material[0]);e.material[r.Model.EnumFilterState.BLINK]=a,t.addGroup(i,n,r.Model.EnumFilterState.BLINK)}else t.addGroup(i,n,r.Model.EnumFilterState.NONE)})),e.stateChangedRenderer=this.stateChangedRenderer;const t=this.model.viewer.getScene();let i=r.ClipPlaneManager.getInstance(t);i.isEnabled()&&i.update()}addToLocalClippingListByConditions(e){0===e.length&&this.addToLocalClippingList()}addToLocalClippingList(){this.objectInfoManager.activeLocalClipping(),this.enableStateChanged()}clearLocalClippingList(){super.clearLocalClippingList()}}r.StandardTilesFilterManager=e}(),function(){class e extends THREE.BufferGeometry{constructor(e,t=64,i=1,r=8,n=!1){super(),this.type="TubeGeometry",this.parameters={path:e,tubularSegments:t,radius:i,radialSegments:r,closed:n};let a=[];t<2&&(a.push(0),a.push(1));for(let e=0;e<=t-2;e++){if(1==e||e==t-2){const t=1==e?.01:.99;a.push(t)}if(t-2==1){const t=1==e?.01:.99;a.push(t)}const i=e/(t-2);a.push(i)}const s=function(e,t,i){const r=new THREE.Vector3,n=[],s=[],o=[],l=new THREE.Vector3,d=new THREE.Matrix4;for(let i=0;i<=t;i++){let t=e.getTangentAt(a[i],new THREE.Vector3);t.normalize(),n.push(t)}s[0]=new THREE.Vector3,o[0]=new THREE.Vector3;let h=Number.MAX_VALUE;const c=Math.abs(n[0].x),u=Math.abs(n[0].y),p=Math.abs(n[0].z);c<=h&&(h=c,r.set(1,0,0));u<=h&&(h=u,r.set(0,1,0));p<=h&&r.set(0,0,1);l.crossVectors(n[0],r).normalize(),s[0].crossVectors(n[0],l),o[0].crossVectors(n[0],s[0]);for(let e=1;e<=t;e++){if(s[e]=s[e-1].clone(),o[e]=o[e-1].clone(),l.crossVectors(n[e-1],n[e]),l.length()>Number.EPSILON){l.normalize();const t=Math.acos(THREE.MathUtils.clamp(n[e-1].dot(n[e]),-1,1));s[e].applyMatrix4(d.makeRotationAxis(l,t))}o[e].crossVectors(n[e],s[e])}if(!0===i){let e=Math.acos(THREE.MathUtils.clamp(s[0].dot(s[t]),-1,1));e/=t,n[0].dot(l.crossVectors(s[0],s[t]))>0&&(e=-e);for(let i=1;i<=t;i++)s[i].applyMatrix4(d.makeRotationAxis(n[i],e*i)),o[i].crossVectors(n[i],s[i])}return{tangents:n,normals:s,binormals:o}}(e,t,n);this.tangents=s.tangents,this.normals=s.normals,this.binormals=s.binormals;const o=new THREE.Vector3,l=new THREE.Vector3,d=new THREE.Vector2;let h=new THREE.Vector3;const c=[],u=[],p=[],m=[];function f(t){h=e.getPointAt(a[t],h);const n=s.normals[t],d=s.binormals[t];for(let e=0;e<=r;e++){const t=e/r*Math.PI*2,a=Math.sin(t),s=-Math.cos(t);l.x=s*n.x+a*d.x,l.y=s*n.y+a*d.y,l.z=s*n.z+a*d.z,l.normalize(),u.push(l.x,l.y,l.z),o.x=h.x+i*l.x,o.y=h.y+i*l.y,o.z=h.z+i*l.z,c.push(o.x,o.y,o.z)}}!function(){for(let e=0;e<t;e++)f(e);f(!1===n?t:0),function(){for(let e=0;e<=t;e++)for(let t=0;t<=r;t++)d.x=a[e],d.y=t/r,p.push(d.x,d.y)}(),function(){for(let e=1;e<=t;e++)for(let t=1;t<=r;t++){const i=(r+1)*(e-1)+(t-1),n=(r+1)*e+(t-1),a=(r+1)*e+t,s=(r+1)*(e-1)+t;m.push(i,n,s),m.push(n,a,s)}}()}(),this.setIndex(m),this.setAttribute("position",new THREE.Float32BufferAttribute(c,3)),this.setAttribute("normal",new THREE.Float32BufferAttribute(u,3)),this.setAttribute("uv",new THREE.Float32BufferAttribute(p,2))}toJSON(){const e=THREE.BufferGeometry.prototype.toJSON.call(this);return e.path=this.parameters.path.toJSON(),e}}r.TubeGeometry=e}(),r.Ground=class{constructor(e){e=r.Utils.defaultValue(e,{}),this._referencePlane=new THREE.Plane,this._elevation=r.Utils.defaultValue(e.elevation,0);const t=r.Utils.defaultValue(e.position,new THREE.Vector3(0,0,0));t.y=this._elevation,this._position=t,this._direction=r.Utils.defaultValue(e.direction,new THREE.Vector3(0,1,0)),this._referencePlane.setFromNormalAndCoplanarPoint(this._direction,this._position),this._scratchInsertPoint=null}get elevation(){return this._elevation}show(){}hide(){}remove(){this._referencePlane=null}update(){}setColor(){}setElevation(e){this._position.y=e,this._elevation=e,this._referencePlane.setFromNormalAndCoplanarPoint(this._direction,this._position)}getElevation(){return this._elevation}intersect(e){return this._scratchInsertPoint||(this._scratchInsertPoint=new THREE.Vector3),e.intersectPlane(this._referencePlane,this._scratchInsertPoint)}},function(){class e extends THREE.MeshBasicMaterial{constructor(e){super(e),this.type="BlinkMeshBasicMaterial";var t=r.Blink.DefaultBlinkColor;this.blinkColor=new THREE.Vector4(t.color.r,t.color.g,t.color.b,t.opacity),this.blinkCoefficient=0,this.uniforms=THREE.UniformsUtils.merge([THREE.ShaderLib.basic.uniforms,{blinkColor:{value:this.blinkColor.clone()},blinkCoefficient:{value:0}}]),this.vertexShader=THREE.ShaderLib.basic.vertexShader,this.fragmentShader=this._getFragmentShader(THREE.ShaderLib.basic.fragmentShader)}destroy(){this.blinkColor=null,this.uniforms=null,this.dispose()}copy(e){super.copy(e),e.blinkColor&&this.blinkColor.copy(e.blinkColor),e.blinkCoefficient&&(this.blinkCoefficient=e.blinkCoefficient)}setBlinkColor(e){this.blinkColor.fromArray(e.toArray()),this.uniforms.blinkColor.value.copy(this.blinkColor),this.uniforms.blinkCoefficient.value=this.blinkCoefficient}resetBlinkUniformValue(){this.uniforms.blinkColor.value.copy(this.blinkColor),this.uniforms.blinkCoefficient.value=this.blinkCoefficient}updateBlinkUniformValue(e,t,i){this.uniforms.blinkColor.value.copy(t),this.uniforms.blinkCoefficient.value=i}_getFragmentShader(e){var t=e.replace("uniform float opacity;","uniform float opacity;\n uniform vec4 blinkColor;\n uniform float blinkCoefficient;");return t=t.replace("#include <fog_fragment>","\n gl_FragColor = mix(gl_FragColor, blinkColor, blinkCoefficient);\n #include <fog_fragment>")}}class t extends THREE.MeshStandardMaterial{constructor(e){super(e),this.type="BlinkMeshStandardMaterial";var t=r.Blink.DefaultBlinkColor;this.blinkColor=new THREE.Vector4(t.color.r,t.color.g,t.color.b,t.opacity),this.blinkCoefficient=0,this.uniforms=THREE.UniformsUtils.merge([THREE.ShaderLib.basic.uniforms,{blinkColor:{value:this.blinkColor.clone()},blinkCoefficient:{value:0}}]),this.vertexShader=THREE.ShaderLib.standard.vertexShader,this.fragmentShader=this._getFragmentShader(THREE.ShaderLib.standard.fragmentShader)}destroy(){this.blinkColor=null,this.uniforms=null,this.dispose()}copy(e){super.copy(e),e.blinkColor&&this.blinkColor.copy(e.blinkColor),e.blinkCoefficient&&(this.blinkCoefficient=e.blinkCoefficient)}setBlinkColor(e){this.blinkColor.fromArray(e.toArray()),this.uniforms.blinkColor.value.copy(this.blinkColor),this.uniforms.blinkCoefficient.value=this.blinkCoefficient}resetBlinkUniformValue(){this.uniforms.blinkColor.value.copy(this.blinkColor),this.uniforms.blinkCoefficient.value=this.blinkCoefficient}updateBlinkUniformValue(e,t,i){this.uniforms.blinkColor.value.copy(t),this.uniforms.blinkCoefficient.value=i}_getFragmentShader(e){var t=e.replace("uniform float opacity;","uniform float opacity;\n uniform vec4 blinkColor;\n uniform float blinkCoefficient;");return t=t.replace("#include <dithering_fragment>","#include <dithering_fragment>\n gl_FragColor = mix(gl_FragColor, blinkColor, blinkCoefficient);")}}class i extends THREE.MeshPhongMaterial{constructor(e){super(e),this.type="BlinkMeshBasicMaterial";var t=r.Blink.DefaultBlinkColor;this.blinkColor=new THREE.Vector4(t.color.r,t.color.g,t.color.b,t.opacity),this.blinkCoefficient=0,this.uniforms=THREE.UniformsUtils.merge([THREE.ShaderLib.phong.uniforms,{blinkColor:{value:this.blinkColor.clone()},blinkCoefficient:{value:0}}]),this.vertexShader=THREE.ShaderLib.phong.vertexShader,this.fragmentShader=this._getFragmentShader(THREE.ShaderLib.phong.fragmentShader)}destroy(){this.blinkColor=null,this.uniforms=null,this.dispose()}copy(e){super.copy(e),e.blinkColor&&this.blinkColor.copy(e.blinkColor),e.blinkCoefficient&&(this.blinkCoefficient=e.blinkCoefficient)}setBlinkColor(e){this.blinkColor.fromArray(e.toArray()),this.uniforms.blinkColor.value.copy(this.blinkColor),this.uniforms.blinkCoefficient.value=this.blinkCoefficient}resetBlinkUniformValue(){this.uniforms.blinkColor.value.copy(this.blinkColor),this.uniforms.blinkCoefficient.value=this.blinkCoefficient}updateBlinkUniformValue(e,t,i){this.uniforms.blinkColor.value.copy(t),this.uniforms.blinkCoefficient.value=i}_getFragmentShader(e){var t=e.replace("uniform float opacity;","uniform float opacity;\n uniform vec4 blinkColor;\n uniform float blinkCoefficient;");return t=t.replace("#include <dithering_fragment>","#include <dithering_fragment>\n gl_FragColor = mix(gl_FragColor, blinkColor, blinkCoefficient);")}}class n extends THREE.MeshLambertMaterial{constructor(e){super(e),this.type="BlinkMeshBasicMaterial";var t=r.Blink.DefaultBlinkColor;this.blinkColor=new THREE.Vector4(t.color.r,t.color.g,t.color.b,t.opacity),this.blinkCoefficient=0,this.uniforms=THREE.UniformsUtils.merge([THREE.ShaderLib.lambert.uniforms,{blinkColor:{value:this.blinkColor.clone()},blinkCoefficient:{value:0}}]),this.vertexShader=THREE.ShaderLib.lambert.vertexShader,this.fragmentShader=this._getFragmentShader(THREE.ShaderLib.lambert.fragmentShader)}destroy(){this.blinkColor=null,this.uniforms=null,this.dispose()}copy(e){super.copy(e),e.blinkColor&&this.blinkColor.copy(e.blinkColor),e.blinkCoefficient&&(this.blinkCoefficient=e.blinkCoefficient)}setBlinkColor(e){this.blinkColor.fromArray(e.toArray()),this.uniforms.blinkColor.value.copy(this.blinkColor),this.uniforms.blinkCoefficient.value=this.blinkCoefficient}resetBlinkUniformValue(){this.uniforms.blinkColor.value.copy(this.blinkColor),this.uniforms.blinkCoefficient.value=this.blinkCoefficient}updateBlinkUniformValue(e,t,i){this.uniforms.blinkColor.value.copy(t),this.uniforms.blinkCoefficient.value=i}_getFragmentShader(e){var t=e.replace("uniform float opacity;","uniform float opacity;\n uniform vec4 blinkColor;\n uniform float blinkCoefficient;");return t=t.replace("#include <dithering_fragment>","#include <dithering_fragment>\n gl_FragColor = mix(gl_FragColor, blinkColor, blinkCoefficient);")}}class a extends THREE.LineBasicMaterial{constructor(e){super(e),this.type="BlinkLineBasicMaterial";var t=r.Blink.DefaultBlinkColor;this.blinkColor=new THREE.Vector4(t.color.r,t.color.g,t.color.b,t.opacity),this.blinkCoefficient=0,this.uniforms=THREE.UniformsUtils.merge([THREE.ShaderLib.basic.uniforms,{blinkColor:{value:this.blinkColor.clone()},blinkCoefficient:{value:0}}]),this.vertexShader=THREE.ShaderLib.basic.vertexShader,this.fragmentShader=this._getFragmentShader(THREE.ShaderLib.basic.fragmentShader)}destroy(){this.blinkColor=null,this.uniforms=null,this.dispose()}copy(e){super.copy(e),e.blinkColor&&this.blinkColor.copy(e.blinkColor),e.blinkCoefficient&&(this.blinkCoefficient=e.blinkCoefficient)}setBlinkColor(e){this.blinkColor.fromArray(e.toArray()),this.uniforms.blinkColor.value.copy(this.blinkColor),this.uniforms.blinkCoefficient.value=this.blinkCoefficient}resetBlinkUniformValue(){this.uniforms.blinkColor.value.copy(this.blinkColor),this.uniforms.blinkCoefficient.value=this.blinkCoefficient}updateBlinkUniformValue(e,t,i){this.uniforms.blinkColor.value.copy(t),this.uniforms.blinkCoefficient.value=i}_getFragmentShader(e){var t=e.replace("uniform float opacity;","uniform float opacity;\n uniform vec4 blinkColor;\n uniform float blinkCoefficient;");return t=t.replace("#include <fog_fragment>","\n gl_FragColor = mix(gl_FragColor, blinkColor, blinkCoefficient);\n #include <fog_fragment>")}}class s extends THREE.PointsMaterial{constructor(e){super(e),this.type="BlinkPointsMaterial";var t=r.Blink.DefaultBlinkColor;this.blinkColor=new THREE.Vector4(t.color.r,t.color.g,t.color.b,t.opacity),this.blinkCoefficient=0,this.uniforms=THREE.UniformsUtils.merge([THREE.ShaderLib.points.uniforms,{blinkColor:{value:this.blinkColor.clone()},blinkCoefficient:{value:0}}]),this.vertexShader=THREE.ShaderLib.points.vertexShader,this.fragmentShader=this._getFragmentShader(THREE.ShaderLib.points.fragmentShader)}destroy(){this.blinkColor=null,this.uniforms=null,this.dispose()}copy(e){super.copy(e),e.blinkColor&&this.blinkColor.copy(e.blinkColor),e.blinkCoefficient&&(this.blinkCoefficient=e.blinkCoefficient)}setBlinkColor(e){this.blinkColor.fromArray(e.toArray()),this.uniforms.blinkColor.value.copy(this.blinkColor),this.uniforms.blinkCoefficient.value=this.blinkCoefficient}resetBlinkUniformValue(){this.uniforms.blinkColor.value.copy(this.blinkColor),this.uniforms.blinkCoefficient.value=this.blinkCoefficient}updateBlinkUniformValue(e,t,i){this.uniforms.blinkColor.value.copy(t),this.uniforms.blinkCoefficient.value=i}_getFragmentShader(e){var t=e.replace("uniform float opacity;","uniform float opacity;\n uniform vec4 blinkColor;\n uniform float blinkCoefficient;");return t=t.replace("#include <fog_fragment>","\n gl_FragColor = mix(gl_FragColor, blinkColor, blinkCoefficient);\n #include <fog_fragment>")}}r.Blink=r.Blink||{},r.Blink.MeshBasicMaterial=e,r.Blink.MeshStandardMaterial=t,r.Blink.MeshPhongMaterial=i,r.Blink.MeshLambertMaterial=n,r.Blink.LineBasicMaterial=a,r.Blink.PointsMaterial=s,r.Blink.DefaultBlinkColor={color:(new THREE.Color).setHex(3330982),opacity:1},r.Blink.MaterialFactory={MeshBasicMaterial:function(e){return new r.Blink.MeshBasicMaterial(e)},MeshStandardMaterial:function(e){return new r.Blink.MeshStandardMaterial(e)},MeshPhongMaterial:function(e){return new r.Blink.MeshPhongMaterial(e)},MeshLambertMaterial:function(e){return new r.Blink.MeshLambertMaterial(e)},LineBasicMaterial:function(e){return new r.Blink.LineBasicMaterial(e)},PointsMaterial:function(e){return new r.Blink.PointsMaterial(e)}}}(),(()=>{var e=new THREE.Matrix4;class t extends r.ObjectGroup{constructor(){super(r.ObjectGroupType.AXISGRIDMANAGER,{priority:20}),this.globalSpace=!0,this.materialMap={},this.meshUuidMap={},this.floorHeightMap={},this.gridLineColor="#333333",this.gridBubbleColor="#000000",this.bEnableHover=!0,this.mapAxisTypes={GRIDLINE:"GRIDLINE",GRIDBUBBLE:"GRIDBUBBLE"},this.translateMatrix=new THREE.Matrix4,this.bHasTranslation=!1,this.mapTranslateDelta={},this.mapLinkFloorId={},this.mapFileIdGridjson={},this.mapIntersectAxisLines={},this.modelTransformation=new THREE.Matrix4}getAxisGridState(){var e={},t=this.meshUuidMap,i=[];for(var r in t)if(t.hasOwnProperty(r)){var n=[];for(var a in t[r])if(t[r].hasOwnProperty(a)&&0!==Object.keys(t[r][a]).length){var s={};s.id=a,s.height=this.floorHeightMap[r][a].height,n.push(s)}i.push({fileId:r,floorInfos:n})}var o={};return e.hasOwnProperty("default")?o.fileInfos={fileId:"",floorInfos:e.default}:o.fileInfos=i,o.gridLineColor=this.gridLineColor,o.gridBubbleColor=this.gridBubbleColor,o}addMeshUuidInMap(e,t,i,r){var n=this.meshUuidMap;n.hasOwnProperty(e)||(n[e]={}),n[e].hasOwnProperty(t)||(n[e][t]={}),n[e][t].hasOwnProperty(i)||(n[e][t][i]={}),n[e][t][i][r]=!0}addFloorHeightInMap(e,t,i){var r=this.floorHeightMap;r.hasOwnProperty(e)||(r[e]={}),r[e].hasOwnProperty(t)||(r[e][t]={});var n=e+"_"+t;r[e][t]={height:i,translation:this.mapTranslateDelta[n]}}removeFloorHeightInMap(e,t){var i=this.floorHeightMap;i.hasOwnProperty(e)&&i[e].hasOwnProperty(t)&&delete i[e][t]}addLinesNode(e,t,i,n,a,s){var o=new THREE.BufferGeometry;o.setAttribute("position",new THREE.Float32BufferAttribute(e,3));var l=new THREE.Line(o,t);l.renderOrder=r.EnumRenderOrder.Effect,l.name=s,this.add(l),this.addMeshUuidInMap(i,n,a,l.uuid),this.updateMatrixWorld(!0)}getLabelCanvas(e,t="#000000"){const i=document.createElement("canvas"),n=i.getContext("2d"),a='16px -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",SimSun,sans-serif';n.font=a;const s=n.measureText(e),{width:o,actualBoundingBoxAscent:l}=s,d=Math.max(r.MaterialUtil.nextHighestPowerOfTwo(o),r.MaterialUtil.nextHighestPowerOfTwo(l));return i.width=d,i.height=d,n.font=a,n.fillStyle=t,n.fillText(e,(d-o)/2,(d+l)/2),{canvas:i,size:d}}addLabelNodes(e,t,i,n,a){const{canvas:s,size:o}=this.getLabelCanvas(e.name),l=new THREE.CanvasTexture(s);e.label.positions.forEach((s=>{const d={...s,z:a||0},h=this.translate(t,i,d),c=new r.PointsMaterial({sizeAttribute:!0,map:l,depthTest:!0,alphaTest:.001,transparent:!0}),u=new Float32Array(3),p=new Float32Array(1),m=new Boolean(1);h.toArray(u,0),p[0]=o,m[0]=!1;const f=new THREE.BufferGeometry;f.setAttribute("position",new THREE.BufferAttribute(u,3)),f.setAttribute("attrSize",new THREE.BufferAttribute(p,1)),f.setAttribute("attrHoverAnimation",new THREE.BufferAttribute(m,1));const g=new r.PointsEx(f,c);g.name=`${this.mapAxisTypes.GRIDBUBBLE}_${e.name}`,this.add(g),g.matrixAutoUpdate=!1,g.updateMatrixWorld(!0),this.addMeshUuidInMap(t,i,n,g.uuid),this.updateMatrixWorld(!0)}))}createMaterial(e,t){return this.materialMap.hasOwnProperty(e)||(this.materialMap[e]={}),this.materialMap[e][t.color]||("string"!=typeof t.color&&(t.color="#"+t.color.getHEX()),this.materialMap[e][t.color]=r.MaterialUtil.createStandardMaterial(t)),this.materialMap[e][t.color]}loadAxisGridsByHeight(e,i,r,n,a){var s=this,o=new THREE.FileLoader;this.axisGridHeight=r,null!=r&&this.addFloorHeightInMap(i,n,r),o.load(e,(function(o){var l=t.adaptGridData(JSON.parse(o));s.gridsJson=l;var d=l.grids.length,h=d;if(d&&d>0){var c=i+"_"+n;s.mapFileIdGridjson[i]||(s.mapFileIdGridjson[i]=l);for(var u=0;u<d;u++){var p=s.mapLinkFloorId[c]||n;if(-1==p.toString().indexOf("_")){var m=l.grids[u].floors;if(null!=m&&-1==m.indexOf(p.toString())){s.floorHeightMap[i][n].hideAxisGridIndex||(s.floorHeightMap[i][n].hideAxisGridIndex=[]),s.floorHeightMap[i][n].hideAxisGridIndex.push(u),0==--h&&a&&a();continue}}s.loadAxisGrid(e,i,u,r,n,(function(){0==--h&&a&&a()}))}}else console.warn("There is no grid on this floor.")}))}unloadAxisGridsByFloor(e,t){var i=this.children,r=this.meshUuidMap;if(r.hasOwnProperty(e)&&r[e].hasOwnProperty(t)){for(var n in r[e][t]){for(var a=r[e][t][n],s=0;s<i.length;){a[i[s].uuid]?i.splice(s,1):s++}delete r[e][t][n]}this.removeFloorHeightInMap(e,t)}}loadAxisGrid(e,i,r,n,a,s){var o=e.split("/");null==n&&(a=o[o.length-1].split(".")[0]);var l=0,d=this.gridsJson;if(r&&r>=0){if(!(r<d.grids.length))return void console.log("Input grid index is invalid.");l=r}const{color:h}=d.grids[l],c=d.grids[l].geometry,u=h||this.gridLineColor,p=this.mapAxisTypes.GRIDLINE,m=this.createMaterial(p,{color:u,side:THREE.DoubleSide}),f=[];c.forEach((e=>{if("Line"===e.lineType)f.push(e.startPoint,e.endPoint);else if("Arc"===e.lineType){const i=t.getArcGridPoints(e);f.push(...i)}e.linePoints=f}));const g=this.prepareLinesBuffer(i,a,f,n);this.addLinesNode(g,m,i,a,l,p),this.addLabelNodes(d.grids[l],i,a,l,n),s&&s()}prepareLinesBuffer(e,t,i,r){const n=[];return i.forEach((i=>{const a={...i};a.z=r||0;const s=this.translate(e,t,a);n.push(...Object.values(s))})),n}unloadAxisGrid(e,t,i){var r=this.children,n=this.meshUuidMap;if(n.hasOwnProperty(e)&&n[e].hasOwnProperty(t)&&n[e][t].hasOwnProperty(i)){for(var a=n[e][t][i],s=0;s<r.length;){a[r[s].uuid]?r.splice(s,1):s++}delete n[e][t][i]}}unloadAllAxisGrids(){var e=this.meshUuidMap;for(var t in e)if(e.hasOwnProperty(t))for(var i in e[t])if(e[t].hasOwnProperty(i)){for(var r in e[t][i])e[t][i].hasOwnProperty(r)&&this.unloadAxisGrid(t,i,r);this.removeFloorHeightInMap(t,i)}}enableDepthTest(e){for(var t=this.children,i=0;i<t.length;i++)t[i].material.depthTest=e}formatHidedAxisGridIndex(e,t,i){e||(e="default");let r=this.floorHeightMap[e]={},n=0;for(const e of t.grids){let t=e.floors;for(const e of i){0==r.hasOwnProperty(e)&&(r[e]={});let i=r[e];-1==t.indexOf(e)&&(0==i.hasOwnProperty("hideAxisGridIndex")&&(i.hideAxisGridIndex=[]),i.hideAxisGridIndex.push(n))}n++}}getHidedAxisGridIndex(e,t){e||(e="default");let i=this.floorHeightMap[e][t];return i.hasOwnProperty("hideAxisGridIndex")?i.hideAxisGridIndex:[]}prepareGridLines(e,t,i){if(e){null==t&&(t=[0,0,0]),this.verticalLines=[],this.horizontalLines=[];var r=e.grids;for(let e=0;e<r.length;e++){if(i&&i.indexOf(e)>=0)continue;let a=r[e].geometry[0];if("Line"!==a.lineType)continue;var n=[0,0,0,0,0,0];n.name=r[e].name;const s=this.modelTransformation.clone(),o=new THREE.Vector3(a.startPoint.x+t[0],a.startPoint.y+t[1],0).applyMatrix4(s),l=new THREE.Vector3(a.endPoint.x+t[0],a.endPoint.y+t[1],0).applyMatrix4(s);n[0]=o.x,n[1]=o.y,n[3]=l.x,n[4]=l.y,Math.abs(a.startPoint.x-a.endPoint.x)<Math.abs(a.startPoint.y-a.endPoint.y)?this.horizontalLines.push(n):this.verticalLines.push(n)}}}getNearestIntersection(e,t){let i={dist:Number.MAX_SAFE_INTEGER,intersect:null};e=new THREE.Vector3(e.x,e.y,e.z);for(const r of this.intersections){let n=r.clone();n.z=t;let a=n.distanceTo(e);a<i.dist&&(i.dist=a,i.intersect=r)}return i}getIntersectLines(e){return this.mapIntersectAxisLines[e]}destroy(){this.mapIntersectAxisLines=null,this.horizontalLines=null,this.verticalLines=null,this.intersections=null,this.floorHeightMap=null,this.mapTranslateDelta=null,this.mapLinkFloorId=null,this.mapFileIdGridjson=null}calculateIntersections(e){var t,i,r,n;null==e&&(e=[0,0,0]),this.intersections=[];var a=this.horizontalLines.length,s=this.verticalLines.length;for(let l=0;l<a;l++){const a=this.horizontalLines[l];a[0]+=e[0],a[1]+=e[1],a[3]+=e[0],a[4]+=e[1],t=new THREE.Vector2(a[0],a[1]),i=new THREE.Vector2(a[3],a[4]);for(let l=0;l<s;l++){const s=this.verticalLines[l];s[0]+=e[0],s[1]+=e[1],s[3]+=e[0],s[4]+=e[1],r=new THREE.Vector2(s[0],s[1]),n=new THREE.Vector2(s[3],s[4]);const d=this.computeSegmentsIntersect(t,i,r,n);if(d){var o=new THREE.Vector3(d.x,d.y,this.axisGridHeight);o.name=a.name+s.name,this.mapIntersectAxisLines.hasOwnProperty(o.name)||(this.mapIntersectAxisLines[o.name]=[]),this.mapIntersectAxisLines[o.name].push(a),this.mapIntersectAxisLines[o.name].push(s),this.intersections.push(o)}}}}getAxisGridHeight(){return this.axisGridHeight}getAxisGridPlane(e){var t=new THREE.Plane;return t.setFromNormalAndCoplanarPoint(new THREE.Vector3(0,0,1),new THREE.Vector3(0,0,e)),t}getAxisGridPlanes(){var e=[],t=this.floorHeightMap;for(var i in t)if(t.hasOwnProperty(i))for(var r in t[i])if(t[i].hasOwnProperty(r)){var n=t[i][r].height,a=t[i][r].translation||[0,0,0];e.push(this.getAxisGridPlane(n+a[2]))}return e}snapOnFloors(e){var t=this.floorHeightMap,i=this.mapFileIdGridjson;if(0==Object.keys(i).length)return[];var r=0,n=[];for(var a in t)if(t.hasOwnProperty(a))for(var s in t[a])if(t[a].hasOwnProperty(s))if(null!=e[r]){var o=t[a][s].height,l=t[a][s].translation||[0,0,0];this.axisGridHeight=o+l[2];var d=t[a][s].hasOwnProperty("hideAxisGridIndex")?t[a][s].hideAxisGridIndex:null;this.prepareGridLines(i[a],l,d),n.push(this.snaping(e[r++],l))}else r++;return n}snaping(e,t){this.calculateIntersections(t);var i={toIntersection:1/0,toGridLine:1/0},r={toIntersection:new THREE.Vector3,toGridLine:new THREE.Vector3};for(let t=0;t<this.intersections.length;t++){let a=this.intersections[t].clone();a.name=this.intersections[t].name;var n=a.distanceTo(e);n<i.toIntersection&&(i.toIntersection=n,r.toIntersection=a)}var a=null,s=0;const o=t=>{const n=new THREE.Line3(new THREE.Vector3(t[0],t[1],this.axisGridHeight),new THREE.Vector3(t[3],t[4],this.axisGridHeight)),o=new THREE.Vector3;n.closestPointToPoint(e,!0,o),(s=new THREE.Line3(e,o).distance())<i.toGridLine&&(i.toGridLine=s,a=t,r.toGridLine=o)};for(let e=0;e<this.horizontalLines.length;e++){o(this.horizontalLines[e])}for(let e=0;e<this.verticalLines.length;e++){o(this.verticalLines[e])}var l={};return l.intersectLines=this.mapIntersectAxisLines[r.toIntersection.name],l.gridLine=a,{point:e,height:this.axisGridHeight,snapLines:l,nearestPoint:r,minDistance:i}}setGridBubblesColor(e){this.gridBubbleColor=e;for(var t=this.children,i=0;i<t.length;i++)if(t[i].name.indexOf(this.mapAxisTypes.GRIDBUBBLE)>=0){const r=t[i].name.slice(t[i].name.lastIndexOf("_")+1),{canvas:n}=this.getLabelCanvas(r,`rgba(${e.red}, ${e.green}, ${e.blue}, ${e.alpha})`),a=new THREE.CanvasTexture(n);t[i].material.map&&t[i].material.map.dispose(),t[i].material.map=a}}getGridBubblesColor(){return this.gridBubbleColor}setGridLinesColor(e){this.gridLineColor=e;for(var t=this.children,i=0;i<t.length;i++)t[i].name==this.mapAxisTypes.GRIDLINE&&(t[i].material.color=new THREE.Color(e.red/255,e.green/255,e.blue/255),t[i].material.alpha=e.alpha)}getGridLinesColor(){return this.gridLineColor}getElements(){return this.children}setIsEnableHover(e){this.bEnableHover=e}getIsEnableHover(){return this.bEnableHover}setTranslation(e,t,i,r,n){var a=e+"_"+t;this.mapTranslateDelta[a]=[i,r,n]}translate(e,t,i){var r=e+"_"+t,n=this.mapTranslateDelta[r],a=new THREE.Vector3(i.x,i.y,i.z);return n&&(this.translateMatrix.makeTranslation(n[0],n[1],n[2]),a.applyMatrix4(this.translateMatrix)),a}setLinkFloorId(e,t,i){var r=e+"_"+t;this.mapLinkFloorId[r]=i}getIntersectPoints(t,i){var r=[];e.copy(i).invert();var n=this.getAxisGridPlanes();for(const a of n){a.applyMatrix4(i);let n=new THREE.Vector3;t.ray.intersectPlane(a,n),n&&n.applyMatrix4(e),r.push(n)}return r}getAxisGridsIntersection(e,t,i){i||"[object Array]"!==Object.prototype.toString.call(t)||(i=t,t=e,e="default");var r=this.computeIntersection(e,i),n=this.floorHeightMap[e][t].height,a={};for(var s in r)for(var o=r[s],l=0;l<o.intersects.length;l++){var d=o.intersects[l];d.intersectPoint.z=n;var h={intersection:d.intersectPoint,axisGrids:d.axisGrids};a[d.name]=h}return Object.values(a)}computeIntersection(e,t){t||"[object Array]"!==Object.prototype.toString.call(e)||(t=e,e="default"),t=t.map((e=>e.toString()));for(var i=this.mapFileIdGridjson[e].grids.filter((e=>t.indexOf(e.name)>=0)),r={},n=0;n<i.length-1;n++){var a,s=i[n];r[s.name]?a=r[s.name].lineSegments:(a=this.getGridLineSegments(s),r[s.name]={lineSegments:a,intersects:[]});for(var o=n+1;o<i.length;o++){var l,d=i[o];r[d.name]?l=r[d.name].lineSegments:(l=this.getGridLineSegments(d),r[d.name]={lineSegments:l,intersects:[]});for(var h=0,c=0;c<a.length;c++)for(var u=a[c],p=0;p<l.length;p++){var m=l[p],f=this.computeSegmentsIntersect(u[0],u[1],m[0],m[1]);f&&(r[s.name].intersects.push({name:`${s.name}_${d.name}_${h}`,axisGrids:[s.name,d.name],intersectPoint:f,segmentNum:c}),r[d.name].intersects.push({name:`${s.name}_${d.name}_${h}`,axisGrids:[s.name,d.name],intersectPoint:f,segmentNum:p}),h++)}}}return r}getPartitionDataByAxisGrids(e,t){t||"[object Array]"!==Object.prototype.toString.call(e)||(t=e,e="default");var i=this.computeIntersection(e,t),r={},n=0;for(u in i){var a=i[u];a.intersects.sort(((e,t)=>{if(e.segmentNum!==t.segmentNum)return e.segmentNum-t.segmentNum;var i=a.lineSegments[e.segmentNum][0],r=e.intersectPoint,n=t.intersectPoint;return(r.x-i.x)*(r.x-i.x)+(r.y-i.y)*(r.y-i.y)-((n.x-i.x)*(n.x-i.x)+(n.y-i.y)*(n.y-i.y))}));for(var s=1;s<a.intersects.length;s++){if((f={origin:a.intersects[s].name,target:a.intersects[s-1].name,id:n++,linePoints:[a.intersects[s].intersectPoint]}).axis=u,a.intersects[s].segmentNum>a.intersects[s-1].segmentNum)for(var o=a.intersects[s].segmentNum;o>a.intersects[s-1].segmentNum;o--)f.linePoints.push(a.lineSegments[o][0]);else if(a.intersects[s].segmentNum<a.intersects[s-1].segmentNum)for(o=a.intersects[s].segmentNum;o<a.intersects[s-1].segmentNum;o++)f.linePoints.push(a.lineSegments[o][1]);f.linePoints.push(a.intersects[s-1].intersectPoint),r[a.intersects[s].name]||(r[a.intersects[s].name]={subLines:[],name:a.intersects[s].name}),r[a.intersects[s].name].subLines.push(f),r[a.intersects[s-1].name]||(r[a.intersects[s-1].name]={subLines:[],name:a.intersects[s-1].name});for(var l={origin:f.target,target:f.origin,id:f.id,axis:f.axis,linePoints:[]},d=f.linePoints.length-1;d>=0;d--)l.linePoints.push(f.linePoints[d]);r[a.intersects[s-1].name].subLines.push(l)}}var h=[],c=e=>{var t=e[e.length-1].subLine;if(!t.used){for(var i,n=t.linePoints,a=n[n.length-1],s=n[n.length-2],o=new THREE.Vector2(s.x-a.x,s.y-a.y),l=r[t.target],d=2*Math.PI,u=0;u<l.subLines.length;u++){var p=l.subLines[u];if(p.id!==t.id){var m=p.linePoints,f=m[0],g=m[1],v=new THREE.Vector2(g.x-f.x,g.y-f.y).angle()-o.angle();v<0&&(v+=2*Math.PI),v>=0&&v<d&&(d=v,i=p)}}if(i)if(e.push({intersect:l,subLine:i,angle:d}),i.target===e[0].subLine.target){var y=0;e.forEach((e=>{e.subLine.used=!0,y+=e.angle||0})),y-(e.length-1)*Math.PI<.001&&h.push(e)}else c(e)}};for(var u in r){var p=r[u],m=p.subLines;for(s=0;s<m.length;s++){var f=m[s];c([{intersect:p,subLine:f}])}}return h}getPartitionByAxisGrids(e,t){t||"[object Array]"!==Object.prototype.toString.call(e)||(t=e,e="default");var i,r=this.getPartitionDataByAxisGrids(e,t);if(1===r.length){var n=r[0].slice(1,r[0].length);(i=[]).push(n[0].subLine.linePoints[0]),n.forEach((e=>{var t=e.subLine.linePoints.slice(1,e.subLine.linePoints.length);i=i.concat(t)}))}else if(r.length>1)for(var a=0;a<r.length;a++){var s=new Set,o=(n=r[a].slice(1,r[a].length),[]);if(o.push(n[0].subLine.linePoints[0]),n.forEach((e=>{s.add(e.subLine.axis);var t=e.subLine.linePoints.slice(1,e.subLine.linePoints.length);o=o.concat(t)})),s.size===t.length){i=o;break}}return i}getGridLineSegments(e){const t=[];return e.geometry.forEach((e=>{if("Line"===e.lineType)t.push([e.startPoint,e.endPoint]);else if("Arc"===e.lineType)for(let i=0;i<e.linePoints.length-1;i++)t.push([e.linePoints[i],e.linePoints[i+1]])})),t}computeSegmentsIntersect(e,t,i,r){var n=(e.x-i.x)*(t.y-i.y)-(e.y-i.y)*(t.x-i.x),a=(e.x-r.x)*(t.y-r.y)-(e.y-r.y)*(t.x-r.x);if(n*a>0)return!1;var s=(i.x-e.x)*(r.y-e.y)-(i.y-e.y)*(r.x-e.x);if(s*((i.x-t.x)*(r.y-t.y)-(i.y-t.y)*(r.x-t.x))>0)return!1;var o=s/(a-n),l=o*(t.x-e.x),d=o*(t.y-e.y);let h=e.x+l,c=e.y+d;const u=this.modelTransformation.clone();return new THREE.Vector3(h,c,0).applyMatrix4(u)}}t.getInstance=function(e,i){return e.axisGridManagerMap||(e.axisGridManagerMap={},e.axisGridEnableHover=!0),e.axisGridManagerMap[i]||(e.axisGridManagerMap[i]=new r.AxisGridManager(e),e.objectGroups.add(e.axisGridManagerMap[i]),t.updateTransformation(e,i)),e.axisGridManagerMap[i]},t.updateTransformation=function(e,t){if(!e.axisGridManagerMap)return;const i=e.axisGridManagerMap[t];if(!i)return;const[r]=e.objectGroups.children.filter((e=>e.name.includes(`|${t}`)));r?i.matrix.copy(r.matrix):i.matrix.copy(e.geometryGroup.matrix),i.matrixAutoUpdate=!1,i.updateMatrixWorld(!0);const n=e.getMatrixGlobal(),a=(new THREE.Matrix4).copy(n).invert();i.modelTransformation=i.matrix.clone().premultiply(a)},t.setEnableHover=function(e,t){e.axisGridManagerMap&&(e.axisGridEnableHover=t)},t.adaptGridData=e=>{let t={grids:[]};return 2!==e.version?e.grids.forEach((e=>{const i={id:e.id,name:e.name,floors:e.floors,geometry:[],label:{positions:[]},color:""};e.gridLines.forEach((e=>{"Circle"!==e.type?i.geometry.push(...e.lines.map((e=>({startPoint:{x:e[0],y:e[1]},endPoint:{x:e[3],y:e[4]},lineType:"Line"})))):i.label.positions.push({x:e.circleCenter[0],y:e.circleCenter[1]})})),t.grids.push(i)})):t={...e},t},t.getArcGridPoints=e=>{const{centerPoint:t,startAngle:i,endAngle:r,radius:n}=e;return new THREE.EllipseCurve(t.x,t.y,n,n,i,r,!1,0).getPoints(50)},t.destroy=function(e){e.axisGridManagerMap=null},r.AxisGridManager=t})();class W extends r.ObjectGroup{constructor(){super(r.ObjectGroupType.CUSTOMPLANE,{priority:20}),this.globalSpace=!0}addPlane(e,t,i,n){var a=new THREE.Vector3;a.addVectors(new THREE.Vector3(e.x,e.y,e.z),new THREE.Vector3(t.x,t.y,t.z)),a.multiplyScalar(.5);var s=new THREE.PlaneBufferGeometry(t.x-e.x,t.y-e.y),o=new THREE.Mesh(s,new THREE.MeshBasicMaterial({side:THREE.DoubleSide,transparent:!0,depthTest:!0}));o.position.copy(a),o.renderOrder=r.EnumRenderOrder.ClipPlane,this.add(o),o.updateMatrixWorld(!0);var l=new THREE.TextureLoader;l.setCrossOrigin("anonymous"),l.load(i,(function(e){o.material.map=e,o.material.needsUpdate=!0,n&&n(o)}))}removePlane(e){e&&this.remove(e)}showPlane(e){e&&(e.visible=!0)}hidePlane(e){e&&(e.visible=!1)}setPlaneOpacity(e,t){e&&(e.material.opacity=t)}}W.getInstance=function(e){return null==e.customPlaneManager&&(e.customPlaneManager=new r.CustomPlaneManager,e.objectGroups.add(e.customPlaneManager),e.customPlaneManager.matrix.copy(e.geometryGroup.matrix),e.customPlaneManager.matrixAutoUpdate=!1,e.customPlaneManager.updateMatrixWorld(!0)),e.customPlaneManager},W.destroy=function(e){e.customPlaneManager=null},r.CustomPlaneManager=W,r.Marker3D=class{constructor(e){this._viewer=e,this._scene=e.getScene(),this._group=null,this._isHidden=!1,this._markersGroup={},this._textures={},this._defaultSize=32,this._defaultColor=16777215,this._textureLoader=new THREE.TextureLoader,this._textureLoader.setCrossOrigin("anonymous"),this.visibleState={}}loadTextures(e){let t=0;const i=e.length;let n=()=>{++t,t>=i&&(this.update(),this._viewer.render())};for(let t=0;t<i;++t){const i=e[t];void 0===this._textures[i]?this._textures[i]=this._textureLoader.load(i,(e=>{e.image=r.MaterialUtil.ensureQuadrate(e.image),n()}),void 0,(()=>{n()})):n()}}unloadTextures(){for(const e in this._textures)this._textures.hasOwnProperty(e)&&delete this._textures[e]}add(e){let t=[];const i=e.length;if(e&&e instanceof Array){for(let r=0;r<i;++r){const i=e[r],n={id:i.id?i.id:THREE.Math.generateUUID(),position:{x:i.position.x,y:i.position.y,z:i.position.z},size:i.size?i.size:this._defaultSize,iconUrl:i.iconUrl?i.iconUrl:null,tooltip:i.tooltip,hoverAnimation:null==i.hoverAnimation||i.hoverAnimation};let a;n.iconUrl?(a=n.iconUrl,t.push(n.iconUrl)):a=""+this._defaultColor,void 0===this._markersGroup[a]&&(this._markersGroup[a]=[]),null==this.visibleState[n.id]&&(this.visibleState[n.id]=!0),this._markersGroup[a].push(n)}this.loadTextures(t)}}remove(e){if(!e)return;const t=e.iconUrl?e.iconUrl:""+this._defaultColor;if(void 0===this._markersGroup[t])return;let i=!1;const r=this._markersGroup[t];for(var n=0,a=r.length;n<a;++n)if(r[n].id===e.id){r.splice(n,1),i=!0;break}i&&this.update()}removeById(e){let t=!1;for(const i in this._markersGroup){if(!this._markersGroup.hasOwnProperty(i))continue;const r=this._markersGroup[i],n=r.length;for(let i=0;i<n;++i)if(r[i].id===e){r.splice(i,1),t=!0;break}}t&&this.update()}getItemById(e){for(const t in this._markersGroup){if(!this._markersGroup.hasOwnProperty(t))continue;const i=this._markersGroup[t],r=i.length;for(let t=0;t<r;++t){const r=i[t];if(r.id===e)return{id:r.id,position:{x:r.position.x,y:r.position.y,z:r.position.z},size:r.size,iconUrl:r.iconUrl,tooltip:r.tooltip,hoverAnimation:r.hoverAnimation}}}return null}getItems(){let e=[];for(const t in this._markersGroup){if(!this._markersGroup.hasOwnProperty(t))continue;const i=this._markersGroup[t],r=i.length;for(let t=0;t<r;++t){const r=i[t];e.push({id:r.id,position:{x:r.position.x,y:r.position.y,z:r.position.z},size:r.size,iconUrl:r.iconUrl,tooltip:r.tooltip,hoverAnimation:r.hoverAnimation})}}return e.length>0?e:null}clear(){this._group&&this._group.clear(),this.unloadTextures();for(const e in this._markersGroup)this._markersGroup.hasOwnProperty(e)&&delete this._markersGroup[e];this.update()}activate(){this.clear()}deactivate(){this.clear(),this._group&&(this._scene.removeObjectGroup(this._group),this._group=null)}show(){this._group&&(this._group.visible=!0),this._isHidden=!1;for(let e in this.visibleState)this.visibleState.hasOwnProperty(e)&&(this.visibleState[e]=!0);this.update()}showByIds(e){if(this._group&&(this._group.visible=!0),this._isHidden=!1,!(e&&e instanceof Array))return;const t=e.length;for(let i=0;i<t;i++)this.visibleState[e[i]]=!0;this.update()}hide(){this._group&&(this._group.visible=!1),this._isHidden=!0;for(const e in this.visibleState)this.visibleState.hasOwnProperty(e)&&(this.visibleState[e]=!1);this.update()}hideByIds(e){if(!(e&&e instanceof Array))return;const t=e.length;for(var i=0;i<t;i++)this.visibleState[e[i]]=!1;this.update()}load(e){this.clear(),this.add(e),this.update()}_createParticle(e,t,i){const n=this._textures[i];let a=[];for(let i=0;i<t;++i){const t=e[i];t.isHideByClustering||this.visibleState[t.id]&&a.push(i)}const s=a.length;let o=new Float32Array(3*s);const l=new Float32Array(s),d=new Boolean(s);let h=new THREE.Vector3,c=0,u=[],p=0;a.map((t=>{const i=e[t];h.set(i.position.x,i.position.y,i.position.z),h.toArray(o,3*p),l[p]=i.size,d[p]=i.hoverAnimation,u.push(i.id),c<i.size&&(c=i.size),p++}));let m=new THREE.BufferGeometry;m.setAttribute("position",new THREE.BufferAttribute(o,3)),m.setAttribute("attrSize",new THREE.BufferAttribute(l,1)),m.setAttribute("attrHoverAnimation",new THREE.BufferAttribute(d,1));const f=new r.PointsMaterial({size:c,sizeAttenuation:!1,positionOffset:!0,sizeAttribute:!0,map:n,depthTest:!0,alphaTest:.001,transparent:!0});f.color.setHex(this._defaultColor);let g=new r.PointsEx(m,f);g.name=i,g.size=c,g.pointIds=u,1==r.GlobalData.IncrementRender?g.renderOrder=r.EnumRenderOrder.Effect:g.renderOrder=r.EnumRenderOrder.BeforeComponent,this._group.add(g),g.matrixAutoUpdate=!1,g.updateMatrixWorld(!0)}update(){if(!this._isHidden){this._group||(this._group=this._scene.getOrCreateObjectGroup(r.ObjectGroupType.MARKER3D,{pickableType:r.PICKABLETYPE.Marker3d,hoverEnabled:!0,priority:2,globalSpace:!0})),this._group.clear();for(const e in this._markersGroup){if(!this._markersGroup.hasOwnProperty(e))continue;const t=this._markersGroup[e],i=t.length;i<1||this._createParticle(t,i,e)}this._group.updateMatrixWorld(!0)}}},function(){class e extends r.Marker3D{constructor(e,t){super(e),this.shpPointId=t}update(){this._group||(this._group=this._scene.getOrCreateObjectGroup(`${r.ObjectGroupType.MARKER3D}|${this.shpPointId}`,{pickableType:r.PICKABLETYPE.Marker3d,hoverEnabled:!0,priority:2,globalSpace:!0})),super.update()}destroy(){this._group&&this._scene.removeObjectGroup(this._group),this._group=null,this._viewer=null,this._scene=null,this._markersGroup=null,this._textures=null,this._textureLoader=null,this.visibleState=null}}r.ShpPointMarker=e}(),r.LabelCollection=class{constructor(e){this.viewer=e,this.scene=e.getScene(),this.labelMap={}}destroy(){this.labelMap=null}addLabel(e){const t={id:e.id?e.id:THREE.Math.generateUUID(),position:{x:e.position.x,y:e.position.y,z:e.position.z},size:e.size?e.size:this.defaultFontSize,text:e.text?e.text:null,fontSize:e.fontSize?e.fontSize:24};if(null!=this.labelMap[t.id])return;this.labelMap[t.id]={},this.labelMap[t.id].info=t;let i=document.createElement("div");i.innerHTML=`<span style='font-size:${t.fontSize}px; color:black;pointer-events:none;'>${e.text}</br></span>`,i.style.display="none",i.style.position="absolute",i.style.pointerEvents="none",this.labelMap[t.id].visible=!0,this.labelMap[t.id].domLabel=i,this.viewer.domElement.parentNode.appendChild(i)}update(){var e=window.innerWidth,t=window.innerHeight;for(const i in this.labelMap){if(!1===this.labelMap[i].visible)continue;let r=this.labelMap[i].info.position;if(r=this.viewer.worldToClient(r),r.x<0||r.y<0||r.x>e||r.y>t)continue;let n=this.labelMap[i].domLabel;n.style.display="block",n.style.right="",n.style.left=r.x.toString()+"px",n.style.bottom="",n.style.top=r.y.toString()+"px"}}removeById(e){this.labelMap[e]&&this.labelMap[e].domLabel&&(this.viewer.domElement.parentNode.removeChild(this.labelMap[e].domLabel),delete this.labelMap[e])}showById(e){this.labelMap[e]&&(this.labelMap[e].visible=!0)}hideById(e){this.labelMap[e]&&(this.labelMap[e].visible=!1,this.labelMap[e].domLabel.style.display="none")}hideAll(){for(const e in this.labelMap)this.hideById(e)}},function(){new THREE.Vector3;r.ClipCapsManager=class{constructor(e){this.viewer=e,this.scene=e.getScene(),this.camera=e.camera,this.modelManager=e.modelManager;let t=e.getRenderer();this.size=new THREE.Vector2,t.getDrawingBufferSize(this.size),this.pixelRatio=t.getPixelRatio(),this.backSceneRenderTarget=new THREE.WebGLRenderTarget(this.size.x,this.size.y,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBAFormat}),this.hatchByMaterialForBox=!1,this.hatchByMaterialForPlane=!1,this.capsScene=new r.Scene,this.capMeshPrepared=!1,this.addedCapPlane=null,this.addedCapBox=null,this.isReverse=!1}render(e){if(0==r.GlobalData.ClippingCapsType||!r.GlobalData.ClippingCaps||this.modelManager.isMeterUnit())return;let t=this.scene,i=this.camera,n=this.viewer;const a=r.ExtrudeBodyManager.getInstance(n)._getAlphaTestNodeGroupVisible();r.ExtrudeBodyManager.getInstance(n)._setAlphaTestNodeGroupVisible(!1);var s=t.getObjectGroup(r.GlobalData.TilePlaneGroupName);s&&(s.preVisible=s.visible,s.visible=!1);const o=t.getObjectGroup(r.ObjectGroupType.CONTACTSHADOW);o&&(o.preVisible=o.visible,o.visible=!1),this._prepareCapScene(),this._renderBackSceneForCaps(e,t,i),e.autoClear&&(e.clear(),e.autoClear=!1),t.fillClipPlane&&t.fillClipPlane.updateCamera(n);var l=e.getContext(),d=e.state;d.buffers.stencil.setTest(!0),d.buffers.stencil.setLocked(!0),d.buffers.stencil.setFunc(l.ALWAYS,1,255),d.buffers.stencil.setOp(l.KEEP,l.KEEP,l.INCR),t.overrideMaterial=t.backMaterial,t.backFrontStencil=!0,e.render(t,i),d.buffers.stencil.setFunc(l.ALWAYS,1,255),d.buffers.stencil.setOp(l.KEEP,l.KEEP,l.DECR),t.overrideMaterial=t.frontMaterial,e.render(t,i),t.backFrontStencil=!1,d.buffers.stencil.setFunc(l.LEQUAL,1,255),d.buffers.stencil.setOp(l.KEEP,l.KEEP,l.KEEP),e.render(this.capsScene,i),d.buffers.stencil.setLocked(!1),d.buffers.stencil.setTest(!1),t.overrideMaterial=null,s&&(s.visible=s.preVisible),o&&(o.visible=o.preVisible),r.ExtrudeBodyManager.getInstance(n)._setAlphaTestNodeGroupVisible(a)}_renderBackSceneForCaps(e,t,i){if(!this.hatchByMaterialForBox&&!this.hatchByMaterialForPlane||0==r.GlobalData.ClippingCapsType)return;this._getBackScene();var n=e.getRenderTarget();let a=this.backSceneRenderTarget;e.setRenderTarget(a),e.clear(),e.render(this.backScene,i),e.setRenderTarget(n)}_getBackScene(){if(this.backScene&&!this.modelManager.isFilterApplied())return;this.backScene||(this.backScene=new THREE.Scene,this.backScene.matrixAutoUpdate=!1),this.backScene.clear();var e=this.modelManager.modelCollection;let t={},i=this;e.traverse((e=>{e.getMeshesForCap(t,"cap"),t[e.id]&&i.backScene.add(t[e.id])})),this.backScene.matrix.copy(this.scene.getMatrixGlobal()),this.backScene.updateMatrixWorld(!0)}setSize(e,t){let i=e*this.pixelRatio,r=t*this.pixelRatio;this.size.x==i&&this.size.y==r||(this.size.set(i,r),this.backSceneRenderTarget.setSize(i,r))}_prepareCapScene(){this.capMeshPrepared||(r.GlobalData.ClippingCapsType==r.EnumClippingCapsTypes.ClipBox?this._initCapBox(this.backSceneRenderTarget.texture,this.size,this.hatchByMaterialForBox):this._initCapPlane(this.backSceneRenderTarget.texture,this.size,this.hatchByMaterialForPlane)),this._createCapStencilMaterials()}_createCapStencilMaterials(){this.scene.backMaterial||(this.scene.backMaterial=new r.ClippingStencilMaterial({color:16711680,colorWrite:!1,depthWrite:!1,side:THREE.BackSide}),this.scene.frontMaterial=new r.ClippingStencilMaterial({color:255,colorWrite:!1,depthWrite:!1,side:THREE.FrontSide}),this.scene.backInstanceMaterial=new r.ClippingStencilMaterial({color:16711680,colorWrite:!1,depthWrite:!1,side:THREE.BackSide}),this.scene.backInstanceMaterial.defines.USE_INSTANCE="",this.scene.frontInstanceMaterial=new r.ClippingStencilMaterial({color:255,colorWrite:!1,depthWrite:!1,side:THREE.FrontSide}),this.scene.frontInstanceMaterial.defines.USE_INSTANCE="")}resetClippingCapsStatus(e){this.capMeshPrepared=!1,r.GlobalData.ClippingCapsType=null==e?r.EnumClippingCapsTypes.None:e,null!==this.addedCapPlane&&(this.capsScene.remove(this.addedCapPlane.lineMesh),this.capsScene.remove(this.addedCapPlane.planeMesh),this.addedCapPlane=null),null!==this.addedCapBox&&(this.capsScene.remove(this.addedCapBox),this.addedCapBox=null),this.scene.getOrCreateObjectGroup(r.ObjectGroupType.CAPSWIREFRAME).clear()}_initCapPlane(){var e=r.FillClipPlaneManager.getInstance(this.scene).initCapsPlane(this.backSceneRenderTarget.texture,this.size,this.hatchByMaterialForPlane);this.capsScene.add(e.lineMesh),this.capsScene.add(e.planeMesh),this.addedCapPlane=e,this.capMeshPrepared=!0}_initCapBox(){var e=r.ClipPlaneManager.getInstance(this.scene).initCapsBox(this.backSceneRenderTarget.texture,this.size,this.hatchByMaterialForBox);this.capsScene.add(e),this.addedCapBox=e,this.capMeshPrepared=!0}dispose(){this.viewer=null,this.scene=null,this.camera=null,this.modelManager=null,this.backSceneRenderTarget=null,this.capsScene=null,this.addedCapPlane=null,this.addedCapBox=null}_updateMaterial(e){this.viewer.modelManager.modelCollection.traverse((t=>{t.updateMaterialsValue("useForCap",e)}))}enableHatchByMaterial(e,t){t?this.hatchByMaterialForBox=e:this.hatchByMaterialForPlane=e,t&&this.addedCapBox&&(e?(this.addedCapBox.children[0].visible=!1,this.addedCapBox.children[1].material.defines.USE_CAP=""):(this.addedCapBox.children[0].visible=!0,delete this.addedCapBox.children[1].material.defines.USE_CAP)),!t&&this.addedCapPlane&&(e?(this.addedCapPlane.lineMesh.visible=!1,this.addedCapPlane.planeMesh.material.defines.USE_CAP=""):(this.addedCapPlane.lineMesh.visible=!0,delete this.addedCapPlane.planeMesh.material.defines.USE_CAP))}enableHatch(e){if(r.GlobalData.ClippingCapsType!=e&&r.GlobalData.ClippingCapsType!=r.EnumClippingCapsTypes.ClipPlane){r.GlobalData.ClippingCapsType=e?r.EnumClippingCapsTypes.ClipBox:r.EnumClippingCapsTypes.None;var t=r.ClipPlaneManager.getInstance(this.scene);t.capsWireframe&&(t.capsWireframe.visible=e),e&&t.reCalculateClippingIds()}}changeDirection(e,t,i){let n=[],a=this.scene;a.backMaterial&&(n.push(a.backMaterial),n.push(a.frontMaterial),n.push(a.backInstanceMaterial),n.push(a.frontInstanceMaterial)),n.forEach((t=>{t.clippingPlanes=e,t.clipIntersection=i}));var s=a.getOrCreateObjectGroup(r.ObjectGroupType.CAPSWIREFRAME).children;for(let e=0;e<s.length;e++)s[e].material.clippingPlanes=t;if(!this.addedCapBox||this.isReverse==i)return;let o=this.addedCapBox.children[0].children;for(let e=0;e<o.length;e++)i?o[e].material.defines.USE_OUTNORMAL="":delete o[e].material.defines.USE_OUTNORMAL;this.addedCapBox.children[1].material.side=i?THREE.BackSide:THREE.FrontSide,this.isReverse=i}}}(),function(){class e extends r.ObjectGroup{constructor(e,t){super(r.ObjectGroupType.CLIPREGION,{priority:20,globalSpace:!0}),this.planes=[],this.planeMaterial=new r.PhongLightingMaterial({color:1170103,opacity:.1,transparent:!0,side:THREE.DoubleSide,lights:!0}),this.wireFramesMaterial=new r.PhongLightingMaterial({color:1170103,lights:!0}),this.uniforms={iClipPlane:{type:"i",value:0},vClipPlane:{type:"v4v",value:new Array}},this.init(e,t)}clear(){super.clear(),this.planes.length=0,this.planes=null,this.planeMaterial.dispose(),this.wireFramesMaterial.dispose(),this.planeMaterial=null,this.wireFramesMaterial=null,this.uniforms=null}addSidePlaneMesh(e){let t=new THREE.BufferGeometry;const i=new THREE.BufferAttribute(e,3);t.setAttribute("position",i),t.setIndex([0,1,2,2,3,1]);const r=new THREE.Mesh(t,this.planeMaterial);this.add(r),this.addSideWireFrames(e)}addSideWireFrames(e){let t=new THREE.BufferGeometry;t.setIndex([0,1,0,2,2,3]),t.setAttribute("position",new THREE.Float32BufferAttribute(e,3)),t.setAttribute("color",new THREE.Float32BufferAttribute([1,1,1,1,1,1,1,1,1,1,1,1],3)),t.computeBoundingSphere();var i=new THREE.LineSegments(t,this.wireFramesMaterial);i.name="WireFrames",i.customTag=!0,this.add(i)}addTopWireFrames(e){let t=[],i=[],r=[];e.map(((e,n)=>{t.push(e.x,e.y,e.z),i.push(1,1,1),r.push(n)}));let n=new THREE.BufferGeometry;n.setIndex(r),n.setAttribute("position",new THREE.Float32BufferAttribute(t,3)),n.setAttribute("color",new THREE.Float32BufferAttribute(i,3)),n.computeBoundingSphere();var a=new THREE.LineSegments(n,this.wireFramesMaterial);a.name="WireFrames",a.customTag=!0,this.add(a)}addTopPlaneMesh(e){let t=new THREE.BufferGeometry,i=new THREE.Shape(e),r=new THREE.ShapeBufferGeometry(i);t.attributes=r.attributes;let n=r.attributes.position.array;const a=n.length;for(let t=2;t<a;t+=3)n[t]=e[0].z;t.groups=r.groups,t.index=r.index;const s=new THREE.Mesh(t,this.planeMaterial);this.add(s),this.addTopWireFrames(e)}init(e,t){this.planes=[];let i=[];const r=new THREE.Vector3(0,0,t),n=e.length,a=e[0].z;for(let t=0;t<n-1;++t){const s=e[t],o=e[t+1];s.z=a,o.z=a;const l=e[t].clone().add(r),d=e[t+1].clone().add(r),h=(new THREE.Plane).setFromCoplanarPoints(s,l,o);this.planes.push(h);const c=new Float32Array([s.x,s.y,s.z,o.x,o.y,o.z,l.x,l.y,l.z,d.x,d.y,d.z]);this.addSidePlaneMesh(c),i.push(l),t===n-2&&i.push(d)}this.addTopPlaneMesh(e),this.addTopPlaneMesh(i);const s=(new THREE.Plane).setFromCoplanarPoints(e[0],e[1],e[2]),o=(new THREE.Plane).setFromCoplanarPoints(i[0],i[2],i[1]);this.planes.push(o),this.planes.push(s)}hide(){this.visible=!1}show(){this.visible=!0}}r.ClipRegion=e}(),r.ClipRegionManager=class{constructor(){this.isReverse=!1}static setClipRegion(e,t,i){let n=e.getScene();n.clipRegion&&n.removeObjectGroup(n.clipRegion),n.clipRegion=new r.ClipRegion(t,i);let a=n.clipRegion;const s=n.geometryGroup.matrix;a.matrix.copy(s),a.matrixAutoUpdate=!1,a.updateMatrixWorld(!0),n.objectGroups.add(a);const o=a.planes.length;a.uniforms.iClipPlane.value=o;let l=a.uniforms.vClipPlane.value;a.planes.map(((e,t)=>{e.applyMatrix4(s);let i=new THREE.Vector4(e.normal.x,e.normal.y,e.normal.z,e.constant);l.push(i)})),r.ClipPlanesTool.updateClippingParams(e,a.uniforms,this.isReverse),e.updateShadowMap()}static changeClipDirection(e,t){let i=e.getScene();i.clipRegion&&(this.isReverse=t,r.ClipPlanesTool.updateClippingParams(e,i.clipRegion.uniforms,t))}static exit(e){this.isReverse=!1;let t=e.getScene();t.clipRegion&&(r.ClipPlanesTool.updateClippingParams(e,{iClipPlane:{type:"i",value:0}},this.isReverse),t.clipRegion.clear(),t.removeObjectGroup(t.clipRegion),t.clipRegion=null)}static hide(e){let t=e.getScene();t.clipRegion&&t.clipRegion.hide()}static show(e){let t=e.getScene();t.clipRegion&&t.clipRegion.show()}},function(){let e=new THREE.Vector3,t=new THREE.Vector3,i=!1,n=!1;class a extends r.EditTool{constructor(e){super(r.EditToolMode.CLIP_BY_BOX),this.viewer=e,this.scene=e.getScene(),this.enablePick=!1,this.cameraControl=e.cameraControl,this.startPt=new THREE.Vector2,this.onClipBox=!1,this.isReverse=!1,this.mapLockedBoxFaces={},this.mapBoxFaceIndex={0:"Right",1:"Left",2:"Top",3:"Bottom",4:"Front",5:"Back"},this.clipPlanes=r.ClipPlaneManager.getInstance(this.scene),this.clipPlanes.updateClippingParams=t=>{a.updateClippingParams(e,t,this.isReverse),this.clipPlanes.calculateClipBoundingBox(),this.viewer.updateShadowMap()},this.clipPlanes.calculateClippingIds=(e,t)=>{if(!r.GlobalData.ClippingCapsType==r.EnumClippingCapsTypes.ClipBox)return;var i=this.clipPlanes;let n=i.uniforms.vClipPlane.value[i.selectIndex];i.renderClipPlane.setComponents(n.x,n.y,n.z,n.w),i.renderClipPlane.normalize(),this.viewer.modelManager.calculateClippingIds(e,t),this.viewer.setRenderStateChanged(!0)},this.clipPlanes.init(),this.clipPlanes.clipCapsManager=this.viewer.getClipCapsManager(),this.selectIndex=null,this.lastSelectIndex=null,this.planeDistance=0,this.offsetSpeed=.02,this._planIntersect=new THREE.Vector3,this.clipStartPoint=new THREE.Vector3}toggle(e,t){this.clipPlanes.enable(e,t)}visible(e){this.clipPlanes.visible=e}rotatable(e){this.clipPlanes.rotatable=e}store(){return this.clipPlanes.store()}restore(e){this.clipPlanes.restore(e)}reset(){this.isReverse=!1,this.clipPlanes.reset()}changeDirection(e){this.isReverse=e,this.clipPlanes.update()}visibleCapsWireframe(e){this.clipPlanes.capsWireframe&&(this.clipPlanes.capsWireframe.visible=e)}pointToScreen(e){let t=this.cameraControl.camera,i=new THREE.Matrix4;i.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse);let r=new THREE.Vector4(e.x,e.y,e.z,1);r.applyMatrix4(i);let n=new THREE.Vector2;n.x=(r.x/r.w+1)/2,n.y=1-(r.y/r.w+1)/2;let a=this.cameraControl.getContainerDimensions();return n.x=n.x*a.width+a.left,n.y=n.y*a.height+a.top,n}getPlaneDistanceInScreen(){if(null==this.selectIndex)return null;if(this.selectIndex<2){let e=this.clipPlanes.center.clone(),t=this.clipPlanes.center.clone();e.x-=this.clipPlanes.cubeSize.x,t.x+=this.clipPlanes.cubeSize.x;const i=this.pointToScreen(e),r=this.pointToScreen(t);return i.x-r.x}{let e=this.clipPlanes.center.clone(),t=this.clipPlanes.center.clone();t.y-=this.clipPlanes.cubeSize.y,e.y+=this.clipPlanes.cubeSize.y;const i=this.pointToScreen(t),r=this.pointToScreen(e);return i.y-r.y}}getPickPoint(e,t){let i=this.cameraControl.camera,n=this.cameraControl.getContainerDimensions();const a=e-n.left,s=t-n.top,o=a/n.width*2-1,l=(n.height-s)/n.height*2-1;let d=new r.Raycaster;d.setFromCamera(new THREE.Vector2(o,l),i);return d.ray.intersectPlane(this.plane,this._planIntersect)}getSelectIndex(){return this.clipPlanes.selectIndex}getLastSelectIndex(){return this.lastSelectIndex}setLastSelectIndex(e){this.lastSelectIndex=e}_isVisible(){return this.clipPlanes.visible}isRotate(){return this.clipPlanes.rotatable}offset(e){const t=Math.floor(this.selectIndex/2);this.selectIndex<=3||this.selectIndex%2==1?this.clipPlanes.offset(this.selectIndex,-e*this.clipPlanes.cubeSize.getComponent(t)*2):this.clipPlanes.offset(this.selectIndex,e*this.clipPlanes.cubeSize.getComponent(t)*2)}setSectionBox(e,t){let i=new THREE.Box3(new THREE.Vector3(e.x,e.y,e.z),new THREE.Vector3(t.x,t.y,t.z));i.applyMatrix4(this.scene.getMatrixGlobal()),this.clipPlanes.setSectionBox(i.min,i.max)}calculateOffsetByBox(i,r){let n=new THREE.Box3(new THREE.Vector3(i.x,i.y,i.z),new THREE.Vector3(r.x,r.y,r.z));n.applyMatrix4(this.scene.getMatrixGlobal()),n.getCenter(t),n.setFromCenterAndSize(t,n.getSize(e).multiplyScalar(this.scene.getExpandScalar())),this.clipPlanes.calculateOffsetByBox(n.min,n.max)}moveSectionPlane(e,t){this.clipPlanes.moveSectionPlane(e,t)}rotateSectionBox(e,t){this.clipPlanes.rotateSectionBox(e,t)}rotate(e,t){2==this.selectIndex||3==this.selectIndex?this.clipPlanes.rotX(t/180*Math.PI*.1):this.clipPlanes.rotY(e/180*Math.PI*.1)}update(e){this.clipPlanes.update(e)}cancelHighLight(){this.clipPlanes.cancelHighLight()}cancelHighLightByIndex(e){this.clipPlanes.cancelHighLightByIndex(e)}highLight(){this.clipPlanes.highLight()}lockBoxFaces(e){for(const t of e)this.mapLockedBoxFaces[t]=!0}unlockBox(){this.mapLockedBoxFaces={}}setProcess(e,t){this.mapLockedBoxFaces[e]||this.clipPlanes.setProcess(e,t)}getProcess(e){return this.clipPlanes.getProcess(e)}destroy(){this.cameraControl=null,this.intersectPoint=null,this.selectIndex=null,this.normal=null,this.plane=null,this.pickHelper=null,this.scene=null,this.viewer=null,this.lastSelectIndex=null}onExit(){this.toggle(!1,!1)}processMouseDown(e){if(this.startPt.set(e.clientX,e.clientY),!this.enablePick&&e.button===THREE.MOUSE.LEFT){let t=this.cameraControl.getRaycaster(e.clientX,e.clientY),i=r.ClipPlaneManager.getInstance(this.scene).hitTest(t),n=this.cameraControl.getIntersectContext(new THREE.Vector2(e.clientX,e.clientY)),a=this.cameraControl.intersector.intersect(n,null,!0);if(null!=a&&a.distance<=i.distance)return r.EditTool.prototype.processMouseDown(this,e);if(this.selectIndex=this.getSelectIndex(),this.planeDistance=this.getPlaneDistanceInScreen(),null!=this.selectIndex){if(r.GlobalData.ClippingCapsType==r.EnumClippingCapsTypes.ClipBox){r.ClipPlaneManager.getInstance(this.scene).clearCapsWireframeForSelectIndex(),r.GlobalData.ClippingCaps=!1,this.visibleCapsWireframe(!1)}return this.highLight(),this.cameraControl.needUpdateRenderList(!0),this.cameraControl.update(!0),this.enablePick=!0,this.clipStartPoint=t.ray.at(i.distance,this.clipStartPoint),!0}}return super.processMouseDown(e)}processHover(e){if(!this.enablePick){let t=!1,i=this.cameraControl.getRaycaster(e.clientX,e.clientY),n=r.ClipPlaneManager.getInstance(this.scene);const a=this.getLastSelectIndex();null!==a&&this.cancelHighLightByIndex(a);n.hitTest(i);if(this.selectIndex=this.getSelectIndex(),null!=this.selectIndex){if(this.highLight(),this.setLastSelectIndex(this.selectIndex),!this.onClipBox){this.onClipBox=!0,this.cameraControl.viewer.modelManager.dispatchEvent({type:r.EVENTS.ON_CLIP_HOVER,onClipBox:!0})}t=!0}else if(this.onClipBox){this.onClipBox=!1,this.cameraControl.viewer.modelManager.dispatchEvent({type:r.EVENTS.ON_CLIP_HOVER,onClipBox:!1})}return this.selectIndex!==a&&(this.cameraControl.needUpdateRenderList(!0),this.cameraControl.update(!0)),t}return super.processHover(e)}processMouseUp(e){if(e.button===THREE.MOUSE.LEFT){let t=this.cameraControl.getRaycaster(e.clientX,e.clientY),i=r.ClipPlaneManager.getInstance(this.scene);if(null!==this.getSelectIndex()){if(r.GlobalData.ClippingCapsType==r.EnumClippingCapsTypes.ClipBox){r.ClipPlaneManager.getInstance(this.scene).calculateClippingIds(),r.GlobalData.ClippingCaps=!0,this.visibleCapsWireframe(!0)}this.cancelHighLight(),this.cameraControl.needUpdateRenderList(!0),this.cameraControl.update(!0)}i.hitTest(t);if(this.selectIndex=this.getSelectIndex(),null!=this.selectIndex){if(this.highLight(),this.cameraControl.needUpdateRenderList(!0),this.cameraControl.update(!0),!this.onClipBox){this.onClipBox=!0,this.cameraControl.viewer.modelManager.dispatchEvent({type:r.EVENTS.ON_CLIP_HOVER,onClipBox:!0})}}else if(this.onClipBox){this.onClipBox=!1,this.cameraControl.viewer.modelManager.dispatchEvent({type:r.EVENTS.ON_CLIP_HOVER,onClipBox:!1})}if(this.enablePick)return this.planeDistance=0,this.enablePick=!1,!0}return super.processMouseUp(e)}processMouseMove(e){if(this.enablePick){if(this.isRotate())this.rotate(e.clientX-this.startPt.x,e.clientY-this.startPt.y),this.startPt.set(e.clientX,e.clientY);else{const t=this.mapBoxFaceIndex[this.selectIndex];if(this.mapLockedBoxFaces[t])return!0;if(!(e.clientX==this.startPt.x&&e.clientY==this.startPt.y)){let t=r.ClipPlaneManager.getInstance(this.scene),i=t.clipplanes[this.selectIndex],n=this.cameraControl.movePlane(i,e,this.startPt,!0,this.clipStartPoint);null!=n&&t.offset(this.selectIndex,n),this.startPt.set(e.clientX,e.clientY)}this.cameraControl.viewer.modelManager.dispatchEvent({type:r.EVENTS.ON_CLIP_MOUSE_MOVE,draggedFaceName:t})}return this.cameraControl.setCameraChanging(!0),this.cameraControl.update(!0),!0}return super.processMouseMove(e)}processTouchstart(e){if(this.startPt.set(e.touches[0].clientX,e.touches[0].clientY),this.enablePick)return super.processTouchstart(e);{let t=this.cameraControl.getRaycaster(e.touches[0].clientX,e.touches[0].clientY);if(r.ClipPlaneManager.getInstance(this.scene).hitTest(t),this.selectIndex=this.getSelectIndex(),this.planeDistance=this.getPlaneDistanceInScreen(),null!=this.selectIndex)return this.highLight(),this.cameraControl.needUpdateRenderList(!0),this.cameraControl.update(!0),this.update(),!0}}processTouchmove(e){if(null!=this.selectIndex){if(this.isRotate())this.rotate(e.touches[0].clientX-this.startPt.x,e.touches[0].clientY-this.startPt.y),this.startPt.set(e.touches[0].clientX,e.touches[0].clientY);else{let t=0;t=this.selectIndex<2?e.touches[0].clientX-this.startPt.x:e.touches[0].clientY-this.startPt.y,this.offset(t/this.planeDistance),this.startPt.set(e.touches[0].clientX,e.touches[0].clientY)}return this.cameraControl.update(!0),this.update(),!0}return super.processTouchmove(e)}processTouchend(e){return this.selectIndex=null,this.planeDistance=0,this.enablePick&&(this.onUpdateUI({visible:!1}),this.startPt.x==e.touches[0].clientX&&this.startPt.y==e.touches[0].clientY&&this.pickHelper.click(e)),this.cameraControl.needUpdateRenderList(!0),this.cancelHighLight(),this.cameraControl.update(!0),this.update(),super.processTouchend(e)}static updateClippingParams(e,t,a){const s=t.iClipPlane.value;if(0==s)return e.getRenderer().localClippingEnabled=!1,void(e.getRenderer().clippingPlanes=Object.freeze([]));let o=[],l=[];for(let e=0;e<s;++e){let e=new THREE.Plane;o.push(e)}for(let e=0;e<s;++e){const i=t.vClipPlane.value[e].clone();let r=o[e];r.setComponents(-i.x,-i.y,-i.z,-i.w),r.normalize(),l.push(r.clone()),a&&r.negate()}let d=!1,h=e.modelManager,c=[],u=[];h.modelCollection.traverse((e=>{if(e instanceof r.ExtrudeBodyManager){e.getAllNodes().forEach((e=>{u.push(e.material)}))}else if(e instanceof r.ExternalComponentManager){e.getAllMeshes().forEach((e=>{if(void 0===e.material)return;const t=e.material.length;t&&t>0?e.material.forEach((e=>{u.push(e)})):u.push(e.material),e._materialHold&&u.push(e._materialHold)}))}else{if(e.materialManager&&(n!=a||a)){let t=e=>{for(let t in e){let i=e[t];if(i instanceof Array)for(let e=0,t=i.length;e<t;e++)u.push(i[e]);else u.push(i)}};t(e.materialManager.materials),t(e.materialManager.instanceMaterials),e.materialManager instanceof r.BimTileMaterialManager&&(u.push(e.materialManager.globalMaterial),e.updateMaterialsValue("clippingPlanes",o,!1),e.updateMaterialsValue("clipIntersection",a,!1),u.push(e.getWireframeMaterial()),u.push(e.getInstanceWireframeMaterial())),null!=e.wireframeManager&&(u.push(e.wireframeManager.wireframeMaterial),u.push(e.wireframeManager.instanceWireframeMaterial),u.push(e.wireframeManager.defaultWireframeColor)),n=a}let t=null;e.getInstanceWireframeMaterial&&(t=e.getInstanceWireframeMaterial(),t&&(u.push(t),c.push(t)));let i=e.getFilter();if(i){const e=i.materialSelector.getAllTypeMaterial();if(u.push(...e),i._hasLocalClipping()){let e=i.getAllMaterialsForClip();for(let t in e)e[t].clippingPlanes=o,u.push(e[t]);let r=i.getAllInstanceMaterialsForClip();for(let e in r){let t=r[e];t.instanceMaterial&&(t.instanceMaterial.clippingPlanes=o,u.push(t))}t&&(t.clippingPlanes=o,u.push(t)),d=!0}}}}));let p=e.rendererManager.getPickingEffecter();if(p.selectedMaterialForClip.clippingPlanes=o,p.wireframeMaterialForClip.clippingPlanes=o,p.instancedSelectedMaterialForClip.clippingPlanes=o,p.instancedWireFrameMaterialForClip.clippingPlanes=o,u.push(p.selectedMaterialForClip),u.push(p.wireframeMaterialForClip),u.push(p.instancedSelectedMaterialForClip),u.push(p.instancedWireFrameMaterialForClip),u.push(p.instancedWireFrameMaterial),u.push(p.selectedMaterial),u.push(p.wireframeMaterial),u.push(p.selectedLineMaterial),u.push(p.skinningSelectedMaterial),u.push(p.skinningWireframeMaterial),d||a?(e.getRenderer().localClippingEnabled=!0,e.getRenderer().clippingPlanes=Object.freeze([])):(e.getRenderer().localClippingEnabled=!1,e.getRenderer().clippingPlanes=o),i!=d){if(d){h.updateMaterialsValue("localClipping",1);for(let e=0;e<c.length;e++)c[e].localClipping=1,c[e].refreshUniforms()}else{h.updateMaterialsValue("localClipping",-1);for(let e=0;e<c.length;e++)c[e].localClipping=-1,c[e].refreshUniforms()}i=d}u.forEach((e=>{e.clippingPlanes=d||a?o:null,e.clipIntersection=a})),e.clipCapsManager&&e.clipCapsManager.changeDirection(o,l,a)}}r.ClipPlanesTool=a}(),(()=>{var e=[new THREE.Plane],t=!1;let i=new THREE.Vector3;class n extends r.EditTool{constructor(n){super(r.EditToolMode.CLIP_FILL),this.viewer=n,this.scene=n.getScene(),this.enablePick=!1,this.rotX=!0,this.onClipPlane=!1,this.cameraControl=n.cameraControl,this.startPt=new THREE.Vector2,this.modelManager=this.cameraControl.viewer.modelManager,this.planeDistance=0,this.offsetSpeed=.02;var a=this;this._planIntersect=new THREE.Vector3,this.fillClipPlane=r.FillClipPlaneManager.getInstance(this.scene),this.fillClipPlane.updateClippingParams=function(s){if(0==s.iClipPlane.value)n.getRenderer().localClippingEnabled=!1,n.getRenderer().clippingPlanes=Object.freeze([]);else{var o=s.vClipPlane.value[0],l=e[0];l.setComponents(-o.x,-o.y,-o.z,-o.w),l.normalize();var d=!1,h=n.modelManager,c=[],u=[],p=[];h.modelCollection.traverse((t=>{var i,n;if(t.getInstanceWireframeMaterial&&(i=t.getInstanceWireframeMaterial())&&(c.push(i),u.push(i)),t.getWireframeMaterial&&(n=t.getWireframeMaterial())&&u.push(n),t.localClippingMode)if(d=!0,t.localClippingPlanes=e,t.innerClippingMode=a.fillClipPlane.innerClipping?1:-1,!t.innerClippingMatrix&&(t.innerClippingMatrix=new THREE.Matrix4),t.innerClippingMatrix.copy(a.fillClipPlane.orthoViewProjMatrix),n&&(n.clippingPlanes=e,p.push(n)),i&&(i.clippingPlanes=e,p.push(i)),t instanceof r.Model){for(var s in t.materialManager.materials){(h=t.materialManager.materials[s]).clippingPlanes=e,p.push(h)}for(var s in t.materialManager.instanceMaterials){if((h=t.materialManager.instanceMaterials[s])instanceof Array)for(var o=0,l=h.length;o<l;o++)h[o].clippingPlanes=e,p.push(h[o]);else h.clippingPlanes=e,p.push(h)}}else if(t instanceof r.BimTilesModel)for(var s in t.materialManager.materialMap){var h;(h=t.materialManager.materialMap[s]).clippingPlanes=e,p.push(h)}var m=t.getFilter();if(m&&m._hasLocalClipping()){var f=m.getAllMaterialsForClip();for(var g in f)f[g].clippingPlanes=e,p.push(f[g]);var v=m.getAllInstanceMaterialsForClip();for(var g in v){var y=v[g];y.instanceMaterial&&(y.instanceMaterial.clippingPlanes=e,p.push(y.instanceMaterial))}i&&(i.clippingPlanes=e),d=!0}}));var m=n.rendererManager.getPickingEffecter();if(m.selectedMaterialForClip.clippingPlanes=e,m.wireframeMaterialForClip.clippingPlanes=e,m.instancedSelectedMaterialForClip.clippingPlanes=e,m.instancedWireFrameMaterialForClip.clippingPlanes=e,n.getClipCapsManager()._prepareCapScene(),d){n.getRenderer().localClippingEnabled=!0,n.getRenderer().clippingPlanes=Object.freeze([]),a.scene.backMaterial.clippingPlanes=e,a.scene.frontMaterial.clippingPlanes=e,a.scene.backInstanceMaterial.clippingPlanes=e,a.scene.frontInstanceMaterial.clippingPlanes=e,p.push(m.selectedMaterialForClip),p.push(m.wireframeMaterialForClip),p.push(m.instancedSelectedMaterialForClip),p.push(m.instancedWireFrameMaterialForClip),p.push(a.scene.backMaterial),p.push(a.scene.frontMaterial),p.push(a.scene.backInstanceMaterial),p.push(a.scene.frontInstanceMaterial);for(var f=0;f<p.length;f++)p[f].orthoViewProjMatrix&&(p[f].orthoViewProjMatrix.copy(this.orthoViewProjMatrix),p[f].innerClipping=this.innerClipping?1:-1,p[f].refreshUniforms())}else{n.getRenderer().localClippingEnabled=!1,n.getRenderer().clippingPlanes=e,a.scene.backMaterial.clippingPlanes=Object.freeze([]),a.scene.frontMaterial.clippingPlanes=Object.freeze([]),a.scene.backInstanceMaterial.clippingPlanes=Object.freeze([]),a.scene.frontInstanceMaterial.clippingPlanes=Object.freeze([]),u.push(m.selectedMaterial),u.push(m.wireframeMaterial),u.push(m.instancedSelectedMaterial),u.push(m.instancedWireFrameMaterial),u.push(a.scene.backMaterial),u.push(a.scene.frontMaterial),u.push(a.scene.backInstanceMaterial),u.push(a.scene.frontInstanceMaterial),h.updateMaterialsValue("orthoViewProjMatrix",this.orthoViewProjMatrix),h.updateMaterialsValue("innerClipping",this.innerClipping?1:-1);for(f=0;f<u.length;f++)u[f].orthoViewProjMatrix&&(u[f].orthoViewProjMatrix.copy(this.orthoViewProjMatrix),u[f].innerClipping=this.innerClipping?1:-1,u[f].refreshUniforms())}if(t!=d){if(d){h.updateMaterialsValue("localClipping",1);for(f=0;f<c.length;f++)c[f].localClipping=1,c[f].refreshUniforms();h.updateMaterialsValue("innerClipping",-1);for(f=0;f<u.length;f++)u[f].innerClipping=-1,u[f].refreshUniforms()}else{h.updateMaterialsValue("localClipping",-1);for(f=0;f<c.length;f++)c[f].localClipping=-1,c[f].refreshUniforms();for(f=0;f<p.length;f++)p[f].innerClipping=-1,p[f].refreshUniforms()}t=d}this.renderClipPlane=new THREE.Plane,this.renderClipPlane.setComponents(o.x,o.y,o.z,o.w),this.renderClipPlane.normalize(),this.calculateFillClipBoundingBox(l.coplanarPoint(i)),n.updateShadowMap()}},this.fillClipPlane.calculateClippingIds=function(e){n.modelManager.calculateClippingIds(e)},this.fillClipPlane.init(),this.fillClipPlane.clipCapsManager=this.viewer.getClipCapsManager()}toggle(e,t){this.fillClipPlane.enable(e,t),this.fillClipPlane.update(),this.viewer.updateShadowMap()}visible(e){this.fillClipPlane.visible=e,this.fillClipPlane.update()}rotatable(e){this.fillClipPlane.rotatable=e,this.fillClipPlane.update()}hit(){return this.fillClipPlane.hit}pointToScreen(e){var t=this.cameraControl.camera,i=new THREE.Matrix4;i.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse);var r=new THREE.Vector4(e.x,e.y,e.z,1);r.applyMatrix4(i);var n=new THREE.Vector2;n.x=(r.x/r.w+1)/2,n.y=1-(r.y/r.w+1)/2;var a=this.cameraControl.getContainerDimensions();return n.x=n.x*a.width+a.left,n.y=n.y*a.height+a.top,n}getPlaneDistanceInScreen(){if(null==this.selectIndex)return null;if(this.selectIndex<2){var e=clipPlanes.center.clone(),t=clipPlanes.center.clone();e.x-=clipPlanes.cubeSize.x,t.x+=clipPlanes.cubeSize.x;var i=this.pointToScreen(e),r=this.pointToScreen(t);return i.x-r.x}var n=clipPlanes.center.clone(),a=clipPlanes.center.clone();a.y-=clipPlanes.cubeSize.y,n.y+=clipPlanes.cubeSize.y;var s=this.pointToScreen(a),o=this.pointToScreen(n);return s.y-o.y}getPickPoint(e,t){var i=this.cameraControl.camera,n=this.cameraControl.getContainerDimensions(),a=e-n.left,s=t-n.top,o=a/n.width*2-1,l=(n.height-s)/n.height*2-1,d=new r.Raycaster;return d.setFromCamera(new THREE.Vector2(o,l),i),d.ray.intersectPlane(this.plane,this._planIntersect)}_isVisible(){return this.fillClipPlane.visible}isRotate(){return this.fillClipPlane.rotatable}offset(e){this.fillClipPlane.offset(e)}setOffset(e){this.fillClipPlane.setOffset(e)}rotate(e,t){this.rotX?this.fillClipPlane.rotX(t/180*Math.PI*.1):this.fillClipPlane.rotY(e/180*Math.PI*.1)}rotateAngleOffset(e,t){this.fillClipPlane.rotateAngleOffset(e,t)}setRotateAngle(e,t){this.fillClipPlane.setRotateAngle(e,t)}getRotateAngle(){return this.fillClipPlane.getRotateAngle()}changeNormal(e){this.fillClipPlane.changeNormal(e)}update(e){this.fillClipPlane.update(e)}cancelHighLight(){this.fillClipPlane.cancelHighLight()}highLight(){this.fillClipPlane.highLight()}store(){return this.fillClipPlane.store()}restore(e){this.viewer.clipCapsManager.enableHatchByMaterial(e.isHatchMaterial,!1),this.fillClipPlane.restore(e)}setProcess(e){this.fillClipPlane.setProcess(e)}getProcess(){return this.fillClipPlane.getProcess()}destroy(){this.cameraControl=null,this.normal=null,this.plane=null,this.pickHelper=null,this.scene=null,this.viewer=null}onExit(){this.toggle(!1,!1)}processMouseDown(e){if(this.startPt.set(e.clientX,e.clientY),!this.enablePick&&e.button===THREE.MOUSE.LEFT){var t=this.cameraControl.getRaycaster(e.clientX,e.clientY);if(r.FillClipPlaneManager.getInstance(this.scene).hitTest(t),this.hit())return this.highLight(),this.cameraControl.needUpdateRenderList(!0),this.cameraControl.update(!0),!1}return r.EditTool.prototype.processMouseDown(this,e)}processMouseUp(e){this.planeDistance=0;var t=!1;if(this.enablePick&&e.button===THREE.MOUSE.LEFT)if(this.startPt.x==e.clientX&&this.startPt.y==e.clientY)this.pickHelper.click(e);else if(e.shiftKey||e.ctrlKey||e.altKey){this.endPt.set(e.clientX,e.clientY);var i=r.OPSELECTIONTYPE.Clear;e.ctrlKey?i=r.OPSELECTIONTYPE.Add:e.altKey&&(i=r.OPSELECTIONTYPE.Remove);var n=this;this.scene.pickByRect(this.frustum,i,(function(){n.pickHelper.notifySelectionChanged(null,0,e)})),this.cameraControl.updateView(!0),t=!0}var a=this.cameraControl.getRaycaster(e.clientX,e.clientY);return r.FillClipPlaneManager.getInstance(this.scene).hitTest(a),this.hit()?(this.highLight(),this.cameraControl.needUpdateRenderList(!0),this.cameraControl.update(!0),this.onClipPlane||(this.onClipPlane=!0,this.modelManager.dispatchEvent({type:r.EVENTS.ON_CLIP_HOVER,onClipPlane:!0,event:e})),t=!0):(this.cancelHighLight(),this.cameraControl.needUpdateRenderList(!0),this.cameraControl.update(!0),this.onClipPlane&&(this.onClipPlane=!1,this.modelManager.dispatchEvent({type:r.EVENTS.ON_CLIP_HOVER,onClipPlane:!1,event:e}))),this.modelManager.dispatchEvent({type:r.EVENTS.ON_TOOL_END}),t}processMouseMove(e){return this.modelManager.dispatchEvent({type:r.EVENTS.ON_CLIP_MOUSE_MOVE,event:e}),r.EditTool.prototype.processMouseMove(this,e)}processTouchstart(e){if(this.startPt.set(e.touches[0].clientX,e.touches[0].clientY),!this.enablePick){var t=this.cameraControl.getRaycaster(e.touches[0].clientX,e.touches[0].clientY);r.FillClipPlaneManager.getInstance(this.scene).hitTest(t)}return r.EditTool.prototype.processTouchstart(this,e)}processTouchmove(e){}processTouchend(e){return this.enablePick&&(this.onUpdateUI({visible:!1}),this.startPt.x==e.touches[0].clientX&&this.startPt.y==e.touches[0].clientY&&this.pickHelper.click(e)),this.cameraControl.needUpdateRenderList(!0),this.cancelHighLight(),this.cameraControl.update(!0),r.EditTool.prototype.processTouchmove(this,e)}processHover(e){if(!this.enablePick){var t=!1,i=this.cameraControl.getRaycaster(e.clientX,e.clientY);return r.FillClipPlaneManager.getInstance(this.scene).hitTest(i),this.hit()?(this.onClipPlane||(this.highLight(),this.cameraControl.needUpdateRenderList(!0),this.cameraControl.update(!0),this.onClipPlane=!0,this.modelManager.dispatchEvent({type:r.EVENTS.ON_CLIP_HOVER,onClipPlane:!0,event:e})),t=!0):this.onClipPlane?(this.cancelHighLight(),this.cameraControl.needUpdateRenderList(!0),this.cameraControl.update(!0),this.onClipPlane=!1,this.modelManager.dispatchEvent({type:r.EVENTS.ON_CLIP_HOVER,onClipPlane:!1,event:e})):this.modelManager.dispatchEvent({type:r.EVENTS.ON_CLIP_HOVER,onClipPlane:!1,event:e}),t}return r.EditTool.prototype.processHover(this,e)}}r.FillClipPlaneTool=n})(),(()=>{let e=[];e.push("clipPlane_right"),e.push("clipPlane_left"),e.push("clipPlane_top"),e.push("clipPlane_bottom"),e.push("clipPlane_front"),e.push("clipPlane_back");let t=new THREE.Quaternion,i=new THREE.Vector3(1,0,0),n=new THREE.Vector3(0,1,0),a=new THREE.Vector3(0,0,1),s=new THREE.Matrix4;class o extends r.ObjectGroup{constructor(e,t){super(r.ObjectGroupType.CLIPPLANE,{priority:20}),this.cubeSize=e.clone(),this.center=t.clone(),this.visible=!1,this.rotatable=!1,this.selectIndex=null,this.planeOffset=new Array(6),this.planeRotate=[0,0,0],this.observer=null,this.uniforms={iClipPlane:{type:"i",value:0},vClipPlane:{type:"v4v",value:new Array(new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4)}},this.clipplanes=null,this.calculation=!0,this.boundingBox=new THREE.Box3,this.planeMaterial=new r.PhongLightingMaterial({color:16777215,opacity:0,transparent:!0,side:THREE.DoubleSide,lights:!0}),this.planeHighLightMatrial=new r.PhongLightingMaterial({color:1170103,opacity:.1,transparent:!0,side:THREE.DoubleSide,lights:!0}),this.capsIntersectPosition=[[],[],[],[],[],[]],this.renderClipPlane=new THREE.Plane}calculateClipBoundingBox(e){this.boundingBox.setFromObject(this)}getClipBoundingBox(){return this.boundingBox}isVisible(){return this.visible}getPlaneNormal(e){var t=new THREE.Vector4,i=Math.floor(e/2),r=e%2;return t.setComponent(i,Math.pow(-1,r)),t.w=.5*-this.cubeSize.getComponent(i),this.planeOffset[e]=0,t}initPlaneModel(t){var i=Math.floor(t/2),n=t%2,a=0==i?this.cubeSize.z:this.cubeSize.x,s=1==i?this.cubeSize.z:this.cubeSize.y,o=new THREE.PlaneGeometry(a,s),l=new THREE.Mesh(o,this.planeMaterial);l.name=e[t],l.customTag=!0,l.position.setComponent(i,Math.pow(-1,n)*this.cubeSize.getComponent(i)*.5),0==i?l.rotation.y=Math.pow(-1,n)*Math.PI*.5:1==i&&(l.rotation.x=Math.pow(-1,n)*Math.PI*.5),l.renderOrder=r.EnumRenderOrder.ClipPlane,this.add(l)}initCapsBox(e,t,i){var n=new THREE.BoxBufferGeometry(this.cubeSize.x,this.cubeSize.y,this.cubeSize.z);n.groups=null;var a=new r.PhongLightingMaterial({color:6380315,side:THREE.DoubleSide,viewportSize:t,backSceneTexture:e}),s=new THREE.Mesh(n,a);let o=this.cubeSize.x,l=this.cubeSize.y,d=this.cubeSize.z,h=[new THREE.Vector3(1,0,0),new THREE.Vector3(-1,0,0),new THREE.Vector3(0,1,0),new THREE.Vector3(0,-1,0),new THREE.Vector3(0,0,1),new THREE.Vector3(0,0,-1)];this.boxCap=new THREE.Group;let c=new THREE.Group;return c.add(this._getLine(l,d,.5*o,0,h[0])),c.add(this._getLine(l,d,.5*-o,1,h[1])),c.add(this._getLine(o,d,.5*l,2,h[2])),c.add(this._getLine(o,d,.5*-l,3,h[3])),c.add(this._getLine(o,l,.5*d,4,h[4])),c.add(this._getLine(o,l,.5*-d,5,h[5])),this.boxCap.add(c),i&&(a.defines.USE_CAP="",c.visible=!1),this.boxCap.add(s),this.boxCap.matrixWorld=this.matrixWorld,this.boxCap.matrix=this.matrix,this.boxCap.matrixAutoUpdate=!1,this.boxCap.updateMatrixWorld(!0),this.boxCap}_getLineMesh(e,t){var i=new THREE.LineMaterial({color:2236962,polygonOffset:!0,polygonOffsetFactor:-1,polygonOffsetUnits:-10,resolution:new THREE.Vector2(window.innerWidth,window.innerHeight),outNormal:t});i.uniforms.outNormal.value=t;var r=new THREE.LineSegmentsGeometry;return r.setPositions(e),new THREE.LineSegments2(r,i)}_getLine(e,t,i,r,n){let a=[];for(var s=.5*e,o=.5*t,l=5;l<e+t;l+=5){var d,h,c,u;l<t?(d=-s,h=-o+l):(d=-s+l-t,h=o),l<e?(c=-s+l,u=-o):(c=s,u=-o+l-e),r<2?(a.push(i,d,h),a.push(i,c,u)):r>3?(a.push(d,h,i),a.push(c,u,i)):(a.push(d,i,h),a.push(c,i,u))}return this._getLineMesh(a,n)}addToCapsWireframe(e){if(this.capsWireframe&&this.capsWireframe.children.length>0){let e=this.capsWireframe.children[this.selectIndex];e.geometry.setPositions(this.capsIntersectPosition[this.selectIndex]),e.geometry._maxInstanceCount=void 0}else{for(var t=e.manager.scene.getOrCreateObjectGroup(r.ObjectGroupType.CAPSWIREFRAME,{globalSpace:!0}),i=0;i<6;i++){var n=new THREE.LineSegmentsGeometry;i==this.selectIndex&&n.setPositions(this.capsIntersectPosition[this.selectIndex]);let e=new THREE.LineSegments2(n,new THREE.LineMaterial({color:2236962,linewidth:1,polygonOffset:!0,polygonOffsetFactor:-1,polygonOffsetUnits:-10,resolution:new THREE.Vector2(window.innerWidth,window.innerHeight),clipping:!0,clippingTolerance:.001}));t.add(e),e.updateMatrixWorld(!0)}this.capsWireframe=t}}clearCapsWireframeForSelectIndex(){this.capsWireframe&&this.capsWireframe.children&&this.capsWireframe.children[this.selectIndex]&&(this.capsWireframe.children[this.selectIndex].geometry.deleteAttribute("instanceStart"),this.capsWireframe.children[this.selectIndex].geometry.deleteAttribute("instanceEnd"))}clearCapsWireframe(){if(this.capsWireframe&&r.GlobalData.ClippingCapsType==r.EnumClippingCapsTypes.ClipBox){var e=this.capsWireframe.children;for(let t=0;t<e.length;t++)e[t].geometry.deleteAttribute("instanceStart"),e[t].geometry.deleteAttribute("instanceEnd")}}reCalculateClippingIds(e){if(r.GlobalData.ClippingCapsType!=r.EnumClippingCapsTypes.ClipBox)return;let t=this.selectIndex;for(let t=0;t<6;t++)this.selectIndex=t,this.calculateClippingIds(e,0==t);this.selectIndex=t}initWireframes(){var e=[.5*-this.cubeSize.x,.5*-this.cubeSize.y,.5*-this.cubeSize.z,.5*this.cubeSize.x,.5*-this.cubeSize.y,.5*-this.cubeSize.z,.5*this.cubeSize.x,.5*this.cubeSize.y,.5*-this.cubeSize.z,.5*-this.cubeSize.x,.5*this.cubeSize.y,.5*-this.cubeSize.z,.5*-this.cubeSize.x,.5*-this.cubeSize.y,.5*this.cubeSize.z,.5*this.cubeSize.x,.5*-this.cubeSize.y,.5*this.cubeSize.z,.5*this.cubeSize.x,.5*this.cubeSize.y,.5*this.cubeSize.z,.5*-this.cubeSize.x,.5*this.cubeSize.y,.5*this.cubeSize.z],t=new THREE.BufferGeometry,i=new r.PhongLightingMaterial({color:1170103,lights:!0});t.setIndex([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,3,7,1,5,2,6]),t.setAttribute("position",new THREE.Float32BufferAttribute(e,3)),t.setAttribute("color",new THREE.Float32BufferAttribute([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],3)),t.computeBoundingSphere();var n=new THREE.LineSegments(t,i);n.name="Wireframes",n.customTag=!0,this.add(n)}updateClippingParams(e){}enable(e,t){this.visible=t,this.uniforms.iClipPlane.value=e?6:0,this.updateClippingParams(this.uniforms)}isEnabled(){return 0!==this.uniforms.iClipPlane.value}store(){let e=r.GlobalData.ClippingCapsType>0;return new l(!!this.uniforms.iClipPlane.value,this.visible,this.rotatable,this.calculation,this.planeOffset,this.planeRotate,this.position.clone(),this.scale.clone(),this.quaternion.clone(),this.cubeSize.clone(),this.center.clone(),this.boundingBox.clone(),e,this.clipCapsManager.hatchByMaterialForBox)}restore(e){this.calculation=!0,this.calculationPlanes(e.cubeSize,e.center),this.enable(e.enable,e.visible),this.rotatable=e.rotatable,this.calculation=e.calculation;for(var t=0;t<6;++t)this.planeOffset[t]=e.planeOffset[t];for(t=0;t<3;++t)this.planeRotate[t]=e.planeRotate[t];this.position.copy(e.position),this.scale.copy(e.scale),this.quaternion._w=e.quaternion._w,this.quaternion._x=e.quaternion._x,this.quaternion._y=e.quaternion._y,this.quaternion._z=e.quaternion._z,this.update(),this.clipCapsManager.enableHatch(e.isHatchEnabled),this.clipCapsManager.enableHatchByMaterial(e.isHatchByMaterial,!0),this.reCalculateClippingIds()}reset(){this.calculation=!0;for(var e=0;e<6;++e)this.planeOffset[e]=0;for(e=0;e<3;++e)this.planeRotate[e]=0;this.position.copy(this.center),this.scale.copy(new THREE.Vector3(1,1,1)),this.quaternion.copy(new THREE.Quaternion),this.update(),this.clearCapsWireframe(),this.reCalculateClippingIds()}calculationPlanes(e,t){if(this.calculation){this.cubeSize.copy(e),this.center.copy(t);for(var i=this.children.length-1;i>=0;--i)this.remove(this.children[i]);for(i=0;i<6;++i)this.uniforms.vClipPlane.value[i]=this.getPlaneNormal(i),this.initPlaneModel(i);this.initWireframes(),this.clipplanes=this.uniforms.vClipPlane.value.slice(0),this.reset()}}update(){this.updateMatrixWorld(),this.boxCap&&(this.boxCap.matrixWorld=this.matrixWorld,this.boxCap.matrix=this.matrix,this.boxCap.updateMatrixWorld(!0)),s.copy(this.matrix).invert(),s.transpose();for(var e=0;e<6;++e)this.uniforms.vClipPlane.value[e]=this.clipplanes[e].clone().applyMatrix4(s);this.updateClippingParams(this.uniforms),this.observer&&this.observer()}offset(e,t){this.calculation=!1;var i=Math.floor(e/2);this.cubeSize.getComponent(i);e%2==0&&this.planeOffset[e]+t>0&&(t=-this.planeOffset[e]),e%2==1&&this.planeOffset[e]+t<0&&(t=-this.planeOffset[e]),this.planeOffset[e]+=t;for(var r=new THREE.Vector3,n=0;n<6;++n){var a=this.clipplanes[n].clone(),s=this.planeOffset[n],o=new THREE.Vector3(a.x*s,a.y*s,a.z*s);r.add(o)}var l=1+r.getComponent(i)/this.cubeSize.getComponent(i);if((l=0==l?1e-5:l)>0){this.scale.setComponent(i,l);var d=this.uniforms.vClipPlane.value[e].clone(),h=new THREE.Vector3(d.x,d.y,d.z);h.normalize();o=t;var c=new THREE.Vector3(h.x*o,h.y*o,h.z*o);e%2==1?this.position.sub(c.multiplyScalar(.5)):this.position.add(c.multiplyScalar(.5)),this.update()}else this.planeOffset[e]-=t}rotX(e){this.calculation=!1,t.setFromAxisAngle(i,e),this.quaternion.multiply(t),this.update()}rotY(e){this.calculation=!1,t.setFromAxisAngle(n,e),this.quaternion.multiply(t),this.update()}setSectionBox(e,t){this.calculation=!0;var i=new THREE.Vector3(t.x-e.x,t.y-e.y,t.z-e.z),n=new THREE.Vector3(.5*(e.x+t.x),.5*(e.y+t.y),.5*(e.z+t.z));this.calculationPlanes(i,n),this.clipCapsManager.resetClippingCapsStatus(r.GlobalData.ClippingCapsType)}calculateOffsetByBox(e,t){var i=t.x-this.center.x-.5*this.cubeSize.x;i<this.planeOffset[0]?(this.moveSectionPlane("Left",this.center.x-.5*this.cubeSize.x-e.x),this.moveSectionPlane("Right",i)):(this.moveSectionPlane("Right",i),this.moveSectionPlane("Left",this.center.x-.5*this.cubeSize.x-e.x));var r=t.y-this.center.y-.5*this.cubeSize.y;r<this.planeOffset[2]?(this.moveSectionPlane("Bottom",this.center.y-.5*this.cubeSize.y-e.y),this.moveSectionPlane("Top",r)):(this.moveSectionPlane("Top",r),this.moveSectionPlane("Bottom",this.center.y-.5*this.cubeSize.y-e.y));var n=t.z-this.center.z-.5*this.cubeSize.z;n<this.planeOffset[4]?(this.moveSectionPlane("Back",this.center.z-.5*this.cubeSize.z-e.z),this.moveSectionPlane("Front",n)):(this.moveSectionPlane("Front",n),this.moveSectionPlane("Back",this.center.z-.5*this.cubeSize.z-e.z))}getPlaneIndexByName(e){var t=-1;return"Right"==e?t=0:"Left"==e?t=1:"Top"==e?t=2:"Bottom"==e?t=3:"Front"==e?t=4:"Back"==e&&(t=5),t}moveSectionPlane(e,t){var i=this.getPlaneIndexByName(e);if(-1!=i){i%2!=0&&(t=-t);var r=t-this.planeOffset[i];this.offset(i,r)}}setProcess(e,t){var i=this.getPlaneIndexByName(e),r=0;if(i<2?r=this.cubeSize.x:i<4?r=this.cubeSize.y:i<6&&(r=this.cubeSize.z),t>1?t=1:t<0&&(t=0),-1!=i){i%2!=1&&(t=-t);var n=t*r-this.planeOffset[i];this.offset(i,n)}}getProcess(e){var t=this.getPlaneIndexByName(e);-1==t&&console.log("faceName is illegal");var i=0;t<2?i=this.cubeSize.x:t<4?i=this.cubeSize.y:t<6&&(i=this.cubeSize.z);var r=1;t%2!=1&&(r=-1);var n=r*this.planeOffset[t]/i;return n>1?n=1:n<0&&(n=0),n}rotateSectionBox(e,t){"x"==e?this.planeRotate[0]=t:"y"==e?this.planeRotate[1]=t:"z"==e&&(this.planeRotate[2]=t),this.calculation=!0;var r=new THREE.Quaternion;r.setFromAxisAngle(i,this.planeRotate[0]);var s=new THREE.Quaternion;s.setFromAxisAngle(n,this.planeRotate[1]);var o=new THREE.Quaternion;o.setFromAxisAngle(a,this.planeRotate[2]);var l=new THREE.Quaternion;l.multiply(r),l.multiply(s),l.multiply(o),this.quaternion.copy(l),this.update()}highLight(){null!=this.selectIndex&&(this.children[this.selectIndex].material=this.planeHighLightMatrial)}cancelHighLight(){null!=this.selectIndex&&(this.children[this.selectIndex].material=this.planeMaterial,this.selectIndex=null)}cancelHighLightByIndex(e){this.children[e].material=this.planeMaterial}init(){this.calculationPlanes(this.cubeSize,this.center)}hitTest(e){var t=null,i=null;if(this.raycast(e),null!=this.selectIndex){var r=e.ray,n=new THREE.Plane,a=this.uniforms.vClipPlane.value[this.selectIndex];n.setComponents(a.x,a.y,a.z,a.w),t=r.distanceToPlane(n),i=r.direction.dot(n.normal)<0}return{sign:i,distance:t}}raycast(e){if(this.visible){var t=[],i=null;this.selectIndex=null;for(var r=0;r<6;r++)if(this.children[r].raycast(e,t),t.length>0){var n=t.pop();(!i||n.distance<i.distance)&&(i=n,this.selectIndex=r),t=[]}}}}var l=function(e,t,i,r,n,a,s,o,l,d,h,c,u,p){this.enable=e,this.visible=t,this.rotatable=i,this.calculation=r,this.planeOffset=n.slice(0),this.planeRotate=a.slice(0),this.position=s,this.scale=o,this.quaternion=l,this.cubeSize=d,this.center=h,this.boundingBox=c,this.isHatchEnabled=u,this.isHatchByMaterial=p};r.ClipPlanes=o})(),(()=>{var e=new THREE.Quaternion,t=new THREE.Vector3(1,0,0),i=new THREE.Vector3(0,1,0),n=new THREE.Vector3(0,0,1);let a=new THREE.Matrix4,s=function(e,t,i,r,n,a,s,o,l,d,h){this.enable=e,this.visible=t,this.rotatable=i,this.planeOffset=r,this.position=n,this.scale=a,this.quaternion=s,this.cubeSize=o,this.center=l,this.normalIndex=d,this.isHatchByMaterial=h};class o extends r.ObjectGroup{constructor(e,t){super(r.ObjectGroupType.FILLCLIPPLANE,{priority:20}),this.cubeSize=e.clone(),this.originBoundingBox=(new THREE.Box3).setFromCenterAndSize(t,e),this.boundingBox=this.originBoundingBox.clone(),this.center=t.clone(),this.length=Math.max(this.cubeSize.x,Math.max(this.cubeSize.y,this.cubeSize.z)),this.planeOffset=0,this.normalIndex=3,this.visible=!1,this.rotatable=!1,this.hit=!1,this.clipplane=new THREE.Vector4,this.observer=null,this.renderClipPlane=new THREE.Plane,this.angleA=0,this.angleB=0,this.capsIntersectPosition=[],this.capsIntersectContour={},this.clipPlaneBox=null,this.innerClipping=!1,this.limitDragging=!0,this.orthoViewProjMatrix=new THREE.Matrix4,this.planeWidth=null,this.planeHeight=null,this.uniforms={iClipPlane:{value:0},vClipPlane:{value:new Array(new THREE.Vector4)}},this.planeMaterial=new r.PhongLightingMaterial({color:16777215,opacity:0,transparent:!0,side:THREE.DoubleSide,lights:!0}),this.planeHighLightMatrial=new r.PhongLightingMaterial({color:1170103,opacity:.1,transparent:!0,side:THREE.DoubleSide,lights:!0})}initPlaneModel(){for(var e=this.children.length-1;e>=0;--e)this.remove(this.children[e]);this.planeOffset=0;var t=this.length,i=new THREE.PlaneGeometry(t,t),n=new THREE.Mesh(i,this.planeMaterial);n.name="fillClipPlane",n.customTag=!0,n.renderOrder=r.EnumRenderOrder.ClipPlane,this.position.copy(this.center),this.clipplane.set(0,0,1,0),this.planeMesh=n,this.planeMesh.geometry.computeBoundingBox(),this.clipPlaneBox=this.planeMesh.geometry.boundingBox,this.add(n)}initWireframes(){var e=.5*this.length,t=[-e,e,0,e,e,0,-e,-e,0,e,-e,0],i=new THREE.BufferGeometry,n=new r.PhongLightingMaterial({color:1170103,lights:!0});i.setIndex([0,1,1,3,3,2,2,0]),i.setAttribute("position",new THREE.Float32BufferAttribute(t,3));var a=new THREE.LineSegments(i,n);a.name="Wireframes",a.customTag=!0,this.wireframeMesh=a,this.add(a)}resizeGeometry(e,t){var i=new THREE.PlaneGeometry(e,t);this.planeMesh.geometry=i,this.planeMesh.geometry.computeBoundingBox(),this.clipPlaneBox=this.planeMesh.geometry.boundingBox;var r=.5*e,n=.5*t,a=[-r,n,0,r,n,0,-r,-n,0,r,-n,0],s=new THREE.BufferGeometry;if(s.setIndex([0,1,1,3,3,2,2,0]),s.setAttribute("position",new THREE.Float32BufferAttribute(a,3)),this.wireframeMesh.geometry=s,this.capPlane){var o=new THREE.PlaneGeometry(e,t);this.capPlane.planeMesh.geometry=o}}getCoordinate(){var e=this.planeWidth?.5*this.planeWidth:.5*this.length,t=this.planeHeight?.5*this.planeHeight:.5*this.length,i=new THREE.Vector3(-e,t,0);i.applyMatrix4(this.matrix);var r=new THREE.Vector3(e,t,0);r.applyMatrix4(this.matrix);var n=new THREE.Vector3(-e,-t,0);return n.applyMatrix4(this.matrix),{axisX:i.clone().sub(r).normalize(),axisY:i.clone().sub(n).normalize()}}initCapsPlane(e,t,i){if(this.capPlane)return this.capPlane;var n=this.length,a=new THREE.PlaneGeometry(n,n),s=new r.PhongLightingMaterial({color:6380315,side:THREE.DoubleSide,viewportSize:t,backSceneTexture:e}),o=new THREE.Mesh(a,s),l=this.planeMesh;o.matrixWorld=l.matrixWorld,o.matrix=this.matrix;for(var d=.5*this.length,h=[],c=5;c<2*this.length;c+=5){var u,p;c<this.length?(u=-d,p=-d+c):(u=-d+c-this.length,p=d),h.push(u,p,0),h.push(p,u,0)}var m=new THREE.LineMaterial({color:2236962});m.linewidth=1,m.resolution.set(t.x,t.y),m.depthTest=!1;var f=new THREE.LineSegmentsGeometry;f.setPositions(h);var g=new THREE.LineSegments2(f,m);return g.matrix=this.matrix,g.matrixWorld=l.matrixWorld,i&&(s.defines.USE_CAP="",g.visible=!1),this.capPlane={planeMesh:o,lineMesh:g},this.capPlane}addToCapsWireframe(e){if(this.capsWireframe)this.capsWireframe.geometry.setPositions(this.capsIntersectPosition),this.capsWireframe.geometry._maxInstanceCount=void 0;else{var t=new THREE.LineSegmentsGeometry;t.setPositions(this.capsIntersectPosition),this.capsWireframe=new THREE.LineSegments2(t,new THREE.LineMaterial({color:2236962,linewidth:1,polygonOffset:!0,polygonOffsetFactor:-1,polygonOffsetUnits:-10,resolution:new THREE.Vector2(window.innerWidth,window.innerHeight)})),e.manager.scene.getOrCreateObjectGroup(r.ObjectGroupType.CAPSWIREFRAME,{globalSpace:!0}).add(this.capsWireframe),this.capsWireframe.updateMatrixWorld(!0)}}clearCapsWireframe(){this.capsIntersectPosition.length=0,this.capsIntersectPosition=[],this.capsWireframe&&this.capsWireframe.geometry.deleteAttribute("instanceStart"),this.capsWireframe&&this.capsWireframe.geometry.deleteAttribute("instanceEnd")}calculateClippingIds(){}reCalculateClippingIds(e){this.calculateClippingIds(e)}updateClippingParams(e){}getFillClipBoundingBox(){return this.boundingBox}getFillClipPlaneBoundingBox(){let e=this.clipPlaneBox.clone();const t=this.planeMesh.matrix;return e.applyMatrix4(t),e}calculateFillClipBoundingBox(e){this.boundingBox=this.originBoundingBox.clone(),0!=this.clipplane.x?1==this.clipplane.x?this.boundingBox.max.x=e.x:this.boundingBox.min.x=e.x:0!=this.clipplane.y?1==this.clipplane.y?this.boundingBox.max.y=e.y:this.boundingBox.min.y=e.y:0!=this.clipplane.z&&(1==this.clipplane.z?this.boundingBox.max.z=e.z:this.boundingBox.min.z=e.z)}enable(e,t){this.visible=t,this.uniforms.iClipPlane.value=e?1:0,this.update()}isEnabled(){return 0!=this.uniforms.iClipPlane.value}update(){if(this.updateMatrixWorld(),a.copy(this.matrix).invert(),a.transpose(),this.uniforms.vClipPlane.value[0]=this.clipplane.clone().applyMatrix4(a),this.innerClipping){var e=this.planeWidth,t=this.planeHeight;this.orthoCamera=new THREE.OrthographicCamera(-e/2,e/2,t/2,-t/2,.1,2e3),this.orthoCamera.position.set(this.position.x,this.position.y,this.position.z);var i=this.uniforms.vClipPlane.value[0].clone(),r=new THREE.Vector3(i.x,i.y,i.z);r.normalize();var n=new THREE.Vector3(this.position.x,this.position.y,this.position.z);n.add(r),this.orthoCamera.lookAt(n),this.orthoCamera.updateMatrixWorld(!0),this.orthoViewProjMatrix.copy(this.orthoCamera.projectionMatrix),a.copy(this.orthoCamera.matrixWorld).invert(),this.orthoViewProjMatrix.multiply(a)}this.updateClippingParams(this.uniforms),this.observer&&this.observer()}getClipPlane(){return this.clipplane.clone()}offset(e){var t=0;this.normalIndex<2?t=this.cubeSize.x:this.normalIndex<4?t=this.cubeSize.z:this.normalIndex<6&&(t=this.cubeSize.y),this.planeOffset+=e,this.limitDragging&&Math.abs(this.planeOffset)>.5*t&&(this.planeOffset=this.planeOffset>0?.5*t:.5*-t);var i=this.uniforms.vClipPlane.value[0].clone(),r=new THREE.Vector3(i.x,i.y,i.z);r.normalize();var n=new THREE.Vector3(r.x*this.planeOffset,r.y*this.planeOffset,r.z*this.planeOffset);this.position.copy(this.center).add(n),this.update()}setOffset(e){var t=0;this.normalIndex<2?t=this.cubeSize.x:this.normalIndex<4?t=this.cubeSize.z:this.normalIndex<6&&(t=this.cubeSize.y),this.planeOffset=e,this.limitDragging&&Math.abs(e)>.5*t&&(this.planeOffset=e>0?.5*t:.5*-t);var i=this.uniforms.vClipPlane.value[0].clone(),r=new THREE.Vector3(i.x,i.y,i.z);r.normalize();var n=new THREE.Vector3(r.x*this.planeOffset,r.y*this.planeOffset,r.z*this.planeOffset);this.position.copy(this.center).add(n),this.update()}changeNormal(e){this.quaternion.set(0,0,0,1),this.angleA=0,this.angleB=0,this.setNormal(e)}setNormal(e){var t=this.planeMesh,i=this.wireframeMesh;0==e?(this.clipplane.set(1,0,0,0),t.rotation.set(0,Math.PI/2,0),i.rotation.set(0,Math.PI/2,0)):1==e?(this.clipplane.set(-1,0,0,0),t.rotation.set(0,-Math.PI/2,0),i.rotation.set(0,-Math.PI/2,0)):2==e?(this.clipplane.set(0,0,-1,0),t.rotation.set(Math.PI,0,0),i.rotation.set(Math.PI,0,0)):3==e?(this.clipplane.set(0,0,1,0),t.rotation.set(0,0,0),i.rotation.set(0,0,0)):4==e?(this.clipplane.set(0,1,0,0),t.rotation.set(-Math.PI/2,0,0),i.rotation.set(-Math.PI/2,0,0)):5==e&&(this.clipplane.set(0,-1,0,0),t.rotation.set(Math.PI/2,0,0),i.rotation.set(Math.PI/2,0,0)),this.normalIndex=e,t.updateMatrixWorld(),i.updateMatrixWorld(),this.capPlane&&(this.capPlane.planeMesh.matrixWorld=t.matrixWorld,this.capPlane.lineMesh.matrixWorld=t.matrixWorld),this.update()}rotX(i){e.setFromAxisAngle(t,i),this.quaternion.multiply(e),this.update()}rotY(t){e.setFromAxisAngle(i,t),this.quaternion.multiply(e),this.update()}rotateByAxis(t,i){e.setFromAxisAngle(t,i),this.quaternion.multiply(e)}rotateAngleOffset(e,r){var a=this.normalIndex;e=e%360/180*Math.PI,0==a||1==a?("y"==r&&this.rotateByAxis(n,e),"z"==r&&this.rotateByAxis(i,e)):2==a||3==a?("x"==r&&this.rotateByAxis(t,e),"z"==r&&this.rotateByAxis(i,e)):4!=a&&5!=a||("x"==r&&this.rotateByAxis(t,e),"y"==r&&this.rotateByAxis(n,e)),this.update()}setRotateAngle(e,r){this.quaternion.set(0,0,0,1);var a=this.normalIndex;e=(e=null==e?this.angleA:e%360)<0?360+e:e,r=(r=null==r?this.angleB:r%360)<0?360+r:r,this.angleA=e,this.angleB=r,e=e/180*Math.PI,r=r/180*Math.PI,0==a||1==a?(e=0==a?-e:e,r=0==a?r:-r,this.rotateByAxis(n,e),this.rotateByAxis(i,r)):2==a||3==a?(this.rotateByAxis(t,e),this.rotateByAxis(i,r)):4!=a&&5!=a||(e=3==a?-e:e,r=3==a?r:-r,this.rotateByAxis(t,e),this.rotateByAxis(n,r)),this.update()}getRotateAngle(){return{angleA:this.angleA,angleB:this.angleB}}highLight(){this.planeMesh.material=this.planeHighLightMatrial}cancelHighLight(){this.planeMesh.material=this.planeMaterial,this.hit=!1}store(e){return new s(!!this.uniforms.iClipPlane.value,this.visible,this.rotatable,this.planeOffset,this.position.clone(),this.scale.clone(),this.quaternion.clone(),this.cubeSize.clone(),this.center.clone(),this.normalIndex,this.clipCapsManager.hatchByMaterialForPlane)}restore(e){this.enable(e.enable,e.visible),this.rotatable=e.rotatable,this.planeOffset=e.planeOffset,this.position.copy(e.position),this.scale.copy(e.scale),this.quaternion._w=e.quaternion._w,this.quaternion._x=e.quaternion._x,this.quaternion._y=e.quaternion._y,this.quaternion._z=e.quaternion._z,this.normalIndex=null==e.normalIndex?this.normalIndex:e.normalIndex,this.setNormal(this.normalIndex),this.setBorder(this.length,this.length,!1),this.cubeSize.set(e.cubeSize.x,e.cubeSize.y,e.cubeSize.z),this.clipCapsManager.enableHatchByMaterial(e.isHatchByMaterial,!1),this.clearCapsWireframe(),this.calculateClippingIds()}setProcess(e){var t=0;this.normalIndex<2?t=this.cubeSize.x:this.normalIndex<4?t=this.cubeSize.z:this.normalIndex<6&&(t=this.cubeSize.y),e>1?e=1:e<-1&&(e=-1),this.planeOffset=e*t*.5;var i=this.uniforms.vClipPlane.value[0].clone(),r=new THREE.Vector3(i.x,i.y,i.z);r.normalize();var n=new THREE.Vector3(r.x*this.planeOffset,r.y*this.planeOffset,r.z*this.planeOffset);this.position.copy(this.center).add(n),this.update()}restoreRotation(){this.quaternion.set(0,0,0,1),this.update()}getProcess(){var e=0;return this.normalIndex<2?e=this.cubeSize.x:this.normalIndex<4?e=this.cubeSize.z:this.normalIndex<6&&(e=this.cubeSize.y),this.planeOffset/e*2}init(){this.initPlaneModel(),this.initWireframes()}hitTest(e){if(this.visible){var t=null,i=null;if(this.hit=this.raycast(e),this.hit){var r=e.ray,n=new THREE.Plane,a=this.uniforms.vClipPlane.value[0];n.setComponents(a.x,a.y,a.z,a.w),t=r.distanceToPlane(n),i=r.direction.dot(n.normal)<0}return{sign:i,distance:t}}this.hit=!1}raycast(e,t){var i=[];return this.planeMesh.raycast(e,i),i.length>0}resize(e){var t=Math.max(e.x,Math.max(e.y,e.z))/this.length;this.scale.set(t,t,t),this.cubeSize.copy(e)}setBorder(e,t,i){this.planeWidth=e,this.planeHeight=t,this.resizeGeometry(e,t),this.cubeSize.set(1,e,t),this.originBoundingBox=(new THREE.Box3).setFromCenterAndSize(this.center,this.cubeSize),this.boundingBox=this.originBoundingBox.clone(),this.innerClipping=!r.Utils.isDefined(i)||i,this.limitDragging=!1,this.update()}getSideLength(){return this.length*this.scale.x}updateCamera(e){!1!==this.visible&&(e.calculateNearFar({fillClipPlane:!0}),e.cameraControl.updateCamera())}}r.FillClipPlane=o})(),r.ClipPlaneService=function(e){this.viewer=e},r.ClipPlaneService.prototype={construtor:r.ClipPlaneService,destroy:function(){this.viewer=null},update:function(e){var t=this.getEditor();t&&(t.update(e),this.viewer.render())},getEditor:function(){for(var e=this.viewer.editorManager.tools,t=0;t<e.length;t++)if(e[t].getName()==r.EditToolMode.CLIP_BY_BOX)return e[t];return null},setSectionBox:function(e,t){this.getEditor().setSectionBox(e,t)},toggle:function(e,t){this.getEditor().toggle(e,t)},setVisible:function(e){this.getEditor().visible(e)},setRotatable:function(e){this.getEditor().rotatable(e)},enablePick:function(e){this.getEditor().enablePick=e},saveState:function(){return this.getEditor().store()},loadState:function(e){this.getEditor().restore(e)},reset:function(){r.ClipPlaneManager.resetClipPlanes(this.viewer.getScene()),this.getEditor().reset()},recalculate:function(){return this.viewer.getFilter().getVisibleComponentsBbox()},setProcess:function(e,t){this.getEditor().setProcess(e,t)},getProcess:function(e){return this.getEditor().getProcess(e)},changeDirection:function(e){this.getEditor().changeDirection(e)},visibleCapsWireframe:function(e){return this.getEditor().visibleCapsWireframe(e)}},(()=>{let e=new THREE.Vector3,t=new THREE.Vector3;class i{constructor(){}}i.getInstance=function(i){if(null==i.clipPlanes){var n=i.getBoundingBox();i.clipPlanes=new r.ClipPlanes(n.getSize(t).multiplyScalar(i.expandScalar),n.getCenter(e)),i.objectGroups.add(i.clipPlanes)}return i.clipPlanes},i.destroy=function(e){e.clipPlanes=null},i.setClipPlanes=function(i,n){if(n){var a=r.ClipPlaneManager.getInstance(i);n.setFromCenterAndSize(n.getCenter(e),n.getSize(t).multiplyScalar(i.expandScalar)),a.setSectionBox(n.min,n.max)}},i.resetClipPlanes=function(i){var n=r.ClipPlaneManager.getInstance(i),a=i.getBoundingBox();n.reset(),a.max.x!=-1/0&&a.max.y!=-1/0&&a.max.z!=-1/0&&a.min.x!=1/0&&a.min.y!=1/0&&a.min.z!=1/0?(a.setFromCenterAndSize(a.getCenter(e),a.getSize(t).multiplyScalar(i.expandScalar)),n.setSectionBox(a.min,a.max)):i.clipPlanes=null},i.disableClipPlanes=function(e){null!=e.clipPlanes&&(e.clipPlanes.enable(!1,!1),e.clipPlanes.update())},r.ClipPlaneManager=i})(),(()=>{let e=new THREE.Vector3,t=new THREE.Vector3;class i{constructor(){}}i.getInstance=function(i){if(null==i.fillClipPlane){var n=new THREE.Box3;n.copy(i.getBoundingBoxWithoutDEM()),i.fillClipPlane=new r.FillClipPlane(n.getSize(t).multiplyScalar(i.expandScalar),n.getCenter(e)),i.objectGroups.add(i.fillClipPlane)}return i.fillClipPlane},i.destroy=function(e){e.fillClipPlane=null},i.disableClipPlanes=function(e){null!=e.fillClipPlane&&(e.fillClipPlane.enable(!1,!1),e.fillClipPlane.update())},i.getFillClipPlaneBoundingBoxWorld=function(e){const t=i.getInstance(e).planeMesh;t.geometry.computeBoundingBox();let r=t.geometry.boundingBox.clone();var n=e.getInverseMatrixGlobal();return r.applyMatrix4(t.matrixWorld).applyMatrix4(n),r},i.getCreatedFillClipPlane=function(e){return e.fillClipPlane},r.FillClipPlaneManager=i})(),function(){class e{constructor(){}static getContours(t,i,n){let a,s,o=[],l=(e,t,i)=>{let r=0;for(let n=0;n<i.length;n++){let a=i[n];if(n!=t&&0==a.checked&&a.faceIndex==e.faceIndex){r=n;break}}return r},d=(t,i)=>{let n=-1;for(let a=0;a<i.length;a++){let s=i[a];if(0==s.checked&&r.GeomUtil.isVector3Equal(s,t,e.tolerance)){n=a;break}}return n},h=(t,i,n)=>{let a=d(t,i);if(-1===a&&(t.x=n[0].x,t.y=n[0].y,t.z=n[0].z,n.reverse(),a=d(t,i),-1===a))return n;let s=i[a];s.checked=!0;let o=i[l(s,a,i)];return o.checked=!0,r.GeomUtil.isVector3Equal(o,n[0],e.tolerance)?(n.push(n[0].clone()),n):(n.push(o.clone()),h(o,i,n))},c=0,u=0;for(let e=0;e<t.length;e++)if(1!=t[e].checked){c=e,a=t[c],a.checked=!0,u=l(a,c,t),s=t[u],s.checked=!0,o.push(a.clone()),o.push(s.clone());break}o=h(s,t,o),i.push(o);let p=0;return t.forEach((e=>{p+=1==e.checked?1:0})),p!=t.length?this.getContours(t,i,!1):i}static concatContours(t){if(1===t.length)return t[0];let i=[];t.map((e=>{e.map((e=>{let t={checked:!1};t.line=e,i.push(t)}))}));let n=[],a=t=>{let i,s=(t,i,n)=>{let a=-1;for(let o=0;o<n.length;o++){const l=n[o],d=l.line;if(o!==i&&1!=l.checked){if(r.GeomUtil.isVector3Equal(t[0],d[0],e.tolerance)){t.reverse(),d.map(((e,i)=>{0!=i&&t.push(e)})),a=o,n[o].checked=!0,s(t,a,n);break}if(r.GeomUtil.isVector3Equal(t[0],d[d.length-1],e.tolerance)){d.reverse(),d.map(((e,i)=>{0!=i&&t.unshift(e)})),a=o,n[o].checked=!0,s(t,a,n);break}if(r.GeomUtil.isVector3Equal(t[t.length-1],d[0],e.tolerance))d.map(((e,i)=>{0!=i&&t.push(e)})),a=o,n[o].checked=!0,s(t,a,n);else if(r.GeomUtil.isVector3Equal(t[t.length-1],d[d.length-1],e.tolerance)){d.reverse(),d.map(((e,i)=>{0!=i&&t.push(e)})),a=o,n[o].checked=!0,s(t,a,n);break}}}},o=0;for(let e=0;e<t.length;e++){if(!0===t[e].checked)continue;i=t[e],t[e].checked=!0,o=e,s(i.line,o,t),n.push(i.line);let r=0;if(t.forEach((e=>{r+=1==e.checked?1:0})),r!=t.length)return a(t)}return n};return a(i)}static searchInnerRing(e){let t=e=>{const t=e[0],i=e[e.length-1];return r.GeomUtil.isVector3Equal(t,i,.1)};e.length;let i=[];e.map((e=>{let t={checked:!1};t.line=e,t.box=new THREE.Box3,e.map((e=>{t.box.expandByPoint(e)})),i.push(t)}));let n={},a=e=>{let i,r=(e,t,i)=>{for(let r=0;r<i.length;r++){const a=i[r],s=a.box;if(r!==t&&1!=a.checked)if(e.containsBox(s)){void 0===n[t]?n[t]=[r]:n[t].push(r),n[r]&&n[r].length>0&&(n[t]=n[t].concat(n[r]),delete n[r]);for(const e in n)n[e].indexOf(t)>-1&&(n[e]=n[e].concat(n[t]),delete n[t]);i[r].checked=!0}else if(s.containsBox(e)){void 0===n[r]?n[r]=[t]:n[r].push(t),i[r].checked=!0,n[t]&&n[t].length>0&&(n[r]=n[r].concat(n[t]),delete n[t]);for(const e in n)n[e].indexOf(r)>-1&&(n[e]=n[e].concat(n[r]),delete n[r])}else;}},s=0;for(let n=0;n<e.length;n++){if(!t(e[n].line))continue;if(!0===e[n].checked)continue;i=e[n],e[n].checked=!0,s=n,r(i.box,s,e);let o=0;if(e.forEach((e=>{o+=1==e.checked?1:0})),o!=e.length)return a(e)}};return a(i),n}}e.tolerance=.001,r.ClipPlaneContourManager=e}(),(()=>{let e=new THREE.Matrix4,t=new THREE.Vector3;class i extends r.BaseModel{constructor(e){super(e.getModelManager(),{modelId:"ExternalComponent"}),this.manager.addModel(this),this.filter=new r.FilterManager,this.filter.setObserverForSceneState(this.manager.getFilter().getObserverForSceneState()),this.castShadow=!1,this.receiveShadow=!1,this.meshes={},this.customSelectMaterials={},this.databagId="ExternalComponent",this.objectIds=null,this.lastFilteredIds=null,this.firstAnimation=!0,this.animationIds={},this.animationLength=0,this.animationId=0,this.invalidObjectType=["invalidPlane"],this.floorExplosion=!1,this.blinkMaterials=[],this.blinkMaterialMap={},this.blinkOriginMaterialMap={},this.rawBoundingBoxMap={},this.bindModelMap={},this.mixers={},this.activeMixerIndex={},this.actions={},this.hoveredRenderOrder=-100}destroy(){if(this.manager.removeModel(this.id),this.pickingNodeGenerators){for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].destroy();this.pickingNodeGenerators=null}this._removeNodeGroup(),this.meshes=null,this.customSelectMaterials=null,this.objectIds=null,this.lastFilteredIds=null,this._cancelAnimate(),this.firstAnimation=null,this.animationIds=null,this.invalidObjectType=null,this.blinkMaterials=null,this.blinkMaterialMap=null,this.blinkOriginMaterialMap=null,this.selectedIds=null,this.blinkedIds=null,this.rawBoundingBoxMap=null,this.bindModelMap=null,super.destroy()}cloneNode(e,t){this.addNode(t,this.meshes[e])}addNode(t,i,n={}){if(!r.Utils.isDefined(i))return void console.log("Warning: the object is invalid");if(this.meshes[t])return void console.log("Warning: name is already exist, please change name ");if(-1!=this.invalidObjectType.indexOf(i.type))return void console.log("Warning: the object is invalid");let a;i.externalComponentManager=this,i instanceof Array||(i=[i]);for(let e in this.meshes)if(this.meshes[e][0].uuid===i[0].uuid){a=e;break}if(a){this.meshes[t]=[];let e=this.meshes[a].length;for(let i=0;i<e;i++)this.meshes[t][i]=r.SkeletonUtils.clone(this.meshes[a][i]),this.meshes[t][i].animations=this.meshes[a][i].animations,this.meshes[t][i].position.copy(this.meshes[a][i]._oriPosition),this.meshes[t][i].quaternion.copy(this.meshes[a][i]._oriQuaternion),this.meshes[t][i].scale.copy(this.meshes[a][i]._oriScale),this.meshes[t][i].matrix=(new THREE.Matrix4).copy(this.meshes[a][i]._oriMatrix);i=this.meshes[t]}else this.meshes[t]=i;var s,o,l=[r.ExternalObjectConverterGroup];for(s=0,o=i.length;s<o;s++){var d=!1;l.some((e=>(i[s]instanceof e&&(d=!0),d))),d?(c=i[s].clone(),i[s]=c):c=i[s],void 0===c._oriMatrix&&(c._oriMatrix=new THREE.Matrix4),c._oriPosition=(new THREE.Vector3).copy(c.position),c._oriQuaternion=(new THREE.Quaternion).copy(c.quaternion),c._oriScale=(new THREE.Vector3).copy(c.scale),c._oriMatrix.compose(c.position,c.quaternion,c.scale)}this._isPickingEffectEnabled()&&this.getPickingNodeGenerator().addNode(t,i),n.customSelectMaterial&&(this.customSelectMaterials[t]=n.customSelectMaterial);var h=this.getModelManager().viewer;for(s=0,o=i.length;s<o;s++){var c;(c=i[s]).name=t;var u=new THREE.Box3;u.setFromObject(c),c.box=u,e.copy(c.matrix).invert(),c.originBox=u.clone().applyMatrix4(e),this._initializeAutoAnimation(c,t),this._getNodeGroup().add(c),c.updateMatrixWorld(!0);let a=r.Utils.defaultValue(n.holdMaterialWhenPicked,!1);this._cacheNodeMaterial(c,a),r.GlobalData.EnableShadowMap&&(h.traverseGroupEnableShadow(c,this.castShadow,this.receiveShadow),h.updateShadowMap())}let p=r.Utils.defaultValue(n.objectData,{});if(r.Utils.isDefined(i[0].sourceComponentId)){let e=h.getUserdataByUserId(i[0].sourceComponentId);r.Utils.isDefined(e)&&(p=Object.assign({},p,e))}this._addToNodeInfoMap({name:t,userId:t,boundingBox:new THREE.Box3,state:r.EnumObjectState.Visible,userData:p}),this._updateBoundingBoxByObjectId(t),this._updateFilterManager(),this.objectIds=Object.keys(this.meshes),this.rawBoundingBoxMap[t]=this.getBoundingBoxById(t).clone()}setObjectData(e,t){this._updateUserData(e,t)}getObjectData(e){if(!this.nodeInfoMap)return;const t=this.nodeInfoMap[e];return r.Utils.isDefined(t)?t[0].userData:void 0}bindModel(e,t,i){if(t=r.Utils.defaultValue(t,"ExternalComponent"),this.meshes[e]&&this.getModelManager().modelCollection.getIds().indexOf(t.toString())>=0){if(this.getBindedInfo(e))return;this.bindModelMap[t]||(this.bindModelMap[t]={}),this.bindModelMap[t][e]=i||-1;let r=this.getModelManager().explosionManager;if(0!==r.getFloorExplosionExtent(t)){let i=r.getFloorInfos(t),n=this.meshes[e],a=this.getPickingNodeGenerator().pickingNodeMap[e];for(let e=0;e<n.length;e++){let t=n[e],r=a[e];this.explodeMesh(t,r,i,!0)}}}}unbindModel(e,t){if(this.bindModelMap[t]&&this.bindModelMap[t][e]){delete this.bindModelMap[t][e];const i=(e,t)=>{if(void 0!==e.explodedHeight){const i=e.explodedDirection.clone().negate().multiplyScalar(e.explodedHeight);let r=new THREE.Matrix4;r.makeTranslation(i.x,i.y,i.z),e.applyMatrix4(r),e.updateMatrixWorld(),t.applyMatrix4(r),t.updateMatrixWorld(),delete e.explodedDirection,delete e.explodedHeight,delete e.preExplodedDirection,delete e.preExplodedHeight}};let r=this.meshes[e];if(!r)return;let n=this.getPickingNodeGenerator().pickingNodeMap[e];for(let e=0;e<r.length;e++){i(r[e],n[e])}}}getBindedInfo(e){let t,i;return Object.keys(this.bindModelMap).some((r=>{let n=this.bindModelMap[r][e];if(n)return t=r,i=n,!0})),t?-1==i?{modelId:t}:{modelId:t,objectId:i}:void 0}getNodeById(e){var t=this.meshes[e];return t&&1===t.length?t[0]:t}removeNodeById(e){if(!this._hasObjectId(e))return;var t=this.meshes[e];t[0].autoAnimation&&(delete this.animationIds[e],this.animationLength--,0==this.animationLength&&this._cancelAnimate()),delete this.meshes[e],delete this.rawBoundingBoxMap[e],this._isPickingEffectEnabled()&&this.getPickingNodeGenerator().removeNodeById(e),this.customSelectMaterials[e]&&delete this.customSelectMaterials[e];for(var i=this._getNodeGroup(),r=0,n=t.length;r<n;r++)i.remove(t[r]);this._removeFromNodeInfoMap(e),this._updateFilterManager(),this.filteredIds&&this.filteredIds[e]&&(delete this.filteredIds[e],this.lastFilteredIds=Object.keys(this.filteredIds)),this.objectIds=Object.keys(this.meshes),this.getModelManager().viewer.updateShadowMap();let a=this.getBindedInfo(e);a&&this.unbindModel(e,a.modelId)}clearGroup(e){for(;e.children.length>0;)this.clearGroup(e.children[0]),e.remove(e.children[0]);e.geometry&&e.geometry.dispose(),e.geometry=null,e.material&&(Object.keys(e.material).forEach((t=>{e.material[t]&&null!==e.material[t]&&"function"==typeof e.material[t].dispose&&e.material[t].dispose()})),e.material.dispose(),e.material=null)}clearNodes(){this._isPickingEffectEnabled()&&this.getPickingNodeGenerator().clearNodes(),this.clearGroup(this._getNodeGroup()),this._getNodeGroup().clear(),this._clearNodeInfoMap(),this.meshes={},this.rawBoundingBoxMap={},this.customSelectMaterials={},this.objectIds=null,this.animationIds={},this.animationLength=0,this._cancelAnimate(),this._updateFilterManager(),this.filteredIds&&(this.filteredIds={},this.lastFilteredIds=Object.keys(this.filteredIds)),this.getModelManager().viewer.updateShadowMap(),this.bindModelMap={}}getAllNodes(){return this.meshes}getAllMeshes(){let e=[],t=i=>{r.Utils.isGroupObject(i)?i.children.forEach((function(i){r.Utils.isMeshObject(i)?e.push(i):t(i)})):e.push(i)};for(let e in this.meshes){this.meshes[e].forEach((e=>{t(e)}))}return e}setAccumulateTransform(e,t,i,r,n){if(this.floorExplosion&&n)n();else if(this._hasObjectId(e)){for(var a=this.meshes[e],s=0,o=a.length;s<o;s++){var l=a[s];this.setAccumulateTransformForMesh(l,t,i,r),l.box=l.originBox.clone().applyMatrix4(l.matrix)}this._updateBoundingBoxByObjectId(e),this._isPickingEffectEnabled()&&this.getPickingNodeGenerator().setAccumulateTransform(e,t,i,r),this.getModelManager().viewer.updateShadowMap()}}setAccumulateOffset(e,t){if(this._hasObjectId(e)&&"[object Object]"===Object.prototype.toString.call(t)&&t.hasOwnProperty("x")&&t.hasOwnProperty("y")&&t.hasOwnProperty("z")){t instanceof THREE.Vector3||(t=new THREE.Vector3(t.x,t.y,t.z));var i=this.meshes[e];if(i.length>0){var r=i[0],n=t.applyQuaternion(r.quaternion);this.setAccumulateTransform(e,n)}}}setTransform(e,t,i,r,n,a){if(this.floorExplosion&&n)n();else if(this._hasObjectId(e)){for(var s=this.meshes[e],o=0,l=s.length;o<l;o++){var d=s[o];this.setTransformForMesh(d,t,i,r,a),d.box=d.originBox.clone().applyMatrix4(d.matrix)}this._updateBoundingBoxByObjectId(e),this._isPickingEffectEnabled()&&this.getPickingNodeGenerator().setTransform(e,t,i,r,a),this.getModelManager().viewer.updateShadowMap()}}rotateOnBasePoint(e,t,i,r){if(!this._hasObjectId(e))return;var n=this.meshes[e];let a=new THREE.Vector3(t.x,t.y,t.z),s=new THREE.Vector3(i.x,i.y,i.z).normalize();for(var o=0,l=n.length;o<l;o++){let e=n[o],t=e.quaternion.clone().clone().invert(),i=e.position.clone(),l=(new THREE.Quaternion).setFromAxisAngle(s,r);e.quaternion.multiply(l);let d=a.clone().sub(i).applyQuaternion(t).applyQuaternion(e.quaternion);e.position.sub(d).add(a.clone().sub(i)),e.updateMatrixWorld(),e.box=e.originBox.clone().applyMatrix4(e.matrix)}this._updateBoundingBoxByObjectId(e),this._isPickingEffectEnabled()&&this.getPickingNodeGenerator().rotateOnBasePoint(e,a,s,r),this.getModelManager().viewer.updateShadowMap()}scaleOnBasePoint(e,t,i){if(!this._hasObjectId(e))return;var r=this.meshes[e];let n=new THREE.Vector3(t.x,t.y,t.z),a=new THREE.Vector3(i.x,i.y,i.z);for(var s=0,o=r.length;s<o;s++){let e=r[s];e.scale.multiply(a);let t=a.clone().sub(new THREE.Vector3(1,1,1)),i=e.quaternion.clone(),o=i.clone().invert(),l=e.position.clone(),d=n.clone().sub(l).applyQuaternion(o).multiply(t).applyQuaternion(i);e.position.sub(d),e.updateMatrixWorld(),e.box=e.originBox.clone().applyMatrix4(e.matrix)}this._updateBoundingBoxByObjectId(e),this._isPickingEffectEnabled()&&this.getPickingNodeGenerator().scaleOnBasePoint(e,n,a)}getTransform(e){if(!this._hasObjectId(e))return null;var t=this.meshes[e];return{position:t[0].position,scale:t[0].scale,rotate:t[0].quaternion}}applyTransform(e,t,i,r){if(this._hasObjectId(e)){var n=this.getTransformMatrix(t,i,r);this.applyTransformMatrix(e,n),this.getModelManager().viewer.updateShadowMap()}}applyTransformMatrix(e,t,i){if(this._hasObjectId(e)){for(var r=this.meshes[e],n=0,a=r.length;n<a;n++){var s=r[n];this.updateMatrixWorldForMesh(s,t,i);var o=s.originBox.clone();s.box=o.applyMatrix4(s.matrix)}this._updateBoundingBoxByObjectId(e),this._isPickingEffectEnabled()&&this.getPickingNodeGenerator().applyTransformMatrix(e,t,i),this.getModelManager().viewer.updateShadowMap()}}getTransformMatrix(e,t,i){e=e||new THREE.Vector3,t=t||new THREE.Vector3(1,1,1),i=i||new THREE.Quaternion;var r=new THREE.Matrix4;return r.compose(e,i,t),r}setAccumulateTransformForMesh(e,t,i,r){t&&(e.position.x+=t.x,e.position.y+=t.y,e.position.z+=t.z),i&&(e.scale.x*=i.x,e.scale.y*=i.y,e.scale.z*=i.z),r&&(e.rotation.x+=r.x,e.rotation.y+=r.y,e.rotation.z+=r.z),e.updateMatrixWorld(),this.getModelManager().viewer.updateShadowMap()}setTransformForMesh(e,t,i,r,n){t=t||e.position,i=i||e.scale,r=r||e.quaternion;var a=this.getTransformMatrix(t,i,r);this.updateMatrixWorldForMesh(e,a,n),this.getModelManager().viewer.updateShadowMap()}updateMatrixWorldForMesh(e,t,i){var r;i?r=t:r=(e._oriMatrix?e._oriMatrix:new THREE.Matrix4).clone().premultiply(t);r.decompose(e.position,e.quaternion,e.scale),e.matrixAutoUpdate||e.matrix.copy(r),e.updateMatrixWorld(!0),this.getModelManager().viewer.updateShadowMap()}applyFilter(){this._hasNode()&&(this._collectFilteredIds(),this._collectSelectedIds(),this._collectBlinkedIds(),this._collectHoveredIds(),this._updateNodes())}applySelection(){this._hasNode()&&(this._collectSelectedIds(),this._collectHoveredIds(),this._updateNodes())}clearSelection(){this._hasNode()&&(this._clearSelectedIds(),this.applyHover())}applyHover(){this._hasNode()&&(this._collectHoveredIds(),this._updateNodes())}clearHover(){this._hasNode()&&(this._clearHoveredIds(),this._updateNodes())}applyBlink(){this._hasNode()&&(this._collectBlinkedIds(),this._collectHoveredIds(),this._updateNodes())}clearBlink(){this._clearBlinkedIds(),this.applyHover()}getAllNodeInfos(){return this.nodeInfoMap}getNodeInfosByUserId(e){return this.nodeInfoMap?this.nodeInfoMap[e]:void 0}_addToNodeInfoMap(e){this.nodeInfoMap||(this.nodeInfoMap={}),this.nodeInfoMap[e.userId]||(this.nodeInfoMap[e.userId]=[]),this.nodeInfoMap[e.userId].push(e)}_removeFromNodeInfoMap(e){this.nodeInfoMap&&this.nodeInfoMap[e]&&delete this.nodeInfoMap[e]}_updateUserData(e,t){if(!this.nodeInfoMap)return;const i=this.nodeInfoMap[e];r.Utils.isDefined(i)&&(i.forEach((e=>{e.userData=Object.assign({},e.userData,t)})),this._updateFilterManager())}_clearNodeInfoMap(){this.nodeInfoMap={}}_updateFilterManager(){var e={};e[this.id]=this.getAllNodeInfos(),this.getFilter().reinitFilterManager(e)}checkVisibleComponentsBox(){var e=0;for(var t in this.meshes)for(var i=this.meshes[t],r=0;r<i.length;r++){var n=i[r];0!=n.children.length&&(e++,this.nodeInfoMap[t]&&this.nodeInfoMap[t][r]&&this.nodeInfoMap[t][r].boundingBox.isEmpty()&&this.nodeInfoMap[t][r].boundingBox.copy(n.box))}return 0!=e}_updateBoundingBoxByObjectId(e){if(this.nodeInfoMap&&this._hasObjectId(e)){var t,i,r=this.meshes[e],n=new THREE.Box3;for(t=0,i=r.length;t<i;t++)n.union(r[t].box);var a=this.nodeInfoMap[e];for(t=0,i=a.length;t<i;t++)a[t].boundingBox.copy(n)}}_canBePick(e){return!e._materialHold}_getNodeGroup(){return this.getModelManager().getScene().getOrCreateObjectGroup(r.ObjectGroupType.EXTERNALCOMPONENTMANAGER,{pickableType:r.PICKABLETYPE.ExternalComponent,globalSpace:!0})}_removeNodeGroup(){this.getModelManager().getScene().removeObjectGroupByName(r.ObjectGroupType.EXTERNALCOMPONENTMANAGER)}_cacheNodeMaterial(e,t){r.Utils.isGroupObject(e)?e.traverse((function(e){if(r.Utils.isMeshObject(e)&&!e._oriMaterial&&(e._oriRenderOrder=e.renderOrder,e._oriMaterial=e.material,e._materialHold=t,!e.geometry.index&&e.geometry.attributes&&e.geometry.attributes.position)){for(var i=[],n=0,a=e.geometry.attributes.position.array.length/3;n<a;n++)i.push(n);e.geometry.setIndex(new THREE.BufferAttribute(new Uint32Array(i),1))}})):e._oriMaterial||(e._oriRenderOrder=e.renderOrder,e._oriMaterial=e.material,e._materialHold=t)}_collectFilteredIds(){var e=this.filteredIds={},t=this.getFilter(),i=t._hasHiddenFileIdFilter(),n=t._hasVisibleFilter(),a=t._hasOverrideMaterialFilter(),s=t._hasTransparentFilter();if(i||n||a||s)for(var o=this.objectIds,l=r.Model.EnumFilterState,d=0,h=o.length;d<h;d++){var c=o[d],u={name:c};if(n&&!1===t._isVisible(u))e[c]||(e[c]={}),e[c][l.HIDDEN]=!0;else if(s&&t._isTransparent(u))e[c]||(e[c]={}),e[c][l.TRANSPARENT]=!0;else if(a&&t._hasOverrideMaterial(u)){var p=t._getOverrideMaterial(u),m=null!=p?p.name:"";e[c]||(e[c]={}),e[c][l.OVERRIDED]=m}else;}}_collectSelectedIds(){var e=this.filteredIds=this.filteredIds||{},t=r.Model.EnumFilterState,i=this.getModelManager().sceneState.getSelection(),n={};this._clearSelectedIds();for(var a=0,s=i.length;a<s;a++){var o=i[a];this.canBeSelectedId(o)&&(e[o]||(e[o]={}),e[o][t.SELECTED]=!0,n[o]=!0)}this.selectedIds=Object.keys(n)}_clearSelectedIds(){if(this.filteredIds&&this.selectedIds&&this.selectedIds.length){for(var e=0,t=this.selectedIds.length;e<t;e++){var i=this.selectedIds[e];this.filteredIds[i]&&delete this.filteredIds[i][r.Model.EnumFilterState.SELECTED]}this.selectedIds=null}}_collectHoveredIds(){this._clearHoveredIds();var e=this.getModelManager().sceneState.hoverId;if(e&&this._hasObjectId(e)){var t=this.filteredIds=this.filteredIds||{};this.hoveredId=e,t[e]||(t[e]={}),t[e][r.Model.EnumFilterState.HOVER]=!0}}_clearHoveredIds(){this.filteredIds&&this.hoveredId&&this.filteredIds[this.hoveredId]&&(delete this.filteredIds[this.hoveredId][r.Model.EnumFilterState.HOVER],this.hoveredId=void 0)}_collectBlinkedIds(){var e=this.manager.sceneState.getBlinkComponentsIdMap(this.id),t=this.filteredIds=this.filteredIds||{},i=r.Model.EnumFilterState,n={};for(var a in this._clearBlinkedIds(),e)this._hasObjectId(a)&&(t[a]||(t[a]={}),t[a][i.BLINK]=!0,n[a]=!0);this.blinkedIds=Object.keys(n)}_clearBlinkedIds(){if(this.filteredIds&&this.blinkedIds&&this.blinkedIds.length){for(var e=0,t=this.blinkedIds.length;e<t;e++){var i=this.blinkedIds[e];this.filteredIds[i]&&delete this.filteredIds[i][r.Model.EnumFilterState.BLINK]}this.blinkedIds=null}}_hasObjectId(e){var t=this.meshes[e];return!(!t||!t.length)}canBeSelectedId(e){var t=this.meshes[e];return!(!t||t[0].disPickable)}_hasNode(){return!(!this.objectIds||!this.objectIds.length)}_traverseNodeById(e,t){if(this._hasObjectId(e))for(var i=this.meshes[e],n=0,a=i.length;n<a;n++){var s=i[n];r.Utils.isGroupObject(s)?s.traverseVisible((function(e){r.Utils.isMeshObject(e)&&t&&t(e)})):r.Utils.isMeshObject(s)&&t&&t(s)}}_resetNodeMaterial(){var e=this.lastFilteredIds;if(e&&e.length)for(var t=0,i=e.length;t<i;t++)this._updateNodeVisible(e[t],!0),this._traverseNodeById(e[t],(function(e){e.material=e._oriMaterial,e.renderOrder=e._oriRenderOrder}))}_updateNodeVisible(e,t){for(var i=this.meshes[e],r=0,n=i.length;r<n;r++)i[r].visible=t}updateSelectEffect(){for(let t in this.meshes){var e=this.meshes[t];e[0]._geometryUpdated&&(this.getPickingNodeGenerator().removeNodeById(t),this.getPickingNodeGenerator().addNode(t,e),e[0]._geometryUpdated=!0)}}_updateNodeById(e,t){if(this._hasObjectId(e)){var i=this,n=this.hoveredRenderOrder,a=this.getModelManager().sceneState,s=r.Model.EnumFilterState,o=this.filteredIds[e];if(o)if(o[s.HIDDEN])this._updateNodeVisible(e,!1);else if(o[s.TRANSPARENT]){var l=t._getMaterialByName("scene");this._traverseNodeById(e,(function(e){i._canBePick(e)&&(e._oriMaterial instanceof r.CloudStandardMaterial?e.material=l:e.material=r.MaterialUtil.cloneMaterialBaseOnColor(e._oriMaterial,l))}))}else if(this._isPickingEffectEnabled()||!o[s.SELECTED])if(o[s.BLINK])if(o[s.OVERRIDED]){var d=t._getMaterialByName(o[s.OVERRIDED]),h=a.getBlinkMaterial(d,this.id);this._traverseNodeById(e,(function(e){var t=!1;if(e._oriMaterial instanceof r.CloudStandardMaterial)t=!0,e.material=h;else{var n=r.Blink.MaterialFactory[e._oriMaterial.type];n?(t=!0,e.material=i.blinkOriginMaterialMap[e.uuid]||n(),e.material.copy(e._oriMaterial)):e.material=r.MaterialUtil.cloneMaterialBaseOnColor(e._oriMaterial,d)}var a=e.material.uuid;t&&void 0===i.blinkMaterialMap[a]&&(i.blinkMaterialMap[a]=!0,i.blinkOriginMaterialMap[e.uuid]=e.material,i.blinkMaterials.push(e.material))}))}else this._traverseNodeById(e,(e=>{var t=!1;if(e._oriMaterial instanceof r.CloudStandardMaterial)t=!0,e.material=a.getBlinkMaterial(e._oriMaterial,this.id);else{var n=r.Blink.MaterialFactory[e._oriMaterial.type];n&&(t=!0,e.material=i.blinkOriginMaterialMap[e.uuid]||n(),e.material.copy(e._oriMaterial))}var s=e.material.uuid;t&&void 0===i.blinkMaterialMap[s]&&(i.blinkMaterialMap[s]=!0,i.blinkOriginMaterialMap[e.uuid]=e.material,i.blinkMaterials.push(e.material))}));else if(o[s.HOVER])if(o[s.OVERRIDED]){l=a.getHoverMaterial(t._getMaterialByName(o[s.OVERRIDED]));this._traverseNodeById(e,(function(e){i._canBePick(e)&&(e.renderOrder=n,e._oriMaterial instanceof r.CloudStandardMaterial?e.material=l:e.material=r.MaterialUtil.cloneMaterialBaseOnColor(e._oriMaterial,l))}))}else this._traverseNodeById(e,(function(e){if(i._canBePick(e)){e.renderOrder=n;var t=a.getHoverMaterial(e._oriMaterial);e._oriMaterial instanceof r.CloudStandardMaterial?e.material=t:e.material=r.MaterialUtil.cloneMaterialBaseOnColor(e._oriMaterial,t)}}));else if(o[s.OVERRIDED]){var c=t._getMaterialByName(o[s.OVERRIDED]);this._traverseNodeById(e,(function(e){i._canBePick(e)&&(e._oriMaterial instanceof r.CloudStandardMaterial?e.material=c:e.material=r.MaterialUtil.cloneMaterialBaseOnColor(e._oriMaterial,c),e._oriMaterial.useCSM&&null===e.material.uniforms.csmCascades.value&&(e.material.uniforms.csmCascades=e._oriMaterial.uniforms.csmCascades))}))}else;else{var u=a.selectionMaterial,p=this.customSelectMaterials[e];this._traverseNodeById(e,(function(e){i._canBePick(e)&&(p?e.material=p:e._oriMaterial.isMeshPhongMaterial?(e.material=a.phongSelectionMaterial,e.material.skinning=e._oriMaterial.skinning):e._oriMaterial instanceof r.CloudStandardMaterial?e.material=u:e.material=r.MaterialUtil.cloneMaterialBaseOnColor(e._oriMaterial,u))}))}}}_updateNodes(){var e=this.getFilter();if(this._resetNodeMaterial(),this.blinkMaterialMap={},this.blinkMaterials.length=0,this.filteredIds){for(var t in this.filteredIds)this._updateNodeById(t,e);this.lastFilteredIds=Object.keys(this.filteredIds)}}_initializeAutoAnimation(e,i){var n=this.getModelManager().viewer;if(e.autoAnimation){if("fire"==e.type){var a=r.GlobalData.SceneSize,s=n.getBoundingBoxWorld().getSize(t),o=a/Math.max(s.x,s.y,s.z);e._initializeSizetween(o/.01421)}this._initializeAnimation(i)}}_initializeAnimation(e){this.firstAnimation&&(this._clock=new THREE.Clock,this._animate(),this.firstAnimation=!1),this.animationIds[e]=!0,this.animationLength++}play(e,t=0){if(this.actions[e]||(this.actions[e]=[]),!this.actions[e][t]){let i=this.getNodeById(e),r=new THREE.AnimationMixer(i);this.actions[e][t]=r.clipAction(i.animations[t]),this.mixers[e]||(this.mixers[e]=[]),this.mixers[e][t]=r,this._initializeAnimation(e,t)}this.activeMixerIndex[e]&&this.stop(e),this.activeMixerIndex[e]=t,this.actions[e][t].play(),this.actions[e][t].paused=!1}pause(e,t){void 0===t&&(t=this.activeMixerIndex[e]),void 0!==t&&this.actions[e]&&this.actions[e][t]&&(this.actions[e][t].paused=!0)}stop(e,t){void 0===t&&(t=this.activeMixerIndex[e]),void 0!==t&&this.actions[e]&&this.actions[e][t]&&(this.actions[e][t].paused=!1,this.actions[e][t].stop())}isAnimation(e){let t=this.getNodeById(e);return!!(t.animations&&t.animations.length>0)}_animate(){var e=this,t=this.getModelManager().viewer;!function i(){e.animationId=requestAnimationFrame(i);var r=e._clock.getDelta(),n=(JSON.parse(t.getCamera()),0);for(var a in e.meshes){var s=e.meshes[a];if(e.mixers[a]&&void 0!==e.activeMixerIndex[a])e.mixers[a][e.activeMixerIndex[a]].update(r);for(var o=0,l=s.length;o<l;o++)s[o].autoAnimation?s[o].update&&s[o].update():s[o].updateMatrixWorld(),null!=s[o].unrender&&0!=s[o].unrender||n++}n>0&&t.render()}()}_cancelAnimate(){this.firstAnimation=!0,cancelAnimationFrame(this.animationId),this.animationId=0}explodeMesh(e,t,i,r,n){let a,s,o,l;const d=t=>{a=e.explodedHeight=t.explodedHeight-t.elevation,s=e.explodedDirection=(t.explodedDirection||new THREE.Vector3).clone(),o=e.preExplodedHeight=t.preExplodedHeight-t.elevation,l=e.preExplodedDirection=(t.preExplodedDirection||new THREE.Vector3).clone()};let h=0;for(let t=i.length-1;t>=0;t--){let a=i[t];if(n){if(a.name==n){d(a);break}}else{let n=i[t].preExplodedTranslation?i[t].preExplodedTranslation.z:0;if(h=r?i[t].boundingBox.min.z:n+i[t].boundingBox.min.z,c=h,e.position.z>=c-1||0===t){d(a);break}}}var c;let u=new THREE.Matrix4;const p=s.clone().multiplyScalar(a).sub(l.clone().multiplyScalar(o));u.makeTranslation(p.x,p.y,p.z),e.applyMatrix4(u),e.updateMatrixWorld(),e.box=e.originBox.clone().applyMatrix4(e.matrix),t.applyMatrix4(u),t.updateMatrixWorld()}explode(e){const t=e.id;if(!t)return;let i=this.bindModelMap[t];if(!i)return;let r=Object.keys(i),n=this.getModelManager().explosionManager.getFloorInfos(t);for(let t=0;t<r.length;t++){let a=r[t],s=i[a],o=-1!=s?e.modelExplosion.getLevelNameByObjId(s):null,l=this.meshes[a];if(!l)continue;let d=this.getPickingNodeGenerator().pickingNodeMap[a];for(let e=0;e<l.length;e++){let t=l[e],i=d[e];this.explodeMesh(t,i,n,void 0,o)}this._updateBoundingBoxByObjectId(a)}}elementExplode(e,t,i){let n=e.id;if(!n)return;let a=this.bindModelMap[n];if(!a)return;let s=Object.keys(a),o=new THREE.Matrix4;for(let n=0;n<s.length;n++){let l=s[n],d=a[l],h=this.meshes[l];if(!h)continue;let c=this.getPickingNodeGenerator().pickingNodeMap[l];for(let n=0;n<h.length;n++){let a=h[n],s=c[n];a.elementExplodeBox||(a.elementExplodeBox=a.box);let l=-1!=d?e.modelExplosion.getExplosionTranslationByObjId(d):r.Utils.computeExplodeTranslation(i,a.elementExplodeBox,t);o.makeTranslation(l.x,l.y,l.z),a.applyMatrix4(o),a.updateMatrixWorld(),a.box=a.originBox.clone().applyMatrix4(a.matrix),s.applyMatrix4(o),s.updateMatrixWorld()}this._updateBoundingBoxByObjectId(l)}}isPickableNode(e){if(!this.canBeSelectedId(e.userId))return!1;var t=this.getFilter();return!t._isHiddenFileId(e)&&!1!==t._isVisible(e)&&!t._isTransparent(e)}hasTransforms(){return!1}isUserIdExist(e){return!!this.meshes[e]}_isPickingEffectEnabled(){return!!r.GlobalData.PickingEffect}getPickingNodeGenerator(e){if(e=null==e?"pick":e,this.pickingNodeGenerators||(this.pickingNodeGenerators={}),this.pickingNodeGenerators[e]||(this.pickingNodeGenerators[e]=new r.PickingExternalMeshGenerator(this),this.pickingNodeGenerators[e].reserveMaterial=!!e.startsWith("glow")),"pick"==e||null==this.pickingNodeGenerators.pick.pickingNodeMap||null!=this.pickingNodeGenerators[e].pickingNodeMap&&!this._checkDirtyData(this.pickingNodeGenerators.pick.pickingNodeMap,this.pickingNodeGenerators[e].pickingNodeMap)){if("pick"!=e&&null!=this.pickingNodeGenerators.pick.pickingNodeMap&&null!=this.pickingNodeGenerators[e].pickingNodeMap)for(o=0;o<this.pickingNodeGenerators[e].pickingNodeGroup.children.length;o++){var t=this.pickingNodeGenerators[e].pickingNodeGroup.children[o].name;if(this.pickingNodeGenerators[e].manager.meshes[t]&&this.pickingNodeGenerators[e].manager.meshes[t].length>0){var i=this.pickingNodeGenerators[e].manager.meshes[t][0];this.pickingNodeGenerators[e].pickingNodeGroup.children[o].rotation.copy(i.rotation),this.pickingNodeGenerators[e].pickingNodeGroup.children[o].position.copy(i.position),this.pickingNodeGenerators[e].pickingNodeGroup.children[o].scale.copy(i.scale)}}}else for(var n=this.pickingNodeGenerators[e],a=this.pickingNodeGenerators.pick.pickingNodeMap,s=Object.keys(a),o=0;o<s.length;o++)n.addToPickingNodeMap(s[o],[a[s[o]][0]]);return this.pickingNodeGenerators[e]}_checkDirtyData(e,t){for(var i=Object.keys(e),r=0;r<i.length;r++)if(null==t[i[r]])return!0;return!1}getPickingMeshes(e,t,i,r,n){var a=this.getPickingNodeGenerator(n).updatePickingMeshes(e,i,r);a&&(t[this.databagId]=a)}getBoundingBoxById(e){return this.isUserIdExist(e)?this.nodeInfoMap[e][0].boundingBox:new THREE.Box3}getBlinkMaterials(){return this.blinkMaterials}getBoundaryPoints(e){let t=this.rawBoundingBoxMap[e],i=this.getTransform(e);const r=(new THREE.Matrix4).compose(i.position,i.rotate,i.scale),n=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];return n[0].set(t.min.x,t.min.y,t.min.z).applyMatrix4(r),n[1].set(t.max.x,t.min.y,t.min.z).applyMatrix4(r),n[2].set(t.max.x,t.max.y,t.min.z).applyMatrix4(r),n[3].set(t.min.x,t.max.y,t.min.z).applyMatrix4(r),n[4].set(t.min.x,t.min.y,t.max.z).applyMatrix4(r),n[5].set(t.max.x,t.min.y,t.max.z).applyMatrix4(r),n[6].set(t.max.x,t.max.y,t.max.z).applyMatrix4(r),n[7].set(t.min.x,t.max.y,t.max.z).applyMatrix4(r),n}getAllNodeGroups(){return this._getNodeGroup().children}collectBlinkedMaterial(e,t){t.push(...this.blinkMaterials)}}r.ExternalComponentManager=i})(),function(){r.ExternalObjectConverter=class{constructor(e){this.viewer=e,this.geometryMapFromComponentId={},this.externalObjectMap={},this.defaultMaterial=r.MaterialUtil.getDefaultStandardMaterial()}destroy(){this.viewer=null,this.geometryMapFromComponentId=null,this.externalObjectMap=null,this.defaultMaterial=null}clear(){this.geometryMapFromComponentId={},this.externalObjectMap={},this.cancelAllHidden()}cancelHiddenByComponentId(e){this.viewer.setRenderStateChanged(!0),this.viewer.modelManager.getSourceObjectManager().cancelHiddenByUserId(e)}cancelAllHidden(){this.viewer.setRenderStateChanged(!0),this.viewer.modelManager.getSourceObjectManager().cancelAllHidden()}convertToExternalObject(e,t,i){return this._hideByUserId(t,i),this.externalObjectMap[e]||(this.externalObjectMap[e]=this._createMeshNodes(e,t)),this.externalObjectMap[e].clone()}getExternalObject(e){return this.externalObjectMap[e]}_hideByUserId(e,t){this.viewer.setRenderStateChanged(!0);var{modelId:i,objectId:r}=this.viewer.modelManager.filterHelper.distributeId(e);this.viewer.modelManager.traverseModels((function(e){if(e.tilesLoader){const t=e.tilesLoader.tileReader.getIndexByUserId(r);void 0!==t&&(r=t,e.filter.enableStateChanged(),e.filter.enableWireFrameStateChanged(),i=e.id)}else e.isUserIdExist(r)&&(i=e.id)})),this.viewer.modelManager.getSourceObjectManager().hideByUserId(r,t,i)}_getGeometries(e){var t=this.geometryMapFromComponentId[e];if(t)return t;var{modelId:i,objectId:n}=this.viewer.modelManager.filterHelper.distributeId(e),a=[];if(i){var s=this.viewer.modelManager.getModel(i);if(s._handler)a=a.concat(s._handler.getGeometryBuffersByUserId(n));else if(s.tilesLoader){const e=s.tilesLoader.tileReader.getIndexByUserId(n);a=a.concat(s.getGeometryBuffersByUserId(e))}}else this.viewer.modelManager.traverseModels((function(e){if(e._handler)a=a.concat(e._handler.getGeometryBuffersByUserId(n));else if(e.tilesLoader){const t=e.tilesLoader.tileReader.getIndexByUserId(n);if(!r.Utils.isDefined(t))return;a=a.concat(e.getGeometryBuffersByUserId(t))}}));return t=this.geometryMapFromComponentId[e]=this._createGeometry(a)}_createGeometry(e){for(var t=[],i=0,r=e.length;i<r;i++){var n=e[i],a=new THREE.BufferGeometry;if(a.setIndex(new THREE.BufferAttribute(n.index,1)),a.setAttribute("position",new THREE.BufferAttribute(n.position,3)),n.uv&&a.setAttribute("uv",new THREE.BufferAttribute(n.uv,2)),n.isLines||a.computeVertexNormals(),n.color){const e=new THREE.Uint8BufferAttribute(n.color,4);e.normalized=!0,a.setAttribute("color",e)}t.push({info:n,geometry:a})}return t}_createMeshNodes(t,i){var r=new e;r.name=t,r.sourceComponentId=i;for(var n=this._getGeometries(i),a=0,s=n.length;a<s;a++){var o=n[a].geometry,l=n[a].info,{modelId:d,objectId:h}=this.viewer.modelManager.filterHelper.distributeId(i);let e=null,t=this.viewer.modelManager.modelCollection.getById(l.databagId);if(t&&t.tilesLoader){let i=t.tilesLoader.getMeshNodeById(l.nodeId);e=void 0===i?this.defaultMaterial:i.material[0].clone()}else e=this.viewer.modelManager.getMaterialByNodeId(l.databagId,h,l.nodeId)||this.defaultMaterial;var c=new THREE.Mesh(o,e);c=l.isLines?new THREE.LineSegments(o,e):new THREE.Mesh(o,e),delete e.defines.CNORMAL,c._databagId=l.databagId,c._nodeId=l.nodeId,c._oriUserId=i,c._oriMaterial=e,c._cloned=!0,l.matrix&&(c.matrix.copy(l.matrix),c.matrix.decompose(c.position,c.quaternion,c.scale)),r.add(c)}return r}};class e extends THREE.Group{constructor(){super(),this.sourceComponentId=null}clone(e){return(e=super.clone(e)).sourceComponentId=this.sourceComponentId,e}}r.ExternalObjectConverterGroup=e}(),function(){let e,t=new THREE.Matrix4;r.GroundPrimitiveManager=class{constructor(e){this.viewer=e,this.groundCurveScene=new THREE.Scene,this.depthRenderTarget=new THREE.WebGLRenderTarget(1024,1024,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter}),this.depthWithoutDEMRenderTarget=new THREE.WebGLRenderTarget(1024,1024,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter}),this.shadowVolumes=[],this.shadowVolumeScene=new THREE.Scene,this.backMaterial=new THREE.MeshBasicMaterial({color:16711680,colorWrite:!1,depthWrite:!1,side:THREE.BackSide}),this.frontMaterial=new THREE.MeshBasicMaterial({color:255,colorWrite:!1,depthWrite:!1,side:THREE.FrontSide}),this.inVisibleModelIdMap=void 0,this.inVisibleGroupMap={}}destroy(){this.groundCurveScene=null,this.depthRenderTarget=null,this.depthWithoutDEMRenderTarget=null,this.shadowVolumes=null,this.shadowVolumeScene=null,this.backMaterial.dispose(),this.backMaterial=null,this.frontMaterial.dispose(),this.frontMaterial=null,this.viewer=null}createGroundCurve(e){var t=e.color,i=e.width;e.viewer=this.viewer;var n=new r.GroundCurveMaterial({color:new THREE.Color(t.red/255,t.green/255,t.blue/255)});n.side=THREE.DoubleSide,n.depthFunc=THREE.AlwaysDepth,n.depthWrite=!1,n.transparent=!0,n.blending=THREE.NormalBlending,n.opacity=t.alpha,n.lineWidth=i;var a=new r.GroundCurveGeometry(e),s=new r.GroundCurveMesh(a,n),o=this;return s.onBeforeRender=function(e,t,i,r,n,a){var s=n.frustumPlanes;s.x=i.near*Math.tan(.5*THREE.Math.degToRad(i.fov)),s.y=-s.x,s.w=i.aspect*s.x,s.z=-s.w,n.cameraNear=i.near,n.cameraFar=i.far,n.pixelRatio=e.getPixelRatio(),n.viewport.set(0,0,e.getContext().drawingBufferWidth,e.getContext().drawingBufferHeight);var l,d=n.viewport,h=THREE.Math.degToRad(i.fov);l=h?d.w>d.z?2*Math.tan(.5*h)/d.w:2*Math.tan(.5*h)/d.z:1/Math.max(d.z,d.w),n.geometricToleranceOverMeter=2*l,n.cameraProjection.copy(i.projectionMatrix),n.inverseProjection.copy(i.projectionMatrix).invert(),n.globeDepthTexture=o.depthRenderTarget.texture,n.customDepthTexture=o.depthWithoutDEMRenderTarget.texture,n.refreshUniforms()},s}removeGroundCurve(e){this.groundCurveScene.remove(e)}addGroundCurve(e){this.groundCurveScene.add(e)}beforeRender(){if(!this.inVisibleModelIdMap)return;this.inVisibleGroupMap={};const e=this.viewer.getScene();for(const t in this.inVisibleModelIdMap){const i=`${r.ObjectGroupType.BIMTILESGROUP}|${t}`,n=e.getObjectGroup(i);n&&(this.inVisibleGroupMap[i]=n.visible,n.visible=!1)}}afterRender(e,t){if(!this.inVisibleModelIdMap)return;const i=this.viewer.getScene();for(const r in this.inVisibleGroupMap){const n=i.getObjectGroup(r);n&&(n.visible=this.inVisibleGroupMap[r],!0===n.visible&&e.render(n,t))}}render(e,t,i){i=null==i?null:i,this.renderShadowVolumes(e,t,i),this.renderGroundCurves(e,t,i)}renderGroundCurves(e,t,i){var r=this.groundCurveScene;if(!(r.children.length<=0)){for(var n=!0,a=0;a<r.children.length;a++)r.children[a].visible&&(n=!1);if(!n){var s=this.viewer.rendererManager.renderer;s.renderCustomDepth&&s.renderCustomDepth(e,this.viewer.getScene(),t,this.depthRenderTarget,!1),s.renderCustomDepthWithoutDEM&&s.renderCustomDepthWithoutDEM(e,this.viewer.getScene(),t,this.depthWithoutDEMRenderTarget);var o=e.autoClear;e.autoClear=!1;var l=e.getRenderTarget();e.setRenderTarget(i),e.render(r,t),this.afterRender(e,t),e.autoClear=o,e.setRenderTarget(l)}}}renderShadowVolumes(e,t,i){if(!(this.shadowVolumes.length<=0)){var r=e.autoClear;e.autoClear=!1;var n=e.getRenderTarget(),a=this.shadowVolumeScene,s=this.backMaterial,o=this.frontMaterial,l=e.getContext(),d=e.state;d.buffers.stencil.setTest(!0);for(var h=0;h<this.shadowVolumes.length;h++)this.shadowVolumes[h].visible&&(a.add(this.shadowVolumes[h]),d.buffers.stencil.setLocked(!0),d.buffers.stencil.setFunc(l.ALWAYS,0,255),d.buffers.stencil.setOp(l.KEEP,l.INCR,l.KEEP),a.overrideMaterial=s,e.setRenderTarget(i),e.render(a,t),d.buffers.stencil.setFunc(l.ALWAYS,0,255),d.buffers.stencil.setOp(l.KEEP,l.DECR,l.KEEP),a.overrideMaterial=o,e.render(a,t),d.buffers.stencil.setFunc(l.NOTEQUAL,0,255),d.buffers.stencil.setOp(l.ZERO,l.ZERO,l.ZERO),a.overrideMaterial=null,e.render(a,t),d.buffers.stencil.setLocked(!1),a.remove(this.shadowVolumes[h]));e.setRenderTarget(n),d.buffers.stencil.setTest(!1),e.autoClear=r}}createGroundPolygon(e){e.viewer=this.viewer;var t=e.color,i=new THREE.MeshBasicMaterial({color:new THREE.Color(t.red/255,t.green/255,t.blue/255)});i.side=THREE.BackSide,i.depthFunc=THREE.AlwaysDepth,i.depthWrite=!1,i.transparent=!0,i.blending=THREE.NormalBlending,i.opacity=t.alpha;var n=new r.GroundPolygonGeometry(e);return new r.GroundPolygonMesh(n,i)}addGroundPolygon(e){this.shadowVolumes.push(e)}removeGroundPolygon(e){var t=this.shadowVolumes.indexOf(e);-1!==t&&this.shadowVolumes.splice(t,1)}setSize(e,t){this.depthRenderTarget.setSize(e,t),this.depthWithoutDEMRenderTarget.setSize(e,t)}setInVisibleModelIdMap(e){this.inVisibleModelIdMap=e}getInVisibleModelIdMap(){return this.inVisibleModelIdMap}getSkyline3D(){var e=this.viewer.getRenderer(),i=this.viewer.camera,n=this.viewer.rendererManager.renderer;n.renderCustomDepth&&n.renderCustomDepth(e,this.viewer.getScene(),i,this.depthRenderTarget,!0);var a=this.viewer.getViewportSize(),s=a.width,o=a.height,l=new Uint8Array(s*o*4);e.readRenderTargetPixels(this.depthRenderTarget,0,0,s,o,l);var d=i.near,h=i.far,c=2/(Math.log(h+1)/Math.LN2),u=i.projectionMatrix;t.copy(u).invert();for(var p=i.matrixWorld,m=new THREE.Vector4,f=new THREE.Vector4,g=new Array,v=0;v<s;v++)for(var y=o-1;y>=0;y--){var M=4*(y*s+v),E=l[M],b=l[M+1],x=l[M+2],I=l[M+3];m.set(E,b,x,I);var T=r.Utils.unpackRGBAToDepth(m);if(0!=T){var C=v,w=y,S=2*(T/=255)/c,A=Math.pow(2,S)-1,B=h*(1-d/A)/(h-d),R=2*C/s-1,D=2*w/o-1;B=2*B-1,f.set(R,D,B,1),f.multiplyScalar(A),f.applyMatrix4(t),f.applyMatrix4(p),g.push(new THREE.Vector3(f.x,f.y,f.z));break}}return g}static destroyInstance(){e.destroy(),e=void 0}static getInstance(){return e}static createInstance(t){return e||(e=new r.GroundPrimitiveManager(t)),e}}}();r.AreaInfo=class{constructor(e){this.roomName=e,this.belong="user",this.roomBoundary=null,this.offsetZ=0,this.boundingBox=0,this.roomInnerBoundary=null}checkRoomBoundaryWithHoles(e,t){if(t.length>0){this.roomInnerBoundary=[];for(let e=0;e<t.length;e++){this.checkRoomBoundary(t[e])&&this.roomInnerBoundary.push(this.roomBoundary)}}return this.checkRoomBoundary(e)}checkRoomBoundary(e){function t(e,t,i){return(t.x-e.x)*(i.y-e.y)-(i.x-e.x)*(t.y-e.y)}function i(e,i,r,n){var a=t(e,i,r)*t(e,i,n),s=t(r,n,e)*t(r,n,i);return!(a>0)&&(!(s>0)&&(0!=a||0!=s||!function(e,t,i,r){return!(Math.min(e.x,t.x)<=i.x&&i.x<=Math.max(e.x,t.x)&&Math.min(e.y,t.y)<=i.y&&i.y<=Math.max(e.y,t.y))&&!(Math.min(e.x,t.x)<=r.x&&r.x<=Math.max(e.x,t.x)&&Math.min(e.y,t.y)<=r.y&&r.y<=Math.max(e.y,t.y))}(e,i,r,n)))}if(!(e instanceof Array)||e.length<3)return console.log("Failed to create room boundary, the number of the points must be more than three."),!1;this.offsetZ=e[0][2];var r=new THREE.Box2,n=[];n.push(new THREE.Vector2(e[0][0],e[0][1]));for(var a=1,s=e.length;a<s;a++){if(3!=e[a].length)return console.log("Failed to create room boundary, the format of boundary is not right, please follow [[x1,y1,z1],...]"),!1;for(a=1;a<e.length;a++){for(var o=!1,l=0;l<n.length;l++)if(e[a][0]==n[l].x&&e[a][1]==n[l].y){o=!0;break}if(!1===o){var d=new THREE.Vector2(e[a][0],e[a][1]);n.push(d),r.expandByPoint(d)}}}var h,c,u=n.length;if(u<3)return console.log("Failed to create room boundary, points are collinear."),!1;if(3==u)return 0==t(n[0],n[1],n[2])?(console.log("Failed to create room boundary, points are collinear."),!1):(n.push(new THREE.Vector2(e[0][0],e[0][1])),this.roomBoundary=n,this.boundingBox=r,!0);for(a=0;a<u;a++){h=n[a],c=n[a==u-1?0:a+1];for(l=a+2;l<u;l++)if((0!=a||l!=u-1)&&i(h,c,n[l],n[l==u-1?0:l+1]))return console.log("Failed to create room boundary, the room boundary is self-intersection."),!1}return n.push(new THREE.Vector2(e[0][0],e[0][1])),this.roomBoundary=n,this.boundingBox=r,!0}clone(){return(new this.constructor).copy(this)}copy(e){return this.roomName=e.roomName,this.belong=e.belong,void 0!==e.roomBoundary&&(this.roomBoundary=JSON.parse(JSON.stringify(e.roomBoundary))),this.offsetZ=e.offsetZ,this.boundingBox=e.boundingBox.clone(),this}};class Y extends r.ObjectGroup{constructor(){super(r.ObjectGroupType.BoundaryEdgeManager,{priority:20}),this.globalSpace=!0,this.areaInfo=new Array,this.areaGeometries=new Array,this.areaMeshes=new Array,this.areaMaterial=new THREE.LineMaterial({color:1005740}),this.areaMaterial.linewidth=5,this.areaMaterial.depthTest=!1}addAreaInfo(e){var t=this.areaInfo.length;return this.areaInfo.push(e),this.update(t),t}setAreaInfo(e,t){return void 0!==e&&(this.areaInfo.length>e&&(this.areaInfo[e]=t,this.update(e),!0))}setAreaLineColor(e){this.areaMaterial=new THREE.LineMaterial(e),this.areaMaterial.linewidth=1}removeAreaInfo(e){if(void 0===e)return!1;if(this.areaMesh&&this.remove(this.areaMesh),this.areaInfo.length>e){this.areaInfo.splice(e,1),this.areaGeometries.splice(e,1);var t=this.areaMeshes[e];return this.remove(t),this.areaMeshes.splice(e,1),!0}return!1}update(e){if(!(void 0===e||this.areaInfo.length<e)){for(var t=this.areaInfo[e].length,i=new Array,n=0;n<t;++n)for(var a=this.areaInfo[e][n],s=0,o=a.length;s<o;++s){var l=a[s];i.push(l.x),i.push(l.y),i.push(l.z)}this.areaMesh&&this.remove(this.areaMesh);var d=new THREE.LineSegmentsGeometry;d.setPositions(i),this.areaMaterial.resolution.set(window.innerWidth,window.innerHeight),this.areaMesh=new THREE.LineSegments2(d,this.areaMaterial),this.areaMesh.renderOrder=r.EnumRenderOrder.Effect,this.add(this.areaMesh),this.updateMatrixWorld(!0)}}}Y.getInstance=function(e){return null==e.boundaryEdge&&(e.boundaryEdge=new r.BoundaryEdgeManager,e.objectGroups.add(e.boundaryEdge),e.boundaryEdge.matrix.copy(e.geometryGroup.matrix),e.boundaryEdge.matrixAutoUpdate=!1,e.boundaryEdge.updateMatrixWorld(!0)),e.boundaryEdge},Y.destroy=function(e){e.boundaryEdge=null},r.BoundaryEdgeManager=Y;class Z extends r.BaseModel{constructor(e){super(e.getModelManager(),{modelId:r.ObjectGroupType.EXTRUDEBODYMANAGER}),this.viewer=e,this.manager.addModel(this),this.filter=new r.FilterManager,this.filter.setObserverForSceneState(this.manager.getFilter().getObserverForSceneState()),this.castShadow=!1,this.receiveShadow=!1,this.mapColorToNodeId={},this.selectionColor={red:50,green:224,blue:240,alpha:.4},this.selectionEdgeColor={red:50,green:224,blue:240,alpha:1},this.blinkMaterials=[],this.blinkMaterialMap={},this.bindModelMap={},this.mapDepthTestToNodeId={}}destroy(){this.manager.removeModel(this.id),this._removeNodeGroup(),this.mapColorToNodeId=null,this.selectionColor=null,this.selectionEdgeColor=null,this.blinkMaterials=null,this.blinkMaterialMap=null,this.filteredIds=null,this.selectedIds=null,this.blinkedIds=null,this.bindModelMap=null,this.mapDepthTestToNodeId=null,super.destroy()}_getNodeGroup(){return this.getModelManager().getScene().getOrCreateObjectGroup(r.ObjectGroupType.EXTRUDEBODYMANAGER,{pickableType:r.PICKABLETYPE.Room,priority:20,globalSpace:!0})}_getAlphaTestNodeGroup(){return this.getModelManager().getScene().getOrCreateObjectGroup(r.ObjectGroupType.EXTRUDEBODYMANAGERTEST,{pickableType:r.PICKABLETYPE.Room,priority:20,globalSpace:!0})}getAllNodes(){return this._getNodeGroup().children.concat(this._getAlphaTestNodeGroup().children)}_removeNodeGroup(){this.getModelManager().getScene().removeObjectGroupByName(r.ObjectGroupType.EXTRUDEBODYMANAGER),this.getModelManager().getScene().removeObjectGroupByName(r.ObjectGroupType.EXTRUDEBODYMANAGERTEST)}addNode(e,t,i,r,n,a){a=null==a||a,this.getNode(e)&&this.removeNodeById(e);var s=new Array,o=0,l=0,d=0,h=[];let c=[],u=[],p=[];if(t.belong&&"user"==t.belong){o=t.offsetZ;for(var m=0,f=t.roomBoundary.length;m<f;m++){var g=t.roomBoundary[m];s[m]=new THREE.Vector2(g.x,g.y)}if(t.roomInnerBoundary)for(m=0,f=t.roomInnerBoundary.length;m<f;m++){var v=t.roomInnerBoundary[m];u.push(v);let e=[];v.forEach((t=>{e.push(t.clone())})),p.push(e)}}else{if(t.version&&"2.0"==t.version){t.loops&&t.loops.length>0&&(h=t.loops[0]);const e=JSON.stringify(h);if(t.loops.length>1)for(let i=1;i<t.loops.length;i++)JSON.stringify(t.loops[i])!==e&&c.push(t.loops[i])}let e=e=>{var t=e.length;let i=[];for(var r=0;r<t;++r)for(var n=e[r],a=n.length,s=0;s<a-1;s++){var l=n[s];i.push(new THREE.Vector2(l.x,l.y)),0==r&&0==s&&(o=l.z)}return i.length>0&&i.push(i[0].clone()),i};c.forEach((t=>{let i=e(t);u.push(i);let r=[];i.forEach((e=>{r.push(e.clone())})),p.push(r)})),s=e(h)}if(!t.offsetZ&&(t.offsetZ=o),s.length<=0)return;var y=[];let M=[];(e=>{y=[],l=0,d=0,l=e[0].x,d=e[0].y;for(var t=0,i=e.length-1;t<i;t++){var r=e[t];l>r.x&&(l=r.x),d>r.y&&(d=r.y),y.push({x:r.x,y:r.y,z:o})}for(t=0,i=e.length;t<i;t++)e[t].x-=l,e[t].y-=d})(s);let E=[];p.forEach((e=>{let t=new THREE.Vector2(-l,-d);if(e.forEach((e=>{e.add(t)})),!(e=>{let t=JSON.stringify(e).toString();for(let e=0;e<E.length;e++){let i=E[e];if(t===JSON.stringify(i).toString())return!0}return!1})(e)){let t=new THREE.Path(e);M.push(t),E.push(e)}}));var b=new THREE.Shape(s);b.holes=M;var x={depth:i,bevelEnabled:!1};this._genShap(b,x,r,l,d,o,e,y),this._genWireframe(u,y,a,n,l,d,o,i,e)}getBoundingBox(){let e=new THREE.Box3;const t=this.getAllNodeGroups();for(let i=0;i<t.length;i++){const r=t[i];if("LineSegments"===r.type)continue;const n=r.geometry.boundingBox.clone();n.applyMatrix4(r.matrix),e.expandByPoint(n.min),e.expandByPoint(n.max)}return e}_genShap(e,t,i,r,n,a,s,o){var l=new THREE.ExtrudeGeometry(e,t);l.contour=o,this._faceToContour(l,r,n),l.boundingBox||l.computeBoundingBox();var d=new THREE.Mesh(l,i);d.name=s.toString(),d._oriMaterial=i,d.translateX(r),d.translateY(n),d.translateZ(a),this.setColorInMap(d.name,i),this._getNodeGroup().add(d),this._getNodeGroup().updateMatrixWorld(!0)}_genWireframe(e,t,i,r,n,a,s,o,l){let d=new THREE.Geometry;e.forEach((e=>{for(var t=[],i=0,r=e.length-1;i<r;i++){var l=e[i];t.push({x:l.x,y:l.y,z:s})}let h=this._genWireFrameGeometry(t,n,a,s,o);null!=h&&d.merge((new THREE.Geometry).fromBufferGeometry(h))}));let h=this._genWireFrameGeometry(t,n,a,s,o);null!=h&&d.merge((new THREE.Geometry).fromBufferGeometry(h)),r.depthTest=!i,r.transparent=!0;let c=d.toBufferGeometry();c.deleteAttribute("normal");const u=new THREE.LineSegments(c,r);u.name="wireframe_"+l,u._oriMaterial=r,u.translateX(n),u.translateY(a),u.translateZ(s),u.updateMatrixWorld(!0),this.setColorInMap(u.name,r),this.mapDepthTestToNodeId[l]=!1,this._getNodeGroup().add(u),this._getNodeGroup().updateMatrixWorld(!0)}_genWireFrameGeometry(e,t,i,n,a){if(!(e.length<3)){var s=this._checkVertices(e.slice(),a);return r.BuildRoomEdge(s,t,i,n,a)}}bindModel(e,t){if(this.getNode(e)&&this.getModelManager().modelCollection.getIds().indexOf(t.toString())>=0){if(this.getBindedModelId(e))return;this.bindModelMap[t]||(this.bindModelMap[t]=[]),this.bindModelMap[t].push(e);let i=this.getNode(e),r=this.getNode("wireframe_"+e);i.explodedHeight=r.explodedHeight=0,i.explodedDirection=r.explodedDirection=new THREE.Vector3;let n=this.getModelManager().explosionManager;if(0!==n.getFloorExplosionExtent(t)){let i=n.getFloorInfos(t);this.explodeMesh(this.getNode(e),i,!0),this.explodeMesh(this.getNode("wireframe_"+e),i,!0)}let a=n.getExplosionExtent(t);if(0!==a){const i=this.getModelManager().getModel(t);let r=new THREE.Vector3;const n=i.getBoundingBoxWorld().getCenter(r);this.elementExplodeMesh(this.getNode(e),a,n),this.elementExplodeMesh(this.getNode("wireframe_"+e),a,n)}const s=this.getModelManager().getModel(t).transformMatrix;i.lastTransformation=(new THREE.Matrix4).copy(s),i.applyMatrix4(s),i.updateMatrixWorld(),r.lastTransformation=(new THREE.Matrix4).copy(s),r.applyMatrix4(s),r.updateMatrixWorld()}}unbindModel(e,t){if(this.bindModelMap[t]){let i=this.bindModelMap[t].indexOf(e);if(i>=0){this.bindModelMap[t].splice(i,1);const r=e=>{if(void 0!==e.explodedHeight){const t=e.explodedDirection.clone().negate().multiplyScalar(e.explodedHeight);let i=new THREE.Matrix4;i.makeTranslation(t.x,t.y,t.z),e.applyMatrix4(i),e.updateMatrixWorld(),delete e.explodedDirection,delete e.explodedHeight,delete e.preExplodedDirection,delete e.preExplodedHeight}},n=e=>{null!=e.preModelExplodedMatrix&&(e.preModelExplodedMatrix.invert(),e.applyMatrix4(e.preModelExplodedMatrix),e.updateMatrixWorld(),delete e.preModelExplodedMatrix)},a=e=>{const i=this.getModelManager().getModel(t).transformMatrixInverse;e.lastTransformation=(new THREE.Matrix4).copy(i),e.applyMatrix4(i),e.updateMatrixWorld()};if(!this.getNode(e))return;r(this.getNode(e)),r(this.getNode("wireframe_"+e)),n(this.getNode(e)),n(this.getNode("wireframe_"+e)),a(this.getNode(e)),a(this.getNode("wireframe_"+e))}}}getBindedModelId(e){let t;return Object.keys(this.bindModelMap).some((i=>{if(this.bindModelMap[i].indexOf(e)>=0)return t=i,!0})),t}_checkVertices(e,t){var i=.1;function r(e,t,r){return Math.abs(t.x-e.x)<i&&Math.abs(r.x-e.x)<i||(Math.abs(t.y-e.y)<i&&Math.abs(r.y-e.y)<i||Math.abs((t.x-e.x)*(r.y-e.y)-(r.x-e.x)*(t.y-e.y))<100*i)}t<100&&(i=1e-4);for(var n=e.length;r(e[0],e[1],e[n-1]);)e.shift(),n=e.length;for(n=e.length;r(e[0],e[n-2],e[n-1]);)e.pop(),n=e.length;n=e.length;for(var a=0;a+2<n;){for(var s=a;s+2<n&&r(e[a],e[s+1],e[s+2]);)e.splice(s+1,1),n=e.length;a++}return e}_faceToContour(e,t,i){const r=e.contour,n=e.attributes.position;let a=[];const s=n.count,o=r.length;let l=new THREE.Vector3;function d(e,t){return Math.abs(e-t)<=.1}for(let e=0;e<o;e++)for(let o=0;o<s;o++)l.fromBufferAttribute(n,o),d(l.x+t,r[e].x)&&d(l.y+i,r[e].y)&&(a[o]=e);function h(e,t){var i=e<t?e:t,r=e>t?e:t;return 0==i&&r==o-1?{st:r,ed:i}:{st:i,ed:r}}let c=[];for(var u=0;u<s;u+=3){let e={},t=[];for(let e=u;e<u+3;e++){const i=a[e];i&&t.push(i)}t.length>2?e.contourIndex=h(t[1],t[2]):t.length>1?e.contourIndex=h(t[0],t[1]):1==t.length&&(e.contourIndex=h(t[0],t[0]+1)),c.push(e)}e.faces=c}applyFrontEffect(e,t,i){const r=this._getNodeGroupVisible(),n=this._getNodeGroup().parent.children,a=n.length;let s=new Array(a);for(var o=0;o<a;++o)s[o]=n[o].visible,n[o].visible=!1;this._setNodeGroupVisible(r);var l=e.autoClear,d=e.autoClearColor,h=e.autoClearDepth,c=e.autoClearStencil;e.autoClear=!0,e.autoClearColor=!1,e.autoClearDepth=!0,e.autoClearStencil=!1,e.render(t,i),e.autoClear=l,e.autoClearColor=d,e.autoClearDepth=h,e.autoClearStencil=c;for(o=0;o<a;++o)n[o].visible=s[o]}setColorInMap(e,t){var i={red:255*t.color.r,green:255*t.color.g,blue:255*t.color.b,alpha:t.opacity};this.mapColorToNodeId[e]=i}createMaterial(e){return r.MaterialUtil.createStandardMaterial(e)}setNodeMaterial(e,t,i){var r=this.getNode(e);if(r){var n=r._oriMaterial;for(var a in t){var s=a;n.hasOwnProperty(s)&&(n[s]="color"==s?new THREE.Color(t[a]):t[a])}}if(r=this.getNode("wireframe_"+e)){n=r._oriMaterial;for(var a in i){s=a;n.hasOwnProperty(s)&&(n[s]="color"==s?new THREE.Color(i[a]):i[a])}}this._updateNodeById(e)}getNode(e){let t=t=>{for(let i=0,r=t.length;i<r;i++)if(t[i].name==e.toString())return t[i]};return t(this._getNodeGroup().children)||t(this._getAlphaTestNodeGroup().children)}removeNodeById(e){var t=this.getNode(e);if(t&&(delete this.mapColorToNodeId[t.name],this._getNodeGroup().remove(t),this._getAlphaTestNodeGroup().remove(t)),this.filter.enableStateChanged(),t=this.getNode("wireframe_"+e)){delete this.mapColorToNodeId[t.name],this._getNodeGroup().remove(t),this._getAlphaTestNodeGroup().remove(t);let i=this.getBindedModelId(e);return i&&this.unbindModel(e,i),!0}return!1}clearNodes(){this._getNodeGroup().clear(),this._getAlphaTestNodeGroup().clear(),this.mapColorToNodeId={},this.bindModelMap={},this.filter.enableStateChanged()}setNodeVisibleById(e,t){var i=this.getNode(e);if(i&&(i.visible=t),this.filter.enableStateChanged(),i=this.getNode("wireframe_"+e))return i.visible=t,!0}_getNodeGroupVisible(){return this._getNodeGroup().visible}_setNodeVisible(e){const t=this._getNodeGroup().children;for(let i=0,r=t.length;i<r;i++)t[i].visible=e}_setNodeGroupVisible(e){this._getNodeGroup().visible=e}_getAlphaTestNodeGroupVisible(){return this._getAlphaTestNodeGroup().visible}_setAlphaTestNodeVisible(e){const t=this._getAlphaTestNodeGroup().children;for(let i=0,r=t.length;i<r;i++)t[i].visible=e}_setAlphaTestNodeGroupVisible(e){this._getAlphaTestNodeGroup().visible=e}showAllNodes(){this._setNodeVisible(!0),this._setAlphaTestNodeVisible(!0),this.filter.enableStateChanged()}hideAllNodes(){this._setNodeVisible(!1),this._setAlphaTestNodeVisible(!1),this.filter.enableStateChanged()}setNodeColorById(e,t){var i=this.getNode(e);if(i){var r=i._oriMaterial;return r.color=new THREE.Color(t.red/255,t.green/255,t.blue/255),r.opacity=t.alpha,t!=this.selectionColor&&t!=this.selectionEdgeColor&&this.setColorInMap(i.name,r),this._updateNodeById(e),this.filter.enableStateChanged(),!0}return!1}getNodeColorById(e){return this.mapColorToNodeId[e]}setWireframeColorById(e,t){return this.setNodeColorById("wireframe_"+e,t)}getWireframeColorById(e){return this.getNodeColorById("wireframe_"+e)}applySelection(){this._hasNode()&&(this._collectSelectedIds(),this._collectHoveredIds(),this._updateNodes())}clearSelection(){this._hasNode()&&(this._clearSelectedIds(),this.applyHover())}applyHover(){this._hasNode()&&(this._collectHoveredIds(),this._updateNodes())}clearHover(){this._hasNode()&&(this._clearHoveredIds(),this._updateNodes())}applyBlink(){this._hasNode()&&(this._collectBlinkedIds(),this._collectHoveredIds(),this._updateNodes())}clearBlink(){this._clearBlinkedIds(),this.applyHover()}_collectSelectedIds(){var e=this.filteredIds=this.filteredIds||{},t=r.Model.EnumFilterState,i=this.getModelManager().sceneState.getSelection(),n={};this._clearSelectedIds();for(var a=0,s=i.length;a<s;a++){var o=i[a];this._hasObjectId(o)&&(e[o]||(e[o]={}),e[o][t.SELECTED]=!0,n[o]=!0)}this.selectedIds=Object.keys(n)}_clearSelectedIds(){if(this.filteredIds&&this.selectedIds&&this.selectedIds.length){for(var e=0,t=this.selectedIds.length;e<t;e++){var i=this.selectedIds[e];this.filteredIds[i]&&delete this.filteredIds[i][r.Model.EnumFilterState.SELECTED]}this.selectedIds=null}}_collectHoveredIds(){this._clearHoveredIds();var e=this.getModelManager().sceneState.hoverId;if(e&&this._hasObjectId(e)){var t=this.filteredIds=this.filteredIds||{};this.hoveredId=e,t[e]||(t[e]={}),t[e][r.Model.EnumFilterState.HOVER]=!0}}_clearHoveredIds(){this.filteredIds&&this.hoveredId&&this.filteredIds[this.hoveredId]&&(delete this.filteredIds[this.hoveredId][r.Model.EnumFilterState.HOVER],this.hoveredId=void 0)}_collectBlinkedIds(){var e=this.getModelManager().sceneState.getBlinkComponentsIdMap(this.id),t=this.filteredIds=this.filteredIds||{},i=r.Model.EnumFilterState,n={};for(var a in this._clearBlinkedIds(),e)this._hasObjectId(a)&&(t[a]||(t[a]={}),t[a][i.BLINK]=!0,n[a]=!0);this.blinkedIds=Object.keys(n)}_clearBlinkedIds(){if(this.filteredIds&&this.blinkedIds&&this.blinkedIds.length){for(var e=0,t=this.blinkedIds.length;e<t;e++){var i=this.blinkedIds[e];this.filteredIds[i]&&delete this.filteredIds[i][r.Model.EnumFilterState.BLINK]}this.blinkedIds=null}}_hasObjectId(e){return!!this.mapColorToNodeId[e]}_hasNode(){for(var e in this.mapColorToNodeId)if(this.mapColorToNodeId.hasOwnProperty(e))return!0;return!1}_updateNodes(){if(this._resetMaterial(),this.blinkMaterialMap={},this.blinkMaterials.length=0,this.filteredIds)for(var e in this.filteredIds)this._updateNodeById(e)}_resetMaterial(){let e=e=>{for(let t=0,i=e.length;t<i;t++){let i=e[t],r=this.mapColorToNodeId[i.name];i._oriMaterial.color.setRGB(r.red/255,r.green/255,r.blue/255),i._oriMaterial.opacity=r.alpha,i.material=i._oriMaterial}};e(this._getNodeGroup().children),e(this._getAlphaTestNodeGroup().children)}_updateNodeById(e){if(this._hasObjectId(e)&&this.filteredIds&&this.filteredIds[e]){var t=this.filteredIds[e],i=r.Model.EnumFilterState,n=this.getNode(e),a=this.getNode("wireframe_"+e),s=this.getModelManager().sceneState;if(t[i.SELECTED]){var o=this.selectionColor;if(n.material=n._oriMaterial,n.material.color.setRGB(o.red/255,o.green/255,o.blue/255),n.material.opacity=o.alpha,a){var l=this.selectionEdgeColor;a.material=a._oriMaterial,a.material.color.setRGB(l.red/255,l.green/255,l.blue/255),a.material.opacity=l.alpha}}else if(t[i.BLINK]){if(void 0===this.blinkMaterialMap[e]){this.blinkMaterialMap[e]=!0;var d=s.getBlinkMaterial(n._oriMaterial,this.id);n.material=d,this.blinkMaterials.push(d)}}else if(t[i.HOVER]){n.material=n._oriMaterial;var h=this.mapColorToNodeId[e],c=r.MaterialUtil.getHoverColorByColor({r:h.red/255,g:h.green/255,b:h.blue/255,a:h.alpha});return n.material.color.setRGB(c.r,c.g,c.b),void(n.material.opacity=c.a)}}}sortRenderOrder(e){for(var t=this._getNodeGroup().children,i=e.camera.position.clone(),r=new Map,n=0,a=t.length;n<a;++n){var s=t[n];if(-1!=s.name.indexOf("wireframe"));else{var o={};o[s.name]=null;var l=e.getBoundingBoxByIds(o).getCenter(),d=i.distanceTo(l);r.set(n,d)}}var h=Array.from(r);h.sort((function(e,t){return t[1]-e[1]}));var c=1;for(n=0,a=h.length;n<a;++n)t[h[n][0]].renderOrder=c,null!=t[h[n][0]+1]&&(t[h[n][0]+1].renderOrder=c),++c}explodeMesh(e,t,i){let r,n,a,s;const o=t=>{a=e.preExplodedHeight=e.explodedHeight,s=e.preExplodedDirection=e.explodedDirection.clone(),r=e.explodedHeight=t.explodedHeight-t.elevation,n=e.explodedDirection=(t.explodedDirection||new THREE.Vector3).clone()};let l=0;for(let r=t.length-1;r>=0;r--){let n=t[r],a=t[r].preExplodedTranslation?t[r].preExplodedTranslation.z:0;l=i?t[r].boundingBox.min.z:a+t[r].boundingBox.min.z;let s=e.position.z;if(s>=l-1||0===r){o(n);break}}let d=new THREE.Matrix4;const h=n.clone().multiplyScalar(r).sub(s.clone().multiplyScalar(a));d.makeTranslation(h.x,h.y,h.z),e.applyMatrix4(d),e.updateMatrixWorld()}explode(e){let t,i=this._getNodeGroup().children.concat(this._getAlphaTestNodeGroup().children);if(e){let o=this.bindModelMap[e];if(o&&o.length>0){t=this.getModelManager().explosionManager.getFloorInfos(e);for(var r=0,n=i.length;r<n;r++){var a=i[r],s=a.name.indexOf("wireframe_")<0?a.name:a.name.split("wireframe_")[1];o.indexOf(s)>=0&&this.explodeMesh(a,t)}}}}elementExplodeMesh(e,t,i){let n=new THREE.Box3;void 0!==e.preModelExplodedMatrix&&e.applyMatrix4(e.preModelExplodedMatrix.invert()),e.preModelExplodedMatrix=new THREE.Vector3,e.geometry.boundingBox||e.geometry.computeBoundingBox();const a=e.position,s=(new THREE.Vector3).subVectors(e.geometry.boundingBox.max,e.geometry.boundingBox.min),o=(new THREE.Vector3).addVectors(a,s);n=(new THREE.Box3).setFromPoints([a,o]);let l=r.Utils.computeExplodeTranslation(i,n,t),d=new THREE.Vector3;const h=n.getCenter(d),c=(new THREE.Matrix4).makeTranslation(-h.x,-h.y,-h.z),u=(new THREE.Matrix4).copy(c).invert(),p=(new THREE.Matrix4).makeTranslation(l.x,l.y,l.z);e.preModelExplodedMatrix=p.clone().multiply(u).multiply(c),e.applyMatrix4(e.preModelExplodedMatrix),e.updateMatrixWorld()}elementExplode(e,t,i){let r=e.id;if(!r)return;if(!this.bindModelMap[r])return;let n=this._getNodeGroup().children.concat(this._getAlphaTestNodeGroup().children);if(n)for(let e=0;e<n.length;e++){let r=n[e];this.elementExplodeMesh(r,t,i)}}enableDepthTest(e,t){for(const i of e)void 0!==this.mapColorToNodeId[i]&&(this.mapDepthTestToNodeId[i]=t,this.mapDepthTestToNodeId[`wireframe_${i}`]=t,this.getNode(`wireframe_${i}`).material.depthTest=t,1==t?(this._getAlphaTestNodeGroup().add(this.getNode(i)),this._getAlphaTestNodeGroup().add(this.getNode(`wireframe_${i}`)),this._getNodeGroup().remove(this.getNode(i)),this._getNodeGroup().remove(this.getNode(`wireframe_${i}`))):(this._getNodeGroup().add(this.getNode(i)),this._getNodeGroup().add(this.getNode(`wireframe_${i}`)),this._getAlphaTestNodeGroup().remove(this.getNode(i)),this._getAlphaTestNodeGroup().remove(this.getNode(`wireframe_${i}`))))}getBlinkMaterials(){return this.blinkMaterials}isUserIdExist(e){return this._hasObjectId(e)}getAllNodeGroups(){return this._getNodeGroup().children}updateTransformation(e,t){const i=(new THREE.Matrix4).fromArray(e);let n=this.viewer.getScene().getObjectGroup(r.ObjectGroupType.EXTRUDEBODYMANAGER),a=this.bindModelMap[t];if(a&&a.length>0){let e=n.children;for(let t=0;t<e.length;t++){let r=e[t],n=r.name.indexOf("wireframe_")<0?r.name:r.name.split("wireframe_")[1];a.indexOf(n)>=0&&(r.lastTransformation&&r.applyMatrix4((new THREE.Matrix4).copy(r.lastTransformation).invert()),r.lastTransformation=i,r.applyMatrix4(i),r.updateMatrixWorld())}}}getPickingMeshes(e,t,i,n,a){if(!1===!(!a||"string"!=typeof a||!a.startsWith("glow")))return;const s=this.getId();t[s]=new r.ObjectGroup,t[s].matrix.copy(this.getTransformMatrix()),t[s].matrixAutoUpdate=!1,i.map((e=>{const i=this.getNode(e);let r=new THREE.Mesh(i.geometry,i.material.clone());r.visible=i.visible,r.matrix.copy(i.matrix),r.matrixAutoUpdate=!1,r.updateMatrixWorld(!0),i&&t[s].add(r)}))}collectBlinkedMaterial(e,t){e.map((e=>{if(!this._hasObjectId(e))return;const i=this.getNode(e),r=this.getModelManager().sceneState.getBlinkMaterial(i._oriMaterial,this.id);t.push(r)}))}}Z.getInstance=function(e){var t=e.getModelManager().getScene();if(null==t.extrudeBodyManager){t.extrudeBodyManager=new r.ExtrudeBodyManager(e);var i=t.extrudeBodyManager._getNodeGroup();t.objectGroups.add(i),i.matrix.copy(t.geometryGroup.matrix),i.matrixAutoUpdate=!1,i.updateMatrixWorld(!0)}return t.extrudeBodyManager},Z.destroy=function(e){var t=e.getModelManager().getScene();t.extrudeBodyManager.destroy(),t.extrudeBodyManager=null},r.ExtrudeBodyManager=Z,r.MaterialOverrider=class{constructor(e,t,i){this.id=e,this.condition=t,this.material=i}},r.MaterialOverriderSet=class{constructor(e,t){this.overriders=[],this.overrideData=e,this.materials={},this.materialsByName={},this.textures={},this.defaultColor=t||"#808080",this.loader=new r.MaterialOverriderLoader(this.defaultColor)}load(e,t,i,n,a){i=null!=i&&i,(new r.MaterialOverriderLoader).getMaterialOverriders(this.overriders,e,t,i,n,a)}loadByDemand(e,t,i){this.loader.getMaterialsByDemand(this.materials,this.materialsByName,this.textures,this.overrideData,e,t,i)}setDefaultColor(e){this.defaultColor=e,this.loader.defaultColor=e}getOverrideMaterials(){return this.materials}getOverrideMaterialByNodeInfo(e,t){var i=this.materials;return t&&"user"==t.tag?i["elementId_"+e.userId]||t||i["systemTypeId_"+e.userData.systemTypeId]||i["familyId_"+e.userData.familyId]:i["elementId_"+e.userId]||i["systemTypeId_"+e.userData.systemTypeId]||i["familyId_"+e.userData.familyId]}getOverrideMaterialByName(e){return this.materialsByName[e]}updateMaterialsValue(e,t){var i,r=this.materials;for(var n in r)(i=r[n])&&i[e]&&(i[e]=t,void 0!==i.refreshUniforms&&i.refreshUniforms(),i.needsUpdate=!0)}},r.MaterialOverriderLoader=class{constructor(e){this.loader=new THREE.FileLoader,this.loadTaskCount=0,this.maxLoadTask=0,this.defaultColor=e}getMaterialOverriders(e,t,i,r,n,a){var s=t.overrides;this._getOverridesByData(e,s,i,r,n,a),0==this.maxLoadTask&&n&&n()}getMaterialsByDemand(e,t,i,n,a,s,o){if(n.overrides){this.maxLoadTask=0,this.loadTaskCount=0;for(var l=[],d=n.overrides,h=n.textureMaterials,c=a.familyIds,u=a.elementIds,p=a.systemTypeIds,m=d.length-1;m>=0;m--){var f,g=d[m].targetType,v=d[m].target;if("family"==g){if(!c[v])continue;f="familyId_"+v}else if("element"==g){if(!u[v])continue;f="elementId_"+v}else{if("systemType"!=g)continue;if(!p[v])continue;f="systemTypeId_"+v}if(!e[f]){var y=d[m].colorMaterial;if(!y){if(!d[m].textureMaterial)continue;y=this.defaultColor}var M=new r.CloudStandardMaterial;if(M.pureColor=y,M.color.setStyle(y),M.name=y,d[m].textureMaterial){var E=JSON.parse(d[m].textureMaterial),b=E.materialId,x=h[E.materialId];if(M.name=x?b+M.name:M.name,A=t[M.name]){e[f]=A;continue}if(x){var I=JSON.parse(x);if(I.diffuse_color){var T=I.diffuse_color.split(",");M.color.setRGB(parseFloat(T[0]),parseFloat(T[1]),parseFloat(T[2])),M.opacity=parseFloat(T[3])}var C=M.opacity<1;if(M.transparent=C,M.roughness=I.roughness,M.metalness=I.metallic,M.bumpScale=I.enableBump,!l[E.materialId]&&!i[E.materialId]){if(I.diffuse_texture){var w=I.diffuse_texture.texture_file;w&&""!=w?(this.maxLoadTask+=2,l[E.materialId]={diffuse:I.diffuse_texture},"1"==I.useAlphaCulling&&(M.alphaTest=parseFloat(I.alphaCulling),M.useAlphaMap=!0,M.defines.USE_ALPHAMAP="")):M.textureColor=M.color.getStyle()}if(I.bump_texture){var S=I.bump_texture.texture_file;S&&""!=S&&(this.maxLoadTask+=2,l[E.materialId]?l[E.materialId].bump=I.bump_texture:l[E.materialId]={bump:I.bump_texture})}}}else M.textureColor=y,console.log("Warning: there is no corresponding textureMaterial whose materialId is "+E.materialId)}else{var A;if(A=t[M.name]){e[f]=A;continue}M.textureColor=y}M.needsUpdate=!0,M.side=THREE.DoubleSide,e[f]=M,t[M.name]=M}}this._mappingTexturesByDemand(t,i,l,s,o),0==this.maxLoadTask&&s&&s()}else s&&s()}_getOverridesByData(e,t,i,n,a,s){for(var o=i.familyIds,l=i.elementIds,d=i.systemTypeIds,h=!1,c=[],u=[],p=0,m=t.length;p<m;p++){var f,g,v=t[p].targetType,y=t[p].target;if("family"==v){if(!o[y])continue;f=[{familyId:y}]}else if("element"==v){if(!l[y])continue;f=[{elementId:y}]}else{if("systemType"!=consitionType)continue;if(!d[y])continue;f=[{systemTypeId:y}]}if(h=!0,n){if(!(E=t[p].colorMaterial))continue;(g=new r.CloudStandardMaterial).color.setStyle(E),g.name=t[p].id}else{if(!t[p].textureMaterial)continue;var M=JSON.parse(t[p].textureMaterial);if(!M.diffuse_color)continue;var E=M.diffuse_color.split(","),b=1==M.transparent;(g=new r.CloudStandardMaterial({opacity:parseFloat(E[3]),roughness:M.roughness,metalness:M.metallic,transparent:b,bumpScale:M.enableBump})).name=M.id,g.color.setRGB(parseFloat(E[0]),parseFloat(E[1]),parseFloat(E[2]));var x=M.diffuse_texture.texture_file;x&&""!=x&&(this.maxLoadTask+=2,c[p]={diffuse:M.diffuse_texture});var I=M.bump_texture.texture_file;I&&""!=I&&(this.maxLoadTask+=2,c[p]?c[p].bump=M.bump_texture:c[p]={bump:M.bump_texture}),g.needsUpdate=!0}u[p]=g;var T=new r.MaterialOverrider(t[p].id,f,g);e.push(T)}this._mappingTextures(u,c,a,s),h||(console.log("there is no conditions matched"),s&&s())}_mappingTextures(e,t,i,r){for(var n=0;n<e.length;n++)if(e[n]&&t[n]){if(t[n].diffuse){var a=this._loadTexture(t[n].diffuse,i,r);e[n].map=a}if(t[n].bump){var s=this._loadTexture(t[n].bump,i,r);e[n].bumpMap=s}e[n].needsUpdate=!0}}_mappingTexturesByDemand(e,t,i,r,n){for(var a in e)if(e.hasOwnProperty(a)){var s=e[a],o=s.name.split("#")[0];if(s&&i[o]){if(!t[o]){if(t[o]=[],i[o].diffuse){var l=this._loadTexture(i[o].diffuse,r,n);l.texturetype="map",t[o].push(l)}if(i[o].bump){var d=this._loadTexture(i[o].bump,r,n);d.texturetype="bumpMap",t[o].push(d)}}let s=t[o].length;for(let i=0;i<s;i++){let r=t[o][i];(l.texturetype="map")?e[a].map=r:e[a].bumpMap=r}e[a].needsUpdate=!0}}}_loadTexture(e,t,i){var n=new THREE.Texture,a=this,s=new TEST.CryptoResourceLoader;const o=e.texture_file;return r.Storage.IndexedDBHelper.loadWithStorage("ModelData",o,(()=>new Promise(((e,t)=>{s.loadURL(o,e,t)}))),(i=>{var s=new Blob([i],{type:"jpeg"}),o=a._loadImage(URL.createObjectURL(s),(function(){a._onLoadFinished(t)}));n.image=o,n.encoding=THREE.GammaEncoding;var l=e.scale.split(","),d=e.offset.split(",");n.repeat.fromArray([parseFloat(l[0]),parseFloat(l[1])]),n.offset.fromArray([parseFloat(d[0]),parseFloat(d[1])]),n.wrapS=a._getTextureWrapping(e.wrap_parameter_s),n.wrapT=a._getTextureWrapping(e.wrap_parameter_t),n.magFilter=a._getTextureFilter(e.filter_mode_mag),n.minFilter=a._getTextureFilter(e.filter_mode_min),n.rotation=THREE.Math.degToRad(e.rotation),r.MaterialUtil.updateUVMatrix(n),n.needsUpdate=!0,a._onLoadFinished(t)}),(e=>{i&&i()})),n}_loadImage(e,t){var i=new Image;return i.onload=function(){var e=document.createElement("canvas");e.width=r.MaterialUtil.nextHighestPowerOfTwo(i.width),e.height=r.MaterialUtil.nextHighestPowerOfTwo(i.height),e.getContext("2d").drawImage(i,0,0,i.width,i.height,0,0,e.width,e.height),t()},i.onerror=function(e){console.log("Error: image is failed to loaded"),t()},i.src=e,i}_getTextureFilter(e){switch(e){case"NEAREST":return THREE.NearestFilter;case"NEAREST_MIPMAP_NEAREST":return THREE.NearestMipMapNearestFilter;case"NEAREST_MIPMAP_LINEAR":return THREE.NearestMipMapLinearFilter;case"LINEAR":return THREE.LinearFilter;case"LINEAR_MIPMAP_NEAREST":return THREE.LinearMipMapNearestFilter;case"LINEAR_MIPMAP_LINEAR":return THREE.LinearMipMapLinearFilter;default:return THREE.NearestFilter}}_getTextureWrapping(e){switch(e){case"REPEAT":return THREE.RepeatWrapping;case"CLAMP":return THREE.ClampToEdgeWrapping;case"MIRROR":return THREE.MirroredRepeatWrapping;default:return THREE.RepeatWrapping}}_onLoadFinished(e){this.loadTaskCount++,this.loadTaskCount>=this.maxLoadTask&&e&&e()}},function(){class e{constructor(e){this.viewer=e,this.model=e.modelManager.getFirstModel(),this.model.registerPlugin(this),this.material=r.MaterialUtil.getDefaultStandardMaterial(),this.loader=new r.SegmentLoader(this),this.index=0,this.segmentIdMap={},this.segmentPathMap={},this.segmentIdArray=[],this.elementIdMap={},this.partialElementMap={},this.partialNodeInfoMapFromNodeId={},this.partialNodeIdMapFromSegmentId={},this.partialParentUserIdMapFromSegmentId={},this.partialNodeIdMapFromUserId={},this.geometryIdMapFromDataId={},this.dataBufferMapFromGeometryId={},this.geometryMapFromGeometryId={},this.meshNodeMapFromNodeId={},this.nodeIdMapOctantMap={},this.selectedNodeIdArray=[],this.hoveredNodeIdArray=[]}destroy(){if(this.pickingNodeGenerators){for(var e in this.pickingNodeGenerators)this.pickingNodeGenerators.hasOwnProperty(e)&&this.pickingNodeGenerators[e].destroy();this.pickingNodeGenerators=null}this.removeSegmentBufferByDataIds(Object.keys(this.geometryIdMapFromDataId)),this.destroyGeometries(),this.model=null,this.loader.destroy(),this.loader=null,this.material=null,this.segmentIdMap=null,this.segmentPathMap=null,this.segmentIdArray=null,this.elementIdMap=null,this.partialElementMap=null,this.partialNodeInfoMapFromNodeId=null,this.partialNodeIdMapFromSegmentId=null,this.partialParentUserIdMapFromSegmentId=null,this.partialNodeIdMapFromUserId=null,this.geometryIdMapFromDataId=null,this.dataBufferMapFromGeometryId=null,this.meshNodeMapFromNodeId=null,this.nodeIdMapOctantMap=null,this.selectedNodeIdArray=null,this.hoveredNodeIdArray=null,this.segmentIdMapFromPartialElementId&&(this.segmentIdMapFromPartialElementId=null),this.viewer=null}removeFromSegmentIdMap(e){for(var t=0,i=e.length;t<i;t++){var n=e[t],a=this.segmentIdMap[n];a&&(delete this.segmentIdMap[n],delete this.segmentPathMap[a][n],r.Utils.isOwnEmptyObject(this.segmentPathMap[a])&&delete this.segmentPathMap[a])}this.segmentIdArray=Object.keys(this.segmentIdMap)}loadSegmentsByPaths(e,t){var i=this,r=e.length;requestAnimationFrame(function e(n){var a=n;return function(){i.loadSegmentByTaskId(a,(function(){a<r-1?requestAnimationFrame(e(a+1)):t&&t()}))}}(0))}loadSegmentByTaskId(e,t){var i=this.addedSegmentPaths[e];-1!==i&&"-1"!==i?this.loader.load(i,(function(){t&&t()})):t&&t()}cacheSegmentBuffer(e,t,i){this.geometryIdMapFromDataId[e]||(this.geometryIdMapFromDataId[e]=[]);var r=e+"|"+t;this.geometryIdMapFromDataId[e].push(r),this.dataBufferMapFromGeometryId[r]=i}removeSegmentBufferByDataIds(e){for(var t=0,i=e.length;t<i;t++){var n=r.Utils.getEncodedId(e[t]),a=this.geometryIdMapFromDataId[n];if(a){for(var s=0,o=a.length;s<o;s++){var l=a[s];this.disposeGeometryByGeometryId(l),delete this.dataBufferMapFromGeometryId[l]}delete this.geometryIdMapFromDataId[n]}}}hasNodeInfoFromPartialNodeInfoMap(e){return!!this.partialNodeInfoMapFromNodeId[e]}classifyNodeInfos(e){this.partialNodeInfoMapFromNodeId[e.nodeId]=e,this.partialNodeIdMapFromSegmentId[e.segmentId]||(this.partialNodeIdMapFromSegmentId[e.segmentId]=[]),this.partialNodeIdMapFromSegmentId[e.segmentId].push(e.nodeId),this.partialParentUserIdMapFromSegmentId[e.segmentId]||(this.partialParentUserIdMapFromSegmentId[e.segmentId]={}),this.partialParentUserIdMapFromSegmentId[e.segmentId][e.parentUserId]||(this.partialParentUserIdMapFromSegmentId[e.segmentId][e.parentUserId]={}),this.partialParentUserIdMapFromSegmentId[e.segmentId][e.parentUserId][e.userId]=!0,this.partialNodeIdMapFromUserId[e.userId]||(this.partialNodeIdMapFromUserId[e.userId]=[]),this.partialNodeIdMapFromUserId[e.userId].push(e.nodeId)}getAllPartialSegmentIds(){return Object.keys(this.partialNodeIdMapFromSegmentId)}getNodeIdsBySegmentId(e){return this.partialNodeIdMapFromSegmentId[e]}getNodeInfoByNodeId(e){return this.partialNodeInfoMapFromNodeId[e]}getNodeIdsByUserId(e){return this.partialNodeIdMapFromUserId[e]}getNodeInfosBySegmentId(e){var t=this.getNodeIdsBySegmentId(e);if(!t)return[];for(var i=[],r=0,n=t.length;r<n;r++){var a=this.getNodeInfoByNodeId(t[r]);a&&i.push(a)}return i}getNodeInfosBySegmentIds(e){var t,i,r=[],n=this.getUsedAndNotUsedSegmentIdsBySegmentIds(e),a=n.usedSegmentIds,s=n.notUsedSegmentIds;for(t=0,i=a.length;t<i;t++)r=r.concat(this.getNodeInfosBySegmentId(a[t]));for(t=0,i=s.length;t<i;t++)r=r.concat(this.getNodeInfosBySegmentId(s[t]));return r}getMeshesNodeByNodeId(e){var t=this.getNodeInfoByNodeId(e);if(!t)return null;var i=this.getMeshNodesByNodeInfo(t);return i||null}getMeshNodesByNodeInfo(e){if(this.meshNodeMapFromNodeId[e.nodeId])return this.meshNodeMapFromNodeId[e.nodeId];var t=this.getGeometriesByNodeInfo(e);if(!t)return null;for(var i=[],n=this.model.materialManager.getMaterialById(e.materialId)||this.material,a=0,s=t.length;a<s;a++){var o=new r.MeshEx(t[a],n);o.spawn({databagId:this.model.databagId,fileId:this.model.fileId,matrix:e.matrix}),o.name=e.userId,o._nodeId=e.nodeId,o._oriMaterial=n,i.push(o)}if(!e.boundingBox){e.boundingBox=new THREE.Box3;for(var l=0,d=i.length;l<d;l++)e.boundingBox.union(i[l].computeBoundingBox());e.matrix&&e.boundingBox.applyMatrix4(e.matrix)}return this.meshNodeMapFromNodeId[e.nodeId]=i,this.meshNodeMapFromNodeId[e.nodeId]}getMeshNodesWithNotUsedSegment(e,t){for(var i=r.Utils.arrayToMap(this.getParentUserIdsBySegmentIds(e)),n=[],a=0,s=t.length;a<s;a++){var o=this.getNodeIdsBySegmentId(t[a]);if(o)for(var l=0,d=o.length;l<d;l++){var h=this.getNodeInfoByNodeId(o[l]);h&&i[h.parentUserId]&&n.push(h)}}return this.getMeshNodesByNodeInfos(n)}getMeshNodesByNodeInfos(e){for(var t=[],i=0,r=e.length;i<r;i++){var n=this.getMeshNodesByNodeInfo(e[i]);if(n)for(var a=0,s=n.length;a<s;a++)t.push(n[a])}return t}getMeshNodesBySegmentId(e){var t=this.getNodeIdsBySegmentId(e);if(!t)return[];for(var i=[],r=0,n=t.length;r<n;r++){var a=this.getMeshesNodeByNodeId(t[r]);if(a)for(var s=0,o=a.length;s<o;s++)i.push(a[s])}return i}getMeshNodesBySegmentIds(e){for(var t=[],i=this.getUsedAndNotUsedSegmentIdsBySegmentIds(e).usedSegmentIds,r=0,n=i.length;r<n;r++)t=t.concat(this.getMeshNodesBySegmentId(i[r]));return t}getUserIdsBySegmentId(e){var t={},i={},r=this.getNodeIdsBySegmentId(e);if(r)for(var n=0,a=r.length;n<a;n++){var s=this.getNodeInfoByNodeId(r[n]);s&&(t[s.userId]=!0,i[s.parentUserId]=!0)}for(var o=this.elementIdMap[e],l=0,d=o.length;l<d;l++)i[o[l]]||(t[o[l]]=!0);return Object.keys(t)}getUserIdsBySegmentIds(e){for(var t=[],i=0,r=e.length;i<r;i++)t=t.concat(this.getUserIdsBySegmentId(e[i]));return t}getUserIdMapBySegmentIdAndParentUserId(e,t){return this.partialParentUserIdMapFromSegmentId[e]?this.partialParentUserIdMapFromSegmentId[e][t]:null}getParentUserIdsBySegmentId(e){return this.partialParentUserIdMapFromSegmentId[e]?Object.keys(this.partialParentUserIdMapFromSegmentId[e]):[]}getParentUserIdsBySegmentIds(e){for(var t=[],i=0,r=e.length;i<r;i++)t=t.concat(this.getParentUserIdsBySegmentId(e[i]));return t}hasSegmentIdFromSegmentIdMap(e){return!!this.segmentIdMap[e]}getGeometriesByNodeInfo(e){var t=e.geometryId;if(this.geometryMapFromGeometryId[t])return this.geometryMapFromGeometryId[t];var i=this.getGeometryDataBuffer(t),r=this._createBufferGeometry(e.type,i);return r?(r instanceof Array||(r=[r]),this.geometryMapFromGeometryId[t]=r,this.geometryMapFromGeometryId[t]):null}_createBufferGeometry(e,t){var i=r.ModelView.BaseDescriptor.EnumNodeItemType,n=null;switch(e){case i.MESH:case i.MESH_REF:if(!t)return null;(n=new THREE.BufferGeometry).setIndex(new THREE.BufferAttribute(t.I,1)),n.setAttribute("position",new THREE.BufferAttribute(t.P,3)),t.N?n.setAttribute("normal",new THREE.BufferAttribute(t.N,3)):n.computeVertexNormals(),t.UV&&n.setAttribute("uv",new THREE.BufferAttribute(t.UV,2));break;case i.TUBE:case i.PIPE:n=r.GeomUtil.UnitCylinderInstance;break;case i.BOX:n=r.GeomUtil.UnitBoxInstance;break;case i.BOX_M:n=r.GeomUtil.getUnitTextureBox();break;case i.PIPE_M:n=r.GeomUtil.getUnitTextureCylinder();break;case i.LINE:if(!t)return null;(n=new THREE.BufferGeometry).setIndex(new THREE.BufferAttribute(t.I,1)),n.setAttribute("position",new THREE.BufferAttribute(t.P,3))}return n}_isParameterizedGeometry(e){var t=r.ModelView.BaseDescriptor.EnumNodeItemType;return e===t.TUBE||e===t.PIPE||e===t.BOX||e===t.BOX_M||e===t.PIPE_M}getGeometryDataBuffer(e){return this.dataBufferMapFromGeometryId[e]}destroyGeometries(){for(var e=Object.keys(this.geometryMapFromGeometryId),t=0,i=e.length;t<i;t++)this.disposeGeometryByGeometryId(e[t]);this.disposeGeometryByGeometryId=null}disposeGeometryByGeometryId(e){if(this.geometryMapFromGeometryId[e]){for(var t=this.geometryMapFromGeometryId[e],i=0,r=t.length;i<r;i++)t[i].dispose();delete this.geometryMapFromGeometryId[e]}}getUsedAndNotUsedSegmentIdsBySegmentIds(e){var t,i,r={};for(t=0,i=e.length;t<i;t++)this.hasSegmentIdFromSegmentIdMap(e[t])&&(r[e[t]]=!0);var n=[],a=this.getAllPartialSegmentIds();for(t=0,i=a.length;t<i;t++)r[a[t]]||n.push(a[t]);return{usedSegmentIds:Object.keys(r),notUsedSegmentIds:n}}getNotUsedPartialUserIds(e,t){for(var i=[],n=r.Utils.arrayToMap(this.getParentUserIdsBySegmentIds(e)),a=r.Utils.arrayToMap(this.getParentUserIdsBySegmentIds(t)),s=Object.keys(a),o=[],l=0,d=s.length;l<d;l++){var h=s[l];n[h]&&o.push(h)}for(var c=0,u=o.length;c<u;c++)for(var p=0,m=t.length;p<m;p++){var f=this.getUserIdMapBySegmentIdAndParentUserId(t[p],o[c]);f&&(i=i.concat(Object.keys(f)))}return i}updateNodeInfos(){var e=this,t=this.model,i=this._getTranslationMatrix();this.traversePartialElements((function(n,a,s){var o=e.getDescriptor().getNodeInfosByUserId(a);if(o)for(var l=0,d=o.length;l<d;l++){var h=o[l];if(!h.finalState&&(h.finalState=!0,h.nodeId=n+"|"+h.nodeId,!e.hasNodeInfoFromPartialNodeInfoMap(h.nodeId))){h.state=r.EnumObjectState.Visible,h.material=null,e._isParameterizedGeometry(h.type)?h.geometryId=h.geometryId:h.geometryId=n+"|"+h.geometryId,h.segmentId=s.segmentId||"",h.parentUserId=s.parentUserId,h.single=!0,h.uv=!1;var c=t.getModelDescriptor().getNodeInfosByUserId(h.parentUserId);h.materialId=c?c[0].materialId:-1,h.cellId=c?c[0].cellId:0,h.userData=h.userData?h.userData:c?c[0].userData:null,h.isSegment=!0,i&&(h.matrix=h.matrix?h.matrix.premultiply(i):(new THREE.Matrix4).copy(i),h.boundingBox=h.boundingBox?h.boundingBox.applyMatrix4(i):null),e.classifyNodeInfos(h)}}})),this.initFilterManager()}getNodeGroup(){return this.model._getNodeGroup("FlowSegments",{globalSpace:!0})}updateMeshNodes(){this.clearAllMeshNodes();var e=this.segmentIdArray;if(this.applyReplacementBySegmentIds(e),0!==e.length){for(var t=this.getMeshNodesBySegmentIds(e),i=this.getNodeGroup(),r=0,n=t.length;r<n;r++)i.add(t[r]),this.addMeshToOctantMap(t[r]);i.updateMatrixWorld(!0)}}addMeshToOctantMap(e){var t=this.model.manager,i=this.model.getEncodedDatabagId(),n=e._nodeId,a=this.getNodeInfoByNodeId(e._nodeId);t.addNodeInfoToOctantMap(i,a.cellId,a),t.addMeshToOctantMap(i,a.nodeId,new r.SingleCapsuleObject(a.nodeId,e)),this.nodeIdMapOctantMap[n]=!0}clearMeshNodesFromOctantMap(){for(var e=this.model.manager,t=this.model.getEncodedDatabagId(),i=Object.keys(this.nodeIdMapOctantMap),r=0,n=i.length;r<n;r++)e.removeMeshFromOctantMap(t,this.getNodeInfoByNodeId(i[r]));this.nodeIdMapOctantMap={}}clearAllMeshNodes(){this.getNodeGroup().clear(),this.clearMeshNodesFromOctantMap()}removeFromMeshNodeMap(e){for(var t=0,i=e.length;t<i;t++){var r=this.getNodeIdsBySegmentId(e[t]);if(r)for(var n=0,a=r.length;n<a;n++){var s=r[n];this.disposeGeometryByGeometryId(this.getNodeInfoByNodeId(s).geometryId),delete this.meshNodeMapFromNodeId[s]}}}applyReplacementBySegmentIds(e){if(!e||!e.length)return this.model.setReplacedUserIdMap(null),this.resetFilterState(),void this.model.applyReplacement();this.model.setReplacedUserIdMap(r.Utils.arrayToMap(this.getParentUserIdsBySegmentIds(e))),this.model.applyReplacement()}restoreComponentsState(){for(var e=this.getMeshNodesBySegmentIds(this.segmentIdArray),t=0,i=e.length;t<i;t++)e[t].material=e[t]._oriMaterial,e[t].visible=!0}restoreMeshNodeMaterialByNodeIds(e){for(var t=0,i=e.length;t<i;t++){var r=this.getMeshesNodeByNodeId(e[t]);if(r)for(var n=0,a=r.length;n<a;n++)r[n].material=r[n]._oriMaterial}}updateFilterManager(){var e=this.model.getFilter();let t={};t[this.model.fileId]=this.model.getAllNodeInfos(),e.reinitFilterManager(t)}initFilterManager(){this.usedNodeInfos=this.getNodeInfosBySegmentIds(this.segmentIdArray),this.model.getModelDescriptor().addToNodeInfoMap(this.usedNodeInfos),this.updateFilterManager()}deinitFilterManager(){this.usedNodeInfos&&this.model.getModelDescriptor().removeFromNodeInfoMap(this.usedNodeInfos),this.updateFilterManager()}applyFilter(){for(var e=this.model.getFilter(),t=e._hasHiddenFileIdFilter(),i=e._hasVisibleFilter(),r=e._hasOverrideMaterialFilter(),n=e._hasTransparentFilter(),a=e._getMaterialByName("scene"),s=this.getMeshNodesBySegmentIds(this.segmentIdArray),o=0,l=s.length;o<l;o++){var d=s[o];d.visible=!0,d.material=d._oriMaterial;var h=this.getNodeInfoByNodeId(d._nodeId);if(t&&e._isHiddenFileId(h)||i&&!1===e._isVisible(h))d.visible=!1;else if(n&&e._isTransparent(h))d.material=a;else if(r&&e._hasOverrideMaterial(h)){var c=e._getOverrideMaterial(h);if(!c||""===c.name)continue;d.material=e._getMaterialByName(c.name)}else;}}applySelection(){if(!r.GlobalData.PickingEffect){var e=this.model.manager.sceneState,t=this.model.selectedMaterial,i=e.getSelection();this.clearSelection();var n=this.selectedNodeIdArray;this.traverseMeshNodeMapByUserIds(i,(function(e,i){for(var r=0,a=e.length;r<a;r++)e[r].material=t;n.push(i)}))}}clearSelection(){r.GlobalData.PickingEffect||this.selectedNodeIdArray.length&&(this.restoreMeshNodeMaterialByNodeIds(this.selectedNodeIdArray),this.selectedNodeIdArray.length=0)}applyHover(){var e=this.model.manager,t=e.sceneState;if(t.hoverId&&!t.isSelected(t.hoverId)){this.clearHover();var i=this.model.getFilter(),r=this.hoveredNodeIdArray;this.traverseMeshNodeMapByUserIds([t.hoverId],(function(n,a,s){for(var o=0,l=n.length;o<l;o++){var d=n[o],h=e.getOverrideMaterialByNodeInfo(s,this.model.materialManager.getMaterialById(s.materialId))||i._getOverrideMaterial(s)||d._oriMaterial;d.material=t.getHoverMaterial(h)}r.push(a)}))}}clearHover(){this.hoveredNodeIdArray.length&&(this.restoreMeshNodeMaterialByNodeIds(this.hoveredNodeIdArray),this.hoveredNodeIdArray.length=0)}traverseMeshNodeMapByUserIds(e,t){for(var i=0,r=e.length;i<r;i++){var n=e[i],a=this.getNodeIdsByUserId(e[i]);if(a&&a.length)for(var s=0,o=a.length;s<o;s++){var l=a[s],d=this.getNodeInfoByNodeId(l),h=this.getMeshNodesByNodeInfo(d);h&&t(h,l,d,n)}}}getSegmentIdsByPartialElementId(e){if(this.segmentIdMapFromPartialElementId)return this.segmentIdMapFromPartialElementId[e];var t=this.segmentIdMapFromPartialElementId={};return this.traversePartialElements((function(e,i,r){t[i]||(t[i]=[]),t[i].push(r.segmentId),t[r.parentUserId]||(t[r.parentUserId]=[]),t[r.parentUserId].push(r.segmentId)})),t[e]}cachePartialElements(e,t){this.partialElementMap[e]||(this.partialElementMap[e]={}),this.partialElementMap[e][t.partialElementId]={userId:t.partialElementId,segmentId:t.segmentId,parentUserId:t.elementId}}traversePartialElements(e){for(var t in this.partialElementMap)for(var i in this.partialElementMap[t])e(t,i,this.partialElementMap[t][i])}getSegmentIsolateOption(){return e.IsolateOption}getSegmentMetadata(e,t,i){this.loader._loadMetadata(e,t,i)}resetFilterState(){var e=this.model.getFilter();e.showAll(),e.opaqueAll()}unloadSegments(e){this.deinitFilterManager(),this.removeFromSegmentIdMap(e),this.removeFromMeshNodeMap(e),this.updateMeshNodes()}loadSegments(e,t){if(e instanceof Array&&0!==e.length){this.elementIdMap={};for(var i={},n={},a=0,s=e.length;a<s;a++){var o,l=e[a].id;o=e[a].paths.length?e[a].paths[0].databag:-1,i[l]=o,n[o]||(n[o]={}),n[o][l]=!0,this.elementIdMap[l]=e[a].elementIds||[]}var d=r.Utils.getDifferentialIdxs(i,this.segmentIdMap);this.segmentIdMap=d.objCurrUsedIdxs,this.segmentIdArray=Object.keys(this.segmentIdMap);var h=r.Utils.getDifferentialIdxs(n,this.segmentPathMap);this.segmentPathMap=h.objCurrUsedIdxs,this.addedSegmentPaths=h.addIdxs;var c=!1;if(d.removeIdxs.length&&(c=!0,this.removeFromMeshNodeMap(d.removeIdxs)),h.removeIdxs.length&&(c=!0,this.removeSegmentBufferByDataIds(h.removeIdxs)),0!==this.addedSegmentPaths.length){this.applyReplacementBySegmentIds(null);var u=this;this.loadSegmentsByPaths(this.addedSegmentPaths,(function(){u.updateNodeInfos(),u.updateMeshNodes(),t&&t()}))}else c&&this.updateMeshNodes()}}hideComponentsBySegment(e){var t=this.model.getFilter(),i=this.getUsedAndNotUsedSegmentIdsBySegmentIds(e),r=this.getUserIdsBySegmentIds(i.usedSegmentIds);t.hideByIds(r)}showComponentsBySegment(e){var t=this.model.getFilter(),i=this.getUsedAndNotUsedSegmentIdsBySegmentIds(e),r=this.getUserIdsBySegmentIds(i.usedSegmentIds);t.showByIds(r)}isolateComponentsBySegment(t,i){var r=this.model.getFilter(),n=this.getUsedAndNotUsedSegmentIdsBySegmentIds(t),a=this.getUserIdsBySegmentIds(n.usedSegmentIds),s=this.getNotUsedPartialUserIds(n.usedSegmentIds,n.notUsedSegmentIds);switch(this.restoreComponentsState(),i){case e.IsolateOption.HIDDEN:r.hideAll(),r.showByIds(a);break;case e.IsolateOption.TRANSLUCENT:r.showByIds(a),s.length&&r.showByIds(s),r.makeTranslucentOthersByIds([]),r.opaqueByIds(a);break;case e.IsolateOption.PARTLYTRANSLUCENT:r.hideAll(),r.showByIds(a),s.length&&(r.showByIds(s),r.makeTranslucentByIds(s))}}disable(){this.getNodeGroup().visible=!1,this.applyReplacementBySegmentIds(null)}enable(){this.getNodeGroup().visible=!0,this.applyReplacementBySegmentIds(this.segmentIdArray)}getDescriptor(){return this.loader.descriptor}getMeshesByUserIds(e){const t=model.getLengthUnitsMatrix();for(let i=0,r=e.length;i<r;i++){const r=e[i],n=this.getNodeIdsByUserId(r);if(n&&n.length)for(let e=0,i=n.length;e<i;e++){const i=this.getNodeInfoByNodeId(n[e]);if(!this.isPickableNode(i))continue;const a=this.getMeshNodesByNodeInfo(i);if(a)for(let e=0,n=a.length;e<n;e++)this.model.minDistanceObjects[r].push({mesh:a[e],matrix:i.matrix,unitsMatrix:t,boundingBox:i.boundingBox})}}}isPickableNode(e){var t=this.model.getFilter(),i=t._hasHiddenFileIdFilter(),r=t._hasVisibleFilter(),n=t._hasTransparentFilter();return!(i&&t._isHiddenFileId(e)||r&&!1===t._isVisible(e))&&(!n||!t._isTransparent(e))}getPickingNodeGenerator(e){return e=null==e?"pick":e,this.pickingNodeGenerators||(this.pickingNodeGenerators={}),this.pickingNodeGenerators[e]||(this.pickingNodeGenerators[e]=new r.PickingSegmentMeshGenerator(this),this.pickingNodeGenerators[e].reserveMaterial=!!e.startsWith("glow")),this.pickingNodeGenerators[e]}_getTranslationMatrix(){if(void 0!==this._translationMatrix)return this._translationMatrix;const e=void 0===this.model.config.view?[0,0,0]:this.model.config.view.translation;return this._translationMatrix=e?(new THREE.Matrix4).makeTranslation(-e[0],-e[1],-e[2]):null,this._translationMatrix}}e.IsolateOption=r.Utils.freezeObject({HIDDEN:0,TRANSLUCENT:1,PARTLYTRANSLUCENT:2}),r.SegmentManager=e}(),function(){class e extends r.SegmentManager{constructor(e){super(e),this.loader=new r.BimtilesSegmentLoader(this)}applyReplacementBySegmentIds(e){if(!e||!e.length)return this.model.setReplacedUserIdMap(null),void this.model.applyReplacement();this.model.setReplacedUserIdMap(r.Utils.arrayToMap(this.getParentUserIdsBySegmentIds(e))),this.model.applyReplacement()}}r.BimtilesSegmentManager=e}(),r.SegmentLoader=class{constructor(e){this.model=e,this.loader=new THREE.FileLoader,this.url=new r.Loader.Url({serverUrl:"",databagId:""}),this.currentTaskCount=0,this.maxTaskCount=0,this.mpkTaskManager=new r.TaskManager,this.databagId="",this.descriptor=new r.ModelView.DefaultDescriptor,this.cfg=null}destroy(){this.model=null,this.loader=null,this.url=null,this.mpkTaskManager=null,this.descriptor.destroy(),this.descriptor=null,this.cfg=null}load(e,t){var i=this;this.finishedCallback=t,this.databagId=e,this.url.databagPath=e,this.loader.setResponseType(""),this.loader.load(this.url.projectUrl(),(function(e){var r;try{r=JSON.parse(e)}catch(e){return console.log("Config data exceptions!"),void(t&&t())}i.cfg=r;var n=r.metadata,a=n.scenes?1:0;if(0===a)return console.log("empty scene!"),void(t&&t());var s=n.mpks||0;if(0!==s){var o=n.symbol?1:0,l=n.userdata?1:0,d=n.lines||0;i.maxTaskCount+=a,i.maxTaskCount+=o,i.maxTaskCount+=1,i.maxTaskCount+=l,i.maxTaskCount+=d,i.maxTaskCount+=s,i._loadScene(),o&&i._loadSymbol(),i._loadUserId(),l&&i._loadUserData(),d&&i._loadLine(),i._loadMpks(s)}else t&&t()}))}_loadMetadata(e,t,i){var n=this;e=r.Utils.getEncodedId(e),this.loader.setResponseType(""),this.loader.load(t,(function(t){for(var r=JSON.parse(t).partialElements,a=0,s=r.length;a<s;a++)n.model.cachePartialElements(e,r[a]);i&&i()}),void 0,(function(e){i&&i()}))}_loadScene(){var e=this,t=this.cfg.metadata;this.loader.setResponseType("arraybuffer"),this.loader.load(this.url.sceneUrl(0),(function(i){e.descriptor.mapSceneReader[0]=new r.Loader.SceneReader(i,t.version),e._onTaskFinished()}),void 0,(function(t){e._onTaskFinished()}))}_loadLine(){var e=this,t=r.Utils.getEncodedId(this.databagId);this.loader.setResponseType("arraybuffer"),this.loader.load(this.url.lineUrl(),(function(i){for(var n=new r.Loader.LineReader(i),a=0,s=n.header.lineCount;a<s;++a){var o=n.getPtBuffer(a),l=n.getIdxBuffer(a);if(null!=o&&null!=l){var d=n.getLineData(a);if(0===d.lineType){for(var h=[],c=1,u=l.length;c<u;c++)h.push(l[c-1]),h.push(l[c]);h.length&&(l=h)}e.model.cacheSegmentBuffer(t,"line-"+d.line_id,{P:o,I:l})}else r.Logger.log("Error Geometry!")}n=null,e._onTaskFinished()}),void 0,(function(t){e._onTaskFinished()}))}_loadSymbol(){var e=this,t=this.cfg.metadata;this.loader.setResponseType("arraybuffer"),this.loader.load(this.url.symbolUrl(),(function(i){e.descriptor.symbolReader=new r.Loader.SymbolReader(i,t.version),e._onTaskFinished()}),void 0,(function(t){e._onTaskFinished()}))}_loadUserId(){var e=this;this.loader.setResponseType("arraybuffer"),this.loader.load(this.url.userIdUrl(),(function(t){e.descriptor.userIdReader=new r.Loader.IdReader(t),e._onTaskFinished()}),void 0,(function(t){e._onTaskFinished()}))}_loadUserData(){var e=this;this.loader.setResponseType(""),this.loader.load(this.url.userDataUrl(),(function(t){e.descriptor.userDataReader=new r.Loader.UserDataReader(t),e._onTaskFinished()}),void 0,(function(t){e._onTaskFinished()}))}_loadMpks(e){for(var t=0;t<e;++t)this.mpkTaskManager.addTask(t);this.mpkTaskManager.processTasks(this.loadMpk.bind(this))}loadMpk(e,t){var i=this,n=r.Utils.getEncodedId(this.databagId);this.loader.setResponseType("arraybuffer"),this.loader.load(this.url.mpkUrl(e),(function(e){for(var a=new r.Loader.MPKReader(e),s=a.header.meshCount,o=new THREE.Matrix4,l=0;l<s;++l){var d=a.getPtBuffer(l),h=a.getIdxBuffer(l);if(null!=d&&null!=h){var c=a.getNormalBuffer(l),u=a.getMeshData(l),p=a.getUVBuffer(l);0!==u.baseScale&&(d=new Float32Array(d),o.identity(),o.setPosition(new THREE.Vector3(u.baseX,u.baseY,u.baseZ)),o.scale(new THREE.Vector3(u.baseScale,u.baseScale,u.baseScale)),r.GeomUtil.applyMatrix4ToBuffer(o,d)),i.model.cacheSegmentBuffer(n,u.mesh_id,{P:d,I:h,N:c,UV:p})}else r.Logger.log("Error Geometry!")}a=null,t(),i._onTaskFinished()}),void 0,(function(e){i._onTaskFinished()}))}_onTaskFinished(){this.currentTaskCount++,this.currentTaskCount>=this.maxTaskCount&&(this.prepareData(),this.finishedCallback())}prepareData(){this.descriptor.parseItemData(),this.descriptor.classifyAllNodeInfo()}},function(){class e extends r.SegmentLoader{constructor(e){super(e)}load(e,t){this.finishedCallback=t,this.databagId=e,this.url.databagPath=e,this.loader.setResponseType(""),this.loader.load(this.url.projectUrl(),(e=>{var i;try{i=JSON.parse(e)}catch(e){return console.log("Config data exceptions!"),void(t&&t())}this.cfg=i;const r=this.model.viewer,n=(r.getModelManager(),"bimface.com"),a=this.databagId.split(n);r.load({serverUrl:a[0]+n,databagId:a[1],loadConfig:{enableBorderLine:!0}})}))}}r.BimtilesSegmentLoader=e}(),function(){class e extends r.ObjectGroup{constructor(e){super(r.ObjectGroupType.VIEWSHED,{priority:20}),e=e||{},this._position=new THREE.Vector3(0,0,0),this._direction=new THREE.Vector3(0,0,-1),this._visibleAreaColor=new THREE.Vector4(0,255,0,.8),this._hiddenAreaColor=new THREE.Vector4(255,0,0,.8),this._distance=null!=e.distance?e.distance:200,this._horizontalFov=null!=e.horizontalFov?e.horizontalFov:2*Math.PI/3,this._verticalFov=null!=e.verticalFov?e.verticalFov:Math.PI/2,this._translucenceAvailable=!1!==e.translucenceAvailable,this._frustumVisible=e.frustumVisible,this._effectVisible=!0,this.visible=this._frustumVisible,this._up=new THREE.Vector3(0,1,0),this._right=new THREE.Vector3(1,0,0),this._unitAngle=5,this._cornerLeftTop=new THREE.Vector3,this._cornerRightTop=new THREE.Vector3,this._cornerLeftBottom=new THREE.Vector3,this._cornerRightBottom=new THREE.Vector3,this._viewer=null,this._lineGeometry=new THREE.BufferGeometry,this._lineMaterial=new THREE.LineBasicMaterial({color:16777215}),this._lineMesh=new THREE.LineSegments(this._lineGeometry,this._lineMaterial),this._sphereGeometry=new THREE.BufferGeometry,this._sphereMaterial=new THREE.MeshBasicMaterial({color:16777215,side:THREE.DoubleSide}),this._sphereMesh=new THREE.Mesh(this._sphereGeometry,this._sphereMaterial),this._sphereMesh.visible=!1,this.camera=new THREE.PerspectiveCamera,this.viewMatrix=new THREE.Matrix4,this.viewProjMatrix=new THREE.Matrix4,this.depthRenderTarget=new THREE.WebGLRenderTarget(1024,1024,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter});var t=new THREE.Vector3;this.updateViewMatrix=function(){t.copy(this._position),t.add(this._direction),this.camera.position.copy(this._position),this.camera.lookAt(t),this.camera.updateMatrixWorld(!0),this.viewMatrix.copy(this.camera.matrixWorld).invert()};var i=new THREE.Vector3;new THREE.Vector3;this.updateProjMatrix=function(){var e=Math.cos(this._horizontalFov/2),t=Math.tan(this._verticalFov/2),r=Math.atan(e*t),n=this._distance*Math.cos(r)*Math.cos(this._horizontalFov/2);i.copy(this._position),i.addScaledVector(this._direction,n);var a=n*Math.tan(this._horizontalFov/2),s=n*Math.tan(this._verticalFov/2);this._cornerLeftTop.copy(i),this._cornerLeftTop.addScaledVector(this._right,-a),this._cornerLeftTop.addScaledVector(this._up,s),this._cornerRightTop.copy(i),this._cornerRightTop.addScaledVector(this._right,a),this._cornerRightTop.addScaledVector(this._up,s),this._cornerLeftBottom.copy(i),this._cornerLeftBottom.addScaledVector(this._right,-a),this._cornerLeftBottom.addScaledVector(this._up,-s),this._cornerRightBottom.copy(i),this._cornerRightBottom.addScaledVector(this._right,a),this._cornerRightBottom.addScaledVector(this._up,-s);var o=Math.tan(.5*this._horizontalFov)/Math.tan(.5*this._verticalFov);this.camera.fov=THREE.Math.radToDeg(this._verticalFov),this.camera.aspect=o,this.camera.near=.01,this.camera.far=Math.max(this._distance),this.camera.updateProjectionMatrix()},this.getViewProjMatrix=function(){return this.viewProjMatrix.multiplyMatrices(this.camera.projectionMatrix,this.viewMatrix),this.viewProjMatrix},this.createSideLines=function(){for(var e=[],t=[this._cornerLeftBottom,this._cornerRightBottom,this._cornerRightTop,this._cornerLeftTop],i=0;i<t.length;i++)e.push(this._position.x,this._position.y,this._position.z),e.push(t[i].x,t[i].y,t[i].z);return e};var n=new THREE.Vector3,a=new THREE.Vector3,s=new THREE.Vector3,o=new THREE.Vector3,l=[],d=this;this.createTopSideLines=function(){var e=[];function t(e,t,i){var r=[];if(i){for(var n=e;n<t;)if(r.push(n),(n+=d._unitAngle)>=t){r.push(t);break}}else for(n=t;n>e;)if(r.push(n),(n-=d._unitAngle)<=e){r.push(e);break}return r}n.copy(this._cornerLeftTop),n.sub(this._position),a.copy(this._cornerRightTop),a.sub(this._position),s.copy(this._cornerRightBottom),s.sub(this._position);var i,r,h=THREE.Math.radToDeg(a.angleTo(s)),c=THREE.Math.radToDeg(n.angleTo(a)),u=[{axis:"up",outerAngle:-this._horizontalFov/2,innerAngles:t(-h/2,h/2,!0)},{axis:"right",outerAngle:this._verticalFov/2,innerAngles:t(-c/2,c/2,!0)},{axis:"up",outerAngle:this._horizontalFov/2,innerAngles:t(-h/2,h/2,!1)},{axis:"right",outerAngle:-this._verticalFov/2,innerAngles:t(-c/2,c/2,!1)}];l=[];for(var p=0;p<u.length;p++){"up"==u[p].axis?(i=this._up,r=this._right):"right"==u[p].axis&&(i=this._right,r=this._up);for(var m=[],f=0;f<u[p].innerAngles.length;f++){o.copy(this._direction),o.applyAxisAngle(r,THREE.Math.degToRad(u[p].innerAngles[f])),o.applyAxisAngle(i,u[p].outerAngle),o.multiplyScalar(this._distance);var g=new THREE.Vector3;g.copy(this._position),g.add(o),m.push(g),l.push(g)}for(f=0;f<m.length-1;f++)e.push(m[f].x,m[f].y,m[f].z),e.push(m[f+1].x,m[f+1].y,m[f+1].z)}return e};var h=new THREE.Vector3,c=new THREE.Vector3,u=new THREE.Vector3,p=new THREE.Vector3,m=new THREE.Quaternion;this.createTopLines=function(){var e=[];h.copy(this._position),h.addScaledVector(this._direction,this._distance),c.copy(h),c.sub(this._position),c.normalize();for(var t=[],i=0,r=0;r<l.length;r++){p.copy(l[r]),p.sub(this._position),p.normalize(),u.copy(c),u.cross(p),u.normalize();for(var n=THREE.Math.radToDeg(c.angleTo(p)),a=[],s=0;;s+=this._unitAngle){s>=n&&(s=n),m.setFromAxisAngle(u,THREE.Math.degToRad(s)),o.copy(c),o.applyQuaternion(m);var d=new THREE.Vector3;if(d.copy(this._position),d.addScaledVector(o,this._distance),a.push(d),s>=n)break}i=Math.max(i,a.length),t.push(a)}for(r=0;r<t.length;r++)for(s=0;s<t[r].length-1;s++)e.push(t[r][s].x,t[r][s].y,t[r][s].z),e.push(t[r][s+1].x,t[r][s+1].y,t[r][s+1].z);for(r=1;r<i;r++)for(s=0;s<t.length-1;s++)t[s][r]&&t[s+1][r]&&(e.push(t[s][r].x,t[s][r].y,t[s][r].z),e.push(t[s+1][r].x,t[s+1][r].y,t[s+1][r].z));return e},this.updateMeshGeometry=function(){this.updateViewMatrix(),this.updateProjMatrix(),this._sphereGeometry=new THREE.SphereGeometry(this._distance,40,40),this._sphereGeometry.translate(this._position.x,this._position.y,this._position.z);var e=[];return e=(e=(e=e.concat(this.createSideLines())).concat(this.createTopSideLines())).concat(this.createTopLines()),this._lineGeometry.deleteAttribute("position"),this._lineGeometry.setAttribute("position",new THREE.BufferAttribute(new Float32Array(e),3)),this._lineGeometry},this.initPrimitive=function(){this.updateMeshGeometry(),this._lineMesh.geometry=this._lineGeometry,this.add(this._lineMesh),this._sphereMesh.geometry=this._sphereGeometry,this.add(this._sphereMesh)},this.updatePrimitive=function(){this.updateMeshGeometry(),this._lineMesh.geometry=this._lineGeometry,this._sphereMesh.geometry=this._sphereGeometry},r.Viewshed.prototype.getId=function(){return this.uuid};var f={x:0,y:0,z:0};r.Viewshed.prototype.getPositon=function(){return f.x=this._position.x,f.y=this._position.y,f.z=this._position.z,f};var g=new THREE.Vector3;r.Viewshed.prototype.setPosition=function(e){g.x=e.x,g.y=e.y,g.z=e.z,this._position!=g&&(this._position.copy(g),this.updatePrimitive())};var v={x:0,y:0,z:0};r.Viewshed.prototype.getDirection=function(){return v.x=this._direction.x,v.y=this._direction.y,v.z=this._direction.z,v};var y=new THREE.Vector3(0,1,0),M=new THREE.Vector3;r.Viewshed.prototype.setDirection=function(e){M.x=e.x,M.y=e.y,M.z=e.z,M.normalize(),this._direction!=M&&(0!==M.lengthSq()?(this._direction.copy(M),this._right.crossVectors(y,M),0===this._right.lengthSq()&&(1===Math.abs(y.z)?M.x+=1e-4:M.z+=1e-4,M.normalize(),this._right.crossVectors(y,M)),this._right.normalize(),this._up.crossVectors(M,this._right),this.updatePrimitive()):r.Logger.warn("WARNING: Invalid direction when CLOUD.Viewshed.prototype.setDirection()"))};var E={x:0,y:0,z:0,w:0};r.Viewshed.prototype.getVisibleAreaColor=function(){return E.x=this._visibleAreaColor.x,E.y=this._visibleAreaColor.y,E.z=this._visibleAreaColor.z,E.w=this._visibleAreaColor.w,E};var b=new THREE.Vector4;r.Viewshed.prototype.setVisibleAreaColor=function(e){b.x=e.red||e.x?e.red||e.x:0,b.y=e.green||e.y?e.green||e.y:0,b.z=e.blue||e.z?e.blue||e.z:0,b.w=e.alpha||e.w?e.alpha||e.w:0,this._visibleAreaColor!=b&&(this._visibleAreaColor.copy(b),this.updatePrimitive())};var x={x:0,y:0,z:0,w:0};r.Viewshed.prototype.getHiddenAreaColor=function(){return x.x=this._hiddenAreaColor.x,x.y=this._hiddenAreaColor.y,x.z=this._hiddenAreaColor.z,x.w=this._hiddenAreaColor.w,x};var I=new THREE.Vector4;r.Viewshed.prototype.setHiddenAreaColor=function(e){I.x=e.red||e.x?e.red||e.x:0,I.y=e.green||e.y?e.green||e.y:0,I.z=e.blue||e.z?e.blue||e.z:0,I.w=e.alpha||e.w?e.alpha||e.w:0,this._hiddenAreaColor!=I&&(this._hiddenAreaColor.copy(I),this.updatePrimitive())},r.Viewshed.prototype.getDistance=function(){return this._distance},r.Viewshed.prototype.setDistance=function(e){this._distance!=e&&(this._distance=e,this.updatePrimitive())},r.Viewshed.prototype.getHorizontalFov=function(){return this._horizontalFov},r.Viewshed.prototype.setHorizontalFov=function(e){this._horizontalFov!=e&&(this._horizontalFov=e,this.updatePrimitive())},r.Viewshed.prototype.getVerticalFov=function(){return this._verticalFov},r.Viewshed.prototype.setVerticalFov=function(e){this._verticalFov!=e&&(this._verticalFov=e,this.updatePrimitive())},r.Viewshed.prototype.setTranslucenceAvailable=e=>{this._translucenceAvailable=e},r.Viewshed.prototype.getTranslucenceAvailable=()=>this._translucenceAvailable,r.Viewshed.prototype.show=function(){this._effectVisible=!0,this._frustumVisible&&(this.visible=!0),this._viewer&&this._viewer.viewshedManager.update()},r.Viewshed.prototype.hide=function(){this._effectVisible=!1,this.visible=!1,this._viewer&&this._viewer.viewshedManager.update()},r.Viewshed.prototype.setFrustumVisible=function(e){this._frustumVisible=e,this.visible=e,this._viewer&&this._viewer.viewshedManager.update()},r.Viewshed.prototype.isFrustumVisible=function(){return this._frustumVisible},r.Viewshed.prototype.isEffectVisible=function(){return!0===this._effectVisible},this.setPosition(null!=e.position?e.position:this._position),this.setDirection(null!=e.direction?e.direction:this._direction),this.setVisibleAreaColor(null!=e.visibleAreaColor?e.visibleAreaColor:this._visibleAreaColor),this.setHiddenAreaColor(null!=e.hiddenAreaColor?e.hiddenAreaColor:this._hiddenAreaColor),this.initPrimitive()}}r.Viewshed=e}(),(()=>{class e extends r.EditTool{constructor(e){super(r.EditToolMode.VIEW_SHED_ANALYSIS),this.viewer=e,this.scene=e.getScene(),this.viewshed=new r.Viewshed({position:new THREE.Vector3(0,0,0),direction:new THREE.Vector3(0,0,-1),distance:500,horizontalFov:2*Math.PI/3,verticalFov:Math.PI/2}),this.viewshed.show(),this.scene.objectGroups.add(this.viewshed)}enable(e){e?this.viewshed.show():this.viewshed.hide()}destroy(){}onEnter(){this.enable(!0)}onExit(){this.enable(!1)}processMouseDown(e){}processHover(e){}processMouseUp(e){}processMouseMove(e){}processTouchstart(e){}processTouchmove(e){}processTouchend(e){}}r.ViewshedTool=e})(),r.ViewshedManager=class{constructor(e){this.viewer=e,this.scene=e.getScene(),this.modelManager=e.modelManager,this._viewsheds=[],this._maxViewshedCount=4,this._viewshedContents=[],this._viewshedDepthMaps=[];for(var t=0;t<this._maxViewshedCount;t++)this._viewshedDepthMaps.push(new THREE.Texture),this._viewshedContents.push({viewshedViewProjMatrix:new THREE.Matrix4,viewshedViewMatrix:new THREE.Matrix4,viewshedVisibleColor:new THREE.Vector4,viewshedHiddenColor:new THREE.Vector4,viewshedMinMax:new THREE.Vector2,viewshedLogDepthBufFC:1})}destroy(){this._viewsheds=null,this._viewshedContents=null,this._viewshedDepthMaps=null,this.scene=null,this.modelManager=null,this.viewer=null}addViewshed(e){return this._viewsheds.push(e),this.scene.objectGroups.add(e),e._viewer=this.viewer,e}getViewshedById(e){for(var t=0;t<this._viewsheds.length;t++)if(this._viewsheds[t].getId()==e)return this._viewsheds[t]}getViewsheds(){return this._viewsheds}hideById(e){var t=this.getViewshedById(e);t&&t.hide(),this.update()}showById(e){var t=this.getViewshedById(e);t&&t.show(),this.update()}removeById(e){for(var t=0;t<this._viewsheds.length;t++)if(this._viewsheds[t].getId()==e){this.scene.objectGroups.remove(this._viewsheds[t]),this._viewsheds.splice(t,1);break}this.update()}clear(){for(var e=0;e<this._viewsheds.length;e++)this.scene.objectGroups.remove(this._viewsheds[e]);this._viewsheds=[],this.update()}update(){if(this._viewsheds.length>this._maxViewshedCount)console.warn("WARNING: Viewshed count exceeds max count limit");else{this._resetContents();for(var e=this.viewer.rendererManager.renderer,t=this.viewer.getScene(),i=0,r=0;r<this._viewsheds.length;r++)if(this._viewsheds[r].isEffectVisible()){var n=this._viewsheds[r].camera,a=this._viewsheds[r].depthRenderTarget;e.renderCustomDepth&&(this._viewsheds[r]._sphereMesh.visible=!0,!0===this._viewsheds[r].getTranslucenceAvailable()?e.renderCustomDepthByOpacity(e.renderer,t,n,a,.7,!0):e.renderCustomDepth(e.renderer,t,n,a,!0),this._viewsheds[r]._sphereMesh.visible=!1);var s=this._viewsheds[r].getVisibleAreaColor(),o=this._viewsheds[r].getHiddenAreaColor();this._viewshedContents[i].viewshedViewProjMatrix.copy(this._viewsheds[r].getViewProjMatrix()),this._viewshedContents[i].viewshedViewMatrix.copy(this._viewsheds[r].viewMatrix),this._viewshedContents[i].viewshedVisibleColor.set(s.x/255,s.y/255,s.z/255,s.w),this._viewshedContents[i].viewshedHiddenColor.set(o.x/255,o.y/255,o.z/255,o.w),this._viewshedContents[i].viewshedMinMax.set(n.near,n.far),this._viewshedContents[i].viewshedLogDepthBufFC=2/(Math.log(n.far+1)/Math.LN2),this._viewshedDepthMaps[i]=a.texture,i++}this.modelManager.updateMaterialsValue("viewshedCount",0==i?-1:i),this.modelManager.updateMaterialsValue("viewshedContents",this._viewshedContents),this.modelManager.updateMaterialsValue("viewshedDepthMaps",this._viewshedDepthMaps)}}_resetContents(){for(var e=0;e<this._maxViewshedCount;e++)this._viewshedContents[e].viewshedViewProjMatrix.identity(),this._viewshedContents[e].viewshedViewMatrix.identity(),this._viewshedContents[e].viewshedVisibleColor.set(0,1,0,.8),this._viewshedContents[e].viewshedHiddenColor.set(1,0,0,.8),this._viewshedContents[e].viewshedMinMax.set(0,0),this._viewshedContents[e].viewshedLogDepthBufFC=1}},r.VideoCast=class{constructor(e){e=e||{},this._id=e.id,this._position=void 0!==e.position?new THREE.Vector3(e.position.x,e.position.y,e.position.z):new THREE.Vector3(0,0,0),this._direction=void 0!==e.direction?new THREE.Vector3(e.direction.x,e.direction.y,e.direction.z):new THREE.Vector3(0,0,-1),this._distance=void 0!==e.distance?e.distance:2e3,this._horizontalFov=void 0!==e.horizontalFov?e.horizontalFov:2*Math.PI/3,this._verticalFov=void 0!==e.verticalFov?e.verticalFov:Math.PI/2,this._projectorMap=void 0!==e.projectorMap?e.projectorMap:new THREE.Texture,this._up=new THREE.Vector3(0,1,0),this._right=new THREE.Vector3(1,0,0),this.camera=new THREE.PerspectiveCamera,this.viewMatrix=new THREE.Matrix4,this.viewProjMatrix=new THREE.Matrix4,this.depthRenderTarget=new THREE.WebGLRenderTarget(1024,1024,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter}),this._visible=!0,this.scratchAt=new THREE.Vector3,this.updateViewMatrix(),this.updateProjMatrix()}destroy(){this._id=void 0,this._position=null,this._direction=null,this._distance=void 0,this._horizontalFov=void 0,this._verticalFov=void 0,this._projectorMap=null,this._up=null,this._right=null,this.camera=null,this.viewMatrix=null,this.viewProjMatrix=null,this.depthRenderTarget=null,this._visible=void 0,this.scratchAt=null}setVisible(e){this._visible=e}getVisible(){return this._visible}updateViewMatrix(){this.scratchAt.copy(this._position),this.scratchAt.add(this._direction),this.camera.position.copy(this._position),this.camera.lookAt(this.scratchAt),this.camera.updateMatrixWorld(!0),this.viewMatrix.copy(this.camera.matrixWorld).invert()}updateProjMatrix(){const e=Math.tan(.5*this._horizontalFov)/Math.tan(.5*this._verticalFov);this.camera.fov=THREE.Math.radToDeg(this._verticalFov),this.camera.aspect=e,this.camera.near=.01,this.camera.far=this._distance,this.camera.updateProjectionMatrix()}getViewMatrix(){return this.viewMatrix}getViewProjMatrix(){return this.viewProjMatrix.multiplyMatrices(this.camera.projectionMatrix,this.viewMatrix),this.viewProjMatrix}getId(){return this._id}setProjectorMap(e){this._projectorMap=e}getProjectorMap(){return this._projectorMap}getPosition(){return this._position}setPosition(e){this._position!=e&&(this._position=e)}getDirection(){return this._direction}setDirection(e){this._direction!=e&&(this._direction=e)}getDistance(){return this._distance}setDistance(e){this._distance!=e&&(this._distance=e)}getHorizontalFov(){return this._horizontalFov}setHorizontalFov(e){this._horizontalFov!=e&&(this._horizontalFov=e)}getVerticalFov(){return this._verticalFov}setVerticalFov(e){this._verticalFov!=e&&(this._verticalFov=e)}},r.VideoCastManager=class{constructor(e){this.viewer=e,this.scene=e.getScene(),this.modelManager=e.modelManager,this._videoCasts=[],this._maxVideoCastCount=4,this._videoCastContents=[],this._videoCastDepthMaps=[],this._videoCastProjectorMaps=[];for(var t=0;t<this._maxVideoCastCount;t++)this._videoCastDepthMaps.push(new THREE.Texture),this._videoCastProjectorMaps.push(new THREE.Texture),this._videoCastContents.push({viewProjMatrix:new THREE.Matrix4,viewMatrix:new THREE.Matrix4,logDepthBufFC:1});this.firstAnimate=!0}destroy(){this._cancelAnimate();for(let e=0;e<this._videoCasts.length;e++)this.scene.objectGroups.remove(this._videoCasts[e]);this._videoCasts=null,this._videoCastContents=null,this._videoCastDepthMaps=null,this.scene=null,this.modelManager=null,this.viewer=null}addVideoCast(e){this._videoCasts.push(e),this.update(),!0===this.firstAnimate&&(this.firstAnimate=!1,this._animate())}getVideoCastById(e){for(var t=0;t<this._videoCasts.length;t++)if(this._videoCasts[t].getId()==e)return this._videoCasts[t]}getVideoCasts(){return this._videoCasts}hideById(e){var t=this.getVideoCastById(e);t&&t.setVisible(!1),this.update()}showById(e){var t=this.getVideoCastById(e);t&&t.setVisible(!0),this.update()}removeById(e){for(var t=0;t<this._videoCasts.length;t++)if(this._videoCasts[t].getId()==e){this._videoCasts.splice(t,1);break}this.update(),0===this.getVisibleCount()&&(this.firstAnimate=!0,this._cancelAnimate())}clear(){for(let e=0;e<this._videoCasts.length;e++)this.scene.objectGroups.remove(this._videoCasts[e]);this._videoCasts=[],this.update()}getVisibleCount(){let e=0;for(let t=0;t<this._videoCasts.length;t++)this._videoCasts[t].getVisible()&&e++;return e}update(){if(this._videoCasts.length>this._maxVideoCastCount)return void console.warn("WARNING: VideoCast count exceeds max count limit");const e=this.viewer.rendererManager.renderer,t=this.viewer.getScene();let i=0;for(let r=0;r<this._videoCasts.length;r++)if(this._videoCasts[r].getVisible()){const n=this._videoCasts[r].camera,a=this._videoCasts[r].depthRenderTarget;e.renderCustomDepth&&e.renderCustomDepth(e.renderer,t,n,a,!0),this._videoCastContents[i].viewProjMatrix.copy(this._videoCasts[r].getViewProjMatrix()),this._videoCastContents[i].viewMatrix.copy(this._videoCasts[r].getViewMatrix()),this._videoCastContents[i].logDepthBufFC=2/(Math.log(n.far+1)/Math.LN2),this._videoCastDepthMaps[i]=a.texture,this._videoCastProjectorMaps[i]=this._videoCasts[r].getProjectorMap(),i++}this.modelManager.updateMaterialsValue("videoCastCount",0==i?-1:i),this.modelManager.updateMaterialsValue("videoCastContents",this._videoCastContents),this.modelManager.updateMaterialsValue("videoCastDepthMaps",this._videoCastDepthMaps),this.modelManager.updateMaterialsValue("videoCastProjectorMaps",this._videoCastProjectorMaps)}_animate(){let e=()=>{this.animationId=requestAnimationFrame(e),0!==this.getVisibleCount()&&this.viewer.render()};e()}_cancelAnimate(){cancelAnimationFrame(this.animationId),this.animationId=0}},r.TerrainExcavation=class{constructor(e){this.geometry=null,this.material=null,this.mesh=null,this.id=e.id||"",this.visible=e.visible||!1,this.terrainOperationManager=e.terrainOperationManager}init(e){for(var t=e.length,i=new Array,n=0,a=new THREE.Vector3,s=new Array(2*t),o=0;o<t;o++)a.copy(e[o]),a.y=0,s[2*o]=a.x,s[2*o+1]=a.z,a.toArray(i,n),n+=3;var l=r.earcut(s),d=new THREE.BufferGeometry;d.setIndex(l),d.setAttribute("position",new THREE.Float32BufferAttribute(i,3)),d.computeBoundingBox(),this.geometry=d;var h=new THREE.ShaderMaterial({uniforms:{},side:THREE.DoubleSide,vertexShader:"\n void main()\n {\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n ",fragmentShader:"\n precision highp float;\n void main()\n {\n gl_FragColor = vec4(1.0, 0.0, 0.0 , 1.0);\n }\n "});this.material=h,this.mesh=new THREE.Mesh(this.geometry,this.material),this.terrainOperationManager.sceneForExcavation.add(this.mesh)}dispose(){this.geometry.dispose(),this.material.dispose(),this.terrainOperationManager.sceneForExcavation.remove(this.mesh)}setId(e){this.id=e}getId(){return this.id}setVisible(e){this.visible=e,this.mesh.visible=e}getVisible(){return this.visible}getAABBMin(){return this.geometry.boundingBox.min}getAABBMax(){return this.geometry.boundingBox.max}},G=new THREE.Vector3,r.TerrainFlatten=class{constructor(e){this.visible=e.visible||!1,this.id=e.id||"",this.elevation=e.elevation||0,this.viewer=e.viewer,this.boundingBox=new THREE.Box3,this.pointsInDrawing=[]}init(e){this.pointsInDrawing=[];for(var t=new THREE.Vector3(1/0,0,1/0),i=new THREE.Vector3(-1/0,0,-1/0),r=0;r<e.length;r++)this.pointsInDrawing.push(new THREE.Vector2(e[r].x,e[r].z)),t.x=Math.min(t.x,e[r].x),t.z=Math.min(t.z,e[r].z),i.x=Math.max(i.x,e[r].x),i.z=Math.max(i.z,e[r].z);this.boundingBox.min.copy(t),this.boundingBox.max.copy(i)}setId(e){this.id=e}getId(){return this.id}setVisible(e){this.visible=e}getVisible(){return this.visible}isInRegionDrawing(e){return r.Utils.pointInPolygon(e,this.pointsInDrawing)}isIntersectRegionBboxDrawing(e){return this.boundingBox.intersectsBox(e)}transformPolygon(e){for(var t=[],i=0;i<this.pointsInDrawing.length;i++)G.set(this.pointsInDrawing[i].x,0,this.pointsInDrawing[i].y),G.applyMatrix4(e),t.push(new THREE.Vector2(G.x,G.y));return t}},r.TerrainOperationManager=class{constructor(e){this.frustum=new THREE.Frustum,this.viewer=e,this.sceneForExcavation=new THREE.Scene,this.renderTargetForExcavation=new THREE.WebGLRenderTarget(1024,1024,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter}),this.pickingExcavationMaterial=new r.PickingExcavationMaterial,this.pickingExcavationRenderTarget=new THREE.WebGLRenderTarget(1024,1024,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter}),this.terrainExcavations={},this.terrainExcavationsNumber=0,this.orthoCamera=null,this.orthoViewProjMatrix=new THREE.Matrix4,this.isDirty=!0,this.terrainFlattens=[],this._inverseMatrix=new THREE.Matrix4}render(e){if(this.renderer=e,0!=this.terrainExcavationsNumber){var t=this.viewer.camera;if(this.frustum.setFromProjectionMatrix((new THREE.Matrix4).multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse)),this.isDirty&&this.calcOrthoCamera(),this.orthoCamera){const t=e.getRenderTarget();e.setRenderTarget(this.renderTargetForExcavation),e.render(this.sceneForExcavation,this.orthoCamera),e.setRenderTarget(t)}this.isDirty&&(this._updateTerrainForExcavation(),this.isDirty=!1)}else this.isDirty&&(this._updateTerrainForExcavation(),this.isDirty=!1)}pickExcavation(e){if(0==this.terrainExcavationsNumber)return!1;var t=!1;for(var i in this.terrainExcavations)if(this.terrainExcavations[i].getVisible()){t=!0;break}if(!t)return!1;var r=this.viewer.getScene(),n=r.overrideMaterial;r.overrideMaterial=this.pickingExcavationMaterial;const a=this.renderer.getRenderTarget();this.renderer.setRenderTarget(this.pickingExcavationRenderTarget),this.renderer.render(r,this.viewer.camera),this.renderer.setRenderTarget(a),r.overrideMaterial=n;var s=this.viewer.getViewportSize(),o=new Uint8Array(4);return this.renderer.readRenderTargetPixels(this.pickingExcavationRenderTarget,e.x,s.height-e.y,1,1,o),o[0]<=0}calcOrthoCamera(){var e=new THREE.Vector3(1/0,1/0,1/0),t=new THREE.Vector3(-1/0,-1/0,-1/0);for(var i in this.terrainExcavations)if(this.terrainExcavations[i].getVisible()){var r=this.terrainExcavations[i].getAABBMin(),n=this.terrainExcavations[i].getAABBMax();e.x=Math.min(r.x,e.x),e.y=Math.min(r.y,e.y),e.z=Math.min(r.z,e.z),t.x=Math.max(n.x,t.x),t.y=Math.max(n.y,t.y),t.z=Math.max(n.z,t.z)}var a=.5*(t.x-e.x),s=.5*(t.z-e.z),o=.5*(t.x+e.x),l=.5*(t.y+e.y),d=.5*(t.z+e.z),h=new THREE.Vector3(o,2,d),c=new THREE.Vector3(o,l,d);this.orthoCamera=new THREE.OrthographicCamera(-a,a,s,-s,.1,2e3),this.orthoCamera.position.set(h.x,h.y,h.z),this.orthoCamera.lookAt(c),this.orthoCamera.updateMatrixWorld(!0),this.orthoViewProjMatrix=this.orthoCamera.projectionMatrix.clone(),this._inverseMatrix.copy(this.orthoCamera.matrixWorld).invert(),this.orthoViewProjMatrix.multiply(this._inverseMatrix)}setSize(e,t){this.pickingExcavationRenderTarget.setSize(e,t)}dispose(){this.clearExcavationRegions(),this.clearFlattenRegions(),null!=this.renderTargetForExcavation&&(this.renderTargetForExcavation.dispose(),this.renderTargetForExcavation=null),null!=this.pickingExcavationRenderTarget&&(this.pickingExcavationRenderTarget.dispose(),this.pickingExcavationRenderTarget=null),null!=this.sceneForExcavation&&(this.sceneForExcavation=null),this.frustum=null,this.viewer=null,this.pickingExcavationMaterial=null,this.terrainExcavations=null,this.orthoCamera=null,this.orthoViewProjMatrix=null,this.terrainFlattens=null}addExcavationRegion(e,t){if(this.terrainExcavations.hasOwnProperty(e))console.warn("the terrain Excavation id '"+e+"' is existed.");else{var i=new r.TerrainExcavation({terrainOperationManager:this,id:e,visible:!0});i.init(t),this.terrainExcavations[e]=i,this.isDirty=!0,this.terrainExcavationsNumber++}}hideExcavationRegionsById(e){for(var t=0;t<e.length;++t)this.terrainExcavations.hasOwnProperty(e[t])&&(this.terrainExcavations[e[t]].setVisible(!1),this.isDirty=!0)}showExcavationRegionsById(e){for(var t=0;t<e.length;++t)this.terrainExcavations.hasOwnProperty(e[t])&&(this.terrainExcavations[e[t]].setVisible(!0),this.isDirty=!0)}removeExcavationRegionsById(e){for(var t=0;t<e.length;++t)this.terrainExcavations.hasOwnProperty(e[t])&&(this.terrainExcavations[e[t]].dispose(),delete this.terrainExcavations[e[t]],this.isDirty=!0,this.terrainExcavationsNumber--)}clearExcavationRegions(){for(var e in this.terrainExcavations)this.terrainExcavations[e].dispose(),delete this.terrainExcavations[e],this.isDirty=!0,this.terrainExcavationsNumber--}addFlattenRegion(e,t,i){if(this._hasFlattenRegion(e))console.warn("the terrain flatten id '"+e+"' is existed.");else{var n=new r.TerrainFlatten({viewer:this.viewer,id:e,visible:!0,elevation:i});n.init(t),this.terrainFlattens.push(n),this._updateTerrainForFlatten()}}removeFlattenRegionsById(e){for(var t=this.terrainFlattens.length-1;t>=0;--t)e.indexOf(this.terrainFlattens[t].getId())>=0&&this.terrainFlattens.splice(t,1);this._updateTerrainForFlatten()}clearFlattenRegions(){this.terrainFlattens=[],this._updateTerrainForFlatten()}isInFlattenRegionDrawing(e){for(var t=this.terrainFlattens.length-1;t>=0;--t)if(this.terrainFlattens[t].isInRegionDrawing(e))return this.terrainFlattens[t]}isIntersectFlattenBboxDrawing(e){for(var t=this.terrainFlattens.length-1;t>=0;--t)if(this.terrainFlattens[t].isIntersectRegionBboxDrawing(e))return!0;return!1}_hasFlattenRegion(e){for(var t=0;t<this.terrainFlattens.length;t++)if(e==this.terrainFlattens[t].getId())return!0;return!1}_updateTerrainForFlatten(){var e;this.viewer.modelManager.modelCollection.traverse((t=>{t.isDemLayer&&(e=t.tileManager)})),e&&e.updateTileMeshForFlatten()}_updateTerrainForExcavation(){var e;this.viewer.modelManager.modelCollection.traverse((t=>{t.isDemLayer&&(e=t.tileManager)}));var t={isExcavation:this.terrainExcavationsNumber>0,samplerExcavation:this.renderTargetForExcavation.texture,cullOrthoMatrix:this.orthoViewProjMatrix};e&&e.setExcavation(t),this.pickingExcavationMaterial.updateExcavation(t),this.pickingExcavationMaterial.updateSide({isExcavation:t&&t.isExcavation})}};r.Walkthrough=class{constructor(e){this.name=e||"",this.keyFrameList=[],this.walkthroughTime=5,this.isFrameTimeMode=!1,this.interpolateType=0,this.fps=60,this.parts=100,this.rotateSpeed=Math.PI/this.fps/4,this.parameters={segments:this.walkthroughTime*this.fps*this.parts,closed:!1,curveType:"centripetal",tension:.25},this.modificationId=0,this.allocateSegmentList=null,this.frameTimeSegmentList=null}addKeyFrame(e){var t=new THREE.Vector3(e.position.x,e.position.y,e.position.z),i=new THREE.Vector3(e.target.x,e.target.y,e.target.z);const{id:r,name:n,timeBetweenFrames:a,stayTime:s}=e;this.keyFrameList.push({id:r,name:n,timeBetweenFrames:a,stayTime:s,position:t,target:i}),this.modificationId++}setKeyFrameList(e){this.keyFrameList=[];for(var t=0,i=e.length;t<i;t++)this.addKeyFrame(e[t])}removeKeyFrame(e){var t=this.keyFrameList.length;e>=0&&e<t&&(this.keyFrameList.splice(e,1),this.modificationId++)}checkFrameTimeMode(){return this.isFrameTimeMode=!1,this.keyFrameList.some((e=>{const{timeBetweenFrames:t,stayTime:i}=e;return isNaN(t)&&isNaN(i)||(this.isFrameTimeMode=!0),this.isFrameTimeMode})),this.isFrameTimeMode}getKeyFrames(){return this.keyFrameList}getKeyFrameCount(){return this.keyFrameList.length}clearFrames(){this.keyFrameList=[]}getJumpCounts(e){var t=e/(1e3/this.fps)*this.parts;return t=parseInt(t)}setWalkthroughTime(e){const t=Object.prototype.toString.call(e);"[object Array]"===t?e.forEach((e=>{if(void 0!==e.id){const t=this.keyFrameList.find((t=>t.id.toString()===e.id.toString()));t&&(t.timeBetweenFrames=e.timeBetweenFrames||0,t.stayTime=e.stayTime||0)}})):"[object Number]"===t&&(this.keyFrameList.forEach((e=>{delete e.timeBetweenFrames,delete e.stayTime})),this.walkthroughTime=e,this.setSegments(e*this.fps*this.parts)),this.modificationId++}setWalkthroughTimeByFrame(){let e=this.keyFrameList.length;this.allocateSegmentList=[],this.frameTimeSegmentList=[],this.keyFrameList.forEach(((t,i)=>{const{timeBetweenFrames:r,stayTime:n}=t,a={move:0,stay:0},s=i===e-1;isNaN(r)||s||(a.move=r*this.fps*this.parts),isNaN(n)||(a.stay=n*this.fps*this.parts),0===a.move&&(a.move=1),this.frameTimeSegmentList.push(a),s||this.allocateSegmentList.push(a.stay+a.move)})),this.allocateSegmentList.length&&this.setSegments(this.allocateSegmentList.reduce(((e,t)=>e+t)))}setInterpolateType(e){this.interpolateType=e,1==e&&this.setSplineTension(0)}getInterpolateType(){return this.interpolateType}setName(e){this.name=e}getName(){return this.name}getKeyFramePositions(){for(var e=[],t=0,i=this.keyFrameList.length;t<i;t++){var r=this.keyFrameList[t];e.push(r.position)}return e}getKeyFramePosition(e){return this.keyFrameList[e].position}getKeyFrameDirection(e){var t=this.keyFrameList[e];return t.target.clone().sub(t.position)}getKeyFrameTarget(e){return this.keyFrameList[e].target}allocateSegments(){if(this.checkFrameTimeMode())this.setWalkthroughTimeByFrame();else{for(var e=[],t=0,i=this.keyFrameList.length;t<i-1;t++){var r=this.keyFrameList[t].position,n=this.keyFrameList[t+1].position;e.push(n.clone().sub(r).length())}var a=0,s=0;for(i=e.length;s<i;s++)a+=e[s];var o=this.getSegments(),l=0;for(i=e.length;0!=a&&l<i;l++)e[l]/=a,e[l]*=this.getSegments(),e[l]=Math.floor(e[l]),o-=e[l];for(var d=0;d<o;d++)e[d]>0&&e[d]++;this.allocateSegmentList=e}}getAllocateSegmentCount(e){return null==this.allocateSegmentList&&this.allocateSegments(),this.allocateSegmentList[e]}getSplineParam(e,t){null==this.allocateSegmentList&&this.allocateSegments();var i=this.allocateSegmentList.length;return(e+t/this.allocateSegmentList[e])/i}calculateDeltaAngleCurrentKeyFrame(e,t,i,r){var n=this.allocateSegmentList,a=i.clone().sub(t),s=this.getKeyFrameDirection(e+1),o=a.angleTo(s);if(this.isFrameTimeMode){if(this.frameTimeSegmentList[e].stay>r)return 0}const l=n[e]-r;if(0==l){var d=Math.floor(o/this.rotateSpeed)*this.parts;return n[e]=d,o/d}return o/l}getRotateAxis(e){var t=this.getKeyFrameDirection(e),i=this.getKeyFrameDirection(e+1);return t.clone().cross(i.clone()).normalize()}getRotateAxisCurrentKeyFrame(e,t,i){var r=i.clone().sub(t),n=this.getKeyFrameDirection(e+1);return r.clone().cross(n.clone()).normalize()}calculateDeltaOffsetCurrentKeyFrame(e,t,i,r){var n=this.allocateSegmentList;if(this.isFrameTimeMode){if(this.frameTimeSegmentList[e].stay>r)return new THREE.Vector3}const a=n[e]-r;var s=t,o=this.getKeyFramePositions()[e+1];return 0==a?new THREE.Vector3:o.clone().sub(s).divideScalar(a)}setSplineTension(e){e>=0&&e<=1&&(this.parameters.tension=e,this.modificationId++)}setSegments(e){this.parameters.segments=e,this.modificationId++}getSegments(){return this.parameters.segments}setParameters(e){this.parameters=e,this.modificationId++}getParameters(){return this.parameters}setFps(e){this.fps=e,this.modificationId++}getModificationId(){return this.modificationId}};r.WalkthroughPlayer=class{constructor(e){this.viewer=e,this.walkthrough=null,this.bPause=!1,this.bContinue=!1,this.bStop=!1,this.spline=null,this.reqid=0,this.playBinded=this.play.bind(this),this.recordId=-1,this.keyFrameIdx=0,this.count=-1,this.camera=this.viewer.cameraControl.camera,this.pausePlayCallback=null,this.stopPlayCallback=null,this.timeRecorder={last:0,pause:0,deltaTime:0},this.keyFrameCallback=null}setWalkthrough(e){this.walkthrough=e,this.bPause=!1,this.recordId=-1,this.spline=null,this.keyFrameIdx=0,this.count=-1}updateCamera(e,t){this.camera.position.add(e),this.camera.target.addVectors(this.camera.position,t),this.camera.up.copy(new THREE.Vector3(0,1,0)),this.viewer.cameraControl._changeCallBack()}play(){this.viewer.cameraControl.lockPan=!0,this.reqid=requestAnimationFrame(this.playBinded),0==this.bContinue?(this.bContinue=!0,this.timeRecorder.deltaTime=this.timeRecorder.pause-this.timeRecorder.last):this.timeRecorder.deltaTime=performance.now()-this.timeRecorder.last,this.timeRecorder.last=performance.now();var e=this.walkthrough.getJumpCounts(this.timeRecorder.deltaTime);if(this.recordId!==this.walkthrough.getModificationId()&&(this.walkthrough.allocateSegments(),this.recordId=this.walkthrough.getModificationId()),this.bPause)return this.viewer.cameraControl.lockPan=!1,this.timeRecorder.pause=performance.now(),console.log("Walkthrough pause now,key frame index is "+this.keyFrameIdx),cancelAnimationFrame(this.reqid),this.pausePlayCallback&&this.pausePlayCallback(),this.bPause=!1,void(this.bContinue=!1);var t=this.walkthrough.getKeyFrameCount(),i=this.walkthrough.getAllocateSegmentCount(this.keyFrameIdx);if(0==i)this.keyFrameIdx++,1===this.keyFrameIdx?this.triggerKeyFrameCallback(0):this.triggerKeyFrameCallback(this.keyFrameIdx),this.count=-1;else{if(this.bStop||this.keyFrameIdx==t-1)return this.viewer.cameraControl.lockPan=!1,void this.stop(!0);if(-1==this.count){this.timeStart=performance.now(),this.triggerKeyFrameCallback(this.keyFrameIdx);var r=this.walkthrough.getKeyFramePosition(this.keyFrameIdx),n=this.walkthrough.getKeyFrameTarget(this.keyFrameIdx);this.camera.position.copy(r),this.camera.target.copy(n),this.count=0}else if(this.count<i){this.count+e>i&&(e=i-this.count);var a=this.walkthrough.calculateDeltaOffsetCurrentKeyFrame(this.keyFrameIdx,this.camera.position,this.camera.target.clone(),this.count),s=this.walkthrough.calculateDeltaAngleCurrentKeyFrame(this.keyFrameIdx,this.camera.position,this.camera.target.clone(),this.count),o=this.walkthrough.getRotateAxisCurrentKeyFrame(this.keyFrameIdx,this.camera.position,this.camera.target.clone()),l=new THREE.Vector3;l.subVectors(this.camera.target.clone(),this.camera.position),0==isNaN(o.length())&&l.applyAxisAngle(o,s*e),this.count+e==i?(this.keyFrameIdx++,this.triggerKeyFrameCallback(this.keyFrameIdx),this.count=0):this.count+=e,this.updateCamera(a.clone().multiplyScalar(e),l)}}this.viewer.cameraControl.setCameraChanging(!0),this.viewer.render()}pause(){this.bPause=!0,this.viewer.cameraControl.lockPan=!1}stop(e){e&&(this.viewer.cameraControl.lockPan=!1,this.bStop=!1,this.keyFrameIdx=0,this.count=-1,console.log("Time cost "+(performance.now()-this.timeStart)+"ms."),cancelAnimationFrame(this.reqid),this.stopPlayCallback&&this.stopPlayCallback())}startFrom(e){for(var t=this.walkthrough,i=t.getKeyFrameCount(),r=t.getKeyFrames(),n=0;n<i;n++)if(r[n].id==e)return this.keyFrameIdx=n,void(this.count=-1)}setKeyFrameCallback(e){this.keyFrameCallback=e}triggerKeyFrameCallback(e){this.keyFrameCallback&&this.keyFrameCallback(e)}addPausePlayCallback(e){this.pausePlayCallback=e}addStopPlayCallback(e){this.stopPlayCallback=e}updataSpline(){var e=this.walkthrough.getKeyFramePositions(),t=this.walkthrough.getParameters();this.spline=new THREE.CatmullRomCurve3(e,t.closed,t.curveType,t.tension)}};r.WalkthroughManager=class{constructor(){this.walkthroughList=[]}clear(){this.walkthroughList=[]}add(e){this.walkthroughList.push(e)}remove(e){for(var t=0,i=this.walkthroughList.length;t<i;t++){if(this.walkthroughList[t].getName()==e)return void this.walkthroughList.splice(t,1)}}save(){return JSON.stringify(this.walkthroughList)}load(e){this.clear();for(var t=JSON.parse(e),i=0,n=t.length;i<n;i++){var a=new r.Walkthrough;a.setName(t[i].name),a.setKeyFrameList(t[i].keyFrameList),a.setParameters(t[i].parameters),a.setWalkthroughTime(t[i].walkthroughTime),a.setInterpolateType(t[i].type),a.setFps(t[i].fps),this.add(a)}return this.walkthroughList}},function(){let e=new THREE.Matrix4;r.HeightLimitManager=class{constructor(e){this.viewer=e,this.renderTargetForLimitedColor=new THREE.WebGLRenderTarget(1024,1024,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter}),this.renderTargetForLimitedHeight=new THREE.WebGLRenderTarget(1024,1024,{minFilter:THREE.NearestFilter,magFilter:THREE.NearestFilter}),this.limitAnalyses={},this.limitAnalysesNumber=0,this.orthoCamera=null,this.orthoViewProjMatrix=new THREE.Matrix4,this.isDirty=!1,this.sceneForLimitedRegion=new THREE.Scene;var t=e.getScene().getRawMatrixGlobal();this.meshGroup=new r.ObjectGroup("limitedRegion"),this.meshGroup.matrix.copy(t),this.meshGroup.matrixAutoUpdate=!1,this.meshGroup.updateMatrixWorld(!0),this.sceneForLimitedRegion.add(this.meshGroup),this.modelIds={}}render(e){var t=e.clippingPlanes;if(e.clippingPlanes=[],this.renderer=e,0!=this.limitAnalysesNumber){if(this.isDirty){this._calcOrthoCamera(),this._changeMaterialMode(!0);var i=e.getRenderTarget();e.setRenderTarget(this.renderTargetForLimitedHeight),e.clear(),e.render(this.sceneForLimitedRegion,this.orthoCamera),this._changeMaterialMode(!1),e.setRenderTarget(this.renderTargetForLimitedColor),e.clear(),e.render(this.sceneForLimitedRegion,this.orthoCamera),e.setRenderTarget(i),this._updateMaterial(),this.isDirty=!1}e.clippingPlanes=t}else this.isDirty&&(this._updateMaterial(),this.isDirty=!1)}_changeMaterialMode(e){var t=this.meshGroup.children;if(e)for(var i=0;i<t.length;i++){(r=t[i].children[0].material).uniforms.useHeightLimit.value=!0,r.transparent=!1,r.needsUpdate=!0}else for(i=0;i<t.length;i++){var r;(r=t[i].children[0].material).uniforms.useHeightLimit.value=!1,r.transparent=!1,r.needsUpdate=!0}}_calcOrthoCamera(){var t=new THREE.Vector3(1/0,1/0,1/0),i=new THREE.Vector3(-1/0,-1/0,-1/0);for(var r in this.limitAnalyses)if(this.limitAnalyses[r].areaMesh.visible){var n=this.limitAnalyses[r]._getBox(),a=n.min,s=n.max;t.x=Math.min(a.x,t.x),t.y=Math.min(a.y,t.y),t.z=Math.min(a.z,t.z),i.x=Math.max(s.x,i.x),i.y=Math.max(s.y,i.y),i.z=Math.max(s.z,i.z)}var o=.5*(i.x-t.x),l=.5*(i.z-t.z),d=.5*(i.x+t.x),h=.5*(i.y+t.y),c=.5*(i.z+t.z),u=new THREE.Vector3(d,t.y-1,c),p=new THREE.Vector3(d,h+1,c);this.orthoCamera=new THREE.OrthographicCamera(-o,o,l,-l,-.1,i.y-t.y+2),this.orthoCamera.position.set(u.x,u.y,u.z),this.orthoCamera.lookAt(p),this.orthoCamera.updateMatrixWorld(!0),this.orthoViewProjMatrix=this.orthoCamera.projectionMatrix.clone(),e.copy(this.orthoCamera.matrixWorld).invert(),this.orthoViewProjMatrix.multiply(e)}setSize(e,t){}dispose(){this.clearLimitAnalyses(),null!=this.renderTargetForLimitedColor&&(this.renderTargetForLimitedColor.dispose(),this.renderTargetForLimitedColor=null),null!=this.renderTargetForLimitedHeight&&(this.renderTargetForLimitedHeight.dispose(),this.renderTargetForLimitedHeight=null),null!=this.sceneForLimitedRegion&&(this.sceneForLimitedRegion=null)}clearLimitAnalyses(){for(var e in this.limitAnalyses)delete this.limitAnalyses[e],this.isDirty=!0,this.limitAnalysesNumber--;this._updateModelIds()}addLimitAnalysis(e,t){this.limitAnalyses.hasOwnProperty(e)||(this.limitAnalyses[e]=t,this.isDirty=!0,this.limitAnalysesNumber++,t.areaMesh&&(this._initializePlaneMaterial(t.areaMesh,t._drawingHeight),this.meshGroup.add(t.areaMesh)),this._updateModelIds())}removeLimitAnalysisById(e){if(this.limitAnalyses.hasOwnProperty(e)){let t=this.meshGroup.children;for(let i=0;i<t.length;i++)if(t[i].name==e){this.meshGroup.remove(t[i]);break}delete this.limitAnalyses[e],this._updateModelIds(),this.limitAnalysesNumber--,this.isDirty=!0}}_updateMaterial(){this.viewer.modelManager.modelCollection.traverse((e=>{this.modelIds[e.id]&&(e.updateMaterialsValue("heightColorSampler",this.renderTargetForLimitedColor.texture),e.updateMaterialsValue("heightLimitSampler",this.renderTargetForLimitedHeight.texture),e.updateMaterialsValue("heightLimitOrthoMatrix",this.orthoViewProjMatrix))}))}_initializePlaneMaterial(e,t){var i=e.children[0];null!=i&&(i.material.defines.USE_COLORWITHOUTLIGHT="",i.material.defines.HEIGHT_LIMIT_WRITE="",i.material.heightLimit=t,i.material.refreshUniforms(),i.material.needsUpdate=!0)}_updatePlaneMaterial(e,t){var i=e.children[0];null!=i&&(i.material.heightLimit=t,i.material.uniforms.heightLimit.value=t)}update(e,t){let i=this.limitAnalyses[e];if(t){this._initializePlaneMaterial(i.areaMesh,i._drawingHeight);let t=this.meshGroup.children;for(let r=0;r<t.length;r++)t[r].name==e&&(t[r]=i.areaMesh,i.areaMesh.parent=this.meshGroup);i._updateBox(),this._updateModelIds()}else this._updatePlaneMaterial(i.areaMesh,i._drawingHeight);this.isDirty=!0}_updateModelIds(){let e={};for(let i in this.limitAnalyses){let r=this.limitAnalyses[i];if("global"==r.mode||!r._modelIds){this.viewer.modelManager.modelCollection.traverse((t=>{e[t.id]=!0}));break}for(var t=0;t<r._modelIds.length;t++)e[r._modelIds[t]]=!0}this.viewer.modelManager.modelCollection.traverse((t=>{this.modelIds[t.id]&&!e[t.id]&&(t.updateMaterialsValue("heightColorSampler",null),t.updateMaterialsValue("heightLimitSampler",null))})),this.modelIds=e}}}(),function(){let e=new THREE.Matrix4,t=new THREE.Vector3,i=new THREE.Vector3;class n extends THREE.Group{constructor(e){super();let t=this;t.disPickable=!0,t.autoAnimation=!1,t.view=e.viewer,null!=e.viewer.getViewer()&&(t.viewer=e.viewer.getViewer()),t.level=0,t.boundary=[],t.tileManager=null,t.worldBoxScratch=new THREE.Box3,t.tileBuilder=new r.Tile.PlaneTileBuilder,t.worldMatrixScratch=new THREE.Matrix4,t.inverseWorldMatrixScratch=new THREE.Matrix4,t.worldMatrixRestore=new THREE.Matrix4,t.pointVector3_a=new THREE.Vector3,t.pointVector3_b=new THREE.Vector3,t.pointVector3_c=new THREE.Vector3,t.lineStartScratch=new THREE.Vector2,t.lineEndScratch=new THREE.Vector2,t.worldCutPointData=[],t.worldFillPointData=[],t.worldFlatPointData=[],t.worldCutPlaneData=[],t.worldFillPlaneData=[],t.demTileList=[],t.detailWorldCutPointData=[],t.detailWorldFillPointData=[],t.detailWorldFlatPointData=[],t.totalArea=0,t.cutArea=0,t.fillArea=0,t.cutVolume=0,t.fillVolume=0,t.totalSuperficialArea=0,t.setOpts(e),t._getDemTileManager(),(!t.layerIds&&null!=t.tileManager||t.layerIds)&&t.updateCutFillVolume(),this.renderOrder=r.EnumRenderOrder.WireFrame,t.show()}updateCutFillVolume(){let e=this;e.clearGriddingMesh(),e.pointsBoundary=[],e.worldPointsBoundary=[],e.worldCutPointData=[],e.worldFillPointData=[],e.worldFlatPointData=[],e.demTileList=[],e.newIndexCut=[],e.newIndexFill=[],e.newIndexGround=[],e.newPositionsCut=[],e.newPositionsFill=[],e.newPositionsGround=[],e.cutFillHeight={max:-1/0,min:1/0},e.modelAltitude=0,e.tileManager&&(e.modelAltitude=e.tileManager.modelAltitude*r.Tile.TileMath.unitScale),0==e.viewer.gisMode&&(e.modelAltitude*=-1);for(var t=0;t<e.boundary.length;t++){e.pointsBoundary.push(new THREE.Vector2(e.boundary[t].x,e.boundary[t].z));var i=e.viewer.drawingToWorld(e.boundary[t]);e.worldPointsBoundary.push(i)}e._initBoundingBox(),e._checkTileMeshBox(),e.cutFillHeight.max===-1/0&&e.cutFillHeight.min===1/0||(e._showVisualization(),e._setTotalArea(),e._setVolume(),e._setSuperficialArea())}updateCutFillVolumeData(e){const t=this;t.worldCutPointData=[],t.worldFillPointData=[],t.worldFlatPointData=[],t._collectPointData(e)}_setSuperficialArea(){let e=this;e.totalSuperficialArea=0;for(let t=0;t<e.newIndexCut.length;t+=3){const i=[0,1,2].map((i=>e.newIndexCut[t+i])).map((t=>new THREE.Vector3(e.newPositionsCut[3*t+0],e.newPositionsCut[3*t+1],e.newPositionsCut[3*t+2]))),r=e.computeAreaOfTriangle(i[0],i[1],i[2],!1);e.totalSuperficialArea+=r}for(let t=0;t<e.newIndexFill.length;t+=3){const i=[0,1,2].map((i=>e.newIndexFill[t+i])).map((t=>new THREE.Vector3(e.newPositionsFill[3*t+0],e.newPositionsFill[3*t+1],e.newPositionsFill[3*t+2]))),r=e.computeAreaOfTriangle(i[0],i[1],i[2],!1);e.totalSuperficialArea+=r}for(let t=0;t<e.newIndexGround.length;t+=3){const i=[0,1,2].map((i=>e.newIndexGround[t+i])).map((t=>new THREE.Vector3(e.newPositionsGround[3*t+0],e.newPositionsGround[3*t+1],e.newPositionsGround[3*t+2]))),r=e.computeAreaOfTriangle(i[0],i[1],i[2],!1);e.totalSuperficialArea+=r}if(0==e.totalSuperficialArea&&0==e.totalSuperficialArea&&0==e.totalSuperficialArea){let t=e._calcSpatialArea();e.totalSuperficialArea=t/r.Tile.TileMath.unitScale/r.Tile.TileMath.unitScale}else e.totalSuperficialArea=e.totalSuperficialArea/r.Tile.TileMath.unitScale/r.Tile.TileMath.unitScale}_calcSpatialArea(){var e=this;const r=e.worldPointsBoundary.length;if(r<3)return 0;let n=0,a=new THREE.Triangle;for(let s=2;s<r;s++){let r=a.clone().set(e.worldPointsBoundary[s-1],e.worldPointsBoundary[s],e.worldPointsBoundary[0]),o=r.getArea();if(s>2){let n=a.getNormal(t),l=r.getNormal(i),d=n.angleTo(l);if((Math.abs(d-3.1415)<2e-4||Math.abs(d)<2e-4)&&(a.containsPoint(e.worldPointsBoundary[s])||r.containsPoint(e.worldPointsBoundary[s-2]))){let e=a.getArea();o=Math.abs(o-e)-e}}n+=o,a.copy(r)}return n}_setTotalArea(){let e=this;e.totalArea=0,e.cutArea=0,e.worldCutPlaneData=[],e.fillArea=0,e.worldFillPlaneData=[];for(let t=0;t<e.newIndexCut.length;t+=3){const i=[0,1,2].map((i=>e.newIndexCut[t+i])).map((t=>new THREE.Vector3(e.newPositionsCut[3*t+0],e.newPositionsCut[3*t+1],e.newPositionsCut[3*t+2]))),r=e.computeAreaOfTriangle(i[0],i[1],i[2]);e.worldCutPlaneData.push(r),e.cutArea+=r}for(let t=0;t<e.newIndexFill.length;t+=3){const i=[0,1,2].map((i=>e.newIndexFill[t+i])).map((t=>new THREE.Vector3(e.newPositionsFill[3*t+0],e.newPositionsFill[3*t+1],e.newPositionsFill[3*t+2]))),r=e.computeAreaOfTriangle(i[0],i[1],i[2]);e.worldFillPlaneData.push(r),e.fillArea+=r}let t=0;for(let i=0;i<e.newIndexGround.length;i+=3){const r=[0,1,2].map((t=>e.newIndexGround[i+t])).map((t=>new THREE.Vector3(e.newPositionsGround[3*t+0],e.newPositionsGround[3*t+1],e.newPositionsGround[3*t+2])));t+=e.computeAreaOfTriangle(r[0],r[1],r[2])}e.totalArea=e.cutArea+e.fillArea+t,e.cutArea=e.cutArea/r.Tile.TileMath.unitScale/r.Tile.TileMath.unitScale,e.fillArea=e.fillArea/r.Tile.TileMath.unitScale/r.Tile.TileMath.unitScale,e.totalArea=e.totalArea/r.Tile.TileMath.unitScale/r.Tile.TileMath.unitScale}_setVolume(){let e=this;e.cutVolume=0,e.fillVolume=0;for(let t=0;t<e.newIndexCut.length;t+=3){const i=[0,1,2].map((i=>e.newIndexCut[t+i])).map((t=>new THREE.Vector3(e.newPositionsCut[3*t+0],e.newPositionsCut[3*t+1],e.newPositionsCut[3*t+2]))),r=e.worldCutPlaneData[t/3]*(i[0].z-e._level-e.modelAltitude+i[1].z-e._level-e.modelAltitude+i[2].z-e._level-e.modelAltitude)/3;e.cutVolume+=r}for(var t=0;t<e.newIndexFill.length;t+=3){const r=[0,1,2].map((i=>e.newIndexFill[t+i])).map((t=>new THREE.Vector3(e.newPositionsFill[3*t+0],e.newPositionsFill[3*t+1],e.newPositionsFill[3*t+2])));var i=e.worldFillPlaneData[t/3]*(e._level+e.modelAltitude-r[0].z+e._level+e.modelAltitude-r[1].z+e._level+e.modelAltitude-r[2].z)/3;e.fillVolume+=i}e.cutVolume=e.cutVolume/r.Tile.TileMath.unitScale/r.Tile.TileMath.unitScale/r.Tile.TileMath.unitScale,e.fillVolume=e.fillVolume/r.Tile.TileMath.unitScale/r.Tile.TileMath.unitScale/r.Tile.TileMath.unitScale}_initBoundingBox(){let e=this;e.boundingBox=new THREE.Box3,e.pointsBoundary.forEach((t=>e.boundingBox.expandByPoint(new THREE.Vector3(t.x,0,t.y))))}_checkTileMeshBox(){let e=this;if(e.layerIds){let t=[];for(let i of e.layerIds){const r=e.view.getLayerManager().getLayer(i),n=r.customId||r.modelId,a=r.model.getCloudViewer().getModelManager().getModel(n),s=a._tileset,o=a.viewer.getScene().getInverseMatrixGlobal();s.traverseContentAvailableNode((e=>{e._content._meshes.traverse((e=>{if("MeshEx"!==e.type||!e.visible)return;const i=o.clone().multiply(e.matrixWorld),r=[...e.geometry.attributes.position.array],n=[...e.geometry.index.array];for(let e=0,a=n.length;e<a;e++){const a=r[3*n[e]+0],s=r[3*n[e]+1],o=r[3*n[e]+2],l=new THREE.Vector3(a,s,o);l.applyMatrix4(i),t.push(l)}}))}))}t=t.filter((t=>{let i=!1;const r=e.worldPointsBoundary;for(let e=0,n=r.length-1;e<r.length;n=e++)r[e].y>t.y!=r[n].y>t.y&&t.x<(r[n].x-r[e].x)*(t.y-r[e].y)/(r[n].y-r[e].y)+r[e].x&&(i=!i);return i}));let i={},n=[],a=new THREE.Box3;t.forEach((e=>a.expandByPoint(e)));for(let e=0,r=t.length;e<r;e++){let r=t[e];const n=21*Math.floor(20*r.clone().sub(a.min).x/(a.max.x-a.min.x))+Math.floor(20*r.clone().sub(a.min).y/(a.max.y-a.min.y));!i[n]&&(i[n]=[]),i[n].push(e)}for(let e in i){i[e].sort((()=>.5-Math.random())),i[e].length>5&&(i[e]=i[e].slice(0,5));for(let r=0,a=i[e].length;r<a;r++)n.push(t[i[e][r]])}t=n;for(let i=0,r=e.worldPointsBoundary.length;i<r;i++){const r=e.worldPointsBoundary[i],n=e.worldPointsBoundary[(i+1)%e.worldPointsBoundary.length];for(let i=0;i<1;i+=.05){let a=r.clone().add(n.clone().sub(r).multiplyScalar(i));a.z=void 0;for(let t of e.layerIds){const i=e.view.getLayerManager().getLayer(t),r=i.model,n=i.modelId,s=r.getCloudViewer().getModelManager().getModel(n).rayCastVertical(a);s&&(!a.z||s.z>a.z)&&(a=s)}a.z&&t.push(a)}}t.forEach((t=>{e.cutFillHeight.max=Math.max(e.cutFillHeight.max,t.z),e.cutFillHeight.min=Math.min(e.cutFillHeight.min,t.z)}));let s=t.map((e=>[e.x,e.y])),o=r.Utils.delaunay(s),l=[];t.forEach((e=>{l.push(e.x),l.push(e.y),l.push(e.z)}));for(let t=0,i=o.length;t<i;t+=3){const i=o[t+0],r=o[t+1],n=o[t+2],a=new THREE.Vector3(l[3*i+0],l[3*i+1],l[3*i+2]),s=new THREE.Vector3(l[3*r+0],l[3*r+1],l[3*r+2]),d=new THREE.Vector3(l[3*n+0],l[3*n+1],l[3*n+2]),h=(e.level-a.z)/(s.z-a.z),c=(e.level-s.z)/(d.z-s.z),u=(e.level-d.z)/(a.z-d.z);if(h>0&&h<1&&c>0&&c<1){const e=a.clone().add(s.clone().sub(a).multiplyScalar(h)),r=s.clone().add(d.clone().sub(s).multiplyScalar(c));l=l.concat([e.x,e.y,e.z,r.x,r.y,r.z]);const u=l.length/3-2;o[t+0]=u+0,o[t+2]=u+1,o=o.concat([i,u+0,u+1,i,u+1,n])}else if(h>0&&h<1&&u>0&&u<1){const e=a.clone().add(s.clone().sub(a).multiplyScalar(h)),i=d.clone().add(a.clone().sub(d).multiplyScalar(u));l=l.concat([e.x,e.y,e.z,i.x,i.y,i.z]);const c=l.length/3-2;o[t+1]=c+0,o[t+2]=c+1,o=o.concat([c+0,r,n,c+1,c+0,n])}else if(c>0&&c<1&&u>0&&u<1){const e=s.clone().add(d.clone().sub(s).multiplyScalar(c)),n=d.clone().add(a.clone().sub(d).multiplyScalar(u));l=l.concat([e.x,e.y,e.z,n.x,n.y,n.z]);const h=l.length/3-2;o[t+0]=h+1,o[t+1]=h+0,o=o.concat([i,r,h+1,h+1,r,h+0])}}e.newPositionsCut=l,e.newPositionsFill=l,e.newPositionsGround=l;for(let t=0,i=o.length;t<i;t+=3){const i=[0,1,2].map((e=>o[t+e])),r=i.map((e=>new THREE.Vector3(l[3*e+0],l[3*e+1],l[3*e+2])));let n=!1,a=!1;r.forEach((t=>{n=n||t.z>e.level+.01,a=a||t.z<e.level-.01})),n&&a?e.newIndexGround=e.newIndexGround.concat(i):n?e.newIndexCut=e.newIndexCut.concat(i):e.newIndexFill=e.newIndexFill.concat(i)}}else if(null!=e.tileManager.globeLayer)for(var t=e.tileManager.globeLayer._tileset.getTileMesh(),i=0;i<t.length;i++){if((c=t[i]).content&&c.content.meshes&&c.boundingBox){var n=c.content.meshes;if(n.children.length>0&&n.visible){var a=n.children[0],s=c._tileset._objectGroup.matrix;if(e.worldBoxScratch.copy(c.boundingBox),e.worldBoxScratch.applyMatrix4(s),e.worldBoxScratch.min.y=e.worldBoxScratch.max.y=0,e.boundingBox.intersectsBox(e.worldBoxScratch)){e.worldMatrixScratch.multiplyMatrices(s,a.matrix),e.inverseWorldMatrixScratch.copy(e.worldMatrixScratch).invert(),e.setMyPointsBoundary();const t={geometry:a.geometry,demTile:c,posX:0,posY:0,matrixWorld:s,tileMatrixWorld:e.worldMatrixScratch.clone(),tileMeshMatrix:a.matrix};e.demTileList.push(t),e._createTileGeometry(a.geometry,0,0,e.worldMatrixScratch)}}}}else if(null!=e.tileManager.globalLayer){var o=e.tileManager.globalLayer;for(var l in o)for(var d in o[l])for(var h in o[l][d]){var c;if(o[l][d][h])(c=o[l][d][h]).box&&c.terrainData&&(e.worldBoxScratch.copy(c.box),e.worldBoxScratch.min.y=e.worldBoxScratch.max.y=0,e.boundingBox.intersectsBox(e.worldBoxScratch)&&e._checkTileGeometryTriangular(c))}}}_showVisualization(){var e=this;if(e.showVisualization){null==e.wallWireframeGeometry&&(e.wallWireframeGeometry=new THREE.BufferGeometry),null==e.blGeometry&&(e.blGeometry=new THREE.BufferGeometry),null==e.bpGeometry&&(e.bpGeometry=new THREE.BufferGeometry),null==e.wallGeometry1&&(e.wallGeometry1=new THREE.BufferGeometry),null==e.wallGeometry2&&(e.wallGeometry2=new THREE.BufferGeometry);const u=[],p=[],m=[],f=[],g=[],v=[];let y=[],M=e.worldPointsBoundary.length;for(var t=0;t<M;t++)if(y.push(new THREE.Vector2(e.worldPointsBoundary[t].x,e.worldPointsBoundary[t].y)),p.push(new THREE.Vector3(e.worldPointsBoundary[t].x,e.worldPointsBoundary[t].y,e.cutFillHeight.min),new THREE.Vector3(e.worldPointsBoundary[t].x,e.worldPointsBoundary[t].y,e.cutFillHeight.max)),m.push(e.worldPointsBoundary[t].x,e.worldPointsBoundary[t].y,e.cutFillHeight.min,e.worldPointsBoundary[t].x,e.worldPointsBoundary[t].y,e._level+e.modelAltitude),f.push(e.worldPointsBoundary[t].x,e.worldPointsBoundary[t].y,e.cutFillHeight.max,e.worldPointsBoundary[t].x,e.worldPointsBoundary[t].y,e._level+e.modelAltitude),t<M-1){u.push(new THREE.Vector3(e.worldPointsBoundary[t].x,e.worldPointsBoundary[t].y,e._level+e.modelAltitude),new THREE.Vector3(e.worldPointsBoundary[t+1].x,e.worldPointsBoundary[t+1].y,e._level+e.modelAltitude)),p.push(new THREE.Vector3(e.worldPointsBoundary[t+1].x,e.worldPointsBoundary[t+1].y,e.cutFillHeight.max),new THREE.Vector3(e.worldPointsBoundary[t+1].x,e.worldPointsBoundary[t+1].y,e.cutFillHeight.min),new THREE.Vector3(e.worldPointsBoundary[t].x,e.worldPointsBoundary[t].y,e.cutFillHeight.min));var i=2*t;g.push(i,i+1,i+3,i,i+2,i+3),v.push(i,i+1,i+3,i,i+2,i+3)}else{u.push(new THREE.Vector3(e.worldPointsBoundary[t].x,e.worldPointsBoundary[t].y,e._level+e.modelAltitude),new THREE.Vector3(e.worldPointsBoundary[0].x,e.worldPointsBoundary[0].y,e._level+e.modelAltitude)),p.push(new THREE.Vector3(e.worldPointsBoundary[0].x,e.worldPointsBoundary[0].y,e.cutFillHeight.max),new THREE.Vector3(e.worldPointsBoundary[0].x,e.worldPointsBoundary[0].y,e.cutFillHeight.min),new THREE.Vector3(e.worldPointsBoundary[t].x,e.worldPointsBoundary[t].y,e.cutFillHeight.min));i=2*t;g.push(i,i+1,1,i,0,1),g.push(i,i+1,1,i,0,1)}const E=new THREE.ShapeGeometry(new THREE.Shape(y)),b=E.attributes.position,x=b.count;for(let t=0;t<x;t++){const i=3*t+2;b.array[i]=e._level+e.modelAltitude}if(e.wallWireframeGeometry.setFromPoints(p),e.blGeometry.setFromPoints(u),e.wallGeometry1.setIndex(g),e.wallGeometry1.setAttribute("position",new THREE.Float32BufferAttribute(m,3)),e.wallGeometry2.setIndex(v),e.wallGeometry2.setAttribute("position",new THREE.Float32BufferAttribute(f,3)),e.bpGeometry.setAttribute("position",E.attributes.position),e.bpGeometry.index=E.index,null===e.wallGeometry1.boundingSphere&&e.wallGeometry1.computeBoundingSphere(),null===e.wallGeometry2.boundingSphere&&e.wallGeometry2.computeBoundingSphere(),null===e.wallWireframeGeometry.boundingSphere&&e.wallWireframeGeometry.computeBoundingSphere(),null===e.blGeometry.boundingSphere&&e.blGeometry.computeBoundingSphere(),null===e.bpGeometry.boundingSphere&&e.bpGeometry.computeBoundingSphere(),null==e.wallMesh1){var n=new THREE.MeshBasicMaterial({side:THREE.DoubleSide,depthTest:!0,transparent:!0,depthWrite:!1,wireframe:!1,color:new THREE.Color("#32D3A6"),opacity:.4,blending:THREE.NormalBlending});e.wallMesh1=new THREE.Mesh(e.wallGeometry1,n),e.wallMesh1.renderOrder=r.EnumRenderOrder.Effect,e.add(e.wallMesh1)}if(null==e.wallMesh2){var a=new THREE.MeshBasicMaterial({side:THREE.DoubleSide,depthTest:!0,transparent:!0,depthWrite:!1,wireframe:!1,color:new THREE.Color("#32D3A6"),opacity:.15,blending:THREE.NormalBlending});e.wallMesh2=new THREE.Mesh(e.wallGeometry2,a),e.wallMesh2.renderOrder=r.EnumRenderOrder.Effect,e.add(e.wallMesh2)}if(null==e.wallWireframeMesh){var s=new THREE.LineBasicMaterial({depthTest:!0,transparent:!1,depthWrite:!1,color:new THREE.Color("#00825E")});e.wallWireframeMesh=new THREE.Line(e.wallWireframeGeometry,s),e.wallWireframeMesh.renderOrder=r.EnumRenderOrder.Effect,e.add(e.wallWireframeMesh)}if(null==e.blMesh){var o=new THREE.LineBasicMaterial({depthTest:!0,transparent:!1,depthWrite:!1,color:new THREE.Color("#32D3A6"),linewidth:4,opacity:1});e.blMesh=new THREE.Line(e.blGeometry,o),e.blMesh.renderOrder=r.EnumRenderOrder.Effect,e.add(e.blMesh)}if(null==e.bpMesh&&r.GlobalData.EnableLogarithmicDepthBuffer){var l=new THREE.MeshBasicMaterial({side:THREE.DoubleSide,depthTest:!0,transparent:!0,depthWrite:!1,wireframe:!1,color:new THREE.Color("#32D3A6"),opacity:.4});e.bpMesh=new THREE.Mesh(e.bpGeometry,l),e.bpMesh.renderOrder=r.EnumRenderOrder.Effect,e.add(e.bpMesh)}null==e.cutMaterial&&(e.cutMaterial=new r.CutFillMaterial({color:new THREE.Color("#E82C2C"),opacity:1}));var d=new THREE.BufferGeometry;d.setIndex(new THREE.Uint32BufferAttribute(e.newIndexCut,1)),d.setAttribute("position",new THREE.Float32BufferAttribute(e.newPositionsCut,3)),e.cutMesh=new THREE.Mesh(d,e.cutMaterial),e.add(e.cutMesh),null==e.fillMaterial&&(e.fillMaterial=new r.CutFillMaterial({color:new THREE.Color("#FF9D0B"),opacity:1}));var h=new THREE.BufferGeometry;h.setIndex(new THREE.Uint32BufferAttribute(e.newIndexFill,1)),h.setAttribute("position",new THREE.Float32BufferAttribute(e.newPositionsFill,3)),e.fillMesh=new THREE.Mesh(h,e.fillMaterial),e.add(e.fillMesh),null==e.groundMaterial&&(e.groundMaterial=new r.CutFillMaterial({color:new THREE.Color("#32D3A6"),opacity:1}));var c=new THREE.BufferGeometry;c.setIndex(new THREE.Uint32BufferAttribute(e.newIndexGround,1)),c.setAttribute("position",new THREE.Float32BufferAttribute(e.newPositionsGround,3)),e.groundMesh=new THREE.Mesh(c,e.groundMaterial),e.add(e.groundMesh),e.updateMatrixWorld()}}_requestTerrainData(e,t,i,r){const n=e.getTerrainUrl(t,i,r);return new Promise(((a,s)=>{e.loadArrayBufferImmediately(n,(n=>{a({terrainData:e.getTerrainDataArray(n),x:t,y:i,level:r})}))}))}_requestTerrainDataByTileManager(e,t,i,r){return new Promise(((n,a)=>{e.getTerrainData(t,i,r,(e=>{n({terrainData:e,x:t,y:i,level:r})}))}))}_praseDemPointData(t,i,r,n,a){const s=this,[o,l,d]=s.tileBuilder.getTileGeometryTriangular(s,a,t);s.worldMatrixRestore.makeTranslation(i,r,0),s.worldMatrixRestore.multiplyMatrices(n,s.worldMatrixRestore);const h=s.viewer.getScene().getMatrixGlobal();e.copy(h).invert();for(let t=0;t<l.length;t+=3)s.pointVector3_a.set(l[t],l[t+1],l[t+2]),s.pointVector3_a.applyMatrix4(s.worldMatrixRestore),s.pointVector3_a.applyMatrix4(e),s.worldCutPointData.push(s.pointVector3_a.clone());for(let t=0;t<o.length;t+=3)s.pointVector3_a.set(o[t],o[t+1],o[t+2]),s.pointVector3_a.applyMatrix4(s.worldMatrixRestore),s.pointVector3_a.applyMatrix4(e),s.worldFillPointData.push(s.pointVector3_a.clone());for(let t=0;t<d.length;t+=3)s.pointVector3_a.set(d[t],d[t+1],d[t+2]),s.pointVector3_a.applyMatrix4(s.worldMatrixRestore),s.pointVector3_a.applyMatrix4(e),s.worldFlatPointData.push(s.pointVector3_a.clone())}_cutDemData(e,t,i,r,n,a){const s=t.x,o=t.y,l=1<<14-t.level,d=[];for(let t=s*l;t<(s+1)*l;++t)for(let i=o*l;i<(o+1)*l;++i)d.push(this._requestTerrainData(e,t,i,14));Promise.all(d).then((t=>{t.map((t=>{t.tileTerrain={terrainData:t.terrainData},t.updateTerrainHeight=()=>{};const a=e.getTileGeometry(t),s=a.geometry;this.worldMatrixScratch.multiplyMatrices(n,a.matrix),this.inverseWorldMatrixScratch.copy(this.worldMatrixScratch).invert(),this.setMyPointsBoundary(),this._praseDemPointData(s,i,r,n,this.worldMatrixScratch.clone())})),a&&a()}))}_cutDemData2(e,t,i,n){const a=t.x,s=t.y,o=1<<14-t.zoom,l=[];for(let t=a*o;t<(a+1)*o;++t)for(let i=s*o;i<(s+1)*o;++i)l.push(this._requestTerrainDataByTileManager(e,t,i,14));Promise.all(l).then((t=>{t.map((t=>{const n=e.mercatorPerimeter/Math.pow(2,t.level)*r.Tile.TileMath.unitScale*2;let a=e.createTerrainGeometry(t.level,e.seg,n,t.x,t.y,t.terrainData,!0)[0];const s=e.mercatorPerimeter/Math.pow(2,e.maxZoom)*r.Tile.TileMath.unitScale*2,o=(t.x*Math.pow(2,e.maxZoom-t.level)-e.modelTileX)*s+Math.pow(2,e.maxZoom-t.level)/2*s,l=-(t.y*Math.pow(2,e.maxZoom-t.level)-e.modelTileY)*s-Math.pow(2,e.maxZoom-t.level)/2*s,d=(new THREE.Matrix4).makeTranslation(o,l,0);this.worldMatrixScratch.multiplyMatrices(i,d),this.inverseWorldMatrixScratch.copy(this.worldMatrixScratch).invert(),this.setMyPointsBoundary(),this._praseDemPointData(a,o,l,i,this.worldMatrixScratch.clone())})),n&&n()}))}_collectPointData(e){const t=this;let i=(e,i)=>{if(e<=0){t._setTotalArea(),t._setVolume(),t._setSuperficialArea();const e={level:t.level,totalArea:t.totalArea,cutArea:t.cutArea,cutVolume:t.cutVolume,fillArea:t.fillArea,fillVolume:t.fillVolume};i&&i(e)}},r=t.demTileList.length;if(0!==r)t.demTileList.map((n=>{if(void 0!==t.tileManager.tileProvider){const a=t.tileManager.tileProvider.terrainProvider,{geometry:s,demTile:o,posX:l,posY:d,matrixWorld:h,tileMatrixWorld:c,tileMeshMatrix:u}=n;if(o.level<14)return void this._cutDemData(a,o,l,d,h,(()=>{r--,i(r,e)}));t.worldMatrixScratch.multiplyMatrices(h,u),t.inverseWorldMatrixScratch.copy(t.worldMatrixScratch).invert(),t.setMyPointsBoundary(),this._praseDemPointData(s,l,d,h,c),r--,i(r,e)}else if(void 0!==t.tileManager.globalLayer){const{geometry:a,demTile:s,posX:o,posY:l,matrixWorld:d,tileMatrixWorld:h,tileMeshMatrix:c}=n;if(s.zoom<14)return void this._cutDemData2(t.tileManager,s,d,(()=>{r--,i(r,e)}));t.worldMatrixScratch.multiplyMatrices(d,c),t.inverseWorldMatrixScratch.copy(t.worldMatrixScratch).invert(),t.setMyPointsBoundary(),a.translate(-o,-l,0),this._praseDemPointData(a,o,l,d,h),a.translate(o,l,0),r--,i(r,e)}}));else{const i={level:t.level,totalArea:t.totalArea,cutArea:t.cutArea,cutVolume:t.cutVolume,fillArea:t.fillArea,fillVolume:t.fillVolume};e&&e(i)}}_createTileGeometry(t,i,r,n){var a=this,[s,o,l]=a.tileBuilder.getTileGeometryTriangular(a,a.worldMatrixScratch,t);a.worldMatrixRestore.makeTranslation(i,r,0),a.worldMatrixRestore.multiplyMatrices(n,a.worldMatrixRestore);var d=a.viewer.getScene().getMatrixGlobal();e.copy(d).invert();for(var h=a.newIndexCut.length,c=0;c<o.length;c+=3)a.newIndexCut.push(h+c/3),a.pointVector3_a.set(o[c],o[c+1],o[c+2]),a.pointVector3_a.applyMatrix4(a.worldMatrixRestore),a.pointVector3_a.applyMatrix4(e),a.newPositionsCut.push(a.pointVector3_a.x,a.pointVector3_a.y,a.pointVector3_a.z),a.worldCutPointData.push(a.pointVector3_a.clone()),a.cutFillHeight.max=Math.max(a.pointVector3_a.z,a.cutFillHeight.max),a.cutFillHeight.min=Math.min(a.pointVector3_a.z,a.cutFillHeight.min);var u=a.newIndexFill.length;for(c=0;c<s.length;c+=3)a.newIndexFill.push(u+c/3),a.pointVector3_a.set(s[c],s[c+1],s[c+2]),a.pointVector3_a.applyMatrix4(a.worldMatrixRestore),a.pointVector3_a.applyMatrix4(e),a.newPositionsFill.push(a.pointVector3_a.x,a.pointVector3_a.y,a.pointVector3_a.z),a.worldFillPointData.push(a.pointVector3_a.clone()),a.cutFillHeight.max=Math.max(a.pointVector3_a.z,a.cutFillHeight.max),a.cutFillHeight.min=Math.min(a.pointVector3_a.z,a.cutFillHeight.min);var p=a.newIndexGround.length;for(c=0;c<l.length;c+=3)a.newIndexGround.push(p+c/3),a.pointVector3_a.set(l[c],l[c+1],l[c+2]),a.pointVector3_a.applyMatrix4(a.worldMatrixRestore),a.pointVector3_a.applyMatrix4(e),a.newPositionsGround.push(a.pointVector3_a.x,a.pointVector3_a.y,a.pointVector3_a.z),a.worldFlatPointData.push(a.pointVector3_a.clone()),a.cutFillHeight.max=Math.max(a.pointVector3_a.z,a.cutFillHeight.max),a.cutFillHeight.min=Math.min(a.pointVector3_a.z,a.cutFillHeight.min)}_checkTileGeometryTriangular(e){var t=this;if(e.box&&e.terrainData){var i=e.x,n=e.y,a=e.zoom,s=t.tileManager.mercatorPerimeter/Math.pow(2,t.tileManager.maxZoom)*r.Tile.TileMath.unitScale*2,o=(i*Math.pow(2,t.tileManager.maxZoom-a)-t.tileManager.modelTileX)*s+Math.pow(2,t.tileManager.maxZoom-a)/2*s,l=-(n*Math.pow(2,t.tileManager.maxZoom-a)-t.tileManager.modelTileY)*s-Math.pow(2,t.tileManager.maxZoom-a)/2*s;t.worldMatrixScratch.makeTranslation(o,l,0),t.worldMatrixScratch.multiplyMatrices(t.tileManager.earthMatrix,t.worldMatrixScratch),t.inverseWorldMatrixScratch.copy(t.worldMatrixScratch).invert(),t.setMyPointsBoundary(),e.geometry.translate(-o,-l,0);const d={geometry:e.geometry,demTile:e,posX:o,posY:l,matrixWorld:t.tileManager.earthMatrix,tileMatrixWorld:t.worldMatrixScratch.clone(),tileMeshMatrix:(new THREE.Matrix4).makeTranslation(o,l,0)};t.demTileList.push(d),t._createTileGeometry(e.geometry,o,l,t.tileManager.earthMatrix),e.geometry.translate(o,l,0)}}setMyPointsBoundary(){let e=this;e.myPointsBoundary=[];for(var t=0;t<e.pointsBoundary.length;t++)e.pointVector3_a.set(e.pointsBoundary[t].x,0,e.pointsBoundary[t].y),e.pointVector3_a.applyMatrix4(e.inverseWorldMatrixScratch),e.myPointsBoundary.push(new THREE.Vector2(e.pointVector3_a.x,e.pointVector3_a.y))}getIntersectPos(e,t){var i=this,n=[];i.lineStartScratch.set(e.x,e.y);for(var a=0;a<t.length;a++){i.lineEndScratch.set(t[a].x,t[a].y);var s=r.Utils.linePolygonIntersection2(i.lineStartScratch,i.lineEndScratch,i.myPointsBoundary);null!=s&&n.push(s)}for(a=0;a<n.length;a++){var o=t[a].x-e.x,l=t[a].y-e.y,d=Math.sqrt(o*o+l*l),h=n[a].x-e.x,c=n[a].y-e.y,u=Math.sqrt(h*h+c*c);n[a].z=e.z+u/d*(t[a].z-e.z)}if(n.length>2&&n[0].index!=n[1].index){var p=n[0].index>n[1].index?n[0].index:n[1].index;Math.abs(n[0].index-n[1].index)>1&&(0==n[0].index||0==n[1].index)&&(p=0),n[0].point={x:i.myPointsBoundary[p].x,y:i.myPointsBoundary[p].y,z:(n[0].z+n[1].z)/2}}return n}isInRegionDrawing(e){return r.Utils.pointInPolygon({x:e.x,y:e.z},this.pointsBoundary)}_getDemTileManager(){let e=this;null==e.tileManager&&e.viewer.modelManager.modelCollection.traverse((t=>{t.isDemLayer&&(e.tileManager=t.tileManager)}))}computeAreaOfTriangle(e,t,i,r=!0){var n=this;r?(n.pointVector3_a.set(e.x,e.y,0),n.pointVector3_b.set(t.x,t.y,0),n.pointVector3_c.set(i.x,i.y,0)):(n.pointVector3_a.set(e.x,e.y,e.z),n.pointVector3_b.set(t.x,t.y,t.z),n.pointVector3_c.set(i.x,i.y,i.z));var a=Math.sqrt(n.pointVector3_a.distanceToSquared(n.pointVector3_b)),s=Math.sqrt(n.pointVector3_b.distanceToSquared(n.pointVector3_c)),o=Math.sqrt(n.pointVector3_c.distanceToSquared(n.pointVector3_a)),l=(a+s+o)/2;return Math.sqrt(l*(l-a)*(l-s)*(l-o))}clearGriddingMesh(){var e=this;null!=e.cutMesh&&(e.remove(e.cutMesh),e.cutMesh.geometry.dispose(),e.cutMesh=null),null!=e.fillMesh&&(e.remove(e.fillMesh),e.fillMesh.geometry.dispose(),e.fillMesh=null),null!=e.groundMesh&&(e.remove(e.groundMesh),e.groundMesh.geometry.dispose(),e.groundMesh=null)}removeAllMesh(){var e=this;e.clearGriddingMesh(),null!=e.cutMaterial&&e.cutMaterial.dispose(),null!=e.fillMaterial&&e.fillMaterial.dispose(),null!=e.groundMaterial&&e.groundMaterial.dispose(),null!=e.wallMesh1&&(e.remove(e.wallMesh1),e.wallMesh1.geometry.dispose(),e.wallMesh1.material.dispose(),e.wallMesh1=null),null!=e.wallMesh2&&(e.remove(e.wallMesh2),e.wallMesh2.geometry.dispose(),e.wallMesh2.material.dispose(),e.wallMesh2=null),null!=e.wallWireframeMesh&&(e.remove(e.wallWireframeMesh),e.wallWireframeMesh.geometry.dispose(),e.wallWireframeMesh.material.dispose(),e.wallWireframeMesh=null),null!=e.blMesh&&(e.remove(e.blMesh),e.blMesh.geometry.dispose(),e.blMesh.material.dispose(),e.blMesh=null),null!=e.bpMesh&&(e.remove(e.bpMesh),e.bpMesh.geometry.dispose(),e.bpMesh.material.dispose(),e.bpMesh=null)}destroy(){var e=this;e.removeAllMesh(),e.level=null,e.boundary=null,e.showVisualization=null,e.tileManager=null,e.worldBoxScratch=null,e.tileBuilder=null,e.worldMatrixScratch=null,e.inverseWorldMatrixScratch=null,e.worldMatrixRestore=null,e.pointVector3_a=null,e.pointVector3_b=null,e.pointVector3_c=null,e.lineStartScratch=null,e.lineEndScratch=null}checkHighLowTerrain(e,t,i,r,n,a){var s=this;if(e[2]>s._level&&t[2]>s._level&&i[2]>s._level)n.push(e[0],e[1],e[2]),n.push(t[0],t[1],t[2]),n.push(i[0],i[1],i[2]);else if(e[2]<s._level&&t[2]<s._level&&i[2]<s._level)r.push(e[0],e[1],e[2]),r.push(t[0],t[1],t[2]),r.push(i[0],i[1],i[2]);else if(e[2]==s._level&&t[2]==s._level&&i[2]==s._level)a.push(e[0],e[1],e[2]),a.push(t[0],t[1],t[2]),a.push(i[0],i[1],i[2]);else{var o=[],l=[],d=[];if(e[2]>s._level?o.push(e[0],e[1],e[2]):e[2]<s._level?l.push(e[0],e[1],e[2]):d.push(e[0],e[1],e[2]),t[2]>s._level?o.push(t[0],t[1],t[2]):t[2]<s._level?l.push(t[0],t[1],t[2]):d.push(t[0],t[1],t[2]),i[2]>s._level?o.push(i[0],i[1],i[2]):i[2]<s._level?l.push(i[0],i[1],i[2]):d.push(i[0],i[1],i[2]),0==l.length)n.push(e[0],e[1],e[2]),n.push(t[0],t[1],t[2]),n.push(i[0],i[1],i[2]);else if(0==o.length)r.push(e[0],e[1],e[2]),r.push(t[0],t[1],t[2]),r.push(i[0],i[1],i[2]);else if(3==d.length){var h=s.getGradient(l[2],d[2],o[2]),c=l[0]+h*(o[0]-l[0]),u=l[1]+h*(o[1]-l[1]),p=s._level;r.push(c,u,p),r.push(l[0],l[1],l[2]),r.push(d[0],d[1],d[2]),n.push(c,u,p),n.push(o[0],o[1],o[2]),n.push(d[0],d[1],d[2])}else if(6==l.length){var m=s.getGradient(o[2],s._level,l[2]),f=s.getGradient(o[2],s._level,l[5]),g=o[0]+m*(l[0]-o[0]),v=o[1]+m*(l[1]-o[1]),y=s._level,M=o[0]+f*(l[3]-o[0]),E=o[1]+f*(l[4]-o[1]),b=s._level;n.push(g,v,y),n.push(M,E,b),n.push(o[0],o[1],o[2]),r.push(g,v,y),r.push(M,E,b),r.push(l[0],l[1],l[2]),r.push(M,E,b),r.push(l[0],l[1],l[2]),r.push(l[3],l[4],l[5])}else if(6==o.length){m=s.getGradient(l[2],s._level,o[2]),f=s.getGradient(l[2],s._level,o[5]),g=l[0]+m*(o[0]-l[0]),v=l[1]+m*(o[1]-l[1]),y=s._level,M=l[0]+f*(o[3]-l[0]),E=l[1]+f*(o[4]-l[1]),b=s._level;r.push(g,v,y),r.push(M,E,b),r.push(l[0],l[1],l[2]),n.push(g,v,y),n.push(M,E,b),n.push(o[0],o[1],o[2]),n.push(M,E,b),n.push(o[0],o[1],o[2]),n.push(o[3],o[4],o[5])}else console.log("数据丢失~")}}getGradient(e,t,i){return Math.abs((t-e)/(i-e))}effectOpt(e){var t=this;t.setOpts(e),null!=t.tileManager&&t.updateCutFillVolume()}setVisible(e){var t=this;null!=t.cutMesh&&(t.cutMesh.material.visible=e),null!=t.fillMesh&&(t.fillMesh.material.visible=e),null!=t.groundMesh&&(t.groundMesh.material.visible=e),null!=t.wallMesh1&&(t.wallMesh1.material.visible=e),null!=t.wallMesh2&&(t.wallMesh2.material.visible=e),null!=t.wallWireframeMesh&&(t.wallWireframeMesh.material.visible=e),null!=t.blMesh&&(t.blMesh.material.visible=e),null!=t.bpMesh&&(t.bpMesh.material.visible=e)}hide(){this.setVisible(!1)}show(){this.setVisible(!0)}setOpts(e){let t=this;e&&(t.layerIds=e.layerIds,e.level&&(t.level=e.level),e.boundary&&(t.boundary=e.boundary),e.showVisualization&&(t.showVisualization=e.showVisualization)),t._level=t.level*r.Tile.TileMath.unitScale*r.GlobalData.TerrainScale}getTotalArea(){return this.totalArea}getTotalSuperficialArea(){return this.totalSuperficialArea}getCutArea(){return this.cutArea}getCutVolume(){return this.cutVolume}getFillArea(){return this.fillArea}getFillVolume(){return this.fillVolume}}r.CutFillMeasure=n}(),function(){let e=new THREE.Vector2;r.ScissorViewportManager=class{constructor(e){var t=this;t.embeddedViewFlg=!1,t.viewer=e,t.modelManager=t.viewer.getModelManager(),t.oldSceneMap={},t.mainViewContents=[],t.subViewContents=[],t.subViewRegion={},t.needUpdate=!1,t.tempMaterial=new THREE.ShaderMaterial}dispose(){var e=this;e.embeddedViewFlg=null,e.subViewRegion=null,e.mainViewContents=null,e.subViewContents=null,e.oldSceneMap=null,e.modelManager=null}isEmbeddedView(){return this.embeddedViewFlg}effectOpt(e){this.setOpts(e),this.update()}getTileManager(){var e=this;null==e.tileManager&&e.modelManager.modelCollection.traverse((t=>{t.isDemLayer&&(e.tileManager=t.tileManager)}));return e.tileManager}setOpts(e){var t=this;null!=e.subViewRegion&&(null!=e.subViewRegion.locationX&&(t.subViewRegion.locationX=e.subViewRegion.locationX),null!=e.subViewRegion.locationY&&(t.subViewRegion.locationY=e.subViewRegion.locationY),null!=e.subViewRegion.widthRatio&&(t.subViewRegion.widthRatio=e.subViewRegion.widthRatio),null!=e.subViewRegion.heightRatio&&(t.subViewRegion.heightRatio=e.subViewRegion.heightRatio)),null!=e.mainViewContents&&(t.mainViewContents=e.mainViewContents,t.needUpdate=!0),null!=e.subViewContents&&(t.subViewContents=e.subViewContents,t.needUpdate=!0)}show(){this.embeddedViewFlg=!0,this.update()}hide(){this.embeddedViewFlg=!1,this.recoverVisible(!0)}setViewRegionRender(t,i,r){var n=this;t.setScissorTest(!0),t.getSize(e);var a=e.width,s=e.height,o=n.subViewRegion.locationX,l=n.subViewRegion.locationY;n.recoverVisible(),n.setContentsVisible(n.mainViewContents),this.viewer.getScene().updateCSMParameter(),t.setScissor(0,0,a,s),t.render(i,r);var d=s-l-s*n.subViewRegion.heightRatio;d<0&&(d=0);var h=s*n.subViewRegion.heightRatio;h+d>s-l&&(h=s-l),h<=0&&(h=0);var c=a*n.subViewRegion.widthRatio;c+o>a&&(c=a-o),c<=0&&(c=0),0!=c&&0!=h&&(n.recoverVisible(),n.setContentsVisible(n.subViewContents),this.viewer.getScene().updateCSMParameter(),t.setScissor(o,d,c,h),t.render(i,r)),n.showViewContents(),t.setScissorTest(!1)}showViewContents(){var e=this;if(e.embeddedViewFlg){let t;for(t=0;t<e.mainViewContents.length;t++)null!=e.mainViewContents[t].modelId&&e.modelManager.getModel(e.mainViewContents[t].modelId).setVisible(!0);for(t=0;t<e.subViewContents.length;t++)null!=e.subViewContents[t].modelId&&e.modelManager.getModel(e.subViewContents[t].modelId).setVisible(!0)}}setContentsVisible(e){var t=this;for(let i=0;i<e.length;i++)null==e[i].modelId?e[i].isVisible?t.getTileManager().show(e[i].imageryId):t.getTileManager().hide(e[i].imageryId):t.modelManager.getModel(e[i].modelId).setVisible(e[i].isVisible)}recoverVisible(e=!1){var t=this;for(let i in t.oldSceneMap)t.oldSceneMap[i].isImagery?t.oldSceneMap[i].isVisible?t.getTileManager().show(i):t.getTileManager().hide(i):t.modelManager.getModel(i).setVisible(t.oldSceneMap[i].isVisible),e&&delete t.oldSceneMap[i]}backupVisible(e){var t=this;let i,r,n;var a=t.getTileManager().tileProvider.tileVisible;for(let s=0;s<e.length;s++)null==e[s].modelId?(i=e[s].imageryId,n=!0,r=a[i]):(i=e[s].modelId,r=t.modelManager.getModel(i).visible,n=!1),null==t.oldSceneMap[i]?t.oldSceneMap[i]={isVisible:r,dirty:!1,isImagery:n}:t.oldSceneMap[i].dirty=!1}update(){var e=this;if(e.embeddedViewFlg&&e.needUpdate){for(let t in e.oldSceneMap)e.oldSceneMap[t].dirty=!0;e.backupVisible(e.mainViewContents),e.backupVisible(e.subViewContents);for(let t in e.oldSceneMap)e.oldSceneMap[t].dirty&&(e.modelManager.getModel(t).setVisible(e.oldSceneMap[t].isVisible),delete e.oldSceneMap[t])}}}}(),(()=>{let e=new THREE.Vector3,t=new THREE.Vector3,i=new THREE.Vector3,n=new THREE.Vector3;class a{constructor(e){this.renderWire=void 0,this.currentLevel=void 0,this.orthoCamera=new THREE.OrthographicCamera,this.spacing=1e3,this.lastTime=(new Date).getTime(),this.timeInterval=1e3,this.viewer=e,this.cameraOriginCallBack=this.viewer.cameraControl._changeCallBack,this.currentDrawingStyle=void 0,this.hasFitterState=void 0,this.filterSate=void 0,this.sectionBoxEnable=void 0,this.sectionBoxVisible=null,this.sectionPlaneEnable=void 0,this.sectionPlaneVisible=null,this.externalComponentVisible=void 0,this.externalBodyVisible=null,this.cameraChangedHandle=()=>{const{force:e,bottom:t,maxLevel:i,modelSpacing:r,scale:n,useBorder:a,successCallback:s}=this.handleInputOption;let o=Math.floor((this.viewer.camera.position.y-t)/r);if(o>i&&(o=i),!e&&(o===this.currentLevel||o<0))return;const l=(new Date).getTime();if(!e&&l-this.lastTime<this.timeInterval)return;this.lastTime=l,this.currentLevel=o;const d=r*o+.5;this.createMap(n,d,a,void 0,s),this.handleInputOption.force=!1}}destroy(){this.removeCreateMapEvent(),this.orthoCamera=null,this.spacing=void 0,this.lastTime=null,this.timeInterval=void 0,this.currentDrawingStyle=void 0,this.filterSate=void 0,this.hasFitterState=void 0,this.sectionBoxEnable=void 0,this.sectionBoxState=null,this.externalComponentVisible=void 0,this.externalBodyVisible=null}updateCamera(e,t,i,r,n,a,s,o){this.orthoCamera.left=e,this.orthoCamera.right=t,this.orthoCamera.top=i,this.orthoCamera.bottom=r,this.orthoCamera.near=n,this.orthoCamera.far=a,this.orthoCamera.updateProjectionMatrix(),this.orthoCamera.position.set(s.x,s.y,s.z),this.orthoCamera.up.set(0,0,1),this.orthoCamera.target=o,this.orthoCamera.lookAt(o),this.orthoCamera.updateMatrixWorld(!0)}_beforeCreateMap(e){const t=this.viewer.getScene();t.updateLights(this.orthoCamera,this.viewer);const i=this.viewer.getFilter();this.filterSate=i.saveState(),this.hasFitterState=i._hasVisibleFilter()||i._hasTransparentFilter()||i._hasHiddenFileIdFilter()||i._hasOverrideMaterialFilter(),!0===this.hasFitterState&&(this.viewer.getFilter().clear(),this.viewer.rendererManager.renderer._render(!0)),this.sectionBoxEnable=t.clipPlanes&&t.clipPlanes.isEnabled(),!0===this.sectionBoxEnable&&(this.sectionBoxVisible=t.clipPlanes.visible,t.clipPlanes.enable(!1,!1)),this.sectionPlaneEnable=t.fillClipPlane&&!0===t.fillClipPlane.isEnabled(),!0===this.sectionPlaneEnable&&(this.sectionPlaneVisible=t.fillClipPlane.visible,t.fillClipPlane.enable(!1,!1));const n=this.viewer.modelManager.getModel("ExternalComponent");this.externalComponentVisible=n&&n._getNodeGroup().visible,!0===this.externalComponentVisible&&(n._getNodeGroup().visible=!1);const a=this.viewer.getScene().extrudeBodyManager;this.externalBodyVisible=n&&[a._getNodeGroupVisible(),a._getAlphaTestNodeGroupVisible()],this.externalBodyVisible&&(a._getNodeGroup().visible=!1,a._getAlphaTestNodeGroup().visible=!1),this.currentDrawingStyle=r.GlobalData.DrawingStyle,e&&(this.viewer.setDrawingStyle(r.DrawingStyle.SHADINGWITHLINE),!0!==this.renderWire&&(this.renderWire,this.viewer.rendererManager.renderer._render(!0)))}_endCreateMap(){!0===this.hasFitterState&&this.viewer.getFilter().loadState(this.filterSate);const e=this.viewer.getScene();if(!0===this.sectionBoxEnable&&e.clipPlanes.enable(!0,this.sectionBoxVisible),!0===this.sectionPlaneEnable&&e.fillClipPlane.enable(!0,this.sectionPlaneVisible),!0===this.externalComponentVisible){this.viewer.modelManager.getModel("ExternalComponent")._getNodeGroup().visible=!0}if(this.externalBodyVisible){const t=e.extrudeBodyManager;t._getNodeGroup().visible=this.externalBodyVisible[0],t._getAlphaTestNodeGroup().visible=this.externalBodyVisible[1]}}createMap(i,r,s,o,l){let d=this.viewer.getScene().getBoundingBox();void 0!==o&&(d=o);const h=(d.min.x+d.max.x)/2,c=(d.min.z+d.max.z)/2,u=d.max.y;e.set(h,u,c),t.set(h,u-1,c),d.getSize(n);const p=n.x/2,m=n.z/2;this.updateCamera(-p,p,m,-m,n.y-r,n.y,e,t),this._beforeCreateMap(s);const f=this.viewer.rendererManager.getRenderer(),g=f.autoClear;f.autoClear=!1;const v=f.getRenderTarget(),y=Math.max(parseInt(n.x*i),1),M=Math.max(parseInt(n.z*i),1),E=new THREE.WebGLRenderTarget(y,M);E.texture.flipY=!1,E.texture.encoding=THREE.GammaEncoding,f.setRenderTarget(E),f.clear(),f.render(this.viewer.getScene(),this.orthoCamera),f.autoClear=g,f.setRenderTarget(v);const b=a.exportCanvas(f,E,y,M);this._endCreateMap(),l&&l(b)}createMapByHeight(e){const{maxPixel:t,useBorder:i,height:r,boundingbox:n,successCallback:a}=e,s=this.viewer.getBoundingBox();if(Array.isArray(r)){let e=[],o=t=>{e.push(t)};for(let e=0;e<r.length;e++){const a=r[e],l=n[e],d=this.getScaleByPixel(l,t),h=this.viewer.worldToDrawing({x:0,y:0,z:a}).y+.5-s.min.y;h<s.min.y?console.warn("the height beyond the bottom of the model"):this.createMap(d,h,i,l,o)}a(e)}else{const e=this.getScaleByPixel(s,t),n=this.viewer.worldToDrawing({x:0,y:0,z:r}).y+.5-s.min.y;if(n<s.min.y)return void console.warn("the height beyond the bottom of the model");this.createMap(e,n,i,void 0,a)}}getScaleByPixel(e,t){e.getSize(n);return t/Math.max(n.x,n.z)}addCreateMapEvent(e){const{maxPixel:t,useBorder:a,spacing:s,successCallback:o}=e,l=this.viewer.getBoundingBox(),d=l.min.y,h=l.max.y,c=this.getScaleByPixel(l,t);this.viewer.getBoundingBoxWorld().getSize(i),null!=s&&(this.spacing=s);const u=this.spacing*n.y/i.z,p=Math.floor((h-d)/u)+1;this.handleInputOption={force:!0,bottom:d,maxLevel:p,modelSpacing:u,scale:c,useBorder:a,successCallback:o},this.viewer.registerEventListener(r.EVENTS.ON_CAMERA_CHANGED_AND_RENDERED,this.cameraChangedHandle)}removeCreateMapEvent(){this.viewer.unregisterEventListener(r.EVENTS.ON_CAMERA_CHANGED_AND_RENDERED,this.cameraChangedHandle),document.querySelectorAll(".modelMap").forEach((e=>{document.body.removeChild(e)}))}}a.exportCanvas=(e,t,i,r)=>{const n=document.createElement("canvas");n.width=i,n.height=r;const a=n.getContext("2d"),s=new Uint8Array(4*i*r),o=new Uint8ClampedArray(s.buffer);e.readRenderTargetPixels(t,0,0,i,r,s);let l=new ImageData(o,i,r);for(let e=3;e<4*i*r;e+=4)l.data[e]*=.8;return a.putImageData(l,0,0),n.toDataURL("image/png")},r.MapManager=a})(),(()=>{let e=null,t=new THREE.Vector3,i=new THREE.Vector3;class n{constructor(e){this.viewer=e,this.shadowGroup=e.getScene().getOrCreateObjectGroup(r.ObjectGroupType.CONTACTSHADOW),this.offset=-0,this.blur=3.5,this.darkness=1,this.opacity=1,this.color=new THREE.Color(0,0,0),this.renderTarget=new THREE.WebGLRenderTarget(512,512),this.renderTarget.texture.generateMipmaps=!1,this.renderTargetBlur=new THREE.WebGLRenderTarget(512,512),this.renderTargetBlur.texture.generateMipmaps=!1;const n=this.viewer.getBoundingBox();n.getCenter(t),n.getSize(i);const a=new THREE.PlaneGeometry(1,1).rotateX(Math.PI/2),s=new THREE.MeshBasicMaterial({map:this.renderTarget.texture,opacity:this.opacity,transparent:!0,depthWrite:!1,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:10,side:THREE.DoubleSide});this.plane=new THREE.Mesh(a,s),this.plane.renderOrder=r.EnumRenderOrder.WireFrame,this.plane.name="ContactShadow",this.plane.scale.y=-1,this.shadowGroup.add(this.plane),this.blurPlane=new THREE.Mesh(a),this.blurPlane.visible=!1,this.blurPlane.renderOrder=r.EnumRenderOrder.WireFrame,this.shadowGroup.add(this.blurPlane);const o=new THREE.MeshBasicMaterial({color:new THREE.Color(0,0,0),opacity:0,transparent:!0,depthWrite:!1,side:THREE.DoubleSide});this.fillPlane=new THREE.Mesh(a,o),this.fillPlane.rotateX(Math.PI),this.fillPlane.renderOrder=r.EnumRenderOrder.Component,this.fillPlane.visible=!1,this.shadowGroup.add(this.fillPlane),this.shadowGroup.matrixAutoUpdate=!1,this.planeScale=1.2,this.shadowBox=null,this.updatePlane(this.plane,n,t,i),this.updatePlane(this.blurPlane,n,t,i),this.updatePlane(this.fillPlane,n,t,i),this.shadowCamera=new THREE.OrthographicCamera(-i.x/2*this.planeScale,i.x/2*this.planeScale,i.z/2*this.planeScale,-i.z/2*this.planeScale,0,i.y),this.shadowCamera.position.set(t.x,n.min.y+this.offset,t.z),this.shadowCamera.rotation.x=Math.PI/2,this.cameraHelper=new THREE.CameraHelper(this.shadowCamera),this.cameraHelper.visible=!1,this.shadowGroup.add(this.cameraHelper),this.depthMaterial=new r.CustomMeshDepthMaterial,this.depthMaterial.side=THREE.DoubleSide,this.depthMaterial.depthPacking=THREE.BasicDepthPacking,this.depthMaterial.blending=THREE.NoBlending,this.depthMaterial.userData.darkness={value:this.darkness},this.depthMaterial.userData.color={value:this.color},this.depthMaterial.onBeforeCompile=e=>{e.uniforms.darkness=this.depthMaterial.userData.darkness,e.uniforms.color=this.depthMaterial.userData.color,e.fragmentShader=`\n\t\t\t\t\t\tuniform float darkness;\n uniform vec3 color;\n\t\t\t\t\t\t${e.fragmentShader.replace("gl_FragColor = vec4( vec3( fragZ ), opacity );","gl_FragColor = vec4( fragZ*color, darkness );")}\n\t\t\t\t\t`},this.depthMaterial.depthTest=!1,this.depthMaterial.depthWrite=!1,this.InstancedDepthMaterial=new r.CustomInstancedMeshDepthMaterial,this.InstancedDepthMaterial.side=THREE.DoubleSide,this.InstancedDepthMaterial.depthPacking=THREE.BasicDepthPacking,this.InstancedDepthMaterial.blending=THREE.NoBlending,this.InstancedDepthMaterial.userData.darkness={value:this.darkness},this.InstancedDepthMaterial.userData.color={value:this.color},this.InstancedDepthMaterial.onBeforeCompile=e=>{e.uniforms.darkness=this.depthMaterial.userData.darkness,e.uniforms.color=this.depthMaterial.userData.color,e.fragmentShader=`\n\t\t\t\t\t\tuniform float darkness;\n uniform vec3 color;\n\t\t\t\t\t\t${e.fragmentShader.replace("gl_FragColor = vec4( vec3( fragZ ), opacity );","gl_FragColor = vec4( fragZ*color, darkness );")}\n\t\t\t\t\t`},this.InstancedDepthMaterial.depthTest=!1,this.InstancedDepthMaterial.depthWrite=!1,this.horizontalBlurMaterial=new THREE.ShaderMaterial(r.HorizontalBlurShader),this.horizontalBlurMaterial.depthTest=!1,this.horizontalBlurMaterial.side=THREE.DoubleSide,this.verticalBlurMaterial=new THREE.ShaderMaterial(r.VerticalBlurShader),this.verticalBlurMaterial.depthTest=!1,this.verticalBlurMaterial.side=THREE.DoubleSide,this.shadowGroup.updateMatrixWorld(!0)}destroy(){this.viewer.getScene().removeObjectGroupByName(r.ObjectGroupType.CONTACTSHADOW),this.shadowGroup=null,this.blur=void 0,this.darkness=void 0,this.opacity=void 0,this.color=null,this.renderTarget=null,this.renderTargetBlur=null,this.shadowCamera=null,this.cameraHelper=null,this.plane=null,this.blurPlane=null,this.fillPlane=null,this.depthMaterial=null,this.horizontalBlurMaterial=null,this.verticalBlurMaterial=null}getShadowBoxWorld(){if(this.shadowBox)return this.shadowBox.clone();this.shadowBox=new THREE.Box3,this.shadowBox.copy(this.viewer.getBoundingBox()),this.shadowBox.expandByVector(new THREE.Vector3(i.x*(this.planeScale-1),0,i.z*(this.planeScale-1))),this.shadowBox.min.y+=this.offset;const e=this.viewer.getScene().geometryGroup.matrix.clone();return e.invert(),this.shadowBox.applyMatrix4(e),this.shadowBox.clone()}updatePlane(e,t,i,r){e.position.y=t.min.y+this.offset,e.position.x=i.x,e.position.z=i.z,e.scale.x=r.x*this.planeScale,e.scale.z=r.z*this.planeScale}render(e,t,i){const r=t.background,n=t.clipPlanes&&!0===t.clipPlanes.visible,a=t.fillClipPlane&&!0===t.fillClipPlane.visible,s=t.clipPlanes&&t.clipPlanes.capsWireframe&&!0===t.clipPlanes.capsWireframe.visible,o=e.autoClear;e.autoClear=!1,t.background=null,this.plane.visible=!1,!0===n&&(t.clipPlanes.visible=!1),!0===s&&(t.clipPlanes.capsWireframe.visible=!1),!0===a&&(t.fillClipPlane.visible=!1),t.overrideMaterial=this.depthMaterial,this.viewer.modelManager.adjustVisibility(!0),this.viewer.modelManager.adjustInstanceVisibility(!1);const l=e.getRenderTarget();e.setRenderTarget(this.renderTarget),e.clear(),e.render(t,this.shadowCamera),t.overrideMaterial=this.InstancedDepthMaterial,this.viewer.modelManager.adjustVisibility(!1),this.viewer.modelManager.adjustInstanceVisibility(!0),e.render(t,this.shadowCamera),this.blurShadow(e,this.blur),this.blurShadow(e,.4*this.blur),e.setRenderTarget(l),t.overrideMaterial=null,this.viewer.modelManager.adjustVisibility(!0),e.autoClear=o,t.background=r,!0===n&&(t.clipPlanes.visible=!0),!0===s&&(t.clipPlanes.capsWireframe.visible=!0),!0===a&&(t.fillClipPlane.visible=!0),this.plane.visible=!0}blurShadow(e,t){this.blurPlane.visible=!0,this.blurPlane.material=this.horizontalBlurMaterial,this.blurPlane.material.uniforms.tDiffuse.value=this.renderTarget.texture,this.horizontalBlurMaterial.uniforms.h.value=1*t/256,e.setRenderTarget(this.renderTargetBlur),e.render(this.blurPlane,this.shadowCamera),this.blurPlane.material=this.verticalBlurMaterial,this.blurPlane.material.uniforms.tDiffuse.value=this.renderTargetBlur.texture,this.verticalBlurMaterial.uniforms.v.value=1*t/256,e.setRenderTarget(this.renderTarget),e.render(this.blurPlane,this.shadowCamera),this.blurPlane.visible=!1}getBlur(){return this.blur}setBlur(e){this.blur=e}getDarkness(){return this.darkness}setDarkness(e){this.darkness=e,this.depthMaterial.userData.darkness.value=e}getOpacity(){return this.opacity}setOpacity(e){this.opacity=e,this.plane.material.opacity=e}getColor(){return this.color}setColor(e){this.color=e,this.depthMaterial.userData.color.value=e}setHeight(e){const r=this.viewer.getBoundingBoxWorld();if(e>r.max.z)return void console.warn("Height greater than the scene bounding box");this.height=e,r.min.z=e;const n=this.viewer.getScene().getMatrixGlobal(),a=r.applyMatrix4(n);a.getCenter(t),a.getSize(i);const s=this.viewer.getBoundingBox();this.offset=a.min.y-s.min.y,this.update()}getHeight(){return this.height}update(){const e=this.viewer.getBoundingBox();e.getCenter(t),e.getSize(i),this.updatePlane(this.plane,e,t,i),this.updatePlane(this.blurPlane,e,t,i),this.updatePlane(this.fillPlane,e,t,i),this.shadowGroup.updateMatrixWorld(!0),this.shadowCamera.left=-i.x/2*this.planeScale,this.shadowCamera.right=i.x/2*this.planeScale,this.shadowCamera.top=i.z/2*this.planeScale,this.shadowCamera.bottom=-i.z/2*this.planeScale,this.shadowCamera.near=0,this.shadowCamera.far=i.y-this.offset,this.shadowCamera.updateProjectionMatrix(),this.shadowCamera.position.set(t.x,e.min.y+this.offset,t.z),this.shadowCamera.updateMatrixWorld(!0)}}n.destroyInstance=()=>{e&&e.destroy(),e=null},n.getInstance=()=>e,n.createInstance=t=>(e||(e=new r.ContactShadow(t)),e),r.ContactShadow=n})(),function(){class e extends r.TerrainOperationManager{constructor(e){super(e),this.viewer=e,this.modelId={}}dispose(){super.dispose(),this.modelId=null}setModelId(e){this.modelId=e}getModelIds(){return this.modelId}_updateTerrainForExcavation(){const e={isExcavation:this.terrainExcavationsNumber>0,samplerExcavation:this.renderTargetForExcavation.texture,cullOrthoMatrix:this.orthoViewProjMatrix};this.viewer.modelManager.modelCollection.traverse((t=>{if(this.modelId.toString()===t.id)if(t.isDemLayer){const i=t.tileManager;i&&i.setExcavation(e)}else t.setExcavation(e)})),this.pickingExcavationMaterial.updateExcavation(e),this.pickingExcavationMaterial.updateSide({isExcavation:e&&e.isExcavation})}}r.Hole=e}(),r.HolesManager=class{constructor(e){this.viewer=e,this._maxHoleCount=4,this.holeMap=new Map,this.size={}}dispose(){for(const e of this.holeMap.values())e.dispose();this.holeMap=null,this._maxHoleCount=void 0,this.size=null}addHole(e,t){const{points:i,modelIds:n}=t;n.map((t=>{let n=this.holeMap.get(t);n||(n=new r.Hole(this.viewer),n.setSize(this.size.width,this.size.height),n.setModelId(t),this.holeMap.set(t,n)),n.addExcavationRegion(e,i)})),this.viewer.render()}removeHoleByIds(e){for(const t of this.holeMap.values())t.removeExcavationRegionsById(e)}clearHoles(){for(const e of this.holeMap.values())e.clearExcavationRegions()}hideHoleByIds(e){for(const t of this.holeMap.values())t.hideExcavationRegionsById(e)}showHoleByIds(e){for(const t of this.holeMap.values())t.showExcavationRegionsById(e)}setSize(e,t){this.size={width:e,height:t};for(const i of this.holeMap.values())i.setSize(e,t)}pickExcavation(e){if(0===this.holeMap.size)return!1;for(const t of this.holeMap.values())if(t.pickExcavation(e))return!0;return!1}render(e){this.viewer.modelManager.modelCollection;for(const[t,i]of this.holeMap)i.render(e),0===i.terrainExcavationsNumber&&this.holeMap.delete(t)}},r.SceneStateHelper=function(e){this.selectionSet={},this.selectionMaterial=r.MaterialUtil.createHighlightMaterial(),this.selectionMaterial.colorState=r.EnumShaderColorState.SELECT,this.selectionMaterial.name="selection",this.selectionMaterial.refreshUniforms(),this.hoverId=void 0,this.hoverMaterialDefaultParams={color:14540253,opacity:.9,transparent:!0,side:THREE.DoubleSide},this.hoverMaterial=r.MaterialUtil.createStandardMaterial(this.hoverMaterialDefaultParams),this.hoverMaterial.name="hover",this.modelManager=e,this.blinkComponentIdsMap={},this.blinkComponentIdsDetailMap={},this.blinkMaterialMap={};var t=this;this.filter=e.getFilter(),this.filter.setObserverForSceneState((function(i,r){t.removeSelection(i,r),t.clearBlinkComponentsById(i,r),e.viewer.render()})),this.phongHoverMaterial=new THREE.MeshPhongMaterial(this.hoverMaterialDefaultParams),this.phongSelectionMaterial=new THREE.MeshPhongMaterial(r.GlobalData.SelectionColor)},r.SceneStateHelper.prototype={constructor:r.SceneStateHelper,destroy:function(){this.selectionSet=null,this.blinkComponentIdsMap=null,this.blinkComponentIdsDetailMap=null,this.blinkMaterialMap=null,this.modelManager=null,this.selectionMaterial.destroy(),this.selectionMaterial=null,this.hoverMaterial.destroy(),this.hoverMaterial=null,this.phongHoverMaterial.dispose(),this.phongHoverMaterial=null,this.phongSelectionMaterial.dispose(),this.phongSelectionMaterial=null},_dispatchChangeEvent:function(){var e=this.getSelectionMap();this.modelManager.dispatchEvent({type:r.EVENTS.ON_SELECTION_CHANGED,selectionList:e})},getSelectionMap:function(){var e={};for(var t in this.selectionSet)e[t]=Object.keys(this.selectionSet[t]);return e},clearSelection:function(e,t){var i,n=!1;if(t=r.Utils.defaultValue(t,!0),void 0===e){var a=[];for(var s in this.selectionSet){for(var o in n=!1,i=this.getSelectionSet(s))if(i.hasOwnProperty(o)){n=!0;break}n&&a.push(s)}if(a.length){for(var l=0,d=a.length;l<d;l++)this.selectionSet[a[l]]={},this.modelManager.clearSelection(a[l]);t&&this._dispatchChangeEvent()}}else{for(var o in i=this.getSelectionSet(e))if(i.hasOwnProperty(o)){n=!0;break}n&&(this.selectionSet[e]={},this.modelManager.clearSelection(e),t&&this._dispatchChangeEvent())}},addSelection:function(e,t){if(e&&!(e.length<1)){var i,n=[],a=!1,s=this.modelManager,o=this.filter;if(void 0===t){for(var l={},d=s.getModelIds(),h=[],c=0,u=d.length;c<u;c++){var p=d[c];i=this.getSelectionSet(p),a=!1;for(var m=e.length-1;m>=0;m--){var f=e[m];s.isUserIdExist(f,p)&&(!i[f]&&o.isComponentActive(f,p)&&(i[f]=p,a=!0),l[f]=!0)}a&&h.push(p)}for(m=e.length-1;m>=0;m--){l[f=e[m]]||n.push(f)}if(n.length>0&&s.dispatchEvent({type:r.EVENTS.ON_SELECTION_FAILED,failedId:n}),h.length){for(var g=0,v=h.length;g<v;g++)this.modelManager.applySelection(h[g]);this._dispatchChangeEvent()}}else{i=this.getSelectionSet(t);for(m=e.length-1;m>=0;m--){f=e[m];s.isUserIdExist(f,t)?!i[f]&&o.isComponentActive(f,t)&&(i[f]=t,a=!0):n.push(f)}n.length>0&&s.dispatchEvent({type:r.EVENTS.ON_SELECTION_FAILED,failedId:n}),a&&(this.modelManager.applySelection(t),this._dispatchChangeEvent())}}},setSelection:function(e,t){if(e&&!(e.length<1))if(void 0===t){for(var i in this.selectionSet){let e=Object.keys(this.selectionSet[i]).length>0;delete this.selectionSet[i],e&&this.modelManager.applySelection(i)}this.addSelection(e)}else this.selectionSet[t]={},this.addSelection(e,t)},removeSelection:function(e,t){if(e&&!(e.length<1)){var i=!1;if(void 0===t){var r=[];for(var n in this.selectionSet){var a=this.getSelectionSet(n);i=!1;for(var s=0,o=e.length;s<o;++s){a[l=e[s]]&&(delete a[l],i=!0)}i&&r.push(n)}if(r.length){for(s=0,o=r.length;s<o;s++)this.modelManager.applySelection(r[s]);this._dispatchChangeEvent()}}else{for(a=this.getSelectionSet(t),s=0,o=e.length;s<o;++s){var l;a[l=e[s]]&&(delete a[l],i=!0)}i&&(this.modelManager.applySelection(t),this._dispatchChangeEvent())}}},getSelection:function(e){var t={};if(void 0===e)for(var i in this.selectionSet)for(var r=this.getSelectionSet(i),n=Object.keys(r),a=0,s=n.length;a<s;a++)t[n[a]]=!0;else t=this.getSelectionSet(e);return Object.keys(t)},getSelectionWithModelId:function(e){const t=[];if(void 0===e)for(var i in this.selectionSet){var r=this.getSelectionSet(i);for(const[e,n]of Object.entries(r))i===n&&t.push({modelId:i,selectedId:e})}else selList=this.getSelectionSet(e);return t},hasSelection:function(e){var t,i=!1;if(void 0===e)for(var r in this.selectionSet){for(var n in t=this.getSelectionSet(r))if(t.hasOwnProperty[n]){i=!0;break}if(i)break}else for(var n in t=this.getSelection(e))if(t.hasOwnProperty[n]){i=!0;break}return i},getSelectionSet:function(e){if(void 0===e){var t={};for(var i in this.selectionSet)for(var r=this.getSelectionSet(i),n=Object.keys(r),a=0,s=n.length;a<s;a++)t[n[a]]=!0;return t}return void 0===this.selectionSet[e]&&(this.selectionSet[e]={}),this.selectionSet[e]},isSelected:function(e,t){var i,r=!1;if(void 0===t){for(var n in this.selectionSet)if((i=this.selectionSet[n])&&i[e]){r=!0;break}}else(i=this.selectionSet[t])&&i[e]&&(r=!0);return r},setHoverId:function(e,t){this.hoverId=e,this.modelManager.applyHover(t)},clearHover:function(e){this.hoverId=void 0,this.modelManager.clearHover(e)},getHoverMaterial:function(e){let t=e&&e.isMeshPhongMaterial?this.phongHoverMaterial.clone():this.hoverMaterial.clone();if(e&&e.hasOwnProperty("color")){var i=e.color.clone();t.color.setHex(i.getHex()),void 0!==e.opacity?t.opacity=e.opacity:t.opacity=this.hoverMaterialDefaultParams.opacity,void 0!==e.transparent?t.transparent=e.transparent:t.transparent=this.hoverMaterialDefaultParams.transparent,void 0!==e.side?t.side=e.side:t.side=this.hoverMaterialDefaultParams.side,void 0!==e.metalness&&(t.metalness=e.metalness),void 0!==e.roughness&&(t.roughness=e.roughness),void 0!==e.bumpMap&&(t.bumpMap=e.bumpMap),void 0!==e.alphaMap&&(t.alphaMap=e.alphaMap),void 0!==e.emissiveMap&&(t.emissiveMap=e.emissiveMap),void 0!==e.envMap&&(t.envMap=e.envMap),void 0!==e.envMapIntensity&&(t.envMapIntensity=e.envMapIntensity),void 0!==e.map&&null!==e.map&&(t.map=e.map),!0===e.useCompressedColor&&(t.defines.CCOLOR="",t.useCompressedColor=!0),!0===e.vertexColors&&(t.vertexColors=!0),!0===e.useCompressedNormal&&(t.defines.CNORMAL="",t.useCompressedNormal=!0),r.Utils.isDefined(e.useCompressedUv)&&!0===e.useCompressedUv&&(t.uvCenter=e.uvCenter,t.uvHalfExtent=e.uvHalfExtent,t.defines.USE_COMPRESS_UV="",t.useCompressedUv=!0),t.opacity=r.MaterialUtil.getHoverOpacity(t.opacity),t.transparent=!0,t.needsUpdate=!0}return t},getHoverColorByMaterial:function(e){var t=void 0!==e.opacity?e.opacity:this.hoverMaterialDefaultParams.opacity;if(t=r.MaterialUtil.getHoverOpacity(t),!e.hasOwnProperty("color"))return{rgbaColor:[this.hoverMaterial.color.r,this.hoverMaterial.color.g,this.hoverMaterial.color.b,t],transparent:true};var i=e.color.clone();return{rgbaColor:[i.r,i.g,i.b,t],transparent:true}},setSelectionColor:function(e,t){var i=this.selectionMaterial.color,r=this.selectionMaterial.opacity;t=null==t?r:t,"0x"+i.getHexString()==e&&r==t||(this.selectionMaterial.color.setHex(e),t&&(this.selectionMaterial.opacity=t),this.selectionMaterial.needsUpdate=!0)},getSelectionMaterial:function(){return this.selectionMaterial.clone()},getModelIdByUserId:function(e){var t,{modelId:i,objectId:r}=this.modelManager.filterHelper.distributeId(e);return i?(t=i,e=r):this.modelManager.modelCollection.some((i=>{if(i.isUserIdExist(e))return t=i.id,!0})),t},addBlinkComponentsByDetail:function(e,t,i,n){void 0===this.blinkComponentIdsDetailMap[n]&&(this.blinkComponentIdsDetailMap[n]={},this.blinkComponentIdsDetailMap[n].detail=i,this.blinkComponentIdsDetailMap[n].enable=!0,this.blinkComponentIdsDetailMap[n].materials=[],this.blinkComponentIdsDetailMap[n].models=[]);let a={};a.modelId=t,a.ids=e,this.addBlinkComponentsById(e,t,i),a.isBimtiles=!1;const s=this.modelManager.getModel(t);s instanceof r.BimTilesModel&&(a.isBimtiles=!0,e.map((e=>{s.blinkTimesMap[e]=0})),delete this.blinkComponentIdsDetailMap[n].materials),this.blinkComponentIdsDetailMap[n].models.push(a);let o=[];s.collectBlinkedMaterial(e,o),this.blinkComponentIdsDetailMap[n].materials&&this.blinkComponentIdsDetailMap[n].materials.push(...o)},setBlinkComponentsById:function(e,t,i){if(e&&0!==e.length){for(var r={},n=e.length-1;n>=0;n--){var a=e[n];r[t=t||this.getModelIdByUserId(a)]||(this.blinkComponentIdsMap[t]={},r[t]=!0),this.filter.isComponentActive(a,t)&&(this.blinkComponentIdsMap[t]=this.blinkComponentIdsMap[t]||{},this.blinkComponentIdsMap[t][a]=i||{})}this.modelManager.blinkManager.applyBlink(t)}},addBlinkComponentsById:function(e,t,i){if(e&&e.length){for(var r=!1,n=e.length-1;n>=0;n--){var a=e[n];t=t||this.getModelIdByUserId(a),this.blinkComponentIdsMap[t]&&this.blinkComponentIdsMap[t][a]||!this.filter.isComponentActive(a,t)||(this.blinkComponentIdsMap[t]=this.blinkComponentIdsMap[t]||{},r=!0),this.blinkComponentIdsMap[t]&&(this.blinkComponentIdsMap[t][a]=i||{})}r&&this.modelManager.blinkManager.applyBlink(t)}},clearBlinkComponentsById:function(e,t){if(e&&e.length){for(var i=!1,r=0,n=e.length;r<n;++r){var a=e[r];t=t||this.getModelIdByUserId(a),this.blinkComponentIdsMap[t]&&this.blinkComponentIdsMap[t][a]&&(this.blinkComponentIdsMap[t]=this.blinkComponentIdsMap[t]||{},delete this.blinkComponentIdsMap[t][a],i=!0)}i&&this.modelManager.blinkManager.applyBlink(t)}},clearBlinkComponentsByDetail:function(e){const t=this.blinkComponentIdsDetailMap[e];if(t){for(const e of t.models)this.clearBlinkComponentsById(e.ids,e.modelId);this.modelManager.blinkManager.clearTime(e),delete this.blinkComponentIdsDetailMap[e]}},enableBlinkComponentsByDetail(e,t){if(!this.blinkComponentIdsDetailMap[e])return;this.blinkComponentIdsDetailMap[e].enable=t;const i=this.blinkComponentIdsDetailMap[e].materials;if(i)i.map((e=>{e.resetBlinkUniformValue()}));else{this.blinkComponentIdsDetailMap[e].models}},clearAllBlinkComponents:function(e){var t=!1,i=this.blinkComponentIds;if(r.Utils.isOwnEmptyObject(i),e){var n=this.blinkComponentIdsMap[e];r.Utils.isOwnEmptyObject(n)||(t=!0,this.blinkComponentIdsMap[e]={})}else t=!0,Object.keys(this.blinkComponentIdsMap).forEach((e=>this.blinkComponentIdsMap[e]=[]));t&&this.modelManager.blinkManager.clearBlink(e)},getBlinkComponents:function(e){if(e)return Object.keys(this.blinkComponentIdsMap[e]||{});var t=[];return Object.keys(this.blinkComponentIdsMap).forEach((e=>t=t.concat(this.blinkComponentIdsMap[e]))),t},getBlinkComponentsIdMap:function(e){return this.modelManager.blinkManager.getBlinkEnabled()?e?this.blinkComponentIdsMap[e]||{}:this.blinkComponentIdsMap:null},getBlinkComponentsColor:function(e,t){if(this.blinkComponentIdsMap[e]&&this.blinkComponentIdsMap[e][t]&&this.blinkComponentIdsMap[e][t].color){const i=this.blinkComponentIdsMap[e][t].color;return new THREE.Vector4(i.red/255,i.green/255,i.blue/255,i.alpha)}},getBlinkComponentIdsDetailMap:function(){return this.modelManager.blinkManager.getBlinkEnabled()?this.blinkComponentIdsDetailMap:null},getBlinkMaterial:function(e,t){return this.blinkMaterialMap[t]&&this.blinkMaterialMap[t][e.uuid]||(void 0===this.blinkMaterialMap[t]&&(this.blinkMaterialMap[t]={}),this.blinkMaterialMap[t][e.uuid]=r.MaterialUtil.getBlinkMaterial(e,this.modelManager.blinkManager.getBlinkColor(t))),this.blinkMaterialMap[t][e.uuid]}},r.TimeConstants={SECONDS_PER_MILLISECOND:.001,SECONDS_PER_MINUTE:60,MINUTES_PER_HOUR:60,HOURS_PER_DAY:24,SECONDS_PER_HOUR:3600,MINUTES_PER_DAY:1440,SECONDS_PER_DAY:86400,DAYS_PER_JULIAN_CENTURY:36525,PICOSECOND:1e-9,MODIFIED_JULIAN_DATE_DIFFERENCE:2400000.5},function(){var e;function t(e,t){t=r.JulianDate.addSeconds(e,32.184,t);var i,n=r.JulianDate.totalDays(t)-2451545;return t=r.JulianDate.addSeconds(t,(i=6.239996+.0172019696544*n,.001657*Math.sin(i+.01671*Math.sin(i))),t)}var i=r.Math.RADIANS_PER_DEGREE,n=r.Math.RADIANS_PER_ARCSECOND,a=new THREE.Matrix3;function s(e,t,i,n,s,l,d){if(i<0&&(i=-i,s+=Math.PI),i<0||i>Math.PI)throw new Error("The inclination is out of range. Inclination must be greater than or equal to zero and less than or equal to Pi radians.");var h=e*(1-t),c=n-s,u=s,p=function(e,t){if(t<0||t>=1)throw new Error("eccentricity out of range.");return function(e,t){if(t<0||t>=1)throw new Error("eccentricity out of range.");var i=Math.floor(e/r.Math.TWO_PI);e-=i*r.Math.TWO_PI;var n=Math.cos(e)-t,a=Math.sin(e)*Math.sqrt(1-t*t),s=Math.atan2(a,n);s=r.Math.zeroToTwoPi(s),e<0&&(s-=r.Math.TWO_PI);return s+=i*r.Math.TWO_PI}(function(e,t){if(t<0||t>=1)throw new Error("eccentricity out of range.");var i,n=Math.floor(e/r.Math.TWO_PI),a=(e-=n*r.Math.TWO_PI)+t*Math.sin(e)/(1-Math.sin(e+t)+Math.sin(e)),s=Number.MAX_VALUE;for(i=0;i<50&&Math.abs(s-a)>o;++i){a=(s=a)-(s-t*Math.sin(s)-e)/(1-t*Math.cos(s))}if(i>=50)throw new Error("Kepler equation did not converge");return s=a+n*r.Math.TWO_PI}(e,t),t)}(l-n,t);if("Hyperbolic"===function(e,t){if(e<0)throw new Error("eccentricity cannot be negative.");if(e<=t)return"Circular";if(e<1-t)return"Elliptical";if(e<=1+t)return"Parabolic";return"Hyperbolic"}(t,0)&&Math.abs(r.Math.negativePiToPi(p))>=Math.acos(-1/t))throw new Error("The true anomaly of the hyperbolic orbit lies outside of the bounds of the hyperbola.");!function(e,t,i,n){if(t<0||t>Math.PI)throw new Error("inclination out of range");var a=Math.cos(e),s=Math.sin(e),o=Math.cos(t),l=Math.sin(t),d=Math.cos(i),h=Math.sin(i);r.Utils.defined(n)||(n=new THREE.Matrix3);n.set(d*a-h*s*o,-d*s-h*a*o,h*l,h*a+d*s*o,-h*s+d*a*o,-d*l,s*l,a*l,o)}(c,i,u,a);var m=h*(1+t),f=Math.cos(p),g=Math.sin(p),v=1+t*f;if(v<=r.Math.Epsilon10)throw new Error("elements cannot be converted to cartesian");var y=m/v;return r.Utils.defined(d)?(d.x=y*f,d.y=y*g,d.z=0):d=new THREE.Vector3(y*f,y*g,0),d.applyMatrix3(a)}var o=r.Math.EPSILON8;var l,d=100.46645683*i,h=1295977422.83429*n;var c;function u(a,o){return(o=function(a,o){t(a,l);var d=(l.dayNumber-e.dayNumber+(l.secondsOfDay-e.secondsOfDay)/r.TimeConstants.SECONDS_PER_DAY)/r.TimeConstants.DAYS_PER_JULIAN_CENTURY,h=d*d,c=h*d,u=c*d,p=383397.7725+.004*d,m=.055545526-16e-9*d,f=5.15668983*i,g=-8e-5*d+.02966*h-42e-6*c-13e-8*u,v=83.35324312*i,y=14643420.2669*d-38.2702*h-.045047*c+21301e-8*u,M=125.04455501*i,E=-6967919.3631*d+6.3602*h+.007625*c-3586e-8*u,b=218.31664563*i,x=1732559343.4847*d-6.391*h+.006588*c-3169e-8*u,I=297.85019547*i+n*(1602961601.209*d-6.3706*h+.006593*c-3169e-8*u),T=134.96340251*i+n*(1717915923.2178*d+31.8792*h+.051635*c-2447e-7*u),C=357.52910918*i+n*(129596581.0481*d-.5532*h+136e-6*c-1149e-8*u),w=310.17137918*i-n*(6967051.436*d+6.2068*h+.007618*c-3219e-8*u),S=2*I,A=4*I,B=6*I,R=2*T,D=3*T,O=4*T,L=2*(93.27209062*i+n*(1739527262.8478*d-12.7512*h-.001037*c+417e-8*u));p+=3400.4*Math.cos(S)-635.6*Math.cos(S-T)-235.6*Math.cos(T)+218.1*Math.cos(S-C)+181*Math.cos(S+T),m+=.014216*Math.cos(S-T)+.008551*Math.cos(S-R)-.001383*Math.cos(T)+.001356*Math.cos(S+T)-.001147*Math.cos(A-D)-914e-6*Math.cos(A-R)+869e-6*Math.cos(S-C-T)-627e-6*Math.cos(S)-394e-6*Math.cos(A-O)+282e-6*Math.cos(S-C-R)-279e-6*Math.cos(I-T)-236e-6*Math.cos(R)+231e-6*Math.cos(A)+229e-6*Math.cos(B-O)-201e-6*Math.cos(R-L),g+=486.26*Math.cos(S-L)-40.13*Math.cos(S)+37.51*Math.cos(L)+25.73*Math.cos(R-L)+19.97*Math.cos(S-C-L),y+=-55609*Math.sin(S-T)-34711*Math.sin(S-R)-9792*Math.sin(T)+9385*Math.sin(A-D)+7505*Math.sin(A-R)+5318*Math.sin(S+T)+3484*Math.sin(A-O)-3417*Math.sin(S-C-T)-2530*Math.sin(B-O)-2376*Math.sin(S)-2075*Math.sin(S-D)-1883*Math.sin(R)-1736*Math.sin(B-5*T)+1626*Math.sin(C)-1370*Math.sin(B-D),E+=-5392*Math.sin(S-L)-540*Math.sin(C)-441*Math.sin(S)+423*Math.sin(L)-288*Math.sin(R-L),x+=-3332.9*Math.sin(S)+1197.4*Math.sin(S-T)-662.5*Math.sin(C)+396.3*Math.sin(T)-218*Math.sin(S-C);var P=2*w,N=3*w;g+=46.997*Math.cos(w)*d-.614*Math.cos(S-L+w)*d+.614*Math.cos(S-L-w)*d-.0297*Math.cos(P)*h-.0335*Math.cos(w)*h+.0012*Math.cos(S-L+P)*h-16e-5*Math.cos(w)*c+4e-5*Math.cos(N)*c+4e-5*Math.cos(P)*c;var H=2.116*Math.sin(w)*d-.111*Math.sin(S-L-w)*d-.0015*Math.sin(w)*h;return y+=H,x+=H,E+=-520.77*Math.sin(w)*d+13.66*Math.sin(S-L+w)*d+1.12*Math.sin(S-w)*d-1.06*Math.sin(L-w)*d+.66*Math.sin(P)*h+.371*Math.sin(w)*h-.035*Math.sin(S-L+P)*h-.015*Math.sin(S-L+w)*h+.0014*Math.sin(w)*c-.0011*Math.sin(N)*c-9e-4*Math.sin(P)*c,s(p*=1e3,m,f+g*n,v+y*n,M+E*n,b+x*n,o)}(a,o)).multiplyScalar(-.01215058143522694)}var p=new THREE.Vector3;r.Simon1994PlanetaryPositions=class{constructor(){}static computeSunPositionInEarthInertialFrame(a,o){return r.Utils.defined(a)||(a=r.JulianDate.now()),r.Utils.defined(o)||(o=new THREE.Vector3),c||(c=new THREE.Matrix3).set(1.0000000000000002,5619723173785822e-31,4690511510146299e-34,-5154129427414611e-31,.9174820620691819,-.39777715593191376,-223970096136568e-30,.39777715593191376,.9174820620691819),p=function(a,o){l||(l=new r.JulianDate(0,0,r.TimeStandard.TAI)),t(a,l),e||(e=new r.JulianDate(2451545,0,r.TimeStandard.TAI));var c=(l.dayNumber-e.dayNumber+(l.secondsOfDay-e.secondsOfDay)/r.TimeConstants.SECONDS_PER_DAY)/(10*r.TimeConstants.DAYS_PER_JULIAN_CENTURY),u=.3595362*c,p=149598022260.7121+957426.3679999999*Math.cos(16002*u)+-2243968.05*Math.sin(16002*u)+-2273887.624*Math.cos(21863*u)+-688150.202*Math.sin(21863*u)+927506.794*Math.cos(32004*u)+1017265.516*Math.sin(32004*u)+-119678.29599999999*Math.cos(10931*u)+807828.498*Math.sin(10931*u)+478713.18399999995*Math.cos(14529*u)+209437.01799999998*Math.sin(14529*u)+-613351.267*Math.cos(16368*u)+359034.888*Math.sin(16368*u)+284235.953*Math.cos(15318*u)+-418874.03599999996*Math.sin(15318*u)+-164557.657*Math.cos(32794*u)+329115.314*Math.sin(32794*u),m=d+h*c+-325e-7*Math.cos(10*u)+-105e-7*Math.sin(10*u)+-322e-7*Math.cos(16002*u)+-137e-7*Math.sin(16002*u)+-7899999999999999e-21*Math.cos(21863*u)+258e-7*Math.sin(21863*u)+23199999999999998e-21*Math.cos(10931*u)+35e-7*Math.sin(10931*u)+-5199999999999999e-21*Math.cos(1473*u)+-11599999999999999e-21*Math.sin(1473*u)+97e-7*Math.cos(32004*u)+-88e-7*Math.sin(32004*u)+55e-7*Math.cos(4387*u)+-112e-7*Math.sin(4387*u)+-41e-7*Math.cos(73*u)+-8e-6*Math.sin(73*u);return s(p,.0167086342-.0004203654*c,469.97289*n*c,102.93734808*i+11612.3529*n*c,174.87317577*i-8679.27034*n*c,m,o)}(a,p),o.copy(p),o.negate(),u(a,p),o.sub(p),o.applyMatrix3(c),o}}}(),function(){var e,t={UTC:0,TAI:1};class i{constructor(e,t){this.julianDate=e,this.offset=t}}function n(e,t,i){var n=t/r.TimeConstants.SECONDS_PER_DAY|0;return e+=n,(t-=r.TimeConstants.SECONDS_PER_DAY*n)<0&&(e--,t+=r.TimeConstants.SECONDS_PER_DAY),i.dayNumber=e,i.secondsOfDay=t,i}function a(e,t){return o.compare(e.julianDate,t.julianDate)}function s(t){e||(e=new i),e.julianDate=t;var n=o.leapSeconds,s=r.Utils.binarySearch(n,e,a);s<0&&(s=~s),s>=n.length&&(s=n.length-1);var l=n[s].offset;s>0&&(o.secondsDifference(n[s].julianDate,t)>l&&(l=n[--s].offset));o.addSeconds(t,l,t)}class o{constructor(e,i,a){this.dayNumber=void 0,this.secondsOfDay=void 0,e=r.Utils.defaultValue(e,0),i=r.Utils.defaultValue(i,0),a=r.Utils.defaultValue(a,t.UTC);var o=0|e;n(o,i+=(e-o)*r.TimeConstants.SECONDS_PER_DAY,this),a===t.UTC&&s(this)}static compare(e,t){if(!r.Utils.defined(e))throw new Error("left is required.");if(!r.Utils.defined(t))throw new Error("right is required.");var i=e.dayNumber-t.dayNumber;return 0!==i?i:e.secondsOfDay-t.secondsOfDay}static secondsDifference(e,t){if(!r.Utils.defined(e))throw new Error("left is required.");if(!r.Utils.defined(t))throw new Error("right is required.");return(e.dayNumber-t.dayNumber)*r.TimeConstants.SECONDS_PER_DAY+(e.secondsOfDay-t.secondsOfDay)}static addSeconds(e,t,i){if(!r.Utils.defined(e))throw new Error("julianDate is required.");if(!r.Utils.defined(t))throw new Error("seconds is required.");if(!r.Utils.defined(i))throw new Error("result is required.");return n(e.dayNumber,e.secondsOfDay+t,i)}static fromDate(e,i){if(!(e instanceof Date)||isNaN(e.getTime()))throw new Error("date must be a valid JavaScript Date.");var a=function(e,t,i,n,a,s,o){var l=(t-14)/12|0,d=e+4800+l,h=(1461*d/4|0)+(367*(t-2-12*l)/12|0)-(3*((d+100)/100|0)/4|0)+i-32075;(n-=12)<0&&(n+=24);var c=s+(n*r.TimeConstants.SECONDS_PER_HOUR+a*r.TimeConstants.SECONDS_PER_MINUTE+o*r.TimeConstants.SECONDS_PER_MILLISECOND);return c>=43200&&(h-=1),[h,c]}(e.getUTCFullYear(),e.getUTCMonth()+1,e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds());return r.Utils.defined(i)?(n(a[0],a[1],i),s(i),i):new o(a[0],a[1],t.UTC)}static now(e){return o.fromDate(new Date,e)}static computeTaiMinusUtc(t){e.julianDate=t;var i=o.leapSeconds,n=r.Utils.binarySearch(i,e,a);return n<0&&(n=~n,--n<0&&(n=0)),i[n].offset}static totalDays(e){if(!r.Utils.defined(e))throw new Error("julianDate is required.");return e.dayNumber+e.secondsOfDay/r.TimeConstants.SECONDS_PER_DAY}}o.leapSeconds=[new i(new o(2441317,43210,t.TAI),10),new i(new o(2441499,43211,t.TAI),11),new i(new o(2441683,43212,t.TAI),12),new i(new o(2442048,43213,t.TAI),13),new i(new o(2442413,43214,t.TAI),14),new i(new o(2442778,43215,t.TAI),15),new i(new o(2443144,43216,t.TAI),16),new i(new o(2443509,43217,t.TAI),17),new i(new o(2443874,43218,t.TAI),18),new i(new o(2444239,43219,t.TAI),19),new i(new o(2444786,43220,t.TAI),20),new i(new o(2445151,43221,t.TAI),21),new i(new o(2445516,43222,t.TAI),22),new i(new o(2446247,43223,t.TAI),23),new i(new o(2447161,43224,t.TAI),24),new i(new o(2447892,43225,t.TAI),25),new i(new o(2448257,43226,t.TAI),26),new i(new o(2448804,43227,t.TAI),27),new i(new o(2449169,43228,t.TAI),28),new i(new o(2449534,43229,t.TAI),29),new i(new o(2450083,43230,t.TAI),30),new i(new o(2450630,43231,t.TAI),31),new i(new o(2451179,43232,t.TAI),32),new i(new o(2453736,43233,t.TAI),33),new i(new o(2454832,43234,t.TAI),34),new i(new o(2456109,43235,t.TAI),35),new i(new o(2457204,43236,t.TAI),36),new i(new o(2457754,43237,t.TAI),37)],r.TimeStandard=t,r.LeapSecond=i,r.JulianDate=o}(),(()=>{let e=new THREE.Vector3,t=new THREE.Vector3,i=new THREE.Plane,n=new THREE.Frustum,a=new THREE.Box3,s=new THREE.Box3,o=new THREE.Matrix4,l=new THREE.Matrix4,d=!0;r.Viewer=class{constructor(e={}){this._options=r.Utils.defaultValue(e,{}),this._initEarth=r.Utils.defaultValue(this._options.setupEarth,!1),this._earthResource=this._options.earthResource,this.globalRendering=this._initEarth,this._demOptions=r.Utils.defaultValue(this._options.demOptions,{});this._baseGeoCoordinates=r.Utils.defaultValue(this._options.initialGeoCoordinates,{lon:116.40016,lat:39.91645,height:100}),this._staticResourcesHost=r.Utils.defaultValue(this._options.staticResourcesHost,"../../resources"),this._dampingOpts=r.Utils.defaultValue(this._options.damping,{}),this.domElement=null,this.camera=null,this.gisMode=r.Utils.defaultValue(this._options.gisMode,!1),this.callbacks={},this.tmpBox=new THREE.Box3,this.enableCameraNearFar=!0,this.currentHomeView=r.EnumStandardView.ISO,this.initialView=r.EnumStandardView.ISO,this.modelManager=new r.ModelManager(this),this.editorManager=new r.EditorManager,this.viewshedManager=new r.ViewshedManager(this),this.videoCastManager=new r.VideoCastManager(this),r.GroundPrimitiveManager.createInstance(this),r.GIS.ApproximateTerrainHeights._viewer=this,this.isRecalculationPlanes=!1,this.calculationPlanesBind=this.calculationPlanes.bind(this),this.addRenderFinishedCallback(this.calculationPlanesBind),this.transitionAnimationState=!0,this.animator=new r.CameraAnimator,this.animator.setDuration(1e3),this.IBLManager=new r.IBLManager(this),this.TextureManager=new r.TextureManager(this),this.rendererManager=new r.RendererManager(this),this.terrainOperationManager=new r.TerrainOperationManager(this),this.holesManager=new r.HolesManager(this),this.refleRefraManager=new r.RefleRefraManager(this),this.scissorViewportManager=new r.ScissorViewportManager(this),this.cameraStateWithFrustum=!1,this.filterHelper=this.modelManager.getFilterHelper(),this.ground=null,this.basePointPositionOnLonLat=null,this.virtualEarthComplete=!0,this._setupEarth(!0),this.minimumFPS=4,this.clientSize=new THREE.Vector2,this.webgl2Support=!0,this.showTileType=r.EnumShowTileType.All,this._foveatedConeLimit={priorityEnabled:r.Utils.defaultValue(e.foveatedConePriority,!1),foveatedConeFactor:r.Utils.defined(e.foveatedConeFactor)?r.Math.clamp(e.foveatedConeFactor,0,1):1,foveatedSseRelaxation:r.Utils.defined(e.foveatedSseRelaxation)?e.foveatedSseRelaxation:0,degradedFactor:r.Utils.defined(e.degradedFactor)?r.Math.clamp(e.degradedFactor,0,1):1},r.EnableStorage=this._options.enableStorage,window.indexedDB||window.webkitIndexedDB||window.mozIndexedDB||window.msIndexedDB||(r.EnableStorage=!1)}addCallbacks(e,t){var i=this.callbacks[e];i||(i=[],this.callbacks[e]=i),-1===i.indexOf(t)&&i.push(t)}removeCallbacks(e,t){var i=this.callbacks[e];if(i){var r=i.indexOf(t);-1!==r&&i.splice(r,1)}}removeAllCallbacks(){for(var e in this.callbacks)for(var t=this.callbacks[e],i=0,r=t.length;i<r;i++)t.splice(0,1);for(var e in this.callbacks)delete this.callbacks[e];this.callbacks={}}onCallbacks(e){var t=this.callbacks[e];if(t)for(var i=0;i<t.length;i++)t[i]&&t[i]()}addRenderCallback(e){this.addCallbacks(r.EnumRenderCallbackType.RENDER,e)}removeRenderCallback(e){this.removeCallbacks(r.EnumRenderCallbackType.RENDER,e)}onRenderCallback(){this.onCallbacks(r.EnumRenderCallbackType.RENDER)}addRenderFinishedCallback(e){this.addCallbacks(r.EnumRenderCallbackType.FINISH_RENDER,e)}removeRenderFinishedCallback(e){this.removeCallbacks(r.EnumRenderCallbackType.FINISH_RENDER,e)}onRenderFinishedCallback(){this.onCallbacks(r.EnumRenderCallbackType.FINISH_RENDER)}destroy(){this.removeAllCallbacks(),this.refleRefraManager.dispose(),this.scissorViewportManager.dispose(),this.terrainOperationManager.dispose(),this.holesManager.dispose(),this.heightLimitManager&&this.heightLimitManager.dispose(),this.clipCapsManager&&this.clipCapsManager.dispose(),this.terrainOperationManager=null,this.holesManager=null,this.refleRefraManager=null,this.scissorViewportManager=null,this.renderSettings.canvas=null,this.renderSettings.context=null,this.renderSettings=null,this.rendererManager.destroy(),this.rendererManager=null,this.cameraControl.destroy(),this.cameraControl=null,this.camera=null,this.defaultCamera=null,this.viewshedManager.destroy(),this.viewshedManager=null,this.videoCastManager.destroy(),this.videoCastManager=null,this.filterHelper=null,this.editorManager.destroy(),this.modelManager.destroy(),this.modelManager=null,this.editorManager=null,this.domElement=null,this.callbacks=null,this.tmpBox=null,this.calculationPlanesBind=null,this.animator=null,this.IBLManager=null,this._options=null,this.TextureManager.destroy(),this.TextureManager=null,r.GIS.ApproximateTerrainHeights._viewer=null,r.GroundPrimitiveManager.destroyInstance()}init(e){r.GlobalData.IsMobile=!this.isDesktop();var t,i=this,n={alpha:!0,preserveDrawingBuffer:!0,antialias:!0,maxDrawCacheNum:r.GlobalData.maxDrawCacheNum,stencil:!0,logarithmicDepthBuffer:!1,xrCompatible:!0};r.GlobalData.EnableLogarithmicDepthBuffer&&(n.logarithmicDepthBuffer=!0);try{t=document.createElement("canvas");let e=null,i=r.Utils.getOS();"macOS"!==i&&"ios"!==i||(r.GlobalData.ForcedUseWebgl1=!0);let a=()=>{this.webgl2Support=!1,e=t.getContext("webgl",n)||t.getContext("experimental-webgl",n)};!0===r.GlobalData.ForcedUseWebgl1?a():(e=t.getContext("webgl2",n),r.Utils.isDefined(e)||a()),r.Utils.isDefined(e)||(n.antialias=!1),n.context=e}catch(e){return!1}this.domElement=e,r.GeomUtil.initializeUnitInstances(),n.canvas=t,this.renderSettings=n;var a=e.offsetWidth,s=e.offsetHeight,o={width:a,height:s,fov:45,near:.1,far:20*r.GlobalData.SceneSize};return this.camera=this.defaultCamera=new r.Camera(r.CAMERATYPE.PERSPECTIVE,o),this.cameraControl=new r.CameraControl(this,this.getScene(),this.camera,this.domElement,(function(e){i.render(e)}),this._dampingOpts),r.GroundPrimitiveManager.getInstance().setSize(a,s),this.terrainOperationManager.setSize(a,s),this.holesManager.setSize(a,s),this.setEditorDefault(),this.getScene().lightManager.initCSM(this),this.modelManager.onUpdateViewer=function(){i.render(!0)},this.registerEventListener(r.EVENTS.ON_LOAD_EMPTY_SCENE,(e=>{let t=!0;if(this.modelManager.traverseModels((e=>{!0!==e.isEmptyScene()&&(t=!1)})),!0===t){this.editorManager.userInputEditor.enable=!1}})),this.registerEventListener(r.EVENTS.ON_LOAD_INVALID_SCENE,(e=>{})),this.editorManager.registerDomEventListeners(this.domElement),!0}render(e){var t=this.getRenderer();t&&t.xr&&t.xr.enabled||this.rendererManager.render(e)}renderWithXR(){this.rendererManager.renderer._render()}resize(e,t){this.camera&&(this.camera.setSize(e,t),this.camera.updateProjectionMatrix(),this.getRenderer()&&(this.rendererManager.setSize(e,t),r.GroundPrimitiveManager.getInstance().setSize(e,t),this.terrainOperationManager.setSize(e,t),this.holesManager.setSize(e,e),this.modelManager.updateMaterialsValue("viewportSize",new THREE.Vector2(e,t)),this.clipCapsManager&&this.clipCapsManager.setSize(e,t),this.onCallbacks("resize"),this.render()))}resizeByFrustum(e,t){this.camera&&this.getRenderer()&&(this.camera.updateProjectionMatrixByFrustum=!0,this.camera.setSizeByFrustum(e,t),this.render(),this.camera.updateProjectionMatrixByFrustum=!1)}calculateNearFar(e){if(!this.enableCameraNearFar)return;const t=this.getScene(),i=t.getBoundingBoxWorld();if(!i)return;var n=this.camera,a=this.tmpBox;if(a.copy(i),r.GlobalData.EnableGisMap){var s=t.calculateGisMapBox(n);a.union(s)}var o=this.getCurrentEditor();if(o.name===r.EditorMode.THIRDPERSONWALK&&o.prepared){var l=o.object.box;a.union(l)}if(4==r.GlobalData.LightPreset&&t.lightManager.shadowBox){var d=t.getShadowBoxWorld();a.union(d)}if(null!==r.ContactShadow.getInstance()){const e=r.ContactShadow.getInstance().getShadowBoxWorld();a.union(e)}if(a.applyMatrix4(t.getMatrixGlobal()),e&&e.fillClipPlane&&t.fillClipPlane){const e=t.fillClipPlane.getFillClipPlaneBoundingBox();a.union(e)}const h=this.globalRendering?.1:void 0;n.calculateNearFar(a,h)}resetSelectionColor(e,t){this.modelManager.sceneState.setSelectionColor(e,t)}calculateMinDistance(e,t){function i(e,t){for(var i=0,r=0,n=0;n<3;n++){var a=e.min.getComponent(n),s=e.max.getComponent(n),o=t.min.getComponent(n),l=t.max.getComponent(n),d=0;a>l?d=a-l:s<o&&(d=o-s),i+=d*d;var h=Math.max(l,s)-Math.min(a,o);r+=h*h}return{minDis:Math.sqrt(i),maxDis:Math.sqrt(r)}}var n=new THREE.Vector3,d=new THREE.Vector3,h=new THREE.Vector3;function c(e,t,i,r,a,s){n.fromBufferAttribute(t,i),d.fromBufferAttribute(t,r),h.fromBufferAttribute(t,a),s&&(n.applyMatrix4(s),d.applyMatrix4(s),h.applyMatrix4(s)),e.push(n),e.push(d),e.push(h)}function u(e,t,i){for(var n={start:null,end:null,minDistance:i},a=e.mesh,s=e.indexInfo,d=p(e,o),h=a.geometry,u=h.attributes.position,m=s?s.indexStart:0,f=h.getIndex().array,g=s?s.indexStart+s.indexCount:f.length,v=t.mesh,y=t.indexInfo,M=p(t,l),E=m,b=g;E<b;E+=3){var x=[];c(x,u,f[E],f[E+1],f[E+2],d);var I=r.Utils.minDistanceBetweenTriToMesh(x,v,y,M);I.minDistance<n.minDistance&&(n.minDistance=I.minDistance,n.start=I.start,n.end=I.end)}return n}function p(e,t){return e.unitsMatrix?e.matrix?t.copy(e.matrix).premultiply(e.unitsMatrix):t.copy(e.unitsMatrix):e.matrix?t.copy(e.matrix):void 0}var m=this.modelManager.getMinDistanceObjects(e,t);if(!m)return-1;var f=[],g={start:null,end:null,minDistance:Number.POSITIVE_INFINITY};for(var v in m)f.push(m[v]);if(f[0].length<1||f[1].length<1)return-1;var y=f[0],M=f[1],E=y.length,b=M.length,x=null,I=Number.POSITIVE_INFINITY;if(E>1||b>1){x={};for(var T=0;T<E;T++)for(var C=y[T],w=0;w<b;w++){var S=M[w];a.copy(C.boundingBox),C.unitsMatrix&&a.applyMatrix4(C.unitsMatrix),s.copy(S.boundingBox),S.unitsMatrix&&s.applyMatrix4(C.unitsMatrix);var A=i(a,s);I=I<A.maxDis?I:A.maxDis,x[T+"_"+w]=A}}for(T=0;T<E;T++)for(C=y[T],w=0;w<b;w++){if(x){var B=x[T+"_"+w].minDis;if(B>I||B>g.minDistance)continue}var R=u(C,S=M[w],g.minDistance);if(R.minDistance<g.minDistance&&(g.minDistance=R.minDistance,g.start=R.start,g.end=R.end),0==g.minDistance)return g}return x=null,g}registerDomEventListeners(){this.domElement&&this.editorManager.registerDomEventListeners(this.domElement)}unregisterDomEventListeners(){this.domElement&&this.editorManager.unregisterDomEventListeners(this.domElement)}registerEventListener(e,t){this.modelManager.addEventListener(e,t)}unregisterEventListener(e,t){this.modelManager.removeEventListener(e,t)}load(e){var t=this,i=this.getModelManager();return e.lightmapDatabagId&&(r.GlobalData.InstanceSharedMeshEnabled=!1),i.load(e,(function(){t.rendererManager.setupRenderer(t.renderSettings)}),(function(r){i.updateFilterManager(),i.getFilter().calculateVisibleComponentsBbox(),i.setDrawableModel(!0),i.checkIfFirstModelLoaded(),t.camera.dirty||e.loadConfig&&!1===e.loadConfig.zoomAll?t.render():(t.goToInitialView(),t.zoomAll()),r.materialManager&&r.materialManager.delayUpdateTexturePkgMapping(void 0,(()=>{i.setRenderStateChanged(!0),t.render()}))}))}_setupEarth(e){if(this.globeEarth||!this._initEarth)return void this.modelManager.dispatchEvent({type:r.EVENTS.ON_EARTH_ANIMATION_COMPLETE});this.virtualEarthComplete=!1,e=r.Utils.defaultValue(e,!0);const t={_baseGeoCoordinates:this._baseGeoCoordinates,earthResource:this._earthResource},i=this.globeEarth=new r.VirtualEarth(this,t);i.setupEarth().then((()=>{const t={destination:this._baseGeoCoordinates,globe:i,changeToWorkSpace:!0};this.cameraControl.zoomToHeight(t,i).then((()=>{e&&this.showWorkSpaceScene()}))})).catch((()=>{this.showWorkSpaceScene(),console.log("can not load texture, setup earth failed")}))}unload(e){var t=this;this.getModelManager().unload(e,(function(){t.render()}))}unloadAll(){this.getModelManager().unloadAll(),this.render()}showScene(e,t){var i=this;this.getModelManager().setModelVisibility(e,t,(function(){i.render()}))}showWorkSpaceScene(){this.globalRendering=!1,this.getScene().changeToWorkSpaceScene(),this.globeEarth&&(this.globeEarth.destroy(),this.globeEarth=null,this._initEarth=!1);const e=this.transitionAnimationState;this.transitionAnimationState=!1,this.setStandardView(this.initialView,null,null,(()=>{this.transitionAnimationState=e,this.virtualEarthComplete=!0,this.zoomAll(),this.modelManager.dispatchEvent({type:r.EVENTS.ON_EARTH_ANIMATION_COMPLETE}),this.setRenderStateChanged(!0),this.render()}))}isEarthComplete(){return this.virtualEarthComplete}setModelShellVisible(e,t){this.modelManager.setModelShellVisibility(e,t),this.setRenderStateChanged(!0),this.render()}clearAll(){this.getScene().clearAll()}restore(){this.getFilter().clear(),this.getScene().disableClipPlanes(),this.modelManager.dispatchEvent({type:r.EVENTS.ON_VIEWER_RESTORED})}getScene(){return this.modelManager.scene}getCapsScene(){return this.clipCapsManager&&this.clipCapsManager.capsScene}getEditorManager(){return this.editorManager}getUserdataByUserId(e,t){var i=this.modelManager.getNodeInfosByUserId(e,t);return i&&i instanceof Array?i[0].userData:null}getFilter(){return this.modelManager.getFilter()}getCurrentEditorName(){return this.editorManager.getCurrentEditorName()}getCurrentEditor(){return this.editorManager.getCurrentEditor()}setEditorMode(e){this.editorManager.setEditorMode(this,e)}setEditorDefault(){this.editorManager.setupUserInputEditor(this),this.setEditorMode(r.EditorMode.PICK)}getUserInputEditor(){return this.editorManager.getUserInputEditor()}setZoomSpeed(e){this.getUserInputEditor().setZoomSpeed(e)}getZoomSpeed(){return this.getUserInputEditor().getZoomSpeed()}setPickMode(){console.warn("CLOUD.Viewer.setPickMode() has been deprecated. Use CLOUD.Viewer.setEditorMode(name) instead."),this.setEditorMode(r.EditorMode.PICK)}setRectPickMode(){console.warn("CLOUD.Viewer.setRectPickMode() has been deprecated. Use CLOUD.Viewer.setEditorMode(name) instead."),this.setEditorMode(r.EditorMode.PICK_BY_RECT)}setOrbitMode(){console.warn("CLOUD.Viewer.setOrbitMode() has been deprecated. Use CLOUD.Viewer.setEditorMode(name) instead."),this.setEditorMode(r.EditorMode.ORBIT)}setZoomMode(){console.warn("CLOUD.Viewer.setZoomMode() has been deprecated. Use CLOUD.Viewer.setEditorMode(name) instead."),this.setEditorMode(r.EditorMode.ZOOM)}setRectZoomMode(){console.warn("CLOUD.Viewer.setRectZoomMode() has been deprecated. Use CLOUD.Viewer.setEditorMode(name) instead."),this.setEditorMode(r.EditorMode.ZOOM_BY_RECT)}setPanMode(){console.warn("CLOUD.Viewer.setPanMode() has been deprecated. Use CLOUD.Viewer.setEditorMode(name) instead."),this.setEditorMode(r.EditorMode.PAN)}setFlyMode(){console.warn("CLOUD.Viewer.setFlyMode() has been deprecated. Use CLOUD.Viewer.setEditorMode(name) instead."),this.setEditorMode(r.EditorMode.FLY)}setMeasureMode(){console.warn("CLOUD.Viewer.setMeasureMode() has been deprecated. Use CLOUD.Viewer.setEditorMode(name) instead."),this.setEditorMode(r.EditorMode.MEASURE)}setClipPlanesMode(){console.warn("CLOUD.Viewer.setClipPlanesMode() has been deprecated. Use CLOUD.Viewer.setEditorMode(name) instead."),this.setEditorMode(r.EditorMode.CLIP_BY_BOX)}getBoundingBoxWorld(){return this.getScene().getBoundingBoxWorld()}getBoundingBox(){return this.getScene().getBoundingBox()}zoomIn(e){void 0===e&&(e=.1),e<0&&(e=0),this.cameraControl.zoom(e)}zoomOut(e){void 0===e&&(e=.1),e>0?e*=-1:e=0,this.cameraControl.zoom(e)}zoomAll(e,t){var i=this.getScene().getBoundingBox();r.Utils.isDefined(i)&&this._zoomToLocalBBox(i,e,t)}zoomToBuilding(e,t){this.zoomAll(e,t)}zoomToSelection(e,t,i,r,n=1e3){var a=this.getScene(),s=this.modelManager.sceneState,o=this.getBoundingBoxByIds(s.getSelectionSet(r),r);if(o.isEmpty()&&(o=a.getBoundingBox()),1==this.getTransitionAnimationState()){let t=this.animator.getDuration();this.animator.setDuration(n),this.animator.setStandardView(void 0,this,o,e,void 0,"[object Function]"===Object.prototype.toString.call(i)?i:void 0),this.animator.setDuration(t)}else this._zoomToLocalBBox(o,e,t)}_zoomToLocalBBox(e,t,i,r){this.camera.zoomToBBox(e,t,i,r),this.cameraControl.dirtyCamera(!0),this.render()}zoomToBBox(e,t,i,r,n=1e3){var a=new THREE.Box3;if(e?(a.copy(e),a.applyMatrix4(this.getScene().getMatrixGlobal())):a.copy(this.getScene().getBoundingBox()),1==this.getTransitionAnimationState()){let e=this.animator.getDuration();this.animator.setDuration(n),this.animator.setStandardView(void 0,this,a,t,void 0,"[object Function]"===Object.prototype.toString.call(r)?r:void 0),this.animator.setDuration(e)}else this._zoomToLocalBBox(a,t,i)}zoomToBBoxByDirection(i,r,n,a){if(r){if(r&&i){var s=i.clone(),o=s.getCenter(e).add(r);s.applyMatrix4(this.getScene().getMatrixGlobal()),o.applyMatrix4(this.getScene().getMatrixGlobal());var l=o.sub(s.getCenter(t));l.length()>1e-4?(l.normalize(),viewer.camera.realUp.copy(THREE.Object3D.DefaultUp),this._zoomToLocalBBox(s,n,a,l)):this._zoomToLocalBBox(s,n,a)}}else this.zoomToBBox(i,n,a)}zoomToBBoxWithOuterBox(i,r,n,a){if(r){if(r&&i){var s=i.clone(),o=r.getCenter(e);s.applyMatrix4(this.getScene().getMatrixGlobal()),o.applyMatrix4(this.getScene().getMatrixGlobal());var l=o.sub(s.getCenter(t));l.length()>1e-4?(l.normalize(),this.camera.realUp.copy(THREE.Object3D.DefaultUp),this._zoomToLocalBBox(s,n,a,l)):this._zoomToLocalBBox(s,n,a)}}else this.zoomToBBox(i,n,a)}getObjectsInBox(e){var t=new THREE.Box3;return t.copy(e),t.applyMatrix4(this.getScene().getMatrixGlobal()),r.PickUtil.getObjectsInBox(this.getScene(),t,this.modelManager,this)}setStandardView(e,t,i,n){var a,s=this.camera;if(a=this.getScene().getBoundingBox(),r.Utils.isDefined(a))if(this.transitionAnimationState)this.animator.setStandardView(e,this,a,t,i,n);else{s.setStandardView(e,a);this.camera.zoomToBBox(a,t);this.render(),n&&n()}}getLineSelectRange(){return r.GlobalData.LineSelectRange}setLineSelectRange(e){r.GlobalData.LineSelectRange=e}_setStandardView(e,t){var i=this.camera,r=this.getScene().getBoundingBox();i.setStandardView(e,r),i.zoomToBBox(r,t)}setStandardViewWithBox(e,t,i,r){if(t?t.applyMatrix4(this.getScene().getMatrixGlobal()):t=this.getScene().getBoundingBox(),this.transitionAnimationState)this.animator.setStandardView(e,this,t,i);else{var n=this.camera;n.setStandardView(e,t),n.zoomToBBox(t,i,r),this.render()}}setTopView(e,t,i){this.setStandardViewWithBox(r.EnumStandardView.ISO,e,t,i)}setInitialViewType(e){console.warn("CLOUD.Viewer.setInitialViewType() has been deprecated. Use CLOUD.Viewer.setInitialView() instead."),this.setInitialView(e)}setInitialView(e){this.initialView=e,this._setStandardView(e)}goToInitialView(e){this.setStandardView(this.initialView,e,null)}flyToLngLat(e){const t=r.Utils.defaultValue(e,{});return this.cameraControl.flyToLngLat(t)}setHomeViewType(e){console.warn("CLOUD.Viewer.setHomeViewType() has been deprecated. Use CLOUD.Viewer.setHomeView() instead."),this.setHomeView(e)}setHomeView(e){this.currentHomeView=e,this._setStandardView(e)}getHomeView(){return this.currentHomeView}goToHomeView(e){this.setStandardView(this.currentHomeView,e,null)}rotateByAxis(e,t,i){var r=2*Math.PI/60/60*e;if(t&&"x"!=t){if("y"!=t)return void console.warn("Illegal rotation axis for Viewer.rotateByAxis().");this.cameraControl.handleRotation(0,-r,i)}else this.cameraControl.handleRotation(-r,0,i);this.cameraControl.update(!0)}setImageResPath(e){r.GlobalData.TextureResRoot=e}setLightIntensityFactor(e){r.GlobalData.LightIntensityFactor=e}setLimitFrameTime(e){r.GlobalData.IncrementRender&&(e<=0&&(e=30),r.GlobalData.LimitFrameTime=e)}limitFrameRate(e){r.GlobalData.IncrementRender&&(e<=0&&(e=4),this.minimumFPS=e,r.GlobalData.LimitFrameTime=1e3/e)}transformCamera(e){return r.CameraUtil.transformCamera(e,this.modelManager.scene)}getCamera(){var e=this.getScene().getMatrixGlobal(),t=this.cameraControl.getCamera(),i=this.cameraControl.getCameraName(),n=new r.CameraInfo(i,t.position,t.target,t.realUp||t.up);if(n=r.Camera.drawingToWorld(n,e),this.cameraStateWithFrustum)var a=2*(t.near*Math.tan(.5*THREE.Math.DEG2RAD*t.fov)/t.zoom),s=t.aspect*a;let o=null;return o=t.isPerspective?new r.PerspectiveCameraInfo(n.position,n.target,n.up,t.fov,t.aspect,t.near,t.far,t.zoom,void 0,s,a):new r.OrthographicCameraInfo(n.position,n.target,n.up,t.left,t.right,t.top,t.bottom,t.near,t.far,t.zoom,void 0,s,a),o=r.Camera.nearFarDrawingToWorld(o,e),JSON.stringify(o)}setCameraStateWithFrustum(e){this.cameraStateWithFrustum=e}setCamera(e,t,i,n){this.camera.dirty=!0;var a=this,s=r.CameraUtil.parseCameraInfo(e);if(null===s)console.log("Invalid camera info string. Fail to set camera.");else if(this.switchToCamera(s.name)){var o=this.getScene().getMatrixGlobal(),l=r.Camera.worldToDrawing(s,o);if(l.name=s.name,l.zoom=s.zoom,n){var d=new THREE.Vector3(l.position.x,l.position.y,l.position.z),h=new THREE.Vector3(l.target.x,l.target.y,l.target.z),c=new THREE.Vector3(h.distanceTo(d),0,0),u=h.clone().sub(d).normalize(),p=new THREE.Vector3(l.up.x,l.up.y,l.up.z);p.normalize();var m=new THREE.Vector3(l.zoom,0,0);return this.camera.setZoom(m.x),this.camera.LookAt(h,u,p,c.x),void(i&&i())}if(this.transitionAnimationState){var f={position:this.camera.position.clone(),target:this.camera.target.clone(),up:this.camera.realUp.clone()||this.camera.up.clone(),zoom:this.camera.zoom};this.animator.active(f,l,this,(function(e){a.cameraControl.update(!0,!0)}),(function(){s.frustumWidth&&s.frustumHeight&&a.resizeByFrustum(s.frustumWidth,s.frustumHeight),i&&i()}))}else{"orth"===s.name&&a.camera.setZoom(s.zoom);var g=new THREE.Vector3;g.subVectors(l.target,l.position),this.camera.LookAt(l.target,g,l.up),t&&this.cameraControl.updateCamera(),s.frustumWidth&&s.frustumHeight&&(a.cameraControl.update(!0,!0),a.resizeByFrustum(s.frustumWidth,s.frustumHeight)),i&&i()}}}setCameraMinimumElevation(e){if(null!=e){this.camera.minimumElevation=e,e>0?this.cameraControl.updateMinPitch(0):this.cameraControl.updateMinPitch(-Math.PI/2);let t=JSON.parse(this.getCamera());e>t.position.z&&(t.position.z=e,t=JSON.stringify(t),this.setCamera(t,!0,null,!1))}else this.camera.minimumElevation=null,this.cameraControl.updateMinPitch(-Math.PI/2)}getRenderBufferScreenShot(e,t){var i=this.getRenderer().domElement,r=i.toDataURL("image/png"),n=i.width,a=i.height,s=window.devicePixelRatio||1,o=n/s,l=a/s;if(!o||!l)return t?(t(r),null):r;var d,h,c,u=0,p=0;if(o>l||n/a<o/l?(d=o,p=l/2-(h=a/n*o)/2):(h=l,u=o/2-(d=n/a*l)/2),t)return(c=new Image).onload=function(){var i=document.createElement("canvas"),r=i.getContext("2d");i.width=o,i.height=l,e&&(r.fillStyle=e,r.fillRect(0,0,o,l)),r.drawImage(c,u,p,d,h);var n=i.toDataURL("image/png");t(n)},c.src=r,null;(c=new Image).src=r;var m=document.createElement("canvas"),f=m.getContext("2d");return m.width=o,m.height=l,e&&(f.fillStyle=e,f.fillRect(0,0,o,l)),f.drawImage(c,u,p,d,h),m.toDataURL("image/png")}screenShot(e,t,i){var r=this;var n=function(e,t,i){var n=r.getRenderer().domElement,a=n.toDataURL("image/png"),s=n.width,o=n.height,l=(window.devicePixelRatio,e),d=t;if(!l||!d)return i?(i(a),null):a;var h,c,u=0,p=0;if(l>d||s/o<l/d?(h=l,p=d/2-(c=o/s*l)/2):(c=d,u=l/2-(h=s/o*d)/2),i){var m=new Image;return m.onload=function(){var e=document.createElement("canvas"),t=e.getContext("2d");e.width=l,e.height=d,t.drawImage(m,u,p,h,c);var r=e.toDataURL("image/png");i(r)},m.src=a,null}}(e,t,i);return this.render(),n}canvas2image(e,t){var i,r=this;return t?(this.getRenderBufferScreenShot(e,(function(e){t(e),r.render()})),null):(i=this.getRenderBufferScreenShot(e),this.render(),i)}lockAxisZ(t,i){var r=this.cameraControl;if(r){var n=r.getZenith(),a=this.getBoundingBox().getCenter(e);if(t&&void 0!==i||(i=null),i){const e=i[0],t=i[1];n>t?r.handleRotation(0,t-n,a):n<e&&r.handleRotation(0,e-n,a),this.render()}this.cameraControl.lockAxisZ(t),this.cameraControl.setLockAxisZRange(i)}}isLockedAxisZ(){return this.cameraControl.isLockedAxisZ()}enableTranslucentByDClick(e){r.GlobalData.EnableDemolishByDClick=e}enableHitDetection(e){r.GlobalData.EnableHitDetection=e}rotateCamera(e){this.cameraControl.processRotate(e),this.cameraControl.update()}setRotationCenter(e){this.rotationCenter=new THREE.Vector3(e.x,e.y,e.z)}clearRotationCenter(){this.rotationCenter=void 0}getRotationCenter(){return this.rotationCenter}getActiveCameraInfo(){var e={};e.up=new THREE.Vector3,e.dir=new THREE.Vector3,e.quaternion=new THREE.Quaternion;var t=this.camera;return t.getWorldDirection(e.dir),e.up.copy(t.realUp||t.up),t.getWorldQuaternion(e.quaternion),e}calculationPlanes(){if(this.isRecalculationPlanes){this.isRecalculationPlanes=!1;var i=this.getScene(),n=this.getBoundingBoxByIds();n.isEmpty()&&(n=i.getBoundingBox()),r.ClipPlaneManager.getInstance(i).calculationPlanes(n.getSize(t),n.getCenter(e)),this.render()}}recalculationPlanes(){this.isRecalculationPlanes=!0}setOctantDepth(e){r.GlobalData.OctantDepth=e}resizePool(e){r.GlobalData.maxObjectNumInPool=e,this.modelManager.updateSceneRenderable(),this.render()}setCategoriesToHighPriority(e,t){var i=0==t?"inner":"outer";this.modelManager.setCategoriesToHighPriority(e,i)}clearCategoriesFromHighPriority(e){var t=0==e?"inner":"outer";this.modelManager.clearCategoriesFromHighPriority(t)}clearAllCategoriesFromHighPriority(){this.modelManager.clearAllCategoriesFromHighPriority()}isolate(e,t){this.getFilter().isolate(e,t)}setIsolateMaterial(e){this.getFilter().setIsolateMaterial(e)}resetIsolateMaterial(){this.getFilter().resetIsolateMaterial()}setOrbitButton(e){const t=this.editorManager.userInputEditor;r.Utils.isDefined(t)&&t.switchHandMode(e)}showPickedInformation(e){r.UIHelper.showPickedInformation(e)}setOrbitEnabled(e){r.EditorConfig.NoRotate=!0!==e}getOrbitEnabled(){return!r.EditorConfig.NoRotate}setSelectPadCallback(e){var t=this.editorManager.getCurrentEditor();t&&t.selectPad&&(t.selectPad.callback=e)}setDeviceMobile(e){r.GlobalData.IsMobile=e||!1}setPointRotateMode(e){r.EditorConfig.RotatePivotMode=e}worldToDrawing(e){return this.cameraControl?this.getScene().worldToDrawing(e):(console.log("camera is not initialized!!!"),null)}drawingToWorld(e){return this.cameraControl?this.getScene().drawingToWorld(e):(console.log("camera is not initialized!!!"),null)}worldToCanvas(e){var t=this.cameraControl;if(!t)return console.log("camera is not initialized!!!"),null;var i=t.getContainerDimensions();if(!i)return null;var n=t.getCamera(),a=this.getScene().worldToDrawing(e);return r.CameraUtil.drawingToCanvas(n,a,i.width,i.height)}intersectReferencePlane(){r.CameraUtil.intersectReferencePlane(this.camera,this.getScene())}canvasToWorld(e){var t=this.cameraControl;if(!t)return console.log("camera is not initialized!!!"),null;var i=t.getContainerDimensions();if(!i)return null;var n=t.getCamera(),a=this.getScene(),s=r.CameraUtil.canvasToDrawing(n,e,i.width,i.height),o=a.drawingToWorld(s);return{x:o.x,y:o.y,z:o.z}}worldToClient(e){var t=this.cameraControl;if(!t)return console.log("camera is not initialized!!!"),null;var i=t.getContainerDimensions();if(!i)return null;var n=t.getCamera(),a=this.getScene().worldToDrawing(e),s=r.CameraUtil.drawingToCanvas(n,a,i.width,i.height);return s?(s.x+=i.left,s.y+=i.top,s):null}worldPointsToClient(e,t){var i=this.cameraControl;if(!i)return console.log("camera is not initialized!!!"),null;var n=i.getContainerDimensions();if(!n)return null;var a=i.getCamera(),s=this.getScene(),o=s.worldToDrawing(e),l=s.worldToDrawing(t),d=r.CameraUtil.drawingPointsToCanvas(a,o,l,n.width,n.height);return d?(d.start.x+=n.left,d.start.y+=n.top,d.end.x+=n.left,d.end.y+=n.top,d):null}clientToWorld(e){var t=this.cameraControl;if(!t)return console.log("camera is not initialized!!!"),null;var i=t.getContainerDimensions();if(!i)return null;(s={x:e.x,y:e.y,z:e.z}).x-=i.left,s.y-=i.top;var n=t.getCamera(),a=this.getScene(),s=r.CameraUtil.canvasToDrawing(n,s,i.width,i.height),o=a.drawingToWorld(s);return{x:o.x,y:o.y,z:o.z}}insideCamera(e){var t=this.cameraControl;if(!t)return console.log("camera is not initialized!!!"),!1;var i=this.getScene().worldToDrawing(e);return t.getFrustum().containsPoint(i)}locateToPointWithParallelEye(e){var t=this.cameraControl;if(!t)return console.log("camera is not initialized!!!"),!1;var i=this.getScene().worldToDrawing(e);t.flyToPointWithParallelEye(i)}locateToPoint(e){var t=this.cameraControl;if(!t)return console.log("camera is not initialized!!!"),!1;var i=this.getScene().worldToDrawing(e);t.flyToPoint(i)}enableHover(e){e||(this.modelManager.clearHover(),this.render()),r.GlobalData.Hover=e}enableMouseMovePick(e){r.GlobalData.MouseMovePick=e}getObjectsByClientCoordinates(e){return new r.IntersectHelper(this).getObjectsByClientCoordinates(e)}getIBLManager(){return this.IBLManager}loadEnvMap(e){for(var t=["posx.hdr","negx.hdr","posy.hdr","negy.hdr","posz.hdr","negz.hdr"],i=[],r=0;r<6;++r)i.push("/"+e+"/"+t[r]);var n=this;(new THREE.HDRCubeTextureLoader).load(THREE.FloatType,i,(function(e){n.environmentCubeMap=e,n.modelManager.updateMaterialsValue("envMap",e),n.setRenderStateChanged(!0),n.render()}))}setEnvMapIntensity(e){this.modelManager.updateMaterialsValue("envMapIntensity",e),this.setRenderStateChanged(!0),this.render()}closeEnvMap(){this.modelManager.updateMaterialsValue("envMap",null),this.setRenderStateChanged(!0),this.render()}isSupportSSAO(){return!r.GlobalData.IncrementRender}isSSAOEnabled(){return r.GlobalData.SSAO}enableSSAO(e){return 0!=this.isSupportSSAO()&&(r.GlobalData.SSAO==e||(r.GlobalData.SSAO=e,this.setRenderStateChanged(!0),this.render()),!0)}switchNewStyleMaterial(e){this.modelManager.switchNewStyleMaterial(e),this.setRenderStateChanged(!0),this.render()}enableColorWithoutLight(e){this.modelManager.enableColorWithoutLight(e),this.setRenderStateChanged(!0),this.render()}createGround(e){const t=new r.Ground(e);return this.ground=t,t}removeGround(){this.ground&&(this.ground.remove(),this.ground=null)}addPlane(e,t,i,n){var a=new THREE.Vector3;a.addVectors(new THREE.Vector3(e.x,e.y,e.z),new THREE.Vector3(t.x,t.y,t.z)),a.multiplyScalar(.5);var s=new THREE.PlaneBufferGeometry(t.x-e.x,t.y-e.y),o=new THREE.Mesh(s,new THREE.MeshBasicMaterial({side:THREE.DoubleSide,transparent:!0,depthTest:!0}));o.position.copy(a),o.renderOrder=r.EnumRenderOrder.ClipPlane,this.getScene().getOrCreateObjectGroup(r.ObjectGroupType.CUSTOMPLANE,{globalSpace:!0}).add(o),o.updateMatrixWorld(!0);var l=this,d=new THREE.TextureLoader;return d.setCrossOrigin("anonymous"),d.load(i,(function(e){o.material.map=e,o.material.needsUpdate=!0,l.setRenderStateChanged(!0),n&&n()})),o}removePlane(e){var t=this.getScene().getObjectGroup(r.ObjectGroupType.CUSTOMPLANE);t&&t.remove(e)}clearPlane(){var e=this.getScene().getObjectGroup(r.ObjectGroupType.CUSTOMPLANE);e&&e.clear()}enableTextureMapping(e){r.GlobalData.EnableTextureMapping=e}enableLightmap(e){r.GlobalData.EnableLightmap!=e&&(r.GlobalData.EnableLightmap=e)}setLightmapIntensity(e){r.GlobalData.LightmapIntensity!=e&&(r.GlobalData.LightmapIntensity=e)}setReverseWheelDirection(e){r.EditorConfig.ReverseWheelDirection=!!e}getReverseWheelDirection(){return r.EditorConfig.ReverseWheelDirection}setMovementSpeedRate(e){void 0!==e&&(r.EditorConfig.MovementSpeedRate=e)}getMovementSpeedRate(){return r.EditorConfig.MovementSpeedRate}moveTo(e,t,i){var r=this.editorManager.editor;r&&r.moveTo(e,t,i)}rotateTo(e){var t=this.editorManager.editor;t&&t.rotateTo(e)}enableOcclusionTranslucent(e){r.GlobalData.OcclusionTranslucentEnabled=!!e}setOcclusionOpacity(e){r.GlobalData.OcclusionOpacity=e}setOcclusionDistanceToCamera(e){r.GlobalData.OcclusionDistanceToCamera=e}fitAndRotateBySelection(){this.cameraControl&&this.cameraControl.fitAndRotateBySelection()}setRoamingWalkHeight(e,t,i){if(e instanceof Array){var n=this.cameraControl;if(!n)return console.log("camera is not initialized!!!"),!1;if(t<=0&&(t=1750),void 0===i&&(i=!0),n.setCameraHeight(e,t),i){var a=this.editorManager.getCurrentEditor();a&&a.name===r.EditorMode.WALK&&a.update&&n.flyOnWorld()}}else console.log("elevations is not arry")}setRoamingWalkAbsoluteHeight(e,t){var i=this.cameraControl;if(!i)return console.log("camera is not initialized!!!"),!1;if(void 0===t&&(t=!0),i.setCameraAbsoluteHeight(e),t){var n=this.editorManager.getCurrentEditor();n&&n.name===r.EditorMode.WALK&&n.update&&i.flyOnWorld()}}cameraToWorld(e){return this.camera?r.Camera.drawingToWorld(e,this.getScene().getMatrixGlobal()):null}cameraToDrawing(e){return this.camera?r.Camera.worldToDrawing(e,this.getScene().getMatrixGlobal()):null}clearSelection(e){this.modelManager.sceneState.clearSelection(e)}addToSelection(e,t){this.filterHelper.executeIds(e,((e,t)=>{this.modelManager.sceneState.addSelection(t,e.id)}),t)}removeFromSelection(e,t){this.filterHelper.executeIds(e,((e,t)=>{this.modelManager.sceneState.removeSelection(t,e.id)}),t)}setSelection(e,t){this.filterHelper.executeIds(e,((e,t)=>{this.modelManager.sceneState.setSelection(t,e.id)}),t)}getSelection(e){return this.modelManager.sceneState.getSelection(e,e)}getSelectionWithModelId(e){return this.modelManager.sceneState.getSelectionWithModelId(e)}setSelectionColor(e){this.modelManager.sceneState.setSelectionColor(e)}pickByPoint(e,t){var i=this.cameraControl;if(!1===i.enabled)return!1;var r,n=new THREE.Vector2(e.x,e.y),a=i.getIntersectContext(n);r=t?i.intersector.pickGlobe(a):i.intersector.pick(a);var s=this.getScene();if(r){s.intersectToWorld(r,this);var o={};return o.faceIndex=r.faceIndex,o.meshId=r.userId,o.worldPosition=r.worldPosition,o.worldBoundingBox=r.worldBoundingBox,o}return null}pickByPointWithNormal(e){var t=this.getScene(),i=this.cameraControl;if(!1===i.enabled)return null;var r=new THREE.Vector2(e.x,e.y),n=i.getIntersectContext(r),a=i.intersector.pick(n);if(!a)return null;t.intersectToWorld(a,this),a.cx=r.x,a.cy=r.y;var s=[];s.push(a);var o=t.getMatrixGlobal(),l=a.face.normal.clone(),d=a.worldPosition.clone(),h=new THREE.Ray(d,l);h.applyMatrix4(o);var c=i.intersector.getIntersectByRay(n,h);return c&&(t.intersectToWorld(c,this),s.push(c)),s}toDefaultOrthographicCamera(e){this.switchToCamera("orth"),(e||void 0===e)&&this.render()}toDefaultPerspectiveCamera(e){this.switchToCamera("persp"),(e||void 0===e)&&this.render()}getCameraNameList(){return["pesp","orth"].concat(this.modelManager.getCameraNameList())}switchToCamera(e){var t=!0;if("persp"===e)this.camera=this.defaultCamera,this.camera.toPerspective();else if("orth"===e)this.camera=this.defaultCamera,this.camera.toOrthographic();else{var i=this.modelManager.getCamera(e);i?this.camera=i:(console.log("Fail to switch because not found camera '"+e+"'"),t=!1)}return t&&this.cameraControl.setCamera(this.camera),t}getNumOfElements(e){return this.modelManager.getNumOfElements(e)}getNumOfRenderables(e){return this.modelManager.getNumOfRenderables(e)}getNumOfTriangles(e){return this.modelManager.getNumOfTriangles(e)}getNumOfVertices(e){return this.modelManager.getNumOfVertices(e)}setLightPreset(e){r.GlobalData.LightPreset=e,this.getScene().lightPreset(),this.setRenderStateChanged(!0)}getLightPreset(){return r.GlobalData.LightPreset}setAmbientLightIntensity(e){var t=this.getScene().ambientLight;t&&(t.intensity=e,this.setRenderStateChanged(!0))}getAmbientLightIntensity(){var e=this.getScene().ambientLight;return e?e.intensity:void 0}setWalkHeightLocked(e){var t=this.editorManager.getCurrentEditor();t&&t.name===r.EditorMode.WALK&&t.setHeightLocked(e)}setWalkLookMousePressed(e){var t=this.editorManager.getCurrentEditor();t&&t.name===r.EditorMode.WALK&&t.setDragLook(e)}setWalkSpeedRate(e){var t=this.editorManager.getCurrentEditor();t&&(t.name===r.EditorMode.WALK||r.EditorMode.THIRDPERSONWALK)&&(r.EditorConfig.WalkSpeedRate=e)}getWalkSpeedRate(){return r.EditorConfig.WalkSpeedRate}setDrawingStyle(e){r.GlobalData.DrawingStyle=e;const t=e=>{this.modelManager.traverseModels(void 0,(t=>{t instanceof r.BimTilesModel&&t.setBorderLineVisible(e)}))};switch(e){case r.DrawingStyle.SHADINGWITHLINE:t(!0);break;case r.DrawingStyle.SHADING:default:t(!1)}this.setRenderStateChanged(!0)}getWireframeColor(){let e;return this.modelManager.traverseModels(void 0,(t=>{const i=t.wireframeManager;return i?(e=i.getWireframeColor(),!0):t instanceof r.BimTilesModel?(e=t.getWireframeColor(),!0):void 0})),e||r.MaterialUtil.DefaultWireframeColor}setWireframeColor(e){this.modelManager.traverseModels((t=>{const i=t.wireframeManager;i&&i.setWireframeColor(new THREE.Color(e.red/255,e.green/255,e.blue/255),e.alpha),t instanceof r.BimTilesModel&&t.setWireframeColor(new THREE.Color(e.red/255,e.green/255,e.blue/255),e.alpha)})),this.setRenderStateChanged(!0)}restoreWireframeColor(){this.modelManager.traverseModels((e=>{const t=e.wireframeManager;t&&t.restoreWireframeColor(),e instanceof r.BimTilesModel&&e.restoreWireframeColor()})),this.setRenderStateChanged(!0)}setInstanceMode(e){if(!r.GlobalData.Instance===e){if(r.GlobalData.Instance=e,e)this.getScene().getOrCreateObjectGroup(r.ObjectGroupType.INSTANCEGEOMETRY,{globalSpace:!0}).visible=!0;else this.getScene().getOrCreateObjectGroup(r.ObjectGroupType.INSTANCEGEOMETRY,{globalSpace:!0}).visible=!1;this.setRenderStateChanged(!0)}}setTransitionAnimationState(e){this.transitionAnimationState=e}getTransitionAnimationState(){return this.transitionAnimationState}clipConditionPoint(e){const t=r.FillClipPlaneManager.getInstance(this.getScene());if(!(t&&t.isEnabled()&&t.uniforms.vClipPlane.value))return!1;const n=t.uniforms.vClipPlane.value;for(var a=0;a<n.length;++a){const t=n[a];i.setComponents(-t.x,-t.y,-t.z,-t.w),i.normalize();const r=i.normal;if(e.dot(r)<-i.constant)return!0}return!1}clipPoint(e){var t=this.getRenderer();if(!t)return!1;const i=r.FillClipPlaneManager.getCreatedFillClipPlane(this.getScene());if(i&&i.isEnabled()&&i.innerClipping)return o.identity(),n.setFromProjectionMatrix(o.multiplyMatrices(i.orthoCamera.projectionMatrix,i.orthoCamera.matrixWorldInverse)),!!n.containsPoint(e);var a=t.clippingPlanes;if(a&&a.length>0)for(var s=0;s<a.length;++s){var l=a[s],d=l.normal;if(e.dot(d)<-l.constant)return!0}return!1}getExplosionExtent(e){return this.modelManager.explosionManager.getExplosionExtent(e)}setExplosionExtent(e,t){r.GlobalData.EnableExplosion&&this.modelManager.explosionManager.setExplosionExtent(e,t)}setFloorExplosion(e,t,i,n){r.GlobalData.EnableExplosion&&this.modelManager.explosionManager.setFloorExplosion(e,t,i,n)}getFloorExplosionExtent(e){return this.modelManager.explosionManager.getFloorExplosionExtent(e)}getFloorExplosionDirection(e){return this.modelManager.explosionManager.getFloorExplosionDirection(e)}getFloorExplosionList(e){return this.modelManager.explosionManager.getFloorExplosionList(e)}setFloorInfos(e,t){this.modelManager.explosionManager.setFloorInfos(e,t)}getFloorInfos(e){return this.modelManager.explosionManager.getFloorInfos(e)}setExposureShift(e){this.exposureShift=e,r.GlobalData.ToneMapping=1,this.modelManager.setExposureShift(e),this.setRenderStateChanged(!0)}getExposureShift(){return this.exposureShift}setRenderStateChanged(e){this.modelManager&&this.modelManager.setRenderStateChanged(e)}isDesktop(){return r.Utils.isDesktop()}getComponentInfoByUserId(e,t){return this.modelManager.getComponentInfoByUserId(e,t)}getBoundingBoxByIds(e,t){var i=this.modelManager.getBoundingBoxByIds(e,t);return i.isEmpty()||i.applyMatrix4(this.getScene().getMatrixGlobal()),i}convertAnnotationsToV3(e){return r.Compatibility.convertAnnotationsToV3(this,e)}loadMpkOnDemand(e,t,i){var r=this;this.modelManager.getLoadOnDemandDirector().loadMpkOnDemandByConditionsWithDelay(e,(function(){r.rendererManager.forceRenderClearScreen();const e={};d&&(e.forceUpdate=!0,d=!1),r.getModelManager().updateScene(null,e)}),t,i)}getBoundingBoxOnDemand(){return this.modelManager.hasLoadOnDemandDirector()?this.modelManager.getLoadOnDemandDirector().getBoundingBoxOnDemand():null}updateGlowEffect(e,t){var i=this;i.rendererManager&&i.rendererManager.renderer&&i.rendererManager.renderer instanceof r.BatchedRenderer&&null!=i.rendererManager.renderer.composer&&i.rendererManager.renderer.composer.updateGlowEffect(e,t)}setGlowEffectById(e,t,i){var n=this;if(n.rendererManager&&n.rendererManager.renderer&&n.rendererManager.renderer instanceof r.BatchedRenderer){null==n.rendererManager.renderer.composer&&n.rendererManager.renderer._createComposer();var a=n.rendererManager.renderer.composer;if(null==t||0==t.length)return;null!=i.isGis&&1==i.isGis?a.isGis=!0:a.isGis=!1,"body"==i.type&&a.setGlowEffectById(e,t,i),"outline"==i.type&&null!=a.highlightoutlinePass&&a.highlightoutlinePass.setHighLightOutlineById(e,t,i)}}removeGlowEffectById(e,t){this.rendererManager.renderer.composer&&((r.GlobalData.GlowCount>0||r.GlobalData.BloomCount>0)&&this.rendererManager.renderer.composer.removeGlowEffectById(e,t),r.GlobalData.HighLightOutlineCount>0&&null!=this.rendererManager.renderer.composer.highlightoutlinePass&&this.rendererManager.renderer.composer.highlightoutlinePass.removeHighLightOutlineById(e,t))}snowOpt(e){var t=this;if(t.rendererManager&&t.rendererManager.renderer&&t.rendererManager.renderer instanceof r.BatchedRenderer){null==t.rendererManager.renderer.composer&&t.rendererManager.renderer._createComposer();var i=t.rendererManager.renderer.composer;if(null==e)return i.snowEffectOpt();i.snowEffectOpt(e)}}rainOpt(e){var t=this;if(t.rendererManager&&t.rendererManager.renderer&&t.rendererManager.renderer instanceof r.BatchedRenderer){null==t.rendererManager.renderer.composer&&t.rendererManager.renderer._createComposer();var i=t.rendererManager.renderer.composer;if(null==e)return i.rainEffectOpt();i.rainEffectOpt(e)}}fogOpt(e){var t=this;if(t.rendererManager&&t.rendererManager.renderer&&t.rendererManager.renderer instanceof r.BatchedRenderer){null==t.rendererManager.renderer.composer&&t.rendererManager.renderer._createComposer();var i=t.rendererManager.renderer.composer;if(null==e)return i.fogEffectOpt();i.fogEffectOpt(e)}}skylineOpt(e){var t=this;if(t.rendererManager&&t.rendererManager.renderer&&t.rendererManager.renderer instanceof r.BatchedRenderer){null==t.rendererManager.renderer.composer&&t.rendererManager.renderer._createComposer();var i=t.rendererManager.renderer.composer;if(null==e)return i.skylineOpt();i.skylineOpt(e)}}getSkyline3D(){return r.GroundPrimitiveManager.getInstance().getSkyline3D()}updateDemMaterialsSide(){var e;this.modelManager.modelCollection.traverse((t=>{t.isDemLayer&&(e=t.tileManager)})),e&&e.updateMaterialsSide()}addRingScanEffect(e){var t=this;if(t.rendererManager&&t.rendererManager.renderer&&t.rendererManager.renderer instanceof r.BatchedRenderer){null==t.rendererManager.renderer.composer&&t.rendererManager.renderer._createComposer();var i=t.rendererManager.renderer.composer;r.GlobalData.ScanRingCount++;var n=i.addRingScanEffect(e);return t.render(),n}console.warn("请在场景加载成功后,添加环状扫描特效.")}deleteRingScanEffect(e){var t=this;t.rendererManager&&t.rendererManager.renderer&&t.rendererManager.renderer instanceof r.BatchedRenderer&&null!=t.rendererManager.renderer.composer&&(t.rendererManager.renderer.composer.removeRingScanEffect(e)&&r.GlobalData.ScanRingCount--,t.render())}ssaoOpt(e){var t=this;if(t.rendererManager&&t.rendererManager.renderer&&t.rendererManager.renderer instanceof r.BatchedRenderer){null==t.rendererManager.renderer.composer&&t.rendererManager.renderer._createComposer();var i=t.rendererManager.renderer.composer;if(null==e)return i.ssaoEffectOpt();i.ssaoEffectOpt(e)}}createAreaInfo(e,t){var i=new r.AreaInfo(e);return i.checkRoomBoundary(t)?i:null}createAreaInfoWithHoles(e,t,i){var n=new r.AreaInfo(e);return n.checkRoomBoundaryWithHoles(t,i)?n:null}enableBlinkComponents(e){this.modelManager.blinkManager.isBlinkPermited()||(this.modelManager.blinkManager.enableBlink(e),this.render())}setBlinkComponentsById(e,t,i){this.modelManager.blinkManager.isBlinkPermited()||this.modelManager.sceneState.setBlinkComponentsById(e,t,i)}addBlinkComponentsById(e,t,i){this.modelManager.blinkManager.isBlinkPermited()||this.modelManager.sceneState.addBlinkComponentsById(e,t,i)}addBlinkComponentsByDetail(e,t,i,r){this.modelManager.blinkManager.isBlinkPermited()||this.modelManager.sceneState.addBlinkComponentsByDetail(e,t,i,r)}clearBlinkComponentsById(e,t){this.modelManager.blinkManager.isBlinkPermited()||this.modelManager.sceneState.clearBlinkComponentsById(e,t)}clearBlinkComponentsByDetail(e){this.modelManager.blinkManager.isBlinkPermited()||this.modelManager.sceneState.clearBlinkComponentsByDetail(e)}enableBlinkComponentsByDetail(e,t){this.modelManager.blinkManager.isBlinkPermited()||this.modelManager.sceneState.enableBlinkComponentsByDetail(e,t)}clearAllBlinkComponents(e){this.modelManager.blinkManager.isBlinkPermited()||this.modelManager.sceneState.clearAllBlinkComponents(e)}getBlinkComponents(e){return this.modelManager.blinkManager.isBlinkPermited()?null:this.modelManager.sceneState.getBlinkComponents(e)}setBlinkColor(e,t){this.modelManager.blinkManager.isBlinkPermited()||this.modelManager.blinkManager.setBlinkColor(e.color,e.opacity,t)}setBlinkIntervalTime(e,t){this.modelManager.blinkManager.isBlinkPermited()||this.modelManager.blinkManager.setBlinkIntervalTime(e,t)}enableSnap(e){this.editorManager.getToolByName("pickByRect").enableSnap(e)}pickToPoint(e,t){return this.editorManager.editor.pickHelper.pickToPoint(e,t)}getViewportSize(){return this.rendererManager.getRendererSize()}getRenderer(){return this.rendererManager.getRenderer()}getModelManager(){return this.modelManager}getReceivingPlane(){return this.getScene().getReceivingPlane()}enableShadow(e){var t=e?4:3;t!=r.GlobalData.LightPreset&&(this.setLightPreset(t),this.enableShadowForObjects(e))}enableShadowForObjects(e){let t=this.getScene();e?t.lightManager.shadowLightNum++:t.lightManager.shadowLightNum--;let i=this.getRenderer();if(i.shadowMap.needsUpdate=!0,(!(t.lightManager.shadowLightNum>0)||e)&&r.GlobalData.EnableShadowMap!=e){r.GlobalData.EnableShadowMap=e,i.shadowMap.enabled=e,i.shadowMap.type=THREE.PCFSoftShadowMap,i.shadowMap.autoUpdate=!1;for(var n=this.getScene().getObjectGroups(),a=0;a<n.length;a++){var s=t.getObjectGroupType(n[a].name);if(s.groupType!=r.ObjectGroupType.IBLCUBE){var o,l=!0,d=!0;s.databagId?o=this.modelManager.getModel(s.databagId):s.groupType==r.GlobalData.TilePlaneGroupName&&(o=this.modelManager.getModel(r.ObjectGroupType.TILEGROUP)),o&&(l=o.castShadow,d=o.receiveShadow),this.traverseGroupEnableShadow(n[a],l,d)}}}}traverseGroupEnableShadow(e,t,i){var n=this;!function(e){if(e instanceof THREE.Mesh){var a=e.material;if(a instanceof Array){if("PhongLightingMaterial"==a[0].type)return;e.castShadow=a[0].opacity>.8&&t,e.receiveShadow=i;for(var s=0;s<a.length;s++)a[s]&&(a[s].needsUpdate=!0,o=a[s].defines);r.GlobalData.EnableShadowMap&&o&&o.hasOwnProperty("USE_INSTANCE")&&(e.customDepthMaterial=n.getInstanceDepthMaterial())}else{if("PhongLightingMaterial"==a.type)return;e.castShadow=a.opacity>.8&&t,e.receiveShadow=i,a.needsUpdate=!0;var o=a.defines;r.GlobalData.EnableShadowMap&&o&&o.hasOwnProperty("USE_INSTANCE")&&(e.customDepthMaterial=n.getInstanceDepthMaterial())}}}(e);for(var a=e.children,s=0,o=a.length;s<o;s++)this.traverseGroupEnableShadow(a[s],t,i)}getInstanceDepthMaterial(){return this.modelManager.getInstanceDepthMaterial()}updateShadowMap(){r.GlobalData.EnableShadowMap&&(this.getRenderer().shadowMap.needsUpdate=!0)}enableVR(e){this.rendererManager.enableVR(e)}enableDamping(e){(e=r.Utils.defaultValue(e,!1))?this.cameraControl.enableDamping():this.cameraControl.disableDamping()}setDampingFactor(e){(e=r.Utils.defaultValue(e,10))>=10&&(e=10),e<=1&&(e=1),e=11-e,this.cameraControl.dynamicDampingFactor(e/10)}calcShadowDirection(e,t){var i=r.JulianDate.fromDate(t),n=r.GIS.Transforms.computeTemeToPseudoFixedMatrix(i),a=r.Simon1994PlanetaryPositions.computeSunPositionInEarthInertialFrame(i);a.applyMatrix3(n);var s=r.Tile.TileMath.fromDegrees(e[0],e[1],0),o=r.GIS.Transforms.eastNorthUpToFixedFrame(s);o.invert();var l=new THREE.Vector4(a.x,a.y,a.z,1);l.applyMatrix4(o);var d=new THREE.Vector3;return d.set(l.x,l.y,l.z),d.normalize(),(d=this.worldToDrawing(d)).normalize(),d}getMaterialsByComponentId(e,t){const i=this.getModelManager().getModel(e),r=i.getFilter()._getOverrideMaterialById(t);if(r)return[r];const n=i.getNodeInfosByUserId(t);let a={};for(let e=0,t=n.length;e<t;e++){const t=n[e].materialId;if(a[t])continue;let r=i.getMaterialByMaterialId(t,n[e]);r&&(a[t]=r.clone(),a[t].name=a[t].name.toString())}return Object.values(a)}cloneModel(e,t){const i=this.getModelManager().getModel(e);return r.Utils.isDefined(i)?i.clone({modelId:t}):(console.log(`can not find model with id ${e}`),null)}getHeightLimitManager(){return this.heightLimitManager||(this.heightLimitManager=new r.HeightLimitManager(this)),this.heightLimitManager}getClipCapsManager(){return this.clipCapsManager||(this.clipCapsManager=new r.ClipCapsManager(this)),this.clipCapsManager}enableEmbeddedView(e){null!=this.scissorViewportManager&&(e?this.scissorViewportManager.show():this.scissorViewportManager.hide())}setEmbeddedView(e){null!=this.scissorViewportManager&&this.scissorViewportManager.effectOpt(e)}setSceneUnit(e){this.modelManager.setSceneUnit(e)}getSceneUnit(){return this.modelManager.getSceneUnit()}getClientSize(){var e=this.domElement===document?this.domElement.body:this.domElement;return this.clientSize.set(e.clientWidth,e.clientHeight),this.clientSize}enableOIT(e){this.webgl2Support&&(this.rendererManager.enableOIT(e),this.rendererManager._isSupportOIT()?this.modelManager.updateAlphaMapProperties(!0):this.modelManager.updateAlphaMapProperties(!1))}enableOITAlphaMask(e){this.rendererManager.enableOITAlphaMask(e)}setOITCustomizedAlpha(e){this.rendererManager.setOITCustomizedAlpha(e)}restoreMaterialByMaterialId(e,t){let i=this.modelManager.getModel(e).materialManager,r=i.materialIdMap;if(!r)return!1;let n=r[t];if(null==n)return!1;let a=i.materials[n];i.restoreMaterialParam(a);let s=i.instanceMaterials[n];if(!s)return!0;for(let e=0;e<s.length;e++)i.restoreMaterialParam(s[e]);return!0}overrideMaterialByMaterialId(e,t,i,r){function n(e){if(a.storeMaterialParam(e),i.diffuse_color){var t=i.diffuse_color.split(",");e.color.setRGB(parseFloat(t[0]),parseFloat(t[1]),parseFloat(t[2])),e.opacity=parseFloat(t[3])}var n=e.opacity<1;e.transparent=n,e.map=r,e.needsUpdate=!0}let a=this.modelManager.getModel(e).materialManager,s=a.materialIdMap[t];if(null==s)return!1;n(a.materials[s]);let o=a.instanceMaterials[s];if(!o)return!0;for(let e=0;e<o.length;e++)n(o[e]);return!0}loadMaterialIds(e,t,i){let n=this.modelManager.getModel(e);if(!(n instanceof r.Model))return console.log("ERROR:only support BMD now"),void(i&&i());let a=n.materialManager.materialIdMap;a?t&&t(Object.keys(a)):n._getHandler().loader._loadMaterialId(t,i)}setSelectionByMaterialId(e,t){let i=this;this.loadMaterialIds(e,(function(r){let n=i.modelManager.getModel(e),a=n.materialManager.materialIdMap[t];i.clearSelection();let s=i.rendererManager.getPickingEffecter();if(null!=a){if(!n.materialIdUserIdMap){let e=n.getAllNodeInfos(),t=Object.keys(e),i={};for(let r=0;r<t.length;r++){let n=e[t[r]],a={};for(let e=0;e<n.length;e++){let t=n[e].materialId;a[t]||(a[t]=!0,i[t]||(i[t]=[]),i[t].push(n[e].userId))}}n.materialIdUserIdMap=i}s.selectedMaterialId=a,i.addToSelection(n.materialIdUserIdMap[a])}else s.selectedMaterialId=void 0}))}hasBimtilesModel(){if(void 0!==this.hasBimtile)return this.hasBimtile;return this.modelManager.traverseModels(void 0,(e=>{e instanceof r.BimTilesModel&&(this.hasBimtile=!0)})),this.hasBimtile}setFoveatedConePriorityEnabled(e){this._foveatedConeLimit.priorityEnabled=e}setDegradedFactor(e){this._foveatedConeLimit.degradedFactor=r.Math.clamp(e,0,1)}setFoveatedConeFactor(e){this._foveatedConeLimit.foveatedConeFactor=r.Math.clamp(e,0,1)}setFoveatedSseRelaxation(e){this._foveatedConeLimit.foveatedSseRelaxation=e}getComponentsByRaycaster(e,t,i){e=new THREE.Vector3(e.x,e.y,e.z),t=new THREE.Vector3(t.x,t.y,t.z);const n=this.worldToDrawing(e),a=this.worldToDrawing(t).normalize(),s=new r.Raycaster(n,a),o=new r.IntersectHelper(this),l=this.cameraControl.getIntersectContext(null),d=o.getObjectsByRaycaster(l,s,!0);let h=[];const c=this.getFilter();for(const t of d){const n=this.drawingToWorld(t.point);let a={id:t.userId,modelId:t.modelId,distance:e.distanceTo(n),position:n,normal:t.face.normal};const s=t.modelId;if(!r.Utils.defined(s)){a.isMap=!0,h.push(a);continue}const o=this.getUserdataByUserId(t.userId,s);o.modelId=s,o.userId=t.userId;const l=i.length;let d=[];for(let e=0;e<l;e++){const t=i[e];t.modelId&&t.modelId!==s||(t.modelId&&1===Object.keys(t)||d.push(Object.assign({},t)))}0===d.length&&0!==l||c.isMatchConditions(o,d,s)&&h.push(a)}return h}getComponentsByRaycasterConditions(e,t,i){const n=this.getComponentsByRaycaster(e,t,[]),a=this.getFilter();let s=[];for(const e of n){const t=e.modelId;if(!r.Utils.defined(t)){e.isMap=!0,s.push(e);continue}const n=e.id,o=this.getUserdataByUserId(n,t);let l=!1;for(const e of i)if(t==e.modelId){if(void 0===e.userId&&void 0===e.objectData){l=!0;break}if(e.userId&&e.userId.indexOf(n)>-1){l=!0;break}if(e.objectData&&a.isMatchConditions(o,e.objectData,t)){l=!0;break}}!0!==l&&0!==i.length||s.push(e)}return s}setShowTileType(e){e!=this.showTileType&&(this.showTileType=e,this.render())}}})()}();