PageSourceSearch

https://senioruhak.web.app/_next/static/chunks/pages/_app-bc5532637ac13245.js

js senioruhak.web.app collected 2026-10-03 12:35:35 UTC 837,184 bytes, 3,371 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[888],{4444:function(e,t,r){"use strict";r.d(t,{$s:function(){return B},BH:function(){return _},G6:function(){return I},L:function(){return u},LL:function(){return A},L_:function(){return b},P0:function(){return y},Pz:function(){return v},Sg:function(){return w},ZR:function(){return W},aH:function(){return f},b$:function(){return R},eu:function(){return C},hl:function(){return T},m9:function(){return V},ne:function(){return x},pd:function(){return K},q4:function(){return p},ru:function(){return E},tV:function(){return l},uI:function(){return P},vZ:function(){return function e(t,r){if(t===r)return!0;let n=Object.keys(t),i=Object.keys(r);for(let a of n){if(!i.includes(a))return!1;let n=t[a],s=r[a];if(L(n)&&L(s)){if(!e(n,s))return!1}else if(n!==s)return!1}for(let e of i)if(!n.includes(e))return!1;return!0}},w1:function(){return S},xO:function(){return O},xb:function(){return U},z$:function(){return k},zI:function(){return H},zd:function(){return N}});var n=r(4155);/**
2 * @license
3 * Copyright 2017 Google LLC
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 *   http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */let i=function(e){let t=[],r=0;for(let n=0;n<e.length;n++){let i=e.charCodeAt(n);i<128?t[r++]=i:(i<2048?t[r++]=i>>6|192:((64512&i)==55296&&n+1<e.length&&(64512&e.charCodeAt(n+1))==56320?(i=65536+((1023&i)<<10)+(1023&e.charCodeAt(++n)),t[r++]=i>>18|240,t[r++]=i>>12&63|128):t[r++]=i>>12|224,t[r++]=i>>6&63|128),t[r++]=63&i|128)}return t},a=function(e){let t=[],r=0,n=0;for(;r<e.length;){let i=e[r++];if(i<128)t[n++]=String.fromCharCode(i);else if(i>191&&i<224){let a=e[r++];t[n++]=String.fromCharCode((31&i)<<6|63&a)}else if(i>239&&i<365){let a=((7&i)<<18|(63&e[r++])<<12|(63&e[r++])<<6|63&e[r++])-65536;t[n++]=String.fromCharCode(55296+(a>>10)),t[n++]=String.fromCharCode(56320+(1023&a))}else{let a=e[r++],s=e[r++];t[n++]=String.fromCharCode((15&i)<<12|(63&a)<<6|63&s)}}return t.join("")},s={byteToCharMap_:null,charToByteMap_:null,byteToCharMapWebSafe_:null,charToByteMapWebSafe_:null,ENCODED_VALS_BASE:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",get ENCODED_VALS(){return this.ENCODED_VALS_BASE+"+/="},get ENCODED_VALS_WEBSAFE(){return this.ENCODED_VALS_BASE+"-_."},HAS_NATIVE_SUPPORT:"function"==typeof atob,encodeByteArray(e,t){if(!Array.isArray(e))throw Error("encodeByteArray takes an array as a parameter");this.init_();let r=t?this.byteToCharMapWebSafe_:this.byteToCharMap_,n=[];for(let t=0;t<e.length;t+=3){let i=e[t],a=t+1<e.length,s=a?e[t+1]:0,o=t+2<e.length,c=o?e[t+2]:0,u=i>>2,l=(3&i)<<4|s>>4,h=(15&s)<<2|c>>6,g=63&c;o||(g=64,a||(h=64)),n.push(r[u],r[l],r[h],r[g])}return n.join("")},encodeString(e,t){return this.HAS_NATIVE_SUPPORT&&!t?btoa(e):this.encodeByteArray(i(e),t)},decodeString(e,t){return this.HAS_NATIVE_SUPPORT&&!t?atob(e):a(this.decodeStringToByteArray(e,t))},decodeStringToByteArray(e,t){this.init_();let r=t?this.charToByteMapWebSafe_:this.charToByteMap_,n=[];for(let t=0;t<e.length;){let i=r[e.charAt(t++)],a=t<e.length?r[e.charAt(t)]:0,s=++t<e.length?r[e.charAt(t)]:64,c=++t<e.length?r[e.charAt(t)]:64;if(++t,null==i||null==a||null==s||null==c)throw new o;let u=i<<2|a>>4;if(n.push(u),64!==s){let e=a<<4&240|s>>2;if(n.push(e),64!==c){let e=s<<6&192|c;n.push(e)}}}return n},init_(){if(!this.byteToCharMap_){this.byteToCharMap_={},this.charToByteMap_={},this.byteToCharMapWebSafe_={},this.charToByteMapWebSafe_={};for(let e=0;e<this.ENCODED_VALS.length;e++)this.byteToCharMap_[e]=this.ENCODED_VALS.charAt(e),this.charToByteMap_[this.byteToCharMap_[e]]=e,this.byteToCharMapWebSafe_[e]=this.ENCODED_VALS_WEBSAFE.charAt(e),this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[e]]=e,e>=this.ENCODED_VALS_BASE.length&&(this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(e)]=e,this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(e)]=e)}}};
16class o extends Error{constructor(){super(...arguments),this.name="DecodeBase64StringError"}}let c=function(e){let t=i(e);return s.encodeByteArray(t,!0)},u=function(e){return c(e).replace(/\./g,"")},l=function(e){try{return s.decodeString(e,!0)}catch(e){console.error("base64Decode failed: ",e)}return null},h=()=>/**
17 * @license
18 * Copyright 2022 Google LLC
19 *
20 * Licensed under the Apache License, Version 2.0 (the "License");
21 * you may not use this file except in compliance with the License.
22 * You may obtain a copy of the License at
23 *
24 *   http://www.apache.org/licenses/LICENSE-2.0
25 *
26 * Unless required by applicable law or agreed to in writing, software
27 * distributed under the License is distributed on an "AS IS" BASIS,
28 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
29 * See the License for the specific language governing permissions and
30 * limitations under the License.
31 */(function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==r.g)return r.g;throw Error("Unable to locate global object.")})().__FIREBASE_DEFAULTS__,g=()=>{if(void 0===n||void 0===n.env)return;let e=n.env.__FIREBASE_DEFAULTS__;if(e)return JSON.parse(e)},d=()=>{let e;if("undefined"==typeof document)return;try{e=document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/)}catch(e){return}let t=e&&l(e[1]);return t&&JSON.parse(t)},m=()=>{try{return h()||g()||d()}catch(e){console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`);return}},p=e=>{var t,r;return null===(r=null===(t=m())||void 0===t?void 0:t.emulatorHosts)||void 0===r?void 0:r[e]},y=e=>{let t=p(e);if(!t)return;let r=t.lastIndexOf(":");if(r<=0||r+1===t.length)throw Error(`Invalid host ${t} with no separate hostname and port!`);let n=parseInt(t.substring(r+1),10);return"["===t[0]?[t.substring(1,r-1),n]:[t.substring(0,r),n]},f=()=>{var e;return null===(e=m())||void 0===e?void 0:e.config},v=e=>{var t;return null===(t=m())||void 0===t?void 0:t[`_${e}`]};/**
32 * @license
33 * Copyright 2017 Google LLC
34 *
35 * Licensed under the Apache License, Version 2.0 (the "License");
36 * you may not use this file except in compliance with the License.
37 * You may obtain a copy of the License at
38 *
39 *   http://www.apache.org/licenses/LICENSE-2.0
40 *
41 * Unless required by applicable law or agreed to in writing, software
42 * distributed under the License is distributed on an "AS IS" BASIS,
43 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
44 * See the License for the specific language governing permissions and
45 * limitations under the License.
46 */class _{constructor(){this.reject=()=>{},this.resolve=()=>{},this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}wrapCallback(e){return(t,r)=>{t?this.reject(t):this.resolve(r),"function"==typeof e&&(this.promise.catch(()=>{}),1===e.length?e(t):e(t,r))}}}/**
47 * @license
48 * Copyright 2021 Google LLC
49 *
50 * Licensed under the Apache License, Version 2.0 (the "License");
51 * you may not use this file except in compliance with the License.
52 * You may obtain a copy of the License at
53 *
54 *   http://www.apache.org/licenses/LICENSE-2.0
55 *
56 * Unless required by applicable law or agreed to in writing, software
57 * distributed under the License is distributed on an "AS IS" BASIS,
58 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
59 * See the License for the specific language governing permissions and
60 * limitations under the License.
61 */function w(e,t){if(e.uid)throw Error('The "uid" field is no longer supported by mockUserToken. Please use "sub" instead for Firebase Auth User ID.');let r=t||"demo-project",n=e.iat||0,i=e.sub||e.user_id;if(!i)throw Error("mockUserToken must contain 'sub' or 'user_id' field!");let a=Object.assign({iss:`https://securetoken.google.com/${r}`,aud:r,iat:n,exp:n+3600,auth_time:n,sub:i,user_id:i,firebase:{sign_in_provider:"custom",identities:{}}},e);return[u(JSON.stringify({alg:"none",type:"JWT"})),u(JSON.stringify(a)),""].join(".")}/**
62 * @license
63 * Copyright 2017 Google LLC
64 *
65 * Licensed under the Apache License, Version 2.0 (the "License");
66 * you may not use this file except in compliance with the License.
67 * You may obtain a copy of the License at
68 *
69 *   http://www.apache.org/licenses/LICENSE-2.0
70 *
71 * Unless required by applicable law or agreed to in writing, software
72 * distributed under the License is distributed on an "AS IS" BASIS,
73 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
74 * See the License for the specific language governing permissions and
75 * limitations under the License.
76 */function k(){return"undefined"!=typeof navigator&&"string"==typeof navigator.userAgent?navigator.userAgent:""}function P(){return"undefined"!=typeof window&&!!(window.cordova||window.phonegap||window.PhoneGap)&&/ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(k())}function b(){return"undefined"!=typeof navigator&&"Cloudflare-Workers"===navigator.userAgent}function E(){let e="object"==typeof chrome?chrome.runtime:"object"==typeof browser?browser.runtime:void 0;return"object"==typeof e&&void 0!==e.id}function R(){return"object"==typeof navigator&&"ReactNative"===navigator.product}function S(){let e=k();return e.indexOf("MSIE ")>=0||e.indexOf("Trident/")>=0}function I(){return!function(){var e;let t=null===(e=m())||void 0===e?void 0:e.forceEnvironment;if("node"===t)return!0;if("browser"===t)return!1;try{return"[object process]"===Object.prototype.toString.call(r.g.process)}catch(e){return!1}}()&&!!navigator.userAgent&&navigator.userAgent.includes("Safari")&&!navigator.userAgent.includes("Chrome")}function T(){try{return"object"==typeof indexedDB}catch(e){return!1}}function C(){return new Promise((e,t)=>{try{let r=!0,n="validate-browser-context-for-indexeddb-analytics-module",i=self.indexedDB.open(n);i.onsuccess=()=>{i.result.close(),r||self.indexedDB.deleteDatabase(n),e(!0)},i.onupgradeneeded=()=>{r=!1},i.onerror=()=>{var e;t((null===(e=i.error)||void 0===e?void 0:e.message)||"")}}catch(e){t(e)}})}function H(){return"undefined"!=typeof navigator&&!!navigator.cookieEnabled}class W extends Error{constructor(e,t,r){super(t),this.code=e,this.customData=r,this.name="FirebaseError",Object.setPrototypeOf(this,W.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,A.prototype.create)}}class A{constructor(e,t,r){this.service=e,this.serviceName=t,this.errors=r}create(e,...t){let r=t[0]||{},n=`${this.service}/${e}`,i=this.errors[e],a=i?i.replace(D,(e,t)=>{let n=r[t];return null!=n?String(n):`<${t}?>`}):"Error",s=`${this.serviceName}: ${a} (${n}).`;return new W(n,s,r)}}let D=/\{\$([^}]+)}/g;function U(e){for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t))return!1;return!0}function L(e){return null!==e&&"object"==typeof e}/**
77 * @license
78 * Copyright 2017 Google LLC
79 *
80 * Licensed under the Apache License, Version 2.0 (the "License");
81 * you may not use this file except in compliance with the License.
82 * You may obtain a copy of the License at
83 *
84 *   http://www.apache.org/licenses/LICENSE-2.0
85 *
86 * Unless required by applicable law or agreed to in writing, software
87 * distributed under the License is distributed on an "AS IS" BASIS,
88 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
89 * See the License for the specific language governing permissions and
90 * limitations under the License.
91 */function O(e){let t=[];for(let[r,n]of Object.entries(e))Array.isArray(n)?n.forEach(e=>{t.push(encodeURIComponent(r)+"="+encodeURIComponent(e))}):t.push(encodeURIComponent(r)+"="+encodeURIComponent(n));return t.length?"&"+t.join("&"):""}function N(e){let t={};return e.replace(/^\?/,"").split("&").forEach(e=>{if(e){let[r,n]=e.split("=");
91t[decodeURIComponent(r)]=decodeURIComponent(n)}}),t}function K(e){let t=e.indexOf("?");if(!t)return"";let r=e.indexOf("#",t);return e.substring(t,r>0?r:void 0)}function x(e,t){let r=new M(e,t);return r.subscribe.bind(r)}class M{constructor(e,t){this.observers=[],this.unsubscribes=[],this.observerCount=0,this.task=Promise.resolve(),this.finalized=!1,this.onNoObservers=t,this.task.then(()=>{e(this)}).catch(e=>{this.error(e)})}next(e){this.forEachObserver(t=>{t.next(e)})}error(e){this.forEachObserver(t=>{t.error(e)}),this.close(e)}complete(){this.forEachObserver(e=>{e.complete()}),this.close()}subscribe(e,t,r){let n;if(void 0===e&&void 0===t&&void 0===r)throw Error("Missing Observer.");void 0===(n=!function(e,t){if("object"!=typeof e||null===e)return!1;for(let r of t)if(r in e&&"function"==typeof e[r])return!0;return!1}(e,["next","error","complete"])?{next:e,error:t,complete:r}:e).next&&(n.next=F),void 0===n.error&&(n.error=F),void 0===n.complete&&(n.complete=F);let i=this.unsubscribeOne.bind(this,this.observers.length);return this.finalized&&this.task.then(()=>{try{this.finalError?n.error(this.finalError):n.complete()}catch(e){}}),this.observers.push(n),i}unsubscribeOne(e){void 0!==this.observers&&void 0!==this.observers[e]&&(delete this.observers[e],this.observerCount-=1,0===this.observerCount&&void 0!==this.onNoObservers&&this.onNoObservers(this))}forEachObserver(e){if(!this.finalized)for(let t=0;t<this.observers.length;t++)this.sendOne(t,e)}sendOne(e,t){this.task.then(()=>{if(void 0!==this.observers&&void 0!==this.observers[e])try{t(this.observers[e])}catch(e){"undefined"!=typeof console&&console.error&&console.error(e)}})}close(e){this.finalized||(this.finalized=!0,void 0!==e&&(this.finalError=e),this.task.then(()=>{this.observers=void 0,this.onNoObservers=void 0}))}}function F(){}function B(e,t=1e3,r=2){let n=t*Math.pow(r,e);return Math.min(144e5,n+Math.round(.5*n*(Math.random()-.5)*2))}/**
92 * @license
93 * Copyright 2021 Google LLC
94 *
95 * Licensed under the Apache License, Version 2.0 (the "License");
96 * you may not use this file except in compliance with the License.
97 * You may obtain a copy of the License at
98 *
99 *   http://www.apache.org/licenses/LICENSE-2.0
100 *
101 * Unless required by applicable law or agreed to in writing, software
102 * distributed under the License is distributed on an "AS IS" BASIS,
103 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
104 * See the License for the specific language governing permissions and
105 * limitations under the License.
106 */function V(e){return e&&e._delegate?e._delegate:e}},9742:function(e,t){"use strict";t.byteLength=function(e){var t=c(e),r=t[0],n=t[1];return(r+n)*3/4-n},t.toByteArray=function(e){var t,r,a=c(e),s=a[0],o=a[1],u=new i((s+o)*3/4-o),l=0,h=o>0?s-4:s;for(r=0;r<h;r+=4)t=n[e.charCodeAt(r)]<<18|n[e.charCodeAt(r+1)]<<12|n[e.charCodeAt(r+2)]<<6|n[e.charCodeAt(r+3)],u[l++]=t>>16&255,u[l++]=t>>8&255,u[l++]=255&t;return 2===o&&(t=n[e.charCodeAt(r)]<<2|n[e.charCodeAt(r+1)]>>4,u[l++]=255&t),1===o&&(t=n[e.charCodeAt(r)]<<10|n[e.charCodeAt(r+1)]<<4|n[e.charCodeAt(r+2)]>>2,u[l++]=t>>8&255,u[l++]=255&t),u},t.fromByteArray=function(e){for(var t,n=e.length,i=n%3,a=[],s=0,o=n-i;s<o;s+=16383)a.push(function(e,t,n){for(var i,a=[],s=t;s<n;s+=3)a.push(r[(i=(e[s]<<16&16711680)+(e[s+1]<<8&65280)+(255&e[s+2]))>>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return a.join("")}(e,s,s+16383>o?o:s+16383));return 1===i?a.push(r[(t=e[n-1])>>2]+r[t<<4&63]+"=="):2===i&&a.push(r[(t=(e[n-2]<<8)+e[n-1])>>10]+r[t>>4&63]+r[t<<2&63]+"="),a.join("")};for(var r=[],n=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,o=a.length;s<o;++s)r[s]=a[s],n[a.charCodeAt(s)]=s;function c(e){var t=e.length;if(t%4>0)throw Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");-1===r&&(r=t);var n=r===t?0:4-r%4;return[r,n]}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},8764:function(e,t,r){"use strict";/*!
107 * The buffer module from node.js, for the browser.
108 *
109 * @author   Feross Aboukhadijeh <https://feross.org>
110 * @license  MIT
111 */var n=r(9742),i=r(645),a="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;function s(e){if(e>
1112147483647)throw RangeError('The value "'+e+'" is invalid for option "size"');var t=new Uint8Array(e);return Object.setPrototypeOf(t,o.prototype),t}function o(e,t,r){if("number"==typeof e){if("string"==typeof t)throw TypeError('The "string" argument must be of type string. Received type number');return l(e)}return c(e,t,r)}function c(e,t,r){if("string"==typeof e)return function(e,t){if(("string"!=typeof t||""===t)&&(t="utf8"),!o.isEncoding(t))throw TypeError("Unknown encoding: "+t);var r=0|m(e,t),n=s(r),i=n.write(e,t);return i!==r&&(n=n.slice(0,i)),n}(e,t);if(ArrayBuffer.isView(e))return function(e){if(C(e,Uint8Array)){var t=new Uint8Array(e);return g(t.buffer,t.byteOffset,t.byteLength)}return h(e)}(e);if(null==e)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(C(e,ArrayBuffer)||e&&C(e.buffer,ArrayBuffer)||"undefined"!=typeof SharedArrayBuffer&&(C(e,SharedArrayBuffer)||e&&C(e.buffer,SharedArrayBuffer)))return g(e,t,r);if("number"==typeof e)throw TypeError('The "value" argument must not be of type number. Received type number');var n=e.valueOf&&e.valueOf();if(null!=n&&n!==e)return o.from(n,t,r);var i=function(e){if(o.isBuffer(e)){var t,r=0|d(e.length),n=s(r);return 0===n.length||e.copy(n,0,0,r),n}return void 0!==e.length?"number"!=typeof e.length||(t=e.length)!=t?s(0):h(e):"Buffer"===e.type&&Array.isArray(e.data)?h(e.data):void 0}(e);if(i)return i;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return o.from(e[Symbol.toPrimitive]("string"),t,r);throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function u(e){if("number"!=typeof e)throw TypeError('"size" argument must be of type number');if(e<0)throw RangeError('The value "'+e+'" is invalid for option "size"')}function l(e){return u(e),s(e<0?0:0|d(e))}function h(e){for(var t=e.length<0?0:0|d(e.length),r=s(t),n=0;n<t;n+=1)r[n]=255&e[n];return r}function g(e,t,r){var n;if(t<0||e.byteLength<t)throw RangeError('"offset" is outside of buffer bounds');if(e.byteLength<t+(r||0))throw RangeError('"length" is outside of buffer bounds');return Object.setPrototypeOf(n=void 0===t&&void 0===r?new Uint8Array(e):void 0===r?new Uint8Array(e,t):new Uint8Array(e,t,r),o.prototype),n}function d(e){if(e>=2147483647)throw RangeError("Attempt to allocate Buffer larger than maximum size: 0x7fffffff bytes");return 0|e}function m(e,t){if(o.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||C(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);var r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var i=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return S(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return I(e).length;default:if(i)return n?-1:S(e).length;t=(""+t).toLowerCase(),i=!0}}function p(e,t,r){var i,a,s=!1;if((void 0===t||t<0)&&(t=0),t>this.length||((void 0===r||r>this.length)&&(r=this.length),r<=0||(r>>>=0)<=(t>>>=0)))return"";for(e||(e="utf8");;)switch(e){case"hex":return function(e,t,r){var n=e.length;(!t||t<0)&&(t=0),(!r||r<0||r>n)&&(r=n);for(var i="",a=t;a<r;++a)i+=H[e[a]];return i}(this,t,r);case"utf8":case"utf-8":return _(this,t,r);case"ascii":return function(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;i<r;++i)n+=String.fromCharCode(127&e[i]);return n}(this,t,r);case"latin1":case"binary":return function(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;i<r;++i)n+=String.fromCharCode(e[i]);return n}(this,t,r);case"base64":return i=t,a=r,0===i&&a===this.length?n.fromByteArray(this):n.fromByteArray(this.slice(i,a));case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return function(e,t,r){for(var n=e.slice(t,r),i="",a=0;a<n.length-1;a+=2)i+=String.fromCharCode(n[a]+256*n[a+1]);return i}(this,t,r);default:if(s)throw TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),s=!0}}function y(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function f(e,t,r,n,i){var a;if(0===e.length)return -1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),(a=r=+r)!=a&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return -1;r=e.length-1}
vendor: 14,466 bytes, line 111
111else if(r<0){if(!i)return -1;r=0}if("string"==typeof t&&(t=o.from(t,n)),o.isBuffer(t))return 0===t.length?-1:v(e,t,r,n,i);if("number"==typeof t)return(t&=255,"function"==typeof Uint8Array.prototype.indexOf)?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):v(e,[t],r,n,i);throw TypeError("val must be string, number or Buffer")}function v(e,t,r,n,i){var a,s=1,o=e.length,c=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return -1;s=2,o/=2,c/=2,r/=2}function u(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}if(i){var l=-1;for(a=r;a<o;a++)if(u(e,a)===u(t,-1===l?0:a-l)){if(-1===l&&(l=a),a-l+1===c)return l*s}else -1!==l&&(a-=a-l),l=-1}else for(r+c>o&&(r=o-c),a=r;a>=0;a--){for(var h=!0,g=0;g<c;g++)if(u(e,a+g)!==u(t,g)){h=!1;break}if(h)return a}return -1}function _(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i<r;){var a,s,o,c,u=e[i],l=null,h=u>239?4:u>223?3:u>191?2:1;if(i+h<=r)switch(h){case 1:u<128&&(l=u);break;case 2:(192&(a=e[i+1]))==128&&(c=(31&u)<<6|63&a)>127&&(l=c);break;case 3:a=e[i+1],s=e[i+2],(192&a)==128&&(192&s)==128&&(c=(15&u)<<12|(63&a)<<6|63&s)>2047&&(c<55296||c>57343)&&(l=c);break;case 4:a=e[i+1],s=e[i+2],o=e[i+3],(192&a)==128&&(192&s)==128&&(192&o)==128&&(c=(15&u)<<18|(63&a)<<12|(63&s)<<6|63&o)>65535&&c<1114112&&(l=c)}null===l?(l=65533,h=1):l>65535&&(l-=65536,n.push(l>>>10&1023|55296),l=56320|1023&l),n.push(l),i+=h}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);for(var r="",n=0;n<t;)r+=String.fromCharCode.apply(String,e.slice(n,n+=4096));return r}(n)}function w(e,t,r){if(e%1!=0||e<0)throw RangeError("offset is not uint");if(e+t>r)throw RangeError("Trying to access beyond buffer length")}function k(e,t,r,n,i,a){if(!o.isBuffer(e))throw TypeError('"buffer" argument must be a Buffer instance');if(t>i||t<a)throw RangeError('"value" argument is out of bounds');if(r+n>e.length)throw RangeError("Index out of range")}function P(e,t,r,n,i,a){if(r+n>e.length||r<0)throw RangeError("Index out of range")}function b(e,t,r,n,a){return t=+t,r>>>=0,a||P(e,t,r,4,34028234663852886e22,-34028234663852886e22),i.write(e,t,r,n,23,4),r+4}function E(e,t,r,n,a){return t=+t,r>>>=0,a||P(e,t,r,8,17976931348623157e292,-17976931348623157e292),i.write(e,t,r,n,52,8),r+8}t.lW=o,t.h2=50,o.TYPED_ARRAY_SUPPORT=function(){try{var e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),42===e.foo()}catch(e){return!1}}(),o.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(o.prototype,"parent",{enumerable:!0,get:function(){if(o.isBuffer(this))return this.buffer}}),Object.defineProperty(o.prototype,"offset",{enumerable:!0,get:function(){if(o.isBuffer(this))return this.byteOffset}}),o.poolSize=8192,o.from=function(e,t,r){return c(e,t,r)},Object.setPrototypeOf(o.prototype,Uint8Array.prototype),Object.setPrototypeOf(o,Uint8Array),o.alloc=function(e,t,r){return(u(e),e<=0)?s(e):void 0!==t?"string"==typeof r?s(e).fill(t,r):s(e).fill(t):s(e)},o.allocUnsafe=function(e){return l(e)},o.allocUnsafeSlow=function(e){return l(e)},o.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==o.prototype},o.compare=function(e,t){if(C(e,Uint8Array)&&(e=o.from(e,e.offset,e.byteLength)),C(t,Uint8Array)&&(t=o.from(t,t.offset,t.byteLength)),!o.isBuffer(e)||!o.isBuffer(t))throw TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;for(var r=e.length,n=t.length,i=0,a=Math.min(r,n);i<a;++i)if(e[i]!==t[i]){r=e[i],n=t[i];break}return r<n?-1:n<r?1:0},o.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},o.concat=function(e,t){if(!Array.isArray(e))throw TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return o.alloc(0);if(void 0===t)for(r=0,t=0;r<e.length;++r)t+=e[r].length;var r,n=o.allocUnsafe(t),i=0;for(r=0;r<e.length;++r){var a=e[r];if(C(a,Uint8Array))i+a.length>n.length?o.from(a).copy(n,i):Uint8Array.prototype.set.call(n,a,i);else if(o.isBuffer(a))a.copy(n,i);else throw TypeError('"list" argument must be an Array of Buffers');i+=a.length}return n},o.byteLength=m,o.prototype._isBuffer=!0,o.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;t<e;t+=2)y(this,t,t+1);return this},o.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;t<e;t+=4)y(this,t,t+3),y(this,t+1,t+2);return this},o.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw RangeError("Buffer size must be a multiple of 64-bits");for(var t=0;t<e;t+=8)y(this,t,t+7),y(this,t+1,t+6),y(this,t+2,t+5),y(this,t+3,t+4);return this},o.prototype.toString=function(){var e=this.length;return 0===e?"":0==arguments.length?_(this,0,e):p.apply(this,arguments)},o.prototype.toLocaleString=o.prototype.toString,o.prototype.equals=function(e){if(!o.isBuffer(e))throw TypeError("Argument must be a Buffer");return this===e||0===o.compare(this,e)},o.prototype.inspect=function(){var e="",r=t.h2;return e=this.toString("hex",0,r).replace(/(.{2})/g,"$1 ").trim(),this.length>r&&(e+=" ... "),"<Buffer "+e+">"},a&&(o.prototype[a]=o.prototype.inspect),o.prototype.compare=function(e,t,r,n,i){if(C(e,Uint8Array)&&(e=o.from(e,e.offset,e.byteLength)),!o.isBuffer(e))throw TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return -1;if(t>=r)return 1;if(t>>>=0,r>>>=0,n>>>=0,i>>>=0,this===e)return 0;for(var a=i-n,s=r-t,c=Math.min(a,s),u=this.slice(n,i),l=e.slice(t,r),h=0;h<c;++h)if(u[h]!==l[h]){a=u[h],s=l[h];break}return a<s?-1:s<a?1:0},o.prototype.includes=function(e,t,r){return -1!==this.indexOf(e,t,r)},o.prototype.indexOf=function(e,t,r){return f(this,e,t,r,!0)},o.prototype.lastIndexOf=function(e,t,r){return f(this,e,t,r,!1)},o.prototype.write=function(e,t,r,n){if(void 0===t)n="utf8",r=this.length,t=0;else if(void 0===r&&"string"==typeof t)n=t,r=this.length,t=0;else if(isFinite(t))t>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0);else throw Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");var i,a,s,o,c,u,l,h,g=this.length-t;if((void 0===r||r>g)&&(r=g),e.length>0&&(r<0||t<0)||t>this.length)throw RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var d=!1;;)switch(n){case"hex":return function(e,t,r,n){r=Number(r)||0;var i=e.length-r;n?(n=Number(n))>i&&(n=i):n=i;var a=t.length;n>a/2&&(n=a/2);for(var s=0;s<n;++s){var o=parseInt(t.substr(2*s,2),16);if(o!=o)break;e[r+s]=o}return s}(this,e,t,r);case"utf8":case"utf-8":return i=t,a=r,T(S(e,this.length-i),this,i,a);case"ascii":case"latin1":case"binary":return s=t,o=r,T(function(e){for(var t=[],r=0;r<e.length;++r)t.push(255&e.charCodeAt(r));return t}(e),this,s,o);case"base64":return c=t,u=r,T(I(e),this,c,u);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return l=t,h=r,T(function(e,t){for(var r,n,i=[],a=0;a<e.length&&!((t-=2)<0);++a)n=(r=e.charCodeAt(a))>>8,i.push(r%256),i.push(n);return i}(e,this.length-l),this,l,h);default:if(d)throw TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),d=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},o.prototype.slice=function(e,t){var r=this.length;e=~~e,t=void 0===t?r:~~t,e<0?(e+=r)<0&&(e=0):e>r&&(e=r),t<0?(t+=r)<0&&(t=0):t>r&&(t=r),t<e&&(t=e);var n=this.subarray(e,t);return Object.setPrototypeOf(n,o.prototype),n},o.prototype.readUintLE=o.prototype.readUIntLE=function(e,t,r){e>>>=0,t>>>=0,r||w(e,t,this.length);for(var n=this[e],i=1,a=0;++a<t&&(i*=256);)n+=this[e+a]*i;return n},o.prototype.readUintBE=o.prototype.readUIntBE=function(e,t,r){e>>>=0,t>>>=0,r||w(e,t,this.length);for(var n=this[e+--t],i=1;t>0&&(i*=256);)n+=this[e+--t]*i;return n},o.prototype.readUint8=o.prototype.readUInt8=function(e,t){return e>>>=0,t||w(e,1,this.length),this[e]},o.prototype.readUint16LE=o.prototype.readUInt16LE=function(e,t){return e>>>=0,t||w(e,2,this.length),this[e]|this[e+1]<<8},o.prototype.readUint16BE=o.prototype.readUInt16BE=function(e,t){return e>>>=0,t||w(e,2,this.length),this[e]<<8|this[e+1]},o.prototype.readUint32LE=o.prototype.readUInt32LE=function(e,t){return e>>>=0,t||w(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},o.prototype.readUint32BE=o.prototype.readUInt32BE=function(e,t){return e>>>=0,t||w(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},o.prototype.readIntLE=function(e,t,r){e>>>=0,t>>>=0,r||w(e,t,this.length);for(var n=this[e],i=1,a=0;++a<t&&(i*=256);)n+=this[e+a]*i;return n>=(i*=128)&&(n-=Math.pow(2,8*t)),n},o.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||w(e,t,this.length);for(var n=t,i=1,a=this[e+--n];n>0&&(i*=256);)a+=this[e+--n]*i;return a>=(i*=128)&&(a-=Math.pow(2,8*t)),a},o.prototype.readInt8=function(e,t){return(e>>>=0,t||w(e,1,this.length),128&this[e])?-((255-this[e]+1)*1):this[e]},o.prototype.readInt16LE=function(e,t){e>>>=0,t||w(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt16BE=function(e,t){e>>>=0,t||w(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt32LE=function(e,t){return e>>>=0,t||w(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},o.prototype.readInt32BE=function(e,t){return e>>>=0,t||w(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},o.prototype.readFloatLE=function(e,t){return e>>>=0,t||w(e,4,this.length),i.read(this,e,!0,23,4)},o.prototype.readFloatBE=function(e,t){return e>>>=0,t||w(e,4,this.length),i.read(this,e,!1,23,4)},o.prototype.readDoubleLE=function(e,t){return e>>>=0,t||w(e,8,this.length),i.read(this,e,!0,52,8)},o.prototype.readDoubleBE=function(e,t){return e>>>=0,t||w(e,8,this.length),i.read(this,e,!1,52,8)},o.prototype.writeUintLE=o.prototype.writeUIntLE=function(e,t,r,n){if(e=+e,t>>>=0,r>>>=0,!n){var i=Math.pow(2,8*r)-1;k(this,e,t,r,i,0)}var a=1,s=0;for(this[t]=255&e;++s<r&&(a*=256);)this[t+s]=e/a&255;return t+r},o.prototype.writeUintBE=o.prototype.writeUIntBE=function(e,t,r,n){if(e=+e,t>>>=0,r>>>=0,!n){var i=Math.pow(2,8*r)-1;k(this,e,t,r,i,0)}var a=r-1,s=1;for(this[t+a]=255&e;--a>=0&&(s*=256);)this[t+a]=e/s&255;return t+r},o.prototype.writeUint8=o.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,1,255,0),this[t]=255&e,t+1},o.prototype.writeUint16LE=o.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},o.prototype.writeUint16BE=o.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},o.prototype.writeUint32LE=o.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},o.prototype.writeUint32BE=o.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},o.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var i=Math.pow(2,8*r-1);k(this,e,t,r,i-1,-i)}var a=0,s=1,o=0;for(this[t]=255&e;++a<r&&(s*=256);)e<0&&0===o&&0!==this[t+a-1]&&(o=1),this[t+a]=(e/s>>0)-o&255;return t+r},o.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var i=Math.pow(2,8*r-1);k(this,e,t,r,i-1,-i)}var a=r-1,s=1,o=0;for(this[t+a]=255&e;--a>=0&&(s*=256);)e<0&&0===o&&0!==this[t+a+1]&&(o=1),this[t+a]=(e/s>>0)-o&255;return t+r},o.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},o.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},o.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},o.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},o.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},o.prototype.writeFloatLE=function(e,t,r){return b(this,e,t,!0,r)},o.prototype.writeFloatBE=function(e,t,r){return b(this,e,t,!1,r)},o.prototype.writeDoubleLE=function(e,t,r){return E(this,e,t,!0,r)},o.prototype.writeDoubleBE=function(e,t,r){return E(this,e,t,!1,r)},o.prototype.copy=function(e,t,r,n){if(!o.isBuffer(e))throw TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n<r&&(n=r),n===r||0===e.length||0===this.length)return 0;if(t<0)throw RangeError("targetStart out of bounds");if(r<0||r>=this.length)throw RangeError("Index out of range");if(n<0)throw RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t<n-r&&(n=e.length-t+r);var i=n-r;return this===e&&"function"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(t,r,n):Uint8Array.prototype.set.call(e,this.subarray(r,n),t),i},o.prototype.fill=function(e,t,r,n){if("string"==typeof e){if("string"==typeof t?(n=t,t=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),void 0!==n&&"string"!=typeof n)throw TypeError("encoding must be a string");if("string"==typeof n&&!o.isEncoding(n))throw TypeError("Unknown encoding: "+n);if(1===e.length){var i,a=e.charCodeAt(0);("utf8"===n&&a<128||"latin1"===n)&&(e=a)}}else"number"==typeof e?e&=255:"boolean"==typeof e&&(e=Number(e));if(t<0||this.length<t||this.length<r)throw RangeError("Out of range index");if(r<=t)return this;if(t>>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(i=t;i<r;++i)this[i]=e;else{var s=o.isBuffer(e)?e:o.from(e,n),c=s.length;
111if(0===c)throw TypeError('The value "'+e+'" is invalid for argument "value"');for(i=0;i<r-t;++i)this[i+t]=s[i%c]}return this};var R=/[^+/0-9A-Za-z-_]/g;function S(e,t){t=t||1/0;for(var r,n=e.length,i=null,a=[],s=0;s<n;++s){if((r=e.charCodeAt(s))>55295&&r<57344){if(!i){if(r>56319||s+1===n){(t-=3)>-1&&a.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&a.push(239,191,189),i=r;continue}r=(i-55296<<10|r-56320)+65536}else i&&(t-=3)>-1&&a.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;a.push(r)}else if(r<2048){if((t-=2)<0)break;a.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128)}else if(r<1114112){if((t-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}else throw Error("Invalid code point")}return a}function I(e){return n.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(R,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function T(e,t,r,n){for(var i=0;i<n&&!(i+r>=t.length)&&!(i>=e.length);++i)t[i+r]=e[i];return i}function C(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}var H=function(){for(var e="0123456789abcdef",t=Array(256),r=0;r<16;++r)for(var n=16*r,i=0;i<16;++i)t[n+i]=e[r]+e[i];return t}()},645:function(e,t){/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */t.read=function(e,t,r,n,i){var a,s,o=8*i-n-1,c=(1<<o)-1,u=c>>1,l=-7,h=r?i-1:0,g=r?-1:1,d=e[t+h];for(h+=g,a=d&(1<<-l)-1,d>>=-l,l+=o;l>0;a=256*a+e[t+h],h+=g,l-=8);for(s=a&(1<<-l)-1,a>>=-l,l+=n;l>0;s=256*s+e[t+h],h+=g,l-=8);if(0===a)a=1-u;else{if(a===c)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,n),a-=u}return(d?-1:1)*s*Math.pow(2,a-n)},t.write=function(e,t,r,n,i,a){var s,o,c,u=8*a-i-1,l=(1<<u)-1,h=l>>1,g=23===i?5960464477539062e-23:0,d=n?0:a-1,m=n?1:-1,p=t<0||0===t&&1/t<0?1:0;for(isNaN(t=Math.abs(t))||t===1/0?(o=isNaN(t)?1:0,s=l):(s=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-s))<1&&(s--,c*=2),s+h>=1?t+=g/c:t+=g*Math.pow(2,1-h),t*c>=2&&(s++,c/=2),s+h>=l?(o=0,s=l):s+h>=1?(o=(t*c-1)*Math.pow(2,i),s+=h):(o=t*Math.pow(2,h-1)*Math.pow(2,i),s=0));i>=8;e[r+d]=255&o,d+=m,o/=256,i-=8);for(s=s<<i|o,u+=i;u>0;e[r+d]=255&s,d+=m,s/=256,u-=8);e[r+d-m]|=128*p}},6840:function(e,t,r){(window.__NEXT_P=window.__NEXT_P||[]).push(["/_app",function(){return r(9244)}])},2491:function(e,t,r){"use strict";r.d(t,{D:function(){return n}});let n=[{id:"golf",name:"골프",icon:"⛳",items:[{name:"라운딩 (18홀)",desc:"한국의 3분의 1 가격으로 즐기는 그린피. 캐디 동반이 기본이에요.",seed:"golf1"},{name:"골프 패키지",desc:"여러 번 라운딩을 묶어 더 저렴하게. 주말마다 다른 코스도 가능해요.",seed:"golf2"},{name:"골프 레슨",desc:"저렴한 비용으로 현지 프로에게 자세 교정까지 받아볼 수 있어요.",seed:"golf3"}]},{id:"sea",name:"바다\xb7해양",icon:"\uD83D\uDC20",items:[{name:"아일랜드 호핑",desc:"배를 타고 여러 섬을 돌며 수영과 점심을 즐기는 대표 투어예요.",seed:"ocean1"},{name:"스노클링",desc:"얕은 바다에서 알록달록한 물고기와 산호를 구경해요. 장비 대여 가능.",seed:"ocean2"},{name:"스쿠버 다이빙",desc:"체험 다이빙부터 자격증 과정까지. 세계적인 다이빙 포인트가 많아요.",seed:"ocean3"},{name:"선셋 크루즈",desc:"노을 지는 바다 위에서 즐기는 저녁. 잔잔해서 시니어분들께 인기예요.",seed:"ocean4"},{name:"제트스키 \xb7 바나나보트",desc:"짜릿한 수상 레저. 안전요원이 함께해 처음이어도 괜찮아요.",seed:"ocean5"}]},{id:"heal",name:"힐링\xb7마사지",icon:"\uD83D\uDC86",items:[{name:"전신 마사지",desc:"한 시간에 만원 안팎. 수업으로 지친 몸을 매일 풀어주기 좋아요.",seed:"massage1"},{name:"스파 \xb7 아로마",desc:"하루를 통째로 쓰는 스파 패키지. 사우나와 아로마 테라피까지.",seed:"massage2"},{name:"네일 \xb7 풋케어",desc:"저렴하고 정성스러운 관리. 주말에 가볍게 다녀오기 좋아요.",seed:"massage3"}]},{id:"tour",name:"관광\xb7투어",icon:"\uD83D\uDDFA️",items:[{name:"시티 투어",desc:"역사 유적과 성당, 전망대를 도는 반나절 코스. 가이드 동반이 편해요.",seed:"tour1"}
111,{name:"폭포 \xb7 자연 투어",desc:"에메랄드빛 폭포와 계곡. 가벼운 산책 코스로 다녀올 수 있어요.",seed:"tour2"},{name:"집라인 \xb7 어드벤처",desc:"계곡 위를 가로지르는 짜릿함. 체력에 맞는 코스를 고를 수 있어요.",seed:"tour3"},{name:"고래상어 투어",desc:"거대한 고래상어와 함께 헤엄치는 잊지 못할 경험 (지역 한정).",seed:"tour4"}]},{id:"shop",name:"쇼핑\xb7미식",icon:"\uD83D\uDECD️",items:[{name:"대형 쇼핑몰",desc:"아시아 최대급 몰에서 쇼핑과 영화, 식사를 한 번에. 냉방도 시원해요.",seed:"shopping1"},{name:"현지 맛집 투어",desc:"저렴하고 푸짐한 현지 음식부터 분위기 좋은 레스토랑까지.",seed:"shopping2"},{name:"한인 타운 \xb7 마트",desc:"한국 음식이 그리울 때. 한식당과 한인마트가 모여 있어요.",seed:"shopping3"},{name:"야시장 \xb7 나이트마켓",desc:"저녁에 활기를 띠는 시장에서 길거리 음식과 기념품을 구경해요.",seed:"shopping4"}]}]},7363:function(e,t,r){"use strict";r.d(t,{IL:function(){return a},O:function(){return s},nC:function(){return i}});let n=e=>[{label:"학원 대표 브로셔",kind:"brochure",file:"https://drive.google.com/file/d/".concat(e,"/view")}],i={eedu_eco:n("1stzBVMZ0_ezMADL4w2MPm6sGcwTBHUqE"),bcebu:n("1Py_uXGSfoT69lqxVJTvOAi588EaycR-0"),beci_eop:n("1o1XUnJLcH5TLeW9q9WiRg3pyJJIOLTbK"),beci_city:n("1o1XUnJLcH5TLeW9q9WiRg3pyJJIOLTbK"),blue_ocean:n("1WVnw9ZViByEWryrW3TpInBH_trLrn_DB"),cella_uni:n("1GYU4f51jMwkEiDNtDNRwDnl4C1-qpjLU"),cella_premium:n("1GYU4f51jMwkEiDNtDNRwDnl4C1-qpjLU"),cg_banilad:n("1VehEHkb0aD213d2hzbSQOwiT6Y2a7T04"),cg_sparta:n("1VehEHkb0aD213d2hzbSQOwiT6Y2a7T04"),cia:n("1G_1JzX6pVc9F5YZ0YvQLCDwMposuDIQT"),cij:n("1zaDSAqxpSX7kG22ZPawOvnz9D2oXsWzh"),cns:n("1hy_8NnwZG0kzHNDi7PoOaNvH0nBF3zbE"),cns_senior_camp:n("1hy_8NnwZG0kzHNDi7PoOaNvH0nBF3zbE"),cpi:n("1C3xy7arJfcol6HXE3PdJmlmhQvdNEbaJ"),cpils:n("114Nsg3_4WMlAIXJSvjGzICK8lMwbKor-"),clark_we:n("1Aiol1QFuFzJ433DIAXF222oMSI4DSSH1"),eg_academy:n("1fQklv15_fFvs6jDcMJY9ONOS2NXZQ1t6"),elsa:n("1Tw3lJCkS2O53ZkxrdKx9pcxQPkSlO7p5"),ev_academy:n("1HFREZiBMAtZ-et2Cq6d_sI1Yn5DHC838"),ev_lamer:n("15ztINoTdR6hw5MZhf6tUyZoShKhkcCol"),english_fella_1:n("1bHP1Rk53-hzXE_lgPyRbShlKTrGjkHuk"),english_fella_2:n("1MdACxNL7EH8yQEjiLara7gzPIeCP0VyP"),gitc:n("1VpdBEGBIoOzqoOxerFIoaQU_eeTO1FQw"),glant:n("1wNc94w1jCQJilUV0pjWEpu81K4TfeWtH"),glc:n("15ft7uMdB4pk9T3l53oL37UhPjuMjHA-U"),gs:n("1iAoaZG1rYp5CoWb9_aKGUoL6UMFTLVHK"),hana:n("1Q9TxpxTlsyGJZazjOztDFQ7rWVmLd4gK"),help_clark:n("16BJGl8O5tUQtcLespMEhWnVdNcZxotFV"),ibreeze:n("1GiX187Fg_r6hJPJXaDy2QAi4LzpVqaGd"),ims:n("1s31vUa3tAPLGXKrSQ6ZUpzatvEZz93ML"),jic_challenger:n("1-Uyk0Uo7b2HuhFD7d9ZuXw8P0nS19RAr"),jic_premium:n("1NjY8sxD4_LeYsZLNBLYCfnecJ9Rj2qtd"),lslc:n("1-yga44w-JY4w9xYUGz5um1hNTSeEVavd"),mk:n("10QJgADlH-6wydPWxfVM_ZqZALAv1kRJx"),monol:n("1uIlgLKAC09JUv5NQw0WC0xqALDf1dCyQ"),monol_golf:n("1uIlgLKAC09JUv5NQw0WC0xqALDf1dCyQ"),pilaedu:n("1lIHFlTe75tb6c4UTfMH2v274mD53CQlz"),philinter:n("1sYzV6eFGMP_5zg-61GQ30Pv3f_KqRwl2"),qqenglish_bfc:n("1EJLEYDx4kljym0j_BGJxVrd2QYf3-xg-"),qqenglish_itp:n("1EJLEYDx4kljym0j_BGJxVrd2QYf3-xg-"),smeag_capital:n("1RUgAq9Y_sdkUxrS9v-Bwt-9nVbTfbRRi"),talk:n("1ylvTyr0k1f5DdSjv7_m-6DCoKfObObMg"),talk_camp_adult:n("1ylvTyr0k1f5DdSjv7_m-6DCoKfObObMg"),wales:n("1fejAcYmQh418QGbDlSD-jjbP3Tj-aIu8"),we_academy:n("139-2go0jrU-eLabprTHPYU0UUj7XwGNg"),coco:n("1zASifHM8NZ43Mu7zr
111sLDDLSV7w74g49T"),eroom:n("1T_m7UUWBdqZajsw0dvnZuBLoi2lLNay9"),pines_main:n("1ssi1RxIiBxDJ6cSJal2vt6ndxtExVp5q"),pines_chapis:n("1l_UwFtLtQwMIYEiIO7EMHbCY3uz8Zhhg")};function a(e,t){return/^https?:\/\//.test(t.file)?t.file:"/brochures/".concat(e,"/").concat(t.file)}function s(e){var t;return null!==(t=i[e])&&void 0!==t?t:[]}},7049:function(e,t,r){"use strict";r.d(t,{XT:function(){return i},pT:function(){return n},th:function(){return a}});let n=[{id:"cebu",label:"세부",hint:"해변\xb7스노클링"},{id:"baguio",label:"바기오",hint:"고지대\xb7서늘"},{id:"clark",label:"클락",hint:"건조\xb7골프"},{id:"iloilo",label:"일로일로",hint:"해안\xb7우기"},{id:"bacolod",label:"바콜로드",hint:"온화"},{id:"boracay",label:"보라카이",hint:"리조트 해변"}],i={cebu:[{text:"아쿠아슈즈\xb7방수팩",note:"해변\xb7스노클링 액티비티가 많아요"},{text:"스노클링 마스크(선택)",note:"현지 대여도 되지만 위생상 개인 지참을 추천해요"}],baguio:[{text:"두꺼운 겉옷\xb7경량 패딩",note:"고지대라 서늘하고 아침저녁으로 쌀쌀해요"},{text:"소형 전기요\xb7핫팩",note:"밤에 난방이 약한 편이에요"},{text:"등산화\xb7트레킹 양말",note:"주변에 산책\xb7트레킹 코스가 많아요"}],clark:[{text:"보습 로션\xb7립밤",note:"건조한 편이에요"},{text:"골프 장갑\xb7모자\xb7팔토시",note:"골프 프로그램이 많은 지역이에요"}],iloilo:[{text:"우비\xb7방수 재킷",note:"우기에 비가 잦아요"},{text:"모기 기피제\xb7모기향",note:"해안 도시라 모기가 있어요"}],bacolod:[{text:"가벼운 겉옷",note:"온화하지만 실내 냉방\xb7저녁 대비용"},{text:"모기 기피제",note:"모기 대비용"}],boracay:[{text:"비치웨어\xb7아쿠아슈즈",note:"리조트 해변 활동이 많아요"},{text:"방수팩\xb7스노클링 용품",note:"물놀이\xb7해양 액티비티 대비"}]},a=[{title:"필수 서류",when:"출발 전 필수",items:[{text:"여권 영문이름\xb7생년월일이 항공권과 같은지 확인"},{text:"여권 만료일이 6개월 이상 남았는지 확인",note:"★ 6개월 미만이면 입국이 거부될 수 있어요"},{text:"왕복 항공권 준비 (영문이름\xb7출국/귀국일 확인)",note:"편도는 입국 거절 가능 \xb7 출발 1~7일 전 일정 재확인"},{text:"여행자보험 가입 — 보험 시작일을 출국일과 동일하게",note:"3개월 초과 체류 시 유학생보험 필수"},{text:"eTravel 등록 후 QR코드 저장",note:"etravel.gov.ph \xb7 출발 72시간 이내 작성"},{text:"입학허가서\xb7픽업확인서 준비",note:"입국 목적(Study)\xb7체류지 증빙용"}]},{title:"비자\xb7SSP 준비",when:"현지 학업 허가",items:[{text:"여권용 사진 2\xd72인치(5\xd75cm) 준비",note:"연수기간별 2~7장 \xb7 현지 촬영이 더 저렴"},{text:"모든 서류는 영문\xb7최신 발급본으로 준비"}]},{title:"환전\xb7카드",when:"돈 준비",items:[{text:"USD 100달러권으로 300~500달러 준비",note:"현지에서 페소로 환전하면 환율이 유리해요"},{text:"해외 결제 가능한 신용카드",note:"카드 영문이름 = 여권과 동일 \xb7 VISA/MASTER"},{text:"해외 ATM 출금 가능한 국제 체크카드",note:"CIRRUS\xb7PLUS\xb7UnionPay 등 \xb7 분실 대비 2장 권장"},{text:"환전\xb7수수료 우대 카드 준비 (트래블로그 등)",note:"선택 \xb7 현지 ATM 수수료 약 200~250페소는 발생"},{text:"카드사 분실신고 연락처 미리 저장"}]},{title:"휴대폰\xb7통신",when:"연락 수단",items:[{text:"로밍 / 현지 유심 / eSIM 중 하나 준비",note:"한국번호 유지는 로밍\xb7eSIM, 가성비는 현지 유심"},{text:"카카오톡\xb7필수 앱 로그인 상태 확인"},{text:"학원 픽업담당자와 카카오톡/라인 연결 확인"}]},{title:"짐 — 기내 휴대 (필수)",when:"꼭 손가방에",items:[{text:"보조배터리\xb7여분 배터리는 반드시 기내 휴대",note:"위탁수하물 금지 \xb7 100Wh 이하 1인 2개"},{text:"여권\xb7현금\xb7귀중품\xb7전자기기 기내 휴대"},{text:"노트북에 영화\xb7강의 미리 다운로드",note:"현지 인터넷이 느린 편이에요"},{text:"220V Ⅱ형 어댑터\xb7멀티탭"}]},{title:"짐 — 의류\xb7생활용품",when:"캐리어",items:[{text:"여름옷 충분히 + 얇은 긴팔 1~2벌",note:"실내 냉방 대비 \xb7 바기오는 두꺼운 옷도 필요"},{text:"수영복\xb7래쉬가드, 선크림\xb7모자\xb7선글라스",note:"자외선이 매우 강해요"},{text:"세면도구는 소량만 (현지 구입), 수건은 넉넉히"},{text:"우산\xb7잠금장치\xb7화장실 슬리퍼 등 소품"}]},{title:"짐 — 건강\xb7상비약",when:"건강",items:[{text:"가정상비약 (해열제\xb7진통제\xb7감기약\xb7지사제\xb7소화제\xb7연고)"},{text:"처방약은 영문 처방전과 함께 준비",note:"양이 많으면 입국 심사에서 제한될 수 있어요"},{text:"여분 안경\xb7렌즈",note:"현지는 진료 후에만 구입 가능하고 비싸요"}]},{title:"현지 납부비용 준비",when:"도착 후 납부",items:[{text:"연수기간에 맞춰 예상 금액 환전",note:"4주 $500 / 8주 $1000 / 12주 $1500 / 16주 $2000"},{text:"SSP\xb7비자연장\xb7I-CARD\xb7기숙사 보증금\xb7교재비\xb7전기세 확인",note:"학원 OT 자료\xb7학비 내역서에서 꼭 확인"},{text:"도착 직후 필요한 금액은 현금으로, 이후는 ATM 인출"}]},{title:"출국 당일 (공항)",when:"출국일",items:[{text:"항공편 출발 3시간 전 공항 도착"},{text:"체크인 → 수하물 위탁 → 보안검색 → 출국심사"},{text:"eTravel QR\xb7여권\xb7항공권을 손쉽게 꺼낼 수 있게 준비"},{text:"(만 70세 이상 등) 교통약자 우대 출국장 이용 가능",note:"체크인 카운터에서 우대 카드 수령"}]},{title:"도착 후 (입국\xb7픽업)",when:"필리핀 도착",items:[{text:"입국심사 — eTravel QR\xb7입학허가서 제시",note:'목적 질문엔 "Study English in 학원명"'},{text:"입국 스탬프의 체류 만료일 확인",note:"무비자 체류는 30일"},{text:"수하물 찾고 세관 통과",note:"여행자 휴대품 면세범위 1인 1만 페소"},{text:"픽업담당자 만나기 (공항 건물 밖에서 대기)",note:"못 만나도 이동하지 말고 픽업장소에서 연락"},{text:"도착 후 가족\xb7학원에 도착 연락"}
111]}]},155:function(e,t,r){"use strict";r.d(t,{Z:function(){return n}});let n=[{id:"cost",name:"비용",icon:"\uD83D\uDCB0",items:[{q:"비용이 어떻게 되나요?",a:"숙식 포함 4주 기준으로 150만원~400만원 사이예요. 숙소 타입, 수업 시간 수, 시기, 학원별 프로모션에 따라 달라져요. 여기에 현지에서 별도로 납부하는 비용이 있어요. 비자 연장비, SSP(필리핀 정부에서 발급하는 학업허가증), 전기세, 관리비 등인데 학원마다 조금씩 다르고 몇 주를 가시는지에 따라 4주당 비용이 달라지기도 해요. 정확한 금액은 등록하시는 학원 기준으로 상세히 안내드릴게요."},{q:"학원마다 왜 가격이 달라요?",a:"조건이 비슷하다면 대체로 가격대가 비슷한데 학원별 프로모션에 따라 가격 차이가 발생하는 편이에요. 숙소 타입, 수업 시간 수 등에 따라 가격이 추가로 달라지고, 달러로 학비를 받는 학원은 환율에 따라 달라지기도 해요."},{q:"거기서 생활비는 얼마나 드나요?",a:"1개월 기준 20~40만원 정도면 충분해요. 외식이나 쇼핑, 액티비티를 얼마나 즐기느냐에 따라 달라져요."},{q:"싸게 갈 수 있는 방법이 있나요?",a:"1인실보다 룸메이트가 있는 다인실을 선택하실수록 비용이 낮아져요. 시기별로 프로모션이 적용되는 학원들도 있어서 조건에 맞게 안내드릴 수 있어요. 학원이 결정되면 해당 학원에서 적용 가능한 모든 프로모션을 최대로 적용해드리고, 저희 자체 할인도 최대로 적용해드려요."}]},{id:"effect",name:"효과\xb7후기",icon:"\uD83D\uDCC8",items:[{q:"국내에서 영어 배우는 것과 뭐가 달라요?",a:"국내에서 영어를 배우는 ê±´ 영어가 외국어인 환경에서 공부하는 거예요. 수업이 끝나면 다시 한국어 환경으로 돌아오기 때문에 배운 걸 바로 써먹을 기회가 없어요. 필리핀은 영어가 실제로 쓰이는 환경이에요. 수업 시간은 물론이고 식사할 때, 친구들과 어울릴 때, 학원 직원과 대화할 때도 영어를 써야 해요. 배운 표현을 바로 그날 실생활에서 쓰다 ë³´ë©´ 자연스럽게 몸에 익혀져요. 1:1 수업으로 말할 기회도 압도적으로 많고, 같은 목표를 가진 다국적 친구들과 함께 생활하다 ë³´ë©´ 영어에 대한 두려움도 자연스럽게 없어지세요."},{q:"가서 영어가 정말 늘기는 하나요?",a:"오랜 노하우를 가진 선생님들과 1:1로 수업하기 때문에 말할 기회가 압도적으로 많아요. 수업 시간 외에도 외국인 친구들과 어울리고, 식사하고, 생활하는 모든 순간이 영어 환경이에요. 한국에서 학원을 다니는 것과 가장 큰 차이가 바로 이 부분이에요. 물론 수업에 성실하게 참여하고 영어를 쓰려는 의지가 있어야 효과가 있어요."},{q:"나이가 있는데 영어가 늘기는 하나요?",a:"학원에서 레벨 시스템으로 관리하고 있어서 실력 변화가 눈에 보여요. 20~30대보다 속도가 조금 더딜 수 있지만 눈에 띄게 좋아지세요. 1:1 수업이다 보니 선생님이 실력에 맞게 촘촘하게 수업해줘서 안 늘 수가 없는 구조예요. 영어 한 마디도 못 하시던 분이 마지막 주엔 선생님이랑 마음껏 이야기하시는 경우도 쉽게 ë³¼ 수 있어요."},{q:"다녀오신 분들 반응이 어때요?",a:"최근 시니어 선생님들의 문의가 크게 늘면서 시니어 전용 코스나 시니어 전문 캠퍼스까지 생겨날 정도예요. 한 번 다녀오신 분들이 또 가겠다고 연락 주시는 경우도 많고, 자기계발은 물론 휴양을 겸해서 오시는 분들도 있어요. 은퇴 후 삶 설계나 여행을 위한 영어 공부를 목적으로 오시는 분들도 많고, 어학연수를 경험해본 자녀분들이 부모님을 보내드리는 경우도 있어요. 다녀오신 분들 대부분 만족도가 높아서 주변에 권해주시는 분들도 많아요."}]},{id:"class",name:"수업",icon:"\uD83D\uDCDA",items:[{q:"영어를 하나도 못하는데 괜찮나요?",a:"입교 후 레벨테스트를 통해 실력에 맞는 수업이 배정되기 때문에 걱정 안 하셔도 돼요. 완전 초급자를 위한 교재도 있어요. 다만 기본적인 알파벳이나 간단한 단어 정도는 알고 오시면 수업 효율이 훨씬 높아요. 만약 아직 알파벳이 어려우시다면 등록 후 입학 전까지 알파벳과 기초 단어 정도만 익히고 오시는 걸 추천드려요."},{q:"하루 일과가 어떻게 되나요?",a:"학원마다 조금씩 다르지만 기본 흐름은 비슷해요. 아침 식사 후 오전 수업, 점심 식사, 오후 수업, 저녁은 자유시간이에요. 시니어 선생님들 기준으로 하루 평균 4~6시간 수업이 진행되고, 저녁에는 학원 규정이나 본인 취향에 따라 옵션 클래스를 들으실 수도 있어요. 수업은 월~금 평일에만 있고 주말은 자유시간이에요. 입교하시는 날엔 대부분의 학원에서 오리엔테이션과 레벨테스트가 진행돼요."},{q:"수업이 어떻게 진행되나요?",a:"1:1 수업 위주로 이루어져요. 평균적으로 1:1 수업 4시간에 그룹 수업 2~3시간 정도예요. 시니어 선생님들께는 1:1 수업 3~4시간에 그룹 1~2시간 정도를 추천드리고 있어요. 1:1 수업만으로 구성된 코스도 있으니 상담을 통해 취향에 맞ê²
111Œ 결정하시면 돼요."},{q:"수업이 너무 힘들면 어떡하나요?",a:"처음 입교하면 레벨테스트를 치른 다음 실력에 맞게 교재가 결정되기 때문에 난이도 걱정은 크게 안 하셔도 돼요. 만약 본인 레벨과 맞지 않는다고 느끼시면 교체 요청도 가능해요. 수업 시간이 길어서 힘드신 경우엔 1:1 수업이다 보니 선생님이 페이스를 조절해주시고 시간이 지날수록 익숙해지세요. 시니어 선생님들은 배운 내용을 소화할 시간도 필요하기 때문에 저희는 하루 4~6시간 정도 코스를 추천드리고 있어요."},{q:"외국 선생님 말을 알아들을 수 있을까요?",a:"1:1 수업이다 보니 선생님이 학생 실력에 맞춰서 대화를 이어가요. 말로만 설명하는 게 아니라 손짓이나 표정도 활용해가면서 가르쳐주세요. 학원들도 오랜 노하우가 쌓여있고 선생님들도 그렇게 트레이닝을 받기 때문에 걱정 안 하셔도 돼요."},{q:"얼마나 있다가 와야 하나요?",a:"4주 이상을 권장드려요. 너무 짧으면 현지 생활에 막 적응할 때쯤 귀국하게 되는 경우가 많거든요. 실제로 4~8주로 다녀오시는 분들이 가장 많고, ê·¸ 다음으로 12주도 꽤 많으세요. 효과를 확실하게 ë³´ê³  싶으신 분들은 12주를 추천드려요."},{q:"모르는 게 있을 때 어떻게 해요?",a:"상담과 수속 중에 궁금하신 ê±´ 언제든지 물어보세요. 등록 전에 학원 브로셔도 먼저 드리니 미리 확인해보실 수 있어요. 현지에 도착하시면 학원 한국인 매니저가 오리엔테이션을 진행해드려요. 생활 중에 궁금한 점은 학원 매니저를 통해 확인하시면 돼요. 한국인 매니저가 장기 부재중인 경우엔 저희가 소통을 도와드릴 수 있어요."}]},{id:"life",name:"생활",icon:"\uD83C\uDFE0",items:[{q:"먹고 자는 ê±´ 어떻게 해요?",a:"기본적으로 기숙학원이라 숙소와 삼시세끼 식사가 제공돼요. 기숙사는 1인실부터 4~6인실까지 다양해요. 시설이 걱정되시면 학원별로 외부기숙사나 호텔기숙사를 운영하는 경우도 있어요. 다만 이 경우엔 식사가 제한적일 수 있어요. 안전과 학사 관리를 위해 기숙사 생활을 권장드려요."},{q:"거기 음식이 입에 맞을까요?",a:"학생들이 다국적이다 보니 한식만 나오지는 않아요. 한식, 현지식, 일식, 대만식 등이 섞여서 나오는 편이에요. 저희가 실제로 학원 식사를 직접 먹어보면서 점검하고 있어서 입맛이 걱정되시면 미리 말씀해 주세요. 외식이 ê¼­ 필요하실 것 같으면 외출이 자유로운 학원으로 골라드릴게요. 근처에 한인마트나 한인 식당이 있는 학원들도 있어요."},{q:"한국 사람들도 많이 있나요?",a:"대부분의 학원은 한국인 비율을 25~30% 정도로 관리하고 있어요. 학원마다 다르고 시기에 따라서도 달라질 수 있어요. 특히 규모가 작은 학원은 비율 변동이 큰 편이에요. 한국인이 많은 환경을 원하시는지, 아니면 다국적 환경을 원하시는지 말씀해 주시면 그에 맞는 학원으로 안내해드릴게요."},{q:"주말에는 뭘 하나요?",a:"주말은 자유시간이에요. 보통 같이 공부하는 동기 분들(현지에서는 배치메이트라고 불러요)ê³¼ 시티투어, 쇼핑, 맛집 탐방을 많이 가세요. 골프나 스노클링 같은 액티비티를 원하시면 그룹을 만들어서 가기도 해요. 학원에서 액티비티 정보를 제공하는 경우도 있고, 저희도 안내해드릴 수 있어요."},{q:"가족이랑 연락은 잘 되나요?",a:"학원마다 와이파이가 설치되어 있어요. 한국처럼 빠르진 않지만 카카오톡이나 영상통화 정도는 충분히 가능해요. 시차도 한 시간밖에 안 나서 크게 불편함 없이 연락하실 수 있어요. 로밍을 해오시는 분들도 있어요."},{q:"빨래는 어떻게 해요?",a:"학원마다 달라요. 무료로 세탁을 ë§
111¡ê¸¸ 수 있는 학원도 있고, 직접 셀프로 해야 하는 학원도 있어요. 비용이 발생하는 경우엔 횟수당 요금이 붙는 학원도 있고, 무게당 요금이 붙는 학원도 있어요. 비용이 생기는 경우 평균적으로 100~300페소(약 2,500~7,500원) 정도예요."},{q:"같이 어울릴 사람이 있을까요?",a:"시니어 선생님들이 선호하는 학원 위주로 안내드리기 때문에 비슷한 연배 분들이 계실 가능성이 높아요. 다만 학원은 기본적으로 20~30대가 많은 편이에요. 그래도 걱정 안 하셔도 돼요. 학원에 도착하면 영어 이름을 쓰면서 다들 똑같은 학생으로 대해줘요. 외국인 친구들은 나이에 크게 개의치 않거든요. ê²°êµ­ 마음먹기에 달려있어요. 적극적으로 다가가시면 금방 친해지세요. ê¼­ 또래 분들과 어울리고 싶으시다면 수용 인원이 작은 학원보다는 규모가 큰 학원이 유리해요."},{q:"중간에 일이 생기면 먼저 귀국할 수 있나요?",a:"귀국은 가능해요. 잠시 귀국했다가 다시 오시는 것도 가능해요. 다만 귀국 형태에 따라 확인하셔야 할 게 달라져요. 잠시 다녀오시는 경우라면 학원의 픽업\xb7샌딩 규정과 홀딩 규정을 확인해야 하고, 완전히 귀국하시는 경우라면 환불 규정까지 확인이 필요해요. 규정은 학원마다 다르니 상황을 알려주시면 학원 매니저와 상담할 수 있도록 도와드릴게요."},{q:"짐을 얼마나 챙겨야 하나요?",a:"보통 캐리어 하나면 충분해요. 기본 의류, 상비약, 개인 세면도구 정도예요. 현지 마트에서 대부분 구매 가능해서 너무 많이 챙기실 필요 없어요. 자세한 준비물은 출국 준비 체크리스트 페이지에서 확인하실 수 있어요."}]},{id:"health",name:"건강\xb7안전",icon:"\uD83E\uDE7A",items:[{q:"거기서 몸이 아프면 어떻게 하나요?",a:"학원마다 가까운 병원 정보가 있고 환자가 생기면 학원에서 빠르게 안내해줘요. 한국인이나 외국인들이 많이 찾는 병원으로 연계가 되어 있어요. 간호사가 상주하는 학원도 있어요. 만약을 위해 여행자보험은 ê¼­ 가입하고 오세요."},{q:"보험은 어떻게 해야 하나요?",a:"여행자보험에 ê¼­ 가입하고 오세요. 필리핀은 한국 의료보험이 적용되지 않아서 현지 병원비가 매우 비싸요. 학원에서도 보험 서류를 요구하는 경우가 많아요. 연수 기간이 3개월 이하라면 여행자보험, 3개월을 넘으면 유학생보험으로 가입하셔야 해요. 보험 업체 연결은 저희가 도와드릴 수 있어요."},{q:"필리핀이 안전한가요?",a:"학원 내부에는 경비원이 상주하고 순찰도 돌아요. 학원 자체가 안전한 지역에 세워져 있고, 외국인 건물이라 현지 기관에서도 각별히 신경 써줘요. 다만 한국이 아니라는 걸 명심하셔야 해요. 밤늦게 혼자 외출하거나 인적이 드문 곳은 피하시고, ê·¸ 정도만 주의하시면 생활하는 데 큰 문제 없어요."},{q:"더운 날씨가 걱정돼요",a:"학원 타입에 따라 달라요. 건물형이나 콘도형 학원은 기숙사와 교실이 같은 건물 안에 있어서 밖에 돌아다닐 일이 거의 없어요. 에어컨도 잘 돼있어서 더위 걱정이 적어요. 리조트형 학원은 건물 간 이동이 있어서 더위를 더 많이 느끼실 수 있어요. 그래도 더위에 많이 약하신 분이라면 1년 내내 18~20\xb0C로 선선한 바기오도 고려해보세요!"},{q:"약은 어떻게 준비해야 하나요?",a:"평소 드시는 약은 영문 처방전과 함께 챙겨가세요. 약의 양이 많으면 입국 심사에서 제한될 수 있으니 주의하세요. 상비약은 현지에서도 살 수 있지만 용법을 모르면 불편하시니 조금만 챙겨가시는 걸 추천드려요. 자세한 준비 방법은 출국 준비 체크리스트 페이지에서 확인하실 수 있어요."},{q:"지병이 있어도 갈 수 있나요?",a:"지병의 종류와 상태에 따라 달라요. 필리핀은 한국만큼 의료 환경이 좋지 않아서 현지에서 치료가 필요한 상황이 생기면 큰 문제가 될 수 있어요. 치료가 완전히 끝나고 건강한 상태에서 가시는 걸 권장드려요. 악화될 우려가 없는 지병이라도 만약을 위해 공항과 가까운 세부나 클락으로 가시는 걸 추천드려요."},{q:"가족들이 많이 걱정할 것 같아요",a:"매일 연락하실 수 있어요. 학원마다 와이파이가 잘 돼있고, 출발 전에 유심이나 로밍 준비 방법도 안내드릴게요. 카카오톡, 영상통화 모두 가능해서 가족분들도 금방 안심하세요."}]},{id:"process",name:"수속\xb7신청",icon:"\uD83D\uDCCB",items:[{q:"어떻게 신청하면 되나요?",a:"전화 받기 신청을 해주시면 원하시는 시간에 맞춰 담당자가 먼저 연락드려요. 카카오나 직접 전화로 연락 주셔도 돼요. 시니어 전담팀에서 상담을 통해 학원 선택부터 입학 전까지 수속 과정을 함께 도와드릴게요."},{q:"비자가 필요한가요?",a:"별도로 준비하실 필요 없어요. 한국인은 왕복항공권과 여권만 있으면 입국 시 30일짜리 관광비자를 받으실 수 있어요. 30일 이상 체류하시면 현지에서 비자 연장을 하면 되는데, 학원에서 대부분 도와줘요."},{q:"비행기표는 어떻게 해요?",a:"왕복항공권을 준비하시면 돼요. 필리핀 입국 시 왕복항공권을 보여주셔야 해요. 어떻게 구매하는지 단계별로 안내드릴게요."},{q:"언제부터 준비하면 되나요?",a:"원하시는 시기와 조건에 따라 달라요. 성수기(여름\xb7겨울)라면 최소 2~3개월 전에는 준비를 시작하셔야 안전해요. 1인실을 원하신다면 성수기\xb7비수기 관계없이 더 서두르셔야 해요. 인기 학원 1인실은 6개월 전에 마감되는 경우도 있거든요. 원하시는 학원과 조건이 있으시다면 빨리 상담해보시는 게 좋아요."},{q:"신청하는 데 돈이 드나요?",a:"상담도 수속도 모두 무료예요. 학원과 기숙사가 결정되면 등록비만 먼저 내셔서 자리를 확보해두시고, 나머지 학비는 입학 4주 전까지 완납하시면 돼요."},{q:"혼자서 다 준비해야 하나요?",a:"처음이라 막막하실 수 있는데 걱정 안 하셔도 돼요. 상담을 통해 학원 선택을 도와드리고, 필리핀 입국 전까지 필요한 내용들을 안내드리면서 수속 과정을 함께 도와드려요."},{q:"출발 전에 뭘 챙겨야 하나요?",a:"여권, 항공권, 여행자보험, 환전과 카드 준비, 처방약 영문 처방전, eTravel 등록(필리핀 정부 인터넷 입국 신고서), 로밍 또는 유심까지 미리 준비하셔야 해요. 항목별 상세 내용과 주의사항은 출국 준비 체크리스트 페이지에서 확인하실 수 있어요."}]}]},9701:function(e,t,r){"use strict";r.d(t,{e:function(){return n}});let n=[{key:"finder",label:"학원 찾기",pic:"search"},{key:"quiz",label:"적합도 테스트",pic:"clipboard"},{key:"regions",label:"지역 안내",pic:"map"},{key:"faq",label:"자주 묻는 질문",pic:"question"},{key:"checklist",label:"준비 체크리스트",pic:"check"},{key:"activities",label:"액티비티",pic:"flag"}]},175:function(e,t,r){"use strict";r.d(t,{$Y:function(){return _},Be:function(){return m},Bi:function(){return P},GX:function(){return p},MR:function(){return u},MY:function(){return a},Nj:function(){return y},OS:function(){return c},TZ:function(){return v},aQ:function(){return l},b2:function(){return f},mb:function(){return s},oW:function(){return k},qw:function(){return w},sk:function(){return d},th:function(){return b},v0:function(){return g},yo:function(){return h}});var n=r(6628);let i=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e3,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:800;return"https://picsum.photos/seed/".concat(e,"/").concat(t,"/").concat(r)},a={hero:"/img/banner.webp",finder:"/img/finder-bg.png",processBg:"/img/uhakInfo-bg.png",test:i("test-md"),regions:i("regions-md"),faq:i("faq-md"),checklist:i("checklist-md"),activities:i("activity-md"),process:i("senior-journey",1600,700),schools:i("schools-all")},s=new Set(["cns_senior_camp","monol_golf","talk_camp_adult"]),o=n._.filter(e=>!s.has(e.id)),c=[{id:"copy-1on1",c:"선생님 한 분을 위한 \n 1:1 수업",s:"선생님을 위한 전담 강사가 배정됩니다."},{id:"copy-start",c:"영어가 처음이셔도 \n 괜찮아요",s:"입문자 전용반과 한국인 매니저가 함께합니다."},{id:"copy-stage",c:"공부도 여행도, \n 인생의 두 번째 무대예요",s:"주말 관광 \xb7 골프 \xb7 휴양 일정까지 챙겨 드립니다."},{id:"copy-pace",c:"천천히, \n선생님 속도에 맞출게요",s:"시니어 맞춤 코스로 부담 없이 시작할 수 있습니다."}],u=[{id:"call",cls:"foPhone",icon:"phone",img:"/img/quick_call.svg",main:"전화걸기",desc:"지금 바로 통화",kind:"tel",href:"tel:025320542"},{id:"callback",cls:"foConsult",icon:"clipboard",img:"/img/quick_timeCall.svg",main:"전화받기",desc:"원하는 시간에 전화",kind:"consult"},{id:"kakao",cls:"foKakao",icon:"speech",img:"/img/quick_kakao.svg",main:"카카오톡",desc:"채팅으로 상담",kind:"kakao",href:"http://pf.kakao.com/_tlGfX/chat"},{id:"material",cls:"foMaterial",icon:"book",img:"/img/quick_doc.svg",main:"자료요청",desc:"안내 책자 받기",kind:"material"}],l={liveFeedTitle:"실시간 상담\xb7등록 현황",playLabel:"자세히 보기"},h=[{id:"lf-1",kind:"inquiry",name:"김○○ 선생님",act:"상담 문의 접수",date:"26-07-16"},{id:"lf-2",kind:"enroll",name:"홍○○ 선생님",act:"등록 완료",date:"26-07-15"},{id:"lf-3",kind:"inquiry",name:"이○○ 선생님",act:"상담 문의 접수",date:"26-07-15"},{id:"lf-4",kind:"enroll",name:"박○○ 선생님",act:"등록 완료",date:"26-07-14"},{id:"lf-5",kind:"inquiry",name:"최○○ 선생님",act:"자료 요청",date:"26-07-14"},{id:"lf-6",kind:"enroll",name:"정○○ 선생님",act:"등록 완료",date:"26-07-13"},{id:"lf-7",kind:"inquiry",name:"강○○ 선생님",act:"상담 문의 접수",date:"26-07-13"},{id:"lf-8",kind:"enroll",name:"윤○○ 선생님",act:"등록 완료",date:"26-07-12"}],g=[{id:"hs-find",q:"학원이 너무 많아\n고르기 어려우세요?",feed:0},{id:"hs-fit",q:"이 나이에도\n잘 해낼 수 있을까요?",feed:1},{id:"hs-region",q:"세부? 바기오?\n어디로 가야 할까요?",feed:2},{id:"hs-english",q:"영어를 못하는데\n정말 괜찮을까요?",feed:3}],d=[{id:"m-finder",pic:"search",iconW:"/img/header_search_w.svg",label:"학원 찾기",sub:"나에게 맞는 어학원",href:"/finder",img:"/img/cate/catItem_1.png",color:"#e65e29",active:!0},{id:"m-quiz",pic:"clipboard",iconW:"/img/header_test_w.svg",label:"적합도 테스트",sub:"1분 연수 성향 진단",href:"/quiz",img:"/img/cate/catItem_2.png",color:"#ce4c8d",active:!0},{id:"m-regions",pic:"map",iconW:"/img/header_info_w.svg",label:"지역 안내",sub:"필리핀 지역별 소개",href:"/regions",img:"/img/cate/catItem_3.png",color:"#196aac",active:!0},{id:"m-faq",pic:"question",iconW:"/img/header_fnq_w.svg",label:"자주 묻는 질문",sub:"궁금증 한 번에",href:"/faq",img:"/img/cate/catItem_4.png",color:"#e09b34",active:!0},{id:"m-checklist",pic:"check",iconW:"/img/header_check_w.svg",label:"준비 체크리스트",sub:"출국 전 준비물",href:"/checklist",img:"/img/cate/catItem_5.png",color:"#466479",active:!0},{id:"m-activities",pic:"flag",iconW:"/img/header_activity_w.svg",label:"액티비티",sub:"주말 즐길거리",href:"/activities",img:"/img/cate/catItem_6.png",color:"#4b7c41",active:!0},{id:"m-reviews",pic:"speech",iconW:"/img/header_review_w.svg",label:"연수 후기",sub:"다녀온 분들 이야기",href:"/reviews",img:"/img/m_review.webp",color:"#732da8",active:!1}],m=[{id:"promo-1",title:"타지 생활도 든든하게, 한식 반찬 팩 서비스",href:"/schools",img:"/img/promoPost01.png",color:"#e8480a",imageOnly:!0},{id:"promo-2",title:"어학연수와 함께 즐기는 골프 프로그램",href:"/schools",img:"/img/promoPost02.png",color:"#1f8f5f",imageOnly:!0},{id:"promo-3",title:"연수 후 힐링, 현지 마사지 예약 서비스",href:"/regions",img:"/img/promoPost03.png",color:"#7c3aed",imageOnly:!0}];a.finder,a.test,a.regions,a.faq,a.checklist,a.activities;let p={tag:"상담부터 출국까지, 끝까지 함께해요",title:"시니어유학이 이렇게 도와드립니다",sub:"혼자 알아보기 어려운 과정, 전담팀이 단계마ë
111‹¤ 곁에서 챙겨드려요. 상담\xb7수속은 무료입니다."},y=[{id:"stat-dept",hi:"시니어 전담부서 운영",rest:"선생님의 상황과 취향을 반영해 한 분 한 분 맞춤으로 상담해 드립니다."},{id:"stat-schools",hi:"시니어 특화 ".concat(o.length,"ê³³ 어학원"),rest:"필리핀 전역의 시니어 특화 어학원과 제휴되어 있어요. 선생님께 맞는 곳으로 안내드립니다."},{id:"stat-age",hi:"30대부터 70대까지",rest:"직장인부터 은퇴 후 새 도전을 준비하는 분까지, 연령과 상황에 맞춰 안내해 드립니다."}],f={youtubeId:"uzoALbFh1wc",youtubeIdM:"oEE2C4PYeQo",poster:"/img/finder-bg.png",ytWatchUrl:"https://youtu.be/uzoALbFh1wc"},v={title:"최근 다녀온 시니어 연수 하이라이트",sub:"ë³´ê³  싶은 구간을 챕터로 바로 골라 보세요.",credit:"\xa9 시니어유학"},_=[{t:25,label:"학원 소개"},{t:70,label:"시설\xb7기숙사"},{t:120,label:"수업 현장"},{t:170,label:"비용\xb7마무리"}],w={eyebrow:"시니어유학 영상",title:"생생한 현지 이야기, 영상으로 보세요"},k=[{id:"VpyLyEPszTg",t:"시니어 어학연수 쇼츠",img:"/img/shorts/short_tum1.png"},{id:"i3pT6RSt4YE",t:"시니어 어학연수 쇼츠",img:"/img/shorts/short_tum2.png"},{id:"O3khPxFcT8g",t:"시니어 어학연수 쇼츠",img:"/img/shorts/short_tum3.png"}],P={eyebrow:"시니어 특화 어학원",title:e=>"시니어 특화 ".concat(e,"ê³³"),tabSub:e=>"시니어 선생님께 맞는 어학원 ".concat(e,"곳을 한눈에 ë³´ê³  비교하세요.")},b=[{id:"rev-highlight",videoId:"_RXfKDz-J-o",vertical:!1,thumb:"/img/finder-bg.png",name:"시니어 연수 하이라이트",place:"세부",meta:"현장 스케치",quote:"직접 다녀온 시니어 연수 현장을 영상으로 담았어요."},{id:"rev-fella",videoId:"CJeS5C-qta0",vertical:!0,thumb:"",name:"김○○ 선생님",place:"세부 \xb7 펠라2(FELLA)",meta:"3개월 과정",quote:"시설이 깨끗하고 1:1 수업이라 부담이 없었어요."},{id:"rev-monol",videoId:"rqdFixKdrOo",vertical:!0,thumb:"",name:"박○○ 선생님",place:"바기오 \xb7 CNS-MONOL",meta:"2개월 과정",quote:"시원한 날씨에 골프까지, 매일이 즐거웠습니다."},{id:"rev-cns",videoId:"-G0AQTCePcs",vertical:!0,thumb:"",name:"이○○ 선생님",place:"바기오 \xb7 CNS",meta:"1개월 과정",quote:"원장님이 직접 챙겨주셔서 든든했어요."},{id:"rev-compare",videoId:"Ov3MV6QCeOQ",vertical:!0,thumb:"",name:"정○○ 선생님",place:"세부",meta:"비교 후기",quote:"여러 학원을 비교해보고 정해서 만족도가 높아요."}]},4813:function(e,t,r){"use strict";r.d(t,{RS:function(){return a},mI:function(){return n},oj:function(){return i}});let n=[{part:"생활편",q:"기숙학원은 등교시간, 취침시간 등 학칙이 있어요",options:[{label:"규칙적인 생활 좋아요, 오히려 편해요",type:"good"},{label:"좀 자유롭게 지내고 싶어요",type:"mid",solution:"학칙이 느슨한 학원들도 있어요. 외출이 자유롭고 규율이 덜한 학원으로 골라드릴 수 있어요."},{label:"누가 내 생활을 통제하는 ê±´ 안 돼요",type:"bad"}]},{part:"생활편",q:"매 끼니 학원 급식이 나와요",options:[{label:"뭐든 잘 먹어요, 문제없어요",type:"good"},{label:"솔직히 한국 음식이 그리울 것 같아요",type:"mid",solution:"학원 주변에 한국 식당이 있는 경우가 많아요. 외식이 자유로운 학원으로 골라드리고 근처 한식당 정보도 알려드릴게요."},{label:"한국 음식 아니면 진짜 못 먹어요",type:"bad"}]},{part:"생활편",q:"룸메이트와 방을 같이 쓸 수도 있어요",options:[{label:"친구 생길 것 같아서 좋아요",type:"good"},{label:"솔직히 혼자 쓰고 싶어요",type:"mid",solution:"1인실이 있는 학원들이 많아요. 선생님 예산에 맞는 1인실 학원으로 골라드릴 수 있어요."},{label:"기숙사 말고 내가 원하는 숙소여야 해요",type:"bad"}]},{part:"성격편",q:"수업 중에 틀리거나 못하는 모습이 보일 수 있어요",options:[{label:"배우는 건데 당연하죠, 괜찮아요",type:"good"},{label:"남들 앞에서는 좀 부끄러울 것 같아요",type:"mid",solution:"그룹수업은 비슷한 레벨끼리 배치돼요. 부담스러우면 1:1 수업 위주로만 구성하는 것ë
111„ 가능해요."},{label:"못하는 모습을 남에게 보이는 ê±´ 절대 싫어요",type:"bad"}]},{part:"성격편",q:"나보다 어린 선생님한테 배우고, 외국인 친구들과 어울려야 해요",options:[{label:"배우는 입장인데 나이가 무슨 상관이에요",type:"good"},{label:"조금 어색하긴 하겠지만 괜찮아요",type:"mid",solution:'외국인 친구들은 나이를 따지지 않아요. 그냥 같은 학생이에요. 선생님도 필리핀에서는 그냥 "학생"으로 대접받으세요. 오히려 편하다고 하시는 분들이 많아요.'},{label:"어린 사람한테 배우는 ê±´ 자존심 상해요",type:"bad"}]},{part:"시간편",q:"한 달 이상 가족, 집을 비워야 해요",options:[{label:"문제없어요, 얼마든지 가능해요",type:"good"},{label:"가족이 걱정되긴 해요",type:"mid",solution:"학원마다 인터넷이 잘 돼있어요. 매일 영상통화로 가족 얼굴 보면서 지내시는 선생님들 많아요."},{label:"한 달 이상은 사정상 절대 안 돼요",type:"bad"}]},{part:"시간편",q:"비행기로 4~5시간 이동해야 해요",options:[{label:"괜찮아요, 문제없어요",type:"good"},{label:"오래 앉아있는 게 좀 힘들어요",type:"mid",solution:"세부, 클락은 공항에서 학원까지 이동시간이 짧아요. 비행 후 빠르게 쉬실 수 있어요."},{label:"의료적으로 장거리 이동이 어려워요",type:"bad"}]},{part:"체력편",q:"현지는 30~35\xb0C 더운 날씨예요",options:[{label:"더운 ê±° 좋아요, 문제없어요",type:"good"},{label:"더위에 좀 약한 편이에요",type:"mid",solution:"바기오는 1년 내내 18~20\xb0C예요. 강원도처럼 선선해서 더위 걱정이 없어요."},{label:"더위 때문에 건강에 문제가 생길 수 있어요",type:"bad"}]},{part:"체력편",q:"하루 4~6시간 앉아서 수업해요",options:[{label:"문제없어요, 거뜬해요",type:"good"},{label:"좀 힘들 것 같긴 해요",type:"mid",solution:"수업 강도는 선택할 수 있어요. 하루 4시간 이하로 가볍게 시작하는 학원도 있어요."},{label:"앉아있는 게 신체적으로 많이 힘들어요",type:"bad"}]}],i=[{emoji:"\uD83C\uDF89",img:"quiz-result-best.png",title:"더할 나위 없이 좋아요!",body:'걱정하실 게 하나도 없어요. 지금 바로 떠나셔도 좋습니다. 매년 비슷한 고민 하셨던 분들이 다녀오고 나서 ê¼­ 이렇게 말씀하세요. "왜 진작 안 갔을까요?"'},{emoji:"✨",img:"quiz-result-2.png",title:"아주 우수해요!",body:"거의 모든 면에서 잘 맞으세요. 사소하게 신경 쓰이는 부분만 챙기면 완벽한 연수가 될 거예요."},{emoji:"\uD83D\uDC4D",img:"quiz-result-3.png",title:"문제없어요!",body:"걱정 안 하셔도 됩니다. 신경 쓰이는 부분도 선생님께 맞게 골라드리면 깔끔하게 해결돼요. 충분히 잘 다녀오실 수 있어요."},{emoji:"\uD83D\uDCAA",img:"quiz-result-can.png",title:"상담으로 충분히 극복할 수 있어요",body:"걱정되는 부분이 있으시죠? 그래도 다 방법이 있어요. 상담 한번 해보시겠어요? 선생님 상황에 맞는 학원과 방법을 바로 찾아드릴게요."},{emoji:"\uD83C\uDF31",img:"quiz-result-prep.png",title:"준비가 더 필요 할 ê±° 같아요.",body:"필리핀 어학연수를 위해서는 지금 당장보다는 조금 더 준비가 더 필요할 것 같아요. 그래도 궁금하신 게 있으면 편하게 연락 주세요."}];function a(e,t){return e>=3?4:e>=1?3:t>=4?2:t>=1?1:0}},9464:function(e,t,r){"use strict";r.d(t,{U:function(){return n},o:function(){return i}});let n=[{id:"cebu",name:"세부",icon:"\uD83C\uDFD6️",iconImg:"region-cebu.png",keyword:"직항 4시간 \xb7 편리한 인프라",img:"https://picsum.photos/seed/cebu-island/600/440",pos:{left:"72%",top:"65%"},good:["인천에서 직항 4시간, 가장 가깝고 편해요","한국 식당\xb7마트가 많아 생활이 편해요","주말에 골프\xb7스노클링 등 즐길거리가 많아요","학원이 많아 선택 폭이 넓어요"],note:["6~10월 우기엔 비가 자주 와요","관광지라 다소 복잡할 수 있어요"],recommend:"처음 가시는 분, 주말 액티비티를 즐기고 싶은 분"},{id:"baguio",name:"바기오",icon:"\uD83C\uDF3F",iconImg:"region-baguio.png",keyword:"더위 걱정 없는 시원함",img:"https://picsum.photos/seed/baguio-hill/600/440",pos:{left:"45%",top:"18%"},good:["1년 내내 18~20\xb0C, 더위 걱정이 없어요","강원도처럼 선선하고 공기가 맑아요","조용해서 공부에 집중하기 좋아요","강사진의 실력이 좋기로 알려져 있어요"],note:["직항편이 없어 마닐라에서 갈아타야 해요 (5~6시간)","산악 지형이라 언덕이 많아요"],recommend:"더위에 약하신 분, 조용히 공부에 집중하고 싶은 분"},{id:"clark",name:"클락",icon:"\uD83C\uDFD9️",iconImg:"region-clark.png",keyword:"한국식 환경 \xb7 직항",img:"https://picsum.photos/seed/clark-town/600/440",pos:{left:"51%",top:"38%"},good:["계획도시라 거리가 깨끗하고 안전해요","공항이 작고 한산해 입국이 빠르고 편해요","한국 마트\xb7식당\xb7병원이 있어 편해요","한국식 환경이라 낯섦이 적어요"],note:["즐길거리가 많지 않아요","날씨가 더운 편이에요"],recommend:"처음 해외 생활이라 걱정되시는 분, 한국식 환경이 필요하신 분"},{id:"iloilo",name:"일로일로",icon:"\uD83C\uDF3E",iconImg:"region-iloilo.png",keyword:"정돈된 교육 신도시",img:"https://picsum.photos/seed/iloilo-city/600/440",pos:{left:"32%",top:"59%"},good:["깔끔하게 정돈된 신도시라 거리가 쾌적해요","교육 도시라 면학 분위기가 잘 잡혀 있어요","물가가 저렴해 부담이 적어요"],note:["직항편이 없어 갈아타야 해서 이동이 길어요","한국 편의시설이 적어요"],recommend:"깔끔하고 차분한 환경에서 공부에 집중하고 싶은 분"},{id:"bacolod",name:"바콜로드",icon:"\uD83C\uDF3B",iconImg:"region-bacolod.png",keyword:"인심 좋은 미소의 도시",img:"https://picsum.photos/seed/bacolod-city/600/440",pos:{left:"58%",to
111p:"57%"},good:["'미소의 도시'로 불릴 만큼 사람들이 친절해요","시골 정취가 남아 정겹고 여유로워요","물가가 저렴해 부담이 적어요"],note:["직항편이 없어 갈아타야 해서 이동이 길어요","즐길거리가 많지 않아요"],recommend:"따뜻한 인심 속에서 정겹고 여유롭게 지내고 싶은 분"},{id:"boracay",name:"보라카이",icon:"\uD83C\uDF0A",iconImg:"region-boracay.png",keyword:"휴양 + 공부",img:"https://picsum.photos/seed/boracay-beach/600/440",pos:{left:"46%",top:"54%"},good:["세계적으로 유명한 아름다운 해변이에요","공부하며 휴양을 함께 즐길 수 있어요","해양 액티비티가 풍부해요"],note:["마닐라 경유 + 보트 이동이라 7~8시간이에요","성수기엔 물가가 올라요"],recommend:"공부와 휴양을 함께 원하시는 분"}],i=[{icon:"\uD83D\uDCB0",iconImg:"why-cost.png",title:"비용 부담이 적어요",desc:"영미권의 3분의 1 비용으로, 학비\xb7숙소\xb7식사까지 모두 포함돼요"},{icon:"\uD83D\uDC68‍\uD83C\uDFEB",iconImg:"why-oneonone.png",title:"1:1 맞춤 수업",desc:"1:1 수업이 중심이라, 내 수준과 속도에 맞춰 입이 트일 때까지 봐드려요"},{icon:"\uD83D\uDDE3️",iconImg:"why-english.png",title:"영어가 공용어예요",desc:"필리핀은 영어가 공용어라, 학원 밖 일상에서도 자연스럽게 영어를 익혀요"},{icon:"✈️",iconImg:"why-flight.png",title:"가깝고 시차가 없어요",desc:"직항 4~5시간, 시차도 1시간이라 몸이 편해요"},{icon:"\uD83C\uDFE0",iconImg:"why-home.png",title:"숙소와 삼시세끼 제공",desc:"기숙사에서 지내고 식사가 나와서, 공부에만 집중하시면 돼요"},{icon:"\uD83C\uDF34",iconImg:"why-resort.png",title:"휴양도 함께 즐겨요",desc:"주말엔 아름다운 바다와 골프, 마사지로 재충전할 수 있어요"}]},6628:function(e,t,r){"use strict";r.d(t,{_:function(){return n}});let n=[{id:"eedu_eco",schoolCode:"EEDU_ECO",name:"A&J e-Edu 에코 캠퍼스",region:"baguio",regionLabel:"바기오",schoolType:"general",minWeeks:1,courses:[{name:"에코 릴렉스",price4Weeks:75e4,currency:"KRW",classDetails:"1:1 3H + 옵션 1H = 총 4H"},{name:"에코 릴렉스 플러스",price4Weeks:85e4,currency:"KRW",classDetails:"1:1 3H + 그룹 2H + 옵션 1H = 총 6H"},{name:"에코 허브",price4Weeks:95e4,currency:"KRW",classDetails:"1:1 4H + 그룹 2H + 옵션 1H = 총 7H"},{name:"에코 스파르타",price4Weeks:125e4,currency:"KRW",classDetails:"1:1 6H + 옵션 1H = 총 7H"},{name:"TEST 코스 (토익/토플/아이엘츠/PTE)",price4Weeks:105e4,currency:"KRW",classDetails:"1:1 4H + 그룹 2H + 옵션 1H = 총 7H"},{name:"토익 보장반",price4Weeks:105e4,currency:"KRW",note:"토익 보장반. 12주 315만원 / 16주 420만원. 4주 환산값 105만원 (12주\xf73 기준).",classDetails:"1:1 4H + 그룹 2H = 총 6H"},{name:"아이엘츠 보장반 (선.후)",price4Weeks:115e4,currency:"KRW",note:"아이엘츠 보장반 (선.후). 12주 345만원 / 20주 575만원 / 24주 690만원. 4주 환산값 115만원 (12주\xf73 기준).",classDetails:"1:1 5H + 그룹 2H = 총 7H"}],dormitories:[{name:"DELUXE 1인실",capacity:1,price4Weeks:155e4,currency:"KRW"},{name:"DELUXE 2인실",capacity:2,price4Weeks:105e4,currency:"KRW"},{name:"DELUXE 3인실",capacity:3,price4Weeks:9e5,currency:"KRW"},{name:"PREMIUM 1인실",capacity:1,price4Weeks:175e4,currency:"KRW"},{name:"PREMIUM 2인실",capacity:2,price4Weeks:125e4,currency:"KRW"},{name:"PREMIUM 스위트",price4Weeks:22e5,currency:"KRW"},{name:"PREMIUM STUDIO 1인실",capacity:1,price4Weeks:175e4,currency:"KRW"},{name:"PREMIUM STUDIO 2인실",capacity:2,price4Weeks:125e4,currency:"KRW"},{name:"PREMIUM STUDIO 3인실",capacity:3,price4Weeks:127e4,currency:"KRW"},{name:"PREMIUM STUDIO 4인실",capacity:4,price4Weeks:12e5,currency:"KRW"},{name:"ECO VILLA 1인실",capacity:1,price4Weeks:24e5,currency:"KRW"},{name:"ECO VILLA 2인실",capacity:2,price4Weeks:14e5,currency:"KRW"},{name:"ECO VILLA 3인실",capacity:3,price4Weeks:127e4,currency:"KRW"}],picks:{lowest:{dorm:"DELUXE 3인실"},recCombo:{course:"에코 릴렉스"}},registrationFee:{note:"등록금 ₩100,000",amount:1e5,currency:"KRW"},surcharges:[{label:"성수기 추가 요금",amountPerWeek:5e4,startDate:"2026-06-29",endDate:"2026-08-22",currency:"KRW",note:"바기오 서차지. 2026.6.29~8.22, 주당 50,000원."}],localFees:[{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"SSP E-CARD",name:"E-CARD",amount:4500,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"ACR I-CARD",name:"I-CARD",amount:4e3,currency:"PHP",chargeUnit:"per_person",trigger:"stay_over_59days",triggerWeeks:9},{category:"비자연장",name:"비자연장비 8주",amount:4940,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:5},{category:"비자연장",name:"비자연장비 12주",amount:11150,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:9},{category:"비자연장",name:"비자연장비 16주",amount:15390,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:13},{category:"비자연장",name:"비자연장비 20주",amount:19630,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:17},{category:"비자연장",name:"비자연장비 24주",amount:23870,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"유틸리티비 (디럭스)",amount:2500,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"전기\xb7수도\xb7관리비",name:"유틸리티비 (프리미엄&에코빌라)",amount:3500,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"전기\xb7수도\xb7관리비",name:"유틸리티비 (스위트)",amount:4e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"전기\xb7수도\xb7관리비",name:"관리유지비 (디럭스)",amount:1e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"전기\xb7수도\xb7관리비",name:"관리유지비 (프리미엄&에코빌라)",amount:1500,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"보증금",name:"보증금 (디럭스)",amount:3e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"보증금",name:"보증금 (프리미엄&에코빌라)",amount:5e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"픽업/샌딩",name:"픽업비",amount:3e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"학생증/사진",name:"학원 아이디 카드비",amount:200,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"교재비",name:"교재비",amount:1e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"}]},{id:"bcebu",schoolCode:"BCEBU",name:"B'CEBU",region:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:1,courses:[{name:"LITE ESL",price4Weeks:85e4,currency:"KRW",note:"1:1수업 4H. 여유있는 수업 스케쥴을 선호하는 시니어 및 보호자.",classDetails:"1:1 4H = 총 4H"},{name:"SPEED ESL",price4Weeks:95e4,currency:"KRW",note:"1:1수업 4H + 그룹수업 2H + 옵션수업 2H. 기초과정부터 고급과정까지, 가장 대표적인 ESL코스.",classDetails:"1:1 4H + 그룹 2H = 총 6H (+ 옵션 2H 선택)"},{name:"B'SPARTA",price4Weeks:115e4,currency:"KRW",note:"1:1수업 5H + 그룹수업 2H + 옵션수업 3H + 의무자습 2H. 하루 12시간의 체계적인 학습 프로그램을 원하는 학생.",classDetails:"1:1 5H + 그룹 2H + 의무자습 2H = 총 9H (+ 옵션 3H 선택)"},{name:"INTENSIVE ESL",price4Weeks:115e4,currency:"KRW",note:"1:1수업 6H + 옵션수업 2H. 집중적인 1:1 수업을 선호하는 학생이나 영어초보 학생.",classDetails:"1:1 6H = 총 6H (+ 옵션 2H 선택)"},{name:"IELTS 기본반",price4Weeks:115e4,currency:"KRW",note:"1:1수업 4H + 그룹수업 2H + 옵션수업 2H. 아이엘츠 공인시험을 본 적 없는 초보자나 기본레벨의 학생.",classDetails:"1:1 4H + 그룹 2H = 총 6H (+ 옵션 2H 선택)"},{name:"BUSINESS",price4Weeks:115e4,currency:"KRW",note:"1:1수업 4H + 그룹수업 2H + 옵션수업 2H. 비지니스 업무에 대한 대화,회의,프리젠테이션스킬을 원하는 학생.",classDetails:"1:1 4H + 그룹 2H = 총 6H (+ 옵션 2H 선택)"},{name:"IELTS 보장반",price4Weeks:125e4,currency:"KRW",note:"1:1수업 4H + 그룹수업 2H + 의무수업 2H. 4.0 이상의 공인점수를 보유중인 학생 (12주 이상 등록가능).",classDetails:"1:1 4H + 그룹 2H + 의무수업 2H = 총 8H"}],dormitories:[{name:"1인실 (막탄뷰)",capacity:1,price4Weeks:175e4,currency:"KRW"},{name:"1인실 (건물뷰)",capacity:1,price4Weeks:165e4,currency:"KRW"},{name:"2인실 리빙",capacity:2,price4Weeks:145e4,currency:"KRW"},{name:"2인실",capacity:2,price4Weeks:105e4,currency:"KRW"},{name:"2+1인실",capacity:1,price4Weeks:1e6,currency:"KRW"},{name:"3인실",capacity:3,price4Weeks:85e4,currency:"KRW"}],picks:{recDorms:["1인실 (건물뷰)","1인실 (막탄뷰)","2인실"]},registrationFee:{note:"등록비 10만원",amount:1e5,currency:"KRW"},surcharges:[{amountPerWeek:5e4,startDate:"2026-07-05",endDate:"2026-08-15",currency:"KRW",note:"서차지는 비수기 프로모션 적용 불가. 서차지 포함 비용에서 학비&기숙사 10% 유학원 할인 가능."}],localFees:[{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person"},{category:"SSP E-CARD",name:"SSP E-CARD",amount:4500,currency:"PHP",chargeUnit:"per_person"},{category:"ACR I-CARD",name:"ACR I-CARD",amount:4e3,currency:"PHP",chargeUnit:"per_person",trigger:"59일 초과 체류자",triggerWeeks:9},{category:"비자연장",name:"비자연장비 (5~8주)",amount:5130,currency:"PHP",chargeUnit:"per_person",trigger:"5주 이상",triggerWeeks:5},{category:"비자연장",name:"비자연장비 (9~12주)",amount:11530,currency:"PHP",chargeUnit:"per_person",trigger:"9주 이상",triggerWeeks:9},{category:"비자연장",name:"비자연장비 (13~16주)",amount:15960,currency:"PHP",chargeUnit:"per_person",trigger:"13주 이상",triggerWeeks:13},{category:"비자연장",name:"비자연장비 (17~20주)",amount:20390,currency:"PHP",chargeUnit:"per_person",trigger:"17주 이상",triggerWeeks:17},{category:"비자연장",name:"비자연장비 (21~24주)",amount:24820,currency:"PHP",chargeUnit:"per_person",trigger:"21주 이상",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"수도/전기세",amount:1e3,currency:"PHP",chargeUnit:"per_week"},{category:"전기\xb7수도\xb7관리비",name:"관리비",amount:500,currency:"PHP",chargeUnit:"per_week"},{category:"보증금",name:"보증금",amount:3e3,currency:"PHP",chargeUnit:"per_person"}
111,{category:"픽업/샌딩",name:"막탄국제공항 픽업",amount:1e3,currency:"PHP",chargeUnit:"per_visit"},{category:"학생증/사진",name:"학생증",amount:200,currency:"PHP",chargeUnit:"per_person"},{category:"교재비",name:"교재비",amount:1e3,currency:"PHP",chargeUnit:"per_person"},{category:"세탁비",name:"세탁비",amount:200,currency:"PHP",chargeUnit:"per_usage"}]},{id:"beci_eop",dormNote:"만 40세부터는 1인실만 사용 가능합니다. 그룹 수업은 최대 6명으로 진행됩니다.",schoolCode:"BECI_THE_CAFE",name:"BECI EOP캠퍼스",region:"baguio",regionLabel:"바기오",schoolType:"general",minWeeks:1,courses:[{name:"Lite ESL (EOP캠퍼스)",classDetails:"1:1 2H + 그룹 2H = 총 4H (+ 야간 2H 선택)",price4Weeks:7e5,currency:"KRW"},{name:"Speed ESL (EOP캠퍼스)",classDetails:"1:1 4H + 그룹 2H = 총 6H (+ 야간 2H 선택)",price4Weeks:9e5,currency:"KRW"},{name:"Sparta ESL (EOP캠퍼스)",classDetails:"1:1 5H + 그룹 2H + 야간 2H(의무) = 총 9H",price4Weeks:1e6,currency:"KRW"}],dormitories:[{name:"마스터 1인실 (EOP)",capacity:1,price4Weeks:14e5,currency:"KRW"},{name:"레귤러 1인실 (EOP)",capacity:1,price4Weeks:12e5,currency:"KRW"},{name:"2인실 (EOP)",capacity:2,price4Weeks:9e5,currency:"KRW"},{name:"3인실 (EOP)",capacity:3,price4Weeks:7e5,currency:"KRW"},{name:"4인실(여자) (EOP)",capacity:4,price4Weeks:6e5,currency:"KRW"}],registrationFee:{amount:0,note:"등록금 별도 명시 없음",currency:"KRW"},surcharges:[{label:"성수기 추가 요금",amountPerWeek:5e4,startDate:"2026-06-29",endDate:"2026-08-22",currency:"KRW",note:"바기오 서차지. 2026.6.29~8.22 (총 8주), 주당 50,000원."}],localFees:[{category:"교재비",name:"교재비",currency:"PHP",amountText:"상담 시 안내"},{category:"픽업/샌딩",name:"픽업비",currency:"PHP",amountText:"상담 시 안내"},{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"SSP E-CARD",name:"SSP E-CARD",amount:4500,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"비자연장",name:"비자연장비 5~8주",amount:4940,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:5},{category:"비자연장",name:"비자연장비 ~12주",amount:11150,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:9},{category:"비자연장",name:"비자연장비 ~16주",amount:15390,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:13},{category:"비자연장",name:"비자연장비 ~20주",amount:19630,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:17},{category:"비자연장",name:"비자연장비 ~24주",amount:23870,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"수도/전기세",amount:3e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"전기\xb7수도\xb7관리비",name:"관리비",amount:1e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"보증금",name:"보증금 (환불가능)",amount:3e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"학생증/사진",name:"학생증",amount:200,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"세탁비",name:"세탁비",amount:1500,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"}]},{id:"beci_city",schoolCode:"BECI_CITY",name:"BECI 시티캠퍼스",region:"baguio",regionLabel:"바기오",schoolType:"general",minWeeks:1,courses:[{name:"Lite ESL (시티캠퍼스)",classDetails:"1:1 2H + 그룹 2H = 총 4H (+ 옵션(야간) 2H 선택)",price4Weeks:7e5,currency:"KRW"},{name:"Native ESL (시티캠퍼스)",classDetails:"1:1 4H(필리핀 3H + 네이티브 1H) + 그룹 2H(필리핀 1H + 네이티브 1H) = 총 6H (+ 나이트옵션 2H 선택)",price4Weeks:1e6,currency:"KRW"},{name:"Unlimited ESL (시티캠퍼스)",classDetails:"1:1 하루 최대 8H = 총 8H (+ 옵션 2H 선택)",price4Weeks:11e5,currency:"KRW"}],dormitories:[{name:"스튜디오 1인실 (시티)",capacity:1,price4Weeks:17e5,currency:"KRW"},{name:"스튜디오 2인실 (시티)",capacity:2,price4Weeks:11e5,
111currency:"KRW"},{name:"스튜디오 4인실 (시티)",capacity:4,price4Weeks:85e4,currency:"KRW"},{name:"세미마스터 1인실 (시티)",capacity:1,price4Weeks:15e5,currency:"KRW"},{name:"세미 1인실 (시티)",capacity:1,price4Weeks:12e5,currency:"KRW"}],registrationFee:{note:"등록금 별도 명시 없음",amount:0,currency:"KRW"},surcharges:[{label:"성수기 추가 요금",amountPerWeek:5e4,startDate:"2026-06-29",endDate:"2026-08-22",currency:"KRW",note:"바기오 서차지. 2026.6.29~8.22 (총 8주), 주당 50,000원."}],localFees:[{category:"픽업/샌딩",name:"픽업비",currency:"PHP",amountText:"마닐라 3,000 / 클락 2,500"},{category:"교재비",name:"교재비 (코스별)",currency:"PHP",amountText:"Lite ESL 1,000 / Speed\xb7Native ESL 1,500 / 24\xb7IELTS\xb7TOEIC\xb7Sparta ESL 2,000"},{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"SSP E-CARD",name:"SSP E-CARD",amount:4500,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"비자연장",name:"비자연장비 5~8주",amount:4940,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:5},{category:"비자연장",name:"비자연장비 ~12주",amount:11150,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:9},{category:"비자연장",name:"비자연장비 ~16주",amount:15390,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:13},{category:"비자연장",name:"비자연장비 ~20주",amount:19630,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:17},{category:"비자연장",name:"비자연장비 ~24주",amount:23870,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"수도/전기세",amount:3e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"전기\xb7수도\xb7관리비",name:"관리비",amount:1e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"보증금",name:"보증금 (환불가능)",amount:3e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"학생증/사진",name:"학생증",amount:200,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"세탁비",name:"세탁비",amount:1500,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"}]},{id:"blue_ocean",schoolCode:"BLUE_OCEAN",name:"CEBU BLUE OCEAN",region:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:1,courses:[{name:"라이트 ESL4",price4Weeks:1e6,currency:"KRW",classDetails:"1:1 4H = 총 4H"},{name:"인텐시브 ESL",price4Weeks:118e4,currency:"KRW",classDetails:"1:1 5H + 4:1 2H = 총 7H"},{name:"파워 ESL5",price4Weeks:113e4,currency:"KRW",note:"2과목 변경가능(상담필요)",classDetails:"1:1 5H = 총 5H"},{name:"파워 ESL7",price4Weeks:138e4,currency:"KRW",note:"2과목 변경가능(상담필요)",classDetails:"1:1 7H = 총 7H"},{name:"서바이벌 ESL (최대 4주)",price4Weeks:128e4,currency:"KRW",note:"선생님과 씨티투어 1회, 액티비티 1회 비용포함",classDetails:"1:1 4H + 4:1 2H = 총 6H"},{name:"비즈니스",price4Weeks:138e4,currency:"KRW",classDetails:"1:1 5H + 그룹 2H(5~6:1) = 총 7H"},{name:"토익",price4Weeks:12e5,currency:"KRW",classDetails:"1:1 5H + 4:1 2H = 총 7H"},{name:"아이엘츠",price4Weeks:133e4,currency:"KRW",classDetails:"1:1 5H + 4:1 2H = 총 7H"},{name:"부모 코스",price4Weeks:88e4,currency:"KRW",note:"보호자 코스 1시간 자녀에게 양도 가능",classDetails:"1:1 3H = 총 3H"}],dormitories:[{name:"2인실 오션뷰 (내부/EGI)",capacity:2,price4Weeks:123e4,currency:"KRW"},{name:"2인실 씨티뷰 (내부/EGI)",capacity:2,price4Weeks:96e4,currency:"KRW"},{name:"3인실 오션뷰 (내부/EGI)",capacity:3,price4Weeks:91e4,currency:"KRW"},{name:"1인실 오션뷰 (Ocean Suites)",capacity:1,price4Weeks:18e5,currency:"KRW"},{name:"1인실 디럭스 (Ocean Suites)",capacity:1,price4Weeks:16e5,currency:"KRW"},{name:"1인실 슈페리얼 (Ocean Suites)",capacity:1,price4Weeks:14e5,currency:"KRW"},{name:"디럭스 커플룸 (Ocean Suites)",capacity:2,price4Weeks:96e4,currency:"KRW"}],registrationFee:{currency:"KRW",amount:1e5,note:"등록비 10만원"},surcharges:[{amountPerWeek:5e4,startDate:"2026-06-29",endDate:"2026-08-22",currency:"KRW",note:"서차지 포함 비용에서 학비&기숙사 10% 유학원 할인 가능."}],localFees:[{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person"},{category:"SSP",name:"SSP I-CARD",amount:4500,currency:"PHP",chargeUnit:"per_person"},{category:"ACR I-CARD",name:"ACR I-CARD",amount:4e3,currency:"PHP",chargeUnit:"per_person",trigger:"59일 초과",triggerWeeks:9},{category:"비자연장",name:"비자연장 1차 (5~8주)",amount:5140,currency:"PHP",chargeUnit:"per_person",triggerWeeks:5},{category:"비자연장",name:"비자연장 2차 (12주 이하)",amount:11550,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"비자연장 3차 (16주 이하)",amount:15990,currency:"PHP",chargeUnit:"per_person",triggerWeeks:13},{category:"비자연장",name:"비자연장 4차 (20주 이하)",amount:20430,currency:"PHP",chargeUnit:"per_person",triggerWeeks:17},{category:"비자연장",name:"비자연장 5차 (24주 이하)",amount:24870,currency:"PHP",chargeUnit:"per_person",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"관리비",amount:500,currency:"PHP",chargeUnit:"per_week"},{category:"보증금",name:"보증금",amount:1e3,currency:"PHP",chargeUnit:"per_week"},{category:"픽업/샌딩",name:"Sending Fee",amount:1e3,currency:"PHP",chargeUnit:"per_visit"},{category:"픽업/샌딩",name:"픽업비",amount:1200,currency:"PHP",chargeUnit:"per_person"},{category:"학생증/사진",name:"아이디 카드",amount:300,currency:"PHP",chargeUnit:"per_person"},{category:"교재비",name:"교재비",amount:1500,currency:"PHP",chargeUnit:"per_4weeks"},{category:"세탁비",name:"세탁+건조",amount:200,currency:"PHP",chargeUnit:"per_usage"}]},{id:"cella_uni",schoolCode:"CELLA_UNI",name:"CELLA 유니 스파르타 캠퍼스",region:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:1,courses:[{name:"스파르타 파워스피킹 1",price4Weeks:11e5,
111currency:"KRW",classDetails:"1:1 4타임 + 그룹 4타임 = 총 8타임"},{name:"스파르타 파워스피킹 2",price4Weeks:13e5,currency:"KRW",classDetails:"1:1 6타임 + 그룹 2타임 = 총 8타임"},{name:"토익 입문반",price4Weeks:13e5,currency:"KRW",classDetails:"1:1 4H + ESL그룹 4H(Prep) = 총 8H"},{name:"토익 집중반",price4Weeks:145e4,currency:"KRW",classDetails:"1:1 4H + TOEIC그룹 4H(Int) = 총 8H"},{name:"아이엘츠 입문반",price4Weeks:13e5,currency:"KRW",classDetails:"1:1 4H + ESL그룹 4H(Prep) = 총 8H"},{name:"아이엘츠 집중반",price4Weeks:145e4,currency:"KRW",classDetails:"1:1 4H + IELTS그룹 4H(Int) = 총 8H"},{name:"아이엘츠 보장반 (12주)",price4Weeks:17e5,currency:"KRW",note:"12주 등록 필수",classDetails:"1:1 6H + IELTS그룹 2H = 총 8H"},{name:"테솔 (TESOL)",price4Weeks:185e4,currency:"KRW",note:"등록 전 온라인 인터뷰 통과 필수. 시작일: 1/4, 2/1, 3/1, 3/29, 4/26, 5/24, 6/21, 7/19, 8/16, 9/13, 10/11, 11/8 (2026)",classDetails:"2:8 6타임 + E-Learning 2타임 = 총 8타임"}],dormitories:[{name:"유니 1인실",capacity:1,price4Weeks:135e4,currency:"KRW"},{name:"유니 2인실",capacity:2,price4Weeks:1e6,currency:"KRW"},{name:"유니 3인실",capacity:3,price4Weeks:85e4,currency:"KRW"},{name:"유니 4인실",capacity:4,price4Weeks:75e4,currency:"KRW"},{name:"JDN 외부 1인실",capacity:1,price4Weeks:135e4,currency:"KRW"},{name:"JDN 외부 2인실",capacity:2,price4Weeks:1e6,currency:"KRW"},{name:"JDN 외부 3인실",capacity:3,price4Weeks:85e4,currency:"KRW"}],registrationFee:{currency:"KRW",amount:1e5,note:"등록금 10만원 별도"},surcharges:[{amountPerWeek:5e4,startDate:"2026-07-05",endDate:"2026-08-30",currency:"KRW",note:"서차지 포함 비용에서 학비&기숙사 10% 유학원 할인 가능."}],localFees:[{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person"},{category:"SSP E-CARD",name:"SSP E-CARD",amount:4500,currency:"PHP",chargeUnit:"per_person"},{category:"ACR I-CARD",name:"ACR I-Card",amount:4e3,currency:"PHP",chargeUnit:"per_person",trigger:"59일이상 체류자",triggerWeeks:9},{category:"비자연장",name:"비자연장 1차 (5~8주)",amount:5140,currency:"PHP",chargeUnit:"per_person",triggerWeeks:5},{category:"비자연장",name:"비자연장 2차 (9~12주)",amount:11550,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"비자연장 3차~ (추가 1달씩)",amount:4440,currency:"PHP",chargeUnit:"per_person",triggerWeeks:13},{category:"전기\xb7수도\xb7관리비",name:"전기세",amount:500,currency:"PHP",chargeUnit:"per_week"},{category:"전기\xb7수도\xb7관리비",name:"수도세",amount:300,currency:"PHP",chargeUnit:"per_week"},{category:"전기\xb7수도\xb7관리비",name:"관리비",amount:1e3,currency:"PHP",chargeUnit:"per_week"},{category:"보증금",name:"보증금",amountByWeeks:{4:5e3,8:5e3,12:8e3},currency:"PHP"},{category:"픽업/샌딩",name:"픽업",amount:1200,currency:"PHP",chargeUnit:"per_person"},{category:"학생증/사진",name:"학생증",amount:200,currency:"PHP",chargeUnit:"per_person"},{category:"교재비",name:"교재 (권당)",amount:200,currency:"PHP",chargeUnit:"per_person"}]},{id:"cella_premium",schoolCode:"CELLA_PREMIUM",name:"CELLA 프리미엄 캠퍼스",region:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:1,courses:[{name:"라이트 ESL (오전/오후)",price4Weeks:95e4,currency:"KRW",note:"개별 명시가 기준(합산표 85만 상당이나 개별가 우선)",classDetails:"1:1 3H + 그룹 1H(오전/오후 택1) = 총 4H"},{name:"파워스피킹 1",price4Weeks:11e5,currency:"KRW",note:"개별 명시가 기준",classDetails:"1:1 4H + 그룹 4H(기본 코스) = 총 8H"},{name:"파워스피킹 2",price4Weeks:13e5,currency:"KRW",note:"개별 명시가 기준",classDetails:"1:1 6H + 그룹 2H(단기 집중) = 총 8H"},{name:"오픽(OPIC) 입문반",price4Weeks:13e5,currency:"KRW",classDetails:"1:1 4H + ESL 그룹 4H = 총 8H"},{name:"오픽(OPIC) 집중반",price4Weeks:145e4,currency:"KRW",classDetails:"1:1 4H + 오픽 그룹 4H = 총 8H"},{name:"비즈니스(BPE) 입문반",price4Weeks:13e5,currency:"KRW",classDetails:"1:1 3H + 그룹 4H = 총 7H"},{name:"비즈니스(BPE) 집중반",price4Weeks:145e4,currency:"KRW",classDetails:"1:1 3H + 그룹 4H = 총 7H"},{name:"익스프레서(EXP) 단기보장코스",price4Weeks:11e5,
111currency:"KRW",note:"단기 수업 보장. 1~4주 전용. 합산표 역산가(110만) 적용, 명시 단가 본사확인 필요",classDetails:"1:1 9H + 그룹 1H = 총 10H"}],dormitories:[{name:"1인실 (프리미엄 내부)",capacity:1,price4Weeks:165e4,currency:"KRW"},{name:"세미 1인실 (내부)",capacity:1,price4Weeks:135e4,currency:"KRW"},{name:"2인실 (내부)",capacity:2,price4Weeks:12e5,currency:"KRW"},{name:"4인실 (내부)",capacity:4,price4Weeks:85e4,currency:"KRW"},{name:"6인실 (내부)",capacity:6,price4Weeks:65e4,currency:"KRW"},{name:"외부 ALICIA 1인실",capacity:1,price4Weeks:165e4,currency:"KRW"}],registrationFee:{currency:"KRW",amount:1e5,note:"등록금 10만원 별도"},surcharges:[{amountPerWeek:2e5,startDate:"2026-12-20",endDate:"2027-01-02",currency:"KRW",note:"가족연수 패키지 대상. 주당 20만원"},{amountPerWeek:5e4,startDate:"2026-07-05",endDate:"2026-08-30",currency:"KRW",note:"서차지 포함 비용에서 학비&기숙 10% 유학원 할인 가능"}],localFees:[{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person"},{category:"SSP E-CARD",name:"SSP E-Card",amount:4500,currency:"PHP",chargeUnit:"per_person"},{category:"ACR I-CARD",name:"ACR I-Card(59일↑)",amount:4e3,currency:"PHP",chargeUnit:"per_person"},{category:"비자연장",name:"비자연장 1차(5~8주)",amount:5140,currency:"PHP",chargeUnit:"per_person",triggerWeeks:5},{category:"비자연장",name:"비자연장 2차(9~12주)",amount:6410,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"비자연장 3차(13~16주)",amount:4440,currency:"PHP",chargeUnit:"per_person",triggerWeeks:13},{category:"전기\xb7수도\xb7관리비",name:"전기세",amount:500,currency:"PHP",chargeUnit:"per_week"},{category:"전기\xb7수도\xb7관리비",name:"수도세",amount:300,currency:"PHP",chargeUnit:"per_week"},{category:"전기\xb7수도\xb7관리비",name:"관리비",amount:1e3,currency:"PHP",chargeUnit:"per_week"},{category:"보증금",name:"보증금",amount:8e3,currency:"PHP",chargeUnit:"per_person"},{category:"픽업/샌딩",name:"픽업비",amount:1200,currency:"PHP",chargeUnit:"per_person"},{category:"학생증/사진",name:"학생증",amount:200,currency:"PHP",chargeUnit:"per_person"},{category:"교재비",name:"교재비 (권당 200~600)",amount:400,currency:"PHP",chargeUnit:"per_person"}]},{id:"cg_banilad",schoolCode:"CG_BANILAD",name:"CG (Banilad 캠퍼스)",region:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:1,courses:[{name:"Semi-Sparta (ESL)",price4Weeks:95e4,currency:"KRW",classDetails:"1:1 4H + 1:4 4H = 총 8H (+ Optional 2H 선택)"},{name:"Premier Semi-Sparta (ESL)",price4Weeks:1e6,currency:"KRW",classDetails:"1:1 5H + 1:4 3H = 총 8H"},{name:"Light (ESL)",price4Weeks:8e5,currency:"KRW",note:"개별 명시가 기준 (합산표는 75만 상당이나 개별가 우선)",classDetails:"1:1 4H = 총 4H (+ Optional 2H 선택)"},{name:"General (ESL)",price4Weeks:85e4,currency:"KRW",classDetails:"1:1 4H + 1:4 2H = 총 6H (+ Optional 2H 선택)"},{name:"Intensive (ESL)",price4Weeks:9e5,currency:"KRW",classDetails:"1:1 5H + 1:4 1H = 총 6H (+ Optional 2H 선택)"},{name:"Power (ESL)",price4Weeks:95e4,currency:"KRW",classDetails:"1:1 6H = 총 6H (+ Optional 2H 선택)"},{name:"IELTS Basic",price4Weeks:1e6,currency:"KRW",classDetails:"1:1 4H(IELTS 2+ESL 2) + 1:4 4H(IELTS 2+ESL 2) = 총 8H (+ Optional 2H 선택)"},{name:"TOEIC Course",price4Weeks:1e6,currency:"KRW",classDetails:"1:1 4H(TOEIC 2+ESL 2) + 1:4 4H(TOEIC 2+ESL 그룹수업) = 총 8H (+ Optional 2H 선택)"},{name:"Business English",price4Weeks:1e6,currency:"KRW",classDetails:"1:1 4H(Business 2+ESL 2) + 1:4 4H(Native 2+ESL 2) = 총 8H (+ Optional 2H 선택)"}],dormitories:[{name:"1인실 (내부)",capacity:1,price4Weeks:115e4,currency:"KRW"},{name:"2인실 (내부)",capacity:2,price4Weeks:9e5,currency:"KRW"},{name:"3인실 (내부)",capacity:3,price4Weeks:8e5,currency:"KRW"},{name:"4인실 (내부)",capacity:4,price4Weeks:75e4,currency:"KRW"},{name:"외부 Alicia 1인실",capacity:1,price4Weeks:16e5,currency:"KRW"}
111,{name:"외부 Alicia 2인실",capacity:2,price4Weeks:11e5,currency:"KRW"},{name:"외부 Alicia 3인실",capacity:3,price4Weeks:1e6,currency:"KRW"},{name:"외부 Alicia 4인실",capacity:4,price4Weeks:95e4,currency:"KRW"},{name:"외부 88th Avenue 1인실",capacity:1,price4Weeks:18e5,currency:"KRW"},{name:"외부 88th Avenue 2인실",capacity:2,price4Weeks:13e5,currency:"KRW"},{name:"외부 88th Avenue 3인실",capacity:3,price4Weeks:12e5,currency:"KRW"},{name:"외부 88th Avenue 4인실",capacity:4,price4Weeks:11e5,currency:"KRW"},{name:"외부 M&J Pension 1인실",capacity:1,price4Weeks:13e5,currency:"KRW"}],registrationFee:{currency:"KRW",amount:1e5,note:"등록금 10만원 (환불불가)"},surcharges:[{amountPerWeek:5e4,startDate:"2026-07-05",endDate:"2026-08-30",currency:"KRW",note:"서차지 포함 비용에서 학비&기숙사 10% 유학원 할인 가능."}],localFees:[{category:"SSP",name:"SSP (Special Study Permit)",amount:7800,currency:"PHP",chargeUnit:"per_person"},{category:"SSP E-CARD",name:"E-Card (SSP)",amount:4500,currency:"PHP",chargeUnit:"per_person"},{category:"ACR I-CARD",name:"ACR I-CARD",amount:4500,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"비자연장 1차 (5~8주)",amount:5160,currency:"PHP",chargeUnit:"per_person",triggerWeeks:5},{category:"비자연장",name:"비자연장 2차 (9~12주)",amount:6390,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"비자연장 3차 (13~16주)",amount:4460,currency:"PHP",chargeUnit:"per_person",triggerWeeks:13},{category:"전기\xb7수도\xb7관리비",name:"관리비",amount:2e3,currency:"PHP",chargeUnit:"per_4weeks"},{category:"전기\xb7수도\xb7관리비",name:"공용 전기세",amount:4e3,currency:"PHP",chargeUnit:"per_4weeks"},{category:"전기\xb7수도\xb7관리비",name:"수도세",amount:500,currency:"PHP",chargeUnit:"per_4weeks"},{category:"보증금",name:"보증금",amount:1e3,currency:"PHP",chargeUnit:"per_4weeks"},{category:"픽업/샌딩",name:"픽업비",amount:1200,currency:"PHP",chargeUnit:"per_person"},{category:"교재비",name:"교재비 (권당 250~450)",amount:350,currency:"PHP",chargeUnit:"per_person"}]},{id:"cg_sparta",schoolCode:"CG_SPARTA",name:"CG (Sparta 캠퍼스)",region:"cebu",regionLabel:"세부",schoolType:"sparta",minWeeks:1,courses:[{name:"Sparta (ESL)",price4Weeks:95e4,currency:"KRW",classDetails:"1:1 4H + 1:4 4H + Voca Test&Essay 1H + 의무자율 2H = 총 11H (+ Evening(문법/TOEIC L/IELTS L 또는 Self) 선택)"},{name:"Premier Sparta (ESL)",price4Weeks:1e6,currency:"KRW",classDetails:"1:1 5H + 1:4 3H + Voca&Essay 1H + 의무자율 2H = 총 11H"},{name:"TOEIC",price4Weeks:1e6,currency:"KRW",classDetails:"1:1 4H(TOEIC 2+ESL 2) + 1:4 4H(TOEIC 2+ESL 2) + 의무자율 2H = 총 10H"},{name:"TOEIC Premier",price4Weeks:105e4,currency:"KRW",classDetails:"1:1 5H(TOEIC 3+ESL 2) + 1:4 3H(TOEIC 2+ESL 1) + 의무자율 2H = 총 10H"},{name:"IELTS Basic",price4Weeks:1e6,currency:"KRW",classDetails:"1:1 4H(IELTS 2+ESL 2) + 1:4 4H(IELTS 2+ESL 2) + 의무자율 2H = 총 10H"},{name:"IELTS Intensive",price4Weeks:11e5,currency:"KRW",classDetails:"1:1 4H(S/W/R/Grammar) + 소그룹 4H(IELTS Listening 2+Speaking 2) + IELTS Voca 1H + 의무자율 2H = 총 11H"},{name:"IELTS Guarantee",price4Weeks:125e4,currency:"KRW",note:"기본 12주 코스",classDetails:"1:1 4H(S/W/R/G) + 소그룹 4H(Listening\xb7IELTS Prep) + IELTS Voca 1H + 의무자율 2H = 총 11H"},{name:"Business English",price4Weeks:1e6,currency:"KRW",classDetails:"1:1 4H(Business 2+ESL 2) + 1:4 4H(Native 2+ESL 2) + 의무자율 2H = 총 10H"}],dormitories:[{name:"1인실 (내부)",capacity:1,price4Weeks:105e4,currency:"KRW"},{name:"2인실 (내부)",capacity:2,price4Weeks:9e5,currency:"KRW"},{name:"3인실 (내부)",capacity:3,price4Weeks:8e5,currency:"KRW"},{name:"4인실 (내부)",capacity:4,price4Weeks:75e4,currency:"KRW"},{name:"외부 Alicia 1인실",capacity:1,price4Weeks:16e5,currency:"KRW"},{name:"외부 Alicia 2인실",capacity:2,price4Weeks:11e5,currency:"KRW"},{name:"외부 Alicia 3인실",capacity:3,price4Weeks:1e6,currency:"KRW"},{name:"외부 Alicia 4인실",capacity:4,price4Weeks:95e4,currency:"KRW"},{name:"외부 88th Avenue 1인실",capacity:1,price4Weeks:18e5,currency:"KRW"},{name:"외부 88th Avenue 2인실",capacity:2,price4Weeks:13e5,currency:"KRW"},{name:"외부 88th Avenue 3인실",capacity:3,price4Weeks:12e5,currency:"KRW"},{name:"외부 88th Avenue 4인실",capacity:4,price4Weeks:11e5,
111currency:"KRW"},{name:"외부 M&J Pension 1인실",capacity:1,price4Weeks:13e5,currency:"KRW"}],registrationFee:{amount:1e5,note:"등록금 10만원 (환불불가)",currency:"KRW"},surcharges:[{amountPerWeek:5e4,startDate:"2026-07-05",endDate:"2026-08-30",currency:"KRW",note:"서차지 포함 비용에서 학비&기숙사 10% 유학원 할인 가능."}],localFees:[{category:"SSP",name:"SSP (Special Study Permit)",amount:7800,currency:"PHP",chargeUnit:"per_person"},{category:"SSP E-CARD",name:"E-Card (SSP)",amount:4500,currency:"PHP",chargeUnit:"per_person"},{category:"ACR I-CARD",name:"ACR I-Card",amount:4500,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"픽업/샌딩",name:"픽업비",currency:"PHP",amountText:"상담 시 안내"},{category:"비자연장",name:"비자연장 1차 (5~8주)",amount:5160,currency:"PHP",chargeUnit:"per_person",triggerWeeks:5},{category:"비자연장",name:"비자연장 2차 (9~12주)",amount:11550,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"비자연장 3차 (13~16주)",amount:4460,currency:"PHP",chargeUnit:"per_person",triggerWeeks:13},{category:"전기\xb7수도\xb7관리비",name:"관리비",amount:2e3,currency:"PHP",chargeUnit:"per_4weeks"},{category:"전기\xb7수도\xb7관리비",name:"공용 전기세",amountByWeeks:{4:2e3,8:4e3,12:6e3},currency:"PHP"},{category:"전기\xb7수도\xb7관리비",name:"수도세",amount:500,currency:"PHP",chargeUnit:"per_4weeks"},{category:"보증금",name:"보증금",amount:1e3,currency:"PHP",chargeUnit:"per_4weeks"},{category:"픽업/샌딩",name:"픽업비",amount:1200,currency:"PHP",chargeUnit:"per_visit"},{category:"교재비",name:"교재비",amount:350,currency:"PHP",chargeUnit:"per_usage"}]},{id:"cia",schoolCode:"CIA",name:"CIA (Cebu International Academy)",region:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:1,courses:[{name:"ESL Regular",price4Weeks:9e5,currency:"KRW",classDetails:"1:1 4H + 소 1H + 중 1H + 대 1H + Self-Writing 1H + Self-Study 1H = 총 9교시 (+ 옵션(Elective) 1H 선택)"},{name:"ESL Intensive",price4Weeks:1e6,currency:"KRW",classDetails:"1:1 5H + 소 1H + 중 1H + Self-Writing 1H + Self-Study 1H = 총 9H (+ 옵션 1H 선택)"},{name:"ESL Power Intensive",price4Weeks:11e5,currency:"KRW",classDetails:"1:1 6H + 소 1H + Self-Writing 1H + Self-Study 1H = 총 9H (+ 옵션 1H 선택)"},{name:"Certified University",price4Weeks:1e6,currency:"KRW",classDetails:"1:1 4H + 소 1H + 중 1H + 대 1H + Self-Writing 1H + Self-Study 1H = 총 9H (+ 옵션 1H 선택)"},{name:"Callan Method",price4Weeks:105e4,currency:"KRW",classDetails:"1:1 5H + 소 1H + 중 1H + Self-Writing 1H + Self-Study 1H = 총 9H (+ 옵션 1H 선택)"},{name:"TOEIC (Pre/Regular/Guarantee)",price4Weeks:1e6,currency:"KRW",classDetails:"1:1 4H + 소 1H + 중 2H + Self-Writing 1H(Self Reading) + Self-Study 1H = 총 9H (+ 옵션 1H 선택)"},{name:"IELTS (Pre/Regular/Guarantee)",price4Weeks:115e4,currency:"KRW",classDetails:"1:1 4H + 소 1H + 중 2H + Self-Writing 1H + Self-Study 1H = 총 9H (+ 옵션 1H 선택)"},{name:"Business Course",price4Weeks:105e4,currency:"KRW",classDetails:"1:1 5H + 소 1H + 중 1H + Self-Writing 1H + Self-Study 1H = 총 9H (+ 옵션 1H 선택)"}],dormitories:[{name:"Premium Single",capacity:1,price4Weeks:19e5,currency:"KRW"},{name:"Standard Single",capacity:1,price4Weeks:17e5,currency:"KRW"},{name:"Twin",capacity:2,price4Weeks:125e4,currency:"KRW"},{name:"Triple",capacity:3,price4Weeks:105e4,currency:"KRW"},{name:"Quad",capacity:4,price4Weeks:9e5,currency:"KRW"},{name:"Suite Single",capacity:1,price4Weeks:29e5,currency:"KRW"},{name:"Suite Twin",capacity:2,price4Weeks:17e5,currency:"KRW"},{name:"Suite Triple",capacity:3,price4Weeks:14e5,currency:"KRW"},{name:"Suite Quad",capacity:4,price4Weeks:12e5,currency:"KRW"},{name:"Pinnacle Single",capacity:1,price4Weeks:19e5,currency:"KRW"}],picks:{recCombo:{course:"ESL Regular",dorm:"Standard Single"}},registrationFee:{note:"등록금 10만원",amount:1e5,currency:"KRW"},surcharges:[{amountPerWeek:5e4,startDate:"2026-06-14",endDate:"2026-08-08",currency:"KRW",note:"서차지 포함 비용에서 학비&기숙사 10% 유학원 할인 가능."},{amountPerWeek:5e4,startDate:"2027-01-18",endDate:"2027-02-14",currency:"KRW"}],localFees:[{category:"SSP",name:"SSP",amount:8e3,currency:"PHP",chargeUnit:"per_person"},{category:"SSP E-CARD",name:"SSP E-CARD",amount:4500,currency:"PHP",chargeUnit:"per_person"},{category:"ACR I-CARD",name:"I-CARD",amount:4500,currency:"PHP",chargeUnit:"per_person",trigger:"8주 초과",triggerWeeks:9},{category:"비자연장",name:"비자연장 1차 (8주)",amount:5130,currency:"PHP",chargeUnit:"per_person",triggerWeeks:5},{category:"비자연장",name:"비자연장 2차 (12주)",amount:11540,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"비자연장 3차 (16주)",amount:16080,currency:"PHP",chargeUnit:"per_person",triggerWeeks:13},{category:"비자연장",name:"비자연장 4차 (20주)",amount:20620,currency:"PHP",chargeUnit:"per_person",triggerWeeks:17},{category:"비자연장",name:"비자연장 5차 (24주)",amount:25160,currency:"PHP",chargeUnit:"per_person",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"종합관리비",amount:1e3,currency:"PHP",chargeUnit:"per_week"},{category:"전기\xb7수도\xb7관리비",name:"전기세",amount:500,currency:"PHP",chargeUnit:"per_week"},{category:"전기\xb7수도\xb7관리비",name:"수도세",amount:250,currency:"PHP",chargeUnit:"per_week"},{category:"보증금",name:"보증금",amount:2500,currency:"PHP",chargeUnit:"per_person"}
111,{category:"픽업/샌딩",name:"공항 픽업/샌딩",amount:1e3,currency:"PHP",chargeUnit:"per_visit"},{category:"학생증/사진",name:"ID CARD / 사진비",amount:200,currency:"PHP",chargeUnit:"per_person"},{category:"교재비",name:"교재비",amount:2e3,currency:"PHP",chargeUnit:"per_person"}]},{id:"cij",schoolCode:"CIJ",name:"CIJ Academy & School",region:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:1,courses:[{name:"ESL 4",price4Weeks:8e5,currency:"KRW",classDetails:"1:1 4H = 총 4H"},{name:"General ESL",price4Weeks:9e5,currency:"KRW",classDetails:"1:1 4H + 그룹 2H = 총 6H"},{name:"Basic Speaking",price4Weeks:1e6,currency:"KRW",classDetails:"1:1 4H + 소그룹 3H + 대그룹 1H + 자습 1H = 총 9H"},{name:"Power Speaking",price4Weeks:105e4,currency:"KRW",classDetails:"1:1 5H + 소그룹 2H + 대그룹 1H + 자습 1H = 총 9H"},{name:"Sparta 5",price4Weeks:105e4,currency:"KRW",classDetails:"1:1 5H + 소그룹 2H + 대그룹 1H + 자습 1H + 보카테스트 2H = 총 11H"},{name:"Sparta 6",price4Weeks:12e5,currency:"KRW",classDetails:"1:1 6H + 소그룹 2H + 대그룹 1H + 자습 1H + 보카테스트 2H = 총 12H"},{name:"IELTS Basic",price4Weeks:125e4,currency:"KRW",classDetails:"1:1 5H + 소그룹 3H + 대그룹 1H + 자습 1H + 보카테스트 2H = 총 12H"}],dormitories:[{name:"내부(릴로안) 1인실",capacity:1,price4Weeks:135e4,currency:"KRW"},{name:"내부(릴로안) 2인실",capacity:2,price4Weeks:105e4,currency:"KRW"},{name:"내부(릴로안) 3인실(가족)",capacity:3,price4Weeks:95e4,currency:"KRW"},{name:"내부(릴로안) 4인실(가족)",capacity:4,price4Weeks:9e5,currency:"KRW"},{name:"외부(프리미엄) 1인실",capacity:1,price4Weeks:145e4,currency:"KRW"},{name:"외부(프리미엄) 2인실",capacity:2,price4Weeks:115e4,currency:"KRW"},{name:"외부(프리미엄) 3인실(가족)",capacity:3,price4Weeks:11e5,currency:"KRW"},{name:"외부(프리미엄) 4인실(가족)",capacity:4,price4Weeks:105e4,currency:"KRW"}],registrationFee:{amount:15e4,note:"입학금 15만원",currency:"KRW"},surcharges:[],localFees:[{category:"기타",name:"특파원 참가비",currency:"KRW",amountByWeeks:{4:1e5,8:15e4,12:15e4}},{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person"},{category:"SSP E-CARD",name:"SSP E-Card",amount:4500,currency:"PHP",chargeUnit:"per_person"},{category:"ACR I-CARD",name:"ACR-I Card",amount:4500,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"비자연장 1차 (5~8주)",amount:5130,currency:"PHP",chargeUnit:"per_person",triggerWeeks:5},{category:"비자연장",name:"비자연장 2차 (9~12주 누적)",amount:11540,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"비자연장 3차 (13~16주)",amount:4540,currency:"PHP",chargeUnit:"per_person",triggerWeeks:13},{category:"비자연장",name:"비자연장 4차 (17~20주)",amount:4540,currency:"PHP",chargeUnit:"per_person",triggerWeeks:17},{category:"비자연장",name:"비자연장 5차 (21~24주)",amount:4540,currency:"PHP",chargeUnit:"per_person",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"Electricity",amount:500,currency:"PHP",chargeUnit:"per_week"},{category:"전기\xb7수도\xb7관리비",name:"Water",amount:300,currency:"PHP",chargeUnit:"per_week"},{category:"전기\xb7수도\xb7관리비",name:"Utility Fee",amount:1e3,currency:"PHP",chargeUnit:"per_week"},{category:"보증금",name:"Deposit",amount:3e3,currency:"PHP",chargeUnit:"per_person"},{category:"픽업/샌딩",name:"Pick-up Fee",amount:1500,currency:"PHP",chargeUnit:"per_person"},{category:"픽업/샌딩",name:"Send-off Fee",amount:1500,currency:"PHP",chargeUnit:"per_visit"},{category:"학생증/사진",name:"ID Card Fee",amount:350,currency:"PHP",chargeUnit:"per_person"},{category:"학생증/사진",name:"Picture Fee",amount:150,currency:"PHP",chargeUnit:"per_person"},{category:"교재비",name:"Textbook (보증금에서 차감)",amount:150,currency:"PHP",chargeUnit:"per_person"}]},{id:"cns_senior_camp",schoolCode:"CNS_SENIOR_CAMP",name:"CNS 시니어 캠프",region:"baguio",regi
111onLabel:"바기오",schoolType:"camp",minWeeks:4,courses:[],dormitories:[],registrationFee:{currency:"KRW",amount:0,note:"패키지에 포함"},surcharges:[],localFees:[],packages:[{name:"CNS 시니어 캠프 (4기~7기)",weeks:4,price:38e5,allInclusive:!0,includes:"입학금, 숙식비(숙소, 3식, 청소, 빨래, 전기 및 수도세), 영어 수업료, 주말 및 주중 여행경비, 여행자 보험, SSP 발급비, 교재비, 픽업/샌딩비",note:"기수별 4주 과정. 기숙사 2인 1실 기본. 1인실 변경 시 40만원 추가. 각 기수별 15명 선착순 마감."}]},{id:"cns",schoolCode:"CNS",name:"CNS 어학원 (Choice and Success)",region:"baguio",regionLabel:"바기오",schoolType:"general",minWeeks:2,courses:[{name:"시니어 Light",classDetails:"1:1 3H + 옵션그룹 1H = 총 4H",price4Weeks:8e5,currency:"KRW"},{name:"시니어 Standard",classDetails:"1:1 4H + 옵션그룹 1H = 총 5H",price4Weeks:95e4,currency:"KRW"},{name:"시니어 Elite",classDetails:"1:1 5H + 옵션그룹 1H = 총 6H",price4Weeks:11e5,currency:"KRW"}],dormitories:[{name:"프리미엄 1인실",capacity:1,price4Weeks:16e5,currency:"KRW"},{name:"스텐다드 1인실",capacity:1,price4Weeks:14e5,currency:"KRW"},{name:"세미 1인실",capacity:1,price4Weeks:11e5,currency:"KRW"}],registrationFee:{amount:1e5,note:"등록금 ₩100,000",currency:"KRW"},surcharges:[{label:"성수기 추가 요금",amountPerWeek:5e4,startDate:"2026-06-29",endDate:"2026-08-22",currency:"KRW",note:"바기오 서차지. 2026.6.29~8.22, 주당 50,000원."}],localFees:[{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"SSP E-CARD",name:"SSP E-CARD",amount:4500,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"비자연장",name:"비자연장비 5~8주",amount:4940,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:5},{category:"비자연장",name:"비자연장비 9~12주",amount:11150,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:9},{category:"비자연장",name:"비자연장비 13~16주",amount:15390,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:13},{category:"전기\xb7수도\xb7관리비",name:"전기/수도세",amount:2500,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"전기\xb7수도\xb7관리비",name:"관리비",amount:1e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"보증금",name:"보증금 (환불가능)",amount:3e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"학생증/사진",name:"학생증",amount:200,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"세탁비",name:"세탁비",amount:1e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"교재비",name:"교재비",currency:"PHP",amountText:"₱700~1,100 (코스 상이)"},{category:"픽업/샌딩",name:"단체 픽업비",currency:"PHP",amountText:"₱2,500~3,000 (공항 상이)"}]},{id:"cpi",schoolCode:"CPI",name:"CPI (Cebu Pelis Institute)",region:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:1,courses:[{name:"GE (General English)",price4Weeks:97e4,currency:"KRW",classDetails:"1:1 4H + 1:4 2H + 1:8 1H = 총 7H"},{name:"TOEIC/IELTS/TOEFL/ESP Prep",price4Weeks:102e4,currency:"KRW",classDetails:"1:1 4H(Academic 2+ESL 2) + 1:4 2H(ESL) + 1:8 1H = 총 7H"},{name:"Intensive GE",price4Weeks:107e4,currency:"KRW",classDetails:"1:1 5H + 1:4 2H + 1:8 1H = 총 8H"},{name:"TOEIC/TOEFL/IELTS/ESP General",price4Weeks:107e4,currency:"KRW",classDetails:"1:4 그룹 클래스(아카데믹 1 + ESL 1)"},{name:"TOEIC/IELTS/TOEFL Intensive",price4Weeks:112e4,currency:"KRW",classDetails:"1:1 5H(아카데믹) + 1:4 2H(ESL 1+아카데믹 1) + Practice Test 2H = 총 9H"},{name:"TOEIC/IELTS/TOEFL Guaranteed",price4Weeks:117e4,currency:"KRW",classDetails:"1:1 4H(아카데믹) + 1:4 2H(ESL 1+아카데믹 1) + Practice Test 2H = 총 8H"},{name:"DIET PROGRAM (보호자)",price4Weeks:85e4,currency:"KRW",classDetails:"1:1 2H + 1:4 1H + 1:8 1H = 총 4H"}],dormitories:[{name:"Room A Deluxe Single (6)",capacity:1,price4Weeks:143e4,currency:"KRW"},{name:"Room A Deluxe Double (20)",capacity:2,price4Weeks:108e4,currency:"KRW"},{name:"Room A Deluxe Triple (34)",capacity:3,price4Weeks:91e4,currency:"KRW"},{name:"Room A Deluxe Quad (6)",capacity:4,price4Weeks:81e4,currency:"KRW"},{name:"Room B Superior Single (2)",capacity:1,price4Weeks:153e4,currency:"KRW"},{name:"Room B Superior Double A (2)",capacity:2,price4Weeks:123e4,currency:"KRW"},{name:"Room B Superior Double B (3)",capacity:2,price4Weeks:118e4,currency:"KRW"},{name:"Room B Superior Triple (5)",capacity:3,price4Weeks:101e4,currency:"KRW"},{name:"Room B Superior Hexa (2)",capacity:2,price4Weeks:81e4,currency:"KRW"}],registrationFee:{note:"등록금 10만원",amount:1e5,currency:"KRW"},surcharges:[],localFees:[{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person"},{category:"SSP",name:"SSP I-Card",amount:4500,currency:"PHP",chargeUnit:"per_person"},{category:"ACR I-CARD",name:"Tourist ACR I-CARD (59일이상)",amount:4500,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"SSP ACR I-CARD (학생비자)",amount:4500,currency:"PHP",chargeUnit:"per_person"},{category:"비자연장",name:"비자연장 1차 (8주)",amount:5140,currency:"PHP",chargeUnit:"per_person",triggerWeeks:5},{category:"비자연장",name:"비자연장 2차 (12주)",amount:11550,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"비자연장 3차 (16주)",amount:4440,currency:"PHP",chargeUnit:"per_person",triggerWeeks:13},{category:"비자연장",name:"비자연장 4차 (20주)",amount:4440,currency:"PHP",chargeUnit:"per_person",triggerWeeks:17},{category:"비자연장",name:"비자연장 5차 (24주)",amount:4440,currency:"PHP",chargeUnit:"per_person",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"기본전기세 (4주)",amount:2e3,currency:"PHP",chargeUnit:"per_4weeks"},{category:"전기\xb7수도\xb7관리비",name:"기본수도세 (4주)",amount:1500,currency:"PHP",chargeUnit:"per_4weeks"},{category:"전기\xb7수도\xb7관리비",name:"관리비 (4주)",amount:1e3,currency:"PHP",chargeUnit:"per_4weeks"},{category:"보증금",name:"Deposit",amount:3e3,currency:"PHP",chargeUnit:"per_person"},{category:"픽업/샌딩",name:"Pick-up",amount:1e3,currency:"PHP",chargeUnit:"per_visit"},{category:"학생증/사진",name:"School ID Card",amount:350,currency:"PHP",chargeUnit:"per_person"},{category:"교재비",name:"책값/권당",amount:400,currency:"PHP",chargeUnit:"per_person"}]},{id:"cpils",schoolCode:"CPILS",name:"CPILS",region:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:1,courses:[{name:"General ESL Light",price4Weeks:85e4,currency:"KRW",note:"성수기(12\xb71\xb77\xb78월) 수강 불가",classDetails:"1:1 4타임 + 1:12 1타임 = 총 5타임"},{name:"General ESL",price4Weeks:95e4,currency:"KRW",classDetails:"1:1 3타임 + 1:4 2타임 + 1:12 2타임 + 1:15 1타임 + 스페셜 그룹 1타임 = 총 9타임"},{name:"General ESL Plus",price4Weeks:95e4,currency:"KRW",classDetails:"1:1 4타임 + 1:4 2타임 + 1:12 1타임 + 1:15 1타임 + 스페셜 그룹 1타임 = 총 9타임"},{name:"Premier Sparta",price4Weeks:105e4,currency:"KRW",classDetails:"1:1 5타임 + 1:4 2타임 + 1:12 1타임 + 스페셜 그룹 1타임 + 리뷰 2타임 = 총 12타임"},{name:"TOEIC (일반)",price4Weeks:105e4,currency:"KRW",classDetails:"1:1 4타임 + 1:4 2타임 + 1:15 3타임 + 리뷰 3타임 = 총 12타임"},{name:"TOEFL iBT",price4Weeks:105e4,currency:"KRW",classDetails:"1:1 3타임 + 1:4 2타임 + 1:12 2타임 + 1:15 2타임 + 리뷰 3타임 = 총 12타임"},{name:"Business English",price4Weeks:105e4,currency:"KRW",classDetails:"1:1 4타임 + 1:4 2타임 + 1:15 1타임 + 그룹 2타임 = 총 9타임"},{name:"Power Speaking PMC",price4Weeks:105e4,currency:"KRW",classDetails:"1:1 4타임 + 1:4 3타임 + 1:12 1타임 + 1:15 2타임 + 그룹 2타임 = 총 12타임"},{name:"IELTS (일반)",price4Weeks:115e4,currency:"KRW",classDetails:"1:1 4타임 + 1:15 5타임 + 리뷰 3타임 = 총 12타임"}],dormitories:[{name:"일반룸 1인실",capacity:1,price4Weeks:11e5,
111currency:"KRW"},{name:"일반룸 2인실",capacity:2,price4Weeks:91e4,currency:"KRW"},{name:"일반룸 3인실",capacity:3,price4Weeks:85e4,currency:"KRW"},{name:"일반룸 4인실",capacity:4,price4Weeks:79e4,currency:"KRW"},{name:"프리미엄룸 1인실",capacity:1,price4Weeks:121e4,currency:"KRW"},{name:"프리미엄룸 2인실",capacity:2,price4Weeks:1e6,currency:"KRW"},{name:"프리미엄룸 3인실",capacity:3,price4Weeks:94e4,currency:"KRW"},{name:"프리미엄룸 4인실",capacity:4,price4Weeks:89e4,currency:"KRW"}],registrationFee:{amount:1e5,currency:"KRW",note:"등록비 10만원 (환불불가)"},surcharges:[{label:"성수기",amountPerWeek:25e3,startDate:"2026-07-06",endDate:"2026-08-28",currency:"KRW"}],localFees:[{category:"SSP",name:"SSP 발급비",amount:7800,currency:"PHP",chargeUnit:"per_person"},{category:"SSP E-CARD",name:"ACR I-Card (SSP와 함께)",amount:4e3,currency:"PHP",chargeUnit:"per_person"},{category:"ACR I-CARD",name:"ACR I-Card (2차 비자연장 시)",amount:4e3,currency:"PHP",chargeUnit:"per_person",trigger:"cumulative",triggerWeeks:9},{category:"보증금",name:"기숙사 보증금 (환불)",amount:2e3,currency:"PHP",chargeUnit:"per_person"},{category:"전기\xb7수도\xb7관리비",name:"전기세 보증금",amount:500,currency:"PHP",chargeUnit:"per_week"},{category:"전기\xb7수도\xb7관리비",name:"수도세",amount:150,currency:"PHP",chargeUnit:"per_week"},{category:"전기\xb7수도\xb7관리비",name:"관리비",amount:500,currency:"PHP",chargeUnit:"per_week"},{category:"픽업/샌딩",name:"픽업비",amount:1e3,currency:"PHP",chargeUnit:"per_person"},{category:"교재비",name:"교재비 (1권)",amount:400,currency:"PHP",chargeUnit:"per_book"}]},{id:"clark_we",schoolCode:"CLARK_WE",name:"WE",region:"clark",regionLabel:"클락",schoolType:"general",minWeeks:1,courses:[{name:"ESL4",classDetails:"1:1 4H + 그룹 2H + 옵션 1H = 총 7H",price4Weeks:85e4,currency:"KRW"},{name:"ESL5",classDetails:"1:1 5H + 그룹 2H + 옵션 1H = 총 8H",price4Weeks:95e4,currency:"KRW"},{name:"ESL6",classDetails:"1:1 6H + 그룹 2H + 옵션 1H = 총 9H",price4Weeks:105e4,currency:"KRW"},{name:"TOEIC/TOEFL/IELTS/Business ESL",classDetails:"스페셜 1:1 6H + 그룹 1H + 옵션 1H = 총 8H",price4Weeks:115e4,currency:"KRW"},{name:"Native Mix Light",classDetails:"1:1 3H + 그룹 2H + 원어민 1:1 1H + 옵션 1H = 총 7H",price4Weeks:1e6,currency:"KRW"},{name:"Native Mix General",classDetails:"1:1 3H + 그룹 2H + 원어민 1:1 2H + 옵션 1H = 총 8H",price4Weeks:125e4,currency:"KRW"},{name:"Native Mix Intensive",classDetails:"1:1 3H + 그룹 2H + 원어민 1:1 3H + 옵션 1H = 총 9H",price4Weeks:15e5,currency:"KRW"},{name:"ESL + GOLF (성인 골프코스)",classDetails:"1:1 3H + 골프레슨 1H + 옵션 1H = 총 5H",price4Weeks:125e4,currency:"KRW"},{name:"ESL + GOLF ROUND (필드레슨 포함)",classDetails:"1:1 3H + 골프레슨 1H + 옵션 1H = 총 5H",price4Weeks:185e4,currency:"KRW"},{name:"ESL3 FOR GUARDIAN",classDetails:"1:1 3H = 총 3H",price4Weeks:75e4,currency:"KRW",note:"가족연수 전용. 보호자 수업을 자녀에게 양도 가능. 일반코스 신청도 가능."}],dormitories:[{name:"1인실",capacity:1,price4Weeks:11e5,currency:"KRW"},{name:"2인실",capacity:2,price4Weeks:9e5,currency:"KRW"},{name:"3인실",capacity:3,price4Weeks:8e5,currency:"KRW"},{name:"4인실",capacity:4,price4Weeks:7e5,currency:"KRW"}],registrationFee:{amount:1e5,note:"등록비 10만원. 등록비 및 픽업비 불포함 가격.",currency:"KRW"},surcharges:[],picks:{recCourses:["ESL4","ESL5","Native Mix General","ESL + GOLF (성인 골프코스)"],recCombo:{course:"Native Mix General",dorm:"1인실"}},localFees:[{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"SSP E-CARD",name:"SSP E CARD",amount:4e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"ACR I-CARD",name:"ACR I CARD",amount:4e3,currency:"PHP",chargeUnit:"per_person",trigger:"stay_over_59days",triggerWeeks:9},{category:"비자연장",name:"비자연장 1차 (8주/059일)",amount:4800,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:5},{category:"비자연장",name:"비자연장 2차 (12주/089일)",amount:6e3,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:9},{category:"비자연장",name:"비자연장 3차 (16주/119일)",amount:4500,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:13},{category:"비자연장",name:"비자연장 4차 (20주/149일)",amount:4500,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:17},{category:"비자연장",name:"비자연장 5차 (24주/179일)",amount:4500,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"유틸리티비",amount:2e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"전기\xb7수도\xb7관리비",name:"전기세",amount:22,currency:"PHP",chargeUnit:"per_kw",trigger:"usage"},{category:"보증금",name:"기숙사 보증금",amount:3e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"픽업/샌딩",name:"픽업비 (클락)",amount:1e3,currency:"PHP",chargeUnit:"per_family",trigger:"enrollment"},{category:"픽업/샌딩",name:"픽업비 (마닐라)",amount:5e3,currency:"PHP",chargeUnit:"per_family",trigger:"enrollment"},{category:"학생증/사진",name:"학생증",amount:300,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"교재비",name:"교재비",amountText:"₱250~500 (권당)",currency:"PHP",trigger:"enrollment"},{category:"기타",name:"방문자 1박비용",amount:1500,currency:"PHP",chargeUnit:"per_night",trigger:"usage"},{category:"기타",name:"추가 1박",amount:1500,currency:"PHP",chargeUnit:"per_night",trigger:"usage"}]},{id:"eg_academy",schoolCode:"EG_ACADEMY",name:"EG (EG 어학원)",region:"clark",regi
111onLabel:"클락",schoolType:"general",minWeeks:1,courses:[{name:"ESL 4",price4Weeks:95e4,currency:"KRW",note:"4주 95만원.",classDetails:"필1:1 4H + 원어민그룹 1H + 필그룹 1H + 옵션 1H(무료선택그룹) = 총 7H"},{name:"ESL 6",price4Weeks:127e4,currency:"KRW",note:"4주 127만원.",classDetails:"필1:1 6H + 원어민그룹 1H + 필그룹 1H + 옵션 1H = 총 9H"},{name:"ESL Native Plus",price4Weeks:137e4,currency:"KRW",note:"4주 137만원.",classDetails:"필1:1 2H + 원어민1:1 2H + 원어민그룹 2H + 필그룹 2H + 옵션 1H(샘플 08:00~16:50 9교시) = 총 9H"},{name:"ESL Native Complete",price4Weeks:152e4,currency:"KRW",note:"4주 152만원.",classDetails:"원어민1:1 4H + 원어민그룹 3H + 옵션 1H = 총 8H"},{name:"Pre-IELTS",price4Weeks:122e4,currency:"KRW",note:"4주 122만원.",classDetails:"필1:1 5H + 원어민그룹 1H + 필그룹 1H + 옵션 1H = 총 8H"},{name:"IELTS + NATIVE",price4Weeks:132e4,currency:"KRW",note:"4주 132만원.",classDetails:"필1:1 4H + 원어민1:1 1H + 원어민그룹 1H + 필그룹 1H + 옵션 1H = 총 8H"},{name:"IELTS Score Guarantee",price4Weeks:137e4,currency:"KRW",note:"12주 전용 보장반. 학비 12주 4,110,000 + 기숙 12주(1인실 3,600,000/2인실 3,000,000/4인실 2,400,000). 총액: 1인실 7,710,000 / 2인실 7,110,000 / 4인실 6,510,000. (자료 2025.09 기준)",classDetails:"필1:1 5H + 원어민1:1 1H + 원어민그룹 1H + 필그룹 1H + IELTS Review 2H = 총 10H"},{name:"TOEIC + Native",price4Weeks:132e4,currency:"KRW",note:"4주 132만원. TOEFL+Native, Business+Native 동일 가격.",classDetails:"필1:1 4H + 원어민1:1 1H + 원어민그룹 1H + 필그룹 1H + 옵션 1H = 총 8H"},{name:"TOEFL + Native",price4Weeks:132e4,currency:"KRW",note:"4주 132만원.",classDetails:"필1:1 4H + 원어민1:1 1H + 원어민그룹 1H + 필그룹 1H + 옵션 1H = 총 8H"},{name:"Business + Native",price4Weeks:132e4,currency:"KRW",note:"4주 132만원.",classDetails:"필1:1 4H + 원어민1:1 1H + 원어민그룹 1H + 필그룹 1H + 옵션 1H = 총 8H"},{name:"GOLF + ESL",price4Weeks:135e4,currency:"KRW",note:"4주 135만원.",classDetails:"필1:1 3H + 필그룹 1H(+골프) = 총 4H"},{name:"GOLF SPECIAL",price4Weeks:195e4,currency:"KRW",note:"4주 195만원.",classDetails:"필1:1 3H + 필그룹 1H(+골프집중) = 총 4H"}],dormitories:[{name:"1인실",capacity:1,price4Weeks:1e6,currency:"KRW"},{name:"2인실",capacity:2,price4Weeks:8e5,currency:"KRW"},{name:"4인실",capacity:4,price4Weeks:6e5,currency:"KRW"}],registrationFee:{amount:1e5,note:"등록비 10만원 불포함 (별도).",currency:"KRW"},surcharges:[],picks:{lowest:{dorm:"4인실"}},localFees:[{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person",trigger:"always"},{category:"SSP E-CARD",name:"SSP E-CARD",amount:4e3,currency:"PHP",chargeUnit:"per_person",trigger:"always"},{category:"비자연장",name:"비자연장 1차",amount:4830,currency:"PHP",chargeUnit:"per_person",trigger:"over_weeks",triggerWeeks:4},{category:"비자연장",name:"비자연장 2차",amount:10830,currency:"PHP",chargeUnit:"per_person",trigger:"over_weeks",triggerWeeks:8},{category:"비자연장",name:"비자연장 3차",amount:4530,currency:"PHP",chargeUnit:"per_person",trigger:"over_weeks",triggerWeeks:12},{category:"비자연장",name:"비자연장 4차",amount:4530,currency:"PHP",chargeUnit:"per_person",trigger:"over_weeks",triggerWeeks:16},{category:"비자연장",name:"비자연장 5차",amount:4530,currency:"PHP",chargeUnit:"per_person",trigger:"over_weeks",triggerWeeks:20},{category:"전기\xb7수도\xb7관리비",name:"UTILITY FEE",amountByWeeks:{4:2e3,8:4e3,12:6e3},currency:"PHP",chargeUnit:"per_person",trigger:"per_week"},{category:"보증금",name:"보증금 (DEPOSIT)",amount:5e3,currency:"PHP",chargeUnit:"flat",trigger:"always"},{category:"픽업/샌딩",name:"클락공항 픽업 (성인)",amount:1e3,currency:"PHP",chargeUnit:"per_person",trigger:"always"},{category:"픽업/샌딩",name:"마닐라공항 픽업 (성인)",amount:5e3,currency:"PHP",chargeUnit:"per_person",trigger:"always"},{category:"학생증/사진",name:"SCHOOL ID CARD",amount:200,currency:"PHP",chargeUnit:"per_person",trigger:"always"},{category:"ECC/기타허가",name:"ECC CLEARANCE",amount:2e3,currency:"PHP",chargeUnit:"per_person",trigger:"over_weeks",triggerWeeks:20}]},{id:"elsa",schoolCode:"ELSA",name:"ELSA (Interactive Learning School)",region:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:1,courses:[{name:"Golf ESL",price4Weeks:195e4,currency:"KRW",note:"일일 3타임 그룹수업 + 주 2회 필드 라운드 + 골프 연습장 무료 이용",classDetails:"그룹 3H = 총 3H"},{name:"Super Basic ESL",price4Weeks:105e4,currency:"KRW",note:"1:1 5회",classDetails:"1:1 5H = 총 5H"},{name:"Super Intensive ESL",price4Weeks:125e4,currency:"KRW",note:"1:1 5회(4회) + 그룹 3회",classDetails:"1:1 4H + 그룹 3H = 총 7H"}],dormitories:[{name:"2인실",capacity:2,price4Weeks:1e6,currency:"KRW"},{name:"3인실",capacity:3,price4Weeks:95e4,currency:"KRW"}],registrationFee:{note:"입학금 10만원 (1인). 픽업비 2만원 (1인) 별도.",amount:1e5,currency:"KRW"},surcharges:[],picks:{lowest:{course:"Super Basic ESL",dorm:"3인실"}},localFees:[{category:"SSP",name:"SSP (ESL)",amount:7800,currency:"PHP",chargeUnit:"per_person"},{category:"SSP E-CARD",name:"ACR E-Card",amount:4500,currency:"PHP",chargeUnit:"per_person"},{category:"ACR I-CARD",name:"ACR I-CARD",amount:4e3,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"1st VISA",amount:5140,currency:"PHP",chargeUnit:"per_person",triggerWeeks:5},{category:"비자연장",name:"2nd VISA",amount:6400,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"3rd VISA",amount:4440,currency:"PHP",chargeUnit:"per_person",triggerWeeks:13},{category:"전기\xb7수도\xb7관리비",name:"시설 이용료",amount:1500,currency:"PHP",chargeUnit:"per_week"},{category:"전기\xb7수도\xb7관리비",name:"에어컨 사용료",amountText:"₱25 (KW당\xb74주)",currency:"PHP",chargeUnit:"per_usage"},{category:"보증금",name:"보증금",amount:5e3,currency:"PHP",chargeUnit:"per_family"},{category:"교재비",name:"교재비",amountText:"코스 및 개별 상이",currency:"PHP",chargeUnit:"per_person"}]},{id:"ev_academy",priceNote:"교재비 별도",schoolCode:"EV",name:"EV",region:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:1,courses:[{name:"[Sparta] Intensive ESL",price4Weeks:114e4,currency:"KRW",note:"스파르타 Intensive ESL",classDetails:"1:1 4H + 소그룹 2H + 대그룹 2H + 옵션/자습 2H = 총 10H"},{name:"[Sparta] IELTS Guarantee",price4Weeks:142e4,currency:"KRW",note:"스파르타 IELTS Guarantee (Academic module). 12주 이상.",classDetails:"1:1 4H + 그룹 4H = 총 8H (+ 모닝\xb7이브닝 클래스 각 1H)"},{name:"[Sparta] Specific Courses (IELTS/TOEIC/Business/Digital English)",price4Weeks:126e4,currency:"KRW",note:"스파르타 Specific Courses",classDetails:"1:1 4H + 그룹 4H + 옵션/자습 2H = 총 10H"},{name:"[Sparta] Power Speaking 6",price4Weeks:133e4,currency:"KRW",note:"스파르타 Power Speaking 6",classDetails:"1:1 6H + 소그룹 1H + 대그룹 1H + 옵션/자습 2H = 총 10H"},{name:"[Sparta] Power Speaking 8",price4Weeks:156e4,currency:"KRW",note:"스파르타 Power Speaking 8",classDetails:"1:1 8H + 옵션/자습 2H = 총 10H"},{name:"[Semi] ESL Classic",price4Weeks:108e4,currency:"KRW",note:"세미스파르타 ESL Classic",classDetails:"1:1 4H + 소그룹 2H + 대그룹 2H + 옵션/자습 2H = 총 10H"},{name:"[Semi] Specific Courses (TOEIC/Business/Digital English)",price4Weeks:12e5,currency:"KRW",note:"세미스파르타 Specific Courses",classDetails:"1:1 4H + 그룹 4H + 옵션/자습 2H = 총 10H"},{name:"[Semi] Power Speaking 6",price4Weeks:127e4,currency:"KRW",note:"세미스파르타 Power Speaking 6",classDetails:"1:1 6H + 소그룹 1H + 대그룹 1H + 옵션/자습 2H = 총 10H"},{name:"[Semi] Power Speaking 8",price4Weeks:15e5,currency:"KRW",note:"세미스파르타 Power Speaking 8",classDetails:"1:1 8H + 옵션/자습 2H = 총 10H"}],dormitories:[{name:"1인실 (Single)",capacity:1,price4Weeks:156e4,currency:"KRW"},{name:"2인실 (Double)",capacity:2,price4Weeks:118e4,currency:"KRW"},{name:"3인실 (Triple)",capacity:3,price4Weeks:108e4,currency:"KRW"},{name:"4인실 (Quadruple)",capacity:4,price4Weeks:103e4,currency:"KRW"},{name:"콘도 1인실 (Condominium Single)",capacity:1,price4Weeks:171e4,currency:"KRW"}],registrationFee:{note:"입학금 10만원. 학비표 합산가에 포함되어 있음.",amount:1e5,currency:"KRW"},surcharges:[{currency:"USD"}],localFees:[{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person"},{category:"SSP E-CARD",name:"SSP E-Card",amount:4500,currency:"PHP",chargeUnit:"per_person"},{category:"ACR I-CARD",name:"ACR I-Card",amount:4e3,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"1차 비자연장",amount:5130,currency:"PHP",chargeUnit:"per_person",triggerWeeks:5},{category:"비자연장",name:"2차 비자연장 (누적)",amount:11530,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"3차 비자연장 (누적)",amount:15960,currency:"PHP",chargeUnit:"per_person",triggerWeeks:13},{category:"비자연장",name:"4차 비자연장 (누적)",amount:20390,currency:"PHP",chargeUnit:"per_person",triggerWeeks:17},{category:"비자연장",name:"5차 비자연장 (누적)",amount:24820,currency:"PHP",chargeUnit:"per_person",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"전기세",amount:500,currency:"PHP",chargeUnit:"per_week"},{category:"전기\xb7수도\xb7관리비",name:"운영비 (Operation fee)",amount:500,currency:"PHP",chargeUnit:"per_week"},{category:"전기\xb7수도\xb7관리비",name:"수도세",amount:300,currency:"PHP",chargeUnit:"per_week"},{category:"보증금",name:"보증금",amountByWeeks:{4:3e3,8:3e3,12:5e3},currency:"PHP"},{category:"픽업/샌딩",name:"픽업비",amount:1200,currency:"PHP",chargeUnit:"per_person"},{category:"학생증/사진",name:"ID Card",amount:500,currency:"PHP",chargeUnit:"per_person"}]},{id:"ev_lamer",schoolCode:"EV_LAMER",name:"EV La Mer Campus",regi
111on:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:1,courses:[{name:"ESL Classic",price4Weeks:101e4,currency:"KRW",classDetails:"1:1 4H + 그룹 4H = 총 8H"},{name:"Senior",price4Weeks:119e4,currency:"KRW",note:"시니어 코스",classDetails:"1:1 4H + 그룹 4H = 총 8H"},{name:"Power Speaking 6",price4Weeks:119e4,currency:"KRW",classDetails:"1:1 6H + 그룹 2H = 총 8H"},{name:"Power Speaking 8",price4Weeks:142e4,currency:"KRW",classDetails:"1:1 8H = 총 8H"}],dormitories:[{name:"1인실 (Single)",capacity:1,price4Weeks:19e5,currency:"KRW"},{name:"2인실A (Pool Access Room)",capacity:2,price4Weeks:128e4,currency:"KRW"},{name:"2인실B (Double B)",capacity:2,price4Weeks:118e4,currency:"KRW"},{name:"3인실 (Triple)",capacity:3,price4Weeks:102e4,currency:"KRW"},{name:"4인실 (Quadruple)",capacity:4,price4Weeks:97e4,currency:"KRW"}],registrationFee:{currency:"KRW",note:"입학금 10만원. 학비표 합산가에 포함.",amount:1e5},surcharges:[{currency:"KRW"}],localFees:[{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person"},{category:"SSP E-CARD",name:"SSP E-Card",amount:4500,currency:"PHP",chargeUnit:"per_person"},{category:"ACR I-CARD",name:"ACR I-Card",amount:4e3,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"1차 비자연장",amount:5130,currency:"PHP",chargeUnit:"per_person",triggerWeeks:5},{category:"비자연장",name:"2차 비자연장 (누적)",amount:11530,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"3차 비자연장 (누적)",amount:15960,currency:"PHP",chargeUnit:"per_person",triggerWeeks:13},{category:"비자연장",name:"4차 비자연장 (누적)",amount:20390,currency:"PHP",chargeUnit:"per_person",triggerWeeks:17},{category:"비자연장",name:"5차 비자연장 (누적)",amount:24820,currency:"PHP",chargeUnit:"per_person",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"전기세",amount:500,currency:"PHP",chargeUnit:"per_week"},{category:"전기\xb7수도\xb7관리비",name:"운영비",amount:500,currency:"PHP",chargeUnit:"per_week"},{category:"전기\xb7수도\xb7관리비",name:"수도세",amount:300,currency:"PHP",chargeUnit:"per_week"},{category:"보증금",name:"보증금",amountByWeeks:{4:3e3,8:3e3,12:5e3},currency:"PHP"},{category:"픽업/샌딩",name:"픽업비",amount:1200,currency:"PHP",chargeUnit:"per_person"},{category:"학생증/사진",name:"ID Card",amount:500,currency:"PHP",chargeUnit:"per_person"}]},{id:"english_fella_1",schoolCode:"ENGLISH_FELLA_1",name:"English Fella (1캠퍼스 (스파르타))",region:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:1,courses:[{name:"PIC-4 (1:1 4타임)",price4Weeks:95e4,currency:"KRW",note:"1:1 4타임",classDetails:"1:1 4H + 1:4 2H + 1:8 1H = 총 7H"},{name:"PIC-5 (1:1 5타임)",price4Weeks:1e6,currency:"KRW",note:"1:1 5타임",classDetails:"1:1 5H + 1:4 1H + 1:8 1H = 총 7H"},{name:"PIC-6 (1:1 6타임)",price4Weeks:11e5,currency:"KRW",note:"1:1 6타임",classDetails:"1:1 6H(Power Speaking) + 1:8 1H = 총 7H"},{name:"PPT / TOEIC+ESL",price4Weeks:11e5,currency:"KRW",note:"PPT 또는 TOEIC+ESL",classDetails:"ESL 1:1 2H + TOEIC 1:1 2H + 1:4 2H + 1:8 1H(1:1 합 4) = 총 7H"},{name:"PIFT / PTFT TOEIC",price4Weeks:115e4,currency:"KRW",note:"PIFT 또는 PTFT TOEIC",classDetails:"1:1 4H + 1:4 2H + 1:8 1H = 총 7H"},{name:"PIGI / PIRC",price4Weeks:125e4,currency:"KRW",note:"PIGI 또는 PIRC",classDetails:"1:1 5H + 1:4 2H = 총 7H"},{name:"TOEIC Guarantee",price4Weeks:125e4,currency:"KRW",note:"12주 이상 등록만 가능. Fella1 캠퍼스만 운영.",classDetails:"총 8H(50분 교시)"}],dormitories:[{name:"1인실 (1P)",capacity:1,price4Weeks:135e4,currency:"KRW"},{name:"1인실A (1A)",capacity:1,price4Weeks:115e4,currency:"KRW"},{name:"1인실B (1B)",capacity:1,price4Weeks:11e5,currency:"KRW"},{name:"2인실 (2A)",capacity:2,price4Weeks:95e4,currency:"KRW"},{name:"3인실 (3A)",capacity:3,price4Weeks:85e4,currency:"KRW"}],registrationFee:{amount:1e5,note:"입학금 10만원. SSP 한국 원화 결제 시 195,000원.",currency:"KRW"},surcharges:[],localFees:[{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person"},{category:"SSP E-CARD",name:"SSP E-Card",amount:4100,currency:"PHP",chargeUnit:"per_person"},{category:"ACR I-CARD",name:"ACR-I Card",amount:4100,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"1차 비자연장",amount:5170,currency:"PHP",chargeUnit:"per_person",triggerWeeks:5},{category:"비자연장",name:"2차 비자연장",amount:4100,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"전기\xb7수도\xb7관리비",name:"종합관리비",amount:2500,currency:"PHP",chargeUnit:"per_4weeks"},{category:"보증금",name:"보증금",amount:3e3,currency:"PHP",chargeUnit:"per_person"},{category:"보증금",name:"Padlock Deposit",amount:100,currency:"PHP",chargeUnit:"per_person"},{category:"픽업/샌딩",name:"픽업비",amount:1e3,currency:"PHP",chargeUnit:"per_person"},{category:"학생증/사진",name:"학생증",amount:200,currency:"PHP",chargeUnit:"per_person"},{category:"교재비",name:"교재비",amount:2500,currency:"PHP",chargeUnit:"per_person"},{category:"ECC/기타허가",name:"ARP",amount:500,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9}]},{id:"english_fella_2",schoolCode:"ENGLISH_FELLA_2",name:"English Fella (2캠퍼스 (J-스파르타/클래식))",regi
111on:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:1,courses:[{name:"PIC-4 (1:1 4타임)",price4Weeks:95e4,currency:"KRW",note:"1:1 4타임",classDetails:"1:1 4H + 1:4 2H + 1:8 1H + 옵션 1H = 총 8H"},{name:"PIC-5 (1:1 5타임)",price4Weeks:1e6,currency:"KRW",note:"1:1 5타임",classDetails:"1:1 5H + 1:4 1H + 1:8 1H + 옵션 1H = 총 8H"},{name:"PIC-6 (1:1 6타임)",price4Weeks:11e5,currency:"KRW",note:"1:1 6타임",classDetails:"1:1 6H(Power Speaking) + 1:8 1H + 옵션 1H = 총 8H"},{name:"PPT / TOEIC+ESL",price4Weeks:11e5,currency:"KRW",note:"PPT 또는 TOEIC+ESL",classDetails:"ESL 1:1 2H + TOEIC 1:1 2H + 1:4 2H + 1:8 1H + 옵션 1H = 총 8H"},{name:"PIFT / PTFT TOEIC",price4Weeks:115e4,currency:"KRW",note:"PIFT 또는 PTFT TOEIC",classDetails:"1:1 4H + 1:4 2H + 1:8 1H + 옵션 1H = 총 8H"},{name:"EBC (비즈니스)",price4Weeks:115e4,currency:"KRW",note:"비즈니스 영어",classDetails:"1:1 5H(VOCA&L/R/G/S/W) + 1:4 2H(Let's Talk Business/Presenting) + 옵션 1H = 총 8H"},{name:"GEC (보호자)",price4Weeks:8e5,currency:"KRW",note:"보호자 코스. 장기할인 제외.",classDetails:"1:1 3H + 옵션 1H = 총 4H"},{name:"SSC",price4Weeks:11e5,currency:"KRW",note:"SSC 코스",classDetails:"1:1 6H + 옵션 1H = 총 7H"}],dormitories:[{name:"1인실 (1P)",capacity:1,price4Weeks:135e4,currency:"KRW"},{name:"2인실 (2A)",capacity:2,price4Weeks:95e4,currency:"KRW"},{name:"3인실 (3A)",capacity:3,price4Weeks:85e4,currency:"KRW"}],registrationFee:{currency:"KRW",note:"입학금 10만원. SSP 한국 원화 결제 시 195,000원.",amount:1e5},surcharges:[],localFees:[{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person"},{category:"SSP E-CARD",name:"SSP E-Card",amount:4100,currency:"PHP",chargeUnit:"per_person"},{category:"ACR I-CARD",name:"ACR-I Card",amount:4100,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"1차 비자연장",amount:5170,currency:"PHP",chargeUnit:"per_person",triggerWeeks:5},{category:"비자연장",name:"2차 비자연장 (9~12주 누적)",amount:11610,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"전기\xb7수도\xb7관리비",name:"종합관리비",amountByWeeks:{4:2500,8:4500,12:6500},currency:"PHP"},{category:"보증금",name:"보증금",amount:3e3,currency:"PHP",chargeUnit:"per_person"},{category:"보증금",name:"Padlock Deposit",amount:100,currency:"PHP",chargeUnit:"per_person"},{category:"픽업/샌딩",name:"픽업비",amount:1e3,currency:"PHP",chargeUnit:"per_person"},{category:"학생증/사진",name:"학생증",amount:200,currency:"PHP",chargeUnit:"per_person"},{category:"교재비",name:"교재비",amount:2500,currency:"PHP",chargeUnit:"per_person"},{category:"ECC/기타허가",name:"ARP",amount:500,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9}]},{id:"gitc",schoolCode:"GITC",name:"GITC (Green International Technical College)",region:"iloilo",regionLabel:"일로일로",schoolType:"general",minWeeks:1,courses:[{name:"Basic",classDetails:"1:1 3H + Group 2H(그룹 2~4명) = 총 5H",price4Weeks:9e5,currency:"KRW"},{name:"Regular",classDetails:"1:1 4H + Group 3H = 총 7H",price4Weeks:11e5,currency:"KRW"},{name:"Power Speaking",classDetails:"1:1 7H(그룹 없음) = 총 7H",price4Weeks:125e4,currency:"KRW"},{name:"Pre TOEIC\xb7IELTS",classDetails:"1:1 3H + Group 4H = 총 7H",price4Weeks:11e5,currency:"KRW"},{name:"TOEIC\xb7IELTS 점수보장반",classDetails:"1:1 3H + Group 4H = 총 7H",price4Weeks:125e4,currency:"KRW"}],dormitories:[{name:"One Spatial 콘도 1인실 (Single B\xb7추천)",capacity:1,price4Weeks:65e4,currency:"KRW"},{name:"One Spatial 콘도 1인실 (Single A)",capacity:1,price4Weeks:8e5,currency:"KRW"},{name:"Avida\xb7SMDC 콘도 1인실",capacity:1,price4Weeks:9e5,currency:"KRW"},{name:"Mega World 콘도 1인실",capacity:1,price4Weeks:105e4,currency:"KRW"}],registrationFee:{amount:12e4,currency:"KRW",note:"등록금 12만원"},surcharges:[],picks:{lowest:{dorm:"One Spatial 콘도 1인실 (Single B\xb7추천)"},recCombo:{course:"Basic",dorm:"One Spatial 콘도 1인실 (Single B\xb7추천)"}},localFees:[{category:"SSP",name:"SSP",amount:7e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"ACR I-CARD",name:"SSP I-CARD",amount:4e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"ACR I-CARD",name:"ACRI-CARD",amount:4e3,currency:"PHP",chargeUnit:"per_person",trigger:"stay_over_59days",triggerWeeks:9},{category:"비자연장",name:"Visa 2차 (~59일)",amount:4140,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:5},{category:"비자연장",name:"Visa 3차 (~89일)",amount:5410,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:9},{category:"비자연장",name:"Visa 4차 (~119일)",amount:3440,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:13},{category:"비자연장",name:"Visa 5차 (~149일)",amount:3440,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:17},{category:"비자연장",name:"Visa 6차 (~179일)",amount:3440,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:21},{category:"비자연장",name:"Visa 7차 (~209일)",amount:4850,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:25},{category:"비자연장",name:"Visa 8차 (239일~)",amount:3440,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:29},{category:"전기\xb7수도\xb7관리비",name:"Facility fee",amount:2e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"전기\xb7수도\xb7관리비",name:"Electricity/Water",amount:0,currency:"PHP",chargeUnit:"per_usage",trigger:"enrollment"},{category:"보증금",name:"Deposit",amount:2e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"픽업/샌딩",name:"Pick up (Kalibo Airport)",amount:5e3,currency:"PHP",chargeUnit:"per_trip",trigger:"enrollment"},{category:"학생증/사진",name:"ID",amount:500,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"교재비",name:"Textbook",amount:500,currency:"PHP",chargeUnit:"per_book",trigger:"enrollment"}]}
111,{id:"glant",schoolCode:"GLANT",name:"GLANT English Academy",region:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:1,courses:[{name:"Regular",price4Weeks:99e4,currency:"KRW",note:"LT 1:1 4h + LT SG 1h + NT G 1h = 6h/day. 레벨별 다수 1:1 수업.",classDetails:"1:1 4H + SG 1H + NT G 1H = 총 6H"},{name:"Intensive",price4Weeks:118e4,currency:"KRW",note:"LT 1:1 5h + LT SG 1h + NT G 1h = 7h/day. 최다 1:1 수업.",classDetails:"1:1 5H + SG 1H + NT G 1H = 총 7H"},{name:"Premium",price4Weeks:147e4,currency:"KRW",note:"LT 1:1 4h + NT 1:1 1h + LT SG 1h + NT G 1h = 7h/day. 원어민 1:1 포함.",classDetails:"1:1 4H + NT 1:1 1H + SG 1H + NT G 1H = 총 7H"},{name:"Mini",price4Weeks:76e4,currency:"KRW",note:"LT 1:1 4h = 4h/day. 보호자 또는 짧은 일정 선호자용.",classDetails:"1:1 4H = 총 4H"},{name:"IELTS",price4Weeks:111e4,currency:"KRW",note:"LT 1:1 4h + LT SG 1h + NT G 1h = 6h/day. IELTS 수험영어.",classDetails:"1:1 4H + SG 1H + NT G 1H = 총 6H"}],dormitories:[{name:"1인실",capacity:1,price4Weeks:96e4,currency:"KRW"},{name:"2인실",capacity:2,price4Weeks:8e5,currency:"KRW"},{name:"3인실",capacity:3,price4Weeks:7e5,currency:"KRW"}],registrationFee:{amount:1e5,note:"입학금 10만원 (등록 시 사전납부). 공항픽업 3만원 별도.",currency:"KRW"},surcharges:[],localFees:[{category:"SSP E-CARD",name:"SSP + E-Card",amount:12e3,currency:"PHP",chargeUnit:"per_person"},{category:"비자연장",name:"1차 비자연장",amount:4700,currency:"PHP",chargeUnit:"per_person",triggerWeeks:5},{category:"전기\xb7수도\xb7관리비",name:"관리비 (기숙)",amount:2e3,currency:"PHP",chargeUnit:"per_4weeks"},{category:"보증금",name:"보증금",amount:2e3,currency:"PHP",chargeUnit:"per_4weeks"},{category:"학생증/사진",name:"ID Card",amount:200,currency:"PHP",chargeUnit:"per_person"},{category:"교재비",name:"교재비",amountText:"₱200~500",currency:"PHP",chargeUnit:"per_person"},{category:"세탁비",name:"세탁비 (기숙)",amount:33,currency:"PHP",chargeUnit:"per_kg"}]},{id:"glc",schoolCode:"GLC",name:"GLC (Global Language Cebu)",region:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:1,courses:[{name:"Lite Power Speaking (LPS)",price4Weeks:6e5,currency:"KRW",note:"1:1 3h + SG 1h + Optional. 오후 1시~6시 수업만 가능.",classDetails:"1:1 3H + SG 1H = 총 4H (+ Optional(오후1~6시만) 선택)"},{name:"Power Speaking (GPS)",price4Weeks:8e5,currency:"KRW",note:"1:1 4h + SG 2h + Optional.",classDetails:"1:1 4H + SG 2H = 총 6H"},{name:"Intensive Power Speaking (IPS)",price4Weeks:1e6,currency:"KRW",note:"1:1 5h + SG 2h + Optional.",classDetails:"1:1 5H + SG 2H = 총 7H"},{name:"Ultra7 Power Speaking (UPS)",price4Weeks:14e5,currency:"KRW",note:"1:1 7h + SG 1h + Optional.",classDetails:"1:1 7H + SG 1H = 총 8H"},{name:"Ultra Sparta ESL (USE)",price4Weeks:104e4,currency:"KRW",note:"1:1 5h + 그룹 3h + 의무 단어시험 + 야간수업 2h + 야간자율학습 1h + 토요일 수업.",classDetails:"1:1 5H + 그룹 3H + 야자(의무자습) 1H = 총 9H (+ 야간 2H 선택)"},{name:"General TOEIC (GTS)",price4Weeks:896e3,currency:"KRW",note:"1:1 4h + SG 2h + Optional.",classDetails:"1:1 4H + SG 2H = 총 6H"},{name:"Intensive TOEIC (ITC)",price4Weeks:112e4,currency:"KRW",note:"1:1 5h + SG 2h + Optional.",classDetails:"1:1 5H + SG 2H = 총 7H"},{name:"Ultra8 TOEIC (UTC)",price4Weeks:16e5,currency:"KRW",note:"1:1 8h + Optional.",classDetails:"1:1 8H = 총 8H"},{name:"Ultra Sparta TOEIC (UST)",price4Weeks:132e4,currency:"KRW",note:"1:1 5h + 그룹 3h + 의무 단어시험 + 야간수업 2h + 야간자율학습 1h + 토요일 모의시험.",classDetails:"1:1 5H + 그룹 3H + 야자 1H = 총 9H (+ 야간 2H 선택)"},{name:"General IELTS (GIS)",price4Weeks:896e3,currency:"KRW",note:"1:1 4h + SG 2h + Optional.",classDetails:"1:1 4H + SG 2H = 총 6H"},{name:"Intensive IELTS (IIS)",price4Weeks:112e4,currency:"KRW",note:"1:1 5h + SG 2h + Optional.",classDetails:"1:1 5H + SG 2H = 총 7H"},{name:"Ultra8 IELTS (UIS)",price4Weeks:16e5,currency:"KRW",note:"1:1 8h + Optional.",classDetails:"1:1 8H = 총 8H"},{name:"Ultra Sparta IELTS (USI)",price4Weeks:132e4,currency:"KRW",note:"1:1 5h + 그룹 3h + 의무 단어시험 + 야간수업 2h + 야간자율학습 1h + 토요일 모의시험.",classDetails:"1:1 5H + 그룹 3H + 야자 1H(=UST동일) = 총 9H (+ 야간 2H 선택)"},{name:"Business (BI)",price4Weeks:112e4,currency:"KRW",note:"1:1 4h + SG 2h + Optional.",classDetails:"1:1 4H + SG 2H = 총 6H"},{name:"Ultra7 Business (UBI)",price4Weeks:172e4,currency:"KRW",note:"1:1 7h + SG 1h + Optional.",classDetails:"1:1 7H + SG 1H = 총 8H"}],dormitories:[{name:"3인실 (Superior)",capacity:3,price4Weeks:82e4,currency:"KRW"},{name:"2인실 (Superior)",capacity:2,price4Weeks:1e6,currency:"KRW"},{name:"2인실 (아넥스2)",capacity:2,price4Weeks:92e4,currency:"KRW"},{name:"1인실 (메인)",capacity:1,price4Weeks:16e5,currency:"KRW"},{name:"1인실 (아넥스2)",capacity:1,price4Weeks:152e4,currency:"KRW"}],registrationFee:{note:"입학금 12만원.",amount:12e4,currency:"KRW"},surcharges:[{amountPerWeek:5e4,startDate:"2026-05-31",endDate:"2026-08-30",currency:"KRW",note:"세부 성수기 서차지. 서
111차지 포함 비용에서 학비&기숙사 10% 유학원 할인 가능."}],localFees:[{category:"SSP",name:"SSP",amount:8e3,currency:"PHP",chargeUnit:"per_person"},{category:"SSP E-CARD",name:"SSP E-Card",amount:4500,currency:"PHP",chargeUnit:"per_person"},{category:"ACR I-CARD",name:"ACR-I Card",amount:3500,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"1차 비자연장 (5-8주)",amount:4670,currency:"PHP",chargeUnit:"per_person",triggerWeeks:5},{category:"비자연장",name:"2차 비자연장 (9-12주, ACR-I 포함)",amount:9740,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"3차 비자연장 (13-16주)",amount:3970,currency:"PHP",chargeUnit:"per_person",triggerWeeks:13},{category:"비자연장",name:"4차 비자연장 (17-20주)",amount:3970,currency:"PHP",chargeUnit:"per_person",triggerWeeks:17},{category:"비자연장",name:"5차 비자연장 (21-24주)",amount:3970,currency:"PHP",chargeUnit:"per_person",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"물세",amount:500,currency:"PHP",chargeUnit:"per_week"},{category:"전기\xb7수도\xb7관리비",name:"시설 관리비 (Management Fee)",amount:6e3,currency:"PHP",chargeUnit:"per_4weeks"},{category:"보증금",name:"보증금",amount:2500,currency:"PHP",chargeUnit:"per_person"},{category:"픽업/샌딩",name:"공항 픽업",amount:1500,currency:"PHP",chargeUnit:"per_person"},{category:"교재비",name:"온라인 교재 (ESL)",amount:3e3,currency:"PHP",chargeUnit:"per_person"},{category:"교재비",name:"온라인 교재 (IELTS/TOEIC/Business)",amount:5e3,currency:"PHP",chargeUnit:"per_person"}]},{id:"gs",schoolCode:"GS",name:"GS 어학원 (Global Standard)",region:"clark",regionLabel:"클락",schoolType:"general",minWeeks:2,courses:[{name:"ESL LITE",classDetails:"1:1 2H + 그룹 1H = 총 3H",price4Weeks:75e4,currency:"KRW"},{name:"ESL",classDetails:"1:1 4H + 그룹 2H = 총 6H",price4Weeks:9e5,currency:"KRW"},{name:"GOLF ESL LITE",classDetails:"1:1 2H + 그룹 1H + GC(골프) 1H = 총 4H",price4Weeks:105e4,currency:"KRW"},{name:"GOLF ESL",classDetails:"1:1 4H + 그룹 2H + GC(골프) 1H = 총 7H",price4Weeks:12e5,currency:"KRW"},{name:"IELTS",classDetails:"1:1 4H + 그룹 3H = 총 7H",price4Weeks:12e5,currency:"KRW"},{name:"TOEIC",classDetails:"1:1 4H + 그룹 2H = 총 6H",price4Weeks:12e5,currency:"KRW"},{name:"Business English",classDetails:"1:1 4H + 그룹 2H = 총 6H",price4Weeks:12e5,currency:"KRW"},{name:"GGC Program",classDetails:"1:1 4H + 그룹 2H = 총 6H",price4Weeks:12e5,currency:"KRW"}],dormitories:[{name:"Global (Luxury) Single",capacity:1,price4Weeks:14e5,currency:"KRW"},{name:"Global (Luxury) Semi Single",capacity:1,price4Weeks:13e5,currency:"KRW"},{name:"Global (Luxury) Double",capacity:2,price4Weeks:1e6,currency:"KRW"},{name:"Global (Luxury) Triple",capacity:3,price4Weeks:9e5,currency:"KRW"},{name:"Global (Luxury) Quadruple",capacity:4,price4Weeks:85e4,currency:"KRW"},{name:"Global (Luxury) Triple (2rooms)",capacity:3,price4Weeks:11e5,currency:"KRW"},{name:"Global (Luxury) Quadruple (2rooms)",capacity:4,price4Weeks:95e4,currency:"KRW"},{name:"Clark (Premium) Single",capacity:1,price4Weeks:13e5,currency:"KRW"},{name:"Clark (Premium) Double",capacity:2,price4Weeks:95e4,currency:"KRW"},{name:"Clark (Premium) Triple",capacity:3,price4Weeks:85e4,currency:"KRW"},{name:"Clark (Premium) Quadruple",capacity:4,price4Weeks:75e4,currency:"KRW"},{name:"Standard Single",capacity:1,price4Weeks:12e5,currency:"KRW"},{name:"Standard Double",capacity:2,price4Weeks:8e5,currency:"KRW"},{name:"Standard Triple",capacity:3,price4Weeks:75e4,currency:"KRW"},{name:"Standard Quadruple",capacity:4,price4Weeks:7e5,currency:"KRW"}],registrationFee:{amount:1e5,note:"등록금 10만원",currency:"KRW"},surcharges:[],localFees:[{category:"SSP",name:"SSP",amount:7500,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"ACR I-CARD",name:"I-Card",amount:3500,currency:"PHP",chargeUnit:"per_person",trigger:"stay_over_59days",triggerWeeks:5},{category:"비자연장",name:"Visa Extension (8주)",amount:5130,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:5},{category:"비자연장",name:"Visa Extension (12주)",amount:11540,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:9},{category:"비자연장",name:"Visa Extension (16주)",amount:16080,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:13},{category:"비자연장",name:"Visa Extension (20주)",amount:20620,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:17},{category:"비자연장",name:"Visa Extension (24주)",amount:25160,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"Electricity (전기세)",amount:1e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"전기\xb7수도\xb7관리비",name:"Water (수도세)",amount:500,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"전기\xb7수도\xb7관리비",name:"Utility",amount:1e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"보증금",name:"Deposit (보증금)",amount:3e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"학생증/사진",name:"ID Card",amount:300,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"세탁비",name:"Laundry (세탁비)",amount:1e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"}]},{id:"hana",schoolCode:"HANA",name:"HANA (하나 어학원)",region:"clark",regi
111onLabel:"클락",schoolType:"general",minWeeks:1,courses:[{name:"Light ESL (성인)",price4Weeks:94e4,currency:"KRW",note:"필리핀1:1 4타임 + 원어민그룹 1타임 + 필리핀그룹 1타임. 4주 94만원.",classDetails:"1:1 4H + 그룹 1H + 원어민 그룹 1H = 총 6H"},{name:"General ESL (성인)",price4Weeks:111e4,currency:"KRW",note:"필리핀1:1 5타임 + 원어민그룹 1타임 + 필리핀그룹 1타임. 4주 111만원.",classDetails:"1:1 5H + 그룹 1H + 원어민 그룹 1H = 총 7H"},{name:"Native ESL (성인)",price4Weeks:128e4,currency:"KRW",note:"필리핀1:1 2타임 + 원어민1:1 2타임 + 원어민그룹 1타임 + 필리핀그룹 1타임. 4주 128만원.",classDetails:"1:1 2H + 원어민 1:1 2H + 그룹 1H + 원어민 그룹 1H = 총 6H"},{name:"Native Only (성인)",price4Weeks:153e4,currency:"KRW",note:"원어민1:1 4타임. 4주 153만원.",classDetails:"원어민 1:1 4H + 원어민 그룹 1H = 총 5H"},{name:"TOEIC / IELTS (성인)",price4Weeks:12e5,currency:"KRW",note:"필리핀1:1 3타임 + 원어민1:1 1타임 + ESL필리핀그룹 1타임 + ESL원어민그룹 1타임 + 주1회 모의고사. 4주 120만원.",classDetails:"1:1 3H + 원어민 1:1 1H + 그룹 1H + 원어민 그룹 1H = 총 6H"},{name:"골프 레져",price4Weeks:8e5,currency:"KRW",note:"AM:Golf, PM:Study. 필리핀1:1 3타임 + 원어민그룹 1타임. 무제한 연습 (EG GOLF, 6am-10pm). 4주 80만원.",classDetails:"1:1 3H + 그룹 1H(필리핀 선생님\xb7오후학습) = 총 4H"},{name:"골프 인텐시브",price4Weeks:12e5,currency:"KRW",note:"AM:Golf, PM:Study. 필리핀1:1 3타임 + 원어민그룹 1타임. 개인 레슨 16회/4주, 무제한 연습 (EG GOLF, 6am-10pm). 4주 120만원.",classDetails:"1:1 3H + 그룹 1H(필리핀 선생님) = 총 4H"},{name:"시니어 코스 (1인)",price4Weeks:12e5,currency:"KRW",note:"필리핀1:1 3타임 + 원어민그룹 1타임. 현지비용 포함 (Deposit 제외). 4주 120만원.",classDetails:"1:1 3H + 그룹 1H(필리핀 선생님) = 총 4H"}],dormitories:[{name:"1인실",capacity:1,price4Weeks:9e5,currency:"KRW"},{name:"2인실",capacity:2,price4Weeks:75e4,currency:"KRW"}],registrationFee:{amount:0,note:"⚠️ 본사 확인 필요 — 자료에 등록비 명시 없음.",currency:"KRW"},surcharges:[],picks:{recCourses:["Light ESL (성인)","골프 레져","골프 인텐시브","시니어 코스 (1인)"],lowest:{course:"Light ESL (성인)",dorm:"2인실"}},localFees:[{category:"SSP",name:"SSP (공부허가증)",amount:7500,currency:"PHP",chargeUnit:"per_person",trigger:"always"},{category:"SSP E-CARD",name:"SSP E-CARD",amount:4e3,currency:"PHP",chargeUnit:"per_person",trigger:"always"},{category:"ACR I-CARD",name:"ACR ICARD (외국인 신분증)",amount:4e3,currency:"PHP",chargeUnit:"per_person",trigger:"over_weeks",triggerWeeks:9},{category:"비자연장",name:"비자연장 1차 (30th day)",amount:4630,currency:"PHP",chargeUnit:"per_person",trigger:"over_weeks",triggerWeeks:4},{category:"비자연장",name:"비자연장 2차 (59th day)",amount:5900,currency:"PHP",chargeUnit:"per_person",trigger:"over_weeks",triggerWeeks:9},{category:"비자연장",name:"비자연장 3차 (89th day)",amount:4130,currency:"PHP",chargeUnit:"per_person",trigger:"over_weeks",triggerWeeks:12},{category:"비자연장",name:"비자연장 4차 (119th day)",amount:4130,currency:"PHP",chargeUnit:"per_person",trigger:"over_weeks",triggerWeeks:16},{category:"비자연장",name:"비자연장 5차 (149th day)",amount:4130,currency:"PHP",chargeUnit:"per_person",trigger:"over_weeks",triggerWeeks:20},{category:"전기\xb7수도\xb7관리비",name:"전기세",amountText:"1인실 ₱1,800 / 2~5인실 ₱2,400 (4주당\xb7초과분 보증금 차감)",currency:"PHP",trigger:"per_4weeks"},{category:"전기\xb7수도\xb7관리비",name:"관리비 (수도세, 청소, 빨래, 경비, 식수, 공용전기, 수영장관리, 시설유지보수)",amountText:"1인실 ₱3,000 / 2인실 ₱2,500 (4주당)",currency:"PHP",trigger:"per_4weeks"},{category:"보증금",name:"기숙사 보증금",amount:4e3,currency:"PHP",chargeUnit:"flat",trigger:"always"}
111,{category:"픽업/샌딩",name:"공항 픽업비",amount:1e3,currency:"PHP",chargeUnit:"flat",trigger:"always"},{category:"학생증/사진",name:"학생증",amount:200,currency:"PHP",chargeUnit:"per_person",trigger:"always"},{category:"교재비",name:"교재비",amountText:"₱300~400 (권당)",currency:"PHP",trigger:"always"}]},{id:"help_clark",schoolCode:"HELP_CLARK",name:"HELP English (헬프어학원)",region:"clark",regionLabel:"클락",schoolType:"general",minWeeks:4,courses:[{name:"ESL",price4Weeks:1e6,currency:"KRW",note:"성인 ESL 과정. 4주 100만원.",classDetails:"1:1 4H + 그룹 2H + 스페셜 1H = 총 7H"},{name:"IELTS",price4Weeks:122e4,currency:"KRW",note:"성인 IELTS 과정. 4주 122만원.",classDetails:"1:1 4H + 그룹 2H + 스페셜 1H = 총 7H"},{name:"비즈니스 과정",price4Weeks:122e4,currency:"KRW",note:"성인 비즈니스 과정. 4주 122만원.",classDetails:"1:1 4H + 그룹 2H + 스페셜 1H = 총 7H"}],dormitories:[{name:"1인실 (성인)",capacity:1,price4Weeks:124e4,currency:"KRW"},{name:"2인실 (성인)",capacity:2,price4Weeks:99e4,currency:"KRW"},{name:"3인실 (성인)",capacity:3,price4Weeks:85e4,currency:"KRW"},{name:"4인실 (성인)",capacity:4,price4Weeks:75e4,currency:"KRW"}],registrationFee:{currency:"KRW",amount:1e5,note:"등록비 1인당 10만원"},surcharges:[],localFees:[{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person",trigger:"always"},{category:"SSP E-CARD",name:"SSP E-Card",amount:4500,currency:"PHP",chargeUnit:"per_person",trigger:"always"},{category:"ACR I-CARD",name:"ACR I-Card",amount:4e3,currency:"PHP",chargeUnit:"per_person",trigger:"over_weeks",triggerWeeks:9},{category:"비자연장",name:"비자연장 1차",amount:4940,currency:"PHP",chargeUnit:"per_person",trigger:"over_weeks",triggerWeeks:4},{category:"비자연장",name:"비자연장 2차",amount:6210,currency:"PHP",chargeUnit:"per_person",trigger:"over_weeks",triggerWeeks:9},{category:"전기\xb7수도\xb7관리비",name:"수도요금",amount:600,currency:"PHP",chargeUnit:"per_4weeks",trigger:"per_4weeks"},{category:"전기\xb7수도\xb7관리비",name:"유틸리티 (기타비용)",amount:1e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"per_4weeks"},{category:"보증금",name:"보증금",amount:3e3,currency:"PHP",chargeUnit:"flat",trigger:"always"},{category:"보증금",name:"전기보증금",amount:1e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"per_4weeks"},{category:"학생증/사진",name:"학생증",amount:200,currency:"PHP",chargeUnit:"per_person",trigger:"always"},{category:"교재비",name:"교재비",amount:1700,currency:"PHP",chargeUnit:"per_4weeks",trigger:"per_4weeks"},{category:"세탁비",name:"세탁비",amount:1e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"per_4weeks"}]},{id:"ibreeze",priceNote:"픽업비 2만원 별도",picks:{recDorms:["IB1 Main 1인실","IB1 Main 2인실","IB2 Prime 1인실","IB2 Prime 2인실"]},schoolCode:"IBREEZE",name:"I.BREEZE International Language Center",region:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:1,courses:[{name:"Intensive Beginner",price4Weeks:105e4,currency:"KRW",classDetails:"1:1 5H(발음&보카\xb7S\xb7R\xb7L\xb7G) + 그룹 3H = 총 8H (+ 야간 옵션 1H 선택)"},{name:"Power ESL",price4Weeks:105e4,currency:"KRW",classDetails:"1:1 5H(R\xb7W\xb7S\xb7L\xb7G) + 그룹 2H + 스페셜 1H(1:10) = 총 8H (+ 야간 옵션 1H 선택)"},{name:"Light ESL",price4Weeks:9e5,currency:"KRW",classDetails:"1:1 4H(S\xb7R\xb7L\xb7G) + 그룹 2H = 총 6H (+ 야간 옵션 1H 선택)"},{name:"Intensive Speaking",price4Weeks:85e4,currency:"KRW",classDetails:"1:1 4타임(Speaking\xb7Conversation\xb7Grammar\xb7Reading) = 총 4타임"},{name:"IELTS Starter",price4Weeks:105e4,currency:"KRW",classDetails:"1:1 4H(S&발음\xb7L\xb7R&보카\xb7W) + 그룹 3H = 총 7H (+ 야간 옵션 1H(IELTS Advance) 선택)"},{name:"IELTS Target",price4Weeks:115e4,currency:"KRW",classDetails:"1:1 5타임 + 그룹 3타임 + IELTS Advance 2타임(야간 18:30~20:00, 90분) = 총 10타임"},{name:"TOEIC Target",price4Weeks:105e4,currency:"KRW",classDetails:"1:1 5타임 + 그룹 2타임 = 총 7타임 (+ 야간 아카데믹 1타임(18:30~19:15) 선택)"}
111,{name:"General Business & BEC",price4Weeks:11e5,currency:"KRW",note:"장기 할인 내장: 16주 4,000,000 / 24주 6,000,000 (정비례 대비 각 40만/60만 할인).",classDetails:"1:1 4H(Business Correspondence\xb7Presentation\xb7Reading\xb7Grammar) + 그룹 2H = 총 6H (+ 야간 옵션 1H + 마지막주 프레젠테이션 선택)"}],dormitories:[{name:"IB1 Main 1인실",capacity:1,price4Weeks:14e5,currency:"KRW"},{name:"IB1 Main 2인실",capacity:2,price4Weeks:102e4,currency:"KRW"},{name:"IB1 Main 3인실",capacity:3,price4Weeks:87e4,currency:"KRW"},{name:"IB1 Main 4인실",capacity:4,price4Weeks:8e5,currency:"KRW"},{name:"IB2 Prime 1인실",capacity:1,price4Weeks:16e5,currency:"KRW"},{name:"IB2 Prime 2인실",capacity:2,price4Weeks:11e5,currency:"KRW"},{name:"IB2 Prime 4인실",capacity:4,price4Weeks:85e4,currency:"KRW"},{name:"콘도 1인실",capacity:1,price4Weeks:19e5,currency:"KRW"},{name:"콘도 2인실 (Family)",capacity:2,price4Weeks:14e5,currency:"KRW"},{name:"콘도 3인실 (Family)",capacity:3,price4Weeks:12e5,currency:"KRW"},{name:"콘도 4인실 (Family)",capacity:4,price4Weeks:11e5,currency:"KRW"}],registrationFee:{currency:"KRW",note:"등록비 10만원. 픽업비 2만원 별도.",amount:1e5},surcharges:[{amountPerWeek:5e4,startDate:"2026-06-28",endDate:"2026-08-15",currency:"KRW",note:"성수기 서차지. 유학원 할인 적용 불가."}],localFees:[{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person"},{category:"ACR I-CARD",name:"SSP I-Card",amount:4500,currency:"PHP",chargeUnit:"per_person"},{category:"ACR I-CARD",name:"ACR I-Card",amount:4e3,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"1차 비자연장",amount:5140,currency:"PHP",chargeUnit:"per_person",triggerWeeks:5},{category:"비자연장",name:"2차 비자연장",amount:6410,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"3차 비자연장",amount:4440,currency:"PHP",chargeUnit:"per_person",triggerWeeks:13},{category:"비자연장",name:"4차 비자연장",amount:5040,currency:"PHP",chargeUnit:"per_person",triggerWeeks:17},{category:"비자연장",name:"5차 비자연장",amount:4440,currency:"PHP",chargeUnit:"per_person",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"Maintenance (시설관리비)",amount:4e3,currency:"PHP",chargeUnit:"per_4weeks"},{category:"전기\xb7수도\xb7관리비",name:"수도세",amount:1e3,currency:"PHP",chargeUnit:"per_4weeks"},{category:"전기\xb7수도\xb7관리비",name:"전기세",amount:2e3,currency:"PHP",chargeUnit:"per_4weeks"},{category:"보증금",name:"보증금",amount:3e3,currency:"PHP",chargeUnit:"per_person"},{category:"픽업/샌딩",name:"픽업비",amount:2e4,currency:"KRW",chargeUnit:"per_person"},{category:"학생증/사진",name:"ID Card",amount:400,currency:"PHP",chargeUnit:"per_person"},{category:"교재비",name:"교재비",amount:2500,currency:"PHP",chargeUnit:"per_4weeks"}]},{id:"ims",schoolCode:"IMS",name:"IMS",region:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:1,courses:[{name:"Premium ESL (4:4)",price4Weeks:1e6,currency:"KRW",classDetails:"1:1 4H + 그룹 4H = 총 8H"},{name:"Intensive ESL (6:3)",price4Weeks:12e5,currency:"KRW",classDetails:"1:1 6H + 그룹 3H = 총 9H"},{name:"Essential ESL 4 (4:0)",price4Weeks:7e5,currency:"KRW",classDetails:"1:1 4H = 총 4H"},{name:"Essential ESL 5 (5:0)",price4Weeks:85e4,currency:"KRW",classDetails:"1:1 5H = 총 5H"},{name:"Essential ESL 6 (6:0)",price4Weeks:1e6,currency:"KRW",classDetails:"1:1 6H = 총 6H"},{name:"시니어 ESL 4 (4:1)",price4Weeks:8e5,currency:"KRW",classDetails:"1:1 4H + 그룹 1H = 총 5H"},{name:"시니어 ESL 5 (5:0)",price4Weeks:8e5,currency:"KRW",classDetails:"1:1 5H = 총 5H"},{name:"Business English (4:4)",price4Weeks:115e4,currency:"KRW",classDetails:"1:1 4H + 그룹 4H = 총 8H"},{name:"Power Speaking (4:4)",price4Weeks:115e4,currency:"KRW",classDetails:"1:1 4H + 그룹 4H = 총 8H"},{name:"TESOL Light (5:0)",price4Weeks:9e5,currency:"KRW",classDetails:"1:1 5H = 총 5H"},{name:"TOEIC SPEAKING (4:4)",price4Weeks:115e4,currency:"KRW",classDetails:"1:1 4H + 그룹 4H = 총 8H"},{name:"OPIC (4:4)",price4Weeks:115e4,currency:"KRW",classDetails:"1:1 4H + 그룹 4H = 총 8H"},{name:"Pre-TOEIC (4:4)",price4Weeks:115e4,currency:"KRW",classDetails:"1:1 4H + 그룹 4H = 총 8H"},{name:"TOEIC (4:4)",price4Weeks:115e4,currency:"KRW",classDetails:"1:1 4H + 그룹 4H = 총 8H"},{name:"TOEIC Guarantee (4:4)",currency:"KRW",note:"12주 3,650,000 / 16주 4,800,000 / 20주 5,950,000 / 24주 7,300,000. 장기 전용 가격."},{name:"Pre-IELTS (4:4)",price4Weeks:115e4,currency:"KRW",classDetails:"1:1 4H + 그룹 4H = 총 8H"},{name:"IELTS (4:4)",price4Weeks:115e4,currency:"KRW",classDetails:"1:1 4H + 그룹 4H = 총 8H"},{name:"IELTS Guarantee (4:4)",currency:"KRW",note:"12주 3,850,000 / 16주 5,000,000 / 20주 6,150,000 / 24주 7,700,000. 장기 전용 가격."}],dormitories:[{name:"1인실 (Single)",capacity:1,price4Weeks:12e5,currency:"KRW"},{name:"2인실 (Double)",capacity:2,price4Weeks:1e6,currency:"KRW"},{name:"3인실 (Triple)",capacity:3,price4Weeks:8e5,currency:"KRW"},{name:"4인실 (Quadruple)",capacity:4,price4Weeks:7e5,currency:"KRW"}],registrationFee:{note:"입학금 10만원.",amount:1e5,currency:"KRW"},surcharges:[],localFees:[{category:"SSP",name:"SSP",amount:8e3,currency:"PHP",chargeUnit:"per_person"},{category:"SSP E-CARD",name:"E-Card",amount:4e3,currency:"PHP",chargeUnit:"per_person"},{category:"ACR I-CARD",name:"ACR-I Card",amount:4e3,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"1차 비자연장",amount:5050,currency:"PHP",chargeUnit:"per_person",triggerWeeks:5},{category:"비자연장",name:"2차 비자연장",amount:6800,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"3차 비자연장",amount:4250,currency:"PHP",chargeUnit:"per_person",triggerWeeks:13},{category:"비자연장",name:"4차 비자연장",amount:4250,currency:"PHP",chargeUnit:"per_person",triggerWeeks:17},{category:"비자연장",name:"5차 비자연장",amount:4250,currency:"PHP",chargeUnit:"per_person",triggerWeeks:21},{category:"비자연장",name:"6차 비자연장",amount:5850,currency:"PHP",chargeUnit:"per_person",triggerWeeks:25},{category:"전기\xb7수도\xb7관리비",name:"전기요금",amount:2e3,currency:"PHP",chargeUnit:"per_4weeks"},{category:"전기\xb7수도\xb7관리비",name:"공용관리비, 수도",amount:2e3,currency:"PHP",chargeUnit:"per_4weeks"},{category:"전기\xb7수도\xb7관리비",name:"에어컨",amount:1e3,currency:"PHP",chargeUnit:"per_4weeks"},{category:"보증금",name:"보증금 (키/기숙사)",amount:3e3,currency:"PHP",chargeUnit:"per_person"},{category:"픽업/샌딩",name:"픽업비용",amount:1e3,currency:"PHP",chargeUnit:"per_person"},{category:"학생증/사진",name:"학생 ID카드",amount:300,currency:"PHP",chargeUnit:"per_person"},{category:"교재비",name:"교재비",amount:3e3,currency:"PHP",chargeUnit:"per_person"}]},{id:"jic_challenger",picks:{recCombo:{course:"ESL Flex",dorm:"Room for 1 (studio)"}}
111,schoolCode:"JIC_CHALLENGER",name:"JIC Challenger Campus",region:"baguio",regionLabel:"바기오",schoolType:"general",minWeeks:1,courses:[{name:"ESL Flex",classDetails:"1:1 3H + 스페셜 클래스 2H = 총 5H",price4Weeks:8e5,currency:"KRW"},{name:"ESL Lite",classDetails:"1:1 4H + 그룹 클래스 2H + 스페셜 클래스 2H = 총 8H",price4Weeks:1e6,currency:"KRW"},{name:"ESL Core",classDetails:"1:1 5H + 그룹 클래스 2H + 스페셜 클래스 2H = 총 9H",price4Weeks:112e4,currency:"KRW"},{name:"ESL Standard",classDetails:"1:1 6H + 그룹 클래스 2H + 스페셜 클래스 2H = 총 10H",price4Weeks:124e4,currency:"KRW"},{name:"IELTS Lite",classDetails:"1:1 4H + 그룹 클래스 2H + 스페셜 클래스 2H = 총 8H",price4Weeks:124e4,currency:"KRW"},{name:"IELTS Core",classDetails:"1:1 5H + 그룹 클래스 2H + 스페셜 클래스 2H = 총 9H",price4Weeks:132e4,currency:"KRW"},{name:"IELTS Standard",classDetails:"1:1 6H + 그룹 클래스 2H + 스페셜 클래스 2H = 총 10H",price4Weeks:14e5,currency:"KRW"},{name:"IELTS Guarantee",classDetails:"1:1 6H + 그룹 클래스 2H + 스페셜 클래스 2H = 총 10H",price4Weeks:14e5,currency:"KRW",note:"IELTS Guarantee Application Fee ₱18,000 별도 (현지납부, 8주 단위). 최소 12주 등록 필수."}],dormitories:[{name:"Room for 1 (studio)",capacity:1,price4Weeks:159e4,currency:"KRW"},{name:"Room for 2 (studio)",capacity:2,price4Weeks:95e4,currency:"KRW"},{name:"Room for 4 (loft)",capacity:4,price4Weeks:89e4,currency:"KRW"},{name:"Room for 4 (studio)",capacity:4,price4Weeks:75e4,currency:"KRW"}],registrationFee:{currency:"KRW",amount:1e5,note:"등록금 ₩100,000 (등록 시 1회 납부, 환불 불가)"},surcharges:[{label:"성수기 추가 요금",amountPerWeek:5e4,startDate:"2026-06-29",endDate:"2026-08-22",currency:"KRW",note:"2026년 6월 29일 ~ 8월 22일 성수기 기간, 주당 50,000원 추가."}],localFees:[{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"SSP",name:"SSP I-card",amount:4500,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"ACR I-CARD",name:"ACR-I Card",amount:4e3,currency:"PHP",chargeUnit:"per_person",trigger:"stay_over_59days",triggerWeeks:9},{category:"비자연장",name:"VISA Extension 1st (8 weeks)",amount:4940,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:5},{category:"비자연장",name:"VISA Extension 2nd (12 weeks)",amount:11150,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:9},{category:"비자연장",name:"VISA Extension 3rd (16 weeks)",amount:15390,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:13},{category:"비자연장",name:"VISA Extension 4th (20 weeks)",amount:19630,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:17},{category:"비자연장",name:"VISA Extension 5th (24 weeks)",amount:23870,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"Utility Bill",amount:3e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"전기\xb7수도\xb7관리비",name:"Maintenance",amount:1e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"보증금",name:"Deposit (refundable)",amount:3e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"학생증/사진",name:"Student ID card",amount:200,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"세탁비",name:"Laundry Fee",amount:1200,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"기타",name:"IELTS Guarantee Application Fee",amount:18e3,currency:"PHP",chargeUnit:"per_8weeks",trigger:"ielts_guarantee"},{category:"기타",name:"Odd week (Arrival and Graduation)",amount:8e3,currency:"PHP",chargeUnit:"per_odd_week",trigger:"odd_week"}]},{id:"jic_premium",schoolCode:"JIC_PREMIUM",name:"JIC Premium Campus",region:"baguio",regionLabel:"바기오",schoolType:"general",minWeeks:1,courses:[{name:"Speaking Starter",classDetails:"1:1 4H + 그룹 1H = 총 5H (+ 옵션 2H 선택)",price4Weeks:103e4,currency:"KRW"},{name:"Speaking Pro",classDetails:"1:1 5H + 그룹 1H = 총 6H (+ 옵션 2H 선택)",price4Weeks:1215e3,currency:"KRW"},{name:"Speaking Master",classDetails:"1:1 6H + 그룹 1H = 총 7H (+ 옵션 2H 선택)",price4Weeks:14e5,currency:"KRW"},{name:"ESL TEP 8 (TEP 8)",classDetails:"1:1 3H + 그룹 3H = 총 6H (+ 옵션 2H 선택)",price4Weeks:103e4,currency:"KRW"},{name:"ESL TEP 9 (TEP 9)",classDetails:"1:1 4H + 그룹 3H = 총 7H (+ 옵션 2H 선택)",price4Weeks:113e4,currency:"KRW"},{name:"ESL TEP 10 (TEP 10)",classDetails:"1:1 5H + 그룹 3H = 총 8H (+ 옵션 2H 선택)",price4Weeks:123e4,currency:"KRW"},{name:"Active Senior 5 (AS 5)",classDetails:"1:1 3H = 총 3H (+ 옵션 2H 선택)",price4Weeks:83e4,currency:"KRW"},{name:"Active Senior 6 (AS 6)",classDetails:"1:1 4H = 총 4H (+ 옵션 2H 선택)",price4Weeks:93e4,currency:"KRW"},{name:"TOEIC",classDetails:"1:1 3H + 그룹 3H = 총 6H (+ 옵션 2H 선택)",price4Weeks:113e4,currency:"KRW"},{name:"Business Master 8 (BM 8)",classDetails:"1:1 6H = 총 6H (+ 옵션 2H 선택)",price4Weeks:14e5,currency:"KRW"}],dormitories:[{name:"Room for 1 Balcony",capacity:1,price4Weeks:179e4,currency:"KRW"},{name:"Semi-Single Room Dormitory 2",capacity:1,price4Weeks:159e4,currency:"KRW"},{name:"Couple Room Balcony",capacity:2,price4Weeks:129e4,currency:"KRW"},{name:"Room for 2 Balcony",capacity:2,price4Weeks:119e4,currency:"KRW"},{name:"Room for 2 No Balcony",capacity:2,price4Weeks:109e4,currency:"KRW"},{name:"Room for 4 Balcony",capacity:4,price4Weeks:89e4,currency:"KRW"},{name:"Room for 4 No Balcony",capacity:4,price4Weeks:79e4,currency:"KRW"}],registrationFee:{currency:"KRW",note:"등록금 ₩100,000 (등록 시 1회 납부, 환불 불가)",amount:1e5},surcharges:[{label:"성수기 추가 요금",amountPerWeek:5e4,startDate:"2026-06-29",endDate:"2026-08-22",currency:"KRW",note:"2026년 6월 29일 ~ 8월 22일 성수기 기간, 주당 50,000원 추가."}],localFees:[{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"SSP",name:"SSP I-card",amount:4500,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"ACR I-CARD",name:"ACR-I Card",amount:4e3,currency:"PHP",chargeUnit:"per_person",trigger:"stay_over_59days",triggerWeeks:9},{category:"비자연장",name:"VISA Extension 1st (8 weeks)",amount:4940,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:5},{category:"비자연장",name:"VISA Extension 2nd (12 weeks)",amount:11150,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:9},{category:"비자연장",name:"VISA Extension 3rd (16 weeks)",amount:15390,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:13},{category:"비자연장",name:"VISA Extension 4th (20 weeks)",amount:19630,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:17},{category:"비자연장",name:"VISA Extension 5th (24 weeks)",amount:23870,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"Utility Bill",amount:3e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"전기\xb7수도\xb7관리비",name:"Maintenance",amount:1e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"보증금",name:"Deposit (refundable)",amount:3e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"학생증/사진",name:"Student ID card",amount:200,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"세탁비",name:"Laundry Fee",amount:1200,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"교재비",name:"Class Materials (코스별 상이, 900~1,900)",amount:900,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"픽업/샌딩",name:"픽업 (Manila\xb7Clark)",amount:3e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"기타",name:"Odd week (Arrival and Graduation)",amount:8e3,currency:"PHP",chargeUnit:"per_odd_week",trigger:"odd_week"}],picks:{recCombo:{course:"ESL TEP 9 (TEP 9)",dorm:"Room for 1 Balcony"}}},{id:"lslc",schoolCode:"LSLC",name:"LSLC (La Salle Language Center)",region:"bacolod",regionLabel:"바콜로드",schoolType:"general",minWeeks:1,courses:[{name:"ESL Regular (6 hrs)",classDetails:"1:1 4H + 그룹 2H + 옵션 1H = 총 7H",price4Weeks:91e4,currency:"KRW"},{name:"ESL Intensive (7 hrs)",classDetails:"1:1 5H + 그룹 2H + 옵션 1H = 총 8H",price4Weeks:96e4,currency:"KRW"},{name:"TOEIC / TOEFL / IELTS / BUSINESS",classDetails:"1:1 4H + 그룹 2H + 옵션 1H = 총 7H",price4Weeks:1e6,currency:"KRW"},{name:"TESOL",price4Weeks:1e6,currency:"KRW",classDetails:"그룹 4H + 실습 5회(마지막주) + 1:1 ESL(선택) = 총 8H"},{name:"IELTS Guarantee (LIG)",classDetails:"1:1 4H + 그룹 2H + 옵션 1H = 총 7H",price4Weeks:12e5,currency:"KRW",note:"12주 전용. Single 6,900천원 / Twin 6,450천원 / Triple 6,150천원 (합산가, 12주 총액). 4주 환산 수업료 120만원."}
111],dormitories:[{name:"Single",capacity:1,price4Weeks:11e5,currency:"KRW"},{name:"Twin",capacity:2,price4Weeks:95e4,currency:"KRW"},{name:"Triple",capacity:3,price4Weeks:85e4,currency:"KRW"}],registrationFee:{note:"등록금 100,000원 (1회, 환불 불가)",amount:1e5,currency:"KRW"},surcharges:[],localFees:[{category:"SSP",name:"S.S.P",amount:7800,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"ACR I-CARD",name:"I-CARD",amount:4500,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"비자연장",name:"Visa 1st Extension",amount:4360,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:5},{category:"비자연장",name:"Visa 2nd Extension",amount:9990,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:9},{category:"비자연장",name:"Visa 3rd Extension",amount:10690,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:13},{category:"비자연장",name:"Visa 4th Extension",amount:14350,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:17},{category:"비자연장",name:"Visa 5th Extension",amount:15850,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"Electricity Fee",amount:1500,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"전기\xb7수도\xb7관리비",name:"Water Fee",amount:200,currency:"PHP",chargeUnit:"per_week",trigger:"enrollment"},{category:"보증금",name:"Dorm Deposit",amount:2500,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"학생증/사진",name:"ID Fee",amount:200,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"교재비",name:"Text Book",amountText:"₱200~400 (권당)",currency:"PHP",trigger:"enrollment"}]},{id:"mk",schoolCode:"MK",name:"MK Language Training Center",region:"iloilo",regionLabel:"일로일로",schoolType:"general",minWeeks:1,courses:[{name:"ESL Basic",classDetails:"1:1 3H + 1:5 2H = 총 5H (+ 저녁스터디 2H 자습)",price4Weeks:8e5,currency:"KRW"},{name:"ESL Standard",classDetails:"1:1 4H + 1:5 2H = 총 6H (+ 저녁스터디 2H 자습)",price4Weeks:9e5,currency:"KRW"},{name:"ESL Premium",classDetails:"1:1 5H + 1:5 2H = 총 7H (+ 저녁스터디 2H 자습)",price4Weeks:105e4,currency:"KRW"},{name:"ESL Intensive",classDetails:"1:1 7H = 총 7H (+ 저녁스터디 2H 자습)",price4Weeks:12e5,currency:"KRW"},{name:"IELTS",classDetails:"1:1 4H + 1:5 2H = 총 6H (+ 저녁스터디 2H 자습)",price4Weeks:11e5,currency:"KRW"},{name:"IELTS Guarantee",classDetails:"1:1 6H + 1:5 2H = 총 8H (+ 저녁스터디 2H 자습)",price4Weeks:13e5,currency:"KRW"},{name:"TESOL",classDetails:"정규수업 + WVSU 8H (4주 코스)",price4Weeks:45e4,currency:"KRW",note:"WVSU SSP 별도 필요"},{name:"Business Course",classDetails:"1:1 4H + 1:5 2H = 총 6H (+ 저녁스터디 2H 자습)",price4Weeks:11e5,currency:"KRW"},{name:"Survival Course",classDetails:"1:1 4H + 1:5 2H = 총 6H (+ 저녁스터디 2H 자습)",price4Weeks:11e5,currency:"KRW"}],dormitories:[{name:"1인실",capacity:1,price4Weeks:11e5,currency:"KRW"},{name:"2인실",capacity:2,price4Weeks:85e4,currency:"KRW"},{name:"3인실",capacity:3,price4Weeks:75e4,currency:"KRW"},{name:"4인실 (가족)",capacity:4,price4Weeks:7e5,currency:"KRW"}],picks:{lowest:{course:"ESL Basic",dorm:"3인실"}},registrationFee:{note:"등록비 15만원",amount:15e4,currency:"KRW"},surcharges:[],localFees:[{category:"SSP",name:"SSP",amount:7500,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"SSP",name:"SSP I-CARD",amount:4500,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"ACR I-CARD",name:"ACR I-CARD",amount:4300,currency:"PHP",chargeUnit:"per_person",trigger:"stay_over_59days",triggerWeeks:9},{category:"비자연장",name:"VISA 1st",amount:5040,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:5},{category:"비자연장",name:"VISA 2nd",amount:6420,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:9},{category:"비자연장",name:"VISA 3rd",amount:4330,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:13},{category:"비자연장",name:"VISA 4th",amount:4330,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:17},{category:"비자연장",name:"VISA 5th",amount:4330,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"전기세",amount:0,currency:"PHP",chargeUnit:"per_usage",trigger:"enrollment"},{category:"전기\xb7수도\xb7관리비",name:"수도세",amount:200,currency:"PHP",chargeUnit:"per_week",trigger:"enrollment"},{category:"전기\xb7수도\xb7관리비",name:"관리비",amount:250,currency:"PHP",chargeUnit:"per_week",trigger:"enrollment"},{category:"보증금",name:"기숙사 보증금",amount:100,currency:"USD",chargeUnit:"per_person",trigger:"enrollment"},{category:"보증금",name:"기숙사 키 보증금",amount:150,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"픽업/샌딩",name:"픽업비 일로일로 공항 (1인)",amount:1700,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"픽업/샌딩",name:"픽업비 칼리보 공항 (1인)",amount:4e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"학생증/사진",name:"MK ID Card",amount:300,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"교재비",name:"교재비 (권당 250~400)",amount:300,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"세탁비",name:"세탁비 (8kg당 150)",amount:150,currency:"PHP",chargeUnit:"per_person",trigger:"usage"},{category:"ECC/기타허가",name:"CRTV",amount:1800,currency:"PHP",chargeUnit:"per_person",trigger:"stay_over",triggerWeeks:25},{category:"ECC/기타허가",name:"ECC",amount:1e3,currency:"PHP",chargeUnit:"per_person",trigger:"stay_over",triggerWeeks:25}]},{id:"monol_golf",schoolCode:"MONOL_GOLF",name:"Monol 골프 프로그램",region:"baguio",regi
111onLabel:"바기오",schoolType:"camp",minWeeks:4,courses:[],dormitories:[],registrationFee:{note:"패키지에 포함",amount:0,currency:"KRW"},surcharges:[],localFees:[],packages:[{name:"골프 프로그램 (4주)",weeks:4,price:32e5,allInclusive:!0,includes:"스크린 골프 스튜디오 1대1 레슨 주1회 + 야외 연습장 그룹레슨 주2회 + 실전 필드레슨 4주에 2회, 여행영어\xb7골프영어 실전 영어 수업 2타임, 스텐다드 …",note:"한국인 티칭프로와 함께하는 골프 레슨. 스텐다드 1인실 사용. 항공료와 여행자 보험을 제외한 모든 현지비용 포함(픽업, 샌딩 등)."}]},{id:"monol",schoolCode:"MONOL",name:"Monol 어학원",region:"baguio",regionLabel:"바기오",schoolType:"general",minWeeks:2,courses:[{name:"LEAP 5",classDetails:"1:1 5H = 총 5H (+ 옵션그룹 4H 선택)",price4Weeks:145e4,currency:"KRW"},{name:"IELTS 5",classDetails:"1:1 5H = 총 5H (+ 옵션그룹 4H(Speaking\xb7Listening\xb7Reading\xb7Writing task1\xb7task2) 선택)",price4Weeks:125e4,currency:"KRW"},{name:"ESL 5",classDetails:"1:1 5H = 총 5H (+ 옵션그룹 4H(Speaking2\xb7Listening2\xb7Reading1) 선택)",price4Weeks:11e5,currency:"KRW"},{name:"ESL 4",classDetails:"1:1 4H = 총 4H (+ 옵션그룹 4H(Speaking2\xb7Listening1\xb7Reading1) 선택)",price4Weeks:93e4,currency:"KRW"},{name:"ESL 3",classDetails:"1:1 3H = 총 3H (+ 옵션그룹 4H(Speaking1\xb7Listening1\xb7Reading1) 선택)",price4Weeks:76e4,currency:"KRW"},{name:"Senior ESL",classDetails:"1:1 3H = 총 3H (+ 옵션그룹 4H 선택)",price4Weeks:85e4,currency:"KRW"}],dormitories:[{name:"프리미엄 1인실",capacity:1,price4Weeks:14e5,currency:"KRW"},{name:"스텐다드 1인실",capacity:1,price4Weeks:109e4,currency:"KRW"},{name:"세미 1인실",capacity:1,price4Weeks:99e4,currency:"KRW"},{name:"3인실",capacity:3,price4Weeks:83e4,currency:"KRW"},{name:"4인실 (캡슐)",capacity:4,price4Weeks:75e4,currency:"KRW"}],registrationFee:{currency:"KRW",note:"등록금 ₩100,000",amount:1e5},surcharges:[{label:"성수기 추가 요금",amountPerWeek:5e4,startDate:"2026-06-29",endDate:"2026-08-22",currency:"KRW",note:"바기오 서차지. 2026.6.29~8.22, 주당 50,000원."}],localFees:[{category:"픽업/샌딩",name:"픽업비",currency:"PHP",amountText:"상담 시 안내"},{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"SSP E-CARD",name:"SSP E-CARD",amount:4500,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"비자연장",name:"비자연장비 5~8주",amount:4940,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:5},{category:"비자연장",name:"비자연장비 9~12주",amount:11150,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:9},{category:"비자연장",name:"비자연장비 13~16주",amount:15390,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:13},{category:"비자연장",name:"비자연장비 17~20주",amount:19630,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:17},{category:"비자연장",name:"비자연장비 21~24주",amount:23870,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"종합 관리비",amount:5e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"보증금",name:"보증금 (환불가능)",amount:4e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"학생증/사진",name:"학생증",amount:0,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"}]},{id:"pilaedu",schoolCode:"PILAEDU",name:"PILAedu (Philippine International Language Academy)",region:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:1,courses:[{name:"Trial ESL (1:1 3H + 그룹 1H + 옵션 2H)",price4Weeks:7e5,currency:"KRW",classDetails:"1:1 3H + 그룹 1H + 옵션 2H = 총 6H"},{name:"Lite ESL (1:1 4H + 그룹 2H + 옵션 2H)",price4Weeks:9e5,currency:"KRW",classDetails:"1:1 4H + 그룹 2H + 옵션 2H = 총 8H"},{name:"Regular ESL (1:1 5H + 그룹 3H + 옵션 2H)",price4Weeks:11e5,
111currency:"KRW",classDetails:"1:1 5H + 그룹 3H + 옵션 2H = 총 10H"},{name:"Intensive ESL (1:1 6H + 그룹 3H + 옵션 2H)",price4Weeks:125e4,currency:"KRW",classDetails:"1:1 6H + 그룹 3H + 옵션 2H = 총 11H"},{name:"Business (1:1 5H + 그룹 3H + 옵션 2H)",price4Weeks:12e5,currency:"KRW",classDetails:"1:1 5H + 그룹 3H + 옵션 2H = 총 10H"},{name:"IELTS/TOEFL (1:1 5H + 그룹 3H + 옵션 2H)",price4Weeks:14e5,currency:"KRW",classDetails:"1:1 5H + 그룹 3H + 옵션 2H = 총 10H"}],dormitories:[{name:"Single B (Dorm w/ T/B)",capacity:1,price4Weeks:2e6,currency:"KRW"},{name:"Twin B (Dorm w/ T/B)",capacity:2,price4Weeks:16e5,currency:"KRW"},{name:"Single C (Dorm w/ T/B)",capacity:1,price4Weeks:15e5,currency:"KRW"},{name:"Quad B (Dorm w/o T/B)",capacity:4,price4Weeks:125e4,currency:"KRW"},{name:"Quad C (Dorm w/o T/B)",capacity:4,price4Weeks:105e4,currency:"KRW"},{name:"Single A (Condo)",capacity:1,price4Weeks:25e5,currency:"KRW"},{name:"Twin A (Condo)",capacity:2,price4Weeks:19e5,currency:"KRW"}],registrationFee:{note:"등록비 13만원.",amount:13e4,currency:"KRW"},surcharges:[],localFees:[{category:"SSP",name:"SSP",amount:8e3,currency:"PHP",chargeUnit:"per_person"},{category:"SSP",name:"SSP I-Card",amount:4500,currency:"PHP",chargeUnit:"per_person"},{category:"비자연장",name:"VISA I-Card (ACR)",amount:4e3,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"비자연장 (누적)",amount:5130,currency:"PHP",chargeUnit:"per_person",triggerWeeks:5},{category:"전기\xb7수도\xb7관리비",name:"종합관리비 (Miscellaneous)",amount:3e3,currency:"PHP",chargeUnit:"per_4weeks"},{category:"전기\xb7수도\xb7관리비",name:"전기/수도",amount:3500,currency:"PHP",chargeUnit:"per_4weeks"},{category:"보증금",name:"보증금",amount:3e3,currency:"PHP",chargeUnit:"per_person"},{category:"픽업/샌딩",name:"픽업 (편도)",amount:1200,currency:"PHP",chargeUnit:"per_person"},{category:"학생증/사진",name:"ID 발급",amount:500,currency:"PHP",chargeUnit:"per_person"},{category:"교재비",name:"교재비 (권당 500)",amount:500,currency:"PHP",chargeUnit:"per_person"},{category:"ECC/기타허가",name:"ECC",amount:2e3,currency:"PHP",chargeUnit:"per_person"},{category:"세탁비",name:"세탁비 (1kg당 100)",amount:100,currency:"PHP",chargeUnit:"per_person"}]},{id:"philinter",schoolCode:"PHILINTER",name:"Philinter Academy",region:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:1,courses:[{name:"Intensive ESL",price4Weeks:1e3,currency:"USD",classDetails:"1:1 4H + SGC 1H + Connecting 2H + Evening Study 2H = 총 9H (+ BGC 1H\xb7EVENING ACTIVITY 1H 옵션 \xb7 최대 11H)"},{name:"General ESL",price4Weeks:870,currency:"USD",classDetails:"1:1 3H + SGC 1H + Connecting 2H = 총 6H (+ BGC 2H\xb7EVENING ACTIVITY 1H 옵션 \xb7 최대 9H)"},{name:"IPS (Intensive Power Speaking)",price4Weeks:1100,currency:"USD",classDetails:"1:1 4H + SGC 2H + Connecting 2H = 총 8H (+ Evening Study 2H\xb7EVENING ACTIVITY 1H 옵션 \xb7 최대 11H)"},{name:"Light ESL",price4Weeks:750,currency:"USD",classDetails:"1:1 2H + SGC 2H = 총 4H (+ BGC 1H\xb7EVENING ACTIVITY 1H 옵션 \xb7 최대 6H)"},{name:"Speaking (Premium)",price4Weeks:1400,currency:"USD",note:"8주 전용 (Premium).",classDetails:"그룹 4H = 총 4H"},{name:"Booster Speaking",price4Weeks:1400,currency:"USD",note:"4주 전용.",classDetails:"그룹 4H = 총 4H"},{name:"IELTS Intensive",price4Weeks:1120,currency:"USD",classDetails:"1:1 4H + SGC 4H = 총 8H (+ Evening Study 2H 선택)"},{name:"IELTS Guarantee 12주",price4Weeks:1350,currency:"USD",classDetails:"1:1 4H + SGC 4H = 총 8H (+ EVENING ACTIVITY 2H 옵션 \xb7 최대 10H)",note:"12주 전용."},{name:"IELTS Guarantee 8주",price4Weeks:1530,currency:"USD",classDetails:"1:1 4H + SGC 4H = 총 8H (+ EVENING ACTIVITY 2H 옵션 \xb7 최대 10H)",note:"8주 전용."},{name:"TOEIC Regular",price4Weeks:1040,currency:"USD",classDetails:"1:1 4H + SGC 2H + BGC 2H = 총 8H (+ EVENING ACTIVITY 1H 옵션 \xb7 최대 9H)"},{name:"TOEIC Guarantee 12주",price4Weeks:1200,currency:"USD",classDetails:"1:1 4H + 소그룹 2H + 대그룹 2H = 총 8H",note:"12주 전용."},{name:"Focus Industry",price4Weeks:1190,currency:"USD",classDetails:"1:1 3H(전공 elective) + SGC 2H + Connecting 2H = 총 7H (+ BGC 1H\xb7EVENING ACTIVITY 1H 옵션 \xb7 최대 9H)"},{name:"Basic Business",price4Weeks:1060,currency:"USD",classDetails:"1:1 3H + SGC 2H + Connecting 2H = 총 7H (+ BGC 1H\xb7EVENING ACTIVITY 1H 옵션 \xb7 최대 9H)"},{name:"Advanced Business",price4Weeks:1110,currency:"USD",classDetails:"1:1 3H + SGC 2H + Connecting 2H = 총 7H (+ BGC 1H\xb7EVENING ACTIVITY 1H 옵션 \xb7 최대 9H)"}],dormitories:[{name:"1인실 (Single)",capacity:1,price4Weeks:1400,currency:"USD"},{name:"2인실 (Double)",capacity:2,price4Weeks:970,currency:"USD"},{name:"3인실 (Triple)",capacity:3,price4Weeks:810,currency:"USD"},{name:"AZON 콘도 1인실",capacity:1,price4Weeks:1690,currency:"USD"},{name:"AZON 콘도 2인실",capacity:2,price4Weeks:1100,currency:"USD"},{name:"AZON 콘도 3인실",capacity:3,price4Weeks:890,currency:"USD"}],registrationFee:{amount:120,currency:"USD"}
111,surcharges:[{amountPerWeek:40,startDate:"2026-07-06",endDate:"2026-08-30",currency:"USD",note:"성수기 서차지. 주당 40 USD."}],hintCourse:"하루 수업 수가 적은, 부담 없는 과정 위주로 골라드렸어요.",picks:{recCourses:["Light ESL","General ESL","Intensive ESL"]},localFees:[{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person"},{category:"ACR I-CARD",name:"SSP ACR I-Card",amount:4500,currency:"PHP",chargeUnit:"per_person"},{category:"ACR I-CARD",name:"Tourist ACR I-Card",amount:4e3,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"1차 비자연장 (5-8주)",amount:5140,currency:"PHP",chargeUnit:"per_person",triggerWeeks:5},{category:"비자연장",name:"2차 비자연장 (9-12주)",amount:6920,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"3차 비자연장 (13-16주)",amount:4440,currency:"PHP",chargeUnit:"per_person",triggerWeeks:13},{category:"비자연장",name:"4차 비자연장 (17-20주)",amount:4950,currency:"PHP",chargeUnit:"per_person",triggerWeeks:17},{category:"비자연장",name:"5차 비자연장 (21-24주)",amount:5450,currency:"PHP",chargeUnit:"per_person",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"수도세",amount:250,currency:"PHP",chargeUnit:"per_week"},{category:"전기\xb7수도\xb7관리비",name:"전기세",amountByWeeks:{4:5e3,8:9e3,12:13e3},currency:"PHP"},{category:"전기\xb7수도\xb7관리비",name:"관리비",amount:550,currency:"PHP",chargeUnit:"per_week"},{category:"보증금",name:"보증금",amountByWeeks:{4:3e3,8:4e3,12:5e3},currency:"PHP"},{category:"픽업/샌딩",name:"픽업비",amount:1200,currency:"PHP",chargeUnit:"per_person"},{category:"학생증/사진",name:"School ID Card",amount:400,currency:"PHP",chargeUnit:"per_person"}]},{id:"qqenglish_bfc",schoolCode:"QQENGLISH_BFC",name:"QQ English Beach Front Campus (BFC)",region:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:2,courses:[{name:"1:1 4시간",price4Weeks:784,currency:"USD",note:"1:1 수업 4시간",classDetails:"1:1 4H = 총 4H"},{name:"1:1 4시간 + 그룹 2시간",price4Weeks:884,currency:"USD",note:"1:1 수업 4시간 + 그룹수업 2시간",classDetails:"1:1 4H + 그룹 2H(BFC 전용) = 총 6H"},{name:"1:1 6시간",price4Weeks:1078,currency:"USD",note:"1:1 수업 6시간",classDetails:"1:1 6H = 총 6H"},{name:"1:1 6시간 + 그룹 2시간",price4Weeks:1178,currency:"USD",note:"1:1 수업 6시간 + 그룹수업 2시간",classDetails:"1:1 6H + 그룹 2H = 총 8H"},{name:"1:1 8시간",price4Weeks:1437,currency:"USD",note:"1:1 수업 8시간",classDetails:"1:1 8H = 총 8H"}],dormitories:[{name:"캡슐 기숙사 (성인만)",price4Weeks:351,currency:"USD"},{name:"통학 (숙소 없음)",price4Weeks:0,currency:"USD"},{name:"호텔 (외부 호텔)",price4Weeks:1350,currency:"USD"}],registrationFee:{note:"등록금 $150",amount:150,currency:"USD"},surcharges:[{label:"피크시즌 추가비 (6,7,8월)",amountPerWeek:37.5,startDate:"2026-06-01",endDate:"2026-08-31",currency:"USD",note:"피크시즌(6,7,8월) 수업료 추가. 모든 코스 동일하게 4주당 $150 추가 (주당 $37.50). 기숙사/식사는 레귤러와 동일."}],localFees:[{category:"SSP",name:"SSP",amount:10440,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"ACR I-CARD",name:"I-Card (ACR I-Card)",amount:3200,currency:"PHP",chargeUnit:"per_person",trigger:"stay_over_59days",triggerWeeks:9},{category:"비자연장",name:"VISA Extension Fee",amount:4460,currency:"PHP",chargeUnit:"per_month",trigger:"monthly",triggerWeeks:5},{category:"학생증/사진",name:"Student ID",amount:300,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"ECC/기타허가",name:"ECC 표준 처리",amount:2e3,currency:"PHP",chargeUnit:"per_person",trigger:"6months_plus",triggerWeeks:25},{category:"ECC/기타허가",name:"ECC 긴급 처리",amount:3e3,currency:"PHP",chargeUnit:"per_person",trigger:"6months_plus",triggerWeeks:25}]},{id:"qqenglish_itp",schoolCode:"QQENGLISH_ITP",name:"QQ English IT Park",regi
111on:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:2,courses:[{name:"1:1 4시간",price4Weeks:784,currency:"USD",note:"1:1 수업 4시간",classDetails:"1:1 4H = 총 4H"},{name:"1:1 4시간 + 그룹 2시간",price4Weeks:884,currency:"USD",note:"1:1 수업 4시간 + 그룹수업 2시간",classDetails:"1:1 6H + 그룹 2H = 총 8H"},{name:"1:1 6시간",price4Weeks:1078,currency:"USD",note:"1:1 수업 6시간",classDetails:"1:1 6H = 총 6H"},{name:"1:1 6시간 + 그룹 2시간",price4Weeks:1178,currency:"USD",note:"1:1 수업 6시간 + 그룹수업 2시간",classDetails:"1:1 6H + 그룹 2H = 총 8H"},{name:"1:1 8시간",price4Weeks:1437,currency:"USD",note:"1:1 수업 8시간",classDetails:"1:1 8H = 총 8H"}],dormitories:[{name:"통학 (숙소 없음)",price4Weeks:0,currency:"USD"},{name:"캡슐 기숙사 (성인만)",price4Weeks:351,currency:"USD"},{name:"호텔 (외부 호텔)",price4Weeks:1350,currency:"USD"}],registrationFee:{currency:"USD",amount:150,note:"등록금 $150"},surcharges:[{label:"피크시즌 추가비 (6,7,8월)",amountPerWeek:37.5,startDate:"2026-06-01",endDate:"2026-08-31",currency:"USD",note:"피크시즌(6,7,8월) 수업료 추가. 모든 코스 동일하게 4주당 $150 추가 (주당 $37.50). 기숙사/식사는 레귤러와 동일."}],localFees:[{category:"SSP",name:"SSP",amount:10440,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"ACR I-CARD",name:"I-Card (ACR I-Card)",amount:3200,currency:"PHP",chargeUnit:"per_person",trigger:"stay_over_59days",triggerWeeks:9},{category:"비자연장",name:"VISA Extension Fee",amount:4460,currency:"PHP",chargeUnit:"per_month",trigger:"monthly",triggerWeeks:5},{category:"전기\xb7수도\xb7관리비",name:"전기세 (캡슐 기숙사 이용 시)",amount:100,currency:"PHP",chargeUnit:"per_day",trigger:"capsule_dorm"},{category:"학생증/사진",name:"Student ID",amount:300,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"ECC/기타허가",name:"ECC 표준 처리",amount:2e3,currency:"PHP",chargeUnit:"per_person",trigger:"6months_plus",triggerWeeks:25},{category:"ECC/기타허가",name:"ECC 긴급 처리",amount:3e3,currency:"PHP",chargeUnit:"per_person",trigger:"6months_plus",triggerWeeks:25}]},{id:"smeag_capital",schoolCode:"SMEAG_CAPITAL",name:"SMEAG Capital Campus",region:"cebu",regionLabel:"세부",schoolType:"general",minWeeks:1,courses:[{name:"ESL",classDetails:"1:1 4H + 1:4 2H + 스페셜 2H + 이브닝 스파르타 2H = 총 10H",price4Weeks:84e4,currency:"KRW"},{name:"IELTS",classDetails:"1:1 4H + 1:4 2H + 스페셜 1H + 1:8 2H + 이브닝 스파르타 1H = 총 10H (입문 기준)",price4Weeks:114e4,currency:"KRW"},{name:"TOEFL",classDetails:"1:1 4H + 1:4 2H + 스페셜 1H + 1:8 2H + 이브닝 스파르타 1H = 총 10H (입문 기준)",price4Weeks:114e4,currency:"KRW"},{name:"TOEIC",classDetails:"1:1 4H + 1:4 2H + 스페셜 2H + 이브닝 스파르타 2H = 총 10H (입문 기준)",price4Weeks:108e4,currency:"KRW"},{name:"Speaking Master",classDetails:"1:1 4H + 1:4 2H + 스페셜 2H + 이브닝 스파르타 2H = 총 10H",price4Weeks:114e4,currency:"KRW"}],dormitories:[{name:"1인실",price4Weeks:119e4,currency:"KRW",capacity:1},{name:"2인실",price4Weeks:102e4,currency:"KRW",capacity:2},{name:"3인실",price4Weeks:89e4,currency:"KRW",capacity:3},{name:"4인실",price4Weeks:79e4,currency:"KRW",capacity:4},{name:"5인실",price4Weeks:73e4,currency:"KRW",capacity:5},{name:"외부 1인실",price4Weeks:143e4,currency:"KRW",capacity:1},{name:"외부 2인실",price4Weeks:126e4,currency:"KRW",capacity:2}],registrationFee:{amount:1e5,currency:"KRW"},surcharges:[],picks:{lowest:{course:"ESL",dorm:"5인실"}},priceNote:"2027년 비용 인상 예정",localFees:[{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person"},{category:"ACR I-CARD",name:"SSP I-Card",amount:4300,currency:"PHP",chargeUnit:"per_person"},{category:"비자연장",name:"VISA I-Card",amount:4300,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"1차 비자연장",amount:5130,currency:"PHP",chargeUnit:"per_person",triggerWeeks:5},{category:"비자연장",name:"2차 비자연장 (누적)",amount:11530,currency:"PHP",chargeUnit:"per_person",triggerWeeks:9},{category:"비자연장",name:"3차 비자연장 (누적)",amount:15960,currency:"PHP",chargeUnit:"per_person",triggerWeeks:13},{category:"비자연장",name:"4차 비자연장 (누적)",amount:20390,currency:"PHP",chargeUnit:"per_person",triggerWeeks:17},{category:"비자연장",name:"5차 비자연장 (누적)",amount:24820,currency:"PHP",chargeUnit:"per_person",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"관리비",amount:2e3,currency:"PHP",chargeUnit:"per_4weeks"},{category:"전기\xb7수도\xb7관리비",name:"전기\xb7수도",amount:2400,currency:"PHP",chargeUnit:"per_4weeks"},{category:"보증금",name:"보증금",amount:3e3,currency:"PHP",chargeUnit:"per_person"},{category:"픽업/샌딩",name:"픽업비",amount:1200,currency:"PHP",chargeUnit:"per_person"}],packages:[]},{id:"talk",schoolCode:"TALK",name:"TALK Academy (토크 어학원)",region:"clark",regi
111onLabel:"클락",schoolType:"general",minWeeks:1,courses:[{name:"1 CLASS",price4Weeks:22e4,currency:"KRW",note:"1:1 1타임. 1주 55,000원.",classDetails:"총 1타임(1교시 40분)"},{name:"1 GROUP",price4Weeks:11e4,currency:"KRW",note:"그룹 1타임. 1주 불가.",classDetails:"총 1타임(1교시 40분)"},{name:"TALK4",price4Weeks:88e4,currency:"KRW",note:"1:1 4타임. 4주 88만원.",classDetails:"1:1 4타임 = 총 4타임"},{name:"TALK6",price4Weeks:132e4,currency:"KRW",note:"1:1 6타임. 4주 132만원.",classDetails:"1:1 6타임 = 총 6타임"},{name:"TALK4 Hybrid A",price4Weeks:11e5,currency:"KRW",note:"1주 불가. 4주 110만원.",classDetails:"1:1 4타임 + 그룹 2타임 = 총 6타임"},{name:"TALK6 Hybrid A",price4Weeks:154e4,currency:"KRW",note:"1주 불가. 4주 154만원.",classDetails:"1:1 6타임 + 그룹 2타임 = 총 8타임"},{name:"TALK4 Hybrid J",price4Weeks:11e5,currency:"KRW",note:"1주 불가. 4주 110만원.",classDetails:"1:1 4타임 + 그룹 2타임 = 총 6타임"},{name:"TALK6 Hybrid J",price4Weeks:154e4,currency:"KRW",note:"1주 불가. 4주 154만원.",classDetails:"1:1 6타임 + 그룹 2타임 = 총 8타임"},{name:"SENIOR",price4Weeks:9e5,currency:"KRW",note:"시니어 과정. 4주 90만원.",classDetails:"1:1 4타임(1교시 40분) = 총 4타임"},{name:"TALK GOLF",price4Weeks:44e4,currency:"KRW",note:"골프 과정. 4주 44만원.",classDetails:"1:1 2타임(1교시 40분) = 총 2타임"},{name:"BUSINESS",price4Weeks:132e4,currency:"KRW",note:"비즈니스 과정. 4주 132만원.",classDetails:"1:1 6타임 = 총 6타임"},{name:"INTERNSHIP",price4Weeks:0,currency:"KRW",note:"4주 180만원 / 8주 340만원만 존재 (특수 기간). price4Weeks는 시스템 계산에 사용 불가 → 운영자 수동 견적.",classDetails:"1:1 260시간 + OJT 60시간"},{name:"BARISTA (8주부터 등록 가능)",price4Weeks:37e5,currency:"KRW",note:"8주부터 등록 가능. 8주 370만원(특수 기간 과정).",classDetails:"1:1 260시간 + OJT 60시간"},{name:"TOEIC",price4Weeks:154e4,currency:"KRW",note:"TOEIC 과정. 4주 154만원.",classDetails:"1:1 6타임 + 그룹 1타임 = 총 7타임"},{name:"IELTS",price4Weeks:165e4,currency:"KRW",note:"IELTS 과정. 4주 165만원.",classDetails:"1:1 6타임 + 그룹 1타임 = 총 7타임"}],dormitories:[{name:"1인실 성인 (~2026.8.28)",capacity:1,price4Weeks:12e5,currency:"KRW"},{name:"2인실 성인 (~2026.8.28)",capacity:2,price4Weeks:8e5,currency:"KRW"},{name:"1인실 성인 (2026.8.31~)",capacity:1,price4Weeks:12e5,currency:"KRW"},{name:"2인실 성인 (2026.8.31~)",capacity:2,price4Weeks:132e4,currency:"KRW"},{name:"3+1인실 성인 (2026.8.31~)",capacity:1,price4Weeks:9e5,currency:"KRW"},{name:"4인실 성인 (2026.8.31~)",capacity:4,price4Weeks:8e5,currency:"KRW"},{name:"가족 2인실 (~2026.8.28)",capacity:2,price4Weeks:16e5,currency:"KRW"},{name:"가족 3인실 (~2026.8.28)",capacity:3,price4Weeks:19e5,currency:"KRW"},{name:"가족 4인실 (~2026.8.28)",capacity:4,price4Weeks:22e5,currency:"KRW"},{name:"가족 2인실 (2026.8.31~12.31)",capacity:2,price4Weeks:16e5,currency:"KRW"},{name:"가족 3인실 (2026.8.31~12.31)",capacity:3,price4Weeks:19e5,currency:"KRW"},{name:"가족 4인실 (2026.8.31~12.31)",capacity:4,price4Weeks:22e5,currency:"KRW"},{name:"가족 2인실 (2027.1.4~)",capacity:2,price4Weeks:278e4,currency:"KRW"},{name:"가족 3인실 (2027.1.4~)",capacity:3,price4Weeks:362e4,currency:"KRW"},{name:"가족 4인실 (2027.1.4~)",capacity:4,price4Weeks:446e4,currency:"KRW"}],picks:{recCombo:{course:"SENIOR",dorm:"1인실 성인 (2026.8.31~)"}},registrationFee:{currency:"KRW",amount:1e5,note:"인당 등록금 10만원 별도."},surcharges:[],localFees:[{category:"기타",name:"식사 1식 (선택\xb7신청 시)",currency:"PHP",amountByWeeks:{4:8e3,8:16e3,12:24e3},excludeFromTotal:!0},{category:"기타",name:"식사 2식 (선택\xb7신청 시)",currency:"PHP",amountByWeeks:{4:15e3,8:3e4,12:45e3},excludeFromTotal:!0},{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person",trigger:"always"},{category:"ACR I-CARD",name:"ACR I-CARD",amount:0,currency:"PHP",chargeUnit:"per_person",trigger:"over_weeks",triggerWeeks:8},{category:"비자연장",name:"비자연장 (8주)",amount:5130,currency:"PHP",chargeUnit:"per_person",trigger:"over_weeks",triggerWeeks:4},{category:"비자연장",name:"비자연장 (12주)",amount:11540,currency:"PHP",chargeUnit:"per_person",trigger:"over_weeks",triggerWeeks:8},{category:"비자연장",name:"비자연장 (16주)",amount:16080,currency:"PHP",chargeUnit:"per_person",trigger:"over_weeks",triggerWeeks:12},{category:"비자연장",name:"비자연장 (20주)",amount:20620,currency:"PHP",chargeUnit:"per_person",trigger:"over_weeks",triggerWeeks:16},{category:"비자연장",name:"비자연장 (24주)",amount:26600,currency:"PHP",chargeUnit:"per_person",trigger:"over_weeks",triggerWeeks:20},{category:"전기\xb7수도\xb7관리비",name:"숙소 콘도 관리비",amount:2e3,currency:"PHP",chargeUnit:"per_person",trigger:"per_4weeks"},{category:"전기\xb7수도\xb7관리비",name:"전기\xb7수도\xb7인터넷비 (1인 3,500/2인 3,000/3인 2,500/4인 2,000)",amount:3500,currency:"PHP",chargeUnit:"per_4weeks",trigger:"per_4weeks"},{category:"보증금",name:"숙소 보증금 (성인 5,000/가족 10,000)",amount:5e3,currency:"PHP",chargeUnit:"flat",trigger:"always"}
111,{category:"픽업/샌딩",name:"클락공항 픽업비 (성인 1,000/가족 500, 인당)",amount:1e3,currency:"PHP",chargeUnit:"flat",trigger:"always"},{category:"학생증/사진",name:"아이디",amount:500,currency:"PHP",chargeUnit:"per_person",trigger:"always"},{category:"교재비",name:"교재비 (권당 170~500, 보증금 차감)",amount:500,currency:"PHP",chargeUnit:"per_person",trigger:"always"}]},{id:"talk_camp_adult",schoolCode:"TALK_CAMP_ADULT",name:"TALK Academy 성인 2주 단기 캠프",region:"clark",regionLabel:"클락",schoolType:"camp",minWeeks:2,courses:[],dormitories:[],registrationFee:{amount:0,note:"패키지에 포함.",currency:"KRW"},surcharges:[],localFees:[],packages:[{name:"성인 2주 단기 캠프 - 싱글룸",weeks:2,price:25e5,allInclusive:!0,includes:"SSP (Special Study Permit), 전문 강사와의 영어 수업 일 6타임, 모든 교재 및 학습 자료, 편안한 기숙사 숙박, 공항 픽업 및 샌딩 서…",note:"원화 2주 기준 250만원. 모든 비용이 포함된 올인원 패키지."},{name:"성인 2주 단기 캠프 - 더블룸",weeks:2,price:23e5,allInclusive:!0,includes:"SSP (Special Study Permit), 전문 강사와의 영어 수업 일 6타임, 모든 교재 및 학습 자료, 편안한 기숙사 숙박, 공항 픽업 및 샌딩 서…",note:"원화 2주 기준 230만원. 모든 비용이 포함된 올인원 패키지."}]},{id:"wales",schoolCode:"WALES",name:"WALES 어학원",region:"baguio",regionLabel:"바기오",schoolType:"general",minWeeks:4,courses:[{name:"EEP LITE",classDetails:"1:1 3타임 = 총 3타임",price4Weeks:9e5,currency:"KRW"},{name:"EEP",classDetails:"1:1 4타임 + 그룹 1타임 = 총 5타임",price4Weeks:11e5,currency:"KRW"},{name:"INFINITY LITE",classDetails:"1:1 3타임 + 그룹 1타임 = 총 4타임",price4Weeks:105e4,currency:"KRW"},{name:"INFINITY INTENSIVE",classDetails:"1:1 5타임 + 그룹 3타임 = 총 8타임",price4Weeks:14e5,currency:"KRW"},{name:"INFINITY STANDARD",classDetails:"1:1 4타임 + 그룹 2타임 = 총 6타임",price4Weeks:12e5,currency:"KRW"},{name:"INFINITY PRO",classDetails:"1:1 4타임 + 그룹 3타임 = 총 7타임",price4Weeks:165e4,currency:"KRW"},{name:"Pearson Test of English (PTE)",classDetails:"1:1 5타임 + 그룹 2타임 = 총 7타임",price4Weeks:165e4,currency:"KRW"},{name:"IELTS",classDetails:"1:1 5타임 + 그룹 2타임 = 총 7타임",price4Weeks:165e4,currency:"KRW"},{name:"IELTS GUARANTEE (보장반)",classDetails:"1:1 6타임 + 그룹 2타임 = 총 8타임",price4Weeks:182e4,currency:"KRW",note:"보장반. 12주 546만 / 16주 728만 / 20주 910만 / 24주 1092만원. 12주 이상 등록 필수. 등록금 ₩200,000. 4주 환산값 182만원 (12주\xf73 기준)."}],dormitories:[{name:"콘도 세미싱글 1인실",capacity:1,price4Weeks:195e4,currency:"KRW"},{name:"콘도 패밀리(3)",capacity:3,price4Weeks:16e5,currency:"KRW"},{name:"콘도 패밀리(4)",capacity:4,price4Weeks:147e4,currency:"KRW"},{name:"로어 프리미엄 스튜디오 1인실",capacity:1,price4Weeks:22e5,currency:"KRW"},{name:"로어 프리미엄 스튜디오 2인실",capacity:2,price4Weeks:15e5,currency:"KRW"},{name:"로어 프리미엄 스튜디오 패밀리(3)",capacity:3,price4Weeks:125e4,currency:"KRW"},{name:"쉐어형 1인실(베란다)",capacity:1,price4Weeks:16e5,currency:"KRW"},{name:"쉐어형 1인실",capacity:1,price4Weeks:145e4,currency:"KRW"},{name:"쉐어형 2인실",capacity:2,price4Weeks:13e5,currency:"KRW"},{name:"로어 스튜디오 1인실",capacity:1,price4Weeks:165e4,currency:"KRW"},{name:"로어 스튜디오 패밀리(2)",capacity:2,price4Weeks:125e4,currency:"KRW"},{name:"프리미엄 스튜디오 1인실",capacity:1,price4Weeks:235e4,currency:"KRW"},{name:"프리미엄 스튜디오 2인실",capacity:2,price4Weeks:165e4,currency:"KRW"},{name:"프리미엄 스튜디오 패밀리(3)",capacity:3,price4Weeks:14e5,currency:"KRW"},{name:"스튜디오 1인실",capacity:1,price4Weeks:18e5,currency:"KRW"},{name:"스튜디오 패밀리(2)",capacity:2,price4Weeks:1375e3,currency:"KRW"}],picks:{lowest:{course:"EEP LITE",dorm:"쉐어형 2인실"},recDorms:["쉐어형 1인실","콘도 세미싱글 1인실","로어 스튜디오 1인실","스튜디오 1인실","프리미엄 스튜디오 1인실"]},registrationFee:{amount:1e5,note:"등록금 KRW 100,000",currency:"KRW"},surcharges:[],localFees:[{category:"SSP",name:"SSP",amount:12300,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"ACR I-CARD",name:"ACR I-CARD",amount:4e3,currency:"PHP",chargeUnit:"per_person",trigger:"stay_over_59days",triggerWeeks:9},{category:"비자연장",name:"비자연장 (6주)",amount:4940,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:5},{category:"비자연장",name:"비자연장 (8주)",amount:4940,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:9},{category:"비자연장",name:"비자연장 (12주)",amount:11150,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:13},{category:"비자연장",name:"비자연장 (16주)",amount:15300,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:17},{category:"비자연장",name:"비자연장 (20주)",amount:19630,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:21},{category:"비자연장",name:"비자연장 (24주)",amount:24140,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:25},{category:"전기\xb7수도\xb7관리비",name:"Management Fee",amount:1e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"전기\xb7수도\xb7관리비",name:"Electricity & Water",amount:3500,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"보증금",name:"Dormitory Deposit",amount:5e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"학생증/사진",name:"Student ID Card",amount:300,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"}]},{id:"we_academy",schoolCode:"WE_ACADEMY",name:"WE Woori (WOORI)",regi
111on:"iloilo",regionLabel:"일로일로",schoolType:"general",minWeeks:4,courses:[{name:"ESL A course",classDetails:"1:1 3H + 소그룹 2H = 총 5H (+ 야간무료 2H(17:30~19:00, 금제외) (정규 50분/야간 45분) 선택)",price4Weeks:66e4,currency:"KRW"},{name:"ESL B course",classDetails:"1:1 4H + 소그룹 1H = 총 5H (+ 야간무료 2H(금제외) 선택)",price4Weeks:73e4,currency:"KRW"},{name:"ESL C course",classDetails:"1:1 4H + 소그룹 2H = 총 6H (+ 야간무료 2H(금제외) 선택)",price4Weeks:78e4,currency:"KRW"},{name:"ESL D course",classDetails:"1:1 5H + 소그룹 2H = 총 7H (+ 야간무료 2H(금제외) 선택)",price4Weeks:95e4,currency:"KRW"},{name:"TOEIC course",classDetails:"1:1 4H + 소그룹 2H = 총 6H (+ 야간무료 2H(금제외) 선택)",price4Weeks:9e5,currency:"KRW"},{name:"Business course",classDetails:"1:1 4H + 소그룹 2H = 총 6H (+ 야간무료 2H(금제외) 선택)",price4Weeks:9e5,currency:"KRW"},{name:"IELTS course",classDetails:"1:1 4H + 소그룹 2H = 총 6H (+ 야간무료 2H(금제외) 선택)",price4Weeks:12e5,currency:"KRW"},{name:"보호자 코스 (Guardian)",classDetails:"1:1 3H = 총 3H",price4Weeks:56e4,currency:"KRW"}],dormitories:[{name:"1인실",capacity:1,price4Weeks:93e4,currency:"KRW"},{name:"2인실",capacity:2,price4Weeks:67e4,currency:"KRW"},{name:"3인실",capacity:3,price4Weeks:63e4,currency:"KRW"},{name:"가족실",price4Weeks:67e4,currency:"KRW"}],registrationFee:{amount:0,note:"등록금 별도 없음 (수업료+기숙사 합산표에 포함되어 있음)",currency:"KRW"},surcharges:[],localFees:[{category:"SSP",name:"SSP 발급비",amount:6500,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"SSP E-CARD",name:"SSP E CARD",amount:4500,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"비자연장",name:"59일 비자 (30일 무비자 + 29일)",amount:5130,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:5},{category:"비자연장",name:"2차 비자연장 (30일)",amount:6300,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:9},{category:"비자연장",name:"3차 비자연장 (30일)",amount:3400,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:13},{category:"비자연장",name:"4차 비자연장 (30일)",amount:3400,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:17},{category:"비자연장",name:"5차 비자연장 (30일)",amount:3400,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"전기세(현지 ₱ 납부)",amountText:"기본 ₱500 + 1KW당 ₱22",currency:"PHP",trigger:"enrollment"},{category:"전기\xb7수도\xb7관리비",name:"수도세(현지 ₱ 납부)",amount:500,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"보증금",name:"기숙사 보증금",amount:2e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"픽업/샌딩",name:"픽업비 (일로일로, 무료)",amount:0,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"픽업/샌딩",name:"셔틀비",amount:1e3,currency:"PHP",chargeUnit:"per_month",trigger:"enrollment"},{category:"학생증/사진",name:"학생증 발급비",amount:650,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"교재비",name:"교재비 (현지 ₱ 납부)",amount:180,currency:"PHP",chargeUnit:"per_book",trigger:"enrollment"},{category:"세탁비",name:"세탁비용(현지지불)",amount:150,currency:"PHP",chargeUnit:"per_usage",trigger:"usage"},{category:"ECC/기타허가",name:"CRTV (6개월 이상 체류시)",amount:2500,currency:"PHP",chargeUnit:"per_person",trigger:"stay_over",triggerWeeks:25},{category:"보험",name:"여행보험 (필수)",amount:0,currency:"KRW",chargeUnit:"per_person",trigger:"enrollment"},{category:"교재비",name:"교재비",currency:"PHP",amountText:"₱150~450 (권당)"},{category:"전기\xb7수도\xb7관리비",name:"공공시설 유지비",amountByWeeks:{4:1e3,8:2e3,12:2e3},currency:"PHP"},{category:"픽업/샌딩",name:"공항세 (칼리보 공항 시)",currency:"PHP",amountText:"₱780",excludeFromTotal:!0},{category:"픽업/샌딩",name:"픽업비 (칼리보)",amount:4e3,currency:"PHP",chargeUnit:"per_person"},{category:"기타",name:"세탁비 (1회 5kg)",amount:150,currency:"PHP",chargeUnit:"per_usage"}]},{id:"coco",schoolCode:"COCO",name:"보라카이 코코 어학원 (COCO English Academy)",regi
111on:"boracay",regionLabel:"보라카이",schoolType:"general",minWeeks:1,courses:[{name:"General ESL",classDetails:"1:1 4H + 그룹 2H = 총 6H",price4Weeks:1e6,currency:"KRW",note:"성수기 가격. 비수기: 800,000원. surcharges의 비수기 할인(20%)으로 자동 적용."},{name:"Power ESL",classDetails:"1:1 5H = 총 5H",price4Weeks:105e4,currency:"KRW",note:"성수기 가격. 비수기: 840,000원. surcharges의 비수기 할인(20%)으로 자동 적용."},{name:"Intensive ESL",classDetails:"1:1 5H + 그룹 2H = 총 7H",price4Weeks:11e5,currency:"KRW",note:"성수기 가격. 비수기: 880,000원. surcharges의 비수기 할인(20%)으로 자동 적용."},{name:"Super Intensive ESL",classDetails:"1:1 6H + 그룹 2H = 총 8H",price4Weeks:125e4,currency:"KRW",note:"성수기 가격. 비수기: 1,000,000원. surcharges의 비수기 할인(20%)으로 자동 적용."},{name:"IELTS Course",classDetails:"1:1 5H + 그룹 2H = 총 7H",price4Weeks:125e4,currency:"KRW",note:"성수기 가격. 비수기: 1,000,000원. surcharges의 비수기 할인(20%)으로 자동 적용."},{name:"Lite ESL",classDetails:"1:1 3H = 총 3H",price4Weeks:9e5,currency:"KRW",note:"성수기 가격. 비수기: 720,000원. surcharges의 비수기 할인(20%)으로 자동 적용."}],dormitories:[{name:"Deluxe 1인실 (성인)",capacity:1,price4Weeks:17e5,currency:"KRW"},{name:"Deluxe 2인실 (성인)",capacity:2,price4Weeks:11e5,currency:"KRW"},{name:"Deluxe 3인실",capacity:3,price4Weeks:95e4,currency:"KRW"},{name:"Premier 4인실",capacity:4,price4Weeks:1e6,currency:"KRW"},{name:"Premier 5인실",capacity:5,price4Weeks:9e5,currency:"KRW"}],registrationFee:{currency:"KRW",note:"등록금 100,000원. 수업을 듣지 않고 숙식만 하는 인원도 부과되며, 재등록 학생은 면제.",amount:1e5},surcharges:[{label:"비수기 프로모션 할인",amountPerWeek:0,startDate:"2026-03-01",endDate:"2026-06-27",currency:"KRW",note:"비수기 기간: 2026.3.1~6.27 & 2026.8.23~2027.1.2. 코스+기숙사 모두 정규가의 80% 적용 (20% 할인). 비수기 프로모션은 기숙사에서 함께 지내는 학생에게만 적용."},{label:"비수기 프로모션 할인 (하반기)",amountPerWeek:0,startDate:"2026-08-23",endDate:"2027-01-02",currency:"KRW",note:"비수기 하반기. 코스+기숙사 모두 정규가의 80% 적용 (20% 할인)."}],localFees:[{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"SSP E-CARD",name:"SSP E-CARD",amount:4500,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"비자연장",name:"비자연장비 (8주)",amount:5100,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:5},{category:"비자연장",name:"비자연장비 (12주)",amount:11500,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:9},{category:"비자연장",name:"비자연장비 (16주)",amount:15900,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:13},{category:"비자연장",name:"비자연장비 (20주)",amount:20300,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:17},{category:"비자연장",name:"비자연장비 (24주)",amount:24700,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"전기세&수도세 (1인실)",amount:1200,currency:"PHP",chargeUnit:"per_week",trigger:"enrollment"},{category:"전기\xb7수도\xb7관리비",name:"전기세&수도세 (2~5인실)",amount:800,currency:"PHP",chargeUnit:"per_week",trigger:"enrollment"},{category:"전기\xb7수도\xb7관리비",name:"전기세 초과분",amount:20,currency:"PHP",chargeUnit:"per_kwh",trigger:"usage"},{category:"보증금",name:"디파짓 (보증금)",amount:3e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"픽업/샌딩",name:"서비스 비용 (유틸리티/관리비/청소비/셔틀)",amount:800,currency:"PHP",chargeUnit:"per_week",trigger:"enrollment"},{category:"픽업/샌딩",name:"공항 픽업 서비스",amount:1200,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"픽업/샌딩",name:"공항 센딩 서비스",amount:1e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"학생증/사진",name:"학생 ID 카드",amount:200,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"교재비",name:"교재비",amount:300,currency:"PHP",chargeUnit:"per_book",trigger:"enrollment"},{category:"세탁비",name:"세탁비",amount:300,currency:"PHP",chargeUnit:"per_load",trigger:"usage"},{category:"교재비",name:"교재비",currency:"PHP",amountText:"₱300~500 (코스 상이)"}]},{id:"eroom",schoolCode:"EROOM",name:"이룸 어학원 (E-Room Language Center)",region:"bacolod",regionLabel:"바콜로드",schoolType:"general",minWeeks:1,courses:[{name:"GUARDIAN (학부모)",classDetails:"1:1 3H + 옵션 1H = 총 4H",price4Weeks:58e4,currency:"KRW"},{name:"FLEXIBLE",classDetails:"1:1 3H + 1:4 1H + 옵션 1H = 총 5H",price4Weeks:62e4,currency:"KRW"},{name:"LIGHT",classDetails:"1:1 4H + 1:4 1H + 옵션 1H = 총 6H",price4Weeks:72e4,currency:"KRW"},{name:"REGULAR",classDetails:"1:1 5H + 1:4 1H + 옵션 1H = 총 7H",price4Weeks:82e4,currency:"KRW"},{name:"INTENSIVE",classDetails:"1:1 6H + 1:4 1H + 옵션 1H = 총 8H",price4Weeks:92e4,currency:"KRW"},{name:"POWER SPEAKING",classDetails:"1:1 7H + 1:4 1H + 옵션 1H = 총 9H",price4Weeks:102e4,currency:"KRW"},{name:"IELTS/TOEIC LIGHT",classDetails:"1:1 4H + 1:4 1H + 옵션 1H = 총 6H",price4Weeks:86e4,currency:"KRW"},{name:"IELTS/TOEIC REGULAR",classDetails:"1:1 5H + 1:4 1H + 옵션 1H = 총 7H",price4Weeks:96e4,currency:"KRW"},{name:"IELTS/TOEIC INTENSIVE",classDetails:"1:1 6H + 1:4 1H + 옵션 1H = 총 8H",price4Weeks:106e4,currency:"KRW"}
111,{name:"IELTS/TOEIC POWER",classDetails:"1:1 7H + 1:4 1H + 옵션 1H = 총 9H",price4Weeks:116e4,currency:"KRW"}],dormitories:[{name:"1인실",capacity:1,price4Weeks:97e4,currency:"KRW"},{name:"2인실",capacity:2,price4Weeks:82e4,currency:"KRW"},{name:"3인실",capacity:3,price4Weeks:72e4,currency:"KRW"},{name:"4인실",capacity:4,price4Weeks:62e4,currency:"KRW"}],registrationFee:{amount:1e5,note:"입학금 100,000원",currency:"KRW"},surcharges:[],localFees:[{category:"픽업/샌딩",name:"픽업비 (가디언 코스 무료)",amount:3e4,currency:"KRW",chargeUnit:"per_person"},{category:"SSP",name:"SSP",amount:7200,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"ACR I-CARD",name:"ACR I-CARD",amount:4010,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"비자연장",name:"비자연장 (4주 후)",amount:4360,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:5},{category:"비자연장",name:"비자연장 (8주 후)",amount:5630,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:9},{category:"비자연장",name:"비자연장 (12주 후)",amount:3660,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:13},{category:"비자연장",name:"비자연장 (16주 후)",amount:3660,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:17},{category:"비자연장",name:"비자연장 (20주 후)",amount:3660,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"전기세 (4주당)",currency:"PHP",amountText:"약 500~1,000"},{category:"전기\xb7수도\xb7관리비",name:"수도 및 관리비",amount:500,currency:"PHP",chargeUnit:"per_week",trigger:"enrollment"},{category:"보증금",name:"기숙사보증금",amount:3e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"학생증/사진",name:"학생ID 발급비",amount:200,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"교재비",name:"교재비 (권당)",currency:"PHP",amountText:"250~450"}]},{id:"pines_main",schoolCode:"PINES_MAIN",name:"파인스 메인 캠퍼스",region:"baguio",regionLabel:"바기오",schoolType:"general",minWeeks:1,courses:[{name:"파워 스피킹",classDetails:"1:1 4H + 4:1 4H = 총 8H",price4Weeks:108e4,currency:"KRW"},{name:"인텐시브 ESL",classDetails:"1:1 5H + 4:1 2H = 총 7H",price4Weeks:118e4,currency:"KRW"},{name:"라이트 ESL4",classDetails:"1:1 4H(시니어 추천) = 총 4H",price4Weeks:93e4,currency:"KRW"},{name:"파워 ESL5",classDetails:"1:1 5H = 총 5H",price4Weeks:113e4,currency:"KRW",note:"2과목 변경 가능 (상담 필요)"},{name:"파워 ESL7",classDetails:"1:1 7H = 총 7H",price4Weeks:138e4,currency:"KRW",note:"2과목 변경 가능 (상담 필요)"},{name:"보호자 (수업 미선택 가능)",classDetails:"1:1 3H = 총 3H",price4Weeks:83e4,currency:"KRW",note:"수업 미등록 가능. 1시간 수업 양도 가능."},{name:"토익 / 토스",classDetails:"1:1 4H + 4:1 4H = 총 8H",price4Weeks:113e4,currency:"KRW"}],dormitories:[{name:"1인실 A",capacity:1,price4Weeks:145e4,currency:"KRW"},{name:"1인실 B",capacity:1,price4Weeks:135e4,currency:"KRW"},{name:"1인실 C",capacity:1,price4Weeks:115e4,currency:"KRW"},{name:"2인실 A",capacity:2,price4Weeks:104e4,currency:"KRW"},{name:"2인실 B",capacity:2,price4Weeks:98e4,currency:"KRW"},{name:"3인실",capacity:3,price4Weeks:88e4,currency:"KRW"},{name:"4인실",capacity:4,price4Weeks:81e4,currency:"KRW"},{name:"6인실",capacity:6,price4Weeks:69e4,currency:"KRW"}],registrationFee:{currency:"KRW",note:"등록금 10만원",amount:1e5},surcharges:[{amountPerWeek:5e4,startDate:"2026-06-29",endDate:"2026-08-22",currency:"KRW",note:"바기오 성수기 서차지."}],localFees:[{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"기타",name:"현지비용 (포인트 차감 시스템)",currency:"PHP",amountText:"SSP\xb7픽업\xb7전기수도\xb7포인트 — 포인트 차감(가격 상담 안내)"},{category:"비자연장",name:"비자연장 1차 (5~8주)",amount:4940,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:5},{category:"비자연장",name:"비자연장 2차 (~12주)",amount:11150,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:9},{category:"비자연장",name:"비자연장 3차 (~16주)",amount:15390,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:13},{category:"비자연장",name:"비자연장 4차 (~20주)",amount:19630,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:17},{category:"비자연장",name:"비자연장 5차 (~24주)",amount:23870,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"전기/수도 (4주당)",amount:3e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"보증금",name:"보증금",amount:4e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"학생증/사진",name:"아이디 카드",amount:200,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"}]},{id:"pines_chapis",schoolCode:"PINES_CHAPIS",name:"파인스 차피스 캠퍼스 (IELTS)",regi
111on:"baguio",regionLabel:"바기오",schoolType:"general",minWeeks:1,courses:[{name:"PRE 아이엘츠",classDetails:"1:1 4H + 4:1 4H = 총 8H",price4Weeks:115e4,currency:"KRW"},{name:"아이엘츠",classDetails:"1:1 4H + 4:1 3H = 총 7H",price4Weeks:12e5,currency:"KRW"},{name:"아이엘츠 보장 8주",classDetails:"1:1 5H + 4:1 2H = 총 7H",price4Weeks:1655e3,currency:"KRW",note:"아이엘츠 보장 8주. 8주 총액 331만원. 4주 환산값 165.5만원. 1:1 5H + 4:1 2H."},{name:"아이엘츠 보장 12주",classDetails:"1:1 5H + 4:1 2H = 총 7H",price4Weeks:152e4,currency:"KRW",note:"아이엘츠 보장 12주. 12주 총액 456만원. 4주 환산값 152만원. 1:1 5H + 4:1 2H."},{name:"아이엘츠 인텐시브",classDetails:"1:1 6H = 총 6H",price4Weeks:135e4,currency:"KRW"}],dormitories:[{name:"1인실 A (IELTS)",capacity:1,price4Weeks:145e4,currency:"KRW"},{name:"1인실 B (IELTS)",capacity:1,price4Weeks:135e4,currency:"KRW"},{name:"2인실 A (IELTS)",capacity:2,price4Weeks:104e4,currency:"KRW"},{name:"3인실 (IELTS)",capacity:3,price4Weeks:79e4,currency:"KRW"},{name:"4인실 (IELTS)",capacity:4,price4Weeks:71e4,currency:"KRW"}],registrationFee:{currency:"KRW",note:"등록금 10만원",amount:1e5},surcharges:[{amountPerWeek:5e4,startDate:"2026-06-29",endDate:"2026-08-22",currency:"KRW",note:"바기오 성수기 서차지."}],localFees:[{category:"SSP",name:"SSP",amount:7800,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"ACR I-CARD",name:"SSP I-CARD",amount:4500,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"비자연장",name:"비자연장 1차 (5~8주)",amount:4940,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:5},{category:"비자연장",name:"비자연장 2차 (~12주)",amount:11150,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:9},{category:"비자연장",name:"비자연장 3차 (~16주)",amount:15390,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:13},{category:"비자연장",name:"비자연장 4차 (~20주)",amount:19630,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:17},{category:"비자연장",name:"비자연장 5차 (~24주)",amount:23870,currency:"PHP",chargeUnit:"cumulative",trigger:"stay_over",triggerWeeks:21},{category:"전기\xb7수도\xb7관리비",name:"전기/수도 (4주당)",amount:3e3,currency:"PHP",chargeUnit:"per_4weeks",trigger:"enrollment"},{category:"보증금",name:"보증금",amount:4e3,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"},{category:"학생증/사진",name:"아이디 카드",amount:200,currency:"PHP",chargeUnit:"per_person",trigger:"enrollment"}]}]},9417:function(e,t,r){"use strict";r.d(t,{x:function(){return i},z:function(){return n}});let n={eedu_eco:{title:"A&J e-Edu eco",campus:"이에듀 어학원",imgName:"AJ_e-Edu_eco"},bcebu:{title:"B'CEBU",campus:"비세부 어학원"},beci_eop:{title:"BECI eop",campus:"베씨 어학원 이오피 캠퍼스",imgName:"BECI eop"},beci_city:{title:"BECI CITY",campus:"베씨 어학원 시티 캠퍼스",imgName:"BECI"},blue_ocean:{title:"Cebu Blue Ocean",campus:"블루오션 어학원"},cella_uni:{title:"CELLA",campus:"셀라 어학원 스파르타 캠퍼스",imgName:"CELLA sparta"},cella_premium:{title:"CELLA",campus:"셀라 어학원 프리미엄 캠퍼스",imgName:"CELLA premium"},cg_banilad:{title:"CG Banilad",campus:"씨지 어학원 바닐라드 캠퍼스",imgName:"cg banilad"},cg_sparta:{title:"CG Sparta",campus:"씨지 어학원 스파르타 캠퍼스",imgName:"cg sparta"},cia:{title:"CIA",campus:"씨아이에이 어학원",abbr:"Cebu International Academy"},cij:{title:"CIJ",campus:"씨아이제이 어학원"},cns_senior_camp:{title:"CNS",campus:"시니어 캠프"},cns:{title:"CNS",campus:"씨엔에스 어학원",abbr:"Choice and Success"},cpi:{title:"CPI",campus:"씨피아이 어학원",abbr:"Cebu Pelis Institute"},cpils:{title:"CPILS",campus:"씨필즈 어학원"},clark_we:{title:"WE",campus:"위아카데미 어학원",imgName:"Clark WE Academy"},eg_academy:{title:"EG",campus:"이지 어학원",imgName:"EG Academy"},elsa:{title:"ELSA",campus:"엘사 어학원",abbr:"Interactive Learning School"},ev_academy:{title:"EV",campus:"이브이 어학원",imgName:"EV Academy"},ev_lamer:{title:"EV",campus:"이브이 어학원 라메르 캠퍼스",imgName:"EV Academy LaMer"},english_fella_1:{title:"English Fella",campus:"잉글리쉬 펠라 어학원 1캠퍼스",imgName:"English Fella Campus 1 Sparta"},english_fella_2:{title:"English Fella",campus:"잉글리쉬 펠라 어학원 2캠퍼스",imgName:"English Fella Campus 2 Classic"},gitc:{title:"GITC",campus:"지아이티씨 어학원",abbr:"Green International Technical College"},glant:{title:"GLANT",campus:"글랜트 어학원"},glc:{title:"GLC",campus:"지엘씨 어학원",abbr:"Global Language Cebu"},gs:{title:"GS",campus:"지에스 어학원",abbr:"Global Standard"},hana:{title:"HANA",campus:"하나 어학원",imgName:"HANA Academy"},help_clark:{title:"HELP",campus:"헬프 어학원"},ibreeze:{title:"I.BREEZE",campus:"아이브리즈 어학원"},ims:{title:"IMS",campus:"아이엠에스 어학원",imgName:"IMS Academy"},jic_challenger:{title:"JIC",campus:"제이아이씨 어학원 챌린저 캠퍼스"},jic_premium:{title:"JIC",campus:"제이아이씨 어학원 프리미엄 캠퍼스"},lslc:{title:"LSLC",campus:"엘에스엘씨 어학원",abbr:"La Salle Language Center"},mk:{title:"MK",campus:"엠케이 어학원"},monol_golf:{title:"Monol",campus:"골프 프로그램"},monol:{title:"Monol",campus:"모놀 어학원"},pilaedu:{title:"PILAedu",campus:"필라에듀 어학원",abbr:"Philippine International Language Academy"},philinter:{title:"Philinter",campus:"필인터 어학원"},qqenglish_bfc:{title:"QQ English",campus:"큐큐 어학원 막탄 캠퍼스",imgName:"QQ English Beach Front"},qqenglish_itp:{title:"QQ English",campus:"큐큐 어학원 씨티 캠퍼스",imgName:"QQ English IT Park"},smeag_capital:{title:"SMEAG",campus:"스메그 어학원"},talk:{title:"TALK",campus:"토크 어학원"},talk_camp_adult:{title:"TALK",campus:"성인 2주 단기 캠프"},wales:{title:"WALES",campus:"웨일즈 어학원"},we_academy:{title:"WE Woori",campus:"위 우리 어학원",abbr:"WOORI",imgName:"WE Academy"},coco:{title:"COCO",campus:"코코 어학원",imgName:"Boracay COCO"},eroom:{title:"E-Room",campus:"이룸 어학원"},pines_main:{title:"Pines",campus:"파인스 어학원 메인 캠퍼스"},pines_chapis:{title:"Pines",campus:"파인스 어학원 아이엘츠 캠퍼스"}};function i(e,t){var r;return null!==(r=n[e])&&void 0!==r?r:{title:t}}},9918:function(e,t,r){"use strict";r.d(t,{Ri:function(){return c},UL:function(){return a},fh:function(){return i},j$:function(){return n},lX:function(){return l},v7:function(){return u},y0:function(){return s}});let n=["high","mid","low"],i={high:"상 그룹",mid:"중 그룹",low:"하 그룹"},a={high:"목록 맨 위에 노출됩니다. 가장 먼저 보여주고 싶은 학원.",mid:"상 그룹 다음에 노출됩니다.",low:"목록 마지막에 노출됩니다."},s={high:["blue_ocean","english_fella_2","ev_lamer","jic_premium","pilaedu","smeag_capital","wales","bcebu","beci_city","cij","cns","mk","monol","talk","cella_premium"],mid:["cia","ev_academy","ibreeze","pines_main","eedu_eco","beci_eop","cpi","help_clark","cg_banilad","coco","qqenglish_bfc","qqenglish_itp"],low:["english_fella_1","jic_challenger","pines_chapis","cella_uni","cg_sparta","cpils","eroom","eg_academy","elsa","gitc","glant","glc","gs","hana","ims","lslc","philinter","clark_we","we_academy"]},o=()=>({high:[],mid:[],low:[]});function c(e){var t;let r=new Map,i=0;for(let a of n)for(let n of null!==(t=e[a])&&void 0!==t?t:[])r.has(n)||r.set(n,i++);return r}function u(e){var t;let r=new Set,i=o();for(let a of n)for(let n of null!==(t=null==e?void 0:e[a])&&void 0!==t?t:[])r.has(n)||(r.add(n),i[a].push(n));return i}function l(e){let t=o();for(let i of n){var r;let n=[...null!==(r=e[i])&&void 0!==r?r:[]];for(let e=n.length-1;e>0;e--){let t=Math.floor(Math.random()*(e+1));[n[e],n[t]]=[n[t],n[e]]}t[i]=n}return t}},6e3:function(e,t,r){"use strict";r.d(t,{Ez:function(){return a},OD:function(){return n},Sx:function(){return i}});let n=e=>e.active&&e.use.senior,i=()=>a.filter(e=>e.use.sim&&"cebu"===e.region),a=[{id:"eedu_eco",masterKey:"eedu_eco",name:"A&J e-Edu 에코 캠퍼스",region:"baguio",regi
111onLabel:"바기오",tags:["바기오","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},programCategories:["일반","가족","캠프","주니어"],programType:"혼합형",priceCurrency:"KRW",nameKo:"이에듀 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"bcebu",masterKey:"bcebu",name:"B'CEBU",nameEn:"Bcebu \xb7 Cebu City (셀프스파르타)",region:"cebu",regionLabel:"세부",tags:["세부","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"globe",programCategories:["일반","가족"],programType:"분리형",priceCurrency:"KRW",nameKo:"비세부 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"beci_eop",masterKey:"beci_eop",name:"BECI EOP캠퍼스",region:"baguio",regionLabel:"바기오",tags:["바기오","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},programCategories:["일반"],programType:"분리형",priceCurrency:"KRW",nameKo:"베씨 어학원 이오피 캠퍼스",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"beci_city",masterKey:"beci_city",name:"BECI 시티캠퍼스",region:"baguio",regionLabel:"바기오",tags:["바기오","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},programCategories:["일반"],programType:"분리형",priceCurrency:"KRW",nameKo:"베씨 어학원 시티 캠퍼스",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"blue_ocean",masterKey:"blue_ocean",name:"CEBU BLUE OCEAN",nameEn:"Blue Ocean \xb7 Mactan (막탄섬 리조트)",region:"cebu",regionLabel:"세부",tags:["세부","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"smart",programCategories:["일반","가족","캠프"],programType:"분리형",priceCurrency:"KRW",nameKo:"블루오션 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"cella_uni",masterKey:"cella_uni",name:"CELLA 유니 스파르타 캠퍼스",nameEn:"CELLA Uni \xb7 Talamban (탈람반)",region:"cebu",regionLabel:"세부",tags:["세부","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"both",programCategories:["일반"],programType:"혼합형(스파르타)",priceCurrency:"KRW",nameKo:"셀라 어학원 스파르타 캠퍼스",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"cella_premium",masterKey:"cella_premium",name:"CELLA 프리미엄 캠퍼스",nameEn:"CELLA Premium \xb7 Banilad (바닐라드)",region:"cebu",regionLabel:"세부",tags:["세부","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"both",programCategories:["일반","가족","캠프"],programType:"혼합형",priceCurrency:"KRW",nameKo:"셀라 어학원 프리미엄 캠퍼스",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"cg_banilad",masterKey:"cg_banilad",name:"CG (Banilad 캠퍼스)",nameEn:"CG Banilad \xb7 Banilad (바닐라드)",region:"cebu",regionLabel:"세부",tags:["세부","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"both",programCategories:["일반","가족"],programType:"분리형",priceCurrency:"KRW",nameKo:"씨지 어학원 바닐라드 캠퍼스",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"cg_sparta",masterKey:"cg_sparta",name:"CG (Sparta 캠퍼스)",nameEn:"CG Sparta \xb7 Talisay (탈리사이, 세부 외곽)",region:"cebu",regionLabel:"세부",tags:["세부","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"smart",programCategories:["일반","가족","캠프","주니어"],programType:"분리형",priceCurrency:"KRW",nameKo:"씨지 어학원 스파르타 캠퍼스",budgetRange:[1,2,3,4,5],studyRange:[1,2],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"cia",masterKey:"cia",name:"CIA (Cebu International Academy)",nameEn:"CIA \xb7 Mabolo (마볼로)",region:"cebu",regionLabel:"세부",tags:["세부","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"globe",programCategories:["일반"],programType:"혼합형(세미스파르타)",priceCurrency:"KRW",nameKo:"씨아이에이 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"cij",masterKey:"cij",name:"CIJ Academy & School",nameEn:"CIJ Academy \xb7 Cebu City 외곽 (성인캠퍼스)",region:"cebu",regionLabel:"세부",tags:["세부","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"both",programCategories:["일반","가족"],programType:"분리형",priceCurrency:"KRW",nameKo:"씨아이제이 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"cns_senior_camp",masterKey:"cns",name:"CNS 시니어 캠프",region:"baguio",regi
111onLabel:"바기오",tags:["바기오","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},programCategories:["일반","캠프"],programType:"혼합형",priceCurrency:"KRW",nameKo:"시니어 캠프",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"cns",masterKey:"cns",name:"CNS 어학원 (Choice and Success)",region:"baguio",regionLabel:"바기오",tags:["바기오","시니어 코스","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},nameKo:"씨엔에스 어학원",budgetRange:[1,2,3],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"cpi",masterKey:"cpi",name:"CPI (Cebu Pelis Institute)",nameEn:"CPI \xb7 Banilad 외곽 (수영장 시설)",region:"cebu",regionLabel:"세부",tags:["세부","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"both",programCategories:["일반","가족"],programType:"분리형",priceCurrency:"KRW",nameKo:"씨피아이 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"cpils",masterKey:"cpils",name:"CPILS",nameEn:"CPILS \xb7 Cebu City",region:"cebu",regionLabel:"세부",tags:["세부","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"globe",programCategories:["일반","가족","캠프"],programType:"분리형",priceCurrency:"KRW",nameKo:"씨필즈 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"clark_we",masterKey:"we_academy",name:"WE",region:"clark",regionLabel:"클락",tags:["클락","골프","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},programCategories:["일반","가족","캠프"],programType:"분리형",priceCurrency:"KRW",nameKo:"위아카데미 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"eg_academy",masterKey:"eg",name:"EG (EG 어학원)",region:"clark",regionLabel:"클락",tags:["클락","골프","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},programCategories:["일반","가족"],programType:"분리형",priceCurrency:"KRW",nameKo:"이지 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"elsa",masterKey:"elsa",name:"ELSA (Interactive Learning School)",nameEn:"ELSA \xb7 세부섬 북쪽 해변 (대학부설)",region:"cebu",regionLabel:"세부",tags:["세부","골프","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"smart",programCategories:["일반","가족","주니어"],programType:"혼합형",priceCurrency:"KRW",nameKo:"엘사 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"ev_academy",masterKey:"ev",name:"EV",nameEn:"EV Academy Main \xb7 Lahug (라호그)",region:"cebu",regionLabel:"세부",tags:["세부","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"both",programCategories:["일반"],programType:"패키지올인원",priceCurrency:"KRW",nameKo:"이브이 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"ev_lamer",masterKey:"ev_lamer",name:"EV La Mer Campus",nameEn:"EV LaMer \xb7 Mactan (막탄)",region:"cebu",regionLabel:"세부",tags:["세부","시니어 코스","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"smart",programCategories:["일반","가족"],programType:"분리형",priceCurrency:"KRW",nameKo:"이브이 어학원 라메르 캠퍼스",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"english_fella_1",masterKey:"english_fella_1",name:"English Fella (1캠퍼스 (스파르타))",nameEn:"English Fella 1 \xb7 Talamban (탈람반)",region:"cebu",regionLabel:"세부",tags:["세부","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"both",programCategories:["일반","고등단독"],programType:"분리형",priceCurrency:"KRW",nameKo:"잉글리쉬 펠라 어학원 1캠퍼스",budgetRange:[1,2,3,4,5],studyRange:[1,2],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"english_fella_2",masterKey:"english_fella_2",name:"English Fella (2캠퍼스 (J-스파르타/클래식))",nameEn:"English Fella 2 \xb7 Talamban (탈람반)",regi
111on:"cebu",regionLabel:"세부",tags:["세부","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"both",programCategories:["일반","가족","주니어"],programType:"분리형",priceCurrency:"KRW",nameKo:"잉글리쉬 펠라 어학원 2캠퍼스",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"gitc",masterKey:"gitc",name:"GITC (Green International Technical College)",region:"iloilo",regionLabel:"일로일로",tags:["일로일로","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},programCategories:["일반","가족","주니어","캠프"],programType:"분리형",priceCurrency:"KRW",nameKo:"지아이티씨 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"glant",masterKey:"glant",name:"GLANT English Academy",nameEn:"Glant \xb7 Banilad (바닐라드, 통학가능)",region:"cebu",regionLabel:"세부",tags:["세부","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"both",programCategories:["일반","가족"],programType:"분리형",priceCurrency:"KRW",nameKo:"글랜트 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"glc",masterKey:"glc",name:"GLC (Global Language Cebu)",nameEn:"GLC \xb7 Cebu City (일본계)",region:"cebu",regionLabel:"세부",tags:["세부","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"globe",programCategories:["일반","가족","캠프"],programType:"분리형",priceCurrency:"KRW",nameKo:"지엘씨 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"gs",masterKey:"gs",name:"GS 어학원 (Global Standard)",region:"clark",regionLabel:"클락",tags:["클락","골프","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},programCategories:["일반","가족","캠프"],programType:"분리형",priceCurrency:"KRW",nameKo:"지에스 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"hana",masterKey:"hana",name:"HANA (하나 어학원)",region:"clark",regionLabel:"클락",tags:["클락","시니어 코스","골프"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},programCategories:["일반","가족","캠프"],programType:"분리형",priceCurrency:"KRW",nameKo:"하나 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"help_clark",masterKey:"help_clark",name:"HELP English (헬프어학원)",region:"clark",regionLabel:"클락",tags:["클락","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},programCategories:["일반","가족","캠프"],programType:"혼합형",priceCurrency:"KRW",nameKo:"헬프 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"ibreeze",masterKey:"ibreeze",name:"I.BREEZE International Language Center",nameEn:"I Breeze \xb7 Mabolo (마볼로, 아얄라몰 인근)",region:"cebu",regionLabel:"세부",tags:["세부","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"globe",programCategories:["일반","가족"],programType:"분리형(Semi Sparta)",priceCurrency:"KRW",nameKo:"아이브리즈 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"ims",masterKey:"ims",name:"IMS",nameEn:"IMS Banilad \xb7 Banilad (바닐라드 중심)",region:"cebu",regionLabel:"세부",tags:["세부","시니어 코스","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"both",programCategories:["일반","가족","캠프"],programType:"혼합형",priceCurrency:"KRW",nameKo:"아이엠에스 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"jic_challenger",masterKey:"jic_challenger",name:"JIC Challenger Campus",region:"baguio",regionLabel:"바기오",tags:["바기오","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},programCategories:["일반","캠프"],programType:"분리형",priceCurrency:"KRW",nameKo:"제이아이씨 어학원 챌린저 캠퍼스",budgetRange:[1,2,3,4,5],studyRange:[1,2],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"jic_premium",masterKey:"jic_premium",name:"JIC Premium Campus",regi
111on:"baguio",regionLabel:"바기오",tags:["바기오","시니어 코스","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},programCategories:["일반","가족","캠프"],programType:"혼합형",priceCurrency:"KRW",nameKo:"제이아이씨 어학원 프리미엄 캠퍼스",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"lslc",masterKey:"lslc",name:"LSLC (La Salle Language Center)",region:"bacolod",regionLabel:"바콜로드",tags:["바콜로드","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},programCategories:["일반","가족"],programType:"분리형",priceCurrency:"KRW",nameKo:"엘에스엘씨 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"mk",masterKey:"mk",name:"MK Language Training Center",region:"iloilo",regionLabel:"일로일로",tags:["일로일로","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},programCategories:["일반","가족"],programType:"분리형",priceCurrency:"KRW",nameKo:"엠케이 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"monol_golf",masterKey:"monol",name:"Monol 골프 프로그램",region:"baguio",regionLabel:"바기오",tags:["바기오","골프","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},programCategories:["일반","가족","캠프"],programType:"혼합형",priceCurrency:"KRW",nameKo:"골프 프로그램",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"monol",masterKey:"monol",name:"Monol 어학원",region:"baguio",regionLabel:"바기오",tags:["바기오","시니어 코스","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},nameKo:"모놀 어학원",budgetRange:[1,2,3,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"pilaedu",masterKey:"pilaedu",name:"PILAedu (Philippine International Language Academy)",nameEn:"PILAedu \xb7 Cebu City",region:"cebu",regionLabel:"세부",tags:["세부","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"globe",programCategories:["일반","가족","주니어"],programType:"혼합형",priceCurrency:"KRW",nameKo:"필라에듀 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"philinter",masterKey:"philinter",name:"Philinter Academy",nameEn:"PHILINTER \xb7 Mactan (막탄공항 10분)",region:"cebu",regionLabel:"세부",tags:["세부","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"smart",programCategories:["일반","가족","캠프"],programType:"분리형",priceCurrency:"USD",nameKo:"필인터 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"qqenglish_bfc",masterKey:"qqenglish_bfc",name:"QQ English Beach Front Campus (BFC)",nameEn:"QQEnglish Mactan \xb7 BFC (막탄)",region:"cebu",regionLabel:"세부",tags:["세부","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"smart",programCategories:["일반","가족","캠프","주니어"],programType:"분리형",priceCurrency:"USD",nameKo:"큐큐 어학원 막탄 캠퍼스",budgetRange:[1,2,3],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"qqenglish_itp",masterKey:"qqenglish_itp",name:"QQ English IT Park",nameEn:"QQEnglish IT Park \xb7 IT Park (IT파크)",region:"cebu",regionLabel:"세부",tags:["세부","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"globe",programCategories:["일반","가족","캠프","주니어"],programType:"분리형",priceCurrency:"USD",nameKo:"큐큐 어학원 씨티 캠퍼스",budgetRange:[1,2,3],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"smeag_capital",masterKey:"smeag_capital",name:"SMEAG Capital Campus",nameEn:"SMEAG Capital \xb7 Capitol (캐피톨)",region:"cebu",regionLabel:"세부",tags:["세부","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!0},carrier:"globe",programCategories:["일반","가족"],programType:"혼합형",priceCurrency:"KRW",nameKo:"스메그 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"talk",masterKey:"talk",name:"TALK Academy (토크 어학원)",region:"clark",regi
111onLabel:"클락",tags:["클락","시니어 코스","골프"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},programCategories:["일반","가족","캠프"],programType:"혼합형",priceCurrency:"KRW",nameKo:"토크 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"talk_camp_adult",masterKey:"talk",name:"TALK Academy 성인 2주 단기 캠프",region:"clark",regionLabel:"클락",tags:["클락"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},nameKo:"성인 2주 단기 캠프",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"wales",masterKey:"wales",name:"WALES 어학원",region:"baguio",regionLabel:"바기오",tags:["바기오","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},programCategories:["일반","가족"],programType:"혼합형",priceCurrency:"KRW",nameKo:"웨일즈 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"we_academy",masterKey:"we_woori",name:"WE Woori (WOORI)",region:"iloilo",regionLabel:"일로일로",tags:["일로일로","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},programCategories:["일반","가족"],programType:"분리형",priceCurrency:"KRW",nameKo:"위 우리 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"coco",masterKey:"coco",name:"보라카이 코코 어학원 (COCO English Academy)",region:"boracay",regionLabel:"보라카이",tags:["보라카이","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},programCategories:["일반","가족"],programType:"분리형",priceCurrency:"KRW",nameKo:"코코 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"eroom",masterKey:"eroom",name:"이룸 어학원 (E-Room Language Center)",region:"bacolod",regionLabel:"바콜로드",tags:["바콜로드","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},programCategories:["일반","가족"],programType:"분리형",priceCurrency:"KRW",nameKo:"이룸 어학원",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"pines_main",masterKey:"pines_main",name:"파인스 메인 캠퍼스",region:"baguio",regionLabel:"바기오",tags:["바기오","1인실"],imageUrl:"",active:!0,use:{senior:!0,sim:!1},programCategories:["일반","가족","캠프"],programType:"분리형",priceCurrency:"KRW",nameKo:"파인스 어학원 메인 캠퍼스",budgetRange:[1,2,3,4,5],studyRange:[1,2,3,4],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"pines_chapis",masterKey:"pines_ielts",name:"파인스 차피스 캠퍼스 (IELTS)",region:"baguio",regionLabel:"바기오",tags:["바기오","1인실"],imageUrl:"",active:!1,use:{senior:!0,sim:!1},programCategories:["일반"],programType:"분리형",priceCurrency:"KRW",nameKo:"파인스 어학원 아이엘츠 캠퍼스",budgetRange:[1,2,3,4,5],studyRange:[1,2],locationRange:[1,2,3,4],mealRange:[1,2,3]},{id:"smeag_encanto",masterKey:"smeag_encanto",name:"SMEAG 엔칸토 캠퍼스",nameEn:"SMEAG Encanto \xb7 Mactan (막탄, J Park 옆)",region:"cebu",regionLabel:"세부",tags:["세부"],imageUrl:"",active:!0,use:{senior:!1,sim:!0},carrier:"smart",programCategories:["일반","캠프"],programType:"혼합형",priceCurrency:"KRW",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"izam_city",masterKey:"izam_city",name:"아이잼 시티 캠퍼스",nameEn:"IZAM City \xb7 AS Fortuna (AS 포르투나)",region:"cebu",regionLabel:"세부",tags:["세부"],imageUrl:"",active:!0,use:{senior:!1,sim:!0},carrier:"globe",programCategories:["가족","주니어","캠프"],programType:"분리형",priceCurrency:"KRW",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"izam_mactan",masterKey:"izam_mactan",name:"아이잼 막탄 캠퍼스",nameEn:"IZAM Mactan \xb7 Mactan (막탄, 방칼)",region:"cebu",regionLabel:"세부",tags:["세부"],imageUrl:"",active:!0,use:{senior:!1,sim:!0},carrier:"smart",programCategories:["가족","주니어"],programType:"분리형",priceCurrency:"KRW",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"ciec",masterKey:"ciec",name:"CIEC",nameEn:"CIEC \xb7 Talamban (탈람반)",regi
111on:"cebu",regionLabel:"세부",tags:["세부"],imageUrl:"",active:!0,use:{senior:!1,sim:!0},carrier:"both",programCategories:["주니어","가족","보호자","캠프"],programType:"분리형",priceCurrency:"KRW",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"jjes",masterKey:"jjes",name:"JJES",nameEn:"JJES \xb7 Cebu City",region:"cebu",regionLabel:"세부",tags:["세부"],imageUrl:"",active:!0,use:{senior:!1,sim:!0},carrier:"both",programCategories:["캠프"],programType:"캠프올인원",priceCurrency:"KRW",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"banana_kids",masterKey:"banana_kids",name:"바나나키즈",nameEn:"BANANA KIDS \xb7 Mactan (막탄, 가족연수)",region:"cebu",regionLabel:"세부",tags:["세부"],imageUrl:"",active:!0,use:{senior:!1,sim:!0},carrier:"smart",programCategories:["가족","캠프"],budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"joyful",masterKey:"joyful",name:"조이풀",nameEn:"JOYFUL \xb7 Mactan (막탄 티샤인 호텔)",region:"cebu",regionLabel:"세부",tags:["세부"],imageUrl:"",active:!0,use:{senior:!1,sim:!0},carrier:"smart",programCategories:["캠프"],programType:"패키지형",priceCurrency:"KRW",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"sk119",masterKey:"sk119",name:"SK119",nameEn:"SK119 Academy \xb7 Banilad (바닐라드 부촌)",region:"cebu",regionLabel:"세부",tags:["세부"],imageUrl:"",active:!0,use:{senior:!1,sim:!0},carrier:"both",programCategories:["캠프","주니어","가족"],programType:"패키지형",priceCurrency:"혼재",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"jungle",masterKey:"jungle",name:"정글",nameEn:"Jungle \xb7 Mactan (막탄 중심)",region:"cebu",regionLabel:"세부",tags:["세부"],imageUrl:"",active:!0,use:{senior:!1,sim:!0},carrier:"smart",programCategories:["캠프"],programType:"패키지형",priceCurrency:"KRW",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"friends",masterKey:"efriends",name:"FRIENDS",nameEn:"FRIENDS \xb7 Cebu City (소규모 스파르타)",region:"cebu",regionLabel:"세부",tags:["세부"],imageUrl:"",active:!0,use:{senior:!1,sim:!0},carrier:"globe",programCategories:["캠프"],programType:"캠프올인원",priceCurrency:"KRW",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"edu_talk",masterKey:"edu_talk",name:"에듀톡",nameEn:"EDU TALK \xb7 Cebu City",region:"cebu",regionLabel:"세부",tags:["세부"],imageUrl:"",active:!0,use:{senior:!1,sim:!0},carrier:"globe",programCategories:["캠프"],programType:"혼합형",priceCurrency:"KRW",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"beci_sparta",masterKey:"beci_sparta",name:"API BECI 스파르타 캠퍼스",region:"baguio",regionLabel:"바기오",tags:["바기오"],imageUrl:"",active:!0,use:{senior:!1,sim:!1},programCategories:["일반"],programType:"분리형",priceCurrency:"KRW",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"cia_camp",masterKey:"cia_camp",name:"CIA 캠프",region:"cebu",regionLabel:"세부",tags:["세부"],imageUrl:"",active:!0,use:{senior:!1,sim:!1},programCategories:["캠프"],budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"cij_junior",masterKey:"cij_junior",name:"CIJ 주니어 캠퍼스",region:"cebu",regionLabel:"세부",tags:["세부"],imageUrl:"",active:!0,use:{senior:!1,sim:!1},programCategories:["가족","캠프"],programType:"분리형",priceCurrency:"KRW",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"eedu_main",masterKey:"eedu_main",name:"A&J e-Edu 메인 캠퍼스",region:"baguio",regionLabel:"바기오",tags:["바기오"],imageUrl:"",active:!0,use:{senior:!1,sim:!1},programCategories:["일반"],programType:"분리형",priceCurrency:"KRW",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"monol_sparta",masterKey:"monol_sparta",name:"모놀 스파르타 캠퍼스",region:"baguio",regionLabel:"바기오",tags:["바기오"],imageUrl:"",active:!0,use:{senior:!1,sim:!1},programCategories:["일반"],programType:"분리형",priceCurrency:"KRW",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"smeag_tarlac",masterKey:"smeag_tarlac",name:"SMEAG 딸락 캠퍼스",region:"clark",regi
111onLabel:"클락",tags:["클락"],imageUrl:"",active:!0,use:{senior:!1,sim:!1},programCategories:["캠프"],programType:"혼합형",priceCurrency:"혼재",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"emo",masterKey:"emo",name:"EMO 영어유치원",region:"cebu",regionLabel:"세부",tags:["세부"],imageUrl:"",active:!0,use:{senior:!1,sim:!1},programCategories:["주니어"],programType:"통학형",priceCurrency:"KRW",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"mj",masterKey:"mj",name:"MJ 글로벌 아카데미",region:"cebu",regionLabel:"세부",tags:["세부"],imageUrl:"",active:!0,use:{senior:!1,sim:!1},budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"besta",masterKey:"besta",name:"BESTA 보홀",region:"bohol",regionLabel:"보홀",tags:["보홀"],imageUrl:"",active:!0,use:{senior:!1,sim:!1},programCategories:["캠프"],programType:"패키지형",priceCurrency:"KRW",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"lgo",masterKey:"lgo",name:"LGO 보홀 캠프",region:"bohol",regionLabel:"보홀",tags:["보홀"],imageUrl:"",active:!0,use:{senior:!1,sim:!1},programCategories:["캠프"],programType:"캠프 올인원",priceCurrency:"KRW",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"pj_academy",masterKey:"pj_academy",name:"PJ 아카데미",region:"cebu",regionLabel:"세부",tags:["세부"],imageUrl:"",active:!0,use:{senior:!1,sim:!1},programCategories:["캠프"],programType:"패키지형",priceCurrency:"KRW",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"spc",masterKey:"spc",name:"SPCF 클락 대학부설",region:"clark",regionLabel:"클락",tags:["클락"],imageUrl:"",active:!0,use:{senior:!1,sim:!1},programCategories:["일반","가족","캠프"],programType:"분리형",priceCurrency:"KRW",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"baekakgwan",masterKey:"baekakgwan",name:"백악관 잉글리쉬 아카데미",region:"clark",regionLabel:"클락",tags:["클락"],imageUrl:"",active:!0,use:{senior:!1,sim:!1},programCategories:["일반","가족","캠프"],programType:"분리형",priceCurrency:"KRW",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"bela",masterKey:"bela",name:"벨라 어학원",region:"clark",regionLabel:"클락",tags:["클락"],imageUrl:"",active:!0,use:{senior:!1,sim:!1},programCategories:["일반","가족","캠프"],programType:"혼합형",priceCurrency:"KRW",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"btes",masterKey:"btes",name:"BTES",region:"cebu",regionLabel:"세부",tags:["세부"],imageUrl:"",active:!0,use:{senior:!1,sim:!1},budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"cega",masterKey:"cega",name:"CEGA",region:"cebu",regionLabel:"세부",tags:["세부"],imageUrl:"",active:!0,use:{senior:!1,sim:!1},budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"cwa",masterKey:"cwa",name:"CWA",region:"cebu",regionLabel:"세부",tags:["세부"],imageUrl:"",active:!0,use:{senior:!1,sim:!1},programCategories:["캠프"],programType:"패키지형",priceCurrency:"KRW",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"help_baguio",masterKey:"help_baguio",name:"HELP 바기오",region:"baguio",regionLabel:"바기오",tags:["바기오"],imageUrl:"",active:!0,use:{senior:!1,sim:!1},programCategories:["일반"],programType:"분리형",priceCurrency:"KRW",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]},{id:"lcic",masterKey:"lcic",name:"LCIC 막탄",region:"cebu",regionLabel:"세부",tags:["세부"],imageUrl:"",active:!0,use:{senior:!1,sim:!1},programCategories:["캠프"],programType:"패키지형",priceCurrency:"USD",budgetRange:[],studyRange:[],locationRange:[],mealRange:[]}]},5559:function(e,t,r){"use strict";r.d(t,{l2:function(){return o},I8:function(){return l},db:function(){return c},tO:function(){return u}});var n=r(2238);/**
112 * @license
113 * Copyright 2020 Google LLC
114 *
115 * Licensed under the Apache License, Version 2.0 (the "License");
116 * you may not use this file except in compliance with the License.
117 * You may obtain a copy of the License at
118 *
119 *   http://www.apache.org/licenses/LICENSE-2.0
120 *
121 * Unless required by applicable law or agreed to in writing, softw
121are
122 * distributed under the License is distributed on an "AS IS" BASIS,
123 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124 * See the License for the specific language governing permissions and
125 * limitations under the License.
126 */(0,n.KN)("firebase","10.14.1","app");var i=r(6650),a=r(109),s=r(1517);let o=(0,n.C6)().length?(0,n.Mq)():(0,n.ZF)({apiKey:"AIzaSyCDIJ4_gDqDnRC4cRgbu6RAieySjZsNuGU",authDomain:"senioruhak.firebaseapp.com",projectId:"senioruhak",storageBucket:"senioruhak.firebasestorage.app",messagingSenderId:"933706216660",appId:"1:933706216660:web:2467e3145e0c10de6d3741",measurementId:"G-45C5SKB76J"}),c=(()=>{try{return(0,a.LV)(o,{ignoreUndefinedProperties:!0})}catch(e){return(0,a.ad)(o)}})(),u=(0,i.cF)(o),l=(0,s.v0)(o)},4713:function(e,t,r){"use strict";r.d(t,{O:function(){return s},d:function(){return i}});let n={"https://open.kakao.com/":"http://pf.kakao.com/_tlGfX/chat","https://pf.kakao.com/_ejnfX":"http://pf.kakao.com/_tlGfX/chat","https://www.youtube.com/results?search_query=필리핀+시니어+어학연수":"https://www.youtube.com/@%EC%8B%9C%EB%8B%88%EC%96%B4%EC%9C%A0%ED%95%99","https://www.youtube.com/results?search_query=%ED%95%84%EB%A6%AC%ED%95%80+%EC%8B%9C%EB%8B%88%EC%96%B4+%EC%96%B4%ED%95%99%EC%97%B0%EC%88%98":"https://www.youtube.com/@%EC%8B%9C%EB%8B%88%EC%96%B4%EC%9C%A0%ED%95%99"};function i(e){return e&&n[e]?n[e]:e}let a=new Set(["CJeS5C-qta0","rqdFixKdrOo","-G0AQTCePcs","Ov3MV6QCeOQ"]);function s(e){if(!e||!e.length)return null;let t=e.filter(e=>!a.has(e.id));return t.length?t:null}},3228:function(e,t,r){"use strict";r.d(t,{AW:function(){return C},CB:function(){return D},DJ:function(){return H},JO:function(){return S},Rr:function(){return b},SZ:function(){return R},qg:function(){return E},yl:function(){return W},zP:function(){return I}});var n=r(5893),i=r(9008),a=r.n(i),s=r(7294),o=r(7827),c=r(6628),u=r(175),l=r(9417),h=r(9918),g=r(7363),d=r(7049),m=r(9464),p=r(155),y=r(2491),f=r(4813),v=r(9701),_=r(4713);let w={settings:null,home:null,pages:null,schools:null,schoolOrder:null,loaded:!1},k=(0,s.createContext)(w);function P(e){var t;return"fulfilled"===e.status&&null!==(t=e.value)&&void 0!==t?t:null}function b(e){let{children:t}=e,[r,i]=(0,s.useState)(w);return(0,s.useEffect)(()=>{let e=!0;return Promise.allSettled([(0,o.ri)(),(0,o.h8)(),(0,o.yL)(),(0,o.J7)(),(0,o.kf)()]).then(t=>{let[r,n,a,s,o]=t;e&&i({settings:P(r),home:P(n),pages:P(a),schools:P(s),schoolOrder:P(o),loaded:!0})}),()=>{e=!1}},[]),(0,n.jsx)(k.Provider,{value:r,children:t})}let E=()=>(0,s.useContext)(k);function R(){let{schools:e,schoolOrder:t,loaded:r}=E();return(0,s.useMemo)(()=>{let n=(0,h.Ri)((0,h.v7)(null!=t?t:h.y0)),i=new Map((null!=e?e:[]).map(e=>[e.id,e])),a=c._.map(e=>{var t,r,n,a,s,o,c;let u=i.get(e.id);return u?{...e,name:u.name||e.name,region:u.region||e.region,regionLabel:u.regionLabel||e.regionLabel,schoolType:u.schoolType||e.schoolType,minWeeks:null!==(t=u.minWeeks)&&void 0!==t?t:e.minWeeks,courses:null!==(r=u.courses)&&void 0!==r?r:e.courses,dormitories:null!==(n=u.dormitories)&&void 0!==n?n:e.dormitories,packages:null!==(a=u.packages)&&void 0!==a?a:e.packages,localFees:null!==(s=u.localFees)&&void 0!==s?s:e.localFees,registrationFee:null!==(o=u.registrationFee)&&void 0!==o?o:e.registrationFee,surcharges:null!==(c=u.surcharges)&&void 0!==c?c:e.surcharges}:e}),s=a.filter(e=>{var t;return(null===(t=i.get(e.id))||void 0===t?void 0:t.active)!==!1}),o=s.filter(e=>{var t;return!u.mb.has(e.id)&&(null===(t=i.get(e.id))||void 0===t?void 0:t.marqueeVisible)!==!1});return{all:a,visible:s,marquee:o,adminOf:e=>i.get(e),orderIndexOf:e=>{var t;return null!==(t=n.get(e))&&void 0!==t?t:Number.MAX_SAFE_INTEGER},metaOf:(e,t)=>{var r;let n=(0,l.x)(e,t);return{...n,...null===(r=i.get(e))||void 0===r?void 0:r.meta,campus:n.campus}},brochuresOf:e=>{var t;let r=null===(t=i.get(e))||void 0===t?void 0:t.brochures;return r&&r.length?r:(0,g.O)(e)},loaded:r}},[e,t,r])}function S(e,t){if(!t||0===t.length)return e;let r=new Map(e.map(e=>[e.id,e]));return t.map(e=>({...r.get(e.id),...e}))}function I(){var e,t,r,n,i,a,s;let{pages:o}=E();return{checklist:null!==(e=null==o?void 0:o.checklist)&&void 0!==e?e:d.th,regions:null!==(t=null==o?void 0:o.regions)&&void 0!==t?t:m.U,why:null!==(r=null==o?void 0:o.why)&&void 0!==r?r:m.o,faq:null!==(n=null==o?void 0:o.faq)&&void 0!==n?n:p.Z,activities:null!==(i=null==o?void 0:o.activities)&&void 0!==i?i:y.D,quiz:null!==(a=null==o?void 0:o.quiz)&&void 0!==a?a:f.mI,quizResults:null!==(s=null==o?void 0:o.quizResults)&&void 0!==s?s:f.oj}}
126let T={companyName:"시니어유학",phoneDisplay:"02-532-0542",phoneTel:"tel:025320542",kakaoUrl:"http://pf.kakao.com/_tlGfX/chat",kakaoId:"",youtubeUrl:"https://www.youtube.com/@%EC%8B%9C%EB%8B%88%EC%96%B4%EC%9C%A0%ED%95%99",naverBlogUrl:"https://blog.naver.com/senioruhak",email:"",businessHours:"",address:"",bizRegNo:""};function C(){let{settings:e}=E(),t=null==e?void 0:e.contact,r=(null==t?void 0:t.phoneDisplay)||T.phoneDisplay;return{companyName:(null==t?void 0:t.companyName)||T.companyName,phoneDisplay:r,phoneTel:function(e,t){let r=(e||"").replace(/[^\d+]/g,"");return r?"tel:".concat(r):t||T.phoneTel}(r,null==t?void 0:t.phoneTel),kakaoUrl:(0,_.d)(null==t?void 0:t.kakaoUrl)||T.kakaoUrl,kakaoId:(null==t?void 0:t.kakaoId)||T.kakaoId,youtubeUrl:(0,_.d)(null==t?void 0:t.youtubeUrl)||T.youtubeUrl,naverBlogUrl:(null==t?void 0:t.naverBlogUrl)||T.naverBlogUrl,email:(null==t?void 0:t.email)||T.email,businessHours:(null==t?void 0:t.businessHours)||T.businessHours,address:(null==t?void 0:t.address)||T.address,bizRegNo:(null==t?void 0:t.bizRegNo)||T.bizRegNo}}function H(){let{settings:e}=E(),t=null==e?void 0:e.headerNav;return t&&t.length?t:v.e}function W(e){var t;let{settings:r}=E(),n=null==r?void 0:null===(t=r.metas)||void 0===t?void 0:t.find(t=>t.page===e);return n?{title:n.title,desc:n.desc}:null}let A={geo:{siteSummary:"시니어유학은 31년 전통의 필리핀 시니어 전용 어학연수 전문 기관으로, 상담부터 출국\xb7수속까지 무료로 동반합니다. 세부\xb7바기오\xb7클락\xb7일로일로\xb7보라카이 지역의 시니어 특화 어학원을 안내합니다.",brandEntity:"시니어유학 = 필리핀 시니어(30~70대) 전용 어학연수 전문 기관",keyFacts:["31년 전통의 시니어 어학연수 전문","상담\xb7수속 무료 동반","필리핀 전역 시니어 특화 어학원 제휴","왕초보\xb71:1 맞춤 수업 중심"]},aeo:{faqSchemaEnabled:!0,orgSchemaEnabled:!0,answerSnippets:[{q:"시니어도 필리핀 어학연수가 가능한가요?",a:"네. 30~70대 시니어 전용 코스와 왕초보 반이 있어, 영어가 처음이셔도 1:1 맞춤 수업으로 시작하실 수 있습니다."},{q:"비용은 얼마인가요?",a:"숙식 포함 4주 기준 약 150만~400만원이며, 숙소 타입\xb7수업 시간\xb7시기\xb7프로모션에 따라 달라집니다."}]}};function D(){var e,t,r,i,s;let{settings:o}=E(),c={...T,...null!==(t=null==o?void 0:o.contact)&&void 0!==t?t:{}},u=null!==(r=null==o?void 0:o.geo)&&void 0!==r?r:A.geo,l=null!==(i=null==o?void 0:o.aeo)&&void 0!==i?i:A.aeo,h=[];return((!l||l.orgSchemaEnabled)&&h.push({"@type":"Organization",name:c.companyName,description:(null==u?void 0:u.brandEntity)||(null==u?void 0:u.siteSummary)||void 0,email:c.email||void 0,telephone:c.phoneDisplay||void 0,address:c.address||void 0,sameAs:[c.youtubeUrl,c.kakaoUrl,c.naverBlogUrl].filter(Boolean),knowsAbout:(null==u?void 0:null===(s=u.keyFacts)||void 0===s?void 0:s.length)?u.keyFacts:void 0}),(null==l?void 0:l.faqSchemaEnabled)&&(null===(e=l.answerSnippets)||void 0===e?void 0:e.length)&&h.push({"@type":"FAQPage",mainEntity:l.answerSnippets.filter(e=>e.q&&e.a).map(e=>({"@type":"Question",name:e.q,acceptedAnswer:{"@type":"Answer",text:e.a}}))}),h.length)?(0,n.jsx)(a(),{children:(0,n.jsx)("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:JSON.stringify({"@context":"https://schema.org","@graph":h})}})}):null}},7827:function(e,t,r){"use strict";r.d(t,{$6:function(){return eG},$x:function(){return N},BJ:function(){return eA},BT:function(){return W},Bk:function(){return ef},Bv:function(){return U},C7:function(){return G},Ck:function(){return el},DO:function(){return ee},D_:function(){return eC},Dr:function(){return J},F4:function(){return ei},GQ:function(){return eU},H:function(){return e0},HI:function(){return A},Hl:function(){return c},I0:function(){return tg},IB:function(){return eo},Ix:function(){return p},J1:function(){return eW},J7:function(){return v},JF:function(){return eB},Lz:function(){return ts},Nx:function(){return eu},OS:function(){return h},OZ:function(){return ex},Oj:function(){return tn},PL:function(){return eT},PS:function(){return eL},Pq:function(){return D},Qv:function(){return eY},Rd:function(){return j},Ro:function(){return ez},S5:function(){return L},SE:function(){return e5},T8:function(){return e1},V4:function(){return M},Wf:function(){return eF},Wt:function(){return x},Wy:function(){return f},YK:function(){return td},YQ:function(){return tt},__:function(){return eJ},_e:function(){return ev},a2:function(){return ec},aZ:function(){return es},aj:function(){return ti},ao:function(){return y},c3:function(){return ey},cE:function(){return eZ},cM:function(){return et},dV:function(){return eH},dW:function(){return eO},e7:function(){return Z},fp:function(){return eI},g1:function(){return S},gw:function(){return e3},h8:function(){return C},hj:function(){return eQ},ht:function(){return te},iK:function(){return eh},k8:function(){return tl},kf:function(){return O},kw:function(){return e9},mi:function(){return eX},mv:function(){return q},n7:function(){return ta},o1:function(){return tm},p1:function(){return tr},q9:function(){return e6},qg:function(){return e2},rF:function(){return b},rc:function(){return tc},rd:function(){return eV},ri:function(){return V},rp:function(){return eM},s2:function(){return tu},s8:function(){return ed},sY:function(){return eg},t9:function(){return e$},tW:function(){return ej},tw:function(){return th},u9:function(){return F},uO:function(){return I},vN:function(){return eK},wS:function(){return k},wd:function(){return ea},x2:function(){return E},xB:function(){return eD},xQ:function(){return eN},xv:function(){return en},y8:function(){return T},yC:function(){return R},yL:function(){return K},yv:function(){return e8},zQ:function(){return B},zl:function(){return Y},zq:function(){return P}});var n=r(6650),i=r(109),a=r(7004),s=r(5559),o=r(6e3);let c="firebase",u="firebase"===c,l=[{key:"school",label:"학원"},{key:"dorm",label:"기숙사"},{key:"facility",label:"시설"},{key:"food",label:"음식"}],h=e=>e.galleryCats&&e.galleryCats.length?e.galleryCats:l,g=e=>"seniorstudy:".concat(e);function d(e,t){try{let r=window.localStorage.getItem(g(e));return r?JSON.parse(r):t}catch(e){return t}}function m(e,t){try{window.localStorage.setItem(g(e),JSON.stringify(t))}catch(e){alert("로컬 저장 용량을 초과했어요. 이미지 용량을 줄이거나, 서버 연결 후 사용하세요.")}}async function p(e,t,r){if(u){let i=(0,n.iH)(s.tO,e);return new Promise((e,a)=>{let s=(0,n.B0)(i,t,{contentType:t.type});s.on("state_changed",e=>null==r?void 0:r(Math.round(e.bytesTransferred/e.totalBytes*100)),a,async()=>e(await (0,n.Jt)(s.snapshot.ref)))})}null==r||r(20);let i=await new Promise((e,r)=>{let n=new FileReader;n.onload=()=>e(n.result),n.onerror=r,n.readAsDataURL(t)});return null==r||r(100),i}async function y(e){if(u)try{await (0,n.oq)((0,n.iH)(s.tO,e))}catch(e){}}
126async function f(e){if(u){await (0,i.pl)((0,i.JU)(s.db,"schoolsFull",e.id),e);return}let t=d("schoolsFull",[]),r=t.findIndex(t=>t.id===e.id);r>=0?t[r]=e:t.push(e),m("schoolsFull",t)}async function v(){return u?(await (0,i.PL)((0,i.hJ)(s.db,"schoolsFull"))).docs.map(e=>e.data()):d("schoolsFull",[])}let _="schoolsMaster",w=(e,t)=>{var r,n;return{masterKey:null!==(r=e.masterKey)&&void 0!==r?r:"",name:e.name,nameEn:null!==(n=e.nameEn)&&void 0!==n?n:"",...e.nameKo?{nameKo:e.nameKo}:{},region:e.region,regionLabel:e.regionLabel,use:{senior:e.use.senior,sim:e.use.sim},...e.carrier?{carrier:e.carrier}:{},...e.programCategories?{programCategories:e.programCategories}:{},...e.programType?{programType:e.programType}:{},...e.priceCurrency?{priceCurrency:e.priceCurrency}:{},closed:!1,updatedAt:Date.now(),updatedBy:t}};async function k(){return $("학원 마스터 조회"),(await (0,i.PL)((0,i.hJ)(s.db,_))).docs.map(e=>({...e.data(),id:e.id})).sort((e,t)=>e.name.localeCompare(t.name,"ko"))}async function P(e){var t,r;$("학원 마스터 저장");let{id:n,...a}=e;await (0,i.pl)((0,i.JU)(s.db,_,n),{...a,updatedAt:Date.now(),updatedBy:null!==(r=null===(t=s.I8.currentUser)||void 0===t?void 0:t.uid)&&void 0!==r?r:""},{merge:!0})}async function b(e){$("학원 마스터 삭제"),await (0,i.oe)((0,i.JU)(s.db,_,e))}async function E(){$("학원 마스터 조회");let e=new Set((await (0,i.PL)((0,i.hJ)(s.db,_))).docs.map(e=>e.id));return o.Ez.filter(t=>!e.has(t.id)).map(e=>e.id)}async function R(e){var t,r,n;let a;$("학원 마스터 시드");let c=null!==(r=null===(t=s.I8.currentUser)||void 0===t?void 0:t.uid)&&void 0!==r?r:"",u=new Set((await (0,i.PL)((0,i.hJ)(s.db,_))).docs.map(e=>e.id)),l=o.Ez.length,h=0,g=0,d=0,m=0;for(let t of o.Ez){if(u.has(t.id))g++;else try{await (0,i.pl)((0,i.JU)(s.db,_,t.id),w(t,c)),h++}catch(e){d++,a||(a=(null==e?void 0:e.message)||String(e))}m++,null==e||null===(n=e.onProgress)||void 0===n||n.call(e,m,l)}return{total:l,created:h,skipped:g,failed:d,firstError:a}}async function S(e){let t;$("학원 마스터 프로그램 정보 동기화");let r=new Set((await (0,i.PL)((0,i.hJ)(s.db,_))).docs.map(e=>e.id)),n=o.Ez.filter(e=>r.has(e.id)&&(e.programCategories||e.programType||e.priceCurrency)),a=n.length,c=0,u=0,l=0;for(let r of n){var h;try{await (0,i.pl)((0,i.JU)(s.db,_,r.id),{...r.programCategories?{programCategories:r.programCategories}:{},...r.programType?{programType:r.programType}:{},...r.priceCurrency?{priceCurrency:r.priceCurrency}:{}},{merge:!0}),c++}catch(e){u++,t||(t=(null==e?void 0:e.message)||String(e))}l++,null==e||null===(h=e.onProgress)||void 0===h||h.call(e,l,a)}return{total:a,created:c,skipped:0,failed:u,firstError:t}}async function I(e){let t;$("학원 마스터 한글 표기 동기화");let r=new Map((await (0,i.PL)((0,i.hJ)(s.db,_))).docs.map(e=>[e.id,e.data()])),n=o.Ez.filter(e=>e.nameKo&&r.has(e.id)&&!r.get(e.id).nameKo),a=n.length,c=0,u=0,l=0;for(let r of n){var h;try{await (0,i.pl)((0,i.JU)(s.db,_,r.id),{nameKo:r.nameKo},{merge:!0}),c++}catch(e){u++,t||(t=(null==e?void 0:e.message)||String(e))}l++,null==e||null===(h=e.onProgress)||void 0===h||h.call(e,l,a)}return{total:a,created:c,skipped:0,failed:u,firstError:t}}async function T(e){if(u){await (0,i.pl)((0,i.JU)(s.db,"config","home"),e);return}m("home",e)}async function C(){if(u){let e=await (0,i.QT)((0,i.JU)(s.db,"config","home"));return e.exists()?e.data():null}return d("home",null)}async function H(e){if(u){await (0,i.pl)((0,i.JU)(s.db,"config","weekend"),e);return}m("weekend",e)}async function W(){if(u){let e=await (0,i.QT)((0,i.JU)(s.db,"config","weekend"));return e.exists()?e.data():null}return d("weekend",null)}async function A(e){var t;let r=null!==(t=await W())&&void 0!==t?t:{events:[]};await H({...r,events:e})}async function D(e){var t;let r=null!==(t=await W())&&void 0!==t?t:{events:[]};await H({...r,home:e})}async function U(e){var t;let r=null!==(t=await W())&&void 0!==t?t:{events:[]};await H({...r,site:e})}async function L(e){if(u){await (0,i.pl)((0,i.JU)(s.db,"config","schoolOrder"),e);return}m("schoolOrder",e)}async function O(){if(u){let e=await (0,i.QT)((0,i.JU)(s.db,"config","schoolOrder"));return e.exists()?e.data():null}return d("schoolOrder",null)}async function N(e){if(u){await (0,i.pl)((0,i.JU)(s.db,"config","pages"),e);return}m("pages",e)}async function K(){if(u){let e=await (0,i.QT)((0,i.JU)(s.db,"config","pages"));return e.exists()?e.data():null}return d("pages",null)}async function x(){return u?(await (0,i.PL)((0,i.hJ)(s.db,"leads"))).docs.map(e=>({...e.data(),id:e.id})).sort((e,t)=>
126t.createdAt-e.createdAt):d("leads",[]).sort((e,t)=>t.createdAt-e.createdAt)}async function M(e,t){if(u){await (0,i.pl)((0,i.JU)(s.db,"leads",e),t,{merge:!0});return}let r=d("leads",[]),n=r.findIndex(t=>t.id===e);n>=0&&(r[n]={...r[n],...t},m("leads",r))}async function F(e){if(u){await (0,i.oe)((0,i.JU)(s.db,"leads",e));return}m("leads",d("leads",[]).filter(t=>t.id!==e))}async function B(e){if(u){await (0,i.pl)((0,i.JU)(s.db,"config","settings"),e);return}m("settings",e)}async function V(){if(u){let e=await (0,i.QT)((0,i.JU)(s.db,"config","settings"));return e.exists()?e.data():null}return d("settings",null)}let q={titleTemplate:"[{service}] 새 문의",bodyTemplate:"{name} \xb7 {message}",bannerImageUrl:"",largeIconUrl:""};async function j(e){let t={...e,updatedAt:Date.now()};if(u){await (0,i.pl)((0,i.JU)(s.db,"config","push"),t);return}m("push",t)}async function G(){if(u){let e=await (0,i.QT)((0,i.JU)(s.db,"config","push"));return e.exists()?e.data():null}return d("push",null)}let z="consult";function $(e){if(!u)throw Error("".concat(e,"는 서버(Firebase) 연결이 필요합니다. NEXT_PUBLIC_STORAGE=firebase 로 실행하세요."))}let J={enabled:!1,allowIps:[]},Q=e=>(Array.isArray(e)?e:[]).map(e=>"string"==typeof e?{ip:e}:e).filter(e=>e&&"string"==typeof e.ip);function X(e){try{let t=JSON.parse(e).categories||[];return{cats:t.length,items:t.reduce((e,t)=>{var r;return e+((null===(r=t.items)||void 0===r?void 0:r.length)||0)},0)}}catch(e){return{cats:0,items:0}}}async function Y(){$("상담 도우미 데이터 조회");let[e,t]=await Promise.all([(0,i.QT)((0,i.JU)(s.db,z,"data")),(0,i.QT)((0,i.JU)(s.db,z,"backup"))]);if(!e.exists())return null;let r=e.data().json||"";return{savedAt:e.data().savedAt||"",size:r.length,...X(r),backupSavedAt:t.exists()&&t.data().savedAt||""}}async function Z(){$("상담 도우미 데이터 내려받기");let e=await (0,i.QT)((0,i.JU)(s.db,z,"data"));if(!e.exists())throw Error("저장된 데이터가 아직 없습니다.");return e.data().json||""}async function ee(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:200;return $("버전 목록 조회"),(await (0,i.PL)((0,i.IO)((0,i.hJ)(s.db,z,"history","meta"),(0,i.Xo)("savedAt","desc"),(0,i.b9)(e)))).docs.map(e=>{var t,r,n;let i=e.data();return{savedAt:i.savedAt||e.id,size:i.size||0,cats:null!==(t=i.cats)&&void 0!==t?t:0,items:null!==(r=i.items)&&void 0!==r?r:0,kind:null!==(n=i.kind)&&void 0!==n?n:"auto",by:i.by}})}async function et(e){$("버전 내용 조회");let t=await (0,i.QT)((0,i.JU)(s.db,z,"history","snap",e));if(!t.exists())throw Error("그 버전의 내용을 찾지 못했습니다.");return t.data().json||""}async function er(e,t,r,n){await (0,i.pl)((0,i.JU)(s.db,z,"history","snap",t),{json:e,savedAt:t}),await (0,i.pl)((0,i.JU)(s.db,z,"history","meta",t),{savedAt:t,size:e.length,...X(e),kind:r,by:n})}async function en(e,t){let r=await et(e);JSON.parse(r);let n=await (0,i.QT)((0,i.JU)(s.db,z,"data"));n.exists()&&await (0,i.pl)((0,i.JU)(s.db,z,"backup"),n.data());let a=new Date().toISOString();return await (0,i.pl)((0,i.JU)(s.db,z,"data"),{json:r,savedAt:a}),await er(r,a,"restore",t),a}async function ei(e){$("수동 백업");let t=await (0,i.QT)((0,i.JU)(s.db,z,"data"));if(!t.exists())throw Error("백업할 데이터가 아직 없습니다.");let r=t.data().json||"",n=new Date().toISOString();return await er(r,n,"manual",e),n}async function ea(e,t){$("파일에서 복원");let r=JSON.parse(e);if(!r||!Array.isArray(r.categories))throw Error("categories 배열이 없습니다. 상담 도우미 데이터 파일이 맞는지 확인하세요.");let n=JSON.stringify(r),a=await (0,i.QT)((0,i.JU)(s.db,z,"data"));a.exists()&&await (0,i.pl)((0,i.JU)(s.db,z,"backup"),a.data());let o=new Date().toISOString();return await (0,i.pl)((0,i.JU)(s.db,z,"data"),{json:n,savedAt:o}),await er(n,o,"restore",t),o}async function es(e){for(let t of($("버전 삭제"),e))await (0,i.oe)((0,i.JU)(s.db,z,"history","snap",t)),await (0,i.oe)((0,i.JU)(s.db,z,"history","meta",t))}async function eo(){$("접근 제한 설정 조회");let e=await (0,i.QT)((0,i.JU)(s.db,z,"access"));if(!e.exists())return null;let t=e.data();return{...J,...t,allowIps:Q(t.allowIps)}}async function ec(e,t){$("접근 제한 설정 저장"),await (0,i.pl)((0,i.JU)(s.db,z,"access"),{...e,updatedAt:Date.now(),updatedBy:t})}async function eu(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100;return $("접근 신청 조회"),(await (0,i.PL)((0,i.IO)((0,i.hJ)(s.db,z,"requests","entries"),(0,i.Xo)("at","desc"),(0,i.b9)(e)))).docs.map(e=>{let t=e.data();return{id:e.id,at:t.at||"",ip:t.ip||"",ua:t.ua||"",place:t.place||"",status:t.status||"pending",decidedAt:t.decidedAt,decidedBy:t.decidedBy}})}async function el(e,t,r){if($("접근 신청 처리"),t&&e.ip&&"unknown"!==e.ip){var n;let t=null!==(n=await eo())&&void 0!==n?n:J;t.allowIps.some(t=>t.ip===e.ip)||await ec({...t,allowIps:[...t.allowIps,{ip:e.ip,note:e.place}]},r)}await (0,i.pl)((0,i.JU)(s.db,z,"requests","entries",e.id),{status:t?"approved":"rejected",decidedAt:Date.now(),decidedBy:r},{merge:!0})}async function eh(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:200;return $("접근 기록 조회"),(await (0,i.PL)((0,i.IO)((0,i.hJ)(s.db,z,"logs","entries"),(0,i.Xo)("at","desc"),(0,i.b9)(e)))).docs.map(e=>{let t=e.data();return{id:e.id,at:t.at||"",ip:t.ip||"",allowed:!1!==t.allowed,ua:t.ua||""}})}function eg(){return JSON.stringify({_exportedAt:new Date().toISOString(),banners:d("banners",[]),schools:d("schools",[]),icons:d("icons",[]),metas:d("metas",[]),home:d("home",null),schoolsFull:d("schoolsFull",[]),pages:d("pages",null),settings:d("settings",null),schoolOrder:d("schoolOrder",null),leads:d("leads",[]),weekend:d("weekend",null)},null,2)}function ed(e){let t=JSON.parse(e);t.banners&&m("banners",t.banners),t.schools&&m("schools",t.schools),t.icons&&m("icons",t.icons),t.metas&&m("metas",t.metas),t.home&&m("home",t.home),t.schoolsFull&&m("schoolsFull",t.schoolsFull),t.pages&&m("pages",t.pages),t.settings&&m("settings",t.settings),t.schoolOrder&&m("schoolOrder",t.schoolOrder),t.leads&&m("leads",t.leads),t.weekend&&m("weekend",t.weekend)}let em="hojuVisa",ep={city:"",title:"",desc:"",note:"",href:"",hlColor:"blue"},ey={priceOld:"99,000",priceNew:"49,000",products:[{city:"시드니",title:"ILSC\n오후반 실용 패키지",desc:"ILSC는 호주를 대표하는 대형 어학원!\n주간반 대비 부담을 줄인 오후 프로그램으로 효율적인 연수가 가능합니다.",note:"※ 숙소 및 공항 픽
126업은 별도 신청이 필요합니다.",href:"",hlColor:"blue"},{city:"브리즈번",title:"Imagine\n맞춤형 패키지",desc:"주 3일 또는 주 5일 수업을 일정과 예산에 맞게 선택할 수 있는 유연한 프로그램입니다.",note:"※ 숙소 및 공항 픽업은 별도 신청이 필요합니다.",href:"",hlColor:"blue"}]};async function ef(){$("비자 랜딩 문구 조회");let e=await (0,i.QT)((0,i.JU)(s.db,em,"landing"));if(!e.exists())return{...ey};let t=e.data(),r=Array.isArray(t.products)?t.products.map(e=>({...ep,...e})):[];return{...ey,...t,products:r}}async function ev(e,t){$("비자 랜딩 문구 저장"),await (0,i.pl)((0,i.JU)(s.db,em,"landing"),{...e,updatedAt:Date.now(),updatedBy:t})}let e_="plApplications",ew="plPosts",ek="plUsers",eP="plMileage",eb="philjaLocal",eE=e=>(0,a.V1)((0,a.$C)(s.l2,"us-central1"),e),eR=e=>e&&"function"==typeof e.toMillis?e.toMillis():"number"==typeof e?e:0,eS=e=>e.map(e=>{let t=e.data();return{...t,id:e.id,created_at:eR(t.created_at),updated_at:eR(t.updated_at)}});async function eI(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};$("필자 현지서비스 신청 조회");let r=null!==(e=t.limit)&&void 0!==e?e:50;if(t.deliverDate){let e=[...t.cat?[(0,i.ar)("cat","==",t.cat)]:[],...t.city?[(0,i.ar)("city","==",t.city)]:[]],[n,a]=await Promise.all([(0,i.PL)((0,i.IO)((0,i.hJ)(s.db,e_),...e,(0,i.ar)("deliver_date","==",t.deliverDate),(0,i.b9)(r+1))),(0,i.PL)((0,i.IO)((0,i.hJ)(s.db,e_),...e,(0,i.ar)("dates","array-contains",t.deliverDate),(0,i.b9)(r+1)))]),o=new Set;return{items:[...eS(n.docs),...eS(a.docs)].filter(e=>!o.has(e.id)&&(o.add(e.id),!0)).sort((e,t)=>t.created_at-e.created_at).slice(0,r),nextCursor:null}}if(t.buyDate)return{items:eS((await (0,i.PL)((0,i.IO)((0,i.hJ)(s.db,e_),...t.cat?[(0,i.ar)("cat","==",t.cat)]:[],(0,i.ar)("buy_dates","array-contains",t.buyDate),(0,i.b9)(r+1)))).docs).filter(e=>"canceled"!==e.status).sort((e,t)=>t.created_at-e.created_at).slice(0,r),nextCursor:null};let n=(0,i.IO)((0,i.hJ)(s.db,e_),...t.status?[(0,i.ar)("status","==",t.status)]:[],...t.cat?[(0,i.ar)("cat","==",t.cat)]:[],...t.city?[(0,i.ar)("city","==",t.city)]:[],...t.rentalOpen?[(0,i.ar)("rental_open","==",!0)]:[],...t.sinceMs?[(0,i.ar)("created_at",">=",i.EK.fromMillis(t.sinceMs))]:[],(0,i.Xo)("created_at","desc"),...t.cursor?[(0,i.TQ)(i.EK.fromMillis(t.cursor))]:[],(0,i.b9)(r+1)),a=eS((await (0,i.PL)(n)).docs),o=a.length>r,c=o?a.slice(0,r):a;return{items:c,nextCursor:o&&c.length?c[c.length-1].created_at:null}}async function eT(e){$("필자 현지서비스 통계");let t=(0,i.hJ)(s.db,e_);return(await (0,i.Yp)(e?(0,i.IO)(t,(0,i.ar)("status","==",e)):(0,i.IO)(t))).data().count}async function eC(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};$("신청 상태 변경"),await eE("plSetApplicationStatus")({id:e,status:t,stage:r,...n})}async function eH(e,t){$("신청 메모 저장"),await (0,i.pl)((0,i.JU)(s.db,e_,e),{...t,updated_at:(0,i.Bt)()},{merge:!0})}async function eW(e,t,r){$("품목 배송 계획 저장");let n=await eE("plSetItemPlan")({id:e,itemId:t,patch:r});return{plan:n.data.plan,dates:n.data.dates,status:n.data.status}}async function eA(e){$("배송 루트 조회");let t=await (0,i.QT)((0,i.JU)(s.db,"plRoutes",e)),r=t.exists()?t.data():{};return{mactan:Array.isArray(r.mactan)?r.mactan:[],cebu:Array.isArray(r.cebu)?r.cebu:[],updated_at:eR(r.updated_at),updated_by:"string"==typeof r.updated_by?r.updated_by:void 0}}async function eD(e,t,r){$("배송 루트 변경");let n=await eE("plSetRoute")({date:e,school:t,route:r});return{mactan:n.data.route.mactan,cebu:n.data.route.cebu}}async function eU(e,t,r){return $("정차 순서 저장"),(await eE("plSetRouteOrder")({date:e,route:t,schools:r})).data.count}async function eL(e){if($("품목 배송 계획 일괄 저장"),!e.length)return 0;if(e.length>400)throw Error("한 번에 400개까지만 바꿀 수 있습니다");return(await eE("plSetItemPlanMany")({items:e})).data.updated}async function eO(e,t,r){return $("구독 회차 처리"),(await eE("plSetRound")({id:e,date:t,action:r})).data.dates}async function eN(e,t,r,n){return $("품목 상태 변경"),(await eE("plSetItemStatus")({id:e,itemId:t,status:r,reason:n})).data}async function eK(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return $("보증금 저장"),(await eE("plSetRental")({id:e,deposit:t,depositReturned:r})).data}async function ex(e,t,r){return $("반납 표시"),(await eE("plSetItemReturned")({id:e,itemId:t,returned:r})).data}async function eM(e){return $("영수증 발송"),(await eE("plSendRentalReceipt")({id:e})).data}async function eF(e){return $("더미 신청 생성"),(await eE("plSeedDemoApplications")(void 0===e?{}:{count:e})).data}async function eB(){return $("더미 신청 삭제"),(await eE("plDeleteDemoApplications")()).data}async function eV(e,t){await eq([e],t)}async function eq(e,t){if($("배송일\xb7도시 저장"),!e.length)return 0;if(e.length>400)throw Error("한 번에 400건까지만 바꿀 수 있습니다");return(await eE("plSetDelivery")({ids:e,...t})).data.updated}async function ej(e){var t;let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};$("게시물 검토 대기열 조회");let n=null!==(t=r.limit)&&void 0!==t?t:50,a=(0,i.IO)((0,i.hJ)(s.db,ew),(0,i.ar)("status","==",e),...r.kind?[(0,i.ar)("kind","==",r.kind)]:[],(0,i.Xo)("submitted_at","desc"),...r.cursor?[(0,i.TQ)(i.EK.fromMillis(r.cursor))]:[],(0,i.b9)(n+1)),o=(await (0,i.PL)(a)).docs.map(e=>{let t=e.data();return{...t,id:e.id,submitted_at:eR(t.submitted_at),reviewed_at:t.reviewed_at?eR(t.reviewed_at):null,deleted_at:t.deleted_at?eR(t.deleted_at):null}}),c=o.length>n,u=c?o.slice(0,n):o;return{items:u,nextCursor:c&&u.length?u[u.length-1].submitted_at:null}}async function eG(e){return $("게시물 검토 통계"),(await (0,i.Yp)((0,i.IO)((0,i.hJ)(s.db,ew),(0,i.ar)("status","==",e)))).data().count}async function ez(e,t){$("게시물 승인"),await eE("plModeratePost")({id:e,action:"approve",cat:t})}async function e$(e,t){$("게시물 반려"),await eE("plModeratePost")({id:e,action:"reject",reason:t})}async function eJ(e){$("게시물 삭제"),await eE("plModeratePost")({id:e,action:"delete"})}async function eQ(e){var t;$("마일리지 잔액 조회");let r=await (0,i.QT)((0,i.JU)(s.db,eP,e));if(!r.exists())return null;let n=r.data();return{balance:null!==(t=n.balance)&&void 0!==t?t:0,updated_at:eR(n.updated_at)}}async function eX(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};$("마일리지 잔액 목록 조회");let r=null!==(e=t.limit)&&void 0!==e?e:50,n=(0,i.IO)((0,i.hJ)(s.db,eP),(0,i.Xo)("updated_at","desc"),...t.curs
126or?[(0,i.TQ)(i.EK.fromMillis(t.cursor))]:[],(0,i.b9)(r+1)),a=(await (0,i.PL)(n)).docs.map(e=>{var t;let r=e.data();return{uid:e.id,balance:null!==(t=r.balance)&&void 0!==t?t:0,updated_at:eR(r.updated_at)}}),o=a.length>r,c=o?a.slice(0,r):a;return{items:c,nextCursor:o&&c.length?c[c.length-1].updated_at:null}}async function eY(e){var t;let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};$("마일리지 내역 조회");let n=null!==(t=r.limit)&&void 0!==t?t:50,a=(0,i.IO)((0,i.hJ)(s.db,eP,e,"entries"),(0,i.Xo)("at","desc"),...r.cursor?[(0,i.TQ)(i.EK.fromMillis(r.cursor))]:[],(0,i.b9)(n+1)),o=(await (0,i.PL)(a)).docs.map(e=>{var t,r,n;let i=e.data();return{id:e.id,amount:null!==(t=i.amount)&&void 0!==t?t:0,reason:null!==(r=i.reason)&&void 0!==r?r:"",at:eR(i.at),by:null!==(n=i.by)&&void 0!==n?n:"",...i.svc?{svc:i.svc}:{}}}),c=o.length>n,u=c?o.slice(0,n):o;return{items:u,nextCursor:c&&u.length?u[u.length-1].at:null}}async function eZ(e){return $("마일리지 조정"),(await eE("plAdjustMileage")(e)).data}let e1={simRegions:[],simPlans:[],simFaqs:[],rates:[{id:"default",label:"기본 (모든 화면)",krwPerPhp:25}],banner:{on:!0,text:"",href:""},doneTemplates:[]};async function e0(){$("필자 현지서비스 콘텐츠 조회");let e=await (0,i.QT)((0,i.JU)(s.db,"config",eb));return e.exists()?{...e1,...e.data()}:e1}async function e4(e){$("필자 현지서비스 콘텐츠 저장"),await (0,i.pl)((0,i.JU)(s.db,"config",eb),e)}async function e2(e){await e4({...await e0(),simRegions:e})}async function e5(e){await e4({...await e0(),simPlans:e})}async function e3(e){await e4({...await e0(),simFaqs:e})}async function e6(e){await e4({...await e0(),rates:e})}async function e9(e){await e4({...await e0(),banner:e})}async function e8(e){await e4({...await e0(),doneTemplates:e})}function e7(e,t,r){let n=new Map((null!=t?t:[]).map(e=>[e.id,e]));return e.map(e=>{let t=n.get(e.id);if(!t)return e;let i={};for(let n of r)void 0===e[n]&&void 0!==t[n]&&(i[n]=t[n]);return Object.keys(i).length?{...e,...i}:e})}async function te(e){let t=await e0(),r=e7(e,t.rentalItems,["stock","hidden","sold"]);await e4({...t,rentalItems:r,rentalItemsAt:Date.now()})}async function tt(e){let t=await e0(),r=e7(e,t.shopItems,["hidden","sold"]);await e4({...t,shopItems:r,shopItemsAt:Date.now()})}async function tr(e){let t=await e0(),r=(e,t)=>e7(e,t,["hidden","sold"]);await e4({...t,rentalSetItems:r(e.rentalSetItems,t.rentalSetItems),buySetItems:r(e.buySetItems,t.buySetItems),souvenirSetItems:r(e.souvenirSetItems,t.souvenirSetItems),setItemsAt:Date.now()})}async function tn(e){await e4({...await e0(),packOpts:e,packOptsAt:Date.now()})}async function ti(e){await e4({...await e0(),subPlans:e,subPlansAt:Date.now()})}async function ta(e){let t=await e0();await e4({...t,banchanItems:e7(e.banchanItems,t.banchanItems,["hidden"]),fruitItems:e7(e.fruitItems,t.fruitItems,["hidden"]),subItemsAt:Date.now()})}async function ts(e){let t=await e0(),r=e7(e,t.tourItems,["hidden"]);await e4({...t,tourItems:r,tourItemsAt:Date.now()})}let to="plSettings",tc={account:{bank:"",number:"",holder:""}};async function tu(){$("알림 설정 조회");let e=await (0,i.QT)((0,i.JU)(s.db,to,"notify"));return e.exists()?{...tc,...e.data()}:tc}async function tl(e){$("알림 설정 저장"),await (0,i.pl)((0,i.JU)(s.db,to,"notify"),e,{merge:!0})}async function th(e){$("회원 조회");let t=await (0,i.QT)((0,i.JU)(s.db,ek,e));if(!t.exists())return null;let r=t.data();return{...r,uid:t.id,created_at:eR(r.created_at)}}async function tg(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};$("회원 목록 조회");let r=null!==(e=t.limit)&&void 0!==e?e:50,n=(0,i.IO)((0,i.hJ)(s.db,ek),(0,i.Xo)("created_at","desc"),...t.cursor?[(0,i.TQ)(i.EK.fromMillis(t.cursor))]:[],(0,i.b9)(r+1)),a=(await (0,i.PL)(n)).docs.map(e=>{let t=e.data();return{...t,uid:e.id,created_at:eR(t.created_at)}}),o=a.length>r,c=o?a.slice(0,r):a;return{items:c,nextCursor:o&&c.length?c[c.length-1].created_at:null}}async function td(){return $("회원 통계"),(await (0,i.Yp)((0,i.hJ)(s.db,ek))).data().count}function tm(e){return["image/jpeg","image/jpg","image/png","image/webp"].includes(e.type)?e.size>5242880?"파일 크기는 5MB 이하여야 합니다":null:"JPG, PNG, WebP 파일만 업로드 가능합니다"}},9244:function(e,t,r){"use strict";let n,i,a,s;r.r(t),r.d(t,{default:function(){return M}});var o=r(5893),c=r(7294),u=r(2238),l=r(3333),h=r(4444),g=r(8463);r(7578);/**
127 * @license
128 * Copyright 2019 Google LLC
129 *
130 * Licensed under the Apache License, Version 2.0 (the "License");
131 * you may not use this file except in compliance with the License.
132 * You may obtain a copy of the License at
133 *
134 *   http://www.apache.org/licenses/LICENSE-2.0
135 *
136 * Unless required by applicable law or agreed to in writing, software
137 * distributed under the License is distributed on an "AS IS" BASIS,
138 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139 * See the License for the specific language governing permissions and
140 * limitations under the License.
141 */let d="analytics",m="https://www.googletagmanager.com/gtag/js",p=new l.Yd("@firebase/analytics"),y=new h.LL("analytics","Analytics",{"already-exists":"A Firebase Analytics instance with the appId {$id}  already exists. Only one Firebase Analytics instance can be created for each appId.","already-initialized":"initializeAnalytics() cannot be called again with different options than those it was initially called with. It can be called again with the same options to return the existing instance, or getAnalytics() can be used to get a reference to the already-initialized instance.","already-initialized-settings":"Firebase Analytics has already been initialized.settings() must be called before initializing any Analytics instanceor it will have no effect.","interop-component-reg-failed":"Firebase Analytics Interop Component failed to instantiate: {$reason}","invalid-analytics-context":"Firebase Analytics is not supported in this environment. Wrap initialization of analytics in analytics.isSupported() to prevent initialization in unsupported environments. Details: {$errorInfo}","indexeddb-unavailable":"IndexedDB unavailable or restricted in this environment. Wrap initialization of analytics in analytics.isSupported() to prevent initialization in unsupported environments. Details: {$errorInfo}","fetch-throttle":"The config fetch request timed out while in an exponential backoff state. Unix timestamp in milliseconds when fetch request throttling ends: {$throttleEndTimeMillis}.","config-fetch-failed":"Dynamic config fetch failed: [{$httpStatus}] {$responseMessage}","no-api-key":'The "apiKey" field is empty in the local Firebase config. Firebase Analytics requires this field tocontain a valid API key.',"no-app-id":'The "appId" field is empty in the local Firebase config. Firebase Analytics requires this field tocontain a valid app ID.',"no-client-id":'The "client_id" field is empty.',"invalid-gtag-resource":"Trusted Types detected an invalid gtag resource: {$gtagURL}."});/**
142 * @license
143 * Copyright 2019 Google LLC
144 *
145 * Licensed under the Apache License, Version 2.0 (the "License");
146 * you may not use this file except in compliance with the License.
147 * You may obtain a copy of the License at
148 *
149 *   http://www.apache.org/licenses/LICENSE-2.0
150 *
151 * Unless required by applicable law or agreed to in writing, software
152 * distributed under the License is distributed on an "AS IS" BASIS,
153 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
154 * See the License for the specific language governing permissions and
155 * limitations under the License.
156 */function f(e){if(!e.startsWith(m)){let t=y.create("invalid-gtag-resource",{gtagURL:e});return p.warn(t.message),""}return e}function v(e){return Promise.all(e.map(e=>e.catch(e=>e)))}async function _(e,t,r,n,i,a){let s=n[i];try{if(s)await t[s];else{let e=(await v(r)).find(e=>e.measurementId===i);e&&await t[e.appId]}}catch(e){p.error(e)}e("config",i,a)}async function w(e,t,r,n,i){try{let a=[];if(i&&i.send_to){let e=i.send_to;Array.isArray(e)||(e=[e]);let n=await v(r);for(let r of e){let e=n.find(e=>e.measurementId===r),i=e&&t[e.appId];if(i)a.push(i);else{a=[];break}}}0===a.length&&(a=Object.values(t)),await Promise.all(a),e("event",n,i||{})}catch(e){p.error(e)}}class k{constructor(e={},t=1e3){this.throttleMetadata=e,this.intervalMillis=t}getThrottleMetadata(e){return this.throttleMetadata[e]}setThrottleMetadata(e,t){this.throttleMetadata[e]=t}deleteThrottleMetadata(e){delete this.throttleMetadata[e]}}let P=new k;async function b(e){var t;let{appId:r,apiKey:n}=e,i={method:"GET",headers:new Headers({Accept:"application/json","x-goog-api-key":n})},a="https://firebase.googleapis.com/v1alpha/projects/-/apps/{app-id}/webConfig".replace("{app-id}",r),s=await fetch(a,i);if(200!==s.status&&304!==s.status){let e="";try{let r=await s.json();(null===(t=r.error)||void 0===t?void 0:t.message)&&(e=r.error.message)}catch(e){}throw y.create("config-fetch-failed",{httpStatus:s.status,responseMessage:e})}return s.json()}async function E(e,t=P,r){let{appId:n,apiKey:i,measurementId:a}=e.options;if(!n)throw y.create("no-app-id");if(!i){if(a)return{measurementId:a,appId:n};throw y.create("no-api-key")}let s=t.getThrottleMetadata(n)||{backoffCount:0,throttleEndTimeMillis:Date.now()},o=new S;return setTimeout(async()=>{o.abort()},void 0!==r?r:6e4),R({appId:n,apiKey:i,measurementId:a},s,o,t)}async function R(e,{throttleEndTimeMillis:t,backoffCount:r},n,i=P){var a;let{appId:s,measurementId:o}=e;try{await new Promise((e,r)=>{let i=setTimeout(e,Math.max(t-Date.now(),0));n.addEventListener(()=>{clearTimeout(i),r(y.create("fetch-throttle",{throttleEndTimeMillis:t}))})})}catch(e){if(o)return p.warn(`Timed out fetching this Firebase app's measurement ID from the server. Falling back to the measurement ID ${o} provided in the "measurementId" field in the local Firebase config. [${null==e?void 0:e.message}
156]`),{appId:s,measurementId:o};throw e}try{let t=await b(e);return i.deleteThrottleMetadata(s),t}catch(u){if(!function(e){if(!(e instanceof h.ZR)||!e.customData)return!1;let t=Number(e.customData.httpStatus);return 429===t||500===t||503===t||504===t}(u)){if(i.deleteThrottleMetadata(s),o)return p.warn(`Failed to fetch this Firebase app's measurement ID from the server. Falling back to the measurement ID ${o} provided in the "measurementId" field in the local Firebase config. [${null==u?void 0:u.message}]`),{appId:s,measurementId:o};throw u}let t=503===Number(null===(a=null==u?void 0:u.customData)||void 0===a?void 0:a.httpStatus)?(0,h.$s)(r,i.intervalMillis,30):(0,h.$s)(r,i.intervalMillis),c={throttleEndTimeMillis:Date.now()+t,backoffCount:r+1};return i.setThrottleMetadata(s,c),p.debug(`Calling attemptFetch again in ${t} millis`),R(e,c,n,i)}}class S{constructor(){this.listeners=[]}addEventListener(e){this.listeners.push(e)}abort(){this.listeners.forEach(e=>e())}}async function I(e,t,r,n,i){if(i&&i.global){e("event",r,n);return}{let i=await t;e("event",r,Object.assign(Object.assign({},n),{send_to:i}))}}/**
157 * @license
158 * Copyright 2020 Google LLC
159 *
160 * Licensed under the Apache License, Version 2.0 (the "License");
161 * you may not use this file except in compliance with the License.
162 * You may obtain a copy of the License at
163 *
164 *   http://www.apache.org/licenses/LICENSE-2.0
165 *
166 * Unless required by applicable law or agreed to in writing, software
167 * distributed under the License is distributed on an "AS IS" BASIS,
168 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
169 * See the License for the specific language governing permissions and
170 * limitations under the License.
171 */async function T(){if(!(0,h.hl)())return p.warn(y.create("indexeddb-unavailable",{errorInfo:"IndexedDB is not available in this environment."}).message),!1;try{await (0,h.eu)()}catch(e){return p.warn(y.create("indexeddb-unavailable",{errorInfo:null==e?void 0:e.toString()}).message),!1}return!0}async function C(e,t,r,a,s,o,c){var u;let l=E(e);l.then(t=>{r[t.measurementId]=t.appId,e.options.measurementId&&t.measurementId!==e.options.measurementId&&p.warn(`The measurement ID in the local Firebase config (${e.options.measurementId}) does not match the measurement ID fetched from the server (${t.measurementId}). To ensure analytics events are always sent to the correct Analytics property, update the measurement ID field in the local config or remove it from the local config.`)}).catch(e=>p.error(e)),t.push(l);let h=T().then(e=>e?a.getId():void 0),[g,d]=await Promise.all([l,h]);!function(e){for(let t of Object.values(window.document.getElementsByTagName("script")))if(t.src&&t.src.includes(m)&&t.src.includes(e))return t;return null}(o)&&function(e,t){var r,n;let i;let a=(r="firebase-js-sdk-policy",n={createScriptURL:f},window.trustedTypes&&(i=window.trustedTypes.createPolicy(r,n)),i),s=document.createElement("script"),o=`${m}?l=${e}&id=${t}`;s.src=a?null==a?void 0:a.createScriptURL(o):o,s.async=!0,document.head.appendChild(s)}(o,g.measurementId),i&&(s("consent","default",i),i=void 0),s("js",new Date);let y=null!==(u=null==c?void 0:c.config)&&void 0!==u?u:{};return y.origin="firebase",y.update=!0,null!=d&&(y.firebase_id=d),s("config",g.measurementId,y),n&&(s("set",n),n=void 0),g.measurementId}/**
172 * @license
173 * Copyright 2019 Google LLC
174 *
175 * Licensed under the Apache License, Version 2.0 (the "License");
176 * you may not use this file except in compliance with the License.
177 * You may obtain a copy of the License at
178 *
179 *   http://www.apache.org/licenses/LICENSE-2.0
180 *
181 * Unless required by applicable law or agreed to in writing, software
182 * distributed under the License is distributed on an "AS IS" BASIS,
183 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
184 * See the License for the specific language governing permissions and
185 * limitations under the License.
186 */class H{constructor(e){this.app=e}_delete(){return delete W[this.app.options.appId],Promise.resolve()}}let W={},A=[],D={},U="dataLayer",L=!1,O="@firebase/analytics",N="0.10.8";(0,u.Xd)(new g.wA(d,(e,{options:t})=>(function(e,t,r){!function(){let e=[];
186if((0,h.ru)()&&e.push("This is a browser extension environment."),(0,h.zI)()||e.push("Cookies are not available."),e.length>0){let t=e.map((e,t)=>`(${t+1}) ${e}`).join(" "),r=y.create("invalid-analytics-context",{errorInfo:t});p.warn(r.message)}}();let n=e.options.appId;if(!n)throw y.create("no-app-id");if(!e.options.apiKey){if(e.options.measurementId)p.warn(`The "apiKey" field is empty in the local Firebase config. This is needed to fetch the latest measurement ID for this Firebase app. Falling back to the measurement ID ${e.options.measurementId} provided in the "measurementId" field in the local Firebase config.`);else throw y.create("no-api-key")}if(null!=W[n])throw y.create("already-exists",{id:n});if(!L){var i,o;let e,t;e=[],Array.isArray(window[U])?e=window[U]:window[U]=e;let{wrappedGtag:r,gtagCore:n}=(i="gtag",t=function(...e){window[U].push(arguments)},window[i]&&"function"==typeof window[i]&&(t=window[i]),window[i]=(o=t,async function(e,...t){try{if("event"===e){let[e,r]=t;await w(o,W,A,e,r)}else if("config"===e){let[e,r]=t;await _(o,W,A,D,e,r)}else if("consent"===e){let[e,r]=t;o("consent",e,r)}else if("get"===e){let[e,r,n]=t;o("get",e,r,n)}else if("set"===e){let[e]=t;o("set",e)}else o(e,...t)}catch(e){p.error(e)}}),{gtagCore:t,wrappedGtag:window[i]});s=r,a=n,L=!0}return W[n]=C(e,A,D,t,a,U,r),new H(e)})(e.getProvider("app").getImmediate(),e.getProvider("installations-internal").getImmediate(),t),"PUBLIC")),(0,u.Xd)(new g.wA("analytics-internal",function(e){try{let t=e.getProvider(d).getImmediate();return{logEvent:(e,r,n)=>{var i;return i=t,void(i=(0,h.m9)(i),I(s,W[i.app.options.appId],e,r,n).catch(e=>p.error(e)))}}}catch(e){throw y.create("interop-component-reg-failed",{reason:e})}},"PRIVATE")),(0,u.KN)(O,N),(0,u.KN)(O,N,"esm2017");var K=r(5559),x=r(3228);function M(e){let{Component:t,pageProps:r}=e;return(0,c.useEffect)(()=>{!function(e=(0,u.Mq)()){e=(0,h.m9)(e);let t=(0,u.qX)(e,d);t.isInitialized()?t.getImmediate():function(e,t={}){let r=(0,u.qX)(e,d);if(r.isInitialized()){let e=r.getImmediate();if((0,h.vZ)(t,r.getOptions()))return e;throw y.create("already-initialized")}return r.initialize({options:t})}(e)}(K.l2)},[]),(0,o.jsxs)(x.Rr,{children:[(0,o.jsx)(x.CB,{}),(0,o.jsx)(t,{...r})]})}r(9311)},9311:function(){},9008:function(e,t,r){e.exports=r(7828)},4155:function(e){var t,r,n,i=e.exports={};function a(){throw Error("setTimeout has not been defined")}function s(){throw Error("clearTimeout has not been defined")}function o(e){if(t===setTimeout)return setTimeout(e,0);if((t===a||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(r){try{return t.call(null,e,0)}catch(r){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:a}catch(e){t=a}try{r="function"==typeof clearTimeout?clearTimeout:s}catch(e){r=s}}();var c=[],u=!1,l=-1;function h(){u&&n&&(u=!1,n.length?c=n.concat(c):l=-1,c.length&&g())}function g(){if(!u){var e=o(h);u=!0;for(var t=c.length;t;){for(n=c,c=[];++l<t;)n&&n[l].run();l=-1,t=c.length}n=null,u=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===s||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function d(e,t){this.fun=e,this.array=t}function m(){}i.nextTick=function(e){var t=Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];c.push(new d(e,t)),1!==c.length||u||o(g)},d.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=m,i.addListener=m,i.once=m,i.off=m,i.removeListener=m,i.removeAllListeners=m,i.emit=m,i.prependListener=m,i.prependOnceListener=m,i.listeners=function(e){return[]},i.binding=function(e){throw Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(e){throw Error("process.chdir is not supported")},i.umask=function(){return 0}},2238:function(e,t,r){"use strict";r.d(t,{C6:function(){return R},Jn:function(){return P},KN:function(){return S},Mq:function(){return E},Xd:function(){return f},ZF:function(){return b},qX:function(){return v},rh:function(){return _}});var n=r(8463),i=r(3333),a=r(4444),s=r(6531);/**
187 * @license
188 * Copyright 2019 Google LLC
189 *
190 * Licensed under the Apache License, Version 2.0 (the "License");
191 * you may not use this file except in compliance with the License.
192 * You may obtain a copy of the License at
193 *
194 *   http://www.apache.org/licenses/LICENSE-2.0
195 *
196 * Unless required by applicable law or agreed to in writing, software
197 * distributed under the License is distributed on an "AS IS" BASIS,
198 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
199 * See the License for the specific language governing permissions and
200 * limitations under the License.
201 */class o{constructor(e){this.container=e}getPlatformInfoString(){return this.container.getProviders().map(e=>{if(!function(e){let t=e.getComponent();return(null==t?void 0:t.type)==="VERSION"}(e))return null;{let t=e.getImmediate();return`${t.library}/${t.version}`}}).filter(e=>e).join(" ")}}let c="@firebase/app",u="0.10.13",l=new i.Yd("@firebase/app"),h="[DEFAULT]",g={[c]:"fire-core","@firebase/app-compat":"fire-core-compat","@firebase/analytics":"fire-analytics","@firebase/analytics-compat":"fire-analytics-compat","@firebase/app-check":"fire-app-check","@firebase/app-check-compat":"fire-app-check-compat","@firebase/auth":"fire-auth","@firebase/auth-compat":"fire-auth-compat","@firebase/database":"fire-rtdb","@firebase/data-connect":"fire-data-connect","@firebase/database-compat":"fire-rtdb-compat","@firebase/functions":"fire-fn","@firebase/functions-compat":"fire-fn-compat","@firebase/installations":"fire-iid","@firebase/installations-compat":"fire-iid-compat","@firebase/messaging":"fire-fcm","@firebase/messaging-compat":"fire-fcm-compat","@firebase/performance":"fire-perf","@firebase/performance-compat":"fire-perf-compat","@firebase/remote-config":"fire-rc","@firebase/remote-config-compat":"fire-rc-compat","@firebase/storage":"fire-gcs","@firebase/storage-compat":"fire-gcs-compat","@firebase/firestore":"fire-fst","@firebase/firestore-compat":"fire-fst-compat","@firebase/vertexai-preview":"fire-vertex","fire-js":"fire-js",firebase:"fire-js-all"},d=new Map,m=new Map,p=new Map;function y(e,t){try{e.container.addComponent(t)}catch(r){l.debug(`Component ${t.name} failed to register with FirebaseApp ${e.name}`,r)}}function f(e){let t=e.name;if(p.has(t))return l.debug(`There were multiple attempts to register component ${t}.`),!1;for(let r of(p.set(t,e),d.values()))y(r,e);for(let t of m.values())y(t,e);return!0}function v(e,t){let r=e.container.getProvider("heartbeat").getImmediate({optional:!0});return r&&r.triggerHeartbeat(),e.container.getProvider(t)}function _(e){return void 0!==e.settings}let w=new a.LL("app","Firebase",{"no-app":"No Firebase App '{$appName}' has been created - call initializeApp() first","bad-app-name":"Illegal App name: '{$appName}'","duplicate-app":"Firebase App named '{$appName}' already exists with different options or config","app-deleted":"Firebase App named '{$appName}' already deleted","server-app-deleted":"Firebase Server App has been deleted","no-options":"Need to provide options, when not being deployed to hosting via source.","invalid-app-argument":"firebase.{$appName}() takes either no argument or a Firebase App instance.","invali
201d-log-argument":"First argument to `onLog` must be null or a function.","idb-open":"Error thrown when opening IndexedDB. Original error: {$originalErrorMessage}.","idb-get":"Error thrown when reading from IndexedDB. Original error: {$originalErrorMessage}.","idb-set":"Error thrown when writing to IndexedDB. Original error: {$originalErrorMessage}.","idb-delete":"Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}.","finalization-registry-not-supported":"FirebaseServerApp deleteOnDeref field defined but the JS runtime does not support FinalizationRegistry.","invalid-server-app-environment":"FirebaseServerApp is not for use in browser environments."});/**
202 * @license
203 * Copyright 2019 Google LLC
204 *
205 * Licensed under the Apache License, Version 2.0 (the "License");
206 * you may not use this file except in compliance with the License.
207 * You may obtain a copy of the License at
208 *
209 *   http://www.apache.org/licenses/LICENSE-2.0
210 *
211 * Unless required by applicable law or agreed to in writing, software
212 * distributed under the License is distributed on an "AS IS" BASIS,
213 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
214 * See the License for the specific language governing permissions and
215 * limitations under the License.
216 */class k{constructor(e,t,r){this._isDeleted=!1,this._options=Object.assign({},e),this._config=Object.assign({},t),this._name=t.name,this._automaticDataCollectionEnabled=t.automaticDataCollectionEnabled,this._container=r,this.container.addComponent(new n.wA("app",()=>this,"PUBLIC"))}get automaticDataCollectionEnabled(){return this.checkDestroyed(),this._automaticDataCollectionEnabled}set automaticDataCollectionEnabled(e){this.checkDestroyed(),this._automaticDataCollectionEnabled=e}get name(){return this.checkDestroyed(),this._name}get options(){return this.checkDestroyed(),this._options}get config(){return this.checkDestroyed(),this._config}get container(){return this._container}get isDeleted(){return this._isDeleted}set isDeleted(e){this._isDeleted=e}checkDestroyed(){if(this.isDeleted)throw w.create("app-deleted",{appName:this._name})}}/**
217 * @license
218 * Copyright 2019 Google LLC
219 *
220 * Licensed under the Apache License, Version 2.0 (the "License");
221 * you may not use this file except in compliance with the License.
222 * You may obtain a copy of the License at
223 *
224 *   http://www.apache.org/licenses/LICENSE-2.0
225 *
226 * Unless required by applicable law or agreed to in writing, software
227 * distributed under the License is distributed on an "AS IS" BASIS,
228 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
229 * See the License for the specific language governing permissions and
230 * limitations under the License.
231 */let P="10.14.1";function b(e,t={}){let r=e;"object"!=typeof t&&(t={name:t});let i=Object.assign({name:h,automaticDataCollectionEnabled:!1},t),s=i.name;if("string"!=typeof s||!s)throw w.create("bad-app-name",{appName:String(s)});if(r||(r=(0,a.aH)()),!r)throw w.create("no-options");let o=d.get(s);if(o){if((0,a.vZ)(r,o.options)&&(0,a.vZ)(i,o.config))return o;throw w.create("duplicate-app",{appName:s})}let c=new n.H0(s);for(let e of p.values())c.addComponent(e);let u=new k(r,i,c);return d.set(s,u),u}function E(e=h){let t=d.get(e);if(!t&&e===h&&(0,a.aH)())return b();if(!t)throw w.create("no-app",{appName:e});return t}function R(){return Array.from(d.values())}function S(e,t,r){var i;let a=null!==(i=g[e])&&void 0!==i?i:e;r&&(a+=`-${r}`);let s=a.match(/\s|\//),o=t.match(/\s|\//);if(s||o){let e=[`Unable to register library "${a}" with version "${t}":`];s&&e.push(`library name "${a}" contains illegal characters (whitespace or "/")`),s&&o&&e.push("and"),o&&e.push(`version name "${t}" contains illegal characters (whitespace or "/")`),l.warn(e.join(" "));return}f(new n.wA(`${a}-version`,()=>({library:a,version:t}),"VERSION"))}let I="firebase-heartbeat-store",T=null;function C(){return T||(T=(0,s.X3)("firebase-heartbeat-database",1,{upgrade:(e,t)=>{if(0===t)try{e.createObjectStore(I)}catch(e){console.warn(e)}}}).catch(e=>{throw w.create("idb-open",{originalErrorMessage:e.message})})),T}async function H(e){try{let t=(await C()).transaction(I),r=await t.objectStore(I).get(A(e));return await t.done,r}catch(e){if(e instanceof a.ZR)l.warn(e.message);else{let t=w.create("idb-get",{originalErrorMessage:null==e?void 0:e.message});l.warn(t.message)}}}async function W(e,t){try{let r=(await C()).transaction(I,"readwrite"),n=r.objectStore(I);await n.put(t,A(e)),await r.done}catch(e){if(e instanceof a.ZR)l.warn(e.message);else{let t=w.create("idb-set",{originalErrorMessage:null==e?void 0:e.message});l.warn(t.message)}}}function A(e){return`${e.name}!${e.options.appId}`}class D{constructor(e){this.container=e,this._heartbeatsCache=null;let t=this.container.getProvider("app").getImmediate();this._storage=new L(t),this._heartbeatsCachePromise=this._storage.read().then(e=>(this._heartbeatsCache=e,e))}async triggerHeartbeat(){var e,t;try{let r=this.container.getProvider("platform-logger").getImmediate().getPlatformInfoString(),n=U();if((null===(e=this._heartbeatsCache)||void 0===e?void 0:e.heartbeats)==null&&(this._heartbeatsCache=await this._heartbeatsCachePromise,(null===(t=this._heartbeatsCache)||void 0===t?void 0:t.heartbeats)==null)||this._heartbeatsCache.lastSentHeartbeatDate===n||this._heartbeatsCache.heartbeats.some(e=>e.date===n))return;return this._heartbeatsCache.heartbeats.push({date:n,agent:r}),this._heartbeatsCache.heartbeats=this._heartbeatsCache.heartbeats.filter(e=>{let t=new Date(e.date).valueOf();return Date.now()-t<=2592e6}),this._storage.overwrite(this._heartbeatsCache)}catch(e){l.warn(e)}}async getHeartbeatsHeader(){var e;try{if(null===this._heartbeatsCache&&await this._heartbeatsCachePromise,(null===(e=this._heartbeatsCache)||void 0===e?void 0:e.heartbeats)==null||0===this._heartbeatsCache.heartbeats.length)return"";let t=U(),{heartbeatsToSend:r,unsentEntries:n}=function(e,t=1024){let r=[],n=e.slice();for(let i of e){let e=r.find(e=>e.agent===i.agent);if(e){if(e.dates.push(i.date),O(r)>t){e.dates.pop();break}}else if(r.push({agent:i.agent,dates:[i.date]}),O(r)>t){r.pop();break}n=n.slice(1)}return{heartbeatsToSend:r,unsentEntries:n}}(this._heartbeatsCache.heartbeats),i=(0,a.L)(JSON.stringify({version:2,heartbeats:r}));return this._heartbeatsCache.lastSentHeartbeatDate=t,n.length>0?(this._heartbeatsCache.heartbeats=n,await this._storage.overwrite(this._heartbeatsCache)):(this._heartbeatsCache.heartbeats=[],this._storage.overwrite(this._heartbeatsCache)),i}catch(e){return l.warn(e),""}}}function U(){return new Date().toISOString().substring(0,10)}class L{constructor(e){this.app=e,this._canUseIndexedDBPromise=this.runIndexedDBEnvironmentCheck()}async runIndexedDBEnvironmentCheck(){return!!(0,a.hl)()&&(0,a.eu)().then(()=>!0).catch(()=>!1)}async read(){if(!await this._canUseIndexedDBPromise)return{heartbeats:[]};{let e=await H(this.app);return(null==e?void 0:e.heartbeats)?e:{heartbeats:[]}}}async overwrite(e){var t;if(await this._canUseIndexedDBPromise){let r=await this.read();return W(this.app,{lastSentHeartbeatDate:null!==(t=e.lastSentHeartbeatDate)&&void 0!==t?t:r.lastSentHeartbeatDate,heartbeats:e.heartbeats})}}async add(e){var t;if(await this._canUseIndexedDBPromise){let r=await this.read();return W(this.app,{lastSentHeartbeatDate:null!==(t=e.lastSentHeartbeatDate)&&void 0!==t?t:r.lastSentHeartbeatDate,heartbeats:[...r.heartbeats,...e.heartbeats]})}}}function O(e){return(0,a.L)(JSON.stringify({version:2,heartbeats:e})).length}f(new n.wA("platform-logger",e=>new o(e),"PRIVATE")),f(new n.wA("heartbeat",e=>new D(e),"PRIVATE")),S(c,u,""),S(c,u,"esm2017"),S("fire-js","")},8463:function(e,t,r){"use strict";r.d(t,{H0:function(){return o},wA:function(){return i}});var n=r(4444);class i{constructor(e,t,r){this.name=e,this.instanceFactory=t,this.type=r,this.multipleInstances=!1,this.serviceProps={},this.instantiationMode="LAZY",this.onInstanceCreated=null}setInstantiationMode(e){return this.instantiationMode=e,this}setMultipleInstances(e){return this.multipleInstances=e,this}setServiceProps(e){return this.serviceProps=e,this}setInstanceCreatedCallback(e){return this.onInstanceCreated=e,this}}/**
232 * @license
233 * Copyright 2019 Google LLC
234 *
235 * Licensed under the Apache License, Version 2.0 (the "License");
236 * you may not use this file except in compliance with the License.
237 * You may obtain a copy of the License at
238 *
239 *   http://www.apache.org/licenses/LICENSE-2.0
240 *
241 * Unless required by applicable law or agreed to in writing, software
242 * distributed under the License is distributed on an "AS IS" BASIS,
243 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
244 * See the License for the specific language governing permissions and
245 * limitations under the License.
246 */let a="[DEFAULT]";/**
247 * @license
248 * Copyright 2019 Google LLC
249 *
250 * Licensed under the Apache License, Version 2.0 (the "License");
251 * you may not use this file except in compliance with the License.
252 * You may obtain a copy of the License at
253 *
254 *   http://www.apache.org/licenses/LICENSE-2.0
255 *
256 * Unless required by applicable law or agreed to in writing, software
257 * distributed under the License is distributed on an "AS IS" BASIS,
258 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
259 * See the License for the specific language governing permissions and
260 * limitations under the License.
261 */class s{constructor(e,t){this.name=e,this.container=t,this.component=null,this.instances=new Map,this.instancesDeferred=new Map,this.instancesOptions=new Map,this.onInitCallbacks=new Map}get(e){let t=this.normalizeInstanceIdentifier(e);if(!this.instancesDeferred.has(t)){let e=new n.BH;if(this.instancesDeferred.set(t,e),this.isInitialized(t)||this.shouldAutoInitialize())try{let r=this.getOrInitializeService({instanceIdentifier:t});r&&e.resolve(r)}catch(e){}}return this.instancesDeferred.get(t).promise}getImmediate(e){var t;let r=this.normalizeInstanceIdentifier(null==e?void 0:e.identifier),n=null!==(t=null==e?void 0:e.optional)&&void 0!==t&&t;if(this.isInitialized(r)||this.shouldAutoInitialize())try{return this.getOrInitializeService({instanceIdentifier:r})}catch(e){if(n)return null;throw e}else{if(n)return null;throw Error(`Service ${this.name} is not available`)}}getComponent(){return this.component}setComponent(e){if(e.name!==this.name)throw Error(`Mismatching Component ${e.name} for Provider ${this.name}.`);if(this.component)throw Error(`Component for ${this.name} has already been provided`);if(this.component=e,this.shouldAutoInitialize()){if("EAGER"===e.instantiationMode)try{this.getOrInitializeService({instanceIdentifier:a})}catch(e){}for(let[e,t]of this.instancesDeferred.entries()){let r=this.normalizeInstanceIdentifier(e);try{let e=this.getOrInitializeService({instanceIdentifier:r});t.resolve(e)}catch(e){}}}}clearInstance(e=a){this.instancesDeferred.delete(e),this.instancesOptions.delete(e),this.instances.delete(e)}async delete(){let e=Array.from(this.instances.values());await Promise.all([...e.filter(e=>"INTERNAL"in e).map(e=>e.INTERNAL.delete()),...e.filter(e=>"_delete"in e).map(e=>e._delete())])}isComponentSet(){return null!=this.component}isInitialized(e=a){return this.instances.has(e)}getOptions(e=a){return this.instancesOptions.get(e)||{}}initialize(e={}){let{options:t={}}=e,r=this.normalizeInstanceIdentifier(e.instanceIdentifier);if(this.isInitialized(r))throw Error(`${this.name}(${r}) has already been initialized`);if(!this.isComponentSet())throw Error(`Component ${this.name} has not been registered yet`);let n=this.getOrInitializeService({instanceIdentifier:r,options:t});for(let[e,t]of this.instancesDeferred.entries())r===this.normalizeInstanceIdentifier(e)&&t.resolve(n);return n}onInit(e,t){var r;let n=this.normalizeInstanceIdentifier(t),i=null!==(r=this.onInitCallbacks.get(n))&&void 0!==r?r:new Set;i.add(e),this.onInitCallbacks.set(n,i);let a=this.instances.get(n);return a&&e(a,n),()=>{i.delete(e)}}invokeOnInitCallbacks(e,t){let r=this.onInitCallbacks.get(t);if(r)for(let n of r)try{n(e,t)}catch(e){}}getOrInitializeService({instanceIdentifier:e,options:t={}}){let r=this.instances.get(e);if(!r&&this.component&&(r=this.component.instanceFactory(this.container,{instanceIdentifier:e===a?void 0:e,options:t}),this.instances.set(e,r),this.instancesOptions.set(e,t),this.invokeOnInitCallbacks(r,e),this.component.onInstanceCreated))try{this.component.onInstanceCreated(this.container,e,r)}catch(e){}return r||null}normalizeInstanceIdentifier(e=a){return this.component?this.component.multipleInstances?e:a:e}shouldAutoInitialize(){return!!this.component&&"EXPLICIT"!==this.component.instantiationMode}}/**
262 * @license
263 * Copyright 2019 Google LLC
264 *
265 * Licensed under the Apache License, Version 2.0 (the "License");
266 * you may not use this file except in compliance with the License.
267 * You may obtain a copy of the License at
268 *
269 *   http://www.apache.org/licenses/LICENSE-2.0
270 *
271 * Unless required by applicable law or agreed to in writing, software
272 * distributed under the License is distributed on an "AS IS" BASIS,
273 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
274 * See the License for the specific language governing permissions and
275 * limitations under the License.
276 */class o{constructor(e){this.name=e,this.providers=new Map}addComponent(e){let t=this.getProvider(e.name);if(t.isComponentSet())throw Error(`Component ${e.name} has already been registered with ${this.name}`);t.setComponent(e)}addOrOverwriteComponent(e){this.getProvider(e.name).isComponentSet()&&this.providers.delete(e.name),this.addComponent(e)}getProvider(e){if(this.providers.has(e))return this.providers.get(e);let t=new s(e,this);return this.providers.set(e,t),t}getProviders(){return Array.from(this.providers.values())}}},7578:function(e,t,r){"use strict";var n=r(2238),i=r(8463),a=r(4444),s=r(6531);let o="@firebase/installations",c="0.6.9",u=`w:${c}`,l="FIS_v2",h=new a.LL("installations","Installations",{"missing-app-config-values":'Missing App configuration value: "{$valueName}"',"not-registered":"Firebase Installation is not registered.","installation-not-found":"Firebase Installation not found.","request-failed":'{$requestName} request failed with error "{$serverCode} {$serverStatus}: {$serverMessage}"',"app-offline":"Could not process request. Application offline.","delete-pending-registration":"Can't delete installation while there is a pending registration request."});function g(e){return e instanceof a.ZR&&e.code.includes("request-failed")}/**
277 * @license
278 * Copyright 2019 Google LLC
279 *
280 * Licensed under the Apache License, Version 2.0 (the "License");
281 * you may not use this file except in compliance with the License.
282 * You may obtain a copy of the License at
283 *
284 *   http://www.apache.org/licenses/LICENSE-2.0
285 *
286 * Unless required by applicable law or agreed to in writing, software
287 * distributed under the License is distributed on an "AS IS" BASIS,
288 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
289 * See the License for the specific language governing permissions and
290 * limitations under the License.
291 */function d({projectId:e}){return`https://firebaseinstallations.googleapis.com/v1/projects/${e}/installations`}function m(e){return{token:e.token,requestStatus:2,expiresIn:Number(e.expiresIn.replace("s","000")),creationTime:Date.now()}}async function p(e,t){let r=(await t.json()).error;return h.create("request-failed",{requestName:e,serverCode:r.code,serverMessage:r.message,serverStatus:r.status})}function y({apiKey:e}){return new Headers({"Content-Type":"application/json",Accept:"application/json","x-goog-api-key":e})}async function f(e){let t=await e();return t.status>=500&&t.status<600?e():t}/**
292 * @license
293 * Copyright 2019 Google LLC
294 *
295 * Licensed under the Apache License, Version 2.0 (the "License");
296 * you may not use this file except in compliance with the License.
297 * You may obtain a copy of the License at
298 *
299 *   http://www.apache.org/licenses/LICENSE-2.0
300 *
301 * Unless required by applicable law or agreed to in writing, software
302 * distributed under the License is distributed on an "AS IS" BASIS,
303 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
304 * See the License for the specific language governing permissions and
305 * limitations under the License.
306 */async function v({appConfig:e,heartbeatServiceProvider:t},{fid:r}){let n=d(e),i=y(e),a=t.getImmediate({optional:!0});if(a){let e=await a.getHeartbeatsHeader();e&&i.append("x-firebase-client",e)}let s={method:"POST",headers:i,body:JSON.stringify({fid:r,authVersion:l,appId:e.appId,sdkVersion:u})},o=await f(()=>fetch(n,s));if(o.ok){let e=await o.json();return{fid:e.fid||r,registrationStatus:2,refreshToken:e.refreshToken,authToken:m(e.authToken)}}throw await p("Create Installation",o)}/**
307 * @license
308 * Copyright 2019 Google LLC
309 *
310 * Licensed under the Apache License, Version 2.0 (the "License");
311 * you may not use this file except in compliance with the License.
312 * You may obtain a copy of the License at
313 *
314 *   http://www.apache.org/licenses/LICENSE-2.0
315 *
316 * Unless required by applicable law or agreed to in writing, software
317 * distributed under the License is distributed on an "AS IS" BASIS,
318 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
319 * See the License for the specific language governing permissions and
320 * limitations under the License.
321 */function _(e){return new Promise(t=>{setTimeout(t,e)})}/**
322 * @license
323 * Copyright 2019 Google LLC
324 *
325 * Licensed under the Apache License, Version 2.0 (the "License");
326 * you may not use this file except in compliance with the License.
327 * You may obtain a copy of the License at
328 *
329 *   http://www.apache.org/licenses/LICENSE-2.0
330 *
331 * Unless required by applicable law or agreed to in writing, software
332 * distributed under the License is distributed on an "AS IS" BASIS,
333 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
334 * See the License for the specific language governing permissions and
335 * limitations under the License.
336 */let w=/^[cdef][\w-]{21}$/;/**
337 * @license
338 * Copyright 2019 Google LLC
339 *
340 * Licensed under the Apache License, Version 2.0 (the "License");
341 * you may not use this file except in compliance with the License.
342 * You may obtain a copy of the License at
343 *
344 *   http://www.apache.org/licenses/LICENSE-2.0
345 *
346 * Unless required by applicable law or agreed to in writing, software
347 * distributed under the License is distributed on an "AS IS" BASIS,
348 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
349 * See the License for the specific language governing permissions and
350 * limitations under the License.
351 */function k(e){return`${e.appName}!${e.appId}`}/**
352 * @license
353 * Copyright 2019 Google LLC
354 *
355 * Licensed under the Apache License, Version 2.0 (the "License");
356 * you may not use this file except in compliance with the License.
357 * You may obtain a copy of the License at
358 *
359 *   http://www.apache.org/licenses/LICENSE-2.0
360 *
361 * Unless required by applicable law or agreed to in writing, software
362 * distributed under the License is distributed on an "AS IS" BASIS,
363 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
364 * See the License for the specific language governing permissions and
365 * limitations under the License.
366 */let P=new Map;function b(e,t){let r=k(e);E(r,t),function(e,t){let r=(!R&&"BroadcastChannel"in self&&((R=new BroadcastChannel("[Firebase] FID Change")).onmessage=e=>{E(e.data.key,e.data.fid)}),R);r&&r.postMessage({key:e,fid:t}),0===P.size&&R&&(R.close(),R=null)}(r,t)}function E(e,t){let r=P.get(e);if(r)for(let e of r)e(t)}let R=null,S="firebase-installations-store",I=null;function T(){return I||(I=(0,s.X3)("firebase-installations-database",1,{upgrade:(e,t)=>{0===t&&e.createObjectStore(S)}})),I}async function C(e,t){let r=k(e),n=(await T()).transaction(S,"readwrite"),i=n.objectStore(S),a=await i.get(r);return await i.put(t,r),await n.done,a&&a.fid===t.fid||b(e,t.fid),t}async function H(e){let t=k(e),r=(await T()).transaction(S,"readwrite");await r.objectStore(S).delete(t),await r.done}async function W(e,t){let r=k(e),n=(await T()).transaction(S,"readwrite"),i=n.objectStore(S),a=await i.get(r),s=t(a);return void 0===s?await i.delete(r):await i.put(s,r),await n.done,s&&(!a||a.fid!==s.fid)&&b(e,s.fid),s}/**
367 * @license
368 * Copyright 2019 Google LLC
369 *
370 * Licensed under the Apache License, Version 2.0 (the "License");
371 * you may not use this file except in compliance with the License.
372 * You may obtain a copy of the License at
373 *
374 *   http://www.apache.org/licenses/LICENSE-2.0
375 *
376 * Unless required by applicable law or agreed to in writing, software
377 * distributed under the License is distributed on an "AS IS" BASIS,
378 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
379 * See the License for the specific language governing permissions and
380 * limitations under the License.
381 */async function A(e){let t;let r=await W(e.appConfig,r=>{let n=function(e,t){if(0===t.registrationStatus){if(!navigator.onLine)return{installationEntry:t,registrationPromise:Promise.reject(h.create("app-offline"))};let r={fid:t.fid,registrationStatus:1,registrationTime:Date.now()},n=D(e,r);return{installationEntry:r,registrationPromise:n}}return 1===t.registrationStatus?{installationEntry:t,registrationPromise:U(e)}:{installationEntry:t}}(e,O(r||{fid:function(){try{let e=new Uint8Array(17);(self.crypto||self.msCrypto).getRandomValues(e),e[0]=112+e[0]%16;let t=btoa(String.fromCharCode(...e)).replace(/\+/g,"-").replace(/\//g,"_").substr(0,22);return w.test(t)?t:""}catch(e){return""}}(),registrationStatus:0}));return t=n.registrationPromise,n.installationEntry});
381return""===r.fid?{installationEntry:await t}:{installationEntry:r,registrationPromise:t}}async function D(e,t){try{let r=await v(e,t);return C(e.appConfig,r)}catch(r){throw g(r)&&409===r.customData.serverCode?await H(e.appConfig):await C(e.appConfig,{fid:t.fid,registrationStatus:0}),r}}async function U(e){let t=await L(e.appConfig);for(;1===t.registrationStatus;)await _(100),t=await L(e.appConfig);if(0===t.registrationStatus){let{installationEntry:t,registrationPromise:r}=await A(e);return r||t}return t}function L(e){return W(e,e=>{if(!e)throw h.create("installation-not-found");return O(e)})}function O(e){return 1===e.registrationStatus&&e.registrationTime+1e4<Date.now()?{fid:e.fid,registrationStatus:0}:e}/**
382 * @license
383 * Copyright 2019 Google LLC
384 *
385 * Licensed under the Apache License, Version 2.0 (the "License");
386 * you may not use this file except in compliance with the License.
387 * You may obtain a copy of the License at
388 *
389 *   http://www.apache.org/licenses/LICENSE-2.0
390 *
391 * Unless required by applicable law or agreed to in writing, software
392 * distributed under the License is distributed on an "AS IS" BASIS,
393 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
394 * See the License for the specific language governing permissions and
395 * limitations under the License.
396 */async function N({appConfig:e,heartbeatServiceProvider:t},r){let n=function(e,{fid:t}){return`${d(e)}/${t}/authTokens:generate`}(e,r),i=function(e,{refreshToken:t}){let r=y(e);return r.append("Authorization",`${l} ${t}`),r}(e,r),a=t.getImmediate({optional:!0});if(a){let e=await a.getHeartbeatsHeader();e&&i.append("x-firebase-client",e)}let s={method:"POST",headers:i,body:JSON.stringify({installation:{sdkVersion:u,appId:e.appId}})},o=await f(()=>fetch(n,s));if(o.ok)return m(await o.json());throw await p("Generate Auth Token",o)}/**
397 * @license
398 * Copyright 2019 Google LLC
399 *
400 * Licensed under the Apache License, Version 2.0 (the "License");
401 * you may not use this file except in compliance with the License.
402 * You may obtain a copy of the License at
403 *
404 *   http://www.apache.org/licenses/LICENSE-2.0
405 *
406 * Unless required by applicable law or agreed to in writing, software
407 * distributed under the License is distributed on an "AS IS" BASIS,
408 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
409 * See the License for the specific language governing permissions and
410 * limitations under the License.
411 */async function K(e,t=!1){let r;let n=await W(e.appConfig,n=>{var i;if(!B(n))throw h.create("not-registered");let a=n.authToken;if(!t&&2===(i=a).requestStatus&&!function(e){let t=Date.now();return t<e.creationTime||e.creationTime+e.expiresIn<t+36e5}(i))return n;if(1===a.requestStatus)return r=x(e,t),n;{if(!navigator.onLine)throw h.create("app-offline");let t=function(e){let t={requestStatus:1,requestTime:Date.now()};return Object.assign(Object.assign({},e),{authToken:t})}(n);return r=F(e,t),t}});return r?await r:n.authToken}async function x(e,t){let r=await M(e.appConfig);for(;1===r.authToken.requestStatus;)await _(100),r=await M(e.appConfig);let n=r.authToken;return 0===n.requestStatus?K(e,t):n}function M(e){return W(e,e=>{var t;if(!B(e))throw h.create("not-registered");return 1===(t=e.authToken).requestStatus&&t.requestTime+1e4<Date.now()?Object.assign(Object.assign({},e),{authToken:{requestStatus:0}}):e})}async function F(e,t){try{let r=await N(e,t),n=Object.assign(Object.assign({},t),{authToken:r});return await C(e.appConfig,n),r}catch(r){if(g(r)&&(401===r.customData.serverCode||404===r.customData.serverCode))await H(e.appConfig);else{let r=Object.assign(Object.assign({},t),{authToken:{requestStatus:0}});await C(e.appConfig,r)}throw r}}function B(e){return void 0!==e&&2===e.registrationStatus}/**
412 * @license
413 * Copyright 2019 Google LLC
414 *
415 * Licensed under the Apache License, Version 2.0 (the "License");
416 * you may not use this file except in compliance with the License.
417 * You may obtain a copy of the License at
418 *
419 *   http://www.apache.org/licenses/LICENSE-2.0
420 *
421 * Unless required by applicable law or agreed to in writing, softw
421are
422 * distributed under the License is distributed on an "AS IS" BASIS,
423 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
424 * See the License for the specific language governing permissions and
425 * limitations under the License.
426 */async function V(e){let{installationEntry:t,registrationPromise:r}=await A(e);return r?r.catch(console.error):K(e).catch(console.error),t.fid}/**
427 * @license
428 * Copyright 2019 Google LLC
429 *
430 * Licensed under the Apache License, Version 2.0 (the "License");
431 * you may not use this file except in compliance with the License.
432 * You may obtain a copy of the License at
433 *
434 *   http://www.apache.org/licenses/LICENSE-2.0
435 *
436 * Unless required by applicable law or agreed to in writing, software
437 * distributed under the License is distributed on an "AS IS" BASIS,
438 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
439 * See the License for the specific language governing permissions and
440 * limitations under the License.
441 */async function q(e,t=!1){return await j(e),(await K(e,t)).token}async function j(e){let{registrationPromise:t}=await A(e);t&&await t}function G(e){return h.create("missing-app-config-values",{valueName:e})}/**
442 * @license
443 * Copyright 2020 Google LLC
444 *
445 * Licensed under the Apache License, Version 2.0 (the "License");
446 * you may not use this file except in compliance with the License.
447 * You may obtain a copy of the License at
448 *
449 *   http://www.apache.org/licenses/LICENSE-2.0
450 *
451 * Unless required by applicable law or agreed to in writing, software
452 * distributed under the License is distributed on an "AS IS" BASIS,
453 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
454 * See the License for the specific language governing permissions and
455 * limitations under the License.
456 */let z="installations";(0,n.Xd)(new i.wA(z,e=>{let t=e.getProvider("app").getImmediate(),r=/**
457 * @license
458 * Copyright 2019 Google LLC
459 *
460 * Licensed under the Apache License, Version 2.0 (the "License");
461 * you may not use this file except in compliance with the License.
462 * You may obtain a copy of the License at
463 *
464 *   http://www.apache.org/licenses/LICENSE-2.0
465 *
466 * Unless required by applicable law or agreed to in writing, software
467 * distributed under the License is distributed on an "AS IS" BASIS,
468 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
469 * See the License for the specific language governing permissions and
470 * limitations under the License.
471 */function(e){if(!e||!e.options)throw G("App Configuration");if(!e.name)throw G("App Name");for(let t of["projectId","apiKey","appId"])if(!e.options[t])throw G(t);return{appName:e.name,projectId:e.options.projectId,apiKey:e.options.apiKey,appId:e.options.appId}}(t),i=(0,n.qX)(t,"heartbeat");return{app:t,appConfig:r,heartbeatServiceProvider:i,_delete:()=>Promise.resolve()}},"PUBLIC")),(0,n.Xd)(new i.wA("installations-internal",e=>{let t=e.getProvider("app").getImmediate(),r=(0,n.qX)(t,z).getImmediate();return{getId:()=>V(r),getToken:e=>q(r,e)}},"PRIVATE")),(0,n.KN)(o,c),(0,n.KN)(o,c,"esm2017")},3333:function(e,t,r){"use strict";var n,i;r.d(t,{Yd:function(){return l},in:function(){return n}});/**
472 * @license
473 * Copyright 2017 Google LLC
474 *
475 * Licensed under the Apache License, Version 2.0 (the "License");
476 * you may not use this file except in compliance with the License.
477 * You may obtain a copy of the License at
478 *
479 *   http://www.apache.org/licenses/LICENSE-2.0
480 *
481 * Unless required by applicable law or agreed to in writing, software
482 * distributed under the License is distributed on an "AS IS" BASIS,
483 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
484 * See the License for the specific language governing permissions and
485 * limitations under the License.
486 */let a=[];(i=n||(n={}))[i.DEBUG=0]="DEBUG",i[i.VERBOSE=1]="VERBOSE",i[i.INFO=2]="INFO",i[i.WARN=3]="WARN",i[i.ERROR=4]="ERROR",i[i.SILENT=5]="SILENT";let s={debug:n.DEBUG,verbose:n.VERBOSE,info:n.INFO,warn:n.WARN,error:n.ERROR,silent:n.SILENT},o=n.INFO,c={[n.DEBUG]:"log",[n.VERBOSE]:"log",[n.INFO]:"info",[n.WARN]:"warn",[n.ERROR]:"error"},u=(e,t,...r)=>{if(t<e.logLevel)return;let n=new Date().toISOString(),i=c[t];if(i)console[i](`[${n}]  ${e.name}:`,...r);
486else throw Error(`Attempted to log a message with an invalid logType (value: ${t})`)};class l{constructor(e){this.name=e,this._logLevel=o,this._logHandler=u,this._userLogHandler=null,a.push(this)}get logLevel(){return this._logLevel}set logLevel(e){if(!(e in n))throw TypeError(`Invalid value "${e}" assigned to \`logLevel\``);this._logLevel=e}setLogLevel(e){this._logLevel="string"==typeof e?s[e]:e}get logHandler(){return this._logHandler}set logHandler(e){if("function"!=typeof e)throw TypeError("Value assigned to `logHandler` must be a function");this._logHandler=e}get userLogHandler(){return this._userLogHandler}set userLogHandler(e){this._userLogHandler=e}debug(...e){this._userLogHandler&&this._userLogHandler(this,n.DEBUG,...e),this._logHandler(this,n.DEBUG,...e)}log(...e){this._userLogHandler&&this._userLogHandler(this,n.VERBOSE,...e),this._logHandler(this,n.VERBOSE,...e)}info(...e){this._userLogHandler&&this._userLogHandler(this,n.INFO,...e),this._logHandler(this,n.INFO,...e)}warn(...e){this._userLogHandler&&this._userLogHandler(this,n.WARN,...e),this._logHandler(this,n.WARN,...e)}error(...e){this._userLogHandler&&this._userLogHandler(this,n.ERROR,...e),this._logHandler(this,n.ERROR,...e)}}},1517:function(e,t,r){"use strict";r.d(t,{hJ:function(){return eX},v0:function(){return rc},Aj:function(){return tt},w$:function(){return te},e5:function(){return e7},rh:function(){return tA},w7:function(){return tr}});var n,i=r(2238),a=r(4444),s=r(3333);function o(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,n=Object.getOwnPropertySymbols(e);i<n.length;i++)0>t.indexOf(n[i])&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(r[n[i]]=e[n[i]]);return r}"function"==typeof SuppressedError&&SuppressedError;var c=r(8463);function u(){return{"dependent-sdk-initialized-before-auth":"Another Firebase SDK was initialized and is trying to use Auth before Auth is initialized. Please be sure to call `initializeAuth` or `getAuth` before starting any other Firebase SDK."}}let l=new a.LL("auth","Firebase",u()),h=new s.Yd("@firebase/auth");function g(e,...t){h.logLevel<=s.in.ERROR&&h.error(`Auth (${i.Jn}): ${e}`,...t)}/**
487 * @license
488 * Copyright 2020 Google LLC
489 *
490 * Licensed under the Apache License, Version 2.0 (the "License");
491 * you may not use this file except in compliance with the License.
492 * You may obtain a copy of the License at
493 *
494 *   http://www.apache.org/licenses/LICENSE-2.0
495 *
496 * Unless required by applicable law or agreed to in writing, software
497 * distributed under the License is distributed on an "AS IS" BASIS,
498 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
499 * See the License for the specific language governing permissions and
500 * limitations under the License.
501 */function d(e,...t){throw f(e,...t)}function m(e,...t){return f(e,...t)}function p(e,t,r){let n=Object.assign(Object.assign({},u()),{[t]:r});return new a.LL("auth","Firebase",n).create(t,{appName:e.name})}function y(e){return p(e,"operation-not-supported-in-this-environment","Operations that alter the current user are not supported in conjunction with FirebaseServerApp")}function f(e,...t){if("string"!=typeof e){let r=t[0],n=[...t.slice(1)];return n[0]&&(n[0].appName=e.name),e._errorFactory.create(r,...n)}return l.create(e,...t)}function v(e,t,...r){if(!e)throw f(t,...r)}function _(e){let t="INTERNAL ASSERTION FAILED: "+e;throw g(t),Error(t)}/**
502 * @license
503 * Copyright 2020 Google LLC
504 *
505 * Licensed under the Apache License, Version 2.0 (the "License");
506 * you may not use this file except in compliance with the License.
507 * You may obtain a copy of the License at
508 *
509 *   http://www.apache.org/licenses/LICENSE-2.0
510 *
511 * Unless required by applicable law or agreed to in writing, software
512 * distributed under the License is distributed on an "AS IS" BASIS,
513 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
514 * See the License for the specific language governing permissions and
515 * limitations under the License.
516 */function w(){var e;return"undefined"!=typeof self&&(null===(e=self.location)||void 0===e?void 0:e.href)||""}function k(){var e;return"undefined"!=typeof self&&(null===(e=self.location)||void 0===e?void 0:e.protocol)||null}/**
517 * @license
518 * Copyright 2020 Google LLC
519 *
520 * Licensed under the Apache License, Version 2.0 (the "License");
521 * you may not use this file except in compliance with the License.
522 * You may obtain a copy of the License at
523 *
524 *   http://www.apache.org/licenses/LICENSE-2.0
525 *
526 * Unless required by applicable law or agreed to in writing, software
527 * distributed under the License is distributed on an "AS IS" BASIS,
528 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
529 * See the License for the specific language governing permissions and
530 * limitations under the License.
531 */class P{constructor(e,t){var r;this.shortDelay=e,this.longDelay=t,r="Short delay should be less than long delay!",t>e||_(r),this.isMobile=(0,a.uI)()||(0,a.b$)()}get(){return!("undefined"!=typeof navigator&&navigator&&"onLine"in navigator&&"boolean"==typeof navigator.onLine&&("http:"===k()||"https:"===k()||(0,a.ru)()||"connection"in navigator))||navigator.onLine?this.isMobile?this.longDelay:this.shortDelay:Math.min(5e3,this.shortDelay)}}/**
532 * @license
533 * Copyright 2020 Google LLC
534 *
535 * Licensed under the Apache License, Version 2.0 (the "License");
536 * you may not use this file except in compliance with the License.
537 * You may obtain a copy of the License at
538 *
539 *   http://www.apache.org/licenses/LICENSE-2.0
540 *
541 * Unless required by applicable law or agreed to in writing, software
542 * distributed under the License is distributed on an "AS IS" BASIS,
543 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
544 * See the License for the specific language governing permissions and
545 * limitations under the License.
546 */function b(e,t){var r,n;r=e.emulator,n="Emulator should always be set here",r||_(n);let{url:i}=e.emulator;return t?`${i}${t.startsWith("/")?t.slice(1):t}`:i}/**
547 * @license
548 * Copyright 2020 Google LLC
549 *
550 * Licensed under the Apache License, Version 2.0 (the "License");
551 * you may not use this file except in compliance with the License.
552 * You may obtain a copy of the License at
553 *
554 *   http://www.apache.org/licenses/LICENSE-2.0
555 *
556 * Unless required by applicable law or agreed to in writing, software
557 * distributed under the License is distributed on an "AS IS" BASIS,
558 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
559 * See the License for the specific language governing permissions and
560 * limitations under the License.
561 */class E{static initialize(e,t,r){this.fetchImpl=e,t&&(this.headersImpl=t),r&&(this.responseImpl=r)}static fetch(){return this.fetchImpl?this.fetchImpl:"undefined"!=typeof self&&"fetch"in self?self.fetch:"undefined"!=typeof globalThis&&globalThis.fetch?globalThis.fetch:"undefined"!=typeof fetch?fetch:void _("Could not find fetch implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill")}static headers(){return this.headersImpl?this.headersImpl:"undefined"!=typeof self&&"Headers"in self?self.Headers:"undefined"!=typeof globalThis&&globalThis.Headers?globalThis.Headers:"undefined"!=typeof Headers?Headers:void _("Could not find Headers implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill")}static response(){return this.responseImpl?this.responseImpl:"undefined"!=typeof self&&"Response"in self?self.Response:"undefined"!=typeof globalThis&&globalThis.Response?globalThis.Response:"undefined"!=typeof Response?Response:void _("Could not find Response implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill")}}/**
562 * @license
563 * Copyright 2020 Google LLC
564 *
565 * Licensed under the Apache License, Version 2.0 (the "License");
566 * you may not use this file except in compliance with the License.
567 * You may obtain a copy of the License at
568 *
569 *   http://www.apache.org/licenses/LICENSE-2.0
570 *
571 * Unless required by applicable law or agreed to in writing, software
572 * distributed under the License is distributed on an "AS IS" BASIS,
573 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
574 * See the License for the specific language governing permissions and
575 * limitations under the License.
576 */let R={CREDENTIAL_MISMATCH:"custom-token-mismatch",MISSING_CUSTOM_TOKEN:"internal-error",INVA
576LID_IDENTIFIER:"invalid-email",MISSING_CONTINUE_URI:"internal-error",INVALID_PASSWORD:"wrong-password",MISSING_PASSWORD:"missing-password",INVALID_LOGIN_CREDENTIALS:"invalid-credential",EMAIL_EXISTS:"email-already-in-use",PASSWORD_LOGIN_DISABLED:"operation-not-allowed",INVALID_IDP_RESPONSE:"invalid-credential",INVALID_PENDING_TOKEN:"invalid-credential",FEDERATED_USER_ID_ALREADY_LINKED:"credential-already-in-use",MISSING_REQ_TYPE:"internal-error",EMAIL_NOT_FOUND:"user-not-found",RESET_PASSWORD_EXCEED_LIMIT:"too-many-requests",EXPIRED_OOB_CODE:"expired-action-code",INVALID_OOB_CODE:"invalid-action-code",MISSING_OOB_CODE:"internal-error",CREDENTIAL_TOO_OLD_LOGIN_AGAIN:"requires-recent-login",INVALID_ID_TOKEN:"invalid-user-token",TOKEN_EXPIRED:"user-token-expired",USER_NOT_FOUND:"user-token-expired",TOO_MANY_ATTEMPTS_TRY_LATER:"too-many-requests",PASSWORD_DOES_NOT_MEET_REQUIREMENTS:"password-does-not-meet-requirements",INVALID_CODE:"invalid-verification-code",INVALID_SESSION_INFO:"invalid-verification-id",INVALID_TEMPORARY_PROOF:"invalid-credential",MISSING_SESSION_INFO:"missing-verification-id",SESSION_EXPIRED:"code-expired",MISSING_ANDROID_PACKAGE_NAME:"missing-android-pkg-name",UNAUTHORIZED_DOMAIN:"unauthorized-continue-uri",INVALID_OAUTH_CLIENT_ID:"invalid-oauth-client-id",ADMIN_ONLY_OPERATION:"admin-restricted-operation",INVALID_MFA_PENDING_CREDENTIAL:"invalid-multi-factor-session",MFA_ENROLLMENT_NOT_FOUND:"multi-factor-info-not-found",MISSING_MFA_ENROLLMENT_ID:"missing-multi-factor-info",MISSING_MFA_PENDING_CREDENTIAL:"missing-multi-factor-session",SECOND_FACTOR_EXISTS:"second-factor-already-in-use",SECOND_FACTOR_LIMIT_EXCEEDED:"maximum-second-factor-count-exceeded",BLOCKING_FUNCTION_ERROR_RESPONSE:"internal-error",RECAPTCHA_NOT_ENABLED:"recaptcha-not-enabled",MISSING_RECAPTCHA_TOKEN:"missing-recaptcha-token",INVALID_RECAPTCHA_TOKEN:"invalid-recaptcha-token",INVALID_RECAPTCHA_ACTION:"invalid-recaptcha-action",MISSING_CLIENT_TYPE:"missing-client-type",MISSING_RECAPTCHA_VERSION:"missing-recaptcha-version",INVALID_RECAPTCHA_VERSION:"invalid-recaptcha-version",INVALID_REQ_TYPE:"invalid-req-type"},S=new P(3e4,6e4);function I(e,t){return e.tenantId&&!t.tenantId?Object.assign(Object.assign({},t),{tenantId:e.tenantId}):t}async function T(e,t,r,n,i={}){return C(e,i,async()=>{let i={},s={};n&&("GET"===t?s=n:i={body:JSON.stringify(n)});let o=(0,a.xO)(Object.assign({key:e.config.apiKey},s)).slice(1),c=await e._getAdditionalHeaders();c["Content-Type"]="application/json",e.languageCode&&(c["X-Firebase-Locale"]=e.languageCode);let u=Object.assign({method:t,headers:c},i);return(0,a.L_)()||(u.referrerPolicy="no-referrer"),E.fetch()(W(e,e.config.apiHost,r,o),u)})}async function C(e,t,r){e._canInitEmulator=!1;let n=Object.assign(Object.assign({},R),t);try{let t=new A(e),i=await Promise.race([r(),t.promise]);t.clearNetworkTimeout();let a=await i.json();if("needConfirmation"in a)throw D(e,"account-exists-with-different-credential",a);if(i.ok&&!("errorMessage"in a))return a;{let[t,r]=(i.ok?a.errorMessage:a.error.message).split(" : ");if("FEDERATED_USER_ID_ALREADY_LINKED"===t)throw D(e,"credential-already-in-use",a);if("EMAIL_EXISTS"===t)throw D(e,"email-already-in-use",a);if("USER_DISABLED"===t)throw D(e,"user-disabled",a);let s=n[t]||t.toLowerCase().replace(/[_\s]+/g,"-");if(r)throw p(e,s,r);d(e,s)}}catch(t){if(t instanceof a.ZR)throw t;d(e,"network-request-failed",{message:String(t)})}}async function H(e,t,r,n,i={}){let a=await T(e,t,r,n,i);return"mfaPendingCredential"in a&&d(e,"multi-factor-auth-required",{_serverResponse:a}),a}function W(e,t,r,n){let i=`${t}${r}?${n}`;return e.config.emulator?b(e.config,i):`${e.config.apiScheme}://${i}`}class A{constructor(e){this.auth=e,this.timer=null,this.promise=new Promise((e,t)=>{this.timer=setTimeout(()=>t(m(this.auth,"network-request-failed")),S.get())})}clearNetworkTimeout(){clearTimeout(this.timer)}}function D(e,t,r){let n={appName:e.name};r.email&&(n.email=r.email),r.phoneNumber&&(n.phoneNumber=r.phoneNumber);let i=m(e,t,n);return i.customData._tokenResponse=r,i}function U(e){return void 0!==e&&void 0!==e.enterprise}class L{constructor(e){if(this.siteKey="",this.recaptchaEnforcementState=[],void 0===e.recaptchaKey)throw Error("recaptchaKey undefined");this.siteKey=e.recaptchaKey.split("/")[3],this.recaptchaEnforcementState=e.recaptchaEnforcementState}getProviderEnforcementState(e){if(!this.recaptchaEnforcementState||0===this.recaptchaEnforcementState.length)return null;for(let t of this.recaptchaEnforcementState)if(t.provider&&t.provider===e)return function(e){switch(e){case"ENFORCE":return"ENFORCE";case"AUDIT":return"AUDIT";case"OFF":return"OFF";default:return"ENFORCEMENT_STATE_UNSPECIFIED"}}(t.enforcementState);return null}isProviderEnabled(e){return"ENFORCE"===this.getProviderEnforcementState(e)||"AUDIT"===this.getProviderEnforcementState(e)}}async function O(e,t){return T(e,"GET","/v2/recaptchaConfig",I(e,t))}/**
577 * @license
578 * Copyright 2020 Google LLC
579 *
580 * Licensed under the Apache License, Version 2.0 (the "License");
581 * you may not use this file except in compliance with the License.
582 * You may obtain a copy of the License at
583 *
584 *   http://www.apache.org/licenses/LICENSE-2.0
585 *
586 * Unless required by applicable law or agreed to in writing, software
587 * distributed under the License is distributed on an "AS IS" BASIS,
588 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
589 * See the License for the specific language governing permissions and
590 * limitations under the License.
591 */async function N(e,t){return T(e,"POST","/v1/accounts:delete",t)}async function K(e,t){return T(e,"POST","/v1/accounts:lookup",t)}/**
592 * @license
593 * Copyright 2020 Google LLC
594 *
595 * Licensed under the Apache License, Version 2.0 (the "License");
596 * you may not use this file except in compliance with the License.
597 * You may obtain a copy of the License at
598 *
599 *   http://www.apache.org/licenses/LICENSE-2.0
600 *
601 * Unless required by applicable law or agreed to in writing, software
602 * distributed under the License is distributed on an "AS IS" BASIS,
603 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
604 * See the License for the specific language governing permissions and
605 * limitations under the License.
606 */function x(e){if(e)try{let t=new Date(Number(e));if(!isNaN(t.getTime()))return t.toUTCString()}catch(e){}}async function M(e,t=!1){let r=(0,a.m9)(e),n=await r.getIdToken(t),i=B(n);v(i&&i.exp&&i.auth_time&&i.iat,r.auth,"internal-error");let s="object"==typeof i.firebase?i.firebase:void 0,o=null==s?void 0:s.sign_in_provider;return{claims:i,token:n,authTime:x(F(i.auth_time)),issuedAtTime:x(F(i.iat)),expirationTime:x(F(i.exp)),signInProvider:o||null,signInSecondFactor:(null==s?void 0:s.sign_in_second_factor)||null}}function F(e){return 1e3*Number(e)}function B(e){let[t,r,n]=e.split(".");if(void 0===t||void 0===r||void 0===n)return g("JWT malformed, contained fewer than 3 sections"),null;try{let e=(0,a.tV)(r);if(!e)return g("Failed to decode base64 JWT payload"),null;return JSON.parse(e)}catch(e){return g("Caught error parsing JWT payload as JSON",null==e?void 0:e.toString()),null}}function V(e){let t=B(e);return v(t,"internal-error"),v(void 0!==t.exp,"internal-error"),v(void 0!==t.iat,"internal-error"),Number(t.exp)-Number(t.iat)}/**
607 * @license
608 * Copyright 2020 Google LLC
609 *
610 * Licensed under the Apache License, Version 2.0 (the "License");
611 * you may not use this file except in compliance with the License.
612 * You may obtain a copy of the License at
613 *
614 *   http://www.apache.org/licenses/LICENSE-2.0
615 *
616 * Unless required by applicable law or agreed to in writing, software
617 * distributed under the License is distributed on an "AS IS" BASIS,
618 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
619 * See the License for the specific language governing permissions and
620 * limitations under the License.
621 */async function q(e,t,r=!1){if(r)return t;try{return await t}catch(t){throw t instanceof a.ZR&&function({code:e}){return"auth/user-disabled"===e||"auth/user-token-expired"===e}(t)&&e.auth.currentUser===e&&await e.auth.signOut(),t}}/**
622 * @license
623 * Copyright 2020 Google LLC
624 *
625 * Licensed under the Apache License, Version 2.0 (the "License");
626 * you may not use this file except in compliance with the License.
627 * You may obtain a copy of the License at
628 *
629 *   http://www.apache.org/licenses/LICENSE-2.0
630 *
631 * Unless required by applicable law or agreed to in writing, software
632 * distributed under the License is distributed on an "AS IS" BASIS,
633 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
634 * See the License for the specific language governing permissions and
635 * limitations under the License.
636 */class j{constructor(e){this.user=e,this.isRunning=!1,this.timerId=null,this.errorBackoff=3e4}_start(){this.isRunning||(this.isRunning=!0,this.schedule())}_stop(){this.isRunning&&(this.isRunning=!1,null!==this.timerId&&clearTimeout(this.timerId))}getInterval(e){var t;if(!e)return this.errorBackoff=3e4,Math.max(0,(null!==(t=this.user.stsTokenManager.expirationTime)&&void 0!==t?t:0)-Date.now()-3e5);{let e=this.errorBackoff;return this.errorBackoff=Math.min(2*this.errorBackoff,96e4),e}}schedule(e=!1){if(!this.isRunning)return;let t=this.getInterval(e);this.timerId=setTimeout(async()=>{await this.iteration()},t)}async iteration(){try{await this.user.getIdToken(!0)}catch(e){(null==e?void 0:e.code)==="auth/network-request-failed"&&this.schedule(!0);return}this.schedule()}}/**
637 * @license
638 * Copyright 2020 Google LLC
639 *
640 * Licensed under the Apache License, Version 2.0 (the "License");
641 * you may not use this file except in compliance with the License.
642 * You may obtain a copy of the License at
643 *
644 *   http://www.apache.org/licenses/LICENSE-2.0
645 *
646 * Unless required by applicable law or agreed to in writing, software
647 * distributed under the License is distributed on an "AS IS" BASIS,
648 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
649 * See the License for the specific language governing permissions and
650 * limitations under the License.
651 */class G{constructor(e,t){this.createdAt=e,this.lastLoginAt=t,this._initializeTime()}_initializeTime(){this.lastSignInTime=x(this.lastLoginAt),this.creationTime=x(this.createdAt)}_copy(e){this.createdAt=e.createdAt,this.lastLoginAt=e.lastLoginAt,this._initializeTime()}toJSON(){return{createdAt:this.createdAt,lastLoginAt:this.lastLoginAt}}}/**
652 * @license
653 * Copyright 2019 Google LLC
654 *
655 * Licensed under the Apache License, Version 2.0 (the "License");
656 * you may not use this file except in compliance with the License.
657 * You may obtain a copy of the License at
658 *
659 *   http://www.apache.org/licenses/LICENSE-2.0
660 *
661 * Unless required by applicable law or agreed to in writing, software
662 * distributed under the License is distributed on an "AS IS" BASIS,
663 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
664 * See the License for the specific language governing permissions and
665 * limitations under the License.
666 */async function z(e){var t;let r=e.auth,n=await e.getIdToken(),i=await q(e,K(r,{idToken:n}));v(null==i?void 0:i.users.length,r,"internal-error");let a=i.users[0];e._notifyReloadListener(a);let s=(null===(t=a.providerUserInfo)||void 0===t?void 0:t.length)?J(a.providerUserInfo):[],o=[...e.providerData.filter(e=>!s.some(t=>t.providerId===e.providerId)),...s],c=e.isAnonymous,u=!(e.email&&a.passwordHash)&&!(null==o?void 0:o.length);Object.assign(e,{uid:a.localId,displayName:a.displayName||null,photoURL:a.photoUrl||null,email:a.email||null,emailVerified:a.emailVerified||!1,phoneNumber:a.phoneNumber||null,tenantId:a.tenantId||null,providerData:o,metadata:new G(a.createdAt,a.lastLoginAt),isAnonymous:!!c&&u})}async function $(e){let t=(0,a.m9)(e);await z(t),await t.auth._persistUserIfCurrent(t),t.auth._notifyListenersIfCurrent(t)}function J(e){return e.map(e=>{var{providerId:t}=e,r=o(e,["providerId"]);return{providerId:t,uid:r.rawId||"",displayName:r.displayName||null,email:r.email||null,phoneNumber:r.phoneNumber||null,photoURL:r.photoUrl||null}})}/**
667 * @license
668 * Copyright 2020 Google LLC
669 *
670 * Licensed under the Apache License, Version 2.0 (the "License");
671 * you may not use this file except in compliance with the License.
672 * You may obtain a copy of the License at
673 *
674 *   http://www.apache.org/licenses/LICENSE-2.0
675 *
676 * Unless required by applicable law or agreed to in writing, software
677 * distributed under the License is distributed on an "AS IS" BASIS,
678 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
679 * See the License for the specific language governing permissions and
680 * limitations under the License.
681 */async function Q(e,t){let r=await C(e,{},async()=>{let r=(0,a.xO)({grant_type:"refresh_token",refresh_token:t}).slice(1),{tokenApiHost:n,apiKey:i}=e.config,s=W(e,n,"/v1/token",`key=${i}`),o=await e._getAdditionalHeaders();return o["Content-Type"]="application/x-www-form-urlencoded",E.fetch()(s,{method:"POST",headers:o,body:r})});return{accessToken:r.access_token,expiresIn:r.expires_in,refreshToken:r.refresh_token}}async function X(e,t){return T(e,"POST","/v2/accounts:revokeToken",I(e,t))}/**
682 * @license
683 * Copyright 2020 Google LLC
684 *
685 * Licensed under the Apache License, Version 2.0 (the "License");
686 * you may not use this file except in compliance with the License.
687 * You may obtain a copy of the License at
688 *
689 *   http://www.apache.org/licenses/LICENSE-2.0
690 *
691 * Unless required by applicable law or agreed to in writing, software
692 * distributed under the License is distributed on an "AS IS" BASIS,
693 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
694 * See the License for the specific language governing permissions and
695 * limitations under the License.
696 */class Y{constructor(){this.refreshToken=null,this.accessToken=null,this.expirationTime=null}get isExpired(){return!this.expirationTime||Date.now()>this.expirationTime-3e4}updateFromServerResponse(e){v(e.idToken,"internal-error"),v(void 0!==e.idToken,"internal-error"),v(void 0!==e.refreshToken,"internal-error");
696let t="expiresIn"in e&&void 0!==e.expiresIn?Number(e.expiresIn):V(e.idToken);this.updateTokensAndExpiration(e.idToken,e.refreshToken,t)}updateFromIdToken(e){v(0!==e.length,"internal-error");let t=V(e);this.updateTokensAndExpiration(e,null,t)}async getToken(e,t=!1){return t||!this.accessToken||this.isExpired?(v(this.refreshToken,e,"user-token-expired"),this.refreshToken)?(await this.refresh(e,this.refreshToken),this.accessToken):null:this.accessToken}clearRefreshToken(){this.refreshToken=null}async refresh(e,t){let{accessToken:r,refreshToken:n,expiresIn:i}=await Q(e,t);this.updateTokensAndExpiration(r,n,Number(i))}updateTokensAndExpiration(e,t,r){this.refreshToken=t||null,this.accessToken=e||null,this.expirationTime=Date.now()+1e3*r}static fromJSON(e,t){let{refreshToken:r,accessToken:n,expirationTime:i}=t,a=new Y;return r&&(v("string"==typeof r,"internal-error",{appName:e}),a.refreshToken=r),n&&(v("string"==typeof n,"internal-error",{appName:e}),a.accessToken=n),i&&(v("number"==typeof i,"internal-error",{appName:e}),a.expirationTime=i),a}toJSON(){return{refreshToken:this.refreshToken,accessToken:this.accessToken,expirationTime:this.expirationTime}}_assign(e){this.accessToken=e.accessToken,this.refreshToken=e.refreshToken,this.expirationTime=e.expirationTime}_clone(){return Object.assign(new Y,this.toJSON())}_performRefresh(){return _("not implemented")}}/**
697 * @license
698 * Copyright 2020 Google LLC
699 *
700 * Licensed under the Apache License, Version 2.0 (the "License");
701 * you may not use this file except in compliance with the License.
702 * You may obtain a copy of the License at
703 *
704 *   http://www.apache.org/licenses/LICENSE-2.0
705 *
706 * Unless required by applicable law or agreed to in writing, software
707 * distributed under the License is distributed on an "AS IS" BASIS,
708 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
709 * See the License for the specific language governing permissions and
710 * limitations under the License.
711 */function Z(e,t){v("string"==typeof e||void 0===e,"internal-error",{appName:t})}class ee{constructor(e){var{uid:t,auth:r,stsTokenManager:n}=e,i=o(e,["uid","auth","stsTokenManager"]);this.providerId="firebase",this.proactiveRefresh=new j(this),this.reloadUserInfo=null,this.reloadListener=null,this.uid=t,this.auth=r,this.stsTokenManager=n,this.accessToken=n.accessToken,this.displayName=i.displayName||null,this.email=i.email||null,this.emailVerified=i.emailVerified||!1,this.phoneNumber=i.phoneNumber||null,this.photoURL=i.photoURL||null,this.isAnonymous=i.isAnonymous||!1,this.tenantId=i.tenantId||null,this.providerData=i.providerData?[...i.providerData]:[],this.metadata=new G(i.createdAt||void 0,i.lastLoginAt||void 0)}async getIdToken(e){let t=await q(this,this.stsTokenManager.getToken(this.auth,e));return v(t,this.auth,"internal-error"),this.accessToken!==t&&(this.accessToken=t,await this.auth._persistUserIfCurrent(this),this.auth._notifyListenersIfCurrent(this)),t}getIdTokenResult(e){return M(this,e)}reload(){return $(this)}_assign(e){this!==e&&(v(this.uid===e.uid,this.auth,"internal-error"),this.displayName=e.displayName,this.photoURL=e.photoURL,this.email=e.email,this.emailVerified=e.emailVerified,this.phoneNumber=e.phoneNumber,this.isAnonymous=e.isAnonymous,this.tenantId=e.tenantId,this.providerData=e.providerData.map(e=>Object.assign({},e)),this.metadata._copy(e.metadata),this.stsTokenManager._assign(e.stsTokenManager))}_clone(e){let t=new ee(Object.assign(Object.assign({},this),{auth:e,stsTokenManager:this.stsTokenManager._clone()}));return t.metadata._copy(this.metadata),t}_onReload(e){v(!this.reloadListener,this.auth,"internal-error"),this.reloadListener=e,this.reloadUserInfo&&(this._notifyReloadListener(this.reloadUserInfo),this.reloadUserInfo=null)}_notifyReloadListener(e){this.reloadListener?this.reloadListener(e):this.reloadUserInfo=e}_startProactiveRefresh(){this.proactiveRefresh._start()}_stopProactiveRefresh(){this.proactiveRefresh._stop()}async _updateTokensIfNecessary(e,t=!1){let r=!1;e.idToken&&e.idToken!==this.stsTokenManager.accessToken&&(this.stsTokenManager.updateFromServerResponse(e),r=!0),t&&await z(this),await this.auth._persistUserIfCurrent(this),r&&this.auth._notifyListenersIfCurrent(this)}async delete(){if((0,i.rh)(this.auth.app))return Promise.reject(y(this.auth));let e=await this.getIdToken();return await q(this,N(this.auth,{idToken:e})),this.stsTokenManager.clearRefreshToken(),this.auth.signOut()}toJSON(){return Object.assign(Object.assign({uid:this.uid,email:this.email||void 0,emailVerified:this.emailVerified,displayName:this.displayName||void 0,isA
711nonymous:this.isAnonymous,photoURL:this.photoURL||void 0,phoneNumber:this.phoneNumber||void 0,tenantId:this.tenantId||void 0,providerData:this.providerData.map(e=>Object.assign({},e)),stsTokenManager:this.stsTokenManager.toJSON(),_redirectEventId:this._redirectEventId},this.metadata.toJSON()),{apiKey:this.auth.config.apiKey,appName:this.auth.name})}get refreshToken(){return this.stsTokenManager.refreshToken||""}static _fromJSON(e,t){var r,n,i,a,s,o,c,u;let l=null!==(r=t.displayName)&&void 0!==r?r:void 0,h=null!==(n=t.email)&&void 0!==n?n:void 0,g=null!==(i=t.phoneNumber)&&void 0!==i?i:void 0,d=null!==(a=t.photoURL)&&void 0!==a?a:void 0,m=null!==(s=t.tenantId)&&void 0!==s?s:void 0,p=null!==(o=t._redirectEventId)&&void 0!==o?o:void 0,y=null!==(c=t.createdAt)&&void 0!==c?c:void 0,f=null!==(u=t.lastLoginAt)&&void 0!==u?u:void 0,{uid:_,emailVerified:w,isAnonymous:k,providerData:P,stsTokenManager:b}=t;v(_&&b,e,"internal-error");let E=Y.fromJSON(this.name,b);v("string"==typeof _,e,"internal-error"),Z(l,e.name),Z(h,e.name),v("boolean"==typeof w,e,"internal-error"),v("boolean"==typeof k,e,"internal-error"),Z(g,e.name),Z(d,e.name),Z(m,e.name),Z(p,e.name),Z(y,e.name),Z(f,e.name);let R=new ee({uid:_,auth:e,email:h,emailVerified:w,displayName:l,isAnonymous:k,photoURL:d,phoneNumber:g,tenantId:m,stsTokenManager:E,createdAt:y,lastLoginAt:f});return P&&Array.isArray(P)&&(R.providerData=P.map(e=>Object.assign({},e))),p&&(R._redirectEventId=p),R}static async _fromIdTokenResponse(e,t,r=!1){let n=new Y;n.updateFromServerResponse(t);let i=new ee({uid:t.localId,auth:e,stsTokenManager:n,isAnonymous:r});return await z(i),i}static async _fromGetAccountInfoResponse(e,t,r){let n=t.users[0];v(void 0!==n.localId,"internal-error");let i=void 0!==n.providerUserInfo?J(n.providerUserInfo):[],a=!(n.email&&n.passwordHash)&&!(null==i?void 0:i.length),s=new Y;s.updateFromIdToken(r);let o=new ee({uid:n.localId,auth:e,stsTokenManager:s,isAnonymous:a});return Object.assign(o,{uid:n.localId,displayName:n.displayName||null,photoURL:n.photoUrl||null,email:n.email||null,emailVerified:n.emailVerified||!1,phoneNumber:n.phoneNumber||null,tenantId:n.tenantId||null,providerData:i,metadata:new G(n.createdAt,n.lastLoginAt),isAnonymous:!(n.email&&n.passwordHash)&&!(null==i?void 0:i.length)}),o}}/**
712 * @license
713 * Copyright 2020 Google LLC
714 *
715 * Licensed under the Apache License, Version 2.0 (the "License");
716 * you may not use this file except in compliance with the License.
717 * You may obtain a copy of the License at
718 *
719 *   http://www.apache.org/licenses/LICENSE-2.0
720 *
721 * Unless required by applicable law or agreed to in writing, software
722 * distributed under the License is distributed on an "AS IS" BASIS,
723 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
724 * See the License for the specific language governing permissions and
725 * limitations under the License.
726 */let et=new Map;function er(e){var t,r;t="Expected a class definition",e instanceof Function||_(t);let n=et.get(e);return n?(r="Instance stored in cache mismatched with class",n instanceof e||_(r)):(n=new e,et.set(e,n)),n}/**
727 * @license
728 * Copyright 2019 Google LLC
729 *
730 * Licensed under the Apache License, Version 2.0 (the "License");
731 * you may not use this file except in compliance with the License.
732 * You may obtain a copy of the License at
733 *
734 *   http://www.apache.org/licenses/LICENSE-2.0
735 *
736 * Unless required by applicable law or agreed to in writing, software
737 * distributed under the License is distributed on an "AS IS" BASIS,
738 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
739 * See the License for the specific language governing permissions and
740 * limitations under the License.
741 */class en{constructor(){this.type="NONE",this.storage={}}async _isAvailable(){return!0}async _set(e,t){this.storage[e]=t}async _get(e){let t=this.storage[e];return void 0===t?null:t}async _remove(e){delete this.storage[e]}_addListener(e,t){}_removeListener(e,t){}}/**
742 * @license
743 * Copyright 2019 Google LLC
744 *
745 * Licensed under the Apache License, Version 2.0 (the "License");
746 * you may not use this file except in compliance with the License.
747 * You may obtain a copy of the License at
748 *
749 *   http://www.apache.org/licenses/LICENSE-2.0
750 *
751 * Unless required by applicable law or agreed to in writing, software
752 * distributed under the License is distributed on an "AS IS" BASIS,
753 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
754 * See the License for the specific language governing permissions and
755 * limitations under the License.
756 */function ei(e,t,r){return`firebase:${e}:${t}:${r}`}en.type="NONE";class ea{constructor(e,t,r){this.persistence=e,this.auth=t,this.userKey=r;let{config:n,name:i}=this.auth;this.fullUserKey=ei(this.userKey,n.apiKey,i),this.fullPersistenceKey=ei("persistence",n.apiKey,i),this.boundEventHandler=t._onStorageEvent.bind(t),this.persistence._addListener(this.fullUserKey,this.boundEventHandler)}setCurrentUser(e){return this.persistence._set(this.fullUserKey,e.toJSON())}async getCurrentUser(){let e=await this.persistence._get(this.fullUserKey);return e?ee._fromJSON(this.auth,e):null}removeCurrentUser(){return this.persistence._remove(this.fullUserKey)}savePersistenceForRedirect(){return this.persistence._set(this.fullPersistenceKey,this.persistence.type)}async setPersistence(e){if(this.persistence===e)return;let t=await this.getCurrentUser();if(await this.removeCurrentUser(),this.persistence=e,t)return this.setCurrentUser(t)}delete(){this.persistence._removeListener(this.fullUserKey,this.boundEventHandler)}static async create(e,t,r="authUser"){if(!t.length)return new ea(er(en),e,r);let n=(await Promise.all(t.map(async e=>{if(await e._isAvailable())return e}))).filter(e=>e),i=n[0]||er(en),a=ei(r,e.config.apiKey,e.name),s=null;for(let r of t)try{let t=await r._get(a);if(t){let n=ee._fromJSON(e,t);r!==i&&(s=n),i=r;break}}catch(e){}let o=n.filter(e=>e._shouldAllowMigration);return i._shouldAllowMigration&&o.length&&(i=o[0],s&&await i._set(a,s.toJSON()),await Promise.all(t.map(async e=>{if(e!==i)try{await e._remove(a)}catch(e){}}))),new ea(i,e,r)}}/**
757 * @license
758 * Copyright 2020 Google LLC
759 *
760 * Licensed under the Apache License, Version 2.0 (the "License");
761 * you may not use this file except in compliance with the License.
762 * You may obtain a copy of the License at
763 *
764 *   http://www.apache.org/licenses/LICENSE-2.0
765 *
766 * Unless required by applicable law or agreed to in writing, software
767 * distributed under the License is distributed on an "AS IS" BASIS,
768 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
769 * See the License for the specific language governing permissions and
770 * limitations under the License.
771 */function es(e){let t=e.toLowerCase();if(t.includes("opera/")||t.includes("opr/")||t.includes("opios/"))return"Opera";if(el(t))return"IEMobile";if(t.includes("msie")||t.includes("trident/"))return"IE";{if(t.includes("edge/"))return"Edge";if(eo(t))return"Firefox";if(t.includes("silk/"))return"Silk";if(eg(t))return"Blackberry";if(ed(t))return"Webos";if(ec(t))return"Safari";if((t.includes("chrome/")||eu(t))&&!t.includes("edge/"))return"Chrome";if(eh(t))return"Android";let r=e.match(/([a-zA-Z\d\.]+)\/[a-zA-Z\d\.]*$/);if((null==r?void 0:r.length)===2)return r[1]}return"Other"}function eo(e=(0,a.z$)()){return/firefox\//i.test(e)}function ec(e=(0,a.z$)()){let t=e.toLowerCase();return t.includes("safari/")&&!t.includes("chrome/")&&!t.includes("crios/")&&!t.includes("android")}function eu(e=(0,a.z$)()){return/crios\//i.test(e)}function el(e=(0,a.z$)()){return/iemobile/i.test(e)}function eh(e=(0,a.z$)()){return/android/i.test(e)}function eg(e=(0,a.z$)()){return/blackberry/i.test(e)}function ed(e=(0,a.z$)()){return/webos/i.test(e)}function em(e=(0,a.z$)()){return/iphone|ipad|ipod/i.test(e)||/macintosh/i.test(e)&&/mobile/i.test(e)}function ep(e=(0,a.z$)()){return em(e)||eh(e)||ed(e)||eg(e)||/windows phone/i.test(e)||el(e)}/**
772 * @license
773 * Copyright 2020 Google LLC
774 *
775 * Licensed under the Apache License, Version 2.0 (the "License");
776 * you may not use this file except in compliance with the License.
777 * You may obtain a copy of the License at
778 *
779 *   http://www.apache.org/licenses/LICENSE-2.0
780 *
781 * Unless required by applicable law or agreed to in writing, softw
781are
782 * distributed under the License is distributed on an "AS IS" BASIS,
783 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
784 * See the License for the specific language governing permissions and
785 * limitations under the License.
786 */function ey(e,t=[]){let r;switch(e){case"Browser":r=es((0,a.z$)());break;case"Worker":r=`${es((0,a.z$)())}-${e}`;break;default:r=e}let n=t.length?t.join(","):"FirebaseCore-web";return`${r}/JsCore/${i.Jn}/${n}`}/**
787 * @license
788 * Copyright 2022 Google LLC
789 *
790 * Licensed under the Apache License, Version 2.0 (the "License");
791 * you may not use this file except in compliance with the License.
792 * You may obtain a copy of the License at
793 *
794 *   http://www.apache.org/licenses/LICENSE-2.0
795 *
796 * Unless required by applicable law or agreed to in writing, software
797 * distributed under the License is distributed on an "AS IS" BASIS,
798 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
799 * See the License for the specific language governing permissions and
800 * limitations under the License.
801 */class ef{constructor(e){this.auth=e,this.queue=[]}pushCallback(e,t){let r=t=>new Promise((r,n)=>{try{let n=e(t);r(n)}catch(e){n(e)}});r.onAbort=t,this.queue.push(r);let n=this.queue.length-1;return()=>{this.queue[n]=()=>Promise.resolve()}}async runMiddleware(e){if(this.auth.currentUser===e)return;let t=[];try{for(let r of this.queue)await r(e),r.onAbort&&t.push(r.onAbort)}catch(e){for(let e of(t.reverse(),t))try{e()}catch(e){}throw this.auth._errorFactory.create("login-blocked",{originalMessage:null==e?void 0:e.message})}}}/**
802 * @license
803 * Copyright 2023 Google LLC
804 *
805 * Licensed under the Apache License, Version 2.0 (the "License");
806 * you may not use this file except in compliance with the License.
807 * You may obtain a copy of the License at
808 *
809 *   http://www.apache.org/licenses/LICENSE-2.0
810 *
811 * Unless required by applicable law or agreed to in writing, software
812 * distributed under the License is distributed on an "AS IS" BASIS,
813 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
814 * See the License for the specific language governing permissions and
815 * limitations under the License.
816 */async function ev(e,t={}){return T(e,"GET","/v2/passwordPolicy",I(e,t))}class e_{constructor(e){var t,r,n,i;let a=e.customStrengthOptions;this.customStrengthOptions={},this.customStrengthOptions.minPasswordLength=null!==(t=a.minPasswordLength)&&void 0!==t?t:6,a.maxPasswordLength&&(this.customStrengthOptions.maxPasswordLength=a.maxPasswordLength),void 0!==a.containsLowercaseCharacter&&(this.customStrengthOptions.containsLowercaseLetter=a.containsLowercaseCharacter),void 0!==a.containsUppercaseCharacter&&(this.customStrengthOptions.containsUppercaseLetter=a.containsUppercaseCharacter),void 0!==a.containsNumericCharacter&&(this.customStrengthOptions.containsNumericCharacter=a.containsNumericCharacter),void 0!==a.containsNonAlphanumericCharacter&&(this.customStrengthOptions.containsNonAlphanumericCharacter=a.containsNonAlphanumericCharacter),this.enforcementState=e.enforcementState,"ENFORCEMENT_STATE_UNSPECIFIED"===this.enforcementState&&(this.enforcementState="OFF"),this.allowedNonAlphanumericCharacters=null!==(n=null===(r=e.allowedNonAlphanumericCharacters)||void 0===r?void 0:r.join(""))&&void 0!==n?n:"",this.forceUpgradeOnSignin=null!==(i=e.forceUpgradeOnSignin)&&void 0!==i&&i,this.schemaVersion=e.schemaVersion}validatePassword(e){var t,r,n,i,a,s;let o={isValid:!0,passwordPolicy:this};return this.validatePasswordLengthOptions(e,o),this.validatePasswordCharacterOptions(e,o),o.isValid&&(o.isValid=null===(t=o.meetsMinPasswordLength)||void 0===t||t),o.isValid&&(o.isValid=null===(r=o.meetsMaxPasswordLength)||void 0===r||r),o.isValid&&(o.isValid=null===(n=o.containsLowercaseLetter)||void 0===n||n),o.isValid&&(o.isValid=null===(i=o.containsUppercaseLetter)||void 0===i||i),o.isValid&&(o.isValid=null===(a=o.containsNumericCharacter)||void 0===a||a),o.isValid&&(o.isValid=null===(s=o.containsNonAlphanumericCharacter)||void 0===s||s),o}validatePasswordLengthOptions(e,t){let r=this.customStrengthOptions.minPasswordLength,n=this.customStrengthOptions.maxPasswordLength;r&&(t.meetsMinPasswordLength=e.length>=r),n&&(t.meetsMaxPasswordLength=e.length<=n)}validatePasswordCharacterOptions(e,t){let r;this.updatePasswordCharacterOptionsStatuses(t,!1,!1,!1,!1);for(let n=0;n<e.length;n++)r=e.charAt(n),this.updatePasswordCharacterOptionsStatuses(t,r>="a"&&r<="z",r>="A"&&r<="Z",r>="0"&&r<="9",this.allowedNonAlphanumericCharacters.includes(r))}updatePasswordCharacterOptionsStatuses(e,t,r,n,i){this.customStrengthOptions.containsLowercaseLetter&&(e.containsLowercaseLetter||(e.containsLowercaseLetter=t)),this.customStrengthOptions.containsUppercaseLetter&&(e.containsUppercaseLetter||(e.containsUppercaseLetter=r)),this.customStrengthOptions.containsNumericCharacter&&(e.containsNumericCharacter||(e.containsNumericCharacter=n)),this.customStrengthOptions.containsNonAlphanumericCharacter&&(e.containsNonAlphanumericCharacter||(e.containsNonAlphanumericCharacter=i))}}/**
817 * @license
818 * Copyright 2020 Google LLC
819 *
820 * Licensed under the Apache License, Version 2.0 (the "License");
821 * you may not use this file except in compliance with the License.
822 * You may obtain a copy of the License at
823 *
824 *   http://www.apache.org/licenses/LICENSE-2.0
825 *
826 * Unless required by applicable law or agreed to in writing, software
827 * distributed under the License is distributed on an "AS IS" BASIS,
828 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
829 * See the License for the specific language governing permissions and
830 * limitations under the License.
831 */class ew{constructor(e,t,r,n){this.app=e,this.heartbeatServiceProvider=t,this.appCheckServiceProvider=r,this.config=n,this.currentUser=null,this.emulatorConfig=null,this.operations=Promise.resolve(),this.authStateSubscription=new eP(this),this.idTokenSubscription=new eP(this),this.beforeStateQueue=new ef(this),this.redirectUser=null,this.isProactiveRefreshEnabled=!1,this.EXPECTED_PASSWORD_POLICY_SCHEMA_VERSION=1,this._canInitEmulator=!0,this._isInitialized=!1,this._deleted=!1,this._initializationPromise=null,this._popupRedirectResolver=null,this._errorFactory=l,this._agentRecaptchaConfig=null,this._tenantRecaptchaConfigs={},this._projectPasswordPolicy=null,this._tenantPasswordPolicies={},this.lastNotifiedUid=void 0,this.languageCode=null,this.tenantId=null,this.settings={appVerificationDisabledForTesting:!1},this.frameworks=[],this.name=e.name,this.clientVersion=n.sdkClientVersion}_initializeWithPersistence(e,t){return t&&(this._popupRedirectResolver=er(t)),this._initializationPromise=this.queue(async()=>{var r,n;if(!this._deleted&&(this.persistenceManager=await ea.create(this,e),!this._deleted)){if(null===(r=this._popupRedirectResolver)||void 0===r?void 0:r._shouldInitProactively)try{await this._popupRedirectResolver._initialize(this)}catch(e){}await this.initializeCurrentUser(t),this.lastNotifiedUid=(null===(n=this.currentUser)||void 0===n?void 0:n.uid)||null,this._deleted||(this._isInitialized=!0)}}),this._initializationPromise}async _onStorageEvent(){if(this._deleted)return;let e=await this.assertedPersistence.getCurrentUser();if(this.currentUser||e){if(this.currentUser&&e&&this.currentUser.uid===e.uid){this._currentUser._assign(e),await this.currentUser.getIdToken();return}await this._updateCurrentUser(e,!0)}}async initializeCurrentUserFromIdToken(e){try{let t=await K(this,{idToken:e}),r=await ee._fromGetAccountInfoResponse(this,t,e);await this.directlySetCurrentUser(r)}catch(e){console.warn("FirebaseServerApp could not login user with provided authIdToken: ",e),await this.directlySetCurrentUser(null)}}async initializeCurrentUser(e){var t;if((0,i.rh)(this.app)){let e=this.app.settings.authIdToken;return e?new Promise(t=>{setTimeout(()=>this.initializeCurrentUserFromIdToken(e).then(t,t))}):this.directlySetCurrentUser(null)}let r=await this.assertedPersistence.getCurrentUser(),n=r,a=!1;if(e&&this.config.authDomain){await this.getOrInitRedirectPersistenceManager();let r=null===(t=this.redirectUser)||void 0===t?void 0:t._redirectEventId,i=null==n?void 0:n._redirectEventId,s=await this.tryRedirectSignIn(e);(!r||r===i)&&(null==s?void 0:s.user)&&(n=s.user,a=!0)}if(!n)return this.directlySetCurrentUser(null);if(!n._redirectEventId){if(a)try{await this.beforeStateQueue.runMiddleware(n)}catch(e){n=r,this._popupRedirectResolver._overrideRedirectResult(this,()=>Promise.reject(e))}return n?this.reloadAndSetCurrentUserOrClear(n):this.directlySetCurrentUser(null)}return(v(this._popupRedirectResolver,this,"argument-error"),await this.getOrInitRedirectPersistenceManager(),this.redirectUser&&this.redirectUser._redirectEventId===n._redirectEventId)?this.directlySetCurrentUser(n):this.reloadAndSetCurrentUserOrClear(n)}async tryRedirectSignIn(e){let t=null;try{t=await this._popupRedirectResolver._completeRedirectFn(this,e,!0)}catch(e){await this._setRedirectUser(null)}return t}async reloadAndSetCurrentUserOrClear(e){try{await z(e)}catch(e){if((null==e?void 0:e.code)!=="auth/network-request-failed")return this.directlySetCurrentUser(null)}return this.directlySetCurrentUser(e)}useDeviceLanguage(){this.languageCode=function(){if("undefined"==typeof navigator)return null;let e=navigator;return e.languages&&e.languages[0]||e.language||null}()}async _delete(){this._deleted=!0}
831async updateCurrentUser(e){if((0,i.rh)(this.app))return Promise.reject(y(this));let t=e?(0,a.m9)(e):null;return t&&v(t.auth.config.apiKey===this.config.apiKey,this,"invalid-user-token"),this._updateCurrentUser(t&&t._clone(this))}async _updateCurrentUser(e,t=!1){if(!this._deleted)return e&&v(this.tenantId===e.tenantId,this,"tenant-id-mismatch"),t||await this.beforeStateQueue.runMiddleware(e),this.queue(async()=>{await this.directlySetCurrentUser(e),this.notifyAuthListeners()})}async signOut(){return(0,i.rh)(this.app)?Promise.reject(y(this)):(await this.beforeStateQueue.runMiddleware(null),(this.redirectPersistenceManager||this._popupRedirectResolver)&&await this._setRedirectUser(null),this._updateCurrentUser(null,!0))}setPersistence(e){return(0,i.rh)(this.app)?Promise.reject(y(this)):this.queue(async()=>{await this.assertedPersistence.setPersistence(er(e))})}_getRecaptchaConfig(){return null==this.tenantId?this._agentRecaptchaConfig:this._tenantRecaptchaConfigs[this.tenantId]}async validatePassword(e){this._getPasswordPolicyInternal()||await this._updatePasswordPolicy();let t=this._getPasswordPolicyInternal();return t.schemaVersion!==this.EXPECTED_PASSWORD_POLICY_SCHEMA_VERSION?Promise.reject(this._errorFactory.create("unsupported-password-policy-schema-version",{})):t.validatePassword(e)}_getPasswordPolicyInternal(){return null===this.tenantId?this._projectPasswordPolicy:this._tenantPasswordPolicies[this.tenantId]}async _updatePasswordPolicy(){let e=new e_(await ev(this));null===this.tenantId?this._projectPasswordPolicy=e:this._tenantPasswordPolicies[this.tenantId]=e}_getPersistence(){return this.assertedPersistence.persistence.type}_updateErrorMap(e){this._errorFactory=new a.LL("auth","Firebase",e())}onAuthStateChanged(e,t,r){return this.registerStateListener(this.authStateSubscription,e,t,r)}beforeAuthStateChanged(e,t){return this.beforeStateQueue.pushCallback(e,t)}onIdTokenChanged(e,t,r){return this.registerStateListener(this.idTokenSubscription,e,t,r)}authStateReady(){return new Promise((e,t)=>{if(this.currentUser)e();else{let r=this.onAuthStateChanged(()=>{r(),e()},t)}})}async revokeAccessToken(e){if(this.currentUser){let t={providerId:"apple.com",tokenType:"ACCESS_TOKEN",token:e,idToken:await this.currentUser.getIdToken()};null!=this.tenantId&&(t.tenantId=this.tenantId),await X(this,t)}}toJSON(){var e;return{apiKey:this.config.apiKey,authDomain:this.config.authDomain,appName:this.name,currentUser:null===(e=this._currentUser)||void 0===e?void 0:e.toJSON()}}async _setRedirectUser(e,t){let r=await this.getOrInitRedirectPersistenceManager(t);return null===e?r.removeCurrentUser():r.setCurrentUser(e)}async getOrInitRedirectPersistenceManager(e){if(!this.redirectPersistenceManager){let t=e&&er(e)||this._popupRedirectResolver;v(t,this,"argument-error"),this.redirectPersistenceManager=await ea.create(this,[er(t._redirectPersistence)],"redirectUser"),this.redirectUser=await this.redirectPersistenceManager.getCurrentUser()}return this.redirectPersistenceManager}async _redirectUserForId(e){var t,r;return(this._isInitialized&&await this.queue(async()=>{}),(null===(t=this._currentUser)||void 0===t?void 0:t._redirectEventId)===e)?this._currentUser:(null===(r=this.redirectUser)||void 0===r?void 0:r._redirectEventId)===e?this.redirectUser:null}async _persistUserIfCurrent(e){if(e===this.currentUser)return this.queue(async()=>this.directlySetCurrentUser(e))}_notifyListenersIfCurrent(e){e===this.currentUser&&this.notifyAuthListeners()}_key(){return`${this.config.authDomain}:${this.config.apiKey}:${this.name}`}_startProactiveRefresh(){this.isProactiveRefreshEnabled=!0,this.currentUser&&this._currentUser._startProactiveRefresh()}_stopProactiveRefresh(){this.isProactiveRefreshEnabled=!1,this.currentUser&&this._currentUser._stopProactiveRefresh()}get _currentUser(){return this.currentUser}notifyAuthListeners(){var e,t;if(!this._isInitialized)return;this.idTokenSubscription.next(this.currentUser);let r=null!==(t=null===(e=this.currentUser)||void 0===e?void 0:e.uid)&&void 0!==t?t:null;this.lastNotifiedUid!==r&&(this.lastNotifiedUid=r,this.authStateSubscription.next(this.currentUser))}registerStateListener(e,t,r,n){if(this._deleted)return()=>{};let i="function"==typeof t?t:t.next.bind(t),a=!1,s=this._isInitialized?Promise.resolve():this._initializationPromise;if(v(s,this,"internal-error"),s.then(()=>{a||i(this.currentUser)}),"function"==typeof t){let i=e.addObserver(t,r,n);return()=>{a=!0,i()}}{let r=e.addObserver(t);return()=>{a=!0,r()}}}async directlySetCurrentUser(e){this.currentUser&&this.currentUser!==e&&this._currentUser._stopProactiveRefresh(),e&&this.isProactiveRefreshEnabled&&e._startProactiveRefresh(),this.currentUser=e,e?await this.assertedPersistence.setCurrentUser(e):await this.assertedPersistence.removeCurrentUser()}queue(e){return this.operations=this.operations.then(e,e),this.operations}get assertedPersistence(){return v(this.persistenceManager,this,"internal-error"),this.persistenceManager}_logFramework(e){!e||this.frameworks.includes(e)||(this.frameworks.push(e),this.frameworks.sort(),this.clientVersion=ey(this.config.clientPlatform,this._getFrameworks()))}_getFrameworks(){return this.frameworks}async _getAdditionalHeaders(){var e;let t={"X-Client-Version":this.clientVersion};this.app.options.appId&&(t["X-Firebase-gmpid"]=this.app.options.appId);let r=await (null===(e=this.heartbeatServiceProvider.getImmediate({optional:!0}))||void 0===e?void 0:e.getHeartbeatsHeader());r&&(t["X-Firebase-Client"]=r);let n=await this._getAppCheckToken();return n&&(t["X-Firebase-AppCheck"]=n),t}async _getAppCheckToken(){var e;let t=await (null===(e=this.appCheckServiceProvider.getImmediate({optional:!0}))||void 0===e?void 0:e.getToken());return(null==t?void 0:t.error)&&function(e,...t){h.logLevel<=s.in.WARN&&h.warn(`Auth (${i.Jn}): ${e}`,...t)}(`Error while retrieving App Check token: ${t.error}`),null==t?void 0:t.token}}function ek(e){return(0,a.m9)(e)}class eP{constructor(e){this.auth=e,this.observer=null,this.addObserver=(0,a.ne)(e=>this.observer=e)}get next(){return v(this.observer,this.auth,"internal-error"),this.observer.next.bind(this.observer)}}/**
832 * @license
833 * Copyright 2020 Google LLC
834 *
835 * Licensed under the Apache License, Version 2.0 (the "License");
836 * you may not use this file except in compliance with the License.
837 * You may obtain a copy of the License at
838 *
839 *   http://www.apache.org/licenses/LICENSE-2.0
840 *
841 * Unless required by applicable law or agreed to in writing, software
842 * distributed under the License is distributed on an "AS IS" BASIS,
843 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
844 * See the License for the specific language governing permissions and
845 * limitations under the License.
846 */let eb={async loadJS(){throw Error("Unable to load external scripts")},recaptchaV2Script:"",recaptchaEnterpriseScript:"",gapiScript:""};function eE(e){return`__${e}${Math.floor(1e6*Math.random())}`}class eR{constructor(e){this.type="recaptcha-enterprise",this.auth=ek(e)}async verify(e="verify",t=!1){async function r(e){if(!t){if(null==e.tenantId&&null!=e._agentRecaptchaConfig)return e._agentRecaptchaConfig.siteKey;if(null!=e.tenantId&&void 0!==e._tenantRecaptchaConfigs[e.tenantId])return e._tenantRecaptchaConfigs[e.tenantId].siteKey}return new Promise(async(t,r)=>{O(e,{clientType:"CLIENT_TYPE_WEB",version:"RECAPTCHA_ENTERPRISE"}).then(n=>{if(void 0===n.recaptchaKey)r(Error("recaptcha Enterprise site key undefined"));else{let r=new L(n);return null==e.tenantId?e._agentRecaptchaConfig=r:e._tenantRecaptchaConfigs[e.tenantId]=r,t(r.siteKey)}}).catch(e=>{r(e)})})}function n(t,r,n){let i=window.grecaptcha;U(i)?i.enterprise.ready(()=>{i.enterprise.execute(t,{action:e}).then(e=>{r(e)}).catch(()=>{r("NO_RECAPTCHA")})}):n(Error("No reCAPTCHA enterprise script loaded."))}return new Promise((e,i)=>{r(this.auth).then(r=>{if(!t&&U(window.grecaptcha))n(r,e,i);else{var a;if("undefined"==typeof window){i(Error("RecaptchaVerifier is only supported in browser"));return}let t=eb.recaptchaEnterpriseScript;0!==t.length&&(t+=r),(a=t,eb.loadJS(a)).then(()=>{n(r,e,i)}).catch(e=>{i(e)})}}).catch(e=>{i(e)})})}}async function eS(e,t,r,n=!1){let i;let a=new eR(e);try{i=await a.verify(r)}catch(e){i=await a.verify(r,!0)}let s=Object.assign({},t);return n?Object.assign(s,{captchaResp:i}):Object.assign(s,{captchaResponse:i}),Object.assign(s,{clientType:"CLIENT_TYPE_WEB"}),Object.assign(s,{recaptchaVersion:"RECAPTCHA_ENTERPRISE"}),s}async function eI(e,t,r,n){var i;if(null===(i=e._getRecaptchaConfig())||void 0===i||!i.isProviderEnabled("EMAIL_PASSWORD_PROVIDER"))return n(e,t).catch(async i=>{if("auth/missing-recaptcha-token"!==i.code)return Promise.reject(i);{console.log(`${r} is protected by reCAPTCHA Enterprise for this project. Automatically triggering the reCAPTCHA flow and restarting the flow.`);let i=await eS(e,t,r,"getOobCode"===r);return n(e,i)}});{let i=await eS(e,t,r,"getOobCode"===r);return n(e,i)}}function eT(e){let t=e.indexOf(":");return t<0?"":e.substr(0,t+1)}function eC(e){if(!e)return null;let t=Number(e);return isNaN(t)?null:t}/**
847 * @license
848 * Copyright 2020 Google LLC
849 *
850 * Licensed under the Apache License, Version 2.0 (the "License");
851 * you may not use this file except in compliance with the License.
852 * You may obtain a copy of the License at
853 *
854 *   http://www.apache.org/licenses/LICENSE-2.0
855 *
856 * Unless required by applicable law or agreed to in writing, software
857 * distributed under the License is distributed on an "AS IS" BASIS,
858 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
859 * See the License for the specific language governing permissions and
860 * limitations under the License.
861 */class eH{constructor(e,t){this.providerId=e,this.signInMethod=t}toJSON(){return _("not implemented")}_getIdTokenResponse(e){return _("not implemented")}_linkToIdToken(e,t){return _("not implemented")}_getReauthenticationResolver(e){return _("not implemented")}}async function eW(e,t){return T(e,"POST","/v1/accounts:signUp",t)}/**
862 * @license
863 * Copyright 2020 Google LLC
864 *
865 * Licensed under the Apache License, Version 2.0 (the "License");
866 * you may not use this file except in compliance with the License.
867 * You may obtain a copy of the License at
868 *
869 *   http://www.apache.org/licenses/LICENSE-2.0
870 *
871 * Unless required by applicable law or agreed to in writing, softw
871are
872 * distributed under the License is distributed on an "AS IS" BASIS,
873 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
874 * See the License for the specific language governing permissions and
875 * limitations under the License.
876 */async function eA(e,t){return H(e,"POST","/v1/accounts:signInWithPassword",I(e,t))}async function eD(e,t){return T(e,"POST","/v1/accounts:sendOobCode",I(e,t))}async function eU(e,t){return eD(e,t)}/**
877 * @license
878 * Copyright 2020 Google LLC
879 *
880 * Licensed under the Apache License, Version 2.0 (the "License");
881 * you may not use this file except in compliance with the License.
882 * You may obtain a copy of the License at
883 *
884 *   http://www.apache.org/licenses/LICENSE-2.0
885 *
886 * Unless required by applicable law or agreed to in writing, software
887 * distributed under the License is distributed on an "AS IS" BASIS,
888 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
889 * See the License for the specific language governing permissions and
890 * limitations under the License.
891 */async function eL(e,t){return H(e,"POST","/v1/accounts:signInWithEmailLink",I(e,t))}async function eO(e,t){return H(e,"POST","/v1/accounts:signInWithEmailLink",I(e,t))}/**
892 * @license
893 * Copyright 2020 Google LLC
894 *
895 * Licensed under the Apache License, Version 2.0 (the "License");
896 * you may not use this file except in compliance with the License.
897 * You may obtain a copy of the License at
898 *
899 *   http://www.apache.org/licenses/LICENSE-2.0
900 *
901 * Unless required by applicable law or agreed to in writing, software
902 * distributed under the License is distributed on an "AS IS" BASIS,
903 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
904 * See the License for the specific language governing permissions and
905 * limitations under the License.
906 */class eN extends eH{constructor(e,t,r,n=null){super("password",r),this._email=e,this._password=t,this._tenantId=n}static _fromEmailAndPassword(e,t){return new eN(e,t,"password")}static _fromEmailAndCode(e,t,r=null){return new eN(e,t,"emailLink",r)}toJSON(){return{email:this._email,password:this._password,signInMethod:this.signInMethod,tenantId:this._tenantId}}static fromJSON(e){let t="string"==typeof e?JSON.parse(e):e;if((null==t?void 0:t.email)&&(null==t?void 0:t.password)){if("password"===t.signInMethod)return this._fromEmailAndPassword(t.email,t.password);if("emailLink"===t.signInMethod)return this._fromEmailAndCode(t.email,t.password,t.tenantId)}return null}async _getIdTokenResponse(e){switch(this.signInMethod){case"password":return eI(e,{returnSecureToken:!0,email:this._email,password:this._password,clientType:"CLIENT_TYPE_WEB"},"signInWithPassword",eA);case"emailLink":return eL(e,{email:this._email,oobCode:this._password});default:d(e,"internal-error")}}async _linkToIdToken(e,t){switch(this.signInMethod){case"password":return eI(e,{idToken:t,returnSecureToken:!0,email:this._email,password:this._password,clientType:"CLIENT_TYPE_WEB"},"signUpPassword",eW);case"emailLink":return eO(e,{idToken:t,email:this._email,oobCode:this._password});default:d(e,"internal-error")}}_getReauthenticationResolver(e){return this._getIdTokenResponse(e)}}/**
907 * @license
908 * Copyright 2020 Google LLC
909 *
910 * Licensed under the Apache License, Version 2.0 (the "License");
911 * you may not use this file except in compliance with the License.
912 * You may obtain a copy of the License at
913 *
914 *   http://www.apache.org/licenses/LICENSE-2.0
915 *
916 * Unless required by applicable law or agreed to in writing, software
917 * distributed under the License is distributed on an "AS IS" BASIS,
918 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
919 * See the License for the specific language governing permissions and
920 * limitations under the License.
921 */async function eK(e,t){return H(e,"POST","/v1/accounts:signInWithIdp",I(e,t))}class ex extends eH{constructor(){super(...arguments),this.pendingToken=null}static _fromParams(e){let t=new ex(e.providerId,e.signInMethod);return e.idToken||e.accessToken?(e.idToken&&(t.idToken=e.idToken),e.accessToken&&(t.accessToken=e.accessToken),e.nonce&&!e.pendingToken&&
921(t.nonce=e.nonce),e.pendingToken&&(t.pendingToken=e.pendingToken)):e.oauthToken&&e.oauthTokenSecret?(t.accessToken=e.oauthToken,t.secret=e.oauthTokenSecret):d("argument-error"),t}toJSON(){return{idToken:this.idToken,accessToken:this.accessToken,secret:this.secret,nonce:this.nonce,pendingToken:this.pendingToken,providerId:this.providerId,signInMethod:this.signInMethod}}static fromJSON(e){let t="string"==typeof e?JSON.parse(e):e,{providerId:r,signInMethod:n}=t,i=o(t,["providerId","signInMethod"]);if(!r||!n)return null;let a=new ex(r,n);return a.idToken=i.idToken||void 0,a.accessToken=i.accessToken||void 0,a.secret=i.secret,a.nonce=i.nonce,a.pendingToken=i.pendingToken||null,a}_getIdTokenResponse(e){return eK(e,this.buildRequest())}_linkToIdToken(e,t){let r=this.buildRequest();return r.idToken=t,eK(e,r)}_getReauthenticationResolver(e){let t=this.buildRequest();return t.autoCreate=!1,eK(e,t)}buildRequest(){let e={requestUri:"http://localhost",returnSecureToken:!0};if(this.pendingToken)e.pendingToken=this.pendingToken;else{let t={};this.idToken&&(t.id_token=this.idToken),this.accessToken&&(t.access_token=this.accessToken),this.secret&&(t.oauth_token_secret=this.secret),t.providerId=this.providerId,this.nonce&&!this.pendingToken&&(t.nonce=this.nonce),e.postBody=(0,a.xO)(t)}return e}}/**
922 * @license
923 * Copyright 2020 Google LLC
924 *
925 * Licensed under the Apache License, Version 2.0 (the "License");
926 * you may not use this file except in compliance with the License.
927 * You may obtain a copy of the License at
928 *
929 *   http://www.apache.org/licenses/LICENSE-2.0
930 *
931 * Unless required by applicable law or agreed to in writing, software
932 * distributed under the License is distributed on an "AS IS" BASIS,
933 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
934 * See the License for the specific language governing permissions and
935 * limitations under the License.
936 */async function eM(e,t){return T(e,"POST","/v1/accounts:sendVerificationCode",I(e,t))}async function eF(e,t){return H(e,"POST","/v1/accounts:signInWithPhoneNumber",I(e,t))}async function eB(e,t){let r=await H(e,"POST","/v1/accounts:signInWithPhoneNumber",I(e,t));if(r.temporaryProof)throw D(e,"account-exists-with-different-credential",r);return r}let eV={USER_NOT_FOUND:"user-not-found"};async function eq(e,t){return H(e,"POST","/v1/accounts:signInWithPhoneNumber",I(e,Object.assign(Object.assign({},t),{operation:"REAUTH"})),eV)}/**
937 * @license
938 * Copyright 2020 Google LLC
939 *
940 * Licensed under the Apache License, Version 2.0 (the "License");
941 * you may not use this file except in compliance with the License.
942 * You may obtain a copy of the License at
943 *
944 *   http://www.apache.org/licenses/LICENSE-2.0
945 *
946 * Unless required by applicable law or agreed to in writing, software
947 * distributed under the License is distributed on an "AS IS" BASIS,
948 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
949 * See the License for the specific language governing permissions and
950 * limitations under the License.
951 */class ej extends eH{constructor(e){super("phone","phone"),this.params=e}static _fromVerification(e,t){return new ej({verificationId:e,verificationCode:t})}static _fromTokenResponse(e,t){return new ej({phoneNumber:e,temporaryProof:t})}_getIdTokenResponse(e){return eF(e,this._makeVerificationRequest())}_linkToIdToken(e,t){return eB(e,Object.assign({idToken:t},this._makeVerificationRequest()))}_getReauthenticationResolver(e){return eq(e,this._makeVerificationRequest())}_makeVerificationRequest(){let{temporaryProof:e,phoneNumber:t,verificationId:r,verificationCode:n}=this.params;return e&&t?{temporaryProof:e,phoneNumber:t}:{sessionInfo:r,code:n}}toJSON(){let e={providerId:this.providerId};return this.params.phoneNumber&&(e.phoneNumber=this.params.phoneNumber),this.params.temporaryProof&&(e.temporaryProof=this.params.temporaryProof),this.params.verificationCode&&(e.verificationCode=this.params.verificationCode),this.params.verificationId&&(e.verificationId=this.params.verificationId),e}static fromJSON(e){"string"==typeof e&&(e=JSON.parse(e));let{verificationId:t,verificationCode:r,phoneNumber:n,temporaryProof:i}=e;return r||t||n||i?new ej({verificationId:t,verificationCode:r,phoneNumber:n,temporaryProof:i}):null}}class eG{constructor(e){var t,r,n,i,s,o;let c=(0,a.zd)((0,a.pd)(e)),u=null!==(t=c.apiKey)&&void 0!==t?t:null,l=null!==(r=c.oobCode)&&void 0!==r?r:null,h=/**
952 * @license
953 * Copyright 2020 Google LLC
954 *
955 * Licensed under the Apache License, Version 2.0 (the "License");
956 * you may not use this file except in compliance with the License.
957 * You may obtain a copy of the License at
958 *
959 *   http://www.apache.org/licenses/LICENSE-2.0
960 *
961 * Unless required by applicable law or agreed to in writing, software
962 * distributed under the License is distributed on an "AS IS" BASIS,
963 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
964 * See the License for the specific language governing permissions and
965 * limitations under the License.
966 */function(e){switch(e){case"recoverEmail":return"RECOVER_EMAIL";case"resetPassword":return"PASSWORD_RESET";case"signIn":return"EMAIL_SIGNIN";case"verifyEmail":return"VERIFY_EMAIL";case"verifyAndChangeEmail":return"VERIFY_AND_CHANGE_EMAIL";case"revertSecondFactorAddition":return"REVERT_SECOND_FACTOR_ADDITION";default:return null}}(null!==(n=c.mode)&&void 0!==n?n:null);v(u&&l&&h,"argument-error"),this.apiKey=u,this.operation=h,this.code=l,this.continueUrl=null!==(i=c.continueUrl)&&void 0!==i?i:null,this.languageCode=null!==(s=c.languageCode)&&void 0!==s?s:null,this.tenantId=null!==(o=c.tenantId)&&void 0!==o?o:null}static parseLink(e){let t=function(e){let t=(0,a.zd)((0,a.pd)(e)).link,r=t?(0,a.zd)((0,a.pd)(t)).deep_link_id:null,n=(0,a.zd)((0,a.pd)(e)).deep_link_id;return(n?(0,a.zd)((0,a.pd)(n)).link:null)||n||r||t||e}(e);try{return new eG(t)}catch(e){return null}}}/**
967 * @license
968 * Copyright 2020 Google LLC
969 *
970 * Licensed under the Apache License, Version 2.0 (the "License");
971 * you may not use this file except in compliance with the License.
972 * You may obtain a copy of the License at
973 *
974 *   http://www.apache.org/licenses/LICENSE-2.0
975 *
976 * Unless required by applicable law or agreed to in writing, software
977 * distributed under the License is distributed on an "AS IS" BASIS,
978 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
979 * See the License for the specific language governing permissions and
980 * limitations under the License.
981 */class ez{constructor(){this.providerId=ez.PROVIDER_ID}static credential(e,t){return eN._fromEmailAndPassword(e,t)}static credentialWithLink(e,t){let r=eG.parseLink(t);return v(r,"argument-error"),eN._fromEmailAndCode(e,r.code,r.tenantId)}}ez.PROVIDER_ID="password",ez.EMAIL_PASSWORD_SIGN_IN_METHOD="password",ez.EMAIL_LINK_SIGN_IN_METHOD="emailLink";/**
982 * @license
983 * Copyright 2020 Google LLC
984 *
985 * Licensed under the Apache License, Version 2.0 (the "License");
986 * you may not use this file except in compliance with the License.
987 * You may obtain a copy of the License at
988 *
989 *   http://www.apache.org/licenses/LICENSE-2.0
990 *
991 * Unless required by applicable law or agreed to in writing, software
992 * distributed under the License is distributed on an "AS IS" BASIS,
993 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
994 * See the License for the specific language governing permissions and
995 * limitations under the License.
996 */class e${constructor(e){this.providerId=e,this.defaultLanguageCode=null,this.customParameters={}}setDefaultLanguage(e){this.defaultLanguageCode=e}setCustomParameters(e){return this.customParameters=e,this}getCustomParameters(){return this.customParameters}}/**
997 * @license
998 * Copyright 2019 Google LLC
999 *
1000 * Licensed under the Apache License, Version 2.0 (the "License");
1001 * you may not use this file except in compliance with the License.
1002 * You may obtain a copy of the License at
1003 *
1004 *   http://www.apache.org/licenses/LICENSE-2.0
1005 *
1006 * Unless required by applicable law or agreed to in writing, software
1007 * distributed under the License is distributed on an "AS IS" BASIS,
1008 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1009 * See the License for the specific language governing permissions and
1010 * limitations under the License.
1011 */class eJ extends e${constructor(){super(...arguments),this.scopes=[]}addScope(e){return this.scopes.includes(e)||this.scopes.push(e),this}getScopes(){return[...this.scopes]}}/**
1012 * @license
1013 * Copyright 2020 Google LLC
1014 *
1015 * Licensed under the Apache License, Version 2.0 (the "License");
1016 * you may not use this file except in compliance with the License.
1017 * You may obtain a copy of the License at
1018 *
1019 *   http://www.apache.org/licenses/LICENSE-2.0
1020 *
1021 * Unless required by applicable law or agreed to in writing, software
1022 * distributed under the License is distributed on an "AS IS" BASIS,
1023 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1024 * See the License for the specific language governing permissions and
1025 * limitations under the License.
1026 */class eQ extends eJ{constructor(){super("facebook.com")}static credential(e){return ex._fromParams({providerId:eQ.PROVIDER_ID,signInMethod:eQ.FACEBOOK_SIGN_IN_METHOD,accessToken:e})}static credentialFromResult(e){return eQ.credentialFromTaggedObject(e)}static credentialFromError(e){return eQ.credentialFromTaggedObject(e.customData||{})}static credentialFromTaggedObject({_tokenResponse:e}){if(!e||!("oauthAccessToken"in e)||!e.oauthAccessToken)return null;try{return eQ.credential(e.oauthAccessToken)}catch(e){return null}}}eQ.FACEBOOK_SIGN_IN_METHOD="facebook.com",eQ.PROVIDER_ID="facebook.com";/**
1027 * @license
1028 * Copyright 2020 Google LLC
1029 *
1030 * Licensed under the Apache License, Version 2.0 (the "License");
1031 * you may not use this file except in compliance with the License.
1032 * You may obtain a copy of the License at
1033 *
1034 *   http://www.apache.org/licenses/LICENSE-2.0
1035 *
1036 * Unless required by applicable law or agreed to in writing, software
1037 * distributed under the License is distributed on an "AS IS" BASIS,
1038 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1039 * See the License for the specific language governing permissions and
1040 * limitations under the License.
1041 */class eX extends eJ{constructor(){super("google.com"),this.addScope("profile")}static credential(e,t){return ex._fromParams({providerId:eX.PROVIDER_ID,signInMethod:eX.GOOGLE_SIGN_IN_METHOD,idToken:e,accessToken:t})}static credentialFromResult(e){return eX.credentialFromTaggedObject(e)}static credentialFromError(e){return eX.credentialFromTaggedObject(e.customData||{})}static credentialFromTaggedObject({_tokenResponse:e}){if(!e)return null;let{oauthIdToken:t,oauthAccessToken:r}=e;if(!t&&!r)return null;try{return eX.credential(t,r)}catch(e){return null}}}eX.GOOGLE_SIGN_IN_METHOD="google.com",eX.PROVIDER_ID="google.com";/**
1042 * @license
1043 * Copyright 2020 Google LLC
1044 *
1045 * Licensed under the Apache License, Version 2.0 (the "License");
1046 * you may not use this file except in compliance with the License.
1047 * You may obtain a copy of the License at
1048 *
1049 *   http://www.apache.org/licenses/LICENSE-2.0
1050 *
1051 * Unless required by applicable law or agreed to in writing, software
1052 * distributed under the License is distributed on an "AS IS" BASIS,
1053 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1054 * See the License for the specific language governing permissions and
1055 * limitations under the License.
1056 */class eY extends eJ{constructor(){super("github.com")}static credential(e){return ex._fromParams({providerId:eY.PROVIDER_ID,signInMethod:eY.GITHUB_SIGN_IN_METHOD,accessToken:e})}static credentialFromResult(e){return eY.credentialFromTaggedObject(e)}static credentialFromError(e){return eY.credentialFromTaggedObject(e.customData||{})}static credentialFromTaggedObject({_tokenResponse:e}){if(!e||!("oauthAccessToken"in e)||!e.oauthAccessToken)return null;try{return eY.credential(e.oauthAccessToken)}catch(e){return null}}}eY.GITHUB_SIGN_IN_METHOD="github.com",eY.PROVIDER_ID="github.com";/**
1057 * @license
1058 * Copyright 2020 Google LLC
1059 *
1060 * Licensed under the Apache License, Version 2.0 (the "License");
1061 * you may not use this file except in compliance with the License.
1062 * You may obtain a copy of the License at
1063 *
1064 *   http://www.apache.org/licenses/LICENSE-2.0
1065 *
1066 * Unless required by applicable law or agreed to in writing, software
1067 * distributed under the License is distributed on an "AS IS" BASIS,
1068 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1069 * See the License for the specific language governing permissions and
1070 * limitations under the License.
1071 */class eZ extends eJ{constructor(){super("twitter.com")}static credential(e,t){return ex._fromParams({providerId:eZ.PROVIDER_ID,signInMethod:eZ.TWITTER_SIGN_IN_METHOD,oauthToken:e,oauthTokenSecret:t})}static credentialFromResult(e){return eZ.credentialFromTaggedObject(e)}static credentialFromError(e){return eZ.credentialFromTaggedObject(e.customData||{})}
1071static credentialFromTaggedObject({_tokenResponse:e}){if(!e)return null;let{oauthAccessToken:t,oauthTokenSecret:r}=e;if(!t||!r)return null;try{return eZ.credential(t,r)}catch(e){return null}}}eZ.TWITTER_SIGN_IN_METHOD="twitter.com",eZ.PROVIDER_ID="twitter.com";/**
1072 * @license
1073 * Copyright 2020 Google LLC
1074 *
1075 * Licensed under the Apache License, Version 2.0 (the "License");
1076 * you may not use this file except in compliance with the License.
1077 * You may obtain a copy of the License at
1078 *
1079 *   http://www.apache.org/licenses/LICENSE-2.0
1080 *
1081 * Unless required by applicable law or agreed to in writing, software
1082 * distributed under the License is distributed on an "AS IS" BASIS,
1083 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1084 * See the License for the specific language governing permissions and
1085 * limitations under the License.
1086 */class e1{constructor(e){this.user=e.user,this.providerId=e.providerId,this._tokenResponse=e._tokenResponse,this.operationType=e.operationType}static async _fromIdTokenResponse(e,t,r,n=!1){return new e1({user:await ee._fromIdTokenResponse(e,r,n),providerId:e0(r),_tokenResponse:r,operationType:t})}static async _forOperation(e,t,r){return await e._updateTokensIfNecessary(r,!0),new e1({user:e,providerId:e0(r),_tokenResponse:r,operationType:t})}}function e0(e){return e.providerId?e.providerId:"phoneNumber"in e?"phone":null}/**
1087 * @license
1088 * Copyright 2020 Google LLC
1089 *
1090 * Licensed under the Apache License, Version 2.0 (the "License");
1091 * you may not use this file except in compliance with the License.
1092 * You may obtain a copy of the License at
1093 *
1094 *   http://www.apache.org/licenses/LICENSE-2.0
1095 *
1096 * Unless required by applicable law or agreed to in writing, software
1097 * distributed under the License is distributed on an "AS IS" BASIS,
1098 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1099 * See the License for the specific language governing permissions and
1100 * limitations under the License.
1101 */class e4 extends a.ZR{constructor(e,t,r,n){var i;super(t.code,t.message),this.operationType=r,this.user=n,Object.setPrototypeOf(this,e4.prototype),this.customData={appName:e.name,tenantId:null!==(i=e.tenantId)&&void 0!==i?i:void 0,_serverResponse:t.customData._serverResponse,operationType:r}}static _fromErrorAndOperation(e,t,r,n){return new e4(e,t,r,n)}}function e2(e,t,r,n){return("reauthenticate"===t?r._getReauthenticationResolver(e):r._getIdTokenResponse(e)).catch(r=>{if("auth/multi-factor-auth-required"===r.code)throw e4._fromErrorAndOperation(e,r,t,n);throw r})}async function e5(e,t,r=!1){let n=await q(e,t._linkToIdToken(e.auth,await e.getIdToken()),r);return e1._forOperation(e,"link",n)}/**
1102 * @license
1103 * Copyright 2019 Google LLC
1104 *
1105 * Licensed under the Apache License, Version 2.0 (the "License");
1106 * you may not use this file except in compliance with the License.
1107 * You may obtain a copy of the License at
1108 *
1109 *   http://www.apache.org/licenses/LICENSE-2.0
1110 *
1111 * Unless required by applicable law or agreed to in writing, software
1112 * distributed under the License is distributed on an "AS IS" BASIS,
1113 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1114 * See the License for the specific language governing permissions and
1115 * limitations under the License.
1116 */async function e3(e,t,r=!1){let{auth:n}=e;if((0,i.rh)(n.app))return Promise.reject(y(n));let a="reauthenticate";try{let i=await q(e,e2(n,a,t,e),r);v(i.idToken,n,"internal-error");let s=B(i.idToken);v(s,n,"internal-error");let{sub:o}=s;return v(e.uid===o,n,"user-mismatch"),e1._forOperation(e,a,i)}catch(e){throw(null==e?void 0:e.code)==="auth/user-not-found"&&d(n,"user-mismatch"),e}}/**
1117 * @license
1118 * Copyright 2020 Google LLC
1119 *
1120 * Licensed under the Apache License, Version 2.0 (the "License");
1121 * you may not use this file except in compliance with the License.
1122 * You may obtain a copy of the License at
1123 *
1124 *   http://www.apache.org/licenses/LICENSE-2.0
1125 *
1126 * Unless required by applicable law or agreed to in writing, software
1127 * distributed under the License is distributed on an "AS IS" BASIS,
1128 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1129 * See the License for the specific language governing permissions and
1130 * limitations under the License.
1131 */async function e6(e,t,r=!1){if((0,i.rh)(e.app))return Promise.reject(y(e));let n="signIn",a=await e2(e,n,t),s=await e1._fromIdTokenResponse(e,n,a);return r||await e._updateCurrentUser(s.user),s}async function e9(e,t){return e6(ek(e),t)}/**
1132 * @license
1133 * Copyright 2020 Google LLC
1134 *
1135 * Licensed under the Apache License, Version 2.0 (the "License");
1136 * you may not use this file except in compliance with the License.
1137 * You may obtain a copy of the License at
1138 *
1139 *   http://www.apache.org/licenses/LICENSE-2.0
1140 *
1141 * Unless required by applicable law or agreed to in writing, software
1142 * distributed under the License is distributed on an "AS IS" BASIS,
1143 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1144 * See the License for the specific language governing permissions and
1145 * limitations under the License.
1146 */async function e8(e){let t=ek(e);t._getPasswordPolicyInternal()&&await t._updatePasswordPolicy()}function e7(e,t,r){return(0,i.rh)(e.app)?Promise.reject(y(e)):e9((0,a.m9)(e),ez.credential(t,r)).catch(async t=>{throw"auth/password-does-not-meet-requirements"===t.code&&e8(e),t})}async function te(e,t){let r=(0,a.m9)(e),n={requestType:"VERIFY_EMAIL",idToken:await e.getIdToken()};if(t){var i,s;i=r.auth,v((null===(s=t.url)||void 0===s?void 0:s.length)>0,i,"invalid-continue-uri"),v(void 0===t.dynamicLinkDomain||t.dynamicLinkDomain.length>0,i,"invalid-dynamic-link-domain"),n.continueUrl=t.url,n.dynamicLinkDomain=t.dynamicLinkDomain,n.canHandleCodeInApp=t.handleCodeInApp,t.iOS&&(v(t.iOS.bundleId.length>0,i,"missing-ios-bundle-id"),n.iOSBundleId=t.iOS.bundleId),t.android&&(v(t.android.packageName.length>0,i,"missing-android-pkg-name"),n.androidInstallApp=t.android.installApp,n.androidMinimumVersionCode=t.android.minimumVersion,n.androidPackageName=t.android.packageName)}let{email:o}=await eU(r.auth,n);o!==e.email&&await e.reload()}function tt(e,t,r,n){return(0,a.m9)(e).onAuthStateChanged(t,r,n)}function tr(e){return(0,a.m9)(e).signOut()}new WeakMap;let tn="__sak";/**
1147 * @license
1148 * Copyright 2019 Google LLC
1149 *
1150 * Licensed under the Apache License, Version 2.0 (the "License");
1151 * you may not use this file except in compliance with the License.
1152 * You may obtain a copy of the License at
1153 *
1154 *   http://www.apache.org/licenses/LICENSE-2.0
1155 *
1156 * Unless required by applicable law or agreed to in writing, software
1157 * distributed under the License is distributed on an "AS IS" BASIS,
1158 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1159 * See the License for the specific language governing permissions and
1160 * limitations under the License.
1161 */class ti{constructor(e,t){this.storageRetriever=e,this.type=t}_isAvailable(){try{if(!this.storage)return Promise.resolve(!1);return this.storage.setItem(tn,"1"),this.storage.removeItem(tn),Promise.resolve(!0)}catch(e){return Promise.resolve(!1)}}_set(e,t){return this.storage.setItem(e,JSON.stringify(t)),Promise.resolve()}_get(e){let t=this.storage.getItem(e);return Promise.resolve(t?JSON.parse(t):null)}_remove(e){return this.storage.removeItem(e),Promise.resolve()}get storage(){return this.storageRetriever()}}class ta extends ti{constructor(){super(()=>window.localStorage,"LOCAL"),this.boundEventHandler=(e,t)=>this.onStorageEvent(e,t),this.listeners={},this.localCache={},this.pollTimer=null,this.fallbackToPolling=ep(),this._shouldAllowMigration=!0}forAllChangedKeys(e){for(let t of Object.keys(this.listeners)){let r=this.storage.getItem(t),n=this.localCache[t];r!==n&&e(t,n,r)}}onStorageEvent(e,t=!1){if(!e.key){this.forAllChangedKeys((e,t,r)=>{this.notifyListeners(e,r)});return}let r=e.key;t?this.detachListener():this.stopPolling();let n=()=>{let e=this.storage.getItem(r);(t||this.localCache[r]!==e)&&this.notifyListeners(r,e)},i=this.storage.getItem(r);(0,a.w1)()&&10===document.documentMode&&i!==e.newValue&&e.newValue!==e.oldValue?setTimeout(n,10):n()}notifyListeners(e,t){this.localCache[e]=t;let r=this.listeners[e];if(r)for(let e of Array.from(r))e(t?JSON.parse(t):t)}startPolling(){this.stopPolling(),this.pollTimer=setInterval(()=>{this.forAllChangedKeys((e,t,r)=>{this.onStorageEvent(new StorageEvent("storage",{key:e,oldValue:t,newValue:r}),!0)})},1e3)}stopPolling(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null)}attachListener(){window.addEventListener("storage",this.boundEventHandler)}detachListener(){window.removeEventListener("storage",this.boundEventHandler)}_addListener(e,t){0===Object.keys(this.listeners).length&&(this.fallbackToPolling?this.startPolling():this.attachListener()),this.listeners[e]||(this.listeners[e]=new Set,this.localCache[e]=this.storage.getItem(e)),this.listeners[e].add(t)}_removeListener(e,t){this.listeners[e]&&(this.listeners[e].delete(t),0===this.listeners[e].size&&delete this.listeners[e]),0===Object.keys(this.listeners).length&&(this.detachListener(),this.stopPolling())}async _set(e,t){await super._set(e,t),this.localCache[e]=JSON.stringify(t)}async _get(e){let t=await super._get(e);return this.localCache[e]=JSON.stringify(t),t}async _remove(e){await super._remove(e),delete this.localCache[e]}}ta.type="LOCAL";/**
1162 * @license
1163 * Copyright 2020 Google LLC
1164 *
1165 * Licensed under the Apache License, Version 2.0 (the "License");
1166 * you may not use this file except in compliance with the License.
1167 * You may obtain a copy of the License at
1168 *
1169 *   http://www.apache.org/licenses/LICENSE-2.0
1170 *
1171 * Unless required by applicable law or agreed to in writing, software
1172 * distributed under the License is distributed on an "AS IS" BASIS,
1173 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1174 * See the License for the specific language governing permissions and
1175 * limitations under the License.
1176 */class ts extends ti{constructor(){super(()=>window.sessionStorage,"SESSION")}_addListener(e,t){}_removeListener(e,t){}}ts.type="SESSION";/**
1177 * @license
1178 * Copyright 2019 Google LLC
1179 *
1180 * Licensed under the Apache License, Version 2.0 (the "License");
1181 * you may not use this file except in compliance with the License.
1182 * You may obtain a copy of the License at
1183 *
1184 *   http://www.apache.org/licenses/LICENSE-2.0
1185 *
1186 * Unless required by applicable law or agreed to in writing, software
1187 * distributed under the License is distributed on an "AS IS" BASIS,
1188 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1189 * See the License for the specific language governing permissions and
1190 * limitations under the License.
1191 */class to{constructor(e){this.eventTarget=e,this.handlersMap={},this.boundEventHandler=this.handleEvent.bind(this)}static _getInstance(e){let t=this.receivers.find(t=>t.isListeningto(e));if(t)return t;let r=new to(e);return this.receivers.push(r),r}isListeningto(e){return this.eventTarget===e}async handleEvent(e){let{eventId:t,eventType:r,data:n}=e.data,i=this.handlersMap[r];if(!(null==i?void 0:i.size))return;e.ports[0].postMessage({status:"ack",eventId:t,eventType:r});let a=Array.from(i).map(async t=>t(e.origin,n)),s=await Promise.all(a.map(async e=>{try{let t=await e;return{fulfilled:!0,value:t}}catch(e){return{fulfilled:!1,reason:e}}}));e.ports[0].postMessage({status:"done",eventId:t,eventType:r,response:s})}_subscribe(e,t){0===Object.keys(this.handlersMap).length&&this.eventTarget.addEventListener("message",this.boundEventHandler),this.handlersMap[e]||(this.handlersMap[e]=new Set),this.handlersMap[e].add(t)}_unsubscribe(e,t){this.handlersMap[e]&&t&&this.handlersMap[e].delete(t),t&&0!==this.handlersMap[e].size||delete this.handlersMap[e],0===Object.keys(this.handlersMap).length&&this.eventTarget.removeEventListener("message",this.boundEventHandler)}}/**
1192 * @license
1193 * Copyright 2020 Google LLC
1194 *
1195 * Licensed under the Apache License, Version 2.0 (the "License");
1196 * you may not use this file except in compliance with the License.
1197 * You may obtain a copy of the License at
1198 *
1199 *   http://www.apache.org/licenses/LICENSE-2.0
1200 *
1201 * Unless required by applicable law or agreed to in writing, software
1202 * distributed under the License is distributed on an "AS IS" BASIS,
1203 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1204 * See the License for the specific language governing permissions and
1205 * limitations under the License.
1206 */function tc(e="",t=10){let r="";for(let e=0;e<t;e++)r+=Math.floor(10*Math.random());return e+r}to.receivers=[];/**
1207 * @license
1208 * Copyright 2019 Google LLC
1209 *
1210 * Licensed under the Apache License, Version 2.0 (the "License");
1211 * you may not use this file except in compliance with the License.
1212 * You may obtain a copy of the License at
1213 *
1214 *   http://www.apache.org/licenses/LICENSE-2.0
1215 *
1216 * Unless required by applicable law or agreed to in writing, software
1217 * distributed under the License is distributed on an "AS IS" BASIS,
1218 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1219 * See the License for the specific language governing permissions and
1220 * limitations under the License.
1221 */class tu{constructor(e){this.target=e,this.handlers=new Set}removeMessageHandler(e){e.messageChannel&&(e.messageChannel.port1.removeEventListener("message",e.onMessage),e.messageChannel.port1.close()),this.handlers.delete(e)}async _send(e,t,r=50){let n,i;let a="undefined"!=typeof MessageChannel?new MessageChannel:null;if(!a)throw Error("connection_unavailable");return new Promise((s,o)=>{let c=tc("",20);a.port1.start();let u=setTimeout(()=>{o(Error("unsupported_event"))},r);i={messageChannel:a,onMessage(e){if(e.data.eventId===c)switch(e.data.status){case"ack":clearTimeout(u),n=setTimeout(()=>{o(Error("timeout"))},3e3);break;case"done":clearTimeout(n),s(e.data.response);break;default:clearTimeout(u),clearTimeout(n),o(Error("invalid_response"))}}},this.handlers.add(i),a.port1.addEventListener("message",i.onMessage),this.target.postMessage({eventType:e,eventId:c,data:t},[a.port2])}).finally(()=>{i&&this.removeMessageHandler(i)})}}/**
1222 * @license
1223 * Copyright 2020 Google LLC
1224 *
1225 * Licensed under the Apache License, Version 2.0 (the "License");
1226 * you may not use this file except in compliance with the License.
1227 * You may obtain a copy of the License at
1228 *
1229 *   http://www.apache.org/licenses/LICENSE-2.0
1230 *
1231 * Unless required by applicable law or agreed to in writing, software
1232 * distributed under the License is distributed on an "AS IS" BASIS,
1233 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1234 * See the License for the specific language governing permissions and
1235 * limitations under the License.
1236 */function tl(){return window}/**
1237 * @license
1238 * Copyright 2020 Google LLC.
1239 *
1240 * Licensed under the Apache License, Version 2.0 (the "License");
1241 * you may not use this file except in compliance with the License.
1242 * You may obtain a copy of the License at
1243 *
1244 *   http://www.apache.org/licenses/LICENSE-2.0
1245 *
1246 * Unless required by applicable law or agreed to in writing, software
1247 * distributed under the License is distributed on an "AS IS" BASIS,
1248 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1249 * See the License for the specific language governing permissions and
1250 * limitations under the License.
1251 */function th(){return void 0!==tl().WorkerGlobalScope&&"function"==typeof tl().importScripts}async function tg(){if(!(null==navigator?void 0:navigator.serviceWorker))return null;try{return(await navigator.serviceWorker.ready).active}catch(e){return null}}/**
1252 * @license
1253 * Copyright 2019 Google LLC
1254 *
1255 * Licensed under the Apache License, Version 2.0 (the "License");
1256 * you may not use this file except in compliance with the License.
1257 * You may obtain a copy of the License at
1258 *
1259 *   http://www.apache.org/licenses/LICENSE-2.0
1260 *
1261 * Unless required by applicable law or agreed to in writing, software
1262 * distributed under the License is distributed on an "AS IS" BASIS,
1263 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1264 * See the License for the specific language governing permissions and
1265 * limitations under the License.
1266 */let td="firebaseLocalStorageDb",tm="firebaseLocalStorage",tp="fbase_key";class ty{constructor(e){this.request=e}toPromise(){return new Promise((e,t)=>{this.request.addEventListener("success",()=>{e(this.request.result)}),this.request.addEventListener("error",()=>{t(this.request.error)})})}}function tf(e,t){return e.transaction([tm],t?"readwrite":"readonly").objectStore(tm)}function tv(){let e=indexedDB.open(td,1);return new Promise((t,r)=>{e.addEventListener("error",()=>{r(e.error)}),e.addEventListener("upgradeneeded",()=>{let t=e.result;try{t.createObjectStore(tm,{keyPath:tp})}catch(e){r(e)}}),e.addEventListener("success",async()=>{let r=e.result;r.objectStoreNames.contains(tm)?t(r):(r.close(),await new ty(indexedDB.deleteDatabase(td)).toPromise(),t(await tv()))})})}async function t_(e,t,r){return new ty(tf(e,!0).put({[tp]:t,value:r})).toPromise()}async function tw(e,t){let r=tf(e,!1).get(t),n=await new ty(r).toPromise();return void 0===n?null:n.value}function tk(e,t){return new ty(tf(e,!0).delete(t)).toPromise()}class tP{constructor(){this.type="LOCAL",this._shouldAllowMigration=!0,this.listeners={},this.localCache={},this.pollTimer=null,this.pendingWrites=0,this.receiver=null,this.sender=null,this.serviceWorkerReceiverAvailable=!1,this.activeServiceWorker=null,this._workerInitializationPromise=this.initializeServiceWorkerMessaging().then(()=>{},()=>{})}async _openDb(){return this.db||(this.db=await tv()),this.db}async _withRetries(e){let t=0;for(;;)try{let t=await this._openDb();return await e(t)}catch(e){if(t++>3)throw e;this.db&&(this.db.close(),this.db=void 0)}}async initializeServiceWorkerMessaging(){return th()?this.initializeReceiver():this.initializeSender()}async initializeReceiver(){this.receiver=to._getInstance(th()?self:null),this.receiver._subscribe("keyChanged",async(e,t)=>({keyProcessed:(await this._poll()).includes(t.key)})),this.receiver._subscribe("ping",async(e,t)=>["keyChanged"])}async initializeSender(){var e,t;if(this.activeServiceWorker=await tg(),!this.activeServiceWorker)return;this.sender=new tu(this.activeServiceWorker);let r=await this.sender._send("ping",{},800);r&&(null===(e=r[0])||void 0===e?void 0:e.fulfilled)&&(null===(t=r[0])||void 0===t?void 0:t.value.includes("keyChanged"))&&(this.serviceWorkerReceiverAvailable=!0)}async notifyServiceWorker(e){var t;if(this.sender&&this.activeServiceWorker&&((null===(t=null==navigator?void 0:navigator.serviceWorker)||void 0===t?void 0:t.controller)||null)===this.activeServiceWorker)try{await this.sender._send("keyChanged",{key:e},this.serviceWorkerReceiverAvailable?800:50)}catch(e){}}async _isAvailable(){try{if(!indexedDB)return!1;let e=await tv();return await t_(e,tn,"1"),await tk(e,tn),!0}catch(e){}return!1}async _withPendingWrite(e){this.pendingWrites++;try{await e()}finally{this.pendingWrites--}}async _set(e,t){return this._withPendingWrite(async()=>(await this._withRetries(r=>t_(r,e,t)),this.localCache[e]=t,this.notifyServiceWorker(e)))}async _get(e){let t=await this._withRetries(t=>tw(t,e));return this.localCache[e]=t,t}async _remove(e){return this._withPendingWrite(async()=>(await this._withRetries(t=>tk(t,e)),delete this.localCache[e],this.notifyServiceWorker(e)))}async _poll(){let e=await this._withRetries(e=>new ty(tf(e,!1).getAll()).toPromise());if(!e||0!==this.pendingWrites)return[];let t=[],r=new Set;if(0!==e.length)for(let{fbase_key:n,value:i}of e)r.add(n),JSON.stringify(this.localCache[n])!==JSON.stringify(i)&&(this.notifyListeners(n,i),t.push(n));for(let e of Object.keys(this.localCache))this.localCache[e]&&!r.has(e)&&(this.notifyListeners(e,null),t.push(e));return t}notifyListeners(e,t){this.localCache[e]=t;let r=this.listeners[e];if(r)for(let e of Array.from(r))e(t)}startPolling(){this.stopPolling(),this.pollTimer=setInterval(async()=>this._poll(),800)}stopPolling(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null)}_addListener(e,t){0===Object.keys(this.listeners).length&&this.startPolling(),this.listeners[e]||(this.listeners[e]=new Set,this._get(e)),this.listeners[e].add(t)}_removeListener(e,t){this.listeners[e]&&(this.listeners[e].delete(t),0===this.listeners[e].size&&delete this.listeners[e]),0===Object.keys(this.listeners).length&&this.stopPolling()}}async function tb(e,t,r){var n,i,a;let s=await r.verify();try{let o;if(v("string"==typeof s,e,"argument-error"),v("recaptcha"===r.type,e,"argument-error"),o="string"==typeof t?{phoneNumber:t}
1266:t,"session"in o){let t=o.session;if("phoneNumber"in o)return v("enroll"===t.type,e,"internal-error"),(await (i={idToken:t.credential,phoneEnrollmentInfo:{phoneNumber:o.phoneNumber,recaptchaToken:s}},T(e,"POST","/v2/accounts/mfaEnrollment:start",I(e,i)))).phoneSessionInfo.sessionInfo;{v("signin"===t.type,e,"internal-error");let r=(null===(n=o.multiFactorHint)||void 0===n?void 0:n.uid)||o.multiFactorUid;return v(r,e,"missing-multi-factor-info"),(await (a={mfaPendingCredential:t.credential,mfaEnrollmentId:r,phoneSignInInfo:{recaptchaToken:s}},T(e,"POST","/v2/accounts/mfaSignIn:start",I(e,a)))).phoneResponseInfo.sessionInfo}}{let{sessionInfo:t}=await eM(e,{phoneNumber:o.phoneNumber,recaptchaToken:s});return t}}finally{r._reset()}}tP.type="LOCAL",eE("rcb"),new P(3e4,6e4);/**
1267 * @license
1268 * Copyright 2020 Google LLC
1269 *
1270 * Licensed under the Apache License, Version 2.0 (the "License");
1271 * you may not use this file except in compliance with the License.
1272 * You may obtain a copy of the License at
1273 *
1274 *   http://www.apache.org/licenses/LICENSE-2.0
1275 *
1276 * Unless required by applicable law or agreed to in writing, software
1277 * distributed under the License is distributed on an "AS IS" BASIS,
1278 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1279 * See the License for the specific language governing permissions and
1280 * limitations under the License.
1281 */class tE{constructor(e){this.providerId=tE.PROVIDER_ID,this.auth=ek(e)}verifyPhoneNumber(e,t){return tb(this.auth,e,(0,a.m9)(t))}static credential(e,t){return ej._fromVerification(e,t)}static credentialFromResult(e){return tE.credentialFromTaggedObject(e)}static credentialFromError(e){return tE.credentialFromTaggedObject(e.customData||{})}static credentialFromTaggedObject({_tokenResponse:e}){if(!e)return null;let{phoneNumber:t,temporaryProof:r}=e;return t&&r?ej._fromTokenResponse(t,r):null}}/**
1282 * @license
1283 * Copyright 2021 Google LLC
1284 *
1285 * Licensed under the Apache License, Version 2.0 (the "License");
1286 * you may not use this file except in compliance with the License.
1287 * You may obtain a copy of the License at
1288 *
1289 *   http://www.apache.org/licenses/LICENSE-2.0
1290 *
1291 * Unless required by applicable law or agreed to in writing, software
1292 * distributed under the License is distributed on an "AS IS" BASIS,
1293 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1294 * See the License for the specific language governing permissions and
1295 * limitations under the License.
1296 */function tR(e,t){return t?er(t):(v(e._popupRedirectResolver,e,"argument-error"),e._popupRedirectResolver)}tE.PROVIDER_ID="phone",tE.PHONE_SIGN_IN_METHOD="phone";/**
1297 * @license
1298 * Copyright 2019 Google LLC
1299 *
1300 * Licensed under the Apache License, Version 2.0 (the "License");
1301 * you may not use this file except in compliance with the License.
1302 * You may obtain a copy of the License at
1303 *
1304 *   http://www.apache.org/licenses/LICENSE-2.0
1305 *
1306 * Unless required by applicable law or agreed to in writing, software
1307 * distributed under the License is distributed on an "AS IS" BASIS,
1308 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1309 * See the License for the specific language governing permissions and
1310 * limitations under the License.
1311 */class tS extends eH{constructor(e){super("custom","custom"),this.params=e}_getIdTokenResponse(e){return eK(e,this._buildIdpRequest())}_linkToIdToken(e,t){return eK(e,this._buildIdpRequest(t))}_getReauthenticationResolver(e){return eK(e,this._buildIdpRequest())}_buildIdpRequest(e){let t={requestUri:this.params.requestUri,sessionId:this.params.sessionId,postBody:this.params.postBody,tenantId:this.params.tenantId,pendingToken:this.params.pendingToken,returnSecureToken:!0,returnIdpCredential:!0};return e&&(t.idToken=e),t}}function tI(e){return e6(e.auth,new tS(e),e.bypassAuthState)}function tT(e){let{auth:t,user:r}=e;return v(r,t,"internal-error"),e3(r,new tS(e),e.bypassAuthState)}async function tC(e){let{auth:t,user:r}=e;return v(r,t,"internal-error"),e5(r,new tS(e),e.bypassAuthState)}/**
1312 * @license
1313 * Copyright 2020 Google LLC
1314 *
1315 * Licensed under the Apache License, Version 2.0 (the "License");
1316 * you may not use this file except in compliance with the License.
1317 * You may obtain a copy of the License at
1318 *
1319 *   http://www.apache.org/licenses/LICENSE-2.0
1320 *
1321 * Unless required by applicable law or agreed to in writing, software
1322 * distributed under the License is distributed on an "AS IS" BASIS,
1323 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1324 * See the License for the specific language governing permissions and
1325 * limitations under the License.
1326 */class tH{constructor(e,t,r,n,i=!1){this.auth=e,this.resolver=r,this.user=n,this.bypassAuthState=i,this.pendingPromise=null,this.eventManager=null,this.filter=Array.isArray(t)?t:[t]}execute(){return new Promise(async(e,t)=>{this.pendingPromise={resolve:e,reject:t};try{this.eventManager=await this.resolver._initialize(this.auth),await this.onExecution(),this.eventManager.registerConsumer(this)}catch(e){this.reject(e)}})}async onAuthEvent(e){let{urlResponse:t,sessionId:r,postBody:n,tenantId:i,error:a,type:s}=e;if(a){this.reject(a);return}let o={auth:this.auth,requestUri:t,sessionId:r,tenantId:i||void 0,postBody:n||void 0,user:this.user,bypassAuthState:this.bypassAuthState};try{this.resolve(await this.getIdpTask(s)(o))}catch(e){this.reject(e)}}onError(e){this.reject(e)}getIdpTask(e){switch(e){case"signInViaPopup":case"signInViaRedirect":return tI;case"linkViaPopup":case"linkViaRedirect":return tC;case"reauthViaPopup":case"reauthViaRedirect":return tT;default:d(this.auth,"internal-error")}}resolve(e){var t,r;t=this.pendingPromise,r="Pending promise was never set",t||_(r),this.pendingPromise.resolve(e),this.unregisterAndCleanUp()}reject(e){var t,r;t=this.pendingPromise,r="Pending promise was never set",t||_(r),this.pendingPromise.reject(e),this.unregisterAndCleanUp()}unregisterAndCleanUp(){this.eventManager&&this.eventManager.unregisterConsumer(this),this.pendingPromise=null,this.cleanUp()}}/**
1327 * @license
1328 * Copyright 2020 Google LLC
1329 *
1330 * Licensed under the Apache License, Version 2.0 (the "License");
1331 * you may not use this file except in compliance with the License.
1332 * You may obtain a copy of the License at
1333 *
1334 *   http://www.apache.org/licenses/LICENSE-2.0
1335 *
1336 * Unless required by applicable law or agreed to in writing, software
1337 * distributed under the License is distributed on an "AS IS" BASIS,
1338 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1339 * See the License for the specific language governing permissions and
1340 * limitations under the License.
1341 */let tW=new P(2e3,1e4);async function tA(e,t,r){if((0,i.rh)(e.app))return Promise.reject(m(e,"operation-not-supported-in-this-environment"));let n=ek(e);!function(e,t,r){if(!(t instanceof r))throw r.name!==t.constructor.name&&d(e,"argument-error"),p(e,"argument-error",`Type of ${t.constructor.name} does not match expected instance.Did you pass a reference from a different Auth SDK?`)}(e,t,e$);let a=tR(n,r);return new tD(n,"signInViaPopup",t,a).executeNotNull()}class tD extends tH{constructor(e,t,r,n,i){super(e,t,n,i),this.provider=r,this.authWindow=null,this.pollId=null,tD.currentPopupAction&&tD.currentPopupAction.cancel(),tD.currentPopupAction=this}async executeNotNull(){let e=await this.execute();return v(e,this.auth,"internal-error"),e}async onExecution(){var e,t;e=1===this.filter.length,t="Popup operations only handle one event",e||_(t);let r=tc();this.authWindow=await this.resolver._openPopup(this.auth,this.provider,this.filter[0],r),this.authWindow.associatedEvent=r,this.resolver._originValidation(this.auth).catch(e=>{this.reject(e)}),this.resolver._isIframeWebStorageSupported(this.auth,e=>{e||this.reject(m(this.auth,"web-storage-unsupported"))}),this.pollUserCancellation()}get eventId(){var e;return(null===(e=this.authWindow)||void 0===e?void 0:e.associatedEvent)||null}cancel(){this.reject(m(this.auth,"cancelled-popup-request"))}cleanUp(){this.authWindow&&this.authWindow.close(),this.pollId&&window.clearTimeout(this.pollId),this.authWindow=null,this.pollId=null,tD.currentPopupAction=null}pollUserCancellation(){let e=()=>{var t,r;if(null===(r=null===(t=this.authWindow)||void 0===t?void 0:t.window)||void 0===r?void 0:r.closed){this.pollId=window.setTimeout(()=>{this.pollId=null,this.reject(m(this.auth,"popup-closed-by-user"))},8e3);return}this.pollId=window.setTimeout(e,tW.get())};e()}}tD.currentPopupAction=null;let tU=new Map;class tL extends tH{constructor(e,t,r=!1){super(e,["signInViaRedirect","linkViaRedirect","reauthViaRedirect","unknown"],t,void 0,r),this.eventId=null}async execute(){let e=tU.get(this.auth._key());if(!e){try{let t=await tO(this.resolver,this.auth)?await super.execute():null;e=()=>Promise.resolve(t)}catch(t){e=()=>Promise.reject(t)}tU.set(this.auth._key(),e)}return this.bypassAuthState||tU.set(this.auth._key(),()=>Promise.resolve(null)),e()}async onAuthEvent(e){if("signInViaRedirect"===e.type)return super.onAuthEvent(e);
1341if("unknown"===e.type){this.resolve(null);return}if(e.eventId){let t=await this.auth._redirectUserForId(e.eventId);if(t)return this.user=t,super.onAuthEvent(e);this.resolve(null)}}async onExecution(){}cleanUp(){}}async function tO(e,t){let r=ei("pendingRedirect",t.config.apiKey,t.name),n=er(e._redirectPersistence);if(!await n._isAvailable())return!1;let i=await n._get(r)==="true";return await n._remove(r),i}function tN(e,t){tU.set(e._key(),t)}async function tK(e,t,r=!1){if((0,i.rh)(e.app))return Promise.reject(y(e));let n=ek(e),a=tR(n,t),s=new tL(n,a,r),o=await s.execute();return o&&!r&&(delete o.user._redirectEventId,await n._persistUserIfCurrent(o.user),await n._setRedirectUser(null,t)),o}class tx{constructor(e){this.auth=e,this.cachedEventUids=new Set,this.consumers=new Set,this.queuedRedirectEvent=null,this.hasHandledPotentialRedirect=!1,this.lastProcessedEventTime=Date.now()}registerConsumer(e){this.consumers.add(e),this.queuedRedirectEvent&&this.isEventForConsumer(this.queuedRedirectEvent,e)&&(this.sendToConsumer(this.queuedRedirectEvent,e),this.saveEventToCache(this.queuedRedirectEvent),this.queuedRedirectEvent=null)}unregisterConsumer(e){this.consumers.delete(e)}onEvent(e){if(this.hasEventBeenHandled(e))return!1;let t=!1;return this.consumers.forEach(r=>{this.isEventForConsumer(e,r)&&(t=!0,this.sendToConsumer(e,r),this.saveEventToCache(e))}),this.hasHandledPotentialRedirect||!function(e){switch(e.type){case"signInViaRedirect":case"linkViaRedirect":case"reauthViaRedirect":return!0;case"unknown":return tF(e);default:return!1}}(e)||(this.hasHandledPotentialRedirect=!0,t||(this.queuedRedirectEvent=e,t=!0)),t}sendToConsumer(e,t){var r;if(e.error&&!tF(e)){let n=(null===(r=e.error.code)||void 0===r?void 0:r.split("auth/")[1])||"internal-error";t.onError(m(this.auth,n))}else t.onAuthEvent(e)}isEventForConsumer(e,t){let r=null===t.eventId||!!e.eventId&&e.eventId===t.eventId;return t.filter.includes(e.type)&&r}hasEventBeenHandled(e){return Date.now()-this.lastProcessedEventTime>=6e5&&this.cachedEventUids.clear(),this.cachedEventUids.has(tM(e))}saveEventToCache(e){this.cachedEventUids.add(tM(e)),this.lastProcessedEventTime=Date.now()}}function tM(e){return[e.type,e.eventId,e.sessionId,e.tenantId].filter(e=>e).join("-")}function tF({type:e,error:t}){return"unknown"===e&&(null==t?void 0:t.code)==="auth/no-auth-event"}/**
1342 * @license
1343 * Copyright 2020 Google LLC
1344 *
1345 * Licensed under the Apache License, Version 2.0 (the "License");
1346 * you may not use this file except in compliance with the License.
1347 * You may obtain a copy of the License at
1348 *
1349 *   http://www.apache.org/licenses/LICENSE-2.0
1350 *
1351 * Unless required by applicable law or agreed to in writing, software
1352 * distributed under the License is distributed on an "AS IS" BASIS,
1353 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1354 * See the License for the specific language governing permissions and
1355 * limitations under the License.
1356 */async function tB(e,t={}){return T(e,"GET","/v1/projects",t)}/**
1357 * @license
1358 * Copyright 2020 Google LLC
1359 *
1360 * Licensed under the Apache License, Version 2.0 (the "License");
1361 * you may not use this file except in compliance with the License.
1362 * You may obtain a copy of the License at
1363 *
1364 *   http://www.apache.org/licenses/LICENSE-2.0
1365 *
1366 * Unless required by applicable law or agreed to in writing, software
1367 * distributed under the License is distributed on an "AS IS" BASIS,
1368 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1369 * See the License for the specific language governing permissions and
1370 * limitations under the License.
1371 */let tV=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,tq=/^https?/;async function tj(e){if(e.config.emulator)return;let{authorizedDomains:t}=await tB(e);for(let e of t)try{if(function(e){let t=w(),{protocol:r,hostname:n}=new URL(t);if(e.startsWith("chrome-extension://")){let i=new URL(e);return""===i.hostname&&""===n?"chrome-extension:"===r&&e.replace("chrome-extension://","")===t.replace("chrome-extension://",""):"chrome-extension:"===r&&i.hostname===n}if(!tq.test(r))return!1;if(tV.test(e))return n===e;let i=e.replace(/\./g,"\\.");return RegExp("^(.+\\."+i+"|"+i+")$","i").test(n)}(e))return}catch(e){}d(e,"unauthorized-domain")}/**
1372 * @license
1373 * Copyright 2020 Google LLC.
1374 *
1375 * Licensed under the Apache License, Version 2.0 (the "License");
1376 * you may not use this file except in compliance with the License.
1377 * You may obtain a copy of the License at
1378 *
1379 *   http://www.apache.org/licenses/LICENSE-2.0
1380 *
1381 * Unless required by applicable law or agreed to in writing, software
1382 * distributed under the License is distributed on an "AS IS" BASIS,
1383 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1384 * See the License for the specific language governing permissions and
1385 * limitations under the License.
1386 */let tG=new P(3e4,6e4);function tz(){let e=tl().___jsl;if(null==e?void 0:e.H){for(let t of Object.keys(e.H))if(e.H[t].r=e.H[t].r||[],e.H[t].L=e.H[t].L||[],e.H[t].r=[...e.H[t].L],e.CP)for(let t=0;t<e.CP.length;t++)e.CP[t]=null}}let t$=null,tJ=new P(5e3,15e3),tQ={style:{position:"absolute",top:"-100px",width:"1px",height:"1px"},"aria-hidden":"true",tabindex:"-1"},tX=new Map([["identitytoolkit.googleapis.com","p"],["staging-identitytoolkit.sandbox.googleapis.com","s"],["test-identitytoolkit.sandbox.googleapis.com","t"]]);async function tY(e){let t=await (t$=t$||new Promise((t,r)=>{var n,i,a,s;function o(){tz(),gapi.load("gapi.iframes",{callback:()=>{t(gapi.iframes.getContext())},ontimeout:()=>{tz(),r(m(e,"network-request-failed"))},timeout:tG.get()})}if(null===(i=null===(n=tl().gapi)||void 0===n?void 0:n.iframes)||void 0===i?void 0:i.Iframe)t(gapi.iframes.getContext());else if(null===(a=tl().gapi)||void 0===a?void 0:a.load)o();else{let t=eE("iframefcb");return tl()[t]=()=>{gapi.load?o():r(m(e,"network-request-failed"))},(s=`${eb.gapiScript}?onload=${t}`,eb.loadJS(s)).catch(e=>r(e))}}).catch(e=>{throw t$=null,e})),r=tl().gapi;return v(r,e,"internal-error"),t.open({where:document.body,url:function(e){let t=e.config;v(t.authDomain,e,"auth-domain-config-required");let r=t.emulator?b(t,"emulator/auth/iframe"):`https://${e.config.authDomain}/__/auth/iframe`,n={apiKey:t.apiKey,appName:e.name,v:i.Jn},s=tX.get(e.config.apiHost);s&&(n.eid=s);let o=e._getFrameworks();return o.length&&(n.fw=o.join(",")),`${r}?${(0,a.xO)(n).slice(1)}`}(e),messageHandlersFilter:r.iframes.CROSS_ORIGIN_IFRAMES_FILTER,attributes:tQ,dontclear:!0},t=>new Promise(async(r,n)=>{await t.restyle({setHideOnLeave:!1});let i=m(e,"network-request-failed"),a=tl().setTimeout(()=>{n(i)},tJ.get());function s(){tl().clearTimeout(a),r(t)}t.ping(s).then(s,()=>{n(i)})}))}/**
1387 * @license
1388 * Copyright 2020 Google LLC.
1389 *
1390 * Licensed under the Apache License, Version 2.0 (the "License");
1391 * you may not use this file except in compliance with the License.
1392 * You may obtain a copy of the License at
1393 *
1394 *   http://www.apache.org/licenses/LICENSE-2.0
1395 *
1396 * Unless required by applicable law or agreed to in writing, software
1397 * distributed under the License is distributed on an "AS IS" BASIS,
1398 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1399 * See the License for the specific language governing permissions and
1400 * limitations under the License.
1401 */let tZ={location:"yes",resizable:"yes",statusbar:"yes",toolbar:"no"};class t1{constructor(e){this.window=e,this.associatedEvent=null}close(){if(this.window)try{this.window.close()}catch(e){}}}let t0=encodeURIComponent("fac");async function t4(e,t,r,n,s,o){v(e.config.authDomain,e,"auth-domain-config-required"),v(e.config.apiKey,e,"invalid-api-key");let c={apiKey:e.config.apiKey,appName:e.name,authType:r,redirectUrl:n,v:i.Jn,eventId:s};if(t instanceof e$)for(let[r,n]of(t.setDefaultLanguage(e.languageCode),c.providerId=t.providerId||"",(0,a.xb)(t.getCustomParameters())||(c.customParameters=JSON.stringify(t.getCustomParameters())),Object.entries(o||{})))c[r]=n;if(t instanceof eJ){let e=t.getScopes().filter(e=>""!==e);e.length>0&&(c.scopes=e.join(","))}for(let t of(e.tenantId&&(c.tid=e.tenantId),Object.keys(c)))void 0===c[t]&&delete c[t];let u=await e._getAppCheckToken(),l=u?`#${t0}=${encodeURIComponent(u)}`:"";return`${function({config:e}){return e.emulator?b(e,"emulator/auth/handler"):`https://${e.authDomain}/__/auth/handler`}(e)}?${(0,a.xO)(c).slice(1)}${l}`}/**
1402 * @license
1403 * Copyright 2020 Google LLC
1404 *
1405 * Licensed under the Apache License, Version 2.0 (the "License");
1406 * you may not use this file except in compliance with the License.
1407 * You may obtain a copy of the License at
1408 *
1409 *   http://www.apache.org/licenses/LICENSE-2.0
1410 *
1411 * Unless required by applicable law or agreed to in writing, software
1412 * distributed under the License is distributed on an "AS IS" BASIS,
1413 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1414 * See the License for the specific language governing permissions and
1415 * limitations under the License.
1416 */let t2="webStorageSupport";class t5{constructor(){this.eventManagers={},this.iframes={},this.originValidationPromises={},this._redirectPersistence=ts,this._completeRedirectFn=tK,this._overrideRedirectResult=tN}async _openPopup(e,t,r,n){var i,s,o;s=null===(i=this.eventManagers[e._key()])||void 0===i?void 0:i.manager,o="_initialize() not called before _openPopup()",s||_(o);let c=await t4(e,t,r,w(),n);return function(e,t,r,n=500,i=600){let s=Math.max((window.screen.availHeight-i)/2,0).toString(),o=Math.max((window.screen.availWidth-n)/2,0).toString(),c="",u=Object.assign(Object.assign({},tZ),{width:n.toString(),height:i.toString(),top:s,left:o}),l=(0,a.z$)().toLowerCase();r&&(c=eu(l)?"_blank":r),eo(l)&&(t=t||"http://localhost",u.scrollbars="yes");let h=Object.entries(u).reduce((e,[t,r])=>`${e}${t}=${r},`,"");if(function(e=(0,a.z$)()){var t;return em(e)&&!!(null===(t=window.navigator)||void 0===t?void 0:t.standalone)}(l)&&"_self"!==c)return function(e,t){let r=document.createElement("a");r.href=e,r.target=t;let n=document.createEvent("MouseEvent");n.initMouseEvent("click",!0,!0,window,1,0,0,0,0,!1,!1,!1,!1,1,null),r.dispatchEvent(n)}(t||"",c),new t1(null);let g=window.open(t||"",c,h);v(g,e,"popup-blocked");try{g.focus()}catch(e){}return new t1(g)}(e,c,tc())}async _openRedirect(e,t,r,n){var i;return await this._originValidation(e),i=await t4(e,t,r,w(),n),tl().location.href=i,new Promise(()=>{})}_initialize(e){let t=e._key();if(this.eventManagers[t]){var r;let{manager:e,promise:n}=this.eventManagers[t];return e?Promise.resolve(e):(r="If manager is not set, promise should be",n||_(r),n)}let n=this.initAndGetManager(e);return this.eventManagers[t]={promise:n},n.catch(()=>{delete this.eventManagers[t]}),n}async initAndGetManager(e){let t=await tY(e),r=new tx(e);return t.register("authEvent",t=>(v(null==t?void 0:t.authEvent,e,"invalid-auth-event"),{status:r.onEvent(t.authEvent)?"ACK":"ERROR"}),gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER),this.eventManagers[e._key()]={manager:r},this.iframes[e._key()]=t,r}_isIframeWebStorageSupported(e,t){this.iframes[e._key()].send(t2,{type:t2},r=>{var n;let i=null===(n=null==r?void 0:r[0])||void 0===n?void 0:n[t2];void 0!==i&&t(!!i),d(e,"internal-error")},gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER)}_originValidation(e){let t=e._key();return this.originValidationPromises[t]||(this.originValidationPromises[t]=tj(e)),this.originValidationPromises[t]}get _shouldInitProactively(){return ep()||ec()||em()}}class t3{constructor(e){this.factorId=e}_process(e,t,r){switch(t.type){case"enroll":return this._finalizeEnroll(e,t.credential,r);case"signin":return this._finalizeSignIn(e,t.credential);default:return _("unexpected MultiFactorSessionType")}}}class t6 extends t3{constructor(e){super("phone"),this.credential=e}static _fromCredential(e){return new t6(e)}_finalizeEnroll(e,t,r){return T(e,"POST","/v2/accounts/mfaEnrollment:finalize",I(e,{idToken:t,displayName:r,phoneVerificationInfo:this.credential._makeVerificationRequest()}))}_finalizeSignIn(e,t){return T(e,"POST","/v2/accounts/mfaSignIn:finalize",I(e,{mfaPendingCredential:t,phoneVerificationInfo:this.credential._makeVerificationRequest()}))}}class t9{constructor(){}static assertion(e){return t6._fromCredential(e)}}t9.FACTOR_ID="phone";class t8{static assertionForEnrollment(e,t){return t7._fromSecret(e,t)}static assertionForSignIn(e,t){return t7._fromEnrollmentId(e,t)}static async generateSecret(e){var t,r;v(void 0!==(null===(t=e.user)||void 0===t?void 0:t.auth),"internal-error");let n=await T(r=e.user.auth,"POST","/v2/accounts/mfaEnrollment:start",I(r,{idToken:e.credential,totpEnrollmentInfo:{}}));return re._fromStartTotpMfaEnrollmentResponse(n,e.user.auth)}}t8.FACTOR_ID="totp";class t7 extends t3{constructor(e,t,r){super("totp"),this.otp=e,this.enrollmentId=t,this.secret=r}static _fromSecret(e,t){return new t7(t,void 0,e)}static _fromEnrollmentId(e,t){return new t7(t,e)}async _finalizeEnroll(e,t,r){return v(void 0!==this.secret,e,"argument-error"),T(e,"POST","/v2/accounts/mfaEnrollment:finalize",I(e,{idToken:t,displayName:r,totpVerificationInfo:this.secret._makeTotpVerificationInfo(this.otp)}))}async _finalizeSignIn(e,t){v(void 0!==this.enrollmentId&&void 0!==this.otp,e,"argument-error");let r={verificationCode:this.otp};return T(e,"POST","/v2/accounts/mfaSignIn:finalize",I(e,{mfaPendingCredential:t,mfaEnrollmentId:this.enrollmentId,totpVerificationInfo:r}))}}class re{constructor(e,t,r,n,i,a,s){this.sessionInfo=a,this.auth=s,this.secretKey=e,this.hashingAlgorithm=t,this.co
1416deLength=r,this.codeIntervalSeconds=n,this.enrollmentCompletionDeadline=i}static _fromStartTotpMfaEnrollmentResponse(e,t){return new re(e.totpSessionInfo.sharedSecretKey,e.totpSessionInfo.hashingAlgorithm,e.totpSessionInfo.verificationCodeLength,e.totpSessionInfo.periodSec,new Date(e.totpSessionInfo.finalizeEnrollmentTime).toUTCString(),e.totpSessionInfo.sessionInfo,t)}_makeTotpVerificationInfo(e){return{sessionInfo:this.sessionInfo,verificationCode:e}}generateQrCodeUrl(e,t){var r;let n=!1;return(rt(e)||rt(t))&&(n=!0),n&&(rt(e)&&(e=(null===(r=this.auth.currentUser)||void 0===r?void 0:r.email)||"unknownuser"),rt(t)&&(t=this.auth.name)),`otpauth://totp/${t}:${e}?secret=${this.secretKey}&issuer=${t}&algorithm=${this.hashingAlgorithm}&digits=${this.codeLength}`}}function rt(e){return void 0===e||(null==e?void 0:e.length)===0}var rr="@firebase/auth",rn="1.7.9";/**
1417 * @license
1418 * Copyright 2020 Google LLC
1419 *
1420 * Licensed under the Apache License, Version 2.0 (the "License");
1421 * you may not use this file except in compliance with the License.
1422 * You may obtain a copy of the License at
1423 *
1424 *   http://www.apache.org/licenses/LICENSE-2.0
1425 *
1426 * Unless required by applicable law or agreed to in writing, software
1427 * distributed under the License is distributed on an "AS IS" BASIS,
1428 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1429 * See the License for the specific language governing permissions and
1430 * limitations under the License.
1431 */class ri{constructor(e){this.auth=e,this.internalListeners=new Map}getUid(){var e;return this.assertAuthConfigured(),(null===(e=this.auth.currentUser)||void 0===e?void 0:e.uid)||null}async getToken(e){return(this.assertAuthConfigured(),await this.auth._initializationPromise,this.auth.currentUser)?{accessToken:await this.auth.currentUser.getIdToken(e)}:null}addAuthTokenListener(e){if(this.assertAuthConfigured(),this.internalListeners.has(e))return;let t=this.auth.onIdTokenChanged(t=>{e((null==t?void 0:t.stsTokenManager.accessToken)||null)});this.internalListeners.set(e,t),this.updateProactiveRefresh()}removeAuthTokenListener(e){this.assertAuthConfigured();let t=this.internalListeners.get(e);t&&(this.internalListeners.delete(e),t(),this.updateProactiveRefresh())}assertAuthConfigured(){v(this.auth._initializationPromise,"dependent-sdk-initialized-before-auth")}updateProactiveRefresh(){this.internalListeners.size>0?this.auth._startProactiveRefresh():this.auth._stopProactiveRefresh()}}let ra=(0,a.Pz)("authIdTokenMaxAge")||300,rs=null,ro=e=>async t=>{let r=t&&await t.getIdTokenResult(),n=r&&(new Date().getTime()-Date.parse(r.issuedAtTime))/1e3;if(n&&n>ra)return;let i=null==r?void 0:r.token;rs!==i&&(rs=i,await fetch(e,{method:i?"POST":"DELETE",headers:i?{Authorization:`Bearer ${i}`}:{}}))};function rc(e=(0,i.Mq)()){let t=(0,i.qX)(e,"auth");if(t.isInitialized())return t.getImmediate();let r=/**
1432 * @license
1433 * Copyright 2020 Google LLC
1434 *
1435 * Licensed under the Apache License, Version 2.0 (the "License");
1436 * you may not use this file except in compliance with the License.
1437 * You may obtain a copy of the License at
1438 *
1439 *   http://www.apache.org/licenses/LICENSE-2.0
1440 *
1441 * Unless required by applicable law or agreed to in writing, software
1442 * distributed under the License is distributed on an "AS IS" BASIS,
1443 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1444 * See the License for the specific language governing permissions and
1445 * limitations under the License.
1446 */function(e,t){let r=(0,i.qX)(e,"auth");if(r.isInitialized()){let e=r.getImmediate(),n=r.getOptions();if((0,a.vZ)(n,null!=t?t:{}))return e;d(e,"already-initialized")}return r.initialize({options:t})}(e,{popupRedirectResolver:t5,persistence:[tP,ta,ts]}),n=(0,a.Pz)("authTokenSyncURL");if(n&&"boolean"==typeof isSecureContext&&isSecureContext){let e=new URL(n,location.origin);if(location.origin===e.origin){var s,o;let t=ro(e.toString());s=()=>t(r.currentUser),(0,a.m9)(r).beforeAuthStateChanged(t,s),o=e=>t(e),(0,a.m9)(r).onIdTokenChanged(o,void 0,void 0)}}let c=(0,a.q4)("auth");return c&&function(e,t,r){let n=ek(e);v(n._canInitEmulator,n,"emulator-config-failed"),v(/^https?:\/\//.test(t),n,"invalid-emulator-scheme");let i=eT(t),{host:a,port:s}=function(e){let t=eT(e),r=/(\/\/)?([^?#/]+)/.exec(e.substr(t.length));if(!r)return{host:"",port:null};let n=r[2].split("@").pop()||"",i=/^(\[[^\]]+\])(:|$)/.exec(n);if(i){let e=i[1];return{host:e,port:eC(n.substr(e.length+1))}}{let[e,t]=n.split(":");return{host:e,port:eC(t)}}}(t),o=null===s?"":`:${s}`;n.config.emulator={url:`${i}//${a}${o}/`},n.settings.appVerificationDisabledForTesting=!0,n.emulatorConfig=Object.freeze({host:a,port:s,protocol:i.replace(":",""),options:Object.freeze({disableWarnings:!1})}),function(){function e(){let e=document.createElement("p"),t=e.style;e.innerText="Running in emulator mode. Do not use with production credentials.",t.position="fixed",t.width="100%",t.backgroundColor="#ffffff",t.border=".1em solid #000000",t.color="#b50000",t.bottom="0px",t.left="0px",t.margin="0px",t.zIndex="10000",t.textAlign="center",e.classList.add("firebase-emulator-warning"),document.body.appendChild(e)}"undefined"!=typeof console&&"function"==typeof console.info&&console.info("WARNING: You are using the Auth Emulator, which is intended for local testing only.  Do not use with production credentials."),"undefined"!=typeof window&&"undefined"!=typeof document&&("loading"===document.readyState?window.addEventListener("DOMContentLoaded",e):e())}()}(r,`http://${c}`),r}eb={loadJS:e=>
1446new Promise((t,r)=>{var n,i;let a=document.createElement("script");a.setAttribute("src",e),a.onload=t,a.onerror=e=>{let t=m("internal-error");t.customData=e,r(t)},a.type="text/javascript",a.charset="UTF-8",(null!==(i=null===(n=document.getElementsByTagName("head"))||void 0===n?void 0:n[0])&&void 0!==i?i:document).appendChild(a)}),gapiScript:"https://apis.google.com/js/api.js",recaptchaV2Script:"https://www.google.com/recaptcha/api.js",recaptchaEnterpriseScript:"https://www.google.com/recaptcha/enterprise.js?render="},n="Browser",(0,i.Xd)(new c.wA("auth",(e,{options:t})=>{let r=e.getProvider("app").getImmediate(),i=e.getProvider("heartbeat"),a=e.getProvider("app-check-internal"),{apiKey:s,authDomain:o}=r.options;v(s&&!s.includes(":"),"invalid-api-key",{appName:r.name});let c=new ew(r,i,a,{apiKey:s,authDomain:o,clientPlatform:n,apiHost:"identitytoolkit.googleapis.com",tokenApiHost:"securetoken.googleapis.com",apiScheme:"https",sdkClientVersion:ey(n)});return function(e,t){let r=(null==t?void 0:t.persistence)||[],n=(Array.isArray(r)?r:[r]).map(er);(null==t?void 0:t.errorMap)&&e._updateErrorMap(t.errorMap),e._initializeWithPersistence(n,null==t?void 0:t.popupRedirectResolver)}(c,t),c},"PUBLIC").setInstantiationMode("EXPLICIT").setInstanceCreatedCallback((e,t,r)=>{e.getProvider("auth-internal").initialize()})),(0,i.Xd)(new c.wA("auth-internal",e=>new ri(ek(e.getProvider("auth").getImmediate())),"PRIVATE").setInstantiationMode("EXPLICIT")),(0,i.KN)(rr,rn,/**
1447 * @license
1448 * Copyright 2020 Google LLC
1449 *
1450 * Licensed under the Apache License, Version 2.0 (the "License");
1451 * you may not use this file except in compliance with the License.
1452 * You may obtain a copy of the License at
1453 *
1454 *   http://www.apache.org/licenses/LICENSE-2.0
1455 *
1456 * Unless required by applicable law or agreed to in writing, software
1457 * distributed under the License is distributed on an "AS IS" BASIS,
1458 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1459 * See the License for the specific language governing permissions and
1460 * limitations under the License.
1461 */function(e){switch(e){case"Node":return"node";case"ReactNative":return"rn";case"Worker":return"webworker";case"Cordova":return"cordova";case"WebExtension":return"web-extension";default:return}}(n)),(0,i.KN)(rr,rn,"esm2017")},109:function(e,t,r){"use strict";r.d(t,{EK:function(){return Q},hJ:function(){return iz},oe:function(){return aq},JU:function(){return i$},Yp:function(){return aG},QT:function(){return ax},PL:function(){return aF},ad:function(){return iY},LV:function(){return iX},b9:function(){return aT},Xo:function(){return aS},IO:function(){return ak},Bt:function(){return az},pl:function(){return aB},TQ:function(){return aH},r7:function(){return aV},ar:function(){return ab}});var n,i,a,s,o,c,u,l,h,g,d,m,p,y,f=r(2238),v=r(8463),_=r(3333),w=r(4444),k="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},P={};(function(){function e(){this.blockSize=-1,this.blockSize=64,this.g=[,,,,],this.B=Array(this.blockSize),this.o=this.h=0,this.s()}function t(e,t,r){r||(r=0);var n=Array(16);if("string"==typeof t)for(var i=0;16>i;++i)n[i]=t.charCodeAt(r++)|t.charCodeAt(r++)<<8|t.charCodeAt(r++)<<16|t.charCodeAt(r++)<<24;else for(i=0;16>i;++i)n[i]=t[r++]|t[r++]<<8|t[r++]<<16|t[r++]<<24;t=e.g[0],r=e.g[1],i=e.g[2];var a=e.g[3],s=t+(a^r&(i^a))+n[0]+3614090360&4294967295;s=a+(i^(t=r+(s<<7&4294967295|s>>>25))&(r^i))+n[1]+3905402710&4294967295,s=i+(r^(a=t+(s<<12&4294967295|s>>>20))&(t^r))+n[2]+606105819&4294967295,s=r+(t^(i=a+(s<<17&4294967295|s>>>15))&(a^t))+n[3]+3250441966&4294967295,s=t+(a^(r=i+(s<<22&4294967295|s>>>10))&(i^a))+n[4]+4118548399&4294967295,s=a+(i^(t=r+(s<<7&4294967295|s>>>25))&(r^i))+n[5]+1200080426&4294967295,s=i+(r^(a=t+(s<<12&4294967295|s>>>20))&(t^r))+n[6]+2821735955&4294967295,s=r+(t^(i=a+(s<<17&4294967295|s>>>15))&(a^t))+n[7]+4249261313&4294967295,s=t+(a^(r=i+(s<<22&4294967295|s>>>10))&(i^a))+n[8]+1770035416&4294967295,s=a+(i^(t=r+(s<<7&4294967295|s>>>25))&(r^i))+n[9]+2336552879&4294967295,s=i+(r^(a=t+(s<<12&4294967295|s>>>20))&(t^r))+n[10]+4294925233&4294967295,s=r+(t^(i=a+(s<<17&4294967295|s>>>15))&(a^t))+n[11]+2304563134&4294967295,s=t+(a^(r=i+(s<<22&4294967295|s>>>10))&(i^a))+n[12]+1804603682&4294967295,s=a+(i^(t=r+(s<<7&4294967295|s>>>25))&(r^i))+n[13]+4254626195&4294967295,s=i+(r^(a=t+(s<<12&4294967295|s>>>20))&(t^r))+n[14]+2792965006&4294967295,s=r+(t^(i=a+(s<<17&4294967295|s>>>15))&(a^t))+n[15]+1236535329&4294967295,r=i+(s<<22&4294967295|s>>>10),s=t+(i^a&(r^i))+n[1]+4129170786&4294967295,t=r+(s<<5&4294967295|s>>>27),s=a+(r^i&(t^r))+n[6]+3225465664&4294967295,a=t+(s<<9&4294967295|s>>>23),s=i+(t^r&(a^t))+n[11]+643717713&4294967295,i=a+(s<<14&4294967295|s>>>18),s=r+(a^t&(i^a))+n[0]+3921069994&4294967295,r=i+(s<<20&4294967295|s>>>12),s=t+(i^a&(r^i))+n[5]+3593408605&4294967295,t=r+(s<<5&4294967295|s>>>27),s=a+(r^i&(t^r))+n[10]+38016083&4294967295,a=t+(s<<9&4294967295|s>>>23),s=i+(t^r&(a^t))+n[15]+3634488961&4294967295,i=a+(s<<14&4294967295|s>>>18),s=r+(a^t&(i^a))+n[4]+3889429448&4294967295,r=i+(s<<20&4294967295|s>>>12),s=t+(i^a&(r^i))+n[9]+568446438&4294967295,t=r+(s<<5&4294967295|s>>>27),s=a+(r^i&(t^r))+n[14]+3275163606&4294967295,a=t+(s<<9&4294967295|s>>>23),s=i+(t^r&(a^t))+n[3]+4107603335&4294967295,i=a+(s<<14&4294967295|s>>>18),s=r+(a^t&(i^a))+n[8]+1163531501&4294967295,r=i+(s<<20&4294967295|s>>>12),s=t+(i^a&(r^i))+n[13]+2850285829&4294967295,t=r+(s<<5&4294967295|s>>>27),s=a+(r^i&(t^r))+n[2]+4243563512&4294967295,a=t+(s<<9&4294967295|s>>>23),s=i+(t^r&(a^t))+n[7]+1735328473&4294967295,i=a+(s<<14&4294967295|s>>>18),s=r+(a^t&(i^a))+n[12]+2368359562&4294967295,s=t+((r=i+(s<<20&4294967295|s>>>12))^i^a)+n[5]+4294588738&4294967295,s=a+((t=r+(s<<4&4294967295|s>>>28))^r^i)+n[8]+2272392833&4294967295,s=i+((a=t+(s<<11&4294967295|s>>>21))^t^r)+n[11]+1839030562&4294967295,s=r+((i=a+(s<<16&4294967295|s>>>16))^a^t)+n[14]+4259657740&4294967295,s=t+((r=i+(s<<23&4294967295|s>>>9))^i^a)+n[1]+2763975236&4294967295,s=a+((t=r+(s<<4&4294967295|s>>>28))^r^i)+n[4]+1272893353&4294967295,s=i+((a=t+(s<<11&4294967295|s>>>21))^t^r)+n[7]+4139469664&4294967295,s=r+((i=a+(s<<16&4294967295|s>>>16))^a^t)+n[10]+3200236656&4294967295,s=t+((r=i+(s<<23&4294967295|s>>>9))^i^a)+n[13]+681279174&4294967295,s=a+((t=r+(s<<4&4294967295|s>>>28))^r^i)+n[0]+3936430074&4294967295,s=i+((a=t+(s<<11&4294967295|s>>>21))^t^r)+n[3]+3572445317&4294967295,s=r+((i=a+(s<<16&4294967295|s>>>16))^a^t)+n[6]+76029189&4294967295,s=t+((r=i+(s<<23&4294967295|s>>>9))^i^a)+n[9]+3654602809&4294967295,s=a+((t=r+(s<<4&4294967295|s>>>28))^r^i)+n[12]+3873151461&4294967295,s=i+((a=t+(s<<11&4294967295|s>>>21))^t^r)+n[15]+530742520&4294967295,s=r+((i=a+(s<<16&4294967295|s>>>16))^a^t)+n[2]+3299628645&4294967295,r=i+(s<<23&4294967295|s>>>9),s=t+(i^(r|~a))+n[0]+4096336452&4294967295,t=r+(s<<6&4294967295|s>>>26),s=a+(r^(t|~i))+n[7]+1126891415&4294967295,a=t+(s<<10&4294967295|s>>>22),s=i+(t^(a|~r))+n[14]+2878612391&4294967295,i=a+(s<<15&4294967295|s>>>17),s=r+(a^(i|~t))+n[5]+4237533241&4294967295,r=i+(s<<21&4294967295|s>>>11),s=t+(i^(r|~a))+n[12]+1700485571&4294967295,t=r+(s<<6&4294967295|s>>>26),s=a+(r^(t|~i))+n[3]+2399980690&4294967295,a=t+(s<<10&4294967295|s>>>22),s=i+(t^(a|~r))+n[10]+4293915773&4294967295,i=a+(s<<15&4294967295|s>>>17),s=r+(a^(i|~t))+n[1]+2240044497&4294967295,r=i+(s<<21&4294967295|s>>>11),s=t+(i^(r|~a))+n[8]+1873313359&4294967295,t=r+(s<<6&4294967295|s>>>26),s=a+(r^(t|~i))+n[15]+4264355552&4294967295,a=t+(s<<10&4294967295|s>>>22),s=i+(t^(a|~r))+n[6]+2734768916&4294967295,i=a+(s<<15&4294967295|s>>>17),s=r+(a^(i|~t))+n[13]+1309151649&4294967295,r=i+(s<<21&4294967295|s>>>11),s=t+(i^(r|~a))+n[4]+4149444226&4294967295,t=r+(s<<6&4294967295|s>>>26),s=a+(r^(t|~i))+n[11]+3174756917&4294967295,a=t+(s<<10&4294967295|s>>>22),s=i+(t^(a|~r))+n[2]+718787259&4294967295,i=a+(s<<15&4294967295|s>>>17),s=r+(a^(i|~t))+n[9]+3951481745&4294967295,e.g[0]=e.g[0]+t&4294967295,e.g[1]=e.g[1]+(i+(s<<21&4294967295|s>>>11))&4294967295,e.g[2]=e.g[2]+i&4294967295,e.g[3]=e.g[3]+a&4294967295}function r(e,t){this.h=t;for(var r=[],n=!0,i=e.length-1;0<=i;i--){var a=0|e[i];n&&a==t||(r[i]=a,n=!1)}this.g=r}!function(e,t){function r(){}r.prototype=t.prototype,e.D=t.prototype,e.prototype=new r,e.prototype.constructor=e,e.C=function(e,r,n){for(var i=Array(arguments.length-2),a=2;a<arguments.length;a++)i[a-2]=arguments[a];return t.prototype[r].apply(e,i)}}(e,function(){this.blockSize=-1}),e.prototype.s=function(){this.g[0]=1732584193,this.g[1]=4023233417,this.g[2]=2562383102,this.g[3]=271733878,this.o=this.h=0},e.prototype.u=function(e,r){void 0===r&&(r=e.length);for(var n=r-this.blockSize,i=this.B,a=this.h,s=0;s<r;){if(0==a)for(;s<=n;)t(this,e,s),s+=this.blockSize;if("string"==typeof e){for(;s<r;)if(i[a++]=e.charCodeAt(s++),a==this.blockSize){t(this,i),a=0;break}}else for(;s<r;)if(i[a++]=e[s++],a==this.blockSize){t(this,i),a=0;break}}this.h=a,this.o+=r},e.prototype.v=function(){var e=Array((56>this.h?this.blockSize:2*this.blockSize)-this.h);e[0]=128;for(var t=1;t<e.length-8;++t)e[t]=0;var r=8*this.o;for(t=e.length-8;t<e.length;++t)e[t]=255&r,r/=256;for(this.u(e),e=Array(16),t=r=0;4>t;++t)for(var n=0;32>n;n+=8)e[r++]=this.g[t]>>>n&255;return e};var a,s={};function o(e){var t;return -128<=e&&128>e?(t=function(e){return new r([0|e],0>e?-1:0)},Object.prototype.hasOwnProperty.call(s,e)?s[e]:s[e]=t(e)):new r([0|e],0>e?-1:0)}function c(e){if(isNaN(e)||!isFinite(e))return u;if(0>e)return m(c(-e));for(var t=[],n=1,i=0;e>=n;i++)t[i]=e/n|0,n*=4294967296;return new r(t,0)}var u=o(0),l=o(1),h=o(16777216);function g(e){if(0!=e.h)return!1;for(var t=0;t<e.g.length;t++)if(0!=e.g[t])return!1;return!0}function d(e){return -1==e.h}function m(e){for(var t=e.g.length,n=[],i=0;i<t;i++)n[i]=~e.g[i];return new r(n,~e.h).add(l)}function p(e,t){return e.add(m(t))}function y(e,t){for(;(65535&e[t])!=e[t];)e[t+1]+=e[t]>>>16,e[t]&=65535,t++}function f(e,t){this.g=e,this.h=t}function v(e,t){if(g(t))throw Error("division by zero");
1461if(g(e))return new f(u,u);if(d(e))return t=v(m(e),t),new f(m(t.g),m(t.h));if(d(t))return t=v(e,m(t)),new f(m(t.g),t.h);if(30<e.g.length){if(d(e)||d(t))throw Error("slowDivide_ only works with positive integers.");for(var r=l,n=t;0>=n.l(e);)r=_(r),n=_(n);var i=w(r,1),a=w(n,1);for(n=w(n,2),r=w(r,2);!g(n);){var s=a.add(n);0>=s.l(e)&&(i=i.add(r),a=s),n=w(n,1),r=w(r,1)}return t=p(e,i.j(t)),new f(i,t)}for(i=u;0<=e.l(t);){for(n=48>=(n=Math.ceil(Math.log(r=Math.max(1,Math.floor(e.m()/t.m())))/Math.LN2))?1:Math.pow(2,n-48),s=(a=c(r)).j(t);d(s)||0<s.l(e);)r-=n,s=(a=c(r)).j(t);g(a)&&(a=l),i=i.add(a),e=p(e,s)}return new f(i,e)}function _(e){for(var t=e.g.length+1,n=[],i=0;i<t;i++)n[i]=e.i(i)<<1|e.i(i-1)>>>31;return new r(n,e.h)}function w(e,t){var n=t>>5;t%=32;for(var i=e.g.length-n,a=[],s=0;s<i;s++)a[s]=0<t?e.i(s+n)>>>t|e.i(s+n+1)<<32-t:e.i(s+n);return new r(a,e.h)}(a=r.prototype).m=function(){if(d(this))return-m(this).m();for(var e=0,t=1,r=0;r<this.g.length;r++){var n=this.i(r);e+=(0<=n?n:4294967296+n)*t,t*=4294967296}return e},a.toString=function(e){if(2>(e=e||10)||36<e)throw Error("radix out of range: "+e);if(g(this))return"0";if(d(this))return"-"+m(this).toString(e);for(var t=c(Math.pow(e,6)),r=this,n="";;){var i=v(r,t).g,a=((0<(r=p(r,i.j(t))).g.length?r.g[0]:r.h)>>>0).toString(e);if(g(r=i))return a+n;for(;6>a.length;)a="0"+a;n=a+n}},a.i=function(e){return 0>e?0:e<this.g.length?this.g[e]:this.h},a.l=function(e){return d(e=p(this,e))?-1:g(e)?0:1},a.abs=function(){return d(this)?m(this):this},a.add=function(e){for(var t=Math.max(this.g.length,e.g.length),n=[],i=0,a=0;a<=t;a++){var s=i+(65535&this.i(a))+(65535&e.i(a)),o=(s>>>16)+(this.i(a)>>>16)+(e.i(a)>>>16);i=o>>>16,s&=65535,o&=65535,n[a]=o<<16|s}return new r(n,-2147483648&n[n.length-1]?-1:0)},a.j=function(e){if(g(this)||g(e))return u;if(d(this))return d(e)?m(this).j(m(e)):m(m(this).j(e));if(d(e))return m(this.j(m(e)));if(0>this.l(h)&&0>e.l(h))return c(this.m()*e.m());for(var t=this.g.length+e.g.length,n=[],i=0;i<2*t;i++)n[i]=0;for(i=0;i<this.g.length;i++)for(var a=0;a<e.g.length;a++){var s=this.i(i)>>>16,o=65535&this.i(i),l=e.i(a)>>>16,p=65535&e.i(a);n[2*i+2*a]+=o*p,y(n,2*i+2*a),n[2*i+2*a+1]+=s*p,y(n,2*i+2*a+1),n[2*i+2*a+1]+=o*l,y(n,2*i+2*a+1),n[2*i+2*a+2]+=s*l,y(n,2*i+2*a+2)}for(i=0;i<t;i++)n[i]=n[2*i+1]<<16|n[2*i];for(i=t;i<2*t;i++)n[i]=0;return new r(n,0)},a.A=function(e){return v(this,e).h},a.and=function(e){for(var t=Math.max(this.g.length,e.g.length),n=[],i=0;i<t;i++)n[i]=this.i(i)&e.i(i);return new r(n,this.h&e.h)},a.or=function(e){for(var t=Math.max(this.g.length,e.g.length),n=[],i=0;i<t;i++)n[i]=this.i(i)|e.i(i);return new r(n,this.h|e.h)},a.xor=function(e){for(var t=Math.max(this.g.length,e.g.length),n=[],i=0;i<t;i++)n[i]=this.i(i)^e.i(i);return new r(n,this.h^e.h)},e.prototype.digest=e.prototype.v,e.prototype.reset=e.prototype.s,e.prototype.update=e.prototype.u,i=P.Md5=e,r.prototype.add=r.prototype.add,r.prototype.multiply=r.prototype.j,r.prototype.modulo=r.prototype.A,r.prototype.compare=r.prototype.l,r.prototype.toNumber=r.prototype.m,r.prototype.toString=r.prototype.toString,r.prototype.getBits=r.prototype.i,r.fromNumber=c,r.fromString=function e(t,r){if(0==t.length)throw Error("number format error: empty string");if(2>(r=r||10)||36<r)throw Error("radix out of range: "+r);if("-"==t.charAt(0))return m(e(t.substring(1),r));if(0<=t.indexOf("-"))throw Error('number format error: interior "-" character');for(var n=c(Math.pow(r,8)),i=u,a=0;a<t.length;a+=8){var s=Math.min(8,t.length-a),o=parseInt(t.substring(a,a+s),r);8>s?(s=c(Math.pow(r,s)),i=i.j(s).add(c(o))):i=(i=i.j(n)).add(c(o))}return i},n=P.Integer=r}).apply(void 0!==k?k:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{});var b="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},E={};(function(){var e,t,r,n="function"==typeof Object.defineProperties?Object.defineProperty:function(e,t,r){return e==Array.prototype||e==Object.prototype||(e[t]=r.value),e},i=function(e){e=["object"==typeof globalThis&&globalThis,e,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof b&&b];for(var t=0;t<e.length;++t){var r=e[t];if(r&&r.Math==Math)return r}throw Error("Cannot find global object")}(this);!function(e,t){if(t)e:{var r=i;e=e.split(".");for(var a=0;a<e.length-1;a++){var s=e[a];if(!(s in r))break e;r=r[s]}(t=t(a=r[e=e[e.length-1]]))!=a&&null!=t&&n(r,e,{configurable:!0,writable:!0,value:t})}}("Array.prototype.values",function(e){return e||function(){var e,t,r,n,i;return e=this,t=function(e,t){return t},e instanceof String&&(e+=""),r=0,n=!1,(i={next:function(){if(!n&&r<e.length){var i=r++;return{value:t(i,e[i]),done:!1}}return n=!0,{done:!0,value:void 0}}})[Symbol.iterator]=function(){return i},i}});var d=d||{},m=this||self;function p(e){var t=typeof e;return"array"==(t="object"!=t?t:e?Array.isArray(e)?"array":t:"null")||"object"==t&&"number"==typeof e.length}function y(e){var t=typeof e;return"object"==t&&null!=e||"function"==t}function f(e,t,r){return e.call.apply(e.bind,arguments)}function v(e,t,r){if(!e)throw Error();if(2<arguments.length){var n=Array.prototype.slice.call(arguments,2);return function(){var r=Array.prototype.slice.call(arguments);return Array.prototype.unshift.apply(r,n),e.apply(t,r)}}return function(){return e.apply(t,arguments)}}function _(e,t,r){return(_=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?f:v).apply(null,arguments)}
1461function w(e,t){var r=Array.prototype.slice.call(arguments,1);return function(){var t=r.slice();return t.push.apply(t,arguments),e.apply(this,t)}}function k(e,t){function r(){}r.prototype=t.prototype,e.aa=t.prototype,e.prototype=new r,e.prototype.constructor=e,e.Qb=function(e,r,n){for(var i=Array(arguments.length-2),a=2;a<arguments.length;a++)i[a-2]=arguments[a];return t.prototype[r].apply(e,i)}}function P(e){let t=e.length;if(0<t){let r=Array(t);for(let n=0;n<t;n++)r[n]=e[n];return r}return[]}function R(e,t){for(let t=1;t<arguments.length;t++){let r=arguments[t];if(p(r)){let t=e.length||0,n=r.length||0;e.length=t+n;for(let i=0;i<n;i++)e[t+i]=r[i]}else e.push(r)}}class S{constructor(e,t){this.i=e,this.j=t,this.h=0,this.g=null}get(){let e;return 0<this.h?(this.h--,e=this.g,this.g=e.next,e.next=null):e=this.i(),e}}function I(e){return/^[\s\xa0]*$/.test(e)}function T(){var e=m.navigator;return e&&(e=e.userAgent)?e:""}function C(e){return C[" "](e),e}C[" "]=function(){};var H=-1!=T().indexOf("Gecko")&&!(-1!=T().toLowerCase().indexOf("webkit")&&-1==T().indexOf("Edge"))&&!(-1!=T().indexOf("Trident")||-1!=T().indexOf("MSIE"))&&-1==T().indexOf("Edge");function W(e,t,r){for(let n in e)t.call(r,e[n],n,e)}function A(e){let t={};for(let r in e)t[r]=e[r];return t}let D="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");function U(e,t){let r,n;for(let t=1;t<arguments.length;t++){for(r in n=arguments[t])e[r]=n[r];for(let t=0;t<D.length;t++)r=D[t],Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}}class L{constructor(){this.h=this.g=null}add(e,t){let r=O.get();r.set(e,t),this.h?this.h.next=r:this.g=r,this.h=r}}var O=new S(()=>new N,e=>e.reset());class N{constructor(){this.next=this.g=this.h=null}set(e,t){this.h=e,this.g=t,this.next=null}reset(){this.next=this.g=this.h=null}}let K,x=!1,M=new L,F=()=>{let e=m.Promise.resolve(void 0);K=()=>{e.then(B)}};var B=()=>{let e;for(var t;e=null,M.g&&(e=M.g,M.g=M.g.next,M.g||(M.h=null),e.next=null),t=e;){try{t.h.call(t.g)}catch(e){!function(e){m.setTimeout(()=>{throw e},0)}(e)}O.j(t),100>O.h&&(O.h++,t.next=O.g,O.g=t)}x=!1};function V(){this.s=this.s,this.C=this.C}function q(e,t){this.type=e,this.g=this.target=t,this.defaultPrevented=!1}V.prototype.s=!1,V.prototype.ma=function(){this.s||(this.s=!0,this.N())},V.prototype.N=function(){if(this.C)for(;this.C.length;)this.C.shift()()},q.prototype.h=function(){this.defaultPrevented=!0};var j=function(){if(!m.addEventListener||!Object.defineProperty)return!1;var e=!1,t=Object.defineProperty({},"passive",{get:function(){e=!0}});try{let e=()=>{};m.addEventListener("test",e,t),m.removeEventListener("test",e,t)}catch(e){}return e}();function G(e,t){if(q.call(this,e?e.type:""),this.relatedTarget=this.g=this.target=null,this.button=this.screenY=this.screenX=this.clientY=this.clientX=0,this.key="",this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=!1,this.state=null,this.pointerId=0,this.pointerType="",this.i=null,e){var r=this.type=e.type,n=e.changedTouches&&e.changedTouches.length?e.changedTouches[0]:null;if(this.target=e.target||e.srcElement,this.g=t,t=e.relatedTarget){if(H){e:{try{C(t.nodeName);var i=!0;break e}catch(e){}i=!1}i||(t=null)}}else"mouseover"==r?t=e.fromElement:"mouseout"==r&&(t=e.toElement);this.relatedTarget=t,n?(this.clientX=void 0!==n.clientX?n.clientX:n.pageX,this.clientY=void 0!==n.clientY?n.clientY:n.pageY,this.screenX=n.screenX||0,this.screenY=n.screenY||0):(this.clientX=void 0!==e.clientX?e.clientX:e.pageX,this.clientY=void 0!==e.clientY?e.clientY:e.pageY,this.screenX=e.screenX||0,this.screenY=e.screenY||0),this.button=e.button,this.key=e.key||"",this.ctrlKey=e.ctrlKey,this.altKey=e.altKey,this.shiftKey=e.shiftKey,this.metaKey=e.metaKey,this.pointerId=e.pointerId||0,this.pointerType="string"==typeof e.pointerType?e.pointerType:z[e.pointerType]||"",this.state=e.state,this.i=e,e.defaultPrevented&&G.aa.h.call(this)}}k(G,q);var z={2:"touch",3:"pen",4:"mouse"};G.prototype.h=function(){G.aa.h.call(this);var e=this.i;e.preventDefault?e.preventDefault():e.returnValue=!1};var $="closure_listenable_"+(1e6*Math.random()|0),J=0;function Q(e,t,r,n,i){this.listener=e,this.proxy=null,this.src=t,this.type=r,this.capture=!!n,this.ha=i,this.key=++J,this.da=this.fa=!1}function X(e){e.da=!0,e.listener=null,e.proxy=null,e.src=null,e.ha=null}function Y(e){this.src=e,this.g={},this.h=0}function Z(e,t){var r=t.type;if(r in e.g){var n,i=e.g[r],a=Array.prototype.indexOf.call(i,t,void 0);(n=0<=a)&&Array.prototype.splice.call(i,a,1),n&&(X(t),0==e.g[r].length&&(delete e.g[r],e.h--))}}function ee(e,t,r,n){for(var i=0;i<e.length;++i){var a=e[i];if(!a.da&&a.listener==t&&!!r==a.capture&&a.ha==n)return i}return -1}Y.prototype.add=function(e,t,r,n,i){var a=e.toString();(e=this.g[a])||(e=this.g[a]=[],this.h++);var s=ee(e,t,n,i);return -1<s?(t=e[s],r||(t.fa=!1)):((t=new Q(t,this.src,a,!!n,i)).fa=r,e.push(t)),t};var et="closure_lm_"+(1e6*Math.random()|0),er={};function en(e,t,r,n,i,a){if(!t)throw Error("Invalid event type");var s=y(i)?!!i.capture:!!i,o=eo(e);if(o||(e[et]=o=new Y(e)),(r=o.add(t,r,n,s,a)).proxy)return r;if(n=function e(t){return es.call(e.src,e.listener,t)},r.proxy=n,n.src=e,n.listener=r,e.addEventListener)j||(i=s),void 0===i&&(i=!1),e.addEventListener(t.toString(),n,i);else if(e.attachEvent)e.attachEvent(ea(t.toString()),n);else if(e.addListener&&e.removeListener)e.addListener(n);else throw Error("addEventListener and attachEvent are unavailable.");return r}function ei(e){if("number"!=typeof e&&e&&!e.da){var t=e.src;if(t&&t[$])Z(t.i,e);else{var r=e.type,n=e.proxy;t.removeEventListener?t.removeEventListener(r,n,e.capture):t.detachEvent?t.detachEvent(ea(r),n):t.addListener&&t.removeListener&&t.removeListener(n),(r=eo(t))?(Z(r,e),0==r.h&&(r.src=null,t[et]=null)):X(e)}}}function ea(e){return e in er?er[e]:er[e]="on"+e}function es(e,t){if(e.da)e=!0;else{t=new G(t,this);var r=e.listener,n=e.ha||e.src;e.fa&&ei(e),e=r.call(n,t)}return e}function eo(e){return(e=e[et])instanceof Y?e:null}var ec="__closure_events_fn_"+(1e9*Math.random()>>>0);function eu(e){return"function"==typeof e?e:(e[ec]||(e[ec]=function(t){return e.handleEvent(t)}),e[ec])}function el(){V.call(this),this.i=new Y(this),this.M=this,this.F=null}function eh(e,t){var r,n=e.F;if(n)for(r=[];n;n=n.F)r.push(n);if(e=e.M,n=t.type||t,"string"==typeof t)t=new q(t,e);else if(t instanceof q)t.target=t.target||e;else{var i=t;U(t=new q(n,e),i)}if(i=!0,r)for(var a=r.length-1;0<=a;a--){var s=t.g=r[a];i=eg(s,n,!0,t)&&i}if(i=eg(s=t.g=e,n,!0,t)&&i,i=eg(s,n,!1,t)&&i,r)for(a=0;a<r.length;a++)i=eg(s=t.g=r[a],n,!1,t)&&i}function eg(e,t,r,n){if(!(t=e.i.g[String(t)]))return!0;t=t.concat();for(var i=!0,a=0;a<t.length;++a){var s=t[a];if(s&&!s.da&&s.capture==r){var o=s.listener,c=s.ha||s.src;s.fa&&Z(e.i,s),i=!1!==o.call(c,n)&&i}}return i&&!n.defaultPrevented}function ed(e,t,r){if("function"==typeof e)r&&(e=_(e,r));else if(e&&"function"==typeof e.handleEvent)e=_(e.handleEvent,e);else throw Error("Invalid listener argument");return 2147483647<Number(t)?-1:m.setTimeout(e,t||0)}k(el,V),el.prototype[$]=!0,el.prototype.removeEventListener=function(e,t,r,n){!function e(t,r,n,i,a){if(Array.isArray(r))for(var s=0;s<r.length;s++)e(t,r[s],n,i,a);else(i=y(i)?!!i.capture:!!i,n=eu(n),t&&t[$])?(t=t.i,(r=String(r).toString())in t.g&&-1<(n=ee
1461(s=t.g[r],n,i,a))&&(X(s[n]),Array.prototype.splice.call(s,n,1),0==s.length&&(delete t.g[r],t.h--))):t&&(t=eo(t))&&(r=t.g[r.toString()],t=-1,r&&(t=ee(r,n,i,a)),(n=-1<t?r[t]:null)&&ei(n))}(this,e,t,r,n)},el.prototype.N=function(){if(el.aa.N.call(this),this.i){var e,t=this.i;for(e in t.g){for(var r=t.g[e],n=0;n<r.length;n++)X(r[n]);delete t.g[e],t.h--}}this.F=null},el.prototype.K=function(e,t,r,n){return this.i.add(String(e),t,!1,r,n)},el.prototype.L=function(e,t,r,n){return this.i.add(String(e),t,!0,r,n)};class em extends V{constructor(e,t){super(),this.m=e,this.l=t,this.h=null,this.i=!1,this.g=null}j(e){this.h=arguments,this.g?this.i=!0:function e(t){t.g=ed(()=>{t.g=null,t.i&&(t.i=!1,e(t))},t.l);let r=t.h;t.h=null,t.m.apply(null,r)}(this)}N(){super.N(),this.g&&(m.clearTimeout(this.g),this.g=null,this.i=!1,this.h=null)}}function ep(e){V.call(this),this.h=e,this.g={}}k(ep,V);var ey=[];function ef(e){W(e.g,function(e,t){this.g.hasOwnProperty(t)&&ei(e)},e),e.g={}}ep.prototype.N=function(){ep.aa.N.call(this),ef(this)},ep.prototype.handleEvent=function(){throw Error("EventHandler.handleEvent not implemented")};var ev=m.JSON.stringify,e_=m.JSON.parse,ew=class{stringify(e){return m.JSON.stringify(e,void 0)}parse(e){return m.JSON.parse(e,void 0)}};function ek(){}function eP(e){return e.h||(e.h=e.i())}function eb(){}ek.prototype.h=null;var eE={OPEN:"a",kb:"b",Ja:"c",wb:"d"};function eR(){q.call(this,"d")}function eS(){q.call(this,"c")}k(eR,q),k(eS,q);var eI={},eT=null;function eC(){return eT=eT||new el}function eH(e){q.call(this,eI.La,e)}function eW(e){let t=eC();eh(t,new eH(t))}function eA(e,t){q.call(this,eI.STAT_EVENT,e),this.stat=t}function eD(e){let t=eC();eh(t,new eA(t,e))}function eU(e,t){q.call(this,eI.Ma,e),this.size=t}function eL(e,t){if("function"!=typeof e)throw Error("Fn must not be null and must be a function");return m.setTimeout(function(){e()},t)}function eO(){this.g=!0}function eN(e,t,r,n){e.info(function(){return"XMLHTTP TEXT ("+t+"): "+function(e,t){if(!e.g)return t;if(!t)return null;try{var r=JSON.parse(t);if(r){for(e=0;e<r.length;e++)if(Array.isArray(r[e])){var n=r[e];if(!(2>n.length)){var i=n[1];if(Array.isArray(i)&&!(1>i.length)){var a=i[0];if("noop"!=a&&"stop"!=a&&"close"!=a)for(var s=1;s<i.length;s++)i[s]=""}}}}return ev(r)}catch(e){return t}}(e,r)+(n?" "+n:"")})}eI.La="serverreachability",k(eH,q),eI.STAT_EVENT="statevent",k(eA,q),eI.Ma="timingevent",k(eU,q),eO.prototype.xa=function(){this.g=!1},eO.prototype.info=function(){};var eK={NO_ERROR:0,gb:1,tb:2,sb:3,nb:4,rb:5,ub:6,Ia:7,TIMEOUT:8,xb:9},ex={lb:"complete",Hb:"success",Ja:"error",Ia:"abort",zb:"ready",Ab:"readystatechange",TIMEOUT:"timeout",vb:"incrementaldata",yb:"progress",ob:"downloadprogress",Pb:"uploadprogress"};function eM(){}function eF(e,t,r,n){this.j=e,this.i=t,this.l=r,this.R=n||1,this.U=new ep(this),this.I=45e3,this.H=null,this.o=!1,this.m=this.A=this.v=this.L=this.F=this.S=this.B=null,this.D=[],this.g=null,this.C=0,this.s=this.u=null,this.X=-1,this.J=!1,this.O=0,this.M=null,this.W=this.K=this.T=this.P=!1,this.h=new eB}function eB(){this.i=null,this.g="",this.h=!1}k(eM,ek),eM.prototype.g=function(){return new XMLHttpRequest},eM.prototype.i=function(){return{}},t=new eM;var eV={},eq={};function ej(e,t,r){e.L=1,e.v=ts(tt(t)),e.m=r,e.P=!0,eG(e,null)}function eG(e,t){e.F=Date.now(),e$(e),e.A=tt(e.v);var r=e.A,n=e.R;Array.isArray(n)||(n=[String(n)]),t_(r.i,"t",n),e.C=0,r=e.j.J,e.h=new eB,e.g=t3(e.j,r?t:null,!e.m),0<e.O&&(e.M=new em(_(e.Y,e,e.g),e.O)),t=e.U,r=e.g,n=e.ca;var i="readystatechange";Array.isArray(i)||(i&&(ey[0]=i.toString()),i=ey);for(var a=0;a<i.length;a++){var s=function e(t,r,n,i,a){if(i&&i.once)return function e(t,r,n,i,a){if(Array.isArray(r)){for(var s=0;s<r.length;s++)e(t,r[s],n,i,a);return null}return n=eu(n),t&&t[$]?t.L(r,n,y(i)?!!i.capture:!!i,a):en(t,r,n,!0,i,a)}(t,r,n,i,a);if(Array.isArray(r)){for(var s=0;s<r.length;s++)e(t,r[s],n,i,a);return null}return n=eu(n),t&&t[$]?t.K(r,n,y(i)?!!i.capture:!!i,a):en(t,r,n,!1,i,a)}(r,i[a],n||t.handleEvent,!1,t.h||t);if(!s)break;t.g[s.key]=s}t=e.H?A(e.H):{},e.m?(e.u||(e.u="POST"),t["Content-Type"]="application/x-www-form-urlencoded",e.g.ea(e.A,e.u,e.m,t)):(e.u="GET",e.g.ea(e.A,e.u,null,t)),eW(),function(e,t,r,n,i,a){e.info(function(){if(e.g){if(a)for(var s="",o=a.split("&"),c=0;c<o.length;c++){var u=o[c].split("=");if(1<u.length){var l=u[0];u=u[1];var h=l.split("_");s=2<=h.length&&"type"==h[1]?s+(l+"=")+u+"&":s+(l+"=redacted&")}}else s=null}else s=a;return"XMLHTTP REQ ("+n+") [attempt "+i+"]: "+t+"\n"+r+"\n"+s})}(e.i,e.u,e.A,e.l,e.R,e.m)}function ez(e){return!!e.g&&"GET"==e.u&&2!=e.L&&e.j.Ca}function e$(e){e.S=Date.now()+e.I,eJ(e,e.I)}function eJ(e,t){if(null!=e.B)throw Error("WatchDog timer not null");e.B=eL(_(e.ba,e),t)}function eQ(e){e.B&&(m.clearTimeout(e.B),e.B=null)}function eX(e){0==e.j.G||e.J||t1(e.j,e)}function eY(e){eQ(e);var t=e.M;t&&"function"==typeof t.ma&&t.ma(),e.M=null,ef(e.U),e.g&&(t=e.g,e.g=null,t.abort(),t.ma())}function eZ(e,t){try{var r=e.j;if(0!=r.G&&(r.g==e||e5(r.h,e))){if(!e.K&&e5(r.h,e)&&3==r.G){try{var n=r.Da.g.parse(t)}catch(e){n=null}if(Array.isArray(n)&&3==n.length){var i=n;
1461if(0==i[0]){e:if(!r.u){if(r.g){if(r.g.F+3e3<e.F)tZ(r),tV(r);else break e}tQ(r),eD(18)}}else r.za=i[1],0<r.za-r.T&&37500>i[2]&&r.F&&0==r.v&&!r.C&&(r.C=eL(_(r.Za,r),6e3));if(1>=e2(r.h)&&r.ca){try{r.ca()}catch(e){}r.ca=void 0}}else t4(r,11)}else if((e.K||r.g==e)&&tZ(r),!I(t))for(i=r.Da.g.parse(t),t=0;t<i.length;t++){let o=i[t];if(r.T=o[0],o=o[1],2==r.G){if("c"==o[0]){r.K=o[1],r.ia=o[2];let t=o[3];null!=t&&(r.la=t,r.j.info("VER="+r.la));let i=o[4];null!=i&&(r.Aa=i,r.j.info("SVER="+r.Aa));let c=o[5];null!=c&&"number"==typeof c&&0<c&&(n=1.5*c,r.L=n,r.j.info("backChannelRequestTimeoutMs_="+n)),n=r;let u=e.g;if(u){let e=u.g?u.g.getResponseHeader("X-Client-Wire-Protocol"):null;if(e){var a=n.h;a.g||-1==e.indexOf("spdy")&&-1==e.indexOf("quic")&&-1==e.indexOf("h2")||(a.j=a.l,a.g=new Set,a.h&&(e3(a,a.h),a.h=null))}if(n.D){let e=u.g?u.g.getResponseHeader("X-HTTP-Session-Id"):null;e&&(n.ya=e,ta(n.I,n.D,e))}}if(r.G=3,r.l&&r.l.ua(),r.ba&&(r.R=Date.now()-e.F,r.j.info("Handshake RTT: "+r.R+"ms")),(n=r).qa=t5(n,n.J?n.ia:null,n.W),e.K){e6(n.h,e);var s=n.L;s&&(e.I=s),e.B&&(eQ(e),e$(e)),n.g=e}else tJ(n);0<r.i.length&&tj(r)}else"stop"!=o[0]&&"close"!=o[0]||t4(r,7)}else 3==r.G&&("stop"==o[0]||"close"==o[0]?"stop"==o[0]?t4(r,7):tB(r):"noop"!=o[0]&&r.l&&r.l.ta(o),r.v=0)}}eW(4)}catch(e){}}eF.prototype.ca=function(e){e=e.target;let t=this.M;t&&3==tK(e)?t.j():this.Y(e)},eF.prototype.Y=function(e){try{if(e==this.g)e:{let h=tK(this.g);var t=this.g.Ba();let g=this.g.Z();if(!(3>h)&&(3!=h||this.g&&(this.h.h||this.g.oa()||tx(this.g)))){this.J||4!=h||7==t||(8==t||0>=g?eW(3):eW(2)),eQ(this);var r=this.g.Z();this.X=r;t:if(ez(this)){var n=tx(this.g);e="";var i=n.length,a=4==tK(this.g);if(!this.h.i){if("undefined"==typeof TextDecoder){eY(this),eX(this);var s="";break t}this.h.i=new m.TextDecoder}for(t=0;t<i;t++)this.h.h=!0,e+=this.h.i.decode(n[t],{stream:!(a&&t==i-1)});n.length=0,this.h.g+=e,this.C=0,s=this.h.g}else s=this.g.oa();if(this.o=200==r,function(e,t,r,n,i,a,s){e.info(function(){return"XMLHTTP RESP ("+n+") [ attempt "+i+"]: "+t+"\n"+r+"\n"+a+" "+s})}(this.i,this.u,this.A,this.l,this.R,h,r),this.o){if(this.T&&!this.K){t:{if(this.g){var o,c=this.g;if((o=c.g?c.g.getResponseHeader("X-HTTP-Initial-Response"):null)&&!I(o)){var u=o;break t}}u=null}if(r=u)eN(this.i,this.l,r,"Initial handshake response via X-HTTP-Initial-Response"),this.K=!0,eZ(this,r);else{this.o=!1,this.s=3,eD(12),eY(this),eX(this);break e}}if(this.P){let e;for(r=!0;!this.J&&this.C<s.length;)if((e=function(e,t){var r=e.C,n=t.indexOf("\n",r);return -1==n?eq:isNaN(r=Number(t.substring(r,n)))?eV:(n+=1)+r>t.length?eq:(t=t.slice(n,n+r),e.C=n+r,t)}(this,s))==eq){4==h&&(this.s=4,eD(14),r=!1),eN(this.i,this.l,null,"[Incomplete Response]");break}else if(e==eV){this.s=4,eD(15),eN(this.i,this.l,s,"[Invalid Chunk]"),r=!1;break}else eN(this.i,this.l,e,null),eZ(this,e);if(ez(this)&&0!=this.C&&(this.h.g=this.h.g.slice(this.C),this.C=0),4!=h||0!=s.length||this.h.h||(this.s=1,eD(16),r=!1),this.o=this.o&&r,r){if(0<s.length&&!this.W){this.W=!0;var l=this.j;l.g==this&&l.ba&&!l.M&&(l.j.info("Great, no buffering proxy detected. Bytes received: "+s.length),tX(l),l.M=!0,eD(11))}}else eN(this.i,this.l,s,"[Invalid Chunked Response]"),eY(this),eX(this)}else eN(this.i,this.l,s,null),eZ(this,s);4==h&&eY(this),this.o&&!this.J&&(4==h?t1(this.j,this):(this.o=!1,e$(this)))}else(function(e){let t={};e=(e.g&&2<=tK(e)&&e.g.getAllResponseHeaders()||"").split("\r\n");for(let n=0;n<e.length;n++){if(I(e[n]))continue;var r=function(e){var t=1;e=e.split(":");let r=[];for(;0<t&&e.length;)r.push(e.shift()),t--;return e.length&&r.push(e.join(":")),r}(e[n]);let i=r[0];if("string"!=typeof(r=r[1]))continue;r=r.trim();let a=t[i]||[];t[i]=a,a.push(r)}!function(e,t){for(let r in e)t.call(void 0,e[r],r,e)}(t,function(e){return e.join(", ")})})(this.g),400==r&&0<s.indexOf("Unknown SID")?(this.s=3,eD(12)):(this.s=0,eD(13)),eY(this),eX(this)}}}catch(e){}finally{}},eF.prototype.cancel=function(){this.J=!0,eY(this)},eF.prototype.ba=function(){this.B=null;let e=Date.now();0<=e-this.S?(function(e,t){e.info(function(){return"TIMEOUT: "+t})}
1461(this.i,this.A),2!=this.L&&(eW(),eD(17)),eY(this),this.s=2,eX(this)):eJ(this,this.S-e)};var e1=class{constructor(e,t){this.g=e,this.map=t}};function e0(e){this.l=e||10,e=m.PerformanceNavigationTiming?0<(e=m.performance.getEntriesByType("navigation")).length&&("hq"==e[0].nextHopProtocol||"h2"==e[0].nextHopProtocol):!!(m.chrome&&m.chrome.loadTimes&&m.chrome.loadTimes()&&m.chrome.loadTimes().wasFetchedViaSpdy),this.j=e?this.l:1,this.g=null,1<this.j&&(this.g=new Set),this.h=null,this.i=[]}function e4(e){return!!e.h||!!e.g&&e.g.size>=e.j}function e2(e){return e.h?1:e.g?e.g.size:0}function e5(e,t){return e.h?e.h==t:!!e.g&&e.g.has(t)}function e3(e,t){e.g?e.g.add(t):e.h=t}function e6(e,t){e.h&&e.h==t?e.h=null:e.g&&e.g.has(t)&&e.g.delete(t)}function e9(e){if(null!=e.h)return e.i.concat(e.h.D);if(null!=e.g&&0!==e.g.size){let t=e.i;for(let r of e.g.values())t=t.concat(r.D);return t}return P(e.i)}function e8(e,t){if(e.forEach&&"function"==typeof e.forEach)e.forEach(t,void 0);else if(p(e)||"string"==typeof e)Array.prototype.forEach.call(e,t,void 0);else for(var r=function(e){if(e.na&&"function"==typeof e.na)return e.na();if(!e.V||"function"!=typeof e.V){if("undefined"!=typeof Map&&e instanceof Map)return Array.from(e.keys());if(!("undefined"!=typeof Set&&e instanceof Set)){if(p(e)||"string"==typeof e){var t=[];e=e.length;for(var r=0;r<e;r++)t.push(r);return t}for(let n in t=[],r=0,e)t[r++]=n;return t}}}(e),n=function(e){if(e.V&&"function"==typeof e.V)return e.V();if("undefined"!=typeof Map&&e instanceof Map||"undefined"!=typeof Set&&e instanceof Set)return Array.from(e.values());if("string"==typeof e)return e.split("");if(p(e)){for(var t=[],r=e.length,n=0;n<r;n++)t.push(e[n]);return t}for(n in t=[],r=0,e)t[r++]=e[n];return t}(e),i=n.length,a=0;a<i;a++)t.call(void 0,n[a],r&&r[a],e)}e0.prototype.cancel=function(){if(this.i=e9(this),this.h)this.h.cancel(),this.h=null;else if(this.g&&0!==this.g.size){for(let e of this.g.values())e.cancel();this.g.clear()}};var e7=RegExp("^(?:([^:/?#.]+):)?(?://(?:([^\\\\/?#]*)@)?([^\\\\/?#]*?)(?::([0-9]+))?(?=[\\\\/?#]|$))?([^?#]+)?(?:\\?([^#]*))?(?:#([\\s\\S]*))?$");function te(e){if(this.g=this.o=this.j="",this.s=null,this.m=this.l="",this.h=!1,e instanceof te){this.h=e.h,tr(this,e.j),this.o=e.o,this.g=e.g,tn(this,e.s),this.l=e.l;var t=e.i,r=new tp;r.i=t.i,t.g&&(r.g=new Map(t.g),r.h=t.h),ti(this,r),this.m=e.m}else e&&(t=String(e).match(e7))?(this.h=!1,tr(this,t[1]||"",!0),this.o=to(t[2]||""),this.g=to(t[3]||"",!0),tn(this,t[4]),this.l=to(t[5]||"",!0),ti(this,t[6]||"",!0),this.m=to(t[7]||"")):(this.h=!1,this.i=new tp(null,this.h))}function tt(e){return new te(e)}function tr(e,t,r){e.j=r?to(t,!0):t,e.j&&(e.j=e.j.replace(/:$/,""))}function tn(e,t){if(t){if(isNaN(t=Number(t))||0>t)throw Error("Bad port number "+t);e.s=t}else e.s=null}function ti(e,t,r){var n,i;t instanceof tp?(e.i=t,n=e.i,(i=e.h)&&!n.j&&(ty(n),n.i=null,n.g.forEach(function(e,t){var r=t.toLowerCase();t!=r&&(tf(this,t),t_(this,r,e))},n)),n.j=i):(r||(t=tc(t,td)),e.i=new tp(t,e.h))}function ta(e,t,r){e.i.set(t,r)}function ts(e){return ta(e,"zx",Math.floor(2147483648*Math.random()).toString(36)+Math.abs(Math.floor(2147483648*Math.random())^Date.now()).toString(36)),e}function to(e,t){return e?t?decodeURI(e.replace(/%25/g,"%2525")):decodeURIComponent(e):""}function tc(e,t,r){return"string"==typeof e?(e=encodeURI(e).replace(t,tu),r&&(e=e.replace(/%25([0-9a-fA-F]{2})/g,"%$1")),e):null}function tu(e){return"%"+((e=e.charCodeAt(0))>>4&15).toString(16)+(15&e).toString(16)}te.prototype.toString=function(){var e=[],t=this.j;t&&e.push(tc(t,tl,!0),":");var r=this.g;return(r||"file"==t)&&(e.push("//"),(t=this.o)&&e.push(tc(t,tl,!0),"@"),e.push(encodeURIComponent(String(r)).replace(/%25([0-9a-fA-F]{2})/g,"%$1")),null!=(r=this.s)&&e.push(":",String(r))),(r=this.l)&&(this.g&&"/"!=r.charAt(0)&&e.push("/"),e.push(tc(r,"/"==r.charAt(0)?tg:th,!0))),(r=this.i.toString())&&e.push("?",r),(r=this.m)&&e.push("#",tc(r,tm)),e.join("")};var tl=/[#\/\?@]/g,th=/[#\?:]/g,tg=/[#\?]/g,td=/[#\?@]/g,tm=/#/g;function tp(e,t){this.h=this.g=null,this.i=e||null,this.j=!!t}function ty(e){e.g||(e.g=new Map,e.h=0,e.i&&function(e,t){if(e){e=e.split("&");for(var r=0;r<e.length;r++){var n=e[r].indexOf("="),i=null;if(0<=n){var a=e[r].substring(0,n);i=e[r].substring(n+1)}else a=e[r];t(a,i?decodeURIComponent(i.replace(/\+/g," ")):"")}}}(e.i,function(t,r){e.add(decodeURIComponent(t.replace(/\+/g," ")),r)}))}function tf(e,t){ty(e),t=tw(e,t),e.g.has(t)&&(e.i=null,e.h-=e.g.get(t).length,e.g.delete(t))}function tv(e,t){return ty(e),t=tw(e,t),e.g.has(t)}function t_(e,t,r){tf(e,t),0<r.length&&(e.i=null,e.g.set(tw(e,t),P(r)),e.h+=r.length)}function tw(e,t){return t=String(t),e.j&&(t=t.toLowerCase()),t}function tk(e,t,r,n,i){try{i&&(i.onload=null,i.onerror=null,i.onabort=null,i.ontimeout=null),n(r)}catch(e){}}function tP(){this.g=new ew}function tb(e){this.l=e.Ub||null,this.j=e.eb||!1}function tE(e,t){el.call(this),this.D=e,this.o=t,this.m=void 0,this.status=this.readyState=0,this.responseType=this.responseText=this.response=this.statusText="",this.onreadystatechange=null,this.u=new Headers,this.h=null,this.B="GET",this.A="",this.g=!1,this.v=this.j=this.l=null}function tR(e){e.j.read().then(e.Pa.bind(e)).catch(e.ga.bind(e))}function tS(e){e.readyState=4,e.l=null,e.j=null,e.v=null,tI(e)}function tI(e){e.onreadystatechange&&e.onreadystatechange.call(e)}function tT(e){let t="";return W(e,function(e,r){t+=r+":"+e+"\r\n"}),t}function tC(e,t,r){e:{for(n in r){var n=!1;break e}n=!0}n||(r=tT(r),"string"==typeof e?null!=r&&encodeURIComponent(String(r)):ta(e,t,r))}function tH(e){el.call(this),this.headers=new Map,this.o=e||null,this.h=!1,this.v=this.g=null,this.D="",this.m=0,this.l="",this.j=this.B=this.u=this.A=!1,this.I=null,this.H="",this.J=!1}(r=tp.prototype).add=function(e,t){ty(this),this.i=null,e=tw(this,e);var r=this.g.get(e);return r||this.g.set(e,r=[]),r.push(t),this.h+=1,this},r.forEach=function(e,t){ty(this),this.g.forEach(function(r,n){r.forEach(function(r){e.call(t,r,n,this)},this)},this)},r.na=function(){ty(this);let e=Array.from(this.g.values()),t=Array.from(this.g.keys()),r=[];for(let n=0;n<t.length;n++){let i=e[n];for(let e=0;e<i.length;e++)r.push(t[n])}return r},r.V=function(e){ty(this);let t=[];if("string"==typeof e)tv(this,e)&&(t=t.concat(this.g.get(tw(this,e))));else{e=Array.from(this.g.values());for(let r=0;r<e.length;r++)t=t.concat(e[r])}return t},r.set=function(e,t){return ty(this),this.i=null,tv(this,e=tw(this,e))&&(this.h-=this.g.get(e).length),this.g.set(e,[t]),this.h+=1,this},r.get=function(e,t){return e&&0<(e=this.V(e)).length?String(e[0]):t},r.toString=function(){if(this.i)return this.i;if(!this.g)return"";let e=[],t=Array.from(this.g.keys());for(var r=0;r<t.length;r++){var n=t[r];let a=encodeURIComponent(String(n)),s=this.V(n);for(n=0;n<s.length;n++){var i=a;""!==s[n]&&(i+="="+encodeURIComponent(String(s[n]))),e.push(i)}}return this.i=e.join("&")},k(tb,ek),tb.prototype.g=function(){return new tE(this.l,this.j)},tb.prototype.i=(e={},function(){return e}),k(tE,el),(r=tE.prototype).open=function(e,t){if(0!=this.readyState)throw this.abort(),Error("Error reopening a connection");this.B=e,this.A=t,this.readyState=1,tI(this)},r.send=function(e){if(1!=this.readyState)throw this.abort(),Error("need to call open() first. ");this.g=!0;let t={headers:this.u,method:this.B,credentials:this.m,cache:void 0};
1461e&&(t.body=e),(this.D||m).fetch(new Request(this.A,t)).then(this.Sa.bind(this),this.ga.bind(this))},r.abort=function(){this.response=this.responseText="",this.u=new Headers,this.status=0,this.j&&this.j.cancel("Request was aborted.").catch(()=>{}),1<=this.readyState&&this.g&&4!=this.readyState&&(this.g=!1,tS(this)),this.readyState=0},r.Sa=function(e){if(this.g&&(this.l=e,this.h||(this.status=this.l.status,this.statusText=this.l.statusText,this.h=e.headers,this.readyState=2,tI(this)),this.g&&(this.readyState=3,tI(this),this.g))){if("arraybuffer"===this.responseType)e.arrayBuffer().then(this.Qa.bind(this),this.ga.bind(this));else if(void 0!==m.ReadableStream&&"body"in e){if(this.j=e.body.getReader(),this.o){if(this.responseType)throw Error('responseType must be empty for "streamBinaryChunks" mode responses.');this.response=[]}else this.response=this.responseText="",this.v=new TextDecoder;tR(this)}else e.text().then(this.Ra.bind(this),this.ga.bind(this))}},r.Pa=function(e){if(this.g){if(this.o&&e.value)this.response.push(e.value);else if(!this.o){var t=e.value?e.value:new Uint8Array(0);(t=this.v.decode(t,{stream:!e.done}))&&(this.response=this.responseText+=t)}e.done?tS(this):tI(this),3==this.readyState&&tR(this)}},r.Ra=function(e){this.g&&(this.response=this.responseText=e,tS(this))},r.Qa=function(e){this.g&&(this.response=e,tS(this))},r.ga=function(){this.g&&tS(this)},r.setRequestHeader=function(e,t){this.u.append(e,t)},r.getResponseHeader=function(e){return this.h&&this.h.get(e.toLowerCase())||""},r.getAllResponseHeaders=function(){if(!this.h)return"";let e=[],t=this.h.entries();for(var r=t.next();!r.done;)e.push((r=r.value)[0]+": "+r[1]),r=t.next();return e.join("\r\n")},Object.defineProperty(tE.prototype,"withCredentials",{get:function(){return"include"===this.m},set:function(e){this.m=e?"include":"same-origin"}}),k(tH,el);var tW=/^https?$/i,tA=["POST","PUT"];function tD(e,t){e.h=!1,e.g&&(e.j=!0,e.g.abort(),e.j=!1),e.l=t,e.m=5,tU(e),tO(e)}function tU(e){e.A||(e.A=!0,eh(e,"complete"),eh(e,"error"))}function tL(e){if(e.h&&void 0!==d&&(!e.v[1]||4!=tK(e)||2!=e.Z())){if(e.u&&4==tK(e))ed(e.Ea,0,e);else if(eh(e,"readystatechange"),4==tK(e)){e.h=!1;try{let s=e.Z();switch(s){case 200:case 201:case 202:case 204:case 206:case 304:case 1223:var t,r,n=!0;break;default:n=!1}if(!(t=n)){if(r=0===s){var i=String(e.D).match(e7)[1]||null;!i&&m.self&&m.self.location&&(i=m.self.location.protocol.slice(0,-1)),r=!tW.test(i?i.toLowerCase():"")}t=r}if(t)eh(e,"complete"),eh(e,"success");else{e.m=6;try{var a=2<tK(e)?e.g.statusText:""}catch(e){a=""}e.l=a+" ["+e.Z()+"]",tU(e)}}finally{tO(e)}}}}function tO(e,t){if(e.g){tN(e);let r=e.g,n=e.v[0]?()=>{}:null;e.g=null,e.v=null,t||eh(e,"ready");try{r.onreadystatechange=n}catch(e){}}}function tN(e){e.I&&(m.clearTimeout(e.I),e.I=null)}function tK(e){return e.g?e.g.readyState:0}function tx(e){try{if(!e.g)return null;if("response"in e.g)return e.g.response;switch(e.H){case"":case"text":return e.g.responseText;case"arraybuffer":if("mozResponseArrayBuffer"in e.g)return e.g.mozResponseArrayBuffer}return null}catch(e){return null}}function tM(e,t,r){return r&&r.internalChannelParams&&r.internalChannelParams[e]||t}function tF(e){this.Aa=0,this.i=[],this.j=new eO,this.ia=this.qa=this.I=this.W=this.g=this.ya=this.D=this.H=this.m=this.S=this.o=null,this.Ya=this.U=0,this.Va=tM("failFast",!1,e),this.F=this.C=this.u=this.s=this.l=null,this.X=!0,this.za=this.T=-1,this.Y=this.v=this.B=0,this.Ta=tM("baseRetryDelayMs",5e3,e),this.cb=tM("retryDelaySeedMs",1e4,e),this.Wa=tM("forwardChannelMaxRetries",2,e),this.wa=tM("forwardChannelRequestTimeoutMs",2e4,e),this.pa=e&&e.xmlHttpFactory||void 0,this.Xa=e&&e.Tb||void 0,this.Ca=e&&e.useFetchStreams||!1,this.L=void 0,this.J=e&&e.supportsCrossDomainXhr||!1,this.K="",this.h=new e0(e&&e.concurrentRequestLimit),this.Da=new tP,this.P=e&&e.fastHandshake||!1,this.O=e&&e.encodeInitMessageHeaders||!1,this.P&&this.O&&(this.O=!1),this.Ua=e&&e.Rb||!1,e&&e.xa&&this.j.xa(),e&&e.forceLongPolling&&(this.X=!1),this.ba=!this.P&&this.X&&e&&e.detectBufferingProxy||!1,this.ja=void 0,e&&e.longPollingTimeout&&0<e.longPollingTimeout&&(this.ja=e.longPollingTimeout),this.ca=void 0,this.R=0,this.M=!1,this.ka=this.A=null}function tB(e){if(tq(e),3==e.G){var t=e.U++,r=tt(e.I);if(ta(r,"SID",e.K),ta(r,"RID",t),ta(r,"TYPE","terminate"),tz(e,r),(t=new eF(e,e.j,t)).L=2,t.v=ts(tt(r)),r=!1,m.navigator&&m.navigator.sendBeacon)try{r=m.navigator.sendBeacon(t.v.toString(),"")}catch(e){}!r&&m.Image&&((new Image).src=t.v,r=!0),r||(t.g=t3(t.j,null),t.g.ea(t.v)),t.F=Date.now(),e$(t)}t2(e)}function tV(e){e.g&&(tX(e),e.g.cancel(),e.g=null)}function tq(e){tV(e),e.u&&(m.clearTimeout(e.u),e.u=null),tZ(e),e.h.cancel(),e.s&&("number"==typeof e.s&&m.clearTimeout(e.s),e.s=null)}function tj(e){if(!e4(e.h)&&!e.s){e.s=!0;var t=e.Ga;K||F(),x||(K(),x=!0),M.add(t,e),e.B=0}}function tG(e,t){var r;r=t?t.l:e.U++;let n=tt(e.I);ta(n,"SID",e.K),ta(n,"RID",r),ta(n,"AID",e.T),tz(e,n),e.m&&e.o&&tC(n,e.m,e.o),r=new eF(e,e.j,r,e.B+1),null===e.m&&(r.H=e.o),t&&(e.i=t.D.concat(e.i)),t=t$(e,r,1e3),r.I=Math.round(.5*e.wa)+Math.round(.5*e.wa*Math.random()),e3(e.h,r),ej(r,n,t)}function tz(e,t){e.H&&W(e.H,function(e,r){ta(t,r,e)}
1461),e.l&&e8({},function(e,r){ta(t,r,e)})}function t$(e,t,r){r=Math.min(e.i.length,r);var n=e.l?_(e.l.Na,e.l,e):null;e:{var i=e.i;let t=-1;for(;;){let e=["count="+r];-1==t?0<r?(t=i[0].g,e.push("ofs="+t)):t=0:e.push("ofs="+t);let a=!0;for(let s=0;s<r;s++){let r=i[s].g,o=i[s].map;if(0>(r-=t))t=Math.max(0,i[s].g-100),a=!1;else try{!function(e,t,r){let n=r||"";try{e8(e,function(e,r){let i=e;y(e)&&(i=ev(e)),t.push(n+r+"="+encodeURIComponent(i))})}catch(e){throw t.push(n+"type="+encodeURIComponent("_badmap")),e}}(o,e,"req"+r+"_")}catch(e){n&&n(o)}}if(a){n=e.join("&");break e}}}return e=e.i.splice(0,r),t.D=e,n}function tJ(e){if(!e.g&&!e.u){e.Y=1;var t=e.Fa;K||F(),x||(K(),x=!0),M.add(t,e),e.v=0}}function tQ(e){return!e.g&&!e.u&&!(3<=e.v)&&(e.Y++,e.u=eL(_(e.Fa,e),t0(e,e.v)),e.v++,!0)}function tX(e){null!=e.A&&(m.clearTimeout(e.A),e.A=null)}function tY(e){e.g=new eF(e,e.j,"rpc",e.Y),null===e.m&&(e.g.H=e.o),e.g.O=0;var t=tt(e.qa);ta(t,"RID","rpc"),ta(t,"SID",e.K),ta(t,"AID",e.T),ta(t,"CI",e.F?"0":"1"),!e.F&&e.ja&&ta(t,"TO",e.ja),ta(t,"TYPE","xmlhttp"),tz(e,t),e.m&&e.o&&tC(t,e.m,e.o),e.L&&(e.g.I=e.L);var r=e.g;e=e.ia,r.L=1,r.v=ts(tt(t)),r.m=null,r.P=!0,eG(r,e)}function tZ(e){null!=e.C&&(m.clearTimeout(e.C),e.C=null)}function t1(e,t){var r=null;if(e.g==t){tZ(e),tX(e),e.g=null;var n=2}else{if(!e5(e.h,t))return;r=t.D,e6(e.h,t),n=1}if(0!=e.G){if(t.o){if(1==n){r=t.m?t.m.length:0,t=Date.now()-t.F;var i,a=e.B;eh(n=eC(),new eU(n,r)),tj(e)}else tJ(e)}else if(3==(a=t.s)||0==a&&0<t.X||!(1==n&&(i=t,!(e2(e.h)>=e.h.j-(e.s?1:0))&&(e.s?(e.i=i.D.concat(e.i),!0):1!=e.G&&2!=e.G&&!(e.B>=(e.Va?0:e.Wa))&&(e.s=eL(_(e.Ga,e,i),t0(e,e.B)),e.B++,!0)))||2==n&&tQ(e)))switch(r&&0<r.length&&((t=e.h).i=t.i.concat(r)),a){case 1:t4(e,5);break;case 4:t4(e,10);break;case 3:t4(e,6);break;default:t4(e,2)}}}function t0(e,t){let r=e.Ta+Math.floor(Math.random()*e.cb);return e.isActive()||(r*=2),r*t}function t4(e,t){if(e.j.info("Error code "+t),2==t){var r=_(e.fb,e),n=e.Xa;let t=!n;n=new te(n||"//www.google.com/images/cleardot.gif"),m.location&&"http"==m.location.protocol||tr(n,"https"),ts(n),t?function(e,t){let r=new eO;if(m.Image){let n=new Image;n.onload=w(tk,r,"TestLoadImage: loaded",!0,t,n),n.onerror=w(tk,r,"TestLoadImage: error",!1,t,n),n.onabort=w(tk,r,"TestLoadImage: abort",!1,t,n),n.ontimeout=w(tk,r,"TestLoadImage: timeout",!1,t,n),m.setTimeout(function(){n.ontimeout&&n.ontimeout()},1e4),n.src=e}else t(!1)}(n.toString(),r):function(e,t){let r=new eO,n=new AbortController,i=setTimeout(()=>{n.abort(),tk(r,"TestPingServer: timeout",!1,t)},1e4);fetch(e,{signal:n.signal}).then(e=>{clearTimeout(i),e.ok?tk(r,"TestPingServer: ok",!0,t):tk(r,"TestPingServer: server error",!1,t)}).catch(()=>{clearTimeout(i),tk(r,"TestPingServer: error",!1,t)})}(n.toString(),r)}else eD(2);e.G=0,e.l&&e.l.sa(t),t2(e),tq(e)}function t2(e){if(e.G=0,e.ka=[],e.l){let t=e9(e.h);(0!=t.length||0!=e.i.length)&&(R(e.ka,t),R(e.ka,e.i),e.h.i.length=0,P(e.i),e.i.length=0),e.l.ra()}}function t5(e,t,r){var n=r instanceof te?tt(r):new te(r);if(""!=n.g)t&&(n.g=t+"."+n.g),tn(n,n.s);else{var i=m.location;n=i.protocol,t=t?t+"."+i.hostname:i.hostname,i=+i.port;var a=new te(null);n&&tr(a,n),t&&(a.g=t),i&&tn(a,i),r&&(a.l=r),n=a}return r=e.D,t=e.ya,r&&t&&ta(n,r,t),ta(n,"VER",e.la),tz(e,n),n}function t3(e,t,r){if(t&&!e.J)throw Error("Can't create secondary domain capable XhrIo object.");return(t=new tH(e.Ca&&!e.pa?new tb({eb:r}):e.pa)).Ha(e.J),t}function t6(){}function t9(){}function t8(e,t){el.call(this),this.g=new tF(t),this.l=e,this.h=t&&t.messageUrlParams||null,e=t&&t.messageHeaders||null,t&&t.clientProtocolHeaderRequired&&(e?e["X-Client-Protocol"]="webchannel":e={"X-Client-Protocol":"webchannel"}),this.g.o=e,e=t&&t.initMessageHeaders||null,t&&t.messageContentType&&(e?e["X-WebChannel-Content-Type"]=t.messageContentType:e={"X-WebChannel-Content-Type":t.messageContentType}),t&&t.va&&(e?e["X-WebChannel-Client-Profile"]=t.va:e={"X-WebChannel-Client-Profile":t.va}),this.g.S=e,(e=t&&t.Sb)&&!I(e)&&(this.g.m=e),this.v=t&&t.supportsCrossDomainXhr||!1,this.u=t&&t.sendRawJson||!1,(t=t&&t.httpSessionIdParam)&&!I(t)&&(this.g.D=t,null!==(e=this.h)&&t in e&&t in(e=this.h)&&delete e[t]),this.j=new rt(this)}function t7(e){eR.call(this),e.__headers__&&(this.headers=e.__headers__,this.statusCode=e.__status__,delete e.__headers__,delete e.__status__);var t=e.__sm__;if(t){e:{for(let r in t){e=r;break e}e=void 0}(this.i=e)&&(e=this.i,t=null!==t&&e in t?t[e]:void 0),this.data=t}else this.data=e}function re(){eS.call(this),this.status=1}function rt(e){this.g=e}(r=tH.prototype).Ha=function(e){this.J=e},r.ea=function(e,r,n,i){if(this.g)throw Error("[goog.net.XhrIo] Object is active with another request="+this.D+"; newUri="+e);r=r?r.toUpperCase():"GET",this.D=e,this.l="",this.m=0,this.A=!1,this.h=!0,this.g=this.o?this.o.g():t.g(),this.v=this.o?eP(this.o):eP(t),this.g.onreadystatechange=_(this.Ea,this);try{this.B=!0,this.g.open(r,String(e),!0),this.B=!1}catch(e){tD(this,e);return}if(e=n||"",n=new Map(this.headers),i){if(Object.getPrototypeOf(i)===Object.prototype)for(var a in i)n.set(a,i[a]);else if("function"==typeof i.keys&&"function"==typeof i.get)for(let e of i.keys())n.set(e,i.get(e));else throw Error("Unknown input type for opt_headers: "+String(i))}for(let[t,s]of(i=Array.from(n.keys()).find(e=>"content-type"==e.toLowerCase()),a=m.FormData&&e instanceof m.FormData,!(0<=Array.prototype.indexOf.call(tA,r,void 0))||i||a||n.set("Content-Type","application/x-www-form-urlencoded;charset=utf-8"),n))this.g.setRequestHeader(t,s);this.H&&(this.g.responseType=this.H),"withCredentials"in this.g&&this.g.withCredentials!==this.J&&(this.g.withCredentials=this.J);try{tN(this),this.u=!0,this.g.send(e),this.u=!1}catch(e){tD(this,e)}},r.abort=function(e){this.g&&this.h&&(this.h=!1,this.j=!0,this.g.abort(),this.j=!1,this.m=e||7,eh(this,"complete"),eh(this,"abort"),tO(this))},r.N=function(){this.g&&(this.h&&(this.h=!1,this.j=!0,this.g.abort(),this.j=!1),tO(this,!0)),tH.aa.N.call(this)},r.Ea=function(){this.s||(this.B||this.u||this.j?tL(this):this.bb())},r.bb=function(){tL(this)},r.isActive=function(){return!!this.g},r.Z=function(){try{return 2<tK(this)?this.g.status:-1}catch(e){return -1}},r.oa=function(){try{return this.g?this.g.responseText:""}catch(e){return""}},r.Oa=function(e){if(this.g){var t=this.g.responseText;
1461return e&&0==t.indexOf(e)&&(t=t.substring(e.length)),e_(t)}},r.Ba=function(){return this.m},r.Ka=function(){return"string"==typeof this.l?this.l:String(this.l)},(r=tF.prototype).la=8,r.G=1,r.connect=function(e,t,r,n){eD(0),this.W=e,this.H=t||{},r&&void 0!==n&&(this.H.OSID=r,this.H.OAID=n),this.F=this.X,this.I=t5(this,null,this.W),tj(this)},r.Ga=function(e){if(this.s){if(this.s=null,1==this.G){if(!e){this.U=Math.floor(1e5*Math.random()),e=this.U++;let i=new eF(this,this.j,e),a=this.o;if(this.S&&(a?U(a=A(a),this.S):a=this.S),null!==this.m||this.O||(i.H=a,a=null),this.P)e:{for(var t=0,r=0;r<this.i.length;r++){t:{var n=this.i[r];if("__data__"in n.map&&"string"==typeof(n=n.map.__data__)){n=n.length;break t}n=void 0}if(void 0===n)break;if(4096<(t+=n)){t=r;break e}if(4096===t||r===this.i.length-1){t=r+1;break e}}t=1e3}else t=1e3;t=t$(this,i,t),ta(r=tt(this.I),"RID",e),ta(r,"CVER",22),this.D&&ta(r,"X-HTTP-Session-Id",this.D),tz(this,r),a&&(this.O?t="headers="+encodeURIComponent(String(tT(a)))+"&"+t:this.m&&tC(r,this.m,a)),e3(this.h,i),this.Ua&&ta(r,"TYPE","init"),this.P?(ta(r,"$req",t),ta(r,"SID","null"),i.T=!0,ej(i,r,null)):ej(i,r,t),this.G=2}}else 3==this.G&&(e?tG(this,e):0==this.i.length||e4(this.h)||tG(this))}},r.Fa=function(){if(this.u=null,tY(this),this.ba&&!(this.M||null==this.g||0>=this.R)){var e=2*this.R;this.j.info("BP detection timer enabled: "+e),this.A=eL(_(this.ab,this),e)}},r.ab=function(){this.A&&(this.A=null,this.j.info("BP detection timeout reached."),this.j.info("Buffering proxy detected and switch to long-polling!"),this.F=!1,this.M=!0,eD(10),tV(this),tY(this))},r.Za=function(){null!=this.C&&(this.C=null,tV(this),tQ(this),eD(19))},r.fb=function(e){e?(this.j.info("Successfully pinged google.com"),eD(2)):(this.j.info("Failed to ping google.com"),eD(1))},r.isActive=function(){return!!this.l&&this.l.isActive(this)},(r=t6.prototype).ua=function(){},r.ta=function(){},r.sa=function(){},r.ra=function(){},r.isActive=function(){return!0},r.Na=function(){},t9.prototype.g=function(e,t){return new t8(e,t)},k(t8,el),t8.prototype.m=function(){this.g.l=this.j,this.v&&(this.g.J=!0),this.g.connect(this.l,this.h||void 0)},t8.prototype.close=function(){tB(this.g)},t8.prototype.o=function(e){var t=this.g;if("string"==typeof e){var r={};r.__data__=e,e=r}else this.u&&((r={}).__data__=ev(e),e=r);t.i.push(new e1(t.Ya++,e)),3==t.G&&tj(t)},t8.prototype.N=function(){this.g.l=null,delete this.j,tB(this.g),delete this.g,t8.aa.N.call(this)},k(t7,eR),k(re,eS),k(rt,t6),rt.prototype.ua=function(){eh(this.g,"a")},rt.prototype.ta=function(e){eh(this.g,new t7(e))},rt.prototype.sa=function(e){eh(this.g,new re)},rt.prototype.ra=function(){eh(this.g,"b")},t9.prototype.createWebChannel=t9.prototype.g,t8.prototype.send=t8.prototype.o,t8.prototype.open=t8.prototype.m,t8.prototype.close=t8.prototype.close,g=E.createWebChannelTransport=function(){return new t9},h=E.getStatEventTarget=function(){return eC()},l=E.Event=eI,u=E.Stat={mb:0,pb:1,qb:2,Jb:3,Ob:4,Lb:5,Mb:6,Kb:7,Ib:8,Nb:9,PROXY:10,NOPROXY:11,Gb:12,Cb:13,Db:14,Bb:15,Eb:16,Fb:17,ib:18,hb:19,jb:20},eK.NO_ERROR=0,eK.TIMEOUT=8,eK.HTTP_ERROR=6,c=E.ErrorCode=eK,ex.COMPLETE="complete",o=E.EventType=ex,eb.EventType=eE,eE.OPEN="a",eE.CLOSE="b",eE.ERROR="c",eE.MESSAGE="d",el.prototype.listen=el.prototype.K,s=E.WebChannel=eb,E.FetchXmlHttpFactory=tb,tH.prototype.listenOnce=tH.prototype.L,tH.prototype.getLastError=tH.prototype.Ka,tH.prototype.getLastErrorCode=tH.prototype.Ba,tH.prototype.getStatus=tH.prototype.Z,tH.prototype.getResponseJson=tH.prototype.Oa,tH.prototype.getResponseText=tH.prototype.oa,tH.prototype.send=tH.prototype.ea,tH.prototype.setWithCredentials=tH.prototype.Ha,a=E.XhrIo=tH}).apply(void 0!==b?b:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{}),r(4155);var R=r(8764).lW;let S="@firebase/firestore";/**
1462 * @license
1463 * Copyright 2017 Google LLC
1464 *
1465 * Licensed under the Apache License, Version 2.0 (the "License");
1466 * you may not use this file except in compliance with the License.
1467 * You may obtain a copy of the License at
1468 *
1469 *   http://www.apache.org/licenses/LICENSE-2.0
1470 *
1471 * Unless required by applicable law or agreed to in writing, softw
1471are
1472 * distributed under the License is distributed on an "AS IS" BASIS,
1473 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1474 * See the License for the specific language governing permissions and
1475 * limitations under the License.
1476 */class I{constructor(e){this.uid=e}isAuthenticated(){return null!=this.uid}toKey(){return this.isAuthenticated()?"uid:"+this.uid:"anonymous-user"}isEqual(e){return e.uid===this.uid}}I.UNAUTHENTICATED=new I(null),I.GOOGLE_CREDENTIALS=new I("google-credentials-uid"),I.FIRST_PARTY=new I("first-party-uid"),I.MOCK_USER=new I("mock-user");/**
1477 * @license
1478 * Copyright 2017 Google LLC
1479 *
1480 * Licensed under the Apache License, Version 2.0 (the "License");
1481 * you may not use this file except in compliance with the License.
1482 * You may obtain a copy of the License at
1483 *
1484 *   http://www.apache.org/licenses/LICENSE-2.0
1485 *
1486 * Unless required by applicable law or agreed to in writing, software
1487 * distributed under the License is distributed on an "AS IS" BASIS,
1488 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1489 * See the License for the specific language governing permissions and
1490 * limitations under the License.
1491 */let T="10.14.0",C=new _.Yd("@firebase/firestore");function H(){return C.logLevel}function W(e,...t){if(C.logLevel<=_.in.DEBUG){let r=t.map(U);C.debug(`Firestore (${T}): ${e}`,...r)}}function A(e,...t){if(C.logLevel<=_.in.ERROR){let r=t.map(U);C.error(`Firestore (${T}): ${e}`,...r)}}function D(e,...t){if(C.logLevel<=_.in.WARN){let r=t.map(U);C.warn(`Firestore (${T}): ${e}`,...r)}}function U(e){if("string"==typeof e)return e;try{/**
1492 * @license
1493 * Copyright 2020 Google LLC
1494 *
1495 * Licensed under the Apache License, Version 2.0 (the "License");
1496 * you may not use this file except in compliance with the License.
1497 * You may obtain a copy of the License at
1498 *
1499 *   http://www.apache.org/licenses/LICENSE-2.0
1500 *
1501 * Unless required by applicable law or agreed to in writing, software
1502 * distributed under the License is distributed on an "AS IS" BASIS,
1503 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1504 * See the License for the specific language governing permissions and
1505 * limitations under the License.
1506 */return JSON.stringify(e)}catch(t){return e}}/**
1507 * @license
1508 * Copyright 2017 Google LLC
1509 *
1510 * Licensed under the Apache License, Version 2.0 (the "License");
1511 * you may not use this file except in compliance with the License.
1512 * You may obtain a copy of the License at
1513 *
1514 *   http://www.apache.org/licenses/LICENSE-2.0
1515 *
1516 * Unless required by applicable law or agreed to in writing, software
1517 * distributed under the License is distributed on an "AS IS" BASIS,
1518 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1519 * See the License for the specific language governing permissions and
1520 * limitations under the License.
1521 */function L(e="Unexpected state"){let t=`FIRESTORE (${T}) INTERNAL ASSERTION FAILED: `+e;throw A(t),Error(t)}/**
1522 * @license
1523 * Copyright 2017 Google LLC
1524 *
1525 * Licensed under the Apache License, Version 2.0 (the "License");
1526 * you may not use this file except in compliance with the License.
1527 * You may obtain a copy of the License at
1528 *
1529 *   http://www.apache.org/licenses/LICENSE-2.0
1530 *
1531 * Unless required by applicable law or agreed to in writing, software
1532 * distributed under the License is distributed on an "AS IS" BASIS,
1533 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1534 * See the License for the specific language governing permissions and
1535 * limitations under the License.
1536 */let O={OK:"ok",CANCELLED:"cancelled",UNKNOWN:"unknown",INVALID_ARGUMENT:"invalid-argument",DEADLINE_EXCEEDED:"deadline-exceeded",NOT_FOUND:"not-found",ALREADY_EXISTS:"already-exists",PERMISSION_DENIED:"permission-denied",UNAUTHENTICATED:"unauthenticated",RESOURCE_EXHAUSTED:"resource-exhausted",FAILED_PRECONDITION:"failed-precondition",ABORTED:"aborted",OUT_OF_RANGE:"out-of-range",UNIMPLEMENTED:"unimplemented",INTERNAL:"internal",UNAVAILABLE:"unavailable",DATA_LOSS:"data-loss"};class N extends w.ZR{constructor(e,t){super(e,t),this.code=e,this.message=t,this.toString=()=>`${this.name}: [code=${this.code}]: ${this.message}`}}/**
1537 * @license
1538 * Copyright 2017 Google LLC
1539 *
1540 * Licensed under the Apache License, Version 2.0 (the "License");
1541 * you may not use this file except in compliance with the License.
1542 * You may obtain a copy of the License at
1543 *
1544 *   http://www.apache.org/licenses/LICENSE-2.0
1545 *
1546 * Unless required by applicable law or agreed to in writing, software
1547 * distributed under the License is distributed on an "AS IS" BASIS,
1548 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1549 * See the License for the specific language governing permissions and
1550 * limitations under the License.
1551 */class K{constructor(){this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}}/**
1552 * @license
1553 * Copyright 2017 Google LLC
1554 *
1555 * Licensed under the Apache License, Version 2.0 (the "License");
1556 * you may not use this file except in compliance with the License.
1557 * You may obtain a copy of the License at
1558 *
1559 *   http://www.apache.org/licenses/LICENSE-2.0
1560 *
1561 * Unless required by applicable law or agreed to in writing, software
1562 * distributed under the License is distributed on an "AS IS" BASIS,
1563 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1564 * See the License for the specific language governing permissions and
1565 * limitations under the License.
1566 */class x{constructor(e,t){this.user=t,this.type="OAuth",this.headers=new Map,this.headers.set("Authorization",`Bearer ${e}`)}}class M{getToken(){return Promise.resolve(null)}invalidateToken(){}start(e,t){e.enqueueRetryable(()=>t(I.UNAUTHENTICATED))}shutdown(){}}class F{constructor(e){this.token=e,this.changeListener=null}getToken(){return Promise.resolve(this.token)}invalidateToken(){}start(e,t){this.changeListener=t,e.enqueueRetryable(()=>t(this.token.user))}shutdown(){this.changeListener=null}}class B{constructor(e){this.t=e,this.currentUser=I.UNAUTHENTICATED,this.i=0,this.forceRefresh=!1,this.auth=null}start(e,t){void 0===this.o||L();let r=this.i,n=e=>this.i!==r?(r=this.i,t(e)):Promise.resolve(),i=new K;this.o=()=>{this.i++,this.currentUser=this.u(),i.resolve(),i=new K,e.enqueueRetryable(()=>n(this.currentUser))};let a=()=>{let t=i;e.enqueueRetryable(async()=>{await t.promise,await n(this.currentUser)})},s=e=>{W("FirebaseAuthCredentialsProvider","Auth detected"),this.auth=e,this.o&&(this.auth.addAuthTokenListener(this.o),a())};this.t.onInit(e=>s(e)),setTimeout(()=>{if(!this.auth){let e=this.t.getImmediate({optional:!0});e?s(e):(W("FirebaseAuthCredentialsProvider","Auth not yet detected"),i.resolve(),i=new K)}},0),a()}getToken(){let e=this.i,t=this.forceRefresh;return this.forceRefresh=!1,this.auth?this.auth.getToken(t).then(t=>this.i!==e?(W("FirebaseAuthCredentialsProvider","getToken aborted due to token change."),this.getToken()):t?("string"==typeof t.accessToken||L(),new x(t.accessToken,this.currentUser)):null):Promise.resolve(null)}invalidateToken(){this.forceRefresh=!0}shutdown(){this.auth&&this.o&&this.auth.removeAuthTokenListener(this.o),this.o=void 0}u(){let e=this.auth&&this.auth.getUid();return null===e||"string"==typeof e||L(),new I(e)}}class V{constructor(e,t,r){this.l=e,this.h=t,this.P=r,this.type="FirstParty",this.user=I.FIRST_PARTY,this.I=new Map}T(){return this.P?this.P():null}get headers(){this.I.set("X-Goog-AuthUser",this.l);let e=this.T();return e&&this.I.set("Authorization",e),this.h&&this.I.set("X-Goog-Iam-Authorization-Token",this.h),this.I}}class q{constructor(e,t,r){this.l=e,this.h=t,this.P=r}getToken(){return Promise.resolve(new V(this.l,this.h,this.P))}start(e,t){e.enqueueRetryable(()=>t(I.FIRST_PARTY))}shutdown(){}invalidateToken(){}}class j{constructor(e){this.value=e,this.type="AppCheck",this.headers=new Map,e&&e.length>0&&this.headers.set("x-firebase-appcheck",this.value)}}class G{constructor(e){this.A=e,this.forceRefresh=!1,this.appCheck=null,this.R=null}start(e,t){void 0===this.o||L();let r=e=>{null!=e.error&&W("FirebaseAppCheckTokenProvider",`Error getting App Check token; using placeholder token instead. Error: ${e.error.message}`);let r=e.token!==this.R;return this.R=e.token,W("FirebaseAppCheckTokenProvider",`Received ${r?"new":"existing"} token.`),r?t(e.token):Promise.resolve()};this.o=t=>{e.enqueueRetryable(()=>r(t))};let n=e=>{W("FirebaseAppCheckTokenProvider","AppCheck detected"),this.appCheck=e,this.o&&this.appCheck.addTokenListener(this.o)};this.A.onInit(e=>n(e)),setTimeout(()=>{if(!this.appCheck){let e=this.A.getImmediate({optional:!0});e?n(e):W("FirebaseAppCheckTokenProvider","AppCheck not yet detected")}},0)}getToken(){let e=this.forceRefresh;return this.forceRefresh=!1,this.appCheck?this.appCheck.getToken(e).then(e=>e?("string"==typeof e.token||L(),this.R=e.token,new j(e.token)):null):Promise.resolve(null)}invalidateToken(){this.forceRefresh=!0}shutdown(){this.appCheck&&this.o&&this.appCheck.removeTokenListener(this.o),this.o=void 0}}/**
1567 * @license
1568 * Copyright 2017 Google LLC
1569 *
1570 * Licensed under the Apache License, Version 2.0 (the "License");
1571 * you may not use this file except in compliance with the License.
1572 * You may obtain a copy of the License at
1573 *
1574 *   http://www.apache.org/licenses/LICENSE-2.0
1575 *
1576 * Unless required by applicable law or agreed to in writing, software
1577 * distributed under the License is distributed on an "AS IS" BASIS,
1578 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1579 * See the License for the specific language governing permissions and
1580 * limitations under the License.
1581 */class z{static newId(){let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t=Math.floor(256/e.length)*e.length,r="";for(;r.length<20;){let n=/**
1582 * @license
1583 * Copyright 2020 Google LLC
1584 *
1585 * Licensed under the Apache License, Version 2.0 (the "License");
1586 * you may not use this file except in compliance with the License.
1587 * You may obtain a copy of the License at
1588 *
1589 *   http://www.apache.org/licenses/LICENSE-2.0
1590 *
1591 * Unless required by applicable law or agreed to in writing, software
1592 * distributed under the License is distributed on an "AS IS" BASIS,
1593 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1594 * See the License for the specific language governing permissions and
1595 * limitations under the License.
1596 */function(e){let t="undefined"!=typeof self&&(self.crypto||self.msCrypto),r=new Uint8Array(40);if(t&&"function"==typeof t.getRandomValues)t.getRandomValues(r);else for(let e=0;e<40;e++)r[e]=Math.floor(256*Math.random());return r}(0);for(let i=0;i<n.length;++i)r.length<20&&n[i]<t&&(r+=e.charAt(n[i]%e.length))}return r}}function $(e,t){return e<t?-1:e>t?1:0}function J(e,t,r){return e.length===t.length&&e.every((e,n)=>r(e,t[n]))}/**
1597 * @license
1598 * Copyright 2017 Google LLC
1599 *
1600 * Licensed under the Apache License, Version 2.0 (the "License");
1601 * you may not use this file except in compliance with the License.
1602 * You may obtain a copy of the License at
1603 *
1604 *   http://www.apache.org/licenses/LICENSE-2.0
1605 *
1606 * Unless required by applicable law or agreed to in writing, software
1607 * distributed under the License is distributed on an "AS IS" BASIS,
1608 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1609 * See the License for the specific language governing permissions and
1610 * limitations under the License.
1611 */class Q{constructor(e,t){if(this.seconds=e,this.nanoseconds=t,t<0||t>=1e9)throw new N(O.INVALID_ARGUMENT,"Timestamp nanoseconds out of range: "+t);if(e<-62135596800||e>=253402300800)throw new N(O.INVALID_ARGUMENT,"Timestamp seconds out of range: "+e)}static now(){return Q.fromMillis(Date.now())}static fromDate(e){return Q.fromMillis(e.getTime())}static fromMillis(e){let t=Math.floor(e/1e3);return new Q(t,Math.floor(1e6*(e-1e3*t)))}toDate(){return new Date(this.toMillis())}toMillis(){return 1e3*this.seconds+this.nanoseconds/1e6}_compareTo(e){return this.seconds===e.seconds?$(this.nanoseconds,e.nanoseconds):$(this.seconds,e.seconds)}isEqual(e){return e.seconds===this.seconds&&e.nanoseconds===this.nanoseconds}toString(){return"Timestamp(seconds="+this.seconds+", nanoseconds="+this.nanoseconds+")"}toJSON(){return{seconds:this.seconds,nanoseconds:this.nanoseconds}}valueOf(){return String(this.seconds- -62135596800).padStart(12,"0")+"."+String(this.nanoseconds).padStart(9,"0")}}/**
1612 * @license
1613 * Copyright 2017 Google LLC
1614 *
1615 * Licensed under the Apache License, Version 2.0 (the "License");
1616 * you may not use this file except in compliance with the License.
1617 * You may obtain a copy of the License at
1618 *
1619 *   http://www.apache.org/licenses/LICENSE-2.0
1620 *
1621 * Unless required by applicable law or agreed to in writing, software
1622 * distributed under the License is distributed on an "AS IS" BASIS,
1623 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1624 * See the License for the specific language governing permissions and
1625 * limitations under the License.
1626 */class X{constructor(e){this.timestamp=e}static fromTimestamp(e){return new X(e)}static min(){return new X(new Q(0,0))}static max(){return new X(new Q(253402300799,999999999))}compareTo(e){return this.timestamp._compareTo(e.timestamp)}isEqual(e){return this.timestamp.isEqual(e.timestamp)}toMicroseconds(){return 1e6*this.timestamp.seconds+this.timestamp.nanoseconds/1e3}toString(){return"SnapshotVersion("+this.timestamp.toString()+")"}toTimestamp(){return this.timestamp}}/**
1627 * @license
1628 * Copyright 2017 Google LLC
1629 *
1630 * Licensed under the Apache License, Version 2.0 (the "License");
1631 * you may not use this file except in compliance with the License.
1632 * You may obtain a copy of the License at
1633 *
1634 *   http://www.apache.org/licenses/LICENSE-2.0
1635 *
1636 * Unless required by applicable law or agreed to in writing, software
1637 * distributed under the License is distributed on an "AS IS" BASIS,
1638 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1639 * See the License for the specific language governing permissions and
1640 * limitations under the License.
1641 */class Y{constructor(e,t,r){void 0===t?t=0:t>e.length&&L(),void 0===r?r=e.length-t:r>e.length-t&&L(),this.segments=e,this.offset=t,this.len=r}get length(){return this.len}isEqual(e){return 0===Y.comparator(this,e)}child(e){let t=this.segments.slice(this.offset,this.limit());return e instanceof Y?e.forEach(e=>{t.push(e)}):t.push(e),this.construct(t)}limit(){return this.offset+this.length}popFirst(e){return e=void 0===e?1:e,this.construct(this.segments,this.offset+e,this.length-e)}popLast(){return this.construct(this.segments,this.offset,this.length-1)}firstSegment(){return this.segments[this.offset]}lastSegment(){return this.get(this.length-1)}get(e){return this.segments[this.offset+e]}isEmpty(){return 0===this.length}isPrefixOf(e){if(e.length<this.length)return!1;for(let t=0;t<this.length;t++)if(this.get(t)!==e.get(t))return!1;return!0}isImmediateParentOf(e){if(this.length+1!==e.length)return!1;for(let t=0;t<this.length;t++)if(this.get(t)!==e.get(t))return!1;return!0}forEach(e){for(let t=this.offset,r=this.limit();t<r;t++)e(this.segments[t])}toArray(){return this.segments.slice(this.offset,this.limit())}static comparator(e,t){let r=Math.min(e.length,t.length);for(let n=0;n<r;n++){let r=e.get(n),i=t.get(n);if(r<i)return -1;if(r>i)return 1}return e.length<t.length?-1:e.length>t.length?1:0}}class Z extends Y{construct(e,t,r){return new Z(e,t,r)}canonicalString(){return this.toArray().join("/")}toString(){return this.canonicalString()}toUriEncodedString(){return this.toArray().map(encodeURIComponent).join("/")}static fromString(...e){let t=[];for(let r of e){if(r.indexOf("//")>=0)throw new N(O.INVALID_ARGUMENT,`Invalid segment (${r}). Paths must not contain // in them.`);t.push(...r.split("/").filter(e=>e.length>0))}return new Z(t)}static emptyPath(){return new Z([])}}let ee=/^[_a-zA-Z][_a-zA-Z0-9]*$/;class et extends Y{construct(e,t,r){return new et(e,t,r)}static isValidIdentifier(e){return ee.test(e)}canonicalString(){return this.toArray().map(e=>(e=e.replace(/\\/g,"\\\\").replace(/`/g,"\\`"),et.isValidIdentifier(e)||(e="`"+e+"`"),e)).join(".")}toString(){return this.canonicalString()}isKeyField(){return 1===this.length&&"__name__"===this.get(0)}static keyField(){return new et(["__name__"])}static fromServerFormat(e){let t=[],r="",n=0,i=()=>{if(0===r.length)throw new N(O.INVALID_ARGUMENT,`Invalid field path (${e}). Paths must not be empty, begin with '.', end with '.', or contain '..'`);t.push(r),r=""},a=!1;for(;n<e.length;){let t=e[n];if("\\"===t){if(n+1===e.length)throw new N(O.INVALID_ARGUMENT,"Path has trailing escape character: "+e);let t=e[n+1];if("\\"!==t&&"."!==t&&"`"!==t)throw new N(O.INVALID_ARGUMENT,"Path has invalid escape sequence: "+e);r+=t,n+=2}else"`"===t?a=!a:"."!==t||a?r+=t:i(),n++}if(i(),a)throw new N(O.INVALID_ARGUMENT,"Unterminated ` in path: "+e);return new et(t)}static emptyPath(){return new et([])}}/**
1642 * @license
1643 * Copyright 2017 Google LLC
1644 *
1645 * Licensed under the Apache License, Version 2.0 (the "License");
1646 * you may not use this file except in compliance with the License.
1647 * You may obtain a copy of the License at
1648 *
1649 *   http://www.apache.org/licenses/LICENSE-2.0
1650 *
1651 * Unless required by applicable law or agreed to in writing, software
1652 * distributed under the License is distributed on an "AS IS" BASIS,
1653 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1654 * See the License for the specific language governing permissions and
1655 * limitations under the License.
1656 */class er{constructor(e){this.path=e}static fromPath(e){return new er(Z.fromString(e))}static fromName(e){return new er(Z.fromString(e).popFirst(5))}static empty(){return new er(Z.emptyPath())}get collectionGroup(){return this.path.popLast().lastSegment()}hasCollectionId(e){return this.path.length>=2&&this.path.get(this.path.length-2)===e}getCollectionGroup(){return this.path.get(this.path.length-2)}getCollectionPath(){return this.path.popLast()}isEqual(e){return null!==e&&0===Z.comparator(this.path,e.path)}toString(){return this.path.toString()}static comparator(e,t){return Z.comparator(e.path,t.path)}static isDocumentKey(e){return e.length%2==0}static fromSegments(e){return new er(new Z(e.slice()))}}/**
1657 * @license
1658 * Copyright 2021 Google LLC
1659 *
1660 * Licensed under the Apache License, Version 2.0 (the "License");
1661 * you may not use this file except in compliance with the License.
1662 * You may obtain a copy of the License at
1663 *
1664 *   http://www.apache.org/licenses/LICENSE-2.0
1665 *
1666 * Unless required by applicable law or agreed to in writing, software
1667 * distributed under the License is distributed on an "AS IS" BASIS,
1668 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1669 * See the License for the specific language governing permissions and
1670 * limitations under the License.
1671 */class en{constructor(e,t,r,n){this.indexId=e,this.collectionGroup=t,this.fields=r,this.indexState=n}}en.UNKNOWN_ID=-1;class ei{constructor(e,t,r){this.readTime=e,this.documentKey=t,this.largestBatchId=r}static min(){return new ei(X.min(),er.empty(),-1)}static max(){return new ei(X.max(),er.empty(),-1)}}class ea{constructor(){this.onCommittedListeners=[]}addOnCommittedListener(e){this.onCommittedListeners.push(e)}raiseOnCommittedEvent(){this.onCommittedListeners.forEach(e=>e())}}/**
1672 * @license
1673 * Copyright 2017 Google LLC
1674 *
1675 * Licensed under the Apache License, Version 2.0 (the "License");
1676 * you may not use this file except in compliance with the License.
1677 * You may obtain a copy of the License at
1678 *
1679 *   http://www.apache.org/licenses/LICENSE-2.0
1680 *
1681 * Unless required by applicable law or agreed to in writing, software
1682 * distributed under the License is distributed on an "AS IS" BASIS,
1683 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1684 * See the License for the specific language governing permissions and
1685 * limitations under the License.
1686 */async function es(e){if(e.code!==O.FAILED_PRECONDITION||"The current tab is not in the required state to perform this operation. It might be necessary to refresh the browser tab."!==e.message)throw e;W("LocalStore","Unexpectedly lost primary lease")}/**
1687 * @license
1688 * Copyright 2017 Google LLC
1689 *
1690 * Licensed under the Apache License, Version 2.0 (the "License");
1691 * you may not use this file except in compliance with the License.
1692 * You may obtain a copy of the License at
1693 *
1694 *   http://www.apache.org/licenses/LICENSE-2.0
1695 *
1696 * Unless required by applicable law or agreed to in writing, software
1697 * distributed under the License is distributed on an "AS IS" BASIS,
1698 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1699 * See the License for the specific language governing permissions and
1700 * limitations under the License.
1701 */class eo{constructor(e){this.nextCallback=null,this.catchCallback=null,this.result=void 0,this.error=void 0,this.isDone=!1,this.callbackAttached=!1,e(e=>{this.isDone=!0,this.result=e,this.nextCallback&&this.nextCallback(e)},e=>{this.isDone=!0,this.error=e,this.catchCallback&&this.catchCallback(e)})}catch(e){return this.next(void 0,e)}next(e,t){return this.callbackAttached&&L(),this.callbackAttached=!0,this.isDone?this.error?this.wrapFailure(t,this.error):this.wrapSuccess(e,this.result):new eo((r,n)=>{this.nextCallback=t=>{this.wrapSuccess(e,t).next(r,n)},this.catchCallback=e=>{this.wrapFailure(t,e).next(r,n)}})}toPromise(){return new Promise((e,t)=>{this.next(e,t)})}wrapUserFunction(e){try{let t=e();return t instanceof eo?t:eo.resolve(t)}catch(e){return eo.reject(e)}}wrapSuccess(e,t){return e?this.wrapUserFunction(()=>e(t)):eo.resolve(t)}wrapFailure(e,t){return e?this.wrapUserFunction(()=>e(t)):eo.reject(t)}static resolve(e){return new eo((t,r)=>{t(e)})}static reject(e){return new eo((t,r)=>{r(e)})}static waitFor(e){return new eo((t,r)=>{let n=0,i=0,a=!1;e.forEach(e=>{++n,e.next(()=>{++i,a&&i===n&&t()},e=>r(e))}),a=!0,i===n&&t()})}static or(e){let t=eo.resolve(!1);for(let r of e)t=t.next(e=>e?eo.resolve(e):r());return t}static forEach(e,t){let r=[];return e.forEach((e,n)=>{r.push(t.call(this,e,n))}),this.waitFor(r)}static mapArray(e,t){return new eo((r,n)=>{let i=e.length,a=Array(i),s=0;for(let o=0;o<i;o++){let c=o;t(e[c]).next(e=>{a[c]=e,++s===i&&r(a)},e=>n(e))}})}static doWhile(e,t){return new eo((r,n)=>{let i=()=>{!0===e()?t().next(()=>{i()},n):r()};i()})}}function ec(e){return"IndexedDbTransactionError"===e.name}/**
1702 * @license
1703 * Copyright 2018 Google LLC
1704 *
1705 * Licensed under the Apache License, Version 2.0 (the "License");
1706 * you may not use this file except in compliance with the License.
1707 * You may obtain a copy of the License at
1708 *
1709 *   http://www.apache.org/licenses/LICENSE-2.0
1710 *
1711 * Unless required by applicable law or agreed to in writing, software
1712 * distributed under the License is distributed on an "AS IS" BASIS,
1713 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1714 * See the License for the specific language governing permissions and
1715 * limitations under the License.
1716 */class eu{constructor(e,t){this.previousValue=e,t&&(t.sequenceNumberHandler=e=>this.ie(e),this.se=e=>t.writeSequenceNumber(e))}ie(e){return this.previousValue=Math.max(e,this.previousValue),this.previousValue}next(){let e=++this.previousValue;return this.se&&this.se(e),e}}function el(e){return 0===e&&1/e==-1/0}/**
1717 * @license
1718 * Copyright 2017 Google LLC
1719 *
1720 * Licensed under the Apache License, Version 2.0 (the "License");
1721 * you may not use this file except in compliance with the License.
1722 * You may obtain a copy of the License at
1723 *
1724 *   http://www.apache.org/licenses/LICENSE-2.0
1725 *
1726 * Unless required by applicable law or agreed to in writing, software
1727 * distributed under the License is distributed on an "AS IS" BASIS,
1728 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1729 * See the License for the specific language governing permissions and
1730 * limitations under the License.
1731 */function eh(e){let t=0;for(let r in e)Object.prototype.hasOwnProperty.call(e,r)&&t++;return t}function eg(e,t){for(let r in e)Object.prototype.hasOwnProperty.call(e,r)&&t(r,e[r])}function ed(e){for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t))return!1;return!0}eu.oe=-1;/**
1732 * @license
1733 * Copyright 2017 Google LLC
1734 *
1735 * Licensed under the Apache License, Version 2.0 (the "License");
1736 * you may not use this file except in compliance with the License.
1737 * You may obtain a copy of the License at
1738 *
1739 *   http://www.apache.org/licenses/LICENSE-2.0
1740 *
1741 * Unless required by applicable law or agreed to in writing, software
1742 * distributed under the License is distributed on an "AS IS" BASIS,
1743 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1744 * See the License for the specific language governing permissions and
1745 * limitations under the License.
1746 */class em{constructor(e,t){this.comparator=e,this.root=t||ey.EMPTY}insert(e,t){return new em(this.comparator,this.root.insert(e,t,this.comparator).copy(null,null,ey.BLACK,null,null))}remove(e){return new em(this.comparator,this.root.remove(e,this.comparator).copy(null,null,ey.BLACK,null,null))}get(e){let t=this.root;for(;!t.isEmpty();){let r=this.comparator(e,t.key);if(0===r)return t.value;r<0?t=t.left:r>0&&(t=t.right)}return null}indexOf(e){let t=0,r=this.root;for(;!r.isEmpty();){let n=this.comparator(e,r.key);if(0===n)return t+r.left.size;n<0?r=r.left:(t+=r.left.size+1,r=r.right)}return -1}isEmpty(){return this.root.isEmpty()}get size(){return this.root.size}minKey(){return this.root.minKey()}maxKey(){return this.root.maxKey()}inorderTraversal(e){return this.root.inorderTraversal(e)}forEach(e){this.inorderTraversal((t,r)=>(e(t,r),!1))}toString(){let e=[];return this.inorderTraversal((t,r)=>(e.push(`${t}:${r}`),!1)),`{${e.join(", ")}}`}reverseTraversal(e){return this.root.reverseTraversal(e)}getIterator(){return new ep(this.root,null,this.comparator,!1)}getIteratorFrom(e){return new ep(this.root,e,this.comparator,!1)}getReverseIterator(){return new ep(this.root,null,this.comparator,!0)}getReverseIteratorFrom(e){return new ep(this.root,e,this.comparator,!0)}}class ep{constructor(e,t,r,n){this.isReverse=n,this.nodeStack=[];let i=1;for(;!e.isEmpty();)if(i=t?r(e.key,t):1,t&&n&&(i*=-1),i<0)e=this.isReverse?e.left:e.right;else{if(0===i){this.nodeStack.push(e);break}this.nodeStack.push(e),e=this.isReverse?e.right:e.left}}getNext(){let e=this.nodeStack.pop(),t={key:e.key,value:e.value};if(this.isReverse)for(e=e.left;!e.isEmpty();)this.nodeStack.push(e),e=e.right;else for(e=e.right;!e.isEmpty();)this.nodeStack.push(e),e=e.left;return t}hasNext(){return this.nodeStack.length>0}peek(){if(0===this.nodeStack.length)return null;let e=this.nodeStack[this.nodeStack.length-1];return{key:e.key,value:e.value}}}class ey{constructor(e,t,r,n,i){this.key=e,this.value=t,this.color=null!=r?r:ey.RED,this.left=null!=n?n:ey.EMPTY,this.right=null!=i?i:ey.EMPTY,this.size=this.left.size+1+this.right.size}copy(e,t,r,n,i){return new ey(null!=e?e:this.key,null!=t?t:this.value,
1746null!=r?r:this.color,null!=n?n:this.left,null!=i?i:this.right)}isEmpty(){return!1}inorderTraversal(e){return this.left.inorderTraversal(e)||e(this.key,this.value)||this.right.inorderTraversal(e)}reverseTraversal(e){return this.right.reverseTraversal(e)||e(this.key,this.value)||this.left.reverseTraversal(e)}min(){return this.left.isEmpty()?this:this.left.min()}minKey(){return this.min().key}maxKey(){return this.right.isEmpty()?this.key:this.right.maxKey()}insert(e,t,r){let n=this,i=r(e,n.key);return(n=i<0?n.copy(null,null,null,n.left.insert(e,t,r),null):0===i?n.copy(null,t,null,null,null):n.copy(null,null,null,null,n.right.insert(e,t,r))).fixUp()}removeMin(){if(this.left.isEmpty())return ey.EMPTY;let e=this;return e.left.isRed()||e.left.left.isRed()||(e=e.moveRedLeft()),(e=e.copy(null,null,null,e.left.removeMin(),null)).fixUp()}remove(e,t){let r,n=this;if(0>t(e,n.key))n.left.isEmpty()||n.left.isRed()||n.left.left.isRed()||(n=n.moveRedLeft()),n=n.copy(null,null,null,n.left.remove(e,t),null);else{if(n.left.isRed()&&(n=n.rotateRight()),n.right.isEmpty()||n.right.isRed()||n.right.left.isRed()||(n=n.moveRedRight()),0===t(e,n.key)){if(n.right.isEmpty())return ey.EMPTY;r=n.right.min(),n=n.copy(r.key,r.value,null,null,n.right.removeMin())}n=n.copy(null,null,null,null,n.right.remove(e,t))}return n.fixUp()}isRed(){return this.color}fixUp(){let e=this;return e.right.isRed()&&!e.left.isRed()&&(e=e.rotateLeft()),e.left.isRed()&&e.left.left.isRed()&&(e=e.rotateRight()),e.left.isRed()&&e.right.isRed()&&(e=e.colorFlip()),e}moveRedLeft(){let e=this.colorFlip();return e.right.left.isRed()&&(e=(e=(e=e.copy(null,null,null,null,e.right.rotateRight())).rotateLeft()).colorFlip()),e}moveRedRight(){let e=this.colorFlip();return e.left.left.isRed()&&(e=(e=e.rotateRight()).colorFlip()),e}rotateLeft(){let e=this.copy(null,null,ey.RED,null,this.right.left);return this.right.copy(null,null,this.color,e,null)}rotateRight(){let e=this.copy(null,null,ey.RED,this.left.right,null);return this.left.copy(null,null,this.color,null,e)}colorFlip(){let e=this.left.copy(null,null,!this.left.color,null,null),t=this.right.copy(null,null,!this.right.color,null,null);return this.copy(null,null,!this.color,e,t)}checkMaxDepth(){return Math.pow(2,this.check())<=this.size+1}check(){if(this.isRed()&&this.left.isRed()||this.right.isRed())throw L();let e=this.left.check();if(e!==this.right.check())throw L();return e+(this.isRed()?0:1)}}ey.EMPTY=null,ey.RED=!0,ey.BLACK=!1,ey.EMPTY=new class{constructor(){this.size=0}get key(){throw L()}get value(){throw L()}get color(){throw L()}get left(){throw L()}get right(){throw L()}copy(e,t,r,n,i){return this}insert(e,t,r){return new ey(e,t)}remove(e,t){return this}isEmpty(){return!0}inorderTraversal(e){return!1}reverseTraversal(e){return!1}minKey(){return null}maxKey(){return null}isRed(){return!1}checkMaxDepth(){return!0}check(){return 0}};/**
1747 * @license
1748 * Copyright 2017 Google LLC
1749 *
1750 * Licensed under the Apache License, Version 2.0 (the "License");
1751 * you may not use this file except in compliance with the License.
1752 * You may obtain a copy of the License at
1753 *
1754 *   http://www.apache.org/licenses/LICENSE-2.0
1755 *
1756 * Unless required by applicable law or agreed to in writing, software
1757 * distributed under the License is distributed on an "AS IS" BASIS,
1758 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1759 * See the License for the specific language governing permissions and
1760 * limitations under the License.
1761 */class ef{constructor(e){this.comparator=e,this.data=new em(this.comparator)}has(e){return null!==this.data.get(e)}first(){return this.data.minKey()}last(){return this.data.maxKey()}get size(){return this.data.size}indexOf(e){return this.data.indexOf(e)}forEach(e){this.data.inorderTraversal((t,r)=>(e(t),!1))}forEachInRange(e,t){let r=this.data.getIteratorFrom(e[0]);for(;r.hasNext();){let n=r.getNext();if(this.comparator(n.key,e[1])>=0)return;t(n.key)}}forEachWhile(e,t){let r;for(r=void 0!==t?this.data.getIteratorFrom(t):this.data.getIterator();r.hasNext();)if(!e(r.getNext().key))return}firstAfterOrEqual(e){let t=this.data.getIteratorFrom(e);return t.hasNext()?t.getNext().key:null}getIterator(){return new ev(this.data.getIterator())}getIteratorFrom(e){return new ev(this.data.getIteratorFrom(e))}add(e){return this.copy(this.data.remove(e).insert(e,!0))}delete(e){return this.has(e)?this.copy(this.data.remove(e)):this}isEmpty(){return this.data.isEmpty()}unionWith(e){let t=this;
1761return t.size<e.size&&(t=e,e=this),e.forEach(e=>{t=t.add(e)}),t}isEqual(e){if(!(e instanceof ef)||this.size!==e.size)return!1;let t=this.data.getIterator(),r=e.data.getIterator();for(;t.hasNext();){let e=t.getNext().key,n=r.getNext().key;if(0!==this.comparator(e,n))return!1}return!0}toArray(){let e=[];return this.forEach(t=>{e.push(t)}),e}toString(){let e=[];return this.forEach(t=>e.push(t)),"SortedSet("+e.toString()+")"}copy(e){let t=new ef(this.comparator);return t.data=e,t}}class ev{constructor(e){this.iter=e}getNext(){return this.iter.getNext().key}hasNext(){return this.iter.hasNext()}}/**
1762 * @license
1763 * Copyright 2020 Google LLC
1764 *
1765 * Licensed under the Apache License, Version 2.0 (the "License");
1766 * you may not use this file except in compliance with the License.
1767 * You may obtain a copy of the License at
1768 *
1769 *   http://www.apache.org/licenses/LICENSE-2.0
1770 *
1771 * Unless required by applicable law or agreed to in writing, software
1772 * distributed under the License is distributed on an "AS IS" BASIS,
1773 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1774 * See the License for the specific language governing permissions and
1775 * limitations under the License.
1776 */class e_{constructor(e){this.fields=e,e.sort(et.comparator)}static empty(){return new e_([])}unionWith(e){let t=new ef(et.comparator);for(let e of this.fields)t=t.add(e);for(let r of e)t=t.add(r);return new e_(t.toArray())}covers(e){for(let t of this.fields)if(t.isPrefixOf(e))return!0;return!1}isEqual(e){return J(this.fields,e.fields,(e,t)=>e.isEqual(t))}}/**
1777 * @license
1778 * Copyright 2023 Google LLC
1779 *
1780 * Licensed under the Apache License, Version 2.0 (the "License");
1781 * you may not use this file except in compliance with the License.
1782 * You may obtain a copy of the License at
1783 *
1784 *   http://www.apache.org/licenses/LICENSE-2.0
1785 *
1786 * Unless required by applicable law or agreed to in writing, software
1787 * distributed under the License is distributed on an "AS IS" BASIS,
1788 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1789 * See the License for the specific language governing permissions and
1790 * limitations under the License.
1791 */class ew extends Error{constructor(){super(...arguments),this.name="Base64DecodeError"}}/**
1792 * @license
1793 * Copyright 2020 Google LLC
1794 *
1795 * Licensed under the Apache License, Version 2.0 (the "License");
1796 * you may not use this file except in compliance with the License.
1797 * You may obtain a copy of the License at
1798 *
1799 *   http://www.apache.org/licenses/LICENSE-2.0
1800 *
1801 * Unless required by applicable law or agreed to in writing, software
1802 * distributed under the License is distributed on an "AS IS" BASIS,
1803 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1804 * See the License for the specific language governing permissions and
1805 * limitations under the License.
1806 */class ek{constructor(e){this.binaryString=e}static fromBase64String(e){return new ek(function(e){try{return atob(e)}catch(e){throw"undefined"!=typeof DOMException&&e instanceof DOMException?new ew("Invalid base64 string: "+e):e}}(e))}static fromUint8Array(e){return new ek(function(e){let t="";for(let r=0;r<e.length;++r)t+=String.fromCharCode(e[r]);return t}(e))}[Symbol.iterator](){let e=0;return{next:()=>e<this.binaryString.length?{value:this.binaryString.charCodeAt(e++),done:!1}:{value:void 0,done:!0}}}toBase64(){return btoa(this.binaryString)}toUint8Array(){return function(e){let t=new Uint8Array(e.length);for(let r=0;r<e.length;r++)t[r]=e.charCodeAt(r);return t}(this.binaryString)}approximateByteSize(){return 2*this.binaryString.length}compareTo(e){return $(this.binaryString,e.binaryString)}isEqual(e){return this.binaryString===e.binaryString}}ek.EMPTY_BYTE_STRING=new ek("");let eP=new RegExp(/^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(?:\.(\d+))?Z$/);function eb(e){if(e||L(),"string"==typeof e){let t=0,r=eP.exec(e);if(r||L(),r[1]){let e=r[1];t=Number(e=(e+"000000000").substr(0,9))}return{seconds:Math.floor(new Date(e).getTime()/1e3),nanos:t}}return{seconds:eE(e.seconds),nanos:eE(e.nanos)}}function eE(e){return"number"==typeof e?e:"string"==typeof e?Number(e):0}function eR(e){return"string"==typeof e?ek.fromBase64String(e):ek.fromUint8Array(e)}/**
1807 * @license
1808 * Copyright 2020 Google LLC
1809 *
1810 * Licensed under the Apache License, Version 2.0 (the "License");
1811 * you may not use this file except in compliance with the License.
1812 * You may obtain a copy of the License at
1813 *
1814 *   http://www.apache.org/licenses/LICENSE-2.0
1815 *
1816 * Unless required by applicable law or agreed to in writing, software
1817 * distributed under the License is distributed on an "AS IS" BASIS,
1818 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1819 * See the License for the specific language governing permissions and
1820 * limitations under the License.
1821 */function eS(e){var t,r;return"server_timestamp"===(null===(r=((null===(t=null==e?void 0:e.mapValue)||void 0===t?void 0:t.fields)||{}).__type__)||void 0===r?void 0:r.stringValue)}function eI(e){let t=e.mapValue.fields.__previous_value__;return eS(t)?eI(t):t}function eT(e){let t=eb(e.mapValue.fields.__local_write_time__.timestampValue);return new Q(t.seconds,t.nanos)}/**
1822 * @license
1823 * Copyright 2017 Google LLC
1824 *
1825 * Licensed under the Apache License, Version 2.0 (the "License");
1826 * you may not use this file except in compliance with the License.
1827 * You may obtain a copy of the License at
1828 *
1829 *   http://www.apache.org/licenses/LICENSE-2.0
1830 *
1831 * Unless required by applicable law or agreed to in writing, software
1832 * distributed under the License is distributed on an "AS IS" BASIS,
1833 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1834 * See the License for the specific language governing permissions and
1835 * limitations under the License.
1836 */class eC{constructor(e,t,r,n,i,a,s,o,c){this.databaseId=e,this.appId=t,this.persistenceKey=r,this.host=n,this.ssl=i,this.forceLongPolling=a,this.autoDetectLongPolling=s,this.longPollingOptions=o,this.useFetchStreams=c}}class eH{constructor(e,t){this.projectId=e,this.database=t||"(default)"}static empty(){return new eH("","")}get isDefaultDatabase(){return"(default)"===this.database}isEqual(e){return e instanceof eH&&e.projectId===this.projectId&&e.database===this.database}}/**
1837 * @license
1838 * Copyright 2020 Google LLC
1839 *
1840 * Licensed under the Apache License, Version 2.0 (the "License");
1841 * you may not use this file except in compliance with the License.
1842 * You may obtain a copy of the License at
1843 *
1844 *   http://www.apache.org/licenses/LICENSE-2.0
1845 *
1846 * Unless required by applicable law or agreed to in writing, software
1847 * distributed under the License is distributed on an "AS IS" BASIS,
1848 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1849 * See the License for the specific language governing permissions and
1850 * limitations under the License.
1851 */let eW={mapValue:{fields:{__type__:{stringValue:"__max__"}}}};function eA(e){return"nullValue"in e?0:"booleanValue"in e?1:"integerValue"in e||"doubleValue"in e?2:"timestampValue"in e?3:"stringValue"in e?5:"bytesValue"in e?6:"referenceValue"in e?7:"geoPointValue"in e?8:"arrayValue"in e?9:"mapValue"in e?eS(e)?4:ez(e)?9007199254740991:ej(e)?10:11:L()}function eD(e,t){if(e===t)return!0;let r=eA(e);if(r!==eA(t))return!1;switch(r){case 0:case 9007199254740991:return!0;case 1:return e.booleanValue===t.booleanValue;case 4:return eT(e).isEqual(eT(t));case 3:return function(e,t){if("string"==typeof e.timestampValue&&"string"==typeof t.timestampValue&&e.timestampValue.length===t.timestampValue.length)return e.timestampValue===t.timestampValue;let r=eb(e.timestampValue),n=eb(t.timestampValue);return r.seconds===n.seconds&&r.nanos===n.nanos}(e,t);case 5:return e.stringValue===t.stringValue;case 6:return eR(e.bytesValue).isEqual(eR(t.bytesValue));case 7:return e.referenceValue===t.referenceValue;case 8:return eE(e.geoPointValue.latitude)===eE(t.geoPointValue.latitude)&&eE(e.geoPointValue.longitude)===eE(t.geoPointValue.longitude);case 2:return function(e,t){if("integerValue"in e&&"integerValue"in t)return eE(e.integerValue)===eE(t.integerValue);if("doubleValue"in e&&"doubleValue"in t){let r=eE(e.doubleValue),n=eE(t.doubleValue);return r===n?el(r)===el(n):isNaN(r)&&isNaN(n)}return!1}(e,t);case 9:return J(e.arrayValue.values||[],t.arrayValue.values||[],eD);case 10:case 11:return function(e,t){let r=e.mapValue.fields||{},n=t.mapValue.fields||{};if(eh(r)!==eh(n))return!1;for(let e in r)if(r.hasOwnProperty(e)&&(void 0===n[e]||!eD(r[e],n[e])))return!1;return!0}(e,t);default:return L()}}function eU(e,t){return void 0!==(e.values||[]).find(e=>eD(e,t))}function eL(e,t){if(e===t)return 0;let r=eA(e),n=eA(t);if(r!==n)return $(r,n);switch(r){case 0:case 9007199254740991:return 0;case 1:return $(e.booleanValue,t.booleanValue);case 2:return function(e,t){let r=eE(e.integerValue||e.doubleValue),n=eE(t.integerValue||t.doubleValue);return r<n?-1:r>n?1:r===n?0:isNaN(r)?isNaN(n)?0:-1:1}(e,t);case 3:return eO(e.timestampValue,t.timestampValue);case 4:return eO(eT(e),eT(t));case 5:return $(e.stringValue,t.stringValue);case 6:return function(e,t){let r=eR(e),n=eR(t);return r.compareTo(n)}(e.bytesValue,t.bytesValue);case 7:return function(e,t){let r=e.split("/"),n=t.split("/");for(let e=0;e<r.length&&e<n.length;e++){let t=$(r[e],n[e]);if(0!==t)return t}return $(r.length,n.length)}(e.referenceValue,t.referenceValue);case 8:return function(e,t){let r=$(eE(e.latitude),eE(t.latitude));return 0!==r?r:$(eE(e.longitude),eE(t.longitude))}(e.geoPointValue,t.geoPointValue);case 9:return eN(e.arrayValue,t.arrayValue);case 10:return function(e,t){var r,n,i,a;let s=e.fields||{},o=t.fields||{},c=null===(r=s.value)||void 0===r?void 0:r.arrayValue,u=null===(n=o.value)||void 0===n?void 0:n.arrayValue,l=$((null===(i=null==c?void 0:c.values)||void 0===i?void 0:i.length)||0,(null===(a=null==u?void 0:u.values)||void 0===a?void 0:a.length)||0);return 0!==l?l:eN(c,u)}(e.mapValue,t.mapValue);case 11:return function(e,t){if(e===eW.mapValue&&t===eW.mapValue)return 0;if(e===eW.mapValue)return 1;if(t===eW.mapValue)return -1;let r=e.fields||{},n=Object.keys(r),i=t.fields||{},a=Object.keys(i);n.sort(),a.sort();for(let e=0;e<n.length&&e<a.length;++e){let t=$(n[e],a[e]);if(0!==t)return t;let s=eL(r[n[e]],i[a[e]]);if(0!==s)return s}return $(n.length,a.length)}(e.mapValue,t.mapValue);default:throw L()}}function eO(e,t){if("string"==typeof e&&"string"==typeof t&&e.length===t.length)return $(e,t);let r=eb(e),n=eb(t),i=$(r.seconds,n.seconds);return 0!==i?i:$(r.nanos,n.nanos)}function eN(e,t){let r=e.values||[],n=t.values||[];for(let e=0;e<r.length&&e<n.length;++e){let t=eL(r[e],n[e]);if(t)return t}return $(r.length,n.length)}function eK(e){var t,r;return"nullValue"in e?"null":"booleanValue"in e?""+e.booleanValue:"integerValue"in e?""+e.integerValue:"doubleValue"in e?""+e.doubleValue:"timestampValue"in e?function(e){let t=eb(e);return`time(${t.seconds},${t.nanos})`}(e.timestampValue):"stringValue"in e?e.stringValue:"bytesValue"in e?eR(e.bytesValue).toBase64():"referenceValue"in e?(t=e.referenceValue,er.fromName(t).toString()):"geoPointValue"in e?(r=e.geoPointValue,`geo(${r.latitude},${r.longitude})`):"arrayValue"in e?function(e){let t="[",r=!0;for(let n of e.values||[])r?r=!1:t+=",",t+=eK(n);return t+"]"}(e.arrayValue):"mapValue"in e?function(e){let t=Object.keys(e.fields||{}).sort(),r="{",n=!0;for(let i of t)n?n=!1:r+=",",r+=`${i}:${eK(e.fields[i])}`;return r+"}"}(e.mapValue):L()}function ex(e,t){return{referenceValue:`projects/${e.projectId}/databases/${e.database}/documents/${t.path.canonicalString()}`}}function eM(e){return!!e&&"integerValue"in e}function eF(e){return!!e&&"arrayValue"in e}function eB(e){return!!e&&"nullValue"in e}function eV(e){return!!e&&"doubleValue"in e&&isNaN(Number(e.doubleValue))}function eq(e){return!!e&&"mapValue"in e}function ej(e){var t,r;return"__vector__"===(null===(r=((null===(t=null==e?void 0:e.mapValue)||void 0===t?void 0:t.fields)||{}).__type__)||void 0===r?void 0:r.stringValue)}function eG(e){if(e.geoPointValue)return{geoPointValue:Object.assign({},e.geoPointValue)};if(e.timestampValue&&"object"==typeof e.timestampValue)return{timestampValue:Object.assign({},e.timestampValue)};if(e.mapValue){let t={mapValue:{fields:{}}};return eg(e.mapValue.fields,(e,r)=>t.mapValue.fields[e]=eG(r)),t}if(e.arrayValue){let t={arrayValue:{values:[]}};for(let r=0;r<(e.arrayValue.values||[]).length;++r)t.arrayValue.values[r]=eG(e.arrayValue.values[r]);return t}return Object.assign({},e)}function ez(e){return"__max__"===(((e.mapValue||{}).fields||{}).__type__||{}).stringValue}/**
1852 * @license
1853 * Copyright 2017 Google LLC
1854 *
1855 * Licensed under the Apache License, Version 2.0 (the "License");
1856 * you may not use this file except in compliance with the License.
1857 * You may obtain a copy of the License at
1858 *
1859 *   http://www.apache.org/licenses/LICENSE-2.0
1860 *
1861 * Unless required by applicable law or agreed to in writing, software
1862 * distributed under the License is distributed on an "AS IS" BASIS,
1863 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1864 * See the License for the specific language governing permissions and
1865 * limitations under the License.
1866 */class e${constructor(e){this.value=e}static empty(){return new e$({mapValue:{}})}field(e){if(e.isEmpty())return this.value;{let t=this.value;for(let r=0;r<e.length-1;++r)if(!eq(t=(t.mapValue.fields||{})[e.get(r)]))return null;return(t=(t.mapValue.fields||{})[e.lastSegment()])||null}}set(e,t){this.getFieldsMap(e.popLast())[e.lastSegment()]=eG(t)}setAll(e){let t=et.emptyPath(),r={},n=[];e.forEach((e,i)=>{if(!t.isImmediateParentOf(i)){let e=this.getFieldsMap(t);this.applyChanges(e,r,n),r={},n=[],t=i.popLast()}e?r[i.lastSegment()]=eG(e):n.push(i.lastSegment())});let i=this.getFieldsMap(t);this.applyChanges(i,r,n)}delete(e){let t=this.field(e.popLast());eq(t)&&t.mapValue.fields&&delete t.mapValue.fields[e.lastSegment()]}isEqual(e){return eD(this.value,e.value)}getFieldsMap(e){let t=this.value;t.mapValue.fields||(t.mapValue={fields:{}});for(let r=0;r<e.length;++r){let n=t.mapValue.fields[e.get(r)];eq(n)&&n.mapValue.fields||(n={mapValue:{fields:{}}},t.mapValue.fields[e.get(r)]=n),t=n}return t.mapValue.fields}applyChanges(e,t,r){for(let n of(eg(t,(t,r)=>e[t]=r),r))delete e[n]}clone(){return new e$(eG(this.value))}}/**
1867 * @license
1868 * Copyright 2017 Google LLC
1869 *
1870 * Licensed under the Apache License, Version 2.0 (the "License");
1871 * you may not use this file except in compliance with the License.
1872 * You may obtain a copy of the License at
1873 *
1874 *   http://www.apache.org/licenses/LICENSE-2.0
1875 *
1876 * Unless required by applicable law or agreed to in writing, software
1877 * distributed under the License is distributed on an "AS IS" BASIS,
1878 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1879 * See the License for the specific language governing permissions and
1880 * limitations under the License.
1881 */class eJ{constructor(e,t,r,n,i,a,s){this.key=e,this.documentType=t,this.version=r,this.readTime=n,this.createTime=i,this.data=a,this.documentState=s}static newInvalidDocument(e){return new eJ(e,0,X.min(),X.min(),X.min(),e$.empty(),0)}static newFoundDocument(e,t,r,n){return new eJ(e,1,t,X.min(),r,n,0)}static newNoDocument(e,t){return new eJ(e,2,t,X.min(),X.min(),e$.empty(),0)}static newUnknownDocument(e,t){return new eJ(e,3,t,X.min(),X.min(),e$.empty(),2)}convertToFoundDocument(e,t){return this.createTime.isEqual(X.min())&&(2===this.documentType||0===this.documentType)&&(this.createTime=e),this.version=e,this.documentType=1,this.data=t,this.documentState=0,this}convertToNoDocument(e){return this.version=e,this.documentType=2,this.data=e$.empty(),this.documentState=0,this}convertToUnknownDocument(e){return this.version=e,this.documentType=3,this.data=e$.empty(),this.documentState=2,this}setHasCommittedMutations(){return this.documentState=2,this}setHasLocalMutations(){return this.documentState=1,this.version=X.min(),this}setReadTime(e){return this.readTime=e,this}get hasLocalMutations(){return 1===this.documentState}get hasCommittedMutations(){return 2===this.documentState}get hasPendingWrites(){return this.hasLocalMutations||this.hasCommittedMutations}isValidDocument(){return 0!==this.documentType}isFoundDocument(){return 1===this.documentType}isNoDocument(){return 2===this.documentType}isUnknownDocument(){return 3===this.documentType}isEqual(e){return e instanceof eJ&&this.key.isEqual(e.key)&&this.version.isEqual(e.version)&&this.documentType===e.documentType&&this.documentState===e.documentState&&this.data.isEqual(e.data)}mutableCopy(){return new eJ(this.key,this.documentType,this.version,this.readTime,this.createTime,this.data.clone(),this.documentState)}toString(){return`Document(${this.key}, ${this.version}, ${JSON.stringify(this.data.value)}, {createTime: ${this.createTime}}), {documentType: ${this.documentType}}), {documentState: ${this.documentState}})`}}
1881/**
1882 * @license
1883 * Copyright 2022 Google LLC
1884 *
1885 * Licensed under the Apache License, Version 2.0 (the "License");
1886 * you may not use this file except in compliance with the License.
1887 * You may obtain a copy of the License at
1888 *
1889 *   http://www.apache.org/licenses/LICENSE-2.0
1890 *
1891 * Unless required by applicable law or agreed to in writing, software
1892 * distributed under the License is distributed on an "AS IS" BASIS,
1893 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1894 * See the License for the specific language governing permissions and
1895 * limitations under the License.
1896 */class eQ{constructor(e,t){this.position=e,this.inclusive=t}}function eX(e,t,r){let n=0;for(let i=0;i<e.position.length;i++){let a=t[i],s=e.position[i];if(n=a.field.isKeyField()?er.comparator(er.fromName(s.referenceValue),r.key):eL(s,r.data.field(a.field)),"desc"===a.dir&&(n*=-1),0!==n)break}return n}function eY(e,t){if(null===e)return null===t;if(null===t||e.inclusive!==t.inclusive||e.position.length!==t.position.length)return!1;for(let r=0;r<e.position.length;r++)if(!eD(e.position[r],t.position[r]))return!1;return!0}/**
1897 * @license
1898 * Copyright 2022 Google LLC
1899 *
1900 * Licensed under the Apache License, Version 2.0 (the "License");
1901 * you may not use this file except in compliance with the License.
1902 * You may obtain a copy of the License at
1903 *
1904 *   http://www.apache.org/licenses/LICENSE-2.0
1905 *
1906 * Unless required by applicable law or agreed to in writing, software
1907 * distributed under the License is distributed on an "AS IS" BASIS,
1908 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1909 * See the License for the specific language governing permissions and
1910 * limitations under the License.
1911 */class eZ{constructor(e,t="asc"){this.field=e,this.dir=t}}/**
1912 * @license
1913 * Copyright 2022 Google LLC
1914 *
1915 * Licensed under the Apache License, Version 2.0 (the "License");
1916 * you may not use this file except in compliance with the License.
1917 * You may obtain a copy of the License at
1918 *
1919 *   http://www.apache.org/licenses/LICENSE-2.0
1920 *
1921 * Unless required by applicable law or agreed to in writing, software
1922 * distributed under the License is distributed on an "AS IS" BASIS,
1923 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1924 * See the License for the specific language governing permissions and
1925 * limitations under the License.
1926 */class e1{}class e0 extends e1{constructor(e,t,r){super(),this.field=e,this.op=t,this.value=r}static create(e,t,r){return e.isKeyField()?"in"===t||"not-in"===t?this.createKeyFieldInFilter(e,t,r):new e3(e,t,r):"array-contains"===t?new e7(e,r):"in"===t?new te(e,r):"not-in"===t?new tt(e,r):"array-contains-any"===t?new tr(e,r):new e0(e,t,r)}static createKeyFieldInFilter(e,t,r){return"in"===t?new e6(e,r):new e9(e,r)}matches(e){let t=e.data.field(this.field);return"!="===this.op?null!==t&&this.matchesComparison(eL(t,this.value)):null!==t&&eA(this.value)===eA(t)&&this.matchesComparison(eL(t,this.value))}matchesComparison(e){switch(this.op){case"<":return e<0;case"<=":return e<=0;case"==":return 0===e;case"!=":return 0!==e;case">":return e>0;case">=":return e>=0;default:return L()}}isInequality(){return["<","<=",">",">=","!=","not-in"].indexOf(this.op)>=0}getFlattenedFilters(){return[this]}getFilters(){return[this]}}class e4 extends e1{constructor(e,t){super(),this.filters=e,this.op=t,this.ae=null}static create(e,t){return new e4(e,t)}matches(e){return e2(this)?void 0===this.filters.find(t=>!t.matches(e)):void 0!==this.filters.find(t=>t.matches(e))}getFlattenedFilters(){return null!==this.ae||(this.ae=this.filters.reduce((e,t)=>e.concat(t.getFlattenedFilters()),[])),this.ae}getFilters(){return Object.assign([],this.filters)}}function e2(e){return"and"===e.op}function e5(e){for(let t of e.filters)if(t instanceof e4)return!1;return!0}class e3 extends e0{constructor(e,t,r){super(e,t,r),this.key=er.fromName(r.referenceValue)}matches(e){let t=er.comparator(e.key,this.key);return this.matchesComparison(t)}}class e6 extends e0{constructor(e,t){super(e,"in",t),this.keys=e8("in",t)}matches(e){return this.keys.some(t=>t.isEqual(e.key))}}class e9 extends e0{constructor(e,t){super(e,"not-in",t),this.keys=e8("not-in",t)}matches(e){return!this.keys.some(t=>t.isEqual(e.key))}}function e8(e,t){var r;return((null===(r=t.arrayValue)||void 0===r?void 0:r.values)||[]).map(e=>er.fromName(e.referenceValue))}class e7 extends e0{constructor(e,t){super(e,"array-contains",t)}matches(e){let t=e.data.field(this.field);return eF(t)&&eU(t.arrayValue,this.value)}}class te extends e0{constructor(e,t){super(e,"in",t)}matches(e){let t=e.data.field(this.field);return null!==t&&eU(this.value.arrayValue,t)}}class tt extends e0{constructor(e,t){super(e,"not-in",t)}matches(e){if(eU(this.value.arrayValue,{nullValue:"NULL_VALUE"}))return!1;let t=e.data.field(this.field);return null!==t&&!eU(this.value.arrayValue,t)}}class tr extends e0{constructor(e,t){super(e,"array-contains-any",t)}matches(e){let t=e.data.field(this.field);return!(!eF(t)||!t.arrayValue.values)&&t.arrayValue.values.some(e=>eU(this.value.arrayValue,e))}}/**
1927 * @license
1928 * Copyright 2019 Google LLC
1929 *
1930 * Licensed under the Apache License, Version 2.0 (the "License");
1931 * you may not use this file except in compliance with the License.
1932 * You may obtain a copy of the License at
1933 *
1934 *   http://www.apache.org/licenses/LICENSE-2.0
1935 *
1936 * Unless required by applicable law or agreed to in writing, software
1937 * distributed under the License is distributed on an "AS IS" BASIS,
1938 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1939 * See the License for the specific language governing permissions and
1940 * limitations under the License.
1941 */class tn{constructor(e,t=null,r=[],n=[],i=null,a=null,s=null){this.path=e,this.collectionGroup=t,this.orderBy=r,this.filters=n,this.limit=i,this.startAt=a,this.endAt=s,this.ue=null}}function ti(e,t=null,r=[],n=[],i=null,a=null,s=null){return new tn(e,t,r,n,i,a,s)}function ta(e){if(null===e.ue){let t=e.path.canonicalString();null!==e.collectionGroup&&(t+="|cg:"+e.collectionGroup),t+="|f:"+e.filters.map(e=>(function e(t){if(t instanceof e0)return t.field.canonicalString()+t.op.toString()+eK(t.value);if(e5(t)&&e2(t))return t.filters.map(t=>e(t)).join(",");{let r=t.filters.map(t=>e(t)).join(",");return`${t.op}(${r})`}})(e)).join(",")+"|ob:"+e.orderBy.map(e=>e.field.canonicalString()+e.dir).join(","),null==e.limit||(t+="|l:"+e.limit),e.startAt&&(t+="|lb:"+(e.startAt.inclusive?"b:":"a:")+e.startAt.position.map(e=>eK(e)).join(",")),e.endAt&&(t+="|ub:"+(e.endAt.inclusive?"a:":"b:")+e.endAt.position.map(e=>eK(e)).join(",")),e.ue=t}return e.ue}function ts(e,t){if(e.limit!==t.limit||e.orderBy.length!==t.orderBy.length)return!1;for(let i=0;i<e.orderBy.length;i++){var r,n;if(r=e.orderBy[i],n=t.orderBy[i],!(r.dir===n.dir&&r.field.isEqual(n.field)))return!1}if(e.filters.length!==t.filters.length)return!1;for(let r=0;r<e.filters.length;r++)if(!function e(t,r){return t instanceof e0?r instanceof e0&&t.op===r.op&&t.field.isEqual(r.field)&&eD(t.value,r.value):t instanceof e4?r instanceof e4&&t.op===r.op&&t.filters.length===r.filters.length&&t.filters.reduce((t,n,i)=>t&&e(n,r.filters[i]),!0):void L()}(e.filters[r],t.filters[r]))return!1;return e.collectionGroup===t.collectionGroup&&!!e.path.isEqual(t.path)&&!!eY(e.startAt,t.startAt)&&eY(e.endAt,t.endAt)}function to(e){return er.isDocumentKey(e.path)&&null===e.collectionGroup&&0===e.filters.length}/**
1942 * @license
1943 * Copyright 2017 Google LLC
1944 *
1945 * Licensed under the Apache License, Version 2.0 (the "License");
1946 * you may not use this file except in compliance with the License.
1947 * You may obtain a copy of the License at
1948 *
1949 *   http://www.apache.org/licenses/LICENSE-2.0
1950 *
1951 * Unless required by applicable law or agreed to in writing, software
1952 * distributed under the License is distributed on an "AS IS" BASIS,
1953 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1954 * See the License for the specific language governing permissions and
1955 * limitations under the License.
1956 */class tc{constructor(e,t=null,r=[],n=[],i=null,a="F",s=null,o=null){this.path=e,this.collectionGroup=t,this.explicitOrderBy=r,this.filters=n,this.limit=i,this.limitType=a,this.startAt=s,this.endAt=o,this.ce=null,this.le=null,this.he=null,this.startAt,this.endAt}}function tu(e){return 0===e.filters.length&&null===e.limit&&null==e.startAt&&null==e.endAt&&(0===e.explicitOrderBy.length||1===e.explicitOrderBy.length&&e.explicitOrderBy[0].field.isKeyField())}function tl(e){return null!==e.collectionGroup}function th(e){if(null===e.ce){let t;e.ce=[];let r=new Set;for(let t of e.explicitOrderBy)e.ce.push(t),r.add(t.field.canonicalString());let n=e.explicitOrderBy.length>0?e.explicitOrderBy[e.explicitOrderBy.length-1].dir:"asc";(t=new ef(et.comparator),e.filters.forEach(e=>{e.getFlattenedFilters().forEach(e=>{e.isInequality()&&(t=t.add(e.field))})}),t).forEach(t=>{r.has(t.canonicalString())||t.isKeyField()||e.ce.push(new eZ(t,n))}),r.has(et.keyField().canonicalString())||e.ce.push(new eZ(et.keyField(),n))}return e.ce}function tg(e){return e.le||(e.le=td(e,th(e))),e.le}function td(e,t){if("F"===e.limitType)return ti(e.path,e.collectionGroup,t,e.filters,e.limit,e.startAt,e.endAt);{t=t.map(e=>{let t="desc"===e.dir?"asc":"desc";return new eZ(e.field,t)});let r=e.endAt?new eQ(e.endAt.position,e.endAt.inclusive):null,n=e.startAt?new eQ(e.startAt.position,e.startAt.inclusive):null;return ti(e.path,e.collectionGroup,t,e.filters,e.limit,r,n)}}function tm(e,t){let r=e.filters.concat([t]);return new tc(e.path,e.collectionGroup,e.explicitOrderBy.slice(),r,e.limit,e.limitType,e.startAt,e.endAt)}function tp(e,t,r){return new tc(e.path,e.collectionGroup,e.explicitOrderBy.slice(),e.filters.slice(),t,r,e.startAt,e.endAt)}function ty(e,t){return ts(tg(e),tg(t))&&e.limitType===t.limitType}function tf(e){return`${ta(tg(e))}|lt:${e.limitType}`}function tv(e){var t;let r;return`Query(target=${r=(t=tg(e)).path.canonicalString(),null!==t.collectionGroup&&(r+=" collectionGroup="+t.collectionGroup),t.filters.length>0&&(r+=`, filters: [${t.filters.map(e=>(function e(t){return t instanceof e0?`${t.field.canonicalString()} ${t.op} ${eK(t.value)}`:t instanceof e4?t.op.toString()+" {"+t.getFilters().map(e).join(" ,")+"}":"Filter"})(e)).join(", ")}]`),null==t.limit||(r+=", limit: "+t.limit),t.orderBy.length>0&&(r+=`, orderBy: [${t.orderBy.map(e=>`${e.field.canonicalString()} (${e.dir})`).join(", ")}]`),t.startAt&&(r+=", startAt: "+(t.startAt.inclusive?"b:":"a:")+t.startAt.position.map(e=>eK(e)).join(",")),t.endAt&&(r+=", endAt: "+(t.endAt.inclusive?"a:":"b:")+t.endAt.position.map(e=>eK(e)).join(",")),`Target(${r})`}; limitType=${e.limitType})`}function t_(e,t){return t.isFoundDocument()&&function(e,t){let r=t.key.path;return null!==e.collectionGroup?t.key.hasCollectionId(e.collectionGroup)&&e.path.isPrefixOf(r):er.isDocumentKey(e.path)?e.path.isEqual(r):e.path.isImmediateParentOf(r)}(e,t)&&function(e,t){for(let r of th(e))if(!r.field.isKeyField()&&null===t.data.field(r.field))return!1;return!0}(e,t)&&function(e,t){for(let r of e.filters)if(!r.matches(t))return!1;return!0}(e,t)&&(!e.startAt||!!function(e,t,r){let n=eX(e,t,r);return e.inclusive?n<=0:n<0}(e.startAt,th(e),t))&&(!e.endAt||!!function(e,t,r){let n=eX(e,t,r);return e.inclusive?n>=0:n>0}(e.endAt,th(e),t))}function tw(e){return(t,r)=>{let n=!1;for(let i of th(e)){let e=function(e,t,r){let n=e.field.isKeyField()?er.comparator(t.key,r.key):function(e,t,r){let n=t.data.field(e),i=r.data.field(e);return null!==n&&null!==i?eL(n,i):L()}(e.field,t,r);switch(e.dir){case"asc":return n;
1956case"desc":return -1*n;default:return L()}}(i,t,r);if(0!==e)return e;n=n||i.field.isKeyField()}return 0}}/**
1957 * @license
1958 * Copyright 2017 Google LLC
1959 *
1960 * Licensed under the Apache License, Version 2.0 (the "License");
1961 * you may not use this file except in compliance with the License.
1962 * You may obtain a copy of the License at
1963 *
1964 *   http://www.apache.org/licenses/LICENSE-2.0
1965 *
1966 * Unless required by applicable law or agreed to in writing, software
1967 * distributed under the License is distributed on an "AS IS" BASIS,
1968 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1969 * See the License for the specific language governing permissions and
1970 * limitations under the License.
1971 */class tk{constructor(e,t){this.mapKeyFn=e,this.equalsFn=t,this.inner={},this.innerSize=0}get(e){let t=this.mapKeyFn(e),r=this.inner[t];if(void 0!==r){for(let[t,n]of r)if(this.equalsFn(t,e))return n}}has(e){return void 0!==this.get(e)}set(e,t){let r=this.mapKeyFn(e),n=this.inner[r];if(void 0===n)return this.inner[r]=[[e,t]],void this.innerSize++;for(let r=0;r<n.length;r++)if(this.equalsFn(n[r][0],e))return void(n[r]=[e,t]);n.push([e,t]),this.innerSize++}delete(e){let t=this.mapKeyFn(e),r=this.inner[t];if(void 0===r)return!1;for(let n=0;n<r.length;n++)if(this.equalsFn(r[n][0],e))return 1===r.length?delete this.inner[t]:r.splice(n,1),this.innerSize--,!0;return!1}forEach(e){eg(this.inner,(t,r)=>{for(let[t,n]of r)e(t,n)})}isEmpty(){return ed(this.inner)}size(){return this.innerSize}}/**
1972 * @license
1973 * Copyright 2017 Google LLC
1974 *
1975 * Licensed under the Apache License, Version 2.0 (the "License");
1976 * you may not use this file except in compliance with the License.
1977 * You may obtain a copy of the License at
1978 *
1979 *   http://www.apache.org/licenses/LICENSE-2.0
1980 *
1981 * Unless required by applicable law or agreed to in writing, software
1982 * distributed under the License is distributed on an "AS IS" BASIS,
1983 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1984 * See the License for the specific language governing permissions and
1985 * limitations under the License.
1986 */let tP=new em(er.comparator),tb=new em(er.comparator);function tE(...e){let t=tb;for(let r of e)t=t.insert(r.key,r);return t}function tR(e){let t=tb;return e.forEach((e,r)=>t=t.insert(e,r.overlayedDocument)),t}function tS(){return new tk(e=>e.toString(),(e,t)=>e.isEqual(t))}let tI=new em(er.comparator),tT=new ef(er.comparator);function tC(...e){let t=tT;for(let r of e)t=t.add(r);return t}let tH=new ef($);/**
1987 * @license
1988 * Copyright 2020 Google LLC
1989 *
1990 * Licensed under the Apache License, Version 2.0 (the "License");
1991 * you may not use this file except in compliance with the License.
1992 * You may obtain a copy of the License at
1993 *
1994 *   http://www.apache.org/licenses/LICENSE-2.0
1995 *
1996 * Unless required by applicable law or agreed to in writing, software
1997 * distributed under the License is distributed on an "AS IS" BASIS,
1998 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1999 * See the License for the specific language governing permissions and
2000 * limitations under the License.
2001 */function tW(e,t){if(e.useProto3Json){if(isNaN(t))return{doubleValue:"NaN"};if(t===1/0)return{doubleValue:"Infinity"};if(t===-1/0)return{doubleValue:"-Infinity"}}return{doubleValue:el(t)?"-0":t}}function tA(e){return{integerValue:""+e}}/**
2002 * @license
2003 * Copyright 2018 Google LLC
2004 *
2005 * Licensed under the Apache License, Version 2.0 (the "License");
2006 * you may not use this file except in compliance with the License.
2007 * You may obtain a copy of the License at
2008 *
2009 *   http://www.apache.org/licenses/LICENSE-2.0
2010 *
2011 * Unless required by applicable law or agreed to in writing, software
2012 * distributed under the License is distributed on an "AS IS" BASIS,
2013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2014 * See the License for the specific language governing permissions and
2015 * limitations under the License.
2016 */class tD{constructor(){this._=void 0}}function tU(e,t){return e instanceof tM?eM(t)||t&&"doubleValue"in t?t:{integerValue:0}:null}class tL extends tD{}class tO extends tD{constructor(e){super(),this.elements=e}}function tN(e,t){let r=tB(t);for(let t of e.elements)r.some(e=>eD(e,t))||r.push(t);return{arrayValue:{values:r}}}class tK extends tD{constructor(e){super(),this.elements=e}}function tx(e,t){let r=tB(t);for(let t of e.elements)r=r.filter(e=>!eD(e,t));return{arrayValue:{values:r}}}
2016class tM extends tD{constructor(e,t){super(),this.serializer=e,this.Pe=t}}function tF(e){return eE(e.integerValue||e.doubleValue)}function tB(e){return eF(e)&&e.arrayValue.values?e.arrayValue.values.slice():[]}/**
2017 * @license
2018 * Copyright 2017 Google LLC
2019 *
2020 * Licensed under the Apache License, Version 2.0 (the "License");
2021 * you may not use this file except in compliance with the License.
2022 * You may obtain a copy of the License at
2023 *
2024 *   http://www.apache.org/licenses/LICENSE-2.0
2025 *
2026 * Unless required by applicable law or agreed to in writing, software
2027 * distributed under the License is distributed on an "AS IS" BASIS,
2028 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2029 * See the License for the specific language governing permissions and
2030 * limitations under the License.
2031 */class tV{constructor(e,t){this.field=e,this.transform=t}}class tq{constructor(e,t){this.version=e,this.transformResults=t}}class tj{constructor(e,t){this.updateTime=e,this.exists=t}static none(){return new tj}static exists(e){return new tj(void 0,e)}static updateTime(e){return new tj(e)}get isNone(){return void 0===this.updateTime&&void 0===this.exists}isEqual(e){return this.exists===e.exists&&(this.updateTime?!!e.updateTime&&this.updateTime.isEqual(e.updateTime):!e.updateTime)}}function tG(e,t){return void 0!==e.updateTime?t.isFoundDocument()&&t.version.isEqual(e.updateTime):void 0===e.exists||e.exists===t.isFoundDocument()}class tz{}function t$(e,t){if(!e.hasLocalMutations||t&&0===t.fields.length)return null;if(null===t)return e.isNoDocument()?new t4(e.key,tj.none()):new tX(e.key,e.data,tj.none());{let r=e.data,n=e$.empty(),i=new ef(et.comparator);for(let e of t.fields)if(!i.has(e)){let t=r.field(e);null===t&&e.length>1&&(e=e.popLast(),t=r.field(e)),null===t?n.delete(e):n.set(e,t),i=i.add(e)}return new tY(e.key,n,new e_(i.toArray()),tj.none())}}function tJ(e,t,r,n){return e instanceof tX?function(e,t,r,n){if(!tG(e.precondition,t))return r;let i=e.value.clone(),a=t0(e.fieldTransforms,n,t);return i.setAll(a),t.convertToFoundDocument(t.version,i).setHasLocalMutations(),null}(e,t,r,n):e instanceof tY?function(e,t,r,n){if(!tG(e.precondition,t))return r;let i=t0(e.fieldTransforms,n,t),a=t.data;return(a.setAll(tZ(e)),a.setAll(i),t.convertToFoundDocument(t.version,a).setHasLocalMutations(),null===r)?null:r.unionWith(e.fieldMask.fields).unionWith(e.fieldTransforms.map(e=>e.field))}(e,t,r,n):tG(e.precondition,t)?(t.convertToNoDocument(t.version).setHasLocalMutations(),null):r}function tQ(e,t){var r,n;return e.type===t.type&&!!e.key.isEqual(t.key)&&!!e.precondition.isEqual(t.precondition)&&(r=e.fieldTransforms,n=t.fieldTransforms,!!(void 0===r&&void 0===n||!(!r||!n)&&J(r,n,(e,t)=>{var r,n;return e.field.isEqual(t.field)&&(r=e.transform,n=t.transform,r instanceof tO&&n instanceof tO||r instanceof tK&&n instanceof tK?J(r.elements,n.elements,eD):r instanceof tM&&n instanceof tM?eD(r.Pe,n.Pe):r instanceof tL&&n instanceof tL)})))&&(0===e.type?e.value.isEqual(t.value):1!==e.type||e.data.isEqual(t.data)&&e.fieldMask.isEqual(t.fieldMask))}class tX extends tz{constructor(e,t,r,n=[]){super(),this.key=e,this.value=t,this.precondition=r,this.fieldTransforms=n,this.type=0}getFieldMask(){return null}}class tY extends tz{constructor(e,t,r,n,i=[]){super(),this.key=e,this.data=t,this.fieldMask=r,this.precondition=n,this.fieldTransforms=i,this.type=1}getFieldMask(){return this.fieldMask}}function tZ(e){let t=new Map;return e.fieldMask.fields.forEach(r=>{if(!r.isEmpty()){let n=e.data.field(r);t.set(r,n)}}),t}function t1(e,t,r){var n;let i=new Map;e.length===r.length||L();for(let a=0;a<r.length;a++){let s=e[a],o=s.transform,c=t.data.field(s.field);i.set(s.field,(n=r[a],o instanceof tO?tN(o,c):o instanceof tK?tx(o,c):n))}return i}function t0(e,t,r){let n=new Map;for(let i of e){let e=i.transform,a=r.data.field(i.field);n.set(i.field,e instanceof tL?function(e,t){let r={fields:{__type__:{stringValue:"server_timestamp"},__local_write_time__:{timestampValue:{seconds:e.seconds,nanos:e.nanoseconds}}}};return t&&eS(t)&&(t=eI(t)),t&&(r.fields.__previous_value__=t),{mapValue:r}}(t,a):e instanceof tO?tN(e,a):e instanceof tK?tx(e,a):function(e,t){let r=tU(e,t),n=tF(r)+tF(e.Pe);return eM(r)&&eM(e.Pe)?tA(n):tW(e.serializer,n)}(e,a))}return n}class t4 extends tz{constructor(e,t){super(),this.key=e,this.prec
2031ondition=t,this.type=2,this.fieldTransforms=[]}getFieldMask(){return null}}class t2 extends tz{constructor(e,t){super(),this.key=e,this.precondition=t,this.type=3,this.fieldTransforms=[]}getFieldMask(){return null}}/**
2032 * @license
2033 * Copyright 2017 Google LLC
2034 *
2035 * Licensed under the Apache License, Version 2.0 (the "License");
2036 * you may not use this file except in compliance with the License.
2037 * You may obtain a copy of the License at
2038 *
2039 *   http://www.apache.org/licenses/LICENSE-2.0
2040 *
2041 * Unless required by applicable law or agreed to in writing, software
2042 * distributed under the License is distributed on an "AS IS" BASIS,
2043 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2044 * See the License for the specific language governing permissions and
2045 * limitations under the License.
2046 */class t5{constructor(e,t,r,n){this.batchId=e,this.localWriteTime=t,this.baseMutations=r,this.mutations=n}applyToRemoteDocument(e,t){let r=t.mutationResults;for(let t=0;t<this.mutations.length;t++){let i=this.mutations[t];if(i.key.isEqual(e.key)){var n;n=r[t],i instanceof tX?function(e,t,r){let n=e.value.clone(),i=t1(e.fieldTransforms,t,r.transformResults);n.setAll(i),t.convertToFoundDocument(r.version,n).setHasCommittedMutations()}(i,e,n):i instanceof tY?function(e,t,r){if(!tG(e.precondition,t))return void t.convertToUnknownDocument(r.version);let n=t1(e.fieldTransforms,t,r.transformResults),i=t.data;i.setAll(tZ(e)),i.setAll(n),t.convertToFoundDocument(r.version,i).setHasCommittedMutations()}(i,e,n):function(e,t,r){t.convertToNoDocument(r.version).setHasCommittedMutations()}(0,e,n)}}}applyToLocalView(e,t){for(let r of this.baseMutations)r.key.isEqual(e.key)&&(t=tJ(r,e,t,this.localWriteTime));for(let r of this.mutations)r.key.isEqual(e.key)&&(t=tJ(r,e,t,this.localWriteTime));return t}applyToLocalDocumentSet(e,t){let r=tS();return this.mutations.forEach(n=>{let i=e.get(n.key),a=i.overlayedDocument,s=this.applyToLocalView(a,i.mutatedFields),o=t$(a,s=t.has(n.key)?null:s);null!==o&&r.set(n.key,o),a.isValidDocument()||a.convertToNoDocument(X.min())}),r}keys(){return this.mutations.reduce((e,t)=>e.add(t.key),tC())}isEqual(e){return this.batchId===e.batchId&&J(this.mutations,e.mutations,(e,t)=>tQ(e,t))&&J(this.baseMutations,e.baseMutations,(e,t)=>tQ(e,t))}}class t3{constructor(e,t,r,n){this.batch=e,this.commitVersion=t,this.mutationResults=r,this.docVersions=n}static from(e,t,r){e.mutations.length===r.length||L();let n=tI,i=e.mutations;for(let e=0;e<i.length;e++)n=n.insert(i[e].key,r[e].version);return new t3(e,t,r,n)}}/**
2047 * @license
2048 * Copyright 2022 Google LLC
2049 *
2050 * Licensed under the Apache License, Version 2.0 (the "License");
2051 * you may not use this file except in compliance with the License.
2052 * You may obtain a copy of the License at
2053 *
2054 *   http://www.apache.org/licenses/LICENSE-2.0
2055 *
2056 * Unless required by applicable law or agreed to in writing, software
2057 * distributed under the License is distributed on an "AS IS" BASIS,
2058 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2059 * See the License for the specific language governing permissions and
2060 * limitations under the License.
2061 */class t6{constructor(e,t){this.largestBatchId=e,this.mutation=t}getKey(){return this.mutation.key}isEqual(e){return null!==e&&this.mutation===e.mutation}toString(){return`Overlay{
2062      largestBatchId: ${this.largestBatchId},
2063      mutation: ${this.mutation.toString()}
2064    }`}}/**
2065 * @license
2066 * Copyright 2023 Google LLC
2067 *
2068 * Licensed under the Apache License, Version 2.0 (the "License");
2069 * you may not use this file except in compliance with the License.
2070 * You may obtain a copy of the License at
2071 *
2072 *   http://www.apache.org/licenses/LICENSE-2.0
2073 *
2074 * Unless required by applicable law or agreed to in writing, software
2075 * distributed under the License is distributed on an "AS IS" BASIS,
2076 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2077 * See the License for the specific language governing permissions and
2078 * limitations under the License.
2079 */class t9{constructor(e,t,r){this.alias=e,this.aggregateType=t,this.fieldPath=r}}/**
2080 * @license
2081 * Copyright 2017 Google LLC
2082 *
2083 * Licensed under the Apache License, Version 2.0 (the "License");
2084 * you may not use this file except in compliance with the License.
2085 * You may obtain a copy of the License at
2086 *
2087 *   http://www.apache.org/licenses/LICENSE-2.0
2088 *
2089 * Unless required by applicable law or agreed to in writing, software
2090 * distributed under the License is distributed on an "AS IS" BASIS,
2091 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2092 * See the License for the specific language governing permissions and
2093 * limitations under the License.
2094 */class t8{constructor(e,t){this.count=e,this.unchangedNames=t}}function t7(e){if(void 0===e)return A("GRPC error has no .code"),O.UNKNOWN;switch(e){case d.OK:return O.OK;case d.CANCELLED:return O.CANCELLED;case d.UNKNOWN:return O.UNKNOWN;case d.DEADLINE_EXCEEDED:return O.DEADLINE_EXCEEDED;case d.RESOURCE_EXHAUSTED:return O.RESOURCE_EXHAUSTED;case d.INTERNAL:return O.INTERNAL;case d.UNAVAILABLE:return O.UNAVAILABLE;case d.UNAUTHENTICATED:return O.UNAUTHENTICATED;case d.INVALID_ARGUMENT:return O.INVALID_ARGUMENT;case d.NOT_FOUND:return O.NOT_FOUND;case d.ALREADY_EXISTS:return O.ALREADY_EXISTS;case d.PERMISSION_DENIED:return O.PERMISSION_DENIED;case d.FAILED_PRECONDITION:return O.FAILED_PRECONDITION;case d.ABORTED:return O.ABORTED;case d.OUT_OF_RANGE:return O.OUT_OF_RANGE;case d.UNIMPLEMENTED:return O.UNIMPLEMENTED;case d.DATA_LOSS:return O.DATA_LOSS;default:return L()}}(m=d||(d={}))[m.OK=0]="OK",m[m.CANCELLED=1]="CANCELLED",m[m.UNKNOWN=2]="UNKNOWN",m[m.INVALID_ARGUMENT=3]="INVALID_ARGUMENT",m[m.DEADLINE_EXCEEDED=4]="DEADLINE_EXCEEDED",m[m.NOT_FOUND=5]="NOT_FOUND",m[m.ALREADY_EXISTS=6]="ALREADY_EXISTS",m[m.PERMISSION_DENIED=7]="PERMISSION_DENIED",m[m.UNAUTHENTICATED=16]="UNAUTHENTICATED",m[m.RESOURCE_EXHAUSTED=8]="RESOURCE_EXHAUSTED",m[m.FAILED_PRECONDITION=9]="FAILED_PRECONDITION",m[m.ABORTED=10]="ABORTED",m[m.OUT_OF_RANGE=11]="OUT_OF_RANGE",m[m.UNIMPLEMENTED=12]="UNIMPLEMENTED",m[m.INTERNAL=13]="INTERNAL",m[m.UNAVAILABLE=14]="UNAVAILABLE",m[m.DATA_LOSS=15]="DATA_LOSS";/**
2095 * @license
2096 * Copyright 2022 Google LLC
2097 *
2098 * Licensed under the Apache License, Version 2.0 (the "License");
2099 * you may not use this file except in compliance with the License.
2100 * You may obtain a copy of the License at
2101 *
2102 *   http://www.apache.org/licenses/LICENSE-2.0
2103 *
2104 * Unless required by applicable law or agreed to in writing, software
2105 * distributed under the License is distributed on an "AS IS" BASIS,
2106 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2107 * See the License for the specific language governing permissions and
2108 * limitations under the License.
2109 */let re=new n([4294967295,4294967295],0);function rt(e){let t=(new TextEncoder).encode(e),r=new i;return r.update(t),new Uint8Array(r.digest())}function rr(e){let t=new DataView(e.buffer),r=t.getUint32(0,!0),i=t.getUint32(4,!0),a=t.getUint32(8,!0),s=t.getUint32(12,!0);return[new n([r,i],0),new n([a,s],0)]}class rn{constructor(e,t,r){if(this.bitmap=e,this.padding=t,this.hashCount=r,t<0||t>=8)throw new ri(`Invalid padding: ${t}`);if(r<0||e.length>0&&0===this.hashCount)throw new ri(`Invalid hash count: ${r}`);if(0===e.length&&0!==t)throw new ri(`Invalid padding when bitmap length is 0: ${t}`);this.Ie=8*e.length-t,this.Te=n.fromNumber(this.Ie)}Ee(e,t,r){let i=e.add(t.multiply(n.fromNumber(r)));return 1===i.compare(re)&&(i=new n([i.getBits(0),i.getBits(1)],0)),i.modulo(this.Te).toNumber()}de(e){return 0!=(this.bitmap[Math.floor(e/8)]&1<<e%8)}mightContain(e){if(0===this.Ie)return!1;let[t,r]=rr(rt(e));for(let e=0;e<this.hashCount;e++){let n=this.Ee(t,r,e);if(!this.de(n))return!1}return!0}static create(e,t,r){let n=new rn(new Uint8Array(Math.ceil(e/8)),e%8==0?0:8-e%8,t);return r.forEach(e=>n.insert(e)),n}insert(e){if(0===this.Ie)return;let[t,r]=rr(rt(e));for(let e=0;e<this.hashCount;e++){let n=this.Ee(t,r,e);this.Ae(n)}}Ae(e){this.bitmap[Math.floor(e/8)]|=1<<e%8}}class ri extends Error{constructor(){super(...arguments),this.name="BloomFilterError"}}/**
2110 * @license
2111 * Copyright 2017 Google LLC
2112 *
2113 * Licensed under the Apache License, Version 2.0 (the "License");
2114 * you may not use this file except in compliance with the License.
2115 * You may obtain a copy of the License at
2116 *
2117 *   http://www.apache.org/licenses/LICENSE-2.0
2118 *
2119 * Unless required by applicable law or agreed to in writing, softw
2119are
2120 * distributed under the License is distributed on an "AS IS" BASIS,
2121 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2122 * See the License for the specific language governing permissions and
2123 * limitations under the License.
2124 */class ra{constructor(e,t,r,n,i){this.snapshotVersion=e,this.targetChanges=t,this.targetMismatches=r,this.documentUpdates=n,this.resolvedLimboDocuments=i}static createSynthesizedRemoteEventForCurrentChange(e,t,r){let n=new Map;return n.set(e,rs.createSynthesizedTargetChangeForCurrentChange(e,t,r)),new ra(X.min(),n,new em($),tP,tC())}}class rs{constructor(e,t,r,n,i){this.resumeToken=e,this.current=t,this.addedDocuments=r,this.modifiedDocuments=n,this.removedDocuments=i}static createSynthesizedTargetChangeForCurrentChange(e,t,r){return new rs(r,t,tC(),tC(),tC())}}/**
2125 * @license
2126 * Copyright 2017 Google LLC
2127 *
2128 * Licensed under the Apache License, Version 2.0 (the "License");
2129 * you may not use this file except in compliance with the License.
2130 * You may obtain a copy of the License at
2131 *
2132 *   http://www.apache.org/licenses/LICENSE-2.0
2133 *
2134 * Unless required by applicable law or agreed to in writing, software
2135 * distributed under the License is distributed on an "AS IS" BASIS,
2136 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2137 * See the License for the specific language governing permissions and
2138 * limitations under the License.
2139 */class ro{constructor(e,t,r,n){this.Re=e,this.removedTargetIds=t,this.key=r,this.Ve=n}}class rc{constructor(e,t){this.targetId=e,this.me=t}}class ru{constructor(e,t,r=ek.EMPTY_BYTE_STRING,n=null){this.state=e,this.targetIds=t,this.resumeToken=r,this.cause=n}}class rl{constructor(){this.fe=0,this.ge=rd(),this.pe=ek.EMPTY_BYTE_STRING,this.ye=!1,this.we=!0}get current(){return this.ye}get resumeToken(){return this.pe}get Se(){return 0!==this.fe}get be(){return this.we}De(e){e.approximateByteSize()>0&&(this.we=!0,this.pe=e)}ve(){let e=tC(),t=tC(),r=tC();return this.ge.forEach((n,i)=>{switch(i){case 0:e=e.add(n);break;case 2:t=t.add(n);break;case 1:r=r.add(n);break;default:L()}}),new rs(this.pe,this.ye,e,t,r)}Ce(){this.we=!1,this.ge=rd()}Fe(e,t){this.we=!0,this.ge=this.ge.insert(e,t)}Me(e){this.we=!0,this.ge=this.ge.remove(e)}xe(){this.fe+=1}Oe(){this.fe-=1,this.fe>=0||L()}Ne(){this.we=!0,this.ye=!0}}class rh{constructor(e){this.Le=e,this.Be=new Map,this.ke=tP,this.qe=rg(),this.Qe=new em($)}Ke(e){for(let t of e.Re)e.Ve&&e.Ve.isFoundDocument()?this.$e(t,e.Ve):this.Ue(t,e.key,e.Ve);for(let t of e.removedTargetIds)this.Ue(t,e.key,e.Ve)}We(e){this.forEachTarget(e,t=>{let r=this.Ge(t);switch(e.state){case 0:this.ze(t)&&r.De(e.resumeToken);break;case 1:r.Oe(),r.Se||r.Ce(),r.De(e.resumeToken);break;case 2:r.Oe(),r.Se||this.removeTarget(t);break;case 3:this.ze(t)&&(r.Ne(),r.De(e.resumeToken));break;case 4:this.ze(t)&&(this.je(t),r.De(e.resumeToken));break;default:L()}})}forEachTarget(e,t){e.targetIds.length>0?e.targetIds.forEach(t):this.Be.forEach((e,r)=>{this.ze(r)&&t(r)})}He(e){let t=e.targetId,r=e.me.count,n=this.Je(t);if(n){let i=n.target;if(to(i)){if(0===r){let e=new er(i.path);this.Ue(t,e,eJ.newNoDocument(e,X.min()))}else 1===r||L()}else{let n=this.Ye(t);if(n!==r){let r=this.Ze(e),i=r?this.Xe(r,e,n):1;0!==i&&(this.je(t),this.Qe=this.Qe.insert(t,2===i?"TargetPurposeExistenceFilterMismatchBloom":"TargetPurposeExistenceFilterMismatch"))}}}}Ze(e){let t,r;let n=e.me.unchangedNames;if(!n||!n.bits)return null;let{bits:{bitmap:i="",padding:a=0},hashCount:s=0}=n;try{t=eR(i).toUint8Array()}catch(e){if(e instanceof ew)return D("Decoding the base64 bloom filter in existence filter failed ("+e.message+"); ignoring the bloom filter and falling back to full re-query."),null;throw e}try{r=new rn(t,a,s)}catch(e){return D(e instanceof ri?"BloomFilter error: ":"Applying bloom filter failed: ",e),null}return 0===r.Ie?null:r}Xe(e,t,r){return t.me.count===r-this.nt(e,t.targetId)?0:2}nt(e,t){let r=this.Le.getRemoteKeysForTarget(t),n=0;return r.forEach(r=>{let i=this.Le.tt(),a=`projects/${i.projectId}/databases/${i.database}/documents/${r.path.canonicalString()}`;e.mightContain(a)||(this.Ue(t,r,null),n++)}),n}rt(e){let t=new Map;this.Be.forEach((r,n)=>{let i=this.Je(n);if(i){if(r.current&&to(i.target)){let t=new er(i.target.path);null!==this.ke.get(t)||this.it(n,t)||this.Ue(n,t,eJ.newNoDocument(t,e))}r.be&&(t.set(n,r.ve()),r.Ce())}});let r=tC();this.qe.forEach((e,t)=>{let n=!0;t.forEachWhile(e=>{let t=this.Je(e);return!t||"TargetPurposeLimboResolution"===t.purpose||(n=!1,!1)}),n&&(r=r.add(e))}),this.ke.forEach((t,r)=>r.setReadTime(e));let n=new ra(e,t,this.Qe,this.ke,r);return this.ke=tP,this.qe=rg(),this.Qe=new em($),n}$e(e,t){if(!this.ze(e))return;
2139let r=this.it(e,t.key)?2:0;this.Ge(e).Fe(t.key,r),this.ke=this.ke.insert(t.key,t),this.qe=this.qe.insert(t.key,this.st(t.key).add(e))}Ue(e,t,r){if(!this.ze(e))return;let n=this.Ge(e);this.it(e,t)?n.Fe(t,1):n.Me(t),this.qe=this.qe.insert(t,this.st(t).delete(e)),r&&(this.ke=this.ke.insert(t,r))}removeTarget(e){this.Be.delete(e)}Ye(e){let t=this.Ge(e).ve();return this.Le.getRemoteKeysForTarget(e).size+t.addedDocuments.size-t.removedDocuments.size}xe(e){this.Ge(e).xe()}Ge(e){let t=this.Be.get(e);return t||(t=new rl,this.Be.set(e,t)),t}st(e){let t=this.qe.get(e);return t||(t=new ef($),this.qe=this.qe.insert(e,t)),t}ze(e){let t=null!==this.Je(e);return t||W("WatchChangeAggregator","Detected inactive target",e),t}Je(e){let t=this.Be.get(e);return t&&t.Se?null:this.Le.ot(e)}je(e){this.Be.set(e,new rl),this.Le.getRemoteKeysForTarget(e).forEach(t=>{this.Ue(e,t,null)})}it(e,t){return this.Le.getRemoteKeysForTarget(e).has(t)}}function rg(){return new em(er.comparator)}function rd(){return new em(er.comparator)}let rm={asc:"ASCENDING",desc:"DESCENDING"},rp={"<":"LESS_THAN","<=":"LESS_THAN_OR_EQUAL",">":"GREATER_THAN",">=":"GREATER_THAN_OR_EQUAL","==":"EQUAL","!=":"NOT_EQUAL","array-contains":"ARRAY_CONTAINS",in:"IN","not-in":"NOT_IN","array-contains-any":"ARRAY_CONTAINS_ANY"},ry={and:"AND",or:"OR"};class rf{constructor(e,t){this.databaseId=e,this.useProto3Json=t}}function rv(e,t){return e.useProto3Json||null==t?t:{value:t}}function r_(e,t){return e.useProto3Json?`${new Date(1e3*t.seconds).toISOString().replace(/\.\d*/,"").replace("Z","")}.${("000000000"+t.nanoseconds).slice(-9)}Z`:{seconds:""+t.seconds,nanos:t.nanoseconds}}function rw(e,t){return e.useProto3Json?t.toBase64():t.toUint8Array()}function rk(e){return e||L(),X.fromTimestamp(function(e){let t=eb(e);return new Q(t.seconds,t.nanos)}(e))}function rP(e,t){return rb(e,t).canonicalString()}function rb(e,t){let r=new Z(["projects",e.projectId,"databases",e.database]).child("documents");return void 0===t?r:r.child(t)}function rE(e){let t=Z.fromString(e);return rU(t)||L(),t}function rR(e,t){return rP(e.databaseId,t.path)}function rS(e,t){let r=rE(t);if(r.get(1)!==e.databaseId.projectId)throw new N(O.INVALID_ARGUMENT,"Tried to deserialize key from different project: "+r.get(1)+" vs "+e.databaseId.projectId);if(r.get(3)!==e.databaseId.database)throw new N(O.INVALID_ARGUMENT,"Tried to deserialize key from different database: "+r.get(3)+" vs "+e.databaseId.database);return new er(rC(r))}function rI(e,t){return rP(e.databaseId,t)}function rT(e){return new Z(["projects",e.databaseId.projectId,"databases",e.databaseId.database]).canonicalString()}function rC(e){return e.length>4&&"documents"===e.get(4)||L(),e.popFirst(5)}function rH(e,t,r){return{name:rR(e,t),fields:r.value.mapValue.fields}}function rW(e,t){var r,n;let i;let a={structuredQuery:{}},s=t.path;null!==t.collectionGroup?(i=s,a.structuredQuery.from=[{collectionId:t.collectionGroup,allDescendants:!0}]):(i=s.popLast(),a.structuredQuery.from=[{collectionId:s.lastSegment()}]),a.parent=rI(e,i);let o=function(e){if(0!==e.length)return function e(t){return t instanceof e0?function(e){if("=="===e.op){if(eV(e.value))return{unaryFilter:{field:rA(e.field),op:"IS_NAN"}};if(eB(e.value))return{unaryFilter:{field:rA(e.field),op:"IS_NULL"}}}else if("!="===e.op){if(eV(e.value))return{unaryFilter:{field:rA(e.field),op:"IS_NOT_NAN"}};if(eB(e.value))return{unaryFilter:{field:rA(e.field),op:"IS_NOT_NULL"}}}return{fieldFilter:{field:rA(e.field),op:rp[e.op],value:e.value}}}(t):t instanceof e4?function(t){let r=t.getFilters().map(t=>e(t));return 1===r.length?r[0]:{compositeFilter:{op:ry[t.op],filters:r}}}(t):L()}(e4.create(e,"and"))}(t.filters);o&&(a.structuredQuery.where=o);let c=function(e){if(0!==e.length)return e.map(e=>({field:rA(e.field),direction:rm[e.dir]}))}(t.orderBy);c&&(a.structuredQuery.orderBy=c);let u=rv(e,t.limit);return null!==u&&(a.structuredQuery.limit=u),t.startAt&&(a.structuredQuery.startAt={before:(r=t.startAt).inclusive,values:r.position}),t.endAt&&(a.structuredQuery.endAt={before:!(n=t.endAt).inclusive,values:n.position}),{_t:a,parent:i}}function rA(e){return{fieldPath:e.canonicalString()}}function rD(e){return et.fromServerFormat(e.fieldPath)}function rU(e){return e.length>=4&&"projects"===e.get(0)&&"databases"===e.get(2)}/**
2140 * @license
2141 * Copyright 2017 Google LLC
2142 *
2143 * Licensed under the Apache License, Version 2.0 (the "License");
2144 * you may not use this file except in compliance with the License.
2145 * You may obtain a copy of the License at
2146 *
2147 *   http://www.apache.org/licenses/LICENSE-2.0
2148 *
2149 * Unless required by applicable law or agreed to in writing, software
2150 * distributed under the License is distributed on an "AS IS" BASIS,
2151 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2152 * See the License for the specific language governing permissions and
2153 * limitations under the License.
2154 */class rL{constructor(e,t,r,n,i=X.min(),a=X.min(),s=ek.EMPTY_BYTE_STRING,o=null){this.target=e,this.targetId=t,this.purpose=r,this.sequenceNumber=n,this.snapshotVersion=i,this.lastLimboFreeSnapshotVersion=a,this.resumeToken=s,this.expectedCount=o}withSequenceNumber(e){return new rL(this.target,this.targetId,this.purpose,e,this.snapshotVersion,this.lastLimboFreeSnapshotVersion,this.resumeToken,this.expectedCount)}withResumeToken(e,t){return new rL(this.target,this.targetId,this.purpose,this.sequenceNumber,t,this.lastLimboFreeSnapshotVersion,e,null)}withExpectedCount(e){return new rL(this.target,this.targetId,this.purpose,this.sequenceNumber,this.snapshotVersion,this.lastLimboFreeSnapshotVersion,this.resumeToken,e)}withLastLimboFreeSnapshotVersion(e){return new rL(this.target,this.targetId,this.purpose,this.sequenceNumber,this.snapshotVersion,e,this.resumeToken,this.expectedCount)}}/**
2155 * @license
2156 * Copyright 2017 Google LLC
2157 *
2158 * Licensed under the Apache License, Version 2.0 (the "License");
2159 * you may not use this file except in compliance with the License.
2160 * You may obtain a copy of the License at
2161 *
2162 *   http://www.apache.org/licenses/LICENSE-2.0
2163 *
2164 * Unless required by applicable law or agreed to in writing, software
2165 * distributed under the License is distributed on an "AS IS" BASIS,
2166 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2167 * See the License for the specific language governing permissions and
2168 * limitations under the License.
2169 */class rO{constructor(e){this.ct=e}}/**
2170 * @license
2171 * Copyright 2021 Google LLC
2172 *
2173 * Licensed under the Apache License, Version 2.0 (the "License");
2174 * you may not use this file except in compliance with the License.
2175 * You may obtain a copy of the License at
2176 *
2177 *   http://www.apache.org/licenses/LICENSE-2.0
2178 *
2179 * Unless required by applicable law or agreed to in writing, software
2180 * distributed under the License is distributed on an "AS IS" BASIS,
2181 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2182 * See the License for the specific language governing permissions and
2183 * limitations under the License.
2184 */class rN{constructor(){}It(e,t){this.Tt(e,t),t.Et()}Tt(e,t){if("nullValue"in e)this.dt(t,5);else if("booleanValue"in e)this.dt(t,10),t.At(e.booleanValue?1:0);else if("integerValue"in e)this.dt(t,15),t.At(eE(e.integerValue));else if("doubleValue"in e){let r=eE(e.doubleValue);isNaN(r)?this.dt(t,13):(this.dt(t,15),el(r)?t.At(0):t.At(r))}else if("timestampValue"in e){let r=e.timestampValue;this.dt(t,20),"string"==typeof r&&(r=eb(r)),t.Rt(`${r.seconds||""}`),t.At(r.nanos||0)}else if("stringValue"in e)this.Vt(e.stringValue,t),this.ft(t);else if("bytesValue"in e)this.dt(t,30),t.gt(eR(e.bytesValue)),this.ft(t);else if("referenceValue"in e)this.yt(e.referenceValue,t);else if("geoPointValue"in e){let r=e.geoPointValue;this.dt(t,45),t.At(r.latitude||0),t.At(r.longitude||0)}else"mapValue"in e?ez(e)?this.dt(t,Number.MAX_SAFE_INTEGER):ej(e)?this.wt(e.mapValue,t):(this.St(e.mapValue,t),this.ft(t)):"arrayValue"in e?(this.bt(e.arrayValue,t),this.ft(t)):L()}Vt(e,t){this.dt(t,25),this.Dt(e,t)}Dt(e,t){t.Rt(e)}St(e,t){let r=e.fields||{};for(let e of(this.dt(t,55),Object.keys(r)))this.Vt(e,t),this.Tt(r[e],t)}wt(e,t){var r,n;let i=e.fields||{};this.dt(t,53);let a="value",s=(null===(n=null===(r=i[a].arrayValue)||void 0===r?void 0:r.values)||void 0===n?void 0:n.length)||0;this.dt(t,15),t.At(eE(s)),this.Vt(a,t),this.Tt(i[a],t)}bt(e,t){let r=e.values||[];for(let e of(this.dt(t,50),r))this.Tt(e,t)}yt(e,t){this.dt(t,37),er.fromName(e).path.forEach(e=>{this.dt(t,60),this.Dt(e,t)})}dt(e,t){e.At(t)}ft(e){e.At(2)}}rN.vt=new rN;/**
2185 * @license
2186 * Copyright 2019 Google LLC
2187 *
2188 * Licensed under the Apache License, Version 2.0 (the "License");
2189 * you may not use this file except in compliance with the License.
2190 * You may obtain a copy of the License at
2191 *
2192 *   http://www.apache.org/licenses/LICENSE-2.0
2193 *
2194 * Unless required by applicable law or agreed to in writing, software
2195 * distributed under the License is distributed on an "AS IS" BASIS,
2196 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2197 * See the License for the specific language governing permissions and
2198 * limitations under the License.
2199 */class rK{constructor(){this.un=new rx}addToCollectionParentIndex(e,t){return this.un.add(t),eo.resolve()}getCollectionParents(e,t){return eo.resolve(this.un.getEntries(t))}addFieldIndex(e,t){return eo.resolve()}deleteFieldIndex(e,t){return eo.resolve()}deleteAllFieldIndexes(e){return eo.resolve()}createTargetIndexes(e,t){return eo.resolve()}getDocumentsMatchingTarget(e,t){return eo.resolve(null)}getIndexType(e,t){return eo.resolve(0)}getFieldIndexes(e,t){return eo.resolve([])}getNextCollectionGroupToUpdate(e){return eo.resolve(null)}getMinOffset(e,t){return eo.resolve(ei.min())}getMinOffsetFromCollectionGroup(e,t){return eo.resolve(ei.min())}updateCollectionGroup(e,t,r){return eo.resolve()}updateIndexEntries(e,t){return eo.resolve()}}class rx{constructor(){this.index={}}add(e){let t=e.lastSegment(),r=e.popLast(),n=this.index[t]||new ef(Z.comparator),i=!n.has(r);return this.index[t]=n.add(r),i}has(e){let t=e.lastSegment(),r=e.popLast(),n=this.index[t];return n&&n.has(r)}getEntries(e){return(this.index[e]||new ef(Z.comparator)).toArray()}}new Uint8Array(0);class rM{constructor(e,t,r){this.cacheSizeCollectionThreshold=e,this.percentileToCollect=t,this.maximumSequenceNumbersToCollect=r}static withCacheSize(e){return new rM(e,rM.DEFAULT_COLLECTION_PERCENTILE,rM.DEFAULT_MAX_SEQUENCE_NUMBERS_TO_COLLECT)}}/**
2200 * @license
2201 * Copyright 2017 Google LLC
2202 *
2203 * Licensed under the Apache License, Version 2.0 (the "License");
2204 * you may not use this file except in compliance with the License.
2205 * You may obtain a copy of the License at
2206 *
2207 *   http://www.apache.org/licenses/LICENSE-2.0
2208 *
2209 * Unless required by applicable law or agreed to in writing, software
2210 * distributed under the License is distributed on an "AS IS" BASIS,
2211 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2212 * See the License for the specific language governing permissions and
2213 * limitations under the License.
2214 */rM.DEFAULT_COLLECTION_PERCENTILE=10,rM.DEFAULT_MAX_SEQUENCE_NUMBERS_TO_COLLECT=1e3,rM.DEFAULT=new rM(41943040,rM.DEFAULT_COLLECTION_PERCENTILE,rM.DEFAULT_MAX_SEQUENCE_NUMBERS_TO_COLLECT),rM.DISABLED=new rM(-1,0,0);/**
2215 * @license
2216 * Copyright 2017 Google LLC
2217 *
2218 * Licensed under the Apache License, Version 2.0 (the "License");
2219 * you may not use this file except in compliance with the License.
2220 * You may obtain a copy of the License at
2221 *
2222 *   http://www.apache.org/licenses/LICENSE-2.0
2223 *
2224 * Unless required by applicable law or agreed to in writing, software
2225 * distributed under the License is distributed on an "AS IS" BASIS,
2226 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2227 * See the License for the specific language governing permissions and
2228 * limitations under the License.
2229 */class rF{constructor(e){this.Ln=e}next(){return this.Ln+=2,this.Ln}static Bn(){return new rF(0)}static kn(){return new rF(-1)}}/**
2230 * @license
2231 * Copyright 2017 Google LLC
2232 *
2233 * Licensed under the Apache License, Version 2.0 (the "License");
2234 * you may not use this file except in compliance with the License.
2235 * You may obtain a copy of the License at
2236 *
2237 *   http://www.apache.org/licenses/LICENSE-2.0
2238 *
2239 * Unless required by applicable law or agreed to in writing, software
2240 * distributed under the License is distributed on an "AS IS" BASIS,
2241 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2242 * See the License for the specific language governing permissions and
2243 * limitations under the License.
2244 */class rB{constructor(){this.changes=new tk(e=>e.toString(),(e,t)=>e.isEqual(t)),this.changesApplied=!1}addEntry(e){this.assertNotApplied(),this.changes.set(e.key,e)}removeEntry(e,t){this.assertNotApplied(),this.changes.set(e,eJ.newInvalidDocument(e).setReadTime(t))}getEntry(e,t){this.assertNotApplied();let r=this.changes.get(t);return void 0!==r?eo.resolve(r):this.getFromCache(e,t)}getEntries(e,t){return this.getAllFromCache(e,t)}apply(e){return this.assertNotApplied(),this.changesApplied=!0,this.applyChanges(e)}
2244assertNotApplied(){}}/**
2245 * @license
2246 * Copyright 2017 Google LLC
2247 *
2248 * Licensed under the Apache License, Version 2.0 (the "License");
2249 * you may not use this file except in compliance with the License.
2250 * You may obtain a copy of the License at
2251 *
2252 *   http://www.apache.org/licenses/LICENSE-2.0
2253 *
2254 * Unless required by applicable law or agreed to in writing, software
2255 * distributed under the License is distributed on an "AS IS" BASIS,
2256 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2257 * See the License for the specific language governing permissions and
2258 * limitations under the License.
2259 *//**
2260 * @license
2261 * Copyright 2022 Google LLC
2262 *
2263 * Licensed under the Apache License, Version 2.0 (the "License");
2264 * you may not use this file except in compliance with the License.
2265 * You may obtain a copy of the License at
2266 *
2267 *   http://www.apache.org/licenses/LICENSE-2.0
2268 *
2269 * Unless required by applicable law or agreed to in writing, software
2270 * distributed under the License is distributed on an "AS IS" BASIS,
2271 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2272 * See the License for the specific language governing permissions and
2273 * limitations under the License.
2274 */class rV{constructor(e,t){this.overlayedDocument=e,this.mutatedFields=t}}/**
2275 * @license
2276 * Copyright 2017 Google LLC
2277 *
2278 * Licensed under the Apache License, Version 2.0 (the "License");
2279 * you may not use this file except in compliance with the License.
2280 * You may obtain a copy of the License at
2281 *
2282 *   http://www.apache.org/licenses/LICENSE-2.0
2283 *
2284 * Unless required by applicable law or agreed to in writing, software
2285 * distributed under the License is distributed on an "AS IS" BASIS,
2286 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2287 * See the License for the specific language governing permissions and
2288 * limitations under the License.
2289 */class rq{constructor(e,t,r,n){this.remoteDocumentCache=e,this.mutationQueue=t,this.documentOverlayCache=r,this.indexManager=n}getDocument(e,t){let r=null;return this.documentOverlayCache.getOverlay(e,t).next(n=>(r=n,this.remoteDocumentCache.getEntry(e,t))).next(e=>(null!==r&&tJ(r.mutation,e,e_.empty(),Q.now()),e))}getDocuments(e,t){return this.remoteDocumentCache.getEntries(e,t).next(t=>this.getLocalViewOfDocuments(e,t,tC()).next(()=>t))}getLocalViewOfDocuments(e,t,r=tC()){let n=tS();return this.populateOverlays(e,n,t).next(()=>this.computeViews(e,t,n,r).next(e=>{let t=tE();return e.forEach((e,r)=>{t=t.insert(e,r.overlayedDocument)}),t}))}getOverlayedDocuments(e,t){let r=tS();return this.populateOverlays(e,r,t).next(()=>this.computeViews(e,t,r,tC()))}populateOverlays(e,t,r){let n=[];return r.forEach(e=>{t.has(e)||n.push(e)}),this.documentOverlayCache.getOverlays(e,n).next(e=>{e.forEach((e,r)=>{t.set(e,r)})})}computeViews(e,t,r,n){let i=tP,a=tS(),s=tS();return t.forEach((e,t)=>{let s=r.get(t.key);n.has(t.key)&&(void 0===s||s.mutation instanceof tY)?i=i.insert(t.key,t):void 0!==s?(a.set(t.key,s.mutation.getFieldMask()),tJ(s.mutation,t,s.mutation.getFieldMask(),Q.now())):a.set(t.key,e_.empty())}),this.recalculateAndSaveOverlays(e,i).next(e=>(e.forEach((e,t)=>a.set(e,t)),t.forEach((e,t)=>{var r;return s.set(e,new rV(t,null!==(r=a.get(e))&&void 0!==r?r:null))}),s))}recalculateAndSaveOverlays(e,t){let r=tS(),n=new em((e,t)=>e-t),i=tC();return this.mutationQueue.getAllMutationBatchesAffectingDocumentKeys(e,t).next(e=>{for(let i of e)i.keys().forEach(e=>{let a=t.get(e);if(null===a)return;let s=r.get(e)||e_.empty();s=i.applyToLocalView(a,s),r.set(e,s);let o=(n.get(i.batchId)||tC()).add(e);n=n.insert(i.batchId,o)})}).next(()=>{let a=[],s=n.getReverseIterator();for(;s.hasNext();){let n=s.getNext(),o=n.key,c=n.value,u=tS();c.forEach(e=>{if(!i.has(e)){let n=t$(t.get(e),r.get(e));null!==n&&u.set(e,n),i=i.add(e)}}),a.push(this.documentOverlayCache.saveOverlays(e,o,u))}return eo.waitFor(a)}).next(()=>r)}recalculateAndSaveOverlaysForDocumentKeys(e,t){return this.remoteDocumentCache.getEntries(e,t).next(t=>this.recalculateAndSaveOverlays(e,t))}getDocumentsMatchingQuery(e,t,r,n){return er.isDocumentKey(t.path)&&null===t.collectionGroup&&0===t.filters.length?this.getDocumentsMatchingDocumentQuery(e,t.path):tl(t)?this.getDocumentsMatchingCollectionGroupQuery(e,t,r,n):this.getDocumentsMatchingCollectionQuery(e,t,r,n)}getNextDocuments(e,t,r,n){return this.remoteDocumentCache.getAllFromCollectionGroup(e,t,r,n).next(i=>{let a=n-i.size>0?this.documentOverlayCache.getOverlaysForCollectionGroup(e,t,r.largestBatchId,n-i.size):eo.resolve(tS()),s=-1,o=i;return a.next(t=>eo.forEach(t,(t,r)=>(s<r.largestBatchId&&(s=r.largestBatchId),i.get(t)?eo.resolve():this.remoteDocumentCache.getEntry(e,t).next(e=>{o=o.insert(t,e)}))).next(()=>this.populateOverlays(e,t,i)).next(()=>this.computeViews(e,o,t,tC())).next(e=>({batchId:s,changes:tR(e)})))})}getDocumentsMatchingDocumentQuery(e,t){return this.getDocument(e,new er(t)).next(e=>{let t=tE();
2289return e.isFoundDocument()&&(t=t.insert(e.key,e)),t})}getDocumentsMatchingCollectionGroupQuery(e,t,r,n){let i=t.collectionGroup,a=tE();return this.indexManager.getCollectionParents(e,i).next(s=>eo.forEach(s,s=>{let o=new tc(s.child(i),null,t.explicitOrderBy.slice(),t.filters.slice(),t.limit,t.limitType,t.startAt,t.endAt);return this.getDocumentsMatchingCollectionQuery(e,o,r,n).next(e=>{e.forEach((e,t)=>{a=a.insert(e,t)})})}).next(()=>a))}getDocumentsMatchingCollectionQuery(e,t,r,n){let i;return this.documentOverlayCache.getOverlaysForCollection(e,t.path,r.largestBatchId).next(a=>(i=a,this.remoteDocumentCache.getDocumentsMatchingQuery(e,t,r,i,n))).next(e=>{i.forEach((t,r)=>{let n=r.getKey();null===e.get(n)&&(e=e.insert(n,eJ.newInvalidDocument(n)))});let r=tE();return e.forEach((e,n)=>{let a=i.get(e);void 0!==a&&tJ(a.mutation,n,e_.empty(),Q.now()),t_(t,n)&&(r=r.insert(e,n))}),r})}}/**
2290 * @license
2291 * Copyright 2020 Google LLC
2292 *
2293 * Licensed under the Apache License, Version 2.0 (the "License");
2294 * you may not use this file except in compliance with the License.
2295 * You may obtain a copy of the License at
2296 *
2297 *   http://www.apache.org/licenses/LICENSE-2.0
2298 *
2299 * Unless required by applicable law or agreed to in writing, software
2300 * distributed under the License is distributed on an "AS IS" BASIS,
2301 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2302 * See the License for the specific language governing permissions and
2303 * limitations under the License.
2304 */class rj{constructor(e){this.serializer=e,this.hr=new Map,this.Pr=new Map}getBundleMetadata(e,t){return eo.resolve(this.hr.get(t))}saveBundleMetadata(e,t){return this.hr.set(t.id,{id:t.id,version:t.version,createTime:rk(t.createTime)}),eo.resolve()}getNamedQuery(e,t){return eo.resolve(this.Pr.get(t))}saveNamedQuery(e,t){return this.Pr.set(t.name,{name:t.name,query:function(e){let t=function(e){var t;let r,n=function(e){let t=rE(e);return 4===t.length?Z.emptyPath():rC(t)}(e.parent),i=e.structuredQuery,a=i.from?i.from.length:0,s=null;if(a>0){1===a||L();let e=i.from[0];e.allDescendants?s=e.collectionId:n=n.child(e.collectionId)}let o=[];i.where&&(o=function(e){var t;let r=function e(t){return void 0!==t.unaryFilter?function(e){switch(e.unaryFilter.op){case"IS_NAN":let t=rD(e.unaryFilter.field);return e0.create(t,"==",{doubleValue:NaN});case"IS_NULL":let r=rD(e.unaryFilter.field);return e0.create(r,"==",{nullValue:"NULL_VALUE"});case"IS_NOT_NAN":let n=rD(e.unaryFilter.field);return e0.create(n,"!=",{doubleValue:NaN});case"IS_NOT_NULL":let i=rD(e.unaryFilter.field);return e0.create(i,"!=",{nullValue:"NULL_VALUE"});default:return L()}}(t):void 0!==t.fieldFilter?e0.create(rD(t.fieldFilter.field),function(e){switch(e){case"EQUAL":return"==";case"NOT_EQUAL":return"!=";case"GREATER_THAN":return">";case"GREATER_THAN_OR_EQUAL":return">=";case"LESS_THAN":return"<";case"LESS_THAN_OR_EQUAL":return"<=";case"ARRAY_CONTAINS":return"array-contains";case"IN":return"in";case"NOT_IN":return"not-in";case"ARRAY_CONTAINS_ANY":return"array-contains-any";default:return L()}}(t.fieldFilter.op),t.fieldFilter.value):void 0!==t.compositeFilter?e4.create(t.compositeFilter.filters.map(t=>e(t)),function(e){switch(e){case"AND":return"and";case"OR":return"or";default:return L()}}(t.compositeFilter.op)):L()}(e);return r instanceof e4&&e5(t=r)&&e2(t)?r.getFilters():[r]}(i.where));let c=[];i.orderBy&&(c=i.orderBy.map(e=>new eZ(rD(e.field),function(e){switch(e){case"ASCENDING":return"asc";case"DESCENDING":return"desc";default:return}}(e.direction))));let u=null;i.limit&&(u=null==(r="object"==typeof(t=i.limit)?t.value:t)?null:r);let l=null;i.startAt&&(l=function(e){let t=!!e.before;return new eQ(e.values||[],t)}(i.startAt));let h=null;return i.endAt&&(h=function(e){let t=!e.before;return new eQ(e.values||[],t)}(i.endAt)),new tc(n,s,c,o,u,"F",l,h)}({parent:e.parent,structuredQuery:e.structuredQuery});return"LAST"===e.limitType?tp(t,t.limit,"L"):t}(t.bundledQuery),readTime:rk(t.readTime)}),eo.resolve()}}/**
2305 * @license
2306 * Copyright 2022 Google LLC
2307 *
2308 * Licensed under the Apache License, Version 2.0 (the "License");
2309 * you may not use this file except in compliance with the License.
2310 * You may obtain a copy of the License at
2311 *
2312 *   http://www.apache.org/licenses/LICENSE-2.0
2313 *
2314 * Unless required by applicable law or agreed to in writing, software
2315 * distributed under the License is distributed on an "AS IS" BASIS,
2316 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2317 * See the License for the specific language governing permissions and
2318 * limitations under the License.
2319 */class rG{constructor(){this.overlays=new em(er.comparator),this.Ir=new Map}getOverlay(e,t){return eo.resolve(this.overlays.get(t))}getOverlays(e,t){let r=tS();return eo.forEach(t,t=>this.getOverlay(e,t).next(e=>{null!==e&&r.set(t,e)})).next(()=>r)}saveOverlays(e,t,r){return r.forEach((r,n)=>{this.ht(e,t,n)}),eo.resolve()}removeOverlaysForBatchId(e,t,r){let n=this.Ir.get(r);return void 0!==n&&(n.forEach(e=>this.overlays=this.overlays.remove(e)),this.Ir.delete(r)),eo.resolve()}getOverlaysForCollection(e,t,r){let n=tS(),i=t.length+1,a=new er(t.child("")),s=this.overlays.getIteratorFrom(a);for(;s.hasNext();){let e=s.getNext().value,a=e.getKey();if(!t.isPrefixOf(a.path))break;a.path.length===i&&e.largestBatchId>r&&n.set(e.getKey(),e)}return eo.resolve(n)}getOverlaysForCollectionGroup(e,t,r,n){let i=new em((e,t)=>e-t),a=this.overlays.getIterator();for(;a.hasNext();){let e=a.getNext().value;if(e.getKey().getCollectionGroup()===t&&e.largestBatchId>r){let t=i.get(e.largestBatchId);null===t&&(t=tS(),i=i.insert(e.largestBatchId,t)),t.set(e.getKey(),e)}}let s=tS(),o=i.getIterator();for(;o.hasNext()&&(o.getNext().value.forEach((e,t)=>s.set(e,t)),!(s.size()>=n)););return eo.resolve(s)}ht(e,t,r){let n=this.overlays.get(r.key);if(null!==n){let e=this.Ir.get(n.largestBatchId).delete(r.key);this.Ir.set(n.largestBatchId,e)}this.overlays=this.overlays.insert(r.key,new t6(t,r));let i=this.Ir.get(t);void 0===i&&(i=tC(),this.Ir.set(t,i)),this.Ir.set(t,i.add(r.key))}}/**
2320 * @license
2321 * Copyright 2024 Google LLC
2322 *
2323 * Licensed under the Apache License, Version 2.0 (the "License");
2324 * you may not use this file except in compliance with the License.
2325 * You may obtain a copy of the License at
2326 *
2327 *   http://www.apache.org/licenses/LICENSE-2.0
2328 *
2329 * Unless required by applicable law or agreed to in writing, software
2330 * distributed under the License is distributed on an "AS IS" BASIS,
2331 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2332 * See the License for the specific language governing permissions and
2333 * limitations under the License.
2334 */class rz{constructor(){this.sessionToken=ek.EMPTY_BYTE_STRING}getSessionToken(e){return eo.resolve(this.sessionToken)}setSessionToken(e,t){return this.sessionToken=t,eo.resolve()}}/**
2335 * @license
2336 * Copyright 2017 Google LLC
2337 *
2338 * Licensed under the Apache License, Version 2.0 (the "License");
2339 * you may not use this file except in compliance with the License.
2340 * You may obtain a copy of the License at
2341 *
2342 *   http://www.apache.org/licenses/LICENSE-2.0
2343 *
2344 * Unless required by applicable law or agreed to in writing, software
2345 * distributed under the License is distributed on an "AS IS" BASIS,
2346 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2347 * See the License for the specific language governing permissions and
2348 * limitations under the License.
2349 */class r${constructor(){this.Tr=new ef(rJ.Er),this.dr=new ef(rJ.Ar)}isEmpty(){return this.Tr.isEmpty()}addReference(e,t){let r=new rJ(e,t);this.Tr=this.Tr.add(r),this.dr=this.dr.add(r)}Rr(e,t){e.forEach(e=>this.addReference(e,t))}removeReference(e,t){this.Vr(new rJ(e,t))}mr(e,t){e.forEach(e=>this.removeReference(e,t))}gr(e){let t=new er(new Z([])),r=new rJ(t,e),n=new rJ(t,e+1),i=[];return this.dr.forEachInRange([r,n],e=>{this.Vr(e),i.push(e.key)}),i}pr(){this.Tr.forEach(e=>this.Vr(e))}Vr(e){this.Tr=this.Tr.delete(e),this.dr=this.dr.delete(e)}yr(e){let t=new er(new Z([])),r=new rJ(t,e),n=new rJ(t,e+1),i=tC();return this.dr.forEachInRange([r,n],e=>{i=i.add(e.key)}),i}containsKey(e){let t=new rJ(e,0),r=this.Tr.firstAfterOrEqual(t);return null!==r&&e.isEqual(r.key)}}class rJ{constructor(e,t){this.key=e,this.wr=t}static Er(e,t){return er.comparator(e.key,t.key)||$(e.wr,t.wr)}static Ar(e,t){return $(e.wr,t.wr)||er.comparator(e.key,t.key)}}/**
2350 * @license
2351 * Copyright 2017 Google LLC
2352 *
2353 * Licensed under the Apache License, Version 2.0 (the "License");
2354 * you may not use this file except in compliance with the License.
2355 * You may obtain a copy of the License at
2356 *
2357 *   http://www.apache.org/licenses/LICENSE-2.0
2358 *
2359 * Unless required by applicable law or agreed to in writing, software
2360 * distributed under the License is distributed on an "AS IS" BASIS,
2361 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2362 * See the License for the specific language governing permissions and
2363 * limitations under the License.
2364 */class rQ{constructor(e,t){this.indexManager=e,this.referenceDelegate=t,this.mutationQueue=[],this.Sr=1,this.br=new ef(rJ.Er)}checkEmpty(e){return eo.resolve(0===this.mutationQueue.length)}addMutationBatch(e,t,r,n){let i=this.Sr;this.Sr++,this.mutationQueue.length>0&&this.mutationQueue[this.mutationQueue.length-1];let a=new t5(i,t,r,n);for(let t of(this.mutationQueue.push(a),n))this.br=this.br.add(new rJ(t.key,i)),this.indexManager.addToCollectionParentIndex(e,t.key.path.popLast());return eo.resolve(a)}lookupMutationBatch(e,t){return eo.resolve(this.Dr(t))}getNextMutationBatchAfterBatchId(e,t){let r=this.vr(t+1),n=r<0?0:r;return eo.resolve(this.mutationQueue.length>n?this.mutationQueue[n]:null)}getHighestUnacknowledgedBatchId(){return eo.resolve(0===this.mutationQueue.length?-1:this.Sr-1)}getAllMutationBatches(e){return eo.resolve(this.mutationQueue.slice())}getAllMutationBatchesAffectingDocumentKey(e,t){let r=new rJ(t,0),n=new rJ(t,Number.POSITIVE_INFINITY),i=[];return this.br.forEachInRange([r,n],e=>{let t=this.Dr(e.wr);i.push(t)}),eo.resolve(i)}getAllMutationBatchesAffectingDocumentKeys(e,t){let r=new ef($);return t.forEach(e=>{let t=new rJ(e,0),n=new rJ(e,Number.POSITIVE_INFINITY);this.br.forEachInRange([t,n],e=>{r=r.add(e.wr)})}),eo.resolve(this.Cr(r))}getAllMutationBatchesAffectingQuery(e,t){let r=t.path,n=r.length+1,i=r;er.isDocumentKey(i)||(i=i.child(""));let a=new rJ(new er(i),0),s=new ef($);return this.br.forEachWhile(e=>{let t=e.key.path;return!!r.isPrefixOf(t)&&(t.length===n&&(s=s.add(e.wr)),!0)},a),eo.resolve(this.Cr(s))}Cr(e){let t=[];return e.forEach(e=>{let r=this.Dr(e);null!==r&&t.push(r)}),t}removeMutationBatch(e,t){0===this.Fr(t.batchId,"removed")||L(),this.mutationQueue.shift();let r=this.br;return eo.forEach(t.mutations,n=>{let i=new rJ(n.key,t.batchId);return r=r.delete(i),this.referenceDelegate.markPotentiallyOrphaned(e,n.key)}).next(()=>{this.br=r})}On(e){}containsKey(e,t){let r=new rJ(t,0),n=this.br.firstAfterOrEqual(r);return eo.resolve(t.isEqual(n&&n.key))}performConsistencyCheck(e){return this.mutationQueue.length,eo.resolve()}Fr(e,t){return this.vr(e)}vr(e){return 0===this.mutationQueue.length?0:e-this.mutationQueue[0].batchId}Dr(e){let t=this.vr(e);return t<0||t>=this.mutationQueue.length?null:this.mutationQueue[t]}}/**
2365 * @license
2366 * Copyright 2017 Google LLC
2367 *
2368 * Licensed under the Apache License, Version 2.0 (the "License");
2369 * you may not use this file except in compliance with the License.
2370 * You may obtain a copy of the License at
2371 *
2372 *   http://www.apache.org/licenses/LICENSE-2.0
2373 *
2374 * Unless required by applicable law or agreed to in writing, software
2375 * distributed under the License is distributed on an "AS IS" BASIS,
2376 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2377 * See the License for the specific language governing permissions and
2378 * limitations under the License.
2379 */class rX{constructor(e){this.Mr=e,this.docs=new em(er.comparator),this.size=0}setIndexManager(e){this.indexManager=e}addEntry(e,t){let r=t.key,n=this.docs.get(r),i=n?n.size:0,a=this.Mr(t);return this.docs=this.docs.insert(r,{document:t.mutableCopy(),size:a}),this.size+=a-i,this.indexManager.addToCollectionParentIndex(e,r.path.popLast())}removeEntry(e){let t=this.docs.get(e);t&&(this.docs=this.docs.remove(e),this.size-=t.size)}getEntry(e,t){let r=this.docs.get(t);return eo.resolve(r?r.document.mutableCopy():eJ.newInvalidDocument(t))}getEntries(e,t){let r=tP;return t.forEach(e=>{let t=this.docs.get(e);r=r.insert(e,t?t.document.mutableCopy():eJ.newInvalidDocument(e))}),eo.resolve(r)}getDocumentsMatchingQuery(e,t,r,n){let i=tP,a=t.path,s=new er(a.child("")),o=this.docs.getIteratorFrom(s);for(;o.hasNext();){let{key:e,value:{document:s}}=o.getNext();if(!a.isPrefixOf(e.path))break;e.path.length>a.length+1||0>=function(e,t){let r=e.readTime.compareTo(t.readTime);return 0!==r?r:0!==(r=er.comparator(e.documentKey,t.documentKey))?r:$(e.largestBatchId,t.largestBatchId)}(new ei(s.readTime,s.key,-1),r)||(n.has(s.key)||t_(t,s))&&(i=i.insert(s.key,s.mutableCopy()))}return eo.resolve(i)}getAllFromCollectionGroup(e,t,r,n){L()}Or(e,t){return eo.forEach(this.docs,e=>t(e))}newChangeBuffer(e){return new rY(this)}getSize(e){return eo.resolve(this.size)}}class rY extends rB{constructor(e){super(),this.cr=e}applyChanges(e){let t=[];
vendor: 4,901 bytes, lines 2379-2409
2379return this.changes.forEach((r,n)=>{n.isValidDocument()?t.push(this.cr.addEntry(e,n)):this.cr.removeEntry(r)}),eo.waitFor(t)}getFromCache(e,t){return this.cr.getEntry(e,t)}getAllFromCache(e,t){return this.cr.getEntries(e,t)}}/**
2380 * @license
2381 * Copyright 2017 Google LLC
2382 *
2383 * Licensed under the Apache License, Version 2.0 (the "License");
2384 * you may not use this file except in compliance with the License.
2385 * You may obtain a copy of the License at
2386 *
2387 *   http://www.apache.org/licenses/LICENSE-2.0
2388 *
2389 * Unless required by applicable law or agreed to in writing, software
2390 * distributed under the License is distributed on an "AS IS" BASIS,
2391 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2392 * See the License for the specific language governing permissions and
2393 * limitations under the License.
2394 */class rZ{constructor(e){this.persistence=e,this.Nr=new tk(e=>ta(e),ts),this.lastRemoteSnapshotVersion=X.min(),this.highestTargetId=0,this.Lr=0,this.Br=new r$,this.targetCount=0,this.kr=rF.Bn()}forEachTarget(e,t){return this.Nr.forEach((e,r)=>t(r)),eo.resolve()}getLastRemoteSnapshotVersion(e){return eo.resolve(this.lastRemoteSnapshotVersion)}getHighestSequenceNumber(e){return eo.resolve(this.Lr)}allocateTargetId(e){return this.highestTargetId=this.kr.next(),eo.resolve(this.highestTargetId)}setTargetsMetadata(e,t,r){return r&&(this.lastRemoteSnapshotVersion=r),t>this.Lr&&(this.Lr=t),eo.resolve()}Kn(e){this.Nr.set(e.target,e);let t=e.targetId;t>this.highestTargetId&&(this.kr=new rF(t),this.highestTargetId=t),e.sequenceNumber>this.Lr&&(this.Lr=e.sequenceNumber)}addTargetData(e,t){return this.Kn(t),this.targetCount+=1,eo.resolve()}updateTargetData(e,t){return this.Kn(t),eo.resolve()}removeTargetData(e,t){return this.Nr.delete(t.target),this.Br.gr(t.targetId),this.targetCount-=1,eo.resolve()}removeTargets(e,t,r){let n=0,i=[];return this.Nr.forEach((a,s)=>{s.sequenceNumber<=t&&null===r.get(s.targetId)&&(this.Nr.delete(a),i.push(this.removeMatchingKeysForTargetId(e,s.targetId)),n++)}),eo.waitFor(i).next(()=>n)}getTargetCount(e){return eo.resolve(this.targetCount)}getTargetData(e,t){let r=this.Nr.get(t)||null;return eo.resolve(r)}addMatchingKeys(e,t,r){return this.Br.Rr(t,r),eo.resolve()}removeMatchingKeys(e,t,r){this.Br.mr(t,r);let n=this.persistence.referenceDelegate,i=[];return n&&t.forEach(t=>{i.push(n.markPotentiallyOrphaned(e,t))}),eo.waitFor(i)}removeMatchingKeysForTargetId(e,t){return this.Br.gr(t),eo.resolve()}getMatchingKeysForTargetId(e,t){let r=this.Br.yr(t);return eo.resolve(r)}containsKey(e,t){return eo.resolve(this.Br.containsKey(t))}}/**
2395 * @license
2396 * Copyright 2017 Google LLC
2397 *
2398 * Licensed under the Apache License, Version 2.0 (the "License");
2399 * you may not use this file except in compliance with the License.
2400 * You may obtain a copy of the License at
2401 *
2402 *   http://www.apache.org/licenses/LICENSE-2.0
2403 *
2404 * Unless required by applicable law or agreed to in writing, software
2405 * distributed under the License is distributed on an "AS IS" BASIS,
2406 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2407 * See the License for the specific language governing permissions and
2408 * limitations under the License.
2409 */class r1{constructor(e,t){this.qr={},this.overlays={},this.Qr=new eu(0),this.Kr=!1,this.Kr=!0,this.$r=new rz,this.referenceDelegate=e(this),this.Ur=new rZ(this),this.indexManager=new rK,this.remoteDocumentCache=new rX(e=>this.referenceDelegate.Wr(e)),this.serializer=new rO(t),this.Gr=new rj(this.serializer)}start(){return Promise.resolve()}shutdown(){return this.Kr=!1,Promise.resolve()}get started(){return this.Kr}setDatabaseDeletedListener(){}setNetworkEnabled(){}getIndexManager(e){return this.indexManager}getDocumentOverlayCache(e){let t=this.overlays[e.toKey()];return t||(t=new rG,this.overlays[e.toKey()]=t),t}getMutationQueue(e,t){let r=this.qr[e.toKey()];return r||(r=new rQ(t,this.referenceDelegate),this.qr[e.toKey()]=r),r}getGlobalsCache(){return this.$r}getTargetCache(){return this.Ur}getRemoteDocumentCache(){return this.remoteDocumentCache}getBundleCache(){return this.Gr}runTransaction(e,t,r){W("MemoryPersistence","Starting transaction:",e);let n=new r0(this.Qr.next());return this.referenceDelegate.zr(),r(n).next(e=>this.referenceDelegate.jr(n).next(()=>e)).toPromise().then(e=>(n.raiseOnCommittedEvent(),e))}Hr(e,t){return eo.or(Object.values(this.qr).map(r=>()=>r.containsKey(e,t)))}}class r0 extends ea{constructor(e){super(),this.currentSequenceNumber=e}}class r4{constructor(e){this.persistence=e,this.Jr=new r$,this.Yr=null}static Zr(e){return new r4(e)}get Xr(){if(this.Yr)return this.Yr;throw L()}addReference(e,t,r){return this.Jr.addReference(r,t),this.Xr.delete(r.toString()),eo.resolve()}removeReference(e,t,r){return this.Jr.removeReference(r,t),this.Xr.add(r.toString()),eo.resolve()}markPotentiallyOrphaned(e,t){return this.Xr.add(t.toString()),eo.resolve()}
2409removeTarget(e,t){this.Jr.gr(t.targetId).forEach(e=>this.Xr.add(e.toString()));let r=this.persistence.getTargetCache();return r.getMatchingKeysForTargetId(e,t.targetId).next(e=>{e.forEach(e=>this.Xr.add(e.toString()))}).next(()=>r.removeTargetData(e,t))}zr(){this.Yr=new Set}jr(e){let t=this.persistence.getRemoteDocumentCache().newChangeBuffer();return eo.forEach(this.Xr,r=>{let n=er.fromPath(r);return this.ei(e,n).next(e=>{e||t.removeEntry(n,X.min())})}).next(()=>(this.Yr=null,t.apply(e)))}updateLimboDocument(e,t){return this.ei(e,t).next(e=>{e?this.Xr.delete(t.toString()):this.Xr.add(t.toString())})}Wr(e){return 0}ei(e,t){return eo.or([()=>eo.resolve(this.Jr.containsKey(t)),()=>this.persistence.getTargetCache().containsKey(e,t),()=>this.persistence.Hr(e,t)])}}/**
2410 * @license
2411 * Copyright 2017 Google LLC
2412 *
2413 * Licensed under the Apache License, Version 2.0 (the "License");
2414 * you may not use this file except in compliance with the License.
2415 * You may obtain a copy of the License at
2416 *
2417 *   http://www.apache.org/licenses/LICENSE-2.0
2418 *
2419 * Unless required by applicable law or agreed to in writing, software
2420 * distributed under the License is distributed on an "AS IS" BASIS,
2421 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2422 * See the License for the specific language governing permissions and
2423 * limitations under the License.
2424 */class r2{constructor(e,t,r,n){this.targetId=e,this.fromCache=t,this.$i=r,this.Ui=n}static Wi(e,t){let r=tC(),n=tC();for(let e of t.docChanges)switch(e.type){case 0:r=r.add(e.doc.key);break;case 1:n=n.add(e.doc.key)}return new r2(e,t.fromCache,r,n)}}/**
2425 * @license
2426 * Copyright 2023 Google LLC
2427 *
2428 * Licensed under the Apache License, Version 2.0 (the "License");
2429 * you may not use this file except in compliance with the License.
2430 * You may obtain a copy of the License at
2431 *
2432 *   http://www.apache.org/licenses/LICENSE-2.0
2433 *
2434 * Unless required by applicable law or agreed to in writing, software
2435 * distributed under the License is distributed on an "AS IS" BASIS,
2436 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2437 * See the License for the specific language governing permissions and
2438 * limitations under the License.
2439 */class r5{constructor(){this._documentReadCount=0}get documentReadCount(){return this._documentReadCount}incrementDocumentReadCount(e){this._documentReadCount+=e}}/**
2440 * @license
2441 * Copyright 2019 Google LLC
2442 *
2443 * Licensed under the Apache License, Version 2.0 (the "License");
2444 * you may not use this file except in compliance with the License.
2445 * You may obtain a copy of the License at
2446 *
2447 *   http://www.apache.org/licenses/LICENSE-2.0
2448 *
2449 * Unless required by applicable law or agreed to in writing, software
2450 * distributed under the License is distributed on an "AS IS" BASIS,
2451 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2452 * See the License for the specific language governing permissions and
2453 * limitations under the License.
2454 */class r3{constructor(){this.Gi=!1,this.zi=!1,this.ji=100,this.Hi=(0,w.G6)()?8:function(e){let t=e.match(/Android ([\d.]+)/i);return Number(t?t[1].split(".").slice(0,2).join("."):"-1")}((0,w.z$)())>0?6:4}initialize(e,t){this.Ji=e,this.indexManager=t,this.Gi=!0}getDocumentsMatchingQuery(e,t,r,n){let i={result:null};return this.Yi(e,t).next(e=>{i.result=e}).next(()=>{if(!i.result)return this.Zi(e,t,n,r).next(e=>{i.result=e})}).next(()=>{if(i.result)return;let r=new r5;return this.Xi(e,t,r).next(n=>{if(i.result=n,this.zi)return this.es(e,t,r,n.size)})}).next(()=>i.result)}es(e,t,r,n){return r.documentReadCount<this.ji?(H()<=_.in.DEBUG&&W("QueryEngine","SDK will not create cache indexes for query:",tv(t),"since it only creates cache indexes for collection contains","more than or equal to",this.ji,"documents"),eo.resolve()):(H()<=_.in.DEBUG&&W("QueryEngine","Query:",tv(t),"scans",r.documentReadCount,"local documents and returns",n,"documents as results."),r.documentReadCount>this.Hi*n?(H()<=_.in.DEBUG&&W("QueryEngine","The SDK decides to create cache indexes for query:",tv(t),"as using cache indexes may help improve performance."),this.indexManager.createTargetIndexes(e,tg(t))):eo.resolve())}Yi(e,t){if(tu(t))return eo.resolve(null);let r=tg(t);return this.indexManager.getIndexType(e,r).next(n=>0===n?null:(null!==t.limit&&1===n&&(r=tg(t=tp(t,null,"F"))),this.indexManager.getDocumentsMatchingTarget(e,r).next(n=>{let i=tC(...n);return this.Ji.getDocuments(e,i).next(n=>this.indexManager.getMinOffset(e,r).next(r=>{let a=this.ts(t,n);return this.ns(t,a,i,r.readTime)?this.Yi(e,tp(t,null,"F")):this.rs(e,a,t,r)}))})))}Zi(e,t,r,n){return tu(t)||n.isEqual(X.min())?eo.resolve(null):this.Ji.getDocuments(e,r).next(i=>{let a=this.ts(t,i);return this.ns(t,a,r,n)?eo.resolve(null):(H()<=_.in.DEBUG&&W("QueryEngine","Re-using previous result from %s to execute query: %s",n.toString(),tv(t)),this.rs(e,a,t,function(e,t){let r=e.toTimestamp().seconds,n=e.toTimestamp().nanoseconds+1;return new ei(X.fromTimestamp(1e9===n?new Q(r+1,0):new Q(r,n)),er.empty(),-1)}(n,0)).next(e=>e))})}ts(e,t){let r=new ef(tw(e));return t.forEach((t,n)=>{t_(e,n)&&(r=r.add(n))}),r}ns(e,t,r,n){if(null===e.limit)return!1;if(r.size!==t.size)return!0;let i="F"===e.limitType?t.last():t.first();return!!i&&(i.hasPendingWrites||i.version.compareTo(n)>0)}Xi(e,t,r){return H()<=_.in.DEBUG&&W("QueryEngine","Using full collection scan to execute query:",tv(t)),this.Ji.getDocumentsMatchingQuery(e,t,ei.min(),r)}rs(e,t,r,n){return this.Ji.getDocumentsMatchingQuery(e,r,n).next(e=>(t.forEach(t=>{e=e.insert(t.key,t)}),e))}}/**
2455 * @license
2456 * Copyright 2020 Google LLC
2457 *
2458 * Licensed under the Apache License, Version 2.0 (the "License");
2459 * you may not use this file except in compliance with the License.
2460 * You may obtain a copy of the License at
2461 *
2462 *   http://www.apache.org/licenses/LICENSE-2.0
2463 *
2464 * Unless required by applicable law or agreed to in writing, software
2465 * distributed under the License is distributed on an "AS IS" BASIS,
2466 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2467 * See the License for the specific language governing permissions and
2468 * limitations under the License.
2469 */class r6{constructor(e,t,r,n){this.persistence=e,this.ss=t,this.serializer=n,this.os=new em($),this._s=new tk(e=>ta(e),ts),this.us=new Map,this.cs=e.getRemoteDocumentCache(),this.Ur=e.getTargetCache(),this.Gr=e.getBundleCache(),this.ls(r)}ls(e){this.documentOverlayCache=this.persistence.getDocumentOverlayCache(e),this.indexManager=this.persistence.getIndexManager(e),this.mutationQueue=this.persistence.getMutationQueue(e,this.indexManager),this.localDocuments=new rq(this.cs,this.mutationQueue,this.documentOverlayCache,this.indexManager),this.cs.setIndexManager(this.indexManager),this.ss.initialize(this.localDocuments,this.indexManager)}collectGarbage(e){return this.persistence.runTransaction("Collect garbage","readwrite-primary",t=>e.collect(t,this.os))}}async function r9(e,t){return await e.persistence.runTransaction("Handle user change","readonly",r=>{let n;return e.mutationQueue.getAllMutationBatches(r).next(i=>(n=i,e.ls(t),e.mutationQueue.getAllMutationBatches(r))).next(t=>{let i=[],a=[],s=tC();for(let e of n)for(let t of(i.push(e.batchId),e.mutations))s=s.add(t.key);for(let e of t)for(let t of(a.push(e.batchId),e.mutations))s=s.add(t.key);return e.localDocuments.getDocuments(r,s).next(e=>({hs:e,removedBatchIds:i,addedBatchIds:a}))})})}function r8(e){return e.persistence.runTransaction("Get last remote snapshot version","readonly",t=>e.Ur.getLastRemoteSnapshotVersion(t))}async function r7(e,t,r){let n=e.os.get(t);try{r||await e.persistence.runTransaction("Release target",r?"readwrite":"readwrite-primary",t=>e.persistence.referenceDelegate.removeTarget(t,n))}catch(e){if(!ec(e))throw e;W("LocalStore",`Failed to update sequence numbers for target ${t}: ${e}`)}e.os=e.os.remove(t),e._s.delete(n.target)}function ne(e,t,r){let n=X.min(),i=tC();return e.persistence.runTransaction("Execute query","readwrite",a=>(function(e,t,r){let n=e._s.get(r);return void 0!==n?eo.resolve(e.os.get(n)):e.Ur.getTargetData(t,r)})(e,a,tg(t)).next(t=>{if(t)return n=t.lastLimboFreeSnapshotVersion,e.Ur.getMatchingKeysForTargetId(a,t.targetId).next(e=>{i=e})}).next(()=>e.ss.getDocumentsMatchingQuery(a,t,r?n:X.min(),r?i:tC())).next(r=>{var n;let a;return n=t.collectionGroup||(t.path.length%2==1?t.path.lastSegment():t.path.get(t.path.length-2)),a=e.us.get(n)||X.min(),r.forEach((e,t)=>{t.readTime.compareTo(a)>0&&(a=t.readTime)}),e.us.set(n,a),{documents:r,Ts:i}}))}class nt{constructor(){this.activeTargetIds=tH}fs(e){this.activeTargetIds=this.activeTargetIds.add(e)}gs(e){this.activeTargetIds=this.activeTargetIds.delete(e)}Vs(){return JSON.stringify({activeTargetIds:this.activeTargetIds.toArray(),updateTimeMs:Date.now()})}}class nr{constructor(){this.so=new nt,this.oo={},this.onlineStateHandler=null,this.sequenceNumberHandler=null}addPendingMutation(e){}updateMutationState(e,t,r){}addLocalQueryTarget(e,t=!0){return t&&this.so.fs(e),this.oo[e]||"not-current"}updateQueryState(e,t,r){this.oo[e]=t}removeLocalQueryTarget(e){this.so.gs(e)}isLocalQueryTarget(e){return this.so.activeTargetIds.has(e)}clearQueryState(e){delete this.oo[e]}getAllActiveQueryTargets(){return this.so.activeTargetIds}isActiveQueryTarget(e){return this.so.activeTargetIds.has(e)}start(){return this.so=new nt,Promise.resolve()}handleUserChange(e,t,r){}setOnlineState(e){}shutdown(){}writeSequenceNumber(e){}notifyBundleLoaded(e){}}/**
2470 * @license
2471 * Copyright 2019 Google LLC
2472 *
2473 * Licensed under the Apache License, Version 2.0 (the "License");
2474 * you may not use this file except in compliance with the License.
2475 * You may obtain a copy of the License at
2476 *
2477 *   http://www.apache.org/licenses/LICENSE-2.0
2478 *
2479 * Unless required by applicable law or agreed to in writing, softw
2479are
2480 * distributed under the License is distributed on an "AS IS" BASIS,
2481 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2482 * See the License for the specific language governing permissions and
2483 * limitations under the License.
2484 */class nn{_o(e){}shutdown(){}}/**
2485 * @license
2486 * Copyright 2019 Google LLC
2487 *
2488 * Licensed under the Apache License, Version 2.0 (the "License");
2489 * you may not use this file except in compliance with the License.
2490 * You may obtain a copy of the License at
2491 *
2492 *   http://www.apache.org/licenses/LICENSE-2.0
2493 *
2494 * Unless required by applicable law or agreed to in writing, software
2495 * distributed under the License is distributed on an "AS IS" BASIS,
2496 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2497 * See the License for the specific language governing permissions and
2498 * limitations under the License.
2499 */class ni{constructor(){this.ao=()=>this.uo(),this.co=()=>this.lo(),this.ho=[],this.Po()}_o(e){this.ho.push(e)}shutdown(){window.removeEventListener("online",this.ao),window.removeEventListener("offline",this.co)}Po(){window.addEventListener("online",this.ao),window.addEventListener("offline",this.co)}uo(){for(let e of(W("ConnectivityMonitor","Network connectivity changed: AVAILABLE"),this.ho))e(0)}lo(){for(let e of(W("ConnectivityMonitor","Network connectivity changed: UNAVAILABLE"),this.ho))e(1)}static D(){return"undefined"!=typeof window&&void 0!==window.addEventListener&&void 0!==window.removeEventListener}}/**
2500 * @license
2501 * Copyright 2023 Google LLC
2502 *
2503 * Licensed under the Apache License, Version 2.0 (the "License");
2504 * you may not use this file except in compliance with the License.
2505 * You may obtain a copy of the License at
2506 *
2507 *   http://www.apache.org/licenses/LICENSE-2.0
2508 *
2509 * Unless required by applicable law or agreed to in writing, software
2510 * distributed under the License is distributed on an "AS IS" BASIS,
2511 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2512 * See the License for the specific language governing permissions and
2513 * limitations under the License.
2514 */let na=null;function ns(){return null===na?na=268435456+Math.round(2147483648*Math.random()):na++,"0x"+na.toString(16)}/**
2515 * @license
2516 * Copyright 2020 Google LLC
2517 *
2518 * Licensed under the Apache License, Version 2.0 (the "License");
2519 * you may not use this file except in compliance with the License.
2520 * You may obtain a copy of the License at
2521 *
2522 *   http://www.apache.org/licenses/LICENSE-2.0
2523 *
2524 * Unless required by applicable law or agreed to in writing, software
2525 * distributed under the License is distributed on an "AS IS" BASIS,
2526 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2527 * See the License for the specific language governing permissions and
2528 * limitations under the License.
2529 */let no={BatchGetDocuments:"batchGet",Commit:"commit",RunQuery:"runQuery",RunAggregationQuery:"runAggregationQuery"};/**
2530 * @license
2531 * Copyright 2017 Google LLC
2532 *
2533 * Licensed under the Apache License, Version 2.0 (the "License");
2534 * you may not use this file except in compliance with the License.
2535 * You may obtain a copy of the License at
2536 *
2537 *   http://www.apache.org/licenses/LICENSE-2.0
2538 *
2539 * Unless required by applicable law or agreed to in writing, software
2540 * distributed under the License is distributed on an "AS IS" BASIS,
2541 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2542 * See the License for the specific language governing permissions and
2543 * limitations under the License.
2544 */class nc{constructor(e){this.Io=e.Io,this.To=e.To}Eo(e){this.Ao=e}Ro(e){this.Vo=e}mo(e){this.fo=e}onMessage(e){this.po=e}close(){this.To()}send(e){this.Io(e)}yo(){this.Ao()}wo(){this.Vo()}So(e){this.fo(e)}bo(e){this.po(e)}}/**
2545 * @license
2546 * Copyright 2017 Google LLC
2547 *
2548 * Licensed under the Apache License, Version 2.0 (the "License");
2549 * you may not use this file except in compliance with the License.
2550 * You may obtain a copy of the License at
2551 *
2552 *   http://www.apache.org/licenses/LICENSE-2.0
2553 *
2554 * Unless required by applicable law or agreed to in writing, softw
2554are
2555 * distributed under the License is distributed on an "AS IS" BASIS,
2556 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2557 * See the License for the specific language governing permissions and
2558 * limitations under the License.
2559 */let nu="WebChannelConnection";class nl extends class{constructor(e){this.databaseInfo=e,this.databaseId=e.databaseId;let t=e.ssl?"https":"http",r=encodeURIComponent(this.databaseId.projectId),n=encodeURIComponent(this.databaseId.database);this.Do=t+"://"+e.host,this.vo=`projects/${r}/databases/${n}`,this.Co="(default)"===this.databaseId.database?`project_id=${r}`:`project_id=${r}&database_id=${n}`}get Fo(){return!1}Mo(e,t,r,n,i){let a=ns(),s=this.xo(e,t.toUriEncodedString());W("RestConnection",`Sending RPC '${e}' ${a}:`,s,r);let o={"google-cloud-resource-prefix":this.vo,"x-goog-request-params":this.Co};return this.Oo(o,n,i),this.No(e,s,o,r).then(t=>(W("RestConnection",`Received RPC '${e}' ${a}: `,t),t),t=>{throw D("RestConnection",`RPC '${e}' ${a} failed with error: `,t,"url: ",s,"request:",r),t})}Lo(e,t,r,n,i,a){return this.Mo(e,t,r,n,i)}Oo(e,t,r){e["X-Goog-Api-Client"]=function(){return"gl-js/ fire/"+T}(),e["Content-Type"]="text/plain",this.databaseInfo.appId&&(e["X-Firebase-GMPID"]=this.databaseInfo.appId),t&&t.headers.forEach((t,r)=>e[r]=t),r&&r.headers.forEach((t,r)=>e[r]=t)}xo(e,t){let r=no[e];return`${this.Do}/v1/${t}:${r}`}terminate(){}}{constructor(e){super(e),this.forceLongPolling=e.forceLongPolling,this.autoDetectLongPolling=e.autoDetectLongPolling,this.useFetchStreams=e.useFetchStreams,this.longPollingOptions=e.longPollingOptions}No(e,t,r,n){let i=ns();return new Promise((s,u)=>{let l=new a;l.setWithCredentials(!0),l.listenOnce(o.COMPLETE,()=>{try{switch(l.getLastErrorCode()){case c.NO_ERROR:let t=l.getResponseJson();W(nu,`XHR for RPC '${e}' ${i} received:`,JSON.stringify(t)),s(t);break;case c.TIMEOUT:W(nu,`RPC '${e}' ${i} timed out`),u(new N(O.DEADLINE_EXCEEDED,"Request time out"));break;case c.HTTP_ERROR:let r=l.getStatus();if(W(nu,`RPC '${e}' ${i} failed with status:`,r,"response text:",l.getResponseText()),r>0){let e=l.getResponseJson();Array.isArray(e)&&(e=e[0]);let t=null==e?void 0:e.error;if(t&&t.status&&t.message){let e=function(e){let t=e.toLowerCase().replace(/_/g,"-");return Object.values(O).indexOf(t)>=0?t:O.UNKNOWN}(t.status);u(new N(e,t.message))}else u(new N(O.UNKNOWN,"Server responded with status "+l.getStatus()))}else u(new N(O.UNAVAILABLE,"Connection failed."));break;default:L()}}finally{W(nu,`RPC '${e}' ${i} completed.`)}});let h=JSON.stringify(n);W(nu,`RPC '${e}' ${i} sending request:`,n),l.send(t,"POST",h,r,15)})}Bo(e,t,r){let n=ns(),i=[this.Do,"/","google.firestore.v1.Firestore","/",e,"/channel"],a=g(),o=h(),c={httpSessionIdParam:"gsessionid",initMessageHeaders:{},messageUrlParams:{database:`projects/${this.databaseId.projectId}/databases/${this.databaseId.database}`},sendRawJson:!0,supportsCrossDomainXhr:!0,internalChannelParams:{forwardChannelRequestTimeoutMs:6e5},forceLongPolling:this.forceLongPolling,detectBufferingProxy:this.autoDetectLongPolling},m=this.longPollingOptions.timeoutSeconds;void 0!==m&&(c.longPollingTimeout=Math.round(1e3*m)),this.useFetchStreams&&(c.useFetchStreams=!0),this.Oo(c.initMessageHeaders,t,r),c.encodeInitMessageHeaders=!0;let p=i.join("");W(nu,`Creating RPC '${e}' stream ${n}: ${p}`,c);let y=a.createWebChannel(p,c),f=!1,v=!1,_=new nc({Io:t=>{v?W(nu,`Not sending because RPC '${e}' stream ${n} is closed:`,t):(f||(W(nu,`Opening RPC '${e}' stream ${n} transport.`),y.open(),f=!0),W(nu,`RPC '${e}' stream ${n} sending:`,t),y.send(t))},To:()=>y.close()}),w=(e,t,r)=>{e.listen(t,e=>{try{r(e)}catch(e){setTimeout(()=>{throw e},0)}})};return w(y,s.EventType.OPEN,()=>{v||(W(nu,`RPC '${e}' stream ${n} transport opened.`),_.yo())}),w(y,s.EventType.CLOSE,()=>{v||(v=!0,W(nu,`RPC '${e}' stream ${n} transport closed`),_.So())}),w(y,s.EventType.ERROR,t=>{v||(v=!0,D(nu,`RPC '${e}' stream ${n} transport errored:`,t),_.So(new N(O.UNAVAILABLE,"The operation could not be completed")))}),w(y,s.EventType.MESSAGE,t=>{var r;if(!v){let i=t.data[0];i||L();let a=i.error||(null===(r=i[0])||void 0===r?void 0:r.error);if(a){W(nu,`RPC '${e}' stream ${n} received error:`,a);let t=a.status,r=function(e){let t=d[e];if(void 0!==t)return t7(t)}(t),i=a.message;void 0===r&&(r=O.INTERNAL,i="Unknown error status: "+t+" with message "+a.message),v=!0,_.So(new N(r,i)),y.close()}else W(nu,`RPC '${e}' stream ${n} received:`,i),_.bo(i)}}),w(o,l.STAT_EVENT,t=>{t.stat===u.PROXY?W(nu,`RPC '${e}' stream ${n} detected buffering proxy`):t.stat===u.NOPROXY&&W(nu,`RPC '${e}' stream ${n} detected no buffering proxy`)}),setTimeout(()=>{_.wo()},0),_}}function nh(){return"undefined"!=typeof document?document:null}/**
2560 * @license
2561 * Copyright 2020 Google LLC
2562 *
2563 * Licensed under the Apache License, Version 2.0 (the "License");
2564 * you may not use this file except in compliance with the License.
2565 * You may obtain a copy of the License at
2566 *
2567 *   http://www.apache.org/licenses/LICENSE-2.0
2568 *
2569 * Unless required by applicable law or agreed to in writing, software
2570 * distributed under the License is distributed on an "AS IS" BASIS,
2571 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2572 * See the License for the specific language governing permissions and
2573 * limitations under the License.
2574 */function ng(e){return new rf(e,!0)}/**
2575 * @license
2576 * Copyright 2017 Google LLC
2577 *
2578 * Licensed under the Apache License, Version 2.0 (the "License");
2579 * you may not use this file except in compliance with the License.
2580 * You may obtain a copy of the License at
2581 *
2582 *   http://www.apache.org/licenses/LICENSE-2.0
2583 *
2584 * Unless required by applicable law or agreed to in writing, software
2585 * distributed under the License is distributed on an "AS IS" BASIS,
2586 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2587 * See the License for the specific language governing permissions and
2588 * limitations under the License.
2589 */class nd{constructor(e,t,r=1e3,n=1.5,i=6e4){this.ui=e,this.timerId=t,this.ko=r,this.qo=n,this.Qo=i,this.Ko=0,this.$o=null,this.Uo=Date.now(),this.reset()}reset(){this.Ko=0}Wo(){this.Ko=this.Qo}Go(e){this.cancel();let t=Math.floor(this.Ko+this.zo()),r=Math.max(0,Date.now()-this.Uo),n=Math.max(0,t-r);n>0&&W("ExponentialBackoff",`Backing off for ${n} ms (base delay: ${this.Ko} ms, delay with jitter: ${t} ms, last attempt: ${r} ms ago)`),this.$o=this.ui.enqueueAfterDelay(this.timerId,n,()=>(this.Uo=Date.now(),e())),this.Ko*=this.qo,this.Ko<this.ko&&(this.Ko=this.ko),this.Ko>this.Qo&&(this.Ko=this.Qo)}jo(){null!==this.$o&&(this.$o.skipDelay(),this.$o=null)}
2589cancel(){null!==this.$o&&(this.$o.cancel(),this.$o=null)}zo(){return(Math.random()-.5)*this.Ko}}/**
2590 * @license
2591 * Copyright 2017 Google LLC
2592 *
2593 * Licensed under the Apache License, Version 2.0 (the "License");
2594 * you may not use this file except in compliance with the License.
2595 * You may obtain a copy of the License at
2596 *
2597 *   http://www.apache.org/licenses/LICENSE-2.0
2598 *
2599 * Unless required by applicable law or agreed to in writing, software
2600 * distributed under the License is distributed on an "AS IS" BASIS,
2601 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2602 * See the License for the specific language governing permissions and
2603 * limitations under the License.
2604 */class nm{constructor(e,t,r,n,i,a,s,o){this.ui=e,this.Ho=r,this.Jo=n,this.connection=i,this.authCredentialsProvider=a,this.appCheckCredentialsProvider=s,this.listener=o,this.state=0,this.Yo=0,this.Zo=null,this.Xo=null,this.stream=null,this.e_=0,this.t_=new nd(e,t)}n_(){return 1===this.state||5===this.state||this.r_()}r_(){return 2===this.state||3===this.state}start(){this.e_=0,4!==this.state?this.auth():this.i_()}async stop(){this.n_()&&await this.close(0)}s_(){this.state=0,this.t_.reset()}o_(){this.r_()&&null===this.Zo&&(this.Zo=this.ui.enqueueAfterDelay(this.Ho,6e4,()=>this.__()))}a_(e){this.u_(),this.stream.send(e)}async __(){if(this.r_())return this.close(0)}u_(){this.Zo&&(this.Zo.cancel(),this.Zo=null)}c_(){this.Xo&&(this.Xo.cancel(),this.Xo=null)}async close(e,t){this.u_(),this.c_(),this.t_.cancel(),this.Yo++,4!==e?this.t_.reset():t&&t.code===O.RESOURCE_EXHAUSTED?(A(t.toString()),A("Using maximum backoff delay to prevent overloading the backend."),this.t_.Wo()):t&&t.code===O.UNAUTHENTICATED&&3!==this.state&&(this.authCredentialsProvider.invalidateToken(),this.appCheckCredentialsProvider.invalidateToken()),null!==this.stream&&(this.l_(),this.stream.close(),this.stream=null),this.state=e,await this.listener.mo(t)}l_(){}auth(){this.state=1;let e=this.h_(this.Yo),t=this.Yo;Promise.all([this.authCredentialsProvider.getToken(),this.appCheckCredentialsProvider.getToken()]).then(([e,r])=>{this.Yo===t&&this.P_(e,r)},t=>{e(()=>{let e=new N(O.UNKNOWN,"Fetching auth token failed: "+t.message);return this.I_(e)})})}P_(e,t){let r=this.h_(this.Yo);this.stream=this.T_(e,t),this.stream.Eo(()=>{r(()=>this.listener.Eo())}),this.stream.Ro(()=>{r(()=>(this.state=2,this.Xo=this.ui.enqueueAfterDelay(this.Jo,1e4,()=>(this.r_()&&(this.state=3),Promise.resolve())),this.listener.Ro()))}),this.stream.mo(e=>{r(()=>this.I_(e))}),this.stream.onMessage(e=>{r(()=>1==++this.e_?this.E_(e):this.onNext(e))})}i_(){this.state=5,this.t_.Go(async()=>{this.state=0,this.start()})}I_(e){return W("PersistentStream",`close with error: ${e}`),this.stream=null,this.close(4,e)}h_(e){return t=>{this.ui.enqueueAndForget(()=>this.Yo===e?t():(W("PersistentStream","stream callback skipped by getCloseGuardedDispatcher."),Promise.resolve()))}}}class np extends nm{constructor(e,t,r,n,i,a){super(e,"listen_stream_connection_backoff","listen_stream_idle","health_check_timeout",t,r,n,a),this.serializer=i}T_(e,t){return this.connection.Bo("Listen",e,t)}E_(e){return this.onNext(e)}onNext(e){this.t_.reset();let t=function(e,t){let r;if("targetChange"in t){var n,i;t.targetChange;let a="NO_CHANGE"===(n=t.targetChange.targetChangeType||"NO_CHANGE")?0:"ADD"===n?1:"REMOVE"===n?2:"CURRENT"===n?3:"RESET"===n?4:L(),s=t.targetChange.targetIds||[],o=(i=t.targetChange.resumeToken,e.useProto3Json?(void 0===i||"string"==typeof i||L(),ek.fromBase64String(i||"")):(void 0===i||i instanceof R||i instanceof Uint8Array||L(),ek.fromUint8Array(i||new Uint8Array))),c=t.targetChange.cause;r=new ru(a,s,o,c&&new N(void 0===c.code?O.UNKNOWN:t7(c.code),c.message||"")||null)}else if("documentChange"in t){t.documentChange;let n=t.documentChange;n.document,n.document.name,n.document.updateTime;let i=rS(e,n.document.name),a=rk(n.document.updateTime),s=n.document.createTime?rk(n.document.createTime):X.min(),o=new e$({mapValue:{fields:n.document.fields}}),c=eJ.newFoundDocument(i,a,s,o);r=new ro(n.targetIds||[],n.removedTargetIds||[],c.key,c)}else if("documentDelete"in t){t.documentDelete;let n=t.documentDelete;n.document;let i=rS(e,n.document),a=n.readTime?rk(n.readTime):X.min(),s=eJ.newNoDocument(i,a);r=new ro([],n.removedTargetIds||[],s.key,s)}else if("documentRemove"in t){t.documentRemove;let n=t.documentRemove;n.document;let i=rS(e,n.document);r=new ro([],n.removedTargetIds||[],i,null)}else{if(!("filter"in t))return L();{t.filter;let e=t.filter;e.targetId;
2604let{count:n=0,unchangedNames:i}=e,a=new t8(n,i);r=new rc(e.targetId,a)}}return r}(this.serializer,e),r=function(e){if(!("targetChange"in e))return X.min();let t=e.targetChange;return t.targetIds&&t.targetIds.length?X.min():t.readTime?rk(t.readTime):X.min()}(e);return this.listener.d_(t,r)}A_(e){let t={};t.database=rT(this.serializer),t.addTarget=function(e,t){let r;let n=t.target;if((r=to(n)?{documents:{documents:[rI(e,n.path)]}}:{query:rW(e,n)._t}).targetId=t.targetId,t.resumeToken.approximateByteSize()>0){r.resumeToken=rw(e,t.resumeToken);let n=rv(e,t.expectedCount);null!==n&&(r.expectedCount=n)}else if(t.snapshotVersion.compareTo(X.min())>0){r.readTime=r_(e,t.snapshotVersion.toTimestamp());let n=rv(e,t.expectedCount);null!==n&&(r.expectedCount=n)}return r}(this.serializer,e);let r=function(e,t){let r=function(e){switch(e){case"TargetPurposeListen":return null;case"TargetPurposeExistenceFilterMismatch":return"existence-filter-mismatch";case"TargetPurposeExistenceFilterMismatchBloom":return"existence-filter-mismatch-bloom";case"TargetPurposeLimboResolution":return"limbo-document";default:return L()}}(t.purpose);return null==r?null:{"goog-listen-tags":r}}(this.serializer,e);r&&(t.labels=r),this.a_(t)}R_(e){let t={};t.database=rT(this.serializer),t.removeTarget=e,this.a_(t)}}class ny extends nm{constructor(e,t,r,n,i,a){super(e,"write_stream_connection_backoff","write_stream_idle","health_check_timeout",t,r,n,a),this.serializer=i}get V_(){return this.e_>0}start(){this.lastStreamToken=void 0,super.start()}l_(){this.V_&&this.m_([])}T_(e,t){return this.connection.Bo("Write",e,t)}E_(e){return e.streamToken||L(),this.lastStreamToken=e.streamToken,e.writeResults&&0!==e.writeResults.length&&L(),this.listener.f_()}onNext(e){var t,r;e.streamToken||L(),this.lastStreamToken=e.streamToken,this.t_.reset();let n=(t=e.writeResults,r=e.commitTime,t&&t.length>0?(void 0!==r||L(),t.map(e=>{let t;return(t=e.updateTime?rk(e.updateTime):rk(r)).isEqual(X.min())&&(t=rk(r)),new tq(t,e.transformResults||[])})):[]),i=rk(e.commitTime);return this.listener.g_(i,n)}p_(){let e={};e.database=rT(this.serializer),this.a_(e)}m_(e){let t={streamToken:this.lastStreamToken,writes:e.map(e=>(function(e,t){var r;let n;if(t instanceof tX)n={update:rH(e,t.key,t.value)};else if(t instanceof t4)n={delete:rR(e,t.key)};else if(t instanceof tY)n={update:rH(e,t.key,t.data),updateMask:function(e){let t=[];return e.fields.forEach(e=>t.push(e.canonicalString())),{fieldPaths:t}}(t.fieldMask)};else{if(!(t instanceof t2))return L();n={verify:rR(e,t.key)}}return t.fieldTransforms.length>0&&(n.updateTransforms=t.fieldTransforms.map(e=>(function(e,t){let r=t.transform;if(r instanceof tL)return{fieldPath:t.field.canonicalString(),setToServerValue:"REQUEST_TIME"};if(r instanceof tO)return{fieldPath:t.field.canonicalString(),appendMissingElements:{values:r.elements}};if(r instanceof tK)return{fieldPath:t.field.canonicalString(),removeAllFromArray:{values:r.elements}};if(r instanceof tM)return{fieldPath:t.field.canonicalString(),increment:r.Pe};throw L()})(0,e))),t.precondition.isNone||(n.currentDocument=void 0!==(r=t.precondition).updateTime?{updateTime:r_(e,r.updateTime.toTimestamp())}:void 0!==r.exists?{exists:r.exists}:L()),n})(this.serializer,e))};this.a_(t)}}/**
2605 * @license
2606 * Copyright 2017 Google LLC
2607 *
2608 * Licensed under the Apache License, Version 2.0 (the "License");
2609 * you may not use this file except in compliance with the License.
2610 * You may obtain a copy of the License at
2611 *
2612 *   http://www.apache.org/licenses/LICENSE-2.0
2613 *
2614 * Unless required by applicable law or agreed to in writing, software
2615 * distributed under the License is distributed on an "AS IS" BASIS,
2616 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2617 * See the License for the specific language governing permissions and
2618 * limitations under the License.
2619 */class nf extends class{}{constructor(e,t,r,n){super(),this.authCredentials=e,this.appCheckCredentials=t,this.connection=r,this.serializer=n,this.y_=!1}w_(){if(this.y_)throw new N(O.FAILED_PRECONDITION,"The client has already been terminated.")}Mo(e,t,r,n){return this.w_(),Promise.all([this.authCredentials.getToken(),this.appCheckCredentials.getToken()]).then(([i,a])=>this.connection.Mo(e,rb(t,r),n,i,a)).catch(e=>{throw"FirebaseError"===e.name?(e.code===O.UNAUTHENTICATED&&(this.authCredentials.invalidateToken(),this.appCheckCredentials.invalidateToken()),e):new N(O.UNKNOWN,e.toString())})}Lo(e,t,r,n,i){return this.w_(),Promise.all([this.authCredentials.getToken(),this.appCheckCredentials.getToken()]).then(([a,s])=>this.connection.Lo(e,rb(t,r),n,a,s,i)).catch(e=>{throw"FirebaseError"===e.name?(e.code===O.UNAUTHENTICATED&&(this.authCredentials.invalidateToken(),this.appCheckCredentials.invalidateToken()),e):new N(O.UNKNOWN,e.toString())})}terminate(){this.y_=!0,this.connection.terminate()}}class nv{constructor(e,t){this.asyncQueue=e,this.onlineStateHandler=t,this.state="Unknown",this.S_=0,this.b_=null,this.D_=!0}v_(){0===this.S_&&(this.C_("Unknown"),this.b_=this.asyncQueue.enqueueAfterDelay("online_state_timeout",1e4,()=>(this.b_=null,this.F_("Backend didn't respond within 10 seconds."),this.C_("Offline"),Promise.resolve())))}M_(e){"Online"===this.state?this.C_("Unknown"):(this.S_++,this.S_>=1&&(this.x_(),this.F_(`Connection failed 1 times. Most recent error: ${e.toString()}`),this.C_("Offline")))}set(e){this.x_(),this.S_=0,"Online"===e&&(this.D_=!1),this.C_(e)}C_(e){e!==this.state&&(this.state=e,this.onlineStateHandler(e))}F_(e){let t=`Could not reach Cloud Firestore backend. ${e}
2620This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.`;this.D_?(A(t),this.D_=!1):W("OnlineStateTracker",t)}x_(){null!==this.b_&&(this.b_.cancel(),this.b_=null)}}/**
2621 * @license
2622 * Copyright 2017 Google LLC
2623 *
2624 * Licensed under the Apache License, Version 2.0 (the "License");
2625 * you may not use this file except in compliance with the License.
2626 * You may obtain a copy of the License at
2627 *
2628 *   http://www.apache.org/licenses/LICENSE-2.0
2629 *
2630 * Unless required by applicable law or agreed to in writing, software
2631 * distributed under the License is distributed on an "AS IS" BASIS,
2632 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2633 * See the License for the specific language governing permissions and
2634 * limitations under the License.
2635 */class n_{constructor(e,t,r,n,i){this.localStore=e,this.datastore=t,this.asyncQueue=r,this.remoteSyncer={},this.O_=[],this.N_=new Map,this.L_=new Set,this.B_=[],this.k_=i,this.k_._o(e=>{r.enqueueAndForget(async()=>{nT(this)&&(W("RemoteStore","Restarting streams for network reachability change."),await async function(e){e.L_.add(4),await nk(e),e.q_.set("Unknown"),e.L_.delete(4),await nw(e)}(this))})}),this.q_=new nv(r,n)}}async function nw(e){if(nT(e))for(let t of e.B_)await t(!0)}async function nk(e){for(let t of e.B_)await t(!1)}function nP(e,t){e.N_.has(t.targetId)||(e.N_.set(t.targetId,t),nI(e)?nS(e):nq(e).r_()&&nE(e,t))}function nb(e,t){let r=nq(e);e.N_.delete(t),r.r_()&&nR(e,t),0===e.N_.size&&(r.r_()?r.o_():nT(e)&&e.q_.set("Unknown"))}function nE(e,t){if(e.Q_.xe(t.targetId),t.resumeToken.approximateByteSize()>0||t.snapshotVersion.compareTo(X.min())>0){let r=e.remoteSyncer.getRemoteKeysForTarget(t.targetId).size;t=t.withExpectedCount(r)}nq(e).A_(t)}function nR(e,t){e.Q_.xe(t),nq(e).R_(t)}function nS(e){e.Q_=new rh({getRemoteKeysForTarget:t=>e.remoteSyncer.getRemoteKeysForTarget(t),ot:t=>e.N_.get(t)||null,tt:()=>e.datastore.serializer.databaseId}),nq(e).start(),e.q_.v_()}function nI(e){return nT(e)&&!nq(e).n_()&&e.N_.size>0}function nT(e){return 0===e.L_.size}async function nC(e){e.q_.set("Online")}async function nH(e){e.N_.forEach((t,r)=>{nE(e,t)})}async function nW(e,t){e.Q_=void 0,nI(e)?(e.q_.M_(t),nS(e)):e.q_.set("Unknown")}async function nA(e,t,r){if(e.q_.set("Online"),t instanceof ru&&2===t.state&&t.cause)try{await async function(e,t){let r=t.cause;for(let n of t.targetIds)e.N_.has(n)&&(await e.remoteSyncer.rejectListen(n,r),e.N_.delete(n),e.Q_.removeTarget(n))}(e,t)}catch(r){W("RemoteStore","Failed to remove targets %s: %s ",t.targetIds.join(","),r),await nD(e,r)}else if(t instanceof ro?e.Q_.Ke(t):t instanceof rc?e.Q_.He(t):e.Q_.We(t),!r.isEqual(X.min()))try{let t=await r8(e.localStore);r.compareTo(t)>=0&&await function(e,t){let r=e.Q_.rt(t);
2635return r.targetChanges.forEach((r,n)=>{if(r.resumeToken.approximateByteSize()>0){let i=e.N_.get(n);i&&e.N_.set(n,i.withResumeToken(r.resumeToken,t))}}),r.targetMismatches.forEach((t,r)=>{let n=e.N_.get(t);if(!n)return;e.N_.set(t,n.withResumeToken(ek.EMPTY_BYTE_STRING,n.snapshotVersion)),nR(e,t);let i=new rL(n.target,t,r,n.sequenceNumber);nE(e,i)}),e.remoteSyncer.applyRemoteEvent(r)}(e,r)}catch(t){W("RemoteStore","Failed to raise snapshot:",t),await nD(e,t)}}async function nD(e,t,r){if(!ec(t))throw t;e.L_.add(1),await nk(e),e.q_.set("Offline"),r||(r=()=>r8(e.localStore)),e.asyncQueue.enqueueRetryable(async()=>{W("RemoteStore","Retrying IndexedDB access"),await r(),e.L_.delete(1),await nw(e)})}function nU(e,t){return t().catch(r=>nD(e,r,t))}async function nL(e){let t=nj(e),r=e.O_.length>0?e.O_[e.O_.length-1].batchId:-1;for(;nT(e)&&e.O_.length<10;)try{let n=await function(e,t){return e.persistence.runTransaction("Get next mutation batch","readonly",r=>(void 0===t&&(t=-1),e.mutationQueue.getNextMutationBatchAfterBatchId(r,t)))}(e.localStore,r);if(null===n){0===e.O_.length&&t.o_();break}r=n.batchId,function(e,t){e.O_.push(t);let r=nj(e);r.r_()&&r.V_&&r.m_(t.mutations)}(e,n)}catch(t){await nD(e,t)}nO(e)&&nN(e)}function nO(e){return nT(e)&&!nj(e).n_()&&e.O_.length>0}function nN(e){nj(e).start()}async function nK(e){nj(e).p_()}async function nx(e){let t=nj(e);for(let r of e.O_)t.m_(r.mutations)}async function nM(e,t,r){let n=e.O_.shift(),i=t3.from(n,t,r);await nU(e,()=>e.remoteSyncer.applySuccessfulWrite(i)),await nL(e)}async function nF(e,t){t&&nj(e).V_&&await async function(e,t){var r;if(function(e){switch(e){default:return L();case O.CANCELLED:case O.UNKNOWN:case O.DEADLINE_EXCEEDED:case O.RESOURCE_EXHAUSTED:case O.INTERNAL:case O.UNAVAILABLE:case O.UNAUTHENTICATED:return!1;case O.INVALID_ARGUMENT:case O.NOT_FOUND:case O.ALREADY_EXISTS:case O.PERMISSION_DENIED:case O.FAILED_PRECONDITION:case O.ABORTED:case O.OUT_OF_RANGE:case O.UNIMPLEMENTED:case O.DATA_LOSS:return!0}}(r=t.code)&&r!==O.ABORTED){let r=e.O_.shift();nj(e).s_(),await nU(e,()=>e.remoteSyncer.rejectFailedWrite(r.batchId,t)),await nL(e)}}(e,t),nO(e)&&nN(e)}async function nB(e,t){e.asyncQueue.verifyOperationInProgress(),W("RemoteStore","RemoteStore received new credentials");let r=nT(e);e.L_.add(3),await nk(e),r&&e.q_.set("Unknown"),await e.remoteSyncer.handleCredentialChange(t),e.L_.delete(3),await nw(e)}async function nV(e,t){t?(e.L_.delete(2),await nw(e)):t||(e.L_.add(2),await nk(e),e.q_.set("Unknown"))}function nq(e){var t,r,n;return e.K_||(e.K_=(t=e.datastore,r=e.asyncQueue,n={Eo:nC.bind(null,e),Ro:nH.bind(null,e),mo:nW.bind(null,e),d_:nA.bind(null,e)},t.w_(),new np(r,t.connection,t.authCredentials,t.appCheckCredentials,t.serializer,n)),e.B_.push(async t=>{t?(e.K_.s_(),nI(e)?nS(e):e.q_.set("Unknown")):(await e.K_.stop(),e.Q_=void 0)})),e.K_}function nj(e){var t,r,n;return e.U_||(e.U_=(t=e.datastore,r=e.asyncQueue,n={Eo:()=>Promise.resolve(),Ro:nK.bind(null,e),mo:nF.bind(null,e),f_:nx.bind(null,e),g_:nM.bind(null,e)},t.w_(),new ny(r,t.connection,t.authCredentials,t.appCheckCredentials,t.serializer,n)),e.B_.push(async t=>{t?(e.U_.s_(),await nL(e)):(await e.U_.stop(),e.O_.length>0&&(W("RemoteStore",`Stopping write stream with ${e.O_.length} pending writes`),e.O_=[]))})),e.U_}/**
2636 * @license
2637 * Copyright 2017 Google LLC
2638 *
2639 * Licensed under the Apache License, Version 2.0 (the "License");
2640 * you may not use this file except in compliance with the License.
2641 * You may obtain a copy of the License at
2642 *
2643 *   http://www.apache.org/licenses/LICENSE-2.0
2644 *
2645 * Unless required by applicable law or agreed to in writing, software
2646 * distributed under the License is distributed on an "AS IS" BASIS,
2647 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2648 * See the License for the specific language governing permissions and
2649 * limitations under the License.
2650 */class nG{constructor(e,t,r,n,i){this.asyncQueue=e,this.timerId=t,this.targetTimeMs=r,this.op=n,this.removalCallback=i,this.deferred=new K,this.then=this.deferred.promise.then.bind(this.deferred.promise),this.deferred.promise.catch(e=>{})}get promise(){return this.deferred.promise}static createAndSchedule(e,t,r,n,i){let a=new nG(e,t,Date.now()+r,n,i);return a.start(r),a}start(e){this.timerHandle=setTimeout(()=>this.handleDelayElapsed(),e)}skipDelay(){return this.handleDelayElapsed()}cancel(e){null!==this.timerHandle&&(this.clearTimeout(),this.deferred.reject(new N(O.CANCELLED,"Operation cancelled"+(e?": "+e:""))))}handleDelayElapsed(){this.asyncQueue.enqueueAndForget(()=>null!==this.timerHandle?(this.clearTimeout(),this.op().then(e=>this.deferred.resolve(e))):Promise.resolve())}clearTimeout(){null!==this.timerHandle&&(this.removalCallback(this),clearTimeout(this.timerHandle),this.timerHandle=null)}}function nz(e,t){if(A("AsyncQueue",`${t}: ${e}`),ec(e))return new N(O.UNAVAILABLE,`${t}: ${e}`);throw e}/**
2651 * @license
2652 * Copyright 2017 Google LLC
2653 *
2654 * Licensed under the Apache License, Version 2.0 (the "License");
2655 * you may not use this file except in compliance with the License.
2656 * You may obtain a copy of the License at
2657 *
2658 *   http://www.apache.org/licenses/LICENSE-2.0
2659 *
2660 * Unless required by applicable law or agreed to in writing, software
2661 * distributed under the License is distributed on an "AS IS" BASIS,
2662 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2663 * See the License for the specific language governing permissions and
2664 * limitations under the License.
2665 */class n${constructor(e){this.comparator=e?(t,r)=>e(t,r)||er.comparator(t.key,r.key):(e,t)=>er.comparator(e.key,t.key),this.keyedMap=tE(),this.sortedSet=new em(this.comparator)}static emptySet(e){return new n$(e.comparator)}has(e){return null!=this.keyedMap.get(e)}get(e){return this.keyedMap.get(e)}first(){return this.sortedSet.minKey()}last(){return this.sortedSet.maxKey()}isEmpty(){return this.sortedSet.isEmpty()}indexOf(e){let t=this.keyedMap.get(e);return t?this.sortedSet.indexOf(t):-1}get size(){return this.sortedSet.size}forEach(e){this.sortedSet.inorderTraversal((t,r)=>(e(t),!1))}add(e){let t=this.delete(e.key);return t.copy(t.keyedMap.insert(e.key,e),t.sortedSet.insert(e,null))}delete(e){let t=this.get(e);return t?this.copy(this.keyedMap.remove(e),this.sortedSet.remove(t)):this}isEqual(e){if(!(e instanceof n$)||this.size!==e.size)return!1;let t=this.sortedSet.getIterator(),r=e.sortedSet.getIterator();for(;t.hasNext();){let e=t.getNext().key,n=r.getNext().key;if(!e.isEqual(n))return!1}return!0}toString(){let e=[];return this.forEach(t=>{e.push(t.toString())}),0===e.length?"DocumentSet ()":"DocumentSet (\n  "+e.join("  \n")+"\n)"}copy(e,t){let r=new n$;return r.comparator=this.comparator,r.keyedMap=e,r.sortedSet=t,r}}/**
2666 * @license
2667 * Copyright 2017 Google LLC
2668 *
2669 * Licensed under the Apache License, Version 2.0 (the "License");
2670 * you may not use this file except in compliance with the License.
2671 * You may obtain a copy of the License at
2672 *
2673 *   http://www.apache.org/licenses/LICENSE-2.0
2674 *
2675 * Unless required by applicable law or agreed to in writing, software
2676 * distributed under the License is distributed on an "AS IS" BASIS,
2677 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2678 * See the License for the specific language governing permissions and
2679 * limitations under the License.
2680 */class nJ{constructor(){this.W_=new em(er.comparator)}track(e){let t=e.doc.key,r=this.W_.get(t);r?0!==e.type&&3===r.type?this.W_=this.W_.insert(t,e):3===e.type&&1!==r.type?this.W_=this.W_.insert(t,{type:r.type,doc:e.doc}):2===e.type&&2===r.type?this.W_=this.W_.insert(t,{type:2,doc:e.doc}):2===e.type&&0===r.type?this.W_=this.W_.insert(t,{type:0,doc:e.doc}):1===e.type&&0===r.type?this.W_=this.W_.remove(t):1===e.type&&2===r.type?this.W_=this.W_.insert(t,{type:1,doc:r.doc}):0===e.type&&1===r.type?this.W_=this.W_.insert(t,{type:2,doc:e.doc}):L():this.W_=this.W_.insert(t,e)}G_(){let e=[];return this.W_.inorderTraversal((t,r)=>{e.push(r)}),e}}class nQ{constructor(e,t,r,n,i,a,s,o,c){this.query=e,this.docs=t,this.oldDocs=r,this.docChanges=n,this.mutatedKeys=i,this.fromCache=a,this.syncStateChanged=s,this.excludesMetadataChanges=o,this.hasCachedResults=c}static fromInitialDocuments(e,t,r,n,i){let a=[];return t.forEach(e=>{a.push({type:0,doc:e})}),new nQ(e,t,n$.emptySet(t),a,r,n,!0,!1,i)}get hasPendingWrites(){return!this.mutatedKeys.isEmpty()}isEqual(e){if(!(this.fromCache===e.fromCache&&this.hasCachedResults===e.hasCachedResults&&this.syncStateChanged===e.syncStateChanged&&this.mutatedKeys.isEqual(e.mutatedKeys)&&ty(this.query,e.query)&&this.docs.isEqual(e.docs)&&this.oldDocs.isEqual(e.oldDocs)))return!1;let t=this.docChanges,r=e.docChanges;if(t.length!==r.length)return!1;for(let e=0;e<t.length;e++)if(t[e].type!==r[e].type||!t[e].doc.isEqual(r[e].doc))return!1;return!0}}/**
2681 * @license
2682 * Copyright 2017 Google LLC
2683 *
2684 * Licensed under the Apache License, Version 2.0 (the "License");
2685 * you may not use this file except in compliance with the License.
2686 * You may obtain a copy of the License at
2687 *
2688 *   http://www.apache.org/licenses/LICENSE-2.0
2689 *
2690 * Unless required by applicable law or agreed to in writing, softw
2690are
2691 * distributed under the License is distributed on an "AS IS" BASIS,
2692 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2693 * See the License for the specific language governing permissions and
2694 * limitations under the License.
2695 */class nX{constructor(){this.z_=void 0,this.j_=[]}H_(){return this.j_.some(e=>e.J_())}}class nY{constructor(){this.queries=nZ(),this.onlineState="Unknown",this.Y_=new Set}terminate(){!function(e,t){let r=e.queries;e.queries=nZ(),r.forEach((e,r)=>{for(let e of r.j_)e.onError(t)})}(this,new N(O.ABORTED,"Firestore shutting down"))}}function nZ(){return new tk(e=>tf(e),ty)}async function n1(e,t){let r=3,n=t.query,i=e.queries.get(n);i?!i.H_()&&t.J_()&&(r=2):(i=new nX,r=t.J_()?0:1);try{switch(r){case 0:i.z_=await e.onListen(n,!0);break;case 1:i.z_=await e.onListen(n,!1);break;case 2:await e.onFirstRemoteStoreListen(n)}}catch(r){let e=nz(r,`Initialization of query '${tv(t.query)}' failed`);return void t.onError(e)}e.queries.set(n,i),i.j_.push(t),t.Z_(e.onlineState),i.z_&&t.X_(i.z_)&&n5(e)}async function n0(e,t){let r=t.query,n=3,i=e.queries.get(r);if(i){let e=i.j_.indexOf(t);e>=0&&(i.j_.splice(e,1),0===i.j_.length?n=t.J_()?0:1:!i.H_()&&t.J_()&&(n=2))}switch(n){case 0:return e.queries.delete(r),e.onUnlisten(r,!0);case 1:return e.queries.delete(r),e.onUnlisten(r,!1);case 2:return e.onLastRemoteStoreUnlisten(r);default:return}}function n4(e,t){let r=!1;for(let n of t){let t=n.query,i=e.queries.get(t);if(i){for(let e of i.j_)e.X_(n)&&(r=!0);i.z_=n}}r&&n5(e)}function n2(e,t,r){let n=e.queries.get(t);if(n)for(let e of n.j_)e.onError(r);e.queries.delete(t)}function n5(e){e.Y_.forEach(e=>{e.next()})}(y=p||(p={})).ea="default",y.Cache="cache";class n3{constructor(e,t,r){this.query=e,this.ta=t,this.na=!1,this.ra=null,this.onlineState="Unknown",this.options=r||{}}X_(e){if(!this.options.includeMetadataChanges){let t=[];for(let r of e.docChanges)3!==r.type&&t.push(r);e=new nQ(e.query,e.docs,e.oldDocs,t,e.mutatedKeys,e.fromCache,e.syncStateChanged,!0,e.hasCachedResults)}let t=!1;return this.na?this.ia(e)&&(this.ta.next(e),t=!0):this.sa(e,this.onlineState)&&(this.oa(e),t=!0),this.ra=e,t}onError(e){this.ta.error(e)}Z_(e){this.onlineState=e;let t=!1;return this.ra&&!this.na&&this.sa(this.ra,e)&&(this.oa(this.ra),t=!0),t}sa(e,t){return!(e.fromCache&&this.J_())||(!this.options._a||!("Offline"!==t))&&(!e.docs.isEmpty()||e.hasCachedResults||"Offline"===t)}ia(e){if(e.docChanges.length>0)return!0;let t=this.ra&&this.ra.hasPendingWrites!==e.hasPendingWrites;return!(!e.syncStateChanged&&!t)&&!0===this.options.includeMetadataChanges}oa(e){e=nQ.fromInitialDocuments(e.query,e.docs,e.mutatedKeys,e.fromCache,e.hasCachedResults),this.na=!0,this.ta.next(e)}J_(){return this.options.source!==p.Cache}}/**
2696 * @license
2697 * Copyright 2017 Google LLC
2698 *
2699 * Licensed under the Apache License, Version 2.0 (the "License");
2700 * you may not use this file except in compliance with the License.
2701 * You may obtain a copy of the License at
2702 *
2703 *   http://www.apache.org/licenses/LICENSE-2.0
2704 *
2705 * Unless required by applicable law or agreed to in writing, software
2706 * distributed under the License is distributed on an "AS IS" BASIS,
2707 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2708 * See the License for the specific language governing permissions and
2709 * limitations under the License.
2710 */class n6{constructor(e){this.key=e}}class n9{constructor(e){this.key=e}}class n8{constructor(e,t){this.query=e,this.Ta=t,this.Ea=null,this.hasCachedResults=!1,this.current=!1,this.da=tC(),this.mutatedKeys=tC(),this.Aa=tw(e),this.Ra=new n$(this.Aa)}get Va(){return this.Ta}ma(e,t){let r=t?t.fa:new nJ,n=t?t.Ra:this.Ra,i=t?t.mutatedKeys:this.mutatedKeys,a=n,s=!1,o="F"===this.query.limitType&&n.size===this.query.limit?n.last():null,c="L"===this.query.limitType&&n.size===this.query.limit?n.first():null;if(e.inorderTraversal((e,t)=>{let u=n.get(e),l=t_(this.query,t)?t:null,h=!!u&&this.mutatedKeys.has(u.key),g=!!l&&(l.hasLocalMutations||this.mutatedKeys.has(l.key)&&l.hasCommittedMutations),d=!1;u&&l?u.data.isEqual(l.data)?h!==g&&(r.track({type:3,doc:l}),d=!0):this.ga(u,l)||(r.track({type:2,doc:l}),d=!0,(o&&this.Aa(l,o)>0||c&&0>this.Aa(l,c))&&(s=!0)):!u&&l?(r.track({type:0,doc:l}),d=!0):u&&!l&&(r.track({type:1,doc:u}),d=!0,(o||c)&&(s=!0)),d&&(l?(a=a.add(l),i=g?i.add(e):i.delete(e)):(a=a.delete(e),i=i.delete(e)))}),null!==this.query.limit)for(;a.size>this.query.limit;){let e="F"===this.query.limitType?a.last():a.first();a=a.delete(e.key),i=i.delete(e.key),r.track({type:1,doc:e})}return{Ra:a,fa:r,ns:s,mutatedKeys:i}}ga(e,t){return e.hasLocalMutations&&t.hasCommittedMutations&&!t.hasLocalMutations}
2710applyChanges(e,t,r,n){let i=this.Ra;this.Ra=e.Ra,this.mutatedKeys=e.mutatedKeys;let a=e.fa.G_();a.sort((e,t)=>(function(e,t){let r=e=>{switch(e){case 0:return 1;case 2:case 3:return 2;case 1:return 0;default:return L()}};return r(e)-r(t)})(e.type,t.type)||this.Aa(e.doc,t.doc)),this.pa(r),n=null!=n&&n;let s=t&&!n?this.ya():[],o=0===this.da.size&&this.current&&!n?1:0,c=o!==this.Ea;return(this.Ea=o,0!==a.length||c)?{snapshot:new nQ(this.query,e.Ra,i,a,e.mutatedKeys,0===o,c,!1,!!r&&r.resumeToken.approximateByteSize()>0),wa:s}:{wa:s}}Z_(e){return this.current&&"Offline"===e?(this.current=!1,this.applyChanges({Ra:this.Ra,fa:new nJ,mutatedKeys:this.mutatedKeys,ns:!1},!1)):{wa:[]}}Sa(e){return!this.Ta.has(e)&&!!this.Ra.has(e)&&!this.Ra.get(e).hasLocalMutations}pa(e){e&&(e.addedDocuments.forEach(e=>this.Ta=this.Ta.add(e)),e.modifiedDocuments.forEach(e=>{}),e.removedDocuments.forEach(e=>this.Ta=this.Ta.delete(e)),this.current=e.current)}ya(){if(!this.current)return[];let e=this.da;this.da=tC(),this.Ra.forEach(e=>{this.Sa(e.key)&&(this.da=this.da.add(e.key))});let t=[];return e.forEach(e=>{this.da.has(e)||t.push(new n9(e))}),this.da.forEach(r=>{e.has(r)||t.push(new n6(r))}),t}ba(e){this.Ta=e.Ts,this.da=tC();let t=this.ma(e.documents);return this.applyChanges(t,!0)}Da(){return nQ.fromInitialDocuments(this.query,this.Ra,this.mutatedKeys,0===this.Ea,this.hasCachedResults)}}class n7{constructor(e,t,r){this.query=e,this.targetId=t,this.view=r}}class ie{constructor(e){this.key=e,this.va=!1}}class it{constructor(e,t,r,n,i,a){this.localStore=e,this.remoteStore=t,this.eventManager=r,this.sharedClientState=n,this.currentUser=i,this.maxConcurrentLimboResolutions=a,this.Ca={},this.Fa=new tk(e=>tf(e),ty),this.Ma=new Map,this.xa=new Set,this.Oa=new em(er.comparator),this.Na=new Map,this.La=new r$,this.Ba={},this.ka=new Map,this.qa=rF.kn(),this.onlineState="Unknown",this.Qa=void 0}get isPrimaryClient(){return!0===this.Qa}}async function ir(e,t,r=!0){let n;let i=iR(e),a=i.Fa.get(t);return a?(i.sharedClientState.addLocalQueryTarget(a.targetId),n=a.view.Da()):n=await ia(i,t,r,!0),n}async function ii(e,t){let r=iR(e);await ia(r,t,!0,!1)}async function ia(e,t,r,n){var i,a;let s;let o=await (i=e.localStore,a=tg(t),i.persistence.runTransaction("Allocate target","readwrite",e=>{let t;return i.Ur.getTargetData(e,a).next(r=>r?(t=r,eo.resolve(t)):i.Ur.allocateTargetId(e).next(r=>(t=new rL(a,r,"TargetPurposeListen",e.currentSequenceNumber),i.Ur.addTargetData(e,t).next(()=>t))))}).then(e=>{let t=i.os.get(e.targetId);return(null===t||e.snapshotVersion.compareTo(t.snapshotVersion)>0)&&(i.os=i.os.insert(e.targetId,e),i._s.set(a,e.targetId)),e})),c=o.targetId,u=e.sharedClientState.addLocalQueryTarget(c,r);return n&&(s=await is(e,t,c,"current"===u,o.resumeToken)),e.isPrimaryClient&&r&&nP(e.remoteStore,o),s}async function is(e,t,r,n,i){e.Ka=(t,r,n)=>(async function(e,t,r,n){let i=t.view.ma(r);i.ns&&(i=await ne(e.localStore,t.query,!1).then(({documents:e})=>t.view.ma(e,i)));let a=n&&n.targetChanges.get(t.targetId),s=n&&null!=n.targetMismatches.get(t.targetId),o=t.view.applyChanges(i,e.isPrimaryClient,a,s);return iw(e,t.targetId,o.wa),o.snapshot})(e,t,r,n);let a=await ne(e.localStore,t,!0),s=new n8(t,a.Ts),o=s.ma(a.documents),c=rs.createSynthesizedTargetChangeForCurrentChange(r,n&&"Offline"!==e.onlineState,i),u=s.applyChanges(o,e.isPrimaryClient,c);iw(e,r,u.wa);let l=new n7(t,r,s);return e.Fa.set(t,l),e.Ma.has(r)?e.Ma.get(r).push(t):e.Ma.set(r,[t]),u.snapshot}async function io(e,t,r){let n=e.Fa.get(t),i=e.Ma.get(n.targetId);if(i.length>1)return e.Ma.set(n.targetId,i.filter(e=>!ty(e,t))),void e.Fa.delete(t);e.isPrimaryClient?(e.sharedClientState.removeLocalQueryTarget(n.targetId),e.sharedClientState.isActiveQueryTarget(n.targetId)||await r7(e.localStore,n.targetId,!1).then(()=>{e.sharedClientState.clearQueryState(n.targetId),r&&nb(e.remoteStore,n.targetId),iv(e,n.targetId)}).catch(es)):(iv(e,n.targetId),await r7(e.localStore,n.targetId,!0))}async function ic(e,t){let r=e.Fa.get(t),n=e.Ma.get(r.targetId);e.isPrimaryClient&&1===n.length&&(e.sharedClientState.removeLocalQueryTarget(r.targetId),nb(e.remoteStore,r.targetId))}async function iu(e,t,r){var n;let i=(e.remoteStore.remoteSyncer.applySuccessfulWrite=id.bind(null,e),e.remoteStore.remoteSyncer.rejectFailedWrite=im.bind(null,e),e);try{let e;let a=await function(e,t){let r,n;let i=Q.now(),a=t.reduce((e,t)=>
2710e.add(t.key),tC());return e.persistence.runTransaction("Locally write mutations","readwrite",s=>{let o=tP,c=tC();return e.cs.getEntries(s,a).next(e=>{(o=e).forEach((e,t)=>{t.isValidDocument()||(c=c.add(e))})}).next(()=>e.localDocuments.getOverlayedDocuments(s,o)).next(n=>{r=n;let a=[];for(let e of t){let t=function(e,t){let r=null;for(let n of e.fieldTransforms){let e=t.data.field(n.field),i=tU(n.transform,e||null);null!=i&&(null===r&&(r=e$.empty()),r.set(n.field,i))}return r||null}(e,r.get(e.key).overlayedDocument);null!=t&&a.push(new tY(e.key,t,function e(t){let r=[];return eg(t.fields,(t,n)=>{let i=new et([t]);if(eq(n)){let t=e(n.mapValue).fields;if(0===t.length)r.push(i);else for(let e of t)r.push(i.child(e))}else r.push(i)}),new e_(r)}(t.value.mapValue),tj.exists(!0)))}return e.mutationQueue.addMutationBatch(s,i,a,t)}).next(t=>{n=t;let i=t.applyToLocalDocumentSet(r,c);return e.documentOverlayCache.saveOverlays(s,t.batchId,i)})}).then(()=>({batchId:n.batchId,changes:tR(r)}))}(i.localStore,t);i.sharedClientState.addPendingMutation(a.batchId),n=a.batchId,(e=i.Ba[i.currentUser.toKey()])||(e=new em($)),e=e.insert(n,r),i.Ba[i.currentUser.toKey()]=e,await iP(i,a.changes),await nL(i.remoteStore)}catch(t){let e=nz(t,"Failed to persist write");r.reject(e)}}async function il(e,t){try{let r=await function(e,t){let r=t.snapshotVersion,n=e.os;return e.persistence.runTransaction("Apply remote event","readwrite-primary",i=>{var a;let s,o;let c=e.cs.newChangeBuffer({trackRemovals:!0});n=e.os;let u=[];
2710t.targetChanges.forEach((a,s)=>{var o;let c=n.get(s);if(!c)return;u.push(e.Ur.removeMatchingKeys(i,a.removedDocuments,s).next(()=>e.Ur.addMatchingKeys(i,a.addedDocuments,s)));let l=c.withSequenceNumber(i.currentSequenceNumber);null!==t.targetMismatches.get(s)?l=l.withResumeToken(ek.EMPTY_BYTE_STRING,X.min()).withLastLimboFreeSnapshotVersion(X.min()):a.resumeToken.approximateByteSize()>0&&(l=l.withResumeToken(a.resumeToken,r)),n=n.insert(s,l),o=l,(0===c.resumeToken.approximateByteSize()||o.snapshotVersion.toMicroseconds()-c.snapshotVersion.toMicroseconds()>=3e8||a.addedDocuments.size+a.modifiedDocuments.size+a.removedDocuments.size>0)&&u.push(e.Ur.updateTargetData(i,l))});let l=tP,h=tC();if(t.documentUpdates.forEach(r=>{t.resolvedLimboDocuments.has(r)&&u.push(e.persistence.referenceDelegate.updateLimboDocument(i,r))}),u.push((a=t.documentUpdates,s=tC(),o=tC(),a.forEach(e=>s=s.add(e)),c.getEntries(i,s).next(e=>{let t=tP;return a.forEach((r,n)=>{let i=e.get(r);n.isFoundDocument()!==i.isFoundDocument()&&(o=o.add(r)),n.isNoDocument()&&n.version.isEqual(X.min())?(c.removeEntry(r,n.readTime),t=t.insert(r,n)):!i.isValidDocument()||n.version.compareTo(i.version)>0||0===n.version.compareTo(i.version)&&i.hasPendingWrites?(c.addEntry(n),t=t.insert(r,n)):W("LocalStore","Ignoring outdated watch update for ",r,". Current version:",i.version," Watch version:",n.version)}),{Ps:t,Is:o}})).next(e=>{l=e.Ps,h=e.Is})),!r.isEqual(X.min())){let t=e.Ur.getLastRemoteSnapshotVersion(i).next(t=>e.Ur.setTargetsMetadata(i,i.currentSequenceNumber,r));u.push(t)}return eo.waitFor(u).next(()=>c.apply(i)).next(()=>e.localDocuments.getLocalViewOfDocuments(i,l,h)).next(()=>l)}).then(t=>(e.os=n,t))}(e.localStore,t);
2710t.targetChanges.forEach((t,r)=>{let n=e.Na.get(r);n&&(t.addedDocuments.size+t.modifiedDocuments.size+t.removedDocuments.size<=1||L(),t.addedDocuments.size>0?n.va=!0:t.modifiedDocuments.size>0?n.va||L():t.removedDocuments.size>0&&(n.va||L(),n.va=!1))}),await iP(e,r,t)}catch(e){await es(e)}}function ih(e,t,r){var n;if(e.isPrimaryClient&&0===r||!e.isPrimaryClient&&1===r){let r;let i=[];e.Fa.forEach((e,r)=>{let n=r.view.Z_(t);n.snapshot&&i.push(n.snapshot)}),(n=e.eventManager).onlineState=t,r=!1,n.queries.forEach((e,n)=>{for(let e of n.j_)e.Z_(t)&&(r=!0)}),r&&n5(n),i.length&&e.Ca.d_(i),e.onlineState=t,e.isPrimaryClient&&e.sharedClientState.setOnlineState(t)}}async function ig(e,t,r){e.sharedClientState.updateQueryState(t,"rejected",r);let n=e.Na.get(t),i=n&&n.key;if(i){let r=new em(er.comparator);r=r.insert(i,eJ.newNoDocument(i,X.min()));let n=tC().add(i),a=new ra(X.min(),new Map,new em($),r,n);await il(e,a),e.Oa=e.Oa.remove(i),e.Na.delete(t),ik(e)}else await r7(e.localStore,t,!1).then(()=>iv(e,t,r)).catch(es)}async function id(e,t){var r;let n=t.batch.batchId;try{let i=await (r=e.localStore).persistence.runTransaction("Acknowledge batch","readwrite-primary",e=>{let n=t.batch.keys(),i=r.cs.newChangeBuffer({trackRemovals:!0});return(function(e,t,r,n){let i=r.batch,a=i.keys(),s=eo.resolve();return a.forEach(e=>{s=s.next(()=>n.getEntry(t,e)).next(t=>{let a=r.docVersions.get(e);null!==a||L(),0>t.version.compareTo(a)&&(i.applyToRemoteDocument(t,r),t.isValidDocument()&&(t.setReadTime(r.commitVersion),n.addEntry(t)))})}),s.next(()=>e.mutationQueue.removeMutationBatch(t,i))})(r,e,t,i).next(()=>i.apply(e)).next(()=>r.mutationQueue.performConsistencyCheck(e)).next(()=>r.documentOverlayCache.removeOverlaysForBatchId(e,n,t.batch.batchId)).next(()=>r.localDocuments.recalculateAndSaveOverlaysForDocumentKeys(e,function(e){let t=tC();for(let r=0;r<e.mutationResults.length;++r)e.mutationResults[r].transformResults.length>0&&(t=t.add(e.batch.mutations[r].key));return t}(t))).next(()=>r.localDocuments.getDocuments(e,n))});iy(e,n,null),ip(e,n),e.sharedClientState.updateMutationState(n,"acknowledged"),await iP(e,i)}catch(e){await es(e)}}async function im(e,t,r){var n;try{let i=await (n=e.localStore).persistence.runTransaction("Reject batch","readwrite-primary",e=>{let r;
2710return n.mutationQueue.lookupMutationBatch(e,t).next(t=>(null!==t||L(),r=t.keys(),n.mutationQueue.removeMutationBatch(e,t))).next(()=>n.mutationQueue.performConsistencyCheck(e)).next(()=>n.documentOverlayCache.removeOverlaysForBatchId(e,r,t)).next(()=>n.localDocuments.recalculateAndSaveOverlaysForDocumentKeys(e,r)).next(()=>n.localDocuments.getDocuments(e,r))});iy(e,t,r),ip(e,t),e.sharedClientState.updateMutationState(t,"rejected",r),await iP(e,i)}catch(e){await es(e)}}function ip(e,t){(e.ka.get(t)||[]).forEach(e=>{e.resolve()}),e.ka.delete(t)}function iy(e,t,r){let n=e.Ba[e.currentUser.toKey()];if(n){let i=n.get(t);i&&(r?i.reject(r):i.resolve(),n=n.remove(t)),e.Ba[e.currentUser.toKey()]=n}}function iv(e,t,r=null){for(let n of(e.sharedClientState.removeLocalQueryTarget(t),e.Ma.get(t)))e.Fa.delete(n),r&&e.Ca.$a(n,r);e.Ma.delete(t),e.isPrimaryClient&&e.La.gr(t).forEach(t=>{e.La.containsKey(t)||i_(e,t)})}function i_(e,t){e.xa.delete(t.path.canonicalString());let r=e.Oa.get(t);null!==r&&(nb(e.remoteStore,r),e.Oa=e.Oa.remove(t),e.Na.delete(r),ik(e))}function iw(e,t,r){for(let n of r)n instanceof n6?(e.La.addReference(n.key,t),function(e,t){let r=t.key,n=r.path.canonicalString();e.Oa.get(r)||e.xa.has(n)||(W("SyncEngine","New document in limbo: "+r),e.xa.add(n),ik(e))}(e,n)):n instanceof n9?(W("SyncEngine","Document no longer in limbo: "+n.key),e.La.removeReference(n.key,t),e.La.containsKey(n.key)||i_(e,n.key)):L()}function ik(e){for(;e.xa.size>0&&e.Oa.size<e.maxConcurrentLimboResolutions;){let t=e.xa.values().next().value;e.xa.delete(t);let r=new er(Z.fromString(t)),n=e.qa.next();e.Na.set(n,new ie(r)),e.Oa=e.Oa.insert(r,n),nP(e.remoteStore,new rL(tg(new tc(r.path)),n,"TargetPurposeLimboResolution",eu.oe))}}async function iP(e,t,r){let n=[],i=[],a=[];e.Fa.isEmpty()||(e.Fa.forEach((s,o)=>{a.push(e.Ka(o,t,r).then(t=>{var a;if((t||r)&&e.isPrimaryClient){let n=t?!t.fromCache:null===(a=null==r?void 0:r.targetChanges.get(o.targetId))||void 0===a?void 0:a.current;e.sharedClientState.updateQueryState(o.targetId,n?"current":"not-current")}if(t){n.push(t);let e=r2.Wi(o.targetId,t);i.push(e)}}))}),await Promise.all(a),e.Ca.d_(n),await async function(e,t){try{await e.persistence.runTransaction("notifyLocalViewChanges","readwrite",r=>eo.forEach(t,t=>eo.forEach(t.$i,n=>e.persistence.referenceDelegate.addReference(r,t.targetId,n)).next(()=>eo.forEach(t.Ui,n=>e.persistence.referenceDelegate.removeReference(r,t.targetId,n)))))}catch(e){if(!ec(e))throw e;W("LocalStore","Failed to update sequence numbers: "+e)}for(let r of t){let t=r.targetId;if(!r.fromCache){let r=e.os.get(t),n=r.snapshotVersion,i=r.withLastLimboFreeSnapshotVersion(n);e.os=e.os.insert(t,i)}}}(e.localStore,i))}async function ib(e,t){var r;if(!e.currentUser.isEqual(t)){W("SyncEngine","User change. New user:",t.toKey());let n=await r9(e.localStore,t);e.currentUser=t,r="'waitForPendingWrites' promise is rejected due to a user change.",e.ka.forEach(e=>{e.forEach(e=>{e.reject(new N(O.CANCELLED,r))})}),e.ka.clear(),e.sharedClientState.handleUserChange(t,n.removedBatchIds,n.addedBatchIds),await iP(e,n.hs)}}function iE(e,t){let r=e.Na.get(t);if(r&&r.va)return tC().add(r.key);{let r=tC(),n=e.Ma.get(t);if(!n)return r;for(let t of n){let n=e.Fa.get(t);r=r.unionWith(n.view.Va)}return r}}function iR(e){return e.remoteStore.remoteSyncer.applyRemoteEvent=il.bind(null,e),e.remoteStore.remoteSyncer.getRemoteKeysForTarget=iE.bind(null,e),e.remoteStore.remoteSyncer.rejectListen=ig.bind(null,e),e.Ca.d_=n4.bind(null,e.eventManager),e.Ca.$a=n2.bind(null,e.eventManager),e}class iS{constructor(){this.kind="memory",this.synchronizeTabs=!1}async initialize(e){this.serializer=ng(e.databaseInfo.databaseId),this.sharedClientState=this.Wa(e),this.persistence=this.Ga(e),await this.persistence.start(),this.localStore=this.za(e),this.gcScheduler=this.ja(e,this.localStore),this.indexBackfillerScheduler=this.Ha(e,this.localStore)}ja(e,t){return null}Ha(e,t){return null}za(e){var t;return t=this.persistence,new r6(t,new r3,e.initialUser,this.serializer)}Ga(e){return new r1(r4.Zr,this.serializer)}Wa(e){return new nr}async terminate(){var e,t;null===(e=this.gcScheduler)||void 0===e||e.stop(),null===(t=this.indexBackfillerScheduler)||void 0===t||t.stop(),this.sharedCl
2710ientState.shutdown(),await this.persistence.shutdown()}}iS.provider={build:()=>new iS};class iI{async initialize(e,t){this.localStore||(this.localStore=e.localStore,this.sharedClientState=e.sharedClientState,this.datastore=this.createDatastore(t),this.remoteStore=this.createRemoteStore(t),this.eventManager=this.createEventManager(t),this.syncEngine=this.createSyncEngine(t,!e.synchronizeTabs),this.sharedClientState.onlineStateHandler=e=>ih(this.syncEngine,e,1),this.remoteStore.remoteSyncer.handleCredentialChange=ib.bind(null,this.syncEngine),await nV(this.remoteStore,this.syncEngine.isPrimaryClient))}createEventManager(e){return new nY}createDatastore(e){let t=ng(e.databaseInfo.databaseId),r=new nl(e.databaseInfo);return new nf(e.authCredentials,e.appCheckCredentials,r,t)}createRemoteStore(e){var t;return t=this.localStore,new n_(t,this.datastore,e.asyncQueue,e=>ih(this.syncEngine,e,0),ni.D()?new ni:new nn)}createSyncEngine(e,t){return function(e,t,r,n,i,a,s){let o=new it(e,t,r,n,i,a);return s&&(o.Qa=!0),o}(this.localStore,this.remoteStore,this.eventManager,this.sharedClientState,e.initialUser,e.maxConcurrentLimboResolutions,t)}async terminate(){var e,t;await async function(e){W("RemoteStore","RemoteStore shutting down."),e.L_.add(5),await nk(e),e.k_.shutdown(),e.q_.set("Unknown")}(this.remoteStore),null===(e=this.datastore)||void 0===e||e.terminate(),null===(t=this.eventManager)||void 0===t||t.terminate()}}iI.provider={build:()=>new iI};/**
2711 * @license
2712 * Copyright 2020 Google LLC
2713 *
2714 * Licensed under the Apache License, Version 2.0 (the "License");
2715 * you may not use this file except in compliance with the License.
2716 * You may obtain a copy of the License at
2717 *
2718 *   http://www.apache.org/licenses/LICENSE-2.0
2719 *
2720 * Unless required by applicable law or agreed to in writing, software
2721 * distributed under the License is distributed on an "AS IS" BASIS,
2722 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2723 * See the License for the specific language governing permissions and
2724 * limitations under the License.
2725 *//**
2726 * @license
2727 * Copyright 2017 Google LLC
2728 *
2729 * Licensed under the Apache License, Version 2.0 (the "License");
2730 * you may not use this file except in compliance with the License.
2731 * You may obtain a copy of the License at
2732 *
2733 *   http://www.apache.org/licenses/LICENSE-2.0
2734 *
2735 * Unless required by applicable law or agreed to in writing, software
2736 * distributed under the License is distributed on an "AS IS" BASIS,
2737 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2738 * See the License for the specific language governing permissions and
2739 * limitations under the License.
2740 */class iT{constructor(e){this.observer=e,this.muted=!1}next(e){this.muted||this.observer.next&&this.Ya(this.observer.next,e)}error(e){this.muted||(this.observer.error?this.Ya(this.observer.error,e):A("Uncaught Error in snapshot listener:",e.toString()))}Za(){this.muted=!0}Ya(e,t){setTimeout(()=>{this.muted||e(t)},0)}}/**
2741 * @license
2742 * Copyright 2017 Google LLC
2743 *
2744 * Licensed under the Apache License, Version 2.0 (the "License");
2745 * you may not use this file except in compliance with the License.
2746 * You may obtain a copy of the License at
2747 *
2748 *   http://www.apache.org/licenses/LICENSE-2.0
2749 *
2750 * Unless required by applicable law or agreed to in writing, software
2751 * distributed under the License is distributed on an "AS IS" BASIS,
2752 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2753 * See the License for the specific language governing permissions and
2754 * limitations under the License.
2755 */class iC{constructor(e,t,r,n,i){this.authCredentials=e,this.appCheckCredentials=t,this.asyncQueue=r,this.databaseInfo=n,this.user=I.UNAUTHENTICATED,this.clientId=z.newId(),this.authCredentialListener=()=>Promise.resolve(),this.appCheckCredentialListener=()=>Promise.resolve(),this._uninitializedComponentsProvider=i,this.authCredentials.start(r,async e=>{W("FirestoreClient","Received user=",e.uid),await this.authCredentialListener(e),this.user=e}),this.appCheckCredentials.start(r,e=>(W("FirestoreClient","Received new app check token=",e),this.appCheckCredentialListener(e,this.user)))}get configuration(){return{asyncQueue:this.asyncQueue,databaseInfo:this.databaseInfo,clientId:this.clientId,authCredentials:this.authCredentials,appCheckCredentials:this.appCheckCredentials,initialUser:this.user,maxConcurrentLimboResolutions:100}}setCredentialChangeListener(e){this.authCredentialListener=e}setAppCheckTokenChangeListener(e){this.appCheckCredentialListener=e}terminate(){this.asyncQueue.enterRestrictedMode();let e=new K;return this.asyncQueue.enqueueAndForgetEvenWhileRestricted(async()=>{try{this._onlineComponents&&await this._onlineComponents.terminate(),this._offlineComponents&&await this._offlineComponents.terminate(),this.authCredentials.shutdown(),this.appCheckCredentials.shutdown(),e.resolve()}catch(r){let t=nz(r,"Failed to shutdown persistence");e.reject(t)}}),e.promise}}async function iH(e,t){e.asyncQueue.verifyOperationInProgress(),W("FirestoreClient","Initializing OfflineComponentProvider");let r=e.configuration;await t.initialize(r);let n=r.initialUser;e.setCredentialChangeListener(async e=>{n.isEqual(e)||(await r9(t.localStore,e),n=e)}),t.persistence.setDatabaseDeletedListener(()=>e.terminate()),e._offlineComponents=t}async function iW(e,t){e.asyncQueue.verifyOperationInProgress();let r=await iA(e);W("FirestoreClient","Initializing OnlineComponentProvider"),await t.initialize(r,e.configuration),e.setCredentialChangeListener(e=>nB(t.remoteStore,e)),e.setAppCheckTokenChangeListener((e,r)=>nB(t.remoteStore,r)),e._onlineComponents=t}
2755async function iA(e){if(!e._offlineComponents){if(e._uninitializedComponentsProvider){W("FirestoreClient","Using user provided OfflineComponentProvider");try{await iH(e,e._uninitializedComponentsProvider._offline)}catch(t){if(!("FirebaseError"===t.name?t.code===O.FAILED_PRECONDITION||t.code===O.UNIMPLEMENTED:!("undefined"!=typeof DOMException&&t instanceof DOMException)||22===t.code||20===t.code||11===t.code))throw t;D("Error using user provided cache. Falling back to memory cache: "+t),await iH(e,new iS)}}else W("FirestoreClient","Using default OfflineComponentProvider"),await iH(e,new iS)}return e._offlineComponents}async function iD(e){return e._onlineComponents||(e._uninitializedComponentsProvider?(W("FirestoreClient","Using user provided OnlineComponentProvider"),await iW(e,e._uninitializedComponentsProvider._online)):(W("FirestoreClient","Using default OnlineComponentProvider"),await iW(e,new iI))),e._onlineComponents}async function iU(e){let t=await iD(e),r=t.eventManager;return r.onListen=ir.bind(null,t.syncEngine),r.onUnlisten=io.bind(null,t.syncEngine),r.onFirstRemoteStoreListen=ii.bind(null,t.syncEngine),r.onLastRemoteStoreUnlisten=ic.bind(null,t.syncEngine),r}/**
2756 * @license
2757 * Copyright 2023 Google LLC
2758 *
2759 * Licensed under the Apache License, Version 2.0 (the "License");
2760 * you may not use this file except in compliance with the License.
2761 * You may obtain a copy of the License at
2762 *
2763 *   http://www.apache.org/licenses/LICENSE-2.0
2764 *
2765 * Unless required by applicable law or agreed to in writing, software
2766 * distributed under the License is distributed on an "AS IS" BASIS,
2767 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2768 * See the License for the specific language governing permissions and
2769 * limitations under the License.
2770 */function iL(e){let t={};return void 0!==e.timeoutSeconds&&(t.timeoutSeconds=e.timeoutSeconds),t}/**
2771 * @license
2772 * Copyright 2020 Google LLC
2773 *
2774 * Licensed under the Apache License, Version 2.0 (the "License");
2775 * you may not use this file except in compliance with the License.
2776 * You may obtain a copy of the License at
2777 *
2778 *   http://www.apache.org/licenses/LICENSE-2.0
2779 *
2780 * Unless required by applicable law or agreed to in writing, software
2781 * distributed under the License is distributed on an "AS IS" BASIS,
2782 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2783 * See the License for the specific language governing permissions and
2784 * limitations under the License.
2785 */let iO=new Map;/**
2786 * @license
2787 * Copyright 2017 Google LLC
2788 *
2789 * Licensed under the Apache License, Version 2.0 (the "License");
2790 * you may not use this file except in compliance with the License.
2791 * You may obtain a copy of the License at
2792 *
2793 *   http://www.apache.org/licenses/LICENSE-2.0
2794 *
2795 * Unless required by applicable law or agreed to in writing, software
2796 * distributed under the License is distributed on an "AS IS" BASIS,
2797 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2798 * See the License for the specific language governing permissions and
2799 * limitations under the License.
2800 */function iN(e,t,r){if(!r)throw new N(O.INVALID_ARGUMENT,`Function ${e}() cannot be called with an empty ${t}.`)}function iK(e){if(!er.isDocumentKey(e))throw new N(O.INVALID_ARGUMENT,`Invalid document reference. Document references must have an even number of segments, but ${e} has ${e.length}.`)}function ix(e){if(er.isDocumentKey(e))throw new N(O.INVALID_ARGUMENT,`Invalid collection reference. Collection references must have an odd number of segments, but ${e} has ${e.length}.`)}function iM(e){if(void 0===e)return"undefined";if(null===e)return"null";if("string"==typeof e)return e.length>20&&(e=`${e.substring(0,20)}...`),JSON.stringify(e);if("number"==typeof e||"boolean"==typeof e)return""+e;if("object"==typeof e){if(e instanceof Array)return"an array";{var t;let r=(t=e).constructor?t.constructor.name:null;return r?`a custom ${r} object`:"an object"}}return"function"==typeof e?"a function":L()}function iF(e,t){if("_delegate"in e&&(e=e._delegate),!(e instanceof t)){if(t.name===e.constructor.name)throw new N(O.INVALID_ARGUMENT,"Type does not match the expected instance. Did you pass a reference from a different Firestore SDK?");{let r=iM(e);throw new N(O.INVALID_ARGUMENT,`Expected type '${t.name}', but it was: ${r}`)}}return e}/**
2801 * @license
2802 * Copyright 2020 Google LLC
2803 *
2804 * Licensed under the Apache License, Version 2.0 (the "License");
2805 * you may not use this file except in compliance with the License.
2806 * You may obtain a copy of the License at
2807 *
2808 *   http://www.apache.org/licenses/LICENSE-2.0
2809 *
2810 * Unless required by applicable law or agreed to in writing, software
2811 * distributed under the License is distributed on an "AS IS" BASIS,
2812 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2813 * See the License for the specific language governing permissions and
2814 * limitations under the License.
2815 */class iB{constructor(e){var t,r;if(void 0===e.host){if(void 0!==e.ssl)throw new N(O.INVALID_ARGUMENT,"Can't provide ssl option if host option is not set");this.host="firestore.googleapis.com",this.ssl=!0}else this.host=e.host,this.ssl=null===(t=e.ssl)||void 0===t||t;if(this.credentials=e.credentials,this.ignoreUndefinedProperties=!!e.ignoreUndefinedProperties,this.localCache=e.localCache,void 0===e.cacheSizeBytes)this.cacheSizeBytes=41943040;else{if(-1!==e.cacheSizeBytes&&e.cacheSizeBytes<1048576)throw new N(O.INVALID_ARGUMENT,"cacheSizeBytes must be at least 1048576");this.cacheSizeBytes=e.cacheSizeBytes}(function(e,t,r,n){if(!0===t&&!0===n)throw new N(O.INVALID_ARGUMENT,`${e} and ${r} cannot be used together.`)})("experimentalForceLongPolling",e.experimentalForceLongPolling,"experimentalAutoDetectLongPolling",e.experimentalAutoDetectLongPolling),this.experimentalForceLongPolling=!!e.experimentalForceLongPolling,this.experimentalForceLongPolling?this.experimentalAutoDetectLongPolling=!1:void 0===e.experimentalAutoDetectLongPolling?this.experimentalAutoDetectLongPolling=!0:this.experimentalAutoDetectLongPolling=!!e.experimentalAutoDetectLongPolling,this.experimentalLongPollingOptions=iL(null!==(r=e.experimentalLongPollingOptions)&&void 0!==r?r:{}),function(e){if(void 0!==e.timeoutSeconds){if(isNaN(e.timeoutSeconds))throw new N(O.INVALID_ARGUMENT,`invalid long polling timeout: ${e.timeoutSeconds} (must not be NaN)`);if(e.timeoutSeconds<5)throw new N(O.INVALID_ARGUMENT,`invalid long polling timeout: ${e.timeoutSeconds} (minimum allowed value is 5)`);if(e.timeoutSeconds>30)throw new N(O.INVALID_ARGUMENT,`invalid long polling timeout: ${e.timeoutSeconds} (maximum allowed value is 30)`)}}(this.experimentalLongPollingOptions),this.useFetchStreams=!!e.useFetchStreams}isEqual(e){var t,r;return this.host===e.host&&this.ssl===e.ssl&&this.credentials===e.credentials&&this.cacheSizeBytes===e.cacheSizeBytes&&this.experimentalForceLongPolling===e.experimentalForceLongPolling&&this.experimentalAutoDetectLongPolling===e.experimentalAutoDetectLongPolling&&(t=this.experimentalLongPollingOptions,r=e.experimentalLongPollingOptions,t.timeoutSeconds===r.timeoutSeconds)&&this.ignoreUndefinedProperties===e.ignoreUndefinedProperties&&this.useFetchStreams===e.useFetchStreams}}class iV{constructor(e,t,r,n){this._authCredentials=e,this._appCheckCredentials=t,this._databaseId=r,this._app=n,this.type="firestore-lite",this._persistenceKey="(lite)",this._settings=new iB({}),this._settingsFrozen=!1,this._terminateTask="notTerminated"}get app(){if(!this._app)throw new N(O.FAILED_PRECONDITION,"Firestore was not initialized using the Firebase SDK. 'app' is not available");return this._app}get _initialized(){return this._settingsFrozen}get _terminated(){return"notTerminated"!==this._terminateTask}_setSettings(e){if(this._settingsFrozen)throw new N(O.FAILED_PRECONDITION,"Firestore has already been started and its settings can no longer be changed. You can only modify settings before calling any other methods on a Firestore object.");this._settings=new iB(e),void 0!==e.credentials&&(this._authCredentials=function(e){if(!e)return new M;switch(e.type){case"firstParty":return new q(e.sessionIndex||"0",e.iamToken||null,e.authTokenFactory||null);case"provider":return e.client;default:throw new N(O.INVALID_ARGUMENT,"makeAuthCredentialsProvider failed due to invalid credential type")}}(e.credentials))}_getSettings(){return this._settings}_freezeSettings(){return this._settingsFrozen=!0,this._settings}_delete(){return"notTerminated"===this._terminateTask&&(this._terminateTask=this._terminate()),this._terminateTask}async _restart(){"notTerminated"===this._terminateTask?await this._terminate():this._terminateTask="notTerminated"}toJSON(){return{app:this._app,databaseId:this._databaseId,settings:this._settings}}_terminate(){return function(e){let t=iO.get(e);t&&(W("ComponentProvider","Removing Datastore"),iO.delete(e),t.terminate())}(this),Promise.resolve()}}/**
2816 * @license
2817 * Copyright 2020 Google LLC
2818 *
2819 * Licensed under the Apache License, Version 2.0 (the "License");
2820 * you may not use this file except in compliance with the License.
2821 * You may obtain a copy of the License at
2822 *
2823 *   http://www.apache.org/licenses/LICENSE-2.0
2824 *
2825 * Unless required by applicable law or agreed to in writing, software
2826 * distributed under the License is distributed on an "AS IS" BASIS,
2827 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2828 * See the License for the specific language governing permissions and
2829 * limitations under the License.
2830 */class iq{constructor(e,t,r){this.converter=t,this._query=r,this.type="query",this.firestore=e}withConverter(e){return new iq(this.firestore,e,this._query)}}class ij{constructor(e,t,r){this.converter=t,this._key=r,this.type="document",this.firestore=e}get _path(){return this._key.path}get id(){return this._key.path.lastSegment()}get path(){return this._key.path.canonicalString()}get parent(){return new iG(this.firestore,this.converter,this._key.path.popLast())}withConverter(e){return new ij(this.firestore,e,this._key)}}class iG extends iq{constructor(e,t,r){super(e,t,new tc(r)),this._path=r,this.type="collection"}get id(){return this._query.path.lastSegment()}get path(){return this._query.path.canonicalString()}get parent(){let e=this._path.popLast();return e.isEmpty()?null:new ij(this.firestore,null,new er(e))}withConverter(e){return new iG(this.firestore,e,this._path)}}function iz(e,t,...r){if(e=(0,w.m9)(e),iN("collection","path",t),e instanceof iV){let n=Z.fromString(t,...r);return ix(n),new iG(e,null,n)}{if(!(e instanceof ij||e instanceof iG))throw new N(O.INVALID_ARGUMENT,"Expected first argument to collection() to be a CollectionReference, a DocumentReference or FirebaseFirestore");let n=e._path.child(Z.fromString(t,...r));return ix(n),new iG(e.firestore,null,n)}}function i$(e,t,...r){if(e=(0,w.m9)(e),1==arguments.length&&(t=z.newId()),iN("doc","path",t),e instanceof iV){let n=Z.fromString(t,...r);return iK(n),new ij(e,null,new er(n))}{if(!(e instanceof ij||e instanceof iG))throw new N(O.INVALID_ARGUMENT,"Expected first argument to collection() to be a CollectionReference, a DocumentReference or FirebaseFirestore");let n=e._path.child(Z.fromString(t,...r));return iK(n),new ij(e.firestore,e instanceof iG?e.converter:null,new er(n))}}/**
2831 * @license
2832 * Copyright 2020 Google LLC
2833 *
2834 * Licensed under the Apache License, Version 2.0 (the "License");
2835 * you may not use this file except in compliance with the License.
2836 * You may obtain a copy of the License at
2837 *
2838 *   http://www.apache.org/licenses/LICENSE-2.0
2839 *
2840 * Unless required by applicable law or agreed to in writing, software
2841 * distributed under the License is distributed on an "AS IS" BASIS,
2842 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2843 * See the License for the specific language governing permissions and
2844 * limitations under the License.
2845 */class iJ{constructor(e=Promise.resolve()){this.Pu=[],this.Iu=!1,this.Tu=[],this.Eu=null,this.du=!1,this.Au=!1,this.Ru=[],this.t_=new nd(this,"async_queue_retry"),this.Vu=()=>{let e=nh();e&&W("AsyncQueue","Visibility state changed to "+e.visibilityState),this.t_.jo()},this.mu=e;let t=nh();t&&"function"==typeof t.addEventListener&&t.addEventListener("visibilitychange",this.Vu)}get isShuttingDown(){return this.Iu}enqueueAndForget(e){this.enqueue(e)}enqueueAndForgetEvenWhileRestricted(e){this.fu(),this.gu(e)}enterRestrictedMode(e){if(!this.Iu){this.Iu=!0,this.Au=e||!1;let t=nh();t&&"function"==typeof t.removeEventListener&&t.removeEventListener("visibilitychange",this.Vu)}}enqueue(e){if(this.fu(),this.Iu)return new Promise(()=>{});let t=new K;return this.gu(()=>this.Iu&&this.Au?Promise.resolve():(e().then(t.resolve,t.reject),t.promise)).then(()=>t.promise)}enqueueRetryable(e){this.enqueueAndForget(()=>(this.Pu.push(e),this.pu()))}async pu(){if(0!==this.Pu.length){try{await this.Pu[0](),this.Pu.shift(),this.t_.reset()}catch(e){if(!ec(e))throw e;W("AsyncQueue","Operation failed with retryable error: "+e)}this.Pu.length>0&&this.t_.Go(()=>this.pu())}}gu(e){let t=this.mu.then(()=>(this.du=!0,e().catch(e=>{let t;throw this.Eu=e,this.du=!1,A("INTERNAL UNHANDLED ERROR: ",(t=e.message||"",e.stack&&(t=e.stack.includes(e.message)?e.stack:e.message+"\n"+e.stack),t)),e}).then(e=>(this.du=!1,e))));return this.mu=t,t}enqueueAfterDelay(e,t,r){this.fu(),this.Ru.indexOf(e)>-1&&(t=0);let n=nG.createAndSchedule(this,e,t,r,e=>this.yu(e));return this.Tu.push(n),n}fu(){this.Eu&&L()}verifyOperationInProgress(){}async wu(){let e;do e=this.mu,await e;while(e!==this.mu)}Su(e){for(let t of this.Tu)if(t.timerId===e)return!0;return!1}bu(e){return this.wu().then(()=>{for(let t of(this.Tu.sort((e,t)=>
2845e.targetTimeMs-t.targetTimeMs),this.Tu))if(t.skipDelay(),"all"!==e&&t.timerId===e)break;return this.wu()})}Du(e){this.Ru.push(e)}yu(e){let t=this.Tu.indexOf(e);this.Tu.splice(t,1)}}class iQ extends iV{constructor(e,t,r,n){super(e,t,r,n),this.type="firestore",this._queue=new iJ,this._persistenceKey=(null==n?void 0:n.name)||"[DEFAULT]"}async _terminate(){if(this._firestoreClient){let e=this._firestoreClient.terminate();this._queue=new iJ(e),this._firestoreClient=void 0,await e}}}function iX(e,t,r){r||(r="(default)");let n=(0,f.qX)(e,"firestore");if(n.isInitialized(r)){let e=n.getImmediate({identifier:r}),i=n.getOptions(r);if((0,w.vZ)(i,t))return e;throw new N(O.FAILED_PRECONDITION,"initializeFirestore() has already been called with different options. To avoid this error, call initializeFirestore() with the same options as when it was originally called, or call getFirestore() to return the already initialized instance.")}if(void 0!==t.cacheSizeBytes&&void 0!==t.localCache)throw new N(O.INVALID_ARGUMENT,"cache and cacheSizeBytes cannot be specified at the same time as cacheSizeBytes willbe deprecated. Instead, specify the cache size in the cache object");if(void 0!==t.cacheSizeBytes&&-1!==t.cacheSizeBytes&&t.cacheSizeBytes<1048576)throw new N(O.INVALID_ARGUMENT,"cacheSizeBytes must be at least 1048576");return n.initialize({options:t,instanceIdentifier:r})}function iY(e,t){let r="object"==typeof e?e:(0,f.Mq)(),n=(0,f.qX)(r,"firestore").getImmediate({identifier:"string"==typeof e?e:t||"(default)"});if(!n._initialized){let e=(0,w.P0)("firestore");e&&function(e,t,r,n={}){var i;let a=(e=iF(e,iV))._getSettings(),s=`${t}:${r}`;if("firestore.googleapis.com"!==a.host&&a.host!==s&&D("Host has been set in both settings() and connectFirestoreEmulator(), emulator host will be used."),e._setSettings(Object.assign(Object.assign({},a),{host:s,ssl:!1})),n.mockUserToken){let t,r;if("string"==typeof n.mockUserToken)t=n.mockUserToken,r=I.MOCK_USER;else{t=(0,w.Sg)(n.mockUserToken,null===(i=e._app)||void 0===i?void 0:i.options.projectId);let a=n.mockUserToken.sub||n.mockUserToken.user_id;if(!a)throw new N(O.INVALID_ARGUMENT,"mockUserToken must contain 'sub' or 'user_id' field!");r=new I(a)}e._authCredentials=new F(new x(t,r))}}(n,...e)}return n}function iZ(e){if(e._terminated)throw new N(O.FAILED_PRECONDITION,"The client has already been terminated.");return e._firestoreClient||function(e){var t,r,n,i;let a=e._freezeSettings(),s=(i=e._databaseId,new eC(i,(null===(t=e._app)||void 0===t?void 0:t.options.appId)||"",e._persistenceKey,a.host,a.ssl,a.experimentalForceLongPolling,a.experimentalAutoDetectLongPolling,iL(a.experimentalLongPollingOptions),a.useFetchStreams));e._componentsProvider||(null===(r=a.localCache)||void 0===r?void 0:r._offlineComponentProvider)&&(null===(n=a.localCache)||void 0===n?void 0:n._onlineComponentProvider)&&(e._componentsProvider={_offline:a.localCache._offlineComponentProvider,_online:a.localCache._onlineComponentProvider}),e._firestoreClient=new iC(e._authCredentials,e._appCheckCredentials,e._queue,s,e._componentsProvider&&function(e){let t=null==e?void 0:e._online.build();return{_offline:null==e?void 0:e._offline.build(t),_online:t}}(e._componentsProvider))}(e),e._firestoreClient}/**
2846 * @license
2847 * Copyright 2020 Google LLC
2848 *
2849 * Licensed under the Apache License, Version 2.0 (the "License");
2850 * you may not use this file except in compliance with the License.
2851 * You may obtain a copy of the License at
2852 *
2853 *   http://www.apache.org/licenses/LICENSE-2.0
2854 *
2855 * Unless required by applicable law or agreed to in writing, software
2856 * distributed under the License is distributed on an "AS IS" BASIS,
2857 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2858 * See the License for the specific language governing permissions and
2859 * limitations under the License.
2860 *//**
2861 * @license
2862 * Copyright 2022 Google LLC
2863 *
2864 * Licensed under the Apache License, Version 2.0 (the "License");
2865 * you may not use this file except in compliance with the License.
2866 * You may obtain a copy of the License at
2867 *
2868 *   http://www.apache.org/licenses/LICENSE-2.0
2869 *
2870 * Unless required by applicable law or agreed to in writing, softw
2870are
2871 * distributed under the License is distributed on an "AS IS" BASIS,
2872 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2873 * See the License for the specific language governing permissions and
2874 * limitations under the License.
2875 */class i1{constructor(e="count",t){this._internalFieldPath=t,this.type="AggregateField",this.aggregateType=e}}class i0{constructor(e,t,r){this._userDataWriter=t,this._data=r,this.type="AggregateQuerySnapshot",this.query=e}data(){return this._userDataWriter.convertObjectMap(this._data)}}/**
2876 * @license
2877 * Copyright 2020 Google LLC
2878 *
2879 * Licensed under the Apache License, Version 2.0 (the "License");
2880 * you may not use this file except in compliance with the License.
2881 * You may obtain a copy of the License at
2882 *
2883 *   http://www.apache.org/licenses/LICENSE-2.0
2884 *
2885 * Unless required by applicable law or agreed to in writing, software
2886 * distributed under the License is distributed on an "AS IS" BASIS,
2887 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2888 * See the License for the specific language governing permissions and
2889 * limitations under the License.
2890 */class i4{constructor(e){this._byteString=e}static fromBase64String(e){try{return new i4(ek.fromBase64String(e))}catch(e){throw new N(O.INVALID_ARGUMENT,"Failed to construct data from Base64 string: "+e)}}static fromUint8Array(e){return new i4(ek.fromUint8Array(e))}toBase64(){return this._byteString.toBase64()}toUint8Array(){return this._byteString.toUint8Array()}toString(){return"Bytes(base64: "+this.toBase64()+")"}isEqual(e){return this._byteString.isEqual(e._byteString)}}/**
2891 * @license
2892 * Copyright 2020 Google LLC
2893 *
2894 * Licensed under the Apache License, Version 2.0 (the "License");
2895 * you may not use this file except in compliance with the License.
2896 * You may obtain a copy of the License at
2897 *
2898 *   http://www.apache.org/licenses/LICENSE-2.0
2899 *
2900 * Unless required by applicable law or agreed to in writing, software
2901 * distributed under the License is distributed on an "AS IS" BASIS,
2902 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2903 * See the License for the specific language governing permissions and
2904 * limitations under the License.
2905 */class i2{constructor(...e){for(let t=0;t<e.length;++t)if(0===e[t].length)throw new N(O.INVALID_ARGUMENT,"Invalid field name at argument $(i + 1). Field names must not be empty.");this._internalPath=new et(e)}isEqual(e){return this._internalPath.isEqual(e._internalPath)}}/**
2906 * @license
2907 * Copyright 2020 Google LLC
2908 *
2909 * Licensed under the Apache License, Version 2.0 (the "License");
2910 * you may not use this file except in compliance with the License.
2911 * You may obtain a copy of the License at
2912 *
2913 *   http://www.apache.org/licenses/LICENSE-2.0
2914 *
2915 * Unless required by applicable law or agreed to in writing, software
2916 * distributed under the License is distributed on an "AS IS" BASIS,
2917 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2918 * See the License for the specific language governing permissions and
2919 * limitations under the License.
2920 */class i5{constructor(e){this._methodName=e}}/**
2921 * @license
2922 * Copyright 2017 Google LLC
2923 *
2924 * Licensed under the Apache License, Version 2.0 (the "License");
2925 * you may not use this file except in compliance with the License.
2926 * You may obtain a copy of the License at
2927 *
2928 *   http://www.apache.org/licenses/LICENSE-2.0
2929 *
2930 * Unless required by applicable law or agreed to in writing, software
2931 * distributed under the License is distributed on an "AS IS" BASIS,
2932 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2933 * See the License for the specific language governing permissions and
2934 * limitations under the License.
2935 */class i3{constructor(e,t){if(!isFinite(e)||e<-90||e>90)throw new N(O.INVALID_ARGUMENT,"Latitude must be a number between -90 and 90, but was: "+e);if(!isFinite(t)||t<-180||t>180)throw new N(O.INVALID_ARGUMENT,"Longitude must be a number between -180 and 180, but was: "+t);this._lat=e,this._long=t}get latitude(){return this._lat}get longitude(){return this._long}isEqual(e){return this._lat===e._lat&&this._long===e._long}toJSON(){return{latitude:this._lat,longitude:this._long}}_compareTo(e){return $(this._lat,e._lat)||$(this._long,e._long)}}/**
2936 * @license
2937 * Copyright 2024 Google LLC
2938 *
2939 * Licensed under the Apache License, Version 2.0 (the "License");
2940 * you may not use this file except in compliance with the License.
2941 * You may obtain a copy of the License at
2942 *
2943 *   http://www.apache.org/licenses/LICENSE-2.0
2944 *
2945 * Unless required by applicable law or agreed to in writing, software
2946 * distributed under the License is distributed on an "AS IS" BASIS,
2947 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2948 * See the License for the specific language governing permissions and
2949 * limitations under the License.
2950 */class i6{constructor(e){this._values=(e||[]).map(e=>e)}toArray(){return this._values.map(e=>e)}isEqual(e){return function(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;++r)if(e[r]!==t[r])return!1;return!0}(this._values,e._values)}}/**
2951 * @license
2952 * Copyright 2017 Google LLC
2953 *
2954 * Licensed under the Apache License, Version 2.0 (the "License");
2955 * you may not use this file except in compliance with the License.
2956 * You may obtain a copy of the License at
2957 *
2958 *   http://www.apache.org/licenses/LICENSE-2.0
2959 *
2960 * Unless required by applicable law or agreed to in writing, software
2961 * distributed under the License is distributed on an "AS IS" BASIS,
2962 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2963 * See the License for the specific language governing permissions and
2964 * limitations under the License.
2965 */let i9=/^__.*__$/;class i8{constructor(e,t,r){this.data=e,this.fieldMask=t,this.fieldTransforms=r}toMutation(e,t){return null!==this.fieldMask?new tY(e,this.data,this.fieldMask,t,this.fieldTransforms):new tX(e,this.data,t,this.fieldTransforms)}}class i7{constructor(e,t,r){this.data=e,this.fieldMask=t,this.fieldTransforms=r}toMutation(e,t){return new tY(e,this.data,this.fieldMask,t,this.fieldTransforms)}}function ae(e){switch(e){case 0:case 2:case 1:return!0;case 3:case 4:return!1;default:throw L()}}class at{constructor(e,t,r,n,i,a){this.settings=e,this.databaseId=t,this.serializer=r,this.ignoreUndefinedProperties=n,void 0===i&&this.vu(),this.fieldTransforms=i||[],this.fieldMask=a||[]}get path(){return this.settings.path}get Cu(){return this.settings.Cu}Fu(e){return new at(Object.assign(Object.assign({},this.settings),e),this.databaseId,this.serializer,this.ignoreUndefinedProperties,this.fieldTransforms,this.fieldMask)}Mu(e){var t;let r=null===(t=this.path)||void 0===t?void 0:t.child(e),n=this.Fu({path:r,xu:!1});return n.Ou(e),n}Nu(e){var t;let r=null===(t=this.path)||void 0===t?void 0:t.child(e),n=this.Fu({path:r,xu:!1});return n.vu(),n}Lu(e){return this.Fu({path:void 0,xu:!0})}Bu(e){return am(e,this.settings.methodName,this.settings.ku||!1,this.path,this.settings.qu)}contains(e){return void 0!==this.fieldMask.find(t=>e.isPrefixOf(t))||void 0!==this.fieldTransforms.find(t=>e.isPrefixOf(t.field))}vu(){if(this.path)for(let e=0;e<this.path.length;e++)this.Ou(this.path.get(e))}Ou(e){if(0===e.length)throw this.Bu("Document fields must not be empty");if(ae(this.Cu)&&i9.test(e))throw this.Bu('Document fields cannot begin and end with "__"')}}class ar{constructor(e,t,r){this.databaseId=e,this.ignoreUndefinedProperties=t,this.serializer=r||ng(e)}Qu(e,t,r,n=!1){return new at({Cu:e,methodName:t,qu:r,path:et.emptyPath(),xu:!1,ku:n},this.databaseId,this.serializer,this.ignoreUndefinedProperties)}}function an(e){let t=e._freezeSettings(),r=ng(e._databaseId);return new ar(e._databaseId,!!t.ignoreUndefinedProperties,r)}class ai extends i5{_toFieldTransform(e){if(2!==e.Cu)throw 1===e.Cu?e.Bu(`${this._methodName}() can only appear at the top level of your update data`):e.Bu(`${this._methodName}() cannot be used with set() unless you pass {merge:true}`);return e.fieldMask.push(e.path),null}isEqual(e){return e instanceof ai}}class aa extends i5{_toFieldTransform(e){return new tV(e.path,new tL)}isEqual(e){return e instanceof aa}}function as(e,t,r,n=!1){return ao(r,e.Qu(n?4:3,t))}function ao(e,t){if(au(e=(0,w.m9)(e)))return al("Unsupported field value:",t,e),ac(e,t);if(e instanceof i5)return function(e,t){if(!ae(t.Cu))throw t.Bu(`${e._methodName}() can only be used with update() and set()`);if(!t.path)throw t.Bu(`${e._methodName}() is not currently supported inside arrays`);let r=e._toFieldTransform(t);r&&t.fieldTransforms.push(r)}(e,t),null;if(void 0===e&&t.ignoreUndefinedProperties)return null;if(t.path&&t.fieldMask.push(t.path),e instanceof Array){if(t.settings.xu&&4!==t.Cu)throw t.Bu("Nested arrays are not supported");return function(e,t){let r=[],n=0;for(let i of e){let e=ao(i,t.Lu(n));null==e&&(e={nullValue:"NULL_VALUE"}),r.push(e),n++}return{arrayValue:{values:r}}}(e,t)}return function(e,t){var r,n,i;if(null===(e=(0,w.m9)(e)))return{nullValue:"NULL_VALUE"};if("number"==typeof e)return r=t.serializer,"number"==typeof(i=n=e)&&Number.isInteger(i)&&!el(i)&&i<=Number.MAX_SAFE_INTEGER&&i>=Number.MIN_SAFE_INTEGER?tA(n):tW(r,n);if("boolean"==typeof e)return{booleanValue:e};if("string"==typeof e)return{stringValue:e};if(e instanceof Date){let r=Q.fromDate(e);return{timestampValue:r_(t.serializer,r)}}if(e instanceof Q){let r=new Q(e.seconds,1e3*Math.floor(e.nanoseconds/1e3));return{timestampValue:r_(t.serializer,r)}}if(e instanceof i3)return{geoPointValue:{latitude:e.latitude,longitude:e.longitude}};if(e instanceof i4)return{bytesValue:rw(t.serializer,e._byteString)};if(e instanceof ij){let r=t.databaseId,n=e.firestore._databaseId;if(!n.isEqual(r))throw t.Bu(`Document reference is for database ${n.projectId}/${n.database} but should be for database ${r.projectId}/${r.database}`);return{referenceValue:rP(e.firestore._databaseId||t.databaseId,e._key.path)}}if(e instanceof i6)return{mapValue:{fields:{__type__:{stringValue:"__vector__"},value:{arrayValue:{values:e.toArray().map(e=>{if("number"!=typeof e)throw t.Bu("VectorValues must only contain numeric values.");return tW(t.serializer,e)})}}}}};
2965throw t.Bu(`Unsupported field value: ${iM(e)}`)}(e,t)}function ac(e,t){let r={};return ed(e)?t.path&&t.path.length>0&&t.fieldMask.push(t.path):eg(e,(e,n)=>{let i=ao(n,t.Mu(e));null!=i&&(r[e]=i)}),{mapValue:{fields:r}}}function au(e){return!("object"!=typeof e||null===e||e instanceof Array||e instanceof Date||e instanceof Q||e instanceof i3||e instanceof i4||e instanceof ij||e instanceof i5||e instanceof i6)}function al(e,t,r){if(!au(r)||!("object"==typeof r&&null!==r&&(Object.getPrototypeOf(r)===Object.prototype||null===Object.getPrototypeOf(r)))){let n=iM(r);throw"an object"===n?t.Bu(e+" a custom object"):t.Bu(e+" "+n)}}function ah(e,t,r){if((t=(0,w.m9)(t))instanceof i2)return t._internalPath;if("string"==typeof t)return ad(e,t);throw am("Field path arguments must be of type string or ",e,!1,void 0,r)}let ag=RegExp("[~\\*/\\[\\]]");function ad(e,t,r){if(t.search(ag)>=0)throw am(`Invalid field path (${t}). Paths must not contain '~', '*', '/', '[', or ']'`,e,!1,void 0,r);try{return new i2(...t.split("."))._internalPath}catch(n){throw am(`Invalid field path (${t}). Paths must not be empty, begin with '.', end with '.', or contain '..'`,e,!1,void 0,r)}}function am(e,t,r,n,i){let a=n&&!n.isEmpty(),s=void 0!==i,o=`Function ${t}() called with invalid data`;r&&(o+=" (via `toFirestore()`)"),o+=". ";let c="";return(a||s)&&(c+=" (found",a&&(c+=` in field ${n}`),s&&(c+=` in document ${i}`),c+=")"),new N(O.INVALID_ARGUMENT,o+e+c)}function ap(e,t){return e.some(e=>e.isEqual(t))}/**
2966 * @license
2967 * Copyright 2020 Google LLC
2968 *
2969 * Licensed under the Apache License, Version 2.0 (the "License");
2970 * you may not use this file except in compliance with the License.
2971 * You may obtain a copy of the License at
2972 *
2973 *   http://www.apache.org/licenses/LICENSE-2.0
2974 *
2975 * Unless required by applicable law or agreed to in writing, software
2976 * distributed under the License is distributed on an "AS IS" BASIS,
2977 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2978 * See the License for the specific language governing permissions and
2979 * limitations under the License.
2980 */class ay{constructor(e,t,r,n,i){this._firestore=e,this._userDataWriter=t,this._key=r,this._document=n,this._converter=i}get id(){return this._key.path.lastSegment()}get ref(){return new ij(this._firestore,this._converter,this._key)}exists(){return null!==this._document}data(){if(this._document){if(this._converter){let e=new af(this._firestore,this._userDataWriter,this._key,this._document,null);return this._converter.fromFirestore(e)}return this._userDataWriter.convertValue(this._document.data.value)}}get(e){if(this._document){let t=this._document.data.field(av("DocumentSnapshot.get",e));if(null!==t)return this._userDataWriter.convertValue(t)}}}class af extends ay{data(){return super.data()}}function av(e,t){return"string"==typeof t?ad(e,t):t instanceof i2?t._internalPath:t._delegate._internalPath}class a_{}class aw extends a_{}function ak(e,t,...r){let n=[];for(let i of(t instanceof a_&&n.push(t),function(e){let t=e.filter(e=>e instanceof aE).length,r=e.filter(e=>e instanceof aP).length;if(t>1||t>0&&r>0)throw new N(O.INVALID_ARGUMENT,"InvalidQuery. When using composite filters, you cannot use more than one filter at the top level. Consider nesting the multiple filters within an `and(...)` statement. For example: change `query(query, where(...), or(...))` to `query(query, and(where(...), or(...)))`.")}(n=n.concat(r)),n))e=i._apply(e);return e}class aP extends aw{constructor(e,t,r){super(),this._field=e,this._op=t,this._value=r,this.type="where"}static _create(e,t,r){return new aP(e,t,r)}_apply(e){let t=this._parse(e);return aD(e._query,t),new iq(e.firestore,e.converter,tm(e._query,t))}_parse(e){let t=an(e.firestore);return function(e,t,r,n,i,a,s){let o;if(i.isKeyField()){if("array-contains"===a||"array-contains-any"===a)throw new N(O.INVALID_ARGUMENT,`Invalid Query. You can't perform '${a}' queries on documentId().`);if("in"===a||"not-in"===a){aA(s,a);let t=[];for(let r of s)t.push(aW(n,e,r));o={arrayValue:{values:t}}}else o=aW(n,e,s)}else"in"!==a&&"not-in"!==a&&"array-contains-any"!==a||aA(s,a),o=as(r,t,s,"in"===a||"not-in"===a);return e0.create(i,a,o)}(e._query,"where",t,e.firestore._databaseId,this._field,this._op,this._value)}}function ab(e,t,r){let n=av("where",e);return aP._create(n,t,r)}class aE extends a_{constructor(e,t){super(),this.type=e,this._queryConstraints=t}static _create(e,t){return new aE(e,t)}_parse(e){let t=this._queryConstraints.map(t=>t._parse(e)).filter(e=>e.getFilters().length>0);return 1===t.length?t[0]:e4.create(t,this._getOperator())}_apply(e){let t=this._parse(e);return 0===t.getFilters().length?e:(function(e,t){let r=e;for(let e of t.getFlattenedFilters())aD(r,e),r=tm(r,e)}(e._query,t),new iq(e.firestore,e.converter,tm(e._query,t)))}_getQueryConstraints(){return this._queryConstraints}_getOperator(){return"and"===this.type?"and":"or"}}
2980class aR extends aw{constructor(e,t){super(),this._field=e,this._direction=t,this.type="orderBy"}static _create(e,t){return new aR(e,t)}_apply(e){let t=function(e,t,r){if(null!==e.startAt)throw new N(O.INVALID_ARGUMENT,"Invalid query. You must not call startAt() or startAfter() before calling orderBy().");if(null!==e.endAt)throw new N(O.INVALID_ARGUMENT,"Invalid query. You must not call endAt() or endBefore() before calling orderBy().");return new eZ(t,r)}(e._query,this._field,this._direction);return new iq(e.firestore,e.converter,function(e,t){let r=e.explicitOrderBy.concat([t]);return new tc(e.path,e.collectionGroup,r,e.filters.slice(),e.limit,e.limitType,e.startAt,e.endAt)}(e._query,t))}}function aS(e,t="asc"){let r=av("orderBy",e);return aR._create(r,t)}class aI extends aw{constructor(e,t,r){super(),this.type=e,this._limit=t,this._limitType=r}static _create(e,t,r){return new aI(e,t,r)}_apply(e){return new iq(e.firestore,e.converter,tp(e._query,this._limit,this._limitType))}}function aT(e){return function(e,t){if(t<=0)throw new N(O.INVALID_ARGUMENT,`Function ${e}() requires a positive number, but it was: ${t}.`)}("limit",e),aI._create("limit",e,"F")}class aC extends aw{constructor(e,t,r){super(),this.type=e,this._docOrFields=t,this._inclusive=r}static _create(e,t,r){return new aC(e,t,r)}_apply(e){var t;let r=function(e,t,r,n){if(r[0]=(0,w.m9)(r[0]),r[0]instanceof ay)return function(e,t,r,n,i){if(!n)throw new N(O.NOT_FOUND,`Can't use a DocumentSnapshot that doesn't exist for ${r}().`);let a=[];for(let r of th(e))if(r.field.isKeyField())a.push(ex(t,n.key));else{let e=n.data.field(r.field);if(eS(e))throw new N(O.INVALID_ARGUMENT,'Invalid query. You are trying to start or end a query using a document for which the field "'+r.field+'" is an uncommitted server timestamp. (Since the value of this field is unknown, you cannot start/end a query with it.)');if(null===e){let e=r.field.canonicalString();throw new N(O.INVALID_ARGUMENT,`Invalid query. You are trying to start or end a query using a document for which the field '${e}' (used as the orderBy) does not exist.`)}a.push(e)}return new eQ(a,i)}(e._query,e.firestore._databaseId,t,r[0]._document,n);{let i=an(e.firestore);return function(e,t,r,n,i,a){let s=e.explicitOrderBy;if(i.length>s.length)throw new N(O.INVALID_ARGUMENT,`Too many arguments provided to ${n}(). The number of arguments must be less than or equal to the number of orderBy() clauses`);let o=[];for(let a=0;a<i.length;a++){let c=i[a];if(s[a].field.isKeyField()){if("string"!=typeof c)throw new N(O.INVALID_ARGUMENT,`Invalid query. Expected a string for document ID in ${n}(), but got a ${typeof c}`);if(!tl(e)&&-1!==c.indexOf("/"))throw new N(O.INVALID_ARGUMENT,`Invalid query. When querying a collection and ordering by documentId(), the value passed to ${n}() must be a plain document ID, but '${c}' contains a slash.`);let r=e.path.child(Z.fromString(c));if(!er.isDocumentKey(r))throw new N(O.INVALID_ARGUMENT,`Invalid query. When querying a collection group and ordering by documentId(), the value passed to ${n}() must result in a valid document path, but '${r}' is not because it contains an odd number of segments.`);let i=new er(r);o.push(ex(t,i))}else{let e=as(r,n,c);o.push(e)}}return new eQ(o,a)}(e._query,e.firestore._databaseId,i,t,r,n)}}(e,this.type,this._docOrFields,this._inclusive);return new iq(e.firestore,e.converter,new tc((t=e._query).path,t.collectionGroup,t.explicitOrderBy.slice(),t.filters.slice(),t.limit,t.limitType,r,t.endAt))}}function aH(...e){return aC._create("startAfter",e,!1)}function aW(e,t,r){if("string"==typeof(r=(0,w.m9)(r))){if(""===r)throw new N(O.INVALID_ARGUMENT,"Invalid query. When querying with documentId(), you must provide a valid document ID, but it was an empty string.");if(!tl(t)&&-1!==r.indexOf("/"))throw new N(O.INVALID_ARGUMENT,`Invalid query. When querying a collection by documentId(), you must provide a plain document ID, but '${r}' contains a '/' character.`);let n=t.path.child(Z.fromString(r));if(!er.isDocumentKey(n))throw new N(O.INVALID_ARGUMENT,`Invalid query. When querying a collection group by documentId(), the value provided must result in a valid document path, but '${n}' is not because it has an odd number of segments (${n.length}).`);return ex(e,new er(n))}if(r instanceof ij)return ex(e,r._key);throw new N(O.INVALID_ARGUMENT,`Invalid query. When querying with documentId(), you must provide a valid string or a DocumentReference, but it was: ${iM(r)}.`)}function aA(e,t){if(!Array.isArray(e)||0===e.length)throw new N(O.INVALID_ARGUMENT,`Invalid Query. A non-empty array is required for '${t.toString()}' filters.`)}function aD(e,t){let r=function(e,t){for(let r of e)for(let e of r.getFlattenedFilters())if(t.indexOf(e.op)>=0)return e.op;return null}(e.filters,function(e){switch(e){case"!=":return["!=","not-in"];case"array-contains-any":case"in":return["not-in"];case"not-in":return["array-contains-any","in","not-in","!="];default:return[]}}(t.op));if(null!==r)throw r===t.op?new N(O.INVALID_ARGUMENT,`Invalid query. You cannot use more than one '${t.op.toString()}' filter.`):new N(O.INVALID_ARGUMENT,`Invalid query. You cannot use '${t.op.toString()}' filters with '${r.toString()}' filters.`)}class aU{convertValue(e,t="none"){switch(eA(e)){case 0:return null;case 1:return e.booleanValue;case 2:return eE(e.integerValue||e.doubleValue);case 3:return this.convertTimestamp(e.timestampValue);case 4:return this.convertServerTimestamp(e,t);case 5:return e.stringValue;case 6:return this.convertBytes(eR(e.bytesValue));case 7:return this.convertReference(e.referenceValue);case 8:return this.convertGeoPoint(e.geoPointValue);case 9:return this.convertArray(e.arrayValue,t);case 11:return this.convertObject(e.mapValue,t);case 10:return this.convertVectorValue(e.mapValue);default:throw L()}}convertObject(e,t){return this.convertObjectMap(e.fields,t)}convertObjectMap(e,t="none"){let r={};return eg(e,(e,n)=>{r[e]=this.convertValue(n,t)}),r}convertVectorValue(e){var t,r,n;return new i6(null===(n=null===(r=null===(t=e.fields)||void 0===t?void 0:t.value.arrayValue)||void 0===r?void 0:r.values)||void 0===n?void 0:n.map(e=>eE(e.doubleValue)))}convertGeoPoint(e){return new i3(eE(e.latitude),eE(e.longitude))}convertArray(e,t){return(e.values||[]).map(e=>this.convertValue(e,t))}convertServerTimestamp(e,t){switch(t){case"previous":let r=eI(e);return null==r?null:this.convertValue(r,t);case"estimate":return this.convertTimestamp(eT(e));default:return null}}convertTimestamp(e){let t=eb(e);return new Q(t.seconds,t.nanos)}convertDocumentKey(e,t){let r=Z.fromString(e);rU(r)||L();let n=new eH(r.get(1),r.get(3)),i=new er(r.popFirst(5));return n.isEqual(t)||A(`Document ${i} contains a document reference within a different database (${n.projectId}/${n.database}) which is not supported. It will be treated as a reference in the current database (${t.projectId}/${t.database}) instead.`),i}}/**
2981 * @license
2982 * Copyright 2020 Google LLC
2983 *
2984 * Licensed under the Apache License, Version 2.0 (the "License");
2985 * you may not use this file except in compliance with the License.
2986 * You may obtain a copy of the License at
2987 *
2988 *   http://www.apache.org/licenses/LICENSE-2.0
2989 *
2990 * Unless required by applicable law or agreed to in writing, software
2991 * distributed under the License is distributed on an "AS IS" BASIS,
2992 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2993 * See the License for the specific language governing permissions and
2994 * limitations under the License.
2995 */class aL{constructor(e,t){this.hasPendingWrites=e,this.fromCache=t}isEqual(e){return this.hasPendingWrites===e.hasPendingWrites&&this.fromCache===e.fromCache}}class aO extends ay{constructor(e,t,r,n,i,a){super(e,t,r,n,a),this._firestore=e,this._firestoreImpl=e,this.metadata=i}exists(){return super.exists()}data(e={}){if(this._document){if(this._converter){let t=new aN(this._firestore,this._userDataWriter,this._key,this._document,this.metadata,null);return this._converter.fromFirestore(t,e)}return this._userDataWriter.convertValue(this._document.data.value,e.serverTimestamps)}}get(e,t={}){if(this._document){let r=this._document.data.field(av("DocumentSnapshot.get",e));if(null!==r)return this._userDataWriter.convertValue(r,t.serverTimestamps)}}}class aN extends aO{data(e={}){return super.data(e)}}class aK{constructor(e,t,r,n){this._firestore=e,this._userDataWriter=t,this._snapshot=n,this.metadata=new aL(n.hasPendingWrites,n.fromCache),this.query=r}get docs(){let e=[];return this.forEach(t=>e.push(t)),e}get size(){return this._snapshot.docs.size}get empty(){return 0===this.size}forEach(e,t){this._snapshot.docs.forEach(r=>{e.call(t,new aN(this._firestore,this._userDataWriter,r.key,r,new aL(this._snapshot.mutatedKeys.has(r.key),this._snapshot.fromCache),this.query.converter))})}docChanges(e={}){let t=!!e.includeMetadataChanges;if(t&&this._snapshot.excludesMetadataChanges)throw new N(O.INVALID_ARGUMENT,"To include metadata changes with your document changes, you must also pass { includeMetadataChanges:true } to onSnapshot().");return this._cachedChanges&&this._cachedChangesIncludeMetadataChanges===t||(this._cachedChanges=function(e,t){if(e._snapshot.oldDocs.isEmpty()){let t=0;return e._snapshot.docChanges.map(r=>{let n=new aN(e._firestore,e._userDataWriter,r.doc.key,r.doc,new aL(e._snapshot.mutatedKeys.has(r.doc.key),e._snapshot.fromCache),e.query.converter);return r.doc,{type:"added",doc:n,oldIndex:-1,newIndex:t++}})}{let r=e._snapshot.oldDocs;return e._snapshot.docChanges.filter(e=>t||3!==e.type).map(t=>{let n=new aN(e._firestore,e._userDataWriter,t.doc.key,t.doc,new aL(e._snapshot.mutatedKeys.has(t.doc.key),e._snapshot.fromCache),e.query.converter),i=-1,a=-1;return 0!==t.type&&(i=r.indexOf(t.doc.key),r=r.delete(t.doc.key)),1!==t.type&&(a=(r=r.add(t.doc)).indexOf(t.doc.key)),{type:function(e){switch(e){case 0:return"added";case 2:case 3:return"modified";case 1:return"removed";default:return L()}}(t.type),doc:n,oldIndex:i,newIndex:a}})}}(this,t),this._cachedChangesIncludeMetadataChanges=t),this._cachedChanges}}/**
2996 * @license
2997 * Copyright 2020 Google LLC
2998 *
2999 * Licensed under the Apache License, Version 2.0 (the "License");
3000 * you may not use this file except in compliance with the License.
3001 * You may obtain a copy of the License at
3002 *
3003 *   http://www.apache.org/licenses/LICENSE-2.0
3004 *
3005 * Unless required by applicable law or agreed to in writing, software
3006 * distributed under the License is distributed on an "AS IS" BASIS,
3007 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3008 * See the License for the specific language governing permissions and
3009 * limitations under the License.
3010 */function ax(e){e=iF(e,ij);let t=iF(e.firestore,iQ);return(function(e,t,r={}){let n=new K;return e.asyncQueue.enqueueAndForget(async()=>(function(e,t,r,n,i){let a=new iT({next:o=>{a.Za(),t.enqueueAndForget(()=>n0(e,s));let c=o.docs.has(r);!c&&o.fromCache?i.reject(new N(O.UNAVAILABLE,"Failed to get document because the client is offline.")):c&&o.fromCache&&n&&"server"===n.source?i.reject(new N(O.UNAVAILABLE,'Failed to get document from server. (However, this document does exist in the local cache. Run again without setting source to "server" to retrieve the cached document.)')):i.resolve(o)},error:e=>i.reject(e)}),s=new n3(new tc(r.path),a,{includeMetadataChanges:!0,_a:!0});return n1(e,s)})(await iU(e),e.asyncQueue,t,r,n)),n.promise})(iZ(t),e._key).then(r=>(function(e,t,r){let n=r.docs.get(t._key),i=new aM(e);return new aO(e,i,t._key,n,new aL(r.hasPendingWrites,r.fromCache),t.converter)})(t,e,r))}class aM extends aU{constructor(e){super(),this.firestore=e}convertBytes(e){return new i4(e)}convertReference(e){let t=this.convertDocumentKey(e,this.firestore._databaseId);
3010return new ij(this.firestore,null,t)}}function aF(e){e=iF(e,iq);let t=iF(e.firestore,iQ),r=iZ(t),n=new aM(t);return(/**
3011 * @license
3012 * Copyright 2020 Google LLC
3013 *
3014 * Licensed under the Apache License, Version 2.0 (the "License");
3015 * you may not use this file except in compliance with the License.
3016 * You may obtain a copy of the License at
3017 *
3018 *   http://www.apache.org/licenses/LICENSE-2.0
3019 *
3020 * Unless required by applicable law or agreed to in writing, software
3021 * distributed under the License is distributed on an "AS IS" BASIS,
3022 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3023 * See the License for the specific language governing permissions and
3024 * limitations under the License.
3025 */function(e){if("L"===e.limitType&&0===e.explicitOrderBy.length)throw new N(O.UNIMPLEMENTED,"limitToLast() queries require specifying at least one orderBy() clause")}(e._query),(function(e,t,r={}){let n=new K;return e.asyncQueue.enqueueAndForget(async()=>(function(e,t,r,n,i){let a=new iT({next:r=>{a.Za(),t.enqueueAndForget(()=>n0(e,s)),r.fromCache&&"server"===n.source?i.reject(new N(O.UNAVAILABLE,'Failed to get documents from server. (However, these documents may exist in the local cache. Run again without setting source to "server" to retrieve the cached documents.)')):i.resolve(r)},error:e=>i.reject(e)}),s=new n3(r,a,{includeMetadataChanges:!0,_a:!0});return n1(e,s)})(await iU(e),e.asyncQueue,t,r,n)),n.promise})(r,e._query).then(r=>new aK(t,n,e,r)))}function aB(e,t,r){var n;e=iF(e,ij);let i=iF(e.firestore,iQ),a=(n=e.converter)?r&&(r.merge||r.mergeFields)?n.toFirestore(t,r):n.toFirestore(t):t;return aj(i,[(function(e,t,r,n,i,a={}){let s,o;let c=e.Qu(a.merge||a.mergeFields?2:0,t,r,i);al("Data must be an object, but it was:",c,n);let u=ac(n,c);if(a.merge)s=new e_(c.fieldMask),o=c.fieldTransforms;else if(a.mergeFields){let e=[];for(let n of a.mergeFields){let i=ah(t,n,r);if(!c.contains(i))throw new N(O.INVALID_ARGUMENT,`Field '${i}' is specified in your field mask but missing from your input data.`);ap(e,i)||e.push(i)}s=new e_(e),o=c.fieldTransforms.filter(e=>s.covers(e.field))}else s=null,o=c.fieldTransforms;return new i8(new e$(u),s,o)})(an(i),"setDoc",e._key,a,null!==e.converter,r).toMutation(e._key,tj.none())])}function aV(e,t,r,...n){e=iF(e,ij);let i=iF(e.firestore,iQ),a=an(i);return aj(i,[("string"==typeof(t=(0,w.m9)(t))||t instanceof i2?function(e,t,r,n,i,a){let s=e.Qu(1,t,r),o=[ah(t,n,r)],c=[i];if(a.length%2!=0)throw new N(O.INVALID_ARGUMENT,`Function ${t}() needs to be called with an even number of arguments that alternate between field names and values.`);for(let e=0;e<a.length;e+=2)o.push(ah(t,a[e])),c.push(a[e+1]);let u=[],l=e$.empty();for(let e=o.length-1;e>=0;--e)if(!ap(u,o[e])){let t=o[e],r=c[e];r=(0,w.m9)(r);let n=s.Nu(t);if(r instanceof ai)u.push(t);else{let e=ao(r,n);null!=e&&(u.push(t),l.set(t,e))}}return new i7(l,new e_(u),s.fieldTransforms)}(a,"updateDoc",e._key,t,r,n):function(e,t,r,n){let i=e.Qu(1,t,r);al("Data must be an object, but it was:",i,n);let a=[],s=e$.empty();return eg(n,(e,n)=>{let o=ad(t,e,r);n=(0,w.m9)(n);let c=i.Nu(o);if(n instanceof ai)a.push(o);else{let e=ao(n,c);null!=e&&(a.push(o),s.set(o,e))}}),new i7(s,new e_(a),i.fieldTransforms)}(a,"updateDoc",e._key,t)).toMutation(e._key,tj.exists(!0))])}function aq(e){return aj(iF(e.firestore,iQ),[new t4(e._key,tj.none())])}function aj(e,t){return function(e,t){let r=new K;return e.asyncQueue.enqueueAndForget(async()=>iu(await iD(e).then(e=>e.syncEngine),t,r)),r.promise}(iZ(e),t)}/**
3026 * @license
3027 * Copyright 2022 Google LLC
3028 *
3029 * Licensed under the Apache License, Version 2.0 (the "License");
3030 * you may not use this file except in compliance with the License.
3031 * You may obtain a copy of the License at
3032 *
3033 *   http://www.apache.org/licenses/LICENSE-2.0
3034 *
3035 * Unless required by applicable law or agreed to in writing, software
3036 * distributed under the License is distributed on an "AS IS" BASIS,
3037 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3038 * See the License for the specific language governing permissions and
3039 * limitations under the License.
3040 */function aG(e){return function(e,t){let r=iF(e.firestore,iQ),n=iZ(r),i=function(e,t){let r=[];for(let n in e)Object.prototype.hasOwnProperty.call(e,n)&&r.push(t(e[n],n,e));return r}(t,(e,t)=>new t9(t,e.aggregateType,e._internalFieldPath));return(function(e,t,r){let n=new K;return e.asyncQueue.enqueueAndForget(async()=>{try{let i=await iD(e).then(e=>e.datastore);n.resolve(async function(e,t,r){var n;let{request:i,ut:a,parent:s}=function(e,t,r,n){let{_t:i,parent:a}=rW(e,t),s={},o=[],c=0;
3040return r.forEach(e=>{let t="aggregate_"+c++;s[t]=e.alias,"count"===e.aggregateType?o.push({alias:t,count:{}}):"avg"===e.aggregateType?o.push({alias:t,avg:{field:rA(e.fieldPath)}}):"sum"===e.aggregateType&&o.push({alias:t,sum:{field:rA(e.fieldPath)}})}),{request:{structuredAggregationQuery:{aggregations:o,structuredQuery:i.structuredQuery},parent:i.parent},ut:s,parent:a}}(e.serializer,(t.he||(t.he=td(t,t.explicitOrderBy)),t.he),r);e.connection.Fo||delete i.parent;let o=(await e.Lo("RunAggregationQuery",e.serializer.databaseId,s,i,1)).filter(e=>!!e.result);1===o.length||L();let c=null===(n=o[0].result)||void 0===n?void 0:n.aggregateFields;return Object.keys(c).reduce((e,t)=>(e[a[t]]=c[t],e),{})}(i,t,r))}catch(e){n.reject(e)}}),n.promise})(n,e._query,i).then(t=>new i0(e,new aM(r),t))}(e,{count:new i1("count")})}function az(){return new aa("serverTimestamp")}new WeakMap,function(e=!0){T=f.Jn,(0,f.Xd)(new v.wA("firestore",(t,{instanceIdentifier:r,options:n})=>{let i=t.getProvider("app").getImmediate(),a=new iQ(new B(t.getProvider("auth-internal")),new G(t.getProvider("app-check-internal")),function(e,t){if(!Object.prototype.hasOwnProperty.apply(e.options,["projectId"]))throw new N(O.INVALID_ARGUMENT,'"projectId" not provided in firebase.initializeApp.');return new eH(e.options.projectId,t)}(i,r),i);return n=Object.assign({useFetchStreams:e},n),a._setSettings(n),a},"PUBLIC").setMultipleInstances(!0)),(0,f.KN)(S,"4.7.3",void 0),(0,f.KN)(S,"4.7.3","esm2017")}()},7004:function(e,t,r){"use strict";r.d(t,{$C:function(){return _},V1:function(){return w}});var n,i=r(2238),a=r(4444),s=r(8463);function o(e,t){let r={};for(let n in e)e.hasOwnProperty(n)&&(r[n]=t(e[n]));return r}function c(e){if(null==e)return e;if(e["@type"])switch(e["@type"]){case"type.googleapis.com/google.protobuf.Int64Value":case"type.googleapis.com/google.protobuf.UInt64Value":{let t=Number(e.value);if(isNaN(t))throw Error("Data cannot be decoded from JSON: "+e);return t}default:throw Error("Data cannot be decoded from JSON: "+e)}return Array.isArray(e)?e.map(e=>c(e)):"function"==typeof e||"object"==typeof e?o(e,e=>c(e)):e}/**
3041 * @license
3042 * Copyright 2020 Google LLC
3043 *
3044 * Licensed under the Apache License, Version 2.0 (the "License");
3045 * you may not use this file except in compliance with the License.
3046 * You may obtain a copy of the License at
3047 *
3048 *   http://www.apache.org/licenses/LICENSE-2.0
3049 *
3050 * Unless required by applicable law or agreed to in writing, software
3051 * distributed under the License is distributed on an "AS IS" BASIS,
3052 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3053 * See the License for the specific language governing permissions and
3054 * limitations under the License.
3055 */let u="functions",l={OK:"ok",CANCELLED:"cancelled",UNKNOWN:"unknown",INVALID_ARGUMENT:"invalid-argument",DEADLINE_EXCEEDED:"deadline-exceeded",NOT_FOUND:"not-found",ALREADY_EXISTS:"already-exists",PERMISSION_DENIED:"permission-denied",UNAUTHENTICATED:"unauthenticated",RESOURCE_EXHAUSTED:"resource-exhausted",FAILED_PRECONDITION:"failed-precondition",ABORTED:"aborted",OUT_OF_RANGE:"out-of-range",UNIMPLEMENTED:"unimplemented",INTERNAL:"internal",UNAVAILABLE:"unavailable",DATA_LOSS:"data-loss"};class h extends a.ZR{constructor(e,t,r){super(`${u}/${e}`,t||""),this.details=r}}/**
3056 * @license
3057 * Copyright 2017 Google LLC
3058 *
3059 * Licensed under the Apache License, Version 2.0 (the "License");
3060 * you may not use this file except in compliance with the License.
3061 * You may obtain a copy of the License at
3062 *
3063 *   http://www.apache.org/licenses/LICENSE-2.0
3064 *
3065 * Unless required by applicable law or agreed to in writing, software
3066 * distributed under the License is distributed on an "AS IS" BASIS,
3067 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3068 * See the License for the specific language governing permissions and
3069 * limitations under the License.
3070 */class g{constructor(e,t,r){this.auth=null,this.messaging=null,this.appCheck=null,this.auth=e.getImmediate({optional:!0}),this.messaging=t.getImmediate({optional:!0}),this.auth||e.get().then(e=>this.auth=e,()=>{}),this.messaging||t.get().then(e=>this.messaging=e,()=>{}),this.appCheck||r.get().then(e=>this.appCheck=e,()=>{})}async getAuthToken(){if(this.auth)try{let e=await this.auth.getToken();return null==e?void 0:e.accessToken}catch(e){return}}
3070async getMessagingToken(){if(this.messaging&&"Notification"in self&&"granted"===Notification.permission)try{return await this.messaging.getToken()}catch(e){return}}async getAppCheckToken(e){if(this.appCheck){let t=e?await this.appCheck.getLimitedUseToken():await this.appCheck.getToken();return t.error?null:t.token}return null}async getContext(e){return{authToken:await this.getAuthToken(),messagingToken:await this.getMessagingToken(),appCheckToken:await this.getAppCheckToken(e)}}}/**
3071 * @license
3072 * Copyright 2017 Google LLC
3073 *
3074 * Licensed under the Apache License, Version 2.0 (the "License");
3075 * you may not use this file except in compliance with the License.
3076 * You may obtain a copy of the License at
3077 *
3078 *   http://www.apache.org/licenses/LICENSE-2.0
3079 *
3080 * Unless required by applicable law or agreed to in writing, software
3081 * distributed under the License is distributed on an "AS IS" BASIS,
3082 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3083 * See the License for the specific language governing permissions and
3084 * limitations under the License.
3085 */let d="us-central1";class m{constructor(e,t,r,n,i=d,a){this.app=e,this.fetchImpl=a,this.emulatorOrigin=null,this.contextProvider=new g(t,r,n),this.cancelAllRequests=new Promise(e=>{this.deleteService=()=>Promise.resolve(e())});try{let e=new URL(i);this.customDomain=e.origin+("/"===e.pathname?"":e.pathname),this.region=d}catch(e){this.customDomain=null,this.region=i}}_delete(){return this.deleteService()}_url(e){let t=this.app.options.projectId;if(null!==this.emulatorOrigin){let r=this.emulatorOrigin;return`${r}/${t}/${this.region}/${e}`}return null!==this.customDomain?`${this.customDomain}/${e}`:`https://${this.region}-${t}.cloudfunctions.net/${e}`}}async function p(e,t,r,n){let i;r["Content-Type"]="application/json";try{i=await n(e,{method:"POST",body:JSON.stringify(t),headers:r})}catch(e){return{status:0,json:null}}let a=null;try{a=await i.json()}catch(e){}return{status:i.status,json:a}}async function y(e,t,r,n){var i;let a;let s={data:r=function e(t){if(null==t)return null;if(t instanceof Number&&(t=t.valueOf()),"number"==typeof t&&isFinite(t)||!0===t||!1===t||"[object String]"===Object.prototype.toString.call(t))return t;if(t instanceof Date)return t.toISOString();if(Array.isArray(t))return t.map(t=>e(t));if("function"==typeof t||"object"==typeof t)return o(t,t=>e(t));throw Error("Data cannot be encoded in JSON: "+t)}(r)},u={},g=await e.contextProvider.getContext(n.limitedUseAppCheckTokens);g.authToken&&(u.Authorization="Bearer "+g.authToken),g.messagingToken&&(u["Firebase-Instance-ID-Token"]=g.messagingToken),null!==g.appCheckToken&&(u["X-Firebase-AppCheck"]=g.appCheckToken);let d=(i=n.timeout||7e4,a=null,{promise:new Promise((e,t)=>{a=setTimeout(()=>{t(new h("deadline-exceeded","deadline-exceeded"))},i)}),cancel:()=>{a&&clearTimeout(a)}}),m=await Promise.race([p(t,s,u,e.fetchImpl),d.promise,e.cancelAllRequests]);if(d.cancel(),!m)throw new h("cancelled","Firebase Functions instance was deleted.");let y=function(e,t){let r,n=function(e){if(e>=200&&e<300)return"ok";switch(e){case 0:case 500:return"internal";case 400:return"invalid-argument";case 401:return"unauthenticated";case 403:return"permission-denied";case 404:return"not-found";case 409:return"aborted";case 429:return"resource-exhausted";case 499:return"cancelled";case 501:return"unimplemented";case 503:return"unavailable";case 504:return"deadline-exceeded"}return"unknown"}(e),i=n;try{let e=t&&t.error;if(e){let t=e.status;if("string"==typeof t){if(!l[t])return new h("internal","internal");n=l[t],i=t}let a=e.message;"string"==typeof a&&(i=a),r=e.details,void 0!==r&&(r=c(r))}}catch(e){}return"ok"===n?null:new h(n,i,r)}(m.status,m.json);if(y)throw y;if(!m.json)throw new h("internal","Response is not valid JSON object.");let f=m.json.data;if(void 0===f&&(f=m.json.result),void 0===f)throw new h("internal","Response is missing data field.");return{data:c(f)}}let f="@firebase/functions",v="0.11.8";/**
3086 * @license
3087 * Copyright 2020 Google LLC
3088 *
3089 * Licensed under the Apache License, Version 2.0 (the "License");
3090 * you may not use this file except in compliance with the License.
3091 * You may obtain a copy of the License at
3092 *
3093 *   http://www.apache.org/licenses/LICENSE-2.0
3094 *
3095 * Unless required by applicable law or agreed to in writing, software
3096 * distributed under the License is distributed on an "AS IS" BASIS,
3097 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3098 * See the License for the specific language governing permissions and
3099 * limitations under the License.
3100 */function _(e=(0,i.Mq)(),t=d){let r=(0,i.qX)((0,a.m9)(e),u).getImmediate({identifier:t}),n=(0,a.P0)("functions");return n&&function(e,t,r){(0,a.m9)(e).emulatorOrigin=`http://${t}:${r}`}(r,...n),r}function w(e,t,r){var n;return n=(0,a.m9)(e),e=>(function(e,t,r,n){let i=e._url(t);return y(e,i,r,n)})(n,t,e,r||{})}n=fetch.bind(self),(0,i.Xd)(new s.wA(u,(e,{instanceIdentifier:t})=>{let r=e.getProvider("app").getImmediate();return new m(r,e.getProvider("auth-internal"),e.getProvider("messaging-internal"),e.getProvider("app-check-internal"),t,n)},"PUBLIC").setMultipleInstances(!0)),(0,i.KN)(f,v,void 0),(0,i.KN)(f,v,"esm2017")},6650:function(e,t,r){"use strict";r.d(t,{oq:function(){return ev},Jt:function(){return ef},cF:function(){return ew},iH:function(){return e_},B0:function(){return ey}});var n,i,a,s,o=r(2238),c=r(4444),u=r(8463);/**
3101 * @license
3102 * Copyright 2017 Google LLC
3103 *
3104 * Licensed under the Apache License, Version 2.0 (the "License");
3105 * you may not use this file except in compliance with the License.
3106 * You may obtain a copy of the License at
3107 *
3108 *   http://www.apache.org/licenses/LICENSE-2.0
3109 *
3110 * Unless required by applicable law or agreed to in writing, software
3111 * distributed under the License is distributed on an "AS IS" BASIS,
3112 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3113 * See the License for the specific language governing permissions and
3114 * limitations under the License.
3115 */let l="firebasestorage.googleapis.com",h="storageBucket";/**
3116 * @license
3117 * Copyright 2017 Google LLC
3118 *
3119 * Licensed under the Apache License, Version 2.0 (the "License");
3120 * you may not use this file except in compliance with the License.
3121 * You may obtain a copy of the License at
3122 *
3123 *   http://www.apache.org/licenses/LICENSE-2.0
3124 *
3125 * Unless required by applicable law or agreed to in writing, software
3126 * distributed under the License is distributed on an "AS IS" BASIS,
3127 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3128 * See the License for the specific language governing permissions and
3129 * limitations under the License.
3130 */class g extends c.ZR{constructor(e,t,r=0){super(d(e),`Firebase Storage: ${t} (${d(e)})`),this.status_=r,this.customData={serverResponse:null},this._baseMessage=this.message,Object.setPrototypeOf(this,g.prototype)}get status(){return this.status_}set status(e){this.status_=e}_codeEquals(e){return d(e)===this.code}get serverResponse(){return this.customData.serverResponse}set serverResponse(e){this.customData.serverResponse=e,this.customData.serverResponse?this.message=`${this._baseMessage}
3131${this.customData.serverResponse}`:this.message=this._baseMessage}}function d(e){return"storage/"+e}function m(){return new g(a.UNKNOWN,"An unknown error occurred, please check the error payload for server response.")}function p(){return new g(a.RETRY_LIMIT_EXCEEDED,"Max retry time for operation exceeded, please try again.")}function y(){return new g(a.CANCELED,"User canceled the upload/download.")}function f(){return new g(a.CANNOT_SLICE_BLOB,"Cannot slice blob for upload. Please retry the upload.")}function v(e){return new g(a.INVALID_ARGUMENT,e)}function _(){return new g(a.APP_DELETED,"The Firebase app was deleted.")}function w(e,t){return new g(a.INVALID_FORMAT,"String does not match format '"+e+"': "+t)}function k(e){throw new g(a.INTERNAL_ERROR,"Internal error: "+e)}(n=a||(a={})).UNKNOWN="unknown",n.OBJECT_NOT_FOUND="object-not-found",n.BUCKET_NOT_FOUND="bucket-not-found",n.PROJECT_NOT_FOUND="project-not-found",n.QUOTA_EXCEEDED="quota-exceeded",n.UNAUTHENTICATED="unauthenticated",n.UNAUTHORIZED="unauthorized",n.UNAUTHORIZED_APP="unauthorized-app",n.RETRY_LIMIT_EXCEEDED="retry-limit-exceeded",n.INVALID_CHECKSUM="invalid-checksum",n.CANCELED="canceled",n.INVALID_EVENT_NAME="invalid-event-name",n.INVALID_URL="invalid-url",n.INVALID_DEFAULT_BUCKET="invalid-default-bucket",n.NO_DEFAULT_BUCKET="no-default-bucket",n.CANNOT_SLICE_BLOB="cannot-slice-blob",n.SERVER_FILE_WRONG_SIZE="server-file-wrong-size",n.NO_DOWNLOAD_URL="no-download-url",n.INVALID_ARGUMENT="invalid-argument",n.INVALID_ARGUMENT_COUNT="invalid-argument-count",n.APP_DELETED="app-deleted",n.INVALID_ROOT_OPERATION="invalid-root-operation",n.INVALID_FORMAT="invalid-format",n.INTERNAL_ERROR="internal-error",n.UNSUPPORTED_ENVIRONMENT="unsupported-environment";/**
3132 * @license
3133 * Copyright 2017 Google LLC
3134 *
3135 * Licensed under the Apache License, Version 2.0 (the "License");
3136 * you may not use this file except in compliance with the License.
3137 * You may obtain a copy of the License at
3138 *
3139 *   http://www.apache.org/licenses/LICENSE-2.0
3140 *
3141 * Unless required by applicable law or agreed to in writing, software
3142 * distributed under the License is distributed on an "AS IS" BASIS,
3143 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3144 * See the License for the specific language governing permissions and
3145 * limitations under the License.
3146 */class P{constructor(e,t){this.bucket=e,this.path_=t}get path(){return this.path_}get isRoot(){return 0===this.path.length}fullServerUrl(){let e=encodeURIComponent;return"/b/"+e(this.bucket)+"/o/"+e(this.path)}bucketOnlyServerUrl(){return"/b/"+encodeURIComponent(this.bucket)+"/o"}static makeFromBucketSpec(e,t){let r;try{r=P.makeFromUrl(e,t)}catch(t){return new P(e,"")}if(""===r.path)return r;throw new g(a.INVALID_DEFAULT_BUCKET,"Invalid default bucket '"+e+"'.")}static makeFromUrl(e,t){let r=null,n="([A-Za-z0-9.\\-_]+)",i=RegExp("^gs://"+n+"(/(.*))?$","i");function s(e){e.path_=decodeURIComponent(e.path)}let o=t.replace(/[.]/g,"\\."),c=[{regex:i,indices:{bucket:1,path:3},postModify:function(e){"/"===e.path.charAt(e.path.length-1)&&(e.path_=e.path_.slice(0,-1))}},{regex:RegExp(`^https?://${o}/v[A-Za-z0-9_]+/b/${n}/o(/([^?#]*).*)?$`,"i"),indices:{bucket:1,path:3},postModify:s},{regex:RegExp(`^https?://${t===l?"(?:storage.googleapis.com|storage.cloud.google.com)":t}/${n}/([^?#]*)`,"i"),indices:{bucket:1,path:2},postModify:s}];for(let t=0;t<c.length;t++){let n=c[t],i=n.regex.exec(e);if(i){let e=i[n.indices.bucket],t=i[n.indices.path];t||(t=""),r=new P(e,t),n.postModify(r);break}}if(null==r)throw new g(a.INVALID_URL,"Invalid URL '"+e+"'.");return r}}class b{constructor(e){this.promise_=Promise.reject(e)}getPromise(){return this.promise_}cancel(e=!1){}}function E(e){return"string"==typeof e||e instanceof String}function R(e){return S()&&e instanceof Blob}function S(){return"undefined"!=typeof Blob}function I(e,t,r,n){if(n<t)throw v(`Invalid value for '${e}'. Expected ${t} or greater.`);if(n>r)throw v(`Invalid value for '${e}'. Expected ${r} or less.`)}/**
3147 * @license
3148 * Copyright 2017 Google LLC
3149 *
3150 * Licensed under the Apache License, Version 2.0 (the "License");
3151 * you may not use this file except in compliance with the License.
3152 * You may obtain a copy of the License at
3153 *
3154 *   http://www.apache.org/licenses/LICENSE-2.0
3155 *
3156 * Unless required by applicable law or agreed to in writing, software
3157 * distributed under the License is distributed on an "AS IS" BASIS,
3158 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3159 * See the License for the specific language governing permissions and
3160 * limitations under the License.
3161 */function T(e,t,r){let n=t;return null==r&&(n=`https://${t}`),`${r}://${n}/v0${e}`}function C(e){let t=encodeURIComponent,r="?";for(let n in e)e.hasOwnProperty(n)&&(r=r+(t(n)+"=")+t(e[n])+"&");return r.slice(0,-1)}/**
3162 * @license
3163 * Copyright 2022 Google LLC
3164 *
3165 * Licensed under the Apache License, Version 2.0 (the "License");
3166 * you may not use this file except in compliance with the License.
3167 * You may obtain a copy of the License at
3168 *
3169 *   http://www.apache.org/licenses/LICENSE-2.0
3170 *
3171 * Unless required by applicable law or agreed to in writing, software
3172 * distributed under the License is distributed on an "AS IS" BASIS,
3173 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3174 * See the License for the specific language governing permissions and
3175 * limitations under the License.
3176 */function H(e,t){let r=e>=500&&e<600,n=-1!==[408,429].indexOf(e),i=-1!==t.indexOf(e);return r||n||i}(i=s||(s={}))[i.NO_ERROR=0]="NO_ERROR",i[i.NETWORK_ERROR=1]="NETWORK_ERROR",i[i.ABORT=2]="ABORT";/**
3177 * @license
3178 * Copyright 2017 Google LLC
3179 *
3180 * Licensed under the Apache License, Version 2.0 (the "License");
3181 * you may not use this file except in compliance with the License.
3182 * You may obtain a copy of the License at
3183 *
3184 *   http://www.apache.org/licenses/LICENSE-2.0
3185 *
3186 * Unless required by applicable law or agreed to in writing, softw
3186are
3187 * distributed under the License is distributed on an "AS IS" BASIS,
3188 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3189 * See the License for the specific language governing permissions and
3190 * limitations under the License.
3191 */class W{constructor(e,t,r,n,i,a,s,o,c,u,l,h=!0){this.url_=e,this.method_=t,this.headers_=r,this.body_=n,this.successCodes_=i,this.additionalRetryCodes_=a,this.callback_=s,this.errorCallback_=o,this.timeout_=c,this.progressCallback_=u,this.connectionFactory_=l,this.retry=h,this.pendingConnection_=null,this.backoffId_=null,this.canceled_=!1,this.appDelete_=!1,this.promise_=new Promise((e,t)=>{this.resolve_=e,this.reject_=t,this.start_()})}start_(){let e=(e,t)=>{let r=this.resolve_,n=this.reject_,i=t.connection;if(t.wasSuccessCode)try{let e=this.callback_(i,i.getResponse());void 0!==e?r(e):r()}catch(e){n(e)}else if(null!==i){let e=m();e.serverResponse=i.getErrorText(),n(this.errorCallback_?this.errorCallback_(i,e):e)}else n(t.canceled?this.appDelete_?_():y():p())};this.canceled_?e(!1,new A(!1,null,!0)):this.backoffId_=/**
3192 * @license
3193 * Copyright 2017 Google LLC
3194 *
3195 * Licensed under the Apache License, Version 2.0 (the "License");
3196 * you may not use this file except in compliance with the License.
3197 * You may obtain a copy of the License at
3198 *
3199 *   http://www.apache.org/licenses/LICENSE-2.0
3200 *
3201 * Unless required by applicable law or agreed to in writing, software
3202 * distributed under the License is distributed on an "AS IS" BASIS,
3203 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3204 * See the License for the specific language governing permissions and
3205 * limitations under the License.
3206 */function(e,t,r){let n=1,i=null,a=null,s=!1,o=0,c=!1;function u(...e){c||(c=!0,t.apply(null,e))}function l(t){i=setTimeout(()=>{i=null,e(g,2===o)},t)}function h(){a&&clearTimeout(a)}function g(e,...t){let r;if(c){h();return}if(e||2===o||s){h(),u.call(null,e,...t);return}n<64&&(n*=2),1===o?(o=2,r=0):r=(n+Math.random())*1e3,l(r)}let d=!1;function m(e){!d&&(d=!0,h(),!c&&(null!==i?(e||(o=2),clearTimeout(i),l(0)):e||(o=1)))}return l(0),a=setTimeout(()=>{s=!0,m(!0)},r),m}((e,t)=>{if(t){e(!1,new A(!1,null,!0));return}let r=this.connectionFactory_();this.pendingConnection_=r;let n=e=>{let t=e.loaded,r=e.lengthComputable?e.total:-1;null!==this.progressCallback_&&this.progressCallback_(t,r)};null!==this.progressCallback_&&r.addUploadProgressListener(n),r.send(this.url_,this.method_,this.body_,this.headers_).then(()=>{null!==this.progressCallback_&&r.removeUploadProgressListener(n),this.pendingConnection_=null;let t=r.getErrorCode()===s.NO_ERROR,i=r.getStatus();if(!t||H(i,this.additionalRetryCodes_)&&this.retry){e(!1,new A(!1,null,r.getErrorCode()===s.ABORT));return}e(!0,new A(-1!==this.successCodes_.indexOf(i),r))})},e,this.timeout_)}getPromise(){return this.promise_}cancel(e){this.canceled_=!0,this.appDelete_=e||!1,null!==this.backoffId_&&(0,this.backoffId_)(!1),null!==this.pendingConnection_&&this.pendingConnection_.abort()}}class A{constructor(e,t,r){this.wasSuccessCode=e,this.connection=t,this.canceled=!!r}}function D(...e){let t="undefined"!=typeof BlobBuilder?BlobBuilder:"undefined"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:void 0;if(void 0!==t){let r=new t;for(let t=0;t<e.length;t++)r.append(e[t]);return r.getBlob()}if(S())return new Blob(e);throw new g(a.UNSUPPORTED_ENVIRONMENT,"This browser doesn't seem to support creating Blobs")}/**
3207 * @license
3208 * Copyright 2017 Google LLC
3209 *
3210 * Licensed under the Apache License, Version 2.0 (the "License");
3211 * you may not use this file except in compliance with the License.
3212 * You may obtain a copy of the License at
3213 *
3214 *   http://www.apache.org/licenses/LICENSE-2.0
3215 *
3216 * Unless required by applicable law or agreed to in writing, software
3217 * distributed under the License is distributed on an "AS IS" BASIS,
3218 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3219 * See the License for the specific language governing permissions and
3220 * limitations under the License.
3221 */let U={RAW:"raw",BASE64:"base64",BASE64URL:"base64url",DATA_URL:"data_url"};class L{constructor(e,t){this.data=e,this.contentType=t||null}}function O(e){let t=[];for(let r=0;r<e.length;r++){let n=e.charCodeAt(r);n<=127?t.push(n):n<=2047?t.push(192|n>>6,128|63&n):(64512&n)==55296?r<e.length-1&&(64512&e.charCodeAt(r+1))==56320?(n=65536|(1023&n)<<10|1023&e.charCodeAt(++r),t.push(240|n>>18,128|n>>12&63,128|n>>6&63,128|63&n)):t.push(239,191,189):(64512&n)==56320?t.push(239,191,189):t.push(224|n>>12,128|n>>6&63,128|63&n)}return new Uint8Array(t)}function N(e,t){let r;switch(e){case U.BASE64:{let r=-1!==t.indexOf("-"),n=-1!==t.indexOf("_");if(r||n)throw w(e,"Invalid character '"+(r?"-":"_")+"' found: is it base64url encoded?");break}case U.BASE64URL:{let r=-1!==t.indexOf("+"),n=-1!==t.indexOf("/");if(r||n)throw w(e,"Invalid character '"+(r?"+":"/")+"' found: is it base64 encoded?");t=t.replace(/-/g,"+").replace(/_/g,"/")}}try{r=/**
3222 * @license
3223 * Copyright 2021 Google LLC
3224 *
3225 * Licensed under the Apache License, Version 2.0 (the "License");
3226 * you may not use this file except in compliance with the License.
3227 * You may obtain a copy of the License at
3228 *
3229 *   http://www.apache.org/licenses/LICENSE-2.0
3230 *
3231 * Unless required by applicable law or agreed to in writing, software
3232 * distributed under the License is distributed on an "AS IS" BASIS,
3233 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3234 * See the License for the specific language governing permissions and
3235 * limitations under the License.
3236 */function(e){if("undefined"==typeof atob)throw new g(a.UNSUPPORTED_ENVIRONMENT,"base-64 is missing. Make sure to install the required polyfills. See https://firebase.google.com/docs/web/environments-js-sdk#polyfills for more information.");return atob(e)}(t)}catch(t){if(t.message.includes("polyfill"))throw t;throw w(e,"Invalid character found")}let n=new Uint8Array(r.length);for(let e=0;e<r.length;e++)n[e]=r.charCodeAt(e);return n}class K{constructor(e){var t;this.base64=!1,this.contentType=null;let r=e.match(/^data:([^,]+)?,/);if(null===r)throw w(U.DATA_URL,"Must be formatted 'data:[<mediatype>][;base64],<data>");let n=r[1]||null;null!=n&&(this.base64=(t=";base64",n.length>=t.length&&n.substring(n.length-t.length)===t),this.contentType=this.base64?n.substring(0,n.length-7):n),this.rest=e.substring(e.indexOf(",")+1)}}/**
3237 * @license
3238 * Copyright 2017 Google LLC
3239 *
3240 * Licensed under the Apache License, Version 2.0 (the "License");
3241 * you may not use this file except in compliance with the License.
3242 * You may obtain a copy of the License at
3243 *
3244 *   http://www.apache.org/licenses/LICENSE-2.0
3245 *
3246 * Unless required by applicable law or agreed to in writing, software
3247 * distributed under the License is distributed on an "AS IS" BASIS,
3248 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3249 * See the License for the specific language governing permissions and
3250 * limitations under the License.
3251 */class x{constructor(e,t){let r=0,n="";R(e)?(this.data_=e,r=e.size,n=e.type):e instanceof ArrayBuffer?(t?this.data_=new Uint8Array(e):(this.data_=new Uint8Array(e.byteLength),this.data_.set(new Uint8Array(e))),r=this.data_.length):e instanceof Uint8Array&&(t?this.data_=e:(this.data_=new Uint8Array(e.length),this.data_.set(e)),r=e.length),this.size_=r,this.type_=n}size(){return this.size_}type(){return this.type_}slice(e,t){if(!R(this.data_))return new x(new Uint8Array(this.data_.buffer,e,t-e),!0);{var r;let n=(r=this.data_).webkitSlice?r.webkitSlice(e,t):r.mozSlice?r.mozSlice(e,t):r.slice?r.slice(e,t):null;return null===n?null:new x(n)}}static getBlob(...e){if(S()){let t=e.map(e=>e instanceof x?e.data_:e);return new x(D.apply(null,t))}{let t=e.map(e=>E(e)?function(e,t){switch(e){case U.RAW:return new L(O(t));case U.BASE64:case U.BASE64URL:return new L(N(e,t));case U.DATA_URL:return new L(function(e){let t=new K(e);return t.base64?N(U.BASE64,t.rest):function(e){let t;try{t=decodeURIComponent(e)}catch(e){throw w(U.DATA_URL,"Malformed data URL.")}return O(t)}(t.rest)}(t),new K(t).contentType)}throw m()}(U.RAW,e).data:e.data_),r=0;t.forEach(e=>{r+=e.byteLength});let n=new Uint8Array(r),i=0;return t.forEach(e=>{for(let t=0;t<e.length;t++)n[i++]=e[t]}),new x(n,!0)}}uploadData(){return this.data_}}/**
3252 * @license
3253 * Copyright 2017 Google LLC
3254 *
3255 * Licensed under the Apache License, Version 2.0 (the "License");
3256 * you may not use this file except in compliance with the License.
3257 * You may obtain a copy of the License at
3258 *
3259 *   http://www.apache.org/licenses/LICENSE-2.0
3260 *
3261 * Unless required by applicable law or agreed to in writing, software
3262 * distributed under the License is distributed on an "AS IS" BASIS,
3263 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3264 * See the License for the specific language governing permissions and
3265 * limitations under the License.
3266 */function M(e){var t;let r;try{r=JSON.parse(e)}catch(e){return null}return"object"!=typeof(t=r)||Array.isArray(t)?null:r}function F(e){let t=e.lastIndexOf("/",e.length-2);return -1===t?e:e.slice(t+1)}/**
3267 * @license
3268 * Copyright 2017 Google LLC
3269 *
3270 * Licensed under the Apache License, Version 2.0 (the "License");
3271 * you may not use this file except in compliance with the License.
3272 * You may obtain a copy of the License at
3273 *
3274 *   http://www.apache.org/licenses/LICENSE-2.0
3275 *
3276 * Unless required by applicable law or agreed to in writing, software
3277 * distributed under the License is distributed on an "AS IS" BASIS,
3278 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3279 * See the License for the specific language governing permissions and
3280 * limitations under the License.
3281 */function B(e,t){return t}class V{constructor(e,t,r,n){this.server=e,this.local=t||e,this.writable=!!r,this.xform=n||B}}let q=null;function j(){if(q)return q;let e=[];e.push(new V("bucket")),e.push(new V("generation")),e.push(new V("metageneration")),e.push(new V("name","fullPath",!0));let t=new V("name");t.xform=function(e,t){return!E(t)||t.length<2?t:F(t)},e.push(t);let r=new V("size");return r.xform=function(e,t){return void 0!==t?Number(t):t},e.push(r),e.push(new V("timeCreated")),e.push(new V("updated")),e.push(new V("md5Hash",null,!0)),e.push(new V("cacheControl",null,!0)),e.push(new V("contentDisposition",null,!0)),e.push(new V("contentEncoding",null,!0)),e.push(new V("contentLanguage",null,!0)),e.push(new V("contentType",null,!0)),e.push(new V("metadata","customMetadata",!0)),q=e}function G(e,t,r){let n=M(t);return null===n?null:function(e,t,r){let n={};n.type="file";let i=r.length;for(let e=0;e<i;e++){let i=r[e];n[i.local]=i.xform(n,t[i.server])}return Object.defineProperty(n,"ref",{get:function(){let t=new P(n.bucket,n.fullPath);return e._makeStorageReference(t)}}),n}(e,n,r)}function z(e,t){let r={},n=t.length;for(let i=0;i<n;i++){let n=t[i];n.writable&&(r[n.server]=e[n.local])}return JSON.stringify(r)}class ${constructor(e,t,r,n){this.url=e,this.method=t,this.handler=r,this.timeout=n,this.urlParams={},this.headers={},this.body=null,this.errorHandler=null,this.progressCallback=null,this.successCodes=[200],this.additionalRetryCodes=[]}}/**
3282 * @license
3283 * Copyright 2017 Google LLC
3284 *
3285 * Licensed under the Apache License, Version 2.0 (the "License");
3286 * you may not use this file except in compliance with the License.
3287 * You may obtain a copy of the License at
3288 *
3289 *   http://www.apache.org/licenses/LICENSE-2.0
3290 *
3291 * Unless required by applicable law or agreed to in writing, software
3292 * distributed under the License is distributed on an "AS IS" BASIS,
3293 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3294 * See the License for the specific language governing permissions and
3295 * limitations under the License.
3296 */function J(e){if(!e)throw m()}function Q(e,t){return function(r,n){let i=G(e,n,t);return J(null!==i),i}}function X(e){return function(t,r){var n,i;let s;return 401===t.getStatus()?s=t.getErrorText().includes("Firebase App Check token is invalid")?new g(a.UNAUTHORIZED_APP,"This app does not have permission to access Firebase Storage on this project."):new g(a.UNAUTHENTICATED,"User is not authenticated, please authenticate using Firebase Authentication and try again."):402===t.getStatus()?(n=e.bucket,s=new g(a.QUOTA_EXCEEDED,"Quota for bucket '"+n+"' exceeded, please view quota on https://firebase.google.com/pricing/.")):403===t.getStatus()?(i=e.path,s=new g(a.UNAUTHORIZED,"User does not have permission to access '"+i+"'.")):s=r,s.status=t.getStatus(),s.serverResponse=r.serverResponse,s}}function Y(e){let t=X(e);return function(r,n){let i=t(r,n);if(404===r.getStatus()){var s;s=e.path,i=new g(a.OBJECT_NOT_FOUND,"Object '"+s+"' does not exist.")}return i.serverResponse=n.serverResponse,i}}function Z(e,t,r){let n=Object.assign({},r);return n.fullPath=e.path,n.size=t.size(),!n.contentType&&(n.contentType=t&&t.type()||"application/octet-stream"),n}class ee{constructor(e,t,r,n){this.current=e,this.total=t,this.finalized=!!r,this.metadata=n||null}}function et(e,t){let r=null;try{r=e.getResponseHeader("X-Goog-Upload-Status")}catch(e){J(!1)}return J(!!r&&-1!==(t||["active"]).indexOf(r)),r}let er={RUNNING:"running",PAUSED:"paused",SUCCESS:"success",CANCELED:"canceled",ERROR:"error"};function en(e){switch(e){case"running":case"pausing":case"canceling":return er.RUNNING;case"paused":return er.PAUSED;case"success":return er.SUCCESS;case"canceled":return er.CANCELED;default:return er.ERROR}}/**
3297 * @license
3298 * Copyright 2017 Google LLC
3299 *
3300 * Licensed under the Apache License, Version 2.0 (the "License");
3301 * you may not use this file except in compliance with the License.
3302 * You may obtain a copy of the License at
3303 *
3304 *   http://www.apache.org/licenses/LICENSE-2.0
3305 *
3306 * Unless required by applicable law or agreed to in writing, software
3307 * distributed under the License is distributed on an "AS IS" BASIS,
3308 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3309 * See the License for the specific language governing permissions and
3310 * limitations under the License.
3311 */class ei{constructor(e,t,r){"function"==typeof e||null!=t||null!=r?(this.next=e,this.error=null!=t?t:void 0,this.complete=null!=r?r:void 0):(this.next=e.next,this.error=e.error,this.complete=e.complete)}}/**
3312 * @license
3313 * Copyright 2017 Google LLC
3314 *
3315 * Licensed under the Apache License, Version 2.0 (the "License");
3316 * you may not use this file except in compliance with the License.
3317 * You may obtain a copy of the License at
3318 *
3319 *   http://www.apache.org/licenses/LICENSE-2.0
3320 *
3321 * Unless required by applicable law or agreed to in writing, software
3322 * distributed under the License is distributed on an "AS IS" BASIS,
3323 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3324 * See the License for the specific language governing permissions and
3325 * limitations under the License.
3326 */function ea(e){return(...t)=>{Promise.resolve().then(()=>e(...t))}}class es{constructor(){this.sent_=!1,this.xhr_=new XMLHttpRequest,this.initXhr(),this.errorCode_=s.NO_ERROR,this.sendPromise_=new Promise(e=>{this.xhr_.addEventListener("abort",()=>{this.errorCode_=s.ABORT,e()}),this.xhr_.addEventListener("error",()=>{this.errorCode_=s.NETWORK_ERROR,e()}),this.xhr_.addEventListener("load",()=>{e()})})}send(e,t,r,n){if(this.sent_)throw k("cannot .send() more than once");if(this.sent_=!0,this.xhr_.open(t,e,!0),void 0!==n)for(let e in n)n.hasOwnProperty(e)&&this.xhr_.setRequestHeader(e,n[e].toString());return void 0!==r?this.xhr_.send(r):this.xhr_.send(),this.sendPromise_}getErrorCode(){if(!this.sent_)throw k("cannot .getErrorCode() before sending");return this.errorCode_}getStatus(){if(!this.sent_)throw k("cannot .getStatus() before sending");try{return this.xhr_.status}catch(e){return -1}}getResponse(){if(!this.sent_)throw k("cannot .getResponse() before sending");return this.xhr_.response}getErrorText(){if(!this.sent_)throw k("cannot .getErrorText() before sending");return this.xhr_.statusText}abort(){this.xhr_.abort()}getResponseHeader(e){return this.xhr_.getResponseHeader(e)}addUploadProgressListener(e){null!=this.xhr_.upload&&this.xhr_.upload.addEventListener("progress",e)}removeUploadProgressListener(e){null!=this.xhr_.upload&&this.xhr_.upload.removeEventListener("progress",e)}}class eo extends es{initXhr(){this.xhr_.responseType="text"}}function ec(){return new eo}/**
3327 * @license
3328 * Copyright 2017 Google LLC
3329 *
3330 * Licensed under the Apache License, Version 2.0 (the "License");
3331 * you may not use this file except in compliance with the License.
3332 * You may obtain a copy of the License at
3333 *
3334 *   http://www.apache.org/licenses/LICENSE-2.0
3335 *
3336 * Unless required by applicable law or agreed to in writing, software
3337 * distributed under the License is distributed on an "AS IS" BASIS,
3338 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3339 * See the License for the specific language governing permissions and
3340 * limitations under the License.
3341 */class eu{constructor(e,t,r=null){this._transferred=0,this._needToFetchStatus=!1,this._needToFetchMetadata=!1,this._observers=[],this._error=void 0,this._uploadUrl=void 0,this._request=void 0,this._chunkMultiplier=1,this._resolve=void 0,this._reject=void 0,this._ref=e,this._blob=t,this._metadata=r,this._mappings=j(),this._resumable=this._shouldDoResumable(this._blob),this._state="running",this._errorHandler=e=>{if(this._request=void 0,this._chunkMultiplier=1,e._codeEquals(a.CANCELED))this._needToFetchStatus=!0,this.completeTransitions_();else{let t=this.isExponentialBackoffExpired();if(H(e.status,[])){if(t)e=p();else{this.sleepTime=Math.max(2*this.sleepTime,1e3),this._needToFetchStatus=!0,this.completeTransitions_();return}}this._error=e,this._transition("error")}},this._metadataErrorHandler=e=>{this._request=void 0,e._codeEquals(a.CANCELED)?this.completeTransitions_():(this._error=e,this._transition("error"))},this.sleepTime=0,this.maxSleepTime=this._ref.storage.maxUploadRetryTime,this._promise=new Promise((e,t)=>
3341{this._resolve=e,this._reject=t,this._start()}),this._promise.then(null,()=>{})}isExponentialBackoffExpired(){return this.sleepTime>this.maxSleepTime}_makeProgressCallback(){let e=this._transferred;return t=>this._updateProgress(e+t)}_shouldDoResumable(e){return e.size()>262144}_start(){"running"===this._state&&void 0===this._request&&(this._resumable?void 0===this._uploadUrl?this._createResumable():this._needToFetchStatus?this._fetchStatus():this._needToFetchMetadata?this._fetchMetadata():this.pendingTimeout=setTimeout(()=>{this.pendingTimeout=void 0,this._continueUpload()},this.sleepTime):this._oneShotUpload())}_resolveToken(e){Promise.all([this._ref.storage._getAuthToken(),this._ref.storage._getAppCheckToken()]).then(([t,r])=>{switch(this._state){case"running":e(t,r);break;case"canceling":this._transition("canceled");break;case"pausing":this._transition("paused")}})}_createResumable(){this._resolveToken((e,t)=>{let r=function(e,t,r,n,i){let a=t.bucketOnlyServerUrl(),s=Z(t,n,i),o={name:s.fullPath},c=T(a,e.host,e._protocol),u={"X-Goog-Upload-Protocol":"resumable","X-Goog-Upload-Command":"start","X-Goog-Upload-Header-Content-Length":`${n.size()}`,"X-Goog-Upload-Header-Content-Type":s.contentType,"Content-Type":"application/json; charset=utf-8"},l=z(s,r),h=new $(c,"POST",function(e){let t;et(e);try{t=e.getResponseHeader("X-Goog-Upload-URL")}catch(e){J(!1)}return J(E(t)),t},e.maxUploadRetryTime);return h.urlParams=o,h.headers=u,h.body=l,h.errorHandler=X(t),h}(this._ref.storage,this._ref._location,this._mappings,this._blob,this._metadata),n=this._ref.storage._makeRequest(r,ec,e,t);this._request=n,n.getPromise().then(e=>{this._request=void 0,this._uploadUrl=e,this._needToFetchStatus=!1,this.completeTransitions_()},this._errorHandler)})}_fetchStatus(){let e=this._uploadUrl;this._resolveToken((t,r)=>{let n=function(e,t,r,n){let i=new $(r,"POST",function(e){let t=et(e,["active","final"]),r=null;try{r=e.getResponseHeader("X-Goog-Upload-Size-Received")}catch(e){J(!1)}r||J(!1);let i=Number(r);return J(!isNaN(i)),new ee(i,n.size(),"final"===t)},e.maxUploadRetryTime);return i.headers={"X-Goog-Upload-Command":"query"},i.errorHandler=X(t),i}(this._ref.storage,this._ref._location,e,this._blob),i=this._ref.storage._makeRequest(n,ec,t,r);this._request=i,i.getPromise().then(e=>{this._request=void 0,this._updateProgress(e.current),this._needToFetchStatus=!1,e.finalized&&(this._needToFetchMetadata=!0),this.completeTransitions_()},this._errorHandler)})}_continueUpload(){let e=262144*this._chunkMultiplier,t=new ee(this._transferred,this._blob.size()),r=this._uploadUrl;this._resolveToken((n,i)=>{let s;try{s=function(e,t,r,n,i,s,o,c){let u=new ee(0,0);if(o?(u.current=o.current,u.total=o.total):(u.current=0,u.total=n.size()),n.size()!==u.total)throw new g(a.SERVER_FILE_WRONG_SIZE,"Server recorded incorrect upload file size, please retry the upload.");let l=u.total-u.current,h=l;i>0&&(h=Math.min(h,i));let d=u.current,m=d+h,p={"X-Goog-Upload-Command":0===h?"finalize":l===h?"upload, finalize":"upload","X-Goog-Upload-Offset":`${u.current}`},y=n.slice(d,m);if(null===y)throw f();let v=new $(r,"POST",function(e,r){let i;let a=et(e,["active","final"]),o=u.current+h,c=n.size();return i="final"===a?Q(t,s)(e,r):null,new ee(o,c,"final"===a,i)},t.maxUploadRetryTime);return v.headers=p,v.body=y.uploadData(),v.progressCallback=c||null,v.errorHandler=X(e),v}(this._ref._location,this._ref.storage,r,this._blob,e,this._mappings,t,this._makeProgressCallback())}catch(e){this._error=e,this._transition("error");return}let o=this._ref.storage._makeRequest(s,ec,n,i,!1);this._request=o,o.getPromise().then(e=>{this._increaseMultiplier(),this._request=void 0,this._updateProgress(e.current),e.finalized?(this._metadata=e.metadata,this._transition("success")):this.completeTransitions_()},this._errorHandler)})}_increaseMultiplier(){262144*this._chunkMultiplier*2<33554432&&(this._chunkMultiplier*=2)}_fetchMetadata(){this._resolveToken((e,t)=>{let r=function(e,t,r){let n=T(t.fullServerUrl(),e.host,e._protocol),i=e.maxOperationRetryTime,a=new $(n,"GET",Q(e,r),i);return a.errorHandler=Y(t),a}(this._ref.storage,this._ref._location,this._mappings),n=this._ref.storage._makeRequest
3341(r,ec,e,t);this._request=n,n.getPromise().then(e=>{this._request=void 0,this._metadata=e,this._transition("success")},this._metadataErrorHandler)})}_oneShotUpload(){this._resolveToken((e,t)=>{let r=function(e,t,r,n,i){let a=t.bucketOnlyServerUrl(),s={"X-Goog-Upload-Protocol":"multipart"},o=function(){let e="";for(let t=0;t<2;t++)e+=Math.random().toString().slice(2);return e}();s["Content-Type"]="multipart/related; boundary="+o;let c=Z(t,n,i),u="--"+o+"\r\nContent-Type: application/json; charset=utf-8\r\n\r\n"+z(c,r)+"\r\n--"+o+"\r\nContent-Type: "+c.contentType+"\r\n\r\n",l=x.getBlob(u,n,"\r\n--"+o+"--");if(null===l)throw f();let h={name:c.fullPath},g=T(a,e.host,e._protocol),d=e.maxUploadRetryTime,m=new $(g,"POST",Q(e,r),d);return m.urlParams=h,m.headers=s,m.body=l.uploadData(),m.errorHandler=X(t),m}(this._ref.storage,this._ref._location,this._mappings,this._blob,this._metadata),n=this._ref.storage._makeRequest(r,ec,e,t);this._request=n,n.getPromise().then(e=>{this._request=void 0,this._metadata=e,this._updateProgress(this._blob.size()),this._transition("success")},this._errorHandler)})}_updateProgress(e){let t=this._transferred;this._transferred=e,this._transferred!==t&&this._notifyObservers()}_transition(e){if(this._state!==e)switch(e){case"canceling":case"pausing":this._state=e,void 0!==this._request?this._request.cancel():this.pendingTimeout&&(clearTimeout(this.pendingTimeout),this.pendingTimeout=void 0,this.completeTransitions_());break;case"running":let t="paused"===this._state;this._state=e,t&&(this._notifyObservers(),this._start());break;case"paused":case"error":case"success":this._state=e,this._notifyObservers();break;case"canceled":this._error=y(),this._state=e,this._notifyObservers()}}completeTransitions_(){switch(this._state){case"pausing":this._transition("paused");break;case"canceling":this._transition("canceled");break;case"running":this._start()}}get snapshot(){let e=en(this._state);return{bytesTransferred:this._transferred,totalBytes:this._blob.size(),state:e,metadata:this._metadata,task:this,ref:this._ref}}on(e,t,r,n){let i=new ei(t||void 0,r||void 0,n||void 0);return this._addObserver(i),()=>{this._removeObserver(i)}}then(e,t){return this._promise.then(e,t)}catch(e){return this.then(null,e)}_addObserver(e){this._observers.push(e),this._notifyObserver(e)}_removeObserver(e){let t=this._observers.indexOf(e);-1!==t&&this._observers.splice(t,1)}_notifyObservers(){this._finishPromise(),this._observers.slice().forEach(e=>{this._notifyObserver(e)})}_finishPromise(){if(void 0!==this._resolve){let e=!0;switch(en(this._state)){case er.SUCCESS:ea(this._resolve.bind(null,this.snapshot))();break;case er.CANCELED:case er.ERROR:ea(this._reject.bind(null,this._error))();break;default:e=!1}e&&(this._resolve=void 0,this._reject=void 0)}}_notifyObserver(e){switch(en(this._state)){case er.RUNNING:case er.PAUSED:e.next&&ea(e.next.bind(e,this.snapshot))();break;case er.SUCCESS:e.complete&&ea(e.complete.bind(e))();break;case er.CANCELED:case er.ERROR:default:e.error&&ea(e.error.bind(e,this._error))()}}resume(){let e="paused"===this._state||"pausing"===this._state;return e&&this._transition("running"),e}pause(){let e="running"===this._state;return e&&this._transition("pausing"),e}cancel(){let e="running"===this._state||"pausing"===this._state;return e&&this._transition("canceling"),e}}/**
3342 * @license
3343 * Copyright 2019 Google LLC
3344 *
3345 * Licensed under the Apache License, Version 2.0 (the "License");
3346 * you may not use this file except in compliance with the License.
3347 * You may obtain a copy of the License at
3348 *
3349 *   http://www.apache.org/licenses/LICENSE-2.0
3350 *
3351 * Unless required by applicable law or agreed to in writing, software
3352 * distributed under the License is distributed on an "AS IS" BASIS,
3353 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3354 * See the License for the specific language governing permissions and
3355 * limitations under the License.
3356 */class el{constructor(e,t){this._service=e,t instanceof P?this._location=t:this._location=P.makeFromUrl(t,e.host)}toString(){return"gs://"+this._location.bucket+"/"+this._location.path}_newRef(e,t){return new el(e,t)}get root(){let e=new P(this._location.bucket,"");return this._newRef(this._service,e)}get bucket(){return this._location.bucket}get fullPath(){return this._location.path}get name(){return F(this._location.path)}get storage(){return this._service}get parent(){let e=/**
3357 * @license
3358 * Copyright 2017 Google LLC
3359 *
3360 * Licensed under the Apache License, Version 2.0 (the "License");
3361 * you may not use this file except in compliance with the License.
3362 * You may obtain a copy of the License at
3363 *
3364 *   http://www.apache.org/licenses/LICENSE-2.0
3365 *
3366 * Unless required by applicable law or agreed to in writing, software
3367 * distributed under the License is distributed on an "AS IS" BASIS,
3368 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3369 * See the License for the specific language governing permissions and
3370 * limitations under the License.
3371 */function(e){if(0===e.length)return null;let t=e.lastIndexOf("/");return -1===t?"":e.slice(0,t)}(this._location.path);if(null===e)return null;let t=new P(this._location.bucket,e);return new el(this._service,t)}_throwIfRoot(e){if(""===this._location.path)throw new g(a.INVALID_ROOT_OPERATION,"The operation '"+e+"' cannot be performed on a root reference, create a non-root reference using child, such as .child('file.png').")}}function eh(e,t){let r=null==t?void 0:t[h];return null==r?null:P.makeFromBucketSpec(r,e)}class eg{constructor(e,t,r,n,i){this.app=e,this._authProvider=t,this._appCheckProvider=r,this._url=n,this._firebaseVersion=i,this._bucket=null,this._host=l,this._protocol="https",this._appId=null,this._deleted=!1,this._maxOperationRetryTime=12e4,this._maxUploadRetryTime=6e5,this._requests=new Set,null!=n?this._bucket=P.makeFromBucketSpec(n,this._host):this._bucket=eh(this._host,this.app.options)}get host(){return this._host}set host(e){this._host=e,null!=this._url?this._bucket=P.makeFromBucketSpec(this._url,e):this._bucket=eh(e,this.app.options)}get maxUploadRetryTime(){return this._maxUploadRetryTime}set maxUploadRetryTime(e){I("time",0,Number.POSITIVE_INFINITY,e),this._maxUploadRetryTime=e}get maxOperationRetryTime(){return this._maxOperationRetryTime}set maxOperationRetryTime(e){I("time",0,Number.POSITIVE_INFINITY,e),this._maxOperationRetryTime=e}async _getAuthToken(){if(this._overrideAuthToken)return this._overrideAuthToken;let e=this._authProvider.getImmediate({optional:!0});if(e){let t=await e.getToken();if(null!==t)return t.accessToken}return null}async _getAppCheckToken(){let e=this._appCheckProvider.getImmediate({optional:!0});return e?(await e.getToken()).token:null}_delete(){return this._deleted||(this._deleted=!0,this._requests.forEach(e=>e.cancel()),this._requests.clear()),Promise.resolve()}_makeStorageReference(e){return new el(this,e)}_makeRequest(e,t,r,n,i=!0){if(this._deleted)return new b(_());{let a=function(e,t,r,n,i,a,s=!0){let o=C(e.urlParams),c=e.url+o,u=Object.assign({},e.headers);return t&&(u["X-Firebase-GMPID"]=t),null!==r&&r.length>0&&(u.Authorization="Firebase "+r),u["X-Firebase-Storage-Version"]="webjs/"+(null!=a?a:"AppManager"),null!==n&&(u["X-Firebase-AppCheck"]=n),new W(c,e.method,u,e.body,e.successCodes,e.additionalRetryCodes,e.handler,e.errorHandler,e.timeout,e.progressCallback,i,s)}(e,this._appId,r,n,t,this._firebaseVersion,i);return this._requests.add(a),a.getPromise().then(()=>this._requests.delete(a),()=>this._requests.delete(a)),a}}async makeRequestWithTokens(e,t){let[r,n]=await Promise.all([this._getAuthToken(),this._getAppCheckToken()]);return this._makeRequest(e,t,r,n).getPromise()}}let ed="@firebase/storage",em="0.13.2",ep="storage";function ey(e,t,r){var n;return(n=e=(0,c.m9)(e))._throwIfRoot("uploadBytesResumable"),new eu(n,new x(t),r)}function ef(e){return function(e){e._throwIfRoot("getDownloadURL");let t=function(e,t,r){let n=new $(T(t.fullServerUrl(),e.host,e._protocol),"GET",function(t,n){let i=G(e,n,r);return J(null!==i),function(e,t,r,n){let i=M(t);if(null===i||!E(i.downloadTokens))return null;let a=i.downloadTokens;if(0===a.length)return null;let s=encodeURIComponent;return a.split(",").map(t=>{let i=e.bucket,a=e.fullPath;return T("/b/"+s(i)+"/o/"+s(a),r,n)+C({alt:"media",token:t})})[0]}(i,n,e.host,e._protocol)},e.maxOperationRetryTime);return n.errorHandler=Y(t),n}(e.storage,e._location,j());return e.storage.makeRequestWithTokens(t,ec).then(e=>{if(null===e)throw new g(a.NO_DOWNLOAD_URL,"The given file does not have any download URLs.");return e})}(e=(0,c.m9)(e))}function ev(e){return function(e){e._throwIfRoot("deleteObject");let t=function(e,t){let r=new $(T(t.fullServerUrl(),e.host,e._protocol),"DELETE",function(e,t){},e.maxOperationRetryTime);return r.successCodes=[200,204],r.errorHandler=Y(t),r}(e.storage,e._location);return e.storage.makeRequestWithTokens(t,ec)}(e=(0,c.m9)(e))}function e_(e,t){return function(e,t){if(!(t&&/^[A-Za-z]+:\/\//.test(t)))return function e(t,r){if(t instanceof eg){if(null==t._bucket)throw new g(a.NO_DEFAULT_BUCKET,"No default bucket found. Did you set the '"+h+"' property when initializing the app?");let n=new el(t,t._bucket);return null!=r?e(n,r):n}return void 0!==r?function(e,t){let r=function(e,t){let r=t.split("/").filter(e=>e.length>0).join("/");return 0===e.length?r:e+"/"+r}(e._location.path,t),n=new P(e._location.bucket,r);return new el(e.storage,n)}(t,r):t}(e,t);if(e instanceof eg)return new el(e,t);
3371throw v("To use ref(service, url), the first argument must be a Storage instance.")}(e=(0,c.m9)(e),t)}function ew(e=(0,o.Mq)(),t){e=(0,c.m9)(e);let r=(0,o.qX)(e,ep).getImmediate({identifier:t}),n=(0,c.P0)("storage");return n&&function(e,t,r,n={}){!function(e,t,r,n={}){e.host=`${t}:${r}`,e._protocol="http";let{mockUserToken:i}=n;i&&(e._overrideAuthToken="string"==typeof i?i:(0,c.Sg)(i,e.app.options.projectId))}(e,t,r,n)}(r,...n),r}(0,o.Xd)(new u.wA(ep,function(e,{instanceIdentifier:t}){return new eg(e.getProvider("app").getImmediate(),e.getProvider("auth-internal"),e.getProvider("app-check-internal"),t,o.Jn)},"PUBLIC").setMultipleInstances(!0)),(0,o.KN)(ed,em,""),(0,o.KN)(ed,em,"esm2017")},6531:function(e,t,r){"use strict";let n,i,a;r.d(t,{Lj:function(){return y},X3:function(){return p}});let s=(e,t)=>t.some(t=>e instanceof t),o=new WeakMap,c=new WeakMap,u=new WeakMap,l=new WeakMap,h=new WeakMap,g={get(e,t,r){if(e instanceof IDBTransaction){if("done"===t)return c.get(e);if("objectStoreNames"===t)return e.objectStoreNames||u.get(e);if("store"===t)return r.objectStoreNames[1]?void 0:r.objectStore(r.objectStoreNames[0])}return d(e[t])},set:(e,t,r)=>(e[t]=r,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function d(e){var t;if(e instanceof IDBRequest)return function(e){let t=new Promise((t,r)=>{let n=()=>{e.removeEventListener("success",i),e.removeEventListener("error",a)},i=()=>{t(d(e.result)),n()},a=()=>{r(e.error),n()};e.addEventListener("success",i),e.addEventListener("error",a)});return t.then(t=>{t instanceof IDBCursor&&o.set(t,e)}).catch(()=>{}),h.set(t,e),t}(e);if(l.has(e))return l.get(e);let r="function"==typeof(t=e)?t!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(i||(i=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(t)?function(...e){return t.apply(m(this),e),d(o.get(this))}:function(...e){return d(t.apply(m(this),e))}:function(e,...r){let n=t.call(m(this),e,...r);return u.set(n,e.sort?e.sort():[e]),d(n)}:(t instanceof IDBTransaction&&function(e){if(c.has(e))return;let t=new Promise((t,r)=>{let n=()=>{e.removeEventListener("complete",i),e.removeEventListener("error",a),e.removeEventListener("abort",a)},i=()=>{t(),n()},a=()=>{r(e.error||new DOMException("AbortError","AbortError")),n()};e.addEventListener("complete",i),e.addEventListener("error",a),e.addEventListener("abort",a)});c.set(e,t)}(t),s(t,n||(n=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])))?new Proxy(t,g):t;return r!==e&&(l.set(e,r),h.set(r,e)),r}let m=e=>h.get(e);function p(e,t,{blocked:r,upgrade:n,blocking:i,terminated:a}={}){let s=indexedDB.open(e,t),o=d(s);return n&&s.addEventListener("upgradeneeded",e=>{n(d(s.result),e.oldVersion,e.newVersion,d(s.transaction),e)}),r&&s.addEventListener("blocked",e=>r(e.oldVersion,e.newVersion,e)),o.then(e=>{a&&e.addEventListener("close",()=>a()),i&&e.addEventListener("versionchange",e=>i(e.oldVersion,e.newVersion,e))}).catch(()=>{}),o}function y(e,{blocked:t}={}){let r=indexedDB.deleteDatabase(e);return t&&r.addEventListener("blocked",e=>t(e.oldVersion,e)),d(r).then(()=>void 0)}let f=["get","getKey","getAll","getAllKeys","count"],v=["put","add","delete","clear"],_=new Map;function w(e,t){if(!(e instanceof IDBDatabase&&!(t in e)&&"string"==typeof t))return;if(_.get(t))return _.get(t);let r=t.replace(/FromIndex$/,""),n=t!==r,i=v.includes(r);if(!(r in(n?IDBIndex:IDBObjectStore).prototype)||!(i||f.includes(r)))return;let a=async function(e,...t){let a=this.transaction(e,i?"readwrite":"readonly"),s=a.store;return n&&(s=s.index(t.shift())),(await Promise.all([s[r](...t),i&&a.done]))[0]};return _.set(t,a),a}g={...a=g,get:(e,t,r)=>w(e,t)||a.get(e,t,r),has:(e,t)=>!!w(e,t)||a.has(e,t)}}},function(e){var t=function(t){return e(e.s=t)};e.O(0,[774,179],function(){return t(6840),t(9090)}),_N_E=e.O()}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.