@pmate/account-sdk 0.1.1 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs.js CHANGED
@@ -18,5 +18,5 @@ self.addEventListener('message', async (e) => {
18
18
  }
19
19
  })
20
20
  `;let Ca;function ac(t,e){return new Promise(((n,a)=>{Ca||(Ca=(function(r){const s=[];return s.push(r),URL.createObjectURL(new Blob(s))})(nc));const o=new Worker(Ca);o.addEventListener("message",(function(r){if(e.signal&&e.signal.aborted)o.terminate();else if(r.data.progress===void 0){if(r.data.error)return a(new Error(r.data.error)),void o.terminate();n(r.data.file),o.terminate()}else e.onProgress(r.data.progress)})),o.addEventListener("error",a),e.signal&&e.signal.addEventListener("abort",(()=>{a(e.signal.reason),o.terminate()})),o.postMessage({file:t,imageCompressionLibUrl:e.libURL,options:{...e,onProgress:void 0,signal:void 0}})}))}function Te(t,e){return new Promise((function(n,a){let o,i,r,s,c,h;if(o={...e},r=0,{onProgress:s}=o,o.maxSizeMB=o.maxSizeMB||Number.POSITIVE_INFINITY,c=typeof o.useWebWorker!="boolean"||o.useWebWorker,delete o.useWebWorker,o.onProgress=f=>{r=f,typeof s=="function"&&s(r)},!(t instanceof Blob||t instanceof tc))return a(new Error("The file given is not an instance of Blob or File"));if(!/^image/.test(t.type))return a(new Error("The file given is not an image"));if(h=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,!c||typeof Worker!="function"||h)return ii(t,o).then((function(f){try{return i=f,u.call(this)}catch(m){return a(m)}}).bind(this),a);var l=(function(){try{return u.call(this)}catch(f){return a(f)}}).bind(this),d=function(f){try{return ii(t,o).then((function(m){try{return i=m,l()}catch(P){return a(P)}}),a)}catch(m){return a(m)}};try{return o.libURL=o.libURL||"https://cdn.jsdelivr.net/npm/browser-image-compression@2.0.2/dist/browser-image-compression.js",ac(t,o).then((function(f){try{return i=f,l()}catch{return d()}}),d)}catch{d()}function u(){try{i.name=t.name,i.lastModified=t.lastModified}catch{}try{o.preserveExif&&t.type==="image/jpeg"&&(!o.fileType||o.fileType&&o.fileType===t.type)&&(i=jr(t,i))}catch{}return n(i)}}))}Te.getDataUrlFromFile=Qr,Te.getFilefromDataUrl=wo,Te.loadImage=Kr,Te.drawImageInCanvas=Wr,Te.drawFileInCanvas=na,Te.canvasToFile=aa,Te.getExifOrientation=qr,Te.handleMaxWidthOrHeight=Xr,Te.followExifOrientation=Yr,Te.cleanupCanvasMemory=at,Te.isAutoOrientationInBrowser=Mt,Te.approximateBelowMaximumCanvasSizeOfBrowser=Jr,Te.copyExifWithoutOrientation=jr,Te.getBrowserName=Pt,Te.version="2.0.2";const Ke=t=>{if(typeof window<"u"){const e=new URLSearchParams(window.location.search).get("app");if(e)return e}return t||"pmate"};class oc{constructor(e){if(this.store=new Map,e.ttl<=0)throw new Error("Cache ttl must be greater than 0");this.ttl=e.ttl,e.cleanupInterval&&e.cleanupInterval>0&&(this.cleanupTimer=setInterval(()=>this.cleanupExpired(),e.cleanupInterval),typeof this.cleanupTimer.unref=="function"&&this.cleanupTimer.unref())}set(e,n,a){const o=Date.now()+(a??this.ttl);this.store.set(e,{value:n,expiresAt:o})}get(e){const n=this.store.get(e);if(n){if(n.expiresAt<=Date.now()){this.store.delete(e);return}return n.value}}delete(e){return this.store.delete(e)}clear(){this.store.clear()}dispose(){this.cleanupTimer&&(clearInterval(this.cleanupTimer),this.cleanupTimer=void 0),this.clear()}cleanupExpired(){const e=Date.now();this.store.forEach((n,a)=>{n.expiresAt<=e&&this.store.delete(a)})}}new RegExp([/(?:Mr|Mrs|Dr|Ms|Prof|Jr|Sr|Rev|Capt|Col|Lt|Gen|Cmdr|Sgt|Maj|Baron|Baroness|Lord|Lady|Master|Dame|Sir|Mx|Monsieur|Madame|Mademoiselle|Hon|Elder)\.(?=\s?[A-Za-z])/,/(?:https?:\/\/(?:www\.)?[A-Za-z0-9-]+\.[A-Za-z]{2,})(?:\/[A-Za-z0-9-._~:/?#[\]@!$&'()*+,;=%]*)?|[A-Za-z0-9-]+\.[A-Za-z]{2,}/,/\d{1,2}[-/]\d{1,2}[-/]\d{2,4}|\d{4}[-/]\d{2}[-/]\d{2}/,/\b(?:[01]?[0-9]|2[0-3]|00):[0-5][0-9]\s?(?:AM|PM|am|pm|a\.m\.|p\.m\.)/i,/\b\d{1,2}(?:st|nd|rd|th)\b/,/(?:\$\d{1,3}(?:,\d{3})*(?:\.\d+)?|\d+(?:,\d{3})*(?:\.\d+)?|\d+(?:,\d{3})*(?:\.\d+)?)/,/@[A-Za-z0-9_]+/,/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/,/\d+(?:[.,]\d+)?|(?:\.\d+)/,/#\w+/,/\b(?:[IVXLCDM]+)\b/,/(?:[A-Za-z0-9À-ÿ]+(?:[-'.]?[A-Za-z0-9À-ÿ]+)*)/,new RegExp("(?<=\\s)\\S+(?=\\s)")].map(t=>t.source).join("|"),"g");var Xe=(t=>(t[t.Unknown=0]="Unknown",t[t.UserLogs=1e3]="UserLogs",t[t.UserMessages=2e3]="UserMessages",t[t.UserReadMessage=2001]="UserReadMessage",t[t.Relationships=3e3]="Relationships",t[t.Rooms=4e3]="Rooms",t[t.UserContacts=5e3]="UserContacts",t[t.UserMapping=6e3]="UserMapping",t[t.Mapping=6003]="Mapping",t[t.UserMobileMapping=7e3]="UserMobileMapping",t[t.Entity_PROFILE=8e3]="Entity_PROFILE",t[t.Entity_ACCOUNT=8001]="Entity_ACCOUNT",t[t.Entity_GROUP=8002]="Entity_GROUP",t[t.UserThreads=9e3]="UserThreads",t))(Xe||{}),Zr=(t=>(t[t.Newbie=200]="Newbie",t[t.Medium=500]="Medium",t[t.Advanced=1e3]="Advanced",t[t.Professional=1500]="Professional",t))(Zr||{});const ic=["en","zh-CN","zh-TW","ko-KR","es-ES","fr-FR","ja-JP","de-DE","ar-SA","el-GR","fi-FI","fil-PH","hi-IN","pt-BR","pt-PT","ru-RU","ta-IN","uk-UA"],es=[{short:"en",full:"English"},{short:"zh-CN",full:"Chinese (Simplified)"},{short:"zh-TW",full:"Chinese (Traditional)"},{short:"ko-KR",full:"Korean"},{short:"es-ES",full:"Spanish"},{short:"fr-FR",full:"French"},{short:"ja-JP",full:"Japanese"},{short:"de-DE",full:"German"},{short:"ar-SA",full:"Arabic"},{short:"el-GR",full:"Greek"},{short:"fi-FI",full:"Finnish"},{short:"fil-PH",full:"Filipino"},{short:"hi-IN",full:"Hindi"},{short:"pt-BR",full:"Portuguese (Brazil)"},{short:"pt-PT",full:"Portuguese (Portugal)"},{short:"ru-RU",full:"Russian"},{short:"ta-IN",full:"Tamil"},{short:"uk-UA",full:"Ukrainian"}],xe="v007",rc={OPEN_AI_Alloy:{name:"alloy",provider:"openai",gender:"M"},OPEN_AI_Ash:{name:"ash",provider:"openai",gender:"M"},OPEN_AI_Ballad:{name:"ballad",provider:"openai",gender:"M",instructions:"bright, young man voice"},OPEN_AI_Coral:{name:"coral",provider:"openai",gender:"F",instructions:"sweet, cute,naive voice"},OPEN_AI_Echo:{name:"echo",provider:"openai",gender:"M"},OPEN_AI_Fable:{name:"fable",provider:"openai",gender:"F"},OPEN_AI_Onyx:{name:"onyx",provider:"openai",gender:"M"},OPEN_AI_Nova:{name:"nova",provider:"openai",gender:"F",instructions:"mature, smooth, elegant, warm voice"},OPEN_AI_Sage:{name:"sage",provider:"openai",gender:"F"},OPEN_AI_Shimmer:{name:"shimmer",provider:"openai",gender:"F"},OPEN_AI_Verse:{name:"verse",provider:"openai",gender:"M",instructions:"elderly,mysterious wizzard voice"},KOKORO_af_heart:{name:"af_heart",provider:"kokoro",gender:"F"},KOKORO_af_alloy:{name:"af_alloy",provider:"kokoro",gender:"F"},KOKORO_af_aoede:{name:"af_aoede",provider:"kokoro",gender:"F"},KOKORO_af_bella:{name:"af_bella",provider:"kokoro",gender:"F"},KOKORO_af_jessica:{name:"af_jessica",provider:"kokoro",gender:"F"},KOKORO_af_kore:{name:"af_kore",provider:"kokoro",gender:"F"},KOKORO_af_nicole:{name:"af_nicole",provider:"kokoro",gender:"F"},KOKORO_af_nova:{name:"af_nova",provider:"kokoro",gender:"F"},KOKORO_af_river:{name:"af_river",provider:"kokoro",gender:"F"},KOKORO_af_sarah:{name:"af_sarah",provider:"kokoro",gender:"F"},KOKORO_af_sky:{name:"af_sky",provider:"kokoro",gender:"F"},KOKORO_am_adam:{name:"am_adam",provider:"kokoro",gender:"M"},KOKORO_am_echo:{name:"am_echo",provider:"kokoro",gender:"M"},KOKORO_am_eric:{name:"am_eric",provider:"kokoro",gender:"M"},KOKORO_am_fenrir:{name:"am_fenrir",provider:"kokoro",gender:"M"},KOKORO_am_liam:{name:"am_liam",provider:"kokoro",gender:"M"},KOKORO_am_michael:{name:"am_michael",provider:"kokoro",gender:"M"},KOKORO_am_onyx:{name:"am_onyx",provider:"kokoro",gender:"M"},KOKORO_am_puck:{name:"am_puck",provider:"kokoro",gender:"M"},KOKORO_am_santa:{name:"am_santa",provider:"kokoro",gender:"M"}},Et=Object.entries(rc).reduce((t,[e,n])=>(t[e]={...n,key:e},t),{});class $t{static rooms(){return`rooms/${xe}`}static userThreads(e){return`users/threads/${xe}/${e}`}static userLogs(e){return`user-logs/${xe}/${e}`}static legacyUserLogs(e){return`user-logs/${e}`}static userContacts(e){return`users/contacts/${xe}/${e}`}static usersMessage(e){return`users/messages/${xe}/${e}`}static userMapping(){return`public/username-mapping/${xe}`}static userMobileMapping(){return`public/mobile-account/${xe}`}static mapping(){return`public/mapping/${xe}`}static profiles(){return`public/profiles/${xe}`}static groups(){return`public/groups/${xe}`}static relationships(){return`public/relationships/${xe}`}}Xe.UserLogs,Xe.UserMessages,Xe.Relationships,Xe.Rooms,Xe.UserContacts,Xe.Entity_GROUP,Xe.UserMapping,Xe.UserMobileMapping,Xe.Mapping,Xe.UserThreads;Et.OPEN_AI_Coral,Et.OPEN_AI_Ash,Et.OPEN_AI_Ballad,Et.OPEN_AI_Nova,Et.OPEN_AI_Verse;const ts={cn:"zh-CN",zh:"zh-CN","zh-cn":"zh-CN",zh_cn:"zh-CN",tw:"zh-TW","zh-tw":"zh-TW",kr:"ko-KR",ko:"ko-KR",jp:"ja-JP",ja:"ja-JP",de:"de-DE",fr:"fr-FR",es:"es-ES",sp:"es-ES",ar:"ar-SA",ru:"ru-RU",pt:"pt-PT","pt-br":"pt-BR",pt_br:"pt-BR","pt-pt":"pt-PT",pt_pt:"pt-PT",fi:"fi-FI",el:"el-GR",hi:"hi-IN",ta:"ta-IN",uk:"uk-UA",ua:"uk-UA",fil:"fil-PH","en-us":"en","en-gb":"en"},sc=ts;function Co(t,e="zh-CN"){if(!t)return e;const n=es.find(i=>i.short===t);if(n)return n.short;const a=t.toLowerCase(),o=ts[a];return o||(a.startsWith("zh")?"zh-CN":a.startsWith("ko")?"ko-KR":a.startsWith("ja")?"ja-JP":a.startsWith("es")?"es-ES":a.startsWith("fr")?"fr-FR":a.startsWith("de")?"de-DE":e)}const lc=(t,e)=>{if(!t)return!1;switch(e){case"zh-CN":case"zh-TW":return/^[\u4e00-\u9fff]+$/.test(t);case"ko-KR":return/^[\u3130-\u318F\uAC00-\uD7A3]+$/.test(t);case"es-ES":return/^[A-Za-zÁÉÍÓÚÜÑáéíóúüñ]+$/.test(t);default:return/^[A-Za-z]+$/.test(t)}},cc=t=>es.find(n=>n.short===t)?.full??t,uc=t=>typeof t=="object"&&t!==null&&"then"in t&&typeof t.then=="function"&&"catch"in t&&typeof t.catch=="function",dc=(t,e)=>{const n=new oc({ttl:e.ttl}),a=((...o)=>{const i=e.key(...o),r=n.get(i);if(r!==void 0)return r.value;const s=t(...o);return n.set(i,{value:s}),uc(s)&&s.catch(()=>{n.delete(i)}),s});return a.clean=()=>{n.clear()},a};var hc=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Aa={exports:{}};var ri;function fc(){return ri||(ri=1,(function(t){(function(){var e="input is invalid type",n="finalize already called",a=typeof window=="object",o=a?window:{};o.JS_SHA3_NO_WINDOW&&(a=!1);var i=!a&&typeof self=="object",r=!o.JS_SHA3_NO_NODE_JS&&typeof process=="object"&&process.versions&&process.versions.node;r?o=hc:i&&(o=self);for(var s=!o.JS_SHA3_NO_COMMON_JS&&!0&&t.exports,c=!o.JS_SHA3_NO_ARRAY_BUFFER&&typeof ArrayBuffer<"u",h="0123456789abcdef".split(""),l=[31,7936,2031616,520093696],d=[4,1024,262144,67108864],u=[1,256,65536,16777216],f=[6,1536,393216,100663296],m=[0,8,16,24],P=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648],A=[224,256,384,512],b=[128,256],E=["hex","buffer","arrayBuffer","array","digest"],T={128:168,256:136},S=o.JS_SHA3_NO_NODE_JS||!Array.isArray?function(p){return Object.prototype.toString.call(p)==="[object Array]"}:Array.isArray,M=c&&(o.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW||!ArrayBuffer.isView)?function(p){return typeof p=="object"&&p.buffer&&p.buffer.constructor===ArrayBuffer}:ArrayBuffer.isView,C=function(p){var O=typeof p;if(O==="string")return[p,!0];if(O!=="object"||p===null)throw new Error(e);if(c&&p.constructor===ArrayBuffer)return[new Uint8Array(p),!1];if(!S(p)&&!M(p))throw new Error(e);return[p,!1]},F=function(p){return C(p)[0].length===0},g=function(p){for(var O=[],V=0;V<p.length;++V)O[V]=p[V];return O},v=function(p,O,V){return function(j){return new te(p,O,p).update(j)[V]()}},k=function(p,O,V){return function(j,K){return new te(p,O,K).update(j)[V]()}},R=function(p,O,V){return function(j,K,Q,q){return L["cshake"+p].update(j,K,Q,q)[V]()}},x=function(p,O,V){return function(j,K,Q,q){return L["kmac"+p].update(j,K,Q,q)[V]()}},N=function(p,O,V,j){for(var K=0;K<E.length;++K){var Q=E[K];p[Q]=O(V,j,Q)}return p},$=function(p,O){var V=v(p,O,"hex");return V.create=function(){return new te(p,O,p)},V.update=function(j){return V.create().update(j)},N(V,v,p,O)},I=function(p,O){var V=k(p,O,"hex");return V.create=function(j){return new te(p,O,j)},V.update=function(j,K){return V.create(K).update(j)},N(V,k,p,O)},w=function(p,O){var V=T[p],j=R(p,O,"hex");return j.create=function(K,Q,q){return F(Q)&&F(q)?L["shake"+p].create(K):new te(p,O,K).bytepad([Q,q],V)},j.update=function(K,Q,q,H){return j.create(Q,q,H).update(K)},N(j,R,p,O)},y=function(p,O){var V=T[p],j=x(p,O,"hex");return j.create=function(K,Q,q){return new re(p,O,Q).bytepad(["KMAC",q],V).bytepad([K],V)},j.update=function(K,Q,q,H){return j.create(K,q,H).update(Q)},N(j,x,p,O)},U=[{name:"keccak",padding:u,bits:A,createMethod:$},{name:"sha3",padding:f,bits:A,createMethod:$},{name:"shake",padding:l,bits:b,createMethod:I},{name:"cshake",padding:d,bits:b,createMethod:w},{name:"kmac",padding:d,bits:b,createMethod:y}],L={},B=[],J=0;J<U.length;++J)for(var _=U[J],W=_.bits,G=0;G<W.length;++G){var D=_.name+"_"+W[G];if(B.push(D),L[D]=_.createMethod(W[G],_.padding),_.name!=="sha3"){var Z=_.name+W[G];B.push(Z),L[Z]=L[D]}}function te(p,O,V){this.blocks=[],this.s=[],this.padding=O,this.outputBits=V,this.reset=!0,this.finalized=!1,this.block=0,this.start=0,this.blockCount=1600-(p<<1)>>5,this.byteCount=this.blockCount<<2,this.outputBlocks=V>>5,this.extraBytes=(V&31)>>3;for(var j=0;j<50;++j)this.s[j]=0}te.prototype.update=function(p){if(this.finalized)throw new Error(n);var O=C(p);p=O[0];for(var V=O[1],j=this.blocks,K=this.byteCount,Q=p.length,q=this.blockCount,H=0,ee=this.s,X,ae;H<Q;){if(this.reset)for(this.reset=!1,j[0]=this.block,X=1;X<q+1;++X)j[X]=0;if(V)for(X=this.start;H<Q&&X<K;++H)ae=p.charCodeAt(H),ae<128?j[X>>2]|=ae<<m[X++&3]:ae<2048?(j[X>>2]|=(192|ae>>6)<<m[X++&3],j[X>>2]|=(128|ae&63)<<m[X++&3]):ae<55296||ae>=57344?(j[X>>2]|=(224|ae>>12)<<m[X++&3],j[X>>2]|=(128|ae>>6&63)<<m[X++&3],j[X>>2]|=(128|ae&63)<<m[X++&3]):(ae=65536+((ae&1023)<<10|p.charCodeAt(++H)&1023),j[X>>2]|=(240|ae>>18)<<m[X++&3],j[X>>2]|=(128|ae>>12&63)<<m[X++&3],j[X>>2]|=(128|ae>>6&63)<<m[X++&3],j[X>>2]|=(128|ae&63)<<m[X++&3]);else for(X=this.start;H<Q&&X<K;++H)j[X>>2]|=p[H]<<m[X++&3];if(this.lastByteIndex=X,X>=K){for(this.start=X-K,this.block=j[q],X=0;X<q;++X)ee[X]^=j[X];ie(ee),this.reset=!0}else this.start=X}return this},te.prototype.encode=function(p,O){var V=p&255,j=1,K=[V];for(p=p>>8,V=p&255;V>0;)K.unshift(V),p=p>>8,V=p&255,++j;return O?K.push(j):K.unshift(j),this.update(K),K.length},te.prototype.encodeString=function(p){var O=C(p);p=O[0];var V=O[1],j=0,K=p.length;if(V)for(var Q=0;Q<p.length;++Q){var q=p.charCodeAt(Q);q<128?j+=1:q<2048?j+=2:q<55296||q>=57344?j+=3:(q=65536+((q&1023)<<10|p.charCodeAt(++Q)&1023),j+=4)}else j=K;return j+=this.encode(j*8),this.update(p),j},te.prototype.bytepad=function(p,O){for(var V=this.encode(O),j=0;j<p.length;++j)V+=this.encodeString(p[j]);var K=(O-V%O)%O,Q=[];return Q.length=K,this.update(Q),this},te.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var p=this.blocks,O=this.lastByteIndex,V=this.blockCount,j=this.s;if(p[O>>2]|=this.padding[O&3],this.lastByteIndex===this.byteCount)for(p[0]=p[V],O=1;O<V+1;++O)p[O]=0;for(p[V-1]|=2147483648,O=0;O<V;++O)j[O]^=p[O];ie(j)}},te.prototype.toString=te.prototype.hex=function(){this.finalize();for(var p=this.blockCount,O=this.s,V=this.outputBlocks,j=this.extraBytes,K=0,Q=0,q="",H;Q<V;){for(K=0;K<p&&Q<V;++K,++Q)H=O[K],q+=h[H>>4&15]+h[H&15]+h[H>>12&15]+h[H>>8&15]+h[H>>20&15]+h[H>>16&15]+h[H>>28&15]+h[H>>24&15];Q%p===0&&(O=g(O),ie(O),K=0)}return j&&(H=O[K],q+=h[H>>4&15]+h[H&15],j>1&&(q+=h[H>>12&15]+h[H>>8&15]),j>2&&(q+=h[H>>20&15]+h[H>>16&15])),q},te.prototype.arrayBuffer=function(){this.finalize();var p=this.blockCount,O=this.s,V=this.outputBlocks,j=this.extraBytes,K=0,Q=0,q=this.outputBits>>3,H;j?H=new ArrayBuffer(V+1<<2):H=new ArrayBuffer(q);for(var ee=new Uint32Array(H);Q<V;){for(K=0;K<p&&Q<V;++K,++Q)ee[Q]=O[K];Q%p===0&&(O=g(O),ie(O))}return j&&(ee[Q]=O[K],H=H.slice(0,q)),H},te.prototype.buffer=te.prototype.arrayBuffer,te.prototype.digest=te.prototype.array=function(){this.finalize();for(var p=this.blockCount,O=this.s,V=this.outputBlocks,j=this.extraBytes,K=0,Q=0,q=[],H,ee;Q<V;){for(K=0;K<p&&Q<V;++K,++Q)H=Q<<2,ee=O[K],q[H]=ee&255,q[H+1]=ee>>8&255,q[H+2]=ee>>16&255,q[H+3]=ee>>24&255;Q%p===0&&(O=g(O),ie(O))}return j&&(H=Q<<2,ee=O[K],q[H]=ee&255,j>1&&(q[H+1]=ee>>8&255),j>2&&(q[H+2]=ee>>16&255)),q};function re(p,O,V){te.call(this,p,O,V)}re.prototype=new te,re.prototype.finalize=function(){return this.encode(this.outputBits,!0),te.prototype.finalize.call(this)};var ie=function(p){var O,V,j,K,Q,q,H,ee,X,ae,ce,be,ue,se,Pe,Ie,rt,me,Be,ge,Se,Ce,Le,Re,Ve,ut,Tt,dt,gt,tt,kt,Ue,Oe,Je,nt,yt,Ge,je,vn,bn,Pn,wn,Cn,An,Sn,Tn,kn,$n,Rn,xn,En,Mn,Ln,Nn,Fn,In,Un,On,Dn,Bn,Vn,Gn,jn;for(j=0;j<48;j+=2)K=p[0]^p[10]^p[20]^p[30]^p[40],Q=p[1]^p[11]^p[21]^p[31]^p[41],q=p[2]^p[12]^p[22]^p[32]^p[42],H=p[3]^p[13]^p[23]^p[33]^p[43],ee=p[4]^p[14]^p[24]^p[34]^p[44],X=p[5]^p[15]^p[25]^p[35]^p[45],ae=p[6]^p[16]^p[26]^p[36]^p[46],ce=p[7]^p[17]^p[27]^p[37]^p[47],be=p[8]^p[18]^p[28]^p[38]^p[48],ue=p[9]^p[19]^p[29]^p[39]^p[49],O=be^(q<<1|H>>>31),V=ue^(H<<1|q>>>31),p[0]^=O,p[1]^=V,p[10]^=O,p[11]^=V,p[20]^=O,p[21]^=V,p[30]^=O,p[31]^=V,p[40]^=O,p[41]^=V,O=K^(ee<<1|X>>>31),V=Q^(X<<1|ee>>>31),p[2]^=O,p[3]^=V,p[12]^=O,p[13]^=V,p[22]^=O,p[23]^=V,p[32]^=O,p[33]^=V,p[42]^=O,p[43]^=V,O=q^(ae<<1|ce>>>31),V=H^(ce<<1|ae>>>31),p[4]^=O,p[5]^=V,p[14]^=O,p[15]^=V,p[24]^=O,p[25]^=V,p[34]^=O,p[35]^=V,p[44]^=O,p[45]^=V,O=ee^(be<<1|ue>>>31),V=X^(ue<<1|be>>>31),p[6]^=O,p[7]^=V,p[16]^=O,p[17]^=V,p[26]^=O,p[27]^=V,p[36]^=O,p[37]^=V,p[46]^=O,p[47]^=V,O=ae^(K<<1|Q>>>31),V=ce^(Q<<1|K>>>31),p[8]^=O,p[9]^=V,p[18]^=O,p[19]^=V,p[28]^=O,p[29]^=V,p[38]^=O,p[39]^=V,p[48]^=O,p[49]^=V,se=p[0],Pe=p[1],Tn=p[11]<<4|p[10]>>>28,kn=p[10]<<4|p[11]>>>28,dt=p[20]<<3|p[21]>>>29,gt=p[21]<<3|p[20]>>>29,Bn=p[31]<<9|p[30]>>>23,Vn=p[30]<<9|p[31]>>>23,wn=p[40]<<18|p[41]>>>14,Cn=p[41]<<18|p[40]>>>14,Je=p[2]<<1|p[3]>>>31,nt=p[3]<<1|p[2]>>>31,Ie=p[13]<<12|p[12]>>>20,rt=p[12]<<12|p[13]>>>20,$n=p[22]<<10|p[23]>>>22,Rn=p[23]<<10|p[22]>>>22,tt=p[33]<<13|p[32]>>>19,kt=p[32]<<13|p[33]>>>19,Gn=p[42]<<2|p[43]>>>30,jn=p[43]<<2|p[42]>>>30,Nn=p[5]<<30|p[4]>>>2,Fn=p[4]<<30|p[5]>>>2,yt=p[14]<<6|p[15]>>>26,Ge=p[15]<<6|p[14]>>>26,me=p[25]<<11|p[24]>>>21,Be=p[24]<<11|p[25]>>>21,xn=p[34]<<15|p[35]>>>17,En=p[35]<<15|p[34]>>>17,Ue=p[45]<<29|p[44]>>>3,Oe=p[44]<<29|p[45]>>>3,Re=p[6]<<28|p[7]>>>4,Ve=p[7]<<28|p[6]>>>4,In=p[17]<<23|p[16]>>>9,Un=p[16]<<23|p[17]>>>9,je=p[26]<<25|p[27]>>>7,vn=p[27]<<25|p[26]>>>7,ge=p[36]<<21|p[37]>>>11,Se=p[37]<<21|p[36]>>>11,Mn=p[47]<<24|p[46]>>>8,Ln=p[46]<<24|p[47]>>>8,An=p[8]<<27|p[9]>>>5,Sn=p[9]<<27|p[8]>>>5,ut=p[18]<<20|p[19]>>>12,Tt=p[19]<<20|p[18]>>>12,On=p[29]<<7|p[28]>>>25,Dn=p[28]<<7|p[29]>>>25,bn=p[38]<<8|p[39]>>>24,Pn=p[39]<<8|p[38]>>>24,Ce=p[48]<<14|p[49]>>>18,Le=p[49]<<14|p[48]>>>18,p[0]=se^~Ie&me,p[1]=Pe^~rt&Be,p[10]=Re^~ut&dt,p[11]=Ve^~Tt&gt,p[20]=Je^~yt&je,p[21]=nt^~Ge&vn,p[30]=An^~Tn&$n,p[31]=Sn^~kn&Rn,p[40]=Nn^~In&On,p[41]=Fn^~Un&Dn,p[2]=Ie^~me&ge,p[3]=rt^~Be&Se,p[12]=ut^~dt&tt,p[13]=Tt^~gt&kt,p[22]=yt^~je&bn,p[23]=Ge^~vn&Pn,p[32]=Tn^~$n&xn,p[33]=kn^~Rn&En,p[42]=In^~On&Bn,p[43]=Un^~Dn&Vn,p[4]=me^~ge&Ce,p[5]=Be^~Se&Le,p[14]=dt^~tt&Ue,p[15]=gt^~kt&Oe,p[24]=je^~bn&wn,p[25]=vn^~Pn&Cn,p[34]=$n^~xn&Mn,p[35]=Rn^~En&Ln,p[44]=On^~Bn&Gn,p[45]=Dn^~Vn&jn,p[6]=ge^~Ce&se,p[7]=Se^~Le&Pe,p[16]=tt^~Ue&Re,p[17]=kt^~Oe&Ve,p[26]=bn^~wn&Je,p[27]=Pn^~Cn&nt,p[36]=xn^~Mn&An,p[37]=En^~Ln&Sn,p[46]=Bn^~Gn&Nn,p[47]=Vn^~jn&Fn,p[8]=Ce^~se&Ie,p[9]=Le^~Pe&rt,p[18]=Ue^~Re&ut,p[19]=Oe^~Ve&Tt,p[28]=wn^~Je&yt,p[29]=Cn^~nt&Ge,p[38]=Mn^~An&Tn,p[39]=Ln^~Sn&kn,p[48]=Gn^~Nn&In,p[49]=jn^~Fn&Un,p[0]^=P[j],p[1]^=P[j+1]};if(s)t.exports=L;else for(J=0;J<B.length;++J)o[B[J]]=L[B[J]]})()})(Aa)),Aa.exports}fc();class de{constructor(e,n){this.type=e,e===0&&(this.value=n)}static Just(e){return new de(0,e)}static Nothing(){return new de(1)}isJust(){return this.type===0}isNothing(){return this.type===1}map(e,n){return this.isJust()?de.Just(e(this.value)):n!==void 0?de.Just(n):de.Nothing()}async mapAsync(e){if(this.isNothing())return de.Nothing();try{const n=await e(this.value);return ns(n)?n:de.Just(n)}catch(n){return console.error(n),de.Nothing()}}withDefault(e){return this.isJust()?this.value===void 0?de.Just(e):this:de.Just(e)}mapWith(...e){const n=e.slice(0,-1),a=e[e.length-1];if(this.isJust()&&n.every(o=>o.isJust())){const o=n.map(r=>r.value),i=a(this.value,...o);return de.Just(i)}return de.Nothing()}async mapWithAync(...e){const n=e.slice(0,-1),a=e[e.length-1];if(this.isJust()&&n.every(o=>o.isJust())){const o=n.map(i=>i.value);try{const i=await a(this.value,...o);return de.Just(i)}catch{return de.Nothing()}}return de.Nothing()}unwrapWith(e,n){return this.isJust()?e(this.value):n}unwrap(){return this.value}toBoolean(){return this.isNothing()?!1:!!this.value}unwrapOr(e){return this.isJust()?this.unwrap():e}filterUndefined(){return this.isNothing()||this.value===void 0?de.Nothing():de.Just(this.value)}}function ns(t){return t instanceof de}function _t(t){let e=t.length;for(;--e>=0;)t[e]=0}const pc=3,mc=258,as=29,gc=256,yc=gc+1+as,os=30,vc=512,bc=new Array((yc+2)*2);_t(bc);const Pc=new Array(os*2);_t(Pc);const wc=new Array(vc);_t(wc);const Cc=new Array(mc-pc+1);_t(Cc);const Ac=new Array(as);_t(Ac);const Sc=new Array(os);_t(Sc);try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{}const _a=new Uint8Array(256);for(let t=0;t<256;t++)_a[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;_a[254]=_a[254]=1;class Tc{constructor(){this.topics=new Map,this.allHandlers=[]}getTopic(e){return this.topics.get(e)||this.topics.set(e,[]),this.topics.get(e)}on(e,n){return this.getTopic(e).push(n),()=>{this.topics.set(e,this.getTopic(e).filter(o=>o!==n))}}onAll(e){return this.allHandlers.push(e),()=>{this.allHandlers=this.allHandlers.filter(n=>n!==e)}}emit(e,n){const a={topic:e,body:n};this.getTopic(e).forEach(o=>{o(a.body)}),this.allHandlers.forEach(o=>{o(a)})}clearListeners(e){if(typeof e<"u"){this.topics.delete(e);return}this.topics.clear(),this.allHandlers=[]}}class le{constructor(e,n,a,o){this.flags={},this.extra={},this.type=e,this.value=n,this.error=a,this.loading=o}static Just(e){return new le("Just",e,void 0,!1)}static Nothing(){return new le("Nothing",void 0,void 0,!1)}static Fail(e){return new le("Fail",void 0,e,!1)}static Pending(e){return new le("Pending",e,void 0,!0)}isJust(){return this.type==="Just"}isNothing(){return this.type==="Nothing"}isFail(){return this.type==="Fail"}isPending(){return this.type==="Pending"}hasValue(){return this.isJust()||this.value}map(e){if(this.isJust())try{const n=e(this.value);return le.Just(n)}catch(n){return le.Fail(n)}if(this.isFail())return le.Fail(this.error);if(this.isNothing())return le.Nothing();if(this.value!==void 0)try{const n=e(this.value);return le.Pending(n)}catch(n){return le.Fail(n)}return le.Pending()}async mapAsync(e){if(this.isJust())try{const n=await e(this.value);return le.Just(n)}catch(n){return le.Fail(n)}if(this.isFail())return le.Fail(this.error);if(this.isNothing())return le.Nothing();if(this.value!==void 0)try{const n=await e(this.value);return le.Pending(n)}catch(n){return le.Fail(n)}return le.Pending()}unwrap(){if(this.isJust())return this.value;throw this.isNothing()?new Error("Cannot unwrap Nothing"):this.isFail()?new Error(`Cannot unwrap Fail: ${this.error}`):new Error("Cannot unwrap Pending")}unwrapOr(e){return this.isJust()?this.value:this.isPending()&&this.value?this.value:e}setFlag(e){return this.flags[e]=!0,this}hasFlag(e){return this.flags[e]||!1}setExtra(e,n){return this.extra[e]=n,this}getExtra(e){return this.extra[e]}}const kc=t=>t instanceof le;async function $c(t){t=t.trim();const n=new TextEncoder().encode(t),a=await crypto.subtle.digest("SHA-1",n);return Array.from(new Uint8Array(a)).map(r=>r.toString(16).padStart(2,"0")).join("")}const Rc=(t,e,n)=>{const a=new Map,o=new Map;return(async(...i)=>{const r=i.map(u=>u instanceof de?u.map(f=>JSON.stringify(f)).unwrapOr(""):JSON.stringify(u)).join("--"),s=await $c(r),c=`${e}:${s}`,h=a.get(c);if(h&&h.expiry>Date.now())return h.value;const l=o.get(c);if(l)return l;const d=(async()=>{try{const u=await t(...i);return u&&a.set(c,{value:u,expiry:Date.now()+n}),u}finally{setTimeout(()=>o.delete(c),50)}})();return o.set(c,d),d})},xc=async t=>{if(ns(t)){if(t.isNothing())return!1;t=t.unwrap()}try{return(await fetch(t,{method:"HEAD"})).ok}catch{return!1}},Ec=Rc(xc,"link",3600*1e3);class Dt{static async get(e){const n=await fetch(e);return n.ok?(await n.json()).data??null:null}static async post(e,n){const o=await(await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)})).json();if(!o.success)throw o;return o.data}static async put(e,n){const o=await(await fetch(e,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)})).json();if(!o.success)throw o;return de.Just(o.data)}static async getFile(e,n="json"){try{const a=await fetch(e);if(n==="log"){if(!a.ok)return de.Nothing();try{const i=(await a.text()).split(`
21
- `).filter(Boolean).map(r=>JSON.parse(r));return de.Just(i)}catch{return de.Nothing()}}return a.ok?n==="text"?a.text():await a.json():null}catch(a){return console.warn(a),null}}static exists(e){return Ec(e)}}const Sa="https://auth-api-v2.pmate.chat",Mc="https://fc-uploader.skedo.cn".replace(/\/+$/,""),Lc={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",webp:"image/webp",gif:"image/gif",svg:"image/svg+xml",ico:"image/x-icon",bmp:"image/bmp",pdf:"application/pdf",mobi:"application/x-mobipocket-ebook",epub:"application/epub+zip",txt:"text/plain",json:"application/json",mp3:"audio/mpeg",wav:"audio/wav",webm:"audio/webm",weba:"audio/webm",m4a:"audio/mp4"};class _e{static async createProfile(e){return Dt.post(`${Sa}/profile`,e)}static async updateProfile(e){await Dt.put(`${Sa}/profile`,e)}static async getProfiles(e){const n={app:Ke(e.app),account:e.accountId};return _e.getProfilesByScope(n)}static async getProfilesByScope(e){const n=new URLSearchParams({app:e.app,account:e.account}).toString();return await Dt.get(`${Sa}/profiles?${n}`)||[]}static async updateAvatar(e){return _e.uploadToUploaderService("/avatar",e)}static async uploadMsgImage(e){return _e.uploadToUploaderService("/msg",e)}static async updateMyVoice(e){return _e.uploadToUploaderService("/my-voice",{...e,filename:"voice.wav",contentType:"audio/wav"})}static async uploadUserFile(e){return _e.uploadToUploaderService("/file",e)}static async uploadToUploaderService(e,n){const{filename:a,...o}=n,i=a??"upload",r=i.split(".").pop()?.toLowerCase()??"",s=n.contentType??Lc[r],c=await fetch(`${Mc}${e}`,{method:"POST",headers:{"Content-Type":"application/json",...s?{"x-file-content-type":s}:{}},body:JSON.stringify({...o,filename:i})});if(!c.ok)throw new Error("Upload failed");const h=await c.json();if(!h.data)throw new Error("Upload failed");return h.data}}const Nc=t=>new Promise((e,n)=>{const a=new FileReader;a.onloadend=()=>{const o=a.result;if(typeof o!="string"){n(new Error("Failed to read file"));return}const[,i]=o.split(",");if(!i){n(new Error("Failed to parse base64 data"));return}e(i)},a.onerror=()=>{n(new Error("Failed to read file"))},a.readAsDataURL(t)}),Fc=we.atom(null,async(t,e,{file:n,userId:a})=>{const o=await Te(n,{maxSizeMB:1,maxWidthOrHeight:128,useWebWorker:!0}),i=await Nc(o);return _e.updateAvatar({user:a,base64:i,filename:o.name})});var Ee=(t=>(t.Idle="idle",t.Checking="checking",t.Authenticated="authenticated",t.Unauthenticated="unauthenticated",t.ProfileUninitialized="profile-uninitialized",t.ProfileInitializing="profile-initializing",t.ProfileReady="profile-ready",t.LoggingIn="logging-in",t.LoggingOut="logging-out",t.Error="error",t))(Ee||{});const Ic={state:Ee.Idle,profiles:[],profile:null,accountId:null,account:null,error:null},ga=we.atom(Ic),Uc=we.atom(t=>t(ga).account??void 0),ya=we.atom(t=>t(ga).profile??void 0),Ao="pmate-auth-token",So=()=>typeof localStorage<"u",Yt=()=>{if(!So())return null;try{const t=localStorage.getItem(Ao);if(!t)return null;const e=JSON.parse(t);return typeof e=="string"?e:null}catch{return null}},Oc=t=>{if(So())try{localStorage.setItem(Ao,JSON.stringify(t))}catch{}},Dc=()=>{if(So())try{localStorage.removeItem(Ao)}catch{}},Bc="https://auth-api-v2.pmate.chat";class Ze{static sessionCached=dc(e=>Ze.authRequest("/session",{method:"GET",token:e}),{ttl:3e3,key:e=>e??Yt()??"default"});static async vcode(e){return Ze.authRequest("/vcode",{method:"POST",body:JSON.stringify(e)})}static async login(e){return Ze.authRequest("/login",{method:"POST",body:JSON.stringify(e),token:e.nonce})}static async logout(e){return Ze.authRequest("/logout",{method:"POST",token:e})}static async session(e){return Ze.sessionCached(e)}static async authRequest(e,n){const{token:a,headers:o,...i}=n,r=a??Yt(),s=await fetch(`${Bc.replace(/\/+$/,"")}${e}`,{credentials:"include",...i,headers:{"Content-Type":"application/json",...r?{Authorization:`Bearer ${r}`}:{},...o??{}}}),c=await s.json();if(!s.ok||!c.success)throw c;return c.data}}const si="https://api-global-qa.skedo.cn/account";class rn{static async entity(e){return await Dt.get(`${si}/entity/${e}`)||null}static getProfile(e){return rn.entity(e)}static getGroup(e){return rn.entity(e)}static async entities(e){if(!e.length)return{};const n=`${si}/entities`;return(await Dt.post(n,{ids:e})||[]).reduce((o,i,r)=>{if(!i)return o;const s=i.id??e[r];return s&&(o[s]=i),o},{})}}const is="account-state",rs=()=>typeof localStorage<"u",Vc=t=>{if(rs())try{localStorage.setItem(is,JSON.stringify(t))}catch{}},Gc=()=>{if(rs())try{localStorage.removeItem(is)}catch{}},To="selected-profile",ko=()=>typeof localStorage<"u",li=()=>{if(!ko())return null;try{const t=localStorage.getItem(To);if(!t)return null;const e=JSON.parse(t);return typeof e=="string"?e:null}catch{return null}},jc=t=>{if(ko())try{localStorage.setItem(To,JSON.stringify(t))}catch{}},zc=()=>{if(ko())try{localStorage.removeItem(To)}catch{}};var ss=(t=>(t.StateChange="stateChange",t))(ss||{});class De extends Tc{constructor(e){super(),this.app=e}static instances=new Map;static get(e){const n=Ke(e),a=De.instances.get(n);if(a)return a;const o=new De(n);return De.instances.set(n,o),o}async session(){try{return await Ze.session()}catch{return null}}async login(){this.transition(Ee.LoggingIn,null);try{const e=await Ze.session();if(!e)throw new Error("Session not found");const n=Date.parse(e.issuedAt),a={accountId:e.identity.accountId,token:"",signTime:Number.isNaN(n)?Date.now():n,app:this.app};this.setAccountState(a),this.transition(Ee.Authenticated,null),this.transition(Ee.ProfileInitializing,null);const o=await this.prepareProfiles(a);return this.transition(o.length>0?Ee.ProfileReady:Ee.ProfileUninitialized,null),a}catch(e){const n=e instanceof Error?e:new Error("Login failed");throw this.transition(Ee.Error,n),n}}hasUrlSession(){return typeof window>"u"?!1:new URLSearchParams(window.location.search).has("sessionId")}async loginUrlSessionOverride(){if(typeof window>"u")return this.login();const e=new URLSearchParams(window.location.search),n=e.get("sessionId");n&&this.setAuthToken(n);const a=await this.login();if(n){e.delete("sessionId");const o=e.toString(),i=`${window.location.pathname}${o?`?${o}`:""}${window.location.hash}`;window.history.replaceState(null,"",i)}return a}async logout(){this.transition(Ee.LoggingOut,null);try{await Ze.logout(Yt()||void 0)}catch{}finally{this.clearSession(),this.transition(Ee.Unauthenticated,null)}}async getSnapshot(){const e=await this.getAccountState();if(!e)return{state:Ee.Unauthenticated,account:null,accountId:null,error:null,profiles:[],profile:null};const n=await this.getProfiles(),a=await this.getSelectedProfile(n);return{state:n.length>0?Ee.ProfileReady:Ee.ProfileUninitialized,account:e,accountId:e.accountId??null,error:null,profiles:n,profile:a}}transition(e,n){this.emit("stateChange")}async getAccountState(){const e=await this.session();if(!e)return null;const n=Date.parse(e.issuedAt);return{accountId:e.identity.accountId,token:Yt()||"",signTime:Number.isNaN(n)?Date.now():n,app:this.app}}setAccountState(e){Vc(e)}clearAccountState(){Gc()}async getSelectedProfile(e){const n=li();return n?(e??await this.getProfiles()).find(o=>o.id===n)??null:null}setSelectedProfile(e){const n=typeof e=="string"?e:e.id;jc(n),this.emit("stateChange")}clearSelectedProfile(){zc(),this.emit("stateChange")}async getProfiles(){const e=await this.getAccountState();if(!e)return[];try{return await this.prepareProfiles(e)}catch{return[]}}clearProfiles(){this.emit("stateChange")}clearSession(){this.clearAccountState(),this.clearSelectedProfile(),this.clearProfiles(),this.clearAuthToken()}getAuthToken(){return Yt()}setAuthToken(e){Oc(e)}clearAuthToken(){Dc()}async getLocalProfile(){const e=await this.getAccountState(),n=await this.getSelectedProfile();if(!e||!n)return null;const{id:a,...o}=n;return{...e,...o,id:a}}async getCurrentPeer(){const e=await this.getLocalProfile();if(e)return{...e,gender:e.gender??"",email:e.email||"",isOnline:!0}}async createProfile(e){const n=await this.getAccountState();if(!n)throw new Error("Account info is missing for profile creation");const a=await _e.createProfile({app:Ke(n.app),account:n.accountId,nickName:e.nickName,learningTargetLang:e.learningTargetLang});return await this.prepareProfiles(n),await this.getSelectedProfile()||this.setSelectedProfile(a),a}async prepareProfiles(e){const n=await _e.getProfiles(e),a=li();if(a&&n.some(i=>i.id===a))return n;const o=n[0];return o?this.setSelectedProfile(o):this.clearSelectedProfile(),n}}const _c=we.atom(null,(t,e,n)=>{const a=Ke(n.app);De.get(a).setSelectedProfile(n)}),ls=we.atom({}),Hc=we.atom(null,async(t,e,{nickName:n})=>{const a=t(ls),i=await De.get(Ke()).getAccountState();if(!i)throw new Error("Account info is missing for profile creation");return De.get(Ke(i.app)).createProfile({nickName:n,learningTargetLang:a.learningTargetLang})}),Qc={};let Kc=0;function Zt(t,e){const n=`atom${++Kc}`,a={toString(){return(Qc?"production":void 0)!=="production"&&this.debugLabel?n+":"+this.debugLabel:n}};return typeof t=="function"?a.read=t:(a.init=t,a.read=Jc,a.write=Wc),e&&(a.write=e),a}function Jc(t){return t(this)}function Wc(t,e,n){return e(this,typeof n=="function"?n(t(this)):n)}const sn={},qc=t=>typeof t?.then=="function";function Xc(t=()=>{try{return window.localStorage}catch(n){(sn?"production":void 0)!=="production"&&typeof window<"u"&&console.warn(n);return}},e){var n;let a,o;const i={getItem:(c,h)=>{var l,d;const u=m=>{if(m=m||"",a!==m){try{o=JSON.parse(m,e?.reviver)}catch{return h}a=m}return o},f=(d=(l=t())==null?void 0:l.getItem(c))!=null?d:null;return qc(f)?f.then(u):u(f)},setItem:(c,h)=>{var l;return(l=t())==null?void 0:l.setItem(c,JSON.stringify(h,void 0))},removeItem:c=>{var h;return(h=t())==null?void 0:h.removeItem(c)}},r=c=>(h,l,d)=>c(h,u=>{let f;try{f=JSON.parse(u||"")}catch{f=d}l(f)});let s;try{s=(n=t())==null?void 0:n.subscribe}catch{}return!s&&typeof window<"u"&&typeof window.addEventListener=="function"&&window.Storage&&(s=(c,h)=>{if(!(t()instanceof window.Storage))return()=>{};const l=d=>{d.storageArea===t()&&d.key===c&&h(d.newValue)};return window.addEventListener("storage",l),()=>{window.removeEventListener("storage",l)}}),s&&(i.subscribe=r(s)),i}Xc();const ci=(t,e,n)=>(e.has(n)?e:e.set(n,t())).get(n),Yc=new WeakMap,Zc=(t,e,n)=>{const a=ci(()=>new WeakMap,Yc,e);return ci(t,a,n)},eu=t=>typeof t?.then=="function",tu=()=>{};function nu(t,e=tu){return Zc(()=>{const n=new WeakMap,a=new WeakMap,o=Zt([()=>{},0]);o.INTERNAL_onInit=r=>{r.set(o,([,s])=>[()=>r.set(o,([c,h])=>[c,h+1]),s])},(sn?"production":void 0)!=="production"&&(o.debugPrivate=!0);const i=Zt(r=>{const[s]=r(o);let c;try{c=r(i)}catch{}const h=r(t);if(!eu(h))return{v:h};if(h!==c?.p&&h.then(l=>{a.set(h,l),s()},l=>{n.set(h,l),s()}),n.has(h))throw n.get(h);return a.has(h)?{p:h,v:a.get(h)}:c&&"v"in c?{p:h,f:e(c.v),v:c.v}:{p:h,f:e()}});return i.init=void 0,(sn?"production":void 0)!=="production"&&(i.debugPrivate=!0),Zt(r=>{const s=r(i);return"f"in s?s.f:s.v},(r,s,...c)=>s(t,...c))},t,e)}function au(t,e){const n=Zt(0);return(sn?"production":void 0)!=="production"&&(n.debugPrivate=!0),Zt((a,o)=>(a(n),t(a,o)),(a,o,...i)=>{if(i.length===0)o(n,r=>r+1);else if((sn?"production":void 0)!=="production")throw new Error("refresh must be called without arguments")})}const cs=bo.atomFamily(t=>au(async()=>{if(!t)return null;try{return await rn.entity(t)}catch{return null}}));function us(t){var e,n,a="";if(typeof t=="string"||typeof t=="number")a+=t;else if(typeof t=="object")if(Array.isArray(t)){var o=t.length;for(e=0;e<o;e++)t[e]&&(n=us(t[e]))&&(a&&(a+=" "),a+=n)}else for(n in t)t[n]&&(a&&(a+=" "),a+=n);return a}function Gt(){for(var t,e,n=0,a="",o=arguments.length;n<o;n++)(t=arguments[n])&&(e=us(t))&&(a&&(a+=" "),a+=e);return a}const ds=z.createContext({});function ou(t){const e=z.useRef(null);return e.current===null&&(e.current=t()),e.current}const $o=typeof window<"u",iu=$o?z.useLayoutEffect:z.useEffect,Ro=z.createContext(null);function xo(t,e){t.indexOf(e)===-1&&t.push(e)}function Eo(t,e){const n=t.indexOf(e);n>-1&&t.splice(n,1)}const st=(t,e,n)=>n>e?e:n<t?t:n;function Ha(t,e){return e?`${t}. For more information and steps for solving, visit https://motion.dev/troubleshooting/${e}`:t}let Ht=()=>{},lt=()=>{};process.env.NODE_ENV!=="production"&&(Ht=(t,e,n)=>{!t&&typeof console<"u"&&console.warn(Ha(e,n))},lt=(t,e,n)=>{if(!t)throw new Error(Ha(e,n))});const ct={},hs=t=>/^-?(?:\d+(?:\.\d+)?|\.\d+)$/u.test(t);function fs(t){return typeof t=="object"&&t!==null}const ps=t=>/^0[^.\s]+$/u.test(t);function Mo(t){let e;return()=>(e===void 0&&(e=t()),e)}const Qe=t=>t,ru=(t,e)=>n=>e(t(n)),pn=(...t)=>t.reduce(ru),ln=(t,e,n)=>{const a=e-t;return a===0?1:(n-t)/a};class Lo{constructor(){this.subscriptions=[]}add(e){return xo(this.subscriptions,e),()=>Eo(this.subscriptions,e)}notify(e,n,a){const o=this.subscriptions.length;if(o)if(o===1)this.subscriptions[0](e,n,a);else for(let i=0;i<o;i++){const r=this.subscriptions[i];r&&r(e,n,a)}}getSize(){return this.subscriptions.length}clear(){this.subscriptions.length=0}}const et=t=>t*1e3,He=t=>t/1e3;function ms(t,e){return e?t*(1e3/e):0}const ui=new Set;function No(t,e,n){t||ui.has(e)||(console.warn(Ha(e,n)),ui.add(e))}const gs=(t,e,n)=>(((1-3*n+3*e)*t+(3*n-6*e))*t+3*e)*t,su=1e-7,lu=12;function cu(t,e,n,a,o){let i,r,s=0;do r=e+(n-e)/2,i=gs(r,a,o)-t,i>0?n=r:e=r;while(Math.abs(i)>su&&++s<lu);return r}function mn(t,e,n,a){if(t===e&&n===a)return Qe;const o=i=>cu(i,0,1,t,n);return i=>i===0||i===1?i:gs(o(i),e,a)}const ys=t=>e=>e<=.5?t(2*e)/2:(2-t(2*(1-e)))/2,vs=t=>e=>1-t(1-e),bs=mn(.33,1.53,.69,.99),Fo=vs(bs),Ps=ys(Fo),ws=t=>(t*=2)<1?.5*Fo(t):.5*(2-Math.pow(2,-10*(t-1))),Io=t=>1-Math.sin(Math.acos(t)),Cs=vs(Io),As=ys(Io),uu=mn(.42,0,1,1),du=mn(0,0,.58,1),Ss=mn(.42,0,.58,1),hu=t=>Array.isArray(t)&&typeof t[0]!="number",Ts=t=>Array.isArray(t)&&typeof t[0]=="number",di={linear:Qe,easeIn:uu,easeInOut:Ss,easeOut:du,circIn:Io,circInOut:As,circOut:Cs,backIn:Fo,backInOut:Ps,backOut:bs,anticipate:ws},fu=t=>typeof t=="string",hi=t=>{if(Ts(t)){lt(t.length===4,"Cubic bezier arrays must contain four numerical values.","cubic-bezier-length");const[e,n,a,o]=t;return mn(e,n,a,o)}else if(fu(t))return lt(di[t]!==void 0,`Invalid easing type '${t}'`,"invalid-easing-type"),di[t];return t},zn=["setup","read","resolveKeyframes","preUpdate","update","preRender","render","postRender"];function pu(t,e){let n=new Set,a=new Set,o=!1,i=!1;const r=new WeakSet;let s={delta:0,timestamp:0,isProcessing:!1};function c(l){r.has(l)&&(h.schedule(l),t()),l(s)}const h={schedule:(l,d=!1,u=!1)=>{const m=u&&o?n:a;return d&&r.add(l),m.has(l)||m.add(l),l},cancel:l=>{a.delete(l),r.delete(l)},process:l=>{if(s=l,o){i=!0;return}o=!0,[n,a]=[a,n],n.forEach(c),n.clear(),o=!1,i&&(i=!1,h.process(l))}};return h}const mu=40;function ks(t,e){let n=!1,a=!0;const o={delta:0,timestamp:0,isProcessing:!1},i=()=>n=!0,r=zn.reduce((T,S)=>(T[S]=pu(i),T),{}),{setup:s,read:c,resolveKeyframes:h,preUpdate:l,update:d,preRender:u,render:f,postRender:m}=r,P=()=>{const T=ct.useManualTiming?o.timestamp:performance.now();n=!1,ct.useManualTiming||(o.delta=a?1e3/60:Math.max(Math.min(T-o.timestamp,mu),1)),o.timestamp=T,o.isProcessing=!0,s.process(o),c.process(o),h.process(o),l.process(o),d.process(o),u.process(o),f.process(o),m.process(o),o.isProcessing=!1,n&&e&&(a=!1,t(P))},A=()=>{n=!0,a=!0,o.isProcessing||t(P)};return{schedule:zn.reduce((T,S)=>{const M=r[S];return T[S]=(C,F=!1,g=!1)=>(n||A(),M.schedule(C,F,g)),T},{}),cancel:T=>{for(let S=0;S<zn.length;S++)r[zn[S]].cancel(T)},state:o,steps:r}}const{schedule:he,cancel:ft,state:Ae,steps:Ta}=ks(typeof requestAnimationFrame<"u"?requestAnimationFrame:Qe,!0);let Jn;function gu(){Jn=void 0}const Fe={now:()=>(Jn===void 0&&Fe.set(Ae.isProcessing||ct.useManualTiming?Ae.timestamp:performance.now()),Jn),set:t=>{Jn=t,queueMicrotask(gu)}},$s=t=>e=>typeof e=="string"&&e.startsWith(t),Rs=$s("--"),yu=$s("var(--"),Uo=t=>yu(t)?vu.test(t.split("/*")[0].trim()):!1,vu=/var\(--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)$/iu,Qt={test:t=>typeof t=="number",parse:parseFloat,transform:t=>t},cn={...Qt,transform:t=>st(0,1,t)},_n={...Qt,default:1},en=t=>Math.round(t*1e5)/1e5,Oo=/-?(?:\d+(?:\.\d+)?|\.\d+)/gu;function bu(t){return t==null}const Pu=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))$/iu,Do=(t,e)=>n=>!!(typeof n=="string"&&Pu.test(n)&&n.startsWith(t)||e&&!bu(n)&&Object.prototype.hasOwnProperty.call(n,e)),xs=(t,e,n)=>a=>{if(typeof a!="string")return a;const[o,i,r,s]=a.match(Oo);return{[t]:parseFloat(o),[e]:parseFloat(i),[n]:parseFloat(r),alpha:s!==void 0?parseFloat(s):1}},wu=t=>st(0,255,t),ka={...Qt,transform:t=>Math.round(wu(t))},wt={test:Do("rgb","red"),parse:xs("red","green","blue"),transform:({red:t,green:e,blue:n,alpha:a=1})=>"rgba("+ka.transform(t)+", "+ka.transform(e)+", "+ka.transform(n)+", "+en(cn.transform(a))+")"};function Cu(t){let e="",n="",a="",o="";return t.length>5?(e=t.substring(1,3),n=t.substring(3,5),a=t.substring(5,7),o=t.substring(7,9)):(e=t.substring(1,2),n=t.substring(2,3),a=t.substring(3,4),o=t.substring(4,5),e+=e,n+=n,a+=a,o+=o),{red:parseInt(e,16),green:parseInt(n,16),blue:parseInt(a,16),alpha:o?parseInt(o,16)/255:1}}const Qa={test:Do("#"),parse:Cu,transform:wt.transform},gn=t=>({test:e=>typeof e=="string"&&e.endsWith(t)&&e.split(" ").length===1,parse:parseFloat,transform:e=>`${e}${t}`}),ht=gn("deg"),it=gn("%"),Y=gn("px"),Au=gn("vh"),Su=gn("vw"),fi={...it,parse:t=>it.parse(t)/100,transform:t=>it.transform(t*100)},Lt={test:Do("hsl","hue"),parse:xs("hue","saturation","lightness"),transform:({hue:t,saturation:e,lightness:n,alpha:a=1})=>"hsla("+Math.round(t)+", "+it.transform(en(e))+", "+it.transform(en(n))+", "+en(cn.transform(a))+")"},ye={test:t=>wt.test(t)||Qa.test(t)||Lt.test(t),parse:t=>wt.test(t)?wt.parse(t):Lt.test(t)?Lt.parse(t):Qa.parse(t),transform:t=>typeof t=="string"?t:t.hasOwnProperty("red")?wt.transform(t):Lt.transform(t),getAnimatableNone:t=>{const e=ye.parse(t);return e.alpha=0,ye.transform(e)}},Tu=/(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))/giu;function ku(t){return isNaN(t)&&typeof t=="string"&&(t.match(Oo)?.length||0)+(t.match(Tu)?.length||0)>0}const Es="number",Ms="color",$u="var",Ru="var(",pi="${}",xu=/var\s*\(\s*--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)|#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\)|-?(?:\d+(?:\.\d+)?|\.\d+)/giu;function un(t){const e=t.toString(),n=[],a={color:[],number:[],var:[]},o=[];let i=0;const s=e.replace(xu,c=>(ye.test(c)?(a.color.push(i),o.push(Ms),n.push(ye.parse(c))):c.startsWith(Ru)?(a.var.push(i),o.push($u),n.push(c)):(a.number.push(i),o.push(Es),n.push(parseFloat(c))),++i,pi)).split(pi);return{values:n,split:s,indexes:a,types:o}}function Ls(t){return un(t).values}function Ns(t){const{split:e,types:n}=un(t),a=e.length;return o=>{let i="";for(let r=0;r<a;r++)if(i+=e[r],o[r]!==void 0){const s=n[r];s===Es?i+=en(o[r]):s===Ms?i+=ye.transform(o[r]):i+=o[r]}return i}}const Eu=t=>typeof t=="number"?0:ye.test(t)?ye.getAnimatableNone(t):t;function Mu(t){const e=Ls(t);return Ns(t)(e.map(Eu))}const pt={test:ku,parse:Ls,createTransformer:Ns,getAnimatableNone:Mu};function $a(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+(e-t)*6*n:n<1/2?e:n<2/3?t+(e-t)*(2/3-n)*6:t}function Lu({hue:t,saturation:e,lightness:n,alpha:a}){t/=360,e/=100,n/=100;let o=0,i=0,r=0;if(!e)o=i=r=n;else{const s=n<.5?n*(1+e):n+e-n*e,c=2*n-s;o=$a(c,s,t+1/3),i=$a(c,s,t),r=$a(c,s,t-1/3)}return{red:Math.round(o*255),green:Math.round(i*255),blue:Math.round(r*255),alpha:a}}function oa(t,e){return n=>n>0?e:t}const pe=(t,e,n)=>t+(e-t)*n,Ra=(t,e,n)=>{const a=t*t,o=n*(e*e-a)+a;return o<0?0:Math.sqrt(o)},Nu=[Qa,wt,Lt],Fu=t=>Nu.find(e=>e.test(t));function mi(t){const e=Fu(t);if(Ht(!!e,`'${t}' is not an animatable color. Use the equivalent color code instead.`,"color-not-animatable"),!e)return!1;let n=e.parse(t);return e===Lt&&(n=Lu(n)),n}const gi=(t,e)=>{const n=mi(t),a=mi(e);if(!n||!a)return oa(t,e);const o={...n};return i=>(o.red=Ra(n.red,a.red,i),o.green=Ra(n.green,a.green,i),o.blue=Ra(n.blue,a.blue,i),o.alpha=pe(n.alpha,a.alpha,i),wt.transform(o))},Ka=new Set(["none","hidden"]);function Iu(t,e){return Ka.has(t)?n=>n<=0?t:e:n=>n>=1?e:t}function Uu(t,e){return n=>pe(t,e,n)}function Bo(t){return typeof t=="number"?Uu:typeof t=="string"?Uo(t)?oa:ye.test(t)?gi:Bu:Array.isArray(t)?Fs:typeof t=="object"?ye.test(t)?gi:Ou:oa}function Fs(t,e){const n=[...t],a=n.length,o=t.map((i,r)=>Bo(i)(i,e[r]));return i=>{for(let r=0;r<a;r++)n[r]=o[r](i);return n}}function Ou(t,e){const n={...t,...e},a={};for(const o in n)t[o]!==void 0&&e[o]!==void 0&&(a[o]=Bo(t[o])(t[o],e[o]));return o=>{for(const i in a)n[i]=a[i](o);return n}}function Du(t,e){const n=[],a={color:0,var:0,number:0};for(let o=0;o<e.values.length;o++){const i=e.types[o],r=t.indexes[i][a[i]],s=t.values[r]??0;n[o]=s,a[i]++}return n}const Bu=(t,e)=>{const n=pt.createTransformer(e),a=un(t),o=un(e);return a.indexes.var.length===o.indexes.var.length&&a.indexes.color.length===o.indexes.color.length&&a.indexes.number.length>=o.indexes.number.length?Ka.has(t)&&!o.values.length||Ka.has(e)&&!a.values.length?Iu(t,e):pn(Fs(Du(a,o),o.values),n):(Ht(!0,`Complex values '${t}' and '${e}' too different to mix. Ensure all colors are of the same type, and that each contains the same quantity of number and color values. Falling back to instant transition.`,"complex-values-different"),oa(t,e))};function Is(t,e,n){return typeof t=="number"&&typeof e=="number"&&typeof n=="number"?pe(t,e,n):Bo(t)(t,e)}const Vu=t=>{const e=({timestamp:n})=>t(n);return{start:(n=!0)=>he.update(e,n),stop:()=>ft(e),now:()=>Ae.isProcessing?Ae.timestamp:Fe.now()}},Us=(t,e,n=10)=>{let a="";const o=Math.max(Math.round(e/n),2);for(let i=0;i<o;i++)a+=Math.round(t(i/(o-1))*1e4)/1e4+", ";return`linear(${a.substring(0,a.length-2)})`},ia=2e4;function Vo(t){let e=0;const n=50;let a=t.next(e);for(;!a.done&&e<ia;)e+=n,a=t.next(e);return e>=ia?1/0:e}function Gu(t,e=100,n){const a=n({...t,keyframes:[0,e]}),o=Math.min(Vo(a),ia);return{type:"keyframes",ease:i=>a.next(o*i).value/e,duration:He(o)}}const ju=5;function Os(t,e,n){const a=Math.max(e-ju,0);return ms(n-t(a),e-a)}const fe={stiffness:100,damping:10,mass:1,velocity:0,duration:800,bounce:.3,visualDuration:.3,restSpeed:{granular:.01,default:2},restDelta:{granular:.005,default:.5},minDuration:.01,maxDuration:10,minDamping:.05,maxDamping:1},xa=.001;function zu({duration:t=fe.duration,bounce:e=fe.bounce,velocity:n=fe.velocity,mass:a=fe.mass}){let o,i;Ht(t<=et(fe.maxDuration),"Spring duration must be 10 seconds or less","spring-duration-limit");let r=1-e;r=st(fe.minDamping,fe.maxDamping,r),t=st(fe.minDuration,fe.maxDuration,He(t)),r<1?(o=h=>{const l=h*r,d=l*t,u=l-n,f=Ja(h,r),m=Math.exp(-d);return xa-u/f*m},i=h=>{const d=h*r*t,u=d*n+n,f=Math.pow(r,2)*Math.pow(h,2)*t,m=Math.exp(-d),P=Ja(Math.pow(h,2),r);return(-o(h)+xa>0?-1:1)*((u-f)*m)/P}):(o=h=>{const l=Math.exp(-h*t),d=(h-n)*t+1;return-xa+l*d},i=h=>{const l=Math.exp(-h*t),d=(n-h)*(t*t);return l*d});const s=5/t,c=Hu(o,i,s);if(t=et(t),isNaN(c))return{stiffness:fe.stiffness,damping:fe.damping,duration:t};{const h=Math.pow(c,2)*a;return{stiffness:h,damping:r*2*Math.sqrt(a*h),duration:t}}}const _u=12;function Hu(t,e,n){let a=n;for(let o=1;o<_u;o++)a=a-t(a)/e(a);return a}function Ja(t,e){return t*Math.sqrt(1-e*e)}const Qu=["duration","bounce"],Ku=["stiffness","damping","mass"];function yi(t,e){return e.some(n=>t[n]!==void 0)}function Ju(t){let e={velocity:fe.velocity,stiffness:fe.stiffness,damping:fe.damping,mass:fe.mass,isResolvedFromDuration:!1,...t};if(!yi(t,Ku)&&yi(t,Qu))if(t.visualDuration){const n=t.visualDuration,a=2*Math.PI/(n*1.2),o=a*a,i=2*st(.05,1,1-(t.bounce||0))*Math.sqrt(o);e={...e,mass:fe.mass,stiffness:o,damping:i}}else{const n=zu(t);e={...e,...n,mass:fe.mass},e.isResolvedFromDuration=!0}return e}function ra(t=fe.visualDuration,e=fe.bounce){const n=typeof t!="object"?{visualDuration:t,keyframes:[0,1],bounce:e}:t;let{restSpeed:a,restDelta:o}=n;const i=n.keyframes[0],r=n.keyframes[n.keyframes.length-1],s={done:!1,value:i},{stiffness:c,damping:h,mass:l,duration:d,velocity:u,isResolvedFromDuration:f}=Ju({...n,velocity:-He(n.velocity||0)}),m=u||0,P=h/(2*Math.sqrt(c*l)),A=r-i,b=He(Math.sqrt(c/l)),E=Math.abs(A)<5;a||(a=E?fe.restSpeed.granular:fe.restSpeed.default),o||(o=E?fe.restDelta.granular:fe.restDelta.default);let T;if(P<1){const M=Ja(b,P);T=C=>{const F=Math.exp(-P*b*C);return r-F*((m+P*b*A)/M*Math.sin(M*C)+A*Math.cos(M*C))}}else if(P===1)T=M=>r-Math.exp(-b*M)*(A+(m+b*A)*M);else{const M=b*Math.sqrt(P*P-1);T=C=>{const F=Math.exp(-P*b*C),g=Math.min(M*C,300);return r-F*((m+P*b*A)*Math.sinh(g)+M*A*Math.cosh(g))/M}}const S={calculatedDuration:f&&d||null,next:M=>{const C=T(M);if(f)s.done=M>=d;else{let F=M===0?m:0;P<1&&(F=M===0?et(m):Os(T,M,C));const g=Math.abs(F)<=a,v=Math.abs(r-C)<=o;s.done=g&&v}return s.value=s.done?r:C,s},toString:()=>{const M=Math.min(Vo(S),ia),C=Us(F=>S.next(M*F).value,M,30);return M+"ms "+C},toTransition:()=>{}};return S}ra.applyToOptions=t=>{const e=Gu(t,100,ra);return t.ease=e.ease,t.duration=et(e.duration),t.type="keyframes",t};function Wa({keyframes:t,velocity:e=0,power:n=.8,timeConstant:a=325,bounceDamping:o=10,bounceStiffness:i=500,modifyTarget:r,min:s,max:c,restDelta:h=.5,restSpeed:l}){const d=t[0],u={done:!1,value:d},f=g=>s!==void 0&&g<s||c!==void 0&&g>c,m=g=>s===void 0?c:c===void 0||Math.abs(s-g)<Math.abs(c-g)?s:c;let P=n*e;const A=d+P,b=r===void 0?A:r(A);b!==A&&(P=b-d);const E=g=>-P*Math.exp(-g/a),T=g=>b+E(g),S=g=>{const v=E(g),k=T(g);u.done=Math.abs(v)<=h,u.value=u.done?b:k};let M,C;const F=g=>{f(u.value)&&(M=g,C=ra({keyframes:[u.value,m(u.value)],velocity:Os(T,g,u.value),damping:o,stiffness:i,restDelta:h,restSpeed:l}))};return F(0),{calculatedDuration:null,next:g=>{let v=!1;return!C&&M===void 0&&(v=!0,S(g),F(g)),M!==void 0&&g>=M?C.next(g-M):(!v&&S(g),u)}}}function Wu(t,e,n){const a=[],o=n||ct.mix||Is,i=t.length-1;for(let r=0;r<i;r++){let s=o(t[r],t[r+1]);if(e){const c=Array.isArray(e)?e[r]||Qe:e;s=pn(c,s)}a.push(s)}return a}function qu(t,e,{clamp:n=!0,ease:a,mixer:o}={}){const i=t.length;if(lt(i===e.length,"Both input and output ranges must be the same length","range-length"),i===1)return()=>e[0];if(i===2&&e[0]===e[1])return()=>e[1];const r=t[0]===t[1];t[0]>t[i-1]&&(t=[...t].reverse(),e=[...e].reverse());const s=Wu(e,a,o),c=s.length,h=l=>{if(r&&l<t[0])return e[0];let d=0;if(c>1)for(;d<t.length-2&&!(l<t[d+1]);d++);const u=ln(t[d],t[d+1],l);return s[d](u)};return n?l=>h(st(t[0],t[i-1],l)):h}function Xu(t,e){const n=t[t.length-1];for(let a=1;a<=e;a++){const o=ln(0,e,a);t.push(pe(n,1,o))}}function Yu(t){const e=[0];return Xu(e,t.length-1),e}function Zu(t,e){return t.map(n=>n*e)}function ed(t,e){return t.map(()=>e||Ss).splice(0,t.length-1)}function Nt({duration:t=300,keyframes:e,times:n,ease:a="easeInOut"}){const o=hu(a)?a.map(hi):hi(a),i={done:!1,value:e[0]},r=Zu(n&&n.length===e.length?n:Yu(e),t),s=qu(r,e,{ease:Array.isArray(o)?o:ed(e,o)});return{calculatedDuration:t,next:c=>(i.value=s(c),i.done=c>=t,i)}}const td=t=>t!==null;function Go(t,{repeat:e,repeatType:n="loop"},a,o=1){const i=t.filter(td),s=o<0||e&&n!=="loop"&&e%2===1?0:i.length-1;return!s||a===void 0?i[s]:a}const nd={decay:Wa,inertia:Wa,tween:Nt,keyframes:Nt,spring:ra};function Ds(t){typeof t.type=="string"&&(t.type=nd[t.type])}class jo{constructor(){this.updateFinished()}get finished(){return this._finished}updateFinished(){this._finished=new Promise(e=>{this.resolve=e})}notifyFinished(){this.resolve()}then(e,n){return this.finished.then(e,n)}}const ad=t=>t/100;class zo extends jo{constructor(e){super(),this.state="idle",this.startTime=null,this.isStopped=!1,this.currentTime=0,this.holdTime=null,this.playbackSpeed=1,this.stop=()=>{const{motionValue:n}=this.options;n&&n.updatedAt!==Fe.now()&&this.tick(Fe.now()),this.isStopped=!0,this.state!=="idle"&&(this.teardown(),this.options.onStop?.())},this.options=e,this.initAnimation(),this.play(),e.autoplay===!1&&this.pause()}initAnimation(){const{options:e}=this;Ds(e);const{type:n=Nt,repeat:a=0,repeatDelay:o=0,repeatType:i,velocity:r=0}=e;let{keyframes:s}=e;const c=n||Nt;process.env.NODE_ENV!=="production"&&c!==Nt&&lt(s.length<=2,`Only two keyframes currently supported with spring and inertia animations. Trying to animate ${s}`,"spring-two-frames"),c!==Nt&&typeof s[0]!="number"&&(this.mixKeyframes=pn(ad,Is(s[0],s[1])),s=[0,100]);const h=c({...e,keyframes:s});i==="mirror"&&(this.mirroredGenerator=c({...e,keyframes:[...s].reverse(),velocity:-r})),h.calculatedDuration===null&&(h.calculatedDuration=Vo(h));const{calculatedDuration:l}=h;this.calculatedDuration=l,this.resolvedDuration=l+o,this.totalDuration=this.resolvedDuration*(a+1)-o,this.generator=h}updateTime(e){const n=Math.round(e-this.startTime)*this.playbackSpeed;this.holdTime!==null?this.currentTime=this.holdTime:this.currentTime=n}tick(e,n=!1){const{generator:a,totalDuration:o,mixKeyframes:i,mirroredGenerator:r,resolvedDuration:s,calculatedDuration:c}=this;if(this.startTime===null)return a.next(0);const{delay:h=0,keyframes:l,repeat:d,repeatType:u,repeatDelay:f,type:m,onUpdate:P,finalKeyframe:A}=this.options;this.speed>0?this.startTime=Math.min(this.startTime,e):this.speed<0&&(this.startTime=Math.min(e-o/this.speed,this.startTime)),n?this.currentTime=e:this.updateTime(e);const b=this.currentTime-h*(this.playbackSpeed>=0?1:-1),E=this.playbackSpeed>=0?b<0:b>o;this.currentTime=Math.max(b,0),this.state==="finished"&&this.holdTime===null&&(this.currentTime=o);let T=this.currentTime,S=a;if(d){const g=Math.min(this.currentTime,o)/s;let v=Math.floor(g),k=g%1;!k&&g>=1&&(k=1),k===1&&v--,v=Math.min(v,d+1),v%2&&(u==="reverse"?(k=1-k,f&&(k-=f/s)):u==="mirror"&&(S=r)),T=st(0,1,k)*s}const M=E?{done:!1,value:l[0]}:S.next(T);i&&(M.value=i(M.value));let{done:C}=M;!E&&c!==null&&(C=this.playbackSpeed>=0?this.currentTime>=o:this.currentTime<=0);const F=this.holdTime===null&&(this.state==="finished"||this.state==="running"&&C);return F&&m!==Wa&&(M.value=Go(l,this.options,A,this.speed)),P&&P(M.value),F&&this.finish(),M}then(e,n){return this.finished.then(e,n)}get duration(){return He(this.calculatedDuration)}get iterationDuration(){const{delay:e=0}=this.options||{};return this.duration+He(e)}get time(){return He(this.currentTime)}set time(e){e=et(e),this.currentTime=e,this.startTime===null||this.holdTime!==null||this.playbackSpeed===0?this.holdTime=e:this.driver&&(this.startTime=this.driver.now()-e/this.playbackSpeed),this.driver?.start(!1)}get speed(){return this.playbackSpeed}set speed(e){this.updateTime(Fe.now());const n=this.playbackSpeed!==e;this.playbackSpeed=e,n&&(this.time=He(this.currentTime))}play(){if(this.isStopped)return;const{driver:e=Vu,startTime:n}=this.options;this.driver||(this.driver=e(o=>this.tick(o))),this.options.onPlay?.();const a=this.driver.now();this.state==="finished"?(this.updateFinished(),this.startTime=a):this.holdTime!==null?this.startTime=a-this.holdTime:this.startTime||(this.startTime=n??a),this.state==="finished"&&this.speed<0&&(this.startTime+=this.calculatedDuration),this.holdTime=null,this.state="running",this.driver.start()}pause(){this.state="paused",this.updateTime(Fe.now()),this.holdTime=this.currentTime}complete(){this.state!=="running"&&this.play(),this.state="finished",this.holdTime=null}finish(){this.notifyFinished(),this.teardown(),this.state="finished",this.options.onComplete?.()}cancel(){this.holdTime=null,this.startTime=0,this.tick(0),this.teardown(),this.options.onCancel?.()}teardown(){this.state="idle",this.stopDriver(),this.startTime=this.holdTime=null}stopDriver(){this.driver&&(this.driver.stop(),this.driver=void 0)}sample(e){return this.startTime=0,this.tick(e,!0)}attachTimeline(e){return this.options.allowFlatten&&(this.options.type="keyframes",this.options.ease="linear",this.initAnimation()),this.driver?.stop(),e.observe(this)}}function od(t){for(let e=1;e<t.length;e++)t[e]??(t[e]=t[e-1])}const Ct=t=>t*180/Math.PI,qa=t=>{const e=Ct(Math.atan2(t[1],t[0]));return Xa(e)},id={x:4,y:5,translateX:4,translateY:5,scaleX:0,scaleY:3,scale:t=>(Math.abs(t[0])+Math.abs(t[3]))/2,rotate:qa,rotateZ:qa,skewX:t=>Ct(Math.atan(t[1])),skewY:t=>Ct(Math.atan(t[2])),skew:t=>(Math.abs(t[1])+Math.abs(t[2]))/2},Xa=t=>(t=t%360,t<0&&(t+=360),t),vi=qa,bi=t=>Math.sqrt(t[0]*t[0]+t[1]*t[1]),Pi=t=>Math.sqrt(t[4]*t[4]+t[5]*t[5]),rd={x:12,y:13,z:14,translateX:12,translateY:13,translateZ:14,scaleX:bi,scaleY:Pi,scale:t=>(bi(t)+Pi(t))/2,rotateX:t=>Xa(Ct(Math.atan2(t[6],t[5]))),rotateY:t=>Xa(Ct(Math.atan2(-t[2],t[0]))),rotateZ:vi,rotate:vi,skewX:t=>Ct(Math.atan(t[4])),skewY:t=>Ct(Math.atan(t[1])),skew:t=>(Math.abs(t[1])+Math.abs(t[4]))/2};function Ya(t){return t.includes("scale")?1:0}function Za(t,e){if(!t||t==="none")return Ya(e);const n=t.match(/^matrix3d\(([-\d.e\s,]+)\)$/u);let a,o;if(n)a=rd,o=n;else{const s=t.match(/^matrix\(([-\d.e\s,]+)\)$/u);a=id,o=s}if(!o)return Ya(e);const i=a[e],r=o[1].split(",").map(ld);return typeof i=="function"?i(r):r[i]}const sd=(t,e)=>{const{transform:n="none"}=getComputedStyle(t);return Za(n,e)};function ld(t){return parseFloat(t.trim())}const Kt=["transformPerspective","x","y","z","translateX","translateY","translateZ","scale","scaleX","scaleY","rotate","rotateX","rotateY","rotateZ","skew","skewX","skewY"],Jt=new Set(Kt),wi=t=>t===Qt||t===Y,cd=new Set(["x","y","z"]),ud=Kt.filter(t=>!cd.has(t));function dd(t){const e=[];return ud.forEach(n=>{const a=t.getValue(n);a!==void 0&&(e.push([n,a.get()]),a.set(n.startsWith("scale")?1:0))}),e}const At={width:({x:t},{paddingLeft:e="0",paddingRight:n="0"})=>t.max-t.min-parseFloat(e)-parseFloat(n),height:({y:t},{paddingTop:e="0",paddingBottom:n="0"})=>t.max-t.min-parseFloat(e)-parseFloat(n),top:(t,{top:e})=>parseFloat(e),left:(t,{left:e})=>parseFloat(e),bottom:({y:t},{top:e})=>parseFloat(e)+(t.max-t.min),right:({x:t},{left:e})=>parseFloat(e)+(t.max-t.min),x:(t,{transform:e})=>Za(e,"x"),y:(t,{transform:e})=>Za(e,"y")};At.translateX=At.x;At.translateY=At.y;const St=new Set;let eo=!1,to=!1,no=!1;function Bs(){if(to){const t=Array.from(St).filter(a=>a.needsMeasurement),e=new Set(t.map(a=>a.element)),n=new Map;e.forEach(a=>{const o=dd(a);o.length&&(n.set(a,o),a.render())}),t.forEach(a=>a.measureInitialState()),e.forEach(a=>{a.render();const o=n.get(a);o&&o.forEach(([i,r])=>{a.getValue(i)?.set(r)})}),t.forEach(a=>a.measureEndState()),t.forEach(a=>{a.suspendedScrollY!==void 0&&window.scrollTo(0,a.suspendedScrollY)})}to=!1,eo=!1,St.forEach(t=>t.complete(no)),St.clear()}function Vs(){St.forEach(t=>{t.readKeyframes(),t.needsMeasurement&&(to=!0)})}function hd(){no=!0,Vs(),Bs(),no=!1}class _o{constructor(e,n,a,o,i,r=!1){this.state="pending",this.isAsync=!1,this.needsMeasurement=!1,this.unresolvedKeyframes=[...e],this.onComplete=n,this.name=a,this.motionValue=o,this.element=i,this.isAsync=r}scheduleResolve(){this.state="scheduled",this.isAsync?(St.add(this),eo||(eo=!0,he.read(Vs),he.resolveKeyframes(Bs))):(this.readKeyframes(),this.complete())}readKeyframes(){const{unresolvedKeyframes:e,name:n,element:a,motionValue:o}=this;if(e[0]===null){const i=o?.get(),r=e[e.length-1];if(i!==void 0)e[0]=i;else if(a&&n){const s=a.readValue(n,r);s!=null&&(e[0]=s)}e[0]===void 0&&(e[0]=r),o&&i===void 0&&o.set(e[0])}od(e)}setFinalKeyframe(){}measureInitialState(){}renderEndStyles(){}measureEndState(){}complete(e=!1){this.state="complete",this.onComplete(this.unresolvedKeyframes,this.finalKeyframe,e),St.delete(this)}cancel(){this.state==="scheduled"&&(St.delete(this),this.state="pending")}resume(){this.state==="pending"&&this.scheduleResolve()}}const fd=t=>t.startsWith("--");function pd(t,e,n){fd(e)?t.style.setProperty(e,n):t.style[e]=n}const md=Mo(()=>window.ScrollTimeline!==void 0),gd={};function yd(t,e){const n=Mo(t);return()=>gd[e]??n()}const Gs=yd(()=>{try{document.createElement("div").animate({opacity:0},{easing:"linear(0, 1)"})}catch{return!1}return!0},"linearEasing"),Xt=([t,e,n,a])=>`cubic-bezier(${t}, ${e}, ${n}, ${a})`,Ci={linear:"linear",ease:"ease",easeIn:"ease-in",easeOut:"ease-out",easeInOut:"ease-in-out",circIn:Xt([0,.65,.55,1]),circOut:Xt([.55,0,1,.45]),backIn:Xt([.31,.01,.66,-.59]),backOut:Xt([.33,1.53,.69,.99])};function js(t,e){if(t)return typeof t=="function"?Gs()?Us(t,e):"ease-out":Ts(t)?Xt(t):Array.isArray(t)?t.map(n=>js(n,e)||Ci.easeOut):Ci[t]}function vd(t,e,n,{delay:a=0,duration:o=300,repeat:i=0,repeatType:r="loop",ease:s="easeOut",times:c}={},h=void 0){const l={[e]:n};c&&(l.offset=c);const d=js(s,o);Array.isArray(d)&&(l.easing=d);const u={delay:a,duration:o,easing:Array.isArray(d)?"linear":d,fill:"both",iterations:i+1,direction:r==="reverse"?"alternate":"normal"};return h&&(u.pseudoElement=h),t.animate(l,u)}function zs(t){return typeof t=="function"&&"applyToOptions"in t}function bd({type:t,...e}){return zs(t)&&Gs()?t.applyToOptions(e):(e.duration??(e.duration=300),e.ease??(e.ease="easeOut"),e)}class Pd extends jo{constructor(e){if(super(),this.finishedTime=null,this.isStopped=!1,!e)return;const{element:n,name:a,keyframes:o,pseudoElement:i,allowFlatten:r=!1,finalKeyframe:s,onComplete:c}=e;this.isPseudoElement=!!i,this.allowFlatten=r,this.options=e,lt(typeof e.type!="string",`Mini animate() doesn't support "type" as a string.`,"mini-spring");const h=bd(e);this.animation=vd(n,a,o,h,i),h.autoplay===!1&&this.animation.pause(),this.animation.onfinish=()=>{if(this.finishedTime=this.time,!i){const l=Go(o,this.options,s,this.speed);this.updateMotionValue?this.updateMotionValue(l):pd(n,a,l),this.animation.cancel()}c?.(),this.notifyFinished()}}play(){this.isStopped||(this.animation.play(),this.state==="finished"&&this.updateFinished())}pause(){this.animation.pause()}complete(){this.animation.finish?.()}cancel(){try{this.animation.cancel()}catch{}}stop(){if(this.isStopped)return;this.isStopped=!0;const{state:e}=this;e==="idle"||e==="finished"||(this.updateMotionValue?this.updateMotionValue():this.commitStyles(),this.isPseudoElement||this.cancel())}commitStyles(){this.isPseudoElement||this.animation.commitStyles?.()}get duration(){const e=this.animation.effect?.getComputedTiming?.().duration||0;return He(Number(e))}get iterationDuration(){const{delay:e=0}=this.options||{};return this.duration+He(e)}get time(){return He(Number(this.animation.currentTime)||0)}set time(e){this.finishedTime=null,this.animation.currentTime=et(e)}get speed(){return this.animation.playbackRate}set speed(e){e<0&&(this.finishedTime=null),this.animation.playbackRate=e}get state(){return this.finishedTime!==null?"finished":this.animation.playState}get startTime(){return Number(this.animation.startTime)}set startTime(e){this.animation.startTime=e}attachTimeline({timeline:e,observe:n}){return this.allowFlatten&&this.animation.effect?.updateTiming({easing:"linear"}),this.animation.onfinish=null,e&&md()?(this.animation.timeline=e,Qe):n(this)}}const _s={anticipate:ws,backInOut:Ps,circInOut:As};function wd(t){return t in _s}function Cd(t){typeof t.ease=="string"&&wd(t.ease)&&(t.ease=_s[t.ease])}const Ai=10;class Ad extends Pd{constructor(e){Cd(e),Ds(e),super(e),e.startTime&&(this.startTime=e.startTime),this.options=e}updateMotionValue(e){const{motionValue:n,onUpdate:a,onComplete:o,element:i,...r}=this.options;if(!n)return;if(e!==void 0){n.set(e);return}const s=new zo({...r,autoplay:!1}),c=et(this.finishedTime??this.time);n.setWithVelocity(s.sample(c-Ai).value,s.sample(c).value,Ai),s.stop()}}const Si=(t,e)=>e==="zIndex"?!1:!!(typeof t=="number"||Array.isArray(t)||typeof t=="string"&&(pt.test(t)||t==="0")&&!t.startsWith("url("));function Sd(t){const e=t[0];if(t.length===1)return!0;for(let n=0;n<t.length;n++)if(t[n]!==e)return!0}function Td(t,e,n,a){const o=t[0];if(o===null)return!1;if(e==="display"||e==="visibility")return!0;const i=t[t.length-1],r=Si(o,e),s=Si(i,e);return Ht(r===s,`You are trying to animate ${e} from "${o}" to "${i}". "${r?i:o}" is not an animatable value.`,"value-not-animatable"),!r||!s?!1:Sd(t)||(n==="spring"||zs(n))&&a}function ao(t){t.duration=0,t.type="keyframes"}const kd=new Set(["opacity","clipPath","filter","transform"]),$d=Mo(()=>Object.hasOwnProperty.call(Element.prototype,"animate"));function Rd(t){const{motionValue:e,name:n,repeatDelay:a,repeatType:o,damping:i,type:r}=t;if(!(e?.owner?.current instanceof HTMLElement))return!1;const{onUpdate:c,transformTemplate:h}=e.owner.getProps();return $d()&&n&&kd.has(n)&&(n!=="transform"||!h)&&!c&&!a&&o!=="mirror"&&i!==0&&r!=="inertia"}const xd=40;class Ed extends jo{constructor({autoplay:e=!0,delay:n=0,type:a="keyframes",repeat:o=0,repeatDelay:i=0,repeatType:r="loop",keyframes:s,name:c,motionValue:h,element:l,...d}){super(),this.stop=()=>{this._animation&&(this._animation.stop(),this.stopTimeline?.()),this.keyframeResolver?.cancel()},this.createdAt=Fe.now();const u={autoplay:e,delay:n,type:a,repeat:o,repeatDelay:i,repeatType:r,name:c,motionValue:h,element:l,...d},f=l?.KeyframeResolver||_o;this.keyframeResolver=new f(s,(m,P,A)=>this.onKeyframesResolved(m,P,u,!A),c,h,l),this.keyframeResolver?.scheduleResolve()}onKeyframesResolved(e,n,a,o){this.keyframeResolver=void 0;const{name:i,type:r,velocity:s,delay:c,isHandoff:h,onUpdate:l}=a;this.resolvedAt=Fe.now(),Td(e,i,r,s)||((ct.instantAnimations||!c)&&l?.(Go(e,a,n)),e[0]=e[e.length-1],ao(a),a.repeat=0);const u={startTime:o?this.resolvedAt?this.resolvedAt-this.createdAt>xd?this.resolvedAt:this.createdAt:this.createdAt:void 0,finalKeyframe:n,...a,keyframes:e},f=!h&&Rd(u)?new Ad({...u,element:u.motionValue.owner.current}):new zo(u);f.finished.then(()=>this.notifyFinished()).catch(Qe),this.pendingTimeline&&(this.stopTimeline=f.attachTimeline(this.pendingTimeline),this.pendingTimeline=void 0),this._animation=f}get finished(){return this._animation?this.animation.finished:this._finished}then(e,n){return this.finished.finally(e).then(()=>{})}get animation(){return this._animation||(this.keyframeResolver?.resume(),hd()),this._animation}get duration(){return this.animation.duration}get iterationDuration(){return this.animation.iterationDuration}get time(){return this.animation.time}set time(e){this.animation.time=e}get speed(){return this.animation.speed}get state(){return this.animation.state}set speed(e){this.animation.speed=e}get startTime(){return this.animation.startTime}attachTimeline(e){return this._animation?this.stopTimeline=this.animation.attachTimeline(e):this.pendingTimeline=e,()=>this.stop()}play(){this.animation.play()}pause(){this.animation.pause()}complete(){this.animation.complete()}cancel(){this._animation&&this.animation.cancel(),this.keyframeResolver?.cancel()}}const Md=/^var\(--(?:([\w-]+)|([\w-]+), ?([a-zA-Z\d ()%#.,-]+))\)/u;function Ld(t){const e=Md.exec(t);if(!e)return[,];const[,n,a,o]=e;return[`--${n??a}`,o]}const Nd=4;function Hs(t,e,n=1){lt(n<=Nd,`Max CSS variable fallback depth detected in property "${t}". This may indicate a circular fallback dependency.`,"max-css-var-depth");const[a,o]=Ld(t);if(!a)return;const i=window.getComputedStyle(e).getPropertyValue(a);if(i){const r=i.trim();return hs(r)?parseFloat(r):r}return Uo(o)?Hs(o,e,n+1):o}function Ho(t,e){return t?.[e]??t?.default??t}const Qs=new Set(["width","height","top","left","right","bottom",...Kt]),Fd={test:t=>t==="auto",parse:t=>t},Ks=t=>e=>e.test(t),Js=[Qt,Y,it,ht,Su,Au,Fd],Ti=t=>Js.find(Ks(t));function Id(t){return typeof t=="number"?t===0:t!==null?t==="none"||t==="0"||ps(t):!0}const Ud=new Set(["brightness","contrast","saturate","opacity"]);function Od(t){const[e,n]=t.slice(0,-1).split("(");if(e==="drop-shadow")return t;const[a]=n.match(Oo)||[];if(!a)return t;const o=n.replace(a,"");let i=Ud.has(e)?1:0;return a!==n&&(i*=100),e+"("+i+o+")"}const Dd=/\b([a-z-]*)\(.*?\)/gu,oo={...pt,getAnimatableNone:t=>{const e=t.match(Dd);return e?e.map(Od).join(" "):t}},ki={...Qt,transform:Math.round},Bd={rotate:ht,rotateX:ht,rotateY:ht,rotateZ:ht,scale:_n,scaleX:_n,scaleY:_n,scaleZ:_n,skew:ht,skewX:ht,skewY:ht,distance:Y,translateX:Y,translateY:Y,translateZ:Y,x:Y,y:Y,z:Y,perspective:Y,transformPerspective:Y,opacity:cn,originX:fi,originY:fi,originZ:Y},Qo={borderWidth:Y,borderTopWidth:Y,borderRightWidth:Y,borderBottomWidth:Y,borderLeftWidth:Y,borderRadius:Y,radius:Y,borderTopLeftRadius:Y,borderTopRightRadius:Y,borderBottomRightRadius:Y,borderBottomLeftRadius:Y,width:Y,maxWidth:Y,height:Y,maxHeight:Y,top:Y,right:Y,bottom:Y,left:Y,padding:Y,paddingTop:Y,paddingRight:Y,paddingBottom:Y,paddingLeft:Y,margin:Y,marginTop:Y,marginRight:Y,marginBottom:Y,marginLeft:Y,backgroundPositionX:Y,backgroundPositionY:Y,...Bd,zIndex:ki,fillOpacity:cn,strokeOpacity:cn,numOctaves:ki},Vd={...Qo,color:ye,backgroundColor:ye,outlineColor:ye,fill:ye,stroke:ye,borderColor:ye,borderTopColor:ye,borderRightColor:ye,borderBottomColor:ye,borderLeftColor:ye,filter:oo,WebkitFilter:oo},Ws=t=>Vd[t];function qs(t,e){let n=Ws(t);return n!==oo&&(n=pt),n.getAnimatableNone?n.getAnimatableNone(e):void 0}const Gd=new Set(["auto","none","0"]);function jd(t,e,n){let a=0,o;for(;a<t.length&&!o;){const i=t[a];typeof i=="string"&&!Gd.has(i)&&un(i).values.length&&(o=t[a]),a++}if(o&&n)for(const i of e)t[i]=qs(n,o)}class zd extends _o{constructor(e,n,a,o,i){super(e,n,a,o,i,!0)}readKeyframes(){const{unresolvedKeyframes:e,element:n,name:a}=this;if(!n||!n.current)return;super.readKeyframes();for(let c=0;c<e.length;c++){let h=e[c];if(typeof h=="string"&&(h=h.trim(),Uo(h))){const l=Hs(h,n.current);l!==void 0&&(e[c]=l),c===e.length-1&&(this.finalKeyframe=h)}}if(this.resolveNoneKeyframes(),!Qs.has(a)||e.length!==2)return;const[o,i]=e,r=Ti(o),s=Ti(i);if(r!==s)if(wi(r)&&wi(s))for(let c=0;c<e.length;c++){const h=e[c];typeof h=="string"&&(e[c]=parseFloat(h))}else At[a]&&(this.needsMeasurement=!0)}resolveNoneKeyframes(){const{unresolvedKeyframes:e,name:n}=this,a=[];for(let o=0;o<e.length;o++)(e[o]===null||Id(e[o]))&&a.push(o);a.length&&jd(e,a,n)}measureInitialState(){const{element:e,unresolvedKeyframes:n,name:a}=this;if(!e||!e.current)return;a==="height"&&(this.suspendedScrollY=window.pageYOffset),this.measuredOrigin=At[a](e.measureViewportBox(),window.getComputedStyle(e.current)),n[0]=this.measuredOrigin;const o=n[n.length-1];o!==void 0&&e.getValue(a,o).jump(o,!1)}measureEndState(){const{element:e,name:n,unresolvedKeyframes:a}=this;if(!e||!e.current)return;const o=e.getValue(n);o&&o.jump(this.measuredOrigin,!1);const i=a.length-1,r=a[i];a[i]=At[n](e.measureViewportBox(),window.getComputedStyle(e.current)),r!==null&&this.finalKeyframe===void 0&&(this.finalKeyframe=r),this.removedTransforms?.length&&this.removedTransforms.forEach(([s,c])=>{e.getValue(s).set(c)}),this.resolveNoneKeyframes()}}function _d(t,e,n){if(t instanceof EventTarget)return[t];if(typeof t=="string"){let a=document;const o=n?.[t]??a.querySelectorAll(t);return o?Array.from(o):[]}return Array.from(t)}const Xs=(t,e)=>e&&typeof t=="number"?e.transform(t):t;function Hd(t){return fs(t)&&"offsetHeight"in t}const $i=30,Qd=t=>!isNaN(parseFloat(t));class Kd{constructor(e,n={}){this.canTrackVelocity=null,this.events={},this.updateAndNotify=a=>{const o=Fe.now();if(this.updatedAt!==o&&this.setPrevFrameValue(),this.prev=this.current,this.setCurrent(a),this.current!==this.prev&&(this.events.change?.notify(this.current),this.dependents))for(const i of this.dependents)i.dirty()},this.hasAnimated=!1,this.setCurrent(e),this.owner=n.owner}setCurrent(e){this.current=e,this.updatedAt=Fe.now(),this.canTrackVelocity===null&&e!==void 0&&(this.canTrackVelocity=Qd(this.current))}setPrevFrameValue(e=this.current){this.prevFrameValue=e,this.prevUpdatedAt=this.updatedAt}onChange(e){return process.env.NODE_ENV!=="production"&&No(!1,'value.onChange(callback) is deprecated. Switch to value.on("change", callback).'),this.on("change",e)}on(e,n){this.events[e]||(this.events[e]=new Lo);const a=this.events[e].add(n);return e==="change"?()=>{a(),he.read(()=>{this.events.change.getSize()||this.stop()})}:a}clearListeners(){for(const e in this.events)this.events[e].clear()}attach(e,n){this.passiveEffect=e,this.stopPassiveEffect=n}set(e){this.passiveEffect?this.passiveEffect(e,this.updateAndNotify):this.updateAndNotify(e)}setWithVelocity(e,n,a){this.set(n),this.prev=void 0,this.prevFrameValue=e,this.prevUpdatedAt=this.updatedAt-a}jump(e,n=!0){this.updateAndNotify(e),this.prev=e,this.prevUpdatedAt=this.prevFrameValue=void 0,n&&this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}dirty(){this.events.change?.notify(this.current)}addDependent(e){this.dependents||(this.dependents=new Set),this.dependents.add(e)}removeDependent(e){this.dependents&&this.dependents.delete(e)}get(){return this.current}getPrevious(){return this.prev}getVelocity(){const e=Fe.now();if(!this.canTrackVelocity||this.prevFrameValue===void 0||e-this.updatedAt>$i)return 0;const n=Math.min(this.updatedAt-this.prevUpdatedAt,$i);return ms(parseFloat(this.current)-parseFloat(this.prevFrameValue),n)}start(e){return this.stop(),new Promise(n=>{this.hasAnimated=!0,this.animation=e(n),this.events.animationStart&&this.events.animationStart.notify()}).then(()=>{this.events.animationComplete&&this.events.animationComplete.notify(),this.clearAnimation()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){delete this.animation}destroy(){this.dependents?.clear(),this.events.destroy?.notify(),this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}}function jt(t,e){return new Kd(t,e)}const{schedule:Ko}=ks(queueMicrotask,!1),Ye={x:!1,y:!1};function Ys(){return Ye.x||Ye.y}function Jd(t){return t==="x"||t==="y"?Ye[t]?null:(Ye[t]=!0,()=>{Ye[t]=!1}):Ye.x||Ye.y?null:(Ye.x=Ye.y=!0,()=>{Ye.x=Ye.y=!1})}function Zs(t,e){const n=_d(t),a=new AbortController,o={passive:!0,...e,signal:a.signal};return[n,o,()=>a.abort()]}function Ri(t){return!(t.pointerType==="touch"||Ys())}function Wd(t,e,n={}){const[a,o,i]=Zs(t,n),r=s=>{if(!Ri(s))return;const{target:c}=s,h=e(c,s);if(typeof h!="function"||!c)return;const l=d=>{Ri(d)&&(h(d),c.removeEventListener("pointerleave",l))};c.addEventListener("pointerleave",l,o)};return a.forEach(s=>{s.addEventListener("pointerenter",r,o)}),i}const el=(t,e)=>e?t===e?!0:el(t,e.parentElement):!1,Jo=t=>t.pointerType==="mouse"?typeof t.button!="number"||t.button<=0:t.isPrimary!==!1,qd=new Set(["BUTTON","INPUT","SELECT","TEXTAREA","A"]);function Xd(t){return qd.has(t.tagName)||t.tabIndex!==-1}const Wn=new WeakSet;function xi(t){return e=>{e.key==="Enter"&&t(e)}}function Ea(t,e){t.dispatchEvent(new PointerEvent("pointer"+e,{isPrimary:!0,bubbles:!0}))}const Yd=(t,e)=>{const n=t.currentTarget;if(!n)return;const a=xi(()=>{if(Wn.has(n))return;Ea(n,"down");const o=xi(()=>{Ea(n,"up")}),i=()=>Ea(n,"cancel");n.addEventListener("keyup",o,e),n.addEventListener("blur",i,e)});n.addEventListener("keydown",a,e),n.addEventListener("blur",()=>n.removeEventListener("keydown",a),e)};function Ei(t){return Jo(t)&&!Ys()}function Zd(t,e,n={}){const[a,o,i]=Zs(t,n),r=s=>{const c=s.currentTarget;if(!Ei(s))return;Wn.add(c);const h=e(c,s),l=(f,m)=>{window.removeEventListener("pointerup",d),window.removeEventListener("pointercancel",u),Wn.has(c)&&Wn.delete(c),Ei(f)&&typeof h=="function"&&h(f,{success:m})},d=f=>{l(f,c===window||c===document||n.useGlobalTarget||el(c,f.target))},u=f=>{l(f,!1)};window.addEventListener("pointerup",d,o),window.addEventListener("pointercancel",u,o)};return a.forEach(s=>{(n.useGlobalTarget?window:s).addEventListener("pointerdown",r,o),Hd(s)&&(s.addEventListener("focus",h=>Yd(h,o)),!Xd(s)&&!s.hasAttribute("tabindex")&&(s.tabIndex=0))}),i}function tl(t){return fs(t)&&"ownerSVGElement"in t}function eh(t){return tl(t)&&t.tagName==="svg"}const ke=t=>!!(t&&t.getVelocity),th=[...Js,ye,pt],nh=t=>th.find(Ks(t)),nl=z.createContext({transformPagePoint:t=>t,isStatic:!1,reducedMotion:"never"});function ah(t=!0){const e=z.useContext(Ro);if(e===null)return[!0,null];const{isPresent:n,onExitComplete:a,register:o}=e,i=z.useId();z.useEffect(()=>{if(t)return o(i)},[t]);const r=z.useCallback(()=>t&&a&&a(i),[i,a,t]);return!n&&a?[!1,r]:[!0]}const al=z.createContext({strict:!1}),Mi={animation:["animate","variants","whileHover","whileTap","exit","whileInView","whileFocus","whileDrag"],exit:["exit"],drag:["drag","dragControls"],focus:["whileFocus"],hover:["whileHover","onHoverStart","onHoverEnd"],tap:["whileTap","onTap","onTapStart","onTapCancel"],pan:["onPan","onPanStart","onPanSessionStart","onPanEnd"],inView:["whileInView","onViewportEnter","onViewportLeave"],layout:["layout","layoutId"]},zt={};for(const t in Mi)zt[t]={isEnabled:e=>Mi[t].some(n=>!!e[n])};function oh(t){for(const e in t)zt[e]={...zt[e],...t[e]}}const ih=new Set(["animate","exit","variants","initial","style","values","variants","transition","transformTemplate","custom","inherit","onBeforeLayoutMeasure","onAnimationStart","onAnimationComplete","onUpdate","onDragStart","onDrag","onDragEnd","onMeasureDragConstraints","onDirectionLock","onDragTransitionEnd","_dragX","_dragY","onHoverStart","onHoverEnd","onViewportEnter","onViewportLeave","globalTapTarget","ignoreStrict","viewport"]);function sa(t){return t.startsWith("while")||t.startsWith("drag")&&t!=="draggable"||t.startsWith("layout")||t.startsWith("onTap")||t.startsWith("onPan")||t.startsWith("onLayout")||ih.has(t)}let ol=t=>!sa(t);function rh(t){typeof t=="function"&&(ol=e=>e.startsWith("on")?!sa(e):t(e))}try{rh(require("@emotion/is-prop-valid").default)}catch{}function sh(t,e,n){const a={};for(const o in t)o==="values"&&typeof t.values=="object"||(ol(o)||n===!0&&sa(o)||!e&&!sa(o)||t.draggable&&o.startsWith("onDrag"))&&(a[o]=t[o]);return a}const va=z.createContext({});function ba(t){return t!==null&&typeof t=="object"&&typeof t.start=="function"}function dn(t){return typeof t=="string"||Array.isArray(t)}const Wo=["animate","whileInView","whileFocus","whileHover","whileTap","whileDrag","exit"],qo=["initial",...Wo];function Pa(t){return ba(t.animate)||qo.some(e=>dn(t[e]))}function il(t){return!!(Pa(t)||t.variants)}function lh(t,e){if(Pa(t)){const{initial:n,animate:a}=t;return{initial:n===!1||dn(n)?n:void 0,animate:dn(a)?a:void 0}}return t.inherit!==!1?e:{}}function ch(t){const{initial:e,animate:n}=lh(t,z.useContext(va));return z.useMemo(()=>({initial:e,animate:n}),[Li(e),Li(n)])}function Li(t){return Array.isArray(t)?t.join(" "):t}function Ni(t,e){return e.max===e.min?0:t/(e.max-e.min)*100}const Wt={correct:(t,e)=>{if(!e.target)return t;if(typeof t=="string")if(Y.test(t))t=parseFloat(t);else return t;const n=Ni(t,e.target.x),a=Ni(t,e.target.y);return`${n}% ${a}%`}},uh={correct:(t,{treeScale:e,projectionDelta:n})=>{const a=t,o=pt.parse(t);if(o.length>5)return a;const i=pt.createTransformer(t),r=typeof o[0]!="number"?1:0,s=n.x.scale*e.x,c=n.y.scale*e.y;o[0+r]/=s,o[1+r]/=c;const h=pe(s,c,.5);return typeof o[2+r]=="number"&&(o[2+r]/=h),typeof o[3+r]=="number"&&(o[3+r]/=h),i(o)}},io={borderRadius:{...Wt,applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]},borderTopLeftRadius:Wt,borderTopRightRadius:Wt,borderBottomLeftRadius:Wt,borderBottomRightRadius:Wt,boxShadow:uh};function rl(t,{layout:e,layoutId:n}){return Jt.has(t)||t.startsWith("origin")||(e||n!==void 0)&&(!!io[t]||t==="opacity")}const dh={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"},hh=Kt.length;function fh(t,e,n){let a="",o=!0;for(let i=0;i<hh;i++){const r=Kt[i],s=t[r];if(s===void 0)continue;let c=!0;if(typeof s=="number"?c=s===(r.startsWith("scale")?1:0):c=parseFloat(s)===0,!c||n){const h=Xs(s,Qo[r]);if(!c){o=!1;const l=dh[r]||r;a+=`${l}(${h}) `}n&&(e[r]=h)}}return a=a.trim(),n?a=n(e,o?"":a):o&&(a="none"),a}function Xo(t,e,n){const{style:a,vars:o,transformOrigin:i}=t;let r=!1,s=!1;for(const c in e){const h=e[c];if(Jt.has(c)){r=!0;continue}else if(Rs(c)){o[c]=h;continue}else{const l=Xs(h,Qo[c]);c.startsWith("origin")?(s=!0,i[c]=l):a[c]=l}}if(e.transform||(r||n?a.transform=fh(e,t.transform,n):a.transform&&(a.transform="none")),s){const{originX:c="50%",originY:h="50%",originZ:l=0}=i;a.transformOrigin=`${c} ${h} ${l}`}}const Yo=()=>({style:{},transform:{},transformOrigin:{},vars:{}});function sl(t,e,n){for(const a in e)!ke(e[a])&&!rl(a,n)&&(t[a]=e[a])}function ph({transformTemplate:t},e){return z.useMemo(()=>{const n=Yo();return Xo(n,e,t),Object.assign({},n.vars,n.style)},[e])}function mh(t,e){const n=t.style||{},a={};return sl(a,n,t),Object.assign(a,ph(t,e)),a}function gh(t,e){const n={},a=mh(t,e);return t.drag&&t.dragListener!==!1&&(n.draggable=!1,a.userSelect=a.WebkitUserSelect=a.WebkitTouchCallout="none",a.touchAction=t.drag===!0?"none":`pan-${t.drag==="x"?"y":"x"}`),t.tabIndex===void 0&&(t.onTap||t.onTapStart||t.whileTap)&&(n.tabIndex=0),n.style=a,n}const yh={offset:"stroke-dashoffset",array:"stroke-dasharray"},vh={offset:"strokeDashoffset",array:"strokeDasharray"};function bh(t,e,n=1,a=0,o=!0){t.pathLength=1;const i=o?yh:vh;t[i.offset]=Y.transform(-a);const r=Y.transform(e),s=Y.transform(n);t[i.array]=`${r} ${s}`}function ll(t,{attrX:e,attrY:n,attrScale:a,pathLength:o,pathSpacing:i=1,pathOffset:r=0,...s},c,h,l){if(Xo(t,s,h),c){t.style.viewBox&&(t.attrs.viewBox=t.style.viewBox);return}t.attrs=t.style,t.style={};const{attrs:d,style:u}=t;d.transform&&(u.transform=d.transform,delete d.transform),(u.transform||d.transformOrigin)&&(u.transformOrigin=d.transformOrigin??"50% 50%",delete d.transformOrigin),u.transform&&(u.transformBox=l?.transformBox??"fill-box",delete d.transformBox),e!==void 0&&(d.x=e),n!==void 0&&(d.y=n),a!==void 0&&(d.scale=a),o!==void 0&&bh(d,o,i,r,!1)}const cl=()=>({...Yo(),attrs:{}}),ul=t=>typeof t=="string"&&t.toLowerCase()==="svg";function Ph(t,e,n,a){const o=z.useMemo(()=>{const i=cl();return ll(i,e,ul(a),t.transformTemplate,t.style),{...i.attrs,style:{...i.style}}},[e]);if(t.style){const i={};sl(i,t.style,t),o.style={...i,...o.style}}return o}const wh=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","switch","symbol","svg","text","tspan","use","view"];function Zo(t){return typeof t!="string"||t.includes("-")?!1:!!(wh.indexOf(t)>-1||/[A-Z]/u.test(t))}function Ch(t,e,n,{latestValues:a},o,i=!1){const s=(Zo(t)?Ph:gh)(e,a,o,t),c=sh(e,typeof t=="string",i),h=t!==z.Fragment?{...c,...s,ref:n}:{},{children:l}=e,d=z.useMemo(()=>ke(l)?l.get():l,[l]);return z.createElement(t,{...h,children:d})}function Fi(t){const e=[{},{}];return t?.values.forEach((n,a)=>{e[0][a]=n.get(),e[1][a]=n.getVelocity()}),e}function ei(t,e,n,a){if(typeof e=="function"){const[o,i]=Fi(a);e=e(n!==void 0?n:t.custom,o,i)}if(typeof e=="string"&&(e=t.variants&&t.variants[e]),typeof e=="function"){const[o,i]=Fi(a);e=e(n!==void 0?n:t.custom,o,i)}return e}function qn(t){return ke(t)?t.get():t}function Ah({scrapeMotionValuesFromProps:t,createRenderState:e},n,a,o){return{latestValues:Sh(n,a,o,t),renderState:e()}}function Sh(t,e,n,a){const o={},i=a(t,{});for(const u in i)o[u]=qn(i[u]);let{initial:r,animate:s}=t;const c=Pa(t),h=il(t);e&&h&&!c&&t.inherit!==!1&&(r===void 0&&(r=e.initial),s===void 0&&(s=e.animate));let l=n?n.initial===!1:!1;l=l||r===!1;const d=l?s:r;if(d&&typeof d!="boolean"&&!ba(d)){const u=Array.isArray(d)?d:[d];for(let f=0;f<u.length;f++){const m=ei(t,u[f]);if(m){const{transitionEnd:P,transition:A,...b}=m;for(const E in b){let T=b[E];if(Array.isArray(T)){const S=l?T.length-1:0;T=T[S]}T!==null&&(o[E]=T)}for(const E in P)o[E]=P[E]}}}return o}const dl=t=>(e,n)=>{const a=z.useContext(va),o=z.useContext(Ro),i=()=>Ah(t,e,a,o);return n?i():ou(i)};function ti(t,e,n){const{style:a}=t,o={};for(const i in a)(ke(a[i])||e.style&&ke(e.style[i])||rl(i,t)||n?.getValue(i)?.liveStyle!==void 0)&&(o[i]=a[i]);return o}const Th=dl({scrapeMotionValuesFromProps:ti,createRenderState:Yo});function hl(t,e,n){const a=ti(t,e,n);for(const o in t)if(ke(t[o])||ke(e[o])){const i=Kt.indexOf(o)!==-1?"attr"+o.charAt(0).toUpperCase()+o.substring(1):o;a[i]=t[o]}return a}const kh=dl({scrapeMotionValuesFromProps:hl,createRenderState:cl}),$h=Symbol.for("motionComponentSymbol");function Ft(t){return t&&typeof t=="object"&&Object.prototype.hasOwnProperty.call(t,"current")}function Rh(t,e,n){return z.useCallback(a=>{a&&t.onMount&&t.onMount(a),e&&(a?e.mount(a):e.unmount()),n&&(typeof n=="function"?n(a):Ft(n)&&(n.current=a))},[e])}const ni=t=>t.replace(/([a-z])([A-Z])/gu,"$1-$2").toLowerCase(),xh="framerAppearId",fl="data-"+ni(xh),pl=z.createContext({});function Eh(t,e,n,a,o){const{visualElement:i}=z.useContext(va),r=z.useContext(al),s=z.useContext(Ro),c=z.useContext(nl).reducedMotion,h=z.useRef(null);a=a||r.renderer,!h.current&&a&&(h.current=a(t,{visualState:e,parent:i,props:n,presenceContext:s,blockInitialAnimation:s?s.initial===!1:!1,reducedMotionConfig:c}));const l=h.current,d=z.useContext(pl);l&&!l.projection&&o&&(l.type==="html"||l.type==="svg")&&Mh(h.current,n,o,d);const u=z.useRef(!1);z.useInsertionEffect(()=>{l&&u.current&&l.update(n,s)});const f=n[fl],m=z.useRef(!!f&&!window.MotionHandoffIsComplete?.(f)&&window.MotionHasOptimisedAnimation?.(f));return iu(()=>{l&&(u.current=!0,window.MotionIsMounted=!0,l.updateFeatures(),l.scheduleRenderMicrotask(),m.current&&l.animationState&&l.animationState.animateChanges())}),z.useEffect(()=>{l&&(!m.current&&l.animationState&&l.animationState.animateChanges(),m.current&&(queueMicrotask(()=>{window.MotionHandoffMarkAsComplete?.(f)}),m.current=!1),l.enteringChildren=void 0)}),l}function Mh(t,e,n,a){const{layoutId:o,layout:i,drag:r,dragConstraints:s,layoutScroll:c,layoutRoot:h,layoutCrossfade:l}=e;t.projection=new n(t.latestValues,e["data-framer-portal-id"]?void 0:ml(t.parent)),t.projection.setOptions({layoutId:o,layout:i,alwaysMeasureLayout:!!r||s&&Ft(s),visualElement:t,animationType:typeof i=="string"?i:"both",initialPromotionConfig:a,crossfade:l,layoutScroll:c,layoutRoot:h})}function ml(t){if(t)return t.options.allowProjection!==!1?t.projection:ml(t.parent)}function Ma(t,{forwardMotionProps:e=!1}={},n,a){n&&oh(n);const o=Zo(t)?kh:Th;function i(s,c){let h;const l={...z.useContext(nl),...s,layoutId:Lh(s)},{isStatic:d}=l,u=ch(s),f=o(s,d);if(!d&&$o){Nh(l,n);const m=Fh(l);h=m.MeasureLayout,u.visualElement=Eh(t,f,l,a,m.ProjectionNode)}return oe.jsxs(va.Provider,{value:u,children:[h&&u.visualElement?oe.jsx(h,{visualElement:u.visualElement,...l}):null,Ch(t,s,Rh(f,u.visualElement,c),f,d,e)]})}i.displayName=`motion.${typeof t=="string"?t:`create(${t.displayName??t.name??""})`}`;const r=z.forwardRef(i);return r[$h]=t,r}function Lh({layoutId:t}){const e=z.useContext(ds).id;return e&&t!==void 0?e+"-"+t:t}function Nh(t,e){const n=z.useContext(al).strict;if(process.env.NODE_ENV!=="production"&&e&&n){const a="You have rendered a `motion` component within a `LazyMotion` component. This will break tree shaking. Import and render a `m` component instead.";t.ignoreStrict?Ht(!1,a,"lazy-strict-mode"):lt(!1,a,"lazy-strict-mode")}}function Fh(t){const{drag:e,layout:n}=zt;if(!e&&!n)return{};const a={...e,...n};return{MeasureLayout:e?.isEnabled(t)||n?.isEnabled(t)?a.MeasureLayout:void 0,ProjectionNode:a.ProjectionNode}}function Ih(t,e){if(typeof Proxy>"u")return Ma;const n=new Map,a=(i,r)=>Ma(i,r,t,e),o=(i,r)=>(process.env.NODE_ENV!=="production"&&No(!1,"motion() is deprecated. Use motion.create() instead."),a(i,r));return new Proxy(o,{get:(i,r)=>r==="create"?a:(n.has(r)||n.set(r,Ma(r,void 0,t,e)),n.get(r))})}function gl({top:t,left:e,right:n,bottom:a}){return{x:{min:e,max:n},y:{min:t,max:a}}}function Uh({x:t,y:e}){return{top:e.min,right:t.max,bottom:e.max,left:t.min}}function Oh(t,e){if(!e)return t;const n=e({x:t.left,y:t.top}),a=e({x:t.right,y:t.bottom});return{top:n.y,left:n.x,bottom:a.y,right:a.x}}function La(t){return t===void 0||t===1}function ro({scale:t,scaleX:e,scaleY:n}){return!La(t)||!La(e)||!La(n)}function bt(t){return ro(t)||yl(t)||t.z||t.rotate||t.rotateX||t.rotateY||t.skewX||t.skewY}function yl(t){return Ii(t.x)||Ii(t.y)}function Ii(t){return t&&t!=="0%"}function la(t,e,n){const a=t-n,o=e*a;return n+o}function Ui(t,e,n,a,o){return o!==void 0&&(t=la(t,o,a)),la(t,n,a)+e}function so(t,e=0,n=1,a,o){t.min=Ui(t.min,e,n,a,o),t.max=Ui(t.max,e,n,a,o)}function vl(t,{x:e,y:n}){so(t.x,e.translate,e.scale,e.originPoint),so(t.y,n.translate,n.scale,n.originPoint)}const Oi=.999999999999,Di=1.0000000000001;function Dh(t,e,n,a=!1){const o=n.length;if(!o)return;e.x=e.y=1;let i,r;for(let s=0;s<o;s++){i=n[s],r=i.projectionDelta;const{visualElement:c}=i.options;c&&c.props.style&&c.props.style.display==="contents"||(a&&i.options.layoutScroll&&i.scroll&&i!==i.root&&Ut(t,{x:-i.scroll.offset.x,y:-i.scroll.offset.y}),r&&(e.x*=r.x.scale,e.y*=r.y.scale,vl(t,r)),a&&bt(i.latestValues)&&Ut(t,i.latestValues))}e.x<Di&&e.x>Oi&&(e.x=1),e.y<Di&&e.y>Oi&&(e.y=1)}function It(t,e){t.min=t.min+e,t.max=t.max+e}function Bi(t,e,n,a,o=.5){const i=pe(t.min,t.max,o);so(t,e,n,i,a)}function Ut(t,e){Bi(t.x,e.x,e.scaleX,e.scale,e.originX),Bi(t.y,e.y,e.scaleY,e.scale,e.originY)}function bl(t,e){return gl(Oh(t.getBoundingClientRect(),e))}function Bh(t,e,n){const a=bl(t,n),{scroll:o}=e;return o&&(It(a.x,o.offset.x),It(a.y,o.offset.y)),a}const Vi=()=>({translate:0,scale:1,origin:0,originPoint:0}),Ot=()=>({x:Vi(),y:Vi()}),Gi=()=>({min:0,max:0}),ve=()=>({x:Gi(),y:Gi()}),lo={current:null},Pl={current:!1};function Vh(){if(Pl.current=!0,!!$o)if(window.matchMedia){const t=window.matchMedia("(prefers-reduced-motion)"),e=()=>lo.current=t.matches;t.addEventListener("change",e),e()}else lo.current=!1}const Gh=new WeakMap;function jh(t,e,n){for(const a in e){const o=e[a],i=n[a];if(ke(o))t.addValue(a,o);else if(ke(i))t.addValue(a,jt(o,{owner:t}));else if(i!==o)if(t.hasValue(a)){const r=t.getValue(a);r.liveStyle===!0?r.jump(o):r.hasAnimated||r.set(o)}else{const r=t.getStaticValue(a);t.addValue(a,jt(r!==void 0?r:o,{owner:t}))}}for(const a in n)e[a]===void 0&&t.removeValue(a);return e}const ji=["AnimationStart","AnimationComplete","Update","BeforeLayoutMeasure","LayoutMeasure","LayoutAnimationStart","LayoutAnimationComplete"];class zh{scrapeMotionValuesFromProps(e,n,a){return{}}constructor({parent:e,props:n,presenceContext:a,reducedMotionConfig:o,blockInitialAnimation:i,visualState:r},s={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.values=new Map,this.KeyframeResolver=_o,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify("Update",this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.renderScheduledAt=0,this.scheduleRender=()=>{const u=Fe.now();this.renderScheduledAt<u&&(this.renderScheduledAt=u,he.render(this.render,!1,!0))};const{latestValues:c,renderState:h}=r;this.latestValues=c,this.baseTarget={...c},this.initialValues=n.initial?{...c}:{},this.renderState=h,this.parent=e,this.props=n,this.presenceContext=a,this.depth=e?e.depth+1:0,this.reducedMotionConfig=o,this.options=s,this.blockInitialAnimation=!!i,this.isControllingVariants=Pa(n),this.isVariantNode=il(n),this.isVariantNode&&(this.variantChildren=new Set),this.manuallyAnimateOnMount=!!(e&&e.current);const{willChange:l,...d}=this.scrapeMotionValuesFromProps(n,{},this);for(const u in d){const f=d[u];c[u]!==void 0&&ke(f)&&f.set(c[u])}}mount(e){this.current=e,Gh.set(e,this),this.projection&&!this.projection.instance&&this.projection.mount(e),this.parent&&this.isVariantNode&&!this.isControllingVariants&&(this.removeFromVariantTree=this.parent.addVariantChild(this)),this.values.forEach((n,a)=>this.bindToMotionValue(a,n)),Pl.current||Vh(),this.shouldReduceMotion=this.reducedMotionConfig==="never"?!1:this.reducedMotionConfig==="always"?!0:lo.current,process.env.NODE_ENV!=="production"&&No(this.shouldReduceMotion!==!0,"You have Reduced Motion enabled on your device. Animations may not appear as expected.","reduced-motion-disabled"),this.parent?.addChild(this),this.update(this.props,this.presenceContext)}unmount(){this.projection&&this.projection.unmount(),ft(this.notifyUpdate),ft(this.render),this.valueSubscriptions.forEach(e=>e()),this.valueSubscriptions.clear(),this.removeFromVariantTree&&this.removeFromVariantTree(),this.parent?.removeChild(this);for(const e in this.events)this.events[e].clear();for(const e in this.features){const n=this.features[e];n&&(n.unmount(),n.isMounted=!1)}this.current=null}addChild(e){this.children.add(e),this.enteringChildren??(this.enteringChildren=new Set),this.enteringChildren.add(e)}removeChild(e){this.children.delete(e),this.enteringChildren&&this.enteringChildren.delete(e)}bindToMotionValue(e,n){this.valueSubscriptions.has(e)&&this.valueSubscriptions.get(e)();const a=Jt.has(e);a&&this.onBindTransform&&this.onBindTransform();const o=n.on("change",r=>{this.latestValues[e]=r,this.props.onUpdate&&he.preRender(this.notifyUpdate),a&&this.projection&&(this.projection.isTransformDirty=!0),this.scheduleRender()});let i;window.MotionCheckAppearSync&&(i=window.MotionCheckAppearSync(this,e,n)),this.valueSubscriptions.set(e,()=>{o(),i&&i(),n.owner&&n.stop()})}sortNodePosition(e){return!this.current||!this.sortInstanceNodePosition||this.type!==e.type?0:this.sortInstanceNodePosition(this.current,e.current)}updateFeatures(){let e="animation";for(e in zt){const n=zt[e];if(!n)continue;const{isEnabled:a,Feature:o}=n;if(!this.features[e]&&o&&a(this.props)&&(this.features[e]=new o(this)),this.features[e]){const i=this.features[e];i.isMounted?i.update():(i.mount(),i.isMounted=!0)}}}triggerBuild(){this.build(this.renderState,this.latestValues,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):ve()}getStaticValue(e){return this.latestValues[e]}setStaticValue(e,n){this.latestValues[e]=n}update(e,n){(e.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=e,this.prevPresenceContext=this.presenceContext,this.presenceContext=n;for(let a=0;a<ji.length;a++){const o=ji[a];this.propEventSubscriptions[o]&&(this.propEventSubscriptions[o](),delete this.propEventSubscriptions[o]);const i="on"+o,r=e[i];r&&(this.propEventSubscriptions[o]=this.on(o,r))}this.prevMotionValues=jh(this,this.scrapeMotionValuesFromProps(e,this.prevProps,this),this.prevMotionValues),this.handleChildMotionValue&&this.handleChildMotionValue()}getProps(){return this.props}getVariant(e){return this.props.variants?this.props.variants[e]:void 0}getDefaultTransition(){return this.props.transition}getTransformPagePoint(){return this.props.transformPagePoint}getClosestVariantNode(){return this.isVariantNode?this:this.parent?this.parent.getClosestVariantNode():void 0}addVariantChild(e){const n=this.getClosestVariantNode();if(n)return n.variantChildren&&n.variantChildren.add(e),()=>n.variantChildren.delete(e)}addValue(e,n){const a=this.values.get(e);n!==a&&(a&&this.removeValue(e),this.bindToMotionValue(e,n),this.values.set(e,n),this.latestValues[e]=n.get())}removeValue(e){this.values.delete(e);const n=this.valueSubscriptions.get(e);n&&(n(),this.valueSubscriptions.delete(e)),delete this.latestValues[e],this.removeValueFromRenderState(e,this.renderState)}hasValue(e){return this.values.has(e)}getValue(e,n){if(this.props.values&&this.props.values[e])return this.props.values[e];let a=this.values.get(e);return a===void 0&&n!==void 0&&(a=jt(n===null?void 0:n,{owner:this}),this.addValue(e,a)),a}readValue(e,n){let a=this.latestValues[e]!==void 0||!this.current?this.latestValues[e]:this.getBaseTargetFromProps(this.props,e)??this.readValueFromInstance(this.current,e,this.options);return a!=null&&(typeof a=="string"&&(hs(a)||ps(a))?a=parseFloat(a):!nh(a)&&pt.test(n)&&(a=qs(e,n)),this.setBaseTarget(e,ke(a)?a.get():a)),ke(a)?a.get():a}setBaseTarget(e,n){this.baseTarget[e]=n}getBaseTarget(e){const{initial:n}=this.props;let a;if(typeof n=="string"||typeof n=="object"){const i=ei(this.props,n,this.presenceContext?.custom);i&&(a=i[e])}if(n&&a!==void 0)return a;const o=this.getBaseTargetFromProps(this.props,e);return o!==void 0&&!ke(o)?o:this.initialValues[e]!==void 0&&a===void 0?void 0:this.baseTarget[e]}on(e,n){return this.events[e]||(this.events[e]=new Lo),this.events[e].add(n)}notify(e,...n){this.events[e]&&this.events[e].notify(...n)}scheduleRenderMicrotask(){Ko.render(this.render)}}class wl extends zh{constructor(){super(...arguments),this.KeyframeResolver=zd}sortInstanceNodePosition(e,n){return e.compareDocumentPosition(n)&2?1:-1}getBaseTargetFromProps(e,n){return e.style?e.style[n]:void 0}removeValueFromRenderState(e,{vars:n,style:a}){delete n[e],delete a[e]}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);const{children:e}=this.props;ke(e)&&(this.childSubscription=e.on("change",n=>{this.current&&(this.current.textContent=`${n}`)}))}}function Cl(t,{style:e,vars:n},a,o){const i=t.style;let r;for(r in e)i[r]=e[r];o?.applyProjectionStyles(i,a);for(r in n)i.setProperty(r,n[r])}function _h(t){return window.getComputedStyle(t)}class Hh extends wl{constructor(){super(...arguments),this.type="html",this.renderInstance=Cl}readValueFromInstance(e,n){if(Jt.has(n))return this.projection?.isProjecting?Ya(n):sd(e,n);{const a=_h(e),o=(Rs(n)?a.getPropertyValue(n):a[n])||0;return typeof o=="string"?o.trim():o}}measureInstanceViewportBox(e,{transformPagePoint:n}){return bl(e,n)}build(e,n,a){Xo(e,n,a.transformTemplate)}scrapeMotionValuesFromProps(e,n,a){return ti(e,n,a)}}const Al=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength","startOffset","textLength","lengthAdjust"]);function Qh(t,e,n,a){Cl(t,e,void 0,a);for(const o in e.attrs)t.setAttribute(Al.has(o)?o:ni(o),e.attrs[o])}class Kh extends wl{constructor(){super(...arguments),this.type="svg",this.isSVGTag=!1,this.measureInstanceViewportBox=ve}getBaseTargetFromProps(e,n){return e[n]}readValueFromInstance(e,n){if(Jt.has(n)){const a=Ws(n);return a&&a.default||0}return n=Al.has(n)?n:ni(n),e.getAttribute(n)}scrapeMotionValuesFromProps(e,n,a){return hl(e,n,a)}build(e,n,a){ll(e,n,this.isSVGTag,a.transformTemplate,a.style)}renderInstance(e,n,a,o){Qh(e,n,a,o)}mount(e){this.isSVGTag=ul(e.tagName),super.mount(e)}}const Jh=(t,e)=>Zo(t)?new Kh(e):new Hh(e,{allowProjection:t!==z.Fragment});function Bt(t,e,n){const a=t.getProps();return ei(a,e,n!==void 0?n:a.custom,t)}const co=t=>Array.isArray(t);function Wh(t,e,n){t.hasValue(e)?t.getValue(e).set(n):t.addValue(e,jt(n))}function qh(t){return co(t)?t[t.length-1]||0:t}function Xh(t,e){const n=Bt(t,e);let{transitionEnd:a={},transition:o={},...i}=n||{};i={...i,...a};for(const r in i){const s=qh(i[r]);Wh(t,r,s)}}function Yh(t){return!!(ke(t)&&t.add)}function uo(t,e){const n=t.getValue("willChange");if(Yh(n))return n.add(e);if(!n&&ct.WillChange){const a=new ct.WillChange("auto");t.addValue("willChange",a),a.add(e)}}function Sl(t){return t.props[fl]}const Zh=t=>t!==null;function ef(t,{repeat:e,repeatType:n="loop"},a){const o=t.filter(Zh),i=e&&n!=="loop"&&e%2===1?0:o.length-1;return o[i]}const tf={type:"spring",stiffness:500,damping:25,restSpeed:10},nf=t=>({type:"spring",stiffness:550,damping:t===0?2*Math.sqrt(550):30,restSpeed:10}),af={type:"keyframes",duration:.8},of={type:"keyframes",ease:[.25,.1,.35,1],duration:.3},rf=(t,{keyframes:e})=>e.length>2?af:Jt.has(t)?t.startsWith("scale")?nf(e[1]):tf:of;function sf({when:t,delay:e,delayChildren:n,staggerChildren:a,staggerDirection:o,repeat:i,repeatType:r,repeatDelay:s,from:c,elapsed:h,...l}){return!!Object.keys(l).length}const ai=(t,e,n,a={},o,i)=>r=>{const s=Ho(a,t)||{},c=s.delay||a.delay||0;let{elapsed:h=0}=a;h=h-et(c);const l={keyframes:Array.isArray(n)?n:[null,n],ease:"easeOut",velocity:e.getVelocity(),...s,delay:-h,onUpdate:u=>{e.set(u),s.onUpdate&&s.onUpdate(u)},onComplete:()=>{r(),s.onComplete&&s.onComplete()},name:t,motionValue:e,element:i?void 0:o};sf(s)||Object.assign(l,rf(t,l)),l.duration&&(l.duration=et(l.duration)),l.repeatDelay&&(l.repeatDelay=et(l.repeatDelay)),l.from!==void 0&&(l.keyframes[0]=l.from);let d=!1;if((l.type===!1||l.duration===0&&!l.repeatDelay)&&(ao(l),l.delay===0&&(d=!0)),(ct.instantAnimations||ct.skipAnimations)&&(d=!0,ao(l),l.delay=0),l.allowFlatten=!s.type&&!s.ease,d&&!i&&e.get()!==void 0){const u=ef(l.keyframes,s);if(u!==void 0){he.update(()=>{l.onUpdate(u),l.onComplete()});return}}return s.isSync?new zo(l):new Ed(l)};function lf({protectedKeys:t,needsAnimating:e},n){const a=t.hasOwnProperty(n)&&e[n]!==!0;return e[n]=!1,a}function Tl(t,e,{delay:n=0,transitionOverride:a,type:o}={}){let{transition:i=t.getDefaultTransition(),transitionEnd:r,...s}=e;a&&(i=a);const c=[],h=o&&t.animationState&&t.animationState.getState()[o];for(const l in s){const d=t.getValue(l,t.latestValues[l]??null),u=s[l];if(u===void 0||h&&lf(h,l))continue;const f={delay:n,...Ho(i||{},l)},m=d.get();if(m!==void 0&&!d.isAnimating&&!Array.isArray(u)&&u===m&&!f.velocity)continue;let P=!1;if(window.MotionHandoffAnimation){const b=Sl(t);if(b){const E=window.MotionHandoffAnimation(b,l,he);E!==null&&(f.startTime=E,P=!0)}}uo(t,l),d.start(ai(l,d,u,t.shouldReduceMotion&&Qs.has(l)?{type:!1}:f,t,P));const A=d.animation;A&&c.push(A)}return r&&Promise.all(c).then(()=>{he.update(()=>{r&&Xh(t,r)})}),c}function kl(t,e,n,a=0,o=1){const i=Array.from(t).sort((h,l)=>h.sortNodePosition(l)).indexOf(e),r=t.size,s=(r-1)*a;return typeof n=="function"?n(i,r):o===1?i*a:s-i*a}function ho(t,e,n={}){const a=Bt(t,e,n.type==="exit"?t.presenceContext?.custom:void 0);let{transition:o=t.getDefaultTransition()||{}}=a||{};n.transitionOverride&&(o=n.transitionOverride);const i=a?()=>Promise.all(Tl(t,a,n)):()=>Promise.resolve(),r=t.variantChildren&&t.variantChildren.size?(c=0)=>{const{delayChildren:h=0,staggerChildren:l,staggerDirection:d}=o;return cf(t,e,c,h,l,d,n)}:()=>Promise.resolve(),{when:s}=o;if(s){const[c,h]=s==="beforeChildren"?[i,r]:[r,i];return c().then(()=>h())}else return Promise.all([i(),r(n.delay)])}function cf(t,e,n=0,a=0,o=0,i=1,r){const s=[];for(const c of t.variantChildren)c.notify("AnimationStart",e),s.push(ho(c,e,{...r,delay:n+(typeof a=="function"?0:a)+kl(t.variantChildren,c,a,o,i)}).then(()=>c.notify("AnimationComplete",e)));return Promise.all(s)}function uf(t,e,n={}){t.notify("AnimationStart",e);let a;if(Array.isArray(e)){const o=e.map(i=>ho(t,i,n));a=Promise.all(o)}else if(typeof e=="string")a=ho(t,e,n);else{const o=typeof e=="function"?Bt(t,e,n.custom):e;a=Promise.all(Tl(t,o,n))}return a.then(()=>{t.notify("AnimationComplete",e)})}function $l(t,e){if(!Array.isArray(e))return!1;const n=e.length;if(n!==t.length)return!1;for(let a=0;a<n;a++)if(e[a]!==t[a])return!1;return!0}const df=qo.length;function Rl(t){if(!t)return;if(!t.isControllingVariants){const n=t.parent?Rl(t.parent)||{}:{};return t.props.initial!==void 0&&(n.initial=t.props.initial),n}const e={};for(let n=0;n<df;n++){const a=qo[n],o=t.props[a];(dn(o)||o===!1)&&(e[a]=o)}return e}const hf=[...Wo].reverse(),ff=Wo.length;function pf(t){return e=>Promise.all(e.map(({animation:n,options:a})=>uf(t,n,a)))}function mf(t){let e=pf(t),n=zi(),a=!0;const o=c=>(h,l)=>{const d=Bt(t,l,c==="exit"?t.presenceContext?.custom:void 0);if(d){const{transition:u,transitionEnd:f,...m}=d;h={...h,...m,...f}}return h};function i(c){e=c(t)}function r(c){const{props:h}=t,l=Rl(t.parent)||{},d=[],u=new Set;let f={},m=1/0;for(let A=0;A<ff;A++){const b=hf[A],E=n[b],T=h[b]!==void 0?h[b]:l[b],S=dn(T),M=b===c?E.isActive:null;M===!1&&(m=A);let C=T===l[b]&&T!==h[b]&&S;if(C&&a&&t.manuallyAnimateOnMount&&(C=!1),E.protectedKeys={...f},!E.isActive&&M===null||!T&&!E.prevProp||ba(T)||typeof T=="boolean")continue;const F=gf(E.prevProp,T);let g=F||b===c&&E.isActive&&!C&&S||A>m&&S,v=!1;const k=Array.isArray(T)?T:[T];let R=k.reduce(o(b),{});M===!1&&(R={});const{prevResolvedValues:x={}}=E,N={...x,...R},$=y=>{g=!0,u.has(y)&&(v=!0,u.delete(y)),E.needsAnimating[y]=!0;const U=t.getValue(y);U&&(U.liveStyle=!1)};for(const y in N){const U=R[y],L=x[y];if(f.hasOwnProperty(y))continue;let B=!1;co(U)&&co(L)?B=!$l(U,L):B=U!==L,B?U!=null?$(y):u.add(y):U!==void 0&&u.has(y)?$(y):E.protectedKeys[y]=!0}E.prevProp=T,E.prevResolvedValues=R,E.isActive&&(f={...f,...R}),a&&t.blockInitialAnimation&&(g=!1);const I=C&&F;g&&(!I||v)&&d.push(...k.map(y=>{const U={type:b};if(typeof y=="string"&&a&&!I&&t.manuallyAnimateOnMount&&t.parent){const{parent:L}=t,B=Bt(L,y);if(L.enteringChildren&&B){const{delayChildren:J}=B.transition||{};U.delay=kl(L.enteringChildren,t,J)}}return{animation:y,options:U}}))}if(u.size){const A={};if(typeof h.initial!="boolean"){const b=Bt(t,Array.isArray(h.initial)?h.initial[0]:h.initial);b&&b.transition&&(A.transition=b.transition)}u.forEach(b=>{const E=t.getBaseTarget(b),T=t.getValue(b);T&&(T.liveStyle=!0),A[b]=E??null}),d.push({animation:A})}let P=!!d.length;return a&&(h.initial===!1||h.initial===h.animate)&&!t.manuallyAnimateOnMount&&(P=!1),a=!1,P?e(d):Promise.resolve()}function s(c,h){if(n[c].isActive===h)return Promise.resolve();t.variantChildren?.forEach(d=>d.animationState?.setActive(c,h)),n[c].isActive=h;const l=r(c);for(const d in n)n[d].protectedKeys={};return l}return{animateChanges:r,setActive:s,setAnimateFunction:i,getState:()=>n,reset:()=>{n=zi()}}}function gf(t,e){return typeof e=="string"?e!==t:Array.isArray(e)?!$l(e,t):!1}function vt(t=!1){return{isActive:t,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}}}function zi(){return{animate:vt(!0),whileInView:vt(),whileHover:vt(),whileTap:vt(),whileDrag:vt(),whileFocus:vt(),exit:vt()}}class mt{constructor(e){this.isMounted=!1,this.node=e}update(){}}class yf extends mt{constructor(e){super(e),e.animationState||(e.animationState=mf(e))}updateAnimationControlsSubscription(){const{animate:e}=this.node.getProps();ba(e)&&(this.unmountControls=e.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){const{animate:e}=this.node.getProps(),{animate:n}=this.node.prevProps||{};e!==n&&this.updateAnimationControlsSubscription()}unmount(){this.node.animationState.reset(),this.unmountControls?.()}}let vf=0;class bf extends mt{constructor(){super(...arguments),this.id=vf++}update(){if(!this.node.presenceContext)return;const{isPresent:e,onExitComplete:n}=this.node.presenceContext,{isPresent:a}=this.node.prevPresenceContext||{};if(!this.node.animationState||e===a)return;const o=this.node.animationState.setActive("exit",!e);n&&!e&&o.then(()=>{n(this.id)})}mount(){const{register:e,onExitComplete:n}=this.node.presenceContext||{};n&&n(this.id),e&&(this.unmount=e(this.id))}unmount(){}}const Pf={animation:{Feature:yf},exit:{Feature:bf}};function hn(t,e,n,a={passive:!0}){return t.addEventListener(e,n,a),()=>t.removeEventListener(e,n)}function yn(t){return{point:{x:t.pageX,y:t.pageY}}}const wf=t=>e=>Jo(e)&&t(e,yn(e));function tn(t,e,n,a){return hn(t,e,wf(n),a)}const xl=1e-4,Cf=1-xl,Af=1+xl,El=.01,Sf=0-El,Tf=0+El;function Me(t){return t.max-t.min}function kf(t,e,n){return Math.abs(t-e)<=n}function _i(t,e,n,a=.5){t.origin=a,t.originPoint=pe(e.min,e.max,t.origin),t.scale=Me(n)/Me(e),t.translate=pe(n.min,n.max,t.origin)-t.originPoint,(t.scale>=Cf&&t.scale<=Af||isNaN(t.scale))&&(t.scale=1),(t.translate>=Sf&&t.translate<=Tf||isNaN(t.translate))&&(t.translate=0)}function nn(t,e,n,a){_i(t.x,e.x,n.x,a?a.originX:void 0),_i(t.y,e.y,n.y,a?a.originY:void 0)}function Hi(t,e,n){t.min=n.min+e.min,t.max=t.min+Me(e)}function $f(t,e,n){Hi(t.x,e.x,n.x),Hi(t.y,e.y,n.y)}function Qi(t,e,n){t.min=e.min-n.min,t.max=t.min+Me(e)}function ca(t,e,n){Qi(t.x,e.x,n.x),Qi(t.y,e.y,n.y)}function ze(t){return[t("x"),t("y")]}const Ml=({current:t})=>t?t.ownerDocument.defaultView:null,Ki=(t,e)=>Math.abs(t-e);function Rf(t,e){const n=Ki(t.x,e.x),a=Ki(t.y,e.y);return Math.sqrt(n**2+a**2)}class Ll{constructor(e,n,{transformPagePoint:a,contextWindow:o=window,dragSnapToOrigin:i=!1,distanceThreshold:r=3}={}){if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.handlers={},this.contextWindow=window,this.updatePoint=()=>{if(!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const u=Fa(this.lastMoveEventInfo,this.history),f=this.startEvent!==null,m=Rf(u.offset,{x:0,y:0})>=this.distanceThreshold;if(!f&&!m)return;const{point:P}=u,{timestamp:A}=Ae;this.history.push({...P,timestamp:A});const{onStart:b,onMove:E}=this.handlers;f||(b&&b(this.lastMoveEvent,u),this.startEvent=this.lastMoveEvent),E&&E(this.lastMoveEvent,u)},this.handlePointerMove=(u,f)=>{this.lastMoveEvent=u,this.lastMoveEventInfo=Na(f,this.transformPagePoint),he.update(this.updatePoint,!0)},this.handlePointerUp=(u,f)=>{this.end();const{onEnd:m,onSessionEnd:P,resumeAnimation:A}=this.handlers;if(this.dragSnapToOrigin&&A&&A(),!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const b=Fa(u.type==="pointercancel"?this.lastMoveEventInfo:Na(f,this.transformPagePoint),this.history);this.startEvent&&m&&m(u,b),P&&P(u,b)},!Jo(e))return;this.dragSnapToOrigin=i,this.handlers=n,this.transformPagePoint=a,this.distanceThreshold=r,this.contextWindow=o||window;const s=yn(e),c=Na(s,this.transformPagePoint),{point:h}=c,{timestamp:l}=Ae;this.history=[{...h,timestamp:l}];const{onSessionStart:d}=n;d&&d(e,Fa(c,this.history)),this.removeListeners=pn(tn(this.contextWindow,"pointermove",this.handlePointerMove),tn(this.contextWindow,"pointerup",this.handlePointerUp),tn(this.contextWindow,"pointercancel",this.handlePointerUp))}updateHandlers(e){this.handlers=e}end(){this.removeListeners&&this.removeListeners(),ft(this.updatePoint)}}function Na(t,e){return e?{point:e(t.point)}:t}function Ji(t,e){return{x:t.x-e.x,y:t.y-e.y}}function Fa({point:t},e){return{point:t,delta:Ji(t,Nl(e)),offset:Ji(t,xf(e)),velocity:Ef(e,.1)}}function xf(t){return t[0]}function Nl(t){return t[t.length-1]}function Ef(t,e){if(t.length<2)return{x:0,y:0};let n=t.length-1,a=null;const o=Nl(t);for(;n>=0&&(a=t[n],!(o.timestamp-a.timestamp>et(e)));)n--;if(!a)return{x:0,y:0};const i=He(o.timestamp-a.timestamp);if(i===0)return{x:0,y:0};const r={x:(o.x-a.x)/i,y:(o.y-a.y)/i};return r.x===1/0&&(r.x=0),r.y===1/0&&(r.y=0),r}function Mf(t,{min:e,max:n},a){return e!==void 0&&t<e?t=a?pe(e,t,a.min):Math.max(t,e):n!==void 0&&t>n&&(t=a?pe(n,t,a.max):Math.min(t,n)),t}function Wi(t,e,n){return{min:e!==void 0?t.min+e:void 0,max:n!==void 0?t.max+n-(t.max-t.min):void 0}}function Lf(t,{top:e,left:n,bottom:a,right:o}){return{x:Wi(t.x,n,o),y:Wi(t.y,e,a)}}function qi(t,e){let n=e.min-t.min,a=e.max-t.max;return e.max-e.min<t.max-t.min&&([n,a]=[a,n]),{min:n,max:a}}function Nf(t,e){return{x:qi(t.x,e.x),y:qi(t.y,e.y)}}function Ff(t,e){let n=.5;const a=Me(t),o=Me(e);return o>a?n=ln(e.min,e.max-a,t.min):a>o&&(n=ln(t.min,t.max-o,e.min)),st(0,1,n)}function If(t,e){const n={};return e.min!==void 0&&(n.min=e.min-t.min),e.max!==void 0&&(n.max=e.max-t.min),n}const fo=.35;function Uf(t=fo){return t===!1?t=0:t===!0&&(t=fo),{x:Xi(t,"left","right"),y:Xi(t,"top","bottom")}}function Xi(t,e,n){return{min:Yi(t,e),max:Yi(t,n)}}function Yi(t,e){return typeof t=="number"?t:t[e]||0}const Of=new WeakMap;class Df{constructor(e){this.openDragLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=ve(),this.latestPointerEvent=null,this.latestPanInfo=null,this.visualElement=e}start(e,{snapToCursor:n=!1,distanceThreshold:a}={}){const{presenceContext:o}=this.visualElement;if(o&&o.isPresent===!1)return;const i=d=>{const{dragSnapToOrigin:u}=this.getProps();u?this.pauseAnimation():this.stopAnimation(),n&&this.snapToCursor(yn(d).point)},r=(d,u)=>{const{drag:f,dragPropagation:m,onDragStart:P}=this.getProps();if(f&&!m&&(this.openDragLock&&this.openDragLock(),this.openDragLock=Jd(f),!this.openDragLock))return;this.latestPointerEvent=d,this.latestPanInfo=u,this.isDragging=!0,this.currentDirection=null,this.resolveConstraints(),this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!0,this.visualElement.projection.target=void 0),ze(b=>{let E=this.getAxisMotionValue(b).get()||0;if(it.test(E)){const{projection:T}=this.visualElement;if(T&&T.layout){const S=T.layout.layoutBox[b];S&&(E=Me(S)*(parseFloat(E)/100))}}this.originPoint[b]=E}),P&&he.postRender(()=>P(d,u)),uo(this.visualElement,"transform");const{animationState:A}=this.visualElement;A&&A.setActive("whileDrag",!0)},s=(d,u)=>{this.latestPointerEvent=d,this.latestPanInfo=u;const{dragPropagation:f,dragDirectionLock:m,onDirectionLock:P,onDrag:A}=this.getProps();if(!f&&!this.openDragLock)return;const{offset:b}=u;if(m&&this.currentDirection===null){this.currentDirection=Bf(b),this.currentDirection!==null&&P&&P(this.currentDirection);return}this.updateAxis("x",u.point,b),this.updateAxis("y",u.point,b),this.visualElement.render(),A&&A(d,u)},c=(d,u)=>{this.latestPointerEvent=d,this.latestPanInfo=u,this.stop(d,u),this.latestPointerEvent=null,this.latestPanInfo=null},h=()=>ze(d=>this.getAnimationState(d)==="paused"&&this.getAxisMotionValue(d).animation?.play()),{dragSnapToOrigin:l}=this.getProps();this.panSession=new Ll(e,{onSessionStart:i,onStart:r,onMove:s,onSessionEnd:c,resumeAnimation:h},{transformPagePoint:this.visualElement.getTransformPagePoint(),dragSnapToOrigin:l,distanceThreshold:a,contextWindow:Ml(this.visualElement)})}stop(e,n){const a=e||this.latestPointerEvent,o=n||this.latestPanInfo,i=this.isDragging;if(this.cancel(),!i||!o||!a)return;const{velocity:r}=o;this.startAnimation(r);const{onDragEnd:s}=this.getProps();s&&he.postRender(()=>s(a,o))}cancel(){this.isDragging=!1;const{projection:e,animationState:n}=this.visualElement;e&&(e.isAnimationBlocked=!1),this.panSession&&this.panSession.end(),this.panSession=void 0;const{dragPropagation:a}=this.getProps();!a&&this.openDragLock&&(this.openDragLock(),this.openDragLock=null),n&&n.setActive("whileDrag",!1)}updateAxis(e,n,a){const{drag:o}=this.getProps();if(!a||!Hn(e,o,this.currentDirection))return;const i=this.getAxisMotionValue(e);let r=this.originPoint[e]+a[e];this.constraints&&this.constraints[e]&&(r=Mf(r,this.constraints[e],this.elastic[e])),i.set(r)}resolveConstraints(){const{dragConstraints:e,dragElastic:n}=this.getProps(),a=this.visualElement.projection&&!this.visualElement.projection.layout?this.visualElement.projection.measure(!1):this.visualElement.projection?.layout,o=this.constraints;e&&Ft(e)?this.constraints||(this.constraints=this.resolveRefConstraints()):e&&a?this.constraints=Lf(a.layoutBox,e):this.constraints=!1,this.elastic=Uf(n),o!==this.constraints&&a&&this.constraints&&!this.hasMutatedConstraints&&ze(i=>{this.constraints!==!1&&this.getAxisMotionValue(i)&&(this.constraints[i]=If(a.layoutBox[i],this.constraints[i]))})}resolveRefConstraints(){const{dragConstraints:e,onMeasureDragConstraints:n}=this.getProps();if(!e||!Ft(e))return!1;const a=e.current;lt(a!==null,"If `dragConstraints` is set as a React ref, that ref must be passed to another component's `ref` prop.","drag-constraints-ref");const{projection:o}=this.visualElement;if(!o||!o.layout)return!1;const i=Bh(a,o.root,this.visualElement.getTransformPagePoint());let r=Nf(o.layout.layoutBox,i);if(n){const s=n(Uh(r));this.hasMutatedConstraints=!!s,s&&(r=gl(s))}return r}startAnimation(e){const{drag:n,dragMomentum:a,dragElastic:o,dragTransition:i,dragSnapToOrigin:r,onDragTransitionEnd:s}=this.getProps(),c=this.constraints||{},h=ze(l=>{if(!Hn(l,n,this.currentDirection))return;let d=c&&c[l]||{};r&&(d={min:0,max:0});const u=o?200:1e6,f=o?40:1e7,m={type:"inertia",velocity:a?e[l]:0,bounceStiffness:u,bounceDamping:f,timeConstant:750,restDelta:1,restSpeed:10,...i,...d};return this.startAxisValueAnimation(l,m)});return Promise.all(h).then(s)}startAxisValueAnimation(e,n){const a=this.getAxisMotionValue(e);return uo(this.visualElement,e),a.start(ai(e,a,0,n,this.visualElement,!1))}stopAnimation(){ze(e=>this.getAxisMotionValue(e).stop())}pauseAnimation(){ze(e=>this.getAxisMotionValue(e).animation?.pause())}getAnimationState(e){return this.getAxisMotionValue(e).animation?.state}getAxisMotionValue(e){const n=`_drag${e.toUpperCase()}`,a=this.visualElement.getProps(),o=a[n];return o||this.visualElement.getValue(e,(a.initial?a.initial[e]:void 0)||0)}snapToCursor(e){ze(n=>{const{drag:a}=this.getProps();if(!Hn(n,a,this.currentDirection))return;const{projection:o}=this.visualElement,i=this.getAxisMotionValue(n);if(o&&o.layout){const{min:r,max:s}=o.layout.layoutBox[n];i.set(e[n]-pe(r,s,.5))}})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;const{drag:e,dragConstraints:n}=this.getProps(),{projection:a}=this.visualElement;if(!Ft(n)||!a||!this.constraints)return;this.stopAnimation();const o={x:0,y:0};ze(r=>{const s=this.getAxisMotionValue(r);if(s&&this.constraints!==!1){const c=s.get();o[r]=Ff({min:c,max:c},this.constraints[r])}});const{transformTemplate:i}=this.visualElement.getProps();this.visualElement.current.style.transform=i?i({},""):"none",a.root&&a.root.updateScroll(),a.updateLayout(),this.resolveConstraints(),ze(r=>{if(!Hn(r,e,null))return;const s=this.getAxisMotionValue(r),{min:c,max:h}=this.constraints[r];s.set(pe(c,h,o[r]))})}addListeners(){if(!this.visualElement.current)return;Of.set(this.visualElement,this);const e=this.visualElement.current,n=tn(e,"pointerdown",c=>{const{drag:h,dragListener:l=!0}=this.getProps();h&&l&&this.start(c)}),a=()=>{const{dragConstraints:c}=this.getProps();Ft(c)&&c.current&&(this.constraints=this.resolveRefConstraints())},{projection:o}=this.visualElement,i=o.addEventListener("measure",a);o&&!o.layout&&(o.root&&o.root.updateScroll(),o.updateLayout()),he.read(a);const r=hn(window,"resize",()=>this.scalePositionWithinConstraints()),s=o.addEventListener("didUpdate",(({delta:c,hasLayoutChanged:h})=>{this.isDragging&&h&&(ze(l=>{const d=this.getAxisMotionValue(l);d&&(this.originPoint[l]+=c[l].translate,d.set(d.get()+c[l].translate))}),this.visualElement.render())}));return()=>{r(),n(),i(),s&&s()}}getProps(){const e=this.visualElement.getProps(),{drag:n=!1,dragDirectionLock:a=!1,dragPropagation:o=!1,dragConstraints:i=!1,dragElastic:r=fo,dragMomentum:s=!0}=e;return{...e,drag:n,dragDirectionLock:a,dragPropagation:o,dragConstraints:i,dragElastic:r,dragMomentum:s}}}function Hn(t,e,n){return(e===!0||e===t)&&(n===null||n===t)}function Bf(t,e=10){let n=null;return Math.abs(t.y)>e?n="y":Math.abs(t.x)>e&&(n="x"),n}class Vf extends mt{constructor(e){super(e),this.removeGroupControls=Qe,this.removeListeners=Qe,this.controls=new Df(e)}mount(){const{dragControls:e}=this.node.getProps();e&&(this.removeGroupControls=e.subscribe(this.controls)),this.removeListeners=this.controls.addListeners()||Qe}unmount(){this.removeGroupControls(),this.removeListeners()}}const Zi=t=>(e,n)=>{t&&he.postRender(()=>t(e,n))};class Gf extends mt{constructor(){super(...arguments),this.removePointerDownListener=Qe}onPointerDown(e){this.session=new Ll(e,this.createPanHandlers(),{transformPagePoint:this.node.getTransformPagePoint(),contextWindow:Ml(this.node)})}createPanHandlers(){const{onPanSessionStart:e,onPanStart:n,onPan:a,onPanEnd:o}=this.node.getProps();return{onSessionStart:Zi(e),onStart:Zi(n),onMove:a,onEnd:(i,r)=>{delete this.session,o&&he.postRender(()=>o(i,r))}}}mount(){this.removePointerDownListener=tn(this.node.current,"pointerdown",e=>this.onPointerDown(e))}update(){this.session&&this.session.updateHandlers(this.createPanHandlers())}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}}const Xn={hasAnimatedSinceResize:!0,hasEverUpdated:!1};let Ia=!1;class jf extends z.Component{componentDidMount(){const{visualElement:e,layoutGroup:n,switchLayoutGroup:a,layoutId:o}=this.props,{projection:i}=e;i&&(n.group&&n.group.add(i),a&&a.register&&o&&a.register(i),Ia&&i.root.didUpdate(),i.addEventListener("animationComplete",()=>{this.safeToRemove()}),i.setOptions({...i.options,onExitComplete:()=>this.safeToRemove()})),Xn.hasEverUpdated=!0}getSnapshotBeforeUpdate(e){const{layoutDependency:n,visualElement:a,drag:o,isPresent:i}=this.props,{projection:r}=a;return r&&(r.isPresent=i,Ia=!0,o||e.layoutDependency!==n||n===void 0||e.isPresent!==i?r.willUpdate():this.safeToRemove(),e.isPresent!==i&&(i?r.promote():r.relegate()||he.postRender(()=>{const s=r.getStack();(!s||!s.members.length)&&this.safeToRemove()}))),null}componentDidUpdate(){const{projection:e}=this.props.visualElement;e&&(e.root.didUpdate(),Ko.postRender(()=>{!e.currentAnimation&&e.isLead()&&this.safeToRemove()}))}componentWillUnmount(){const{visualElement:e,layoutGroup:n,switchLayoutGroup:a}=this.props,{projection:o}=e;Ia=!0,o&&(o.scheduleCheckAfterUnmount(),n&&n.group&&n.group.remove(o),a&&a.deregister&&a.deregister(o))}safeToRemove(){const{safeToRemove:e}=this.props;e&&e()}render(){return null}}function Fl(t){const[e,n]=ah(),a=z.useContext(ds);return oe.jsx(jf,{...t,layoutGroup:a,switchLayoutGroup:z.useContext(pl),isPresent:e,safeToRemove:n})}function zf(t,e,n){const a=ke(t)?t:jt(t);return a.start(ai("",a,e,n)),a.animation}const _f=(t,e)=>t.depth-e.depth;class Hf{constructor(){this.children=[],this.isDirty=!1}add(e){xo(this.children,e),this.isDirty=!0}remove(e){Eo(this.children,e),this.isDirty=!0}forEach(e){this.isDirty&&this.children.sort(_f),this.isDirty=!1,this.children.forEach(e)}}function Qf(t,e){const n=Fe.now(),a=({timestamp:o})=>{const i=o-n;i>=e&&(ft(a),t(i-e))};return he.setup(a,!0),()=>ft(a)}const Il=["TopLeft","TopRight","BottomLeft","BottomRight"],Kf=Il.length,er=t=>typeof t=="string"?parseFloat(t):t,tr=t=>typeof t=="number"||Y.test(t);function Jf(t,e,n,a,o,i){o?(t.opacity=pe(0,n.opacity??1,Wf(a)),t.opacityExit=pe(e.opacity??1,0,qf(a))):i&&(t.opacity=pe(e.opacity??1,n.opacity??1,a));for(let r=0;r<Kf;r++){const s=`border${Il[r]}Radius`;let c=nr(e,s),h=nr(n,s);if(c===void 0&&h===void 0)continue;c||(c=0),h||(h=0),c===0||h===0||tr(c)===tr(h)?(t[s]=Math.max(pe(er(c),er(h),a),0),(it.test(h)||it.test(c))&&(t[s]+="%")):t[s]=h}(e.rotate||n.rotate)&&(t.rotate=pe(e.rotate||0,n.rotate||0,a))}function nr(t,e){return t[e]!==void 0?t[e]:t.borderRadius}const Wf=Ul(0,.5,Cs),qf=Ul(.5,.95,Qe);function Ul(t,e,n){return a=>a<t?0:a>e?1:n(ln(t,e,a))}function ar(t,e){t.min=e.min,t.max=e.max}function We(t,e){ar(t.x,e.x),ar(t.y,e.y)}function or(t,e){t.translate=e.translate,t.scale=e.scale,t.originPoint=e.originPoint,t.origin=e.origin}function ir(t,e,n,a,o){return t-=e,t=la(t,1/n,a),o!==void 0&&(t=la(t,1/o,a)),t}function Xf(t,e=0,n=1,a=.5,o,i=t,r=t){if(it.test(e)&&(e=parseFloat(e),e=pe(r.min,r.max,e/100)-r.min),typeof e!="number")return;let s=pe(i.min,i.max,a);t===i&&(s-=e),t.min=ir(t.min,e,n,s,o),t.max=ir(t.max,e,n,s,o)}function rr(t,e,[n,a,o],i,r){Xf(t,e[n],e[a],e[o],e.scale,i,r)}const Yf=["x","scaleX","originX"],Zf=["y","scaleY","originY"];function sr(t,e,n,a){rr(t.x,e,Yf,n?n.x:void 0,a?a.x:void 0),rr(t.y,e,Zf,n?n.y:void 0,a?a.y:void 0)}function lr(t){return t.translate===0&&t.scale===1}function Ol(t){return lr(t.x)&&lr(t.y)}function cr(t,e){return t.min===e.min&&t.max===e.max}function ep(t,e){return cr(t.x,e.x)&&cr(t.y,e.y)}function ur(t,e){return Math.round(t.min)===Math.round(e.min)&&Math.round(t.max)===Math.round(e.max)}function Dl(t,e){return ur(t.x,e.x)&&ur(t.y,e.y)}function dr(t){return Me(t.x)/Me(t.y)}function hr(t,e){return t.translate===e.translate&&t.scale===e.scale&&t.originPoint===e.originPoint}class tp{constructor(){this.members=[]}add(e){xo(this.members,e),e.scheduleRender()}remove(e){if(Eo(this.members,e),e===this.prevLead&&(this.prevLead=void 0),e===this.lead){const n=this.members[this.members.length-1];n&&this.promote(n)}}relegate(e){const n=this.members.findIndex(o=>e===o);if(n===0)return!1;let a;for(let o=n;o>=0;o--){const i=this.members[o];if(i.isPresent!==!1){a=i;break}}return a?(this.promote(a),!0):!1}promote(e,n){const a=this.lead;if(e!==a&&(this.prevLead=a,this.lead=e,e.show(),a)){a.instance&&a.scheduleRender(),e.scheduleRender(),e.resumeFrom=a,n&&(e.resumeFrom.preserveOpacity=!0),a.snapshot&&(e.snapshot=a.snapshot,e.snapshot.latestValues=a.animationValues||a.latestValues),e.root&&e.root.isUpdating&&(e.isLayoutDirty=!0);const{crossfade:o}=e.options;o===!1&&a.hide()}}exitAnimationComplete(){this.members.forEach(e=>{const{options:n,resumingFrom:a}=e;n.onExitComplete&&n.onExitComplete(),a&&a.options.onExitComplete&&a.options.onExitComplete()})}scheduleRender(){this.members.forEach(e=>{e.instance&&e.scheduleRender(!1)})}removeLeadSnapshot(){this.lead&&this.lead.snapshot&&(this.lead.snapshot=void 0)}}function np(t,e,n){let a="";const o=t.x.translate/e.x,i=t.y.translate/e.y,r=n?.z||0;if((o||i||r)&&(a=`translate3d(${o}px, ${i}px, ${r}px) `),(e.x!==1||e.y!==1)&&(a+=`scale(${1/e.x}, ${1/e.y}) `),n){const{transformPerspective:h,rotate:l,rotateX:d,rotateY:u,skewX:f,skewY:m}=n;h&&(a=`perspective(${h}px) ${a}`),l&&(a+=`rotate(${l}deg) `),d&&(a+=`rotateX(${d}deg) `),u&&(a+=`rotateY(${u}deg) `),f&&(a+=`skewX(${f}deg) `),m&&(a+=`skewY(${m}deg) `)}const s=t.x.scale*e.x,c=t.y.scale*e.y;return(s!==1||c!==1)&&(a+=`scale(${s}, ${c})`),a||"none"}const Ua=["","X","Y","Z"],ap=1e3;let op=0;function Oa(t,e,n,a){const{latestValues:o}=e;o[t]&&(n[t]=o[t],e.setStaticValue(t,0),a&&(a[t]=0))}function Bl(t){if(t.hasCheckedOptimisedAppear=!0,t.root===t)return;const{visualElement:e}=t.options;if(!e)return;const n=Sl(e);if(window.MotionHasOptimisedAnimation(n,"transform")){const{layout:o,layoutId:i}=t.options;window.MotionCancelOptimisedAnimation(n,"transform",he,!(o||i))}const{parent:a}=t;a&&!a.hasCheckedOptimisedAppear&&Bl(a)}function Vl({attachResizeListener:t,defaultParent:e,measureScroll:n,checkIsScrollRoot:a,resetTransform:o}){return class{constructor(r={},s=e?.()){this.id=op++,this.animationId=0,this.animationCommitId=0,this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.isProjectionDirty=!1,this.isSharedProjectionDirty=!1,this.isTransformDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.hasCheckedOptimisedAppear=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.hasTreeAnimated=!1,this.layoutVersion=0,this.updateScheduled=!1,this.scheduleUpdate=()=>this.update(),this.projectionUpdateScheduled=!1,this.checkUpdateFailed=()=>{this.isUpdating&&(this.isUpdating=!1,this.clearAllSnapshots())},this.updateProjection=()=>{this.projectionUpdateScheduled=!1,this.nodes.forEach(sp),this.nodes.forEach(dp),this.nodes.forEach(hp),this.nodes.forEach(lp)},this.resolvedRelativeTargetAt=0,this.linkedParentVersion=0,this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.latestValues=r,this.root=s?s.root||s:this,this.path=s?[...s.path,s]:[],this.parent=s,this.depth=s?s.depth+1:0;for(let c=0;c<this.path.length;c++)this.path[c].shouldResetTransform=!0;this.root===this&&(this.nodes=new Hf)}addEventListener(r,s){return this.eventHandlers.has(r)||this.eventHandlers.set(r,new Lo),this.eventHandlers.get(r).add(s)}notifyListeners(r,...s){const c=this.eventHandlers.get(r);c&&c.notify(...s)}hasListeners(r){return this.eventHandlers.has(r)}mount(r){if(this.instance)return;this.isSVG=tl(r)&&!eh(r),this.instance=r;const{layoutId:s,layout:c,visualElement:h}=this.options;if(h&&!h.current&&h.mount(r),this.root.nodes.add(this),this.parent&&this.parent.children.add(this),this.root.hasTreeAnimated&&(c||s)&&(this.isLayoutDirty=!0),t){let l,d=0;const u=()=>this.root.updateBlockedByResize=!1;he.read(()=>{d=window.innerWidth}),t(r,()=>{const f=window.innerWidth;f!==d&&(d=f,this.root.updateBlockedByResize=!0,l&&l(),l=Qf(u,250),Xn.hasAnimatedSinceResize&&(Xn.hasAnimatedSinceResize=!1,this.nodes.forEach(mr)))})}s&&this.root.registerSharedNode(s,this),this.options.animate!==!1&&h&&(s||c)&&this.addEventListener("didUpdate",({delta:l,hasLayoutChanged:d,hasRelativeLayoutChanged:u,layout:f})=>{if(this.isTreeAnimationBlocked()){this.target=void 0,this.relativeTarget=void 0;return}const m=this.options.transition||h.getDefaultTransition()||yp,{onLayoutAnimationStart:P,onLayoutAnimationComplete:A}=h.getProps(),b=!this.targetLayout||!Dl(this.targetLayout,f),E=!d&&u;if(this.options.layoutRoot||this.resumeFrom||E||d&&(b||!this.currentAnimation)){this.resumeFrom&&(this.resumingFrom=this.resumeFrom,this.resumingFrom.resumingFrom=void 0);const T={...Ho(m,"layout"),onPlay:P,onComplete:A};(h.shouldReduceMotion||this.options.layoutRoot)&&(T.delay=0,T.type=!1),this.startAnimation(T),this.setAnimationOrigin(l,E)}else d||mr(this),this.isLead()&&this.options.onExitComplete&&this.options.onExitComplete();this.targetLayout=f})}unmount(){this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this);const r=this.getStack();r&&r.remove(this),this.parent&&this.parent.children.delete(this),this.instance=void 0,this.eventHandlers.clear(),ft(this.updateProjection)}blockUpdate(){this.updateManuallyBlocked=!0}unblockUpdate(){this.updateManuallyBlocked=!1}isUpdateBlocked(){return this.updateManuallyBlocked||this.updateBlockedByResize}isTreeAnimationBlocked(){return this.isAnimationBlocked||this.parent&&this.parent.isTreeAnimationBlocked()||!1}startUpdate(){this.isUpdateBlocked()||(this.isUpdating=!0,this.nodes&&this.nodes.forEach(fp),this.animationId++)}getTransformTemplate(){const{visualElement:r}=this.options;return r&&r.getProps().transformTemplate}willUpdate(r=!0){if(this.root.hasTreeAnimated=!0,this.root.isUpdateBlocked()){this.options.onExitComplete&&this.options.onExitComplete();return}if(window.MotionCancelOptimisedAnimation&&!this.hasCheckedOptimisedAppear&&Bl(this),!this.root.isUpdating&&this.root.startUpdate(),this.isLayoutDirty)return;this.isLayoutDirty=!0;for(let l=0;l<this.path.length;l++){const d=this.path[l];d.shouldResetTransform=!0,d.updateScroll("snapshot"),d.options.layoutRoot&&d.willUpdate(!1)}const{layoutId:s,layout:c}=this.options;if(s===void 0&&!c)return;const h=this.getTransformTemplate();this.prevTransformTemplateValue=h?h(this.latestValues,""):void 0,this.updateSnapshot(),r&&this.notifyListeners("willUpdate")}update(){if(this.updateScheduled=!1,this.isUpdateBlocked()){this.unblockUpdate(),this.clearAllSnapshots(),this.nodes.forEach(fr);return}if(this.animationId<=this.animationCommitId){this.nodes.forEach(pr);return}this.animationCommitId=this.animationId,this.isUpdating?(this.isUpdating=!1,this.nodes.forEach(up),this.nodes.forEach(ip),this.nodes.forEach(rp)):this.nodes.forEach(pr),this.clearAllSnapshots();const s=Fe.now();Ae.delta=st(0,1e3/60,s-Ae.timestamp),Ae.timestamp=s,Ae.isProcessing=!0,Ta.update.process(Ae),Ta.preRender.process(Ae),Ta.render.process(Ae),Ae.isProcessing=!1}didUpdate(){this.updateScheduled||(this.updateScheduled=!0,Ko.read(this.scheduleUpdate))}clearAllSnapshots(){this.nodes.forEach(cp),this.sharedNodes.forEach(pp)}scheduleUpdateProjection(){this.projectionUpdateScheduled||(this.projectionUpdateScheduled=!0,he.preRender(this.updateProjection,!1,!0))}scheduleCheckAfterUnmount(){he.postRender(()=>{this.isLayoutDirty?this.root.didUpdate():this.root.checkUpdateFailed()})}updateSnapshot(){this.snapshot||!this.instance||(this.snapshot=this.measure(),this.snapshot&&!Me(this.snapshot.measuredBox.x)&&!Me(this.snapshot.measuredBox.y)&&(this.snapshot=void 0))}updateLayout(){if(!this.instance||(this.updateScroll(),!(this.options.alwaysMeasureLayout&&this.isLead())&&!this.isLayoutDirty))return;if(this.resumeFrom&&!this.resumeFrom.instance)for(let c=0;c<this.path.length;c++)this.path[c].updateScroll();const r=this.layout;this.layout=this.measure(!1),this.layoutVersion++,this.layoutCorrected=ve(),this.isLayoutDirty=!1,this.projectionDelta=void 0,this.notifyListeners("measure",this.layout.layoutBox);const{visualElement:s}=this.options;s&&s.notify("LayoutMeasure",this.layout.layoutBox,r?r.layoutBox:void 0)}updateScroll(r="measure"){let s=!!(this.options.layoutScroll&&this.instance);if(this.scroll&&this.scroll.animationId===this.root.animationId&&this.scroll.phase===r&&(s=!1),s&&this.instance){const c=a(this.instance);this.scroll={animationId:this.root.animationId,phase:r,isRoot:c,offset:n(this.instance),wasRoot:this.scroll?this.scroll.isRoot:c}}}resetTransform(){if(!o)return;const r=this.isLayoutDirty||this.shouldResetTransform||this.options.alwaysMeasureLayout,s=this.projectionDelta&&!Ol(this.projectionDelta),c=this.getTransformTemplate(),h=c?c(this.latestValues,""):void 0,l=h!==this.prevTransformTemplateValue;r&&this.instance&&(s||bt(this.latestValues)||l)&&(o(this.instance,h),this.shouldResetTransform=!1,this.scheduleRender())}measure(r=!0){const s=this.measurePageBox();let c=this.removeElementScroll(s);return r&&(c=this.removeTransform(c)),vp(c),{animationId:this.root.animationId,measuredBox:s,layoutBox:c,latestValues:{},source:this.id}}measurePageBox(){const{visualElement:r}=this.options;if(!r)return ve();const s=r.measureViewportBox();if(!(this.scroll?.wasRoot||this.path.some(bp))){const{scroll:h}=this.root;h&&(It(s.x,h.offset.x),It(s.y,h.offset.y))}return s}removeElementScroll(r){const s=ve();if(We(s,r),this.scroll?.wasRoot)return s;for(let c=0;c<this.path.length;c++){const h=this.path[c],{scroll:l,options:d}=h;h!==this.root&&l&&d.layoutScroll&&(l.wasRoot&&We(s,r),It(s.x,l.offset.x),It(s.y,l.offset.y))}return s}applyTransform(r,s=!1){const c=ve();We(c,r);for(let h=0;h<this.path.length;h++){const l=this.path[h];!s&&l.options.layoutScroll&&l.scroll&&l!==l.root&&Ut(c,{x:-l.scroll.offset.x,y:-l.scroll.offset.y}),bt(l.latestValues)&&Ut(c,l.latestValues)}return bt(this.latestValues)&&Ut(c,this.latestValues),c}removeTransform(r){const s=ve();We(s,r);for(let c=0;c<this.path.length;c++){const h=this.path[c];if(!h.instance||!bt(h.latestValues))continue;ro(h.latestValues)&&h.updateSnapshot();const l=ve(),d=h.measurePageBox();We(l,d),sr(s,h.latestValues,h.snapshot?h.snapshot.layoutBox:void 0,l)}return bt(this.latestValues)&&sr(s,this.latestValues),s}setTargetDelta(r){this.targetDelta=r,this.root.scheduleUpdateProjection(),this.isProjectionDirty=!0}setOptions(r){this.options={...this.options,...r,crossfade:r.crossfade!==void 0?r.crossfade:!0}}clearMeasurements(){this.scroll=void 0,this.layout=void 0,this.snapshot=void 0,this.prevTransformTemplateValue=void 0,this.targetDelta=void 0,this.target=void 0,this.isLayoutDirty=!1}forceRelativeParentToResolveTarget(){this.relativeParent&&this.relativeParent.resolvedRelativeTargetAt!==Ae.timestamp&&this.relativeParent.resolveTargetDelta(!0)}resolveTargetDelta(r=!1){const s=this.getLead();this.isProjectionDirty||(this.isProjectionDirty=s.isProjectionDirty),this.isTransformDirty||(this.isTransformDirty=s.isTransformDirty),this.isSharedProjectionDirty||(this.isSharedProjectionDirty=s.isSharedProjectionDirty);const c=!!this.resumingFrom||this!==s;if(!(r||c&&this.isSharedProjectionDirty||this.isProjectionDirty||this.parent?.isProjectionDirty||this.attemptToResolveRelativeTarget||this.root.updateBlockedByResize))return;const{layout:l,layoutId:d}=this.options;if(!this.layout||!(l||d))return;this.resolvedRelativeTargetAt=Ae.timestamp;const u=this.getClosestProjectingParent();u&&this.linkedParentVersion!==u.layoutVersion&&!u.options.layoutRoot&&this.removeRelativeTarget(),!this.targetDelta&&!this.relativeTarget&&(u&&u.layout?this.createRelativeTarget(u,this.layout.layoutBox,u.layout.layoutBox):this.removeRelativeTarget()),!(!this.relativeTarget&&!this.targetDelta)&&(this.target||(this.target=ve(),this.targetWithTransforms=ve()),this.relativeTarget&&this.relativeTargetOrigin&&this.relativeParent&&this.relativeParent.target?(this.forceRelativeParentToResolveTarget(),$f(this.target,this.relativeTarget,this.relativeParent.target)):this.targetDelta?(this.resumingFrom?this.target=this.applyTransform(this.layout.layoutBox):We(this.target,this.layout.layoutBox),vl(this.target,this.targetDelta)):We(this.target,this.layout.layoutBox),this.attemptToResolveRelativeTarget&&(this.attemptToResolveRelativeTarget=!1,u&&!!u.resumingFrom==!!this.resumingFrom&&!u.options.layoutScroll&&u.target&&this.animationProgress!==1?this.createRelativeTarget(u,this.target,u.target):this.relativeParent=this.relativeTarget=void 0))}getClosestProjectingParent(){if(!(!this.parent||ro(this.parent.latestValues)||yl(this.parent.latestValues)))return this.parent.isProjecting()?this.parent:this.parent.getClosestProjectingParent()}isProjecting(){return!!((this.relativeTarget||this.targetDelta||this.options.layoutRoot)&&this.layout)}createRelativeTarget(r,s,c){this.relativeParent=r,this.linkedParentVersion=r.layoutVersion,this.forceRelativeParentToResolveTarget(),this.relativeTarget=ve(),this.relativeTargetOrigin=ve(),ca(this.relativeTargetOrigin,s,c),We(this.relativeTarget,this.relativeTargetOrigin)}removeRelativeTarget(){this.relativeParent=this.relativeTarget=void 0}calcProjection(){const r=this.getLead(),s=!!this.resumingFrom||this!==r;let c=!0;if((this.isProjectionDirty||this.parent?.isProjectionDirty)&&(c=!1),s&&(this.isSharedProjectionDirty||this.isTransformDirty)&&(c=!1),this.resolvedRelativeTargetAt===Ae.timestamp&&(c=!1),c)return;const{layout:h,layoutId:l}=this.options;if(this.isTreeAnimating=!!(this.parent&&this.parent.isTreeAnimating||this.currentAnimation||this.pendingAnimation),this.isTreeAnimating||(this.targetDelta=this.relativeTarget=void 0),!this.layout||!(h||l))return;We(this.layoutCorrected,this.layout.layoutBox);const d=this.treeScale.x,u=this.treeScale.y;Dh(this.layoutCorrected,this.treeScale,this.path,s),r.layout&&!r.target&&(this.treeScale.x!==1||this.treeScale.y!==1)&&(r.target=r.layout.layoutBox,r.targetWithTransforms=ve());const{target:f}=r;if(!f){this.prevProjectionDelta&&(this.createProjectionDeltas(),this.scheduleRender());return}!this.projectionDelta||!this.prevProjectionDelta?this.createProjectionDeltas():(or(this.prevProjectionDelta.x,this.projectionDelta.x),or(this.prevProjectionDelta.y,this.projectionDelta.y)),nn(this.projectionDelta,this.layoutCorrected,f,this.latestValues),(this.treeScale.x!==d||this.treeScale.y!==u||!hr(this.projectionDelta.x,this.prevProjectionDelta.x)||!hr(this.projectionDelta.y,this.prevProjectionDelta.y))&&(this.hasProjected=!0,this.scheduleRender(),this.notifyListeners("projectionUpdate",f))}hide(){this.isVisible=!1}show(){this.isVisible=!0}scheduleRender(r=!0){if(this.options.visualElement?.scheduleRender(),r){const s=this.getStack();s&&s.scheduleRender()}this.resumingFrom&&!this.resumingFrom.instance&&(this.resumingFrom=void 0)}createProjectionDeltas(){this.prevProjectionDelta=Ot(),this.projectionDelta=Ot(),this.projectionDeltaWithTransform=Ot()}setAnimationOrigin(r,s=!1){const c=this.snapshot,h=c?c.latestValues:{},l={...this.latestValues},d=Ot();(!this.relativeParent||!this.relativeParent.options.layoutRoot)&&(this.relativeTarget=this.relativeTargetOrigin=void 0),this.attemptToResolveRelativeTarget=!s;const u=ve(),f=c?c.source:void 0,m=this.layout?this.layout.source:void 0,P=f!==m,A=this.getStack(),b=!A||A.members.length<=1,E=!!(P&&!b&&this.options.crossfade===!0&&!this.path.some(gp));this.animationProgress=0;let T;this.mixTargetDelta=S=>{const M=S/1e3;gr(d.x,r.x,M),gr(d.y,r.y,M),this.setTargetDelta(d),this.relativeTarget&&this.relativeTargetOrigin&&this.layout&&this.relativeParent&&this.relativeParent.layout&&(ca(u,this.layout.layoutBox,this.relativeParent.layout.layoutBox),mp(this.relativeTarget,this.relativeTargetOrigin,u,M),T&&ep(this.relativeTarget,T)&&(this.isProjectionDirty=!1),T||(T=ve()),We(T,this.relativeTarget)),P&&(this.animationValues=l,Jf(l,h,this.latestValues,M,E,b)),this.root.scheduleUpdateProjection(),this.scheduleRender(),this.animationProgress=M},this.mixTargetDelta(this.options.layoutRoot?1e3:0)}startAnimation(r){this.notifyListeners("animationStart"),this.currentAnimation?.stop(),this.resumingFrom?.currentAnimation?.stop(),this.pendingAnimation&&(ft(this.pendingAnimation),this.pendingAnimation=void 0),this.pendingAnimation=he.update(()=>{Xn.hasAnimatedSinceResize=!0,this.motionValue||(this.motionValue=jt(0)),this.currentAnimation=zf(this.motionValue,[0,1e3],{...r,velocity:0,isSync:!0,onUpdate:s=>{this.mixTargetDelta(s),r.onUpdate&&r.onUpdate(s)},onStop:()=>{},onComplete:()=>{r.onComplete&&r.onComplete(),this.completeAnimation()}}),this.resumingFrom&&(this.resumingFrom.currentAnimation=this.currentAnimation),this.pendingAnimation=void 0})}completeAnimation(){this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0);const r=this.getStack();r&&r.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners("animationComplete")}finishAnimation(){this.currentAnimation&&(this.mixTargetDelta&&this.mixTargetDelta(ap),this.currentAnimation.stop()),this.completeAnimation()}applyTransformsToTarget(){const r=this.getLead();let{targetWithTransforms:s,target:c,layout:h,latestValues:l}=r;if(!(!s||!c||!h)){if(this!==r&&this.layout&&h&&Gl(this.options.animationType,this.layout.layoutBox,h.layoutBox)){c=this.target||ve();const d=Me(this.layout.layoutBox.x);c.x.min=r.target.x.min,c.x.max=c.x.min+d;const u=Me(this.layout.layoutBox.y);c.y.min=r.target.y.min,c.y.max=c.y.min+u}We(s,c),Ut(s,l),nn(this.projectionDeltaWithTransform,this.layoutCorrected,s,l)}}registerSharedNode(r,s){this.sharedNodes.has(r)||this.sharedNodes.set(r,new tp),this.sharedNodes.get(r).add(s);const h=s.options.initialPromotionConfig;s.promote({transition:h?h.transition:void 0,preserveFollowOpacity:h&&h.shouldPreserveFollowOpacity?h.shouldPreserveFollowOpacity(s):void 0})}isLead(){const r=this.getStack();return r?r.lead===this:!0}getLead(){const{layoutId:r}=this.options;return r?this.getStack()?.lead||this:this}getPrevLead(){const{layoutId:r}=this.options;return r?this.getStack()?.prevLead:void 0}getStack(){const{layoutId:r}=this.options;if(r)return this.root.sharedNodes.get(r)}promote({needsReset:r,transition:s,preserveFollowOpacity:c}={}){const h=this.getStack();h&&h.promote(this,c),r&&(this.projectionDelta=void 0,this.needsReset=!0),s&&this.setOptions({transition:s})}relegate(){const r=this.getStack();return r?r.relegate(this):!1}resetSkewAndRotation(){const{visualElement:r}=this.options;if(!r)return;let s=!1;const{latestValues:c}=r;if((c.z||c.rotate||c.rotateX||c.rotateY||c.rotateZ||c.skewX||c.skewY)&&(s=!0),!s)return;const h={};c.z&&Oa("z",r,h,this.animationValues);for(let l=0;l<Ua.length;l++)Oa(`rotate${Ua[l]}`,r,h,this.animationValues),Oa(`skew${Ua[l]}`,r,h,this.animationValues);r.render();for(const l in h)r.setStaticValue(l,h[l]),this.animationValues&&(this.animationValues[l]=h[l]);r.scheduleRender()}applyProjectionStyles(r,s){if(!this.instance||this.isSVG)return;if(!this.isVisible){r.visibility="hidden";return}const c=this.getTransformTemplate();if(this.needsReset){this.needsReset=!1,r.visibility="",r.opacity="",r.pointerEvents=qn(s?.pointerEvents)||"",r.transform=c?c(this.latestValues,""):"none";return}const h=this.getLead();if(!this.projectionDelta||!this.layout||!h.target){this.options.layoutId&&(r.opacity=this.latestValues.opacity!==void 0?this.latestValues.opacity:1,r.pointerEvents=qn(s?.pointerEvents)||""),this.hasProjected&&!bt(this.latestValues)&&(r.transform=c?c({},""):"none",this.hasProjected=!1);return}r.visibility="";const l=h.animationValues||h.latestValues;this.applyTransformsToTarget();let d=np(this.projectionDeltaWithTransform,this.treeScale,l);c&&(d=c(l,d)),r.transform=d;const{x:u,y:f}=this.projectionDelta;r.transformOrigin=`${u.origin*100}% ${f.origin*100}% 0`,h.animationValues?r.opacity=h===this?l.opacity??this.latestValues.opacity??1:this.preserveOpacity?this.latestValues.opacity:l.opacityExit:r.opacity=h===this?l.opacity!==void 0?l.opacity:"":l.opacityExit!==void 0?l.opacityExit:0;for(const m in io){if(l[m]===void 0)continue;const{correct:P,applyTo:A,isCSSVariable:b}=io[m],E=d==="none"?l[m]:P(l[m],h);if(A){const T=A.length;for(let S=0;S<T;S++)r[A[S]]=E}else b?this.options.visualElement.renderState.vars[m]=E:r[m]=E}this.options.layoutId&&(r.pointerEvents=h===this?qn(s?.pointerEvents)||"":"none")}clearSnapshot(){this.resumeFrom=this.snapshot=void 0}resetTree(){this.root.nodes.forEach(r=>r.currentAnimation?.stop()),this.root.nodes.forEach(fr),this.root.sharedNodes.clear()}}}function ip(t){t.updateLayout()}function rp(t){const e=t.resumeFrom?.snapshot||t.snapshot;if(t.isLead()&&t.layout&&e&&t.hasListeners("didUpdate")){const{layoutBox:n,measuredBox:a}=t.layout,{animationType:o}=t.options,i=e.source!==t.layout.source;o==="size"?ze(l=>{const d=i?e.measuredBox[l]:e.layoutBox[l],u=Me(d);d.min=n[l].min,d.max=d.min+u}):Gl(o,e.layoutBox,n)&&ze(l=>{const d=i?e.measuredBox[l]:e.layoutBox[l],u=Me(n[l]);d.max=d.min+u,t.relativeTarget&&!t.currentAnimation&&(t.isProjectionDirty=!0,t.relativeTarget[l].max=t.relativeTarget[l].min+u)});const r=Ot();nn(r,n,e.layoutBox);const s=Ot();i?nn(s,t.applyTransform(a,!0),e.measuredBox):nn(s,n,e.layoutBox);const c=!Ol(r);let h=!1;if(!t.resumeFrom){const l=t.getClosestProjectingParent();if(l&&!l.resumeFrom){const{snapshot:d,layout:u}=l;if(d&&u){const f=ve();ca(f,e.layoutBox,d.layoutBox);const m=ve();ca(m,n,u.layoutBox),Dl(f,m)||(h=!0),l.options.layoutRoot&&(t.relativeTarget=m,t.relativeTargetOrigin=f,t.relativeParent=l)}}}t.notifyListeners("didUpdate",{layout:n,snapshot:e,delta:s,layoutDelta:r,hasLayoutChanged:c,hasRelativeLayoutChanged:h})}else if(t.isLead()){const{onExitComplete:n}=t.options;n&&n()}t.options.transition=void 0}function sp(t){t.parent&&(t.isProjecting()||(t.isProjectionDirty=t.parent.isProjectionDirty),t.isSharedProjectionDirty||(t.isSharedProjectionDirty=!!(t.isProjectionDirty||t.parent.isProjectionDirty||t.parent.isSharedProjectionDirty)),t.isTransformDirty||(t.isTransformDirty=t.parent.isTransformDirty))}function lp(t){t.isProjectionDirty=t.isSharedProjectionDirty=t.isTransformDirty=!1}function cp(t){t.clearSnapshot()}function fr(t){t.clearMeasurements()}function pr(t){t.isLayoutDirty=!1}function up(t){const{visualElement:e}=t.options;e&&e.getProps().onBeforeLayoutMeasure&&e.notify("BeforeLayoutMeasure"),t.resetTransform()}function mr(t){t.finishAnimation(),t.targetDelta=t.relativeTarget=t.target=void 0,t.isProjectionDirty=!0}function dp(t){t.resolveTargetDelta()}function hp(t){t.calcProjection()}function fp(t){t.resetSkewAndRotation()}function pp(t){t.removeLeadSnapshot()}function gr(t,e,n){t.translate=pe(e.translate,0,n),t.scale=pe(e.scale,1,n),t.origin=e.origin,t.originPoint=e.originPoint}function yr(t,e,n,a){t.min=pe(e.min,n.min,a),t.max=pe(e.max,n.max,a)}function mp(t,e,n,a){yr(t.x,e.x,n.x,a),yr(t.y,e.y,n.y,a)}function gp(t){return t.animationValues&&t.animationValues.opacityExit!==void 0}const yp={duration:.45,ease:[.4,0,.1,1]},vr=t=>typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().includes(t),br=vr("applewebkit/")&&!vr("chrome/")?Math.round:Qe;function Pr(t){t.min=br(t.min),t.max=br(t.max)}function vp(t){Pr(t.x),Pr(t.y)}function Gl(t,e,n){return t==="position"||t==="preserve-aspect"&&!kf(dr(e),dr(n),.2)}function bp(t){return t!==t.root&&t.scroll?.wasRoot}const Pp=Vl({attachResizeListener:(t,e)=>hn(t,"resize",e),measureScroll:()=>({x:document.documentElement.scrollLeft||document.body.scrollLeft,y:document.documentElement.scrollTop||document.body.scrollTop}),checkIsScrollRoot:()=>!0}),Da={current:void 0},jl=Vl({measureScroll:t=>({x:t.scrollLeft,y:t.scrollTop}),defaultParent:()=>{if(!Da.current){const t=new Pp({});t.mount(window),t.setOptions({layoutScroll:!0}),Da.current=t}return Da.current},resetTransform:(t,e)=>{t.style.transform=e!==void 0?e:"none"},checkIsScrollRoot:t=>window.getComputedStyle(t).position==="fixed"}),wp={pan:{Feature:Gf},drag:{Feature:Vf,ProjectionNode:jl,MeasureLayout:Fl}};function wr(t,e,n){const{props:a}=t;t.animationState&&a.whileHover&&t.animationState.setActive("whileHover",n==="Start");const o="onHover"+n,i=a[o];i&&he.postRender(()=>i(e,yn(e)))}class Cp extends mt{mount(){const{current:e}=this.node;e&&(this.unmount=Wd(e,(n,a)=>(wr(this.node,a,"Start"),o=>wr(this.node,o,"End"))))}unmount(){}}class Ap extends mt{constructor(){super(...arguments),this.isActive=!1}onFocus(){let e=!1;try{e=this.node.current.matches(":focus-visible")}catch{e=!0}!e||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!0),this.isActive=!0)}onBlur(){!this.isActive||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!1),this.isActive=!1)}mount(){this.unmount=pn(hn(this.node.current,"focus",()=>this.onFocus()),hn(this.node.current,"blur",()=>this.onBlur()))}unmount(){}}function Cr(t,e,n){const{props:a}=t;if(t.current instanceof HTMLButtonElement&&t.current.disabled)return;t.animationState&&a.whileTap&&t.animationState.setActive("whileTap",n==="Start");const o="onTap"+(n==="End"?"":n),i=a[o];i&&he.postRender(()=>i(e,yn(e)))}class Sp extends mt{mount(){const{current:e}=this.node;e&&(this.unmount=Zd(e,(n,a)=>(Cr(this.node,a,"Start"),(o,{success:i})=>Cr(this.node,o,i?"End":"Cancel")),{useGlobalTarget:this.node.props.globalTapTarget}))}unmount(){}}const po=new WeakMap,Ba=new WeakMap,Tp=t=>{const e=po.get(t.target);e&&e(t)},kp=t=>{t.forEach(Tp)};function $p({root:t,...e}){const n=t||document;Ba.has(n)||Ba.set(n,{});const a=Ba.get(n),o=JSON.stringify(e);return a[o]||(a[o]=new IntersectionObserver(kp,{root:t,...e})),a[o]}function Rp(t,e,n){const a=$p(e);return po.set(t,n),a.observe(t),()=>{po.delete(t),a.unobserve(t)}}const xp={some:0,all:1};class Ep extends mt{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){this.unmount();const{viewport:e={}}=this.node.getProps(),{root:n,margin:a,amount:o="some",once:i}=e,r={root:n?n.current:void 0,rootMargin:a,threshold:typeof o=="number"?o:xp[o]},s=c=>{const{isIntersecting:h}=c;if(this.isInView===h||(this.isInView=h,i&&!h&&this.hasEnteredView))return;h&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive("whileInView",h);const{onViewportEnter:l,onViewportLeave:d}=this.node.getProps(),u=h?l:d;u&&u(c)};return Rp(this.node.current,r,s)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>"u")return;const{props:e,prevProps:n}=this.node;["amount","margin","root"].some(Mp(e,n))&&this.startObserver()}unmount(){}}function Mp({viewport:t={}},{viewport:e={}}={}){return n=>t[n]!==e[n]}const Lp={inView:{Feature:Ep},tap:{Feature:Sp},focus:{Feature:Ap},hover:{Feature:Cp}},Np={layout:{ProjectionNode:jl,MeasureLayout:Fl}},Fp={...Pf,...Lp,...wp,...Np},Ip=Ih(Fp,Jh),Up=z.createContext("light");function zl(){return z.useContext(Up)}const Op={light:{primary:"bg-violet-500 text-white",secondary:"bg-violet-300 text-white",accent:"bg-rose-400 text-white",plain:"bg-white text-violet-500",step:"bg-indigo-900 text-white"},dark:{primary:"bg-violet-300 text-black",secondary:"bg-violet-800 text-white",accent:"bg-rose-200 text-black",plain:"bg-gray-700 text-white",step:"bg-indigo-900 text-white"}},mo=({children:t,onClick:e,disabled:n=!1,variant:a="primary",type:o="submit",className:i,styles:r,id:s,startIcon:c})=>{const h=zl(),l=Op[h][a||"primary"];return oe.jsxs(Ip.button,{id:s,"data-uikit":"button",style:r,type:o,className:Gt("text-base rounded-xl py-1 px-3",l,n&&"cursor-not-allowed opacity-50",i),onClick:e,disabled:n,whileHover:n?void 0:{scale:1.05},whileTap:n?void 0:{scale:.95},transition:{type:"spring",stiffness:300,damping:15},children:[c&&oe.jsx("span",{className:"mr-1 inline-flex",children:c}),t]})};z.forwardRef(({checked:t,defaultChecked:e,onChange:n,className:a,id:o,styles:i,name:r,value:s},c)=>oe.jsx("input",{ref:c,type:"checkbox",id:o,"data-uikit":"checkbox",name:r,value:s,style:i,className:Gt("form-checkbox w-4 h-4",a),checked:t,defaultChecked:e,onChange:n}));z.createContext({enqueueSnackbar:()=>{throw new Error("useSnackbar must be used within a SnackbarProvider")},closeSnackbar:()=>{}});const ne=t=>typeof t=="string",qt=()=>{let t,e;const n=new Promise((a,o)=>{t=a,e=o});return n.resolve=t,n.reject=e,n},Ar=t=>t==null?"":""+t,Dp=(t,e,n)=>{t.forEach(a=>{e[a]&&(n[a]=e[a])})},Bp=/###/g,Sr=t=>t&&t.indexOf("###")>-1?t.replace(Bp,"."):t,Tr=t=>!t||ne(t),an=(t,e,n)=>{const a=ne(e)?e.split("."):e;let o=0;for(;o<a.length-1;){if(Tr(t))return{};const i=Sr(a[o]);!t[i]&&n&&(t[i]=new n),Object.prototype.hasOwnProperty.call(t,i)?t=t[i]:t={},++o}return Tr(t)?{}:{obj:t,k:Sr(a[o])}},kr=(t,e,n)=>{const{obj:a,k:o}=an(t,e,Object);if(a!==void 0||e.length===1){a[o]=n;return}let i=e[e.length-1],r=e.slice(0,e.length-1),s=an(t,r,Object);for(;s.obj===void 0&&r.length;)i=`${r[r.length-1]}.${i}`,r=r.slice(0,r.length-1),s=an(t,r,Object),s&&s.obj&&typeof s.obj[`${s.k}.${i}`]<"u"&&(s.obj=void 0);s.obj[`${s.k}.${i}`]=n},Vp=(t,e,n,a)=>{const{obj:o,k:i}=an(t,e,Object);o[i]=o[i]||[],o[i].push(n)},ua=(t,e)=>{const{obj:n,k:a}=an(t,e);if(n)return n[a]},Gp=(t,e,n)=>{const a=ua(t,n);return a!==void 0?a:ua(e,n)},_l=(t,e,n)=>{for(const a in e)a!=="__proto__"&&a!=="constructor"&&(a in t?ne(t[a])||t[a]instanceof String||ne(e[a])||e[a]instanceof String?n&&(t[a]=e[a]):_l(t[a],e[a],n):t[a]=e[a]);return t},Rt=t=>t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");var jp={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"};const zp=t=>ne(t)?t.replace(/[&<>"'\/]/g,e=>jp[e]):t;class _p{constructor(e){this.capacity=e,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(e){const n=this.regExpMap.get(e);if(n!==void 0)return n;const a=new RegExp(e);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(e,a),this.regExpQueue.push(e),a}}const Hp=[" ",",","?","!",";"],Qp=new _p(20),Kp=(t,e,n)=>{e=e||"",n=n||"";const a=Hp.filter(r=>e.indexOf(r)<0&&n.indexOf(r)<0);if(a.length===0)return!0;const o=Qp.getRegExp(`(${a.map(r=>r==="?"?"\\?":r).join("|")})`);let i=!o.test(t);if(!i){const r=t.indexOf(n);r>0&&!o.test(t.substring(0,r))&&(i=!0)}return i},go=function(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:".";if(!t)return;if(t[e])return t[e];const a=e.split(n);let o=t;for(let i=0;i<a.length;){if(!o||typeof o!="object")return;let r,s="";for(let c=i;c<a.length;++c)if(c!==i&&(s+=n),s+=a[c],r=o[s],r!==void 0){if(["string","number","boolean"].indexOf(typeof r)>-1&&c<a.length-1)continue;i+=c-i+1;break}o=r}return o},da=t=>t&&t.replace("_","-"),Jp={type:"logger",log(t){this.output("log",t)},warn(t){this.output("warn",t)},error(t){this.output("error",t)},output(t,e){console&&console[t]&&console[t].apply(console,e)}};class ha{constructor(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.init(e,n)}init(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.prefix=n.prefix||"i18next:",this.logger=e||Jp,this.options=n,this.debug=n.debug}log(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];return this.forward(n,"log","",!0)}warn(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];return this.forward(n,"warn","",!0)}error(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];return this.forward(n,"error","")}deprecate(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];return this.forward(n,"warn","WARNING DEPRECATED: ",!0)}forward(e,n,a,o){return o&&!this.debug?null:(ne(e[0])&&(e[0]=`${a}${this.prefix} ${e[0]}`),this.logger[n](e))}create(e){return new ha(this.logger,{prefix:`${this.prefix}:${e}:`,...this.options})}clone(e){return e=e||this.options,e.prefix=e.prefix||this.prefix,new ha(this.logger,e)}}var ot=new ha;class wa{constructor(){this.observers={}}on(e,n){return e.split(" ").forEach(a=>{this.observers[a]||(this.observers[a]=new Map);const o=this.observers[a].get(n)||0;this.observers[a].set(n,o+1)}),this}off(e,n){if(this.observers[e]){if(!n){delete this.observers[e];return}this.observers[e].delete(n)}}emit(e){for(var n=arguments.length,a=new Array(n>1?n-1:0),o=1;o<n;o++)a[o-1]=arguments[o];this.observers[e]&&Array.from(this.observers[e].entries()).forEach(r=>{let[s,c]=r;for(let h=0;h<c;h++)s(...a)}),this.observers["*"]&&Array.from(this.observers["*"].entries()).forEach(r=>{let[s,c]=r;for(let h=0;h<c;h++)s.apply(s,[e,...a])})}}class $r extends wa{constructor(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{ns:["translation"],defaultNS:"translation"};super(),this.data=e||{},this.options=n,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(e){this.options.ns.indexOf(e)<0&&this.options.ns.push(e)}removeNamespaces(e){const n=this.options.ns.indexOf(e);n>-1&&this.options.ns.splice(n,1)}getResource(e,n,a){let o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};const i=o.keySeparator!==void 0?o.keySeparator:this.options.keySeparator,r=o.ignoreJSONStructure!==void 0?o.ignoreJSONStructure:this.options.ignoreJSONStructure;let s;e.indexOf(".")>-1?s=e.split("."):(s=[e,n],a&&(Array.isArray(a)?s.push(...a):ne(a)&&i?s.push(...a.split(i)):s.push(a)));const c=ua(this.data,s);return!c&&!n&&!a&&e.indexOf(".")>-1&&(e=s[0],n=s[1],a=s.slice(2).join(".")),c||!r||!ne(a)?c:go(this.data&&this.data[e]&&this.data[e][n],a,i)}addResource(e,n,a,o){let i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{silent:!1};const r=i.keySeparator!==void 0?i.keySeparator:this.options.keySeparator;let s=[e,n];a&&(s=s.concat(r?a.split(r):a)),e.indexOf(".")>-1&&(s=e.split("."),o=n,n=s[1]),this.addNamespaces(n),kr(this.data,s,o),i.silent||this.emit("added",e,n,a,o)}addResources(e,n,a){let o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{silent:!1};for(const i in a)(ne(a[i])||Array.isArray(a[i]))&&this.addResource(e,n,i,a[i],{silent:!0});o.silent||this.emit("added",e,n,a)}addResourceBundle(e,n,a,o,i){let r=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{silent:!1,skipCopy:!1},s=[e,n];e.indexOf(".")>-1&&(s=e.split("."),o=a,a=n,n=s[1]),this.addNamespaces(n);let c=ua(this.data,s)||{};r.skipCopy||(a=JSON.parse(JSON.stringify(a))),o?_l(c,a,i):c={...c,...a},kr(this.data,s,c),r.silent||this.emit("added",e,n,a)}removeResourceBundle(e,n){this.hasResourceBundle(e,n)&&delete this.data[e][n],this.removeNamespaces(n),this.emit("removed",e,n)}hasResourceBundle(e,n){return this.getResource(e,n)!==void 0}getResourceBundle(e,n){return n||(n=this.options.defaultNS),this.options.compatibilityAPI==="v1"?{...this.getResource(e,n)}:this.getResource(e,n)}getDataByLanguage(e){return this.data[e]}hasLanguageSomeTranslations(e){const n=this.getDataByLanguage(e);return!!(n&&Object.keys(n)||[]).find(o=>n[o]&&Object.keys(n[o]).length>0)}toJSON(){return this.data}}var Hl={processors:{},addPostProcessor(t){this.processors[t.name]=t},handle(t,e,n,a,o){return t.forEach(i=>{this.processors[i]&&(e=this.processors[i].process(e,n,a,o))}),e}};const Rr={};class fa extends wa{constructor(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(),Dp(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],e,this),this.options=n,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=ot.create("translator")}changeLanguage(e){e&&(this.language=e)}exists(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}};if(e==null)return!1;const a=this.resolve(e,n);return a&&a.res!==void 0}extractFromKey(e,n){let a=n.nsSeparator!==void 0?n.nsSeparator:this.options.nsSeparator;a===void 0&&(a=":");const o=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator;let i=n.ns||this.options.defaultNS||[];const r=a&&e.indexOf(a)>-1,s=!this.options.userDefinedKeySeparator&&!n.keySeparator&&!this.options.userDefinedNsSeparator&&!n.nsSeparator&&!Kp(e,a,o);if(r&&!s){const c=e.match(this.interpolator.nestingRegexp);if(c&&c.length>0)return{key:e,namespaces:ne(i)?[i]:i};const h=e.split(a);(a!==o||a===o&&this.options.ns.indexOf(h[0])>-1)&&(i=h.shift()),e=h.join(o)}return{key:e,namespaces:ne(i)?[i]:i}}translate(e,n,a){if(typeof n!="object"&&this.options.overloadTranslationOptionHandler&&(n=this.options.overloadTranslationOptionHandler(arguments)),typeof n=="object"&&(n={...n}),n||(n={}),e==null)return"";Array.isArray(e)||(e=[String(e)]);const o=n.returnDetails!==void 0?n.returnDetails:this.options.returnDetails,i=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator,{key:r,namespaces:s}=this.extractFromKey(e[e.length-1],n),c=s[s.length-1],h=n.lng||this.language,l=n.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(h&&h.toLowerCase()==="cimode"){if(l){const S=n.nsSeparator||this.options.nsSeparator;return o?{res:`${c}${S}${r}`,usedKey:r,exactUsedKey:r,usedLng:h,usedNS:c,usedParams:this.getUsedParamsDetails(n)}:`${c}${S}${r}`}return o?{res:r,usedKey:r,exactUsedKey:r,usedLng:h,usedNS:c,usedParams:this.getUsedParamsDetails(n)}:r}const d=this.resolve(e,n);let u=d&&d.res;const f=d&&d.usedKey||r,m=d&&d.exactUsedKey||r,P=Object.prototype.toString.apply(u),A=["[object Number]","[object Function]","[object RegExp]"],b=n.joinArrays!==void 0?n.joinArrays:this.options.joinArrays,E=!this.i18nFormat||this.i18nFormat.handleAsObject,T=!ne(u)&&typeof u!="boolean"&&typeof u!="number";if(E&&u&&T&&A.indexOf(P)<0&&!(ne(b)&&Array.isArray(u))){if(!n.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const S=this.options.returnedObjectHandler?this.options.returnedObjectHandler(f,u,{...n,ns:s}):`key '${r} (${this.language})' returned an object instead of string.`;return o?(d.res=S,d.usedParams=this.getUsedParamsDetails(n),d):S}if(i){const S=Array.isArray(u),M=S?[]:{},C=S?m:f;for(const F in u)if(Object.prototype.hasOwnProperty.call(u,F)){const g=`${C}${i}${F}`;M[F]=this.translate(g,{...n,joinArrays:!1,ns:s}),M[F]===g&&(M[F]=u[F])}u=M}}else if(E&&ne(b)&&Array.isArray(u))u=u.join(b),u&&(u=this.extendTranslation(u,e,n,a));else{let S=!1,M=!1;const C=n.count!==void 0&&!ne(n.count),F=fa.hasDefaultValue(n),g=C?this.pluralResolver.getSuffix(h,n.count,n):"",v=n.ordinal&&C?this.pluralResolver.getSuffix(h,n.count,{ordinal:!1}):"",k=C&&!n.ordinal&&n.count===0&&this.pluralResolver.shouldUseIntlApi(),R=k&&n[`defaultValue${this.options.pluralSeparator}zero`]||n[`defaultValue${g}`]||n[`defaultValue${v}`]||n.defaultValue;!this.isValidLookup(u)&&F&&(S=!0,u=R),this.isValidLookup(u)||(M=!0,u=r);const N=(n.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&M?void 0:u,$=F&&R!==u&&this.options.updateMissing;if(M||S||$){if(this.logger.log($?"updateKey":"missingKey",h,c,r,$?R:u),i){const U=this.resolve(r,{...n,keySeparator:!1});U&&U.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let I=[];const w=this.languageUtils.getFallbackCodes(this.options.fallbackLng,n.lng||this.language);if(this.options.saveMissingTo==="fallback"&&w&&w[0])for(let U=0;U<w.length;U++)I.push(w[U]);else this.options.saveMissingTo==="all"?I=this.languageUtils.toResolveHierarchy(n.lng||this.language):I.push(n.lng||this.language);const y=(U,L,B)=>{const J=F&&B!==u?B:N;this.options.missingKeyHandler?this.options.missingKeyHandler(U,c,L,J,$,n):this.backendConnector&&this.backendConnector.saveMissing&&this.backendConnector.saveMissing(U,c,L,J,$,n),this.emit("missingKey",U,c,L,u)};this.options.saveMissing&&(this.options.saveMissingPlurals&&C?I.forEach(U=>{const L=this.pluralResolver.getSuffixes(U,n);k&&n[`defaultValue${this.options.pluralSeparator}zero`]&&L.indexOf(`${this.options.pluralSeparator}zero`)<0&&L.push(`${this.options.pluralSeparator}zero`),L.forEach(B=>{y([U],r+B,n[`defaultValue${B}`]||R)})}):y(I,r,R))}u=this.extendTranslation(u,e,n,d,a),M&&u===r&&this.options.appendNamespaceToMissingKey&&(u=`${c}:${r}`),(M||S)&&this.options.parseMissingKeyHandler&&(this.options.compatibilityAPI!=="v1"?u=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${c}:${r}`:r,S?u:void 0):u=this.options.parseMissingKeyHandler(u))}return o?(d.res=u,d.usedParams=this.getUsedParamsDetails(n),d):u}extendTranslation(e,n,a,o,i){var r=this;if(this.i18nFormat&&this.i18nFormat.parse)e=this.i18nFormat.parse(e,{...this.options.interpolation.defaultVariables,...a},a.lng||this.language||o.usedLng,o.usedNS,o.usedKey,{resolved:o});else if(!a.skipInterpolation){a.interpolation&&this.interpolator.init({...a,interpolation:{...this.options.interpolation,...a.interpolation}});const h=ne(e)&&(a&&a.interpolation&&a.interpolation.skipOnVariables!==void 0?a.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let l;if(h){const u=e.match(this.interpolator.nestingRegexp);l=u&&u.length}let d=a.replace&&!ne(a.replace)?a.replace:a;if(this.options.interpolation.defaultVariables&&(d={...this.options.interpolation.defaultVariables,...d}),e=this.interpolator.interpolate(e,d,a.lng||this.language||o.usedLng,a),h){const u=e.match(this.interpolator.nestingRegexp),f=u&&u.length;l<f&&(a.nest=!1)}!a.lng&&this.options.compatibilityAPI!=="v1"&&o&&o.res&&(a.lng=this.language||o.usedLng),a.nest!==!1&&(e=this.interpolator.nest(e,function(){for(var u=arguments.length,f=new Array(u),m=0;m<u;m++)f[m]=arguments[m];return i&&i[0]===f[0]&&!a.context?(r.logger.warn(`It seems you are nesting recursively key: ${f[0]} in key: ${n[0]}`),null):r.translate(...f,n)},a)),a.interpolation&&this.interpolator.reset()}const s=a.postProcess||this.options.postProcess,c=ne(s)?[s]:s;return e!=null&&c&&c.length&&a.applyPostProcessor!==!1&&(e=Hl.handle(c,e,n,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...o,usedParams:this.getUsedParamsDetails(a)},...a}:a,this)),e}resolve(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},a,o,i,r,s;return ne(e)&&(e=[e]),e.forEach(c=>{if(this.isValidLookup(a))return;const h=this.extractFromKey(c,n),l=h.key;o=l;let d=h.namespaces;this.options.fallbackNS&&(d=d.concat(this.options.fallbackNS));const u=n.count!==void 0&&!ne(n.count),f=u&&!n.ordinal&&n.count===0&&this.pluralResolver.shouldUseIntlApi(),m=n.context!==void 0&&(ne(n.context)||typeof n.context=="number")&&n.context!=="",P=n.lngs?n.lngs:this.languageUtils.toResolveHierarchy(n.lng||this.language,n.fallbackLng);d.forEach(A=>{this.isValidLookup(a)||(s=A,!Rr[`${P[0]}-${A}`]&&this.utils&&this.utils.hasLoadedNamespace&&!this.utils.hasLoadedNamespace(s)&&(Rr[`${P[0]}-${A}`]=!0,this.logger.warn(`key "${o}" for languages "${P.join(", ")}" won't get resolved as namespace "${s}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),P.forEach(b=>{if(this.isValidLookup(a))return;r=b;const E=[l];if(this.i18nFormat&&this.i18nFormat.addLookupKeys)this.i18nFormat.addLookupKeys(E,l,b,A,n);else{let S;u&&(S=this.pluralResolver.getSuffix(b,n.count,n));const M=`${this.options.pluralSeparator}zero`,C=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(u&&(E.push(l+S),n.ordinal&&S.indexOf(C)===0&&E.push(l+S.replace(C,this.options.pluralSeparator)),f&&E.push(l+M)),m){const F=`${l}${this.options.contextSeparator}${n.context}`;E.push(F),u&&(E.push(F+S),n.ordinal&&S.indexOf(C)===0&&E.push(F+S.replace(C,this.options.pluralSeparator)),f&&E.push(F+M))}}let T;for(;T=E.pop();)this.isValidLookup(a)||(i=T,a=this.getResource(b,A,T,n))}))})}),{res:a,usedKey:o,exactUsedKey:i,usedLng:r,usedNS:s}}isValidLookup(e){return e!==void 0&&!(!this.options.returnNull&&e===null)&&!(!this.options.returnEmptyString&&e==="")}getResource(e,n,a){let o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(e,n,a,o):this.resourceStore.getResource(e,n,a,o)}getUsedParamsDetails(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const n=["defaultValue","ordinal","context","replace","lng","lngs","fallbackLng","ns","keySeparator","nsSeparator","returnObjects","returnDetails","joinArrays","postProcess","interpolation"],a=e.replace&&!ne(e.replace);let o=a?e.replace:e;if(a&&typeof e.count<"u"&&(o.count=e.count),this.options.interpolation.defaultVariables&&(o={...this.options.interpolation.defaultVariables,...o}),!a){o={...o};for(const i of n)delete o[i]}return o}static hasDefaultValue(e){const n="defaultValue";for(const a in e)if(Object.prototype.hasOwnProperty.call(e,a)&&n===a.substring(0,n.length)&&e[a]!==void 0)return!0;return!1}}const Va=t=>t.charAt(0).toUpperCase()+t.slice(1);class xr{constructor(e){this.options=e,this.supportedLngs=this.options.supportedLngs||!1,this.logger=ot.create("languageUtils")}getScriptPartFromCode(e){if(e=da(e),!e||e.indexOf("-")<0)return null;const n=e.split("-");return n.length===2||(n.pop(),n[n.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(n.join("-"))}getLanguagePartFromCode(e){if(e=da(e),!e||e.indexOf("-")<0)return e;const n=e.split("-");return this.formatLanguageCode(n[0])}formatLanguageCode(e){if(ne(e)&&e.indexOf("-")>-1){if(typeof Intl<"u"&&typeof Intl.getCanonicalLocales<"u")try{let o=Intl.getCanonicalLocales(e)[0];if(o&&this.options.lowerCaseLng&&(o=o.toLowerCase()),o)return o}catch{}const n=["hans","hant","latn","cyrl","cans","mong","arab"];let a=e.split("-");return this.options.lowerCaseLng?a=a.map(o=>o.toLowerCase()):a.length===2?(a[0]=a[0].toLowerCase(),a[1]=a[1].toUpperCase(),n.indexOf(a[1].toLowerCase())>-1&&(a[1]=Va(a[1].toLowerCase()))):a.length===3&&(a[0]=a[0].toLowerCase(),a[1].length===2&&(a[1]=a[1].toUpperCase()),a[0]!=="sgn"&&a[2].length===2&&(a[2]=a[2].toUpperCase()),n.indexOf(a[1].toLowerCase())>-1&&(a[1]=Va(a[1].toLowerCase())),n.indexOf(a[2].toLowerCase())>-1&&(a[2]=Va(a[2].toLowerCase()))),a.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?e.toLowerCase():e}isSupportedCode(e){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(e=this.getLanguagePartFromCode(e)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(e)>-1}getBestMatchFromCodes(e){if(!e)return null;let n;return e.forEach(a=>{if(n)return;const o=this.formatLanguageCode(a);(!this.options.supportedLngs||this.isSupportedCode(o))&&(n=o)}),!n&&this.options.supportedLngs&&e.forEach(a=>{if(n)return;const o=this.getLanguagePartFromCode(a);if(this.isSupportedCode(o))return n=o;n=this.options.supportedLngs.find(i=>{if(i===o)return i;if(!(i.indexOf("-")<0&&o.indexOf("-")<0)&&(i.indexOf("-")>0&&o.indexOf("-")<0&&i.substring(0,i.indexOf("-"))===o||i.indexOf(o)===0&&o.length>1))return i})}),n||(n=this.getFallbackCodes(this.options.fallbackLng)[0]),n}getFallbackCodes(e,n){if(!e)return[];if(typeof e=="function"&&(e=e(n)),ne(e)&&(e=[e]),Array.isArray(e))return e;if(!n)return e.default||[];let a=e[n];return a||(a=e[this.getScriptPartFromCode(n)]),a||(a=e[this.formatLanguageCode(n)]),a||(a=e[this.getLanguagePartFromCode(n)]),a||(a=e.default),a||[]}toResolveHierarchy(e,n){const a=this.getFallbackCodes(n||this.options.fallbackLng||[],e),o=[],i=r=>{r&&(this.isSupportedCode(r)?o.push(r):this.logger.warn(`rejecting language code not found in supportedLngs: ${r}`))};return ne(e)&&(e.indexOf("-")>-1||e.indexOf("_")>-1)?(this.options.load!=="languageOnly"&&i(this.formatLanguageCode(e)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&i(this.getScriptPartFromCode(e)),this.options.load!=="currentOnly"&&i(this.getLanguagePartFromCode(e))):ne(e)&&i(this.formatLanguageCode(e)),a.forEach(r=>{o.indexOf(r)<0&&i(this.formatLanguageCode(r))}),o}}let Wp=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","tl","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kk","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],qp={1:t=>+(t>1),2:t=>+(t!=1),3:t=>0,4:t=>t%10==1&&t%100!=11?0:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?1:2,5:t=>t==0?0:t==1?1:t==2?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5,6:t=>t==1?0:t>=2&&t<=4?1:2,7:t=>t==1?0:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?1:2,8:t=>t==1?0:t==2?1:t!=8&&t!=11?2:3,9:t=>+(t>=2),10:t=>t==1?0:t==2?1:t<7?2:t<11?3:4,11:t=>t==1||t==11?0:t==2||t==12?1:t>2&&t<20?2:3,12:t=>+(t%10!=1||t%100==11),13:t=>+(t!==0),14:t=>t==1?0:t==2?1:t==3?2:3,15:t=>t%10==1&&t%100!=11?0:t%10>=2&&(t%100<10||t%100>=20)?1:2,16:t=>t%10==1&&t%100!=11?0:t!==0?1:2,17:t=>t==1||t%10==1&&t%100!=11?0:1,18:t=>t==0?0:t==1?1:2,19:t=>t==1?0:t==0||t%100>1&&t%100<11?1:t%100>10&&t%100<20?2:3,20:t=>t==1?0:t==0||t%100>0&&t%100<20?1:2,21:t=>t%100==1?1:t%100==2?2:t%100==3||t%100==4?3:0,22:t=>t==1?0:t==2?1:(t<0||t>10)&&t%10==0?2:3};const Xp=["v1","v2","v3"],Yp=["v4"],Er={zero:0,one:1,two:2,few:3,many:4,other:5},Zp=()=>{const t={};return Wp.forEach(e=>{e.lngs.forEach(n=>{t[n]={numbers:e.nr,plurals:qp[e.fc]}})}),t};class em{constructor(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.languageUtils=e,this.options=n,this.logger=ot.create("pluralResolver"),(!this.options.compatibilityJSON||Yp.includes(this.options.compatibilityJSON))&&(typeof Intl>"u"||!Intl.PluralRules)&&(this.options.compatibilityJSON="v3",this.logger.error("Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.")),this.rules=Zp(),this.pluralRulesCache={}}addRule(e,n){this.rules[e]=n}clearCache(){this.pluralRulesCache={}}getRule(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(this.shouldUseIntlApi()){const a=da(e==="dev"?"en":e),o=n.ordinal?"ordinal":"cardinal",i=JSON.stringify({cleanedCode:a,type:o});if(i in this.pluralRulesCache)return this.pluralRulesCache[i];let r;try{r=new Intl.PluralRules(a,{type:o})}catch{if(!e.match(/-|_/))return;const c=this.languageUtils.getLanguagePartFromCode(e);r=this.getRule(c,n)}return this.pluralRulesCache[i]=r,r}return this.rules[e]||this.rules[this.languageUtils.getLanguagePartFromCode(e)]}needsPlural(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const a=this.getRule(e,n);return this.shouldUseIntlApi()?a&&a.resolvedOptions().pluralCategories.length>1:a&&a.numbers.length>1}getPluralFormsOfKey(e,n){let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return this.getSuffixes(e,a).map(o=>`${n}${o}`)}getSuffixes(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const a=this.getRule(e,n);return a?this.shouldUseIntlApi()?a.resolvedOptions().pluralCategories.sort((o,i)=>Er[o]-Er[i]).map(o=>`${this.options.prepend}${n.ordinal?`ordinal${this.options.prepend}`:""}${o}`):a.numbers.map(o=>this.getSuffix(e,o,n)):[]}getSuffix(e,n){let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const o=this.getRule(e,a);return o?this.shouldUseIntlApi()?`${this.options.prepend}${a.ordinal?`ordinal${this.options.prepend}`:""}${o.select(n)}`:this.getSuffixRetroCompatible(o,n):(this.logger.warn(`no plural rule found for: ${e}`),"")}getSuffixRetroCompatible(e,n){const a=e.noAbs?e.plurals(n):e.plurals(Math.abs(n));let o=e.numbers[a];this.options.simplifyPluralSuffix&&e.numbers.length===2&&e.numbers[0]===1&&(o===2?o="plural":o===1&&(o=""));const i=()=>this.options.prepend&&o.toString()?this.options.prepend+o.toString():o.toString();return this.options.compatibilityJSON==="v1"?o===1?"":typeof o=="number"?`_plural_${o.toString()}`:i():this.options.compatibilityJSON==="v2"||this.options.simplifyPluralSuffix&&e.numbers.length===2&&e.numbers[0]===1?i():this.options.prepend&&a.toString()?this.options.prepend+a.toString():a.toString()}shouldUseIntlApi(){return!Xp.includes(this.options.compatibilityJSON)}}const Mr=function(t,e,n){let a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:".",o=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,i=Gp(t,e,n);return!i&&o&&ne(n)&&(i=go(t,n,a),i===void 0&&(i=go(e,n,a))),i},Ga=t=>t.replace(/\$/g,"$$$$");class tm{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=ot.create("interpolator"),this.options=e,this.format=e.interpolation&&e.interpolation.format||(n=>n),this.init(e)}init(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};e.interpolation||(e.interpolation={escapeValue:!0});const{escape:n,escapeValue:a,useRawValueToEscape:o,prefix:i,prefixEscaped:r,suffix:s,suffixEscaped:c,formatSeparator:h,unescapeSuffix:l,unescapePrefix:d,nestingPrefix:u,nestingPrefixEscaped:f,nestingSuffix:m,nestingSuffixEscaped:P,nestingOptionsSeparator:A,maxReplaces:b,alwaysFormat:E}=e.interpolation;this.escape=n!==void 0?n:zp,this.escapeValue=a!==void 0?a:!0,this.useRawValueToEscape=o!==void 0?o:!1,this.prefix=i?Rt(i):r||"{{",this.suffix=s?Rt(s):c||"}}",this.formatSeparator=h||",",this.unescapePrefix=l?"":d||"-",this.unescapeSuffix=this.unescapePrefix?"":l||"",this.nestingPrefix=u?Rt(u):f||Rt("$t("),this.nestingSuffix=m?Rt(m):P||Rt(")"),this.nestingOptionsSeparator=A||",",this.maxReplaces=b||1e3,this.alwaysFormat=E!==void 0?E:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const e=(n,a)=>n&&n.source===a?(n.lastIndex=0,n):new RegExp(a,"g");this.regexp=e(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=e(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=e(this.nestingRegexp,`${this.nestingPrefix}(.+?)${this.nestingSuffix}`)}interpolate(e,n,a,o){let i,r,s;const c=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},h=f=>{if(f.indexOf(this.formatSeparator)<0){const b=Mr(n,c,f,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(b,void 0,a,{...o,...n,interpolationkey:f}):b}const m=f.split(this.formatSeparator),P=m.shift().trim(),A=m.join(this.formatSeparator).trim();return this.format(Mr(n,c,P,this.options.keySeparator,this.options.ignoreJSONStructure),A,a,{...o,...n,interpolationkey:P})};this.resetRegExp();const l=o&&o.missingInterpolationHandler||this.options.missingInterpolationHandler,d=o&&o.interpolation&&o.interpolation.skipOnVariables!==void 0?o.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:f=>Ga(f)},{regex:this.regexp,safeValue:f=>this.escapeValue?Ga(this.escape(f)):Ga(f)}].forEach(f=>{for(s=0;i=f.regex.exec(e);){const m=i[1].trim();if(r=h(m),r===void 0)if(typeof l=="function"){const A=l(e,i,o);r=ne(A)?A:""}else if(o&&Object.prototype.hasOwnProperty.call(o,m))r="";else if(d){r=i[0];continue}else this.logger.warn(`missed to pass in variable ${m} for interpolating ${e}`),r="";else!ne(r)&&!this.useRawValueToEscape&&(r=Ar(r));const P=f.safeValue(r);if(e=e.replace(i[0],P),d?(f.regex.lastIndex+=r.length,f.regex.lastIndex-=i[0].length):f.regex.lastIndex=0,s++,s>=this.maxReplaces)break}}),e}nest(e,n){let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o,i,r;const s=(c,h)=>{const l=this.nestingOptionsSeparator;if(c.indexOf(l)<0)return c;const d=c.split(new RegExp(`${l}[ ]*{`));let u=`{${d[1]}`;c=d[0],u=this.interpolate(u,r);const f=u.match(/'/g),m=u.match(/"/g);(f&&f.length%2===0&&!m||m.length%2!==0)&&(u=u.replace(/'/g,'"'));try{r=JSON.parse(u),h&&(r={...h,...r})}catch(P){return this.logger.warn(`failed parsing options string in nesting for key ${c}`,P),`${c}${l}${u}`}return r.defaultValue&&r.defaultValue.indexOf(this.prefix)>-1&&delete r.defaultValue,c};for(;o=this.nestingRegexp.exec(e);){let c=[];r={...a},r=r.replace&&!ne(r.replace)?r.replace:r,r.applyPostProcessor=!1,delete r.defaultValue;let h=!1;if(o[0].indexOf(this.formatSeparator)!==-1&&!/{.*}/.test(o[1])){const l=o[1].split(this.formatSeparator).map(d=>d.trim());o[1]=l.shift(),c=l,h=!0}if(i=n(s.call(this,o[1].trim(),r),r),i&&o[0]===e&&!ne(i))return i;ne(i)||(i=Ar(i)),i||(this.logger.warn(`missed to resolve ${o[1]} for nesting ${e}`),i=""),h&&(i=c.reduce((l,d)=>this.format(l,d,a.lng,{...a,interpolationkey:o[1].trim()}),i.trim())),e=e.replace(o[0],i),this.regexp.lastIndex=0}return e}}const nm=t=>{let e=t.toLowerCase().trim();const n={};if(t.indexOf("(")>-1){const a=t.split("(");e=a[0].toLowerCase().trim();const o=a[1].substring(0,a[1].length-1);e==="currency"&&o.indexOf(":")<0?n.currency||(n.currency=o.trim()):e==="relativetime"&&o.indexOf(":")<0?n.range||(n.range=o.trim()):o.split(";").forEach(r=>{if(r){const[s,...c]=r.split(":"),h=c.join(":").trim().replace(/^'+|'+$/g,""),l=s.trim();n[l]||(n[l]=h),h==="false"&&(n[l]=!1),h==="true"&&(n[l]=!0),isNaN(h)||(n[l]=parseInt(h,10))}})}return{formatName:e,formatOptions:n}},xt=t=>{const e={};return(n,a,o)=>{let i=o;o&&o.interpolationkey&&o.formatParams&&o.formatParams[o.interpolationkey]&&o[o.interpolationkey]&&(i={...i,[o.interpolationkey]:void 0});const r=a+JSON.stringify(i);let s=e[r];return s||(s=t(da(a),o),e[r]=s),s(n)}};class am{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=ot.create("formatter"),this.options=e,this.formats={number:xt((n,a)=>{const o=new Intl.NumberFormat(n,{...a});return i=>o.format(i)}),currency:xt((n,a)=>{const o=new Intl.NumberFormat(n,{...a,style:"currency"});return i=>o.format(i)}),datetime:xt((n,a)=>{const o=new Intl.DateTimeFormat(n,{...a});return i=>o.format(i)}),relativetime:xt((n,a)=>{const o=new Intl.RelativeTimeFormat(n,{...a});return i=>o.format(i,a.range||"day")}),list:xt((n,a)=>{const o=new Intl.ListFormat(n,{...a});return i=>o.format(i)})},this.init(e)}init(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}};this.formatSeparator=n.interpolation.formatSeparator||","}add(e,n){this.formats[e.toLowerCase().trim()]=n}addCached(e,n){this.formats[e.toLowerCase().trim()]=xt(n)}format(e,n,a){let o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};const i=n.split(this.formatSeparator);if(i.length>1&&i[0].indexOf("(")>1&&i[0].indexOf(")")<0&&i.find(s=>s.indexOf(")")>-1)){const s=i.findIndex(c=>c.indexOf(")")>-1);i[0]=[i[0],...i.splice(1,s)].join(this.formatSeparator)}return i.reduce((s,c)=>{const{formatName:h,formatOptions:l}=nm(c);if(this.formats[h]){let d=s;try{const u=o&&o.formatParams&&o.formatParams[o.interpolationkey]||{},f=u.locale||u.lng||o.locale||o.lng||a;d=this.formats[h](s,f,{...l,...o,...u})}catch(u){this.logger.warn(u)}return d}else this.logger.warn(`there was no format function for ${h}`);return s},e)}}const om=(t,e)=>{t.pending[e]!==void 0&&(delete t.pending[e],t.pendingCount--)};class im extends wa{constructor(e,n,a){let o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};super(),this.backend=e,this.store=n,this.services=a,this.languageUtils=a.languageUtils,this.options=o,this.logger=ot.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=o.maxParallelReads||10,this.readingCalls=0,this.maxRetries=o.maxRetries>=0?o.maxRetries:5,this.retryTimeout=o.retryTimeout>=1?o.retryTimeout:350,this.state={},this.queue=[],this.backend&&this.backend.init&&this.backend.init(a,o.backend,o)}queueLoad(e,n,a,o){const i={},r={},s={},c={};return e.forEach(h=>{let l=!0;n.forEach(d=>{const u=`${h}|${d}`;!a.reload&&this.store.hasResourceBundle(h,d)?this.state[u]=2:this.state[u]<0||(this.state[u]===1?r[u]===void 0&&(r[u]=!0):(this.state[u]=1,l=!1,r[u]===void 0&&(r[u]=!0),i[u]===void 0&&(i[u]=!0),c[d]===void 0&&(c[d]=!0)))}),l||(s[h]=!0)}),(Object.keys(i).length||Object.keys(r).length)&&this.queue.push({pending:r,pendingCount:Object.keys(r).length,loaded:{},errors:[],callback:o}),{toLoad:Object.keys(i),pending:Object.keys(r),toLoadLanguages:Object.keys(s),toLoadNamespaces:Object.keys(c)}}loaded(e,n,a){const o=e.split("|"),i=o[0],r=o[1];n&&this.emit("failedLoading",i,r,n),!n&&a&&this.store.addResourceBundle(i,r,a,void 0,void 0,{skipCopy:!0}),this.state[e]=n?-1:2,n&&a&&(this.state[e]=0);const s={};this.queue.forEach(c=>{Vp(c.loaded,[i],r),om(c,e),n&&c.errors.push(n),c.pendingCount===0&&!c.done&&(Object.keys(c.loaded).forEach(h=>{s[h]||(s[h]={});const l=c.loaded[h];l.length&&l.forEach(d=>{s[h][d]===void 0&&(s[h][d]=!0)})}),c.done=!0,c.errors.length?c.callback(c.errors):c.callback())}),this.emit("loaded",s),this.queue=this.queue.filter(c=>!c.done)}read(e,n,a){let o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:this.retryTimeout,r=arguments.length>5?arguments[5]:void 0;if(!e.length)return r(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:e,ns:n,fcName:a,tried:o,wait:i,callback:r});return}this.readingCalls++;const s=(h,l)=>{if(this.readingCalls--,this.waitingReads.length>0){const d=this.waitingReads.shift();this.read(d.lng,d.ns,d.fcName,d.tried,d.wait,d.callback)}if(h&&l&&o<this.maxRetries){setTimeout(()=>{this.read.call(this,e,n,a,o+1,i*2,r)},i);return}r(h,l)},c=this.backend[a].bind(this.backend);if(c.length===2){try{const h=c(e,n);h&&typeof h.then=="function"?h.then(l=>s(null,l)).catch(s):s(null,h)}catch(h){s(h)}return}return c(e,n,s)}prepareLoading(e,n){let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),o&&o();ne(e)&&(e=this.languageUtils.toResolveHierarchy(e)),ne(n)&&(n=[n]);const i=this.queueLoad(e,n,a,o);if(!i.toLoad.length)return i.pending.length||o(),null;i.toLoad.forEach(r=>{this.loadOne(r)})}load(e,n,a){this.prepareLoading(e,n,{},a)}reload(e,n,a){this.prepareLoading(e,n,{reload:!0},a)}loadOne(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";const a=e.split("|"),o=a[0],i=a[1];this.read(o,i,"read",void 0,void 0,(r,s)=>{r&&this.logger.warn(`${n}loading namespace ${i} for language ${o} failed`,r),!r&&s&&this.logger.log(`${n}loaded namespace ${i} for language ${o}`,s),this.loaded(e,r,s)})}saveMissing(e,n,a,o,i){let r=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{},s=arguments.length>6&&arguments[6]!==void 0?arguments[6]:()=>{};if(this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(n)){this.logger.warn(`did not save key "${a}" as the namespace "${n}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");return}if(!(a==null||a==="")){if(this.backend&&this.backend.create){const c={...r,isUpdate:i},h=this.backend.create.bind(this.backend);if(h.length<6)try{let l;h.length===5?l=h(e,n,a,o,c):l=h(e,n,a,o),l&&typeof l.then=="function"?l.then(d=>s(null,d)).catch(s):s(null,l)}catch(l){s(l)}else h(e,n,a,o,s,c)}!e||!e[0]||this.store.addResource(e[0],n,a,o)}}}const Lr=()=>({debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:t=>{let e={};if(typeof t[1]=="object"&&(e=t[1]),ne(t[1])&&(e.defaultValue=t[1]),ne(t[2])&&(e.tDescription=t[2]),typeof t[2]=="object"||typeof t[3]=="object"){const n=t[3]||t[2];Object.keys(n).forEach(a=>{e[a]=n[a]})}return e},interpolation:{escapeValue:!0,format:t=>t,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}),Nr=t=>(ne(t.ns)&&(t.ns=[t.ns]),ne(t.fallbackLng)&&(t.fallbackLng=[t.fallbackLng]),ne(t.fallbackNS)&&(t.fallbackNS=[t.fallbackNS]),t.supportedLngs&&t.supportedLngs.indexOf("cimode")<0&&(t.supportedLngs=t.supportedLngs.concat(["cimode"])),t),Qn=()=>{},rm=t=>{Object.getOwnPropertyNames(Object.getPrototypeOf(t)).forEach(n=>{typeof t[n]=="function"&&(t[n]=t[n].bind(t))})};class fn extends wa{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;if(super(),this.options=Nr(e),this.services={},this.logger=ot,this.modules={external:[]},rm(this),n&&!this.isInitialized&&!e.isClone){if(!this.options.initImmediate)return this.init(e,n),this;setTimeout(()=>{this.init(e,n)},0)}}init(){var e=this;let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},a=arguments.length>1?arguments[1]:void 0;this.isInitializing=!0,typeof n=="function"&&(a=n,n={}),!n.defaultNS&&n.defaultNS!==!1&&n.ns&&(ne(n.ns)?n.defaultNS=n.ns:n.ns.indexOf("translation")<0&&(n.defaultNS=n.ns[0]));const o=Lr();this.options={...o,...this.options,...Nr(n)},this.options.compatibilityAPI!=="v1"&&(this.options.interpolation={...o.interpolation,...this.options.interpolation}),n.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=n.keySeparator),n.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=n.nsSeparator);const i=l=>l?typeof l=="function"?new l:l:null;if(!this.options.isClone){this.modules.logger?ot.init(i(this.modules.logger),this.options):ot.init(null,this.options);let l;this.modules.formatter?l=this.modules.formatter:typeof Intl<"u"&&(l=am);const d=new xr(this.options);this.store=new $r(this.options.resources,this.options);const u=this.services;u.logger=ot,u.resourceStore=this.store,u.languageUtils=d,u.pluralResolver=new em(d,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),l&&(!this.options.interpolation.format||this.options.interpolation.format===o.interpolation.format)&&(u.formatter=i(l),u.formatter.init(u,this.options),this.options.interpolation.format=u.formatter.format.bind(u.formatter)),u.interpolator=new tm(this.options),u.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},u.backendConnector=new im(i(this.modules.backend),u.resourceStore,u,this.options),u.backendConnector.on("*",function(f){for(var m=arguments.length,P=new Array(m>1?m-1:0),A=1;A<m;A++)P[A-1]=arguments[A];e.emit(f,...P)}),this.modules.languageDetector&&(u.languageDetector=i(this.modules.languageDetector),u.languageDetector.init&&u.languageDetector.init(u,this.options.detection,this.options)),this.modules.i18nFormat&&(u.i18nFormat=i(this.modules.i18nFormat),u.i18nFormat.init&&u.i18nFormat.init(this)),this.translator=new fa(this.services,this.options),this.translator.on("*",function(f){for(var m=arguments.length,P=new Array(m>1?m-1:0),A=1;A<m;A++)P[A-1]=arguments[A];e.emit(f,...P)}),this.modules.external.forEach(f=>{f.init&&f.init(this)})}if(this.format=this.options.interpolation.format,a||(a=Qn),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){const l=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);l.length>0&&l[0]!=="dev"&&(this.options.lng=l[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn("init: no languageDetector is used and no lng is defined"),["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach(l=>{this[l]=function(){return e.store[l](...arguments)}}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(l=>{this[l]=function(){return e.store[l](...arguments),e}});const c=qt(),h=()=>{const l=(d,u)=>{this.isInitializing=!1,this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn("init: i18next is already initialized. You should call init just once!"),this.isInitialized=!0,this.options.isClone||this.logger.log("initialized",this.options),this.emit("initialized",this.options),c.resolve(u),a(d,u)};if(this.languages&&this.options.compatibilityAPI!=="v1"&&!this.isInitialized)return l(null,this.t.bind(this));this.changeLanguage(this.options.lng,l)};return this.options.resources||!this.options.initImmediate?h():setTimeout(h,0),c}loadResources(e){let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Qn;const o=ne(e)?e:this.language;if(typeof e=="function"&&(a=e),!this.options.resources||this.options.partialBundledLanguages){if(o&&o.toLowerCase()==="cimode"&&(!this.options.preload||this.options.preload.length===0))return a();const i=[],r=s=>{if(!s||s==="cimode")return;this.services.languageUtils.toResolveHierarchy(s).forEach(h=>{h!=="cimode"&&i.indexOf(h)<0&&i.push(h)})};o?r(o):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(c=>r(c)),this.options.preload&&this.options.preload.forEach(s=>r(s)),this.services.backendConnector.load(i,this.options.ns,s=>{!s&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),a(s)})}else a(null)}reloadResources(e,n,a){const o=qt();return typeof e=="function"&&(a=e,e=void 0),typeof n=="function"&&(a=n,n=void 0),e||(e=this.languages),n||(n=this.options.ns),a||(a=Qn),this.services.backendConnector.reload(e,n,i=>{o.resolve(),a(i)}),o}use(e){if(!e)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!e.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return e.type==="backend"&&(this.modules.backend=e),(e.type==="logger"||e.log&&e.warn&&e.error)&&(this.modules.logger=e),e.type==="languageDetector"&&(this.modules.languageDetector=e),e.type==="i18nFormat"&&(this.modules.i18nFormat=e),e.type==="postProcessor"&&Hl.addPostProcessor(e),e.type==="formatter"&&(this.modules.formatter=e),e.type==="3rdParty"&&this.modules.external.push(e),this}setResolvedLanguage(e){if(!(!e||!this.languages)&&!(["cimode","dev"].indexOf(e)>-1))for(let n=0;n<this.languages.length;n++){const a=this.languages[n];if(!(["cimode","dev"].indexOf(a)>-1)&&this.store.hasLanguageSomeTranslations(a)){this.resolvedLanguage=a;break}}}changeLanguage(e,n){var a=this;this.isLanguageChangingTo=e;const o=qt();this.emit("languageChanging",e);const i=c=>{this.language=c,this.languages=this.services.languageUtils.toResolveHierarchy(c),this.resolvedLanguage=void 0,this.setResolvedLanguage(c)},r=(c,h)=>{h?(i(h),this.translator.changeLanguage(h),this.isLanguageChangingTo=void 0,this.emit("languageChanged",h),this.logger.log("languageChanged",h)):this.isLanguageChangingTo=void 0,o.resolve(function(){return a.t(...arguments)}),n&&n(c,function(){return a.t(...arguments)})},s=c=>{!e&&!c&&this.services.languageDetector&&(c=[]);const h=ne(c)?c:this.services.languageUtils.getBestMatchFromCodes(c);h&&(this.language||i(h),this.translator.language||this.translator.changeLanguage(h),this.services.languageDetector&&this.services.languageDetector.cacheUserLanguage&&this.services.languageDetector.cacheUserLanguage(h)),this.loadResources(h,l=>{r(l,h)})};return!e&&this.services.languageDetector&&!this.services.languageDetector.async?s(this.services.languageDetector.detect()):!e&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(s):this.services.languageDetector.detect(s):s(e),o}getFixedT(e,n,a){var o=this;const i=function(r,s){let c;if(typeof s!="object"){for(var h=arguments.length,l=new Array(h>2?h-2:0),d=2;d<h;d++)l[d-2]=arguments[d];c=o.options.overloadTranslationOptionHandler([r,s].concat(l))}else c={...s};c.lng=c.lng||i.lng,c.lngs=c.lngs||i.lngs,c.ns=c.ns||i.ns,c.keyPrefix!==""&&(c.keyPrefix=c.keyPrefix||a||i.keyPrefix);const u=o.options.keySeparator||".";let f;return c.keyPrefix&&Array.isArray(r)?f=r.map(m=>`${c.keyPrefix}${u}${m}`):f=c.keyPrefix?`${c.keyPrefix}${u}${r}`:r,o.t(f,c)};return ne(e)?i.lng=e:i.lngs=e,i.ns=n,i.keyPrefix=a,i}t(){return this.translator&&this.translator.translate(...arguments)}exists(){return this.translator&&this.translator.exists(...arguments)}setDefaultNamespace(e){this.options.defaultNS=e}hasLoadedNamespace(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;const a=n.lng||this.resolvedLanguage||this.languages[0],o=this.options?this.options.fallbackLng:!1,i=this.languages[this.languages.length-1];if(a.toLowerCase()==="cimode")return!0;const r=(s,c)=>{const h=this.services.backendConnector.state[`${s}|${c}`];return h===-1||h===0||h===2};if(n.precheck){const s=n.precheck(this,r);if(s!==void 0)return s}return!!(this.hasResourceBundle(a,e)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||r(a,e)&&(!o||r(i,e)))}loadNamespaces(e,n){const a=qt();return this.options.ns?(ne(e)&&(e=[e]),e.forEach(o=>{this.options.ns.indexOf(o)<0&&this.options.ns.push(o)}),this.loadResources(o=>{a.resolve(),n&&n(o)}),a):(n&&n(),Promise.resolve())}loadLanguages(e,n){const a=qt();ne(e)&&(e=[e]);const o=this.options.preload||[],i=e.filter(r=>o.indexOf(r)<0&&this.services.languageUtils.isSupportedCode(r));return i.length?(this.options.preload=o.concat(i),this.loadResources(r=>{a.resolve(),n&&n(r)}),a):(n&&n(),Promise.resolve())}dir(e){if(e||(e=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!e)return"rtl";const n=["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"],a=this.services&&this.services.languageUtils||new xr(Lr());return n.indexOf(a.getLanguagePartFromCode(e))>-1||e.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;return new fn(e,n)}cloneInstance(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Qn;const a=e.forkResourceStore;a&&delete e.forkResourceStore;const o={...this.options,...e,isClone:!0},i=new fn(o);return(e.debug!==void 0||e.prefix!==void 0)&&(i.logger=i.logger.clone(e)),["store","services","language"].forEach(s=>{i[s]=this[s]}),i.services={...this.services},i.services.utils={hasLoadedNamespace:i.hasLoadedNamespace.bind(i)},a&&(i.store=new $r(this.store.data,o),i.services.resourceStore=i.store),i.translator=new fa(i.services,o),i.translator.on("*",function(s){for(var c=arguments.length,h=new Array(c>1?c-1:0),l=1;l<c;l++)h[l-1]=arguments[l];i.emit(s,...h)}),i.init(o,n),i.translator.options=o,i.translator.backendConnector.services.utils={hasLoadedNamespace:i.hasLoadedNamespace.bind(i)},i}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}}const $e=fn.createInstance();$e.createInstance=fn.createInstance;$e.createInstance;$e.dir;$e.init;$e.loadResources;$e.reloadResources;$e.use;$e.changeLanguage;$e.getFixedT;$e.t;$e.exists;$e.setDefaultNamespace;$e.hasLoadedNamespace;$e.loadNamespaces;$e.loadLanguages;function sm(){if(console&&console.warn){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];typeof e[0]=="string"&&(e[0]=`react-i18next:: ${e[0]}`),console.warn(...e)}}const Fr={};function yo(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];typeof e[0]=="string"&&Fr[e[0]]||(typeof e[0]=="string"&&(Fr[e[0]]=new Date),sm(...e))}const Ql=(t,e)=>()=>{if(t.isInitialized)e();else{const n=()=>{setTimeout(()=>{t.off("initialized",n)},0),e()};t.on("initialized",n)}};function Ir(t,e,n){t.loadNamespaces(e,Ql(t,n))}function Ur(t,e,n,a){typeof n=="string"&&(n=[n]),n.forEach(o=>{t.options.ns.indexOf(o)<0&&t.options.ns.push(o)}),t.loadLanguages(e,Ql(t,a))}function lm(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const a=e.languages[0],o=e.options?e.options.fallbackLng:!1,i=e.languages[e.languages.length-1];if(a.toLowerCase()==="cimode")return!0;const r=(s,c)=>{const h=e.services.backendConnector.state[`${s}|${c}`];return h===-1||h===2};return n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&e.services.backendConnector.backend&&e.isLanguageChangingTo&&!r(e.isLanguageChangingTo,t)?!1:!!(e.hasResourceBundle(a,t)||!e.services.backendConnector.backend||e.options.resources&&!e.options.partialBundledLanguages||r(a,t)&&(!o||r(i,t)))}function cm(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return!e.languages||!e.languages.length?(yo("i18n.languages were undefined or empty",e.languages),!0):e.options.ignoreJSONStructure!==void 0?e.hasLoadedNamespace(t,{lng:n.lng,precheck:(o,i)=>{if(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&o.services.backendConnector.backend&&o.isLanguageChangingTo&&!i(o.isLanguageChangingTo,t))return!1}}):lm(t,e,n)}const um=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,dm={"&amp;":"&","&#38;":"&","&lt;":"<","&#60;":"<","&gt;":">","&#62;":">","&apos;":"'","&#39;":"'","&quot;":'"',"&#34;":'"',"&nbsp;":" ","&#160;":" ","&copy;":"©","&#169;":"©","&reg;":"®","&#174;":"®","&hellip;":"…","&#8230;":"…","&#x2F;":"/","&#47;":"/"},hm=t=>dm[t],fm=t=>t.replace(um,hm);let vo={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:fm};function pm(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};vo={...vo,...t}}function mm(){return vo}let Kl;function gm(t){Kl=t}function ym(){return Kl}const vm={type:"3rdParty",init(t){pm(t.options.react),gm(t)}},bm=z.createContext();class Pm{constructor(){this.usedNamespaces={}}addUsedNamespaces(e){e.forEach(n=>{this.usedNamespaces[n]||(this.usedNamespaces[n]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}}const wm=(t,e)=>{const n=z.useRef();return z.useEffect(()=>{n.current=t},[t,e]),n.current};function Cm(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const{i18n:n}=e,{i18n:a,defaultNS:o}=z.useContext(bm)||{},i=n||a||ym();if(i&&!i.reportNamespaces&&(i.reportNamespaces=new Pm),!i){yo("You will need to pass in an i18next instance by using initReactI18next");const T=(M,C)=>typeof C=="string"?C:C&&typeof C=="object"&&typeof C.defaultValue=="string"?C.defaultValue:Array.isArray(M)?M[M.length-1]:M,S=[T,{},!1];return S.t=T,S.i18n={},S.ready=!1,S}i.options.react&&i.options.react.wait!==void 0&&yo("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");const r={...mm(),...i.options.react,...e},{useSuspense:s,keyPrefix:c}=r;let h=t||o||i.options&&i.options.defaultNS;h=typeof h=="string"?[h]:h||["translation"],i.reportNamespaces.addUsedNamespaces&&i.reportNamespaces.addUsedNamespaces(h);const l=(i.isInitialized||i.initializedStoreOnce)&&h.every(T=>cm(T,i,r));function d(){return i.getFixedT(e.lng||null,r.nsMode==="fallback"?h:h[0],c)}const[u,f]=z.useState(d);let m=h.join();e.lng&&(m=`${e.lng}${m}`);const P=wm(m),A=z.useRef(!0);z.useEffect(()=>{const{bindI18n:T,bindI18nStore:S}=r;A.current=!0,!l&&!s&&(e.lng?Ur(i,e.lng,h,()=>{A.current&&f(d)}):Ir(i,h,()=>{A.current&&f(d)})),l&&P&&P!==m&&A.current&&f(d);function M(){A.current&&f(d)}return T&&i&&i.on(T,M),S&&i&&i.store.on(S,M),()=>{A.current=!1,T&&i&&T.split(" ").forEach(C=>i.off(C,M)),S&&i&&S.split(" ").forEach(C=>i.store.off(C,M))}},[i,m]);const b=z.useRef(!0);z.useEffect(()=>{A.current&&!b.current&&f(d),b.current=!1},[i,c]);const E=[u,i,l];if(E.t=u,E.i18n=i,E.ready=l,l||!l&&!s)return E;throw new Promise(T=>{e.lng?Ur(i,e.lng,h,()=>T()):Ir(i,h,()=>T())})}const Am="ثوانٍ",Sm="مرشد",Tm="رفيق",km="الإنجليزية",$m="الصينية",Rm="الإسبانية",xm="الكورية",Em="الفرنسية",Mm="اليابانية",Lm="الألمانية",Nm="العربية",Fm="الترجمة",Im="التفسير",Um="القواعد",Om="يرجى الانتظار حتى يرد الآخرون لمتابعة الرسائل الخاصة.",Dm="لم تنضم إلى هذه المجموعة بعد. يرجى الانتظار حتى يوافق مالك المجموعة على طلبك.",Bm="محادثة",Vm="جهات الاتصال",Gm="تسجيل الخروج",jm="اقتباس",zm="عرض",_m="سحب الرسالة",Hm="ترجمة",Qm="طي",Km="الرسائل",Jm="الدراسة",Wm="استكشاف",qm="حسابي",Xm="التطوير",Ym="رجوع",Zm="المجموعات",eg="إضافة",tg="فشل",ng="إنشاء",ag="تحديث",og="ParrotMate",ig="نسخ",rg="ذكر",sg="أنثى",lg="كلمة",cg="تسجيل الدخول",ug="و",dg="اللغة",hg="تخطي",fg="متابعة",pg="نعم",mg="لا",gg="العمر",yg="أنثى",vg="ذكر",bg="إنهاء",Pg="تأكيد",wg="الجنس",Cg="المستوى التعليمي",Ag="الوظيفة",Sg="الهواية",Tg={seconds:Am,"Send Code":"إرسال الرمز","Add Profile":"إضافة ملف شخصي",Practitioner:Sm,"I want to practice languages and chat with others":"أرغب في ممارسة اللغات والدردشة مع الآخرين",Mate:Tm,"I can guide language learning and provide companionship":"أستطيع إرشاد المتعلمين في اللغات وتقديم الدعم والرفقة","Unknown error":"حدث خطأ غير معروف. الرجاء المحاولة مرة أخرى.",English:km,Chinese:$m,Spanish:Rm,Korean:xm,French:Em,Japanese:Mm,German:Lm,Arabic:Nm,Translation:Fm,Interpretation:Im,"Key Vocabulary & Terms":"المفردات والمصطلحات الرئيسية",Grammar:Um,DM_ACL_REJECT:Om,GROUP_ACL_REJECT:Dm,"Tree Hole":"زاوية الاعترافات",Chat:Bm,Contacts:Vm,"Remove Contact":"إزالة جهة اتصال","Exit Group":"مغادرة المجموعة","Chat Settings":"إعدادات المحادثة","Awaiting friend confirmation":"بانتظار تأكيد الصديق","Revision failed":"فشل المراجعة","Please use English":"يرجى استخدام الإنجليزية","Speech recognition failed. Please try again.":"فشل التعرف على الصوت. الرجاء المحاولة مرة أخرى.","analyzing...":"جارٍ التحليل...","Loading profiles...":"جارٍ تحميل الملفات الشخصية...","Add Friend":"إضافة صديق","Create Group":"إنشاء مجموعة",Logout:Gm,"Copied username to clipboard":"تم نسخ اسم المستخدم إلى الحافظة","Switch Identity":"تبديل الهوية",Function:"الميزة",Quote:jm,"Instructions(Optional)":"تعليمات (اختياري)","joined the room":"انضم إلى الغرفة","left the room":"غادر الغرفة",View:zm,Recall:_m,"Hide Translation":"إخفاء الترجمة",Translate:Hm,Collapse:Qm,"Before you accept, she won’t know you've seen any messages.":"قبل قبولك، لن تعلم هي أنك اطلعت على أي رسائل.","Allow {{name}} to send you messages and share your name and profile picture?":"هل تسمح لـ{{name}} بإرسال رسائل إليك ومشاركة اسمك وصورتك الشخصية؟",Message:Km,Study:Jm,Discover:Wm,Me:qm,"coming soon":"قريبًا","This feature is under":"هذه الميزة قيد",development:Xm,Back:Ym,"Search contacts or groups":"ابحث عن جهات الاتصال أو المجموعات",Groups:Zm,"No Results":"لا توجد نتائج","Say Hi":"قل مرحبًا",Add:eg,"Find Friend":"البحث عن صديق","Input Username":"أدخل اسم المستخدم","my account: ":"حسابي: ","Already Applied":"تم إرسال الطلب بالفعل","User is blocked":"المستخدم محظور",Failed:tg,"Please select at least one member":"الرجاء اختيار عضو واحد على الأقل","Group created":"تم إنشاء المجموعة","Group Name":"اسم المجموعة","Group Name is required":"اسم المجموعة مطلوب","Loading...":"جارٍ التحميل...",Create:ng,"Group updated":"تم تحديث المجموعة","Update Group":"تحديث المجموعة",Update:ag,"No Chats":"لا توجد محادثات",ParrotMate:og,"Speak Different":"تحدث بطريقة مختلفة","Not logged in":"لم تقم بتسجيل الدخول","User Name":"اسم المستخدم",copy:ig,"Network is slow, enable offline mode?":"الشبكة بطيئة، هل تود تفعيل وضع عدم الاتصال؟","Enable offline mode":"تفعيل وضع عدم الاتصال","PChip Reader":"قارئ PChip",male:rg,female:sg,"popular neutral":"شائع / محايد","Offline mode":"وضع عدم الاتصال","Change nickname":"تغيير اللقب","UI Language":"لغة واجهة المستخدم",Word:lg,Date:"التاريخ","My bookshelf":"مكتبتي","Title too short":"العنوان قصير جدًا","Modification successful":"تم التعديل بنجاح","No books in your shelf yet":"لا توجد كتب في رفك حتى الآن","Tap the search icon above to browse books and add them to your shelf!":"اضغط على أيقونة البحث أعلاه لتصفح الكتب وإضافتها إلى رفك!","Read with experts to help you understand,":"اقرأ مع خبراء لمساعدتك على الفهم،","Comprehensive training in English listening and reading.":"تدريب شامل على مهارات الاستماع والقراءة باللغة الإنجليزية.","Hi, {{nickName}}! Welcome!":"مرحبًا، {{nickName}}! أهلاً بك!","Browse library":"تصفح المكتبة","Add your own TXT/PDF":"أضف ملفات TXT/PDF الخاصة بك","Already have an account?":"هل لديك حساب بالفعل؟","Click here to login":"اضغط هنا لتسجيل الدخول","We detected this is your first time using PChip Reader. Add some books!":"يبدو أن هذه أول مرة تستخدم فيها PChip Reader. أضف بعض الكتب!","Upload Book":"رفع كتاب","Click here to upload local EPUB/MOBI/PDF/TXT":"اضغط هنا لرفع ملفات EPUB/MOBI/PDF/TXT من جهازك","Only EPUB/MOBI/PDF/TXT is supported":"نقبل فقط ملفات بصيغ EPUB/MOBI/PDF/TXT","Upload successful":"تم الرفع بنجاح","Book upload failed":"تعذر رفع الكتاب","We only store your files locally!":"نحتفظ بملفاتك محليًا فقط!","New words":"مفردات جديدة","Total reading":"إجمالي القراءة","Today's reading":"قراءة اليوم","Please choose an image file":"يرجى اختيار ملف صورة","Image sent":"تم إرسال الصورة","Failed to upload image":"تعذر تحميل الصورة","analyzing grammar structure":"جاري تحليل البنية النحوية","understanding pronunciation":"جاري فهم النطق","optimizing and restructuring":"جاري تحسين وإعادة هيكلة","My QR Code":"رمز QR الخاص بي","Let friends scan to fill your username automatically":"دع أصدقائك يمسحون الرمز لملء اسم المستخدم تلقائيًا","Unable to load image":"يتعذر تحميل الصورة","Loading image...":"جاري تحميل الصورة...","Shared image":"صورة مشتركة","QR scanning is unavailable in this environment":"مسح رمز QR غير متاح في هذه البيئة","Camera access is not supported on this device":"هذا الجهاز لا يدعم الوصول إلى الكاميرا","Unable to access the camera":"يتعذر الوصول إلى الكاميرا","No QR code found in the selected image":"لم يتم العثور على رمز QR في الصورة المحددة","Unable to read QR code from the selected image":"يتعذر قراءة رمز QR من الصورة المحددة","Username captured from QR code":"تم التقاط اسم المستخدم من رمز QR","Initializing camera...":"جاري تهيئة الكاميرا...","Scan QR Code":"امسح رمز QR","Align the QR code within the frame to capture a username automatically.":"ضع رمز QR داخل الإطار لالتقاط اسم المستخدم تلقائيًا.","Login Success":"تم تسجيل الدخول بنجاح","please enter your phone number":"يرجى إدخال رقم هاتفك","Please enter your phone number":"يرجى إدخال رقم هاتفك",Login:cg,"Terms&Conditions":"الشروط والأحكام",and:ug,"Privacy Policy":"سياسة الخصوصية","Unregistered phone numbers will automatically create an account":"أرقام الهواتف غير المسجَّلة ستُنشئ حسابًا تلقائيًا","Please enter the verification code":"يرجى إدخال رمز التحقق","Send verification code":"إرسال رمز التحقق","Please enter the correct phone number":"يرجى إدخال رقم هاتف صحيح","Verification code sent":"تم إرسال رمز التحقق",Language:dg,Skip:hg,Continue:fg,"Are you 18 or older?":"هل عمرك 18 عامًا أو أكثر؟",Yes:pg,No:mg,"Please select language what you want to learn":"يرجى اختيار اللغة التي تريد تعلمها","Please enter your age":"من فضلك أدخل عمرك",Age:gg,"Please select your gender":"من فضلك اختر جنسك",Female:yg,Male:vg,"Your {{langShort}} name":"اسمك باللغة {{langShort}}","Create your own name or choose from the recommendations":"أنشئ اسمك الخاص أو اختر من الاقتراحات","Enter your nickname here...":"أدخل لقبك هنا...","Learning Language":"لغة التعلم",Finish:bg,"Nickname is required":"اللقب مطلوب","Nickname must be at least 3 characters":"يجب أن يكون اللقب مكونًا من 3 أحرف على الأقل",Confirm:Pg,"Account Phone":"رقم هاتف الحساب",Gender:wg,Education:Cg,Job:Ag,Hobby:Sg,"Select your role":"اختر دورك","Please choose your identity":"الرجاء اختيار هويتك","Profile Step: Nickname":"الاسم المستعار","Profile Step: Learning Language":"اللغة التي تتعلمها","Profile Step: Mother Tongue":"اللغة الأم","By signing up, you agree with ":"عند التسجيل، أنت توافق على "},kg="Sekunden",$g="Lernbegleiter",Rg="Sprachpartner",xg="Englisch",Eg="Chinesisch",Mg="Spanisch",Lg="Koreanisch",Ng="Französisch",Fg="Japanisch",Ig="Deutsch",Ug="Arabisch",Og="Übersetzung",Dg="Interpretation",Bg="Grammatik",Vg="Bitte warte auf die Antwort anderer, um die Direktnachricht fortzusetzen.",Gg="Du bist noch nicht in dieser Gruppe. Bitte warte, bis der Gruppeninhaber deine Anfrage genehmigt.",jg="Chat",zg="Kontakte",_g="Abmelden",Hg="Zitat",Qg="Anzeigen",Kg="Zurückrufen",Jg="Übersetzen",Wg="Einklappen",qg="Nachricht",Xg="Lernen",Yg="Entdecken",Zg="Ich",ey="Entwicklung",ty="Zurück",ny="Gruppen",ay="Hinzufügen",oy="Fehlgeschlagen",iy="Erstellen",ry="Aktualisieren",sy="ParrotMate",ly="kopieren",cy="männlich",uy="weiblich",dy="Wort",hy="Anmelden",fy="und",py="Sprache",my="Überspringen",gy="Weiter",yy="Ja",vy="Nein",by="Alter",Py="Weiblich",wy="Männlich",Cy="Abschließen",Ay="Bestätigen",Sy="Geschlecht",Ty="Ausbildung",ky="Beruf",$y="Hobby",Ry={seconds:kg,"Send Code":"Code senden","Add Profile":"Profil hinzufügen",Practitioner:$g,"I want to practice languages and chat with others":"Ich möchte Sprachen üben und mich mit anderen austauschen",Mate:Rg,"I can guide language learning and provide companionship":"Ich kann beim Sprachenlernen unterstützen und als Gesprächspartner zur Seite stehen","Unknown error":"Unbekannter Fehler",English:xg,Chinese:Eg,Spanish:Mg,Korean:Lg,French:Ng,Japanese:Fg,German:Ig,Arabic:Ug,Translation:Og,Interpretation:Dg,"Key Vocabulary & Terms":"Wichtige Vokabeln & Begriffe",Grammar:Bg,DM_ACL_REJECT:Vg,GROUP_ACL_REJECT:Gg,"Tree Hole":"Baumhöhle",Chat:jg,Contacts:zg,"Remove Contact":"Kontakt entfernen","Exit Group":"Gruppe verlassen","Chat Settings":"Chat-Einstellungen","Awaiting friend confirmation":"Bestätigung durch Kontakt ausstehend","Revision failed":"Überprüfung fehlgeschlagen","Please use English":"Bitte schreibe auf Englisch","Speech recognition failed. Please try again.":"Spracherkennung fehlgeschlagen. Bitte versuche es erneut.","analyzing...":"Analysiere...","Loading profiles...":"Profile werden geladen...","Add Friend":"Kontakt hinzufügen","Create Group":"Gruppe erstellen",Logout:_g,"Copied username to clipboard":"Benutzername in die Zwischenablage kopiert","Switch Identity":"Identität wechseln",Function:"Funktion",Quote:Hg,"Instructions(Optional)":"Anweisungen (optional)","joined the room":"ist dem Raum beigetreten","left the room":"hat den Raum verlassen",View:Qg,Recall:Kg,"Hide Translation":"Übersetzung ausblenden",Translate:Jg,Collapse:Wg,"Before you accept, she won’t know you've seen any messages.":"Bevor du die Anfrage akzeptierst, weiß sie nicht, dass du Nachrichten gesehen hast.","Allow {{name}} to send you messages and share your name and profile picture?":"Darf {{name}} dir Nachrichten schicken und deinen Namen sowie dein Profilbild sehen?",Message:qg,Study:Xg,Discover:Yg,Me:Zg,"coming soon":"Bald verfügbar","This feature is under":"Diese Funktion befindet sich in der",development:ey,Back:ty,"Search contacts or groups":"Kontakte oder Gruppen durchsuchen",Groups:ny,"No Results":"Keine Ergebnisse","Say Hi":"Sag Hallo",Add:ay,"Find Friend":"Freund finden","Input Username":"Benutzernamen eingeben","my account: ":"Mein Konto: ","Already Applied":"Bereits angefragt","User is blocked":"Benutzer ist blockiert",Failed:oy,"Please select at least one member":"Bitte wähle mindestens ein Mitglied aus","Group created":"Gruppe erstellt","Group Name":"Gruppenname","Group Name is required":"Gruppenname ist erforderlich","Loading...":"Lädt...",Create:iy,"Group updated":"Gruppe aktualisiert","Update Group":"Gruppe aktualisieren",Update:ry,"No Chats":"Keine Chats",ParrotMate:sy,"Speak Different":"Sprich anders","Not logged in":"Nicht angemeldet","User Name":"Benutzername",copy:ly,"Network is slow, enable offline mode?":"Die Verbindung ist langsam. Offline-Modus aktivieren?","Enable offline mode":"Offline-Modus aktivieren","PChip Reader":"PChip Reader",male:cy,female:uy,"popular neutral":"beliebt / neutral","Offline mode":"Offline-Modus","Change nickname":"Spitzname ändern","UI Language":"UI-Sprache",Word:dy,Date:"Datum","My bookshelf":"Mein Bücherregal","Title too short":"Titel zu kurz","Modification successful":"Änderung erfolgreich","No books in your shelf yet":"Du hast noch keine Bücher in deinem Regal.","Tap the search icon above to browse books and add them to your shelf!":"Tippe oben auf das Suchsymbol, um Bücher zu durchsuchen und sie deinem Regal hinzuzufügen!","Read with experts to help you understand,":"Lies gemeinsam mit Expert:innen, die dir beim Verstehen helfen,","Comprehensive training in English listening and reading.":"Umfassendes Training für Hör- und Leseverständnis auf Englisch.","Hi, {{nickName}}! Welcome!":"Hallo, {{nickName}}! Willkommen!","Browse library":"Bibliothek durchsuchen","Add your own TXT/PDF":"Eigene TXT-/PDF-Datei hinzufügen","Already have an account?":"Hast du bereits ein Konto?","Click here to login":"Hier klicken, um dich anzumelden","We detected this is your first time using PChip Reader. Add some books!":"Es sieht so aus, als würdest du PChip Reader zum ersten Mal nutzen. Füge ein paar Bücher hinzu!","Upload Book":"Buch hochladen","Click here to upload local EPUB/MOBI/PDF/TXT":"Hier klicken, um lokale EPUB/MOBI/PDF/TXT hochzuladen","Only EPUB/MOBI/PDF/TXT is supported":"Es werden nur EPUB-, MOBI-, PDF- und TXT-Dateien unterstützt.","Upload successful":"Hochladen erfolgreich","Book upload failed":"Hochladen des Buches fehlgeschlagen","We only store your files locally!":"Wir speichern deine Dateien nur lokal!","New words":"Neue Vokabeln","Total reading":"Gesamte Lesezeit","Today's reading":"Heutige Lesezeit","Please choose an image file":"Bitte wähle eine Bilddatei aus","Image sent":"Bild gesendet","Failed to upload image":"Bild konnte nicht hochgeladen werden","analyzing grammar structure":"Grammatikstruktur wird analysiert","understanding pronunciation":"Aussprache wird analysiert","optimizing and restructuring":"Wird optimiert und umstrukturiert","My QR Code":"Mein QR-Code","Let friends scan to fill your username automatically":"Lass Freunde scannen, damit dein Benutzername automatisch ausgefüllt wird","Unable to load image":"Bild kann nicht geladen werden","Loading image...":"Bild wird geladen...","Shared image":"Geteiltes Bild","QR scanning is unavailable in this environment":"QR-Scannen ist in dieser Umgebung nicht verfügbar","Camera access is not supported on this device":"Kamerazugriff wird auf diesem Gerät nicht unterstützt","Unable to access the camera":"Auf die Kamera kann nicht zugegriffen werden","No QR code found in the selected image":"Kein QR-Code im ausgewählten Bild gefunden","Unable to read QR code from the selected image":"QR-Code im ausgewählten Bild konnte nicht gelesen werden","Username captured from QR code":"Benutzername aus QR-Code erfasst","Initializing camera...":"Kamera wird initialisiert...","Scan QR Code":"QR-Code scannen","Align the QR code within the frame to capture a username automatically.":"Richte den QR-Code innerhalb des Rahmens aus, damit dein Benutzername automatisch erkannt wird.","Login Success":"Anmeldung erfolgreich","please enter your phone number":"bitte gib deine Telefonnummer ein","Please enter your phone number":"Bitte gib deine Telefonnummer ein",Login:hy,"Terms&Conditions":"Nutzungsbedingungen",and:fy,"Privacy Policy":"Datenschutzerklärung","Unregistered phone numbers will automatically create an account":"Mit einer nicht registrierten Telefonnummer wird automatisch ein Konto erstellt.","Please enter the verification code":"Bitte gib den Bestätigungscode ein","Send verification code":"Bestätigungscode senden","Please enter the correct phone number":"Bitte gib eine gültige Telefonnummer ein","Verification code sent":"Bestätigungscode gesendet",Language:py,Skip:my,Continue:gy,"Are you 18 or older?":"Bist du 18 Jahre oder älter?",Yes:yy,No:vy,"Please select language what you want to learn":"Bitte wähle die Sprache, die du lernen möchtest.","Please enter your age":"Bitte gib dein Alter an",Age:by,"Please select your gender":"Bitte wähle dein Geschlecht aus",Female:Py,Male:wy,"Your {{langShort}} name":"Dein {{langShort}}-Name","Create your own name or choose from the recommendations":"Erstelle einen eigenen Namen oder wähle einen aus unseren Vorschlägen","Enter your nickname here...":"Gib hier deinen Spitznamen ein...","Learning Language":"Lernsprache",Finish:Cy,"Nickname is required":"Bitte gib einen Spitznamen ein","Nickname must be at least 3 characters":"Der Spitzname muss mindestens 3 Zeichen lang sein",Confirm:Ay,"Account Phone":"Telefonnummer",Gender:Sy,Education:Ty,Job:ky,Hobby:$y,"Select your role":"Wähle deine Rolle","Please choose your identity":"Bitte wähle deine Identität aus","Profile Step: Nickname":"Spitzname","Profile Step: Learning Language":"Lernsprache","Profile Step: Mother Tongue":"Muttersprache","By signing up, you agree with ":"Mit der Anmeldung erklärst du dich einverstanden mit "},xy="δευτερόλεπτα",Ey="Καθοδηγητής",My="Σύντροφος",Ly="Αγγλικά",Ny="Κινέζικα",Fy="Ισπανικά",Iy="Κορεατικά",Uy="Γαλλικά",Oy="Ιαπωνικά",Dy="Γερμανικά",By="Αραβικά",Vy="Μετάφραση",Gy="Ερμηνεία",jy="Γραμματική",zy="Πρέπει να περιμένετε την απάντηση των άλλων για να συνεχίσετε την ιδιωτική συνομιλία.",_y="Δεν είστε ακόμα μέλος αυτής της ομάδας. Περιμένετε να εγκριθεί το αίτημά σας από τον διαχειριστή.",Hy="Συνομιλία",Qy="Επαφές",Ky="Αποσύνδεση",Jy="Παράθεση",Wy="Προβολή",qy="Ανάκληση",Xy="Μετάφραση",Yy="Σύμπτυξη",Zy="Μήνυμα",e0="Μάθηση",t0="Ανακάλυψη",n0="Εγώ",a0="ανάπτυξη",o0="Πίσω",i0="Ομάδες",r0="Προσθήκη",s0="Απέτυχε",l0="Δημιουργία",c0="Ενημέρωση",u0="ParrotMate",d0="Αντιγραφή",h0="Άνδρας",f0="Γυναίκα",p0="Λέξη",m0="Σύνδεση",g0="και",y0="Γλώσσα",v0="Παράλειψη",b0="Συνέχεια",P0="Ναι",w0="Όχι",C0="Ηλικία",A0="Γυναίκα",S0="Άνδρας",T0="Ολοκλήρωση",k0="Επιβεβαίωση",$0="Φύλο",R0="Εκπαίδευση",x0="Επάγγελμα",E0="Χόμπι",M0={seconds:xy,"Send Code":"Αποστολή κωδικού","Add Profile":"Προσθήκη προφίλ",Practitioner:Ey,"I want to practice languages and chat with others":"Θέλω να εξασκήσω γλώσσες και να συνομιλήσω με άλλους",Mate:My,"I can guide language learning and provide companionship":"Μπορώ να καθοδηγήσω στη μάθηση γλωσσών και να προσφέρω συντροφιά","Unknown error":"Άγνωστο σφάλμα",English:Ly,Chinese:Ny,Spanish:Fy,Korean:Iy,French:Uy,Japanese:Oy,German:Dy,Arabic:By,Translation:Vy,Interpretation:Gy,"Key Vocabulary & Terms":"Βασικό λεξιλόγιο και όροι",Grammar:jy,DM_ACL_REJECT:zy,GROUP_ACL_REJECT:_y,"Tree Hole":"Τρύπα Δέντρου",Chat:Hy,Contacts:Qy,"Remove Contact":"Αφαίρεση επαφής","Exit Group":"Αποχώρηση από την ομάδα","Chat Settings":"Ρυθμίσεις συνομιλίας","Awaiting friend confirmation":"Αναμονή επιβεβαίωσης από φίλο","Revision failed":"Η αναθεώρηση απέτυχε","Please use English":"Παρακαλώ χρησιμοποιήστε τα Αγγλικά","Speech recognition failed. Please try again.":"Η αναγνώριση ομιλίας απέτυχε. Παρακαλώ δοκιμάστε ξανά.","analyzing...":"αναλύεται...","Loading profiles...":"Φόρτωση προφίλ...","Add Friend":"Προσθήκη φίλου","Create Group":"Δημιουργία ομάδας",Logout:Ky,"Copied username to clipboard":"Το όνομα χρήστη αντιγράφηκε στο πρόχειρο","Switch Identity":"Αλλαγή ταυτότητας",Function:"Λειτουργία",Quote:Jy,"Instructions(Optional)":"Οδηγίες (Προαιρετικό)","joined the room":"εντάχθηκε στην αίθουσα","left the room":"αποχώρησε από την αίθουσα",View:Wy,Recall:qy,"Hide Translation":"Απόκρυψη μετάφρασης",Translate:Xy,Collapse:Yy,"Before you accept, she won’t know you've seen any messages.":"Πριν αποδεχτείς, εκείνη δεν θα γνωρίζει ότι έχεις δει τα μηνύματά της.","Allow {{name}} to send you messages and share your name and profile picture?":"Θα επιτρέψετε στον/στην {{name}} να σας στέλνει μηνύματα και να βλέπει το όνομά σας και τη φωτογραφία προφίλ;",Message:Zy,Study:e0,Discover:t0,Me:n0,"coming soon":"Έρχεται σύντομα","This feature is under":"Αυτή η λειτουργία είναι σε",development:a0,Back:o0,"Search contacts or groups":"Αναζήτηση επαφών ή ομάδων",Groups:i0,"No Results":"Δεν βρέθηκαν αποτελέσματα","Say Hi":"Πες γεια",Add:r0,"Find Friend":"Βρες φίλο","Input Username":"Πληκτρολογήστε όνομα χρήστη","my account: ":"Ο λογαριασμός μου: ","Already Applied":"Έχεις ήδη υποβάλει αίτημα","User is blocked":"Ο χρήστης είναι αποκλεισμένος",Failed:s0,"Please select at least one member":"Επιλέξτε τουλάχιστον ένα μέλος","Group created":"Η ομάδα δημιουργήθηκε","Group Name":"Όνομα ομάδας","Group Name is required":"Το όνομα ομάδας είναι υποχρεωτικό","Loading...":"Φόρτωση...",Create:l0,"Group updated":"Η ομάδα ενημερώθηκε","Update Group":"Ενημέρωση ομάδας",Update:c0,"No Chats":"Δεν υπάρχουν συνομιλίες",ParrotMate:u0,"Speak Different":"Μίλα διαφορετικά","Not logged in":"Δεν έχετε συνδεθεί","User Name":"Όνομα χρήστη",copy:d0,"Network is slow, enable offline mode?":"Το δίκτυο είναι αργό. Να ενεργοποιήσω τη λειτουργία εκτός σύνδεσης;","Enable offline mode":"Ενεργοποίηση λειτουργίας εκτός σύνδεσης","PChip Reader":"PChip Reader",male:h0,female:f0,"popular neutral":"Δημοφιλές (ουδέτερο)","Offline mode":"Λειτουργία εκτός σύνδεσης","Change nickname":"Αλλαγή ψευδώνυμου","UI Language":"Γλώσσα διεπαφής",Word:p0,Date:"Ημερομηνία","My bookshelf":"Η βιβλιοθήκη μου","Title too short":"Ο τίτλος είναι πολύ σύντομος","Modification successful":"Η τροποποίηση ολοκληρώθηκε με επιτυχία","No books in your shelf yet":"Δεν έχετε ακόμα βιβλία στο ράφι σας","Tap the search icon above to browse books and add them to your shelf!":"Πατήστε το εικονίδιο αναζήτησης παραπάνω για να βρείτε βιβλία και να τα προσθέσετε στο ράφι σας!","Read with experts to help you understand,":"Διαβάστε με ειδικούς που θα σας βοηθήσουν να κατανοήσετε,","Comprehensive training in English listening and reading.":"Ολοκληρωμένη εκπαίδευση στην ακρόαση και την ανάγνωση στα Αγγλικά.","Hi, {{nickName}}! Welcome!":"Γεια σου, {{nickName}}! Καλώς ήρθες!","Browse library":"Περιήγηση στη βιβλιοθήκη","Add your own TXT/PDF":"Πρόσθεσε τα δικά σου αρχεία TXT/PDF","Already have an account?":"Έχεις ήδη λογαριασμό;","Click here to login":"Κάνε κλικ εδώ για να συνδεθείς","We detected this is your first time using PChip Reader. Add some books!":"Φαίνεται ότι χρησιμοποιείς το PChip Reader για πρώτη φορά. Πρόσθεσε μερικά βιβλία!","Upload Book":"Μεταφόρτωση βιβλίου","Click here to upload local EPUB/MOBI/PDF/TXT":"Κάνε κλικ εδώ για να ανεβάσεις τοπικά αρχεία EPUB/MOBI/PDF/TXT","Only EPUB/MOBI/PDF/TXT is supported":"Υποστηρίζονται μόνο αρχεία EPUB, MOBI, PDF και TXT","Upload successful":"Το ανέβασμα ολοκληρώθηκε με επιτυχία","Book upload failed":"Η μεταφόρτωση του βιβλίου απέτυχε","We only store your files locally!":"Αποθηκεύουμε τα αρχεία σου μόνο τοπικά!","New words":"Νέες λέξεις","Total reading":"Συνολική ανάγνωση","Today's reading":"Ανάγνωση σήμερα","Please choose an image file":"Επιλέξτε ένα αρχείο εικόνας","Image sent":"Η εικόνα εστάλη","Failed to upload image":"Η αποστολή της εικόνας απέτυχε","analyzing grammar structure":"Ανάλυση γραμματικής δομής","understanding pronunciation":"Κατανόηση προφοράς","optimizing and restructuring":"Βελτιστοποίηση και αναδιάρθρωση","My QR Code":"Ο κωδικός QR μου","Let friends scan to fill your username automatically":"Άσε τους φίλους να σαρώσουν για να συμπληρωθεί αυτόματα το όνομα χρήστη σου","Unable to load image":"Δεν είναι δυνατή η φόρτωση της εικόνας","Loading image...":"Φόρτωση εικόνας...","Shared image":"Κοινόχρηστη εικόνα","QR scanning is unavailable in this environment":"Δεν είναι δυνατή η σάρωση QR σε αυτό το περιβάλλον","Camera access is not supported on this device":"Η πρόσβαση στην κάμερα δεν υποστηρίζεται σε αυτή τη συσκευή","Unable to access the camera":"Δεν είναι δυνατή η πρόσβαση στην κάμερα","No QR code found in the selected image":"Δεν βρέθηκε κωδικός QR στην επιλεγμένη εικόνα","Unable to read QR code from the selected image":"Δεν ήταν δυνατή η ανάγνωση του κωδικού QR από την επιλεγμένη εικόνα","Username captured from QR code":"Το όνομα χρήστη εντοπίστηκε από τον κωδικό QR","Initializing camera...":"Εκκίνηση κάμερας...","Scan QR Code":"Σάρωση κωδικού QR","Align the QR code within the frame to capture a username automatically.":"Τοποθέτησε τον κωδικό QR μέσα στο πλαίσιο για να συμπληρωθεί αυτόματα το όνομα χρήστη.","Login Success":"Επιτυχής σύνδεση","please enter your phone number":"παρακαλώ εισάγετε τον αριθμό τηλεφώνου σας","Please enter your phone number":"Παρακαλώ εισάγετε τον αριθμό τηλεφώνου σας",Login:m0,"Terms&Conditions":"Όροι & Προϋποθέσεις",and:g0,"Privacy Policy":"Πολιτική Απορρήτου","Unregistered phone numbers will automatically create an account":"Αν ο αριθμός τηλεφώνου δεν είναι καταχωρημένος, θα δημιουργηθεί αυτόματα λογαριασμός.","Please enter the verification code":"Παρακαλώ εισάγετε τον κωδικό επαλήθευσης","Send verification code":"Αποστολή κωδικού επαλήθευσης","Please enter the correct phone number":"Παρακαλώ εισάγετε τον σωστό αριθμό τηλεφώνου","Verification code sent":"Ο κωδικός επαλήθευσης εστάλη",Language:y0,Skip:v0,Continue:b0,"Are you 18 or older?":"Είστε 18 ετών ή άνω;",Yes:P0,No:w0,"Please select language what you want to learn":"Παρακαλώ επιλέξτε τη γλώσσα που θέλετε να μάθετε","Please enter your age":"Παρακαλώ εισάγετε την ηλικία σας",Age:C0,"Please select your gender":"Επιλέξτε το φύλο σας",Female:A0,Male:S0,"Your {{langShort}} name":"Το όνομά σας στη γλώσσα {{langShort}}","Create your own name or choose from the recommendations":"Δημιουργήστε το δικό σας όνομα ή επιλέξτε από τις προτάσεις","Enter your nickname here...":"Γράψτε εδώ το ψευδώνυμό σας...","Learning Language":"Γλώσσα που μαθαίνετε",Finish:T0,"Nickname is required":"Απαιτείται ψευδώνυμο","Nickname must be at least 3 characters":"Το ψευδώνυμο πρέπει να έχει τουλάχιστον 3 χαρακτήρες",Confirm:k0,"Account Phone":"Τηλέφωνο λογαριασμού",Gender:$0,Education:R0,Job:x0,Hobby:E0,"Select your role":"Επιλέξτε τον ρόλο σας","Please choose your identity":"Παρακαλώ επιλέξτε την ταυτότητά σας","Profile Step: Nickname":"Ψευδώνυμο","Profile Step: Learning Language":"Γλώσσα που μαθαίνετε","Profile Step: Mother Tongue":"Μητρική γλώσσα","By signing up, you agree with ":"Με την εγγραφή σας, συμφωνείτε με "},L0="Chat",N0="Contacts",F0="Log out",I0="Quote",U0="View",O0="Recall",D0="Translate",B0="Collapse",V0="Messages",G0="Study",j0="Explore",z0="Profile",_0="development",H0="Back",Q0="Groups",K0="Add",J0="Operation failed",W0="Create",q0="Update",X0="ParrotMate",Y0="Copy",Z0="Male",ev="Female",tv="Word",nv="Sign in",av="and",ov="seconds",iv="Learner",rv="Mate",sv="Translation",lv="Interpretation",cv="Grammar",uv="Language",dv="Skip for now",hv="Continue",fv="Yes",pv="No",mv="Age",gv="Female",yv="Male",vv="Finish",bv="Confirm",Pv="Gender",wv="Education level",Cv="Occupation",Av="Hobbies",Sv="English",Tv="Chinese",kv="Spanish",$v="Korean",Rv="French",xv="Japanese",Ev="German",Mv="Arabic",Lv="Please wait for the other user's response before continuing this direct message.",Nv="You haven't joined this group yet. Please wait for the group owner's approval.",Fv={"Tree Hole":"Tree Hole (Anonymous Corner)",Chat:L0,Contacts:N0,"Please choose an image file":"Please select an image file.","Image sent":"Image sent successfully.","Failed to upload image":"Failed to upload image. Please try again.","Remove Contact":"Remove Contact","Exit Group":"Leave Group","Chat Settings":"Chat Settings","Awaiting friend confirmation":"Waiting for friend to confirm","Revision failed":"Revision failed. Please try again.","Please use English":"Please use English.","Speech recognition failed. Please try again.":"Speech recognition failed. Please try again.","analyzing...":"Analyzing...","analyzing grammar structure":"Analyzing grammar structure","understanding pronunciation":"Analyzing pronunciation","optimizing and restructuring":"Optimizing and restructuring","Loading profiles...":"Loading profiles...","Add Friend":"Add Friend","Create Group":"Create Group",Logout:F0,"Copied username to clipboard":"Username copied to clipboard","Switch Identity":"Switch profile",Function:"Features","My QR Code":"My QR code","Let friends scan to fill your username automatically":"Let friends scan to auto-fill your username",Quote:I0,"No Chats":"No chats yet","Instructions(Optional)":"Instructions (optional)","joined the room":"joined the room","left the room":"left the room","Unable to load image":"Unable to load image","Loading image...":"Loading image...","Shared image":"Shared image",View:U0,Recall:O0,"Hide Translation":"Hide translation",Translate:D0,Collapse:B0,"Before you accept, she won’t know you've seen any messages.":"Before you accept, they won't know you've seen any messages.","Allow {{name}} to send you messages and share your name and profile picture?":"Allow {{name}} to send you messages and view your name and profile picture?","QR scanning is unavailable in this environment":"QR scanning isn't supported in this environment","Camera access is not supported on this device":"This device doesn't support camera access","Unable to access the camera":"Unable to access your camera","No QR code found in the selected image":"No QR code detected in the selected image","Unable to read QR code from the selected image":"Couldn't read the QR code from the selected image",Message:V0,Study:G0,Discover:j0,Me:z0,"coming soon":"Coming soon","This feature is under":"This feature is under",development:_0,Back:H0,"Search contacts or groups":"Search for contacts or groups",Groups:Q0,"No Results":"No results found","Say Hi":"Say hello",Add:K0,"Username captured from QR code":"Username detected from QR code","Find Friend":"Find Friends","Input Username":"Enter username","my account: ":"My account: ","Already Applied":"Request already sent","User is blocked":"This user is blocked","Initializing camera...":"Initializing camera...","Scan QR Code":"Scan QR code","Align the QR code within the frame to capture a username automatically.":"Place the QR code inside the frame to automatically capture the username.",Failed:J0,"Please select at least one member":"Please select at least one member.","Group created":"Group created successfully","Group Name":"Group name","Group Name is required":"Please enter a group name",Create:W0,"Group updated":"Group updated successfully","Update Group":"Update group","Loading...":"Loading...",Update:q0,ParrotMate:X0,"Speak Different":"Speak differently","Not logged in":"You're not signed in","User Name":"Username",copy:Y0,"Network is slow, enable offline mode?":"Network is slow. Switch to Offline Mode?","Enable offline mode":"Turn on Offline Mode","PChip Reader":"PChip Reader",male:Z0,female:ev,"popular neutral":"Popular (Neutral)","Offline mode":"Offline Mode","Change nickname":"Change nickname","UI Language":"Interface Language",Word:tv,Date:"Date","My bookshelf":"My Bookshelf","Title too short":"Title is too short","Modification successful":"Changes saved successfully","No books in your shelf yet":"No books on your shelf yet","Tap the search icon above to browse books and add them to your shelf!":"Tap the search icon above to browse and add books to your shelf!","Read with experts to help you understand,":"Read with experts to help you understand.","Comprehensive training in English listening and reading.":"Comprehensive English listening and reading training.","Hi, {{nickName}}! Welcome!":"Hi, {{nickName}}! Welcome!","Browse library":"Browse the library","Add your own TXT/PDF":"Add your own TXT or PDF file","Already have an account?":"Already have an account?","Click here to login":"Click here to log in","We detected this is your first time using PChip Reader. Add some books!":"It looks like this is your first time using PChip Reader. Add some books to get started!","Upload Book":"Upload a Book","Click here to upload local EPUB/MOBI/PDF/TXT":"Click here to upload a local EPUB, MOBI, PDF, or TXT file","Only EPUB/MOBI/PDF/TXT is supported":"Only EPUB, MOBI, PDF, and TXT formats are supported.","Upload successful":"Upload completed successfully","Book upload failed":"Book upload failed. Please try again.","We only store your files locally!":"We only store your files locally.","New words":"New vocabulary","Total reading":"Total reading time","Today's reading":"Today's reading time","Login Success":"Login successful","please enter your phone number":"please enter your phone number","Please enter your phone number":"Please enter your phone number",Login:nv,"Terms&Conditions":"Terms & Conditions",and:av,"Privacy Policy":"Privacy Policy","Unregistered phone numbers will automatically create an account":"If your phone number isn't registered, an account will be created automatically.","Please enter the verification code":"Please enter the verification code.","Send verification code":"Send verification code",seconds:ov,"Send Code":"Send Code","Please enter the correct phone number":"Please enter a valid phone number.","Verification code sent":"Verification code sent","Add Profile":"Add a profile",Practitioner:iv,"I want to practice languages and chat with others":"I want to practice languages and chat with others.",Mate:rv,"I can guide language learning and provide companionship":"I can guide language learning and offer companionship.",Translation:sv,Interpretation:lv,"Key Vocabulary & Terms":"Key Vocabulary & Terms",Grammar:cv,"Unknown error":"An unknown error occurred. Please try again.",Language:uv,Skip:dv,Continue:hv,"Are you 18 or older?":"Are you 18 or older?",Yes:fv,No:pv,"Please select language what you want to learn":"Please choose the language you'd like to learn","Please enter your age":"Please enter your age",Age:mv,"Please select your gender":"Please select your gender",Female:gv,Male:yv,"Your {{langShort}} name":"Your name in {{langShort}}","Create your own name or choose from the recommendations":"Create your own name or choose from our suggestions","Enter your nickname here...":"Enter your nickname...","Learning Language":"Language you're learning",Finish:vv,"Nickname is required":"Please enter a nickname","Nickname must be at least 3 characters":"Nickname must be at least 3 characters long",Confirm:bv,"Account Phone":"Phone number",Gender:Pv,Education:wv,Job:Cv,Hobby:Av,"Select your role":"Choose your role","Please choose your identity":"Please select your profile type",English:Sv,Chinese:Tv,Spanish:kv,Korean:$v,French:Rv,Japanese:xv,German:Ev,Arabic:Mv,DM_ACL_REJECT:Lv,GROUP_ACL_REJECT:Nv,"Profile Step: Nickname":"Nickname","Profile Step: Learning Language":"Language you're learning","Profile Step: Mother Tongue":"Native language","By signing up, you agree with ":"By signing up, you agree to "},Iv="segundos",Uv="Tutor",Ov="Compañero",Dv="Inglés",Bv="Chino",Vv="Español",Gv="Coreano",jv="Francés",zv="Japonés",_v="Alemán",Hv="Árabe",Qv="Traducción",Kv="Interpretación",Jv="Gramática",Wv="Debes esperar la respuesta de la otra persona para continuar con el mensaje directo.",qv="Aún no estás en este grupo. Espera a que el propietario apruebe tu solicitud.",Xv="Chat",Yv="Contactos",Zv="Cerrar sesión",eb="Citar",tb="Ver",nb="Retirar",ab="Traducir",ob="Contraer",ib="Mensajes",rb="Estudiar",sb="Descubrir",lb="Perfil",cb="desarrollo",ub="Volver",db="Grupos",hb="Añadir",fb="Error",pb="Crear",mb="Actualizar",gb="ParrotMate",yb="Copiar",vb="Masculino",bb="Femenino",Pb="Palabra",wb="Iniciar sesión",Cb="y",Ab="Idioma",Sb="Omitir",Tb="Continuar",kb="Sí",$b="No",Rb="Edad",xb="Mujer",Eb="Hombre",Mb="Finalizar",Lb="Confirmar",Nb="Género",Fb="Formación",Ib="Ocupación",Ub="Afición",Ob={seconds:Iv,"Send Code":"Enviar código","Add Profile":"Añadir perfil",Practitioner:Uv,"I want to practice languages and chat with others":"Quiero practicar idiomas y conversar con otras personas",Mate:Ov,"I can guide language learning and provide companionship":"Puedo guiar el aprendizaje de idiomas y ofrecer compañía","Unknown error":"Error desconocido",English:Dv,Chinese:Bv,Spanish:Vv,Korean:Gv,French:jv,Japanese:zv,German:_v,Arabic:Hv,Translation:Qv,Interpretation:Kv,"Key Vocabulary & Terms":"Vocabulario y términos clave",Grammar:Jv,DM_ACL_REJECT:Wv,GROUP_ACL_REJECT:qv,"Tree Hole":"Rincón confidencial",Chat:Xv,Contacts:Yv,"Remove Contact":"Eliminar contacto","Exit Group":"Salir del grupo","Chat Settings":"Ajustes del chat","Awaiting friend confirmation":"Esperando confirmación de amistad","Revision failed":"Revisión fallida","Please use English":"Por favor, usa inglés","Speech recognition failed. Please try again.":"El reconocimiento de voz falló. Inténtalo de nuevo.","analyzing...":"Analizando...","Loading profiles...":"Cargando perfiles...","Add Friend":"Añadir amigo","Create Group":"Crear grupo",Logout:Zv,"Copied username to clipboard":"Nombre de usuario copiado al portapapeles","Switch Identity":"Cambiar identidad",Function:"Función",Quote:eb,"Instructions(Optional)":"Instrucciones (opcional)","joined the room":"se unió a la sala","left the room":"salió de la sala",View:tb,Recall:nb,"Hide Translation":"Ocultar traducción",Translate:ab,Collapse:ob,"Before you accept, she won’t know you've seen any messages.":"Antes de que aceptes, ella no sabrá que has visto ningún mensaje.","Allow {{name}} to send you messages and share your name and profile picture?":"¿Permitir que {{name}} te envíe mensajes y vea tu nombre y foto de perfil?",Message:ib,Study:rb,Discover:sb,Me:lb,"coming soon":"Próximamente","This feature is under":"Esta función está en",development:cb,Back:ub,"Search contacts or groups":"Buscar contactos o grupos",Groups:db,"No Results":"No hay resultados","Say Hi":"Di hola",Add:hb,"Find Friend":"Buscar amigo","Input Username":"Introduce el nombre de usuario","my account: ":"mi cuenta: ","Already Applied":"Solicitud ya enviada","User is blocked":"Usuario bloqueado",Failed:fb,"Please select at least one member":"Por favor, selecciona al menos un miembro","Group created":"Grupo creado","Group Name":"Nombre del grupo","Group Name is required":"El nombre del grupo es obligatorio","Loading...":"Cargando...",Create:pb,"Group updated":"Grupo actualizado","Update Group":"Actualizar grupo",Update:mb,"No Chats":"No hay chats",ParrotMate:gb,"Speak Different":"Habla distinto","Not logged in":"No has iniciado sesión","User Name":"Nombre de usuario",copy:yb,"Network is slow, enable offline mode?":"La conexión es lenta, ¿activar el modo sin conexión?","Enable offline mode":"Activar el modo sin conexión","PChip Reader":"PChip Reader",male:vb,female:bb,"popular neutral":"Popular (neutro)","Offline mode":"Modo sin conexión","Change nickname":"Cambiar apodo","UI Language":"Idioma de la interfaz",Word:Pb,Date:"Fecha","My bookshelf":"Mi estantería","Title too short":"Título demasiado corto","Modification successful":"Modificación realizada con éxito","No books in your shelf yet":"Aún no hay libros en tu estantería","Tap the search icon above to browse books and add them to your shelf!":"Pulsa el icono de búsqueda de arriba para explorar libros y añadirlos a tu estantería.","Read with experts to help you understand,":"Lee junto a expertos que te ayuden a comprender,","Comprehensive training in English listening and reading.":"Entrenamiento integral en comprensión auditiva y lectora en inglés.","Hi, {{nickName}}! Welcome!":"¡Hola, {{nickName}}! ¡Bienvenido!","Browse library":"Explorar la biblioteca","Add your own TXT/PDF":"Añade tus propios archivos TXT/PDF","Already have an account?":"¿Ya tienes una cuenta?","Click here to login":"Haz clic aquí para iniciar sesión","We detected this is your first time using PChip Reader. Add some books!":"Hemos detectado que es la primera vez que usas PChip Reader. ¡Añade algunos libros!","Upload Book":"Subir libro","Click here to upload local EPUB/MOBI/PDF/TXT":"Haz clic aquí para subir archivos locales EPUB/MOBI/PDF/TXT","Only EPUB/MOBI/PDF/TXT is supported":"Solo se admiten EPUB, MOBI, PDF y TXT","Upload successful":"Subida realizada con éxito","Book upload failed":"Error al subir el libro","We only store your files locally!":"¡Solo almacenamos tus archivos localmente!","New words":"Nuevas palabras","Total reading":"Lectura total","Today's reading":"Lectura de hoy","Please choose an image file":"Por favor, selecciona un archivo de imagen","Image sent":"Imagen enviada","Failed to upload image":"No se pudo subir la imagen","analyzing grammar structure":"analizando la estructura gramatical","understanding pronunciation":"analizando la pronunciación","optimizing and restructuring":"optimizando y reestructurando","My QR Code":"Mi código QR","Let friends scan to fill your username automatically":"Permite que tus amigos escaneen para rellenar tu nombre de usuario automáticamente","Unable to load image":"No se puede cargar la imagen","Loading image...":"Cargando imagen...","Shared image":"Imagen compartida","QR scanning is unavailable in this environment":"El escaneo de códigos QR no está disponible en este entorno","Camera access is not supported on this device":"El acceso a la cámara no es compatible con este dispositivo","Unable to access the camera":"No se puede acceder a la cámara","No QR code found in the selected image":"No se encontró ningún código QR en la imagen seleccionada","Unable to read QR code from the selected image":"No se pudo leer el código QR de la imagen seleccionada","Username captured from QR code":"Nombre de usuario obtenido del código QR","Initializing camera...":"Iniciando la cámara...","Scan QR Code":"Escanear código QR","Align the QR code within the frame to capture a username automatically.":"Alinea el código QR dentro del marco para capturar el nombre de usuario automáticamente.","Login Success":"Sesión iniciada","please enter your phone number":"por favor, introduce tu número de teléfono","Please enter your phone number":"Por favor, introduce tu número de teléfono",Login:wb,"Terms&Conditions":"Términos y condiciones",and:Cb,"Privacy Policy":"Política de privacidad","Unregistered phone numbers will automatically create an account":"Los números de teléfono no registrados crearán automáticamente una cuenta","Please enter the verification code":"Por favor, introduce el código de verificación","Send verification code":"Enviar código de verificación","Please enter the correct phone number":"Por favor, introduce un número de teléfono válido","Verification code sent":"Código de verificación enviado",Language:Ab,Skip:Sb,Continue:Tb,"Are you 18 or older?":"¿Tienes 18 años o más?",Yes:kb,No:$b,"Please select language what you want to learn":"Por favor, selecciona el idioma que quieres aprender","Please enter your age":"Por favor, indica tu edad",Age:Rb,"Please select your gender":"Selecciona tu género",Female:xb,Male:Eb,"Your {{langShort}} name":"Tu nombre en {{langShort}}","Create your own name or choose from the recommendations":"Crea tu propio nombre o elige una de las recomendaciones","Enter your nickname here...":"Introduce tu apodo aquí...","Learning Language":"Idioma que aprendes",Finish:Mb,"Nickname is required":"El apodo es obligatorio","Nickname must be at least 3 characters":"El apodo debe tener al menos 3 caracteres",Confirm:Lb,"Account Phone":"Teléfono de la cuenta",Gender:Nb,Education:Fb,Job:Ib,Hobby:Ub,"Select your role":"Selecciona tu rol","Please choose your identity":"Por favor, selecciona tu identidad","Profile Step: Nickname":"Apodo","Profile Step: Learning Language":"Idioma que aprendes","Profile Step: Mother Tongue":"Lengua materna","By signing up, you agree with ":"Al registrarte, aceptas "},Db="sekuntia",Bb="Ohjaaja",Vb="Kielikumppani",Gb="Englanti",jb="Kiina",zb="Espanja",_b="Korea",Hb="Ranska",Qb="Japani",Kb="Saksa",Jb="Arabia",Wb="Käännös",qb="Tulkinta",Xb="Kielioppi",Yb="Sinun täytyy odottaa toisen vastausta, jotta voit jatkaa yksityisviestikeskustelua.",Zb="Et ole vielä tässä ryhmässä. Odota, että ryhmän omistaja hyväksyy liittymispyyntösi.",e1="Keskustelu",t1="Yhteystiedot",n1="Kirjaudu ulos",a1="Lainaa",o1="Näytä",i1="Peruuta lähetys",r1="Käännä",s1="Sulje",l1="Viestit",c1="Opiskelu",u1="Tutustu",d1="Profiili",h1="kehitteillä",f1="Takaisin",p1="Ryhmät",m1="Lisää",g1="Epäonnistui",y1="Luo",v1="Päivitä",b1="ParrotMate",P1="kopioi",w1="mies",C1="nainen",A1="Sana",S1="Kirjaudu sisään",T1="ja",k1="Kieli",$1="Ohita",R1="Jatka",x1="Kyllä",E1="Ei",M1="Ikä",L1="Nainen",N1="Mies",F1="Valmis",I1="Vahvista",U1="Sukupuoli",O1="Koulutus",D1="Ammatti",B1="Harrastus",V1={seconds:Db,"Send Code":"Lähetä koodi","Add Profile":"Lisää profiili",Practitioner:Bb,"I want to practice languages and chat with others":"Haluan harjoitella kieliä ja keskustella muiden kanssa",Mate:Vb,"I can guide language learning and provide companionship":"Voin opastaa kielten oppimisessa ja tarjota seuraa","Unknown error":"Tuntematon virhe",English:Gb,Chinese:jb,Spanish:zb,Korean:_b,French:Hb,Japanese:Qb,German:Kb,Arabic:Jb,Translation:Wb,Interpretation:qb,"Key Vocabulary & Terms":"Keskeiset sanat ja termit",Grammar:Xb,DM_ACL_REJECT:Yb,GROUP_ACL_REJECT:Zb,"Tree Hole":"Puun kolo",Chat:e1,Contacts:t1,"Remove Contact":"Poista yhteystieto","Exit Group":"Poistu ryhmästä","Chat Settings":"Keskustelun asetukset","Awaiting friend confirmation":"Odotetaan ystävän vahvistusta","Revision failed":"Tarkistus epäonnistui","Please use English":"Käytäthän englantia","Speech recognition failed. Please try again.":"Puheentunnistus epäonnistui. Yritä uudelleen.","analyzing...":"analysoidaan...","Loading profiles...":"Ladataan profiileja...","Add Friend":"Lisää ystäväksi","Create Group":"Luo ryhmä",Logout:n1,"Copied username to clipboard":"Käyttäjänimi kopioitu leikepöydälle","Switch Identity":"Vaihda profiilia",Function:"Toiminto",Quote:a1,"Instructions(Optional)":"Ohjeet (valinnainen)","joined the room":"liittyi huoneeseen","left the room":"lähti huoneesta",View:o1,Recall:i1,"Hide Translation":"Piilota käännös",Translate:r1,Collapse:s1,"Before you accept, she won’t know you've seen any messages.":"Ennen kuin hyväksyt, hän ei tiedä, että olet nähnyt viestejä.","Allow {{name}} to send you messages and share your name and profile picture?":"Sallitaanko, että {{name}} lähettää sinulle viestejä ja näkee nimesi ja profiilikuvasi?",Message:l1,Study:c1,Discover:u1,Me:d1,"coming soon":"tulossa pian","This feature is under":"Tämä ominaisuus on",development:h1,Back:f1,"Search contacts or groups":"Etsi yhteystietoja tai ryhmiä",Groups:p1,"No Results":"Ei tuloksia","Say Hi":"Sano hei",Add:m1,"Find Friend":"Etsi ystävä","Input Username":"Kirjoita käyttäjänimi","my account: ":"Tilini: ","Already Applied":"Hakemus lähetetty","User is blocked":"Käyttäjä on estetty",Failed:g1,"Please select at least one member":"Valitse vähintään yksi jäsen","Group created":"Ryhmä luotu","Group Name":"Ryhmän nimi","Group Name is required":"Anna ryhmän nimi","Loading...":"Ladataan...",Create:y1,"Group updated":"Ryhmä päivitetty","Update Group":"Päivitä ryhmä",Update:v1,"No Chats":"Ei keskusteluja",ParrotMate:b1,"Speak Different":"Puhu eri tavalla","Not logged in":"Et ole kirjautunut sisään","User Name":"Käyttäjänimi",copy:P1,"Network is slow, enable offline mode?":"Verkkoyhteys on hidas. Ota offline-tila käyttöön?","Enable offline mode":"Ota offline-tila käyttöön","PChip Reader":"PChip Reader",male:w1,female:C1,"popular neutral":"Suosittu (neutraali)","Offline mode":"Offline-tila","Change nickname":"Vaihda nimimerkkiä","UI Language":"Käyttöliittymän kieli",Word:A1,Date:"Päivämäärä","My bookshelf":"Kirjahyllyni","Title too short":"Otsikko on liian lyhyt","Modification successful":"Muokkaus onnistui","No books in your shelf yet":"Hyllyssäsi ei ole vielä kirjoja","Tap the search icon above to browse books and add them to your shelf!":"Napauta yläreunan hakukuvaketta, niin voit selata kirjoja ja lisätä niitä hyllyysi!","Read with experts to help you understand,":"Lue asiantuntijoiden kanssa, jotka auttavat sinua ymmärtämään,","Comprehensive training in English listening and reading.":"Kattava englannin kuuntelu- ja lukuharjoittelu.","Hi, {{nickName}}! Welcome!":"Hei, {{nickName}}! Tervetuloa!","Browse library":"Selaa kirjastoa","Add your own TXT/PDF":"Lisää omat TXT-/PDF-tiedostot","Already have an account?":"Onko sinulla jo tili?","Click here to login":"Kirjaudu sisään tästä","We detected this is your first time using PChip Reader. Add some books!":"Huomasimme, että käytät PChip Readeriä ensimmäistä kertaa. Lisää muutama kirja!","Upload Book":"Lataa kirja","Click here to upload local EPUB/MOBI/PDF/TXT":"Klikkaa tästä ladataksesi paikallisen EPUB/MOBI/PDF/TXT-tiedoston","Only EPUB/MOBI/PDF/TXT is supported":"Tuetut tiedostomuodot: EPUB, MOBI, PDF, TXT","Upload successful":"Lataus onnistui","Book upload failed":"Kirjan lataus epäonnistui","We only store your files locally!":"Tallennamme tiedostosi vain paikallisesti!","New words":"Uudet sanat","Total reading":"Yhteensä luettu","Today's reading":"Tänään luettu","Please choose an image file":"Valitse kuvatiedosto","Image sent":"Kuva lähetetty","Failed to upload image":"Kuvan lähettäminen epäonnistui","analyzing grammar structure":"Kieliopin rakenteen analysointi","understanding pronunciation":"Ääntämisen ymmärtäminen","optimizing and restructuring":"Sisällön optimointi ja uudelleenjärjestely","My QR Code":"Oma QR-koodini","Let friends scan to fill your username automatically":"Anna ystävien skannata, niin käyttäjänimesi täytetään automaattisesti","Unable to load image":"Kuvaa ei voi ladata","Loading image...":"Ladataan kuvaa...","Shared image":"Jaettu kuva","QR scanning is unavailable in this environment":"QR-koodin skannaus ei ole käytettävissä tässä ympäristössä","Camera access is not supported on this device":"Kameran käyttö ei ole tuettu tässä laitteessa","Unable to access the camera":"Kameraan ei saada yhteyttä","No QR code found in the selected image":"Valitusta kuvasta ei löytynyt QR-koodia","Unable to read QR code from the selected image":"QR-koodia ei voitu lukea valitusta kuvasta","Username captured from QR code":"Käyttäjänimi luettu QR-koodista","Initializing camera...":"Alustetaan kameraa...","Scan QR Code":"Skannaa QR-koodi","Align the QR code within the frame to capture a username automatically.":"Kohdista QR-koodi kehyksen sisälle, niin käyttäjänimi luetaan automaattisesti.","Login Success":"Kirjautuminen onnistui","please enter your phone number":"anna puhelinnumerosi","Please enter your phone number":"Anna puhelinnumerosi",Login:S1,"Terms&Conditions":"Käyttöehdot",and:T1,"Privacy Policy":"Tietosuojakäytäntö","Unregistered phone numbers will automatically create an account":"Jos puhelinnumeroa ei ole rekisteröity, tilille luodaan automaattisesti.","Please enter the verification code":"Syötä vahvistuskoodi","Send verification code":"Lähetä vahvistuskoodi","Please enter the correct phone number":"Syötä oikea puhelinnumero","Verification code sent":"Vahvistuskoodi lähetetty",Language:k1,Skip:$1,Continue:R1,"Are you 18 or older?":"Oletko vähintään 18-vuotias?",Yes:x1,No:E1,"Please select language what you want to learn":"Valitse kieli, jota haluat oppia","Please enter your age":"Anna ikäsi",Age:M1,"Please select your gender":"Valitse sukupuolesi",Female:L1,Male:N1,"Your {{langShort}} name":"Nimesi {{langShort}}-kielellä","Create your own name or choose from the recommendations":"Luo oma nimesi tai valitse suosituksista","Enter your nickname here...":"Syötä nimimerkkisi tähän...","Learning Language":"Opiskeltava kieli",Finish:F1,"Nickname is required":"Nimimerkki on pakollinen","Nickname must be at least 3 characters":"Nimimerkin tulee olla vähintään 3 merkkiä",Confirm:I1,"Account Phone":"Tilin puhelinnumero",Gender:U1,Education:O1,Job:D1,Hobby:B1,"Select your role":"Valitse roolisi","Please choose your identity":"Valitse identiteettisi","Profile Step: Nickname":"Lempinimi","Profile Step: Learning Language":"Oppimiskieli","Profile Step: Mother Tongue":"Äidinkieli","By signing up, you agree with ":"Rekisteröitymällä hyväksyt "},G1="segundo",j1="Tutor",z1="Kaibigan",_1="Ingles",H1="Tsino",Q1="Espanyol",K1="Koreano",J1="Pranses",W1="Hapon",q1="Aleman",X1="Arabe",Y1="Pagsasalin",Z1="Paliwanag",eP="Balarila",tP="Kailangan mong maghintay ng sagot mula sa iba bago magpatuloy sa direktang mensahe.",nP="Hindi ka pa miyembro ng grupong ito. Maghintay muna hanggang aprubahan ng may-ari ang iyong kahilingan.",aP="Usapan",oP="Mga Kontak",iP="Lumabas",rP="Sipi",sP="Tingnan",lP="Bawiin",cP="Isalin",uP="Isara",dP="Mensahe",hP="Pag-aaral",fP="Tuklasin",pP="Ako",mP="pagpapaunlad",gP="Bumalik",yP="Mga grupo",vP="Idagdag",bP="Nabigo",PP="Lumikha",wP="I-update",CP="ParrotMate",AP="Kopyahin",SP="Lalaki",TP="Babae",kP="Salita",$P="Mag-login",RP="at",xP="Wika",EP="Laktawan",MP="Magpatuloy",LP="Oo",NP="Hindi",FP="Edad",IP="Babae",UP="Lalaki",OP="Tapusin",DP="Kumpirmahin",BP="Kasarian",VP="Edukasyon",GP="Trabaho",jP="Libangan",zP={seconds:G1,"Send Code":"Ipadala ang code","Add Profile":"Magdagdag ng Profile",Practitioner:j1,"I want to practice languages and chat with others":"Gusto kong magsanay ng mga wika at makipag-chat sa iba",Mate:z1,"I can guide language learning and provide companionship":"Maaari akong gumabay sa pag-aaral ng wika at maging kaagapay","Unknown error":"Hindi kilalang pagkakamali",English:_1,Chinese:H1,Spanish:Q1,Korean:K1,French:J1,Japanese:W1,German:q1,Arabic:X1,Translation:Y1,Interpretation:Z1,"Key Vocabulary & Terms":"Mga Pangunahing Bokabularyo at Termino",Grammar:eP,DM_ACL_REJECT:tP,GROUP_ACL_REJECT:nP,"Tree Hole":"Lungga ng Puno",Chat:aP,Contacts:oP,"Remove Contact":"Tanggalin ang kontak","Exit Group":"Iwanan ang grupo","Chat Settings":"Mga Setting ng Chat","Awaiting friend confirmation":"Naghihintay ng kumpirmasyon mula sa kaibigan","Revision failed":"Nabigong rebisyon","Please use English":"Mangyaring gumamit ng Ingles","Speech recognition failed. Please try again.":"Nabigo ang pagkilala sa pagsasalita. Pakisubukang muli.","analyzing...":"sinusuri...","Loading profiles...":"Naglo-load ng mga profile...","Add Friend":"Magdagdag ng kaibigan","Create Group":"Lumikha ng grupo",Logout:iP,"Copied username to clipboard":"Nakopya ang username sa clipboard","Switch Identity":"Palitan ang pagkakakilanlan",Function:"Pag-andar",Quote:rP,"Instructions(Optional)":"Mga Tagubilin (Opsyonal)","joined the room":"Sumali sa chat","left the room":"Umalis sa chat",View:sP,Recall:lP,"Hide Translation":"Itago ang pagsasalin",Translate:cP,Collapse:uP,"Before you accept, she won’t know you've seen any messages.":"Bago mo tanggapin, hindi niya malalaman na nakita mo ang mga mensahe.","Allow {{name}} to send you messages and share your name and profile picture?":"Payagan mo ba si {{name}} na magpadala sa iyo ng mga mensahe at makita ang iyong pangalan at larawan sa profile?",Message:dP,Study:hP,Discover:fP,Me:pP,"coming soon":"Malapit na","This feature is under":"Ang tampok na ito ay nasa ilalim ng",development:mP,Back:gP,"Search contacts or groups":"Maghanap ng mga contact o grupo",Groups:yP,"No Results":"Walang resulta","Say Hi":"Magkumusta",Add:vP,"Find Friend":"Maghanap ng kaibigan","Input Username":"Ilagay ang username","my account: ":"aking account: ","Already Applied":"Nakapag-apply na","User is blocked":"Na-block ang gumagamit",Failed:bP,"Please select at least one member":"Piliin ang hindi bababa sa isang miyembro","Group created":"Nalikha ang grupo","Group Name":"Pangalan ng grupo","Group Name is required":"Kinakailangan ang pangalan ng grupo","Loading...":"Naglo-load...",Create:PP,"Group updated":"Na-update ang grupo","Update Group":"I-update ang grupo",Update:wP,"No Chats":"Walang mga chat",ParrotMate:CP,"Speak Different":"Magsalita nang iba","Not logged in":"Hindi naka-log in","User Name":"Pangalan ng Gumagamit",copy:AP,"Network is slow, enable offline mode?":"Mabagal ang koneksyon. Gusto mo bang paganahin ang mode na offline?","Enable offline mode":"Paganahin ang mode na offline","PChip Reader":"PChip Reader",male:SP,female:TP,"popular neutral":"Sikat (neutral)","Offline mode":"Mode na offline","Change nickname":"Palitan ang palayaw","UI Language":"Wika ng interface",Word:kP,Date:"Petsa","My bookshelf":"Aking estante ng mga libro","Title too short":"Masyadong maikli ang pamagat","Modification successful":"Matagumpay ang pagbabago","No books in your shelf yet":"Wala pang libro sa iyong estante","Tap the search icon above to browse books and add them to your shelf!":"Pindutin ang icon ng paghahanap sa itaas para mag-browse ng mga libro at idagdag ang mga ito sa iyong estante!","Read with experts to help you understand,":"Magbasa kasama ang mga eksperto para mas maunawaan mo,","Comprehensive training in English listening and reading.":"Komprehensibong pagsasanay sa pakikinig at pagbasa ng Ingles.","Hi, {{nickName}}! Welcome!":"Kumusta, {{nickName}}! Maligayang pagdating!","Browse library":"Mag-browse ng librarya","Add your own TXT/PDF":"Magdagdag ng sarili mong TXT/PDF","Already have an account?":"May account ka na ba?","Click here to login":"Pindutin dito para mag-login","We detected this is your first time using PChip Reader. Add some books!":"Napansin namin na ito ang unang beses mong gamitin ang PChip Reader. Magdagdag ng ilang aklat!","Upload Book":"Mag-upload ng aklat","Click here to upload local EPUB/MOBI/PDF/TXT":"Pindutin dito para mag-upload ng lokal na EPUB/MOBI/PDF/TXT","Only EPUB/MOBI/PDF/TXT is supported":"Sinusuportahan lamang ang EPUB/MOBI/PDF/TXT","Upload successful":"Matagumpay na na-upload","Book upload failed":"Nabigo ang pag-upload ng aklat","We only store your files locally!":"Iniimbak lamang namin ang iyong mga file nang lokal!","New words":"Mga bagong salita","Total reading":"Kabuuang oras ng pagbabasa","Today's reading":"Pagbabasa ngayong araw","Please choose an image file":"Piliin ang file ng larawan","Image sent":"Naipadala ang larawan","Failed to upload image":"Nabigong i-upload ang larawan","analyzing grammar structure":"Sinusuri ang istruktura ng gramatika","understanding pronunciation":"Pinag-aaralan ang pagbigkas","optimizing and restructuring":"Pinapahusay at muling inaayos","My QR Code":"Aking QR Code","Let friends scan to fill your username automatically":"Hayaan ang mga kaibigan na i-scan para awtomatikong mapunan ang iyong username","Unable to load image":"Hindi mai-load ang larawan","Loading image...":"Ini-load ang larawan...","Shared image":"Naibahaging larawan","QR scanning is unavailable in this environment":"Hindi magagamit ang pag-scan ng QR sa kapaligirang ito","Camera access is not supported on this device":"Hindi sinusuportahan ng aparatong ito ang pag-access sa camera","Unable to access the camera":"Hindi ma-access ang camera","No QR code found in the selected image":"Walang QR code na nakita sa napiling larawan","Unable to read QR code from the selected image":"Hindi mabasa ang QR code mula sa napiling larawan","Username captured from QR code":"Nakuha ang username mula sa QR code","Initializing camera...":"Pinapagana ang camera...","Scan QR Code":"I-scan ang QR Code","Align the QR code within the frame to capture a username automatically.":"Itapat ang QR code sa loob ng frame para awtomatikong makuha ang username","Login Success":"Matagumpay na pag-login","please enter your phone number":"pakilagay ang iyong numero ng telepono","Please enter your phone number":"Ilagay ang iyong numero ng telepono",Login:$P,"Terms&Conditions":"Mga Tuntunin at Kundisyon",and:RP,"Privacy Policy":"Patakaran sa Pagkapribado","Unregistered phone numbers will automatically create an account":"Ang mga hindi nakarehistrong numero ng telepono ay awtomatikong lilikha ng account","Please enter the verification code":"Ilagay ang verification code","Send verification code":"Ipadala ang verification code","Please enter the correct phone number":"Pakilagay ang tamang numero ng telepono","Verification code sent":"Naipadala na ang verification code",Language:xP,Skip:EP,Continue:MP,"Are you 18 or older?":"Ikaw ba ay 18 taong gulang o mas matanda?",Yes:LP,No:NP,"Please select language what you want to learn":"Piliin ang wikang nais mong pag-aralan","Please enter your age":"Ilagay ang iyong edad",Age:FP,"Please select your gender":"Pumili ng iyong kasarian",Female:IP,Male:UP,"Your {{langShort}} name":"Ang iyong pangalan sa {{langShort}}","Create your own name or choose from the recommendations":"Gumawa ng sarili mong pangalan o pumili mula sa mga rekomendasyon","Enter your nickname here...":"Ilagay ang iyong palayaw dito...","Learning Language":"Wikang pinag-aaralan",Finish:OP,"Nickname is required":"Kailangan ang palayaw","Nickname must be at least 3 characters":"Dapat ang palayaw ay hindi bababa sa 3 na karakter",Confirm:DP,"Account Phone":"Telepono ng account",Gender:BP,Education:VP,Job:GP,Hobby:jP,"Select your role":"Pumili ng iyong papel","Please choose your identity":"Piliin ang iyong pagkakakilanlan","Profile Step: Nickname":"Palayaw","Profile Step: Learning Language":"Wikang Inaaral","Profile Step: Mother Tongue":"Unang Wika","By signing up, you agree with ":"Sa pag-sign up, sumasang-ayon ka sa "},_P="secondes",HP="Tuteur",QP="Partenaire",KP="Anglais",JP="Chinois",WP="Espagnol",qP="Coréen",XP="Français",YP="Japonais",ZP="Allemand",ew="Arabe",tw="Traduction",nw="Interprétation",aw="Grammaire",ow="Veuillez attendre la réponse des autres pour continuer le message privé.",iw="Vous ne faites pas encore partie de ce groupe. Veuillez attendre que le propriétaire du groupe approuve votre demande.",rw="Discussion",sw="Contacts",lw="Se déconnecter",cw="Citation",uw="Afficher",dw="Annuler l'envoi",hw="Traduire",fw="Réduire",pw="Messages",mw="Étudier",gw="Découvrir",yw="Profil",vw="développement",bw="Retour",Pw="Groupes",ww="Ajouter",Cw="Échec",Aw="Créer",Sw="Mettre à jour",Tw="ParrotMate",kw="Copier",$w="Homme",Rw="Femme",xw="Mot",Ew="Se connecter",Mw="et",Lw="Langue",Nw="Passer",Fw="Continuer",Iw="Oui",Uw="Non",Ow="Âge",Dw="Femme",Bw="Homme",Vw="Terminer",Gw="Confirmer",jw="Genre",zw="Niveau d'études",_w="Profession",Hw="Loisir",Qw={seconds:_P,"Send Code":"Envoyer le code","Add Profile":"Ajouter un profil",Practitioner:HP,"I want to practice languages and chat with others":"Je veux pratiquer des langues et discuter avec d'autres.",Mate:QP,"I can guide language learning and provide companionship":"Je peux accompagner votre apprentissage des langues et vous tenir compagnie.","Unknown error":"Erreur inconnue. Veuillez réessayer.",English:KP,Chinese:JP,Spanish:WP,Korean:qP,French:XP,Japanese:YP,German:ZP,Arabic:ew,Translation:tw,Interpretation:nw,"Key Vocabulary & Terms":"Vocabulaire et termes clés",Grammar:aw,DM_ACL_REJECT:ow,GROUP_ACL_REJECT:iw,"Tree Hole":"Arbre à secrets",Chat:rw,Contacts:sw,"Remove Contact":"Supprimer le contact","Exit Group":"Quitter le groupe","Chat Settings":"Paramètres de discussion","Awaiting friend confirmation":"En attente de confirmation de l'ami","Revision failed":"Échec de la révision","Please use English":"Veuillez utiliser l'anglais","Speech recognition failed. Please try again.":"La reconnaissance vocale a échoué. Veuillez réessayer.","analyzing...":"Analyse en cours...","Loading profiles...":"Chargement des profils...","Add Friend":"Ajouter un ami","Create Group":"Créer un groupe",Logout:lw,"Copied username to clipboard":"Nom d'utilisateur copié dans le presse-papiers","Switch Identity":"Changer d'identité",Function:"Fonction",Quote:cw,"Instructions(Optional)":"Instructions (facultatif)","joined the room":"a rejoint la salle","left the room":"a quitté la salle",View:uw,Recall:dw,"Hide Translation":"Masquer la traduction",Translate:hw,Collapse:fw,"Before you accept, she won’t know you've seen any messages.":"Avant d'accepter, elle ne saura pas que vous avez vu les messages.","Allow {{name}} to send you messages and share your name and profile picture?":"Autoriser {{name}} à vous envoyer des messages et à voir votre nom et votre photo de profil ?",Message:pw,Study:mw,Discover:gw,Me:yw,"coming soon":"Bientôt disponible","This feature is under":"Cette fonctionnalité est en ",development:vw,Back:bw,"Search contacts or groups":"Rechercher des contacts ou des groupes",Groups:Pw,"No Results":"Aucun résultat","Say Hi":"Dites bonjour",Add:ww,"Find Friend":"Rechercher un ami","Input Username":"Entrez le nom d'utilisateur","my account: ":"mon compte : ","Already Applied":"Demande déjà envoyée","User is blocked":"Utilisateur bloqué",Failed:Cw,"Please select at least one member":"Veuillez sélectionner au moins un membre","Group created":"Groupe créé","Group Name":"Nom du groupe","Group Name is required":"Le nom du groupe est requis","Loading...":"Chargement...",Create:Aw,"Group updated":"Groupe mis à jour","Update Group":"Mettre à jour le groupe",Update:Sw,"No Chats":"Aucune conversation",ParrotMate:Tw,"Speak Different":"Parlez autrement","Not logged in":"Vous n'êtes pas connecté","User Name":"Nom d'utilisateur",copy:kw,"Network is slow, enable offline mode?":"La connexion est lente. Activer le mode hors ligne ?","Enable offline mode":"Activer le mode hors ligne","PChip Reader":"PChip Reader",male:$w,female:Rw,"popular neutral":"Neutre (populaire)","Offline mode":"Mode hors ligne","Change nickname":"Modifier le pseudo","UI Language":"Langue de l'interface",Word:xw,Date:"Date","My bookshelf":"Ma bibliothèque","Title too short":"Titre trop court","Modification successful":"Modification réussie","No books in your shelf yet":"Il n'y a encore aucun livre dans votre bibliothèque.","Tap the search icon above to browse books and add them to your shelf!":"Appuyez sur l'icône de recherche ci-dessus pour parcourir les livres et les ajouter à votre bibliothèque !","Read with experts to help you understand,":"Lisez avec des experts pour mieux comprendre,","Comprehensive training in English listening and reading.":"Entraînement complet à l'écoute et à la lecture en anglais.","Hi, {{nickName}}! Welcome!":"Bonjour, {{nickName}} ! Bienvenue !","Browse library":"Explorer la bibliothèque","Add your own TXT/PDF":"Ajouter vos propres fichiers TXT/PDF","Already have an account?":"Vous avez déjà un compte ?","Click here to login":"Cliquez ici pour vous connecter","We detected this is your first time using PChip Reader. Add some books!":"Nous avons détecté que c'est la première fois que vous utilisez PChip Reader. Ajoutez quelques livres !","Upload Book":"Importer un livre","Click here to upload local EPUB/MOBI/PDF/TXT":"Cliquez ici pour importer un fichier EPUB/MOBI/PDF/TXT depuis votre appareil","Only EPUB/MOBI/PDF/TXT is supported":"Seuls les formats EPUB/MOBI/PDF/TXT sont pris en charge","Upload successful":"Importation réussie","Book upload failed":"Échec de l'importation du livre","We only store your files locally!":"Nous stockons vos fichiers uniquement sur votre appareil !","New words":"Nouveaux mots","Total reading":"Temps de lecture total","Today's reading":"Temps de lecture aujourd'hui","Please choose an image file":"Veuillez sélectionner un fichier image","Image sent":"Image envoyée","Failed to upload image":"Échec du téléversement de l'image","analyzing grammar structure":"Analyse de la structure grammaticale","understanding pronunciation":"Analyse de la prononciation","optimizing and restructuring":"Optimisation et restructuration","My QR Code":"Mon code QR","Let friends scan to fill your username automatically":"Permettez à vos amis de scanner ce code pour remplir automatiquement votre nom d'utilisateur","Unable to load image":"Impossible de charger l'image","Loading image...":"Chargement de l'image...","Shared image":"Image partagée","QR scanning is unavailable in this environment":"La lecture des codes QR n'est pas disponible dans cet environnement","Camera access is not supported on this device":"L'accès à la caméra n'est pas pris en charge sur cet appareil","Unable to access the camera":"Impossible d'accéder à la caméra","No QR code found in the selected image":"Aucun code QR trouvé dans l'image sélectionnée","Unable to read QR code from the selected image":"Impossible de lire le code QR dans l'image sélectionnée","Username captured from QR code":"Nom d'utilisateur récupéré depuis le code QR","Initializing camera...":"Initialisation de la caméra...","Scan QR Code":"Scanner le code QR","Align the QR code within the frame to capture a username automatically.":"Alignez le code QR dans le cadre pour remplir automatiquement le nom d'utilisateur.","Login Success":"Connexion réussie","please enter your phone number":"veuillez saisir votre numéro de téléphone","Please enter your phone number":"Veuillez saisir votre numéro de téléphone",Login:Ew,"Terms&Conditions":"Conditions d'utilisation",and:Mw,"Privacy Policy":"Politique de confidentialité","Unregistered phone numbers will automatically create an account":"Tout numéro de téléphone non enregistré entraînera la création automatique d'un compte.","Please enter the verification code":"Veuillez saisir le code de vérification","Send verification code":"Envoyer le code de vérification","Please enter the correct phone number":"Veuillez saisir un numéro de téléphone valide","Verification code sent":"Code de vérification envoyé",Language:Lw,Skip:Nw,Continue:Fw,"Are you 18 or older?":"Avez-vous 18 ans ou plus ?",Yes:Iw,No:Uw,"Please select language what you want to learn":"Veuillez sélectionner la langue que vous souhaitez apprendre","Please enter your age":"Veuillez saisir votre âge",Age:Ow,"Please select your gender":"Veuillez sélectionner votre genre",Female:Dw,Male:Bw,"Your {{langShort}} name":"Votre nom en {{langShort}}","Create your own name or choose from the recommendations":"Créez votre propre nom ou choisissez parmi les suggestions","Enter your nickname here...":"Entrez votre pseudo ici...","Learning Language":"Langue étudiée",Finish:Vw,"Nickname is required":"Le pseudo est obligatoire","Nickname must be at least 3 characters":"Le pseudo doit contenir au moins 3 caractères",Confirm:Gw,"Account Phone":"Téléphone du compte",Gender:jw,Education:zw,Job:_w,Hobby:Hw,"Select your role":"Sélectionnez votre rôle","Please choose your identity":"Veuillez choisir votre identité","Profile Step: Nickname":"Votre pseudo","Profile Step: Learning Language":"Langue que vous apprenez","Profile Step: Mother Tongue":"Votre langue maternelle","By signing up, you agree with ":"En vous inscrivant, vous acceptez "},Kw="सेकंड",Jw="अभ्यासकर्ता",Ww="साथी",qw="अंग्रेज़ी",Xw="चीनी",Yw="स्पेनिश",Zw="कोरियाई",eC="फ्रेंच",tC="जापानी",nC="जर्मन",aC="अरबी",oC="अनुवाद",iC="व्याख्या",rC="व्याकरण",sC="डायरेक्ट मैसेज (DM) जारी रखने के लिए कृपया अन्य लोगों के उत्तर का इंतजार करें।",lC="आप अभी इस समूह का हिस्सा नहीं हैं। कृपया समूह के मालिक द्वारा आपके अनुरोध की स्वीकृति होने तक प्रतीक्षा करें।",cC="चैट",uC="संपर्क",dC="लॉग आउट",hC="उद्धरण",fC="देखें",pC="वापस लें",mC="अनुवाद करें",gC="समेटें",yC="संदेश",vC="पढ़ाई",bC="खोजें",PC="मैं",wC="विकास के अधीन है",CC="वापस",AC="समूह",SC="जोड़ें",TC="असफल",kC="बनाएं",$C="अपडेट करें",RC="ParrotMate",xC="कॉपी करें",EC="पुरुष",MC="महिला",LC="शब्द",NC="लॉग इन",FC="और",IC="भाषा",UC="छोड़ें",OC="जारी रखें",DC="हाँ",BC="नहीं",VC="उम्र",GC="महिला",jC="पुरुष",zC="समाप्त करें",_C="पुष्टि करें",HC="लिंग",QC="शिक्षा",KC="पेशा",JC="शौक",WC={seconds:Kw,"Send Code":"कोड भेजें","Add Profile":"प्रोफ़ाइल जोड़ें",Practitioner:Jw,"I want to practice languages and chat with others":"मैं भाषाओं का अभ्यास करना और दूसरों के साथ चैट करना चाहता/चाहती हूँ",Mate:Ww,"I can guide language learning and provide companionship":"मैं भाषा सीखने में मार्गदर्शन कर सकता/सकती हूँ और साथी बनकर साथ दे सकता/दे सकती हूँ","Unknown error":"अज्ञात त्रुटि",English:qw,Chinese:Xw,Spanish:Yw,Korean:Zw,French:eC,Japanese:tC,German:nC,Arabic:aC,Translation:oC,Interpretation:iC,"Key Vocabulary & Terms":"प्रमुख शब्दावली और महत्वपूर्ण शब्द",Grammar:rC,DM_ACL_REJECT:sC,GROUP_ACL_REJECT:lC,"Tree Hole":"ट्री होल",Chat:cC,Contacts:uC,"Remove Contact":"संपर्क हटाएं","Exit Group":"समूह छोड़ें","Chat Settings":"चैट सेटिंग्स","Awaiting friend confirmation":"मित्र की पुष्टि की प्रतीक्षा","Revision failed":"पुनरीक्षण विफल हुआ","Please use English":"कृपया अंग्रेज़ी का उपयोग करें","Speech recognition failed. Please try again.":"वॉइस पहचान विफल हुई। कृपया पुनः प्रयास करें।","analyzing...":"विश्लेषण कर रहा है...","Loading profiles...":"प्रोफ़ाइल लोड हो रहे हैं...","Add Friend":"मित्र जोड़ें","Create Group":"समूह बनाएं",Logout:dC,"Copied username to clipboard":"यूज़रनेम क्लिपबोर्ड में कॉपी कर दिया गया","Switch Identity":"पहचान बदलें",Function:"फ़ंक्शन",Quote:hC,"Instructions(Optional)":"निर्देश (वैकल्पिक)","joined the room":"कमरे में शामिल हो गए","left the room":"कमरा छोड़ गए",View:fC,Recall:pC,"Hide Translation":"अनुवाद छिपाएँ",Translate:mC,Collapse:gC,"Before you accept, she won’t know you've seen any messages.":"जब तक आप स्वीकार नहीं करते, वह यह नहीं जान पाएगी कि आपने कोई संदेश देखा है।","Allow {{name}} to send you messages and share your name and profile picture?":"क्या आप {{name}} को आपको संदेश भेजने और आपका नाम व प्रोफ़ाइल तस्वीर साझा करने की अनुमति देना चाहेंगे?",Message:yC,Study:vC,Discover:bC,Me:PC,"coming soon":"जल्द आ रहा है","This feature is under":"यह सुविधा",development:wC,Back:CC,"Search contacts or groups":"संपर्क या समूह खोजें",Groups:AC,"No Results":"कोई परिणाम नहीं मिला","Say Hi":"नमस्ते कहें",Add:SC,"Find Friend":"दोस्त खोजें","Input Username":"यूज़रनेम लिखें","my account: ":"मेरा खाता: ","Already Applied":"पहले ही अनुरोध भेजा जा चुका है","User is blocked":"उपयोगकर्ता अवरुद्ध है",Failed:TC,"Please select at least one member":"कृपया कम से कम एक सदस्य चुनें","Group created":"समूह बनाया गया","Group Name":"समूह का नाम","Group Name is required":"समूह का नाम आवश्यक है","Loading...":"लोड हो रहा है...",Create:kC,"Group updated":"समूह अपडेट किया गया","Update Group":"समूह अपडेट करें",Update:$C,"No Chats":"कोई चैट नहीं",ParrotMate:RC,"Speak Different":"अलग बोलें","Not logged in":"लॉग इन नहीं किया गया","User Name":"उपयोगकर्ता नाम",copy:xC,"Network is slow, enable offline mode?":"नेटवर्क धीमा है। क्या आप ऑफ़लाइन मोड चालू करना चाहेंगे?","Enable offline mode":"ऑफ़लाइन मोड चालू करें","PChip Reader":"PChip Reader",male:EC,female:MC,"popular neutral":"लोकप्रिय (तटस्थ)","Offline mode":"ऑफ़लाइन मोड","Change nickname":"उपनाम बदलें","UI Language":"इंटरफ़ेस भाषा",Word:LC,Date:"तारीख","My bookshelf":"मेरी किताबें","Title too short":"शीर्षक बहुत छोटा है","Modification successful":"सफलतापूर्वक संशोधित किया गया","No books in your shelf yet":"आपकी शेल्फ़ में अभी कोई किताबें नहीं हैं","Tap the search icon above to browse books and add them to your shelf!":"ऊपर के खोज आइकन पर टैप करके किताबें खोजें और उन्हें अपनी शेल्फ़ में जोड़ें!","Read with experts to help you understand,":"समझने में मदद के लिए विशेषज्ञों के साथ पढ़ें,","Comprehensive training in English listening and reading.":"अंग्रेज़ी सुनने और पढ़ने का व्यापक प्रशिक्षण।","Hi, {{nickName}}! Welcome!":"नमस्ते, {{nickName}}! आपका स्वागत है!","Browse library":"लाइब्रेरी ब्राउज़ करें","Add your own TXT/PDF":"अपना TXT/PDF जोड़ें","Already have an account?":"क्या आपके पास पहले से खाता है?","Click here to login":"लॉगिन करने के लिए यहाँ क्लिक करें","We detected this is your first time using PChip Reader. Add some books!":"हमने देखा कि आप पहली बार PChip Reader का उपयोग कर रहे हैं। कुछ किताबें जोड़ें!","Upload Book":"पुस्तक अपलोड करें","Click here to upload local EPUB/MOBI/PDF/TXT":"स्थानीय EPUB/MOBI/PDF/TXT अपलोड करने के लिए यहाँ क्लिक करें","Only EPUB/MOBI/PDF/TXT is supported":"केवल EPUB/MOBI/PDF/TXT फ़ाइलें समर्थित हैं","Upload successful":"अपलोड सफल","Book upload failed":"पुस्तक अपलोड विफल हो गई","We only store your files locally!":"हम आपकी फ़ाइलें केवल स्थानीय रूप से संग्रहीत करते हैं!","New words":"नए शब्द","Total reading":"कुल पढ़ाई","Today's reading":"आज की पढ़ाई","Please choose an image file":"कृपया एक छवि फ़ाइल चुनें","Image sent":"छवि भेज दी गई","Failed to upload image":"छवि अपलोड नहीं हो सकी","analyzing grammar structure":"वाक्य रचना का विश्लेषण किया जा रहा है","understanding pronunciation":"उच्चारण समझा जा रहा है","optimizing and restructuring":"अनुकूलन और पुनर्संरचना","My QR Code":"मेरा QR कोड","Let friends scan to fill your username automatically":"दोस्त स्कैन करके आपका उपयोगकर्ता नाम अपने आप भर सकें","Unable to load image":"छवि लोड नहीं हो सकी","Loading image...":"छवि लोड हो रही है...","Shared image":"साझा की गई छवि","QR scanning is unavailable in this environment":"इस वातावरण में QR स्कैनिंग उपलब्ध नहीं है","Camera access is not supported on this device":"इस डिवाइस पर कैमरे तक पहुँच समर्थित नहीं है","Unable to access the camera":"कैमरे तक पहुँच संभव नहीं है","No QR code found in the selected image":"चयनित छवि में कोई QR कोड नहीं मिला","Unable to read QR code from the selected image":"चयनित छवि से QR कोड पढ़ा नहीं जा सका","Username captured from QR code":"QR कोड से उपयोगकर्ता नाम प्राप्त हुआ","Initializing camera...":"कैमरा प्रारंभ किया जा रहा है...","Scan QR Code":"QR कोड स्कैन करें","Align the QR code within the frame to capture a username automatically.":"उपयोगकर्ता नाम अपने आप भरने के लिए QR कोड को फ्रेम के भीतर रखें।","Login Success":"लॉग इन सफल","please enter your phone number":"कृपया अपना फोन नंबर दर्ज करें","Please enter your phone number":"कृपया अपना फोन नंबर दर्ज करें",Login:NC,"Terms&Conditions":"नियम और शर्तें",and:FC,"Privacy Policy":"गोपनीयता नीति","Unregistered phone numbers will automatically create an account":"यदि फोन नंबर पंजीकृत नहीं है तो उसके लिए स्वचालित रूप से एक खाता बना दिया जाएगा","Please enter the verification code":"कृपया सत्यापन कोड दर्ज करें","Send verification code":"सत्यापन कोड भेजें","Please enter the correct phone number":"कृपया सही फोन नंबर दर्ज करें","Verification code sent":"सत्यापन कोड भेज दिया गया",Language:IC,Skip:UC,Continue:OC,"Are you 18 or older?":"क्या आपकी उम्र 18 वर्ष या अधिक है?",Yes:DC,No:BC,"Please select language what you want to learn":"कृपया वह भाषा चुनें जिसे आप सीखना चाहते हैं","Please enter your age":"कृपया अपनी उम्र दर्ज करें",Age:VC,"Please select your gender":"कृपया अपना लिंग चुनें",Female:GC,Male:jC,"Your {{langShort}} name":"आपका {{langShort}} नाम","Create your own name or choose from the recommendations":"अपना नाम बनाएं या सुझाए गए विकल्पों में से चुनें","Enter your nickname here...":"यहाँ अपना उपनाम दर्ज करें...","Learning Language":"सीखने की भाषा",Finish:zC,"Nickname is required":"उपनाम आवश्यक है","Nickname must be at least 3 characters":"उपनाम कम से कम 3 वर्ण का होना चाहिए",Confirm:_C,"Account Phone":"खाता फ़ोन",Gender:HC,Education:QC,Job:KC,Hobby:JC,"Select your role":"अपनी भूमिका चुनें","Please choose your identity":"कृपया अपनी पहचान चुनें","Profile Step: Nickname":"उपनाम","Profile Step: Learning Language":"सीखने की भाषा","Profile Step: Mother Tongue":"मातृभाषा","By signing up, you agree with ":"साइन अप करने पर आप निम्न से सहमत होते हैं "},qC="秒",XC="メンター",YC="学習パートナー",ZC="英語",eA="中国語",tA="スペイン語",nA="韓国語",aA="フランス語",oA="日本語",iA="ドイツ語",rA="アラビア語",sA="翻訳",lA="解釈",cA="文法",uA="他のユーザーの返信を待ってからでないと、ダイレクトメッセージを続けられません。しばらくお待ちください。",dA="まだこのグループのメンバーではありません。オーナーが参加申請を承認するまでお待ちください。",hA="チャット",fA="連絡先",pA="ログアウト",mA="引用",gA="表示",yA="取り消す",vA="翻訳する",bA="折りたたむ",PA="メッセージ",wA="学習",CA="発見",AA="プロフィール",SA="開発中です",TA="戻る",kA="グループ",$A="追加",RA="失敗しました",xA="作成",EA="更新",MA="ParrotMate",LA="コピー",NA="男性",FA="女性",IA="単語",UA="ログイン",OA="および",DA="言語",BA="スキップ",VA="続ける",GA="はい",jA="いいえ",zA="年齢",_A="女性",HA="男性",QA="完了",KA="確認",JA="性別",WA="学歴",qA="職業",XA="趣味",YA={seconds:qC,"Send Code":"コードを送信","Add Profile":"プロフィールを追加",Practitioner:XC,"I want to practice languages and chat with others":"言語を練習して、他の人とチャットしたいです",Mate:YC,"I can guide language learning and provide companionship":"言語学習をガイドし、寄り添ってサポートします","Unknown error":"不明なエラーが発生しました。しばらくしてからもう一度お試しください。",English:ZC,Chinese:eA,Spanish:tA,Korean:nA,French:aA,Japanese:oA,German:iA,Arabic:rA,Translation:sA,Interpretation:lA,"Key Vocabulary & Terms":"重要語彙・用語",Grammar:cA,DM_ACL_REJECT:uA,GROUP_ACL_REJECT:dA,"Tree Hole":"ツリーホール",Chat:hA,Contacts:fA,"Remove Contact":"連絡先を削除","Exit Group":"グループを退会","Chat Settings":"チャット設定","Awaiting friend confirmation":"フレンド承認待ち","Revision failed":"修正に失敗しました","Please use English":"英語で入力してください","Speech recognition failed. Please try again.":"音声認識に失敗しました。もう一度お試しください。","analyzing...":"解析中...","Loading profiles...":"プロフィールを読み込み中...","Add Friend":"友達を追加","Create Group":"グループを作成",Logout:pA,"Copied username to clipboard":"ユーザー名をクリップボードにコピーしました","Switch Identity":"アカウントを切り替え",Function:"機能",Quote:mA,"Instructions(Optional)":"指示(任意)","joined the room":"ルームに参加しました","left the room":"ルームを退出しました",View:gA,Recall:yA,"Hide Translation":"翻訳を非表示",Translate:vA,Collapse:bA,"Before you accept, she won’t know you've seen any messages.":"承認するまでは、相手にメッセージを既読したことは伝わりません。","Allow {{name}} to send you messages and share your name and profile picture?":"{{name}} があなたにメッセージを送信し、あなたの名前とプロフィール写真を共有できるようにしますか?",Message:PA,Study:wA,Discover:CA,Me:AA,"coming soon":"近日公開","This feature is under":"この機能は",development:SA,Back:TA,"Search contacts or groups":"連絡先またはグループを検索",Groups:kA,"No Results":"結果が見つかりません","Say Hi":"挨拶を送る",Add:$A,"Find Friend":"友達を探す","Input Username":"ユーザー名を入力","my account: ":"マイアカウント: ","Already Applied":"既に申請済み","User is blocked":"このユーザーはブロックされています",Failed:RA,"Please select at least one member":"少なくとも1名のメンバーを選択してください","Group created":"グループを作成しました","Group Name":"グループ名","Group Name is required":"グループ名は必須です","Loading...":"読み込み中...",Create:xA,"Group updated":"グループを更新しました","Update Group":"グループを更新",Update:EA,"No Chats":"チャットがありません",ParrotMate:MA,"Speak Different":"話し方を変えよう","Not logged in":"ログインしていません","User Name":"ユーザー名",copy:LA,"Network is slow, enable offline mode?":"ネットワークが遅いようです。オフラインモードを有効にしますか?","Enable offline mode":"オフラインモードを有効にする","PChip Reader":"PChip Reader",male:NA,female:FA,"popular neutral":"人気(中性)","Offline mode":"オフラインモード","Change nickname":"ニックネームを変更する","UI Language":"UI言語",Word:IA,Date:"日付","My bookshelf":"マイ本棚","Title too short":"タイトルが短すぎます","Modification successful":"変更が完了しました","No books in your shelf yet":"本棚にまだ本がありません","Tap the search icon above to browse books and add them to your shelf!":"上の検索アイコンをタップして本を探し、本棚に追加しましょう!","Read with experts to help you understand,":"専門家と一緒に読み、理解を深めましょう、","Comprehensive training in English listening and reading.":"英語のリスニングとリーディングを総合的に学習できます。","Hi, {{nickName}}! Welcome!":"こんにちは、{{nickName}}さん!ようこそ!","Browse library":"ライブラリを閲覧する","Add your own TXT/PDF":"TXT/PDFファイルを追加する","Already have an account?":"既にアカウントをお持ちですか?","Click here to login":"ログインはこちら","We detected this is your first time using PChip Reader. Add some books!":"PChip Readerは初めてのようです。本を追加してみましょう!","Upload Book":"書籍をアップロード","Click here to upload local EPUB/MOBI/PDF/TXT":"ここをクリックしてローカルのEPUB/MOBI/PDF/TXTをアップロード","Only EPUB/MOBI/PDF/TXT is supported":"対応形式はEPUB/MOBI/PDF/TXTのみです","Upload successful":"アップロードが成功しました","Book upload failed":"書籍のアップロードに失敗しました","We only store your files locally!":"ファイルはローカルにのみ保存されます!","New words":"新しい単語","Total reading":"累計読書時間","Today's reading":"今日の読書時間","Please choose an image file":"画像ファイルを選択してください","Image sent":"画像を送信しました","Failed to upload image":"画像のアップロードに失敗しました","analyzing grammar structure":"文法構造を解析しています","understanding pronunciation":"発音を確認しています","optimizing and restructuring":"最適化と再構成を行っています","My QR Code":"自分のQRコード","Let friends scan to fill your username automatically":"友だちにスキャンしてもらうと、ユーザー名が自動で入力されます","Unable to load image":"画像を読み込めません","Loading image...":"画像を読み込み中...","Shared image":"共有された画像","QR scanning is unavailable in this environment":"この環境ではQRスキャンを利用できません","Camera access is not supported on this device":"このデバイスではカメラアクセスがサポートされていません","Unable to access the camera":"カメラにアクセスできません","No QR code found in the selected image":"選択した画像にQRコードが見つかりませんでした","Unable to read QR code from the selected image":"選択した画像のQRコードを読み取れませんでした","Username captured from QR code":"QRコードからユーザー名を取得しました","Initializing camera...":"カメラを初期化しています...","Scan QR Code":"QRコードをスキャン","Align the QR code within the frame to capture a username automatically.":"フレーム内にQRコードを合わせると、ユーザー名を自動で取得できます。","Login Success":"ログインに成功しました","please enter your phone number":"電話番号を入力してください","Please enter your phone number":"電話番号を入力してください",Login:UA,"Terms&Conditions":"利用規約",and:OA,"Privacy Policy":"プライバシーポリシー","Unregistered phone numbers will automatically create an account":"未登録の電話番号は自動的にアカウントが作成されます","Please enter the verification code":"確認コードを入力してください","Send verification code":"確認コードを送信","Please enter the correct phone number":"正しい電話番号を入力してください","Verification code sent":"確認コードを送信しました",Language:DA,Skip:BA,Continue:VA,"Are you 18 or older?":"18歳以上ですか?",Yes:GA,No:jA,"Please select language what you want to learn":"学びたい言語を選択してください","Please enter your age":"年齢を入力してください",Age:zA,"Please select your gender":"性別を選択してください",Female:_A,Male:HA,"Your {{langShort}} name":"あなたの{{langShort}}での名前","Create your own name or choose from the recommendations":"自分で名前を作成するか、おすすめから選んでください","Enter your nickname here...":"ここにニックネームを入力してください...","Learning Language":"学習言語",Finish:QA,"Nickname is required":"ニックネームは必須です","Nickname must be at least 3 characters":"ニックネームは3文字以上で入力してください",Confirm:KA,"Account Phone":"アカウントの電話番号",Gender:JA,Education:WA,Job:qA,Hobby:XA,"Select your role":"役割を選択してください","Please choose your identity":"ご自身の立場を選択してください","Profile Step: Nickname":"ニックネーム","Profile Step: Learning Language":"学習中の言語","Profile Step: Mother Tongue":"母語","By signing up, you agree with ":"登録すると、以下に同意したことになります:"},ZA="초",eS="튜터",tS="언어 파트너",nS="영어",aS="중국어",oS="스페인어",iS="한국어",rS="프랑스어",sS="일본어",lS="독일어",cS="아랍어",uS="번역",dS="해석",hS="문법",fS="다른 사용자의 응답을 기다려야 다이렉트 메시지를 계속 진행할 수 있습니다.",pS="아직 이 그룹의 멤버가 아닙니다. 소유자가 요청을 승인할 때까지 기다려주세요.",mS="채팅",gS="연락처",yS="로그아웃",vS="인용",bS="보기",PS="메시지 회수",wS="번역",CS="접기",AS="메시지",SS="학습",TS="둘러보기",kS="내 프로필",$S="개발 중입니다",RS="뒤로",xS="그룹",ES="추가하기",MS="실패했습니다",LS="생성하기",NS="수정",FS="ParrotMate",IS="복사",US="남성",OS="여성",DS="단어",BS="로그인",VS="및",GS="언어",jS="건너뛰기",zS="계속하기",_S="예",HS="아니요",QS="나이",KS="여성",JS="남성",WS="완료",qS="확인",XS="성별",YS="학력",ZS="직업",eT="취미",tT={seconds:ZA,"Send Code":"코드 보내기","Add Profile":"프로필 추가",Practitioner:eS,"I want to practice languages and chat with others":"언어를 연습하고 다른 사람들과 대화하고 싶어요",Mate:tS,"I can guide language learning and provide companionship":"언어 학습을 도와드리고 함께해 드릴 수 있어요","Unknown error":"알 수 없는 오류가 발생했습니다.",English:nS,Chinese:aS,Spanish:oS,Korean:iS,French:rS,Japanese:sS,German:lS,Arabic:cS,Translation:uS,Interpretation:dS,"Key Vocabulary & Terms":"핵심 어휘 및 용어",Grammar:hS,DM_ACL_REJECT:fS,GROUP_ACL_REJECT:pS,"Tree Hole":"트리홀",Chat:mS,Contacts:gS,"Remove Contact":"연락처 삭제","Exit Group":"그룹 나가기","Chat Settings":"채팅 설정","Awaiting friend confirmation":"친구 승인 대기 중","Revision failed":"수정에 실패했습니다","Please use English":"영어를 사용해 주세요","Speech recognition failed. Please try again.":"음성 인식에 실패했습니다. 다시 시도해 주세요.","analyzing...":"분석 중...","Loading profiles...":"프로필을 불러오는 중...","Add Friend":"친구 추가","Create Group":"그룹 만들기",Logout:yS,"Copied username to clipboard":"사용자 이름이 클립보드에 복사되었습니다","Switch Identity":"계정 전환",Function:"기능",Quote:vS,"Instructions(Optional)":"지침(선택 사항)","joined the room":"채팅방에 입장했습니다","left the room":"채팅방을 나갔습니다",View:bS,Recall:PS,"Hide Translation":"번역 숨기기",Translate:wS,Collapse:CS,"Before you accept, she won’t know you've seen any messages.":"수락하기 전에는 상대방이 당신이 메시지를 확인했는지 알 수 없습니다.","Allow {{name}} to send you messages and share your name and profile picture?":"{{name}}님이 메시지를 보내고 귀하의 이름과 프로필 사진을 공유하도록 허용하시겠어요?",Message:AS,Study:SS,Discover:TS,Me:kS,"coming soon":"곧 제공됩니다","This feature is under":"이 기능은",development:$S,Back:RS,"Search contacts or groups":"연락처 또는 그룹 검색",Groups:xS,"No Results":"결과가 없습니다","Say Hi":"인사하기",Add:ES,"Find Friend":"친구 찾기","Input Username":"사용자 이름을 입력하세요","my account: ":"내 계정: ","Already Applied":"이미 요청했습니다","User is blocked":"해당 사용자가 차단되어 있습니다",Failed:MS,"Please select at least one member":"최소 한 명 이상의 멤버를 선택해주세요","Group created":"그룹이 생성되었습니다","Group Name":"그룹 이름","Group Name is required":"그룹 이름은 필수입니다","Loading...":"로딩 중...",Create:LS,"Group updated":"그룹이 수정되었습니다","Update Group":"그룹 수정",Update:NS,"No Chats":"채팅이 없습니다",ParrotMate:FS,"Speak Different":"다르게 말해보세요","Not logged in":"로그인하지 않음","User Name":"사용자 이름",copy:IS,"Network is slow, enable offline mode?":"네트워크가 느립니다. 오프라인 모드를 활성화할까요?","Enable offline mode":"오프라인 모드 활성화","PChip Reader":"PChip 리더",male:US,female:OS,"popular neutral":"인기(중성)","Offline mode":"오프라인 모드","Change nickname":"닉네임 변경","UI Language":"UI 언어",Word:DS,Date:"날짜","My bookshelf":"내 서가","Title too short":"제목이 너무 짧습니다","Modification successful":"수정이 완료되었습니다","No books in your shelf yet":"아직 서가에 책이 없습니다","Tap the search icon above to browse books and add them to your shelf!":"위의 검색 아이콘을 탭해 책을 찾아 서가에 추가해보세요!","Read with experts to help you understand,":"전문가와 함께 읽으며 이해를 도와드려요,","Comprehensive training in English listening and reading.":"영어 듣기·독해 종합 훈련","Hi, {{nickName}}! Welcome!":"안녕하세요, {{nickName}}님! 환영합니다!","Browse library":"라이브러리 둘러보기","Add your own TXT/PDF":"내 파일(TXT/PDF) 추가하기","Already have an account?":"이미 계정이 있으신가요?","Click here to login":"로그인하려면 여기를 클릭하세요","We detected this is your first time using PChip Reader. Add some books!":"PChip Reader를 처음 사용하시는 것 같아요. 책을 추가해 보세요!","Upload Book":"책 업로드","Click here to upload local EPUB/MOBI/PDF/TXT":"로컬 EPUB/MOBI/PDF/TXT 파일을 업로드하려면 여기를 클릭하세요","Only EPUB/MOBI/PDF/TXT is supported":"EPUB/MOBI/PDF/TXT 형식만 지원합니다","Upload successful":"업로드가 완료되었습니다","Book upload failed":"책 업로드에 실패했습니다","We only store your files locally!":"파일은 로컬에만 저장됩니다!","New words":"새 단어","Total reading":"총 읽기 시간","Today's reading":"오늘의 읽기 시간","Please choose an image file":"이미지 파일을 선택해 주세요","Image sent":"이미지 전송 완료","Failed to upload image":"이미지 업로드에 실패했습니다","analyzing grammar structure":"문법 구조 분석 중","understanding pronunciation":"발음 분석 중","optimizing and restructuring":"최적화 및 재구성 중","My QR Code":"내 QR 코드","Let friends scan to fill your username automatically":"친구가 스캔하면 사용자 이름이 자동으로 입력됩니다","Unable to load image":"이미지를 불러올 수 없습니다","Loading image...":"이미지 불러오는 중...","Shared image":"공유된 이미지","QR scanning is unavailable in this environment":"이 환경에서는 QR 스캔을 사용할 수 없습니다","Camera access is not supported on this device":"이 기기에서는 카메라 접근을 지원하지 않습니다","Unable to access the camera":"카메라에 접근할 수 없습니다","No QR code found in the selected image":"선택한 이미지에서 QR 코드를 찾을 수 없습니다","Unable to read QR code from the selected image":"선택한 이미지에서 QR 코드를 읽을 수 없습니다","Username captured from QR code":"QR 코드에서 사용자 이름을 가져왔습니다","Initializing camera...":"카메라 초기화 중...","Scan QR Code":"QR 코드 스캔","Align the QR code within the frame to capture a username automatically.":"프레임 안에 QR 코드를 맞추면 사용자 이름이 자동으로 인식됩니다.","Login Success":"로그인에 성공했습니다","please enter your phone number":"휴대폰 번호를 입력해 주세요","Please enter your phone number":"휴대폰 번호를 입력해 주세요",Login:BS,"Terms&Conditions":"이용약관",and:VS,"Privacy Policy":"개인정보 처리방침","Unregistered phone numbers will automatically create an account":"등록되지 않은 전화번호로는 계정이 자동으로 생성됩니다","Please enter the verification code":"인증 코드를 입력해 주세요","Send verification code":"인증 코드 보내기","Please enter the correct phone number":"올바른 전화번호를 입력해 주세요","Verification code sent":"인증 코드가 전송되었습니다",Language:GS,Skip:jS,Continue:zS,"Are you 18 or older?":"만 18세 이상이신가요?",Yes:_S,No:HS,"Please select language what you want to learn":"학습하고 싶은 언어를 선택해 주세요","Please enter your age":"나이를 입력해 주세요",Age:QS,"Please select your gender":"성별을 선택해 주세요",Female:KS,Male:JS,"Your {{langShort}} name":"사용할 {{langShort}} 이름","Create your own name or choose from the recommendations":"직접 이름을 만들거나 추천 목록에서 선택하세요","Enter your nickname here...":"여기에 닉네임을 입력하세요...","Learning Language":"학습 언어",Finish:WS,"Nickname is required":"닉네임은 필수입니다","Nickname must be at least 3 characters":"닉네임은 최소 3자 이상이어야 합니다",Confirm:qS,"Account Phone":"계정 전화번호",Gender:XS,Education:YS,Job:ZS,Hobby:eT,"Select your role":"역할을 선택해 주세요","Please choose your identity":"사용자 유형을 선택해 주세요","Profile Step: Nickname":"닉네임","Profile Step: Learning Language":"학습 중인 언어","Profile Step: Mother Tongue":"모국어","By signing up, you agree with ":"회원가입하면 약관에 동의하게 됩니다 "},nT="segundos",aT="Tutor",oT="Parceiro",iT="Inglês",rT="Chinês",sT="Espanhol",lT="Coreano",cT="Francês",uT="Japonês",dT="Alemão",hT="Árabe",fT="Tradução",pT="Interpretação",mT="Gramática",gT="Por favor, aguarde a resposta dos outros para continuar a conversa por mensagem direta.",yT="Você ainda não está neste grupo. Por favor, aguarde que o proprietário aprove sua solicitação.",vT="Bate-papo",bT="Contatos",PT="Sair",wT="Citar",CT="Visualizar",AT="Desfazer envio",ST="Traduzir",TT="Recolher",kT="Mensagens",$T="Estudo",RT="Descobrir",xT="Perfil",ET="desenvolvimento",MT="Voltar",LT="Grupos",NT="Adicionar",FT="Falha",IT="Criar",UT="Atualizar",OT="ParrotMate",DT="Copiar",BT="Masculino",VT="Feminino",GT="Palavra",jT="Entrar",zT="e",_T="Idioma",HT="Pular",QT="Continuar",KT="Sim",JT="Não",WT="Idade",qT="Feminino",XT="Masculino",YT="Concluir",ZT="Confirmar",ek="Gênero",tk="Formação",nk="Profissão",ak="Hobby",ok={seconds:nT,"Send Code":"Enviar código","Add Profile":"Adicionar Perfil",Practitioner:aT,"I want to practice languages and chat with others":"Quero praticar idiomas e conversar com outras pessoas",Mate:oT,"I can guide language learning and provide companionship":"Posso orientar o aprendizado de idiomas e oferecer companhia","Unknown error":"Erro desconhecido. Por favor, tente novamente.",English:iT,Chinese:rT,Spanish:sT,Korean:lT,French:cT,Japanese:uT,German:dT,Arabic:hT,Translation:fT,Interpretation:pT,"Key Vocabulary & Terms":"Vocabulário e termos-chave",Grammar:mT,DM_ACL_REJECT:gT,GROUP_ACL_REJECT:yT,"Tree Hole":"Espaço anônimo",Chat:vT,Contacts:bT,"Remove Contact":"Remover contato","Exit Group":"Sair do grupo","Chat Settings":"Configurações do chat","Awaiting friend confirmation":"Aguardando confirmação do pedido de amizade","Revision failed":"Falha na revisão","Please use English":"Por favor, use inglês","Speech recognition failed. Please try again.":"Reconhecimento de voz falhou. Por favor, tente novamente.","analyzing...":"analisando...","Loading profiles...":"Carregando perfis...","Add Friend":"Adicionar amigo","Create Group":"Criar grupo",Logout:PT,"Copied username to clipboard":"Nome de usuário copiado para a área de transferência","Switch Identity":"Trocar identidade",Function:"Função",Quote:wT,"Instructions(Optional)":"Instruções (opcional)","joined the room":"entrou na sala","left the room":"saiu da sala",View:CT,Recall:AT,"Hide Translation":"Ocultar tradução",Translate:ST,Collapse:TT,"Before you accept, she won’t know you've seen any messages.":"Antes de aceitar, ela não saberá que você viu as mensagens.","Allow {{name}} to send you messages and share your name and profile picture?":"Permitir que {{name}} envie mensagens para você e veja seu nome e foto de perfil?",Message:kT,Study:$T,Discover:RT,Me:xT,"coming soon":"em breve","This feature is under":"Este recurso está em",development:ET,Back:MT,"Search contacts or groups":"Pesquisar contatos ou grupos",Groups:LT,"No Results":"Nenhum resultado","Say Hi":"Enviar um oi",Add:NT,"Find Friend":"Procurar amigo","Input Username":"Digite o nome de usuário","my account: ":"minha conta: ","Already Applied":"Solicitação já enviada","User is blocked":"Usuário bloqueado",Failed:FT,"Please select at least one member":"Selecione pelo menos um membro","Group created":"Grupo criado","Group Name":"Nome do grupo","Group Name is required":"O nome do grupo é obrigatório","Loading...":"Carregando...",Create:IT,"Group updated":"Grupo atualizado","Update Group":"Atualizar grupo",Update:UT,"No Chats":"Nenhuma conversa",ParrotMate:OT,"Speak Different":"Fale de forma diferente","Not logged in":"Não conectado","User Name":"Nome de usuário",copy:DT,"Network is slow, enable offline mode?":"A rede está lenta. Ativar o modo offline?","Enable offline mode":"Ativar o modo offline","PChip Reader":"PChip Reader",male:BT,female:VT,"popular neutral":"Popular / Neutro","Offline mode":"Modo offline","Change nickname":"Alterar apelido","UI Language":"Idioma da interface",Word:GT,Date:"Data","My bookshelf":"Minha estante","Title too short":"Título muito curto","Modification successful":"Modificação realizada com sucesso","No books in your shelf yet":"Ainda não há livros na sua estante","Tap the search icon above to browse books and add them to your shelf!":"Toque no ícone de busca acima para navegar pelos livros e adicioná-los à sua estante!","Read with experts to help you understand,":"Leia com especialistas para ajudar você a entender,","Comprehensive training in English listening and reading.":"Treinamento abrangente de compreensão auditiva e leitura em inglês.","Hi, {{nickName}}! Welcome!":"Olá, {{nickName}}! Seja bem-vindo!","Browse library":"Navegar pela biblioteca","Add your own TXT/PDF":"Adicione seus próprios arquivos TXT/PDF","Already have an account?":"Já tem uma conta?","Click here to login":"Clique aqui para entrar","We detected this is your first time using PChip Reader. Add some books!":"Detectamos que esta é a sua primeira vez usando o PChip Reader. Adicione alguns livros!","Upload Book":"Enviar livro","Click here to upload local EPUB/MOBI/PDF/TXT":"Clique aqui para enviar arquivos EPUB/MOBI/PDF/TXT locais","Only EPUB/MOBI/PDF/TXT is supported":"Apenas EPUB, MOBI, PDF e TXT são suportados","Upload successful":"Upload concluído com sucesso","Book upload failed":"Falha ao enviar o livro","We only store your files locally!":"Armazenamos seus arquivos apenas localmente!","New words":"Novas palavras","Total reading":"Leitura total","Today's reading":"Leitura de hoje","Please choose an image file":"Por favor, selecione um arquivo de imagem","Image sent":"Imagem enviada","Failed to upload image":"Não foi possível enviar a imagem","analyzing grammar structure":"analisando a estrutura gramatical","understanding pronunciation":"analisando a pronúncia","optimizing and restructuring":"otimizando e reestruturando","My QR Code":"Meu código QR","Let friends scan to fill your username automatically":"Permita que amigos escaneiem para preencher automaticamente seu nome de usuário","Unable to load image":"Não foi possível carregar a imagem","Loading image...":"Carregando imagem...","Shared image":"Imagem compartilhada","QR scanning is unavailable in this environment":"A leitura de códigos QR não está disponível neste ambiente","Camera access is not supported on this device":"O acesso à câmera não é suportado neste dispositivo","Unable to access the camera":"Não foi possível acessar a câmera","No QR code found in the selected image":"Nenhum código QR encontrado na imagem selecionada","Unable to read QR code from the selected image":"Não foi possível ler o código QR da imagem selecionada","Username captured from QR code":"Nome de usuário capturado do código QR","Initializing camera...":"Inicializando a câmera...","Scan QR Code":"Escanear código QR","Align the QR code within the frame to capture a username automatically.":"Alinhe o código QR dentro do quadro para capturar automaticamente o nome de usuário.","Login Success":"Login realizado com sucesso","please enter your phone number":"por favor, insira seu número de telefone","Please enter your phone number":"Por favor, insira seu número de telefone",Login:jT,"Terms&Conditions":"Termos e Condições",and:zT,"Privacy Policy":"Política de Privacidade","Unregistered phone numbers will automatically create an account":"Números de telefone não cadastrados criarão automaticamente uma conta","Please enter the verification code":"Por favor, insira o código de verificação","Send verification code":"Enviar código de verificação","Please enter the correct phone number":"Por favor, insira um número de telefone válido","Verification code sent":"Código de verificação enviado",Language:_T,Skip:HT,Continue:QT,"Are you 18 or older?":"Você tem 18 anos ou mais?",Yes:KT,No:JT,"Please select language what you want to learn":"Por favor, selecione o idioma que deseja aprender","Please enter your age":"Por favor, informe sua idade",Age:WT,"Please select your gender":"Por favor, selecione seu gênero",Female:qT,Male:XT,"Your {{langShort}} name":"Seu nome em {{langShort}}","Create your own name or choose from the recommendations":"Crie seu próprio nome ou escolha entre as sugestões","Enter your nickname here...":"Digite seu apelido aqui...","Learning Language":"Idioma que você está aprendendo",Finish:YT,"Nickname is required":"O apelido é obrigatório","Nickname must be at least 3 characters":"O apelido deve ter pelo menos 3 caracteres",Confirm:ZT,"Account Phone":"Telefone da conta",Gender:ek,Education:tk,Job:nk,Hobby:ak,"Select your role":"Selecione sua função","Please choose your identity":"Por favor, escolha sua identidade","Profile Step: Nickname":"Apelido","Profile Step: Learning Language":"Idioma que você está aprendendo","Profile Step: Mother Tongue":"Língua materna","By signing up, you agree with ":"Ao se inscrever, você concorda com "},ik="segundos",rk="Tutor",sk="Parceiro",lk="Inglês",ck="Chinês",uk="Espanhol",dk="Coreano",hk="Francês",fk="Japonês",pk="Alemão",mk="Árabe",gk="Tradução",yk="Interpretação",vk="Gramática",bk="Por favor, aguarde a resposta de outra pessoa antes de continuar esta mensagem direta.",Pk="Ainda não faz parte deste grupo. Por favor, aguarde que o proprietário aprove o seu pedido.",wk="Conversa",Ck="Contactos",Ak="Terminar sessão",Sk="Citação",Tk="Ver",kk="Anular envio",$k="Traduzir",Rk="Recolher",xk="Mensagem",Ek="Estudo",Mk="Descobrir",Lk="Perfil",Nk="desenvolvimento",Fk="Voltar",Ik="Grupos",Uk="Adicionar",Ok="Falhou",Dk="Criar",Bk="Atualizar",Vk="ParrotMate",Gk="Copiar",jk="masculino",zk="feminino",_k="Palavra",Hk="Iniciar sessão",Qk="e",Kk="Idioma",Jk="Ignorar",Wk="Continuar",qk="Sim",Xk="Não",Yk="Idade",Zk="Feminino",e$="Masculino",t$="Concluir",n$="Confirmar",a$="Género",o$="Formação",i$="Profissão",r$="Passatempo",s$={seconds:ik,"Send Code":"Enviar código","Add Profile":"Adicionar Perfil",Practitioner:rk,"I want to practice languages and chat with others":"Quero praticar línguas e conversar com outras pessoas",Mate:sk,"I can guide language learning and provide companionship":"Posso orientar a aprendizagem de línguas e oferecer companhia","Unknown error":"Erro desconhecido",English:lk,Chinese:ck,Spanish:uk,Korean:dk,French:hk,Japanese:fk,German:pk,Arabic:mk,Translation:gk,Interpretation:yk,"Key Vocabulary & Terms":"Vocabulário e termos-chave",Grammar:vk,DM_ACL_REJECT:bk,GROUP_ACL_REJECT:Pk,"Tree Hole":"Cantinho Secreto",Chat:wk,Contacts:Ck,"Remove Contact":"Remover contacto","Exit Group":"Sair do grupo","Chat Settings":"Definições do chat","Awaiting friend confirmation":"À espera da confirmação do amigo","Revision failed":"Falha na revisão","Please use English":"Por favor, use inglês","Speech recognition failed. Please try again.":"Falha no reconhecimento de voz. Por favor, tente novamente.","analyzing...":"a analisar...","Loading profiles...":"A carregar perfis...","Add Friend":"Adicionar amigo","Create Group":"Criar grupo",Logout:Ak,"Copied username to clipboard":"Nome de utilizador copiado para a área de transferência","Switch Identity":"Alterar identidade",Function:"Função",Quote:Sk,"Instructions(Optional)":"Instruções (Opcional)","joined the room":"entrou na sala","left the room":"saiu da sala",View:Tk,Recall:kk,"Hide Translation":"Ocultar tradução",Translate:$k,Collapse:Rk,"Before you accept, she won’t know you've seen any messages.":"Antes de aceitar, ela não saberá que viste alguma mensagem.","Allow {{name}} to send you messages and share your name and profile picture?":"Permitir que {{name}} lhe envie mensagens e veja o seu nome e foto de perfil?",Message:xk,Study:Ek,Discover:Mk,Me:Lk,"coming soon":"em breve","This feature is under":"Esta funcionalidade está em",development:Nk,Back:Fk,"Search contacts or groups":"Pesquisar contactos ou grupos",Groups:Ik,"No Results":"Sem resultados","Say Hi":"Enviar olá",Add:Uk,"Find Friend":"Procurar amigo","Input Username":"Introduza o nome de utilizador","my account: ":"a minha conta: ","Already Applied":"Pedido já enviado","User is blocked":"Utilizador bloqueado",Failed:Ok,"Please select at least one member":"Por favor, selecione pelo menos um membro","Group created":"Grupo criado","Group Name":"Nome do grupo","Group Name is required":"O nome do grupo é obrigatório","Loading...":"A carregar...",Create:Dk,"Group updated":"Grupo atualizado","Update Group":"Atualizar grupo",Update:Bk,"No Chats":"Sem conversas",ParrotMate:Vk,"Speak Different":"Fala de forma diferente","Not logged in":"Sessão não iniciada","User Name":"Nome de utilizador",copy:Gk,"Network is slow, enable offline mode?":"A ligação está lenta. Ativar o modo offline?","Enable offline mode":"Ativar o modo offline","PChip Reader":"PChip Reader",male:jk,female:zk,"popular neutral":"Popular (neutro)","Offline mode":"Modo offline","Change nickname":"Alterar pseudónimo","UI Language":"Idioma da interface",Word:_k,Date:"Data","My bookshelf":"A minha estante","Title too short":"Título demasiado curto","Modification successful":"Alteração efetuada com sucesso","No books in your shelf yet":"Ainda não tem livros na sua estante","Tap the search icon above to browse books and add them to your shelf!":"Toque no ícone de pesquisa acima para explorar livros e adicioná-los à sua estante!","Read with experts to help you understand,":"Leia com especialistas para o ajudar a compreender,","Comprehensive training in English listening and reading.":"Formação abrangente em compreensão oral e leitura em inglês.","Hi, {{nickName}}! Welcome!":"Olá, {{nickName}}! Seja bem-vindo!","Browse library":"Navegar pela biblioteca","Add your own TXT/PDF":"Adicione o seu ficheiro TXT/PDF","Already have an account?":"Já tem uma conta?","Click here to login":"Clique aqui para iniciar sessão","We detected this is your first time using PChip Reader. Add some books!":"Parece que é a sua primeira vez a usar o PChip Reader. Adicione alguns livros!","Upload Book":"Carregar livro","Click here to upload local EPUB/MOBI/PDF/TXT":"Clique aqui para carregar EPUB/MOBI/PDF/TXT do seu dispositivo","Only EPUB/MOBI/PDF/TXT is supported":"Apenas são suportados ficheiros EPUB, MOBI, PDF e TXT","Upload successful":"Carregamento concluído com sucesso","Book upload failed":"Falha ao carregar o livro","We only store your files locally!":"Só guardamos os seus ficheiros localmente!","New words":"Novas palavras","Total reading":"Total de leitura","Today's reading":"Leitura de hoje","Please choose an image file":"Por favor, escolha um ficheiro de imagem","Image sent":"Imagem enviada","Failed to upload image":"Falha ao carregar a imagem","analyzing grammar structure":"analisando a estrutura gramatical","understanding pronunciation":"compreendendo a pronúncia","optimizing and restructuring":"otimizando e reestruturando","My QR Code":"O meu Código QR","Let friends scan to fill your username automatically":"Permita que os amigos escaneiem para preencher automaticamente o seu nome de utilizador","Unable to load image":"Não foi possível carregar a imagem","Loading image...":"A carregar a imagem...","Shared image":"Imagem partilhada","QR scanning is unavailable in this environment":"A leitura de QR não está disponível neste ambiente","Camera access is not supported on this device":"O acesso à câmara não é suportado neste dispositivo","Unable to access the camera":"Não foi possível aceder à câmara","No QR code found in the selected image":"Nenhum código QR encontrado na imagem selecionada","Unable to read QR code from the selected image":"Não foi possível ler o código QR da imagem selecionada","Username captured from QR code":"Nome de utilizador capturado a partir do código QR","Initializing camera...":"A iniciar a câmara...","Scan QR Code":"Ler Código QR","Align the QR code within the frame to capture a username automatically.":"Alinhe o código QR dentro do enquadramento para capturar automaticamente o nome de utilizador","Login Success":"Sessão iniciada com sucesso","please enter your phone number":"por favor, introduza o seu número de telemóvel","Please enter your phone number":"Por favor, introduza o seu número de telemóvel",Login:Hk,"Terms&Conditions":"Termos e Condições",and:Qk,"Privacy Policy":"Política de Privacidade","Unregistered phone numbers will automatically create an account":"Números de telemóvel não registados serão usados para criar automaticamente uma conta","Please enter the verification code":"Por favor, introduza o código de verificação","Send verification code":"Enviar código de verificação","Please enter the correct phone number":"Por favor, introduza um número de telemóvel válido","Verification code sent":"Código de verificação enviado",Language:Kk,Skip:Jk,Continue:Wk,"Are you 18 or older?":"Tem 18 anos ou mais?",Yes:qk,No:Xk,"Please select language what you want to learn":"Por favor, selecione a língua que pretende aprender","Please enter your age":"Por favor, introduza a sua idade",Age:Yk,"Please select your gender":"Por favor, selecione o seu género",Female:Zk,Male:e$,"Your {{langShort}} name":"O seu nome em {{langShort}}","Create your own name or choose from the recommendations":"Crie o seu próprio nome ou escolha uma das recomendações","Enter your nickname here...":"Introduza o seu nome de utilizador aqui...","Learning Language":"Língua a aprender",Finish:t$,"Nickname is required":"O nome de utilizador é obrigatório","Nickname must be at least 3 characters":"O nome de utilizador deve ter pelo menos 3 caracteres",Confirm:n$,"Account Phone":"Telemóvel da conta",Gender:a$,Education:o$,Job:i$,Hobby:r$,"Select your role":"Selecione a sua função","Please choose your identity":"Por favor, escolha a sua identidade","Profile Step: Nickname":"Nome de utilizador","Profile Step: Learning Language":"Idioma a aprender","Profile Step: Mother Tongue":"Língua materna","By signing up, you agree with ":"Ao criar a sua conta, concorda com "},l$="секунд",c$="Наставник",u$="Партнёр",d$="Английский",h$="Китайский",f$="Испанский",p$="Корейский",m$="Французский",g$="Японский",y$="Немецкий",v$="Арабский",b$="Перевод",P$="Пояснение",w$="Грамматика",C$="Чтобы продолжить переписку в личных сообщениях, дождитесь ответа собеседника.",A$="Вы ещё не в этой группе. Пожалуйста, дождитесь одобрения вашего запроса владельцем.",S$="Чат",T$="Контакты",k$="Выйти",$$="Цитата",R$="Посмотреть",x$="Отозвать",E$="Перевести",M$="Свернуть",L$="Сообщения",N$="Учёба",F$="Обзор",I$="Профиль",U$="разработки",O$="Назад",D$="Группы",B$="Добавить",V$="Не удалось",G$="Создать",j$="Обновить",z$="ParrotMate",_$="копировать",H$="Мужской",Q$="Женский",K$="Слово",J$="Войти",W$="и",q$="Язык",X$="Пропустить",Y$="Продолжить",Z$="Да",e2="Нет",t2="Возраст",n2="Женский",a2="Мужской",o2="Готово",i2="Подтвердить",r2="Пол",s2="Образование",l2="Профессия",c2="Хобби",u2={seconds:l$,"Send Code":"Отправить код","Add Profile":"Добавить профиль",Practitioner:c$,"I want to practice languages and chat with others":"Я хочу практиковать языки и общаться с другими",Mate:u$,"I can guide language learning and provide companionship":"Я могу помогать в изучении языка и поддерживать общение","Unknown error":"Неизвестная ошибка",English:d$,Chinese:h$,Spanish:f$,Korean:p$,French:m$,Japanese:g$,German:y$,Arabic:v$,Translation:b$,Interpretation:P$,"Key Vocabulary & Terms":"Ключевая лексика и термины",Grammar:w$,DM_ACL_REJECT:C$,GROUP_ACL_REJECT:A$,"Tree Hole":"Дерево сообщений",Chat:S$,Contacts:T$,"Remove Contact":"Удалить контакт","Exit Group":"Покинуть группу","Chat Settings":"Настройки чата","Awaiting friend confirmation":"Ожидается подтверждение от друга","Revision failed":"Не удалось обновить","Please use English":"Пожалуйста, используйте английский","Speech recognition failed. Please try again.":"Не удалось распознать речь. Пожалуйста, попробуйте ещё раз.","analyzing...":"анализируется...","Loading profiles...":"Загрузка профилей...","Add Friend":"Добавить в друзья","Create Group":"Создать группу",Logout:k$,"Copied username to clipboard":"Имя пользователя скопировано в буфер обмена","Switch Identity":"Сменить профиль",Function:"Функция",Quote:$$,"Instructions(Optional)":"Инструкции (необязательно)","joined the room":"присоединился к комнате","left the room":"покинул комнату",View:R$,Recall:x$,"Hide Translation":"Скрыть перевод",Translate:E$,Collapse:M$,"Before you accept, she won’t know you've seen any messages.":"Пока вы не примете запрос, она не узнает, что вы видели сообщения.","Allow {{name}} to send you messages and share your name and profile picture?":"Разрешить {{name}} отправлять вам сообщения и видеть ваше имя и фото профиля?",Message:L$,Study:N$,Discover:F$,Me:I$,"coming soon":"Скоро появится","This feature is under":"Эта функция находится в стадии",development:U$,Back:O$,"Search contacts or groups":"Найти контакты или группы",Groups:D$,"No Results":"Нет результатов","Say Hi":"Поздороваться",Add:B$,"Find Friend":"Найти друга","Input Username":"Введите имя пользователя","my account: ":"мой аккаунт: ","Already Applied":"Заявка уже отправлена","User is blocked":"Пользователь заблокирован",Failed:V$,"Please select at least one member":"Выберите хотя бы одного участника","Group created":"Группа создана","Group Name":"Название группы","Group Name is required":"Название группы обязательно","Loading...":"Загрузка...",Create:G$,"Group updated":"Группа обновлена","Update Group":"Обновить группу",Update:j$,"No Chats":"Нет чатов",ParrotMate:z$,"Speak Different":"Говори по‑другому","Not logged in":"Вы не вошли в аккаунт","User Name":"Имя пользователя",copy:_$,"Network is slow, enable offline mode?":"Соединение медленное, включить офлайн-режим?","Enable offline mode":"Включить офлайн-режим","PChip Reader":"PChip Reader",male:H$,female:Q$,"popular neutral":"Популярные (унисекс)","Offline mode":"Офлайн-режим","Change nickname":"Изменить ник","UI Language":"Язык интерфейса",Word:K$,Date:"Дата","My bookshelf":"Моя книжная полка","Title too short":"Название слишком короткое","Modification successful":"Изменения успешно сохранены","No books in your shelf yet":"На вашей полке пока нет книг","Tap the search icon above to browse books and add them to your shelf!":"Нажмите значок поиска сверху, чтобы просмотреть книги и добавить их на полку!","Read with experts to help you understand,":"Читайте вместе с экспертами, чтобы лучше понять материал,","Comprehensive training in English listening and reading.":"Комплексная подготовка по аудированию и чтению на английском языке.","Hi, {{nickName}}! Welcome!":"Привет, {{nickName}}! Добро пожаловать!","Browse library":"Просмотреть библиотеку","Add your own TXT/PDF":"Добавьте свои файлы TXT/PDF","Already have an account?":"Уже есть аккаунт?","Click here to login":"Нажмите здесь, чтобы войти","We detected this is your first time using PChip Reader. Add some books!":"Похоже, вы используете PChip Reader впервые. Добавьте несколько книг!","Upload Book":"Загрузить книгу","Click here to upload local EPUB/MOBI/PDF/TXT":"Нажмите здесь, чтобы загрузить локальные файлы EPUB/MOBI/PDF/TXT","Only EPUB/MOBI/PDF/TXT is supported":"Поддерживаются только форматы EPUB/MOBI/PDF/TXT","Upload successful":"Загрузка прошла успешно","Book upload failed":"Не удалось загрузить книгу","We only store your files locally!":"Мы храним ваши файлы только локально!","New words":"Новые слова","Total reading":"Всего прочитано","Today's reading":"Прочитано сегодня","Please choose an image file":"Пожалуйста, выберите файл изображения","Image sent":"Изображение отправлено","Failed to upload image":"Не удалось загрузить изображение","analyzing grammar structure":"анализ грамматической структуры","understanding pronunciation":"анализ произношения","optimizing and restructuring":"оптимизация и реструктуризация","My QR Code":"Мой QR-код","Let friends scan to fill your username automatically":"Позвольте друзьям отсканировать, чтобы автоматически заполнить ваше имя пользователя","Unable to load image":"Не удалось загрузить изображение","Loading image...":"Загрузка изображения...","Shared image":"Отправленное изображение","QR scanning is unavailable in this environment":"Сканирование QR-кодов недоступно в этой среде","Camera access is not supported on this device":"Доступ к камере не поддерживается на этом устройстве","Unable to access the camera":"Не удалось получить доступ к камере","No QR code found in the selected image":"В выбранном изображении не найден QR-код","Unable to read QR code from the selected image":"Не удалось прочитать QR-код с выбранного изображения","Username captured from QR code":"Имя пользователя получено из QR-кода","Initializing camera...":"Инициализация камеры...","Scan QR Code":"Сканировать QR-код","Align the QR code within the frame to capture a username automatically.":"Поместите QR-код в рамку, чтобы имя пользователя заполнилось автоматически","Login Success":"Вход выполнен","please enter your phone number":"пожалуйста, введите номер телефона","Please enter your phone number":"Пожалуйста, введите номер телефона",Login:J$,"Terms&Conditions":"Условия использования",and:W$,"Privacy Policy":"Политика конфиденциальности","Unregistered phone numbers will automatically create an account":"Если номер не зарегистрирован, будет автоматически создан аккаунт","Please enter the verification code":"Пожалуйста, введите код подтверждения","Send verification code":"Отправить код подтверждения","Please enter the correct phone number":"Пожалуйста, введите корректный номер телефона","Verification code sent":"Код подтверждения отправлен",Language:q$,Skip:X$,Continue:Y$,"Are you 18 or older?":"Вам 18 лет или больше?",Yes:Z$,No:e2,"Please select language what you want to learn":"Пожалуйста, выберите язык, который вы хотите изучать","Please enter your age":"Пожалуйста, укажите свой возраст",Age:t2,"Please select your gender":"Пожалуйста, выберите свой пол",Female:n2,Male:a2,"Your {{langShort}} name":"Ваше имя на {{langShort}}","Create your own name or choose from the recommendations":"Придумайте имя или выберите из предложенных вариантов","Enter your nickname here...":"Введите никнейм здесь...","Learning Language":"Изучаемый язык",Finish:o2,"Nickname is required":"Никнейм обязателен","Nickname must be at least 3 characters":"Никнейм должен содержать не менее 3 символов",Confirm:i2,"Account Phone":"Номер телефона",Gender:r2,Education:s2,Job:l2,Hobby:c2,"Select your role":"Выберите свою роль","Please choose your identity":"Пожалуйста, выберите свою роль","Profile Step: Nickname":"Никнейм","Profile Step: Learning Language":"Изучаемый язык","Profile Step: Mother Tongue":"Родной язык","By signing up, you agree with ":"Регистрируясь, вы соглашаетесь с "},d2="விநாடிகள்",h2="பயிற்சியாளர்",f2="மொழி நண்பர்",p2="ஆங்கிலம்",m2="சீன மொழி",g2="ஸ்பானிய மொழி",y2="கொரிய மொழி",v2="பிரெஞ்சு மொழி",b2="ஜப்பானிய மொழி",P2="ஜெர்மன் மொழி",w2="அரபு மொழி",C2="மொழிபெயர்ப்பு",A2="விளக்கம்",S2="இலக்கணம்",T2="நேரடி உரையாடலை தொடர, மற்றவர்களின் பதிலுக்கு தயவுசெய்து காத்திருக்கவும்.",k2="நீங்கள் இந்த குழுவில் இன்னும் சேர்க்கப்படவில்லை. குழு உரிமையாளர் உங்கள் கோரிக்கையை ஒப்புக்கொள்ளும் வரை காத்திருக்கவும்.",$2="உரையாடல்",R2="தொடர்புகள்",x2="வெளியேறு",E2="மேற்கோள்",M2="பார்க்க",L2="பின்வாங்கு",N2="மொழிபெயர்க்க",F2="சுருக்கு",I2="செய்திகள்",U2="பயிற்சி",O2="கண்டறிதல்",D2="நான்",B2="மேம்பாட்டில் உள்ளது",V2="முந்தைய",G2="குழுக்கள்",j2="சேர்க்கவும்",z2="தோல்வி",_2="உருவாக்கவும்",H2="புதுப்பிக்கவும்",Q2="ParrotMate",K2="நகலெடு",J2="ஆண்",W2="பெண்",q2="சொல்",X2="உள்நுழைய",Y2="மற்றும்",Z2="மொழி",eR="தவிர்க்கவும்",tR="தொடரவும்",nR="ஆம்",aR="இல்லை",oR="வயது",iR="பெண்",rR="ஆண்",sR="முடிக்கவும்",lR="உறுதிசெய்",cR="பாலினம்",uR="கல்வி",dR="தொழில்",hR="பொழுதுபோக்கு",fR={seconds:d2,"Send Code":"குறியீடு அனுப்பவும்","Add Profile":"சுயவிவரம் சேர்க்கவும்",Practitioner:h2,"I want to practice languages and chat with others":"நான் மொழிகள் பயிற்சி செய்து மற்றவர்களுடன் உரையாட விரும்புகிறேன்",Mate:f2,"I can guide language learning and provide companionship":"நான் மொழி கற்றலுக்கு வழிகாட்டவும் மற்றும் துணையாக இருக்கவும் முடியும்","Unknown error":"தெரியாத பிழை",English:p2,Chinese:m2,Spanish:g2,Korean:y2,French:v2,Japanese:b2,German:P2,Arabic:w2,Translation:C2,Interpretation:A2,"Key Vocabulary & Terms":"முக்கிய சொற்கள் மற்றும் வரையறைகள்",Grammar:S2,DM_ACL_REJECT:T2,GROUP_ACL_REJECT:k2,"Tree Hole":"மரக் குழி",Chat:$2,Contacts:R2,"Remove Contact":"தொடர்பை நீக்கவும்","Exit Group":"குழுவிலிருந்து வெளியேறு","Chat Settings":"உரையாடல் அமைப்புகள்","Awaiting friend confirmation":"நண்பரின் உறுதிப்பாட்டுக்காக காத்திருக்கிறது","Revision failed":"திருத்தம் தோல்வியடைந்தது","Please use English":"தயவு செய்து ஆங்கிலத்தைப் பயன்படுத்தவும்","Speech recognition failed. Please try again.":"ஒலி அடையாளம் தோல்வியடைந்தது. தயவு செய்து மீண்டும் முயற்சிக்கவும்.","analyzing...":"பகுப்பாய்வு...","Loading profiles...":"சுயவிவரங்கள் ஏற்றப்படுகின்றன...","Add Friend":"நண்பரைச் சேர்க்கவும்","Create Group":"குழுவை உருவாக்கவும்",Logout:x2,"Copied username to clipboard":"பயனர் பெயர் கிளிப்போர்டுக்கு நகலாக சேமிக்கப்பட்டது","Switch Identity":"அடையாளத்தை மாற்றவும்",Function:"செயல்பாடு",Quote:E2,"Instructions(Optional)":"வழிமுறைகள் (விருப்பமானவை)","joined the room":"அறையில் சேர்ந்தார்","left the room":"அறையை விட்டு சென்றார்",View:M2,Recall:L2,"Hide Translation":"மொழிபெயர்ப்பை மறைக்க",Translate:N2,Collapse:F2,"Before you accept, she won’t know you've seen any messages.":"நீங்கள் ஒப்புக் கொள்ளும் வரை, அவள் நீங்கள் எந்த செய்திகளையும் பார்த்தீர்கள் என்பதை அறியமாட்டாள்.","Allow {{name}} to send you messages and share your name and profile picture?":"{{name}}-க்கு உங்களுக்கு செய்திகளை அனுப்பவும், உங்கள் பெயர் மற்றும் ப்ரொபைல் படத்தை பகிரவும் அனுமதிக்கலாமா?",Message:I2,Study:U2,Discover:O2,Me:D2,"coming soon":"விரைவில்","This feature is under":"இந்த அம்சம்",development:B2,Back:V2,"Search contacts or groups":"தொடர்புகள் அல்லது குழுக்களை தேடுங்கள்",Groups:G2,"No Results":"முடிவுகள் இல்லை","Say Hi":"வணக்கம் சொல்லுங்கள்",Add:j2,"Find Friend":"நண்பரை தேடுங்கள்","Input Username":"பயனர் பெயரை உள்ளிடவும்","my account: ":"என் கணக்கு: ","Already Applied":"ஏற்கனவே விண்ணப்பிக்கப்பட்டது","User is blocked":"பயனர் தடை செய்யப்பட்டுள்ளது",Failed:z2,"Please select at least one member":"குறைந்தது ஒரு உறுப்பினரைத் தேர்ந்தெடுக்கவும்","Group created":"குழு உருவாக்கப்பட்டது","Group Name":"குழு பெயர்","Group Name is required":"குழு பெயர் அவசியம்","Loading...":"ஏற்றப்படுகிறது...",Create:_2,"Group updated":"குழு புதுப்பிக்கப்பட்டது","Update Group":"குழு புதுப்பிக்கவும்",Update:H2,"No Chats":"உரையாடல்கள் எதுவும் இல்லை",ParrotMate:Q2,"Speak Different":"வேறுபட்ட முறையில் பேசுங்கள்","Not logged in":"உள்நுழையவில்லை","User Name":"பயனர் பெயர்",copy:K2,"Network is slow, enable offline mode?":"இணையம் மந்தமாக உள்ளது. ஆஃப்லைன் முறையை செயல்படுத்தலாமா?","Enable offline mode":"ஆஃப்லைன் முறையை செயல்படுத்தவும்","PChip Reader":"PChip Reader",male:J2,female:W2,"popular neutral":"பிரபலமான நடுநிலை","Offline mode":"ஆஃப்லைன் முறை","Change nickname":"புனைப்பெயரை மாற்றவும்","UI Language":"பயனர் இடைமுக மொழி",Word:q2,Date:"தேதி","My bookshelf":"என் புத்தகத் தட்டு","Title too short":"தலைப்பு குறைவாக உள்ளது","Modification successful":"மாற்றம் வெற்றிகரமாக হয়েছে","No books in your shelf yet":"உங்கள் புத்தகத் தட்டில் இன்னும் புத்தகங்கள் இல்லை","Tap the search icon above to browse books and add them to your shelf!":"மேலுள்ள தேடல் ஐகானைத் தொட்டு புத்தகங்களை தேடவும், விரும்பியவற்றை உங்கள் தட்டில் சேர்க்கவும்!","Read with experts to help you understand,":"உங்கள் புரிதலை மேம்படுத்த நிபுணர்களுடன் சேர்ந்து வாசிக்கவும்,","Comprehensive training in English listening and reading.":"ஆங்கிலக் கேட்கும் திறனும் வாசிக்கும் திறனும் இரண்டிலும் முழுமையான பயிற்சி.","Hi, {{nickName}}! Welcome!":"வணக்கம், {{nickName}}! வரவேற்கிறோம்!","Browse library":"நூலகத்தை உலாவவும்","Add your own TXT/PDF":"உங்கள் சொந்த TXT/PDF கோப்புகளைச் சேர்க்கவும்","Already have an account?":"ஏற்கனவே ஒரு கணக்கு உங்களிடம் உள்ளதா?","Click here to login":"உள்நுழைய இங்கே சொடுக்கவும்","We detected this is your first time using PChip Reader. Add some books!":"நாங்கள் இது உங்கள் முதன்முறையான PChip Reader பயன்பாடு என கண்டறிந்தோம். சில புத்தகங்களைச் சேர்க்கவும்!","Upload Book":"புத்தகம் பதிவேற்றவும்","Click here to upload local EPUB/MOBI/PDF/TXT":"உங்கள் சாதனத்தில் உள்ள EPUB/MOBI/PDF/TXT கோப்புகளை பதிவேற்ற இங்கே சொடுக்கவும்","Only EPUB/MOBI/PDF/TXT is supported":"மட்டுமே EPUB/MOBI/PDF/TXT கோப்புகள் ஆதரிக்கப்படுகின்றன","Upload successful":"பதிவேற்றம் வெற்றிகரமாக முடிந்தது","Book upload failed":"புத்தகப் பதிவேற்றம் தோல்வியடைந்தது","We only store your files locally!":"நாங்கள் உங்கள் கோப்புகளை உங்கள் சாதனத்தில் மட்டுமே சேமிக்கிறோம்!","New words":"புதிய சொற்கள்","Total reading":"மொத்த வாசிப்பு","Today's reading":"இன்றைய வாசிப்பு","Please choose an image file":"தயவுசெய்து ஒரு பட கோப்பை தேர்ந்தெடுக்கவும்","Image sent":"படம் அனுப்பப்பட்டுள்ளது","Failed to upload image":"படத்தை பதிவேற்ற முடியவில்லை","analyzing grammar structure":"வாக்கியக் கட்டமைப்பை ஆய்வு செய்கிறோம்","understanding pronunciation":"உச்சரிப்பை புரிந்துகொள்கிறோம்","optimizing and restructuring":"மெருகூட்டுதல் மற்றும் மறுசீரமைத்தல்","My QR Code":"என் QR குறியீடு","Let friends scan to fill your username automatically":"நண்பர்கள் ஸ்கேன் செய்தால் உங்கள் பயனர் பெயர் தானாக நிரப்பப்படும்","Unable to load image":"படத்தை ஏற்ற முடியவில்லை","Loading image...":"படம் ஏற்றப்படுகிறது...","Shared image":"பகிரப்பட்ட படம்","QR scanning is unavailable in this environment":"இந்த சூழலில் QR ஸ்கேனிங் கிடைக்கவில்லை","Camera access is not supported on this device":"இந்த சாதனத்தில் கேமராவிற்கான அணுகல் ஆதரிக்கப்படவில்லை","Unable to access the camera":"கேமராவை அணுக முடியவில்லை","No QR code found in the selected image":"தேர்ந்தெடுக்கப்பட்ட படத்தில் QR குறியீடு காணப்படவில்லை","Unable to read QR code from the selected image":"தேர்ந்தெடுக்கப்பட்ட படத்தில் இருந்து QR குறியீட்டை படிக்க முடியவில்லை","Username captured from QR code":"QR குறியீட்டிலிருந்து பயனர் பெயர் பிடிக்கப்பட்டது","Initializing camera...":"கேமரா தொடங்கப்படுகிறது...","Scan QR Code":"QR குறியீட்டை ஸ்கேன் செய்யவும்","Align the QR code within the frame to capture a username automatically.":"பயனர் பெயரை தானாகப் பிடிக்க QR குறியீட்டை பிரேமுக்குள் சமநிலைப்படுத்தவும்.","Login Success":"உள்நுழைவு வெற்றிகரமாக முடிந்தது","please enter your phone number":"தயவுசெய்து உங்கள் தொலைபேசி எண்ணை உள்ளிடவும்","Please enter your phone number":"தயவுசெய்து உங்கள் தொலைபேசி எண்ணை உள்ளிடவும்",Login:X2,"Terms&Conditions":"விதிமுறைகள் மற்றும் நிபந்தனைகள்",and:Y2,"Privacy Policy":"தனியுரிமைக் கொள்கை","Unregistered phone numbers will automatically create an account":"பதிவ்செய்யப்படாத தொலைபேசி எண்கள் தானாகவே ஒரு கணக்கை உருவாக்கும்","Please enter the verification code":"தயவுசெய்து சரிபார்ப்பு குறியீட்டை உள்ளிடவும்","Send verification code":"சரிபார்ப்பு குறியீட்டை அனுப்பவும்","Please enter the correct phone number":"தயவுசெய்து சரியான தொலைபேசி எண்ணை உள்ளிடவும்","Verification code sent":"சரிபார்ப்பு குறியீடு அனுப்பப்பட்டது",Language:Z2,Skip:eR,Continue:tR,"Are you 18 or older?":"நீங்கள் 18 வயது அல்லது அதற்கு மேற்பட்டவரா?",Yes:nR,No:aR,"Please select language what you want to learn":"நீங்கள் கற்க விரும்பும் மொழியை தேர்ந்தெடுக்கவும்","Please enter your age":"உங்கள் வயதை உள்ளிடவும்",Age:oR,"Please select your gender":"தயவுசெய்து உங்கள் பாலினத்தை தேர்ந்தெடுக்கவும்",Female:iR,Male:rR,"Your {{langShort}} name":"உங்கள் {{langShort}} பெயர்","Create your own name or choose from the recommendations":"உங்கள் சொந்தப் பெயரை உருவாக்கவும் அல்லது பரிந்துரைகளிலிருந்து ஒன்றை தேர்ந்தெடுக்கவும்","Enter your nickname here...":"இங்கே உங்கள் நிக்க்நேத்தை உள்ளிடவும்...","Learning Language":"கற்றுக்கொள்ளும் மொழி",Finish:sR,"Nickname is required":"தயவுசெய்து நிக்க்நேம் நிரப்பவும்","Nickname must be at least 3 characters":"நிக்க்நேம் குறைந்தபட்சம் 3 எழுத்துகள் இருக்க வேண்டும்",Confirm:lR,"Account Phone":"கணக்கு தொலைபேசி எண்",Gender:cR,Education:uR,Job:dR,Hobby:hR,"Select your role":"உங்கள் பங்கை தேர்ந்தெடுக்கவும்","Please choose your identity":"தயவுசெய்து உங்கள் அடையாளத்தை தேர்ந்தெடுக்கவும்","Profile Step: Nickname":"அழைப்புப் பெயர்","Profile Step: Learning Language":"கற்றுக்கொள்ளும் மொழி","Profile Step: Mother Tongue":"தாய்மொழி","By signing up, you agree with ":"பதிவு செய்வதன் மூலம், நீங்கள் விதிமுறைகளையும் கொள்கைகளையும் ஏற்றுக்கொள்கிறீர்கள் "},pR="секунд",mR="Наставник",gR="Напарник",yR="Англійська",vR="Китайська",bR="Іспанська",PR="Корейська",wR="Французька",CR="Японська",AR="Німецька",SR="Арабська",TR="Переклад",kR="Тлумачення",$R="Граматика",RR="Будь ласка, зачекайте відповіді інших, щоб продовжити особисте повідомлення.",xR="Ви ще не приєднані до цієї групи. Будь ласка, зачекайте, поки власник схвалить ваш запит.",ER="Чат",MR="Контакти",LR="Вийти",NR="Цитата",FR="Переглянути",IR="Відкликати",UR="Перекласти",OR="Згорнути",DR="Повідомлення",BR="Навчання",VR="Відкриття",GR="Мій профіль",jR="розробки",zR="Назад",_R="Групи",HR="Додати",QR="Не вдалося",KR="Створити",JR="Оновити",WR="ParrotMate",qR="Копіювати",XR="Чоловічий",YR="Жіночий",ZR="Слово",ex="Увійти",tx="та",nx="Мова",ax="Пропустити",ox="Продовжити",ix="Так",rx="Ні",sx="Вік",lx="Жінка",cx="Чоловік",ux="Завершити",dx="Підтвердити",hx="Стать",fx="Освіта",px="Професія",mx="Хобі",gx={seconds:pR,"Send Code":"Надіслати код","Add Profile":"Додати профіль",Practitioner:mR,"I want to practice languages and chat with others":"Хочу практикувати мови й спілкуватися з іншими",Mate:gR,"I can guide language learning and provide companionship":"Я можу допомагати у вивченні мов і скласти приємну компанію","Unknown error":"Сталася невідома помилка. Будь ласка, спробуйте ще раз.",English:yR,Chinese:vR,Spanish:bR,Korean:PR,French:wR,Japanese:CR,German:AR,Arabic:SR,Translation:TR,Interpretation:kR,"Key Vocabulary & Terms":"Ключова лексика та терміни",Grammar:$R,DM_ACL_REJECT:RR,GROUP_ACL_REJECT:xR,"Tree Hole":"Секретний куточок",Chat:ER,Contacts:MR,"Remove Contact":"Видалити контакт","Exit Group":"Вийти з групи","Chat Settings":"Налаштування чату","Awaiting friend confirmation":"Чекаємо підтвердження від друга","Revision failed":"Не вдалося виконати ревізію","Please use English":"Будь ласка, використовуйте англійську","Speech recognition failed. Please try again.":"Розпізнавання мовлення не вдалося. Будь ласка, спробуйте ще раз.","analyzing...":"Аналізую...","Loading profiles...":"Завантаження профілів...","Add Friend":"Додати друга","Create Group":"Створити групу",Logout:LR,"Copied username to clipboard":"Ім'я користувача скопійовано в буфер обміну","Switch Identity":"Змінити обліковий запис",Function:"Функція",Quote:NR,"Instructions(Optional)":"Інструкції (необов'язково)","joined the room":"приєднався до кімнати","left the room":"покинув кімнату",View:FR,Recall:IR,"Hide Translation":"Приховати переклад",Translate:UR,Collapse:OR,"Before you accept, she won’t know you've seen any messages.":"Поки ви не приймете, вона не дізнається, що ви бачили повідомлення.","Allow {{name}} to send you messages and share your name and profile picture?":"Дозволити {{name}} надсилати вам повідомлення та бачити ваше ім'я та фото профілю?",Message:DR,Study:BR,Discover:VR,Me:GR,"coming soon":"Незабаром","This feature is under":"Ця функція знаходиться на стадії",development:jR,Back:zR,"Search contacts or groups":"Шукати контакти або групи",Groups:_R,"No Results":"Результатів не знайдено","Say Hi":"Написати привіт",Add:HR,"Find Friend":"Знайти друга","Input Username":"Введіть ім'я користувача","my account: ":"мій акаунт: ","Already Applied":"Запит вже надіслано","User is blocked":"Користувач заблокований",Failed:QR,"Please select at least one member":"Будь ласка, виберіть принаймні одного учасника","Group created":"Групу успішно створено","Group Name":"Назва групи","Group Name is required":"Потрібно вказати назву групи","Loading...":"Завантаження...",Create:KR,"Group updated":"Групу успішно оновлено","Update Group":"Оновити групу",Update:JR,"No Chats":"Немає чатів",ParrotMate:WR,"Speak Different":"Говори по-іншому","Not logged in":"Не ввійшли в систему","User Name":"Ім'я користувача",copy:qR,"Network is slow, enable offline mode?":"Мережа повільна. Увімкнути офлайн-режим?","Enable offline mode":"Увімкнути офлайн-режим","PChip Reader":"PChip Reader",male:XR,female:YR,"popular neutral":"Популярно-нейтральний","Offline mode":"Офлайн-режим","Change nickname":"Змінити нікнейм","UI Language":"Мова інтерфейсу",Word:ZR,Date:"Дата","My bookshelf":"Моя книжкова полиця","Title too short":"Заголовок надто короткий","Modification successful":"Зміни успішно застосовано","No books in your shelf yet":"На вашій полиці ще немає книг","Tap the search icon above to browse books and add them to your shelf!":"Натисніть іконку пошуку вгорі, щоб знайти книги й додати їх до своєї полиці!","Read with experts to help you understand,":"Читайте разом із експертами, щоб краще розуміти матеріал,","Comprehensive training in English listening and reading.":"Комплексна підготовка з аудіювання та читання англійською.","Hi, {{nickName}}! Welcome!":"Привіт, {{nickName}}! Ласкаво просимо!","Browse library":"Переглянути бібліотеку","Add your own TXT/PDF":"Додайте свої файли TXT/PDF","Already have an account?":"Вже маєте обліковий запис?","Click here to login":"Натисніть тут, щоб увійти","We detected this is your first time using PChip Reader. Add some books!":"Схоже, ви вперше користуєтесь PChip Reader. Додайте кілька книг!","Upload Book":"Завантажити книгу","Click here to upload local EPUB/MOBI/PDF/TXT":"Натисніть тут, щоб завантажити локальні файли EPUB/MOBI/PDF/TXT","Only EPUB/MOBI/PDF/TXT is supported":"Підтримуються лише формати EPUB, MOBI, PDF та TXT","Upload successful":"Книгу успішно завантажено","Book upload failed":"Не вдалося завантажити книгу","We only store your files locally!":"Ми зберігаємо ваші файли лише локально!","New words":"Нові слова","Total reading":"Загальний час читання","Today's reading":"Час читання сьогодні","Please choose an image file":"Будь ласка, оберіть файл зображення","Image sent":"Зображення надіслано","Failed to upload image":"Не вдалося завантажити зображення","analyzing grammar structure":"аналізую граматичну структуру","understanding pronunciation":"аналізую вимову","optimizing and restructuring":"оптимізую та переструктуровую","My QR Code":"Мій QR-код","Let friends scan to fill your username automatically":"Дайте друзям змогу відсканувати QR-код, щоб автоматично заповнити ваше ім'я користувача","Unable to load image":"Не вдається завантажити зображення","Loading image...":"Завантаження зображення...","Shared image":"Надіслане зображення","QR scanning is unavailable in this environment":"Сканування QR-кодів недоступне в цьому середовищі","Camera access is not supported on this device":"Цей пристрій не підтримує доступ до камери","Unable to access the camera":"Не вдалося отримати доступ до камери","No QR code found in the selected image":"У вибраному зображенні не знайдено QR-коду","Unable to read QR code from the selected image":"Не вдається розпізнати QR-код у вибраному зображенні","Username captured from QR code":"Ім'я користувача зчитано з QR-коду","Initializing camera...":"Підготовка камери...","Scan QR Code":"Сканувати QR-код","Align the QR code within the frame to capture a username automatically.":"Розмістіть QR-код у рамці, щоб автоматично зчитати ім'я користувача.","Login Success":"Успішний вхід","please enter your phone number":"будь ласка, введіть свій номер телефону","Please enter your phone number":"Будь ласка, введіть свій номер телефону",Login:ex,"Terms&Conditions":"Умови та положення",and:tx,"Privacy Policy":"Політика конфіденційності","Unregistered phone numbers will automatically create an account":"Якщо номер телефону не зареєстрований, буде автоматично створено обліковий запис","Please enter the verification code":"Будь ласка, введіть код підтвердження","Send verification code":"Надіслати код підтвердження","Please enter the correct phone number":"Будь ласка, введіть правильний номер телефону","Verification code sent":"Код підтвердження надіслано",Language:nx,Skip:ax,Continue:ox,"Are you 18 or older?":"Вам 18 років чи більше?",Yes:ix,No:rx,"Please select language what you want to learn":"Будь ласка, оберіть мову, яку хочете вивчати","Please enter your age":"Вкажіть, будь ласка, свій вік",Age:sx,"Please select your gender":"Оберіть, будь ласка, свою стать",Female:lx,Male:cx,"Your {{langShort}} name":"Ваше {{langShort}} ім'я","Create your own name or choose from the recommendations":"Придумайте власне ім'я або оберіть із рекомендацій","Enter your nickname here...":"Введіть тут свій нік...","Learning Language":"Мова, яку ви вивчаєте",Finish:ux,"Nickname is required":"Нік обов'язковий","Nickname must be at least 3 characters":"Нік має містити щонайменше 3 символи",Confirm:dx,"Account Phone":"Телефон облікового запису",Gender:hx,Education:fx,Job:px,Hobby:mx,"Select your role":"Оберіть свою роль","Please choose your identity":"Будь ласка, оберіть свою ідентичність","Profile Step: Nickname":"Нік","Profile Step: Learning Language":"Мова, яку ви вивчаєте","Profile Step: Mother Tongue":"Рідна мова","By signing up, you agree with ":"Реєструючись, ви погоджуєтеся з "},yx="操作失败",vx="添加",bx="创建",Px="消息",wx="学习",Cx="发现",Ax="我",Sx="更新",Tx="聊天",kx="联系人",$x="退出登录",Rx="引用",xx="查看",Ex="撤回",Mx="翻译",Lx="收起",Nx="复制",Fx="男",Ix="女",Ux="秒",Ox="导师",Dx="语伴",Bx="英语",Vx="中文",Gx="西班牙语",jx="韩语",zx="法语",_x="日语",Hx="德语",Qx="阿拉伯语",Kx="翻译",Jx="释义",Wx="语法",qx="请等待对方回复后再继续私信。",Xx="您还未加入此群,请等待群主批准您的申请。",Yx="开发中",Zx="返回",eE="群组",tE="ParrotMate",nE="单词",aE="登录",oE="和",iE="语言",rE="跳过",sE="继续",lE="是",cE="否",uE="年龄",dE="女性",hE="男性",fE="完成",pE="确认",mE="性别",gE="学历",yE="职业",vE="兴趣爱好",bE={"Network is slow, enable offline mode?":"网络连接较慢,是否启用离线模式?","Enable offline mode":"启用离线模式","Modification successful":"修改成功",Failed:yx,"Say Hi":"Hi",Add:vx,"Please select at least one member":"请至少选择一名成员","Group created":"群组已创建","Create Group":"创建群组","Group Name":"群组名称","Group Name is required":"请填写群组名称","Loading...":"加载中...",Create:bx,Message:Px,Study:wx,Discover:Cx,Me:Ax,"Find Friend":"查找好友","Input Username":"输入用户名","my account: ":"我的账号: ","Already Applied":"已发送申请","User is blocked":"该用户已被屏蔽","Group updated":"群组已更新","Update Group":"更新群组",Update:Sx,"Tree Hole":"树洞",Chat:Tx,Contacts:kx,"Remove Contact":"移除联系人","Exit Group":"退出群组","Chat Settings":"聊天设置","Awaiting friend confirmation":"等待对方确认","Revision failed":"润色失败","Please use English":"请使用英语","Speech recognition failed. Please try again.":"语音识别失败,请重试。","analyzing...":"正在分析...","Loading profiles...":"正在加载个人资料...","Add Friend":"添加好友",Logout:$x,"Copied username to clipboard":"用户名已复制到剪贴板","Switch Identity":"切换身份",Function:"功能",Quote:Rx,"Instructions(Optional)":"说明(可选)","joined the room":"已加入房间","left the room":"已离开房间",View:xx,Recall:Ex,"Hide Translation":"隐藏翻译",Translate:Mx,Collapse:Lx,"Before you accept, she won’t know you've seen any messages.":"在你接受之前,她不会知道你已查看任何消息。","Allow {{name}} to send you messages and share your name and profile picture?":"允许 {{name}} 向你发送消息,并查看你的姓名和头像吗?","Not logged in":"未登录","User Name":"用户名",copy:Nx,"PChip Reader":"PChip 阅读器",male:Fx,female:Ix,"popular neutral":"热门(中性)",seconds:Ux,"Send Code":"发送验证码","Add Profile":"添加个人资料",Practitioner:Ox,"I want to practice languages and chat with others":"我想练习语言并与他人交流",Mate:Dx,"I can guide language learning and provide companionship":"我可以指导语言学习并提供陪伴","Unknown error":"未知错误",English:Bx,Chinese:Vx,Spanish:Gx,Korean:jx,French:zx,Japanese:_x,German:Hx,Arabic:Qx,Translation:Kx,Interpretation:Jx,"Key Vocabulary & Terms":"重点词汇与术语",Grammar:Wx,DM_ACL_REJECT:qx,GROUP_ACL_REJECT:Xx,"coming soon":"敬请期待","This feature is under":"该功能正在",development:Yx,Back:Zx,"Search contacts or groups":"搜索联系人或群组",Groups:eE,"No Results":"未找到结果","No Chats":"暂无聊天",ParrotMate:tE,"Speak Different":"说得与众不同","Offline mode":"离线模式","Change nickname":"修改昵称","UI Language":"界面语言",Word:nE,Date:"日期","My bookshelf":"我的书架","Title too short":"标题太短","No books in your shelf yet":"书架中还没有书籍","Tap the search icon above to browse books and add them to your shelf!":"点击上方的搜索图标,浏览书籍并将它们加入书架!","Read with experts to help you understand,":"与专家一同阅读,帮助你更好地理解,","Comprehensive training in English listening and reading.":"全面提升英语听力与阅读能力。","Hi, {{nickName}}! Welcome!":"嗨,{{nickName}}!欢迎!","Browse library":"浏览书库","Add your own TXT/PDF":"添加您自己的 TXT/PDF 文件","Already have an account?":"已有账号?","Click here to login":"点击此处登录","We detected this is your first time using PChip Reader. Add some books!":"我们检测到这是您第一次使用 PChip Reader。快添加几本书吧!","Upload Book":"上传书籍","Click here to upload local EPUB/MOBI/PDF/TXT":"点击此处上传本地 EPUB/MOBI/PDF/TXT 文件","Only EPUB/MOBI/PDF/TXT is supported":"仅支持 EPUB、MOBI、PDF 和 TXT 格式","Upload successful":"上传成功","Book upload failed":"书籍上传失败","We only store your files locally!":"我们仅在本地存储您的文件!","New words":"生词","Total reading":"累计阅读","Today's reading":"今日阅读","Please choose an image file":"请选择图片文件","Image sent":"图片已发送","Failed to upload image":"图片上传失败","analyzing grammar structure":"正在分析语法结构","understanding pronunciation":"正在分析发音","optimizing and restructuring":"正在优化与重组","My QR Code":"我的二维码","Let friends scan to fill your username automatically":"让好友扫码即可自动填写你的用户名","Unable to load image":"无法加载图片","Loading image...":"正在加载图片...","Shared image":"已分享的图片","QR scanning is unavailable in this environment":"当前环境不支持二维码扫描","Camera access is not supported on this device":"此设备不支持相机访问","Unable to access the camera":"无法访问相机","No QR code found in the selected image":"所选图片中未发现二维码","Unable to read QR code from the selected image":"无法从所选图片读取二维码","Username captured from QR code":"已从二维码识别出用户名","Initializing camera...":"正在初始化相机...","Scan QR Code":"扫描二维码","Align the QR code within the frame to capture a username automatically.":"将二维码对准框内,即可自动识别并填写用户名。","Login Success":"登录成功","please enter your phone number":"请输入您的手机号码","Please enter your phone number":"请输入您的手机号码",Login:aE,"Terms&Conditions":"服务条款",and:oE,"Privacy Policy":"隐私政策","Unregistered phone numbers will automatically create an account":"未注册的手机号将自动创建账号","Please enter the verification code":"请输入验证码","Send verification code":"发送验证码","Please enter the correct phone number":"请输入正确的手机号码","Verification code sent":"验证码已发送",Language:iE,Skip:rE,Continue:sE,"Are you 18 or older?":"您是否已满18岁?",Yes:lE,No:cE,"Please select language what you want to learn":"请选择您想学习的语言","Please enter your age":"请输入您的年龄",Age:uE,"Please select your gender":"请选择您的性别",Female:dE,Male:hE,"Your {{langShort}} name":"您的{{langShort}}名字","Create your own name or choose from the recommendations":"您可以自创名字,或从推荐中选择","Enter your nickname here...":"在此输入您的昵称...","Learning Language":"学习语言",Finish:fE,"Nickname is required":"请填写昵称","Nickname must be at least 3 characters":"昵称至少需要 3 个字符",Confirm:pE,"Account Phone":"账号手机号",Gender:mE,Education:gE,Job:yE,Hobby:vE,"Select your role":"请选择您的角色","Please choose your identity":"请选择您的身份","Profile Step: Nickname":"昵称","Profile Step: Learning Language":"学习的语言","Profile Step: Mother Tongue":"母语","By signing up, you agree with ":"注册即表示您同意 "},PE="秒",wE="導師",CE="語言夥伴",AE="英文",SE="中文",TE="西班牙語",kE="韓語",$E="法語",RE="日語",xE="德語",EE="阿拉伯語",ME="翻譯",LE="解釋",NE="文法",FE="請先等待對方回覆,才能繼續私訊。",IE="您還未加入此群組,請等待群主批准您的加入申請。",UE="聊天",OE="聯絡人",DE="登出",BE="引用",VE="查看",GE="收回",jE="翻譯",zE="收合",_E="訊息",HE="學習",QE="發現",KE="我",JE="開發中",WE="返回",qE="群組",XE="加入好友",YE="操作失敗",ZE="建立",eM="更新",tM="ParrotMate",nM="複製",aM="男性",oM="女性",iM="單字",rM="登入",sM="以及",lM="語言",cM="跳過",uM="繼續",dM="是",hM="否",fM="年齡",pM="女性",mM="男性",gM="完成",yM="確認",vM="性別",bM="學歷",PM="職業",wM="興趣",CM={seconds:PE,"Send Code":"發送驗證碼","Add Profile":"新增個人檔案",Practitioner:wE,"I want to practice languages and chat with others":"我想練習語言並與他人聊天",Mate:CE,"I can guide language learning and provide companionship":"我可以協助語言學習並提供陪伴","Unknown error":"發生未知錯誤",English:AE,Chinese:SE,Spanish:TE,Korean:kE,French:$E,Japanese:RE,German:xE,Arabic:EE,Translation:ME,Interpretation:LE,"Key Vocabulary & Terms":"重點詞彙與術語",Grammar:NE,DM_ACL_REJECT:FE,GROUP_ACL_REJECT:IE,"Tree Hole":"樹洞",Chat:UE,Contacts:OE,"Remove Contact":"移除聯絡人","Exit Group":"離開群組","Chat Settings":"聊天設定","Awaiting friend confirmation":"等待好友確認","Revision failed":"修正失敗","Please use English":"請使用英文","Speech recognition failed. Please try again.":"語音辨識失敗,請再試一次。","analyzing...":"分析中...","Loading profiles...":"正在載入個人檔案...","Add Friend":"新增好友","Create Group":"建立群組",Logout:DE,"Copied username to clipboard":"已將使用者名稱複製到剪貼簿","Switch Identity":"切換身分",Function:"功能",Quote:BE,"Instructions(Optional)":"說明(選填)","joined the room":"已加入房間","left the room":"已離開房間",View:VE,Recall:GE,"Hide Translation":"隱藏翻譯",Translate:jE,Collapse:zE,"Before you accept, she won’t know you've seen any messages.":"在你接受前,對方不會知道你已讀任何訊息。","Allow {{name}} to send you messages and share your name and profile picture?":"允許 {{name}} 向你發送訊息,並查看你的姓名與頭像嗎?",Message:_E,Study:HE,Discover:QE,Me:KE,"coming soon":"即將推出","This feature is under":"此功能正在",development:JE,Back:WE,"Search contacts or groups":"搜尋聯絡人或群組",Groups:qE,"No Results":"沒有搜尋結果","Say Hi":"打個招呼",Add:XE,"Find Friend":"搜尋好友","Input Username":"請輸入使用者名稱","my account: ":"我的帳號: ","Already Applied":"已申請","User is blocked":"該使用者已被封鎖",Failed:YE,"Please select at least one member":"請至少選擇一位成員","Group created":"群組已建立","Group Name":"群組名稱","Group Name is required":"請輸入群組名稱","Loading...":"載入中...",Create:ZE,"Group updated":"群組已更新","Update Group":"更新群組",Update:eM,"No Chats":"尚無對話",ParrotMate:tM,"Speak Different":"用不同的方式說話","Not logged in":"尚未登入","User Name":"使用者名稱",copy:nM,"Network is slow, enable offline mode?":"網路連線較慢,是否要啟用離線模式?","Enable offline mode":"啟用離線模式","PChip Reader":"PChip 閱讀器",male:aM,female:oM,"popular neutral":"熱門/中性","Offline mode":"離線模式","Change nickname":"更改暱稱","UI Language":"介面語言",Word:iM,Date:"日期","My bookshelf":"我的書架","Title too short":"標題太短","Modification successful":"修改成功","No books in your shelf yet":"你的書架尚無書籍","Tap the search icon above to browse books and add them to your shelf!":"點選上方的搜尋圖示,瀏覽書籍並加入至你的書架!","Read with experts to help you understand,":"與專家一同閱讀,幫助你理解,","Comprehensive training in English listening and reading.":"提供全方位的英語聽力與閱讀訓練。","Hi, {{nickName}}! Welcome!":"嗨,{{nickName}}!歡迎!","Browse library":"瀏覽書庫","Add your own TXT/PDF":"新增您自己的 TXT/PDF 檔案","Already have an account?":"已經有帳號了嗎?","Click here to login":"點此登入","We detected this is your first time using PChip Reader. Add some books!":"我們偵測到這是您第一次使用 PChip Reader,快新增幾本書吧!","Upload Book":"上傳書籍","Click here to upload local EPUB/MOBI/PDF/TXT":"點此上傳本機 EPUB/MOBI/PDF/TXT 檔案","Only EPUB/MOBI/PDF/TXT is supported":"僅支援 EPUB/MOBI/PDF/TXT 檔案","Upload successful":"上傳成功","Book upload failed":"書籍上傳失敗","We only store your files locally!":"我們僅在本機儲存您的檔案!","New words":"新單字","Total reading":"累計閱讀","Today's reading":"今日閱讀","Please choose an image file":"請選取圖片檔案","Image sent":"圖片已傳送","Failed to upload image":"圖片上傳失敗","analyzing grammar structure":"正在分析語法結構","understanding pronunciation":"正在分析發音","optimizing and restructuring":"正在優化與重組","My QR Code":"我的 QR 碼","Let friends scan to fill your username automatically":"讓朋友掃描即可自動填入你的使用者名稱","Unable to load image":"無法載入圖片","Loading image...":"正在載入圖片...","Shared image":"分享的圖片","QR scanning is unavailable in this environment":"此環境無法使用 QR 掃描功能","Camera access is not supported on this device":"此裝置不支援相機存取","Unable to access the camera":"無法存取相機","No QR code found in the selected image":"在所選圖片中找不到 QR 碼","Unable to read QR code from the selected image":"無法從所選圖片讀取 QR 碼","Username captured from QR code":"已從 QR 碼擷取到使用者名稱","Initializing camera...":"正在初始化相機...","Scan QR Code":"掃描 QR 碼","Align the QR code within the frame to capture a username automatically.":"將 QR 碼對準框內,即可自動擷取使用者名稱。","Login Success":"登入成功","please enter your phone number":"請輸入您的手機號碼","Please enter your phone number":"請輸入您的手機號碼",Login:rM,"Terms&Conditions":"服務條款",and:sM,"Privacy Policy":"隱私政策","Unregistered phone numbers will automatically create an account":"未註冊的手機號碼將自動建立新帳號","Please enter the verification code":"請輸入驗證碼","Send verification code":"發送驗證碼","Please enter the correct phone number":"請輸入正確的手機號碼","Verification code sent":"驗證碼已發送",Language:lM,Skip:cM,Continue:uM,"Are you 18 or older?":"您是否已滿18歲?",Yes:dM,No:hM,"Please select language what you want to learn":"請選擇您想學習的語言","Please enter your age":"請輸入您的年齡",Age:fM,"Please select your gender":"請選擇您的性別",Female:pM,Male:mM,"Your {{langShort}} name":"您的 {{langShort}} 名稱","Create your own name or choose from the recommendations":"自訂名稱或從建議中選擇","Enter your nickname here...":"在此輸入您的暱稱...","Learning Language":"學習語言",Finish:gM,"Nickname is required":"請填寫暱稱","Nickname must be at least 3 characters":"暱稱至少需 3 個字元",Confirm:yM,"Account Phone":"帳戶電話",Gender:vM,Education:bM,Job:PM,Hobby:wM,"Select your role":"請選擇您的角色","Please choose your identity":"請選擇您的身份","Profile Step: Nickname":"暱稱","Profile Step: Learning Language":"學習語言","Profile Step: Mother Tongue":"母語","By signing up, you agree with ":"註冊即表示您同意 "};$e.use(vm).init({resources:{en:{translation:Fv},"ar-SA":{translation:Tg},"de-DE":{translation:Ry},"el-GR":{translation:M0},"es-ES":{translation:Ob},"fi-FI":{translation:V1},"fil-PH":{translation:zP},"fr-FR":{translation:Qw},"hi-IN":{translation:WC},"ja-JP":{translation:YA},"ko-KR":{translation:tT},"pt-BR":{translation:ok},"pt-PT":{translation:s$},"ru-RU":{translation:u2},"ta-IN":{translation:fR},"uk-UA":{translation:gx},"zh-CN":{translation:bE},"zh-TW":{translation:CM}},supportedLngs:Array.from(ic),fallbackLng:"zh-CN",interpolation:{escapeValue:!1}});const AM=()=>Cm().t,SM="w-[6rem] h-[2.25rem] rounded-[2rem] text-[0.875rem] transition-all",TM="mt-[0.75rem] text-[0.875rem] flex justify-center flex-wrap gap-x-[0.625rem]";z.forwardRef(({value:t,defaultValue:e,onChange:n,name:a,className:o,...i},r)=>{const s=AM(),c=[{title:s("male"),variant:"secondary",names:["Leo","Eric","Jason"]},{title:s("female"),variant:"accent",names:["Lily","Emma","Mia"]},{title:s("popular neutral"),variant:"plain",names:["Alex","Jamie","Taylor"]}],h=t??e??"",l=d=>{n?.({target:{value:d,name:a}})};return oe.jsxs("div",{className:["flex flex-col gap-y-[1.25rem]",o].filter(Boolean).join(" "),children:[oe.jsx("input",{type:"hidden",value:h,name:a,ref:r,...i}),c.map(d=>oe.jsxs("div",{children:[oe.jsx("div",{className:"ml-[3.1rem] text-[1.125rem] text-white",children:d.title}),oe.jsx("div",{className:TM,children:d.names.map(u=>oe.jsx(mo,{className:[SM,h===u?"ring-2 ring-white":""].filter(Boolean).join(" "),variant:d.variant,onClick:()=>l(u),children:u},u))})]},d.title))]})});const kM={light:{primary:"bg-white text-grey90 placeholder-gray-400 focus:border-violet-500"},dark:{primary:"bg-white text-grey90 placeholder-gray-400 focus:border-violet-500"}};z.forwardRef(({type:t="text",multiline:e=!1,value:n,defaultValue:a,variant:o="primary",placeholder:i,disabled:r=!1,onChange:s,onFocus:c,onBlur:h,className:l,id:d,style:u,...f},m)=>{const P=zl(),A=kM[P][o],b={ref:m,value:n,defaultValue:a,placeholder:i,disabled:r,onChange:s,onFocus:c,onBlur:h,id:d,"data-uikit":"input_field",style:u,className:Gt("rounded-xl px-4 py-2 border border-transparent focus:outline-none transition-colors duration-200",A,l),...f};return e?oe.jsx("textarea",{...b}):oe.jsx("input",{type:t,...b})});(process.env.VITE_PUBLIC_PM_STATIC_URL??"https://parrot-static.pmate.chat").replace(/\/+$/,"");const $M=({open:t,onClose:e,children:n,anchor:a="right",className:o,overlayClassName:i,id:r,styles:s})=>{const[c,h]=z.useState(t);z.useEffect(()=>{t&&h(!0)},[t]);const l=()=>{t||h(!1)};if(!c)return null;const d={left:"left-0 top-0 h-full",right:"right-0 top-0 h-full",top:"top-0 left-0 w-full",bottom:"bottom-0 left-0 w-full"}[a],u={left:"-translate-x-full",right:"translate-x-full",top:"-translate-y-full",bottom:"translate-y-full"}[a];return oe.jsx("div",{id:r,"data-uikit":"drawer",className:Gt("fixed inset-0 z-[1002]",i),onClick:e,children:oe.jsx("div",{className:Gt("absolute bg-white transition-transform duration-300",d,t?"translate-x-0 translate-y-0":u,o),style:s,onClick:f=>f.stopPropagation(),onTransitionEnd:l,children:n})})},RM="pointer-events-none absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 rounded-full animate-ping",xM=[{sizeRem:3.2,durationMs:1300,opacity:.3,shadowBlurPx:6},{sizeRem:3.6,durationMs:1600,delayMs:200,opacity:.25,shadowBlurPx:8},{sizeRem:3.8,durationMs:1900,delayMs:400,opacity:.2,shadowBlurPx:10}],EM=(t,e=1)=>{const n=t.startsWith("#")?t.slice(1):null;if(!n)return t;const a=n.length===3?n.split("").map(s=>s+s).join(""):n;if(a.length!==6)return t;const[o,i,r]=[a.slice(0,2),a.slice(2,4),a.slice(4,6)].map(s=>parseInt(s,16));return`rgba(${o}, ${i}, ${r}, ${e})`},MM=z.memo(({color:t="#9C6BFF",rings:e=xM,ringClassName:n})=>oe.jsx(oe.Fragment,{children:e.map((a,o)=>oe.jsx("span",{"aria-hidden":!0,className:Gt(RM,n),style:{width:`${a.sizeRem}rem`,height:`${a.sizeRem}rem`,animationDuration:`${a.durationMs}ms`,animationDelay:a.delayMs!==void 0?`${a.delayMs}ms`:void 0,backgroundColor:EM(t,a.opacity),filter:`drop-shadow(0 0 ${a.shadowBlurPx??6}px ${t})`}},o))}));MM.displayName="PulseRings";const LM=(t,e={isValid:void 0,placeHolderBehavior:"pending"})=>{const n=we.atom(async a=>{try{const o=await t(a);return kc(o)?o:typeof o>"u"||o===null||e?.isValid&&!e.isValid(o)?le.Nothing():le.Just(o)}catch(o){return le.Fail(o)}});return nu(n,a=>{const{placeHolderBehavior:o,placeHolderValue:i}=e;return i?le.Pending(i):o==="stale"&&a?.isJust()?le.Pending(a.unwrap()):le.Pending()})},NM=LM(async t=>{t(ga);const n=await De.get(Ke()).getAccountState();if(!n)return[];try{return await _e.getProfiles(n)}catch{return[]}}),FM=we.atom(null,async(t,e,n,a)=>{const o=t(ya),i=o&&o.id===n?o:await t(cs(n));if(!i)return;await _e.updateProfile({profileId:i.id,...a});const r=Ke(i.app),s=De.get(r),c={...i,...a};o&&o.id===n&&s.setSelectedProfile(c),await s.getProfiles()}),IM=we.atom(null,async()=>De.get(Ke()).login()),UM=we.atom(null,async()=>{try{return await Ze.session()}catch{return null}}),Jl=we.atom(null,async()=>{await De.get(Ke()).logout()}),OM=we.atom(t=>{const e=t(ya);return Co(e?.motherTongue,"zh-CN")}),DM=we.atom(t=>{const e=t(ya);return Co(e?.learningTargetLang)});var on=(t=>(t.USER_SETTINGS="user-settings",t))(on||{});const Or=bo.atomFamily(t=>we.atom(void 0)),Yn=bo.atomFamily(t=>we.atom(e=>{const n=e(Or(t));if(n)return n;try{const a=localStorage.getItem(t);return a?JSON.parse(a):null}catch{return null}},(e,n,a)=>{localStorage.setItem(t,JSON.stringify(a)),n(Or(t),a)})),Dr={intensive:!1,bilingual:!0,fontColor:"#000000",backgroundColor:"white",books:[],advancedMode:!1,autoread:!0,playSpeed:1,scrollDirection:"vertical",companion:"",difficulty:Zr.Medium,"chatVoice@v2":Et.KOKORO_af_alloy,uiLang:"zh-CN",motherTongue:"zh-CN"},ja=new Map,BM=t=>{if(ja.has(t))return ja.get(t);const e=we.atom(n=>{const a=n(Yn(on.USER_SETTINGS));return a&&t in a?a[t]:Dr[t]},(n,a,o)=>{const r={...n(Yn(on.USER_SETTINGS))??Dr,[t]:o};a(Yn(on.USER_SETTINGS),r)});return ja.set(t,e),e};var VM=function(t){z.useEffect(t,[])};const GM=async({app:t,behaviors:e})=>{const n=De.get(t);if(e.requiresAuth===!1)return n.getSnapshot();try{if(await n.loginUrlSessionOverride()){const o=await n.getProfiles();o.length>0&&n.setSelectedProfile(o[0].id)}return n.getSnapshot()}catch(a){return console.error(a),n.getSnapshot()}},jM=({app:t,behaviors:e})=>{const[n,a]=z.useState(!0),[o,i]=z.useState({state:Ee.Idle,profiles:[],profile:null,accountId:null,account:null,error:null});return VM(()=>{(async()=>{a(!0);const s=await GM({app:t,behaviors:e});i(s),a(!1)})()}),{loading:n,snapshot:o}},Br="https://auth.pmate.chat";class Zn{static toLogin(e,n){if(typeof window>"u")return;const a=new URL(Br);a.searchParams.set("redirect",n??window.location.href),a.searchParams.set("app",e),window.location.href=a.toString()}static toCreateProfile(e,n){if(typeof window>"u")return;const a=new URL("/create-profile",Br);a.searchParams.set("redirect",n??window.location.href),a.searchParams.set("app",e),window.location.href=a.toString()}}class Wl extends Error{}const zM=(t,e)=>{const n=t?.find(i=>{const r=typeof i=="string"?i:i.path;return pa.matchPath({path:r,end:!0},e)});return{authBehavior:n&&typeof n!="string"?n.behavior??"prompt":"prompt",requiresAuth:!!n}},_M=({app:t,authRoutes:e,rtcProvider:n,children:a})=>{const o=pa.useLocation(),[i,r]=z.useState(!1),[s,c]=z.useState(!1),{authBehavior:h,requiresAuth:l}=zM(e,o.pathname),{loading:d,snapshot:u}=jM({app:t,behaviors:{requiresAuth:l}}),f=u.error,m=u.state===Ee.Idle?null:!!u.account;z.useEffect(()=>{if(!(!l||d)){if(u.account&&u.profiles.length===0&&o.pathname!=="/create-profile"){Zn.toCreateProfile(t);return}!u.account&&h==="redirect"&&Zn.toLogin(t)}},[t,h,d,o.pathname,l,u.account,u.profiles.length]),z.useEffect(()=>{d||r(l&&!u.account&&h==="prompt")},[h,d,l,u.account]),z.useEffect(()=>{f||c(!1)},[f]);const P=()=>{if(r(!1),window.history.length>1){window.history.back();return}};if(d&&l)return null;if(f&&l&&!s)return oe.jsx("div",{className:"flex min-h-screen items-center justify-center bg-slate-50 p-6",children:oe.jsxs("div",{className:"w-full max-w-md rounded-xl border border-rose-200 bg-white p-6 shadow-sm",children:[oe.jsx("div",{className:"text-sm font-semibold text-rose-600",children:"Login failed"}),oe.jsx("p",{className:"mt-2 text-sm text-slate-600",children:"We could not restore your session. Please try again."}),oe.jsx("div",{className:"mt-3 text-xs text-rose-500",children:f.message}),oe.jsx("div",{className:"mt-4 flex flex-wrap gap-3",children:oe.jsx("button",{className:"rounded-md bg-rose-600 px-3 py-1.5 text-sm font-medium text-white hover:bg-rose-700",type:"button",onClick:()=>window.location.reload(),children:"Reload"})})]})});if(l&&m===null)return null;if(l&&m===!1&&h==="prompt")return oe.jsx($M,{open:i,onClose:P,anchor:"bottom",overlayClassName:"bg-black/40",children:oe.jsxs("div",{className:"rounded-t-2xl px-6 pb-6 pt-4",children:[oe.jsx("div",{className:"mx-auto mb-3 h-1.5 w-12 rounded-full bg-slate-200"}),oe.jsx("div",{className:"text-lg font-semibold text-slate-900",children:"You need login to continue ?"}),oe.jsxs("div",{className:"mt-5 flex items-center justify-end gap-3",children:[oe.jsx(mo,{type:"button",variant:"plain",className:"min-w-[96px] justify-center",onClick:P,children:"Back"}),oe.jsx(mo,{type:"button",className:"min-w-[96px] justify-center",onClick:()=>Zn.toLogin(t),children:"Login"})]})]})});if(!l)return a;const A=n??(({children:b})=>oe.jsx(oe.Fragment,{children:b}));return oe.jsx(QM,{children:oe.jsx(A,{children:a})})};class HM extends z.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e){if(e instanceof Wl){this.props.onAuthError().then(()=>{this.setState({hasError:!1})});return}console.error(e)}render(){return this.state.hasError?null:this.props.children}}const QM=({children:t})=>{const e=pa.useNavigate(),n=we.useSetAtom(Jl),a=z.useCallback(async()=>{await n(),e("/login",{replace:!0})},[n,e]);return oe.jsx(HM,{onAuthError:a,children:t})},Vr="https://parrot-static.pmate.chat",Vt="@pmate/chat",KM="shuang",za={[Vt]:{name:"Parrot Mate",icon:`${Vr}/parrot-logo.png`,background:"linear-gradient(135deg, #F472B6 0%, #8B5CF6 100%)",welcomeText:"Welcome!Parrot mate",profiles:[{type:"learning-language",title:"Learning Language",required:!0},{type:"nickname",title:"Nickname",required:!0}]},[KM]:{name:"爽歪歪大王恋爱聊天机器人",icon:`${Vr}/shuang.webp`,background:"linear-gradient(180deg, #3b2ea8 0%, #0b0b0b 100%)",welcomeText:"欢迎来到爽歪歪大王恋爱聊天机器人~先选择角色开始聊天吧。",profiles:[{type:"gender",title:"您的性别",required:!0},{type:"is-adult",title:"是否成年",required:!0}]}},oi=t=>{const e=t??Vt,n=za[e]??za[Vt];return{id:za[e]?e:Vt,...n}},Gr="learning-language",JM=({params:t})=>{const e=t.get("app"),n=t.get("redirect"),a=z.useMemo(()=>oi(e),[e]),o=z.useMemo(()=>a.profiles.map(m=>m.type),[a.profiles]),i=t.get("step"),r=o.find(m=>m===i)??null,s=o[0]??Gr,c=r??s,h=z.useMemo(()=>o.length>0?o:[Gr],[o]),l=h.indexOf(c),d=l>=0?h[l+1]:void 0,u=h.includes(c),f=z.useCallback(m=>{const P=new URLSearchParams;return P.set("step",m),e&&P.set("app",e),n&&P.set("redirect",n),`/create-profile?${P.toString()}`},[e,n]);return{activeStep:c,appProfileSteps:o,buildStepUrl:f,createSteps:h,isCreateFlowStep:u,nextStep:d}},WM="https://auth.pmate.chat",qM=()=>typeof window>"u"?"":window.location.href,XM=(t={})=>{const e=Ke(t.app??Vt),n=z.useMemo(()=>t.redirect??qM(),[t.redirect]),a=z.useCallback((P="/",A={})=>{const b=A.redirect??n,E=A.app??e,T=new URL(P,WM);return b&&T.searchParams.set("redirect",b),E&&T.searchParams.set("app",E),T.toString()},[e,n]),o=z.useCallback((P,A={})=>{const b=new URL(a(P,A));return A.step&&b.searchParams.set("step",A.step),b.toString()},[a]),i=z.useCallback(P=>a("/logout",P),[a]),r=z.useCallback(P=>a("/",P),[a]),s=z.useCallback(P=>o("/create-profile",P),[o]),c=z.useCallback(P=>a("/select-profile",P),[a]),h=z.useCallback(P=>o("/edit-profile",P),[o]),l=z.useCallback(P=>{typeof window>"u"||window.location.assign(r(P))},[r]),d=z.useCallback(P=>{typeof window>"u"||window.location.assign(i(P))},[i]),u=z.useCallback(P=>{typeof window>"u"||window.location.assign(s(P))},[s]),f=z.useCallback(P=>{typeof window>"u"||window.location.assign(c(P))},[c]),m=z.useCallback(P=>{typeof window>"u"||window.location.assign(h(P))},[h]);return{app:e,login:l,logout:d,selectProfile:f,createProfile:u,updateProfile:m}},YM=()=>{const[t]=pa.useSearchParams(),e=t.get("app");return z.useMemo(()=>({background:oi(e).background}),[e])};exports.AccountManagerEvent=ss;exports.AccountManagerV2=De;exports.AccountService=Ze;exports.Api=Dt;exports.AuthProviderV2=_M;exports.DEFAULT_APP_ID=Vt;exports.EntityService=rn;exports.LSKEYS=on;exports.NotAuthenticatedError=Wl;exports.ProfileService=_e;exports.Redirect=Zn;exports.accountAtom=ga;exports.accountStateAtom=Uc;exports.createProfileAtom=Hc;exports.getAppConfig=oi;exports.getLangFull=cc;exports.isNicknameValid=lc;exports.learningLangAtom=DM;exports.legacyLangMap=sc;exports.localStorageJsonAtom=Yn;exports.loginAtom=IM;exports.motherTongueAtom=OM;exports.normalizeLang=Co;exports.profileAtom=ya;exports.profileByIdAtom=cs;exports.profileDraftAtom=ls;exports.profilesAtom=NM;exports.resolveAppId=Ke;exports.sessionCheckAtom=UM;exports.switchProfileAtom=_c;exports.updateProfileAtom=FM;exports.uploadAvatarAtom=Fc;exports.useAppBackgroundStyle=YM;exports.useAuthApp=XM;exports.useProfileStepFlow=JM;exports.userLogoutAtom=Jl;exports.userSettingsAtom=BM;
21
+ `).filter(Boolean).map(r=>JSON.parse(r));return de.Just(i)}catch{return de.Nothing()}}return a.ok?n==="text"?a.text():await a.json():null}catch(a){return console.warn(a),null}}static exists(e){return Ec(e)}}const Sa="https://auth-api-v2.pmate.chat",Mc="https://fc-uploader.skedo.cn".replace(/\/+$/,""),Lc={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",webp:"image/webp",gif:"image/gif",svg:"image/svg+xml",ico:"image/x-icon",bmp:"image/bmp",pdf:"application/pdf",mobi:"application/x-mobipocket-ebook",epub:"application/epub+zip",txt:"text/plain",json:"application/json",mp3:"audio/mpeg",wav:"audio/wav",webm:"audio/webm",weba:"audio/webm",m4a:"audio/mp4"};class _e{static async createProfile(e){return Dt.post(`${Sa}/profile`,e)}static async updateProfile(e){await Dt.put(`${Sa}/profile`,e)}static async getProfiles(e){const n={app:Ke(e.app),account:e.accountId};return _e.getProfilesByScope(n)}static async getProfilesByScope(e){const n=new URLSearchParams({app:e.app,account:e.account}).toString();return await Dt.get(`${Sa}/profiles?${n}`)||[]}static async updateAvatar(e){return _e.uploadToUploaderService("/avatar",e)}static async uploadMsgImage(e){return _e.uploadToUploaderService("/msg",e)}static async updateMyVoice(e){return _e.uploadToUploaderService("/my-voice",{...e,filename:"voice.wav",contentType:"audio/wav"})}static async uploadUserFile(e){return _e.uploadToUploaderService("/file",e)}static async uploadToUploaderService(e,n){const{filename:a,...o}=n,i=a??"upload",r=i.split(".").pop()?.toLowerCase()??"",s=n.contentType??Lc[r],c=await fetch(`${Mc}${e}`,{method:"POST",headers:{"Content-Type":"application/json",...s?{"x-file-content-type":s}:{}},body:JSON.stringify({...o,filename:i})});if(!c.ok)throw new Error("Upload failed");const h=await c.json();if(!h.data)throw new Error("Upload failed");return h.data}}const Nc=t=>new Promise((e,n)=>{const a=new FileReader;a.onloadend=()=>{const o=a.result;if(typeof o!="string"){n(new Error("Failed to read file"));return}const[,i]=o.split(",");if(!i){n(new Error("Failed to parse base64 data"));return}e(i)},a.onerror=()=>{n(new Error("Failed to read file"))},a.readAsDataURL(t)}),Fc=we.atom(null,async(t,e,{file:n,userId:a})=>{const o=await Te(n,{maxSizeMB:1,maxWidthOrHeight:128,useWebWorker:!0}),i=await Nc(o);return _e.updateAvatar({user:a,base64:i,filename:o.name})});var Ee=(t=>(t.Idle="idle",t.Checking="checking",t.Authenticated="authenticated",t.Unauthenticated="unauthenticated",t.ProfileUninitialized="profile-uninitialized",t.ProfileInitializing="profile-initializing",t.ProfileReady="profile-ready",t.LoggingIn="logging-in",t.LoggingOut="logging-out",t.Error="error",t))(Ee||{});const Ic={state:Ee.Idle,profiles:[],profile:null,accountId:null,account:null,error:null},ga=we.atom(Ic),Uc=we.atom(t=>t(ga).account??void 0),ya=we.atom(t=>t(ga).profile??void 0),Ao="pmate-auth-token",So=()=>typeof localStorage<"u",Yt=()=>{if(!So())return null;try{const t=localStorage.getItem(Ao);if(!t)return null;const e=JSON.parse(t);return typeof e=="string"?e:null}catch{return null}},Oc=t=>{if(So())try{localStorage.setItem(Ao,JSON.stringify(t))}catch{}},Dc=()=>{if(So())try{localStorage.removeItem(Ao)}catch{}},Bc="https://auth-api-v2.pmate.chat";class Ze{static sessionCached=dc(e=>Ze.authRequest("/session",{method:"GET",token:e}),{ttl:3e3,key:e=>e??Yt()??"default"});static async vcode(e){return Ze.authRequest("/vcode",{method:"POST",body:JSON.stringify(e)})}static async login(e){return Ze.authRequest("/login",{method:"POST",body:JSON.stringify(e),token:e.nonce})}static async logout(e){return Ze.authRequest("/logout",{method:"POST",token:e})}static async session(e){return Ze.sessionCached(e)}static async authRequest(e,n){const{token:a,headers:o,...i}=n,r=a??Yt(),s=await fetch(`${Bc.replace(/\/+$/,"")}${e}`,{credentials:"include",...i,headers:{"Content-Type":"application/json",...r?{Authorization:`Bearer ${r}`}:{},...o??{}}}),c=await s.json();if(!s.ok||!c.success)throw c;return c.data}}const si="https://api-global-qa.skedo.cn/account";class rn{static async entity(e){return await Dt.get(`${si}/entity/${e}`)||null}static getProfile(e){return rn.entity(e)}static getGroup(e){return rn.entity(e)}static async entities(e){if(!e.length)return{};const n=`${si}/entities`;return(await Dt.post(n,{ids:e})||[]).reduce((o,i,r)=>{if(!i)return o;const s=i.id??e[r];return s&&(o[s]=i),o},{})}}const is="account-state",rs=()=>typeof localStorage<"u",Vc=t=>{if(rs())try{localStorage.setItem(is,JSON.stringify(t))}catch{}},Gc=()=>{if(rs())try{localStorage.removeItem(is)}catch{}},To="selected-profile",ko=()=>typeof localStorage<"u",li=()=>{if(!ko())return null;try{const t=localStorage.getItem(To);if(!t)return null;const e=JSON.parse(t);return typeof e=="string"?e:null}catch{return null}},jc=t=>{if(ko())try{localStorage.setItem(To,JSON.stringify(t))}catch{}},zc=()=>{if(ko())try{localStorage.removeItem(To)}catch{}};var ss=(t=>(t.StateChange="stateChange",t))(ss||{});class De extends Tc{constructor(e){super(),this.app=e}static instances=new Map;static get(e){const n=Ke(e),a=De.instances.get(n);if(a)return a;const o=new De(n);return De.instances.set(n,o),o}async session(){try{return await Ze.session()}catch{return null}}async login(){this.transition(Ee.LoggingIn,null);try{const e=await Ze.session();if(!e)throw new Error("Session not found");const n=Date.parse(e.issuedAt),a={accountId:e.identity.accountId,token:"",signTime:Number.isNaN(n)?Date.now():n,app:this.app};this.setAccountState(a),this.transition(Ee.Authenticated,null),this.transition(Ee.ProfileInitializing,null);const o=await this.prepareProfiles(a);return this.transition(o.length>0?Ee.ProfileReady:Ee.ProfileUninitialized,null),a}catch(e){const n=e instanceof Error?e:new Error("Login failed");throw this.transition(Ee.Error,n),n}}hasUrlSession(){return typeof window>"u"?!1:new URLSearchParams(window.location.search).has("sessionId")}async loginUrlSessionOverride(){if(typeof window>"u")return this.login();const e=new URLSearchParams(window.location.search),n=e.get("sessionId");n&&this.setAuthToken(n);const a=await this.login();if(n){e.delete("sessionId");const o=e.toString(),i=`${window.location.pathname}${o?`?${o}`:""}${window.location.hash}`;window.history.replaceState(null,"",i)}return a}async logout(){this.transition(Ee.LoggingOut,null);try{await Ze.logout(Yt()||void 0)}catch{}finally{this.clearSession(),this.transition(Ee.Unauthenticated,null)}}async getSnapshot(){const e=await this.getAccountState();if(!e)return{state:Ee.Unauthenticated,account:null,accountId:null,error:null,profiles:[],profile:null};const n=await this.getProfiles(),a=await this.getSelectedProfile(n);return{state:n.length>0?Ee.ProfileReady:Ee.ProfileUninitialized,account:e,accountId:e.accountId??null,error:null,profiles:n,profile:a}}transition(e,n){this.emit("stateChange")}async getAccountState(){const e=await this.session();if(!e)return null;const n=Date.parse(e.issuedAt);return{accountId:e.identity.accountId,token:Yt()||"",signTime:Number.isNaN(n)?Date.now():n,app:this.app}}setAccountState(e){Vc(e)}clearAccountState(){Gc()}async getSelectedProfile(e){const n=li();return n?(e??await this.getProfiles()).find(o=>o.id===n)??null:null}setSelectedProfile(e){const n=typeof e=="string"?e:e.id;jc(n),this.emit("stateChange")}clearSelectedProfile(){zc(),this.emit("stateChange")}async getProfiles(){const e=await this.getAccountState();if(!e)return[];try{return await this.prepareProfiles(e)}catch{return[]}}clearProfiles(){this.emit("stateChange")}clearSession(){this.clearAccountState(),this.clearSelectedProfile(),this.clearProfiles(),this.clearAuthToken()}getAuthToken(){return Yt()}setAuthToken(e){Oc(e)}clearAuthToken(){Dc()}async getLocalProfile(){const e=await this.getAccountState(),n=await this.getSelectedProfile();if(!e||!n)return null;const{id:a,...o}=n;return{...e,...o,id:a}}async getCurrentPeer(){const e=await this.getLocalProfile();if(e)return{...e,gender:e.gender??"",email:e.email||"",isOnline:!0}}async createProfile(e){const n=await this.getAccountState();if(!n)throw new Error("Account info is missing for profile creation");const a=await _e.createProfile({app:Ke(n.app),account:n.accountId,nickName:e.nickName,learningTargetLang:e.learningTargetLang});return await this.prepareProfiles(n),await this.getSelectedProfile()||this.setSelectedProfile(a),a}async prepareProfiles(e){const n=await _e.getProfiles(e),a=li();if(a&&n.some(i=>i.id===a))return n;const o=n[0];return o?this.setSelectedProfile(o):this.clearSelectedProfile(),n}}const _c=we.atom(null,(t,e,n)=>{const a=Ke(n.app);De.get(a).setSelectedProfile(n)}),ls=we.atom({}),Hc=we.atom(null,async(t,e,{nickName:n})=>{const a=t(ls),i=await De.get(Ke()).getAccountState();if(!i)throw new Error("Account info is missing for profile creation");return De.get(Ke(i.app)).createProfile({nickName:n,learningTargetLang:a.learningTargetLang})}),Qc={};let Kc=0;function Zt(t,e){const n=`atom${++Kc}`,a={toString(){return(Qc?"production":void 0)!=="production"&&this.debugLabel?n+":"+this.debugLabel:n}};return typeof t=="function"?a.read=t:(a.init=t,a.read=Jc,a.write=Wc),e&&(a.write=e),a}function Jc(t){return t(this)}function Wc(t,e,n){return e(this,typeof n=="function"?n(t(this)):n)}const sn={},qc=t=>typeof t?.then=="function";function Xc(t=()=>{try{return window.localStorage}catch(n){(sn?"production":void 0)!=="production"&&typeof window<"u"&&console.warn(n);return}},e){var n;let a,o;const i={getItem:(c,h)=>{var l,d;const u=m=>{if(m=m||"",a!==m){try{o=JSON.parse(m,e?.reviver)}catch{return h}a=m}return o},f=(d=(l=t())==null?void 0:l.getItem(c))!=null?d:null;return qc(f)?f.then(u):u(f)},setItem:(c,h)=>{var l;return(l=t())==null?void 0:l.setItem(c,JSON.stringify(h,void 0))},removeItem:c=>{var h;return(h=t())==null?void 0:h.removeItem(c)}},r=c=>(h,l,d)=>c(h,u=>{let f;try{f=JSON.parse(u||"")}catch{f=d}l(f)});let s;try{s=(n=t())==null?void 0:n.subscribe}catch{}return!s&&typeof window<"u"&&typeof window.addEventListener=="function"&&window.Storage&&(s=(c,h)=>{if(!(t()instanceof window.Storage))return()=>{};const l=d=>{d.storageArea===t()&&d.key===c&&h(d.newValue)};return window.addEventListener("storage",l),()=>{window.removeEventListener("storage",l)}}),s&&(i.subscribe=r(s)),i}Xc();const ci=(t,e,n)=>(e.has(n)?e:e.set(n,t())).get(n),Yc=new WeakMap,Zc=(t,e,n)=>{const a=ci(()=>new WeakMap,Yc,e);return ci(t,a,n)},eu=t=>typeof t?.then=="function",tu=()=>{};function nu(t,e=tu){return Zc(()=>{const n=new WeakMap,a=new WeakMap,o=Zt([()=>{},0]);o.INTERNAL_onInit=r=>{r.set(o,([,s])=>[()=>r.set(o,([c,h])=>[c,h+1]),s])},(sn?"production":void 0)!=="production"&&(o.debugPrivate=!0);const i=Zt(r=>{const[s]=r(o);let c;try{c=r(i)}catch{}const h=r(t);if(!eu(h))return{v:h};if(h!==c?.p&&h.then(l=>{a.set(h,l),s()},l=>{n.set(h,l),s()}),n.has(h))throw n.get(h);return a.has(h)?{p:h,v:a.get(h)}:c&&"v"in c?{p:h,f:e(c.v),v:c.v}:{p:h,f:e()}});return i.init=void 0,(sn?"production":void 0)!=="production"&&(i.debugPrivate=!0),Zt(r=>{const s=r(i);return"f"in s?s.f:s.v},(r,s,...c)=>s(t,...c))},t,e)}function au(t,e){const n=Zt(0);return(sn?"production":void 0)!=="production"&&(n.debugPrivate=!0),Zt((a,o)=>(a(n),t(a,o)),(a,o,...i)=>{if(i.length===0)o(n,r=>r+1);else if((sn?"production":void 0)!=="production")throw new Error("refresh must be called without arguments")})}const cs=bo.atomFamily(t=>au(async()=>{if(!t)return null;try{return await rn.entity(t)}catch{return null}}));function us(t){var e,n,a="";if(typeof t=="string"||typeof t=="number")a+=t;else if(typeof t=="object")if(Array.isArray(t)){var o=t.length;for(e=0;e<o;e++)t[e]&&(n=us(t[e]))&&(a&&(a+=" "),a+=n)}else for(n in t)t[n]&&(a&&(a+=" "),a+=n);return a}function Gt(){for(var t,e,n=0,a="",o=arguments.length;n<o;n++)(t=arguments[n])&&(e=us(t))&&(a&&(a+=" "),a+=e);return a}const ds=z.createContext({});function ou(t){const e=z.useRef(null);return e.current===null&&(e.current=t()),e.current}const $o=typeof window<"u",iu=$o?z.useLayoutEffect:z.useEffect,Ro=z.createContext(null);function xo(t,e){t.indexOf(e)===-1&&t.push(e)}function Eo(t,e){const n=t.indexOf(e);n>-1&&t.splice(n,1)}const st=(t,e,n)=>n>e?e:n<t?t:n;function Ha(t,e){return e?`${t}. For more information and steps for solving, visit https://motion.dev/troubleshooting/${e}`:t}let Ht=()=>{},lt=()=>{};process.env.NODE_ENV!=="production"&&(Ht=(t,e,n)=>{!t&&typeof console<"u"&&console.warn(Ha(e,n))},lt=(t,e,n)=>{if(!t)throw new Error(Ha(e,n))});const ct={},hs=t=>/^-?(?:\d+(?:\.\d+)?|\.\d+)$/u.test(t);function fs(t){return typeof t=="object"&&t!==null}const ps=t=>/^0[^.\s]+$/u.test(t);function Mo(t){let e;return()=>(e===void 0&&(e=t()),e)}const Qe=t=>t,ru=(t,e)=>n=>e(t(n)),pn=(...t)=>t.reduce(ru),ln=(t,e,n)=>{const a=e-t;return a===0?1:(n-t)/a};class Lo{constructor(){this.subscriptions=[]}add(e){return xo(this.subscriptions,e),()=>Eo(this.subscriptions,e)}notify(e,n,a){const o=this.subscriptions.length;if(o)if(o===1)this.subscriptions[0](e,n,a);else for(let i=0;i<o;i++){const r=this.subscriptions[i];r&&r(e,n,a)}}getSize(){return this.subscriptions.length}clear(){this.subscriptions.length=0}}const et=t=>t*1e3,He=t=>t/1e3;function ms(t,e){return e?t*(1e3/e):0}const ui=new Set;function No(t,e,n){t||ui.has(e)||(console.warn(Ha(e,n)),ui.add(e))}const gs=(t,e,n)=>(((1-3*n+3*e)*t+(3*n-6*e))*t+3*e)*t,su=1e-7,lu=12;function cu(t,e,n,a,o){let i,r,s=0;do r=e+(n-e)/2,i=gs(r,a,o)-t,i>0?n=r:e=r;while(Math.abs(i)>su&&++s<lu);return r}function mn(t,e,n,a){if(t===e&&n===a)return Qe;const o=i=>cu(i,0,1,t,n);return i=>i===0||i===1?i:gs(o(i),e,a)}const ys=t=>e=>e<=.5?t(2*e)/2:(2-t(2*(1-e)))/2,vs=t=>e=>1-t(1-e),bs=mn(.33,1.53,.69,.99),Fo=vs(bs),Ps=ys(Fo),ws=t=>(t*=2)<1?.5*Fo(t):.5*(2-Math.pow(2,-10*(t-1))),Io=t=>1-Math.sin(Math.acos(t)),Cs=vs(Io),As=ys(Io),uu=mn(.42,0,1,1),du=mn(0,0,.58,1),Ss=mn(.42,0,.58,1),hu=t=>Array.isArray(t)&&typeof t[0]!="number",Ts=t=>Array.isArray(t)&&typeof t[0]=="number",di={linear:Qe,easeIn:uu,easeInOut:Ss,easeOut:du,circIn:Io,circInOut:As,circOut:Cs,backIn:Fo,backInOut:Ps,backOut:bs,anticipate:ws},fu=t=>typeof t=="string",hi=t=>{if(Ts(t)){lt(t.length===4,"Cubic bezier arrays must contain four numerical values.","cubic-bezier-length");const[e,n,a,o]=t;return mn(e,n,a,o)}else if(fu(t))return lt(di[t]!==void 0,`Invalid easing type '${t}'`,"invalid-easing-type"),di[t];return t},zn=["setup","read","resolveKeyframes","preUpdate","update","preRender","render","postRender"];function pu(t,e){let n=new Set,a=new Set,o=!1,i=!1;const r=new WeakSet;let s={delta:0,timestamp:0,isProcessing:!1};function c(l){r.has(l)&&(h.schedule(l),t()),l(s)}const h={schedule:(l,d=!1,u=!1)=>{const m=u&&o?n:a;return d&&r.add(l),m.has(l)||m.add(l),l},cancel:l=>{a.delete(l),r.delete(l)},process:l=>{if(s=l,o){i=!0;return}o=!0,[n,a]=[a,n],n.forEach(c),n.clear(),o=!1,i&&(i=!1,h.process(l))}};return h}const mu=40;function ks(t,e){let n=!1,a=!0;const o={delta:0,timestamp:0,isProcessing:!1},i=()=>n=!0,r=zn.reduce((T,S)=>(T[S]=pu(i),T),{}),{setup:s,read:c,resolveKeyframes:h,preUpdate:l,update:d,preRender:u,render:f,postRender:m}=r,P=()=>{const T=ct.useManualTiming?o.timestamp:performance.now();n=!1,ct.useManualTiming||(o.delta=a?1e3/60:Math.max(Math.min(T-o.timestamp,mu),1)),o.timestamp=T,o.isProcessing=!0,s.process(o),c.process(o),h.process(o),l.process(o),d.process(o),u.process(o),f.process(o),m.process(o),o.isProcessing=!1,n&&e&&(a=!1,t(P))},A=()=>{n=!0,a=!0,o.isProcessing||t(P)};return{schedule:zn.reduce((T,S)=>{const M=r[S];return T[S]=(C,F=!1,g=!1)=>(n||A(),M.schedule(C,F,g)),T},{}),cancel:T=>{for(let S=0;S<zn.length;S++)r[zn[S]].cancel(T)},state:o,steps:r}}const{schedule:he,cancel:ft,state:Ae,steps:Ta}=ks(typeof requestAnimationFrame<"u"?requestAnimationFrame:Qe,!0);let Jn;function gu(){Jn=void 0}const Fe={now:()=>(Jn===void 0&&Fe.set(Ae.isProcessing||ct.useManualTiming?Ae.timestamp:performance.now()),Jn),set:t=>{Jn=t,queueMicrotask(gu)}},$s=t=>e=>typeof e=="string"&&e.startsWith(t),Rs=$s("--"),yu=$s("var(--"),Uo=t=>yu(t)?vu.test(t.split("/*")[0].trim()):!1,vu=/var\(--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)$/iu,Qt={test:t=>typeof t=="number",parse:parseFloat,transform:t=>t},cn={...Qt,transform:t=>st(0,1,t)},_n={...Qt,default:1},en=t=>Math.round(t*1e5)/1e5,Oo=/-?(?:\d+(?:\.\d+)?|\.\d+)/gu;function bu(t){return t==null}const Pu=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))$/iu,Do=(t,e)=>n=>!!(typeof n=="string"&&Pu.test(n)&&n.startsWith(t)||e&&!bu(n)&&Object.prototype.hasOwnProperty.call(n,e)),xs=(t,e,n)=>a=>{if(typeof a!="string")return a;const[o,i,r,s]=a.match(Oo);return{[t]:parseFloat(o),[e]:parseFloat(i),[n]:parseFloat(r),alpha:s!==void 0?parseFloat(s):1}},wu=t=>st(0,255,t),ka={...Qt,transform:t=>Math.round(wu(t))},wt={test:Do("rgb","red"),parse:xs("red","green","blue"),transform:({red:t,green:e,blue:n,alpha:a=1})=>"rgba("+ka.transform(t)+", "+ka.transform(e)+", "+ka.transform(n)+", "+en(cn.transform(a))+")"};function Cu(t){let e="",n="",a="",o="";return t.length>5?(e=t.substring(1,3),n=t.substring(3,5),a=t.substring(5,7),o=t.substring(7,9)):(e=t.substring(1,2),n=t.substring(2,3),a=t.substring(3,4),o=t.substring(4,5),e+=e,n+=n,a+=a,o+=o),{red:parseInt(e,16),green:parseInt(n,16),blue:parseInt(a,16),alpha:o?parseInt(o,16)/255:1}}const Qa={test:Do("#"),parse:Cu,transform:wt.transform},gn=t=>({test:e=>typeof e=="string"&&e.endsWith(t)&&e.split(" ").length===1,parse:parseFloat,transform:e=>`${e}${t}`}),ht=gn("deg"),it=gn("%"),Y=gn("px"),Au=gn("vh"),Su=gn("vw"),fi={...it,parse:t=>it.parse(t)/100,transform:t=>it.transform(t*100)},Lt={test:Do("hsl","hue"),parse:xs("hue","saturation","lightness"),transform:({hue:t,saturation:e,lightness:n,alpha:a=1})=>"hsla("+Math.round(t)+", "+it.transform(en(e))+", "+it.transform(en(n))+", "+en(cn.transform(a))+")"},ye={test:t=>wt.test(t)||Qa.test(t)||Lt.test(t),parse:t=>wt.test(t)?wt.parse(t):Lt.test(t)?Lt.parse(t):Qa.parse(t),transform:t=>typeof t=="string"?t:t.hasOwnProperty("red")?wt.transform(t):Lt.transform(t),getAnimatableNone:t=>{const e=ye.parse(t);return e.alpha=0,ye.transform(e)}},Tu=/(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))/giu;function ku(t){return isNaN(t)&&typeof t=="string"&&(t.match(Oo)?.length||0)+(t.match(Tu)?.length||0)>0}const Es="number",Ms="color",$u="var",Ru="var(",pi="${}",xu=/var\s*\(\s*--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)|#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\)|-?(?:\d+(?:\.\d+)?|\.\d+)/giu;function un(t){const e=t.toString(),n=[],a={color:[],number:[],var:[]},o=[];let i=0;const s=e.replace(xu,c=>(ye.test(c)?(a.color.push(i),o.push(Ms),n.push(ye.parse(c))):c.startsWith(Ru)?(a.var.push(i),o.push($u),n.push(c)):(a.number.push(i),o.push(Es),n.push(parseFloat(c))),++i,pi)).split(pi);return{values:n,split:s,indexes:a,types:o}}function Ls(t){return un(t).values}function Ns(t){const{split:e,types:n}=un(t),a=e.length;return o=>{let i="";for(let r=0;r<a;r++)if(i+=e[r],o[r]!==void 0){const s=n[r];s===Es?i+=en(o[r]):s===Ms?i+=ye.transform(o[r]):i+=o[r]}return i}}const Eu=t=>typeof t=="number"?0:ye.test(t)?ye.getAnimatableNone(t):t;function Mu(t){const e=Ls(t);return Ns(t)(e.map(Eu))}const pt={test:ku,parse:Ls,createTransformer:Ns,getAnimatableNone:Mu};function $a(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+(e-t)*6*n:n<1/2?e:n<2/3?t+(e-t)*(2/3-n)*6:t}function Lu({hue:t,saturation:e,lightness:n,alpha:a}){t/=360,e/=100,n/=100;let o=0,i=0,r=0;if(!e)o=i=r=n;else{const s=n<.5?n*(1+e):n+e-n*e,c=2*n-s;o=$a(c,s,t+1/3),i=$a(c,s,t),r=$a(c,s,t-1/3)}return{red:Math.round(o*255),green:Math.round(i*255),blue:Math.round(r*255),alpha:a}}function oa(t,e){return n=>n>0?e:t}const pe=(t,e,n)=>t+(e-t)*n,Ra=(t,e,n)=>{const a=t*t,o=n*(e*e-a)+a;return o<0?0:Math.sqrt(o)},Nu=[Qa,wt,Lt],Fu=t=>Nu.find(e=>e.test(t));function mi(t){const e=Fu(t);if(Ht(!!e,`'${t}' is not an animatable color. Use the equivalent color code instead.`,"color-not-animatable"),!e)return!1;let n=e.parse(t);return e===Lt&&(n=Lu(n)),n}const gi=(t,e)=>{const n=mi(t),a=mi(e);if(!n||!a)return oa(t,e);const o={...n};return i=>(o.red=Ra(n.red,a.red,i),o.green=Ra(n.green,a.green,i),o.blue=Ra(n.blue,a.blue,i),o.alpha=pe(n.alpha,a.alpha,i),wt.transform(o))},Ka=new Set(["none","hidden"]);function Iu(t,e){return Ka.has(t)?n=>n<=0?t:e:n=>n>=1?e:t}function Uu(t,e){return n=>pe(t,e,n)}function Bo(t){return typeof t=="number"?Uu:typeof t=="string"?Uo(t)?oa:ye.test(t)?gi:Bu:Array.isArray(t)?Fs:typeof t=="object"?ye.test(t)?gi:Ou:oa}function Fs(t,e){const n=[...t],a=n.length,o=t.map((i,r)=>Bo(i)(i,e[r]));return i=>{for(let r=0;r<a;r++)n[r]=o[r](i);return n}}function Ou(t,e){const n={...t,...e},a={};for(const o in n)t[o]!==void 0&&e[o]!==void 0&&(a[o]=Bo(t[o])(t[o],e[o]));return o=>{for(const i in a)n[i]=a[i](o);return n}}function Du(t,e){const n=[],a={color:0,var:0,number:0};for(let o=0;o<e.values.length;o++){const i=e.types[o],r=t.indexes[i][a[i]],s=t.values[r]??0;n[o]=s,a[i]++}return n}const Bu=(t,e)=>{const n=pt.createTransformer(e),a=un(t),o=un(e);return a.indexes.var.length===o.indexes.var.length&&a.indexes.color.length===o.indexes.color.length&&a.indexes.number.length>=o.indexes.number.length?Ka.has(t)&&!o.values.length||Ka.has(e)&&!a.values.length?Iu(t,e):pn(Fs(Du(a,o),o.values),n):(Ht(!0,`Complex values '${t}' and '${e}' too different to mix. Ensure all colors are of the same type, and that each contains the same quantity of number and color values. Falling back to instant transition.`,"complex-values-different"),oa(t,e))};function Is(t,e,n){return typeof t=="number"&&typeof e=="number"&&typeof n=="number"?pe(t,e,n):Bo(t)(t,e)}const Vu=t=>{const e=({timestamp:n})=>t(n);return{start:(n=!0)=>he.update(e,n),stop:()=>ft(e),now:()=>Ae.isProcessing?Ae.timestamp:Fe.now()}},Us=(t,e,n=10)=>{let a="";const o=Math.max(Math.round(e/n),2);for(let i=0;i<o;i++)a+=Math.round(t(i/(o-1))*1e4)/1e4+", ";return`linear(${a.substring(0,a.length-2)})`},ia=2e4;function Vo(t){let e=0;const n=50;let a=t.next(e);for(;!a.done&&e<ia;)e+=n,a=t.next(e);return e>=ia?1/0:e}function Gu(t,e=100,n){const a=n({...t,keyframes:[0,e]}),o=Math.min(Vo(a),ia);return{type:"keyframes",ease:i=>a.next(o*i).value/e,duration:He(o)}}const ju=5;function Os(t,e,n){const a=Math.max(e-ju,0);return ms(n-t(a),e-a)}const fe={stiffness:100,damping:10,mass:1,velocity:0,duration:800,bounce:.3,visualDuration:.3,restSpeed:{granular:.01,default:2},restDelta:{granular:.005,default:.5},minDuration:.01,maxDuration:10,minDamping:.05,maxDamping:1},xa=.001;function zu({duration:t=fe.duration,bounce:e=fe.bounce,velocity:n=fe.velocity,mass:a=fe.mass}){let o,i;Ht(t<=et(fe.maxDuration),"Spring duration must be 10 seconds or less","spring-duration-limit");let r=1-e;r=st(fe.minDamping,fe.maxDamping,r),t=st(fe.minDuration,fe.maxDuration,He(t)),r<1?(o=h=>{const l=h*r,d=l*t,u=l-n,f=Ja(h,r),m=Math.exp(-d);return xa-u/f*m},i=h=>{const d=h*r*t,u=d*n+n,f=Math.pow(r,2)*Math.pow(h,2)*t,m=Math.exp(-d),P=Ja(Math.pow(h,2),r);return(-o(h)+xa>0?-1:1)*((u-f)*m)/P}):(o=h=>{const l=Math.exp(-h*t),d=(h-n)*t+1;return-xa+l*d},i=h=>{const l=Math.exp(-h*t),d=(n-h)*(t*t);return l*d});const s=5/t,c=Hu(o,i,s);if(t=et(t),isNaN(c))return{stiffness:fe.stiffness,damping:fe.damping,duration:t};{const h=Math.pow(c,2)*a;return{stiffness:h,damping:r*2*Math.sqrt(a*h),duration:t}}}const _u=12;function Hu(t,e,n){let a=n;for(let o=1;o<_u;o++)a=a-t(a)/e(a);return a}function Ja(t,e){return t*Math.sqrt(1-e*e)}const Qu=["duration","bounce"],Ku=["stiffness","damping","mass"];function yi(t,e){return e.some(n=>t[n]!==void 0)}function Ju(t){let e={velocity:fe.velocity,stiffness:fe.stiffness,damping:fe.damping,mass:fe.mass,isResolvedFromDuration:!1,...t};if(!yi(t,Ku)&&yi(t,Qu))if(t.visualDuration){const n=t.visualDuration,a=2*Math.PI/(n*1.2),o=a*a,i=2*st(.05,1,1-(t.bounce||0))*Math.sqrt(o);e={...e,mass:fe.mass,stiffness:o,damping:i}}else{const n=zu(t);e={...e,...n,mass:fe.mass},e.isResolvedFromDuration=!0}return e}function ra(t=fe.visualDuration,e=fe.bounce){const n=typeof t!="object"?{visualDuration:t,keyframes:[0,1],bounce:e}:t;let{restSpeed:a,restDelta:o}=n;const i=n.keyframes[0],r=n.keyframes[n.keyframes.length-1],s={done:!1,value:i},{stiffness:c,damping:h,mass:l,duration:d,velocity:u,isResolvedFromDuration:f}=Ju({...n,velocity:-He(n.velocity||0)}),m=u||0,P=h/(2*Math.sqrt(c*l)),A=r-i,b=He(Math.sqrt(c/l)),E=Math.abs(A)<5;a||(a=E?fe.restSpeed.granular:fe.restSpeed.default),o||(o=E?fe.restDelta.granular:fe.restDelta.default);let T;if(P<1){const M=Ja(b,P);T=C=>{const F=Math.exp(-P*b*C);return r-F*((m+P*b*A)/M*Math.sin(M*C)+A*Math.cos(M*C))}}else if(P===1)T=M=>r-Math.exp(-b*M)*(A+(m+b*A)*M);else{const M=b*Math.sqrt(P*P-1);T=C=>{const F=Math.exp(-P*b*C),g=Math.min(M*C,300);return r-F*((m+P*b*A)*Math.sinh(g)+M*A*Math.cosh(g))/M}}const S={calculatedDuration:f&&d||null,next:M=>{const C=T(M);if(f)s.done=M>=d;else{let F=M===0?m:0;P<1&&(F=M===0?et(m):Os(T,M,C));const g=Math.abs(F)<=a,v=Math.abs(r-C)<=o;s.done=g&&v}return s.value=s.done?r:C,s},toString:()=>{const M=Math.min(Vo(S),ia),C=Us(F=>S.next(M*F).value,M,30);return M+"ms "+C},toTransition:()=>{}};return S}ra.applyToOptions=t=>{const e=Gu(t,100,ra);return t.ease=e.ease,t.duration=et(e.duration),t.type="keyframes",t};function Wa({keyframes:t,velocity:e=0,power:n=.8,timeConstant:a=325,bounceDamping:o=10,bounceStiffness:i=500,modifyTarget:r,min:s,max:c,restDelta:h=.5,restSpeed:l}){const d=t[0],u={done:!1,value:d},f=g=>s!==void 0&&g<s||c!==void 0&&g>c,m=g=>s===void 0?c:c===void 0||Math.abs(s-g)<Math.abs(c-g)?s:c;let P=n*e;const A=d+P,b=r===void 0?A:r(A);b!==A&&(P=b-d);const E=g=>-P*Math.exp(-g/a),T=g=>b+E(g),S=g=>{const v=E(g),k=T(g);u.done=Math.abs(v)<=h,u.value=u.done?b:k};let M,C;const F=g=>{f(u.value)&&(M=g,C=ra({keyframes:[u.value,m(u.value)],velocity:Os(T,g,u.value),damping:o,stiffness:i,restDelta:h,restSpeed:l}))};return F(0),{calculatedDuration:null,next:g=>{let v=!1;return!C&&M===void 0&&(v=!0,S(g),F(g)),M!==void 0&&g>=M?C.next(g-M):(!v&&S(g),u)}}}function Wu(t,e,n){const a=[],o=n||ct.mix||Is,i=t.length-1;for(let r=0;r<i;r++){let s=o(t[r],t[r+1]);if(e){const c=Array.isArray(e)?e[r]||Qe:e;s=pn(c,s)}a.push(s)}return a}function qu(t,e,{clamp:n=!0,ease:a,mixer:o}={}){const i=t.length;if(lt(i===e.length,"Both input and output ranges must be the same length","range-length"),i===1)return()=>e[0];if(i===2&&e[0]===e[1])return()=>e[1];const r=t[0]===t[1];t[0]>t[i-1]&&(t=[...t].reverse(),e=[...e].reverse());const s=Wu(e,a,o),c=s.length,h=l=>{if(r&&l<t[0])return e[0];let d=0;if(c>1)for(;d<t.length-2&&!(l<t[d+1]);d++);const u=ln(t[d],t[d+1],l);return s[d](u)};return n?l=>h(st(t[0],t[i-1],l)):h}function Xu(t,e){const n=t[t.length-1];for(let a=1;a<=e;a++){const o=ln(0,e,a);t.push(pe(n,1,o))}}function Yu(t){const e=[0];return Xu(e,t.length-1),e}function Zu(t,e){return t.map(n=>n*e)}function ed(t,e){return t.map(()=>e||Ss).splice(0,t.length-1)}function Nt({duration:t=300,keyframes:e,times:n,ease:a="easeInOut"}){const o=hu(a)?a.map(hi):hi(a),i={done:!1,value:e[0]},r=Zu(n&&n.length===e.length?n:Yu(e),t),s=qu(r,e,{ease:Array.isArray(o)?o:ed(e,o)});return{calculatedDuration:t,next:c=>(i.value=s(c),i.done=c>=t,i)}}const td=t=>t!==null;function Go(t,{repeat:e,repeatType:n="loop"},a,o=1){const i=t.filter(td),s=o<0||e&&n!=="loop"&&e%2===1?0:i.length-1;return!s||a===void 0?i[s]:a}const nd={decay:Wa,inertia:Wa,tween:Nt,keyframes:Nt,spring:ra};function Ds(t){typeof t.type=="string"&&(t.type=nd[t.type])}class jo{constructor(){this.updateFinished()}get finished(){return this._finished}updateFinished(){this._finished=new Promise(e=>{this.resolve=e})}notifyFinished(){this.resolve()}then(e,n){return this.finished.then(e,n)}}const ad=t=>t/100;class zo extends jo{constructor(e){super(),this.state="idle",this.startTime=null,this.isStopped=!1,this.currentTime=0,this.holdTime=null,this.playbackSpeed=1,this.stop=()=>{const{motionValue:n}=this.options;n&&n.updatedAt!==Fe.now()&&this.tick(Fe.now()),this.isStopped=!0,this.state!=="idle"&&(this.teardown(),this.options.onStop?.())},this.options=e,this.initAnimation(),this.play(),e.autoplay===!1&&this.pause()}initAnimation(){const{options:e}=this;Ds(e);const{type:n=Nt,repeat:a=0,repeatDelay:o=0,repeatType:i,velocity:r=0}=e;let{keyframes:s}=e;const c=n||Nt;process.env.NODE_ENV!=="production"&&c!==Nt&&lt(s.length<=2,`Only two keyframes currently supported with spring and inertia animations. Trying to animate ${s}`,"spring-two-frames"),c!==Nt&&typeof s[0]!="number"&&(this.mixKeyframes=pn(ad,Is(s[0],s[1])),s=[0,100]);const h=c({...e,keyframes:s});i==="mirror"&&(this.mirroredGenerator=c({...e,keyframes:[...s].reverse(),velocity:-r})),h.calculatedDuration===null&&(h.calculatedDuration=Vo(h));const{calculatedDuration:l}=h;this.calculatedDuration=l,this.resolvedDuration=l+o,this.totalDuration=this.resolvedDuration*(a+1)-o,this.generator=h}updateTime(e){const n=Math.round(e-this.startTime)*this.playbackSpeed;this.holdTime!==null?this.currentTime=this.holdTime:this.currentTime=n}tick(e,n=!1){const{generator:a,totalDuration:o,mixKeyframes:i,mirroredGenerator:r,resolvedDuration:s,calculatedDuration:c}=this;if(this.startTime===null)return a.next(0);const{delay:h=0,keyframes:l,repeat:d,repeatType:u,repeatDelay:f,type:m,onUpdate:P,finalKeyframe:A}=this.options;this.speed>0?this.startTime=Math.min(this.startTime,e):this.speed<0&&(this.startTime=Math.min(e-o/this.speed,this.startTime)),n?this.currentTime=e:this.updateTime(e);const b=this.currentTime-h*(this.playbackSpeed>=0?1:-1),E=this.playbackSpeed>=0?b<0:b>o;this.currentTime=Math.max(b,0),this.state==="finished"&&this.holdTime===null&&(this.currentTime=o);let T=this.currentTime,S=a;if(d){const g=Math.min(this.currentTime,o)/s;let v=Math.floor(g),k=g%1;!k&&g>=1&&(k=1),k===1&&v--,v=Math.min(v,d+1),v%2&&(u==="reverse"?(k=1-k,f&&(k-=f/s)):u==="mirror"&&(S=r)),T=st(0,1,k)*s}const M=E?{done:!1,value:l[0]}:S.next(T);i&&(M.value=i(M.value));let{done:C}=M;!E&&c!==null&&(C=this.playbackSpeed>=0?this.currentTime>=o:this.currentTime<=0);const F=this.holdTime===null&&(this.state==="finished"||this.state==="running"&&C);return F&&m!==Wa&&(M.value=Go(l,this.options,A,this.speed)),P&&P(M.value),F&&this.finish(),M}then(e,n){return this.finished.then(e,n)}get duration(){return He(this.calculatedDuration)}get iterationDuration(){const{delay:e=0}=this.options||{};return this.duration+He(e)}get time(){return He(this.currentTime)}set time(e){e=et(e),this.currentTime=e,this.startTime===null||this.holdTime!==null||this.playbackSpeed===0?this.holdTime=e:this.driver&&(this.startTime=this.driver.now()-e/this.playbackSpeed),this.driver?.start(!1)}get speed(){return this.playbackSpeed}set speed(e){this.updateTime(Fe.now());const n=this.playbackSpeed!==e;this.playbackSpeed=e,n&&(this.time=He(this.currentTime))}play(){if(this.isStopped)return;const{driver:e=Vu,startTime:n}=this.options;this.driver||(this.driver=e(o=>this.tick(o))),this.options.onPlay?.();const a=this.driver.now();this.state==="finished"?(this.updateFinished(),this.startTime=a):this.holdTime!==null?this.startTime=a-this.holdTime:this.startTime||(this.startTime=n??a),this.state==="finished"&&this.speed<0&&(this.startTime+=this.calculatedDuration),this.holdTime=null,this.state="running",this.driver.start()}pause(){this.state="paused",this.updateTime(Fe.now()),this.holdTime=this.currentTime}complete(){this.state!=="running"&&this.play(),this.state="finished",this.holdTime=null}finish(){this.notifyFinished(),this.teardown(),this.state="finished",this.options.onComplete?.()}cancel(){this.holdTime=null,this.startTime=0,this.tick(0),this.teardown(),this.options.onCancel?.()}teardown(){this.state="idle",this.stopDriver(),this.startTime=this.holdTime=null}stopDriver(){this.driver&&(this.driver.stop(),this.driver=void 0)}sample(e){return this.startTime=0,this.tick(e,!0)}attachTimeline(e){return this.options.allowFlatten&&(this.options.type="keyframes",this.options.ease="linear",this.initAnimation()),this.driver?.stop(),e.observe(this)}}function od(t){for(let e=1;e<t.length;e++)t[e]??(t[e]=t[e-1])}const Ct=t=>t*180/Math.PI,qa=t=>{const e=Ct(Math.atan2(t[1],t[0]));return Xa(e)},id={x:4,y:5,translateX:4,translateY:5,scaleX:0,scaleY:3,scale:t=>(Math.abs(t[0])+Math.abs(t[3]))/2,rotate:qa,rotateZ:qa,skewX:t=>Ct(Math.atan(t[1])),skewY:t=>Ct(Math.atan(t[2])),skew:t=>(Math.abs(t[1])+Math.abs(t[2]))/2},Xa=t=>(t=t%360,t<0&&(t+=360),t),vi=qa,bi=t=>Math.sqrt(t[0]*t[0]+t[1]*t[1]),Pi=t=>Math.sqrt(t[4]*t[4]+t[5]*t[5]),rd={x:12,y:13,z:14,translateX:12,translateY:13,translateZ:14,scaleX:bi,scaleY:Pi,scale:t=>(bi(t)+Pi(t))/2,rotateX:t=>Xa(Ct(Math.atan2(t[6],t[5]))),rotateY:t=>Xa(Ct(Math.atan2(-t[2],t[0]))),rotateZ:vi,rotate:vi,skewX:t=>Ct(Math.atan(t[4])),skewY:t=>Ct(Math.atan(t[1])),skew:t=>(Math.abs(t[1])+Math.abs(t[4]))/2};function Ya(t){return t.includes("scale")?1:0}function Za(t,e){if(!t||t==="none")return Ya(e);const n=t.match(/^matrix3d\(([-\d.e\s,]+)\)$/u);let a,o;if(n)a=rd,o=n;else{const s=t.match(/^matrix\(([-\d.e\s,]+)\)$/u);a=id,o=s}if(!o)return Ya(e);const i=a[e],r=o[1].split(",").map(ld);return typeof i=="function"?i(r):r[i]}const sd=(t,e)=>{const{transform:n="none"}=getComputedStyle(t);return Za(n,e)};function ld(t){return parseFloat(t.trim())}const Kt=["transformPerspective","x","y","z","translateX","translateY","translateZ","scale","scaleX","scaleY","rotate","rotateX","rotateY","rotateZ","skew","skewX","skewY"],Jt=new Set(Kt),wi=t=>t===Qt||t===Y,cd=new Set(["x","y","z"]),ud=Kt.filter(t=>!cd.has(t));function dd(t){const e=[];return ud.forEach(n=>{const a=t.getValue(n);a!==void 0&&(e.push([n,a.get()]),a.set(n.startsWith("scale")?1:0))}),e}const At={width:({x:t},{paddingLeft:e="0",paddingRight:n="0"})=>t.max-t.min-parseFloat(e)-parseFloat(n),height:({y:t},{paddingTop:e="0",paddingBottom:n="0"})=>t.max-t.min-parseFloat(e)-parseFloat(n),top:(t,{top:e})=>parseFloat(e),left:(t,{left:e})=>parseFloat(e),bottom:({y:t},{top:e})=>parseFloat(e)+(t.max-t.min),right:({x:t},{left:e})=>parseFloat(e)+(t.max-t.min),x:(t,{transform:e})=>Za(e,"x"),y:(t,{transform:e})=>Za(e,"y")};At.translateX=At.x;At.translateY=At.y;const St=new Set;let eo=!1,to=!1,no=!1;function Bs(){if(to){const t=Array.from(St).filter(a=>a.needsMeasurement),e=new Set(t.map(a=>a.element)),n=new Map;e.forEach(a=>{const o=dd(a);o.length&&(n.set(a,o),a.render())}),t.forEach(a=>a.measureInitialState()),e.forEach(a=>{a.render();const o=n.get(a);o&&o.forEach(([i,r])=>{a.getValue(i)?.set(r)})}),t.forEach(a=>a.measureEndState()),t.forEach(a=>{a.suspendedScrollY!==void 0&&window.scrollTo(0,a.suspendedScrollY)})}to=!1,eo=!1,St.forEach(t=>t.complete(no)),St.clear()}function Vs(){St.forEach(t=>{t.readKeyframes(),t.needsMeasurement&&(to=!0)})}function hd(){no=!0,Vs(),Bs(),no=!1}class _o{constructor(e,n,a,o,i,r=!1){this.state="pending",this.isAsync=!1,this.needsMeasurement=!1,this.unresolvedKeyframes=[...e],this.onComplete=n,this.name=a,this.motionValue=o,this.element=i,this.isAsync=r}scheduleResolve(){this.state="scheduled",this.isAsync?(St.add(this),eo||(eo=!0,he.read(Vs),he.resolveKeyframes(Bs))):(this.readKeyframes(),this.complete())}readKeyframes(){const{unresolvedKeyframes:e,name:n,element:a,motionValue:o}=this;if(e[0]===null){const i=o?.get(),r=e[e.length-1];if(i!==void 0)e[0]=i;else if(a&&n){const s=a.readValue(n,r);s!=null&&(e[0]=s)}e[0]===void 0&&(e[0]=r),o&&i===void 0&&o.set(e[0])}od(e)}setFinalKeyframe(){}measureInitialState(){}renderEndStyles(){}measureEndState(){}complete(e=!1){this.state="complete",this.onComplete(this.unresolvedKeyframes,this.finalKeyframe,e),St.delete(this)}cancel(){this.state==="scheduled"&&(St.delete(this),this.state="pending")}resume(){this.state==="pending"&&this.scheduleResolve()}}const fd=t=>t.startsWith("--");function pd(t,e,n){fd(e)?t.style.setProperty(e,n):t.style[e]=n}const md=Mo(()=>window.ScrollTimeline!==void 0),gd={};function yd(t,e){const n=Mo(t);return()=>gd[e]??n()}const Gs=yd(()=>{try{document.createElement("div").animate({opacity:0},{easing:"linear(0, 1)"})}catch{return!1}return!0},"linearEasing"),Xt=([t,e,n,a])=>`cubic-bezier(${t}, ${e}, ${n}, ${a})`,Ci={linear:"linear",ease:"ease",easeIn:"ease-in",easeOut:"ease-out",easeInOut:"ease-in-out",circIn:Xt([0,.65,.55,1]),circOut:Xt([.55,0,1,.45]),backIn:Xt([.31,.01,.66,-.59]),backOut:Xt([.33,1.53,.69,.99])};function js(t,e){if(t)return typeof t=="function"?Gs()?Us(t,e):"ease-out":Ts(t)?Xt(t):Array.isArray(t)?t.map(n=>js(n,e)||Ci.easeOut):Ci[t]}function vd(t,e,n,{delay:a=0,duration:o=300,repeat:i=0,repeatType:r="loop",ease:s="easeOut",times:c}={},h=void 0){const l={[e]:n};c&&(l.offset=c);const d=js(s,o);Array.isArray(d)&&(l.easing=d);const u={delay:a,duration:o,easing:Array.isArray(d)?"linear":d,fill:"both",iterations:i+1,direction:r==="reverse"?"alternate":"normal"};return h&&(u.pseudoElement=h),t.animate(l,u)}function zs(t){return typeof t=="function"&&"applyToOptions"in t}function bd({type:t,...e}){return zs(t)&&Gs()?t.applyToOptions(e):(e.duration??(e.duration=300),e.ease??(e.ease="easeOut"),e)}class Pd extends jo{constructor(e){if(super(),this.finishedTime=null,this.isStopped=!1,!e)return;const{element:n,name:a,keyframes:o,pseudoElement:i,allowFlatten:r=!1,finalKeyframe:s,onComplete:c}=e;this.isPseudoElement=!!i,this.allowFlatten=r,this.options=e,lt(typeof e.type!="string",`Mini animate() doesn't support "type" as a string.`,"mini-spring");const h=bd(e);this.animation=vd(n,a,o,h,i),h.autoplay===!1&&this.animation.pause(),this.animation.onfinish=()=>{if(this.finishedTime=this.time,!i){const l=Go(o,this.options,s,this.speed);this.updateMotionValue?this.updateMotionValue(l):pd(n,a,l),this.animation.cancel()}c?.(),this.notifyFinished()}}play(){this.isStopped||(this.animation.play(),this.state==="finished"&&this.updateFinished())}pause(){this.animation.pause()}complete(){this.animation.finish?.()}cancel(){try{this.animation.cancel()}catch{}}stop(){if(this.isStopped)return;this.isStopped=!0;const{state:e}=this;e==="idle"||e==="finished"||(this.updateMotionValue?this.updateMotionValue():this.commitStyles(),this.isPseudoElement||this.cancel())}commitStyles(){this.isPseudoElement||this.animation.commitStyles?.()}get duration(){const e=this.animation.effect?.getComputedTiming?.().duration||0;return He(Number(e))}get iterationDuration(){const{delay:e=0}=this.options||{};return this.duration+He(e)}get time(){return He(Number(this.animation.currentTime)||0)}set time(e){this.finishedTime=null,this.animation.currentTime=et(e)}get speed(){return this.animation.playbackRate}set speed(e){e<0&&(this.finishedTime=null),this.animation.playbackRate=e}get state(){return this.finishedTime!==null?"finished":this.animation.playState}get startTime(){return Number(this.animation.startTime)}set startTime(e){this.animation.startTime=e}attachTimeline({timeline:e,observe:n}){return this.allowFlatten&&this.animation.effect?.updateTiming({easing:"linear"}),this.animation.onfinish=null,e&&md()?(this.animation.timeline=e,Qe):n(this)}}const _s={anticipate:ws,backInOut:Ps,circInOut:As};function wd(t){return t in _s}function Cd(t){typeof t.ease=="string"&&wd(t.ease)&&(t.ease=_s[t.ease])}const Ai=10;class Ad extends Pd{constructor(e){Cd(e),Ds(e),super(e),e.startTime&&(this.startTime=e.startTime),this.options=e}updateMotionValue(e){const{motionValue:n,onUpdate:a,onComplete:o,element:i,...r}=this.options;if(!n)return;if(e!==void 0){n.set(e);return}const s=new zo({...r,autoplay:!1}),c=et(this.finishedTime??this.time);n.setWithVelocity(s.sample(c-Ai).value,s.sample(c).value,Ai),s.stop()}}const Si=(t,e)=>e==="zIndex"?!1:!!(typeof t=="number"||Array.isArray(t)||typeof t=="string"&&(pt.test(t)||t==="0")&&!t.startsWith("url("));function Sd(t){const e=t[0];if(t.length===1)return!0;for(let n=0;n<t.length;n++)if(t[n]!==e)return!0}function Td(t,e,n,a){const o=t[0];if(o===null)return!1;if(e==="display"||e==="visibility")return!0;const i=t[t.length-1],r=Si(o,e),s=Si(i,e);return Ht(r===s,`You are trying to animate ${e} from "${o}" to "${i}". "${r?i:o}" is not an animatable value.`,"value-not-animatable"),!r||!s?!1:Sd(t)||(n==="spring"||zs(n))&&a}function ao(t){t.duration=0,t.type="keyframes"}const kd=new Set(["opacity","clipPath","filter","transform"]),$d=Mo(()=>Object.hasOwnProperty.call(Element.prototype,"animate"));function Rd(t){const{motionValue:e,name:n,repeatDelay:a,repeatType:o,damping:i,type:r}=t;if(!(e?.owner?.current instanceof HTMLElement))return!1;const{onUpdate:c,transformTemplate:h}=e.owner.getProps();return $d()&&n&&kd.has(n)&&(n!=="transform"||!h)&&!c&&!a&&o!=="mirror"&&i!==0&&r!=="inertia"}const xd=40;class Ed extends jo{constructor({autoplay:e=!0,delay:n=0,type:a="keyframes",repeat:o=0,repeatDelay:i=0,repeatType:r="loop",keyframes:s,name:c,motionValue:h,element:l,...d}){super(),this.stop=()=>{this._animation&&(this._animation.stop(),this.stopTimeline?.()),this.keyframeResolver?.cancel()},this.createdAt=Fe.now();const u={autoplay:e,delay:n,type:a,repeat:o,repeatDelay:i,repeatType:r,name:c,motionValue:h,element:l,...d},f=l?.KeyframeResolver||_o;this.keyframeResolver=new f(s,(m,P,A)=>this.onKeyframesResolved(m,P,u,!A),c,h,l),this.keyframeResolver?.scheduleResolve()}onKeyframesResolved(e,n,a,o){this.keyframeResolver=void 0;const{name:i,type:r,velocity:s,delay:c,isHandoff:h,onUpdate:l}=a;this.resolvedAt=Fe.now(),Td(e,i,r,s)||((ct.instantAnimations||!c)&&l?.(Go(e,a,n)),e[0]=e[e.length-1],ao(a),a.repeat=0);const u={startTime:o?this.resolvedAt?this.resolvedAt-this.createdAt>xd?this.resolvedAt:this.createdAt:this.createdAt:void 0,finalKeyframe:n,...a,keyframes:e},f=!h&&Rd(u)?new Ad({...u,element:u.motionValue.owner.current}):new zo(u);f.finished.then(()=>this.notifyFinished()).catch(Qe),this.pendingTimeline&&(this.stopTimeline=f.attachTimeline(this.pendingTimeline),this.pendingTimeline=void 0),this._animation=f}get finished(){return this._animation?this.animation.finished:this._finished}then(e,n){return this.finished.finally(e).then(()=>{})}get animation(){return this._animation||(this.keyframeResolver?.resume(),hd()),this._animation}get duration(){return this.animation.duration}get iterationDuration(){return this.animation.iterationDuration}get time(){return this.animation.time}set time(e){this.animation.time=e}get speed(){return this.animation.speed}get state(){return this.animation.state}set speed(e){this.animation.speed=e}get startTime(){return this.animation.startTime}attachTimeline(e){return this._animation?this.stopTimeline=this.animation.attachTimeline(e):this.pendingTimeline=e,()=>this.stop()}play(){this.animation.play()}pause(){this.animation.pause()}complete(){this.animation.complete()}cancel(){this._animation&&this.animation.cancel(),this.keyframeResolver?.cancel()}}const Md=/^var\(--(?:([\w-]+)|([\w-]+), ?([a-zA-Z\d ()%#.,-]+))\)/u;function Ld(t){const e=Md.exec(t);if(!e)return[,];const[,n,a,o]=e;return[`--${n??a}`,o]}const Nd=4;function Hs(t,e,n=1){lt(n<=Nd,`Max CSS variable fallback depth detected in property "${t}". This may indicate a circular fallback dependency.`,"max-css-var-depth");const[a,o]=Ld(t);if(!a)return;const i=window.getComputedStyle(e).getPropertyValue(a);if(i){const r=i.trim();return hs(r)?parseFloat(r):r}return Uo(o)?Hs(o,e,n+1):o}function Ho(t,e){return t?.[e]??t?.default??t}const Qs=new Set(["width","height","top","left","right","bottom",...Kt]),Fd={test:t=>t==="auto",parse:t=>t},Ks=t=>e=>e.test(t),Js=[Qt,Y,it,ht,Su,Au,Fd],Ti=t=>Js.find(Ks(t));function Id(t){return typeof t=="number"?t===0:t!==null?t==="none"||t==="0"||ps(t):!0}const Ud=new Set(["brightness","contrast","saturate","opacity"]);function Od(t){const[e,n]=t.slice(0,-1).split("(");if(e==="drop-shadow")return t;const[a]=n.match(Oo)||[];if(!a)return t;const o=n.replace(a,"");let i=Ud.has(e)?1:0;return a!==n&&(i*=100),e+"("+i+o+")"}const Dd=/\b([a-z-]*)\(.*?\)/gu,oo={...pt,getAnimatableNone:t=>{const e=t.match(Dd);return e?e.map(Od).join(" "):t}},ki={...Qt,transform:Math.round},Bd={rotate:ht,rotateX:ht,rotateY:ht,rotateZ:ht,scale:_n,scaleX:_n,scaleY:_n,scaleZ:_n,skew:ht,skewX:ht,skewY:ht,distance:Y,translateX:Y,translateY:Y,translateZ:Y,x:Y,y:Y,z:Y,perspective:Y,transformPerspective:Y,opacity:cn,originX:fi,originY:fi,originZ:Y},Qo={borderWidth:Y,borderTopWidth:Y,borderRightWidth:Y,borderBottomWidth:Y,borderLeftWidth:Y,borderRadius:Y,radius:Y,borderTopLeftRadius:Y,borderTopRightRadius:Y,borderBottomRightRadius:Y,borderBottomLeftRadius:Y,width:Y,maxWidth:Y,height:Y,maxHeight:Y,top:Y,right:Y,bottom:Y,left:Y,padding:Y,paddingTop:Y,paddingRight:Y,paddingBottom:Y,paddingLeft:Y,margin:Y,marginTop:Y,marginRight:Y,marginBottom:Y,marginLeft:Y,backgroundPositionX:Y,backgroundPositionY:Y,...Bd,zIndex:ki,fillOpacity:cn,strokeOpacity:cn,numOctaves:ki},Vd={...Qo,color:ye,backgroundColor:ye,outlineColor:ye,fill:ye,stroke:ye,borderColor:ye,borderTopColor:ye,borderRightColor:ye,borderBottomColor:ye,borderLeftColor:ye,filter:oo,WebkitFilter:oo},Ws=t=>Vd[t];function qs(t,e){let n=Ws(t);return n!==oo&&(n=pt),n.getAnimatableNone?n.getAnimatableNone(e):void 0}const Gd=new Set(["auto","none","0"]);function jd(t,e,n){let a=0,o;for(;a<t.length&&!o;){const i=t[a];typeof i=="string"&&!Gd.has(i)&&un(i).values.length&&(o=t[a]),a++}if(o&&n)for(const i of e)t[i]=qs(n,o)}class zd extends _o{constructor(e,n,a,o,i){super(e,n,a,o,i,!0)}readKeyframes(){const{unresolvedKeyframes:e,element:n,name:a}=this;if(!n||!n.current)return;super.readKeyframes();for(let c=0;c<e.length;c++){let h=e[c];if(typeof h=="string"&&(h=h.trim(),Uo(h))){const l=Hs(h,n.current);l!==void 0&&(e[c]=l),c===e.length-1&&(this.finalKeyframe=h)}}if(this.resolveNoneKeyframes(),!Qs.has(a)||e.length!==2)return;const[o,i]=e,r=Ti(o),s=Ti(i);if(r!==s)if(wi(r)&&wi(s))for(let c=0;c<e.length;c++){const h=e[c];typeof h=="string"&&(e[c]=parseFloat(h))}else At[a]&&(this.needsMeasurement=!0)}resolveNoneKeyframes(){const{unresolvedKeyframes:e,name:n}=this,a=[];for(let o=0;o<e.length;o++)(e[o]===null||Id(e[o]))&&a.push(o);a.length&&jd(e,a,n)}measureInitialState(){const{element:e,unresolvedKeyframes:n,name:a}=this;if(!e||!e.current)return;a==="height"&&(this.suspendedScrollY=window.pageYOffset),this.measuredOrigin=At[a](e.measureViewportBox(),window.getComputedStyle(e.current)),n[0]=this.measuredOrigin;const o=n[n.length-1];o!==void 0&&e.getValue(a,o).jump(o,!1)}measureEndState(){const{element:e,name:n,unresolvedKeyframes:a}=this;if(!e||!e.current)return;const o=e.getValue(n);o&&o.jump(this.measuredOrigin,!1);const i=a.length-1,r=a[i];a[i]=At[n](e.measureViewportBox(),window.getComputedStyle(e.current)),r!==null&&this.finalKeyframe===void 0&&(this.finalKeyframe=r),this.removedTransforms?.length&&this.removedTransforms.forEach(([s,c])=>{e.getValue(s).set(c)}),this.resolveNoneKeyframes()}}function _d(t,e,n){if(t instanceof EventTarget)return[t];if(typeof t=="string"){let a=document;const o=n?.[t]??a.querySelectorAll(t);return o?Array.from(o):[]}return Array.from(t)}const Xs=(t,e)=>e&&typeof t=="number"?e.transform(t):t;function Hd(t){return fs(t)&&"offsetHeight"in t}const $i=30,Qd=t=>!isNaN(parseFloat(t));class Kd{constructor(e,n={}){this.canTrackVelocity=null,this.events={},this.updateAndNotify=a=>{const o=Fe.now();if(this.updatedAt!==o&&this.setPrevFrameValue(),this.prev=this.current,this.setCurrent(a),this.current!==this.prev&&(this.events.change?.notify(this.current),this.dependents))for(const i of this.dependents)i.dirty()},this.hasAnimated=!1,this.setCurrent(e),this.owner=n.owner}setCurrent(e){this.current=e,this.updatedAt=Fe.now(),this.canTrackVelocity===null&&e!==void 0&&(this.canTrackVelocity=Qd(this.current))}setPrevFrameValue(e=this.current){this.prevFrameValue=e,this.prevUpdatedAt=this.updatedAt}onChange(e){return process.env.NODE_ENV!=="production"&&No(!1,'value.onChange(callback) is deprecated. Switch to value.on("change", callback).'),this.on("change",e)}on(e,n){this.events[e]||(this.events[e]=new Lo);const a=this.events[e].add(n);return e==="change"?()=>{a(),he.read(()=>{this.events.change.getSize()||this.stop()})}:a}clearListeners(){for(const e in this.events)this.events[e].clear()}attach(e,n){this.passiveEffect=e,this.stopPassiveEffect=n}set(e){this.passiveEffect?this.passiveEffect(e,this.updateAndNotify):this.updateAndNotify(e)}setWithVelocity(e,n,a){this.set(n),this.prev=void 0,this.prevFrameValue=e,this.prevUpdatedAt=this.updatedAt-a}jump(e,n=!0){this.updateAndNotify(e),this.prev=e,this.prevUpdatedAt=this.prevFrameValue=void 0,n&&this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}dirty(){this.events.change?.notify(this.current)}addDependent(e){this.dependents||(this.dependents=new Set),this.dependents.add(e)}removeDependent(e){this.dependents&&this.dependents.delete(e)}get(){return this.current}getPrevious(){return this.prev}getVelocity(){const e=Fe.now();if(!this.canTrackVelocity||this.prevFrameValue===void 0||e-this.updatedAt>$i)return 0;const n=Math.min(this.updatedAt-this.prevUpdatedAt,$i);return ms(parseFloat(this.current)-parseFloat(this.prevFrameValue),n)}start(e){return this.stop(),new Promise(n=>{this.hasAnimated=!0,this.animation=e(n),this.events.animationStart&&this.events.animationStart.notify()}).then(()=>{this.events.animationComplete&&this.events.animationComplete.notify(),this.clearAnimation()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){delete this.animation}destroy(){this.dependents?.clear(),this.events.destroy?.notify(),this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}}function jt(t,e){return new Kd(t,e)}const{schedule:Ko}=ks(queueMicrotask,!1),Ye={x:!1,y:!1};function Ys(){return Ye.x||Ye.y}function Jd(t){return t==="x"||t==="y"?Ye[t]?null:(Ye[t]=!0,()=>{Ye[t]=!1}):Ye.x||Ye.y?null:(Ye.x=Ye.y=!0,()=>{Ye.x=Ye.y=!1})}function Zs(t,e){const n=_d(t),a=new AbortController,o={passive:!0,...e,signal:a.signal};return[n,o,()=>a.abort()]}function Ri(t){return!(t.pointerType==="touch"||Ys())}function Wd(t,e,n={}){const[a,o,i]=Zs(t,n),r=s=>{if(!Ri(s))return;const{target:c}=s,h=e(c,s);if(typeof h!="function"||!c)return;const l=d=>{Ri(d)&&(h(d),c.removeEventListener("pointerleave",l))};c.addEventListener("pointerleave",l,o)};return a.forEach(s=>{s.addEventListener("pointerenter",r,o)}),i}const el=(t,e)=>e?t===e?!0:el(t,e.parentElement):!1,Jo=t=>t.pointerType==="mouse"?typeof t.button!="number"||t.button<=0:t.isPrimary!==!1,qd=new Set(["BUTTON","INPUT","SELECT","TEXTAREA","A"]);function Xd(t){return qd.has(t.tagName)||t.tabIndex!==-1}const Wn=new WeakSet;function xi(t){return e=>{e.key==="Enter"&&t(e)}}function Ea(t,e){t.dispatchEvent(new PointerEvent("pointer"+e,{isPrimary:!0,bubbles:!0}))}const Yd=(t,e)=>{const n=t.currentTarget;if(!n)return;const a=xi(()=>{if(Wn.has(n))return;Ea(n,"down");const o=xi(()=>{Ea(n,"up")}),i=()=>Ea(n,"cancel");n.addEventListener("keyup",o,e),n.addEventListener("blur",i,e)});n.addEventListener("keydown",a,e),n.addEventListener("blur",()=>n.removeEventListener("keydown",a),e)};function Ei(t){return Jo(t)&&!Ys()}function Zd(t,e,n={}){const[a,o,i]=Zs(t,n),r=s=>{const c=s.currentTarget;if(!Ei(s))return;Wn.add(c);const h=e(c,s),l=(f,m)=>{window.removeEventListener("pointerup",d),window.removeEventListener("pointercancel",u),Wn.has(c)&&Wn.delete(c),Ei(f)&&typeof h=="function"&&h(f,{success:m})},d=f=>{l(f,c===window||c===document||n.useGlobalTarget||el(c,f.target))},u=f=>{l(f,!1)};window.addEventListener("pointerup",d,o),window.addEventListener("pointercancel",u,o)};return a.forEach(s=>{(n.useGlobalTarget?window:s).addEventListener("pointerdown",r,o),Hd(s)&&(s.addEventListener("focus",h=>Yd(h,o)),!Xd(s)&&!s.hasAttribute("tabindex")&&(s.tabIndex=0))}),i}function tl(t){return fs(t)&&"ownerSVGElement"in t}function eh(t){return tl(t)&&t.tagName==="svg"}const ke=t=>!!(t&&t.getVelocity),th=[...Js,ye,pt],nh=t=>th.find(Ks(t)),nl=z.createContext({transformPagePoint:t=>t,isStatic:!1,reducedMotion:"never"});function ah(t=!0){const e=z.useContext(Ro);if(e===null)return[!0,null];const{isPresent:n,onExitComplete:a,register:o}=e,i=z.useId();z.useEffect(()=>{if(t)return o(i)},[t]);const r=z.useCallback(()=>t&&a&&a(i),[i,a,t]);return!n&&a?[!1,r]:[!0]}const al=z.createContext({strict:!1}),Mi={animation:["animate","variants","whileHover","whileTap","exit","whileInView","whileFocus","whileDrag"],exit:["exit"],drag:["drag","dragControls"],focus:["whileFocus"],hover:["whileHover","onHoverStart","onHoverEnd"],tap:["whileTap","onTap","onTapStart","onTapCancel"],pan:["onPan","onPanStart","onPanSessionStart","onPanEnd"],inView:["whileInView","onViewportEnter","onViewportLeave"],layout:["layout","layoutId"]},zt={};for(const t in Mi)zt[t]={isEnabled:e=>Mi[t].some(n=>!!e[n])};function oh(t){for(const e in t)zt[e]={...zt[e],...t[e]}}const ih=new Set(["animate","exit","variants","initial","style","values","variants","transition","transformTemplate","custom","inherit","onBeforeLayoutMeasure","onAnimationStart","onAnimationComplete","onUpdate","onDragStart","onDrag","onDragEnd","onMeasureDragConstraints","onDirectionLock","onDragTransitionEnd","_dragX","_dragY","onHoverStart","onHoverEnd","onViewportEnter","onViewportLeave","globalTapTarget","ignoreStrict","viewport"]);function sa(t){return t.startsWith("while")||t.startsWith("drag")&&t!=="draggable"||t.startsWith("layout")||t.startsWith("onTap")||t.startsWith("onPan")||t.startsWith("onLayout")||ih.has(t)}let ol=t=>!sa(t);function rh(t){typeof t=="function"&&(ol=e=>e.startsWith("on")?!sa(e):t(e))}try{rh(require("@emotion/is-prop-valid").default)}catch{}function sh(t,e,n){const a={};for(const o in t)o==="values"&&typeof t.values=="object"||(ol(o)||n===!0&&sa(o)||!e&&!sa(o)||t.draggable&&o.startsWith("onDrag"))&&(a[o]=t[o]);return a}const va=z.createContext({});function ba(t){return t!==null&&typeof t=="object"&&typeof t.start=="function"}function dn(t){return typeof t=="string"||Array.isArray(t)}const Wo=["animate","whileInView","whileFocus","whileHover","whileTap","whileDrag","exit"],qo=["initial",...Wo];function Pa(t){return ba(t.animate)||qo.some(e=>dn(t[e]))}function il(t){return!!(Pa(t)||t.variants)}function lh(t,e){if(Pa(t)){const{initial:n,animate:a}=t;return{initial:n===!1||dn(n)?n:void 0,animate:dn(a)?a:void 0}}return t.inherit!==!1?e:{}}function ch(t){const{initial:e,animate:n}=lh(t,z.useContext(va));return z.useMemo(()=>({initial:e,animate:n}),[Li(e),Li(n)])}function Li(t){return Array.isArray(t)?t.join(" "):t}function Ni(t,e){return e.max===e.min?0:t/(e.max-e.min)*100}const Wt={correct:(t,e)=>{if(!e.target)return t;if(typeof t=="string")if(Y.test(t))t=parseFloat(t);else return t;const n=Ni(t,e.target.x),a=Ni(t,e.target.y);return`${n}% ${a}%`}},uh={correct:(t,{treeScale:e,projectionDelta:n})=>{const a=t,o=pt.parse(t);if(o.length>5)return a;const i=pt.createTransformer(t),r=typeof o[0]!="number"?1:0,s=n.x.scale*e.x,c=n.y.scale*e.y;o[0+r]/=s,o[1+r]/=c;const h=pe(s,c,.5);return typeof o[2+r]=="number"&&(o[2+r]/=h),typeof o[3+r]=="number"&&(o[3+r]/=h),i(o)}},io={borderRadius:{...Wt,applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]},borderTopLeftRadius:Wt,borderTopRightRadius:Wt,borderBottomLeftRadius:Wt,borderBottomRightRadius:Wt,boxShadow:uh};function rl(t,{layout:e,layoutId:n}){return Jt.has(t)||t.startsWith("origin")||(e||n!==void 0)&&(!!io[t]||t==="opacity")}const dh={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"},hh=Kt.length;function fh(t,e,n){let a="",o=!0;for(let i=0;i<hh;i++){const r=Kt[i],s=t[r];if(s===void 0)continue;let c=!0;if(typeof s=="number"?c=s===(r.startsWith("scale")?1:0):c=parseFloat(s)===0,!c||n){const h=Xs(s,Qo[r]);if(!c){o=!1;const l=dh[r]||r;a+=`${l}(${h}) `}n&&(e[r]=h)}}return a=a.trim(),n?a=n(e,o?"":a):o&&(a="none"),a}function Xo(t,e,n){const{style:a,vars:o,transformOrigin:i}=t;let r=!1,s=!1;for(const c in e){const h=e[c];if(Jt.has(c)){r=!0;continue}else if(Rs(c)){o[c]=h;continue}else{const l=Xs(h,Qo[c]);c.startsWith("origin")?(s=!0,i[c]=l):a[c]=l}}if(e.transform||(r||n?a.transform=fh(e,t.transform,n):a.transform&&(a.transform="none")),s){const{originX:c="50%",originY:h="50%",originZ:l=0}=i;a.transformOrigin=`${c} ${h} ${l}`}}const Yo=()=>({style:{},transform:{},transformOrigin:{},vars:{}});function sl(t,e,n){for(const a in e)!ke(e[a])&&!rl(a,n)&&(t[a]=e[a])}function ph({transformTemplate:t},e){return z.useMemo(()=>{const n=Yo();return Xo(n,e,t),Object.assign({},n.vars,n.style)},[e])}function mh(t,e){const n=t.style||{},a={};return sl(a,n,t),Object.assign(a,ph(t,e)),a}function gh(t,e){const n={},a=mh(t,e);return t.drag&&t.dragListener!==!1&&(n.draggable=!1,a.userSelect=a.WebkitUserSelect=a.WebkitTouchCallout="none",a.touchAction=t.drag===!0?"none":`pan-${t.drag==="x"?"y":"x"}`),t.tabIndex===void 0&&(t.onTap||t.onTapStart||t.whileTap)&&(n.tabIndex=0),n.style=a,n}const yh={offset:"stroke-dashoffset",array:"stroke-dasharray"},vh={offset:"strokeDashoffset",array:"strokeDasharray"};function bh(t,e,n=1,a=0,o=!0){t.pathLength=1;const i=o?yh:vh;t[i.offset]=Y.transform(-a);const r=Y.transform(e),s=Y.transform(n);t[i.array]=`${r} ${s}`}function ll(t,{attrX:e,attrY:n,attrScale:a,pathLength:o,pathSpacing:i=1,pathOffset:r=0,...s},c,h,l){if(Xo(t,s,h),c){t.style.viewBox&&(t.attrs.viewBox=t.style.viewBox);return}t.attrs=t.style,t.style={};const{attrs:d,style:u}=t;d.transform&&(u.transform=d.transform,delete d.transform),(u.transform||d.transformOrigin)&&(u.transformOrigin=d.transformOrigin??"50% 50%",delete d.transformOrigin),u.transform&&(u.transformBox=l?.transformBox??"fill-box",delete d.transformBox),e!==void 0&&(d.x=e),n!==void 0&&(d.y=n),a!==void 0&&(d.scale=a),o!==void 0&&bh(d,o,i,r,!1)}const cl=()=>({...Yo(),attrs:{}}),ul=t=>typeof t=="string"&&t.toLowerCase()==="svg";function Ph(t,e,n,a){const o=z.useMemo(()=>{const i=cl();return ll(i,e,ul(a),t.transformTemplate,t.style),{...i.attrs,style:{...i.style}}},[e]);if(t.style){const i={};sl(i,t.style,t),o.style={...i,...o.style}}return o}const wh=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","switch","symbol","svg","text","tspan","use","view"];function Zo(t){return typeof t!="string"||t.includes("-")?!1:!!(wh.indexOf(t)>-1||/[A-Z]/u.test(t))}function Ch(t,e,n,{latestValues:a},o,i=!1){const s=(Zo(t)?Ph:gh)(e,a,o,t),c=sh(e,typeof t=="string",i),h=t!==z.Fragment?{...c,...s,ref:n}:{},{children:l}=e,d=z.useMemo(()=>ke(l)?l.get():l,[l]);return z.createElement(t,{...h,children:d})}function Fi(t){const e=[{},{}];return t?.values.forEach((n,a)=>{e[0][a]=n.get(),e[1][a]=n.getVelocity()}),e}function ei(t,e,n,a){if(typeof e=="function"){const[o,i]=Fi(a);e=e(n!==void 0?n:t.custom,o,i)}if(typeof e=="string"&&(e=t.variants&&t.variants[e]),typeof e=="function"){const[o,i]=Fi(a);e=e(n!==void 0?n:t.custom,o,i)}return e}function qn(t){return ke(t)?t.get():t}function Ah({scrapeMotionValuesFromProps:t,createRenderState:e},n,a,o){return{latestValues:Sh(n,a,o,t),renderState:e()}}function Sh(t,e,n,a){const o={},i=a(t,{});for(const u in i)o[u]=qn(i[u]);let{initial:r,animate:s}=t;const c=Pa(t),h=il(t);e&&h&&!c&&t.inherit!==!1&&(r===void 0&&(r=e.initial),s===void 0&&(s=e.animate));let l=n?n.initial===!1:!1;l=l||r===!1;const d=l?s:r;if(d&&typeof d!="boolean"&&!ba(d)){const u=Array.isArray(d)?d:[d];for(let f=0;f<u.length;f++){const m=ei(t,u[f]);if(m){const{transitionEnd:P,transition:A,...b}=m;for(const E in b){let T=b[E];if(Array.isArray(T)){const S=l?T.length-1:0;T=T[S]}T!==null&&(o[E]=T)}for(const E in P)o[E]=P[E]}}}return o}const dl=t=>(e,n)=>{const a=z.useContext(va),o=z.useContext(Ro),i=()=>Ah(t,e,a,o);return n?i():ou(i)};function ti(t,e,n){const{style:a}=t,o={};for(const i in a)(ke(a[i])||e.style&&ke(e.style[i])||rl(i,t)||n?.getValue(i)?.liveStyle!==void 0)&&(o[i]=a[i]);return o}const Th=dl({scrapeMotionValuesFromProps:ti,createRenderState:Yo});function hl(t,e,n){const a=ti(t,e,n);for(const o in t)if(ke(t[o])||ke(e[o])){const i=Kt.indexOf(o)!==-1?"attr"+o.charAt(0).toUpperCase()+o.substring(1):o;a[i]=t[o]}return a}const kh=dl({scrapeMotionValuesFromProps:hl,createRenderState:cl}),$h=Symbol.for("motionComponentSymbol");function Ft(t){return t&&typeof t=="object"&&Object.prototype.hasOwnProperty.call(t,"current")}function Rh(t,e,n){return z.useCallback(a=>{a&&t.onMount&&t.onMount(a),e&&(a?e.mount(a):e.unmount()),n&&(typeof n=="function"?n(a):Ft(n)&&(n.current=a))},[e])}const ni=t=>t.replace(/([a-z])([A-Z])/gu,"$1-$2").toLowerCase(),xh="framerAppearId",fl="data-"+ni(xh),pl=z.createContext({});function Eh(t,e,n,a,o){const{visualElement:i}=z.useContext(va),r=z.useContext(al),s=z.useContext(Ro),c=z.useContext(nl).reducedMotion,h=z.useRef(null);a=a||r.renderer,!h.current&&a&&(h.current=a(t,{visualState:e,parent:i,props:n,presenceContext:s,blockInitialAnimation:s?s.initial===!1:!1,reducedMotionConfig:c}));const l=h.current,d=z.useContext(pl);l&&!l.projection&&o&&(l.type==="html"||l.type==="svg")&&Mh(h.current,n,o,d);const u=z.useRef(!1);z.useInsertionEffect(()=>{l&&u.current&&l.update(n,s)});const f=n[fl],m=z.useRef(!!f&&!window.MotionHandoffIsComplete?.(f)&&window.MotionHasOptimisedAnimation?.(f));return iu(()=>{l&&(u.current=!0,window.MotionIsMounted=!0,l.updateFeatures(),l.scheduleRenderMicrotask(),m.current&&l.animationState&&l.animationState.animateChanges())}),z.useEffect(()=>{l&&(!m.current&&l.animationState&&l.animationState.animateChanges(),m.current&&(queueMicrotask(()=>{window.MotionHandoffMarkAsComplete?.(f)}),m.current=!1),l.enteringChildren=void 0)}),l}function Mh(t,e,n,a){const{layoutId:o,layout:i,drag:r,dragConstraints:s,layoutScroll:c,layoutRoot:h,layoutCrossfade:l}=e;t.projection=new n(t.latestValues,e["data-framer-portal-id"]?void 0:ml(t.parent)),t.projection.setOptions({layoutId:o,layout:i,alwaysMeasureLayout:!!r||s&&Ft(s),visualElement:t,animationType:typeof i=="string"?i:"both",initialPromotionConfig:a,crossfade:l,layoutScroll:c,layoutRoot:h})}function ml(t){if(t)return t.options.allowProjection!==!1?t.projection:ml(t.parent)}function Ma(t,{forwardMotionProps:e=!1}={},n,a){n&&oh(n);const o=Zo(t)?kh:Th;function i(s,c){let h;const l={...z.useContext(nl),...s,layoutId:Lh(s)},{isStatic:d}=l,u=ch(s),f=o(s,d);if(!d&&$o){Nh(l,n);const m=Fh(l);h=m.MeasureLayout,u.visualElement=Eh(t,f,l,a,m.ProjectionNode)}return oe.jsxs(va.Provider,{value:u,children:[h&&u.visualElement?oe.jsx(h,{visualElement:u.visualElement,...l}):null,Ch(t,s,Rh(f,u.visualElement,c),f,d,e)]})}i.displayName=`motion.${typeof t=="string"?t:`create(${t.displayName??t.name??""})`}`;const r=z.forwardRef(i);return r[$h]=t,r}function Lh({layoutId:t}){const e=z.useContext(ds).id;return e&&t!==void 0?e+"-"+t:t}function Nh(t,e){const n=z.useContext(al).strict;if(process.env.NODE_ENV!=="production"&&e&&n){const a="You have rendered a `motion` component within a `LazyMotion` component. This will break tree shaking. Import and render a `m` component instead.";t.ignoreStrict?Ht(!1,a,"lazy-strict-mode"):lt(!1,a,"lazy-strict-mode")}}function Fh(t){const{drag:e,layout:n}=zt;if(!e&&!n)return{};const a={...e,...n};return{MeasureLayout:e?.isEnabled(t)||n?.isEnabled(t)?a.MeasureLayout:void 0,ProjectionNode:a.ProjectionNode}}function Ih(t,e){if(typeof Proxy>"u")return Ma;const n=new Map,a=(i,r)=>Ma(i,r,t,e),o=(i,r)=>(process.env.NODE_ENV!=="production"&&No(!1,"motion() is deprecated. Use motion.create() instead."),a(i,r));return new Proxy(o,{get:(i,r)=>r==="create"?a:(n.has(r)||n.set(r,Ma(r,void 0,t,e)),n.get(r))})}function gl({top:t,left:e,right:n,bottom:a}){return{x:{min:e,max:n},y:{min:t,max:a}}}function Uh({x:t,y:e}){return{top:e.min,right:t.max,bottom:e.max,left:t.min}}function Oh(t,e){if(!e)return t;const n=e({x:t.left,y:t.top}),a=e({x:t.right,y:t.bottom});return{top:n.y,left:n.x,bottom:a.y,right:a.x}}function La(t){return t===void 0||t===1}function ro({scale:t,scaleX:e,scaleY:n}){return!La(t)||!La(e)||!La(n)}function bt(t){return ro(t)||yl(t)||t.z||t.rotate||t.rotateX||t.rotateY||t.skewX||t.skewY}function yl(t){return Ii(t.x)||Ii(t.y)}function Ii(t){return t&&t!=="0%"}function la(t,e,n){const a=t-n,o=e*a;return n+o}function Ui(t,e,n,a,o){return o!==void 0&&(t=la(t,o,a)),la(t,n,a)+e}function so(t,e=0,n=1,a,o){t.min=Ui(t.min,e,n,a,o),t.max=Ui(t.max,e,n,a,o)}function vl(t,{x:e,y:n}){so(t.x,e.translate,e.scale,e.originPoint),so(t.y,n.translate,n.scale,n.originPoint)}const Oi=.999999999999,Di=1.0000000000001;function Dh(t,e,n,a=!1){const o=n.length;if(!o)return;e.x=e.y=1;let i,r;for(let s=0;s<o;s++){i=n[s],r=i.projectionDelta;const{visualElement:c}=i.options;c&&c.props.style&&c.props.style.display==="contents"||(a&&i.options.layoutScroll&&i.scroll&&i!==i.root&&Ut(t,{x:-i.scroll.offset.x,y:-i.scroll.offset.y}),r&&(e.x*=r.x.scale,e.y*=r.y.scale,vl(t,r)),a&&bt(i.latestValues)&&Ut(t,i.latestValues))}e.x<Di&&e.x>Oi&&(e.x=1),e.y<Di&&e.y>Oi&&(e.y=1)}function It(t,e){t.min=t.min+e,t.max=t.max+e}function Bi(t,e,n,a,o=.5){const i=pe(t.min,t.max,o);so(t,e,n,i,a)}function Ut(t,e){Bi(t.x,e.x,e.scaleX,e.scale,e.originX),Bi(t.y,e.y,e.scaleY,e.scale,e.originY)}function bl(t,e){return gl(Oh(t.getBoundingClientRect(),e))}function Bh(t,e,n){const a=bl(t,n),{scroll:o}=e;return o&&(It(a.x,o.offset.x),It(a.y,o.offset.y)),a}const Vi=()=>({translate:0,scale:1,origin:0,originPoint:0}),Ot=()=>({x:Vi(),y:Vi()}),Gi=()=>({min:0,max:0}),ve=()=>({x:Gi(),y:Gi()}),lo={current:null},Pl={current:!1};function Vh(){if(Pl.current=!0,!!$o)if(window.matchMedia){const t=window.matchMedia("(prefers-reduced-motion)"),e=()=>lo.current=t.matches;t.addEventListener("change",e),e()}else lo.current=!1}const Gh=new WeakMap;function jh(t,e,n){for(const a in e){const o=e[a],i=n[a];if(ke(o))t.addValue(a,o);else if(ke(i))t.addValue(a,jt(o,{owner:t}));else if(i!==o)if(t.hasValue(a)){const r=t.getValue(a);r.liveStyle===!0?r.jump(o):r.hasAnimated||r.set(o)}else{const r=t.getStaticValue(a);t.addValue(a,jt(r!==void 0?r:o,{owner:t}))}}for(const a in n)e[a]===void 0&&t.removeValue(a);return e}const ji=["AnimationStart","AnimationComplete","Update","BeforeLayoutMeasure","LayoutMeasure","LayoutAnimationStart","LayoutAnimationComplete"];class zh{scrapeMotionValuesFromProps(e,n,a){return{}}constructor({parent:e,props:n,presenceContext:a,reducedMotionConfig:o,blockInitialAnimation:i,visualState:r},s={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.values=new Map,this.KeyframeResolver=_o,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify("Update",this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.renderScheduledAt=0,this.scheduleRender=()=>{const u=Fe.now();this.renderScheduledAt<u&&(this.renderScheduledAt=u,he.render(this.render,!1,!0))};const{latestValues:c,renderState:h}=r;this.latestValues=c,this.baseTarget={...c},this.initialValues=n.initial?{...c}:{},this.renderState=h,this.parent=e,this.props=n,this.presenceContext=a,this.depth=e?e.depth+1:0,this.reducedMotionConfig=o,this.options=s,this.blockInitialAnimation=!!i,this.isControllingVariants=Pa(n),this.isVariantNode=il(n),this.isVariantNode&&(this.variantChildren=new Set),this.manuallyAnimateOnMount=!!(e&&e.current);const{willChange:l,...d}=this.scrapeMotionValuesFromProps(n,{},this);for(const u in d){const f=d[u];c[u]!==void 0&&ke(f)&&f.set(c[u])}}mount(e){this.current=e,Gh.set(e,this),this.projection&&!this.projection.instance&&this.projection.mount(e),this.parent&&this.isVariantNode&&!this.isControllingVariants&&(this.removeFromVariantTree=this.parent.addVariantChild(this)),this.values.forEach((n,a)=>this.bindToMotionValue(a,n)),Pl.current||Vh(),this.shouldReduceMotion=this.reducedMotionConfig==="never"?!1:this.reducedMotionConfig==="always"?!0:lo.current,process.env.NODE_ENV!=="production"&&No(this.shouldReduceMotion!==!0,"You have Reduced Motion enabled on your device. Animations may not appear as expected.","reduced-motion-disabled"),this.parent?.addChild(this),this.update(this.props,this.presenceContext)}unmount(){this.projection&&this.projection.unmount(),ft(this.notifyUpdate),ft(this.render),this.valueSubscriptions.forEach(e=>e()),this.valueSubscriptions.clear(),this.removeFromVariantTree&&this.removeFromVariantTree(),this.parent?.removeChild(this);for(const e in this.events)this.events[e].clear();for(const e in this.features){const n=this.features[e];n&&(n.unmount(),n.isMounted=!1)}this.current=null}addChild(e){this.children.add(e),this.enteringChildren??(this.enteringChildren=new Set),this.enteringChildren.add(e)}removeChild(e){this.children.delete(e),this.enteringChildren&&this.enteringChildren.delete(e)}bindToMotionValue(e,n){this.valueSubscriptions.has(e)&&this.valueSubscriptions.get(e)();const a=Jt.has(e);a&&this.onBindTransform&&this.onBindTransform();const o=n.on("change",r=>{this.latestValues[e]=r,this.props.onUpdate&&he.preRender(this.notifyUpdate),a&&this.projection&&(this.projection.isTransformDirty=!0),this.scheduleRender()});let i;window.MotionCheckAppearSync&&(i=window.MotionCheckAppearSync(this,e,n)),this.valueSubscriptions.set(e,()=>{o(),i&&i(),n.owner&&n.stop()})}sortNodePosition(e){return!this.current||!this.sortInstanceNodePosition||this.type!==e.type?0:this.sortInstanceNodePosition(this.current,e.current)}updateFeatures(){let e="animation";for(e in zt){const n=zt[e];if(!n)continue;const{isEnabled:a,Feature:o}=n;if(!this.features[e]&&o&&a(this.props)&&(this.features[e]=new o(this)),this.features[e]){const i=this.features[e];i.isMounted?i.update():(i.mount(),i.isMounted=!0)}}}triggerBuild(){this.build(this.renderState,this.latestValues,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):ve()}getStaticValue(e){return this.latestValues[e]}setStaticValue(e,n){this.latestValues[e]=n}update(e,n){(e.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=e,this.prevPresenceContext=this.presenceContext,this.presenceContext=n;for(let a=0;a<ji.length;a++){const o=ji[a];this.propEventSubscriptions[o]&&(this.propEventSubscriptions[o](),delete this.propEventSubscriptions[o]);const i="on"+o,r=e[i];r&&(this.propEventSubscriptions[o]=this.on(o,r))}this.prevMotionValues=jh(this,this.scrapeMotionValuesFromProps(e,this.prevProps,this),this.prevMotionValues),this.handleChildMotionValue&&this.handleChildMotionValue()}getProps(){return this.props}getVariant(e){return this.props.variants?this.props.variants[e]:void 0}getDefaultTransition(){return this.props.transition}getTransformPagePoint(){return this.props.transformPagePoint}getClosestVariantNode(){return this.isVariantNode?this:this.parent?this.parent.getClosestVariantNode():void 0}addVariantChild(e){const n=this.getClosestVariantNode();if(n)return n.variantChildren&&n.variantChildren.add(e),()=>n.variantChildren.delete(e)}addValue(e,n){const a=this.values.get(e);n!==a&&(a&&this.removeValue(e),this.bindToMotionValue(e,n),this.values.set(e,n),this.latestValues[e]=n.get())}removeValue(e){this.values.delete(e);const n=this.valueSubscriptions.get(e);n&&(n(),this.valueSubscriptions.delete(e)),delete this.latestValues[e],this.removeValueFromRenderState(e,this.renderState)}hasValue(e){return this.values.has(e)}getValue(e,n){if(this.props.values&&this.props.values[e])return this.props.values[e];let a=this.values.get(e);return a===void 0&&n!==void 0&&(a=jt(n===null?void 0:n,{owner:this}),this.addValue(e,a)),a}readValue(e,n){let a=this.latestValues[e]!==void 0||!this.current?this.latestValues[e]:this.getBaseTargetFromProps(this.props,e)??this.readValueFromInstance(this.current,e,this.options);return a!=null&&(typeof a=="string"&&(hs(a)||ps(a))?a=parseFloat(a):!nh(a)&&pt.test(n)&&(a=qs(e,n)),this.setBaseTarget(e,ke(a)?a.get():a)),ke(a)?a.get():a}setBaseTarget(e,n){this.baseTarget[e]=n}getBaseTarget(e){const{initial:n}=this.props;let a;if(typeof n=="string"||typeof n=="object"){const i=ei(this.props,n,this.presenceContext?.custom);i&&(a=i[e])}if(n&&a!==void 0)return a;const o=this.getBaseTargetFromProps(this.props,e);return o!==void 0&&!ke(o)?o:this.initialValues[e]!==void 0&&a===void 0?void 0:this.baseTarget[e]}on(e,n){return this.events[e]||(this.events[e]=new Lo),this.events[e].add(n)}notify(e,...n){this.events[e]&&this.events[e].notify(...n)}scheduleRenderMicrotask(){Ko.render(this.render)}}class wl extends zh{constructor(){super(...arguments),this.KeyframeResolver=zd}sortInstanceNodePosition(e,n){return e.compareDocumentPosition(n)&2?1:-1}getBaseTargetFromProps(e,n){return e.style?e.style[n]:void 0}removeValueFromRenderState(e,{vars:n,style:a}){delete n[e],delete a[e]}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);const{children:e}=this.props;ke(e)&&(this.childSubscription=e.on("change",n=>{this.current&&(this.current.textContent=`${n}`)}))}}function Cl(t,{style:e,vars:n},a,o){const i=t.style;let r;for(r in e)i[r]=e[r];o?.applyProjectionStyles(i,a);for(r in n)i.setProperty(r,n[r])}function _h(t){return window.getComputedStyle(t)}class Hh extends wl{constructor(){super(...arguments),this.type="html",this.renderInstance=Cl}readValueFromInstance(e,n){if(Jt.has(n))return this.projection?.isProjecting?Ya(n):sd(e,n);{const a=_h(e),o=(Rs(n)?a.getPropertyValue(n):a[n])||0;return typeof o=="string"?o.trim():o}}measureInstanceViewportBox(e,{transformPagePoint:n}){return bl(e,n)}build(e,n,a){Xo(e,n,a.transformTemplate)}scrapeMotionValuesFromProps(e,n,a){return ti(e,n,a)}}const Al=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength","startOffset","textLength","lengthAdjust"]);function Qh(t,e,n,a){Cl(t,e,void 0,a);for(const o in e.attrs)t.setAttribute(Al.has(o)?o:ni(o),e.attrs[o])}class Kh extends wl{constructor(){super(...arguments),this.type="svg",this.isSVGTag=!1,this.measureInstanceViewportBox=ve}getBaseTargetFromProps(e,n){return e[n]}readValueFromInstance(e,n){if(Jt.has(n)){const a=Ws(n);return a&&a.default||0}return n=Al.has(n)?n:ni(n),e.getAttribute(n)}scrapeMotionValuesFromProps(e,n,a){return hl(e,n,a)}build(e,n,a){ll(e,n,this.isSVGTag,a.transformTemplate,a.style)}renderInstance(e,n,a,o){Qh(e,n,a,o)}mount(e){this.isSVGTag=ul(e.tagName),super.mount(e)}}const Jh=(t,e)=>Zo(t)?new Kh(e):new Hh(e,{allowProjection:t!==z.Fragment});function Bt(t,e,n){const a=t.getProps();return ei(a,e,n!==void 0?n:a.custom,t)}const co=t=>Array.isArray(t);function Wh(t,e,n){t.hasValue(e)?t.getValue(e).set(n):t.addValue(e,jt(n))}function qh(t){return co(t)?t[t.length-1]||0:t}function Xh(t,e){const n=Bt(t,e);let{transitionEnd:a={},transition:o={},...i}=n||{};i={...i,...a};for(const r in i){const s=qh(i[r]);Wh(t,r,s)}}function Yh(t){return!!(ke(t)&&t.add)}function uo(t,e){const n=t.getValue("willChange");if(Yh(n))return n.add(e);if(!n&&ct.WillChange){const a=new ct.WillChange("auto");t.addValue("willChange",a),a.add(e)}}function Sl(t){return t.props[fl]}const Zh=t=>t!==null;function ef(t,{repeat:e,repeatType:n="loop"},a){const o=t.filter(Zh),i=e&&n!=="loop"&&e%2===1?0:o.length-1;return o[i]}const tf={type:"spring",stiffness:500,damping:25,restSpeed:10},nf=t=>({type:"spring",stiffness:550,damping:t===0?2*Math.sqrt(550):30,restSpeed:10}),af={type:"keyframes",duration:.8},of={type:"keyframes",ease:[.25,.1,.35,1],duration:.3},rf=(t,{keyframes:e})=>e.length>2?af:Jt.has(t)?t.startsWith("scale")?nf(e[1]):tf:of;function sf({when:t,delay:e,delayChildren:n,staggerChildren:a,staggerDirection:o,repeat:i,repeatType:r,repeatDelay:s,from:c,elapsed:h,...l}){return!!Object.keys(l).length}const ai=(t,e,n,a={},o,i)=>r=>{const s=Ho(a,t)||{},c=s.delay||a.delay||0;let{elapsed:h=0}=a;h=h-et(c);const l={keyframes:Array.isArray(n)?n:[null,n],ease:"easeOut",velocity:e.getVelocity(),...s,delay:-h,onUpdate:u=>{e.set(u),s.onUpdate&&s.onUpdate(u)},onComplete:()=>{r(),s.onComplete&&s.onComplete()},name:t,motionValue:e,element:i?void 0:o};sf(s)||Object.assign(l,rf(t,l)),l.duration&&(l.duration=et(l.duration)),l.repeatDelay&&(l.repeatDelay=et(l.repeatDelay)),l.from!==void 0&&(l.keyframes[0]=l.from);let d=!1;if((l.type===!1||l.duration===0&&!l.repeatDelay)&&(ao(l),l.delay===0&&(d=!0)),(ct.instantAnimations||ct.skipAnimations)&&(d=!0,ao(l),l.delay=0),l.allowFlatten=!s.type&&!s.ease,d&&!i&&e.get()!==void 0){const u=ef(l.keyframes,s);if(u!==void 0){he.update(()=>{l.onUpdate(u),l.onComplete()});return}}return s.isSync?new zo(l):new Ed(l)};function lf({protectedKeys:t,needsAnimating:e},n){const a=t.hasOwnProperty(n)&&e[n]!==!0;return e[n]=!1,a}function Tl(t,e,{delay:n=0,transitionOverride:a,type:o}={}){let{transition:i=t.getDefaultTransition(),transitionEnd:r,...s}=e;a&&(i=a);const c=[],h=o&&t.animationState&&t.animationState.getState()[o];for(const l in s){const d=t.getValue(l,t.latestValues[l]??null),u=s[l];if(u===void 0||h&&lf(h,l))continue;const f={delay:n,...Ho(i||{},l)},m=d.get();if(m!==void 0&&!d.isAnimating&&!Array.isArray(u)&&u===m&&!f.velocity)continue;let P=!1;if(window.MotionHandoffAnimation){const b=Sl(t);if(b){const E=window.MotionHandoffAnimation(b,l,he);E!==null&&(f.startTime=E,P=!0)}}uo(t,l),d.start(ai(l,d,u,t.shouldReduceMotion&&Qs.has(l)?{type:!1}:f,t,P));const A=d.animation;A&&c.push(A)}return r&&Promise.all(c).then(()=>{he.update(()=>{r&&Xh(t,r)})}),c}function kl(t,e,n,a=0,o=1){const i=Array.from(t).sort((h,l)=>h.sortNodePosition(l)).indexOf(e),r=t.size,s=(r-1)*a;return typeof n=="function"?n(i,r):o===1?i*a:s-i*a}function ho(t,e,n={}){const a=Bt(t,e,n.type==="exit"?t.presenceContext?.custom:void 0);let{transition:o=t.getDefaultTransition()||{}}=a||{};n.transitionOverride&&(o=n.transitionOverride);const i=a?()=>Promise.all(Tl(t,a,n)):()=>Promise.resolve(),r=t.variantChildren&&t.variantChildren.size?(c=0)=>{const{delayChildren:h=0,staggerChildren:l,staggerDirection:d}=o;return cf(t,e,c,h,l,d,n)}:()=>Promise.resolve(),{when:s}=o;if(s){const[c,h]=s==="beforeChildren"?[i,r]:[r,i];return c().then(()=>h())}else return Promise.all([i(),r(n.delay)])}function cf(t,e,n=0,a=0,o=0,i=1,r){const s=[];for(const c of t.variantChildren)c.notify("AnimationStart",e),s.push(ho(c,e,{...r,delay:n+(typeof a=="function"?0:a)+kl(t.variantChildren,c,a,o,i)}).then(()=>c.notify("AnimationComplete",e)));return Promise.all(s)}function uf(t,e,n={}){t.notify("AnimationStart",e);let a;if(Array.isArray(e)){const o=e.map(i=>ho(t,i,n));a=Promise.all(o)}else if(typeof e=="string")a=ho(t,e,n);else{const o=typeof e=="function"?Bt(t,e,n.custom):e;a=Promise.all(Tl(t,o,n))}return a.then(()=>{t.notify("AnimationComplete",e)})}function $l(t,e){if(!Array.isArray(e))return!1;const n=e.length;if(n!==t.length)return!1;for(let a=0;a<n;a++)if(e[a]!==t[a])return!1;return!0}const df=qo.length;function Rl(t){if(!t)return;if(!t.isControllingVariants){const n=t.parent?Rl(t.parent)||{}:{};return t.props.initial!==void 0&&(n.initial=t.props.initial),n}const e={};for(let n=0;n<df;n++){const a=qo[n],o=t.props[a];(dn(o)||o===!1)&&(e[a]=o)}return e}const hf=[...Wo].reverse(),ff=Wo.length;function pf(t){return e=>Promise.all(e.map(({animation:n,options:a})=>uf(t,n,a)))}function mf(t){let e=pf(t),n=zi(),a=!0;const o=c=>(h,l)=>{const d=Bt(t,l,c==="exit"?t.presenceContext?.custom:void 0);if(d){const{transition:u,transitionEnd:f,...m}=d;h={...h,...m,...f}}return h};function i(c){e=c(t)}function r(c){const{props:h}=t,l=Rl(t.parent)||{},d=[],u=new Set;let f={},m=1/0;for(let A=0;A<ff;A++){const b=hf[A],E=n[b],T=h[b]!==void 0?h[b]:l[b],S=dn(T),M=b===c?E.isActive:null;M===!1&&(m=A);let C=T===l[b]&&T!==h[b]&&S;if(C&&a&&t.manuallyAnimateOnMount&&(C=!1),E.protectedKeys={...f},!E.isActive&&M===null||!T&&!E.prevProp||ba(T)||typeof T=="boolean")continue;const F=gf(E.prevProp,T);let g=F||b===c&&E.isActive&&!C&&S||A>m&&S,v=!1;const k=Array.isArray(T)?T:[T];let R=k.reduce(o(b),{});M===!1&&(R={});const{prevResolvedValues:x={}}=E,N={...x,...R},$=y=>{g=!0,u.has(y)&&(v=!0,u.delete(y)),E.needsAnimating[y]=!0;const U=t.getValue(y);U&&(U.liveStyle=!1)};for(const y in N){const U=R[y],L=x[y];if(f.hasOwnProperty(y))continue;let B=!1;co(U)&&co(L)?B=!$l(U,L):B=U!==L,B?U!=null?$(y):u.add(y):U!==void 0&&u.has(y)?$(y):E.protectedKeys[y]=!0}E.prevProp=T,E.prevResolvedValues=R,E.isActive&&(f={...f,...R}),a&&t.blockInitialAnimation&&(g=!1);const I=C&&F;g&&(!I||v)&&d.push(...k.map(y=>{const U={type:b};if(typeof y=="string"&&a&&!I&&t.manuallyAnimateOnMount&&t.parent){const{parent:L}=t,B=Bt(L,y);if(L.enteringChildren&&B){const{delayChildren:J}=B.transition||{};U.delay=kl(L.enteringChildren,t,J)}}return{animation:y,options:U}}))}if(u.size){const A={};if(typeof h.initial!="boolean"){const b=Bt(t,Array.isArray(h.initial)?h.initial[0]:h.initial);b&&b.transition&&(A.transition=b.transition)}u.forEach(b=>{const E=t.getBaseTarget(b),T=t.getValue(b);T&&(T.liveStyle=!0),A[b]=E??null}),d.push({animation:A})}let P=!!d.length;return a&&(h.initial===!1||h.initial===h.animate)&&!t.manuallyAnimateOnMount&&(P=!1),a=!1,P?e(d):Promise.resolve()}function s(c,h){if(n[c].isActive===h)return Promise.resolve();t.variantChildren?.forEach(d=>d.animationState?.setActive(c,h)),n[c].isActive=h;const l=r(c);for(const d in n)n[d].protectedKeys={};return l}return{animateChanges:r,setActive:s,setAnimateFunction:i,getState:()=>n,reset:()=>{n=zi()}}}function gf(t,e){return typeof e=="string"?e!==t:Array.isArray(e)?!$l(e,t):!1}function vt(t=!1){return{isActive:t,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}}}function zi(){return{animate:vt(!0),whileInView:vt(),whileHover:vt(),whileTap:vt(),whileDrag:vt(),whileFocus:vt(),exit:vt()}}class mt{constructor(e){this.isMounted=!1,this.node=e}update(){}}class yf extends mt{constructor(e){super(e),e.animationState||(e.animationState=mf(e))}updateAnimationControlsSubscription(){const{animate:e}=this.node.getProps();ba(e)&&(this.unmountControls=e.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){const{animate:e}=this.node.getProps(),{animate:n}=this.node.prevProps||{};e!==n&&this.updateAnimationControlsSubscription()}unmount(){this.node.animationState.reset(),this.unmountControls?.()}}let vf=0;class bf extends mt{constructor(){super(...arguments),this.id=vf++}update(){if(!this.node.presenceContext)return;const{isPresent:e,onExitComplete:n}=this.node.presenceContext,{isPresent:a}=this.node.prevPresenceContext||{};if(!this.node.animationState||e===a)return;const o=this.node.animationState.setActive("exit",!e);n&&!e&&o.then(()=>{n(this.id)})}mount(){const{register:e,onExitComplete:n}=this.node.presenceContext||{};n&&n(this.id),e&&(this.unmount=e(this.id))}unmount(){}}const Pf={animation:{Feature:yf},exit:{Feature:bf}};function hn(t,e,n,a={passive:!0}){return t.addEventListener(e,n,a),()=>t.removeEventListener(e,n)}function yn(t){return{point:{x:t.pageX,y:t.pageY}}}const wf=t=>e=>Jo(e)&&t(e,yn(e));function tn(t,e,n,a){return hn(t,e,wf(n),a)}const xl=1e-4,Cf=1-xl,Af=1+xl,El=.01,Sf=0-El,Tf=0+El;function Me(t){return t.max-t.min}function kf(t,e,n){return Math.abs(t-e)<=n}function _i(t,e,n,a=.5){t.origin=a,t.originPoint=pe(e.min,e.max,t.origin),t.scale=Me(n)/Me(e),t.translate=pe(n.min,n.max,t.origin)-t.originPoint,(t.scale>=Cf&&t.scale<=Af||isNaN(t.scale))&&(t.scale=1),(t.translate>=Sf&&t.translate<=Tf||isNaN(t.translate))&&(t.translate=0)}function nn(t,e,n,a){_i(t.x,e.x,n.x,a?a.originX:void 0),_i(t.y,e.y,n.y,a?a.originY:void 0)}function Hi(t,e,n){t.min=n.min+e.min,t.max=t.min+Me(e)}function $f(t,e,n){Hi(t.x,e.x,n.x),Hi(t.y,e.y,n.y)}function Qi(t,e,n){t.min=e.min-n.min,t.max=t.min+Me(e)}function ca(t,e,n){Qi(t.x,e.x,n.x),Qi(t.y,e.y,n.y)}function ze(t){return[t("x"),t("y")]}const Ml=({current:t})=>t?t.ownerDocument.defaultView:null,Ki=(t,e)=>Math.abs(t-e);function Rf(t,e){const n=Ki(t.x,e.x),a=Ki(t.y,e.y);return Math.sqrt(n**2+a**2)}class Ll{constructor(e,n,{transformPagePoint:a,contextWindow:o=window,dragSnapToOrigin:i=!1,distanceThreshold:r=3}={}){if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.handlers={},this.contextWindow=window,this.updatePoint=()=>{if(!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const u=Fa(this.lastMoveEventInfo,this.history),f=this.startEvent!==null,m=Rf(u.offset,{x:0,y:0})>=this.distanceThreshold;if(!f&&!m)return;const{point:P}=u,{timestamp:A}=Ae;this.history.push({...P,timestamp:A});const{onStart:b,onMove:E}=this.handlers;f||(b&&b(this.lastMoveEvent,u),this.startEvent=this.lastMoveEvent),E&&E(this.lastMoveEvent,u)},this.handlePointerMove=(u,f)=>{this.lastMoveEvent=u,this.lastMoveEventInfo=Na(f,this.transformPagePoint),he.update(this.updatePoint,!0)},this.handlePointerUp=(u,f)=>{this.end();const{onEnd:m,onSessionEnd:P,resumeAnimation:A}=this.handlers;if(this.dragSnapToOrigin&&A&&A(),!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const b=Fa(u.type==="pointercancel"?this.lastMoveEventInfo:Na(f,this.transformPagePoint),this.history);this.startEvent&&m&&m(u,b),P&&P(u,b)},!Jo(e))return;this.dragSnapToOrigin=i,this.handlers=n,this.transformPagePoint=a,this.distanceThreshold=r,this.contextWindow=o||window;const s=yn(e),c=Na(s,this.transformPagePoint),{point:h}=c,{timestamp:l}=Ae;this.history=[{...h,timestamp:l}];const{onSessionStart:d}=n;d&&d(e,Fa(c,this.history)),this.removeListeners=pn(tn(this.contextWindow,"pointermove",this.handlePointerMove),tn(this.contextWindow,"pointerup",this.handlePointerUp),tn(this.contextWindow,"pointercancel",this.handlePointerUp))}updateHandlers(e){this.handlers=e}end(){this.removeListeners&&this.removeListeners(),ft(this.updatePoint)}}function Na(t,e){return e?{point:e(t.point)}:t}function Ji(t,e){return{x:t.x-e.x,y:t.y-e.y}}function Fa({point:t},e){return{point:t,delta:Ji(t,Nl(e)),offset:Ji(t,xf(e)),velocity:Ef(e,.1)}}function xf(t){return t[0]}function Nl(t){return t[t.length-1]}function Ef(t,e){if(t.length<2)return{x:0,y:0};let n=t.length-1,a=null;const o=Nl(t);for(;n>=0&&(a=t[n],!(o.timestamp-a.timestamp>et(e)));)n--;if(!a)return{x:0,y:0};const i=He(o.timestamp-a.timestamp);if(i===0)return{x:0,y:0};const r={x:(o.x-a.x)/i,y:(o.y-a.y)/i};return r.x===1/0&&(r.x=0),r.y===1/0&&(r.y=0),r}function Mf(t,{min:e,max:n},a){return e!==void 0&&t<e?t=a?pe(e,t,a.min):Math.max(t,e):n!==void 0&&t>n&&(t=a?pe(n,t,a.max):Math.min(t,n)),t}function Wi(t,e,n){return{min:e!==void 0?t.min+e:void 0,max:n!==void 0?t.max+n-(t.max-t.min):void 0}}function Lf(t,{top:e,left:n,bottom:a,right:o}){return{x:Wi(t.x,n,o),y:Wi(t.y,e,a)}}function qi(t,e){let n=e.min-t.min,a=e.max-t.max;return e.max-e.min<t.max-t.min&&([n,a]=[a,n]),{min:n,max:a}}function Nf(t,e){return{x:qi(t.x,e.x),y:qi(t.y,e.y)}}function Ff(t,e){let n=.5;const a=Me(t),o=Me(e);return o>a?n=ln(e.min,e.max-a,t.min):a>o&&(n=ln(t.min,t.max-o,e.min)),st(0,1,n)}function If(t,e){const n={};return e.min!==void 0&&(n.min=e.min-t.min),e.max!==void 0&&(n.max=e.max-t.min),n}const fo=.35;function Uf(t=fo){return t===!1?t=0:t===!0&&(t=fo),{x:Xi(t,"left","right"),y:Xi(t,"top","bottom")}}function Xi(t,e,n){return{min:Yi(t,e),max:Yi(t,n)}}function Yi(t,e){return typeof t=="number"?t:t[e]||0}const Of=new WeakMap;class Df{constructor(e){this.openDragLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=ve(),this.latestPointerEvent=null,this.latestPanInfo=null,this.visualElement=e}start(e,{snapToCursor:n=!1,distanceThreshold:a}={}){const{presenceContext:o}=this.visualElement;if(o&&o.isPresent===!1)return;const i=d=>{const{dragSnapToOrigin:u}=this.getProps();u?this.pauseAnimation():this.stopAnimation(),n&&this.snapToCursor(yn(d).point)},r=(d,u)=>{const{drag:f,dragPropagation:m,onDragStart:P}=this.getProps();if(f&&!m&&(this.openDragLock&&this.openDragLock(),this.openDragLock=Jd(f),!this.openDragLock))return;this.latestPointerEvent=d,this.latestPanInfo=u,this.isDragging=!0,this.currentDirection=null,this.resolveConstraints(),this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!0,this.visualElement.projection.target=void 0),ze(b=>{let E=this.getAxisMotionValue(b).get()||0;if(it.test(E)){const{projection:T}=this.visualElement;if(T&&T.layout){const S=T.layout.layoutBox[b];S&&(E=Me(S)*(parseFloat(E)/100))}}this.originPoint[b]=E}),P&&he.postRender(()=>P(d,u)),uo(this.visualElement,"transform");const{animationState:A}=this.visualElement;A&&A.setActive("whileDrag",!0)},s=(d,u)=>{this.latestPointerEvent=d,this.latestPanInfo=u;const{dragPropagation:f,dragDirectionLock:m,onDirectionLock:P,onDrag:A}=this.getProps();if(!f&&!this.openDragLock)return;const{offset:b}=u;if(m&&this.currentDirection===null){this.currentDirection=Bf(b),this.currentDirection!==null&&P&&P(this.currentDirection);return}this.updateAxis("x",u.point,b),this.updateAxis("y",u.point,b),this.visualElement.render(),A&&A(d,u)},c=(d,u)=>{this.latestPointerEvent=d,this.latestPanInfo=u,this.stop(d,u),this.latestPointerEvent=null,this.latestPanInfo=null},h=()=>ze(d=>this.getAnimationState(d)==="paused"&&this.getAxisMotionValue(d).animation?.play()),{dragSnapToOrigin:l}=this.getProps();this.panSession=new Ll(e,{onSessionStart:i,onStart:r,onMove:s,onSessionEnd:c,resumeAnimation:h},{transformPagePoint:this.visualElement.getTransformPagePoint(),dragSnapToOrigin:l,distanceThreshold:a,contextWindow:Ml(this.visualElement)})}stop(e,n){const a=e||this.latestPointerEvent,o=n||this.latestPanInfo,i=this.isDragging;if(this.cancel(),!i||!o||!a)return;const{velocity:r}=o;this.startAnimation(r);const{onDragEnd:s}=this.getProps();s&&he.postRender(()=>s(a,o))}cancel(){this.isDragging=!1;const{projection:e,animationState:n}=this.visualElement;e&&(e.isAnimationBlocked=!1),this.panSession&&this.panSession.end(),this.panSession=void 0;const{dragPropagation:a}=this.getProps();!a&&this.openDragLock&&(this.openDragLock(),this.openDragLock=null),n&&n.setActive("whileDrag",!1)}updateAxis(e,n,a){const{drag:o}=this.getProps();if(!a||!Hn(e,o,this.currentDirection))return;const i=this.getAxisMotionValue(e);let r=this.originPoint[e]+a[e];this.constraints&&this.constraints[e]&&(r=Mf(r,this.constraints[e],this.elastic[e])),i.set(r)}resolveConstraints(){const{dragConstraints:e,dragElastic:n}=this.getProps(),a=this.visualElement.projection&&!this.visualElement.projection.layout?this.visualElement.projection.measure(!1):this.visualElement.projection?.layout,o=this.constraints;e&&Ft(e)?this.constraints||(this.constraints=this.resolveRefConstraints()):e&&a?this.constraints=Lf(a.layoutBox,e):this.constraints=!1,this.elastic=Uf(n),o!==this.constraints&&a&&this.constraints&&!this.hasMutatedConstraints&&ze(i=>{this.constraints!==!1&&this.getAxisMotionValue(i)&&(this.constraints[i]=If(a.layoutBox[i],this.constraints[i]))})}resolveRefConstraints(){const{dragConstraints:e,onMeasureDragConstraints:n}=this.getProps();if(!e||!Ft(e))return!1;const a=e.current;lt(a!==null,"If `dragConstraints` is set as a React ref, that ref must be passed to another component's `ref` prop.","drag-constraints-ref");const{projection:o}=this.visualElement;if(!o||!o.layout)return!1;const i=Bh(a,o.root,this.visualElement.getTransformPagePoint());let r=Nf(o.layout.layoutBox,i);if(n){const s=n(Uh(r));this.hasMutatedConstraints=!!s,s&&(r=gl(s))}return r}startAnimation(e){const{drag:n,dragMomentum:a,dragElastic:o,dragTransition:i,dragSnapToOrigin:r,onDragTransitionEnd:s}=this.getProps(),c=this.constraints||{},h=ze(l=>{if(!Hn(l,n,this.currentDirection))return;let d=c&&c[l]||{};r&&(d={min:0,max:0});const u=o?200:1e6,f=o?40:1e7,m={type:"inertia",velocity:a?e[l]:0,bounceStiffness:u,bounceDamping:f,timeConstant:750,restDelta:1,restSpeed:10,...i,...d};return this.startAxisValueAnimation(l,m)});return Promise.all(h).then(s)}startAxisValueAnimation(e,n){const a=this.getAxisMotionValue(e);return uo(this.visualElement,e),a.start(ai(e,a,0,n,this.visualElement,!1))}stopAnimation(){ze(e=>this.getAxisMotionValue(e).stop())}pauseAnimation(){ze(e=>this.getAxisMotionValue(e).animation?.pause())}getAnimationState(e){return this.getAxisMotionValue(e).animation?.state}getAxisMotionValue(e){const n=`_drag${e.toUpperCase()}`,a=this.visualElement.getProps(),o=a[n];return o||this.visualElement.getValue(e,(a.initial?a.initial[e]:void 0)||0)}snapToCursor(e){ze(n=>{const{drag:a}=this.getProps();if(!Hn(n,a,this.currentDirection))return;const{projection:o}=this.visualElement,i=this.getAxisMotionValue(n);if(o&&o.layout){const{min:r,max:s}=o.layout.layoutBox[n];i.set(e[n]-pe(r,s,.5))}})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;const{drag:e,dragConstraints:n}=this.getProps(),{projection:a}=this.visualElement;if(!Ft(n)||!a||!this.constraints)return;this.stopAnimation();const o={x:0,y:0};ze(r=>{const s=this.getAxisMotionValue(r);if(s&&this.constraints!==!1){const c=s.get();o[r]=Ff({min:c,max:c},this.constraints[r])}});const{transformTemplate:i}=this.visualElement.getProps();this.visualElement.current.style.transform=i?i({},""):"none",a.root&&a.root.updateScroll(),a.updateLayout(),this.resolveConstraints(),ze(r=>{if(!Hn(r,e,null))return;const s=this.getAxisMotionValue(r),{min:c,max:h}=this.constraints[r];s.set(pe(c,h,o[r]))})}addListeners(){if(!this.visualElement.current)return;Of.set(this.visualElement,this);const e=this.visualElement.current,n=tn(e,"pointerdown",c=>{const{drag:h,dragListener:l=!0}=this.getProps();h&&l&&this.start(c)}),a=()=>{const{dragConstraints:c}=this.getProps();Ft(c)&&c.current&&(this.constraints=this.resolveRefConstraints())},{projection:o}=this.visualElement,i=o.addEventListener("measure",a);o&&!o.layout&&(o.root&&o.root.updateScroll(),o.updateLayout()),he.read(a);const r=hn(window,"resize",()=>this.scalePositionWithinConstraints()),s=o.addEventListener("didUpdate",(({delta:c,hasLayoutChanged:h})=>{this.isDragging&&h&&(ze(l=>{const d=this.getAxisMotionValue(l);d&&(this.originPoint[l]+=c[l].translate,d.set(d.get()+c[l].translate))}),this.visualElement.render())}));return()=>{r(),n(),i(),s&&s()}}getProps(){const e=this.visualElement.getProps(),{drag:n=!1,dragDirectionLock:a=!1,dragPropagation:o=!1,dragConstraints:i=!1,dragElastic:r=fo,dragMomentum:s=!0}=e;return{...e,drag:n,dragDirectionLock:a,dragPropagation:o,dragConstraints:i,dragElastic:r,dragMomentum:s}}}function Hn(t,e,n){return(e===!0||e===t)&&(n===null||n===t)}function Bf(t,e=10){let n=null;return Math.abs(t.y)>e?n="y":Math.abs(t.x)>e&&(n="x"),n}class Vf extends mt{constructor(e){super(e),this.removeGroupControls=Qe,this.removeListeners=Qe,this.controls=new Df(e)}mount(){const{dragControls:e}=this.node.getProps();e&&(this.removeGroupControls=e.subscribe(this.controls)),this.removeListeners=this.controls.addListeners()||Qe}unmount(){this.removeGroupControls(),this.removeListeners()}}const Zi=t=>(e,n)=>{t&&he.postRender(()=>t(e,n))};class Gf extends mt{constructor(){super(...arguments),this.removePointerDownListener=Qe}onPointerDown(e){this.session=new Ll(e,this.createPanHandlers(),{transformPagePoint:this.node.getTransformPagePoint(),contextWindow:Ml(this.node)})}createPanHandlers(){const{onPanSessionStart:e,onPanStart:n,onPan:a,onPanEnd:o}=this.node.getProps();return{onSessionStart:Zi(e),onStart:Zi(n),onMove:a,onEnd:(i,r)=>{delete this.session,o&&he.postRender(()=>o(i,r))}}}mount(){this.removePointerDownListener=tn(this.node.current,"pointerdown",e=>this.onPointerDown(e))}update(){this.session&&this.session.updateHandlers(this.createPanHandlers())}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}}const Xn={hasAnimatedSinceResize:!0,hasEverUpdated:!1};let Ia=!1;class jf extends z.Component{componentDidMount(){const{visualElement:e,layoutGroup:n,switchLayoutGroup:a,layoutId:o}=this.props,{projection:i}=e;i&&(n.group&&n.group.add(i),a&&a.register&&o&&a.register(i),Ia&&i.root.didUpdate(),i.addEventListener("animationComplete",()=>{this.safeToRemove()}),i.setOptions({...i.options,onExitComplete:()=>this.safeToRemove()})),Xn.hasEverUpdated=!0}getSnapshotBeforeUpdate(e){const{layoutDependency:n,visualElement:a,drag:o,isPresent:i}=this.props,{projection:r}=a;return r&&(r.isPresent=i,Ia=!0,o||e.layoutDependency!==n||n===void 0||e.isPresent!==i?r.willUpdate():this.safeToRemove(),e.isPresent!==i&&(i?r.promote():r.relegate()||he.postRender(()=>{const s=r.getStack();(!s||!s.members.length)&&this.safeToRemove()}))),null}componentDidUpdate(){const{projection:e}=this.props.visualElement;e&&(e.root.didUpdate(),Ko.postRender(()=>{!e.currentAnimation&&e.isLead()&&this.safeToRemove()}))}componentWillUnmount(){const{visualElement:e,layoutGroup:n,switchLayoutGroup:a}=this.props,{projection:o}=e;Ia=!0,o&&(o.scheduleCheckAfterUnmount(),n&&n.group&&n.group.remove(o),a&&a.deregister&&a.deregister(o))}safeToRemove(){const{safeToRemove:e}=this.props;e&&e()}render(){return null}}function Fl(t){const[e,n]=ah(),a=z.useContext(ds);return oe.jsx(jf,{...t,layoutGroup:a,switchLayoutGroup:z.useContext(pl),isPresent:e,safeToRemove:n})}function zf(t,e,n){const a=ke(t)?t:jt(t);return a.start(ai("",a,e,n)),a.animation}const _f=(t,e)=>t.depth-e.depth;class Hf{constructor(){this.children=[],this.isDirty=!1}add(e){xo(this.children,e),this.isDirty=!0}remove(e){Eo(this.children,e),this.isDirty=!0}forEach(e){this.isDirty&&this.children.sort(_f),this.isDirty=!1,this.children.forEach(e)}}function Qf(t,e){const n=Fe.now(),a=({timestamp:o})=>{const i=o-n;i>=e&&(ft(a),t(i-e))};return he.setup(a,!0),()=>ft(a)}const Il=["TopLeft","TopRight","BottomLeft","BottomRight"],Kf=Il.length,er=t=>typeof t=="string"?parseFloat(t):t,tr=t=>typeof t=="number"||Y.test(t);function Jf(t,e,n,a,o,i){o?(t.opacity=pe(0,n.opacity??1,Wf(a)),t.opacityExit=pe(e.opacity??1,0,qf(a))):i&&(t.opacity=pe(e.opacity??1,n.opacity??1,a));for(let r=0;r<Kf;r++){const s=`border${Il[r]}Radius`;let c=nr(e,s),h=nr(n,s);if(c===void 0&&h===void 0)continue;c||(c=0),h||(h=0),c===0||h===0||tr(c)===tr(h)?(t[s]=Math.max(pe(er(c),er(h),a),0),(it.test(h)||it.test(c))&&(t[s]+="%")):t[s]=h}(e.rotate||n.rotate)&&(t.rotate=pe(e.rotate||0,n.rotate||0,a))}function nr(t,e){return t[e]!==void 0?t[e]:t.borderRadius}const Wf=Ul(0,.5,Cs),qf=Ul(.5,.95,Qe);function Ul(t,e,n){return a=>a<t?0:a>e?1:n(ln(t,e,a))}function ar(t,e){t.min=e.min,t.max=e.max}function We(t,e){ar(t.x,e.x),ar(t.y,e.y)}function or(t,e){t.translate=e.translate,t.scale=e.scale,t.originPoint=e.originPoint,t.origin=e.origin}function ir(t,e,n,a,o){return t-=e,t=la(t,1/n,a),o!==void 0&&(t=la(t,1/o,a)),t}function Xf(t,e=0,n=1,a=.5,o,i=t,r=t){if(it.test(e)&&(e=parseFloat(e),e=pe(r.min,r.max,e/100)-r.min),typeof e!="number")return;let s=pe(i.min,i.max,a);t===i&&(s-=e),t.min=ir(t.min,e,n,s,o),t.max=ir(t.max,e,n,s,o)}function rr(t,e,[n,a,o],i,r){Xf(t,e[n],e[a],e[o],e.scale,i,r)}const Yf=["x","scaleX","originX"],Zf=["y","scaleY","originY"];function sr(t,e,n,a){rr(t.x,e,Yf,n?n.x:void 0,a?a.x:void 0),rr(t.y,e,Zf,n?n.y:void 0,a?a.y:void 0)}function lr(t){return t.translate===0&&t.scale===1}function Ol(t){return lr(t.x)&&lr(t.y)}function cr(t,e){return t.min===e.min&&t.max===e.max}function ep(t,e){return cr(t.x,e.x)&&cr(t.y,e.y)}function ur(t,e){return Math.round(t.min)===Math.round(e.min)&&Math.round(t.max)===Math.round(e.max)}function Dl(t,e){return ur(t.x,e.x)&&ur(t.y,e.y)}function dr(t){return Me(t.x)/Me(t.y)}function hr(t,e){return t.translate===e.translate&&t.scale===e.scale&&t.originPoint===e.originPoint}class tp{constructor(){this.members=[]}add(e){xo(this.members,e),e.scheduleRender()}remove(e){if(Eo(this.members,e),e===this.prevLead&&(this.prevLead=void 0),e===this.lead){const n=this.members[this.members.length-1];n&&this.promote(n)}}relegate(e){const n=this.members.findIndex(o=>e===o);if(n===0)return!1;let a;for(let o=n;o>=0;o--){const i=this.members[o];if(i.isPresent!==!1){a=i;break}}return a?(this.promote(a),!0):!1}promote(e,n){const a=this.lead;if(e!==a&&(this.prevLead=a,this.lead=e,e.show(),a)){a.instance&&a.scheduleRender(),e.scheduleRender(),e.resumeFrom=a,n&&(e.resumeFrom.preserveOpacity=!0),a.snapshot&&(e.snapshot=a.snapshot,e.snapshot.latestValues=a.animationValues||a.latestValues),e.root&&e.root.isUpdating&&(e.isLayoutDirty=!0);const{crossfade:o}=e.options;o===!1&&a.hide()}}exitAnimationComplete(){this.members.forEach(e=>{const{options:n,resumingFrom:a}=e;n.onExitComplete&&n.onExitComplete(),a&&a.options.onExitComplete&&a.options.onExitComplete()})}scheduleRender(){this.members.forEach(e=>{e.instance&&e.scheduleRender(!1)})}removeLeadSnapshot(){this.lead&&this.lead.snapshot&&(this.lead.snapshot=void 0)}}function np(t,e,n){let a="";const o=t.x.translate/e.x,i=t.y.translate/e.y,r=n?.z||0;if((o||i||r)&&(a=`translate3d(${o}px, ${i}px, ${r}px) `),(e.x!==1||e.y!==1)&&(a+=`scale(${1/e.x}, ${1/e.y}) `),n){const{transformPerspective:h,rotate:l,rotateX:d,rotateY:u,skewX:f,skewY:m}=n;h&&(a=`perspective(${h}px) ${a}`),l&&(a+=`rotate(${l}deg) `),d&&(a+=`rotateX(${d}deg) `),u&&(a+=`rotateY(${u}deg) `),f&&(a+=`skewX(${f}deg) `),m&&(a+=`skewY(${m}deg) `)}const s=t.x.scale*e.x,c=t.y.scale*e.y;return(s!==1||c!==1)&&(a+=`scale(${s}, ${c})`),a||"none"}const Ua=["","X","Y","Z"],ap=1e3;let op=0;function Oa(t,e,n,a){const{latestValues:o}=e;o[t]&&(n[t]=o[t],e.setStaticValue(t,0),a&&(a[t]=0))}function Bl(t){if(t.hasCheckedOptimisedAppear=!0,t.root===t)return;const{visualElement:e}=t.options;if(!e)return;const n=Sl(e);if(window.MotionHasOptimisedAnimation(n,"transform")){const{layout:o,layoutId:i}=t.options;window.MotionCancelOptimisedAnimation(n,"transform",he,!(o||i))}const{parent:a}=t;a&&!a.hasCheckedOptimisedAppear&&Bl(a)}function Vl({attachResizeListener:t,defaultParent:e,measureScroll:n,checkIsScrollRoot:a,resetTransform:o}){return class{constructor(r={},s=e?.()){this.id=op++,this.animationId=0,this.animationCommitId=0,this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.isProjectionDirty=!1,this.isSharedProjectionDirty=!1,this.isTransformDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.hasCheckedOptimisedAppear=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.hasTreeAnimated=!1,this.layoutVersion=0,this.updateScheduled=!1,this.scheduleUpdate=()=>this.update(),this.projectionUpdateScheduled=!1,this.checkUpdateFailed=()=>{this.isUpdating&&(this.isUpdating=!1,this.clearAllSnapshots())},this.updateProjection=()=>{this.projectionUpdateScheduled=!1,this.nodes.forEach(sp),this.nodes.forEach(dp),this.nodes.forEach(hp),this.nodes.forEach(lp)},this.resolvedRelativeTargetAt=0,this.linkedParentVersion=0,this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.latestValues=r,this.root=s?s.root||s:this,this.path=s?[...s.path,s]:[],this.parent=s,this.depth=s?s.depth+1:0;for(let c=0;c<this.path.length;c++)this.path[c].shouldResetTransform=!0;this.root===this&&(this.nodes=new Hf)}addEventListener(r,s){return this.eventHandlers.has(r)||this.eventHandlers.set(r,new Lo),this.eventHandlers.get(r).add(s)}notifyListeners(r,...s){const c=this.eventHandlers.get(r);c&&c.notify(...s)}hasListeners(r){return this.eventHandlers.has(r)}mount(r){if(this.instance)return;this.isSVG=tl(r)&&!eh(r),this.instance=r;const{layoutId:s,layout:c,visualElement:h}=this.options;if(h&&!h.current&&h.mount(r),this.root.nodes.add(this),this.parent&&this.parent.children.add(this),this.root.hasTreeAnimated&&(c||s)&&(this.isLayoutDirty=!0),t){let l,d=0;const u=()=>this.root.updateBlockedByResize=!1;he.read(()=>{d=window.innerWidth}),t(r,()=>{const f=window.innerWidth;f!==d&&(d=f,this.root.updateBlockedByResize=!0,l&&l(),l=Qf(u,250),Xn.hasAnimatedSinceResize&&(Xn.hasAnimatedSinceResize=!1,this.nodes.forEach(mr)))})}s&&this.root.registerSharedNode(s,this),this.options.animate!==!1&&h&&(s||c)&&this.addEventListener("didUpdate",({delta:l,hasLayoutChanged:d,hasRelativeLayoutChanged:u,layout:f})=>{if(this.isTreeAnimationBlocked()){this.target=void 0,this.relativeTarget=void 0;return}const m=this.options.transition||h.getDefaultTransition()||yp,{onLayoutAnimationStart:P,onLayoutAnimationComplete:A}=h.getProps(),b=!this.targetLayout||!Dl(this.targetLayout,f),E=!d&&u;if(this.options.layoutRoot||this.resumeFrom||E||d&&(b||!this.currentAnimation)){this.resumeFrom&&(this.resumingFrom=this.resumeFrom,this.resumingFrom.resumingFrom=void 0);const T={...Ho(m,"layout"),onPlay:P,onComplete:A};(h.shouldReduceMotion||this.options.layoutRoot)&&(T.delay=0,T.type=!1),this.startAnimation(T),this.setAnimationOrigin(l,E)}else d||mr(this),this.isLead()&&this.options.onExitComplete&&this.options.onExitComplete();this.targetLayout=f})}unmount(){this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this);const r=this.getStack();r&&r.remove(this),this.parent&&this.parent.children.delete(this),this.instance=void 0,this.eventHandlers.clear(),ft(this.updateProjection)}blockUpdate(){this.updateManuallyBlocked=!0}unblockUpdate(){this.updateManuallyBlocked=!1}isUpdateBlocked(){return this.updateManuallyBlocked||this.updateBlockedByResize}isTreeAnimationBlocked(){return this.isAnimationBlocked||this.parent&&this.parent.isTreeAnimationBlocked()||!1}startUpdate(){this.isUpdateBlocked()||(this.isUpdating=!0,this.nodes&&this.nodes.forEach(fp),this.animationId++)}getTransformTemplate(){const{visualElement:r}=this.options;return r&&r.getProps().transformTemplate}willUpdate(r=!0){if(this.root.hasTreeAnimated=!0,this.root.isUpdateBlocked()){this.options.onExitComplete&&this.options.onExitComplete();return}if(window.MotionCancelOptimisedAnimation&&!this.hasCheckedOptimisedAppear&&Bl(this),!this.root.isUpdating&&this.root.startUpdate(),this.isLayoutDirty)return;this.isLayoutDirty=!0;for(let l=0;l<this.path.length;l++){const d=this.path[l];d.shouldResetTransform=!0,d.updateScroll("snapshot"),d.options.layoutRoot&&d.willUpdate(!1)}const{layoutId:s,layout:c}=this.options;if(s===void 0&&!c)return;const h=this.getTransformTemplate();this.prevTransformTemplateValue=h?h(this.latestValues,""):void 0,this.updateSnapshot(),r&&this.notifyListeners("willUpdate")}update(){if(this.updateScheduled=!1,this.isUpdateBlocked()){this.unblockUpdate(),this.clearAllSnapshots(),this.nodes.forEach(fr);return}if(this.animationId<=this.animationCommitId){this.nodes.forEach(pr);return}this.animationCommitId=this.animationId,this.isUpdating?(this.isUpdating=!1,this.nodes.forEach(up),this.nodes.forEach(ip),this.nodes.forEach(rp)):this.nodes.forEach(pr),this.clearAllSnapshots();const s=Fe.now();Ae.delta=st(0,1e3/60,s-Ae.timestamp),Ae.timestamp=s,Ae.isProcessing=!0,Ta.update.process(Ae),Ta.preRender.process(Ae),Ta.render.process(Ae),Ae.isProcessing=!1}didUpdate(){this.updateScheduled||(this.updateScheduled=!0,Ko.read(this.scheduleUpdate))}clearAllSnapshots(){this.nodes.forEach(cp),this.sharedNodes.forEach(pp)}scheduleUpdateProjection(){this.projectionUpdateScheduled||(this.projectionUpdateScheduled=!0,he.preRender(this.updateProjection,!1,!0))}scheduleCheckAfterUnmount(){he.postRender(()=>{this.isLayoutDirty?this.root.didUpdate():this.root.checkUpdateFailed()})}updateSnapshot(){this.snapshot||!this.instance||(this.snapshot=this.measure(),this.snapshot&&!Me(this.snapshot.measuredBox.x)&&!Me(this.snapshot.measuredBox.y)&&(this.snapshot=void 0))}updateLayout(){if(!this.instance||(this.updateScroll(),!(this.options.alwaysMeasureLayout&&this.isLead())&&!this.isLayoutDirty))return;if(this.resumeFrom&&!this.resumeFrom.instance)for(let c=0;c<this.path.length;c++)this.path[c].updateScroll();const r=this.layout;this.layout=this.measure(!1),this.layoutVersion++,this.layoutCorrected=ve(),this.isLayoutDirty=!1,this.projectionDelta=void 0,this.notifyListeners("measure",this.layout.layoutBox);const{visualElement:s}=this.options;s&&s.notify("LayoutMeasure",this.layout.layoutBox,r?r.layoutBox:void 0)}updateScroll(r="measure"){let s=!!(this.options.layoutScroll&&this.instance);if(this.scroll&&this.scroll.animationId===this.root.animationId&&this.scroll.phase===r&&(s=!1),s&&this.instance){const c=a(this.instance);this.scroll={animationId:this.root.animationId,phase:r,isRoot:c,offset:n(this.instance),wasRoot:this.scroll?this.scroll.isRoot:c}}}resetTransform(){if(!o)return;const r=this.isLayoutDirty||this.shouldResetTransform||this.options.alwaysMeasureLayout,s=this.projectionDelta&&!Ol(this.projectionDelta),c=this.getTransformTemplate(),h=c?c(this.latestValues,""):void 0,l=h!==this.prevTransformTemplateValue;r&&this.instance&&(s||bt(this.latestValues)||l)&&(o(this.instance,h),this.shouldResetTransform=!1,this.scheduleRender())}measure(r=!0){const s=this.measurePageBox();let c=this.removeElementScroll(s);return r&&(c=this.removeTransform(c)),vp(c),{animationId:this.root.animationId,measuredBox:s,layoutBox:c,latestValues:{},source:this.id}}measurePageBox(){const{visualElement:r}=this.options;if(!r)return ve();const s=r.measureViewportBox();if(!(this.scroll?.wasRoot||this.path.some(bp))){const{scroll:h}=this.root;h&&(It(s.x,h.offset.x),It(s.y,h.offset.y))}return s}removeElementScroll(r){const s=ve();if(We(s,r),this.scroll?.wasRoot)return s;for(let c=0;c<this.path.length;c++){const h=this.path[c],{scroll:l,options:d}=h;h!==this.root&&l&&d.layoutScroll&&(l.wasRoot&&We(s,r),It(s.x,l.offset.x),It(s.y,l.offset.y))}return s}applyTransform(r,s=!1){const c=ve();We(c,r);for(let h=0;h<this.path.length;h++){const l=this.path[h];!s&&l.options.layoutScroll&&l.scroll&&l!==l.root&&Ut(c,{x:-l.scroll.offset.x,y:-l.scroll.offset.y}),bt(l.latestValues)&&Ut(c,l.latestValues)}return bt(this.latestValues)&&Ut(c,this.latestValues),c}removeTransform(r){const s=ve();We(s,r);for(let c=0;c<this.path.length;c++){const h=this.path[c];if(!h.instance||!bt(h.latestValues))continue;ro(h.latestValues)&&h.updateSnapshot();const l=ve(),d=h.measurePageBox();We(l,d),sr(s,h.latestValues,h.snapshot?h.snapshot.layoutBox:void 0,l)}return bt(this.latestValues)&&sr(s,this.latestValues),s}setTargetDelta(r){this.targetDelta=r,this.root.scheduleUpdateProjection(),this.isProjectionDirty=!0}setOptions(r){this.options={...this.options,...r,crossfade:r.crossfade!==void 0?r.crossfade:!0}}clearMeasurements(){this.scroll=void 0,this.layout=void 0,this.snapshot=void 0,this.prevTransformTemplateValue=void 0,this.targetDelta=void 0,this.target=void 0,this.isLayoutDirty=!1}forceRelativeParentToResolveTarget(){this.relativeParent&&this.relativeParent.resolvedRelativeTargetAt!==Ae.timestamp&&this.relativeParent.resolveTargetDelta(!0)}resolveTargetDelta(r=!1){const s=this.getLead();this.isProjectionDirty||(this.isProjectionDirty=s.isProjectionDirty),this.isTransformDirty||(this.isTransformDirty=s.isTransformDirty),this.isSharedProjectionDirty||(this.isSharedProjectionDirty=s.isSharedProjectionDirty);const c=!!this.resumingFrom||this!==s;if(!(r||c&&this.isSharedProjectionDirty||this.isProjectionDirty||this.parent?.isProjectionDirty||this.attemptToResolveRelativeTarget||this.root.updateBlockedByResize))return;const{layout:l,layoutId:d}=this.options;if(!this.layout||!(l||d))return;this.resolvedRelativeTargetAt=Ae.timestamp;const u=this.getClosestProjectingParent();u&&this.linkedParentVersion!==u.layoutVersion&&!u.options.layoutRoot&&this.removeRelativeTarget(),!this.targetDelta&&!this.relativeTarget&&(u&&u.layout?this.createRelativeTarget(u,this.layout.layoutBox,u.layout.layoutBox):this.removeRelativeTarget()),!(!this.relativeTarget&&!this.targetDelta)&&(this.target||(this.target=ve(),this.targetWithTransforms=ve()),this.relativeTarget&&this.relativeTargetOrigin&&this.relativeParent&&this.relativeParent.target?(this.forceRelativeParentToResolveTarget(),$f(this.target,this.relativeTarget,this.relativeParent.target)):this.targetDelta?(this.resumingFrom?this.target=this.applyTransform(this.layout.layoutBox):We(this.target,this.layout.layoutBox),vl(this.target,this.targetDelta)):We(this.target,this.layout.layoutBox),this.attemptToResolveRelativeTarget&&(this.attemptToResolveRelativeTarget=!1,u&&!!u.resumingFrom==!!this.resumingFrom&&!u.options.layoutScroll&&u.target&&this.animationProgress!==1?this.createRelativeTarget(u,this.target,u.target):this.relativeParent=this.relativeTarget=void 0))}getClosestProjectingParent(){if(!(!this.parent||ro(this.parent.latestValues)||yl(this.parent.latestValues)))return this.parent.isProjecting()?this.parent:this.parent.getClosestProjectingParent()}isProjecting(){return!!((this.relativeTarget||this.targetDelta||this.options.layoutRoot)&&this.layout)}createRelativeTarget(r,s,c){this.relativeParent=r,this.linkedParentVersion=r.layoutVersion,this.forceRelativeParentToResolveTarget(),this.relativeTarget=ve(),this.relativeTargetOrigin=ve(),ca(this.relativeTargetOrigin,s,c),We(this.relativeTarget,this.relativeTargetOrigin)}removeRelativeTarget(){this.relativeParent=this.relativeTarget=void 0}calcProjection(){const r=this.getLead(),s=!!this.resumingFrom||this!==r;let c=!0;if((this.isProjectionDirty||this.parent?.isProjectionDirty)&&(c=!1),s&&(this.isSharedProjectionDirty||this.isTransformDirty)&&(c=!1),this.resolvedRelativeTargetAt===Ae.timestamp&&(c=!1),c)return;const{layout:h,layoutId:l}=this.options;if(this.isTreeAnimating=!!(this.parent&&this.parent.isTreeAnimating||this.currentAnimation||this.pendingAnimation),this.isTreeAnimating||(this.targetDelta=this.relativeTarget=void 0),!this.layout||!(h||l))return;We(this.layoutCorrected,this.layout.layoutBox);const d=this.treeScale.x,u=this.treeScale.y;Dh(this.layoutCorrected,this.treeScale,this.path,s),r.layout&&!r.target&&(this.treeScale.x!==1||this.treeScale.y!==1)&&(r.target=r.layout.layoutBox,r.targetWithTransforms=ve());const{target:f}=r;if(!f){this.prevProjectionDelta&&(this.createProjectionDeltas(),this.scheduleRender());return}!this.projectionDelta||!this.prevProjectionDelta?this.createProjectionDeltas():(or(this.prevProjectionDelta.x,this.projectionDelta.x),or(this.prevProjectionDelta.y,this.projectionDelta.y)),nn(this.projectionDelta,this.layoutCorrected,f,this.latestValues),(this.treeScale.x!==d||this.treeScale.y!==u||!hr(this.projectionDelta.x,this.prevProjectionDelta.x)||!hr(this.projectionDelta.y,this.prevProjectionDelta.y))&&(this.hasProjected=!0,this.scheduleRender(),this.notifyListeners("projectionUpdate",f))}hide(){this.isVisible=!1}show(){this.isVisible=!0}scheduleRender(r=!0){if(this.options.visualElement?.scheduleRender(),r){const s=this.getStack();s&&s.scheduleRender()}this.resumingFrom&&!this.resumingFrom.instance&&(this.resumingFrom=void 0)}createProjectionDeltas(){this.prevProjectionDelta=Ot(),this.projectionDelta=Ot(),this.projectionDeltaWithTransform=Ot()}setAnimationOrigin(r,s=!1){const c=this.snapshot,h=c?c.latestValues:{},l={...this.latestValues},d=Ot();(!this.relativeParent||!this.relativeParent.options.layoutRoot)&&(this.relativeTarget=this.relativeTargetOrigin=void 0),this.attemptToResolveRelativeTarget=!s;const u=ve(),f=c?c.source:void 0,m=this.layout?this.layout.source:void 0,P=f!==m,A=this.getStack(),b=!A||A.members.length<=1,E=!!(P&&!b&&this.options.crossfade===!0&&!this.path.some(gp));this.animationProgress=0;let T;this.mixTargetDelta=S=>{const M=S/1e3;gr(d.x,r.x,M),gr(d.y,r.y,M),this.setTargetDelta(d),this.relativeTarget&&this.relativeTargetOrigin&&this.layout&&this.relativeParent&&this.relativeParent.layout&&(ca(u,this.layout.layoutBox,this.relativeParent.layout.layoutBox),mp(this.relativeTarget,this.relativeTargetOrigin,u,M),T&&ep(this.relativeTarget,T)&&(this.isProjectionDirty=!1),T||(T=ve()),We(T,this.relativeTarget)),P&&(this.animationValues=l,Jf(l,h,this.latestValues,M,E,b)),this.root.scheduleUpdateProjection(),this.scheduleRender(),this.animationProgress=M},this.mixTargetDelta(this.options.layoutRoot?1e3:0)}startAnimation(r){this.notifyListeners("animationStart"),this.currentAnimation?.stop(),this.resumingFrom?.currentAnimation?.stop(),this.pendingAnimation&&(ft(this.pendingAnimation),this.pendingAnimation=void 0),this.pendingAnimation=he.update(()=>{Xn.hasAnimatedSinceResize=!0,this.motionValue||(this.motionValue=jt(0)),this.currentAnimation=zf(this.motionValue,[0,1e3],{...r,velocity:0,isSync:!0,onUpdate:s=>{this.mixTargetDelta(s),r.onUpdate&&r.onUpdate(s)},onStop:()=>{},onComplete:()=>{r.onComplete&&r.onComplete(),this.completeAnimation()}}),this.resumingFrom&&(this.resumingFrom.currentAnimation=this.currentAnimation),this.pendingAnimation=void 0})}completeAnimation(){this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0);const r=this.getStack();r&&r.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners("animationComplete")}finishAnimation(){this.currentAnimation&&(this.mixTargetDelta&&this.mixTargetDelta(ap),this.currentAnimation.stop()),this.completeAnimation()}applyTransformsToTarget(){const r=this.getLead();let{targetWithTransforms:s,target:c,layout:h,latestValues:l}=r;if(!(!s||!c||!h)){if(this!==r&&this.layout&&h&&Gl(this.options.animationType,this.layout.layoutBox,h.layoutBox)){c=this.target||ve();const d=Me(this.layout.layoutBox.x);c.x.min=r.target.x.min,c.x.max=c.x.min+d;const u=Me(this.layout.layoutBox.y);c.y.min=r.target.y.min,c.y.max=c.y.min+u}We(s,c),Ut(s,l),nn(this.projectionDeltaWithTransform,this.layoutCorrected,s,l)}}registerSharedNode(r,s){this.sharedNodes.has(r)||this.sharedNodes.set(r,new tp),this.sharedNodes.get(r).add(s);const h=s.options.initialPromotionConfig;s.promote({transition:h?h.transition:void 0,preserveFollowOpacity:h&&h.shouldPreserveFollowOpacity?h.shouldPreserveFollowOpacity(s):void 0})}isLead(){const r=this.getStack();return r?r.lead===this:!0}getLead(){const{layoutId:r}=this.options;return r?this.getStack()?.lead||this:this}getPrevLead(){const{layoutId:r}=this.options;return r?this.getStack()?.prevLead:void 0}getStack(){const{layoutId:r}=this.options;if(r)return this.root.sharedNodes.get(r)}promote({needsReset:r,transition:s,preserveFollowOpacity:c}={}){const h=this.getStack();h&&h.promote(this,c),r&&(this.projectionDelta=void 0,this.needsReset=!0),s&&this.setOptions({transition:s})}relegate(){const r=this.getStack();return r?r.relegate(this):!1}resetSkewAndRotation(){const{visualElement:r}=this.options;if(!r)return;let s=!1;const{latestValues:c}=r;if((c.z||c.rotate||c.rotateX||c.rotateY||c.rotateZ||c.skewX||c.skewY)&&(s=!0),!s)return;const h={};c.z&&Oa("z",r,h,this.animationValues);for(let l=0;l<Ua.length;l++)Oa(`rotate${Ua[l]}`,r,h,this.animationValues),Oa(`skew${Ua[l]}`,r,h,this.animationValues);r.render();for(const l in h)r.setStaticValue(l,h[l]),this.animationValues&&(this.animationValues[l]=h[l]);r.scheduleRender()}applyProjectionStyles(r,s){if(!this.instance||this.isSVG)return;if(!this.isVisible){r.visibility="hidden";return}const c=this.getTransformTemplate();if(this.needsReset){this.needsReset=!1,r.visibility="",r.opacity="",r.pointerEvents=qn(s?.pointerEvents)||"",r.transform=c?c(this.latestValues,""):"none";return}const h=this.getLead();if(!this.projectionDelta||!this.layout||!h.target){this.options.layoutId&&(r.opacity=this.latestValues.opacity!==void 0?this.latestValues.opacity:1,r.pointerEvents=qn(s?.pointerEvents)||""),this.hasProjected&&!bt(this.latestValues)&&(r.transform=c?c({},""):"none",this.hasProjected=!1);return}r.visibility="";const l=h.animationValues||h.latestValues;this.applyTransformsToTarget();let d=np(this.projectionDeltaWithTransform,this.treeScale,l);c&&(d=c(l,d)),r.transform=d;const{x:u,y:f}=this.projectionDelta;r.transformOrigin=`${u.origin*100}% ${f.origin*100}% 0`,h.animationValues?r.opacity=h===this?l.opacity??this.latestValues.opacity??1:this.preserveOpacity?this.latestValues.opacity:l.opacityExit:r.opacity=h===this?l.opacity!==void 0?l.opacity:"":l.opacityExit!==void 0?l.opacityExit:0;for(const m in io){if(l[m]===void 0)continue;const{correct:P,applyTo:A,isCSSVariable:b}=io[m],E=d==="none"?l[m]:P(l[m],h);if(A){const T=A.length;for(let S=0;S<T;S++)r[A[S]]=E}else b?this.options.visualElement.renderState.vars[m]=E:r[m]=E}this.options.layoutId&&(r.pointerEvents=h===this?qn(s?.pointerEvents)||"":"none")}clearSnapshot(){this.resumeFrom=this.snapshot=void 0}resetTree(){this.root.nodes.forEach(r=>r.currentAnimation?.stop()),this.root.nodes.forEach(fr),this.root.sharedNodes.clear()}}}function ip(t){t.updateLayout()}function rp(t){const e=t.resumeFrom?.snapshot||t.snapshot;if(t.isLead()&&t.layout&&e&&t.hasListeners("didUpdate")){const{layoutBox:n,measuredBox:a}=t.layout,{animationType:o}=t.options,i=e.source!==t.layout.source;o==="size"?ze(l=>{const d=i?e.measuredBox[l]:e.layoutBox[l],u=Me(d);d.min=n[l].min,d.max=d.min+u}):Gl(o,e.layoutBox,n)&&ze(l=>{const d=i?e.measuredBox[l]:e.layoutBox[l],u=Me(n[l]);d.max=d.min+u,t.relativeTarget&&!t.currentAnimation&&(t.isProjectionDirty=!0,t.relativeTarget[l].max=t.relativeTarget[l].min+u)});const r=Ot();nn(r,n,e.layoutBox);const s=Ot();i?nn(s,t.applyTransform(a,!0),e.measuredBox):nn(s,n,e.layoutBox);const c=!Ol(r);let h=!1;if(!t.resumeFrom){const l=t.getClosestProjectingParent();if(l&&!l.resumeFrom){const{snapshot:d,layout:u}=l;if(d&&u){const f=ve();ca(f,e.layoutBox,d.layoutBox);const m=ve();ca(m,n,u.layoutBox),Dl(f,m)||(h=!0),l.options.layoutRoot&&(t.relativeTarget=m,t.relativeTargetOrigin=f,t.relativeParent=l)}}}t.notifyListeners("didUpdate",{layout:n,snapshot:e,delta:s,layoutDelta:r,hasLayoutChanged:c,hasRelativeLayoutChanged:h})}else if(t.isLead()){const{onExitComplete:n}=t.options;n&&n()}t.options.transition=void 0}function sp(t){t.parent&&(t.isProjecting()||(t.isProjectionDirty=t.parent.isProjectionDirty),t.isSharedProjectionDirty||(t.isSharedProjectionDirty=!!(t.isProjectionDirty||t.parent.isProjectionDirty||t.parent.isSharedProjectionDirty)),t.isTransformDirty||(t.isTransformDirty=t.parent.isTransformDirty))}function lp(t){t.isProjectionDirty=t.isSharedProjectionDirty=t.isTransformDirty=!1}function cp(t){t.clearSnapshot()}function fr(t){t.clearMeasurements()}function pr(t){t.isLayoutDirty=!1}function up(t){const{visualElement:e}=t.options;e&&e.getProps().onBeforeLayoutMeasure&&e.notify("BeforeLayoutMeasure"),t.resetTransform()}function mr(t){t.finishAnimation(),t.targetDelta=t.relativeTarget=t.target=void 0,t.isProjectionDirty=!0}function dp(t){t.resolveTargetDelta()}function hp(t){t.calcProjection()}function fp(t){t.resetSkewAndRotation()}function pp(t){t.removeLeadSnapshot()}function gr(t,e,n){t.translate=pe(e.translate,0,n),t.scale=pe(e.scale,1,n),t.origin=e.origin,t.originPoint=e.originPoint}function yr(t,e,n,a){t.min=pe(e.min,n.min,a),t.max=pe(e.max,n.max,a)}function mp(t,e,n,a){yr(t.x,e.x,n.x,a),yr(t.y,e.y,n.y,a)}function gp(t){return t.animationValues&&t.animationValues.opacityExit!==void 0}const yp={duration:.45,ease:[.4,0,.1,1]},vr=t=>typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().includes(t),br=vr("applewebkit/")&&!vr("chrome/")?Math.round:Qe;function Pr(t){t.min=br(t.min),t.max=br(t.max)}function vp(t){Pr(t.x),Pr(t.y)}function Gl(t,e,n){return t==="position"||t==="preserve-aspect"&&!kf(dr(e),dr(n),.2)}function bp(t){return t!==t.root&&t.scroll?.wasRoot}const Pp=Vl({attachResizeListener:(t,e)=>hn(t,"resize",e),measureScroll:()=>({x:document.documentElement.scrollLeft||document.body.scrollLeft,y:document.documentElement.scrollTop||document.body.scrollTop}),checkIsScrollRoot:()=>!0}),Da={current:void 0},jl=Vl({measureScroll:t=>({x:t.scrollLeft,y:t.scrollTop}),defaultParent:()=>{if(!Da.current){const t=new Pp({});t.mount(window),t.setOptions({layoutScroll:!0}),Da.current=t}return Da.current},resetTransform:(t,e)=>{t.style.transform=e!==void 0?e:"none"},checkIsScrollRoot:t=>window.getComputedStyle(t).position==="fixed"}),wp={pan:{Feature:Gf},drag:{Feature:Vf,ProjectionNode:jl,MeasureLayout:Fl}};function wr(t,e,n){const{props:a}=t;t.animationState&&a.whileHover&&t.animationState.setActive("whileHover",n==="Start");const o="onHover"+n,i=a[o];i&&he.postRender(()=>i(e,yn(e)))}class Cp extends mt{mount(){const{current:e}=this.node;e&&(this.unmount=Wd(e,(n,a)=>(wr(this.node,a,"Start"),o=>wr(this.node,o,"End"))))}unmount(){}}class Ap extends mt{constructor(){super(...arguments),this.isActive=!1}onFocus(){let e=!1;try{e=this.node.current.matches(":focus-visible")}catch{e=!0}!e||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!0),this.isActive=!0)}onBlur(){!this.isActive||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!1),this.isActive=!1)}mount(){this.unmount=pn(hn(this.node.current,"focus",()=>this.onFocus()),hn(this.node.current,"blur",()=>this.onBlur()))}unmount(){}}function Cr(t,e,n){const{props:a}=t;if(t.current instanceof HTMLButtonElement&&t.current.disabled)return;t.animationState&&a.whileTap&&t.animationState.setActive("whileTap",n==="Start");const o="onTap"+(n==="End"?"":n),i=a[o];i&&he.postRender(()=>i(e,yn(e)))}class Sp extends mt{mount(){const{current:e}=this.node;e&&(this.unmount=Zd(e,(n,a)=>(Cr(this.node,a,"Start"),(o,{success:i})=>Cr(this.node,o,i?"End":"Cancel")),{useGlobalTarget:this.node.props.globalTapTarget}))}unmount(){}}const po=new WeakMap,Ba=new WeakMap,Tp=t=>{const e=po.get(t.target);e&&e(t)},kp=t=>{t.forEach(Tp)};function $p({root:t,...e}){const n=t||document;Ba.has(n)||Ba.set(n,{});const a=Ba.get(n),o=JSON.stringify(e);return a[o]||(a[o]=new IntersectionObserver(kp,{root:t,...e})),a[o]}function Rp(t,e,n){const a=$p(e);return po.set(t,n),a.observe(t),()=>{po.delete(t),a.unobserve(t)}}const xp={some:0,all:1};class Ep extends mt{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){this.unmount();const{viewport:e={}}=this.node.getProps(),{root:n,margin:a,amount:o="some",once:i}=e,r={root:n?n.current:void 0,rootMargin:a,threshold:typeof o=="number"?o:xp[o]},s=c=>{const{isIntersecting:h}=c;if(this.isInView===h||(this.isInView=h,i&&!h&&this.hasEnteredView))return;h&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive("whileInView",h);const{onViewportEnter:l,onViewportLeave:d}=this.node.getProps(),u=h?l:d;u&&u(c)};return Rp(this.node.current,r,s)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>"u")return;const{props:e,prevProps:n}=this.node;["amount","margin","root"].some(Mp(e,n))&&this.startObserver()}unmount(){}}function Mp({viewport:t={}},{viewport:e={}}={}){return n=>t[n]!==e[n]}const Lp={inView:{Feature:Ep},tap:{Feature:Sp},focus:{Feature:Ap},hover:{Feature:Cp}},Np={layout:{ProjectionNode:jl,MeasureLayout:Fl}},Fp={...Pf,...Lp,...wp,...Np},Ip=Ih(Fp,Jh),Up=z.createContext("light");function zl(){return z.useContext(Up)}const Op={light:{primary:"bg-violet-500 text-white",secondary:"bg-violet-300 text-white",accent:"bg-rose-400 text-white",plain:"bg-white text-violet-500",step:"bg-indigo-900 text-white"},dark:{primary:"bg-violet-300 text-black",secondary:"bg-violet-800 text-white",accent:"bg-rose-200 text-black",plain:"bg-gray-700 text-white",step:"bg-indigo-900 text-white"}},mo=({children:t,onClick:e,disabled:n=!1,variant:a="primary",type:o="submit",className:i,styles:r,id:s,startIcon:c})=>{const h=zl(),l=Op[h][a||"primary"];return oe.jsxs(Ip.button,{id:s,"data-uikit":"button",style:r,type:o,className:Gt("text-base rounded-xl py-1 px-3",l,n&&"cursor-not-allowed opacity-50",i),onClick:e,disabled:n,whileHover:n?void 0:{scale:1.05},whileTap:n?void 0:{scale:.95},transition:{type:"spring",stiffness:300,damping:15},children:[c&&oe.jsx("span",{className:"mr-1 inline-flex",children:c}),t]})};z.forwardRef(({checked:t,defaultChecked:e,onChange:n,className:a,id:o,styles:i,name:r,value:s},c)=>oe.jsx("input",{ref:c,type:"checkbox",id:o,"data-uikit":"checkbox",name:r,value:s,style:i,className:Gt("form-checkbox w-4 h-4",a),checked:t,defaultChecked:e,onChange:n}));z.createContext({enqueueSnackbar:()=>{throw new Error("useSnackbar must be used within a SnackbarProvider")},closeSnackbar:()=>{}});const ne=t=>typeof t=="string",qt=()=>{let t,e;const n=new Promise((a,o)=>{t=a,e=o});return n.resolve=t,n.reject=e,n},Ar=t=>t==null?"":""+t,Dp=(t,e,n)=>{t.forEach(a=>{e[a]&&(n[a]=e[a])})},Bp=/###/g,Sr=t=>t&&t.indexOf("###")>-1?t.replace(Bp,"."):t,Tr=t=>!t||ne(t),an=(t,e,n)=>{const a=ne(e)?e.split("."):e;let o=0;for(;o<a.length-1;){if(Tr(t))return{};const i=Sr(a[o]);!t[i]&&n&&(t[i]=new n),Object.prototype.hasOwnProperty.call(t,i)?t=t[i]:t={},++o}return Tr(t)?{}:{obj:t,k:Sr(a[o])}},kr=(t,e,n)=>{const{obj:a,k:o}=an(t,e,Object);if(a!==void 0||e.length===1){a[o]=n;return}let i=e[e.length-1],r=e.slice(0,e.length-1),s=an(t,r,Object);for(;s.obj===void 0&&r.length;)i=`${r[r.length-1]}.${i}`,r=r.slice(0,r.length-1),s=an(t,r,Object),s&&s.obj&&typeof s.obj[`${s.k}.${i}`]<"u"&&(s.obj=void 0);s.obj[`${s.k}.${i}`]=n},Vp=(t,e,n,a)=>{const{obj:o,k:i}=an(t,e,Object);o[i]=o[i]||[],o[i].push(n)},ua=(t,e)=>{const{obj:n,k:a}=an(t,e);if(n)return n[a]},Gp=(t,e,n)=>{const a=ua(t,n);return a!==void 0?a:ua(e,n)},_l=(t,e,n)=>{for(const a in e)a!=="__proto__"&&a!=="constructor"&&(a in t?ne(t[a])||t[a]instanceof String||ne(e[a])||e[a]instanceof String?n&&(t[a]=e[a]):_l(t[a],e[a],n):t[a]=e[a]);return t},Rt=t=>t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");var jp={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"};const zp=t=>ne(t)?t.replace(/[&<>"'\/]/g,e=>jp[e]):t;class _p{constructor(e){this.capacity=e,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(e){const n=this.regExpMap.get(e);if(n!==void 0)return n;const a=new RegExp(e);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(e,a),this.regExpQueue.push(e),a}}const Hp=[" ",",","?","!",";"],Qp=new _p(20),Kp=(t,e,n)=>{e=e||"",n=n||"";const a=Hp.filter(r=>e.indexOf(r)<0&&n.indexOf(r)<0);if(a.length===0)return!0;const o=Qp.getRegExp(`(${a.map(r=>r==="?"?"\\?":r).join("|")})`);let i=!o.test(t);if(!i){const r=t.indexOf(n);r>0&&!o.test(t.substring(0,r))&&(i=!0)}return i},go=function(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:".";if(!t)return;if(t[e])return t[e];const a=e.split(n);let o=t;for(let i=0;i<a.length;){if(!o||typeof o!="object")return;let r,s="";for(let c=i;c<a.length;++c)if(c!==i&&(s+=n),s+=a[c],r=o[s],r!==void 0){if(["string","number","boolean"].indexOf(typeof r)>-1&&c<a.length-1)continue;i+=c-i+1;break}o=r}return o},da=t=>t&&t.replace("_","-"),Jp={type:"logger",log(t){this.output("log",t)},warn(t){this.output("warn",t)},error(t){this.output("error",t)},output(t,e){console&&console[t]&&console[t].apply(console,e)}};class ha{constructor(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.init(e,n)}init(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.prefix=n.prefix||"i18next:",this.logger=e||Jp,this.options=n,this.debug=n.debug}log(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];return this.forward(n,"log","",!0)}warn(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];return this.forward(n,"warn","",!0)}error(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];return this.forward(n,"error","")}deprecate(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];return this.forward(n,"warn","WARNING DEPRECATED: ",!0)}forward(e,n,a,o){return o&&!this.debug?null:(ne(e[0])&&(e[0]=`${a}${this.prefix} ${e[0]}`),this.logger[n](e))}create(e){return new ha(this.logger,{prefix:`${this.prefix}:${e}:`,...this.options})}clone(e){return e=e||this.options,e.prefix=e.prefix||this.prefix,new ha(this.logger,e)}}var ot=new ha;class wa{constructor(){this.observers={}}on(e,n){return e.split(" ").forEach(a=>{this.observers[a]||(this.observers[a]=new Map);const o=this.observers[a].get(n)||0;this.observers[a].set(n,o+1)}),this}off(e,n){if(this.observers[e]){if(!n){delete this.observers[e];return}this.observers[e].delete(n)}}emit(e){for(var n=arguments.length,a=new Array(n>1?n-1:0),o=1;o<n;o++)a[o-1]=arguments[o];this.observers[e]&&Array.from(this.observers[e].entries()).forEach(r=>{let[s,c]=r;for(let h=0;h<c;h++)s(...a)}),this.observers["*"]&&Array.from(this.observers["*"].entries()).forEach(r=>{let[s,c]=r;for(let h=0;h<c;h++)s.apply(s,[e,...a])})}}class $r extends wa{constructor(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{ns:["translation"],defaultNS:"translation"};super(),this.data=e||{},this.options=n,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(e){this.options.ns.indexOf(e)<0&&this.options.ns.push(e)}removeNamespaces(e){const n=this.options.ns.indexOf(e);n>-1&&this.options.ns.splice(n,1)}getResource(e,n,a){let o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};const i=o.keySeparator!==void 0?o.keySeparator:this.options.keySeparator,r=o.ignoreJSONStructure!==void 0?o.ignoreJSONStructure:this.options.ignoreJSONStructure;let s;e.indexOf(".")>-1?s=e.split("."):(s=[e,n],a&&(Array.isArray(a)?s.push(...a):ne(a)&&i?s.push(...a.split(i)):s.push(a)));const c=ua(this.data,s);return!c&&!n&&!a&&e.indexOf(".")>-1&&(e=s[0],n=s[1],a=s.slice(2).join(".")),c||!r||!ne(a)?c:go(this.data&&this.data[e]&&this.data[e][n],a,i)}addResource(e,n,a,o){let i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{silent:!1};const r=i.keySeparator!==void 0?i.keySeparator:this.options.keySeparator;let s=[e,n];a&&(s=s.concat(r?a.split(r):a)),e.indexOf(".")>-1&&(s=e.split("."),o=n,n=s[1]),this.addNamespaces(n),kr(this.data,s,o),i.silent||this.emit("added",e,n,a,o)}addResources(e,n,a){let o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{silent:!1};for(const i in a)(ne(a[i])||Array.isArray(a[i]))&&this.addResource(e,n,i,a[i],{silent:!0});o.silent||this.emit("added",e,n,a)}addResourceBundle(e,n,a,o,i){let r=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{silent:!1,skipCopy:!1},s=[e,n];e.indexOf(".")>-1&&(s=e.split("."),o=a,a=n,n=s[1]),this.addNamespaces(n);let c=ua(this.data,s)||{};r.skipCopy||(a=JSON.parse(JSON.stringify(a))),o?_l(c,a,i):c={...c,...a},kr(this.data,s,c),r.silent||this.emit("added",e,n,a)}removeResourceBundle(e,n){this.hasResourceBundle(e,n)&&delete this.data[e][n],this.removeNamespaces(n),this.emit("removed",e,n)}hasResourceBundle(e,n){return this.getResource(e,n)!==void 0}getResourceBundle(e,n){return n||(n=this.options.defaultNS),this.options.compatibilityAPI==="v1"?{...this.getResource(e,n)}:this.getResource(e,n)}getDataByLanguage(e){return this.data[e]}hasLanguageSomeTranslations(e){const n=this.getDataByLanguage(e);return!!(n&&Object.keys(n)||[]).find(o=>n[o]&&Object.keys(n[o]).length>0)}toJSON(){return this.data}}var Hl={processors:{},addPostProcessor(t){this.processors[t.name]=t},handle(t,e,n,a,o){return t.forEach(i=>{this.processors[i]&&(e=this.processors[i].process(e,n,a,o))}),e}};const Rr={};class fa extends wa{constructor(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(),Dp(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],e,this),this.options=n,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=ot.create("translator")}changeLanguage(e){e&&(this.language=e)}exists(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}};if(e==null)return!1;const a=this.resolve(e,n);return a&&a.res!==void 0}extractFromKey(e,n){let a=n.nsSeparator!==void 0?n.nsSeparator:this.options.nsSeparator;a===void 0&&(a=":");const o=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator;let i=n.ns||this.options.defaultNS||[];const r=a&&e.indexOf(a)>-1,s=!this.options.userDefinedKeySeparator&&!n.keySeparator&&!this.options.userDefinedNsSeparator&&!n.nsSeparator&&!Kp(e,a,o);if(r&&!s){const c=e.match(this.interpolator.nestingRegexp);if(c&&c.length>0)return{key:e,namespaces:ne(i)?[i]:i};const h=e.split(a);(a!==o||a===o&&this.options.ns.indexOf(h[0])>-1)&&(i=h.shift()),e=h.join(o)}return{key:e,namespaces:ne(i)?[i]:i}}translate(e,n,a){if(typeof n!="object"&&this.options.overloadTranslationOptionHandler&&(n=this.options.overloadTranslationOptionHandler(arguments)),typeof n=="object"&&(n={...n}),n||(n={}),e==null)return"";Array.isArray(e)||(e=[String(e)]);const o=n.returnDetails!==void 0?n.returnDetails:this.options.returnDetails,i=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator,{key:r,namespaces:s}=this.extractFromKey(e[e.length-1],n),c=s[s.length-1],h=n.lng||this.language,l=n.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(h&&h.toLowerCase()==="cimode"){if(l){const S=n.nsSeparator||this.options.nsSeparator;return o?{res:`${c}${S}${r}`,usedKey:r,exactUsedKey:r,usedLng:h,usedNS:c,usedParams:this.getUsedParamsDetails(n)}:`${c}${S}${r}`}return o?{res:r,usedKey:r,exactUsedKey:r,usedLng:h,usedNS:c,usedParams:this.getUsedParamsDetails(n)}:r}const d=this.resolve(e,n);let u=d&&d.res;const f=d&&d.usedKey||r,m=d&&d.exactUsedKey||r,P=Object.prototype.toString.apply(u),A=["[object Number]","[object Function]","[object RegExp]"],b=n.joinArrays!==void 0?n.joinArrays:this.options.joinArrays,E=!this.i18nFormat||this.i18nFormat.handleAsObject,T=!ne(u)&&typeof u!="boolean"&&typeof u!="number";if(E&&u&&T&&A.indexOf(P)<0&&!(ne(b)&&Array.isArray(u))){if(!n.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const S=this.options.returnedObjectHandler?this.options.returnedObjectHandler(f,u,{...n,ns:s}):`key '${r} (${this.language})' returned an object instead of string.`;return o?(d.res=S,d.usedParams=this.getUsedParamsDetails(n),d):S}if(i){const S=Array.isArray(u),M=S?[]:{},C=S?m:f;for(const F in u)if(Object.prototype.hasOwnProperty.call(u,F)){const g=`${C}${i}${F}`;M[F]=this.translate(g,{...n,joinArrays:!1,ns:s}),M[F]===g&&(M[F]=u[F])}u=M}}else if(E&&ne(b)&&Array.isArray(u))u=u.join(b),u&&(u=this.extendTranslation(u,e,n,a));else{let S=!1,M=!1;const C=n.count!==void 0&&!ne(n.count),F=fa.hasDefaultValue(n),g=C?this.pluralResolver.getSuffix(h,n.count,n):"",v=n.ordinal&&C?this.pluralResolver.getSuffix(h,n.count,{ordinal:!1}):"",k=C&&!n.ordinal&&n.count===0&&this.pluralResolver.shouldUseIntlApi(),R=k&&n[`defaultValue${this.options.pluralSeparator}zero`]||n[`defaultValue${g}`]||n[`defaultValue${v}`]||n.defaultValue;!this.isValidLookup(u)&&F&&(S=!0,u=R),this.isValidLookup(u)||(M=!0,u=r);const N=(n.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&M?void 0:u,$=F&&R!==u&&this.options.updateMissing;if(M||S||$){if(this.logger.log($?"updateKey":"missingKey",h,c,r,$?R:u),i){const U=this.resolve(r,{...n,keySeparator:!1});U&&U.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let I=[];const w=this.languageUtils.getFallbackCodes(this.options.fallbackLng,n.lng||this.language);if(this.options.saveMissingTo==="fallback"&&w&&w[0])for(let U=0;U<w.length;U++)I.push(w[U]);else this.options.saveMissingTo==="all"?I=this.languageUtils.toResolveHierarchy(n.lng||this.language):I.push(n.lng||this.language);const y=(U,L,B)=>{const J=F&&B!==u?B:N;this.options.missingKeyHandler?this.options.missingKeyHandler(U,c,L,J,$,n):this.backendConnector&&this.backendConnector.saveMissing&&this.backendConnector.saveMissing(U,c,L,J,$,n),this.emit("missingKey",U,c,L,u)};this.options.saveMissing&&(this.options.saveMissingPlurals&&C?I.forEach(U=>{const L=this.pluralResolver.getSuffixes(U,n);k&&n[`defaultValue${this.options.pluralSeparator}zero`]&&L.indexOf(`${this.options.pluralSeparator}zero`)<0&&L.push(`${this.options.pluralSeparator}zero`),L.forEach(B=>{y([U],r+B,n[`defaultValue${B}`]||R)})}):y(I,r,R))}u=this.extendTranslation(u,e,n,d,a),M&&u===r&&this.options.appendNamespaceToMissingKey&&(u=`${c}:${r}`),(M||S)&&this.options.parseMissingKeyHandler&&(this.options.compatibilityAPI!=="v1"?u=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${c}:${r}`:r,S?u:void 0):u=this.options.parseMissingKeyHandler(u))}return o?(d.res=u,d.usedParams=this.getUsedParamsDetails(n),d):u}extendTranslation(e,n,a,o,i){var r=this;if(this.i18nFormat&&this.i18nFormat.parse)e=this.i18nFormat.parse(e,{...this.options.interpolation.defaultVariables,...a},a.lng||this.language||o.usedLng,o.usedNS,o.usedKey,{resolved:o});else if(!a.skipInterpolation){a.interpolation&&this.interpolator.init({...a,interpolation:{...this.options.interpolation,...a.interpolation}});const h=ne(e)&&(a&&a.interpolation&&a.interpolation.skipOnVariables!==void 0?a.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let l;if(h){const u=e.match(this.interpolator.nestingRegexp);l=u&&u.length}let d=a.replace&&!ne(a.replace)?a.replace:a;if(this.options.interpolation.defaultVariables&&(d={...this.options.interpolation.defaultVariables,...d}),e=this.interpolator.interpolate(e,d,a.lng||this.language||o.usedLng,a),h){const u=e.match(this.interpolator.nestingRegexp),f=u&&u.length;l<f&&(a.nest=!1)}!a.lng&&this.options.compatibilityAPI!=="v1"&&o&&o.res&&(a.lng=this.language||o.usedLng),a.nest!==!1&&(e=this.interpolator.nest(e,function(){for(var u=arguments.length,f=new Array(u),m=0;m<u;m++)f[m]=arguments[m];return i&&i[0]===f[0]&&!a.context?(r.logger.warn(`It seems you are nesting recursively key: ${f[0]} in key: ${n[0]}`),null):r.translate(...f,n)},a)),a.interpolation&&this.interpolator.reset()}const s=a.postProcess||this.options.postProcess,c=ne(s)?[s]:s;return e!=null&&c&&c.length&&a.applyPostProcessor!==!1&&(e=Hl.handle(c,e,n,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...o,usedParams:this.getUsedParamsDetails(a)},...a}:a,this)),e}resolve(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},a,o,i,r,s;return ne(e)&&(e=[e]),e.forEach(c=>{if(this.isValidLookup(a))return;const h=this.extractFromKey(c,n),l=h.key;o=l;let d=h.namespaces;this.options.fallbackNS&&(d=d.concat(this.options.fallbackNS));const u=n.count!==void 0&&!ne(n.count),f=u&&!n.ordinal&&n.count===0&&this.pluralResolver.shouldUseIntlApi(),m=n.context!==void 0&&(ne(n.context)||typeof n.context=="number")&&n.context!=="",P=n.lngs?n.lngs:this.languageUtils.toResolveHierarchy(n.lng||this.language,n.fallbackLng);d.forEach(A=>{this.isValidLookup(a)||(s=A,!Rr[`${P[0]}-${A}`]&&this.utils&&this.utils.hasLoadedNamespace&&!this.utils.hasLoadedNamespace(s)&&(Rr[`${P[0]}-${A}`]=!0,this.logger.warn(`key "${o}" for languages "${P.join(", ")}" won't get resolved as namespace "${s}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),P.forEach(b=>{if(this.isValidLookup(a))return;r=b;const E=[l];if(this.i18nFormat&&this.i18nFormat.addLookupKeys)this.i18nFormat.addLookupKeys(E,l,b,A,n);else{let S;u&&(S=this.pluralResolver.getSuffix(b,n.count,n));const M=`${this.options.pluralSeparator}zero`,C=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(u&&(E.push(l+S),n.ordinal&&S.indexOf(C)===0&&E.push(l+S.replace(C,this.options.pluralSeparator)),f&&E.push(l+M)),m){const F=`${l}${this.options.contextSeparator}${n.context}`;E.push(F),u&&(E.push(F+S),n.ordinal&&S.indexOf(C)===0&&E.push(F+S.replace(C,this.options.pluralSeparator)),f&&E.push(F+M))}}let T;for(;T=E.pop();)this.isValidLookup(a)||(i=T,a=this.getResource(b,A,T,n))}))})}),{res:a,usedKey:o,exactUsedKey:i,usedLng:r,usedNS:s}}isValidLookup(e){return e!==void 0&&!(!this.options.returnNull&&e===null)&&!(!this.options.returnEmptyString&&e==="")}getResource(e,n,a){let o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(e,n,a,o):this.resourceStore.getResource(e,n,a,o)}getUsedParamsDetails(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const n=["defaultValue","ordinal","context","replace","lng","lngs","fallbackLng","ns","keySeparator","nsSeparator","returnObjects","returnDetails","joinArrays","postProcess","interpolation"],a=e.replace&&!ne(e.replace);let o=a?e.replace:e;if(a&&typeof e.count<"u"&&(o.count=e.count),this.options.interpolation.defaultVariables&&(o={...this.options.interpolation.defaultVariables,...o}),!a){o={...o};for(const i of n)delete o[i]}return o}static hasDefaultValue(e){const n="defaultValue";for(const a in e)if(Object.prototype.hasOwnProperty.call(e,a)&&n===a.substring(0,n.length)&&e[a]!==void 0)return!0;return!1}}const Va=t=>t.charAt(0).toUpperCase()+t.slice(1);class xr{constructor(e){this.options=e,this.supportedLngs=this.options.supportedLngs||!1,this.logger=ot.create("languageUtils")}getScriptPartFromCode(e){if(e=da(e),!e||e.indexOf("-")<0)return null;const n=e.split("-");return n.length===2||(n.pop(),n[n.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(n.join("-"))}getLanguagePartFromCode(e){if(e=da(e),!e||e.indexOf("-")<0)return e;const n=e.split("-");return this.formatLanguageCode(n[0])}formatLanguageCode(e){if(ne(e)&&e.indexOf("-")>-1){if(typeof Intl<"u"&&typeof Intl.getCanonicalLocales<"u")try{let o=Intl.getCanonicalLocales(e)[0];if(o&&this.options.lowerCaseLng&&(o=o.toLowerCase()),o)return o}catch{}const n=["hans","hant","latn","cyrl","cans","mong","arab"];let a=e.split("-");return this.options.lowerCaseLng?a=a.map(o=>o.toLowerCase()):a.length===2?(a[0]=a[0].toLowerCase(),a[1]=a[1].toUpperCase(),n.indexOf(a[1].toLowerCase())>-1&&(a[1]=Va(a[1].toLowerCase()))):a.length===3&&(a[0]=a[0].toLowerCase(),a[1].length===2&&(a[1]=a[1].toUpperCase()),a[0]!=="sgn"&&a[2].length===2&&(a[2]=a[2].toUpperCase()),n.indexOf(a[1].toLowerCase())>-1&&(a[1]=Va(a[1].toLowerCase())),n.indexOf(a[2].toLowerCase())>-1&&(a[2]=Va(a[2].toLowerCase()))),a.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?e.toLowerCase():e}isSupportedCode(e){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(e=this.getLanguagePartFromCode(e)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(e)>-1}getBestMatchFromCodes(e){if(!e)return null;let n;return e.forEach(a=>{if(n)return;const o=this.formatLanguageCode(a);(!this.options.supportedLngs||this.isSupportedCode(o))&&(n=o)}),!n&&this.options.supportedLngs&&e.forEach(a=>{if(n)return;const o=this.getLanguagePartFromCode(a);if(this.isSupportedCode(o))return n=o;n=this.options.supportedLngs.find(i=>{if(i===o)return i;if(!(i.indexOf("-")<0&&o.indexOf("-")<0)&&(i.indexOf("-")>0&&o.indexOf("-")<0&&i.substring(0,i.indexOf("-"))===o||i.indexOf(o)===0&&o.length>1))return i})}),n||(n=this.getFallbackCodes(this.options.fallbackLng)[0]),n}getFallbackCodes(e,n){if(!e)return[];if(typeof e=="function"&&(e=e(n)),ne(e)&&(e=[e]),Array.isArray(e))return e;if(!n)return e.default||[];let a=e[n];return a||(a=e[this.getScriptPartFromCode(n)]),a||(a=e[this.formatLanguageCode(n)]),a||(a=e[this.getLanguagePartFromCode(n)]),a||(a=e.default),a||[]}toResolveHierarchy(e,n){const a=this.getFallbackCodes(n||this.options.fallbackLng||[],e),o=[],i=r=>{r&&(this.isSupportedCode(r)?o.push(r):this.logger.warn(`rejecting language code not found in supportedLngs: ${r}`))};return ne(e)&&(e.indexOf("-")>-1||e.indexOf("_")>-1)?(this.options.load!=="languageOnly"&&i(this.formatLanguageCode(e)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&i(this.getScriptPartFromCode(e)),this.options.load!=="currentOnly"&&i(this.getLanguagePartFromCode(e))):ne(e)&&i(this.formatLanguageCode(e)),a.forEach(r=>{o.indexOf(r)<0&&i(this.formatLanguageCode(r))}),o}}let Wp=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","tl","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kk","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],qp={1:t=>+(t>1),2:t=>+(t!=1),3:t=>0,4:t=>t%10==1&&t%100!=11?0:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?1:2,5:t=>t==0?0:t==1?1:t==2?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5,6:t=>t==1?0:t>=2&&t<=4?1:2,7:t=>t==1?0:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?1:2,8:t=>t==1?0:t==2?1:t!=8&&t!=11?2:3,9:t=>+(t>=2),10:t=>t==1?0:t==2?1:t<7?2:t<11?3:4,11:t=>t==1||t==11?0:t==2||t==12?1:t>2&&t<20?2:3,12:t=>+(t%10!=1||t%100==11),13:t=>+(t!==0),14:t=>t==1?0:t==2?1:t==3?2:3,15:t=>t%10==1&&t%100!=11?0:t%10>=2&&(t%100<10||t%100>=20)?1:2,16:t=>t%10==1&&t%100!=11?0:t!==0?1:2,17:t=>t==1||t%10==1&&t%100!=11?0:1,18:t=>t==0?0:t==1?1:2,19:t=>t==1?0:t==0||t%100>1&&t%100<11?1:t%100>10&&t%100<20?2:3,20:t=>t==1?0:t==0||t%100>0&&t%100<20?1:2,21:t=>t%100==1?1:t%100==2?2:t%100==3||t%100==4?3:0,22:t=>t==1?0:t==2?1:(t<0||t>10)&&t%10==0?2:3};const Xp=["v1","v2","v3"],Yp=["v4"],Er={zero:0,one:1,two:2,few:3,many:4,other:5},Zp=()=>{const t={};return Wp.forEach(e=>{e.lngs.forEach(n=>{t[n]={numbers:e.nr,plurals:qp[e.fc]}})}),t};class em{constructor(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.languageUtils=e,this.options=n,this.logger=ot.create("pluralResolver"),(!this.options.compatibilityJSON||Yp.includes(this.options.compatibilityJSON))&&(typeof Intl>"u"||!Intl.PluralRules)&&(this.options.compatibilityJSON="v3",this.logger.error("Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.")),this.rules=Zp(),this.pluralRulesCache={}}addRule(e,n){this.rules[e]=n}clearCache(){this.pluralRulesCache={}}getRule(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(this.shouldUseIntlApi()){const a=da(e==="dev"?"en":e),o=n.ordinal?"ordinal":"cardinal",i=JSON.stringify({cleanedCode:a,type:o});if(i in this.pluralRulesCache)return this.pluralRulesCache[i];let r;try{r=new Intl.PluralRules(a,{type:o})}catch{if(!e.match(/-|_/))return;const c=this.languageUtils.getLanguagePartFromCode(e);r=this.getRule(c,n)}return this.pluralRulesCache[i]=r,r}return this.rules[e]||this.rules[this.languageUtils.getLanguagePartFromCode(e)]}needsPlural(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const a=this.getRule(e,n);return this.shouldUseIntlApi()?a&&a.resolvedOptions().pluralCategories.length>1:a&&a.numbers.length>1}getPluralFormsOfKey(e,n){let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return this.getSuffixes(e,a).map(o=>`${n}${o}`)}getSuffixes(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const a=this.getRule(e,n);return a?this.shouldUseIntlApi()?a.resolvedOptions().pluralCategories.sort((o,i)=>Er[o]-Er[i]).map(o=>`${this.options.prepend}${n.ordinal?`ordinal${this.options.prepend}`:""}${o}`):a.numbers.map(o=>this.getSuffix(e,o,n)):[]}getSuffix(e,n){let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const o=this.getRule(e,a);return o?this.shouldUseIntlApi()?`${this.options.prepend}${a.ordinal?`ordinal${this.options.prepend}`:""}${o.select(n)}`:this.getSuffixRetroCompatible(o,n):(this.logger.warn(`no plural rule found for: ${e}`),"")}getSuffixRetroCompatible(e,n){const a=e.noAbs?e.plurals(n):e.plurals(Math.abs(n));let o=e.numbers[a];this.options.simplifyPluralSuffix&&e.numbers.length===2&&e.numbers[0]===1&&(o===2?o="plural":o===1&&(o=""));const i=()=>this.options.prepend&&o.toString()?this.options.prepend+o.toString():o.toString();return this.options.compatibilityJSON==="v1"?o===1?"":typeof o=="number"?`_plural_${o.toString()}`:i():this.options.compatibilityJSON==="v2"||this.options.simplifyPluralSuffix&&e.numbers.length===2&&e.numbers[0]===1?i():this.options.prepend&&a.toString()?this.options.prepend+a.toString():a.toString()}shouldUseIntlApi(){return!Xp.includes(this.options.compatibilityJSON)}}const Mr=function(t,e,n){let a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:".",o=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,i=Gp(t,e,n);return!i&&o&&ne(n)&&(i=go(t,n,a),i===void 0&&(i=go(e,n,a))),i},Ga=t=>t.replace(/\$/g,"$$$$");class tm{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=ot.create("interpolator"),this.options=e,this.format=e.interpolation&&e.interpolation.format||(n=>n),this.init(e)}init(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};e.interpolation||(e.interpolation={escapeValue:!0});const{escape:n,escapeValue:a,useRawValueToEscape:o,prefix:i,prefixEscaped:r,suffix:s,suffixEscaped:c,formatSeparator:h,unescapeSuffix:l,unescapePrefix:d,nestingPrefix:u,nestingPrefixEscaped:f,nestingSuffix:m,nestingSuffixEscaped:P,nestingOptionsSeparator:A,maxReplaces:b,alwaysFormat:E}=e.interpolation;this.escape=n!==void 0?n:zp,this.escapeValue=a!==void 0?a:!0,this.useRawValueToEscape=o!==void 0?o:!1,this.prefix=i?Rt(i):r||"{{",this.suffix=s?Rt(s):c||"}}",this.formatSeparator=h||",",this.unescapePrefix=l?"":d||"-",this.unescapeSuffix=this.unescapePrefix?"":l||"",this.nestingPrefix=u?Rt(u):f||Rt("$t("),this.nestingSuffix=m?Rt(m):P||Rt(")"),this.nestingOptionsSeparator=A||",",this.maxReplaces=b||1e3,this.alwaysFormat=E!==void 0?E:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const e=(n,a)=>n&&n.source===a?(n.lastIndex=0,n):new RegExp(a,"g");this.regexp=e(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=e(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=e(this.nestingRegexp,`${this.nestingPrefix}(.+?)${this.nestingSuffix}`)}interpolate(e,n,a,o){let i,r,s;const c=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},h=f=>{if(f.indexOf(this.formatSeparator)<0){const b=Mr(n,c,f,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(b,void 0,a,{...o,...n,interpolationkey:f}):b}const m=f.split(this.formatSeparator),P=m.shift().trim(),A=m.join(this.formatSeparator).trim();return this.format(Mr(n,c,P,this.options.keySeparator,this.options.ignoreJSONStructure),A,a,{...o,...n,interpolationkey:P})};this.resetRegExp();const l=o&&o.missingInterpolationHandler||this.options.missingInterpolationHandler,d=o&&o.interpolation&&o.interpolation.skipOnVariables!==void 0?o.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:f=>Ga(f)},{regex:this.regexp,safeValue:f=>this.escapeValue?Ga(this.escape(f)):Ga(f)}].forEach(f=>{for(s=0;i=f.regex.exec(e);){const m=i[1].trim();if(r=h(m),r===void 0)if(typeof l=="function"){const A=l(e,i,o);r=ne(A)?A:""}else if(o&&Object.prototype.hasOwnProperty.call(o,m))r="";else if(d){r=i[0];continue}else this.logger.warn(`missed to pass in variable ${m} for interpolating ${e}`),r="";else!ne(r)&&!this.useRawValueToEscape&&(r=Ar(r));const P=f.safeValue(r);if(e=e.replace(i[0],P),d?(f.regex.lastIndex+=r.length,f.regex.lastIndex-=i[0].length):f.regex.lastIndex=0,s++,s>=this.maxReplaces)break}}),e}nest(e,n){let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o,i,r;const s=(c,h)=>{const l=this.nestingOptionsSeparator;if(c.indexOf(l)<0)return c;const d=c.split(new RegExp(`${l}[ ]*{`));let u=`{${d[1]}`;c=d[0],u=this.interpolate(u,r);const f=u.match(/'/g),m=u.match(/"/g);(f&&f.length%2===0&&!m||m.length%2!==0)&&(u=u.replace(/'/g,'"'));try{r=JSON.parse(u),h&&(r={...h,...r})}catch(P){return this.logger.warn(`failed parsing options string in nesting for key ${c}`,P),`${c}${l}${u}`}return r.defaultValue&&r.defaultValue.indexOf(this.prefix)>-1&&delete r.defaultValue,c};for(;o=this.nestingRegexp.exec(e);){let c=[];r={...a},r=r.replace&&!ne(r.replace)?r.replace:r,r.applyPostProcessor=!1,delete r.defaultValue;let h=!1;if(o[0].indexOf(this.formatSeparator)!==-1&&!/{.*}/.test(o[1])){const l=o[1].split(this.formatSeparator).map(d=>d.trim());o[1]=l.shift(),c=l,h=!0}if(i=n(s.call(this,o[1].trim(),r),r),i&&o[0]===e&&!ne(i))return i;ne(i)||(i=Ar(i)),i||(this.logger.warn(`missed to resolve ${o[1]} for nesting ${e}`),i=""),h&&(i=c.reduce((l,d)=>this.format(l,d,a.lng,{...a,interpolationkey:o[1].trim()}),i.trim())),e=e.replace(o[0],i),this.regexp.lastIndex=0}return e}}const nm=t=>{let e=t.toLowerCase().trim();const n={};if(t.indexOf("(")>-1){const a=t.split("(");e=a[0].toLowerCase().trim();const o=a[1].substring(0,a[1].length-1);e==="currency"&&o.indexOf(":")<0?n.currency||(n.currency=o.trim()):e==="relativetime"&&o.indexOf(":")<0?n.range||(n.range=o.trim()):o.split(";").forEach(r=>{if(r){const[s,...c]=r.split(":"),h=c.join(":").trim().replace(/^'+|'+$/g,""),l=s.trim();n[l]||(n[l]=h),h==="false"&&(n[l]=!1),h==="true"&&(n[l]=!0),isNaN(h)||(n[l]=parseInt(h,10))}})}return{formatName:e,formatOptions:n}},xt=t=>{const e={};return(n,a,o)=>{let i=o;o&&o.interpolationkey&&o.formatParams&&o.formatParams[o.interpolationkey]&&o[o.interpolationkey]&&(i={...i,[o.interpolationkey]:void 0});const r=a+JSON.stringify(i);let s=e[r];return s||(s=t(da(a),o),e[r]=s),s(n)}};class am{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=ot.create("formatter"),this.options=e,this.formats={number:xt((n,a)=>{const o=new Intl.NumberFormat(n,{...a});return i=>o.format(i)}),currency:xt((n,a)=>{const o=new Intl.NumberFormat(n,{...a,style:"currency"});return i=>o.format(i)}),datetime:xt((n,a)=>{const o=new Intl.DateTimeFormat(n,{...a});return i=>o.format(i)}),relativetime:xt((n,a)=>{const o=new Intl.RelativeTimeFormat(n,{...a});return i=>o.format(i,a.range||"day")}),list:xt((n,a)=>{const o=new Intl.ListFormat(n,{...a});return i=>o.format(i)})},this.init(e)}init(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}};this.formatSeparator=n.interpolation.formatSeparator||","}add(e,n){this.formats[e.toLowerCase().trim()]=n}addCached(e,n){this.formats[e.toLowerCase().trim()]=xt(n)}format(e,n,a){let o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};const i=n.split(this.formatSeparator);if(i.length>1&&i[0].indexOf("(")>1&&i[0].indexOf(")")<0&&i.find(s=>s.indexOf(")")>-1)){const s=i.findIndex(c=>c.indexOf(")")>-1);i[0]=[i[0],...i.splice(1,s)].join(this.formatSeparator)}return i.reduce((s,c)=>{const{formatName:h,formatOptions:l}=nm(c);if(this.formats[h]){let d=s;try{const u=o&&o.formatParams&&o.formatParams[o.interpolationkey]||{},f=u.locale||u.lng||o.locale||o.lng||a;d=this.formats[h](s,f,{...l,...o,...u})}catch(u){this.logger.warn(u)}return d}else this.logger.warn(`there was no format function for ${h}`);return s},e)}}const om=(t,e)=>{t.pending[e]!==void 0&&(delete t.pending[e],t.pendingCount--)};class im extends wa{constructor(e,n,a){let o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};super(),this.backend=e,this.store=n,this.services=a,this.languageUtils=a.languageUtils,this.options=o,this.logger=ot.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=o.maxParallelReads||10,this.readingCalls=0,this.maxRetries=o.maxRetries>=0?o.maxRetries:5,this.retryTimeout=o.retryTimeout>=1?o.retryTimeout:350,this.state={},this.queue=[],this.backend&&this.backend.init&&this.backend.init(a,o.backend,o)}queueLoad(e,n,a,o){const i={},r={},s={},c={};return e.forEach(h=>{let l=!0;n.forEach(d=>{const u=`${h}|${d}`;!a.reload&&this.store.hasResourceBundle(h,d)?this.state[u]=2:this.state[u]<0||(this.state[u]===1?r[u]===void 0&&(r[u]=!0):(this.state[u]=1,l=!1,r[u]===void 0&&(r[u]=!0),i[u]===void 0&&(i[u]=!0),c[d]===void 0&&(c[d]=!0)))}),l||(s[h]=!0)}),(Object.keys(i).length||Object.keys(r).length)&&this.queue.push({pending:r,pendingCount:Object.keys(r).length,loaded:{},errors:[],callback:o}),{toLoad:Object.keys(i),pending:Object.keys(r),toLoadLanguages:Object.keys(s),toLoadNamespaces:Object.keys(c)}}loaded(e,n,a){const o=e.split("|"),i=o[0],r=o[1];n&&this.emit("failedLoading",i,r,n),!n&&a&&this.store.addResourceBundle(i,r,a,void 0,void 0,{skipCopy:!0}),this.state[e]=n?-1:2,n&&a&&(this.state[e]=0);const s={};this.queue.forEach(c=>{Vp(c.loaded,[i],r),om(c,e),n&&c.errors.push(n),c.pendingCount===0&&!c.done&&(Object.keys(c.loaded).forEach(h=>{s[h]||(s[h]={});const l=c.loaded[h];l.length&&l.forEach(d=>{s[h][d]===void 0&&(s[h][d]=!0)})}),c.done=!0,c.errors.length?c.callback(c.errors):c.callback())}),this.emit("loaded",s),this.queue=this.queue.filter(c=>!c.done)}read(e,n,a){let o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:this.retryTimeout,r=arguments.length>5?arguments[5]:void 0;if(!e.length)return r(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:e,ns:n,fcName:a,tried:o,wait:i,callback:r});return}this.readingCalls++;const s=(h,l)=>{if(this.readingCalls--,this.waitingReads.length>0){const d=this.waitingReads.shift();this.read(d.lng,d.ns,d.fcName,d.tried,d.wait,d.callback)}if(h&&l&&o<this.maxRetries){setTimeout(()=>{this.read.call(this,e,n,a,o+1,i*2,r)},i);return}r(h,l)},c=this.backend[a].bind(this.backend);if(c.length===2){try{const h=c(e,n);h&&typeof h.then=="function"?h.then(l=>s(null,l)).catch(s):s(null,h)}catch(h){s(h)}return}return c(e,n,s)}prepareLoading(e,n){let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),o&&o();ne(e)&&(e=this.languageUtils.toResolveHierarchy(e)),ne(n)&&(n=[n]);const i=this.queueLoad(e,n,a,o);if(!i.toLoad.length)return i.pending.length||o(),null;i.toLoad.forEach(r=>{this.loadOne(r)})}load(e,n,a){this.prepareLoading(e,n,{},a)}reload(e,n,a){this.prepareLoading(e,n,{reload:!0},a)}loadOne(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";const a=e.split("|"),o=a[0],i=a[1];this.read(o,i,"read",void 0,void 0,(r,s)=>{r&&this.logger.warn(`${n}loading namespace ${i} for language ${o} failed`,r),!r&&s&&this.logger.log(`${n}loaded namespace ${i} for language ${o}`,s),this.loaded(e,r,s)})}saveMissing(e,n,a,o,i){let r=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{},s=arguments.length>6&&arguments[6]!==void 0?arguments[6]:()=>{};if(this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(n)){this.logger.warn(`did not save key "${a}" as the namespace "${n}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");return}if(!(a==null||a==="")){if(this.backend&&this.backend.create){const c={...r,isUpdate:i},h=this.backend.create.bind(this.backend);if(h.length<6)try{let l;h.length===5?l=h(e,n,a,o,c):l=h(e,n,a,o),l&&typeof l.then=="function"?l.then(d=>s(null,d)).catch(s):s(null,l)}catch(l){s(l)}else h(e,n,a,o,s,c)}!e||!e[0]||this.store.addResource(e[0],n,a,o)}}}const Lr=()=>({debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:t=>{let e={};if(typeof t[1]=="object"&&(e=t[1]),ne(t[1])&&(e.defaultValue=t[1]),ne(t[2])&&(e.tDescription=t[2]),typeof t[2]=="object"||typeof t[3]=="object"){const n=t[3]||t[2];Object.keys(n).forEach(a=>{e[a]=n[a]})}return e},interpolation:{escapeValue:!0,format:t=>t,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}),Nr=t=>(ne(t.ns)&&(t.ns=[t.ns]),ne(t.fallbackLng)&&(t.fallbackLng=[t.fallbackLng]),ne(t.fallbackNS)&&(t.fallbackNS=[t.fallbackNS]),t.supportedLngs&&t.supportedLngs.indexOf("cimode")<0&&(t.supportedLngs=t.supportedLngs.concat(["cimode"])),t),Qn=()=>{},rm=t=>{Object.getOwnPropertyNames(Object.getPrototypeOf(t)).forEach(n=>{typeof t[n]=="function"&&(t[n]=t[n].bind(t))})};class fn extends wa{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;if(super(),this.options=Nr(e),this.services={},this.logger=ot,this.modules={external:[]},rm(this),n&&!this.isInitialized&&!e.isClone){if(!this.options.initImmediate)return this.init(e,n),this;setTimeout(()=>{this.init(e,n)},0)}}init(){var e=this;let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},a=arguments.length>1?arguments[1]:void 0;this.isInitializing=!0,typeof n=="function"&&(a=n,n={}),!n.defaultNS&&n.defaultNS!==!1&&n.ns&&(ne(n.ns)?n.defaultNS=n.ns:n.ns.indexOf("translation")<0&&(n.defaultNS=n.ns[0]));const o=Lr();this.options={...o,...this.options,...Nr(n)},this.options.compatibilityAPI!=="v1"&&(this.options.interpolation={...o.interpolation,...this.options.interpolation}),n.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=n.keySeparator),n.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=n.nsSeparator);const i=l=>l?typeof l=="function"?new l:l:null;if(!this.options.isClone){this.modules.logger?ot.init(i(this.modules.logger),this.options):ot.init(null,this.options);let l;this.modules.formatter?l=this.modules.formatter:typeof Intl<"u"&&(l=am);const d=new xr(this.options);this.store=new $r(this.options.resources,this.options);const u=this.services;u.logger=ot,u.resourceStore=this.store,u.languageUtils=d,u.pluralResolver=new em(d,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),l&&(!this.options.interpolation.format||this.options.interpolation.format===o.interpolation.format)&&(u.formatter=i(l),u.formatter.init(u,this.options),this.options.interpolation.format=u.formatter.format.bind(u.formatter)),u.interpolator=new tm(this.options),u.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},u.backendConnector=new im(i(this.modules.backend),u.resourceStore,u,this.options),u.backendConnector.on("*",function(f){for(var m=arguments.length,P=new Array(m>1?m-1:0),A=1;A<m;A++)P[A-1]=arguments[A];e.emit(f,...P)}),this.modules.languageDetector&&(u.languageDetector=i(this.modules.languageDetector),u.languageDetector.init&&u.languageDetector.init(u,this.options.detection,this.options)),this.modules.i18nFormat&&(u.i18nFormat=i(this.modules.i18nFormat),u.i18nFormat.init&&u.i18nFormat.init(this)),this.translator=new fa(this.services,this.options),this.translator.on("*",function(f){for(var m=arguments.length,P=new Array(m>1?m-1:0),A=1;A<m;A++)P[A-1]=arguments[A];e.emit(f,...P)}),this.modules.external.forEach(f=>{f.init&&f.init(this)})}if(this.format=this.options.interpolation.format,a||(a=Qn),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){const l=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);l.length>0&&l[0]!=="dev"&&(this.options.lng=l[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn("init: no languageDetector is used and no lng is defined"),["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach(l=>{this[l]=function(){return e.store[l](...arguments)}}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(l=>{this[l]=function(){return e.store[l](...arguments),e}});const c=qt(),h=()=>{const l=(d,u)=>{this.isInitializing=!1,this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn("init: i18next is already initialized. You should call init just once!"),this.isInitialized=!0,this.options.isClone||this.logger.log("initialized",this.options),this.emit("initialized",this.options),c.resolve(u),a(d,u)};if(this.languages&&this.options.compatibilityAPI!=="v1"&&!this.isInitialized)return l(null,this.t.bind(this));this.changeLanguage(this.options.lng,l)};return this.options.resources||!this.options.initImmediate?h():setTimeout(h,0),c}loadResources(e){let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Qn;const o=ne(e)?e:this.language;if(typeof e=="function"&&(a=e),!this.options.resources||this.options.partialBundledLanguages){if(o&&o.toLowerCase()==="cimode"&&(!this.options.preload||this.options.preload.length===0))return a();const i=[],r=s=>{if(!s||s==="cimode")return;this.services.languageUtils.toResolveHierarchy(s).forEach(h=>{h!=="cimode"&&i.indexOf(h)<0&&i.push(h)})};o?r(o):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(c=>r(c)),this.options.preload&&this.options.preload.forEach(s=>r(s)),this.services.backendConnector.load(i,this.options.ns,s=>{!s&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),a(s)})}else a(null)}reloadResources(e,n,a){const o=qt();return typeof e=="function"&&(a=e,e=void 0),typeof n=="function"&&(a=n,n=void 0),e||(e=this.languages),n||(n=this.options.ns),a||(a=Qn),this.services.backendConnector.reload(e,n,i=>{o.resolve(),a(i)}),o}use(e){if(!e)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!e.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return e.type==="backend"&&(this.modules.backend=e),(e.type==="logger"||e.log&&e.warn&&e.error)&&(this.modules.logger=e),e.type==="languageDetector"&&(this.modules.languageDetector=e),e.type==="i18nFormat"&&(this.modules.i18nFormat=e),e.type==="postProcessor"&&Hl.addPostProcessor(e),e.type==="formatter"&&(this.modules.formatter=e),e.type==="3rdParty"&&this.modules.external.push(e),this}setResolvedLanguage(e){if(!(!e||!this.languages)&&!(["cimode","dev"].indexOf(e)>-1))for(let n=0;n<this.languages.length;n++){const a=this.languages[n];if(!(["cimode","dev"].indexOf(a)>-1)&&this.store.hasLanguageSomeTranslations(a)){this.resolvedLanguage=a;break}}}changeLanguage(e,n){var a=this;this.isLanguageChangingTo=e;const o=qt();this.emit("languageChanging",e);const i=c=>{this.language=c,this.languages=this.services.languageUtils.toResolveHierarchy(c),this.resolvedLanguage=void 0,this.setResolvedLanguage(c)},r=(c,h)=>{h?(i(h),this.translator.changeLanguage(h),this.isLanguageChangingTo=void 0,this.emit("languageChanged",h),this.logger.log("languageChanged",h)):this.isLanguageChangingTo=void 0,o.resolve(function(){return a.t(...arguments)}),n&&n(c,function(){return a.t(...arguments)})},s=c=>{!e&&!c&&this.services.languageDetector&&(c=[]);const h=ne(c)?c:this.services.languageUtils.getBestMatchFromCodes(c);h&&(this.language||i(h),this.translator.language||this.translator.changeLanguage(h),this.services.languageDetector&&this.services.languageDetector.cacheUserLanguage&&this.services.languageDetector.cacheUserLanguage(h)),this.loadResources(h,l=>{r(l,h)})};return!e&&this.services.languageDetector&&!this.services.languageDetector.async?s(this.services.languageDetector.detect()):!e&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(s):this.services.languageDetector.detect(s):s(e),o}getFixedT(e,n,a){var o=this;const i=function(r,s){let c;if(typeof s!="object"){for(var h=arguments.length,l=new Array(h>2?h-2:0),d=2;d<h;d++)l[d-2]=arguments[d];c=o.options.overloadTranslationOptionHandler([r,s].concat(l))}else c={...s};c.lng=c.lng||i.lng,c.lngs=c.lngs||i.lngs,c.ns=c.ns||i.ns,c.keyPrefix!==""&&(c.keyPrefix=c.keyPrefix||a||i.keyPrefix);const u=o.options.keySeparator||".";let f;return c.keyPrefix&&Array.isArray(r)?f=r.map(m=>`${c.keyPrefix}${u}${m}`):f=c.keyPrefix?`${c.keyPrefix}${u}${r}`:r,o.t(f,c)};return ne(e)?i.lng=e:i.lngs=e,i.ns=n,i.keyPrefix=a,i}t(){return this.translator&&this.translator.translate(...arguments)}exists(){return this.translator&&this.translator.exists(...arguments)}setDefaultNamespace(e){this.options.defaultNS=e}hasLoadedNamespace(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;const a=n.lng||this.resolvedLanguage||this.languages[0],o=this.options?this.options.fallbackLng:!1,i=this.languages[this.languages.length-1];if(a.toLowerCase()==="cimode")return!0;const r=(s,c)=>{const h=this.services.backendConnector.state[`${s}|${c}`];return h===-1||h===0||h===2};if(n.precheck){const s=n.precheck(this,r);if(s!==void 0)return s}return!!(this.hasResourceBundle(a,e)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||r(a,e)&&(!o||r(i,e)))}loadNamespaces(e,n){const a=qt();return this.options.ns?(ne(e)&&(e=[e]),e.forEach(o=>{this.options.ns.indexOf(o)<0&&this.options.ns.push(o)}),this.loadResources(o=>{a.resolve(),n&&n(o)}),a):(n&&n(),Promise.resolve())}loadLanguages(e,n){const a=qt();ne(e)&&(e=[e]);const o=this.options.preload||[],i=e.filter(r=>o.indexOf(r)<0&&this.services.languageUtils.isSupportedCode(r));return i.length?(this.options.preload=o.concat(i),this.loadResources(r=>{a.resolve(),n&&n(r)}),a):(n&&n(),Promise.resolve())}dir(e){if(e||(e=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!e)return"rtl";const n=["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"],a=this.services&&this.services.languageUtils||new xr(Lr());return n.indexOf(a.getLanguagePartFromCode(e))>-1||e.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;return new fn(e,n)}cloneInstance(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Qn;const a=e.forkResourceStore;a&&delete e.forkResourceStore;const o={...this.options,...e,isClone:!0},i=new fn(o);return(e.debug!==void 0||e.prefix!==void 0)&&(i.logger=i.logger.clone(e)),["store","services","language"].forEach(s=>{i[s]=this[s]}),i.services={...this.services},i.services.utils={hasLoadedNamespace:i.hasLoadedNamespace.bind(i)},a&&(i.store=new $r(this.store.data,o),i.services.resourceStore=i.store),i.translator=new fa(i.services,o),i.translator.on("*",function(s){for(var c=arguments.length,h=new Array(c>1?c-1:0),l=1;l<c;l++)h[l-1]=arguments[l];i.emit(s,...h)}),i.init(o,n),i.translator.options=o,i.translator.backendConnector.services.utils={hasLoadedNamespace:i.hasLoadedNamespace.bind(i)},i}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}}const $e=fn.createInstance();$e.createInstance=fn.createInstance;$e.createInstance;$e.dir;$e.init;$e.loadResources;$e.reloadResources;$e.use;$e.changeLanguage;$e.getFixedT;$e.t;$e.exists;$e.setDefaultNamespace;$e.hasLoadedNamespace;$e.loadNamespaces;$e.loadLanguages;function sm(){if(console&&console.warn){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];typeof e[0]=="string"&&(e[0]=`react-i18next:: ${e[0]}`),console.warn(...e)}}const Fr={};function yo(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];typeof e[0]=="string"&&Fr[e[0]]||(typeof e[0]=="string"&&(Fr[e[0]]=new Date),sm(...e))}const Ql=(t,e)=>()=>{if(t.isInitialized)e();else{const n=()=>{setTimeout(()=>{t.off("initialized",n)},0),e()};t.on("initialized",n)}};function Ir(t,e,n){t.loadNamespaces(e,Ql(t,n))}function Ur(t,e,n,a){typeof n=="string"&&(n=[n]),n.forEach(o=>{t.options.ns.indexOf(o)<0&&t.options.ns.push(o)}),t.loadLanguages(e,Ql(t,a))}function lm(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const a=e.languages[0],o=e.options?e.options.fallbackLng:!1,i=e.languages[e.languages.length-1];if(a.toLowerCase()==="cimode")return!0;const r=(s,c)=>{const h=e.services.backendConnector.state[`${s}|${c}`];return h===-1||h===2};return n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&e.services.backendConnector.backend&&e.isLanguageChangingTo&&!r(e.isLanguageChangingTo,t)?!1:!!(e.hasResourceBundle(a,t)||!e.services.backendConnector.backend||e.options.resources&&!e.options.partialBundledLanguages||r(a,t)&&(!o||r(i,t)))}function cm(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return!e.languages||!e.languages.length?(yo("i18n.languages were undefined or empty",e.languages),!0):e.options.ignoreJSONStructure!==void 0?e.hasLoadedNamespace(t,{lng:n.lng,precheck:(o,i)=>{if(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&o.services.backendConnector.backend&&o.isLanguageChangingTo&&!i(o.isLanguageChangingTo,t))return!1}}):lm(t,e,n)}const um=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,dm={"&amp;":"&","&#38;":"&","&lt;":"<","&#60;":"<","&gt;":">","&#62;":">","&apos;":"'","&#39;":"'","&quot;":'"',"&#34;":'"',"&nbsp;":" ","&#160;":" ","&copy;":"©","&#169;":"©","&reg;":"®","&#174;":"®","&hellip;":"…","&#8230;":"…","&#x2F;":"/","&#47;":"/"},hm=t=>dm[t],fm=t=>t.replace(um,hm);let vo={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:fm};function pm(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};vo={...vo,...t}}function mm(){return vo}let Kl;function gm(t){Kl=t}function ym(){return Kl}const vm={type:"3rdParty",init(t){pm(t.options.react),gm(t)}},bm=z.createContext();class Pm{constructor(){this.usedNamespaces={}}addUsedNamespaces(e){e.forEach(n=>{this.usedNamespaces[n]||(this.usedNamespaces[n]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}}const wm=(t,e)=>{const n=z.useRef();return z.useEffect(()=>{n.current=t},[t,e]),n.current};function Cm(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const{i18n:n}=e,{i18n:a,defaultNS:o}=z.useContext(bm)||{},i=n||a||ym();if(i&&!i.reportNamespaces&&(i.reportNamespaces=new Pm),!i){yo("You will need to pass in an i18next instance by using initReactI18next");const T=(M,C)=>typeof C=="string"?C:C&&typeof C=="object"&&typeof C.defaultValue=="string"?C.defaultValue:Array.isArray(M)?M[M.length-1]:M,S=[T,{},!1];return S.t=T,S.i18n={},S.ready=!1,S}i.options.react&&i.options.react.wait!==void 0&&yo("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");const r={...mm(),...i.options.react,...e},{useSuspense:s,keyPrefix:c}=r;let h=t||o||i.options&&i.options.defaultNS;h=typeof h=="string"?[h]:h||["translation"],i.reportNamespaces.addUsedNamespaces&&i.reportNamespaces.addUsedNamespaces(h);const l=(i.isInitialized||i.initializedStoreOnce)&&h.every(T=>cm(T,i,r));function d(){return i.getFixedT(e.lng||null,r.nsMode==="fallback"?h:h[0],c)}const[u,f]=z.useState(d);let m=h.join();e.lng&&(m=`${e.lng}${m}`);const P=wm(m),A=z.useRef(!0);z.useEffect(()=>{const{bindI18n:T,bindI18nStore:S}=r;A.current=!0,!l&&!s&&(e.lng?Ur(i,e.lng,h,()=>{A.current&&f(d)}):Ir(i,h,()=>{A.current&&f(d)})),l&&P&&P!==m&&A.current&&f(d);function M(){A.current&&f(d)}return T&&i&&i.on(T,M),S&&i&&i.store.on(S,M),()=>{A.current=!1,T&&i&&T.split(" ").forEach(C=>i.off(C,M)),S&&i&&S.split(" ").forEach(C=>i.store.off(C,M))}},[i,m]);const b=z.useRef(!0);z.useEffect(()=>{A.current&&!b.current&&f(d),b.current=!1},[i,c]);const E=[u,i,l];if(E.t=u,E.i18n=i,E.ready=l,l||!l&&!s)return E;throw new Promise(T=>{e.lng?Ur(i,e.lng,h,()=>T()):Ir(i,h,()=>T())})}const Am="ثوانٍ",Sm="مرشد",Tm="رفيق",km="الإنجليزية",$m="الصينية",Rm="الإسبانية",xm="الكورية",Em="الفرنسية",Mm="اليابانية",Lm="الألمانية",Nm="العربية",Fm="الترجمة",Im="التفسير",Um="القواعد",Om="يرجى الانتظار حتى يرد الآخرون لمتابعة الرسائل الخاصة.",Dm="لم تنضم إلى هذه المجموعة بعد. يرجى الانتظار حتى يوافق مالك المجموعة على طلبك.",Bm="محادثة",Vm="جهات الاتصال",Gm="تسجيل الخروج",jm="اقتباس",zm="عرض",_m="سحب الرسالة",Hm="ترجمة",Qm="طي",Km="الرسائل",Jm="الدراسة",Wm="استكشاف",qm="حسابي",Xm="التطوير",Ym="رجوع",Zm="المجموعات",eg="إضافة",tg="فشل",ng="إنشاء",ag="تحديث",og="ParrotMate",ig="نسخ",rg="ذكر",sg="أنثى",lg="كلمة",cg="تسجيل الدخول",ug="و",dg="اللغة",hg="تخطي",fg="متابعة",pg="نعم",mg="لا",gg="العمر",yg="أنثى",vg="ذكر",bg="إنهاء",Pg="تأكيد",wg="الجنس",Cg="المستوى التعليمي",Ag="الوظيفة",Sg="الهواية",Tg={seconds:Am,"Send Code":"إرسال الرمز","Add Profile":"إضافة ملف شخصي",Practitioner:Sm,"I want to practice languages and chat with others":"أرغب في ممارسة اللغات والدردشة مع الآخرين",Mate:Tm,"I can guide language learning and provide companionship":"أستطيع إرشاد المتعلمين في اللغات وتقديم الدعم والرفقة","Unknown error":"حدث خطأ غير معروف. الرجاء المحاولة مرة أخرى.",English:km,Chinese:$m,Spanish:Rm,Korean:xm,French:Em,Japanese:Mm,German:Lm,Arabic:Nm,Translation:Fm,Interpretation:Im,"Key Vocabulary & Terms":"المفردات والمصطلحات الرئيسية",Grammar:Um,DM_ACL_REJECT:Om,GROUP_ACL_REJECT:Dm,"Tree Hole":"زاوية الاعترافات",Chat:Bm,Contacts:Vm,"Remove Contact":"إزالة جهة اتصال","Exit Group":"مغادرة المجموعة","Chat Settings":"إعدادات المحادثة","Awaiting friend confirmation":"بانتظار تأكيد الصديق","Revision failed":"فشل المراجعة","Please use English":"يرجى استخدام الإنجليزية","Speech recognition failed. Please try again.":"فشل التعرف على الصوت. الرجاء المحاولة مرة أخرى.","analyzing...":"جارٍ التحليل...","Loading profiles...":"جارٍ تحميل الملفات الشخصية...","Add Friend":"إضافة صديق","Create Group":"إنشاء مجموعة",Logout:Gm,"Copied username to clipboard":"تم نسخ اسم المستخدم إلى الحافظة","Switch Identity":"تبديل الهوية",Function:"الميزة",Quote:jm,"Instructions(Optional)":"تعليمات (اختياري)","joined the room":"انضم إلى الغرفة","left the room":"غادر الغرفة",View:zm,Recall:_m,"Hide Translation":"إخفاء الترجمة",Translate:Hm,Collapse:Qm,"Before you accept, she won’t know you've seen any messages.":"قبل قبولك، لن تعلم هي أنك اطلعت على أي رسائل.","Allow {{name}} to send you messages and share your name and profile picture?":"هل تسمح لـ{{name}} بإرسال رسائل إليك ومشاركة اسمك وصورتك الشخصية؟",Message:Km,Study:Jm,Discover:Wm,Me:qm,"coming soon":"قريبًا","This feature is under":"هذه الميزة قيد",development:Xm,Back:Ym,"Search contacts or groups":"ابحث عن جهات الاتصال أو المجموعات",Groups:Zm,"No Results":"لا توجد نتائج","Say Hi":"قل مرحبًا",Add:eg,"Find Friend":"البحث عن صديق","Input Username":"أدخل اسم المستخدم","my account: ":"حسابي: ","Already Applied":"تم إرسال الطلب بالفعل","User is blocked":"المستخدم محظور",Failed:tg,"Please select at least one member":"الرجاء اختيار عضو واحد على الأقل","Group created":"تم إنشاء المجموعة","Group Name":"اسم المجموعة","Group Name is required":"اسم المجموعة مطلوب","Loading...":"جارٍ التحميل...",Create:ng,"Group updated":"تم تحديث المجموعة","Update Group":"تحديث المجموعة",Update:ag,"No Chats":"لا توجد محادثات",ParrotMate:og,"Speak Different":"تحدث بطريقة مختلفة","Not logged in":"لم تقم بتسجيل الدخول","User Name":"اسم المستخدم",copy:ig,"Network is slow, enable offline mode?":"الشبكة بطيئة، هل تود تفعيل وضع عدم الاتصال؟","Enable offline mode":"تفعيل وضع عدم الاتصال","PChip Reader":"قارئ PChip",male:rg,female:sg,"popular neutral":"شائع / محايد","Offline mode":"وضع عدم الاتصال","Change nickname":"تغيير اللقب","UI Language":"لغة واجهة المستخدم",Word:lg,Date:"التاريخ","My bookshelf":"مكتبتي","Title too short":"العنوان قصير جدًا","Modification successful":"تم التعديل بنجاح","No books in your shelf yet":"لا توجد كتب في رفك حتى الآن","Tap the search icon above to browse books and add them to your shelf!":"اضغط على أيقونة البحث أعلاه لتصفح الكتب وإضافتها إلى رفك!","Read with experts to help you understand,":"اقرأ مع خبراء لمساعدتك على الفهم،","Comprehensive training in English listening and reading.":"تدريب شامل على مهارات الاستماع والقراءة باللغة الإنجليزية.","Hi, {{nickName}}! Welcome!":"مرحبًا، {{nickName}}! أهلاً بك!","Browse library":"تصفح المكتبة","Add your own TXT/PDF":"أضف ملفات TXT/PDF الخاصة بك","Already have an account?":"هل لديك حساب بالفعل؟","Click here to login":"اضغط هنا لتسجيل الدخول","We detected this is your first time using PChip Reader. Add some books!":"يبدو أن هذه أول مرة تستخدم فيها PChip Reader. أضف بعض الكتب!","Upload Book":"رفع كتاب","Click here to upload local EPUB/MOBI/PDF/TXT":"اضغط هنا لرفع ملفات EPUB/MOBI/PDF/TXT من جهازك","Only EPUB/MOBI/PDF/TXT is supported":"نقبل فقط ملفات بصيغ EPUB/MOBI/PDF/TXT","Upload successful":"تم الرفع بنجاح","Book upload failed":"تعذر رفع الكتاب","We only store your files locally!":"نحتفظ بملفاتك محليًا فقط!","New words":"مفردات جديدة","Total reading":"إجمالي القراءة","Today's reading":"قراءة اليوم","Please choose an image file":"يرجى اختيار ملف صورة","Image sent":"تم إرسال الصورة","Failed to upload image":"تعذر تحميل الصورة","analyzing grammar structure":"جاري تحليل البنية النحوية","understanding pronunciation":"جاري فهم النطق","optimizing and restructuring":"جاري تحسين وإعادة هيكلة","My QR Code":"رمز QR الخاص بي","Let friends scan to fill your username automatically":"دع أصدقائك يمسحون الرمز لملء اسم المستخدم تلقائيًا","Unable to load image":"يتعذر تحميل الصورة","Loading image...":"جاري تحميل الصورة...","Shared image":"صورة مشتركة","QR scanning is unavailable in this environment":"مسح رمز QR غير متاح في هذه البيئة","Camera access is not supported on this device":"هذا الجهاز لا يدعم الوصول إلى الكاميرا","Unable to access the camera":"يتعذر الوصول إلى الكاميرا","No QR code found in the selected image":"لم يتم العثور على رمز QR في الصورة المحددة","Unable to read QR code from the selected image":"يتعذر قراءة رمز QR من الصورة المحددة","Username captured from QR code":"تم التقاط اسم المستخدم من رمز QR","Initializing camera...":"جاري تهيئة الكاميرا...","Scan QR Code":"امسح رمز QR","Align the QR code within the frame to capture a username automatically.":"ضع رمز QR داخل الإطار لالتقاط اسم المستخدم تلقائيًا.","Login Success":"تم تسجيل الدخول بنجاح","please enter your phone number":"يرجى إدخال رقم هاتفك","Please enter your phone number":"يرجى إدخال رقم هاتفك",Login:cg,"Terms&Conditions":"الشروط والأحكام",and:ug,"Privacy Policy":"سياسة الخصوصية","Unregistered phone numbers will automatically create an account":"أرقام الهواتف غير المسجَّلة ستُنشئ حسابًا تلقائيًا","Please enter the verification code":"يرجى إدخال رمز التحقق","Send verification code":"إرسال رمز التحقق","Please enter the correct phone number":"يرجى إدخال رقم هاتف صحيح","Verification code sent":"تم إرسال رمز التحقق",Language:dg,Skip:hg,Continue:fg,"Are you 18 or older?":"هل عمرك 18 عامًا أو أكثر؟",Yes:pg,No:mg,"Please select language what you want to learn":"يرجى اختيار اللغة التي تريد تعلمها","Please enter your age":"من فضلك أدخل عمرك",Age:gg,"Please select your gender":"من فضلك اختر جنسك",Female:yg,Male:vg,"Your {{langShort}} name":"اسمك باللغة {{langShort}}","Create your own name or choose from the recommendations":"أنشئ اسمك الخاص أو اختر من الاقتراحات","Enter your nickname here...":"أدخل لقبك هنا...","Learning Language":"لغة التعلم",Finish:bg,"Nickname is required":"اللقب مطلوب","Nickname must be at least 3 characters":"يجب أن يكون اللقب مكونًا من 3 أحرف على الأقل",Confirm:Pg,"Account Phone":"رقم هاتف الحساب",Gender:wg,Education:Cg,Job:Ag,Hobby:Sg,"Select your role":"اختر دورك","Please choose your identity":"الرجاء اختيار هويتك","Profile Step: Nickname":"الاسم المستعار","Profile Step: Learning Language":"اللغة التي تتعلمها","Profile Step: Mother Tongue":"اللغة الأم","By signing up, you agree with ":"عند التسجيل، أنت توافق على "},kg="Sekunden",$g="Lernbegleiter",Rg="Sprachpartner",xg="Englisch",Eg="Chinesisch",Mg="Spanisch",Lg="Koreanisch",Ng="Französisch",Fg="Japanisch",Ig="Deutsch",Ug="Arabisch",Og="Übersetzung",Dg="Interpretation",Bg="Grammatik",Vg="Bitte warte auf die Antwort anderer, um die Direktnachricht fortzusetzen.",Gg="Du bist noch nicht in dieser Gruppe. Bitte warte, bis der Gruppeninhaber deine Anfrage genehmigt.",jg="Chat",zg="Kontakte",_g="Abmelden",Hg="Zitat",Qg="Anzeigen",Kg="Zurückrufen",Jg="Übersetzen",Wg="Einklappen",qg="Nachricht",Xg="Lernen",Yg="Entdecken",Zg="Ich",ey="Entwicklung",ty="Zurück",ny="Gruppen",ay="Hinzufügen",oy="Fehlgeschlagen",iy="Erstellen",ry="Aktualisieren",sy="ParrotMate",ly="kopieren",cy="männlich",uy="weiblich",dy="Wort",hy="Anmelden",fy="und",py="Sprache",my="Überspringen",gy="Weiter",yy="Ja",vy="Nein",by="Alter",Py="Weiblich",wy="Männlich",Cy="Abschließen",Ay="Bestätigen",Sy="Geschlecht",Ty="Ausbildung",ky="Beruf",$y="Hobby",Ry={seconds:kg,"Send Code":"Code senden","Add Profile":"Profil hinzufügen",Practitioner:$g,"I want to practice languages and chat with others":"Ich möchte Sprachen üben und mich mit anderen austauschen",Mate:Rg,"I can guide language learning and provide companionship":"Ich kann beim Sprachenlernen unterstützen und als Gesprächspartner zur Seite stehen","Unknown error":"Unbekannter Fehler",English:xg,Chinese:Eg,Spanish:Mg,Korean:Lg,French:Ng,Japanese:Fg,German:Ig,Arabic:Ug,Translation:Og,Interpretation:Dg,"Key Vocabulary & Terms":"Wichtige Vokabeln & Begriffe",Grammar:Bg,DM_ACL_REJECT:Vg,GROUP_ACL_REJECT:Gg,"Tree Hole":"Baumhöhle",Chat:jg,Contacts:zg,"Remove Contact":"Kontakt entfernen","Exit Group":"Gruppe verlassen","Chat Settings":"Chat-Einstellungen","Awaiting friend confirmation":"Bestätigung durch Kontakt ausstehend","Revision failed":"Überprüfung fehlgeschlagen","Please use English":"Bitte schreibe auf Englisch","Speech recognition failed. Please try again.":"Spracherkennung fehlgeschlagen. Bitte versuche es erneut.","analyzing...":"Analysiere...","Loading profiles...":"Profile werden geladen...","Add Friend":"Kontakt hinzufügen","Create Group":"Gruppe erstellen",Logout:_g,"Copied username to clipboard":"Benutzername in die Zwischenablage kopiert","Switch Identity":"Identität wechseln",Function:"Funktion",Quote:Hg,"Instructions(Optional)":"Anweisungen (optional)","joined the room":"ist dem Raum beigetreten","left the room":"hat den Raum verlassen",View:Qg,Recall:Kg,"Hide Translation":"Übersetzung ausblenden",Translate:Jg,Collapse:Wg,"Before you accept, she won’t know you've seen any messages.":"Bevor du die Anfrage akzeptierst, weiß sie nicht, dass du Nachrichten gesehen hast.","Allow {{name}} to send you messages and share your name and profile picture?":"Darf {{name}} dir Nachrichten schicken und deinen Namen sowie dein Profilbild sehen?",Message:qg,Study:Xg,Discover:Yg,Me:Zg,"coming soon":"Bald verfügbar","This feature is under":"Diese Funktion befindet sich in der",development:ey,Back:ty,"Search contacts or groups":"Kontakte oder Gruppen durchsuchen",Groups:ny,"No Results":"Keine Ergebnisse","Say Hi":"Sag Hallo",Add:ay,"Find Friend":"Freund finden","Input Username":"Benutzernamen eingeben","my account: ":"Mein Konto: ","Already Applied":"Bereits angefragt","User is blocked":"Benutzer ist blockiert",Failed:oy,"Please select at least one member":"Bitte wähle mindestens ein Mitglied aus","Group created":"Gruppe erstellt","Group Name":"Gruppenname","Group Name is required":"Gruppenname ist erforderlich","Loading...":"Lädt...",Create:iy,"Group updated":"Gruppe aktualisiert","Update Group":"Gruppe aktualisieren",Update:ry,"No Chats":"Keine Chats",ParrotMate:sy,"Speak Different":"Sprich anders","Not logged in":"Nicht angemeldet","User Name":"Benutzername",copy:ly,"Network is slow, enable offline mode?":"Die Verbindung ist langsam. Offline-Modus aktivieren?","Enable offline mode":"Offline-Modus aktivieren","PChip Reader":"PChip Reader",male:cy,female:uy,"popular neutral":"beliebt / neutral","Offline mode":"Offline-Modus","Change nickname":"Spitzname ändern","UI Language":"UI-Sprache",Word:dy,Date:"Datum","My bookshelf":"Mein Bücherregal","Title too short":"Titel zu kurz","Modification successful":"Änderung erfolgreich","No books in your shelf yet":"Du hast noch keine Bücher in deinem Regal.","Tap the search icon above to browse books and add them to your shelf!":"Tippe oben auf das Suchsymbol, um Bücher zu durchsuchen und sie deinem Regal hinzuzufügen!","Read with experts to help you understand,":"Lies gemeinsam mit Expert:innen, die dir beim Verstehen helfen,","Comprehensive training in English listening and reading.":"Umfassendes Training für Hör- und Leseverständnis auf Englisch.","Hi, {{nickName}}! Welcome!":"Hallo, {{nickName}}! Willkommen!","Browse library":"Bibliothek durchsuchen","Add your own TXT/PDF":"Eigene TXT-/PDF-Datei hinzufügen","Already have an account?":"Hast du bereits ein Konto?","Click here to login":"Hier klicken, um dich anzumelden","We detected this is your first time using PChip Reader. Add some books!":"Es sieht so aus, als würdest du PChip Reader zum ersten Mal nutzen. Füge ein paar Bücher hinzu!","Upload Book":"Buch hochladen","Click here to upload local EPUB/MOBI/PDF/TXT":"Hier klicken, um lokale EPUB/MOBI/PDF/TXT hochzuladen","Only EPUB/MOBI/PDF/TXT is supported":"Es werden nur EPUB-, MOBI-, PDF- und TXT-Dateien unterstützt.","Upload successful":"Hochladen erfolgreich","Book upload failed":"Hochladen des Buches fehlgeschlagen","We only store your files locally!":"Wir speichern deine Dateien nur lokal!","New words":"Neue Vokabeln","Total reading":"Gesamte Lesezeit","Today's reading":"Heutige Lesezeit","Please choose an image file":"Bitte wähle eine Bilddatei aus","Image sent":"Bild gesendet","Failed to upload image":"Bild konnte nicht hochgeladen werden","analyzing grammar structure":"Grammatikstruktur wird analysiert","understanding pronunciation":"Aussprache wird analysiert","optimizing and restructuring":"Wird optimiert und umstrukturiert","My QR Code":"Mein QR-Code","Let friends scan to fill your username automatically":"Lass Freunde scannen, damit dein Benutzername automatisch ausgefüllt wird","Unable to load image":"Bild kann nicht geladen werden","Loading image...":"Bild wird geladen...","Shared image":"Geteiltes Bild","QR scanning is unavailable in this environment":"QR-Scannen ist in dieser Umgebung nicht verfügbar","Camera access is not supported on this device":"Kamerazugriff wird auf diesem Gerät nicht unterstützt","Unable to access the camera":"Auf die Kamera kann nicht zugegriffen werden","No QR code found in the selected image":"Kein QR-Code im ausgewählten Bild gefunden","Unable to read QR code from the selected image":"QR-Code im ausgewählten Bild konnte nicht gelesen werden","Username captured from QR code":"Benutzername aus QR-Code erfasst","Initializing camera...":"Kamera wird initialisiert...","Scan QR Code":"QR-Code scannen","Align the QR code within the frame to capture a username automatically.":"Richte den QR-Code innerhalb des Rahmens aus, damit dein Benutzername automatisch erkannt wird.","Login Success":"Anmeldung erfolgreich","please enter your phone number":"bitte gib deine Telefonnummer ein","Please enter your phone number":"Bitte gib deine Telefonnummer ein",Login:hy,"Terms&Conditions":"Nutzungsbedingungen",and:fy,"Privacy Policy":"Datenschutzerklärung","Unregistered phone numbers will automatically create an account":"Mit einer nicht registrierten Telefonnummer wird automatisch ein Konto erstellt.","Please enter the verification code":"Bitte gib den Bestätigungscode ein","Send verification code":"Bestätigungscode senden","Please enter the correct phone number":"Bitte gib eine gültige Telefonnummer ein","Verification code sent":"Bestätigungscode gesendet",Language:py,Skip:my,Continue:gy,"Are you 18 or older?":"Bist du 18 Jahre oder älter?",Yes:yy,No:vy,"Please select language what you want to learn":"Bitte wähle die Sprache, die du lernen möchtest.","Please enter your age":"Bitte gib dein Alter an",Age:by,"Please select your gender":"Bitte wähle dein Geschlecht aus",Female:Py,Male:wy,"Your {{langShort}} name":"Dein {{langShort}}-Name","Create your own name or choose from the recommendations":"Erstelle einen eigenen Namen oder wähle einen aus unseren Vorschlägen","Enter your nickname here...":"Gib hier deinen Spitznamen ein...","Learning Language":"Lernsprache",Finish:Cy,"Nickname is required":"Bitte gib einen Spitznamen ein","Nickname must be at least 3 characters":"Der Spitzname muss mindestens 3 Zeichen lang sein",Confirm:Ay,"Account Phone":"Telefonnummer",Gender:Sy,Education:Ty,Job:ky,Hobby:$y,"Select your role":"Wähle deine Rolle","Please choose your identity":"Bitte wähle deine Identität aus","Profile Step: Nickname":"Spitzname","Profile Step: Learning Language":"Lernsprache","Profile Step: Mother Tongue":"Muttersprache","By signing up, you agree with ":"Mit der Anmeldung erklärst du dich einverstanden mit "},xy="δευτερόλεπτα",Ey="Καθοδηγητής",My="Σύντροφος",Ly="Αγγλικά",Ny="Κινέζικα",Fy="Ισπανικά",Iy="Κορεατικά",Uy="Γαλλικά",Oy="Ιαπωνικά",Dy="Γερμανικά",By="Αραβικά",Vy="Μετάφραση",Gy="Ερμηνεία",jy="Γραμματική",zy="Πρέπει να περιμένετε την απάντηση των άλλων για να συνεχίσετε την ιδιωτική συνομιλία.",_y="Δεν είστε ακόμα μέλος αυτής της ομάδας. Περιμένετε να εγκριθεί το αίτημά σας από τον διαχειριστή.",Hy="Συνομιλία",Qy="Επαφές",Ky="Αποσύνδεση",Jy="Παράθεση",Wy="Προβολή",qy="Ανάκληση",Xy="Μετάφραση",Yy="Σύμπτυξη",Zy="Μήνυμα",e0="Μάθηση",t0="Ανακάλυψη",n0="Εγώ",a0="ανάπτυξη",o0="Πίσω",i0="Ομάδες",r0="Προσθήκη",s0="Απέτυχε",l0="Δημιουργία",c0="Ενημέρωση",u0="ParrotMate",d0="Αντιγραφή",h0="Άνδρας",f0="Γυναίκα",p0="Λέξη",m0="Σύνδεση",g0="και",y0="Γλώσσα",v0="Παράλειψη",b0="Συνέχεια",P0="Ναι",w0="Όχι",C0="Ηλικία",A0="Γυναίκα",S0="Άνδρας",T0="Ολοκλήρωση",k0="Επιβεβαίωση",$0="Φύλο",R0="Εκπαίδευση",x0="Επάγγελμα",E0="Χόμπι",M0={seconds:xy,"Send Code":"Αποστολή κωδικού","Add Profile":"Προσθήκη προφίλ",Practitioner:Ey,"I want to practice languages and chat with others":"Θέλω να εξασκήσω γλώσσες και να συνομιλήσω με άλλους",Mate:My,"I can guide language learning and provide companionship":"Μπορώ να καθοδηγήσω στη μάθηση γλωσσών και να προσφέρω συντροφιά","Unknown error":"Άγνωστο σφάλμα",English:Ly,Chinese:Ny,Spanish:Fy,Korean:Iy,French:Uy,Japanese:Oy,German:Dy,Arabic:By,Translation:Vy,Interpretation:Gy,"Key Vocabulary & Terms":"Βασικό λεξιλόγιο και όροι",Grammar:jy,DM_ACL_REJECT:zy,GROUP_ACL_REJECT:_y,"Tree Hole":"Τρύπα Δέντρου",Chat:Hy,Contacts:Qy,"Remove Contact":"Αφαίρεση επαφής","Exit Group":"Αποχώρηση από την ομάδα","Chat Settings":"Ρυθμίσεις συνομιλίας","Awaiting friend confirmation":"Αναμονή επιβεβαίωσης από φίλο","Revision failed":"Η αναθεώρηση απέτυχε","Please use English":"Παρακαλώ χρησιμοποιήστε τα Αγγλικά","Speech recognition failed. Please try again.":"Η αναγνώριση ομιλίας απέτυχε. Παρακαλώ δοκιμάστε ξανά.","analyzing...":"αναλύεται...","Loading profiles...":"Φόρτωση προφίλ...","Add Friend":"Προσθήκη φίλου","Create Group":"Δημιουργία ομάδας",Logout:Ky,"Copied username to clipboard":"Το όνομα χρήστη αντιγράφηκε στο πρόχειρο","Switch Identity":"Αλλαγή ταυτότητας",Function:"Λειτουργία",Quote:Jy,"Instructions(Optional)":"Οδηγίες (Προαιρετικό)","joined the room":"εντάχθηκε στην αίθουσα","left the room":"αποχώρησε από την αίθουσα",View:Wy,Recall:qy,"Hide Translation":"Απόκρυψη μετάφρασης",Translate:Xy,Collapse:Yy,"Before you accept, she won’t know you've seen any messages.":"Πριν αποδεχτείς, εκείνη δεν θα γνωρίζει ότι έχεις δει τα μηνύματά της.","Allow {{name}} to send you messages and share your name and profile picture?":"Θα επιτρέψετε στον/στην {{name}} να σας στέλνει μηνύματα και να βλέπει το όνομά σας και τη φωτογραφία προφίλ;",Message:Zy,Study:e0,Discover:t0,Me:n0,"coming soon":"Έρχεται σύντομα","This feature is under":"Αυτή η λειτουργία είναι σε",development:a0,Back:o0,"Search contacts or groups":"Αναζήτηση επαφών ή ομάδων",Groups:i0,"No Results":"Δεν βρέθηκαν αποτελέσματα","Say Hi":"Πες γεια",Add:r0,"Find Friend":"Βρες φίλο","Input Username":"Πληκτρολογήστε όνομα χρήστη","my account: ":"Ο λογαριασμός μου: ","Already Applied":"Έχεις ήδη υποβάλει αίτημα","User is blocked":"Ο χρήστης είναι αποκλεισμένος",Failed:s0,"Please select at least one member":"Επιλέξτε τουλάχιστον ένα μέλος","Group created":"Η ομάδα δημιουργήθηκε","Group Name":"Όνομα ομάδας","Group Name is required":"Το όνομα ομάδας είναι υποχρεωτικό","Loading...":"Φόρτωση...",Create:l0,"Group updated":"Η ομάδα ενημερώθηκε","Update Group":"Ενημέρωση ομάδας",Update:c0,"No Chats":"Δεν υπάρχουν συνομιλίες",ParrotMate:u0,"Speak Different":"Μίλα διαφορετικά","Not logged in":"Δεν έχετε συνδεθεί","User Name":"Όνομα χρήστη",copy:d0,"Network is slow, enable offline mode?":"Το δίκτυο είναι αργό. Να ενεργοποιήσω τη λειτουργία εκτός σύνδεσης;","Enable offline mode":"Ενεργοποίηση λειτουργίας εκτός σύνδεσης","PChip Reader":"PChip Reader",male:h0,female:f0,"popular neutral":"Δημοφιλές (ουδέτερο)","Offline mode":"Λειτουργία εκτός σύνδεσης","Change nickname":"Αλλαγή ψευδώνυμου","UI Language":"Γλώσσα διεπαφής",Word:p0,Date:"Ημερομηνία","My bookshelf":"Η βιβλιοθήκη μου","Title too short":"Ο τίτλος είναι πολύ σύντομος","Modification successful":"Η τροποποίηση ολοκληρώθηκε με επιτυχία","No books in your shelf yet":"Δεν έχετε ακόμα βιβλία στο ράφι σας","Tap the search icon above to browse books and add them to your shelf!":"Πατήστε το εικονίδιο αναζήτησης παραπάνω για να βρείτε βιβλία και να τα προσθέσετε στο ράφι σας!","Read with experts to help you understand,":"Διαβάστε με ειδικούς που θα σας βοηθήσουν να κατανοήσετε,","Comprehensive training in English listening and reading.":"Ολοκληρωμένη εκπαίδευση στην ακρόαση και την ανάγνωση στα Αγγλικά.","Hi, {{nickName}}! Welcome!":"Γεια σου, {{nickName}}! Καλώς ήρθες!","Browse library":"Περιήγηση στη βιβλιοθήκη","Add your own TXT/PDF":"Πρόσθεσε τα δικά σου αρχεία TXT/PDF","Already have an account?":"Έχεις ήδη λογαριασμό;","Click here to login":"Κάνε κλικ εδώ για να συνδεθείς","We detected this is your first time using PChip Reader. Add some books!":"Φαίνεται ότι χρησιμοποιείς το PChip Reader για πρώτη φορά. Πρόσθεσε μερικά βιβλία!","Upload Book":"Μεταφόρτωση βιβλίου","Click here to upload local EPUB/MOBI/PDF/TXT":"Κάνε κλικ εδώ για να ανεβάσεις τοπικά αρχεία EPUB/MOBI/PDF/TXT","Only EPUB/MOBI/PDF/TXT is supported":"Υποστηρίζονται μόνο αρχεία EPUB, MOBI, PDF και TXT","Upload successful":"Το ανέβασμα ολοκληρώθηκε με επιτυχία","Book upload failed":"Η μεταφόρτωση του βιβλίου απέτυχε","We only store your files locally!":"Αποθηκεύουμε τα αρχεία σου μόνο τοπικά!","New words":"Νέες λέξεις","Total reading":"Συνολική ανάγνωση","Today's reading":"Ανάγνωση σήμερα","Please choose an image file":"Επιλέξτε ένα αρχείο εικόνας","Image sent":"Η εικόνα εστάλη","Failed to upload image":"Η αποστολή της εικόνας απέτυχε","analyzing grammar structure":"Ανάλυση γραμματικής δομής","understanding pronunciation":"Κατανόηση προφοράς","optimizing and restructuring":"Βελτιστοποίηση και αναδιάρθρωση","My QR Code":"Ο κωδικός QR μου","Let friends scan to fill your username automatically":"Άσε τους φίλους να σαρώσουν για να συμπληρωθεί αυτόματα το όνομα χρήστη σου","Unable to load image":"Δεν είναι δυνατή η φόρτωση της εικόνας","Loading image...":"Φόρτωση εικόνας...","Shared image":"Κοινόχρηστη εικόνα","QR scanning is unavailable in this environment":"Δεν είναι δυνατή η σάρωση QR σε αυτό το περιβάλλον","Camera access is not supported on this device":"Η πρόσβαση στην κάμερα δεν υποστηρίζεται σε αυτή τη συσκευή","Unable to access the camera":"Δεν είναι δυνατή η πρόσβαση στην κάμερα","No QR code found in the selected image":"Δεν βρέθηκε κωδικός QR στην επιλεγμένη εικόνα","Unable to read QR code from the selected image":"Δεν ήταν δυνατή η ανάγνωση του κωδικού QR από την επιλεγμένη εικόνα","Username captured from QR code":"Το όνομα χρήστη εντοπίστηκε από τον κωδικό QR","Initializing camera...":"Εκκίνηση κάμερας...","Scan QR Code":"Σάρωση κωδικού QR","Align the QR code within the frame to capture a username automatically.":"Τοποθέτησε τον κωδικό QR μέσα στο πλαίσιο για να συμπληρωθεί αυτόματα το όνομα χρήστη.","Login Success":"Επιτυχής σύνδεση","please enter your phone number":"παρακαλώ εισάγετε τον αριθμό τηλεφώνου σας","Please enter your phone number":"Παρακαλώ εισάγετε τον αριθμό τηλεφώνου σας",Login:m0,"Terms&Conditions":"Όροι & Προϋποθέσεις",and:g0,"Privacy Policy":"Πολιτική Απορρήτου","Unregistered phone numbers will automatically create an account":"Αν ο αριθμός τηλεφώνου δεν είναι καταχωρημένος, θα δημιουργηθεί αυτόματα λογαριασμός.","Please enter the verification code":"Παρακαλώ εισάγετε τον κωδικό επαλήθευσης","Send verification code":"Αποστολή κωδικού επαλήθευσης","Please enter the correct phone number":"Παρακαλώ εισάγετε τον σωστό αριθμό τηλεφώνου","Verification code sent":"Ο κωδικός επαλήθευσης εστάλη",Language:y0,Skip:v0,Continue:b0,"Are you 18 or older?":"Είστε 18 ετών ή άνω;",Yes:P0,No:w0,"Please select language what you want to learn":"Παρακαλώ επιλέξτε τη γλώσσα που θέλετε να μάθετε","Please enter your age":"Παρακαλώ εισάγετε την ηλικία σας",Age:C0,"Please select your gender":"Επιλέξτε το φύλο σας",Female:A0,Male:S0,"Your {{langShort}} name":"Το όνομά σας στη γλώσσα {{langShort}}","Create your own name or choose from the recommendations":"Δημιουργήστε το δικό σας όνομα ή επιλέξτε από τις προτάσεις","Enter your nickname here...":"Γράψτε εδώ το ψευδώνυμό σας...","Learning Language":"Γλώσσα που μαθαίνετε",Finish:T0,"Nickname is required":"Απαιτείται ψευδώνυμο","Nickname must be at least 3 characters":"Το ψευδώνυμο πρέπει να έχει τουλάχιστον 3 χαρακτήρες",Confirm:k0,"Account Phone":"Τηλέφωνο λογαριασμού",Gender:$0,Education:R0,Job:x0,Hobby:E0,"Select your role":"Επιλέξτε τον ρόλο σας","Please choose your identity":"Παρακαλώ επιλέξτε την ταυτότητά σας","Profile Step: Nickname":"Ψευδώνυμο","Profile Step: Learning Language":"Γλώσσα που μαθαίνετε","Profile Step: Mother Tongue":"Μητρική γλώσσα","By signing up, you agree with ":"Με την εγγραφή σας, συμφωνείτε με "},L0="Chat",N0="Contacts",F0="Log out",I0="Quote",U0="View",O0="Recall",D0="Translate",B0="Collapse",V0="Messages",G0="Study",j0="Explore",z0="Profile",_0="development",H0="Back",Q0="Groups",K0="Add",J0="Operation failed",W0="Create",q0="Update",X0="ParrotMate",Y0="Copy",Z0="Male",ev="Female",tv="Word",nv="Sign in",av="and",ov="seconds",iv="Learner",rv="Mate",sv="Translation",lv="Interpretation",cv="Grammar",uv="Language",dv="Skip for now",hv="Continue",fv="Yes",pv="No",mv="Age",gv="Female",yv="Male",vv="Finish",bv="Confirm",Pv="Gender",wv="Education level",Cv="Occupation",Av="Hobbies",Sv="English",Tv="Chinese",kv="Spanish",$v="Korean",Rv="French",xv="Japanese",Ev="German",Mv="Arabic",Lv="Please wait for the other user's response before continuing this direct message.",Nv="You haven't joined this group yet. Please wait for the group owner's approval.",Fv={"Tree Hole":"Tree Hole (Anonymous Corner)",Chat:L0,Contacts:N0,"Please choose an image file":"Please select an image file.","Image sent":"Image sent successfully.","Failed to upload image":"Failed to upload image. Please try again.","Remove Contact":"Remove Contact","Exit Group":"Leave Group","Chat Settings":"Chat Settings","Awaiting friend confirmation":"Waiting for friend to confirm","Revision failed":"Revision failed. Please try again.","Please use English":"Please use English.","Speech recognition failed. Please try again.":"Speech recognition failed. Please try again.","analyzing...":"Analyzing...","analyzing grammar structure":"Analyzing grammar structure","understanding pronunciation":"Analyzing pronunciation","optimizing and restructuring":"Optimizing and restructuring","Loading profiles...":"Loading profiles...","Add Friend":"Add Friend","Create Group":"Create Group",Logout:F0,"Copied username to clipboard":"Username copied to clipboard","Switch Identity":"Switch profile",Function:"Features","My QR Code":"My QR code","Let friends scan to fill your username automatically":"Let friends scan to auto-fill your username",Quote:I0,"No Chats":"No chats yet","Instructions(Optional)":"Instructions (optional)","joined the room":"joined the room","left the room":"left the room","Unable to load image":"Unable to load image","Loading image...":"Loading image...","Shared image":"Shared image",View:U0,Recall:O0,"Hide Translation":"Hide translation",Translate:D0,Collapse:B0,"Before you accept, she won’t know you've seen any messages.":"Before you accept, they won't know you've seen any messages.","Allow {{name}} to send you messages and share your name and profile picture?":"Allow {{name}} to send you messages and view your name and profile picture?","QR scanning is unavailable in this environment":"QR scanning isn't supported in this environment","Camera access is not supported on this device":"This device doesn't support camera access","Unable to access the camera":"Unable to access your camera","No QR code found in the selected image":"No QR code detected in the selected image","Unable to read QR code from the selected image":"Couldn't read the QR code from the selected image",Message:V0,Study:G0,Discover:j0,Me:z0,"coming soon":"Coming soon","This feature is under":"This feature is under",development:_0,Back:H0,"Search contacts or groups":"Search for contacts or groups",Groups:Q0,"No Results":"No results found","Say Hi":"Say hello",Add:K0,"Username captured from QR code":"Username detected from QR code","Find Friend":"Find Friends","Input Username":"Enter username","my account: ":"My account: ","Already Applied":"Request already sent","User is blocked":"This user is blocked","Initializing camera...":"Initializing camera...","Scan QR Code":"Scan QR code","Align the QR code within the frame to capture a username automatically.":"Place the QR code inside the frame to automatically capture the username.",Failed:J0,"Please select at least one member":"Please select at least one member.","Group created":"Group created successfully","Group Name":"Group name","Group Name is required":"Please enter a group name",Create:W0,"Group updated":"Group updated successfully","Update Group":"Update group","Loading...":"Loading...",Update:q0,ParrotMate:X0,"Speak Different":"Speak differently","Not logged in":"You're not signed in","User Name":"Username",copy:Y0,"Network is slow, enable offline mode?":"Network is slow. Switch to Offline Mode?","Enable offline mode":"Turn on Offline Mode","PChip Reader":"PChip Reader",male:Z0,female:ev,"popular neutral":"Popular (Neutral)","Offline mode":"Offline Mode","Change nickname":"Change nickname","UI Language":"Interface Language",Word:tv,Date:"Date","My bookshelf":"My Bookshelf","Title too short":"Title is too short","Modification successful":"Changes saved successfully","No books in your shelf yet":"No books on your shelf yet","Tap the search icon above to browse books and add them to your shelf!":"Tap the search icon above to browse and add books to your shelf!","Read with experts to help you understand,":"Read with experts to help you understand.","Comprehensive training in English listening and reading.":"Comprehensive English listening and reading training.","Hi, {{nickName}}! Welcome!":"Hi, {{nickName}}! Welcome!","Browse library":"Browse the library","Add your own TXT/PDF":"Add your own TXT or PDF file","Already have an account?":"Already have an account?","Click here to login":"Click here to log in","We detected this is your first time using PChip Reader. Add some books!":"It looks like this is your first time using PChip Reader. Add some books to get started!","Upload Book":"Upload a Book","Click here to upload local EPUB/MOBI/PDF/TXT":"Click here to upload a local EPUB, MOBI, PDF, or TXT file","Only EPUB/MOBI/PDF/TXT is supported":"Only EPUB, MOBI, PDF, and TXT formats are supported.","Upload successful":"Upload completed successfully","Book upload failed":"Book upload failed. Please try again.","We only store your files locally!":"We only store your files locally.","New words":"New vocabulary","Total reading":"Total reading time","Today's reading":"Today's reading time","Login Success":"Login successful","please enter your phone number":"please enter your phone number","Please enter your phone number":"Please enter your phone number",Login:nv,"Terms&Conditions":"Terms & Conditions",and:av,"Privacy Policy":"Privacy Policy","Unregistered phone numbers will automatically create an account":"If your phone number isn't registered, an account will be created automatically.","Please enter the verification code":"Please enter the verification code.","Send verification code":"Send verification code",seconds:ov,"Send Code":"Send Code","Please enter the correct phone number":"Please enter a valid phone number.","Verification code sent":"Verification code sent","Add Profile":"Add a profile",Practitioner:iv,"I want to practice languages and chat with others":"I want to practice languages and chat with others.",Mate:rv,"I can guide language learning and provide companionship":"I can guide language learning and offer companionship.",Translation:sv,Interpretation:lv,"Key Vocabulary & Terms":"Key Vocabulary & Terms",Grammar:cv,"Unknown error":"An unknown error occurred. Please try again.",Language:uv,Skip:dv,Continue:hv,"Are you 18 or older?":"Are you 18 or older?",Yes:fv,No:pv,"Please select language what you want to learn":"Please choose the language you'd like to learn","Please enter your age":"Please enter your age",Age:mv,"Please select your gender":"Please select your gender",Female:gv,Male:yv,"Your {{langShort}} name":"Your name in {{langShort}}","Create your own name or choose from the recommendations":"Create your own name or choose from our suggestions","Enter your nickname here...":"Enter your nickname...","Learning Language":"Language you're learning",Finish:vv,"Nickname is required":"Please enter a nickname","Nickname must be at least 3 characters":"Nickname must be at least 3 characters long",Confirm:bv,"Account Phone":"Phone number",Gender:Pv,Education:wv,Job:Cv,Hobby:Av,"Select your role":"Choose your role","Please choose your identity":"Please select your profile type",English:Sv,Chinese:Tv,Spanish:kv,Korean:$v,French:Rv,Japanese:xv,German:Ev,Arabic:Mv,DM_ACL_REJECT:Lv,GROUP_ACL_REJECT:Nv,"Profile Step: Nickname":"Nickname","Profile Step: Learning Language":"Language you're learning","Profile Step: Mother Tongue":"Native language","By signing up, you agree with ":"By signing up, you agree to "},Iv="segundos",Uv="Tutor",Ov="Compañero",Dv="Inglés",Bv="Chino",Vv="Español",Gv="Coreano",jv="Francés",zv="Japonés",_v="Alemán",Hv="Árabe",Qv="Traducción",Kv="Interpretación",Jv="Gramática",Wv="Debes esperar la respuesta de la otra persona para continuar con el mensaje directo.",qv="Aún no estás en este grupo. Espera a que el propietario apruebe tu solicitud.",Xv="Chat",Yv="Contactos",Zv="Cerrar sesión",eb="Citar",tb="Ver",nb="Retirar",ab="Traducir",ob="Contraer",ib="Mensajes",rb="Estudiar",sb="Descubrir",lb="Perfil",cb="desarrollo",ub="Volver",db="Grupos",hb="Añadir",fb="Error",pb="Crear",mb="Actualizar",gb="ParrotMate",yb="Copiar",vb="Masculino",bb="Femenino",Pb="Palabra",wb="Iniciar sesión",Cb="y",Ab="Idioma",Sb="Omitir",Tb="Continuar",kb="Sí",$b="No",Rb="Edad",xb="Mujer",Eb="Hombre",Mb="Finalizar",Lb="Confirmar",Nb="Género",Fb="Formación",Ib="Ocupación",Ub="Afición",Ob={seconds:Iv,"Send Code":"Enviar código","Add Profile":"Añadir perfil",Practitioner:Uv,"I want to practice languages and chat with others":"Quiero practicar idiomas y conversar con otras personas",Mate:Ov,"I can guide language learning and provide companionship":"Puedo guiar el aprendizaje de idiomas y ofrecer compañía","Unknown error":"Error desconocido",English:Dv,Chinese:Bv,Spanish:Vv,Korean:Gv,French:jv,Japanese:zv,German:_v,Arabic:Hv,Translation:Qv,Interpretation:Kv,"Key Vocabulary & Terms":"Vocabulario y términos clave",Grammar:Jv,DM_ACL_REJECT:Wv,GROUP_ACL_REJECT:qv,"Tree Hole":"Rincón confidencial",Chat:Xv,Contacts:Yv,"Remove Contact":"Eliminar contacto","Exit Group":"Salir del grupo","Chat Settings":"Ajustes del chat","Awaiting friend confirmation":"Esperando confirmación de amistad","Revision failed":"Revisión fallida","Please use English":"Por favor, usa inglés","Speech recognition failed. Please try again.":"El reconocimiento de voz falló. Inténtalo de nuevo.","analyzing...":"Analizando...","Loading profiles...":"Cargando perfiles...","Add Friend":"Añadir amigo","Create Group":"Crear grupo",Logout:Zv,"Copied username to clipboard":"Nombre de usuario copiado al portapapeles","Switch Identity":"Cambiar identidad",Function:"Función",Quote:eb,"Instructions(Optional)":"Instrucciones (opcional)","joined the room":"se unió a la sala","left the room":"salió de la sala",View:tb,Recall:nb,"Hide Translation":"Ocultar traducción",Translate:ab,Collapse:ob,"Before you accept, she won’t know you've seen any messages.":"Antes de que aceptes, ella no sabrá que has visto ningún mensaje.","Allow {{name}} to send you messages and share your name and profile picture?":"¿Permitir que {{name}} te envíe mensajes y vea tu nombre y foto de perfil?",Message:ib,Study:rb,Discover:sb,Me:lb,"coming soon":"Próximamente","This feature is under":"Esta función está en",development:cb,Back:ub,"Search contacts or groups":"Buscar contactos o grupos",Groups:db,"No Results":"No hay resultados","Say Hi":"Di hola",Add:hb,"Find Friend":"Buscar amigo","Input Username":"Introduce el nombre de usuario","my account: ":"mi cuenta: ","Already Applied":"Solicitud ya enviada","User is blocked":"Usuario bloqueado",Failed:fb,"Please select at least one member":"Por favor, selecciona al menos un miembro","Group created":"Grupo creado","Group Name":"Nombre del grupo","Group Name is required":"El nombre del grupo es obligatorio","Loading...":"Cargando...",Create:pb,"Group updated":"Grupo actualizado","Update Group":"Actualizar grupo",Update:mb,"No Chats":"No hay chats",ParrotMate:gb,"Speak Different":"Habla distinto","Not logged in":"No has iniciado sesión","User Name":"Nombre de usuario",copy:yb,"Network is slow, enable offline mode?":"La conexión es lenta, ¿activar el modo sin conexión?","Enable offline mode":"Activar el modo sin conexión","PChip Reader":"PChip Reader",male:vb,female:bb,"popular neutral":"Popular (neutro)","Offline mode":"Modo sin conexión","Change nickname":"Cambiar apodo","UI Language":"Idioma de la interfaz",Word:Pb,Date:"Fecha","My bookshelf":"Mi estantería","Title too short":"Título demasiado corto","Modification successful":"Modificación realizada con éxito","No books in your shelf yet":"Aún no hay libros en tu estantería","Tap the search icon above to browse books and add them to your shelf!":"Pulsa el icono de búsqueda de arriba para explorar libros y añadirlos a tu estantería.","Read with experts to help you understand,":"Lee junto a expertos que te ayuden a comprender,","Comprehensive training in English listening and reading.":"Entrenamiento integral en comprensión auditiva y lectora en inglés.","Hi, {{nickName}}! Welcome!":"¡Hola, {{nickName}}! ¡Bienvenido!","Browse library":"Explorar la biblioteca","Add your own TXT/PDF":"Añade tus propios archivos TXT/PDF","Already have an account?":"¿Ya tienes una cuenta?","Click here to login":"Haz clic aquí para iniciar sesión","We detected this is your first time using PChip Reader. Add some books!":"Hemos detectado que es la primera vez que usas PChip Reader. ¡Añade algunos libros!","Upload Book":"Subir libro","Click here to upload local EPUB/MOBI/PDF/TXT":"Haz clic aquí para subir archivos locales EPUB/MOBI/PDF/TXT","Only EPUB/MOBI/PDF/TXT is supported":"Solo se admiten EPUB, MOBI, PDF y TXT","Upload successful":"Subida realizada con éxito","Book upload failed":"Error al subir el libro","We only store your files locally!":"¡Solo almacenamos tus archivos localmente!","New words":"Nuevas palabras","Total reading":"Lectura total","Today's reading":"Lectura de hoy","Please choose an image file":"Por favor, selecciona un archivo de imagen","Image sent":"Imagen enviada","Failed to upload image":"No se pudo subir la imagen","analyzing grammar structure":"analizando la estructura gramatical","understanding pronunciation":"analizando la pronunciación","optimizing and restructuring":"optimizando y reestructurando","My QR Code":"Mi código QR","Let friends scan to fill your username automatically":"Permite que tus amigos escaneen para rellenar tu nombre de usuario automáticamente","Unable to load image":"No se puede cargar la imagen","Loading image...":"Cargando imagen...","Shared image":"Imagen compartida","QR scanning is unavailable in this environment":"El escaneo de códigos QR no está disponible en este entorno","Camera access is not supported on this device":"El acceso a la cámara no es compatible con este dispositivo","Unable to access the camera":"No se puede acceder a la cámara","No QR code found in the selected image":"No se encontró ningún código QR en la imagen seleccionada","Unable to read QR code from the selected image":"No se pudo leer el código QR de la imagen seleccionada","Username captured from QR code":"Nombre de usuario obtenido del código QR","Initializing camera...":"Iniciando la cámara...","Scan QR Code":"Escanear código QR","Align the QR code within the frame to capture a username automatically.":"Alinea el código QR dentro del marco para capturar el nombre de usuario automáticamente.","Login Success":"Sesión iniciada","please enter your phone number":"por favor, introduce tu número de teléfono","Please enter your phone number":"Por favor, introduce tu número de teléfono",Login:wb,"Terms&Conditions":"Términos y condiciones",and:Cb,"Privacy Policy":"Política de privacidad","Unregistered phone numbers will automatically create an account":"Los números de teléfono no registrados crearán automáticamente una cuenta","Please enter the verification code":"Por favor, introduce el código de verificación","Send verification code":"Enviar código de verificación","Please enter the correct phone number":"Por favor, introduce un número de teléfono válido","Verification code sent":"Código de verificación enviado",Language:Ab,Skip:Sb,Continue:Tb,"Are you 18 or older?":"¿Tienes 18 años o más?",Yes:kb,No:$b,"Please select language what you want to learn":"Por favor, selecciona el idioma que quieres aprender","Please enter your age":"Por favor, indica tu edad",Age:Rb,"Please select your gender":"Selecciona tu género",Female:xb,Male:Eb,"Your {{langShort}} name":"Tu nombre en {{langShort}}","Create your own name or choose from the recommendations":"Crea tu propio nombre o elige una de las recomendaciones","Enter your nickname here...":"Introduce tu apodo aquí...","Learning Language":"Idioma que aprendes",Finish:Mb,"Nickname is required":"El apodo es obligatorio","Nickname must be at least 3 characters":"El apodo debe tener al menos 3 caracteres",Confirm:Lb,"Account Phone":"Teléfono de la cuenta",Gender:Nb,Education:Fb,Job:Ib,Hobby:Ub,"Select your role":"Selecciona tu rol","Please choose your identity":"Por favor, selecciona tu identidad","Profile Step: Nickname":"Apodo","Profile Step: Learning Language":"Idioma que aprendes","Profile Step: Mother Tongue":"Lengua materna","By signing up, you agree with ":"Al registrarte, aceptas "},Db="sekuntia",Bb="Ohjaaja",Vb="Kielikumppani",Gb="Englanti",jb="Kiina",zb="Espanja",_b="Korea",Hb="Ranska",Qb="Japani",Kb="Saksa",Jb="Arabia",Wb="Käännös",qb="Tulkinta",Xb="Kielioppi",Yb="Sinun täytyy odottaa toisen vastausta, jotta voit jatkaa yksityisviestikeskustelua.",Zb="Et ole vielä tässä ryhmässä. Odota, että ryhmän omistaja hyväksyy liittymispyyntösi.",e1="Keskustelu",t1="Yhteystiedot",n1="Kirjaudu ulos",a1="Lainaa",o1="Näytä",i1="Peruuta lähetys",r1="Käännä",s1="Sulje",l1="Viestit",c1="Opiskelu",u1="Tutustu",d1="Profiili",h1="kehitteillä",f1="Takaisin",p1="Ryhmät",m1="Lisää",g1="Epäonnistui",y1="Luo",v1="Päivitä",b1="ParrotMate",P1="kopioi",w1="mies",C1="nainen",A1="Sana",S1="Kirjaudu sisään",T1="ja",k1="Kieli",$1="Ohita",R1="Jatka",x1="Kyllä",E1="Ei",M1="Ikä",L1="Nainen",N1="Mies",F1="Valmis",I1="Vahvista",U1="Sukupuoli",O1="Koulutus",D1="Ammatti",B1="Harrastus",V1={seconds:Db,"Send Code":"Lähetä koodi","Add Profile":"Lisää profiili",Practitioner:Bb,"I want to practice languages and chat with others":"Haluan harjoitella kieliä ja keskustella muiden kanssa",Mate:Vb,"I can guide language learning and provide companionship":"Voin opastaa kielten oppimisessa ja tarjota seuraa","Unknown error":"Tuntematon virhe",English:Gb,Chinese:jb,Spanish:zb,Korean:_b,French:Hb,Japanese:Qb,German:Kb,Arabic:Jb,Translation:Wb,Interpretation:qb,"Key Vocabulary & Terms":"Keskeiset sanat ja termit",Grammar:Xb,DM_ACL_REJECT:Yb,GROUP_ACL_REJECT:Zb,"Tree Hole":"Puun kolo",Chat:e1,Contacts:t1,"Remove Contact":"Poista yhteystieto","Exit Group":"Poistu ryhmästä","Chat Settings":"Keskustelun asetukset","Awaiting friend confirmation":"Odotetaan ystävän vahvistusta","Revision failed":"Tarkistus epäonnistui","Please use English":"Käytäthän englantia","Speech recognition failed. Please try again.":"Puheentunnistus epäonnistui. Yritä uudelleen.","analyzing...":"analysoidaan...","Loading profiles...":"Ladataan profiileja...","Add Friend":"Lisää ystäväksi","Create Group":"Luo ryhmä",Logout:n1,"Copied username to clipboard":"Käyttäjänimi kopioitu leikepöydälle","Switch Identity":"Vaihda profiilia",Function:"Toiminto",Quote:a1,"Instructions(Optional)":"Ohjeet (valinnainen)","joined the room":"liittyi huoneeseen","left the room":"lähti huoneesta",View:o1,Recall:i1,"Hide Translation":"Piilota käännös",Translate:r1,Collapse:s1,"Before you accept, she won’t know you've seen any messages.":"Ennen kuin hyväksyt, hän ei tiedä, että olet nähnyt viestejä.","Allow {{name}} to send you messages and share your name and profile picture?":"Sallitaanko, että {{name}} lähettää sinulle viestejä ja näkee nimesi ja profiilikuvasi?",Message:l1,Study:c1,Discover:u1,Me:d1,"coming soon":"tulossa pian","This feature is under":"Tämä ominaisuus on",development:h1,Back:f1,"Search contacts or groups":"Etsi yhteystietoja tai ryhmiä",Groups:p1,"No Results":"Ei tuloksia","Say Hi":"Sano hei",Add:m1,"Find Friend":"Etsi ystävä","Input Username":"Kirjoita käyttäjänimi","my account: ":"Tilini: ","Already Applied":"Hakemus lähetetty","User is blocked":"Käyttäjä on estetty",Failed:g1,"Please select at least one member":"Valitse vähintään yksi jäsen","Group created":"Ryhmä luotu","Group Name":"Ryhmän nimi","Group Name is required":"Anna ryhmän nimi","Loading...":"Ladataan...",Create:y1,"Group updated":"Ryhmä päivitetty","Update Group":"Päivitä ryhmä",Update:v1,"No Chats":"Ei keskusteluja",ParrotMate:b1,"Speak Different":"Puhu eri tavalla","Not logged in":"Et ole kirjautunut sisään","User Name":"Käyttäjänimi",copy:P1,"Network is slow, enable offline mode?":"Verkkoyhteys on hidas. Ota offline-tila käyttöön?","Enable offline mode":"Ota offline-tila käyttöön","PChip Reader":"PChip Reader",male:w1,female:C1,"popular neutral":"Suosittu (neutraali)","Offline mode":"Offline-tila","Change nickname":"Vaihda nimimerkkiä","UI Language":"Käyttöliittymän kieli",Word:A1,Date:"Päivämäärä","My bookshelf":"Kirjahyllyni","Title too short":"Otsikko on liian lyhyt","Modification successful":"Muokkaus onnistui","No books in your shelf yet":"Hyllyssäsi ei ole vielä kirjoja","Tap the search icon above to browse books and add them to your shelf!":"Napauta yläreunan hakukuvaketta, niin voit selata kirjoja ja lisätä niitä hyllyysi!","Read with experts to help you understand,":"Lue asiantuntijoiden kanssa, jotka auttavat sinua ymmärtämään,","Comprehensive training in English listening and reading.":"Kattava englannin kuuntelu- ja lukuharjoittelu.","Hi, {{nickName}}! Welcome!":"Hei, {{nickName}}! Tervetuloa!","Browse library":"Selaa kirjastoa","Add your own TXT/PDF":"Lisää omat TXT-/PDF-tiedostot","Already have an account?":"Onko sinulla jo tili?","Click here to login":"Kirjaudu sisään tästä","We detected this is your first time using PChip Reader. Add some books!":"Huomasimme, että käytät PChip Readeriä ensimmäistä kertaa. Lisää muutama kirja!","Upload Book":"Lataa kirja","Click here to upload local EPUB/MOBI/PDF/TXT":"Klikkaa tästä ladataksesi paikallisen EPUB/MOBI/PDF/TXT-tiedoston","Only EPUB/MOBI/PDF/TXT is supported":"Tuetut tiedostomuodot: EPUB, MOBI, PDF, TXT","Upload successful":"Lataus onnistui","Book upload failed":"Kirjan lataus epäonnistui","We only store your files locally!":"Tallennamme tiedostosi vain paikallisesti!","New words":"Uudet sanat","Total reading":"Yhteensä luettu","Today's reading":"Tänään luettu","Please choose an image file":"Valitse kuvatiedosto","Image sent":"Kuva lähetetty","Failed to upload image":"Kuvan lähettäminen epäonnistui","analyzing grammar structure":"Kieliopin rakenteen analysointi","understanding pronunciation":"Ääntämisen ymmärtäminen","optimizing and restructuring":"Sisällön optimointi ja uudelleenjärjestely","My QR Code":"Oma QR-koodini","Let friends scan to fill your username automatically":"Anna ystävien skannata, niin käyttäjänimesi täytetään automaattisesti","Unable to load image":"Kuvaa ei voi ladata","Loading image...":"Ladataan kuvaa...","Shared image":"Jaettu kuva","QR scanning is unavailable in this environment":"QR-koodin skannaus ei ole käytettävissä tässä ympäristössä","Camera access is not supported on this device":"Kameran käyttö ei ole tuettu tässä laitteessa","Unable to access the camera":"Kameraan ei saada yhteyttä","No QR code found in the selected image":"Valitusta kuvasta ei löytynyt QR-koodia","Unable to read QR code from the selected image":"QR-koodia ei voitu lukea valitusta kuvasta","Username captured from QR code":"Käyttäjänimi luettu QR-koodista","Initializing camera...":"Alustetaan kameraa...","Scan QR Code":"Skannaa QR-koodi","Align the QR code within the frame to capture a username automatically.":"Kohdista QR-koodi kehyksen sisälle, niin käyttäjänimi luetaan automaattisesti.","Login Success":"Kirjautuminen onnistui","please enter your phone number":"anna puhelinnumerosi","Please enter your phone number":"Anna puhelinnumerosi",Login:S1,"Terms&Conditions":"Käyttöehdot",and:T1,"Privacy Policy":"Tietosuojakäytäntö","Unregistered phone numbers will automatically create an account":"Jos puhelinnumeroa ei ole rekisteröity, tilille luodaan automaattisesti.","Please enter the verification code":"Syötä vahvistuskoodi","Send verification code":"Lähetä vahvistuskoodi","Please enter the correct phone number":"Syötä oikea puhelinnumero","Verification code sent":"Vahvistuskoodi lähetetty",Language:k1,Skip:$1,Continue:R1,"Are you 18 or older?":"Oletko vähintään 18-vuotias?",Yes:x1,No:E1,"Please select language what you want to learn":"Valitse kieli, jota haluat oppia","Please enter your age":"Anna ikäsi",Age:M1,"Please select your gender":"Valitse sukupuolesi",Female:L1,Male:N1,"Your {{langShort}} name":"Nimesi {{langShort}}-kielellä","Create your own name or choose from the recommendations":"Luo oma nimesi tai valitse suosituksista","Enter your nickname here...":"Syötä nimimerkkisi tähän...","Learning Language":"Opiskeltava kieli",Finish:F1,"Nickname is required":"Nimimerkki on pakollinen","Nickname must be at least 3 characters":"Nimimerkin tulee olla vähintään 3 merkkiä",Confirm:I1,"Account Phone":"Tilin puhelinnumero",Gender:U1,Education:O1,Job:D1,Hobby:B1,"Select your role":"Valitse roolisi","Please choose your identity":"Valitse identiteettisi","Profile Step: Nickname":"Lempinimi","Profile Step: Learning Language":"Oppimiskieli","Profile Step: Mother Tongue":"Äidinkieli","By signing up, you agree with ":"Rekisteröitymällä hyväksyt "},G1="segundo",j1="Tutor",z1="Kaibigan",_1="Ingles",H1="Tsino",Q1="Espanyol",K1="Koreano",J1="Pranses",W1="Hapon",q1="Aleman",X1="Arabe",Y1="Pagsasalin",Z1="Paliwanag",eP="Balarila",tP="Kailangan mong maghintay ng sagot mula sa iba bago magpatuloy sa direktang mensahe.",nP="Hindi ka pa miyembro ng grupong ito. Maghintay muna hanggang aprubahan ng may-ari ang iyong kahilingan.",aP="Usapan",oP="Mga Kontak",iP="Lumabas",rP="Sipi",sP="Tingnan",lP="Bawiin",cP="Isalin",uP="Isara",dP="Mensahe",hP="Pag-aaral",fP="Tuklasin",pP="Ako",mP="pagpapaunlad",gP="Bumalik",yP="Mga grupo",vP="Idagdag",bP="Nabigo",PP="Lumikha",wP="I-update",CP="ParrotMate",AP="Kopyahin",SP="Lalaki",TP="Babae",kP="Salita",$P="Mag-login",RP="at",xP="Wika",EP="Laktawan",MP="Magpatuloy",LP="Oo",NP="Hindi",FP="Edad",IP="Babae",UP="Lalaki",OP="Tapusin",DP="Kumpirmahin",BP="Kasarian",VP="Edukasyon",GP="Trabaho",jP="Libangan",zP={seconds:G1,"Send Code":"Ipadala ang code","Add Profile":"Magdagdag ng Profile",Practitioner:j1,"I want to practice languages and chat with others":"Gusto kong magsanay ng mga wika at makipag-chat sa iba",Mate:z1,"I can guide language learning and provide companionship":"Maaari akong gumabay sa pag-aaral ng wika at maging kaagapay","Unknown error":"Hindi kilalang pagkakamali",English:_1,Chinese:H1,Spanish:Q1,Korean:K1,French:J1,Japanese:W1,German:q1,Arabic:X1,Translation:Y1,Interpretation:Z1,"Key Vocabulary & Terms":"Mga Pangunahing Bokabularyo at Termino",Grammar:eP,DM_ACL_REJECT:tP,GROUP_ACL_REJECT:nP,"Tree Hole":"Lungga ng Puno",Chat:aP,Contacts:oP,"Remove Contact":"Tanggalin ang kontak","Exit Group":"Iwanan ang grupo","Chat Settings":"Mga Setting ng Chat","Awaiting friend confirmation":"Naghihintay ng kumpirmasyon mula sa kaibigan","Revision failed":"Nabigong rebisyon","Please use English":"Mangyaring gumamit ng Ingles","Speech recognition failed. Please try again.":"Nabigo ang pagkilala sa pagsasalita. Pakisubukang muli.","analyzing...":"sinusuri...","Loading profiles...":"Naglo-load ng mga profile...","Add Friend":"Magdagdag ng kaibigan","Create Group":"Lumikha ng grupo",Logout:iP,"Copied username to clipboard":"Nakopya ang username sa clipboard","Switch Identity":"Palitan ang pagkakakilanlan",Function:"Pag-andar",Quote:rP,"Instructions(Optional)":"Mga Tagubilin (Opsyonal)","joined the room":"Sumali sa chat","left the room":"Umalis sa chat",View:sP,Recall:lP,"Hide Translation":"Itago ang pagsasalin",Translate:cP,Collapse:uP,"Before you accept, she won’t know you've seen any messages.":"Bago mo tanggapin, hindi niya malalaman na nakita mo ang mga mensahe.","Allow {{name}} to send you messages and share your name and profile picture?":"Payagan mo ba si {{name}} na magpadala sa iyo ng mga mensahe at makita ang iyong pangalan at larawan sa profile?",Message:dP,Study:hP,Discover:fP,Me:pP,"coming soon":"Malapit na","This feature is under":"Ang tampok na ito ay nasa ilalim ng",development:mP,Back:gP,"Search contacts or groups":"Maghanap ng mga contact o grupo",Groups:yP,"No Results":"Walang resulta","Say Hi":"Magkumusta",Add:vP,"Find Friend":"Maghanap ng kaibigan","Input Username":"Ilagay ang username","my account: ":"aking account: ","Already Applied":"Nakapag-apply na","User is blocked":"Na-block ang gumagamit",Failed:bP,"Please select at least one member":"Piliin ang hindi bababa sa isang miyembro","Group created":"Nalikha ang grupo","Group Name":"Pangalan ng grupo","Group Name is required":"Kinakailangan ang pangalan ng grupo","Loading...":"Naglo-load...",Create:PP,"Group updated":"Na-update ang grupo","Update Group":"I-update ang grupo",Update:wP,"No Chats":"Walang mga chat",ParrotMate:CP,"Speak Different":"Magsalita nang iba","Not logged in":"Hindi naka-log in","User Name":"Pangalan ng Gumagamit",copy:AP,"Network is slow, enable offline mode?":"Mabagal ang koneksyon. Gusto mo bang paganahin ang mode na offline?","Enable offline mode":"Paganahin ang mode na offline","PChip Reader":"PChip Reader",male:SP,female:TP,"popular neutral":"Sikat (neutral)","Offline mode":"Mode na offline","Change nickname":"Palitan ang palayaw","UI Language":"Wika ng interface",Word:kP,Date:"Petsa","My bookshelf":"Aking estante ng mga libro","Title too short":"Masyadong maikli ang pamagat","Modification successful":"Matagumpay ang pagbabago","No books in your shelf yet":"Wala pang libro sa iyong estante","Tap the search icon above to browse books and add them to your shelf!":"Pindutin ang icon ng paghahanap sa itaas para mag-browse ng mga libro at idagdag ang mga ito sa iyong estante!","Read with experts to help you understand,":"Magbasa kasama ang mga eksperto para mas maunawaan mo,","Comprehensive training in English listening and reading.":"Komprehensibong pagsasanay sa pakikinig at pagbasa ng Ingles.","Hi, {{nickName}}! Welcome!":"Kumusta, {{nickName}}! Maligayang pagdating!","Browse library":"Mag-browse ng librarya","Add your own TXT/PDF":"Magdagdag ng sarili mong TXT/PDF","Already have an account?":"May account ka na ba?","Click here to login":"Pindutin dito para mag-login","We detected this is your first time using PChip Reader. Add some books!":"Napansin namin na ito ang unang beses mong gamitin ang PChip Reader. Magdagdag ng ilang aklat!","Upload Book":"Mag-upload ng aklat","Click here to upload local EPUB/MOBI/PDF/TXT":"Pindutin dito para mag-upload ng lokal na EPUB/MOBI/PDF/TXT","Only EPUB/MOBI/PDF/TXT is supported":"Sinusuportahan lamang ang EPUB/MOBI/PDF/TXT","Upload successful":"Matagumpay na na-upload","Book upload failed":"Nabigo ang pag-upload ng aklat","We only store your files locally!":"Iniimbak lamang namin ang iyong mga file nang lokal!","New words":"Mga bagong salita","Total reading":"Kabuuang oras ng pagbabasa","Today's reading":"Pagbabasa ngayong araw","Please choose an image file":"Piliin ang file ng larawan","Image sent":"Naipadala ang larawan","Failed to upload image":"Nabigong i-upload ang larawan","analyzing grammar structure":"Sinusuri ang istruktura ng gramatika","understanding pronunciation":"Pinag-aaralan ang pagbigkas","optimizing and restructuring":"Pinapahusay at muling inaayos","My QR Code":"Aking QR Code","Let friends scan to fill your username automatically":"Hayaan ang mga kaibigan na i-scan para awtomatikong mapunan ang iyong username","Unable to load image":"Hindi mai-load ang larawan","Loading image...":"Ini-load ang larawan...","Shared image":"Naibahaging larawan","QR scanning is unavailable in this environment":"Hindi magagamit ang pag-scan ng QR sa kapaligirang ito","Camera access is not supported on this device":"Hindi sinusuportahan ng aparatong ito ang pag-access sa camera","Unable to access the camera":"Hindi ma-access ang camera","No QR code found in the selected image":"Walang QR code na nakita sa napiling larawan","Unable to read QR code from the selected image":"Hindi mabasa ang QR code mula sa napiling larawan","Username captured from QR code":"Nakuha ang username mula sa QR code","Initializing camera...":"Pinapagana ang camera...","Scan QR Code":"I-scan ang QR Code","Align the QR code within the frame to capture a username automatically.":"Itapat ang QR code sa loob ng frame para awtomatikong makuha ang username","Login Success":"Matagumpay na pag-login","please enter your phone number":"pakilagay ang iyong numero ng telepono","Please enter your phone number":"Ilagay ang iyong numero ng telepono",Login:$P,"Terms&Conditions":"Mga Tuntunin at Kundisyon",and:RP,"Privacy Policy":"Patakaran sa Pagkapribado","Unregistered phone numbers will automatically create an account":"Ang mga hindi nakarehistrong numero ng telepono ay awtomatikong lilikha ng account","Please enter the verification code":"Ilagay ang verification code","Send verification code":"Ipadala ang verification code","Please enter the correct phone number":"Pakilagay ang tamang numero ng telepono","Verification code sent":"Naipadala na ang verification code",Language:xP,Skip:EP,Continue:MP,"Are you 18 or older?":"Ikaw ba ay 18 taong gulang o mas matanda?",Yes:LP,No:NP,"Please select language what you want to learn":"Piliin ang wikang nais mong pag-aralan","Please enter your age":"Ilagay ang iyong edad",Age:FP,"Please select your gender":"Pumili ng iyong kasarian",Female:IP,Male:UP,"Your {{langShort}} name":"Ang iyong pangalan sa {{langShort}}","Create your own name or choose from the recommendations":"Gumawa ng sarili mong pangalan o pumili mula sa mga rekomendasyon","Enter your nickname here...":"Ilagay ang iyong palayaw dito...","Learning Language":"Wikang pinag-aaralan",Finish:OP,"Nickname is required":"Kailangan ang palayaw","Nickname must be at least 3 characters":"Dapat ang palayaw ay hindi bababa sa 3 na karakter",Confirm:DP,"Account Phone":"Telepono ng account",Gender:BP,Education:VP,Job:GP,Hobby:jP,"Select your role":"Pumili ng iyong papel","Please choose your identity":"Piliin ang iyong pagkakakilanlan","Profile Step: Nickname":"Palayaw","Profile Step: Learning Language":"Wikang Inaaral","Profile Step: Mother Tongue":"Unang Wika","By signing up, you agree with ":"Sa pag-sign up, sumasang-ayon ka sa "},_P="secondes",HP="Tuteur",QP="Partenaire",KP="Anglais",JP="Chinois",WP="Espagnol",qP="Coréen",XP="Français",YP="Japonais",ZP="Allemand",ew="Arabe",tw="Traduction",nw="Interprétation",aw="Grammaire",ow="Veuillez attendre la réponse des autres pour continuer le message privé.",iw="Vous ne faites pas encore partie de ce groupe. Veuillez attendre que le propriétaire du groupe approuve votre demande.",rw="Discussion",sw="Contacts",lw="Se déconnecter",cw="Citation",uw="Afficher",dw="Annuler l'envoi",hw="Traduire",fw="Réduire",pw="Messages",mw="Étudier",gw="Découvrir",yw="Profil",vw="développement",bw="Retour",Pw="Groupes",ww="Ajouter",Cw="Échec",Aw="Créer",Sw="Mettre à jour",Tw="ParrotMate",kw="Copier",$w="Homme",Rw="Femme",xw="Mot",Ew="Se connecter",Mw="et",Lw="Langue",Nw="Passer",Fw="Continuer",Iw="Oui",Uw="Non",Ow="Âge",Dw="Femme",Bw="Homme",Vw="Terminer",Gw="Confirmer",jw="Genre",zw="Niveau d'études",_w="Profession",Hw="Loisir",Qw={seconds:_P,"Send Code":"Envoyer le code","Add Profile":"Ajouter un profil",Practitioner:HP,"I want to practice languages and chat with others":"Je veux pratiquer des langues et discuter avec d'autres.",Mate:QP,"I can guide language learning and provide companionship":"Je peux accompagner votre apprentissage des langues et vous tenir compagnie.","Unknown error":"Erreur inconnue. Veuillez réessayer.",English:KP,Chinese:JP,Spanish:WP,Korean:qP,French:XP,Japanese:YP,German:ZP,Arabic:ew,Translation:tw,Interpretation:nw,"Key Vocabulary & Terms":"Vocabulaire et termes clés",Grammar:aw,DM_ACL_REJECT:ow,GROUP_ACL_REJECT:iw,"Tree Hole":"Arbre à secrets",Chat:rw,Contacts:sw,"Remove Contact":"Supprimer le contact","Exit Group":"Quitter le groupe","Chat Settings":"Paramètres de discussion","Awaiting friend confirmation":"En attente de confirmation de l'ami","Revision failed":"Échec de la révision","Please use English":"Veuillez utiliser l'anglais","Speech recognition failed. Please try again.":"La reconnaissance vocale a échoué. Veuillez réessayer.","analyzing...":"Analyse en cours...","Loading profiles...":"Chargement des profils...","Add Friend":"Ajouter un ami","Create Group":"Créer un groupe",Logout:lw,"Copied username to clipboard":"Nom d'utilisateur copié dans le presse-papiers","Switch Identity":"Changer d'identité",Function:"Fonction",Quote:cw,"Instructions(Optional)":"Instructions (facultatif)","joined the room":"a rejoint la salle","left the room":"a quitté la salle",View:uw,Recall:dw,"Hide Translation":"Masquer la traduction",Translate:hw,Collapse:fw,"Before you accept, she won’t know you've seen any messages.":"Avant d'accepter, elle ne saura pas que vous avez vu les messages.","Allow {{name}} to send you messages and share your name and profile picture?":"Autoriser {{name}} à vous envoyer des messages et à voir votre nom et votre photo de profil ?",Message:pw,Study:mw,Discover:gw,Me:yw,"coming soon":"Bientôt disponible","This feature is under":"Cette fonctionnalité est en ",development:vw,Back:bw,"Search contacts or groups":"Rechercher des contacts ou des groupes",Groups:Pw,"No Results":"Aucun résultat","Say Hi":"Dites bonjour",Add:ww,"Find Friend":"Rechercher un ami","Input Username":"Entrez le nom d'utilisateur","my account: ":"mon compte : ","Already Applied":"Demande déjà envoyée","User is blocked":"Utilisateur bloqué",Failed:Cw,"Please select at least one member":"Veuillez sélectionner au moins un membre","Group created":"Groupe créé","Group Name":"Nom du groupe","Group Name is required":"Le nom du groupe est requis","Loading...":"Chargement...",Create:Aw,"Group updated":"Groupe mis à jour","Update Group":"Mettre à jour le groupe",Update:Sw,"No Chats":"Aucune conversation",ParrotMate:Tw,"Speak Different":"Parlez autrement","Not logged in":"Vous n'êtes pas connecté","User Name":"Nom d'utilisateur",copy:kw,"Network is slow, enable offline mode?":"La connexion est lente. Activer le mode hors ligne ?","Enable offline mode":"Activer le mode hors ligne","PChip Reader":"PChip Reader",male:$w,female:Rw,"popular neutral":"Neutre (populaire)","Offline mode":"Mode hors ligne","Change nickname":"Modifier le pseudo","UI Language":"Langue de l'interface",Word:xw,Date:"Date","My bookshelf":"Ma bibliothèque","Title too short":"Titre trop court","Modification successful":"Modification réussie","No books in your shelf yet":"Il n'y a encore aucun livre dans votre bibliothèque.","Tap the search icon above to browse books and add them to your shelf!":"Appuyez sur l'icône de recherche ci-dessus pour parcourir les livres et les ajouter à votre bibliothèque !","Read with experts to help you understand,":"Lisez avec des experts pour mieux comprendre,","Comprehensive training in English listening and reading.":"Entraînement complet à l'écoute et à la lecture en anglais.","Hi, {{nickName}}! Welcome!":"Bonjour, {{nickName}} ! Bienvenue !","Browse library":"Explorer la bibliothèque","Add your own TXT/PDF":"Ajouter vos propres fichiers TXT/PDF","Already have an account?":"Vous avez déjà un compte ?","Click here to login":"Cliquez ici pour vous connecter","We detected this is your first time using PChip Reader. Add some books!":"Nous avons détecté que c'est la première fois que vous utilisez PChip Reader. Ajoutez quelques livres !","Upload Book":"Importer un livre","Click here to upload local EPUB/MOBI/PDF/TXT":"Cliquez ici pour importer un fichier EPUB/MOBI/PDF/TXT depuis votre appareil","Only EPUB/MOBI/PDF/TXT is supported":"Seuls les formats EPUB/MOBI/PDF/TXT sont pris en charge","Upload successful":"Importation réussie","Book upload failed":"Échec de l'importation du livre","We only store your files locally!":"Nous stockons vos fichiers uniquement sur votre appareil !","New words":"Nouveaux mots","Total reading":"Temps de lecture total","Today's reading":"Temps de lecture aujourd'hui","Please choose an image file":"Veuillez sélectionner un fichier image","Image sent":"Image envoyée","Failed to upload image":"Échec du téléversement de l'image","analyzing grammar structure":"Analyse de la structure grammaticale","understanding pronunciation":"Analyse de la prononciation","optimizing and restructuring":"Optimisation et restructuration","My QR Code":"Mon code QR","Let friends scan to fill your username automatically":"Permettez à vos amis de scanner ce code pour remplir automatiquement votre nom d'utilisateur","Unable to load image":"Impossible de charger l'image","Loading image...":"Chargement de l'image...","Shared image":"Image partagée","QR scanning is unavailable in this environment":"La lecture des codes QR n'est pas disponible dans cet environnement","Camera access is not supported on this device":"L'accès à la caméra n'est pas pris en charge sur cet appareil","Unable to access the camera":"Impossible d'accéder à la caméra","No QR code found in the selected image":"Aucun code QR trouvé dans l'image sélectionnée","Unable to read QR code from the selected image":"Impossible de lire le code QR dans l'image sélectionnée","Username captured from QR code":"Nom d'utilisateur récupéré depuis le code QR","Initializing camera...":"Initialisation de la caméra...","Scan QR Code":"Scanner le code QR","Align the QR code within the frame to capture a username automatically.":"Alignez le code QR dans le cadre pour remplir automatiquement le nom d'utilisateur.","Login Success":"Connexion réussie","please enter your phone number":"veuillez saisir votre numéro de téléphone","Please enter your phone number":"Veuillez saisir votre numéro de téléphone",Login:Ew,"Terms&Conditions":"Conditions d'utilisation",and:Mw,"Privacy Policy":"Politique de confidentialité","Unregistered phone numbers will automatically create an account":"Tout numéro de téléphone non enregistré entraînera la création automatique d'un compte.","Please enter the verification code":"Veuillez saisir le code de vérification","Send verification code":"Envoyer le code de vérification","Please enter the correct phone number":"Veuillez saisir un numéro de téléphone valide","Verification code sent":"Code de vérification envoyé",Language:Lw,Skip:Nw,Continue:Fw,"Are you 18 or older?":"Avez-vous 18 ans ou plus ?",Yes:Iw,No:Uw,"Please select language what you want to learn":"Veuillez sélectionner la langue que vous souhaitez apprendre","Please enter your age":"Veuillez saisir votre âge",Age:Ow,"Please select your gender":"Veuillez sélectionner votre genre",Female:Dw,Male:Bw,"Your {{langShort}} name":"Votre nom en {{langShort}}","Create your own name or choose from the recommendations":"Créez votre propre nom ou choisissez parmi les suggestions","Enter your nickname here...":"Entrez votre pseudo ici...","Learning Language":"Langue étudiée",Finish:Vw,"Nickname is required":"Le pseudo est obligatoire","Nickname must be at least 3 characters":"Le pseudo doit contenir au moins 3 caractères",Confirm:Gw,"Account Phone":"Téléphone du compte",Gender:jw,Education:zw,Job:_w,Hobby:Hw,"Select your role":"Sélectionnez votre rôle","Please choose your identity":"Veuillez choisir votre identité","Profile Step: Nickname":"Votre pseudo","Profile Step: Learning Language":"Langue que vous apprenez","Profile Step: Mother Tongue":"Votre langue maternelle","By signing up, you agree with ":"En vous inscrivant, vous acceptez "},Kw="सेकंड",Jw="अभ्यासकर्ता",Ww="साथी",qw="अंग्रेज़ी",Xw="चीनी",Yw="स्पेनिश",Zw="कोरियाई",eC="फ्रेंच",tC="जापानी",nC="जर्मन",aC="अरबी",oC="अनुवाद",iC="व्याख्या",rC="व्याकरण",sC="डायरेक्ट मैसेज (DM) जारी रखने के लिए कृपया अन्य लोगों के उत्तर का इंतजार करें।",lC="आप अभी इस समूह का हिस्सा नहीं हैं। कृपया समूह के मालिक द्वारा आपके अनुरोध की स्वीकृति होने तक प्रतीक्षा करें।",cC="चैट",uC="संपर्क",dC="लॉग आउट",hC="उद्धरण",fC="देखें",pC="वापस लें",mC="अनुवाद करें",gC="समेटें",yC="संदेश",vC="पढ़ाई",bC="खोजें",PC="मैं",wC="विकास के अधीन है",CC="वापस",AC="समूह",SC="जोड़ें",TC="असफल",kC="बनाएं",$C="अपडेट करें",RC="ParrotMate",xC="कॉपी करें",EC="पुरुष",MC="महिला",LC="शब्द",NC="लॉग इन",FC="और",IC="भाषा",UC="छोड़ें",OC="जारी रखें",DC="हाँ",BC="नहीं",VC="उम्र",GC="महिला",jC="पुरुष",zC="समाप्त करें",_C="पुष्टि करें",HC="लिंग",QC="शिक्षा",KC="पेशा",JC="शौक",WC={seconds:Kw,"Send Code":"कोड भेजें","Add Profile":"प्रोफ़ाइल जोड़ें",Practitioner:Jw,"I want to practice languages and chat with others":"मैं भाषाओं का अभ्यास करना और दूसरों के साथ चैट करना चाहता/चाहती हूँ",Mate:Ww,"I can guide language learning and provide companionship":"मैं भाषा सीखने में मार्गदर्शन कर सकता/सकती हूँ और साथी बनकर साथ दे सकता/दे सकती हूँ","Unknown error":"अज्ञात त्रुटि",English:qw,Chinese:Xw,Spanish:Yw,Korean:Zw,French:eC,Japanese:tC,German:nC,Arabic:aC,Translation:oC,Interpretation:iC,"Key Vocabulary & Terms":"प्रमुख शब्दावली और महत्वपूर्ण शब्द",Grammar:rC,DM_ACL_REJECT:sC,GROUP_ACL_REJECT:lC,"Tree Hole":"ट्री होल",Chat:cC,Contacts:uC,"Remove Contact":"संपर्क हटाएं","Exit Group":"समूह छोड़ें","Chat Settings":"चैट सेटिंग्स","Awaiting friend confirmation":"मित्र की पुष्टि की प्रतीक्षा","Revision failed":"पुनरीक्षण विफल हुआ","Please use English":"कृपया अंग्रेज़ी का उपयोग करें","Speech recognition failed. Please try again.":"वॉइस पहचान विफल हुई। कृपया पुनः प्रयास करें।","analyzing...":"विश्लेषण कर रहा है...","Loading profiles...":"प्रोफ़ाइल लोड हो रहे हैं...","Add Friend":"मित्र जोड़ें","Create Group":"समूह बनाएं",Logout:dC,"Copied username to clipboard":"यूज़रनेम क्लिपबोर्ड में कॉपी कर दिया गया","Switch Identity":"पहचान बदलें",Function:"फ़ंक्शन",Quote:hC,"Instructions(Optional)":"निर्देश (वैकल्पिक)","joined the room":"कमरे में शामिल हो गए","left the room":"कमरा छोड़ गए",View:fC,Recall:pC,"Hide Translation":"अनुवाद छिपाएँ",Translate:mC,Collapse:gC,"Before you accept, she won’t know you've seen any messages.":"जब तक आप स्वीकार नहीं करते, वह यह नहीं जान पाएगी कि आपने कोई संदेश देखा है।","Allow {{name}} to send you messages and share your name and profile picture?":"क्या आप {{name}} को आपको संदेश भेजने और आपका नाम व प्रोफ़ाइल तस्वीर साझा करने की अनुमति देना चाहेंगे?",Message:yC,Study:vC,Discover:bC,Me:PC,"coming soon":"जल्द आ रहा है","This feature is under":"यह सुविधा",development:wC,Back:CC,"Search contacts or groups":"संपर्क या समूह खोजें",Groups:AC,"No Results":"कोई परिणाम नहीं मिला","Say Hi":"नमस्ते कहें",Add:SC,"Find Friend":"दोस्त खोजें","Input Username":"यूज़रनेम लिखें","my account: ":"मेरा खाता: ","Already Applied":"पहले ही अनुरोध भेजा जा चुका है","User is blocked":"उपयोगकर्ता अवरुद्ध है",Failed:TC,"Please select at least one member":"कृपया कम से कम एक सदस्य चुनें","Group created":"समूह बनाया गया","Group Name":"समूह का नाम","Group Name is required":"समूह का नाम आवश्यक है","Loading...":"लोड हो रहा है...",Create:kC,"Group updated":"समूह अपडेट किया गया","Update Group":"समूह अपडेट करें",Update:$C,"No Chats":"कोई चैट नहीं",ParrotMate:RC,"Speak Different":"अलग बोलें","Not logged in":"लॉग इन नहीं किया गया","User Name":"उपयोगकर्ता नाम",copy:xC,"Network is slow, enable offline mode?":"नेटवर्क धीमा है। क्या आप ऑफ़लाइन मोड चालू करना चाहेंगे?","Enable offline mode":"ऑफ़लाइन मोड चालू करें","PChip Reader":"PChip Reader",male:EC,female:MC,"popular neutral":"लोकप्रिय (तटस्थ)","Offline mode":"ऑफ़लाइन मोड","Change nickname":"उपनाम बदलें","UI Language":"इंटरफ़ेस भाषा",Word:LC,Date:"तारीख","My bookshelf":"मेरी किताबें","Title too short":"शीर्षक बहुत छोटा है","Modification successful":"सफलतापूर्वक संशोधित किया गया","No books in your shelf yet":"आपकी शेल्फ़ में अभी कोई किताबें नहीं हैं","Tap the search icon above to browse books and add them to your shelf!":"ऊपर के खोज आइकन पर टैप करके किताबें खोजें और उन्हें अपनी शेल्फ़ में जोड़ें!","Read with experts to help you understand,":"समझने में मदद के लिए विशेषज्ञों के साथ पढ़ें,","Comprehensive training in English listening and reading.":"अंग्रेज़ी सुनने और पढ़ने का व्यापक प्रशिक्षण।","Hi, {{nickName}}! Welcome!":"नमस्ते, {{nickName}}! आपका स्वागत है!","Browse library":"लाइब्रेरी ब्राउज़ करें","Add your own TXT/PDF":"अपना TXT/PDF जोड़ें","Already have an account?":"क्या आपके पास पहले से खाता है?","Click here to login":"लॉगिन करने के लिए यहाँ क्लिक करें","We detected this is your first time using PChip Reader. Add some books!":"हमने देखा कि आप पहली बार PChip Reader का उपयोग कर रहे हैं। कुछ किताबें जोड़ें!","Upload Book":"पुस्तक अपलोड करें","Click here to upload local EPUB/MOBI/PDF/TXT":"स्थानीय EPUB/MOBI/PDF/TXT अपलोड करने के लिए यहाँ क्लिक करें","Only EPUB/MOBI/PDF/TXT is supported":"केवल EPUB/MOBI/PDF/TXT फ़ाइलें समर्थित हैं","Upload successful":"अपलोड सफल","Book upload failed":"पुस्तक अपलोड विफल हो गई","We only store your files locally!":"हम आपकी फ़ाइलें केवल स्थानीय रूप से संग्रहीत करते हैं!","New words":"नए शब्द","Total reading":"कुल पढ़ाई","Today's reading":"आज की पढ़ाई","Please choose an image file":"कृपया एक छवि फ़ाइल चुनें","Image sent":"छवि भेज दी गई","Failed to upload image":"छवि अपलोड नहीं हो सकी","analyzing grammar structure":"वाक्य रचना का विश्लेषण किया जा रहा है","understanding pronunciation":"उच्चारण समझा जा रहा है","optimizing and restructuring":"अनुकूलन और पुनर्संरचना","My QR Code":"मेरा QR कोड","Let friends scan to fill your username automatically":"दोस्त स्कैन करके आपका उपयोगकर्ता नाम अपने आप भर सकें","Unable to load image":"छवि लोड नहीं हो सकी","Loading image...":"छवि लोड हो रही है...","Shared image":"साझा की गई छवि","QR scanning is unavailable in this environment":"इस वातावरण में QR स्कैनिंग उपलब्ध नहीं है","Camera access is not supported on this device":"इस डिवाइस पर कैमरे तक पहुँच समर्थित नहीं है","Unable to access the camera":"कैमरे तक पहुँच संभव नहीं है","No QR code found in the selected image":"चयनित छवि में कोई QR कोड नहीं मिला","Unable to read QR code from the selected image":"चयनित छवि से QR कोड पढ़ा नहीं जा सका","Username captured from QR code":"QR कोड से उपयोगकर्ता नाम प्राप्त हुआ","Initializing camera...":"कैमरा प्रारंभ किया जा रहा है...","Scan QR Code":"QR कोड स्कैन करें","Align the QR code within the frame to capture a username automatically.":"उपयोगकर्ता नाम अपने आप भरने के लिए QR कोड को फ्रेम के भीतर रखें।","Login Success":"लॉग इन सफल","please enter your phone number":"कृपया अपना फोन नंबर दर्ज करें","Please enter your phone number":"कृपया अपना फोन नंबर दर्ज करें",Login:NC,"Terms&Conditions":"नियम और शर्तें",and:FC,"Privacy Policy":"गोपनीयता नीति","Unregistered phone numbers will automatically create an account":"यदि फोन नंबर पंजीकृत नहीं है तो उसके लिए स्वचालित रूप से एक खाता बना दिया जाएगा","Please enter the verification code":"कृपया सत्यापन कोड दर्ज करें","Send verification code":"सत्यापन कोड भेजें","Please enter the correct phone number":"कृपया सही फोन नंबर दर्ज करें","Verification code sent":"सत्यापन कोड भेज दिया गया",Language:IC,Skip:UC,Continue:OC,"Are you 18 or older?":"क्या आपकी उम्र 18 वर्ष या अधिक है?",Yes:DC,No:BC,"Please select language what you want to learn":"कृपया वह भाषा चुनें जिसे आप सीखना चाहते हैं","Please enter your age":"कृपया अपनी उम्र दर्ज करें",Age:VC,"Please select your gender":"कृपया अपना लिंग चुनें",Female:GC,Male:jC,"Your {{langShort}} name":"आपका {{langShort}} नाम","Create your own name or choose from the recommendations":"अपना नाम बनाएं या सुझाए गए विकल्पों में से चुनें","Enter your nickname here...":"यहाँ अपना उपनाम दर्ज करें...","Learning Language":"सीखने की भाषा",Finish:zC,"Nickname is required":"उपनाम आवश्यक है","Nickname must be at least 3 characters":"उपनाम कम से कम 3 वर्ण का होना चाहिए",Confirm:_C,"Account Phone":"खाता फ़ोन",Gender:HC,Education:QC,Job:KC,Hobby:JC,"Select your role":"अपनी भूमिका चुनें","Please choose your identity":"कृपया अपनी पहचान चुनें","Profile Step: Nickname":"उपनाम","Profile Step: Learning Language":"सीखने की भाषा","Profile Step: Mother Tongue":"मातृभाषा","By signing up, you agree with ":"साइन अप करने पर आप निम्न से सहमत होते हैं "},qC="秒",XC="メンター",YC="学習パートナー",ZC="英語",eA="中国語",tA="スペイン語",nA="韓国語",aA="フランス語",oA="日本語",iA="ドイツ語",rA="アラビア語",sA="翻訳",lA="解釈",cA="文法",uA="他のユーザーの返信を待ってからでないと、ダイレクトメッセージを続けられません。しばらくお待ちください。",dA="まだこのグループのメンバーではありません。オーナーが参加申請を承認するまでお待ちください。",hA="チャット",fA="連絡先",pA="ログアウト",mA="引用",gA="表示",yA="取り消す",vA="翻訳する",bA="折りたたむ",PA="メッセージ",wA="学習",CA="発見",AA="プロフィール",SA="開発中です",TA="戻る",kA="グループ",$A="追加",RA="失敗しました",xA="作成",EA="更新",MA="ParrotMate",LA="コピー",NA="男性",FA="女性",IA="単語",UA="ログイン",OA="および",DA="言語",BA="スキップ",VA="続ける",GA="はい",jA="いいえ",zA="年齢",_A="女性",HA="男性",QA="完了",KA="確認",JA="性別",WA="学歴",qA="職業",XA="趣味",YA={seconds:qC,"Send Code":"コードを送信","Add Profile":"プロフィールを追加",Practitioner:XC,"I want to practice languages and chat with others":"言語を練習して、他の人とチャットしたいです",Mate:YC,"I can guide language learning and provide companionship":"言語学習をガイドし、寄り添ってサポートします","Unknown error":"不明なエラーが発生しました。しばらくしてからもう一度お試しください。",English:ZC,Chinese:eA,Spanish:tA,Korean:nA,French:aA,Japanese:oA,German:iA,Arabic:rA,Translation:sA,Interpretation:lA,"Key Vocabulary & Terms":"重要語彙・用語",Grammar:cA,DM_ACL_REJECT:uA,GROUP_ACL_REJECT:dA,"Tree Hole":"ツリーホール",Chat:hA,Contacts:fA,"Remove Contact":"連絡先を削除","Exit Group":"グループを退会","Chat Settings":"チャット設定","Awaiting friend confirmation":"フレンド承認待ち","Revision failed":"修正に失敗しました","Please use English":"英語で入力してください","Speech recognition failed. Please try again.":"音声認識に失敗しました。もう一度お試しください。","analyzing...":"解析中...","Loading profiles...":"プロフィールを読み込み中...","Add Friend":"友達を追加","Create Group":"グループを作成",Logout:pA,"Copied username to clipboard":"ユーザー名をクリップボードにコピーしました","Switch Identity":"アカウントを切り替え",Function:"機能",Quote:mA,"Instructions(Optional)":"指示(任意)","joined the room":"ルームに参加しました","left the room":"ルームを退出しました",View:gA,Recall:yA,"Hide Translation":"翻訳を非表示",Translate:vA,Collapse:bA,"Before you accept, she won’t know you've seen any messages.":"承認するまでは、相手にメッセージを既読したことは伝わりません。","Allow {{name}} to send you messages and share your name and profile picture?":"{{name}} があなたにメッセージを送信し、あなたの名前とプロフィール写真を共有できるようにしますか?",Message:PA,Study:wA,Discover:CA,Me:AA,"coming soon":"近日公開","This feature is under":"この機能は",development:SA,Back:TA,"Search contacts or groups":"連絡先またはグループを検索",Groups:kA,"No Results":"結果が見つかりません","Say Hi":"挨拶を送る",Add:$A,"Find Friend":"友達を探す","Input Username":"ユーザー名を入力","my account: ":"マイアカウント: ","Already Applied":"既に申請済み","User is blocked":"このユーザーはブロックされています",Failed:RA,"Please select at least one member":"少なくとも1名のメンバーを選択してください","Group created":"グループを作成しました","Group Name":"グループ名","Group Name is required":"グループ名は必須です","Loading...":"読み込み中...",Create:xA,"Group updated":"グループを更新しました","Update Group":"グループを更新",Update:EA,"No Chats":"チャットがありません",ParrotMate:MA,"Speak Different":"話し方を変えよう","Not logged in":"ログインしていません","User Name":"ユーザー名",copy:LA,"Network is slow, enable offline mode?":"ネットワークが遅いようです。オフラインモードを有効にしますか?","Enable offline mode":"オフラインモードを有効にする","PChip Reader":"PChip Reader",male:NA,female:FA,"popular neutral":"人気(中性)","Offline mode":"オフラインモード","Change nickname":"ニックネームを変更する","UI Language":"UI言語",Word:IA,Date:"日付","My bookshelf":"マイ本棚","Title too short":"タイトルが短すぎます","Modification successful":"変更が完了しました","No books in your shelf yet":"本棚にまだ本がありません","Tap the search icon above to browse books and add them to your shelf!":"上の検索アイコンをタップして本を探し、本棚に追加しましょう!","Read with experts to help you understand,":"専門家と一緒に読み、理解を深めましょう、","Comprehensive training in English listening and reading.":"英語のリスニングとリーディングを総合的に学習できます。","Hi, {{nickName}}! Welcome!":"こんにちは、{{nickName}}さん!ようこそ!","Browse library":"ライブラリを閲覧する","Add your own TXT/PDF":"TXT/PDFファイルを追加する","Already have an account?":"既にアカウントをお持ちですか?","Click here to login":"ログインはこちら","We detected this is your first time using PChip Reader. Add some books!":"PChip Readerは初めてのようです。本を追加してみましょう!","Upload Book":"書籍をアップロード","Click here to upload local EPUB/MOBI/PDF/TXT":"ここをクリックしてローカルのEPUB/MOBI/PDF/TXTをアップロード","Only EPUB/MOBI/PDF/TXT is supported":"対応形式はEPUB/MOBI/PDF/TXTのみです","Upload successful":"アップロードが成功しました","Book upload failed":"書籍のアップロードに失敗しました","We only store your files locally!":"ファイルはローカルにのみ保存されます!","New words":"新しい単語","Total reading":"累計読書時間","Today's reading":"今日の読書時間","Please choose an image file":"画像ファイルを選択してください","Image sent":"画像を送信しました","Failed to upload image":"画像のアップロードに失敗しました","analyzing grammar structure":"文法構造を解析しています","understanding pronunciation":"発音を確認しています","optimizing and restructuring":"最適化と再構成を行っています","My QR Code":"自分のQRコード","Let friends scan to fill your username automatically":"友だちにスキャンしてもらうと、ユーザー名が自動で入力されます","Unable to load image":"画像を読み込めません","Loading image...":"画像を読み込み中...","Shared image":"共有された画像","QR scanning is unavailable in this environment":"この環境ではQRスキャンを利用できません","Camera access is not supported on this device":"このデバイスではカメラアクセスがサポートされていません","Unable to access the camera":"カメラにアクセスできません","No QR code found in the selected image":"選択した画像にQRコードが見つかりませんでした","Unable to read QR code from the selected image":"選択した画像のQRコードを読み取れませんでした","Username captured from QR code":"QRコードからユーザー名を取得しました","Initializing camera...":"カメラを初期化しています...","Scan QR Code":"QRコードをスキャン","Align the QR code within the frame to capture a username automatically.":"フレーム内にQRコードを合わせると、ユーザー名を自動で取得できます。","Login Success":"ログインに成功しました","please enter your phone number":"電話番号を入力してください","Please enter your phone number":"電話番号を入力してください",Login:UA,"Terms&Conditions":"利用規約",and:OA,"Privacy Policy":"プライバシーポリシー","Unregistered phone numbers will automatically create an account":"未登録の電話番号は自動的にアカウントが作成されます","Please enter the verification code":"確認コードを入力してください","Send verification code":"確認コードを送信","Please enter the correct phone number":"正しい電話番号を入力してください","Verification code sent":"確認コードを送信しました",Language:DA,Skip:BA,Continue:VA,"Are you 18 or older?":"18歳以上ですか?",Yes:GA,No:jA,"Please select language what you want to learn":"学びたい言語を選択してください","Please enter your age":"年齢を入力してください",Age:zA,"Please select your gender":"性別を選択してください",Female:_A,Male:HA,"Your {{langShort}} name":"あなたの{{langShort}}での名前","Create your own name or choose from the recommendations":"自分で名前を作成するか、おすすめから選んでください","Enter your nickname here...":"ここにニックネームを入力してください...","Learning Language":"学習言語",Finish:QA,"Nickname is required":"ニックネームは必須です","Nickname must be at least 3 characters":"ニックネームは3文字以上で入力してください",Confirm:KA,"Account Phone":"アカウントの電話番号",Gender:JA,Education:WA,Job:qA,Hobby:XA,"Select your role":"役割を選択してください","Please choose your identity":"ご自身の立場を選択してください","Profile Step: Nickname":"ニックネーム","Profile Step: Learning Language":"学習中の言語","Profile Step: Mother Tongue":"母語","By signing up, you agree with ":"登録すると、以下に同意したことになります:"},ZA="초",eS="튜터",tS="언어 파트너",nS="영어",aS="중국어",oS="스페인어",iS="한국어",rS="프랑스어",sS="일본어",lS="독일어",cS="아랍어",uS="번역",dS="해석",hS="문법",fS="다른 사용자의 응답을 기다려야 다이렉트 메시지를 계속 진행할 수 있습니다.",pS="아직 이 그룹의 멤버가 아닙니다. 소유자가 요청을 승인할 때까지 기다려주세요.",mS="채팅",gS="연락처",yS="로그아웃",vS="인용",bS="보기",PS="메시지 회수",wS="번역",CS="접기",AS="메시지",SS="학습",TS="둘러보기",kS="내 프로필",$S="개발 중입니다",RS="뒤로",xS="그룹",ES="추가하기",MS="실패했습니다",LS="생성하기",NS="수정",FS="ParrotMate",IS="복사",US="남성",OS="여성",DS="단어",BS="로그인",VS="및",GS="언어",jS="건너뛰기",zS="계속하기",_S="예",HS="아니요",QS="나이",KS="여성",JS="남성",WS="완료",qS="확인",XS="성별",YS="학력",ZS="직업",eT="취미",tT={seconds:ZA,"Send Code":"코드 보내기","Add Profile":"프로필 추가",Practitioner:eS,"I want to practice languages and chat with others":"언어를 연습하고 다른 사람들과 대화하고 싶어요",Mate:tS,"I can guide language learning and provide companionship":"언어 학습을 도와드리고 함께해 드릴 수 있어요","Unknown error":"알 수 없는 오류가 발생했습니다.",English:nS,Chinese:aS,Spanish:oS,Korean:iS,French:rS,Japanese:sS,German:lS,Arabic:cS,Translation:uS,Interpretation:dS,"Key Vocabulary & Terms":"핵심 어휘 및 용어",Grammar:hS,DM_ACL_REJECT:fS,GROUP_ACL_REJECT:pS,"Tree Hole":"트리홀",Chat:mS,Contacts:gS,"Remove Contact":"연락처 삭제","Exit Group":"그룹 나가기","Chat Settings":"채팅 설정","Awaiting friend confirmation":"친구 승인 대기 중","Revision failed":"수정에 실패했습니다","Please use English":"영어를 사용해 주세요","Speech recognition failed. Please try again.":"음성 인식에 실패했습니다. 다시 시도해 주세요.","analyzing...":"분석 중...","Loading profiles...":"프로필을 불러오는 중...","Add Friend":"친구 추가","Create Group":"그룹 만들기",Logout:yS,"Copied username to clipboard":"사용자 이름이 클립보드에 복사되었습니다","Switch Identity":"계정 전환",Function:"기능",Quote:vS,"Instructions(Optional)":"지침(선택 사항)","joined the room":"채팅방에 입장했습니다","left the room":"채팅방을 나갔습니다",View:bS,Recall:PS,"Hide Translation":"번역 숨기기",Translate:wS,Collapse:CS,"Before you accept, she won’t know you've seen any messages.":"수락하기 전에는 상대방이 당신이 메시지를 확인했는지 알 수 없습니다.","Allow {{name}} to send you messages and share your name and profile picture?":"{{name}}님이 메시지를 보내고 귀하의 이름과 프로필 사진을 공유하도록 허용하시겠어요?",Message:AS,Study:SS,Discover:TS,Me:kS,"coming soon":"곧 제공됩니다","This feature is under":"이 기능은",development:$S,Back:RS,"Search contacts or groups":"연락처 또는 그룹 검색",Groups:xS,"No Results":"결과가 없습니다","Say Hi":"인사하기",Add:ES,"Find Friend":"친구 찾기","Input Username":"사용자 이름을 입력하세요","my account: ":"내 계정: ","Already Applied":"이미 요청했습니다","User is blocked":"해당 사용자가 차단되어 있습니다",Failed:MS,"Please select at least one member":"최소 한 명 이상의 멤버를 선택해주세요","Group created":"그룹이 생성되었습니다","Group Name":"그룹 이름","Group Name is required":"그룹 이름은 필수입니다","Loading...":"로딩 중...",Create:LS,"Group updated":"그룹이 수정되었습니다","Update Group":"그룹 수정",Update:NS,"No Chats":"채팅이 없습니다",ParrotMate:FS,"Speak Different":"다르게 말해보세요","Not logged in":"로그인하지 않음","User Name":"사용자 이름",copy:IS,"Network is slow, enable offline mode?":"네트워크가 느립니다. 오프라인 모드를 활성화할까요?","Enable offline mode":"오프라인 모드 활성화","PChip Reader":"PChip 리더",male:US,female:OS,"popular neutral":"인기(중성)","Offline mode":"오프라인 모드","Change nickname":"닉네임 변경","UI Language":"UI 언어",Word:DS,Date:"날짜","My bookshelf":"내 서가","Title too short":"제목이 너무 짧습니다","Modification successful":"수정이 완료되었습니다","No books in your shelf yet":"아직 서가에 책이 없습니다","Tap the search icon above to browse books and add them to your shelf!":"위의 검색 아이콘을 탭해 책을 찾아 서가에 추가해보세요!","Read with experts to help you understand,":"전문가와 함께 읽으며 이해를 도와드려요,","Comprehensive training in English listening and reading.":"영어 듣기·독해 종합 훈련","Hi, {{nickName}}! Welcome!":"안녕하세요, {{nickName}}님! 환영합니다!","Browse library":"라이브러리 둘러보기","Add your own TXT/PDF":"내 파일(TXT/PDF) 추가하기","Already have an account?":"이미 계정이 있으신가요?","Click here to login":"로그인하려면 여기를 클릭하세요","We detected this is your first time using PChip Reader. Add some books!":"PChip Reader를 처음 사용하시는 것 같아요. 책을 추가해 보세요!","Upload Book":"책 업로드","Click here to upload local EPUB/MOBI/PDF/TXT":"로컬 EPUB/MOBI/PDF/TXT 파일을 업로드하려면 여기를 클릭하세요","Only EPUB/MOBI/PDF/TXT is supported":"EPUB/MOBI/PDF/TXT 형식만 지원합니다","Upload successful":"업로드가 완료되었습니다","Book upload failed":"책 업로드에 실패했습니다","We only store your files locally!":"파일은 로컬에만 저장됩니다!","New words":"새 단어","Total reading":"총 읽기 시간","Today's reading":"오늘의 읽기 시간","Please choose an image file":"이미지 파일을 선택해 주세요","Image sent":"이미지 전송 완료","Failed to upload image":"이미지 업로드에 실패했습니다","analyzing grammar structure":"문법 구조 분석 중","understanding pronunciation":"발음 분석 중","optimizing and restructuring":"최적화 및 재구성 중","My QR Code":"내 QR 코드","Let friends scan to fill your username automatically":"친구가 스캔하면 사용자 이름이 자동으로 입력됩니다","Unable to load image":"이미지를 불러올 수 없습니다","Loading image...":"이미지 불러오는 중...","Shared image":"공유된 이미지","QR scanning is unavailable in this environment":"이 환경에서는 QR 스캔을 사용할 수 없습니다","Camera access is not supported on this device":"이 기기에서는 카메라 접근을 지원하지 않습니다","Unable to access the camera":"카메라에 접근할 수 없습니다","No QR code found in the selected image":"선택한 이미지에서 QR 코드를 찾을 수 없습니다","Unable to read QR code from the selected image":"선택한 이미지에서 QR 코드를 읽을 수 없습니다","Username captured from QR code":"QR 코드에서 사용자 이름을 가져왔습니다","Initializing camera...":"카메라 초기화 중...","Scan QR Code":"QR 코드 스캔","Align the QR code within the frame to capture a username automatically.":"프레임 안에 QR 코드를 맞추면 사용자 이름이 자동으로 인식됩니다.","Login Success":"로그인에 성공했습니다","please enter your phone number":"휴대폰 번호를 입력해 주세요","Please enter your phone number":"휴대폰 번호를 입력해 주세요",Login:BS,"Terms&Conditions":"이용약관",and:VS,"Privacy Policy":"개인정보 처리방침","Unregistered phone numbers will automatically create an account":"등록되지 않은 전화번호로는 계정이 자동으로 생성됩니다","Please enter the verification code":"인증 코드를 입력해 주세요","Send verification code":"인증 코드 보내기","Please enter the correct phone number":"올바른 전화번호를 입력해 주세요","Verification code sent":"인증 코드가 전송되었습니다",Language:GS,Skip:jS,Continue:zS,"Are you 18 or older?":"만 18세 이상이신가요?",Yes:_S,No:HS,"Please select language what you want to learn":"학습하고 싶은 언어를 선택해 주세요","Please enter your age":"나이를 입력해 주세요",Age:QS,"Please select your gender":"성별을 선택해 주세요",Female:KS,Male:JS,"Your {{langShort}} name":"사용할 {{langShort}} 이름","Create your own name or choose from the recommendations":"직접 이름을 만들거나 추천 목록에서 선택하세요","Enter your nickname here...":"여기에 닉네임을 입력하세요...","Learning Language":"학습 언어",Finish:WS,"Nickname is required":"닉네임은 필수입니다","Nickname must be at least 3 characters":"닉네임은 최소 3자 이상이어야 합니다",Confirm:qS,"Account Phone":"계정 전화번호",Gender:XS,Education:YS,Job:ZS,Hobby:eT,"Select your role":"역할을 선택해 주세요","Please choose your identity":"사용자 유형을 선택해 주세요","Profile Step: Nickname":"닉네임","Profile Step: Learning Language":"학습 중인 언어","Profile Step: Mother Tongue":"모국어","By signing up, you agree with ":"회원가입하면 약관에 동의하게 됩니다 "},nT="segundos",aT="Tutor",oT="Parceiro",iT="Inglês",rT="Chinês",sT="Espanhol",lT="Coreano",cT="Francês",uT="Japonês",dT="Alemão",hT="Árabe",fT="Tradução",pT="Interpretação",mT="Gramática",gT="Por favor, aguarde a resposta dos outros para continuar a conversa por mensagem direta.",yT="Você ainda não está neste grupo. Por favor, aguarde que o proprietário aprove sua solicitação.",vT="Bate-papo",bT="Contatos",PT="Sair",wT="Citar",CT="Visualizar",AT="Desfazer envio",ST="Traduzir",TT="Recolher",kT="Mensagens",$T="Estudo",RT="Descobrir",xT="Perfil",ET="desenvolvimento",MT="Voltar",LT="Grupos",NT="Adicionar",FT="Falha",IT="Criar",UT="Atualizar",OT="ParrotMate",DT="Copiar",BT="Masculino",VT="Feminino",GT="Palavra",jT="Entrar",zT="e",_T="Idioma",HT="Pular",QT="Continuar",KT="Sim",JT="Não",WT="Idade",qT="Feminino",XT="Masculino",YT="Concluir",ZT="Confirmar",ek="Gênero",tk="Formação",nk="Profissão",ak="Hobby",ok={seconds:nT,"Send Code":"Enviar código","Add Profile":"Adicionar Perfil",Practitioner:aT,"I want to practice languages and chat with others":"Quero praticar idiomas e conversar com outras pessoas",Mate:oT,"I can guide language learning and provide companionship":"Posso orientar o aprendizado de idiomas e oferecer companhia","Unknown error":"Erro desconhecido. Por favor, tente novamente.",English:iT,Chinese:rT,Spanish:sT,Korean:lT,French:cT,Japanese:uT,German:dT,Arabic:hT,Translation:fT,Interpretation:pT,"Key Vocabulary & Terms":"Vocabulário e termos-chave",Grammar:mT,DM_ACL_REJECT:gT,GROUP_ACL_REJECT:yT,"Tree Hole":"Espaço anônimo",Chat:vT,Contacts:bT,"Remove Contact":"Remover contato","Exit Group":"Sair do grupo","Chat Settings":"Configurações do chat","Awaiting friend confirmation":"Aguardando confirmação do pedido de amizade","Revision failed":"Falha na revisão","Please use English":"Por favor, use inglês","Speech recognition failed. Please try again.":"Reconhecimento de voz falhou. Por favor, tente novamente.","analyzing...":"analisando...","Loading profiles...":"Carregando perfis...","Add Friend":"Adicionar amigo","Create Group":"Criar grupo",Logout:PT,"Copied username to clipboard":"Nome de usuário copiado para a área de transferência","Switch Identity":"Trocar identidade",Function:"Função",Quote:wT,"Instructions(Optional)":"Instruções (opcional)","joined the room":"entrou na sala","left the room":"saiu da sala",View:CT,Recall:AT,"Hide Translation":"Ocultar tradução",Translate:ST,Collapse:TT,"Before you accept, she won’t know you've seen any messages.":"Antes de aceitar, ela não saberá que você viu as mensagens.","Allow {{name}} to send you messages and share your name and profile picture?":"Permitir que {{name}} envie mensagens para você e veja seu nome e foto de perfil?",Message:kT,Study:$T,Discover:RT,Me:xT,"coming soon":"em breve","This feature is under":"Este recurso está em",development:ET,Back:MT,"Search contacts or groups":"Pesquisar contatos ou grupos",Groups:LT,"No Results":"Nenhum resultado","Say Hi":"Enviar um oi",Add:NT,"Find Friend":"Procurar amigo","Input Username":"Digite o nome de usuário","my account: ":"minha conta: ","Already Applied":"Solicitação já enviada","User is blocked":"Usuário bloqueado",Failed:FT,"Please select at least one member":"Selecione pelo menos um membro","Group created":"Grupo criado","Group Name":"Nome do grupo","Group Name is required":"O nome do grupo é obrigatório","Loading...":"Carregando...",Create:IT,"Group updated":"Grupo atualizado","Update Group":"Atualizar grupo",Update:UT,"No Chats":"Nenhuma conversa",ParrotMate:OT,"Speak Different":"Fale de forma diferente","Not logged in":"Não conectado","User Name":"Nome de usuário",copy:DT,"Network is slow, enable offline mode?":"A rede está lenta. Ativar o modo offline?","Enable offline mode":"Ativar o modo offline","PChip Reader":"PChip Reader",male:BT,female:VT,"popular neutral":"Popular / Neutro","Offline mode":"Modo offline","Change nickname":"Alterar apelido","UI Language":"Idioma da interface",Word:GT,Date:"Data","My bookshelf":"Minha estante","Title too short":"Título muito curto","Modification successful":"Modificação realizada com sucesso","No books in your shelf yet":"Ainda não há livros na sua estante","Tap the search icon above to browse books and add them to your shelf!":"Toque no ícone de busca acima para navegar pelos livros e adicioná-los à sua estante!","Read with experts to help you understand,":"Leia com especialistas para ajudar você a entender,","Comprehensive training in English listening and reading.":"Treinamento abrangente de compreensão auditiva e leitura em inglês.","Hi, {{nickName}}! Welcome!":"Olá, {{nickName}}! Seja bem-vindo!","Browse library":"Navegar pela biblioteca","Add your own TXT/PDF":"Adicione seus próprios arquivos TXT/PDF","Already have an account?":"Já tem uma conta?","Click here to login":"Clique aqui para entrar","We detected this is your first time using PChip Reader. Add some books!":"Detectamos que esta é a sua primeira vez usando o PChip Reader. Adicione alguns livros!","Upload Book":"Enviar livro","Click here to upload local EPUB/MOBI/PDF/TXT":"Clique aqui para enviar arquivos EPUB/MOBI/PDF/TXT locais","Only EPUB/MOBI/PDF/TXT is supported":"Apenas EPUB, MOBI, PDF e TXT são suportados","Upload successful":"Upload concluído com sucesso","Book upload failed":"Falha ao enviar o livro","We only store your files locally!":"Armazenamos seus arquivos apenas localmente!","New words":"Novas palavras","Total reading":"Leitura total","Today's reading":"Leitura de hoje","Please choose an image file":"Por favor, selecione um arquivo de imagem","Image sent":"Imagem enviada","Failed to upload image":"Não foi possível enviar a imagem","analyzing grammar structure":"analisando a estrutura gramatical","understanding pronunciation":"analisando a pronúncia","optimizing and restructuring":"otimizando e reestruturando","My QR Code":"Meu código QR","Let friends scan to fill your username automatically":"Permita que amigos escaneiem para preencher automaticamente seu nome de usuário","Unable to load image":"Não foi possível carregar a imagem","Loading image...":"Carregando imagem...","Shared image":"Imagem compartilhada","QR scanning is unavailable in this environment":"A leitura de códigos QR não está disponível neste ambiente","Camera access is not supported on this device":"O acesso à câmera não é suportado neste dispositivo","Unable to access the camera":"Não foi possível acessar a câmera","No QR code found in the selected image":"Nenhum código QR encontrado na imagem selecionada","Unable to read QR code from the selected image":"Não foi possível ler o código QR da imagem selecionada","Username captured from QR code":"Nome de usuário capturado do código QR","Initializing camera...":"Inicializando a câmera...","Scan QR Code":"Escanear código QR","Align the QR code within the frame to capture a username automatically.":"Alinhe o código QR dentro do quadro para capturar automaticamente o nome de usuário.","Login Success":"Login realizado com sucesso","please enter your phone number":"por favor, insira seu número de telefone","Please enter your phone number":"Por favor, insira seu número de telefone",Login:jT,"Terms&Conditions":"Termos e Condições",and:zT,"Privacy Policy":"Política de Privacidade","Unregistered phone numbers will automatically create an account":"Números de telefone não cadastrados criarão automaticamente uma conta","Please enter the verification code":"Por favor, insira o código de verificação","Send verification code":"Enviar código de verificação","Please enter the correct phone number":"Por favor, insira um número de telefone válido","Verification code sent":"Código de verificação enviado",Language:_T,Skip:HT,Continue:QT,"Are you 18 or older?":"Você tem 18 anos ou mais?",Yes:KT,No:JT,"Please select language what you want to learn":"Por favor, selecione o idioma que deseja aprender","Please enter your age":"Por favor, informe sua idade",Age:WT,"Please select your gender":"Por favor, selecione seu gênero",Female:qT,Male:XT,"Your {{langShort}} name":"Seu nome em {{langShort}}","Create your own name or choose from the recommendations":"Crie seu próprio nome ou escolha entre as sugestões","Enter your nickname here...":"Digite seu apelido aqui...","Learning Language":"Idioma que você está aprendendo",Finish:YT,"Nickname is required":"O apelido é obrigatório","Nickname must be at least 3 characters":"O apelido deve ter pelo menos 3 caracteres",Confirm:ZT,"Account Phone":"Telefone da conta",Gender:ek,Education:tk,Job:nk,Hobby:ak,"Select your role":"Selecione sua função","Please choose your identity":"Por favor, escolha sua identidade","Profile Step: Nickname":"Apelido","Profile Step: Learning Language":"Idioma que você está aprendendo","Profile Step: Mother Tongue":"Língua materna","By signing up, you agree with ":"Ao se inscrever, você concorda com "},ik="segundos",rk="Tutor",sk="Parceiro",lk="Inglês",ck="Chinês",uk="Espanhol",dk="Coreano",hk="Francês",fk="Japonês",pk="Alemão",mk="Árabe",gk="Tradução",yk="Interpretação",vk="Gramática",bk="Por favor, aguarde a resposta de outra pessoa antes de continuar esta mensagem direta.",Pk="Ainda não faz parte deste grupo. Por favor, aguarde que o proprietário aprove o seu pedido.",wk="Conversa",Ck="Contactos",Ak="Terminar sessão",Sk="Citação",Tk="Ver",kk="Anular envio",$k="Traduzir",Rk="Recolher",xk="Mensagem",Ek="Estudo",Mk="Descobrir",Lk="Perfil",Nk="desenvolvimento",Fk="Voltar",Ik="Grupos",Uk="Adicionar",Ok="Falhou",Dk="Criar",Bk="Atualizar",Vk="ParrotMate",Gk="Copiar",jk="masculino",zk="feminino",_k="Palavra",Hk="Iniciar sessão",Qk="e",Kk="Idioma",Jk="Ignorar",Wk="Continuar",qk="Sim",Xk="Não",Yk="Idade",Zk="Feminino",e$="Masculino",t$="Concluir",n$="Confirmar",a$="Género",o$="Formação",i$="Profissão",r$="Passatempo",s$={seconds:ik,"Send Code":"Enviar código","Add Profile":"Adicionar Perfil",Practitioner:rk,"I want to practice languages and chat with others":"Quero praticar línguas e conversar com outras pessoas",Mate:sk,"I can guide language learning and provide companionship":"Posso orientar a aprendizagem de línguas e oferecer companhia","Unknown error":"Erro desconhecido",English:lk,Chinese:ck,Spanish:uk,Korean:dk,French:hk,Japanese:fk,German:pk,Arabic:mk,Translation:gk,Interpretation:yk,"Key Vocabulary & Terms":"Vocabulário e termos-chave",Grammar:vk,DM_ACL_REJECT:bk,GROUP_ACL_REJECT:Pk,"Tree Hole":"Cantinho Secreto",Chat:wk,Contacts:Ck,"Remove Contact":"Remover contacto","Exit Group":"Sair do grupo","Chat Settings":"Definições do chat","Awaiting friend confirmation":"À espera da confirmação do amigo","Revision failed":"Falha na revisão","Please use English":"Por favor, use inglês","Speech recognition failed. Please try again.":"Falha no reconhecimento de voz. Por favor, tente novamente.","analyzing...":"a analisar...","Loading profiles...":"A carregar perfis...","Add Friend":"Adicionar amigo","Create Group":"Criar grupo",Logout:Ak,"Copied username to clipboard":"Nome de utilizador copiado para a área de transferência","Switch Identity":"Alterar identidade",Function:"Função",Quote:Sk,"Instructions(Optional)":"Instruções (Opcional)","joined the room":"entrou na sala","left the room":"saiu da sala",View:Tk,Recall:kk,"Hide Translation":"Ocultar tradução",Translate:$k,Collapse:Rk,"Before you accept, she won’t know you've seen any messages.":"Antes de aceitar, ela não saberá que viste alguma mensagem.","Allow {{name}} to send you messages and share your name and profile picture?":"Permitir que {{name}} lhe envie mensagens e veja o seu nome e foto de perfil?",Message:xk,Study:Ek,Discover:Mk,Me:Lk,"coming soon":"em breve","This feature is under":"Esta funcionalidade está em",development:Nk,Back:Fk,"Search contacts or groups":"Pesquisar contactos ou grupos",Groups:Ik,"No Results":"Sem resultados","Say Hi":"Enviar olá",Add:Uk,"Find Friend":"Procurar amigo","Input Username":"Introduza o nome de utilizador","my account: ":"a minha conta: ","Already Applied":"Pedido já enviado","User is blocked":"Utilizador bloqueado",Failed:Ok,"Please select at least one member":"Por favor, selecione pelo menos um membro","Group created":"Grupo criado","Group Name":"Nome do grupo","Group Name is required":"O nome do grupo é obrigatório","Loading...":"A carregar...",Create:Dk,"Group updated":"Grupo atualizado","Update Group":"Atualizar grupo",Update:Bk,"No Chats":"Sem conversas",ParrotMate:Vk,"Speak Different":"Fala de forma diferente","Not logged in":"Sessão não iniciada","User Name":"Nome de utilizador",copy:Gk,"Network is slow, enable offline mode?":"A ligação está lenta. Ativar o modo offline?","Enable offline mode":"Ativar o modo offline","PChip Reader":"PChip Reader",male:jk,female:zk,"popular neutral":"Popular (neutro)","Offline mode":"Modo offline","Change nickname":"Alterar pseudónimo","UI Language":"Idioma da interface",Word:_k,Date:"Data","My bookshelf":"A minha estante","Title too short":"Título demasiado curto","Modification successful":"Alteração efetuada com sucesso","No books in your shelf yet":"Ainda não tem livros na sua estante","Tap the search icon above to browse books and add them to your shelf!":"Toque no ícone de pesquisa acima para explorar livros e adicioná-los à sua estante!","Read with experts to help you understand,":"Leia com especialistas para o ajudar a compreender,","Comprehensive training in English listening and reading.":"Formação abrangente em compreensão oral e leitura em inglês.","Hi, {{nickName}}! Welcome!":"Olá, {{nickName}}! Seja bem-vindo!","Browse library":"Navegar pela biblioteca","Add your own TXT/PDF":"Adicione o seu ficheiro TXT/PDF","Already have an account?":"Já tem uma conta?","Click here to login":"Clique aqui para iniciar sessão","We detected this is your first time using PChip Reader. Add some books!":"Parece que é a sua primeira vez a usar o PChip Reader. Adicione alguns livros!","Upload Book":"Carregar livro","Click here to upload local EPUB/MOBI/PDF/TXT":"Clique aqui para carregar EPUB/MOBI/PDF/TXT do seu dispositivo","Only EPUB/MOBI/PDF/TXT is supported":"Apenas são suportados ficheiros EPUB, MOBI, PDF e TXT","Upload successful":"Carregamento concluído com sucesso","Book upload failed":"Falha ao carregar o livro","We only store your files locally!":"Só guardamos os seus ficheiros localmente!","New words":"Novas palavras","Total reading":"Total de leitura","Today's reading":"Leitura de hoje","Please choose an image file":"Por favor, escolha um ficheiro de imagem","Image sent":"Imagem enviada","Failed to upload image":"Falha ao carregar a imagem","analyzing grammar structure":"analisando a estrutura gramatical","understanding pronunciation":"compreendendo a pronúncia","optimizing and restructuring":"otimizando e reestruturando","My QR Code":"O meu Código QR","Let friends scan to fill your username automatically":"Permita que os amigos escaneiem para preencher automaticamente o seu nome de utilizador","Unable to load image":"Não foi possível carregar a imagem","Loading image...":"A carregar a imagem...","Shared image":"Imagem partilhada","QR scanning is unavailable in this environment":"A leitura de QR não está disponível neste ambiente","Camera access is not supported on this device":"O acesso à câmara não é suportado neste dispositivo","Unable to access the camera":"Não foi possível aceder à câmara","No QR code found in the selected image":"Nenhum código QR encontrado na imagem selecionada","Unable to read QR code from the selected image":"Não foi possível ler o código QR da imagem selecionada","Username captured from QR code":"Nome de utilizador capturado a partir do código QR","Initializing camera...":"A iniciar a câmara...","Scan QR Code":"Ler Código QR","Align the QR code within the frame to capture a username automatically.":"Alinhe o código QR dentro do enquadramento para capturar automaticamente o nome de utilizador","Login Success":"Sessão iniciada com sucesso","please enter your phone number":"por favor, introduza o seu número de telemóvel","Please enter your phone number":"Por favor, introduza o seu número de telemóvel",Login:Hk,"Terms&Conditions":"Termos e Condições",and:Qk,"Privacy Policy":"Política de Privacidade","Unregistered phone numbers will automatically create an account":"Números de telemóvel não registados serão usados para criar automaticamente uma conta","Please enter the verification code":"Por favor, introduza o código de verificação","Send verification code":"Enviar código de verificação","Please enter the correct phone number":"Por favor, introduza um número de telemóvel válido","Verification code sent":"Código de verificação enviado",Language:Kk,Skip:Jk,Continue:Wk,"Are you 18 or older?":"Tem 18 anos ou mais?",Yes:qk,No:Xk,"Please select language what you want to learn":"Por favor, selecione a língua que pretende aprender","Please enter your age":"Por favor, introduza a sua idade",Age:Yk,"Please select your gender":"Por favor, selecione o seu género",Female:Zk,Male:e$,"Your {{langShort}} name":"O seu nome em {{langShort}}","Create your own name or choose from the recommendations":"Crie o seu próprio nome ou escolha uma das recomendações","Enter your nickname here...":"Introduza o seu nome de utilizador aqui...","Learning Language":"Língua a aprender",Finish:t$,"Nickname is required":"O nome de utilizador é obrigatório","Nickname must be at least 3 characters":"O nome de utilizador deve ter pelo menos 3 caracteres",Confirm:n$,"Account Phone":"Telemóvel da conta",Gender:a$,Education:o$,Job:i$,Hobby:r$,"Select your role":"Selecione a sua função","Please choose your identity":"Por favor, escolha a sua identidade","Profile Step: Nickname":"Nome de utilizador","Profile Step: Learning Language":"Idioma a aprender","Profile Step: Mother Tongue":"Língua materna","By signing up, you agree with ":"Ao criar a sua conta, concorda com "},l$="секунд",c$="Наставник",u$="Партнёр",d$="Английский",h$="Китайский",f$="Испанский",p$="Корейский",m$="Французский",g$="Японский",y$="Немецкий",v$="Арабский",b$="Перевод",P$="Пояснение",w$="Грамматика",C$="Чтобы продолжить переписку в личных сообщениях, дождитесь ответа собеседника.",A$="Вы ещё не в этой группе. Пожалуйста, дождитесь одобрения вашего запроса владельцем.",S$="Чат",T$="Контакты",k$="Выйти",$$="Цитата",R$="Посмотреть",x$="Отозвать",E$="Перевести",M$="Свернуть",L$="Сообщения",N$="Учёба",F$="Обзор",I$="Профиль",U$="разработки",O$="Назад",D$="Группы",B$="Добавить",V$="Не удалось",G$="Создать",j$="Обновить",z$="ParrotMate",_$="копировать",H$="Мужской",Q$="Женский",K$="Слово",J$="Войти",W$="и",q$="Язык",X$="Пропустить",Y$="Продолжить",Z$="Да",e2="Нет",t2="Возраст",n2="Женский",a2="Мужской",o2="Готово",i2="Подтвердить",r2="Пол",s2="Образование",l2="Профессия",c2="Хобби",u2={seconds:l$,"Send Code":"Отправить код","Add Profile":"Добавить профиль",Practitioner:c$,"I want to practice languages and chat with others":"Я хочу практиковать языки и общаться с другими",Mate:u$,"I can guide language learning and provide companionship":"Я могу помогать в изучении языка и поддерживать общение","Unknown error":"Неизвестная ошибка",English:d$,Chinese:h$,Spanish:f$,Korean:p$,French:m$,Japanese:g$,German:y$,Arabic:v$,Translation:b$,Interpretation:P$,"Key Vocabulary & Terms":"Ключевая лексика и термины",Grammar:w$,DM_ACL_REJECT:C$,GROUP_ACL_REJECT:A$,"Tree Hole":"Дерево сообщений",Chat:S$,Contacts:T$,"Remove Contact":"Удалить контакт","Exit Group":"Покинуть группу","Chat Settings":"Настройки чата","Awaiting friend confirmation":"Ожидается подтверждение от друга","Revision failed":"Не удалось обновить","Please use English":"Пожалуйста, используйте английский","Speech recognition failed. Please try again.":"Не удалось распознать речь. Пожалуйста, попробуйте ещё раз.","analyzing...":"анализируется...","Loading profiles...":"Загрузка профилей...","Add Friend":"Добавить в друзья","Create Group":"Создать группу",Logout:k$,"Copied username to clipboard":"Имя пользователя скопировано в буфер обмена","Switch Identity":"Сменить профиль",Function:"Функция",Quote:$$,"Instructions(Optional)":"Инструкции (необязательно)","joined the room":"присоединился к комнате","left the room":"покинул комнату",View:R$,Recall:x$,"Hide Translation":"Скрыть перевод",Translate:E$,Collapse:M$,"Before you accept, she won’t know you've seen any messages.":"Пока вы не примете запрос, она не узнает, что вы видели сообщения.","Allow {{name}} to send you messages and share your name and profile picture?":"Разрешить {{name}} отправлять вам сообщения и видеть ваше имя и фото профиля?",Message:L$,Study:N$,Discover:F$,Me:I$,"coming soon":"Скоро появится","This feature is under":"Эта функция находится в стадии",development:U$,Back:O$,"Search contacts or groups":"Найти контакты или группы",Groups:D$,"No Results":"Нет результатов","Say Hi":"Поздороваться",Add:B$,"Find Friend":"Найти друга","Input Username":"Введите имя пользователя","my account: ":"мой аккаунт: ","Already Applied":"Заявка уже отправлена","User is blocked":"Пользователь заблокирован",Failed:V$,"Please select at least one member":"Выберите хотя бы одного участника","Group created":"Группа создана","Group Name":"Название группы","Group Name is required":"Название группы обязательно","Loading...":"Загрузка...",Create:G$,"Group updated":"Группа обновлена","Update Group":"Обновить группу",Update:j$,"No Chats":"Нет чатов",ParrotMate:z$,"Speak Different":"Говори по‑другому","Not logged in":"Вы не вошли в аккаунт","User Name":"Имя пользователя",copy:_$,"Network is slow, enable offline mode?":"Соединение медленное, включить офлайн-режим?","Enable offline mode":"Включить офлайн-режим","PChip Reader":"PChip Reader",male:H$,female:Q$,"popular neutral":"Популярные (унисекс)","Offline mode":"Офлайн-режим","Change nickname":"Изменить ник","UI Language":"Язык интерфейса",Word:K$,Date:"Дата","My bookshelf":"Моя книжная полка","Title too short":"Название слишком короткое","Modification successful":"Изменения успешно сохранены","No books in your shelf yet":"На вашей полке пока нет книг","Tap the search icon above to browse books and add them to your shelf!":"Нажмите значок поиска сверху, чтобы просмотреть книги и добавить их на полку!","Read with experts to help you understand,":"Читайте вместе с экспертами, чтобы лучше понять материал,","Comprehensive training in English listening and reading.":"Комплексная подготовка по аудированию и чтению на английском языке.","Hi, {{nickName}}! Welcome!":"Привет, {{nickName}}! Добро пожаловать!","Browse library":"Просмотреть библиотеку","Add your own TXT/PDF":"Добавьте свои файлы TXT/PDF","Already have an account?":"Уже есть аккаунт?","Click here to login":"Нажмите здесь, чтобы войти","We detected this is your first time using PChip Reader. Add some books!":"Похоже, вы используете PChip Reader впервые. Добавьте несколько книг!","Upload Book":"Загрузить книгу","Click here to upload local EPUB/MOBI/PDF/TXT":"Нажмите здесь, чтобы загрузить локальные файлы EPUB/MOBI/PDF/TXT","Only EPUB/MOBI/PDF/TXT is supported":"Поддерживаются только форматы EPUB/MOBI/PDF/TXT","Upload successful":"Загрузка прошла успешно","Book upload failed":"Не удалось загрузить книгу","We only store your files locally!":"Мы храним ваши файлы только локально!","New words":"Новые слова","Total reading":"Всего прочитано","Today's reading":"Прочитано сегодня","Please choose an image file":"Пожалуйста, выберите файл изображения","Image sent":"Изображение отправлено","Failed to upload image":"Не удалось загрузить изображение","analyzing grammar structure":"анализ грамматической структуры","understanding pronunciation":"анализ произношения","optimizing and restructuring":"оптимизация и реструктуризация","My QR Code":"Мой QR-код","Let friends scan to fill your username automatically":"Позвольте друзьям отсканировать, чтобы автоматически заполнить ваше имя пользователя","Unable to load image":"Не удалось загрузить изображение","Loading image...":"Загрузка изображения...","Shared image":"Отправленное изображение","QR scanning is unavailable in this environment":"Сканирование QR-кодов недоступно в этой среде","Camera access is not supported on this device":"Доступ к камере не поддерживается на этом устройстве","Unable to access the camera":"Не удалось получить доступ к камере","No QR code found in the selected image":"В выбранном изображении не найден QR-код","Unable to read QR code from the selected image":"Не удалось прочитать QR-код с выбранного изображения","Username captured from QR code":"Имя пользователя получено из QR-кода","Initializing camera...":"Инициализация камеры...","Scan QR Code":"Сканировать QR-код","Align the QR code within the frame to capture a username automatically.":"Поместите QR-код в рамку, чтобы имя пользователя заполнилось автоматически","Login Success":"Вход выполнен","please enter your phone number":"пожалуйста, введите номер телефона","Please enter your phone number":"Пожалуйста, введите номер телефона",Login:J$,"Terms&Conditions":"Условия использования",and:W$,"Privacy Policy":"Политика конфиденциальности","Unregistered phone numbers will automatically create an account":"Если номер не зарегистрирован, будет автоматически создан аккаунт","Please enter the verification code":"Пожалуйста, введите код подтверждения","Send verification code":"Отправить код подтверждения","Please enter the correct phone number":"Пожалуйста, введите корректный номер телефона","Verification code sent":"Код подтверждения отправлен",Language:q$,Skip:X$,Continue:Y$,"Are you 18 or older?":"Вам 18 лет или больше?",Yes:Z$,No:e2,"Please select language what you want to learn":"Пожалуйста, выберите язык, который вы хотите изучать","Please enter your age":"Пожалуйста, укажите свой возраст",Age:t2,"Please select your gender":"Пожалуйста, выберите свой пол",Female:n2,Male:a2,"Your {{langShort}} name":"Ваше имя на {{langShort}}","Create your own name or choose from the recommendations":"Придумайте имя или выберите из предложенных вариантов","Enter your nickname here...":"Введите никнейм здесь...","Learning Language":"Изучаемый язык",Finish:o2,"Nickname is required":"Никнейм обязателен","Nickname must be at least 3 characters":"Никнейм должен содержать не менее 3 символов",Confirm:i2,"Account Phone":"Номер телефона",Gender:r2,Education:s2,Job:l2,Hobby:c2,"Select your role":"Выберите свою роль","Please choose your identity":"Пожалуйста, выберите свою роль","Profile Step: Nickname":"Никнейм","Profile Step: Learning Language":"Изучаемый язык","Profile Step: Mother Tongue":"Родной язык","By signing up, you agree with ":"Регистрируясь, вы соглашаетесь с "},d2="விநாடிகள்",h2="பயிற்சியாளர்",f2="மொழி நண்பர்",p2="ஆங்கிலம்",m2="சீன மொழி",g2="ஸ்பானிய மொழி",y2="கொரிய மொழி",v2="பிரெஞ்சு மொழி",b2="ஜப்பானிய மொழி",P2="ஜெர்மன் மொழி",w2="அரபு மொழி",C2="மொழிபெயர்ப்பு",A2="விளக்கம்",S2="இலக்கணம்",T2="நேரடி உரையாடலை தொடர, மற்றவர்களின் பதிலுக்கு தயவுசெய்து காத்திருக்கவும்.",k2="நீங்கள் இந்த குழுவில் இன்னும் சேர்க்கப்படவில்லை. குழு உரிமையாளர் உங்கள் கோரிக்கையை ஒப்புக்கொள்ளும் வரை காத்திருக்கவும்.",$2="உரையாடல்",R2="தொடர்புகள்",x2="வெளியேறு",E2="மேற்கோள்",M2="பார்க்க",L2="பின்வாங்கு",N2="மொழிபெயர்க்க",F2="சுருக்கு",I2="செய்திகள்",U2="பயிற்சி",O2="கண்டறிதல்",D2="நான்",B2="மேம்பாட்டில் உள்ளது",V2="முந்தைய",G2="குழுக்கள்",j2="சேர்க்கவும்",z2="தோல்வி",_2="உருவாக்கவும்",H2="புதுப்பிக்கவும்",Q2="ParrotMate",K2="நகலெடு",J2="ஆண்",W2="பெண்",q2="சொல்",X2="உள்நுழைய",Y2="மற்றும்",Z2="மொழி",eR="தவிர்க்கவும்",tR="தொடரவும்",nR="ஆம்",aR="இல்லை",oR="வயது",iR="பெண்",rR="ஆண்",sR="முடிக்கவும்",lR="உறுதிசெய்",cR="பாலினம்",uR="கல்வி",dR="தொழில்",hR="பொழுதுபோக்கு",fR={seconds:d2,"Send Code":"குறியீடு அனுப்பவும்","Add Profile":"சுயவிவரம் சேர்க்கவும்",Practitioner:h2,"I want to practice languages and chat with others":"நான் மொழிகள் பயிற்சி செய்து மற்றவர்களுடன் உரையாட விரும்புகிறேன்",Mate:f2,"I can guide language learning and provide companionship":"நான் மொழி கற்றலுக்கு வழிகாட்டவும் மற்றும் துணையாக இருக்கவும் முடியும்","Unknown error":"தெரியாத பிழை",English:p2,Chinese:m2,Spanish:g2,Korean:y2,French:v2,Japanese:b2,German:P2,Arabic:w2,Translation:C2,Interpretation:A2,"Key Vocabulary & Terms":"முக்கிய சொற்கள் மற்றும் வரையறைகள்",Grammar:S2,DM_ACL_REJECT:T2,GROUP_ACL_REJECT:k2,"Tree Hole":"மரக் குழி",Chat:$2,Contacts:R2,"Remove Contact":"தொடர்பை நீக்கவும்","Exit Group":"குழுவிலிருந்து வெளியேறு","Chat Settings":"உரையாடல் அமைப்புகள்","Awaiting friend confirmation":"நண்பரின் உறுதிப்பாட்டுக்காக காத்திருக்கிறது","Revision failed":"திருத்தம் தோல்வியடைந்தது","Please use English":"தயவு செய்து ஆங்கிலத்தைப் பயன்படுத்தவும்","Speech recognition failed. Please try again.":"ஒலி அடையாளம் தோல்வியடைந்தது. தயவு செய்து மீண்டும் முயற்சிக்கவும்.","analyzing...":"பகுப்பாய்வு...","Loading profiles...":"சுயவிவரங்கள் ஏற்றப்படுகின்றன...","Add Friend":"நண்பரைச் சேர்க்கவும்","Create Group":"குழுவை உருவாக்கவும்",Logout:x2,"Copied username to clipboard":"பயனர் பெயர் கிளிப்போர்டுக்கு நகலாக சேமிக்கப்பட்டது","Switch Identity":"அடையாளத்தை மாற்றவும்",Function:"செயல்பாடு",Quote:E2,"Instructions(Optional)":"வழிமுறைகள் (விருப்பமானவை)","joined the room":"அறையில் சேர்ந்தார்","left the room":"அறையை விட்டு சென்றார்",View:M2,Recall:L2,"Hide Translation":"மொழிபெயர்ப்பை மறைக்க",Translate:N2,Collapse:F2,"Before you accept, she won’t know you've seen any messages.":"நீங்கள் ஒப்புக் கொள்ளும் வரை, அவள் நீங்கள் எந்த செய்திகளையும் பார்த்தீர்கள் என்பதை அறியமாட்டாள்.","Allow {{name}} to send you messages and share your name and profile picture?":"{{name}}-க்கு உங்களுக்கு செய்திகளை அனுப்பவும், உங்கள் பெயர் மற்றும் ப்ரொபைல் படத்தை பகிரவும் அனுமதிக்கலாமா?",Message:I2,Study:U2,Discover:O2,Me:D2,"coming soon":"விரைவில்","This feature is under":"இந்த அம்சம்",development:B2,Back:V2,"Search contacts or groups":"தொடர்புகள் அல்லது குழுக்களை தேடுங்கள்",Groups:G2,"No Results":"முடிவுகள் இல்லை","Say Hi":"வணக்கம் சொல்லுங்கள்",Add:j2,"Find Friend":"நண்பரை தேடுங்கள்","Input Username":"பயனர் பெயரை உள்ளிடவும்","my account: ":"என் கணக்கு: ","Already Applied":"ஏற்கனவே விண்ணப்பிக்கப்பட்டது","User is blocked":"பயனர் தடை செய்யப்பட்டுள்ளது",Failed:z2,"Please select at least one member":"குறைந்தது ஒரு உறுப்பினரைத் தேர்ந்தெடுக்கவும்","Group created":"குழு உருவாக்கப்பட்டது","Group Name":"குழு பெயர்","Group Name is required":"குழு பெயர் அவசியம்","Loading...":"ஏற்றப்படுகிறது...",Create:_2,"Group updated":"குழு புதுப்பிக்கப்பட்டது","Update Group":"குழு புதுப்பிக்கவும்",Update:H2,"No Chats":"உரையாடல்கள் எதுவும் இல்லை",ParrotMate:Q2,"Speak Different":"வேறுபட்ட முறையில் பேசுங்கள்","Not logged in":"உள்நுழையவில்லை","User Name":"பயனர் பெயர்",copy:K2,"Network is slow, enable offline mode?":"இணையம் மந்தமாக உள்ளது. ஆஃப்லைன் முறையை செயல்படுத்தலாமா?","Enable offline mode":"ஆஃப்லைன் முறையை செயல்படுத்தவும்","PChip Reader":"PChip Reader",male:J2,female:W2,"popular neutral":"பிரபலமான நடுநிலை","Offline mode":"ஆஃப்லைன் முறை","Change nickname":"புனைப்பெயரை மாற்றவும்","UI Language":"பயனர் இடைமுக மொழி",Word:q2,Date:"தேதி","My bookshelf":"என் புத்தகத் தட்டு","Title too short":"தலைப்பு குறைவாக உள்ளது","Modification successful":"மாற்றம் வெற்றிகரமாக হয়েছে","No books in your shelf yet":"உங்கள் புத்தகத் தட்டில் இன்னும் புத்தகங்கள் இல்லை","Tap the search icon above to browse books and add them to your shelf!":"மேலுள்ள தேடல் ஐகானைத் தொட்டு புத்தகங்களை தேடவும், விரும்பியவற்றை உங்கள் தட்டில் சேர்க்கவும்!","Read with experts to help you understand,":"உங்கள் புரிதலை மேம்படுத்த நிபுணர்களுடன் சேர்ந்து வாசிக்கவும்,","Comprehensive training in English listening and reading.":"ஆங்கிலக் கேட்கும் திறனும் வாசிக்கும் திறனும் இரண்டிலும் முழுமையான பயிற்சி.","Hi, {{nickName}}! Welcome!":"வணக்கம், {{nickName}}! வரவேற்கிறோம்!","Browse library":"நூலகத்தை உலாவவும்","Add your own TXT/PDF":"உங்கள் சொந்த TXT/PDF கோப்புகளைச் சேர்க்கவும்","Already have an account?":"ஏற்கனவே ஒரு கணக்கு உங்களிடம் உள்ளதா?","Click here to login":"உள்நுழைய இங்கே சொடுக்கவும்","We detected this is your first time using PChip Reader. Add some books!":"நாங்கள் இது உங்கள் முதன்முறையான PChip Reader பயன்பாடு என கண்டறிந்தோம். சில புத்தகங்களைச் சேர்க்கவும்!","Upload Book":"புத்தகம் பதிவேற்றவும்","Click here to upload local EPUB/MOBI/PDF/TXT":"உங்கள் சாதனத்தில் உள்ள EPUB/MOBI/PDF/TXT கோப்புகளை பதிவேற்ற இங்கே சொடுக்கவும்","Only EPUB/MOBI/PDF/TXT is supported":"மட்டுமே EPUB/MOBI/PDF/TXT கோப்புகள் ஆதரிக்கப்படுகின்றன","Upload successful":"பதிவேற்றம் வெற்றிகரமாக முடிந்தது","Book upload failed":"புத்தகப் பதிவேற்றம் தோல்வியடைந்தது","We only store your files locally!":"நாங்கள் உங்கள் கோப்புகளை உங்கள் சாதனத்தில் மட்டுமே சேமிக்கிறோம்!","New words":"புதிய சொற்கள்","Total reading":"மொத்த வாசிப்பு","Today's reading":"இன்றைய வாசிப்பு","Please choose an image file":"தயவுசெய்து ஒரு பட கோப்பை தேர்ந்தெடுக்கவும்","Image sent":"படம் அனுப்பப்பட்டுள்ளது","Failed to upload image":"படத்தை பதிவேற்ற முடியவில்லை","analyzing grammar structure":"வாக்கியக் கட்டமைப்பை ஆய்வு செய்கிறோம்","understanding pronunciation":"உச்சரிப்பை புரிந்துகொள்கிறோம்","optimizing and restructuring":"மெருகூட்டுதல் மற்றும் மறுசீரமைத்தல்","My QR Code":"என் QR குறியீடு","Let friends scan to fill your username automatically":"நண்பர்கள் ஸ்கேன் செய்தால் உங்கள் பயனர் பெயர் தானாக நிரப்பப்படும்","Unable to load image":"படத்தை ஏற்ற முடியவில்லை","Loading image...":"படம் ஏற்றப்படுகிறது...","Shared image":"பகிரப்பட்ட படம்","QR scanning is unavailable in this environment":"இந்த சூழலில் QR ஸ்கேனிங் கிடைக்கவில்லை","Camera access is not supported on this device":"இந்த சாதனத்தில் கேமராவிற்கான அணுகல் ஆதரிக்கப்படவில்லை","Unable to access the camera":"கேமராவை அணுக முடியவில்லை","No QR code found in the selected image":"தேர்ந்தெடுக்கப்பட்ட படத்தில் QR குறியீடு காணப்படவில்லை","Unable to read QR code from the selected image":"தேர்ந்தெடுக்கப்பட்ட படத்தில் இருந்து QR குறியீட்டை படிக்க முடியவில்லை","Username captured from QR code":"QR குறியீட்டிலிருந்து பயனர் பெயர் பிடிக்கப்பட்டது","Initializing camera...":"கேமரா தொடங்கப்படுகிறது...","Scan QR Code":"QR குறியீட்டை ஸ்கேன் செய்யவும்","Align the QR code within the frame to capture a username automatically.":"பயனர் பெயரை தானாகப் பிடிக்க QR குறியீட்டை பிரேமுக்குள் சமநிலைப்படுத்தவும்.","Login Success":"உள்நுழைவு வெற்றிகரமாக முடிந்தது","please enter your phone number":"தயவுசெய்து உங்கள் தொலைபேசி எண்ணை உள்ளிடவும்","Please enter your phone number":"தயவுசெய்து உங்கள் தொலைபேசி எண்ணை உள்ளிடவும்",Login:X2,"Terms&Conditions":"விதிமுறைகள் மற்றும் நிபந்தனைகள்",and:Y2,"Privacy Policy":"தனியுரிமைக் கொள்கை","Unregistered phone numbers will automatically create an account":"பதிவ்செய்யப்படாத தொலைபேசி எண்கள் தானாகவே ஒரு கணக்கை உருவாக்கும்","Please enter the verification code":"தயவுசெய்து சரிபார்ப்பு குறியீட்டை உள்ளிடவும்","Send verification code":"சரிபார்ப்பு குறியீட்டை அனுப்பவும்","Please enter the correct phone number":"தயவுசெய்து சரியான தொலைபேசி எண்ணை உள்ளிடவும்","Verification code sent":"சரிபார்ப்பு குறியீடு அனுப்பப்பட்டது",Language:Z2,Skip:eR,Continue:tR,"Are you 18 or older?":"நீங்கள் 18 வயது அல்லது அதற்கு மேற்பட்டவரா?",Yes:nR,No:aR,"Please select language what you want to learn":"நீங்கள் கற்க விரும்பும் மொழியை தேர்ந்தெடுக்கவும்","Please enter your age":"உங்கள் வயதை உள்ளிடவும்",Age:oR,"Please select your gender":"தயவுசெய்து உங்கள் பாலினத்தை தேர்ந்தெடுக்கவும்",Female:iR,Male:rR,"Your {{langShort}} name":"உங்கள் {{langShort}} பெயர்","Create your own name or choose from the recommendations":"உங்கள் சொந்தப் பெயரை உருவாக்கவும் அல்லது பரிந்துரைகளிலிருந்து ஒன்றை தேர்ந்தெடுக்கவும்","Enter your nickname here...":"இங்கே உங்கள் நிக்க்நேத்தை உள்ளிடவும்...","Learning Language":"கற்றுக்கொள்ளும் மொழி",Finish:sR,"Nickname is required":"தயவுசெய்து நிக்க்நேம் நிரப்பவும்","Nickname must be at least 3 characters":"நிக்க்நேம் குறைந்தபட்சம் 3 எழுத்துகள் இருக்க வேண்டும்",Confirm:lR,"Account Phone":"கணக்கு தொலைபேசி எண்",Gender:cR,Education:uR,Job:dR,Hobby:hR,"Select your role":"உங்கள் பங்கை தேர்ந்தெடுக்கவும்","Please choose your identity":"தயவுசெய்து உங்கள் அடையாளத்தை தேர்ந்தெடுக்கவும்","Profile Step: Nickname":"அழைப்புப் பெயர்","Profile Step: Learning Language":"கற்றுக்கொள்ளும் மொழி","Profile Step: Mother Tongue":"தாய்மொழி","By signing up, you agree with ":"பதிவு செய்வதன் மூலம், நீங்கள் விதிமுறைகளையும் கொள்கைகளையும் ஏற்றுக்கொள்கிறீர்கள் "},pR="секунд",mR="Наставник",gR="Напарник",yR="Англійська",vR="Китайська",bR="Іспанська",PR="Корейська",wR="Французька",CR="Японська",AR="Німецька",SR="Арабська",TR="Переклад",kR="Тлумачення",$R="Граматика",RR="Будь ласка, зачекайте відповіді інших, щоб продовжити особисте повідомлення.",xR="Ви ще не приєднані до цієї групи. Будь ласка, зачекайте, поки власник схвалить ваш запит.",ER="Чат",MR="Контакти",LR="Вийти",NR="Цитата",FR="Переглянути",IR="Відкликати",UR="Перекласти",OR="Згорнути",DR="Повідомлення",BR="Навчання",VR="Відкриття",GR="Мій профіль",jR="розробки",zR="Назад",_R="Групи",HR="Додати",QR="Не вдалося",KR="Створити",JR="Оновити",WR="ParrotMate",qR="Копіювати",XR="Чоловічий",YR="Жіночий",ZR="Слово",ex="Увійти",tx="та",nx="Мова",ax="Пропустити",ox="Продовжити",ix="Так",rx="Ні",sx="Вік",lx="Жінка",cx="Чоловік",ux="Завершити",dx="Підтвердити",hx="Стать",fx="Освіта",px="Професія",mx="Хобі",gx={seconds:pR,"Send Code":"Надіслати код","Add Profile":"Додати профіль",Practitioner:mR,"I want to practice languages and chat with others":"Хочу практикувати мови й спілкуватися з іншими",Mate:gR,"I can guide language learning and provide companionship":"Я можу допомагати у вивченні мов і скласти приємну компанію","Unknown error":"Сталася невідома помилка. Будь ласка, спробуйте ще раз.",English:yR,Chinese:vR,Spanish:bR,Korean:PR,French:wR,Japanese:CR,German:AR,Arabic:SR,Translation:TR,Interpretation:kR,"Key Vocabulary & Terms":"Ключова лексика та терміни",Grammar:$R,DM_ACL_REJECT:RR,GROUP_ACL_REJECT:xR,"Tree Hole":"Секретний куточок",Chat:ER,Contacts:MR,"Remove Contact":"Видалити контакт","Exit Group":"Вийти з групи","Chat Settings":"Налаштування чату","Awaiting friend confirmation":"Чекаємо підтвердження від друга","Revision failed":"Не вдалося виконати ревізію","Please use English":"Будь ласка, використовуйте англійську","Speech recognition failed. Please try again.":"Розпізнавання мовлення не вдалося. Будь ласка, спробуйте ще раз.","analyzing...":"Аналізую...","Loading profiles...":"Завантаження профілів...","Add Friend":"Додати друга","Create Group":"Створити групу",Logout:LR,"Copied username to clipboard":"Ім'я користувача скопійовано в буфер обміну","Switch Identity":"Змінити обліковий запис",Function:"Функція",Quote:NR,"Instructions(Optional)":"Інструкції (необов'язково)","joined the room":"приєднався до кімнати","left the room":"покинув кімнату",View:FR,Recall:IR,"Hide Translation":"Приховати переклад",Translate:UR,Collapse:OR,"Before you accept, she won’t know you've seen any messages.":"Поки ви не приймете, вона не дізнається, що ви бачили повідомлення.","Allow {{name}} to send you messages and share your name and profile picture?":"Дозволити {{name}} надсилати вам повідомлення та бачити ваше ім'я та фото профілю?",Message:DR,Study:BR,Discover:VR,Me:GR,"coming soon":"Незабаром","This feature is under":"Ця функція знаходиться на стадії",development:jR,Back:zR,"Search contacts or groups":"Шукати контакти або групи",Groups:_R,"No Results":"Результатів не знайдено","Say Hi":"Написати привіт",Add:HR,"Find Friend":"Знайти друга","Input Username":"Введіть ім'я користувача","my account: ":"мій акаунт: ","Already Applied":"Запит вже надіслано","User is blocked":"Користувач заблокований",Failed:QR,"Please select at least one member":"Будь ласка, виберіть принаймні одного учасника","Group created":"Групу успішно створено","Group Name":"Назва групи","Group Name is required":"Потрібно вказати назву групи","Loading...":"Завантаження...",Create:KR,"Group updated":"Групу успішно оновлено","Update Group":"Оновити групу",Update:JR,"No Chats":"Немає чатів",ParrotMate:WR,"Speak Different":"Говори по-іншому","Not logged in":"Не ввійшли в систему","User Name":"Ім'я користувача",copy:qR,"Network is slow, enable offline mode?":"Мережа повільна. Увімкнути офлайн-режим?","Enable offline mode":"Увімкнути офлайн-режим","PChip Reader":"PChip Reader",male:XR,female:YR,"popular neutral":"Популярно-нейтральний","Offline mode":"Офлайн-режим","Change nickname":"Змінити нікнейм","UI Language":"Мова інтерфейсу",Word:ZR,Date:"Дата","My bookshelf":"Моя книжкова полиця","Title too short":"Заголовок надто короткий","Modification successful":"Зміни успішно застосовано","No books in your shelf yet":"На вашій полиці ще немає книг","Tap the search icon above to browse books and add them to your shelf!":"Натисніть іконку пошуку вгорі, щоб знайти книги й додати їх до своєї полиці!","Read with experts to help you understand,":"Читайте разом із експертами, щоб краще розуміти матеріал,","Comprehensive training in English listening and reading.":"Комплексна підготовка з аудіювання та читання англійською.","Hi, {{nickName}}! Welcome!":"Привіт, {{nickName}}! Ласкаво просимо!","Browse library":"Переглянути бібліотеку","Add your own TXT/PDF":"Додайте свої файли TXT/PDF","Already have an account?":"Вже маєте обліковий запис?","Click here to login":"Натисніть тут, щоб увійти","We detected this is your first time using PChip Reader. Add some books!":"Схоже, ви вперше користуєтесь PChip Reader. Додайте кілька книг!","Upload Book":"Завантажити книгу","Click here to upload local EPUB/MOBI/PDF/TXT":"Натисніть тут, щоб завантажити локальні файли EPUB/MOBI/PDF/TXT","Only EPUB/MOBI/PDF/TXT is supported":"Підтримуються лише формати EPUB, MOBI, PDF та TXT","Upload successful":"Книгу успішно завантажено","Book upload failed":"Не вдалося завантажити книгу","We only store your files locally!":"Ми зберігаємо ваші файли лише локально!","New words":"Нові слова","Total reading":"Загальний час читання","Today's reading":"Час читання сьогодні","Please choose an image file":"Будь ласка, оберіть файл зображення","Image sent":"Зображення надіслано","Failed to upload image":"Не вдалося завантажити зображення","analyzing grammar structure":"аналізую граматичну структуру","understanding pronunciation":"аналізую вимову","optimizing and restructuring":"оптимізую та переструктуровую","My QR Code":"Мій QR-код","Let friends scan to fill your username automatically":"Дайте друзям змогу відсканувати QR-код, щоб автоматично заповнити ваше ім'я користувача","Unable to load image":"Не вдається завантажити зображення","Loading image...":"Завантаження зображення...","Shared image":"Надіслане зображення","QR scanning is unavailable in this environment":"Сканування QR-кодів недоступне в цьому середовищі","Camera access is not supported on this device":"Цей пристрій не підтримує доступ до камери","Unable to access the camera":"Не вдалося отримати доступ до камери","No QR code found in the selected image":"У вибраному зображенні не знайдено QR-коду","Unable to read QR code from the selected image":"Не вдається розпізнати QR-код у вибраному зображенні","Username captured from QR code":"Ім'я користувача зчитано з QR-коду","Initializing camera...":"Підготовка камери...","Scan QR Code":"Сканувати QR-код","Align the QR code within the frame to capture a username automatically.":"Розмістіть QR-код у рамці, щоб автоматично зчитати ім'я користувача.","Login Success":"Успішний вхід","please enter your phone number":"будь ласка, введіть свій номер телефону","Please enter your phone number":"Будь ласка, введіть свій номер телефону",Login:ex,"Terms&Conditions":"Умови та положення",and:tx,"Privacy Policy":"Політика конфіденційності","Unregistered phone numbers will automatically create an account":"Якщо номер телефону не зареєстрований, буде автоматично створено обліковий запис","Please enter the verification code":"Будь ласка, введіть код підтвердження","Send verification code":"Надіслати код підтвердження","Please enter the correct phone number":"Будь ласка, введіть правильний номер телефону","Verification code sent":"Код підтвердження надіслано",Language:nx,Skip:ax,Continue:ox,"Are you 18 or older?":"Вам 18 років чи більше?",Yes:ix,No:rx,"Please select language what you want to learn":"Будь ласка, оберіть мову, яку хочете вивчати","Please enter your age":"Вкажіть, будь ласка, свій вік",Age:sx,"Please select your gender":"Оберіть, будь ласка, свою стать",Female:lx,Male:cx,"Your {{langShort}} name":"Ваше {{langShort}} ім'я","Create your own name or choose from the recommendations":"Придумайте власне ім'я або оберіть із рекомендацій","Enter your nickname here...":"Введіть тут свій нік...","Learning Language":"Мова, яку ви вивчаєте",Finish:ux,"Nickname is required":"Нік обов'язковий","Nickname must be at least 3 characters":"Нік має містити щонайменше 3 символи",Confirm:dx,"Account Phone":"Телефон облікового запису",Gender:hx,Education:fx,Job:px,Hobby:mx,"Select your role":"Оберіть свою роль","Please choose your identity":"Будь ласка, оберіть свою ідентичність","Profile Step: Nickname":"Нік","Profile Step: Learning Language":"Мова, яку ви вивчаєте","Profile Step: Mother Tongue":"Рідна мова","By signing up, you agree with ":"Реєструючись, ви погоджуєтеся з "},yx="操作失败",vx="添加",bx="创建",Px="消息",wx="学习",Cx="发现",Ax="我",Sx="更新",Tx="聊天",kx="联系人",$x="退出登录",Rx="引用",xx="查看",Ex="撤回",Mx="翻译",Lx="收起",Nx="复制",Fx="男",Ix="女",Ux="秒",Ox="导师",Dx="语伴",Bx="英语",Vx="中文",Gx="西班牙语",jx="韩语",zx="法语",_x="日语",Hx="德语",Qx="阿拉伯语",Kx="翻译",Jx="释义",Wx="语法",qx="请等待对方回复后再继续私信。",Xx="您还未加入此群,请等待群主批准您的申请。",Yx="开发中",Zx="返回",eE="群组",tE="ParrotMate",nE="单词",aE="登录",oE="和",iE="语言",rE="跳过",sE="继续",lE="是",cE="否",uE="年龄",dE="女性",hE="男性",fE="完成",pE="确认",mE="性别",gE="学历",yE="职业",vE="兴趣爱好",bE={"Network is slow, enable offline mode?":"网络连接较慢,是否启用离线模式?","Enable offline mode":"启用离线模式","Modification successful":"修改成功",Failed:yx,"Say Hi":"Hi",Add:vx,"Please select at least one member":"请至少选择一名成员","Group created":"群组已创建","Create Group":"创建群组","Group Name":"群组名称","Group Name is required":"请填写群组名称","Loading...":"加载中...",Create:bx,Message:Px,Study:wx,Discover:Cx,Me:Ax,"Find Friend":"查找好友","Input Username":"输入用户名","my account: ":"我的账号: ","Already Applied":"已发送申请","User is blocked":"该用户已被屏蔽","Group updated":"群组已更新","Update Group":"更新群组",Update:Sx,"Tree Hole":"树洞",Chat:Tx,Contacts:kx,"Remove Contact":"移除联系人","Exit Group":"退出群组","Chat Settings":"聊天设置","Awaiting friend confirmation":"等待对方确认","Revision failed":"润色失败","Please use English":"请使用英语","Speech recognition failed. Please try again.":"语音识别失败,请重试。","analyzing...":"正在分析...","Loading profiles...":"正在加载个人资料...","Add Friend":"添加好友",Logout:$x,"Copied username to clipboard":"用户名已复制到剪贴板","Switch Identity":"切换身份",Function:"功能",Quote:Rx,"Instructions(Optional)":"说明(可选)","joined the room":"已加入房间","left the room":"已离开房间",View:xx,Recall:Ex,"Hide Translation":"隐藏翻译",Translate:Mx,Collapse:Lx,"Before you accept, she won’t know you've seen any messages.":"在你接受之前,她不会知道你已查看任何消息。","Allow {{name}} to send you messages and share your name and profile picture?":"允许 {{name}} 向你发送消息,并查看你的姓名和头像吗?","Not logged in":"未登录","User Name":"用户名",copy:Nx,"PChip Reader":"PChip 阅读器",male:Fx,female:Ix,"popular neutral":"热门(中性)",seconds:Ux,"Send Code":"发送验证码","Add Profile":"添加个人资料",Practitioner:Ox,"I want to practice languages and chat with others":"我想练习语言并与他人交流",Mate:Dx,"I can guide language learning and provide companionship":"我可以指导语言学习并提供陪伴","Unknown error":"未知错误",English:Bx,Chinese:Vx,Spanish:Gx,Korean:jx,French:zx,Japanese:_x,German:Hx,Arabic:Qx,Translation:Kx,Interpretation:Jx,"Key Vocabulary & Terms":"重点词汇与术语",Grammar:Wx,DM_ACL_REJECT:qx,GROUP_ACL_REJECT:Xx,"coming soon":"敬请期待","This feature is under":"该功能正在",development:Yx,Back:Zx,"Search contacts or groups":"搜索联系人或群组",Groups:eE,"No Results":"未找到结果","No Chats":"暂无聊天",ParrotMate:tE,"Speak Different":"说得与众不同","Offline mode":"离线模式","Change nickname":"修改昵称","UI Language":"界面语言",Word:nE,Date:"日期","My bookshelf":"我的书架","Title too short":"标题太短","No books in your shelf yet":"书架中还没有书籍","Tap the search icon above to browse books and add them to your shelf!":"点击上方的搜索图标,浏览书籍并将它们加入书架!","Read with experts to help you understand,":"与专家一同阅读,帮助你更好地理解,","Comprehensive training in English listening and reading.":"全面提升英语听力与阅读能力。","Hi, {{nickName}}! Welcome!":"嗨,{{nickName}}!欢迎!","Browse library":"浏览书库","Add your own TXT/PDF":"添加您自己的 TXT/PDF 文件","Already have an account?":"已有账号?","Click here to login":"点击此处登录","We detected this is your first time using PChip Reader. Add some books!":"我们检测到这是您第一次使用 PChip Reader。快添加几本书吧!","Upload Book":"上传书籍","Click here to upload local EPUB/MOBI/PDF/TXT":"点击此处上传本地 EPUB/MOBI/PDF/TXT 文件","Only EPUB/MOBI/PDF/TXT is supported":"仅支持 EPUB、MOBI、PDF 和 TXT 格式","Upload successful":"上传成功","Book upload failed":"书籍上传失败","We only store your files locally!":"我们仅在本地存储您的文件!","New words":"生词","Total reading":"累计阅读","Today's reading":"今日阅读","Please choose an image file":"请选择图片文件","Image sent":"图片已发送","Failed to upload image":"图片上传失败","analyzing grammar structure":"正在分析语法结构","understanding pronunciation":"正在分析发音","optimizing and restructuring":"正在优化与重组","My QR Code":"我的二维码","Let friends scan to fill your username automatically":"让好友扫码即可自动填写你的用户名","Unable to load image":"无法加载图片","Loading image...":"正在加载图片...","Shared image":"已分享的图片","QR scanning is unavailable in this environment":"当前环境不支持二维码扫描","Camera access is not supported on this device":"此设备不支持相机访问","Unable to access the camera":"无法访问相机","No QR code found in the selected image":"所选图片中未发现二维码","Unable to read QR code from the selected image":"无法从所选图片读取二维码","Username captured from QR code":"已从二维码识别出用户名","Initializing camera...":"正在初始化相机...","Scan QR Code":"扫描二维码","Align the QR code within the frame to capture a username automatically.":"将二维码对准框内,即可自动识别并填写用户名。","Login Success":"登录成功","please enter your phone number":"请输入您的手机号码","Please enter your phone number":"请输入您的手机号码",Login:aE,"Terms&Conditions":"服务条款",and:oE,"Privacy Policy":"隐私政策","Unregistered phone numbers will automatically create an account":"未注册的手机号将自动创建账号","Please enter the verification code":"请输入验证码","Send verification code":"发送验证码","Please enter the correct phone number":"请输入正确的手机号码","Verification code sent":"验证码已发送",Language:iE,Skip:rE,Continue:sE,"Are you 18 or older?":"您是否已满18岁?",Yes:lE,No:cE,"Please select language what you want to learn":"请选择您想学习的语言","Please enter your age":"请输入您的年龄",Age:uE,"Please select your gender":"请选择您的性别",Female:dE,Male:hE,"Your {{langShort}} name":"您的{{langShort}}名字","Create your own name or choose from the recommendations":"您可以自创名字,或从推荐中选择","Enter your nickname here...":"在此输入您的昵称...","Learning Language":"学习语言",Finish:fE,"Nickname is required":"请填写昵称","Nickname must be at least 3 characters":"昵称至少需要 3 个字符",Confirm:pE,"Account Phone":"账号手机号",Gender:mE,Education:gE,Job:yE,Hobby:vE,"Select your role":"请选择您的角色","Please choose your identity":"请选择您的身份","Profile Step: Nickname":"昵称","Profile Step: Learning Language":"学习的语言","Profile Step: Mother Tongue":"母语","By signing up, you agree with ":"注册即表示您同意 "},PE="秒",wE="導師",CE="語言夥伴",AE="英文",SE="中文",TE="西班牙語",kE="韓語",$E="法語",RE="日語",xE="德語",EE="阿拉伯語",ME="翻譯",LE="解釋",NE="文法",FE="請先等待對方回覆,才能繼續私訊。",IE="您還未加入此群組,請等待群主批准您的加入申請。",UE="聊天",OE="聯絡人",DE="登出",BE="引用",VE="查看",GE="收回",jE="翻譯",zE="收合",_E="訊息",HE="學習",QE="發現",KE="我",JE="開發中",WE="返回",qE="群組",XE="加入好友",YE="操作失敗",ZE="建立",eM="更新",tM="ParrotMate",nM="複製",aM="男性",oM="女性",iM="單字",rM="登入",sM="以及",lM="語言",cM="跳過",uM="繼續",dM="是",hM="否",fM="年齡",pM="女性",mM="男性",gM="完成",yM="確認",vM="性別",bM="學歷",PM="職業",wM="興趣",CM={seconds:PE,"Send Code":"發送驗證碼","Add Profile":"新增個人檔案",Practitioner:wE,"I want to practice languages and chat with others":"我想練習語言並與他人聊天",Mate:CE,"I can guide language learning and provide companionship":"我可以協助語言學習並提供陪伴","Unknown error":"發生未知錯誤",English:AE,Chinese:SE,Spanish:TE,Korean:kE,French:$E,Japanese:RE,German:xE,Arabic:EE,Translation:ME,Interpretation:LE,"Key Vocabulary & Terms":"重點詞彙與術語",Grammar:NE,DM_ACL_REJECT:FE,GROUP_ACL_REJECT:IE,"Tree Hole":"樹洞",Chat:UE,Contacts:OE,"Remove Contact":"移除聯絡人","Exit Group":"離開群組","Chat Settings":"聊天設定","Awaiting friend confirmation":"等待好友確認","Revision failed":"修正失敗","Please use English":"請使用英文","Speech recognition failed. Please try again.":"語音辨識失敗,請再試一次。","analyzing...":"分析中...","Loading profiles...":"正在載入個人檔案...","Add Friend":"新增好友","Create Group":"建立群組",Logout:DE,"Copied username to clipboard":"已將使用者名稱複製到剪貼簿","Switch Identity":"切換身分",Function:"功能",Quote:BE,"Instructions(Optional)":"說明(選填)","joined the room":"已加入房間","left the room":"已離開房間",View:VE,Recall:GE,"Hide Translation":"隱藏翻譯",Translate:jE,Collapse:zE,"Before you accept, she won’t know you've seen any messages.":"在你接受前,對方不會知道你已讀任何訊息。","Allow {{name}} to send you messages and share your name and profile picture?":"允許 {{name}} 向你發送訊息,並查看你的姓名與頭像嗎?",Message:_E,Study:HE,Discover:QE,Me:KE,"coming soon":"即將推出","This feature is under":"此功能正在",development:JE,Back:WE,"Search contacts or groups":"搜尋聯絡人或群組",Groups:qE,"No Results":"沒有搜尋結果","Say Hi":"打個招呼",Add:XE,"Find Friend":"搜尋好友","Input Username":"請輸入使用者名稱","my account: ":"我的帳號: ","Already Applied":"已申請","User is blocked":"該使用者已被封鎖",Failed:YE,"Please select at least one member":"請至少選擇一位成員","Group created":"群組已建立","Group Name":"群組名稱","Group Name is required":"請輸入群組名稱","Loading...":"載入中...",Create:ZE,"Group updated":"群組已更新","Update Group":"更新群組",Update:eM,"No Chats":"尚無對話",ParrotMate:tM,"Speak Different":"用不同的方式說話","Not logged in":"尚未登入","User Name":"使用者名稱",copy:nM,"Network is slow, enable offline mode?":"網路連線較慢,是否要啟用離線模式?","Enable offline mode":"啟用離線模式","PChip Reader":"PChip 閱讀器",male:aM,female:oM,"popular neutral":"熱門/中性","Offline mode":"離線模式","Change nickname":"更改暱稱","UI Language":"介面語言",Word:iM,Date:"日期","My bookshelf":"我的書架","Title too short":"標題太短","Modification successful":"修改成功","No books in your shelf yet":"你的書架尚無書籍","Tap the search icon above to browse books and add them to your shelf!":"點選上方的搜尋圖示,瀏覽書籍並加入至你的書架!","Read with experts to help you understand,":"與專家一同閱讀,幫助你理解,","Comprehensive training in English listening and reading.":"提供全方位的英語聽力與閱讀訓練。","Hi, {{nickName}}! Welcome!":"嗨,{{nickName}}!歡迎!","Browse library":"瀏覽書庫","Add your own TXT/PDF":"新增您自己的 TXT/PDF 檔案","Already have an account?":"已經有帳號了嗎?","Click here to login":"點此登入","We detected this is your first time using PChip Reader. Add some books!":"我們偵測到這是您第一次使用 PChip Reader,快新增幾本書吧!","Upload Book":"上傳書籍","Click here to upload local EPUB/MOBI/PDF/TXT":"點此上傳本機 EPUB/MOBI/PDF/TXT 檔案","Only EPUB/MOBI/PDF/TXT is supported":"僅支援 EPUB/MOBI/PDF/TXT 檔案","Upload successful":"上傳成功","Book upload failed":"書籍上傳失敗","We only store your files locally!":"我們僅在本機儲存您的檔案!","New words":"新單字","Total reading":"累計閱讀","Today's reading":"今日閱讀","Please choose an image file":"請選取圖片檔案","Image sent":"圖片已傳送","Failed to upload image":"圖片上傳失敗","analyzing grammar structure":"正在分析語法結構","understanding pronunciation":"正在分析發音","optimizing and restructuring":"正在優化與重組","My QR Code":"我的 QR 碼","Let friends scan to fill your username automatically":"讓朋友掃描即可自動填入你的使用者名稱","Unable to load image":"無法載入圖片","Loading image...":"正在載入圖片...","Shared image":"分享的圖片","QR scanning is unavailable in this environment":"此環境無法使用 QR 掃描功能","Camera access is not supported on this device":"此裝置不支援相機存取","Unable to access the camera":"無法存取相機","No QR code found in the selected image":"在所選圖片中找不到 QR 碼","Unable to read QR code from the selected image":"無法從所選圖片讀取 QR 碼","Username captured from QR code":"已從 QR 碼擷取到使用者名稱","Initializing camera...":"正在初始化相機...","Scan QR Code":"掃描 QR 碼","Align the QR code within the frame to capture a username automatically.":"將 QR 碼對準框內,即可自動擷取使用者名稱。","Login Success":"登入成功","please enter your phone number":"請輸入您的手機號碼","Please enter your phone number":"請輸入您的手機號碼",Login:rM,"Terms&Conditions":"服務條款",and:sM,"Privacy Policy":"隱私政策","Unregistered phone numbers will automatically create an account":"未註冊的手機號碼將自動建立新帳號","Please enter the verification code":"請輸入驗證碼","Send verification code":"發送驗證碼","Please enter the correct phone number":"請輸入正確的手機號碼","Verification code sent":"驗證碼已發送",Language:lM,Skip:cM,Continue:uM,"Are you 18 or older?":"您是否已滿18歲?",Yes:dM,No:hM,"Please select language what you want to learn":"請選擇您想學習的語言","Please enter your age":"請輸入您的年齡",Age:fM,"Please select your gender":"請選擇您的性別",Female:pM,Male:mM,"Your {{langShort}} name":"您的 {{langShort}} 名稱","Create your own name or choose from the recommendations":"自訂名稱或從建議中選擇","Enter your nickname here...":"在此輸入您的暱稱...","Learning Language":"學習語言",Finish:gM,"Nickname is required":"請填寫暱稱","Nickname must be at least 3 characters":"暱稱至少需 3 個字元",Confirm:yM,"Account Phone":"帳戶電話",Gender:vM,Education:bM,Job:PM,Hobby:wM,"Select your role":"請選擇您的角色","Please choose your identity":"請選擇您的身份","Profile Step: Nickname":"暱稱","Profile Step: Learning Language":"學習語言","Profile Step: Mother Tongue":"母語","By signing up, you agree with ":"註冊即表示您同意 "};$e.use(vm).init({resources:{en:{translation:Fv},"ar-SA":{translation:Tg},"de-DE":{translation:Ry},"el-GR":{translation:M0},"es-ES":{translation:Ob},"fi-FI":{translation:V1},"fil-PH":{translation:zP},"fr-FR":{translation:Qw},"hi-IN":{translation:WC},"ja-JP":{translation:YA},"ko-KR":{translation:tT},"pt-BR":{translation:ok},"pt-PT":{translation:s$},"ru-RU":{translation:u2},"ta-IN":{translation:fR},"uk-UA":{translation:gx},"zh-CN":{translation:bE},"zh-TW":{translation:CM}},supportedLngs:Array.from(ic),fallbackLng:"zh-CN",interpolation:{escapeValue:!1}});const AM=()=>Cm().t,SM="w-[6rem] h-[2.25rem] rounded-[2rem] text-[0.875rem] transition-all",TM="mt-[0.75rem] text-[0.875rem] flex justify-center flex-wrap gap-x-[0.625rem]";z.forwardRef(({value:t,defaultValue:e,onChange:n,name:a,className:o,...i},r)=>{const s=AM(),c=[{title:s("male"),variant:"secondary",names:["Leo","Eric","Jason"]},{title:s("female"),variant:"accent",names:["Lily","Emma","Mia"]},{title:s("popular neutral"),variant:"plain",names:["Alex","Jamie","Taylor"]}],h=t??e??"",l=d=>{n?.({target:{value:d,name:a}})};return oe.jsxs("div",{className:["flex flex-col gap-y-[1.25rem]",o].filter(Boolean).join(" "),children:[oe.jsx("input",{type:"hidden",value:h,name:a,ref:r,...i}),c.map(d=>oe.jsxs("div",{children:[oe.jsx("div",{className:"ml-[3.1rem] text-[1.125rem] text-white",children:d.title}),oe.jsx("div",{className:TM,children:d.names.map(u=>oe.jsx(mo,{className:[SM,h===u?"ring-2 ring-white":""].filter(Boolean).join(" "),variant:d.variant,onClick:()=>l(u),children:u},u))})]},d.title))]})});const kM={light:{primary:"bg-white text-grey90 placeholder-gray-400 focus:border-violet-500"},dark:{primary:"bg-white text-grey90 placeholder-gray-400 focus:border-violet-500"}};z.forwardRef(({type:t="text",multiline:e=!1,value:n,defaultValue:a,variant:o="primary",placeholder:i,disabled:r=!1,onChange:s,onFocus:c,onBlur:h,className:l,id:d,style:u,...f},m)=>{const P=zl(),A=kM[P][o],b={ref:m,value:n,defaultValue:a,placeholder:i,disabled:r,onChange:s,onFocus:c,onBlur:h,id:d,"data-uikit":"input_field",style:u,className:Gt("rounded-xl px-4 py-2 border border-transparent focus:outline-none transition-colors duration-200",A,l),...f};return e?oe.jsx("textarea",{...b}):oe.jsx("input",{type:t,...b})});const $M=({open:t,onClose:e,children:n,anchor:a="right",className:o,overlayClassName:i,id:r,styles:s})=>{const[c,h]=z.useState(t);z.useEffect(()=>{t&&h(!0)},[t]);const l=()=>{t||h(!1)};if(!c)return null;const d={left:"left-0 top-0 h-full",right:"right-0 top-0 h-full",top:"top-0 left-0 w-full",bottom:"bottom-0 left-0 w-full"}[a],u={left:"-translate-x-full",right:"translate-x-full",top:"-translate-y-full",bottom:"translate-y-full"}[a];return oe.jsx("div",{id:r,"data-uikit":"drawer",className:Gt("fixed inset-0 z-[1002]",i),onClick:e,children:oe.jsx("div",{className:Gt("absolute bg-white transition-transform duration-300",d,t?"translate-x-0 translate-y-0":u,o),style:s,onClick:f=>f.stopPropagation(),onTransitionEnd:l,children:n})})},RM="pointer-events-none absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 rounded-full animate-ping",xM=[{sizeRem:3.2,durationMs:1300,opacity:.3,shadowBlurPx:6},{sizeRem:3.6,durationMs:1600,delayMs:200,opacity:.25,shadowBlurPx:8},{sizeRem:3.8,durationMs:1900,delayMs:400,opacity:.2,shadowBlurPx:10}],EM=(t,e=1)=>{const n=t.startsWith("#")?t.slice(1):null;if(!n)return t;const a=n.length===3?n.split("").map(s=>s+s).join(""):n;if(a.length!==6)return t;const[o,i,r]=[a.slice(0,2),a.slice(2,4),a.slice(4,6)].map(s=>parseInt(s,16));return`rgba(${o}, ${i}, ${r}, ${e})`},MM=z.memo(({color:t="#9C6BFF",rings:e=xM,ringClassName:n})=>oe.jsx(oe.Fragment,{children:e.map((a,o)=>oe.jsx("span",{"aria-hidden":!0,className:Gt(RM,n),style:{width:`${a.sizeRem}rem`,height:`${a.sizeRem}rem`,animationDuration:`${a.durationMs}ms`,animationDelay:a.delayMs!==void 0?`${a.delayMs}ms`:void 0,backgroundColor:EM(t,a.opacity),filter:`drop-shadow(0 0 ${a.shadowBlurPx??6}px ${t})`}},o))}));MM.displayName="PulseRings";const LM=(t,e={isValid:void 0,placeHolderBehavior:"pending"})=>{const n=we.atom(async a=>{try{const o=await t(a);return kc(o)?o:typeof o>"u"||o===null||e?.isValid&&!e.isValid(o)?le.Nothing():le.Just(o)}catch(o){return le.Fail(o)}});return nu(n,a=>{const{placeHolderBehavior:o,placeHolderValue:i}=e;return i?le.Pending(i):o==="stale"&&a?.isJust()?le.Pending(a.unwrap()):le.Pending()})},NM=LM(async t=>{t(ga);const n=await De.get(Ke()).getAccountState();if(!n)return[];try{return await _e.getProfiles(n)}catch{return[]}}),FM=we.atom(null,async(t,e,n,a)=>{const o=t(ya),i=o&&o.id===n?o:await t(cs(n));if(!i)return;await _e.updateProfile({profileId:i.id,...a});const r=Ke(i.app),s=De.get(r),c={...i,...a};o&&o.id===n&&s.setSelectedProfile(c),await s.getProfiles()}),IM=we.atom(null,async()=>De.get(Ke()).login()),UM=we.atom(null,async()=>{try{return await Ze.session()}catch{return null}}),Jl=we.atom(null,async()=>{await De.get(Ke()).logout()}),OM=we.atom(t=>{const e=t(ya);return Co(e?.motherTongue,"zh-CN")}),DM=we.atom(t=>{const e=t(ya);return Co(e?.learningTargetLang)});var on=(t=>(t.USER_SETTINGS="user-settings",t))(on||{});const Or=bo.atomFamily(t=>we.atom(void 0)),Yn=bo.atomFamily(t=>we.atom(e=>{const n=e(Or(t));if(n)return n;try{const a=localStorage.getItem(t);return a?JSON.parse(a):null}catch{return null}},(e,n,a)=>{localStorage.setItem(t,JSON.stringify(a)),n(Or(t),a)})),Dr={intensive:!1,bilingual:!0,fontColor:"#000000",backgroundColor:"white",books:[],advancedMode:!1,autoread:!0,playSpeed:1,scrollDirection:"vertical",companion:"",difficulty:Zr.Medium,"chatVoice@v2":Et.KOKORO_af_alloy,uiLang:"zh-CN",motherTongue:"zh-CN"},ja=new Map,BM=t=>{if(ja.has(t))return ja.get(t);const e=we.atom(n=>{const a=n(Yn(on.USER_SETTINGS));return a&&t in a?a[t]:Dr[t]},(n,a,o)=>{const r={...n(Yn(on.USER_SETTINGS))??Dr,[t]:o};a(Yn(on.USER_SETTINGS),r)});return ja.set(t,e),e};var VM=function(t){z.useEffect(t,[])};const GM=async({app:t,behaviors:e})=>{const n=De.get(t);if(e.requiresAuth===!1)return n.getSnapshot();try{if(await n.loginUrlSessionOverride()){const o=await n.getProfiles();o.length>0&&n.setSelectedProfile(o[0].id)}return n.getSnapshot()}catch(a){return console.error(a),n.getSnapshot()}},jM=({app:t,behaviors:e})=>{const[n,a]=z.useState(!0),[o,i]=z.useState({state:Ee.Idle,profiles:[],profile:null,accountId:null,account:null,error:null});return VM(()=>{(async()=>{a(!0);const s=await GM({app:t,behaviors:e});i(s),a(!1)})()}),{loading:n,snapshot:o}},Br="https://auth.pmate.chat";class Zn{static toLogin(e,n){if(typeof window>"u")return;const a=new URL(Br);a.searchParams.set("redirect",n??window.location.href),a.searchParams.set("app",e),window.location.href=a.toString()}static toCreateProfile(e,n){if(typeof window>"u")return;const a=new URL("/create-profile",Br);a.searchParams.set("redirect",n??window.location.href),a.searchParams.set("app",e),window.location.href=a.toString()}}class Wl extends Error{}const zM=(t,e)=>{const n=t?.find(i=>{const r=typeof i=="string"?i:i.path;return pa.matchPath({path:r,end:!0},e)});return{authBehavior:n&&typeof n!="string"?n.behavior??"prompt":"prompt",requiresAuth:!!n}},_M=({app:t,authRoutes:e,rtcProvider:n,children:a})=>{const o=pa.useLocation(),[i,r]=z.useState(!1),[s,c]=z.useState(!1),{authBehavior:h,requiresAuth:l}=zM(e,o.pathname),{loading:d,snapshot:u}=jM({app:t,behaviors:{requiresAuth:l}}),f=u.error,m=u.state===Ee.Idle?null:!!u.account;z.useEffect(()=>{if(!(!l||d)){if(u.account&&u.profiles.length===0&&o.pathname!=="/create-profile"){Zn.toCreateProfile(t);return}!u.account&&h==="redirect"&&Zn.toLogin(t)}},[t,h,d,o.pathname,l,u.account,u.profiles.length]),z.useEffect(()=>{d||r(l&&!u.account&&h==="prompt")},[h,d,l,u.account]),z.useEffect(()=>{f||c(!1)},[f]);const P=()=>{if(r(!1),window.history.length>1){window.history.back();return}};if(d&&l)return null;if(f&&l&&!s)return oe.jsx("div",{className:"flex min-h-screen items-center justify-center bg-slate-50 p-6",children:oe.jsxs("div",{className:"w-full max-w-md rounded-xl border border-rose-200 bg-white p-6 shadow-sm",children:[oe.jsx("div",{className:"text-sm font-semibold text-rose-600",children:"Login failed"}),oe.jsx("p",{className:"mt-2 text-sm text-slate-600",children:"We could not restore your session. Please try again."}),oe.jsx("div",{className:"mt-3 text-xs text-rose-500",children:f.message}),oe.jsx("div",{className:"mt-4 flex flex-wrap gap-3",children:oe.jsx("button",{className:"rounded-md bg-rose-600 px-3 py-1.5 text-sm font-medium text-white hover:bg-rose-700",type:"button",onClick:()=>window.location.reload(),children:"Reload"})})]})});if(l&&m===null)return null;if(l&&m===!1&&h==="prompt")return oe.jsx($M,{open:i,onClose:P,anchor:"bottom",overlayClassName:"bg-black/40",children:oe.jsxs("div",{className:"rounded-t-2xl px-6 pb-6 pt-4",children:[oe.jsx("div",{className:"mx-auto mb-3 h-1.5 w-12 rounded-full bg-slate-200"}),oe.jsx("div",{className:"text-lg font-semibold text-slate-900",children:"You need login to continue ?"}),oe.jsxs("div",{className:"mt-5 flex items-center justify-end gap-3",children:[oe.jsx(mo,{type:"button",variant:"plain",className:"min-w-[96px] justify-center",onClick:P,children:"Back"}),oe.jsx(mo,{type:"button",className:"min-w-[96px] justify-center",onClick:()=>Zn.toLogin(t),children:"Login"})]})]})});if(!l)return a;const A=n??(({children:b})=>oe.jsx(oe.Fragment,{children:b}));return oe.jsx(QM,{children:oe.jsx(A,{children:a})})};class HM extends z.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e){if(e instanceof Wl){this.props.onAuthError().then(()=>{this.setState({hasError:!1})});return}console.error(e)}render(){return this.state.hasError?null:this.props.children}}const QM=({children:t})=>{const e=pa.useNavigate(),n=we.useSetAtom(Jl),a=z.useCallback(async()=>{await n(),e("/login",{replace:!0})},[n,e]);return oe.jsx(HM,{onAuthError:a,children:t})},Vr="https://parrot-static.pmate.chat",Vt="@pmate/chat",KM="shuang",za={[Vt]:{name:"Parrot Mate",icon:`${Vr}/parrot-logo.png`,background:"linear-gradient(135deg, #F472B6 0%, #8B5CF6 100%)",welcomeText:"Welcome!Parrot mate",profiles:[{type:"learning-language",title:"Learning Language",required:!0},{type:"nickname",title:"Nickname",required:!0}]},[KM]:{name:"爽歪歪大王恋爱聊天机器人",icon:`${Vr}/shuang.webp`,background:"linear-gradient(180deg, #3b2ea8 0%, #0b0b0b 100%)",welcomeText:"欢迎来到爽歪歪大王恋爱聊天机器人~先选择角色开始聊天吧。",profiles:[{type:"gender",title:"您的性别",required:!0},{type:"is-adult",title:"是否成年",required:!0}]}},oi=t=>{const e=t??Vt,n=za[e]??za[Vt];return{id:za[e]?e:Vt,...n}},Gr="learning-language",JM=({params:t})=>{const e=t.get("app"),n=t.get("redirect"),a=z.useMemo(()=>oi(e),[e]),o=z.useMemo(()=>a.profiles.map(m=>m.type),[a.profiles]),i=t.get("step"),r=o.find(m=>m===i)??null,s=o[0]??Gr,c=r??s,h=z.useMemo(()=>o.length>0?o:[Gr],[o]),l=h.indexOf(c),d=l>=0?h[l+1]:void 0,u=h.includes(c),f=z.useCallback(m=>{const P=new URLSearchParams;return P.set("step",m),e&&P.set("app",e),n&&P.set("redirect",n),`/create-profile?${P.toString()}`},[e,n]);return{activeStep:c,appProfileSteps:o,buildStepUrl:f,createSteps:h,isCreateFlowStep:u,nextStep:d}},WM="https://auth.pmate.chat",qM=()=>typeof window>"u"?"":window.location.href,XM=(t={})=>{const e=Ke(t.app??Vt),n=z.useMemo(()=>t.redirect??qM(),[t.redirect]),a=z.useCallback((P="/",A={})=>{const b=A.redirect??n,E=A.app??e,T=new URL(P,WM);return b&&T.searchParams.set("redirect",b),E&&T.searchParams.set("app",E),T.toString()},[e,n]),o=z.useCallback((P,A={})=>{const b=new URL(a(P,A));return A.step&&b.searchParams.set("step",A.step),b.toString()},[a]),i=z.useCallback(P=>a("/logout",P),[a]),r=z.useCallback(P=>a("/",P),[a]),s=z.useCallback(P=>o("/create-profile",P),[o]),c=z.useCallback(P=>a("/select-profile",P),[a]),h=z.useCallback(P=>o("/edit-profile",P),[o]),l=z.useCallback(P=>{typeof window>"u"||window.location.assign(r(P))},[r]),d=z.useCallback(P=>{typeof window>"u"||window.location.assign(i(P))},[i]),u=z.useCallback(P=>{typeof window>"u"||window.location.assign(s(P))},[s]),f=z.useCallback(P=>{typeof window>"u"||window.location.assign(c(P))},[c]),m=z.useCallback(P=>{typeof window>"u"||window.location.assign(h(P))},[h]);return{app:e,login:l,logout:d,selectProfile:f,createProfile:u,updateProfile:m}},YM=()=>{const[t]=pa.useSearchParams(),e=t.get("app");return z.useMemo(()=>({background:oi(e).background}),[e])};exports.AccountManagerEvent=ss;exports.AccountManagerV2=De;exports.AccountService=Ze;exports.Api=Dt;exports.AuthProviderV2=_M;exports.DEFAULT_APP_ID=Vt;exports.EntityService=rn;exports.LSKEYS=on;exports.NotAuthenticatedError=Wl;exports.ProfileService=_e;exports.Redirect=Zn;exports.accountAtom=ga;exports.accountStateAtom=Uc;exports.createProfileAtom=Hc;exports.getAppConfig=oi;exports.getLangFull=cc;exports.isNicknameValid=lc;exports.learningLangAtom=DM;exports.legacyLangMap=sc;exports.localStorageJsonAtom=Yn;exports.loginAtom=IM;exports.motherTongueAtom=OM;exports.normalizeLang=Co;exports.profileAtom=ya;exports.profileByIdAtom=cs;exports.profileDraftAtom=ls;exports.profilesAtom=NM;exports.resolveAppId=Ke;exports.sessionCheckAtom=UM;exports.switchProfileAtom=_c;exports.updateProfileAtom=FM;exports.uploadAvatarAtom=Fc;exports.useAppBackgroundStyle=YM;exports.useAuthApp=XM;exports.useProfileStepFlow=JM;exports.userLogoutAtom=Jl;exports.userSettingsAtom=BM;
22
22
  //# sourceMappingURL=index.cjs.js.map