diff --git a/build/404.html b/build/404.html
index 14aba72..37e401a 100644
--- a/build/404.html
+++ b/build/404.html
@@ -94,7 +94,7 @@
region: "eu",
});
-
+
diff --git a/build/assets/index-80f24a79.js b/build/assets/index-92b841fc.js
similarity index 91%
rename from build/assets/index-80f24a79.js
rename to build/assets/index-92b841fc.js
index 32d45b1..96f6429 100644
--- a/build/assets/index-80f24a79.js
+++ b/build/assets/index-92b841fc.js
@@ -14,7 +14,7 @@ function xP(e,t){for(var n=0;n1&&arguments[1]!==void 0?arguments[1]:{};this.init(t,n)}init(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.prefix=n.prefix||"i18next:",this.logger=t||WP,this.options=n,this.debug=n.debug}log(){for(var t=arguments.length,n=new Array(t),i=0;i{this.observers[i]||(this.observers[i]=new Map);const l=this.observers[i].get(n)||0;this.observers[i].set(n,l+1)}),this}off(t,n){if(this.observers[t]){if(!n){delete this.observers[t];return}this.observers[t].delete(n)}}emit(t){for(var n=arguments.length,i=new Array(n>1?n-1:0),l=1;l{let[f,d]=a;for(let h=0;h{let[f,d]=a;for(let h=0;h{e=i,t=l});return n.resolve=e,n.reject=t,n}function J1(e){return e==null?"":""+e}function QP(e,t,n){e.forEach(i=>{t[i]&&(n[i]=t[i])})}const KP=/###/g;function Bs(e,t,n){function i(f){return f&&f.indexOf("###")>-1?f.replace(KP,"."):f}function l(){return!e||typeof e=="string"}const s=typeof t!="string"?t:t.split(".");let a=0;for(;a":">",'"':""","'":"'","/":"/"};function JP(e){return typeof e=="string"?e.replace(/[&<>"'\/]/g,t=>XP[t]):e}class ZP{constructor(t){this.capacity=t,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(t){const n=this.regExpMap.get(t);if(n!==void 0)return n;const i=new RegExp(t);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(t,i),this.regExpQueue.push(t),i}}const qP=[" ",",","?","!",";"],e3=new ZP(20);function t3(e,t,n){t=t||"",n=n||"";const i=qP.filter(a=>t.indexOf(a)<0&&n.indexOf(a)<0);if(i.length===0)return!0;const l=e3.getRegExp(`(${i.map(a=>a==="?"?"\\?":a).join("|")})`);let s=!l.test(e);if(!s){const a=e.indexOf(n);a>0&&!l.test(e.substring(0,a))&&(s=!0)}return s}function Th(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:".";if(!e)return;if(e[t])return e[t];const i=t.split(n);let l=e;for(let s=0;s-1&&d0?e.replace("_","-"):e}class q1 extends ff{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{ns:["translation"],defaultNS:"translation"};super(),this.data=t||{},this.options=n,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(t){this.options.ns.indexOf(t)<0&&this.options.ns.push(t)}removeNamespaces(t){const n=this.options.ns.indexOf(t);n>-1&&this.options.ns.splice(n,1)}getResource(t,n,i){let l=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};const s=l.keySeparator!==void 0?l.keySeparator:this.options.keySeparator,a=l.ignoreJSONStructure!==void 0?l.ignoreJSONStructure:this.options.ignoreJSONStructure;let f;t.indexOf(".")>-1?f=t.split("."):(f=[t,n],i&&(Array.isArray(i)?f.push(...i):typeof i=="string"&&s?f.push(...i.split(s)):f.push(i)));const d=Ic(this.data,f);return!d&&!n&&!i&&t.indexOf(".")>-1&&(t=f[0],n=f[1],i=f.slice(2).join(".")),d||!a||typeof i!="string"?d:Th(this.data&&this.data[t]&&this.data[t][n],i,s)}addResource(t,n,i,l){let s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{silent:!1};const a=s.keySeparator!==void 0?s.keySeparator:this.options.keySeparator;let f=[t,n];i&&(f=f.concat(a?i.split(a):i)),t.indexOf(".")>-1&&(f=t.split("."),l=n,n=f[1]),this.addNamespaces(n),Z1(this.data,f,l),s.silent||this.emit("added",t,n,i,l)}addResources(t,n,i){let l=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{silent:!1};for(const s in i)(typeof i[s]=="string"||Array.isArray(i[s]))&&this.addResource(t,n,s,i[s],{silent:!0});l.silent||this.emit("added",t,n,i)}addResourceBundle(t,n,i,l,s){let a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{silent:!1,skipCopy:!1},f=[t,n];t.indexOf(".")>-1&&(f=t.split("."),l=i,i=n,n=f[1]),this.addNamespaces(n);let d=Ic(this.data,f)||{};a.skipCopy||(i=JSON.parse(JSON.stringify(i))),l?qS(d,i,s):d={...d,...i},Z1(this.data,f,d),a.silent||this.emit("added",t,n,i)}removeResourceBundle(t,n){this.hasResourceBundle(t,n)&&delete this.data[t][n],this.removeNamespaces(n),this.emit("removed",t,n)}hasResourceBundle(t,n){return this.getResource(t,n)!==void 0}getResourceBundle(t,n){return n||(n=this.options.defaultNS),this.options.compatibilityAPI==="v1"?{...this.getResource(t,n)}:this.getResource(t,n)}getDataByLanguage(t){return this.data[t]}hasLanguageSomeTranslations(t){const n=this.getDataByLanguage(t);return!!(n&&Object.keys(n)||[]).find(l=>n[l]&&Object.keys(n[l]).length>0)}toJSON(){return this.data}}var ek={processors:{},addPostProcessor(e){this.processors[e.name]=e},handle(e,t,n,i,l){return e.forEach(s=>{this.processors[s]&&(t=this.processors[s].process(t,n,i,l))}),t}};const ev={};class Ac extends ff{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(),QP(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],t,this),this.options=n,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=Tr.create("translator")}changeLanguage(t){t&&(this.language=t)}exists(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}};if(t==null)return!1;const i=this.resolve(t,n);return i&&i.res!==void 0}extractFromKey(t,n){let i=n.nsSeparator!==void 0?n.nsSeparator:this.options.nsSeparator;i===void 0&&(i=":");const l=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator;let s=n.ns||this.options.defaultNS||[];const a=i&&t.indexOf(i)>-1,f=!this.options.userDefinedKeySeparator&&!n.keySeparator&&!this.options.userDefinedNsSeparator&&!n.nsSeparator&&!t3(t,i,l);if(a&&!f){const d=t.match(this.interpolator.nestingRegexp);if(d&&d.length>0)return{key:t,namespaces:s};const h=t.split(i);(i!==l||i===l&&this.options.ns.indexOf(h[0])>-1)&&(s=h.shift()),t=h.join(l)}return typeof s=="string"&&(s=[s]),{key:t,namespaces:s}}translate(t,n,i){if(typeof n!="object"&&this.options.overloadTranslationOptionHandler&&(n=this.options.overloadTranslationOptionHandler(arguments)),typeof n=="object"&&(n={...n}),n||(n={}),t==null)return"";Array.isArray(t)||(t=[String(t)]);const l=n.returnDetails!==void 0?n.returnDetails:this.options.returnDetails,s=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator,{key:a,namespaces:f}=this.extractFromKey(t[t.length-1],n),d=f[f.length-1],h=n.lng||this.language,g=n.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(h&&h.toLowerCase()==="cimode"){if(g){const N=n.nsSeparator||this.options.nsSeparator;return l?{res:`${d}${N}${a}`,usedKey:a,exactUsedKey:a,usedLng:h,usedNS:d,usedParams:this.getUsedParamsDetails(n)}:`${d}${N}${a}`}return l?{res:a,usedKey:a,exactUsedKey:a,usedLng:h,usedNS:d,usedParams:this.getUsedParamsDetails(n)}:a}const y=this.resolve(t,n);let v=y&&y.res;const S=y&&y.usedKey||a,C=y&&y.exactUsedKey||a,I=Object.prototype.toString.apply(v),L=["[object Number]","[object Function]","[object RegExp]"],x=n.joinArrays!==void 0?n.joinArrays:this.options.joinArrays,E=!this.i18nFormat||this.i18nFormat.handleAsObject;if(E&&v&&(typeof v!="string"&&typeof v!="boolean"&&typeof v!="number")&&L.indexOf(I)<0&&!(typeof x=="string"&&Array.isArray(v))){if(!n.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const N=this.options.returnedObjectHandler?this.options.returnedObjectHandler(S,v,{...n,ns:f}):`key '${a} (${this.language})' returned an object instead of string.`;return l?(y.res=N,y.usedParams=this.getUsedParamsDetails(n),y):N}if(s){const N=Array.isArray(v),M=N?[]:{},R=N?C:S;for(const V in v)if(Object.prototype.hasOwnProperty.call(v,V)){const _=`${R}${s}${V}`;M[V]=this.translate(_,{...n,joinArrays:!1,ns:f}),M[V]===_&&(M[V]=v[V])}v=M}}else if(E&&typeof x=="string"&&Array.isArray(v))v=v.join(x),v&&(v=this.extendTranslation(v,t,n,i));else{let N=!1,M=!1;const R=n.count!==void 0&&typeof n.count!="string",V=Ac.hasDefaultValue(n),_=R?this.pluralResolver.getSuffix(h,n.count,n):"",G=n.ordinal&&R?this.pluralResolver.getSuffix(h,n.count,{ordinal:!1}):"",Y=R&&!n.ordinal&&n.count===0&&this.pluralResolver.shouldUseIntlApi(),U=Y&&n[`defaultValue${this.options.pluralSeparator}zero`]||n[`defaultValue${_}`]||n[`defaultValue${G}`]||n.defaultValue;!this.isValidLookup(v)&&V&&(N=!0,v=U),this.isValidLookup(v)||(M=!0,v=a);const J=(n.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&M?void 0:v,ne=V&&U!==v&&this.options.updateMissing;if(M||N||ne){if(this.logger.log(ne?"updateKey":"missingKey",h,d,a,ne?U:v),s){const O=this.resolve(a,{...n,keySeparator:!1});O&&O.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 te=[];const de=this.languageUtils.getFallbackCodes(this.options.fallbackLng,n.lng||this.language);if(this.options.saveMissingTo==="fallback"&&de&&de[0])for(let O=0;O{const W=V&&w!==v?w:J;this.options.missingKeyHandler?this.options.missingKeyHandler(O,d,X,W,ne,n):this.backendConnector&&this.backendConnector.saveMissing&&this.backendConnector.saveMissing(O,d,X,W,ne,n),this.emit("missingKey",O,d,X,v)};this.options.saveMissing&&(this.options.saveMissingPlurals&&R?te.forEach(O=>{const X=this.pluralResolver.getSuffixes(O,n);Y&&n[`defaultValue${this.options.pluralSeparator}zero`]&&X.indexOf(`${this.options.pluralSeparator}zero`)<0&&X.push(`${this.options.pluralSeparator}zero`),X.forEach(w=>{re([O],a+w,n[`defaultValue${w}`]||U)})}):re(te,a,U))}v=this.extendTranslation(v,t,n,y,i),M&&v===a&&this.options.appendNamespaceToMissingKey&&(v=`${d}:${a}`),(M||N)&&this.options.parseMissingKeyHandler&&(this.options.compatibilityAPI!=="v1"?v=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${d}:${a}`:a,N?v:void 0):v=this.options.parseMissingKeyHandler(v))}return l?(y.res=v,y.usedParams=this.getUsedParamsDetails(n),y):v}extendTranslation(t,n,i,l,s){var a=this;if(this.i18nFormat&&this.i18nFormat.parse)t=this.i18nFormat.parse(t,{...this.options.interpolation.defaultVariables,...i},i.lng||this.language||l.usedLng,l.usedNS,l.usedKey,{resolved:l});else if(!i.skipInterpolation){i.interpolation&&this.interpolator.init({...i,interpolation:{...this.options.interpolation,...i.interpolation}});const h=typeof t=="string"&&(i&&i.interpolation&&i.interpolation.skipOnVariables!==void 0?i.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let g;if(h){const v=t.match(this.interpolator.nestingRegexp);g=v&&v.length}let y=i.replace&&typeof i.replace!="string"?i.replace:i;if(this.options.interpolation.defaultVariables&&(y={...this.options.interpolation.defaultVariables,...y}),t=this.interpolator.interpolate(t,y,i.lng||this.language,i),h){const v=t.match(this.interpolator.nestingRegexp),S=v&&v.length;g1&&arguments[1]!==void 0?arguments[1]:{},i,l,s,a,f;return typeof t=="string"&&(t=[t]),t.forEach(d=>{if(this.isValidLookup(i))return;const h=this.extractFromKey(d,n),g=h.key;l=g;let y=h.namespaces;this.options.fallbackNS&&(y=y.concat(this.options.fallbackNS));const v=n.count!==void 0&&typeof n.count!="string",S=v&&!n.ordinal&&n.count===0&&this.pluralResolver.shouldUseIntlApi(),C=n.context!==void 0&&(typeof n.context=="string"||typeof n.context=="number")&&n.context!=="",I=n.lngs?n.lngs:this.languageUtils.toResolveHierarchy(n.lng||this.language,n.fallbackLng);y.forEach(L=>{this.isValidLookup(i)||(f=L,!ev[`${I[0]}-${L}`]&&this.utils&&this.utils.hasLoadedNamespace&&!this.utils.hasLoadedNamespace(f)&&(ev[`${I[0]}-${L}`]=!0,this.logger.warn(`key "${l}" for languages "${I.join(", ")}" won't get resolved as namespace "${f}" 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!!!")),I.forEach(x=>{if(this.isValidLookup(i))return;a=x;const E=[g];if(this.i18nFormat&&this.i18nFormat.addLookupKeys)this.i18nFormat.addLookupKeys(E,g,x,L,n);else{let N;v&&(N=this.pluralResolver.getSuffix(x,n.count,n));const M=`${this.options.pluralSeparator}zero`,R=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(v&&(E.push(g+N),n.ordinal&&N.indexOf(R)===0&&E.push(g+N.replace(R,this.options.pluralSeparator)),S&&E.push(g+M)),C){const V=`${g}${this.options.contextSeparator}${n.context}`;E.push(V),v&&(E.push(V+N),n.ordinal&&N.indexOf(R)===0&&E.push(V+N.replace(R,this.options.pluralSeparator)),S&&E.push(V+M))}}let T;for(;T=E.pop();)this.isValidLookup(i)||(s=T,i=this.getResource(x,L,T,n))}))})}),{res:i,usedKey:l,exactUsedKey:s,usedLng:a,usedNS:f}}isValidLookup(t){return t!==void 0&&!(!this.options.returnNull&&t===null)&&!(!this.options.returnEmptyString&&t==="")}getResource(t,n,i){let l=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(t,n,i,l):this.resourceStore.getResource(t,n,i,l)}getUsedParamsDetails(){let t=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"],i=t.replace&&typeof t.replace!="string";let l=i?t.replace:t;if(i&&typeof t.count<"u"&&(l.count=t.count),this.options.interpolation.defaultVariables&&(l={...this.options.interpolation.defaultVariables,...l}),!i){l={...l};for(const s of n)delete l[s]}return l}static hasDefaultValue(t){const n="defaultValue";for(const i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&n===i.substring(0,n.length)&&t[i]!==void 0)return!0;return!1}}function Dp(e){return e.charAt(0).toUpperCase()+e.slice(1)}class tv{constructor(t){this.options=t,this.supportedLngs=this.options.supportedLngs||!1,this.logger=Tr.create("languageUtils")}getScriptPartFromCode(t){if(t=Tc(t),!t||t.indexOf("-")<0)return null;const n=t.split("-");return n.length===2||(n.pop(),n[n.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(n.join("-"))}getLanguagePartFromCode(t){if(t=Tc(t),!t||t.indexOf("-")<0)return t;const n=t.split("-");return this.formatLanguageCode(n[0])}formatLanguageCode(t){if(typeof t=="string"&&t.indexOf("-")>-1){const n=["hans","hant","latn","cyrl","cans","mong","arab"];let i=t.split("-");return this.options.lowerCaseLng?i=i.map(l=>l.toLowerCase()):i.length===2?(i[0]=i[0].toLowerCase(),i[1]=i[1].toUpperCase(),n.indexOf(i[1].toLowerCase())>-1&&(i[1]=Dp(i[1].toLowerCase()))):i.length===3&&(i[0]=i[0].toLowerCase(),i[1].length===2&&(i[1]=i[1].toUpperCase()),i[0]!=="sgn"&&i[2].length===2&&(i[2]=i[2].toUpperCase()),n.indexOf(i[1].toLowerCase())>-1&&(i[1]=Dp(i[1].toLowerCase())),n.indexOf(i[2].toLowerCase())>-1&&(i[2]=Dp(i[2].toLowerCase()))),i.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?t.toLowerCase():t}isSupportedCode(t){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(t=this.getLanguagePartFromCode(t)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(t)>-1}getBestMatchFromCodes(t){if(!t)return null;let n;return t.forEach(i=>{if(n)return;const l=this.formatLanguageCode(i);(!this.options.supportedLngs||this.isSupportedCode(l))&&(n=l)}),!n&&this.options.supportedLngs&&t.forEach(i=>{if(n)return;const l=this.getLanguagePartFromCode(i);if(this.isSupportedCode(l))return n=l;n=this.options.supportedLngs.find(s=>{if(s===l)return s;if(!(s.indexOf("-")<0&&l.indexOf("-")<0)&&(s.indexOf("-")>0&&l.indexOf("-")<0&&s.substring(0,s.indexOf("-"))===l||s.indexOf(l)===0&&l.length>1))return s})}),n||(n=this.getFallbackCodes(this.options.fallbackLng)[0]),n}getFallbackCodes(t,n){if(!t)return[];if(typeof t=="function"&&(t=t(n)),typeof t=="string"&&(t=[t]),Array.isArray(t))return t;if(!n)return t.default||[];let i=t[n];return i||(i=t[this.getScriptPartFromCode(n)]),i||(i=t[this.formatLanguageCode(n)]),i||(i=t[this.getLanguagePartFromCode(n)]),i||(i=t.default),i||[]}toResolveHierarchy(t,n){const i=this.getFallbackCodes(n||this.options.fallbackLng||[],t),l=[],s=a=>{a&&(this.isSupportedCode(a)?l.push(a):this.logger.warn(`rejecting language code not found in supportedLngs: ${a}`))};return typeof t=="string"&&(t.indexOf("-")>-1||t.indexOf("_")>-1)?(this.options.load!=="languageOnly"&&s(this.formatLanguageCode(t)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&s(this.getScriptPartFromCode(t)),this.options.load!=="currentOnly"&&s(this.getLanguagePartFromCode(t))):typeof t=="string"&&s(this.formatLanguageCode(t)),i.forEach(a=>{l.indexOf(a)<0&&s(this.formatLanguageCode(a))}),l}}let n3=[{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}],r3={1:function(e){return+(e>1)},2:function(e){return+(e!=1)},3:function(e){return 0},4:function(e){return e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2},5:function(e){return e==0?0:e==1?1:e==2?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},6:function(e){return e==1?0:e>=2&&e<=4?1:2},7:function(e){return e==1?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2},8:function(e){return e==1?0:e==2?1:e!=8&&e!=11?2:3},9:function(e){return+(e>=2)},10:function(e){return e==1?0:e==2?1:e<7?2:e<11?3:4},11:function(e){return e==1||e==11?0:e==2||e==12?1:e>2&&e<20?2:3},12:function(e){return+(e%10!=1||e%100==11)},13:function(e){return+(e!==0)},14:function(e){return e==1?0:e==2?1:e==3?2:3},15:function(e){return e%10==1&&e%100!=11?0:e%10>=2&&(e%100<10||e%100>=20)?1:2},16:function(e){return e%10==1&&e%100!=11?0:e!==0?1:2},17:function(e){return e==1||e%10==1&&e%100!=11?0:1},18:function(e){return e==0?0:e==1?1:2},19:function(e){return e==1?0:e==0||e%100>1&&e%100<11?1:e%100>10&&e%100<20?2:3},20:function(e){return e==1?0:e==0||e%100>0&&e%100<20?1:2},21:function(e){return e%100==1?1:e%100==2?2:e%100==3||e%100==4?3:0},22:function(e){return e==1?0:e==2?1:(e<0||e>10)&&e%10==0?2:3}};const i3=["v1","v2","v3"],o3=["v4"],nv={zero:0,one:1,two:2,few:3,many:4,other:5};function l3(){const e={};return n3.forEach(t=>{t.lngs.forEach(n=>{e[n]={numbers:t.nr,plurals:r3[t.fc]}})}),e}class s3{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.languageUtils=t,this.options=n,this.logger=Tr.create("pluralResolver"),(!this.options.compatibilityJSON||o3.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=l3()}addRule(t,n){this.rules[t]=n}getRule(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(this.shouldUseIntlApi())try{return new Intl.PluralRules(Tc(t==="dev"?"en":t),{type:n.ordinal?"ordinal":"cardinal"})}catch{return}return this.rules[t]||this.rules[this.languageUtils.getLanguagePartFromCode(t)]}needsPlural(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const i=this.getRule(t,n);return this.shouldUseIntlApi()?i&&i.resolvedOptions().pluralCategories.length>1:i&&i.numbers.length>1}getPluralFormsOfKey(t,n){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return this.getSuffixes(t,i).map(l=>`${n}${l}`)}getSuffixes(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const i=this.getRule(t,n);return i?this.shouldUseIntlApi()?i.resolvedOptions().pluralCategories.sort((l,s)=>nv[l]-nv[s]).map(l=>`${this.options.prepend}${n.ordinal?`ordinal${this.options.prepend}`:""}${l}`):i.numbers.map(l=>this.getSuffix(t,l,n)):[]}getSuffix(t,n){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const l=this.getRule(t,i);return l?this.shouldUseIntlApi()?`${this.options.prepend}${i.ordinal?`ordinal${this.options.prepend}`:""}${l.select(n)}`:this.getSuffixRetroCompatible(l,n):(this.logger.warn(`no plural rule found for: ${t}`),"")}getSuffixRetroCompatible(t,n){const i=t.noAbs?t.plurals(n):t.plurals(Math.abs(n));let l=t.numbers[i];this.options.simplifyPluralSuffix&&t.numbers.length===2&&t.numbers[0]===1&&(l===2?l="plural":l===1&&(l=""));const s=()=>this.options.prepend&&l.toString()?this.options.prepend+l.toString():l.toString();return this.options.compatibilityJSON==="v1"?l===1?"":typeof l=="number"?`_plural_${l.toString()}`:s():this.options.compatibilityJSON==="v2"||this.options.simplifyPluralSuffix&&t.numbers.length===2&&t.numbers[0]===1?s():this.options.prepend&&i.toString()?this.options.prepend+i.toString():i.toString()}shouldUseIntlApi(){return!i3.includes(this.options.compatibilityJSON)}}function rv(e,t,n){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:".",l=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=YP(e,t,n);return!s&&l&&typeof n=="string"&&(s=Th(e,n,i),s===void 0&&(s=Th(t,n,i))),s}class u3{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=Tr.create("interpolator"),this.options=t,this.format=t.interpolation&&t.interpolation.format||(n=>n),this.init(t)}init(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};t.interpolation||(t.interpolation={escapeValue:!0});const{escape:n,escapeValue:i,useRawValueToEscape:l,prefix:s,prefixEscaped:a,suffix:f,suffixEscaped:d,formatSeparator:h,unescapeSuffix:g,unescapePrefix:y,nestingPrefix:v,nestingPrefixEscaped:S,nestingSuffix:C,nestingSuffixEscaped:I,nestingOptionsSeparator:L,maxReplaces:x,alwaysFormat:E}=t.interpolation;this.escape=n!==void 0?n:JP,this.escapeValue=i!==void 0?i:!0,this.useRawValueToEscape=l!==void 0?l:!1,this.prefix=s?Jo(s):a||"{{",this.suffix=f?Jo(f):d||"}}",this.formatSeparator=h||",",this.unescapePrefix=g?"":y||"-",this.unescapeSuffix=this.unescapePrefix?"":g||"",this.nestingPrefix=v?Jo(v):S||Jo("$t("),this.nestingSuffix=C?Jo(C):I||Jo(")"),this.nestingOptionsSeparator=L||",",this.maxReplaces=x||1e3,this.alwaysFormat=E!==void 0?E:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const t=(n,i)=>n&&n.source===i?(n.lastIndex=0,n):new RegExp(i,"g");this.regexp=t(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=t(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=t(this.nestingRegexp,`${this.nestingPrefix}(.+?)${this.nestingSuffix}`)}interpolate(t,n,i,l){let s,a,f;const d=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{};function h(C){return C.replace(/\$/g,"$$$$")}const g=C=>{if(C.indexOf(this.formatSeparator)<0){const E=rv(n,d,C,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(E,void 0,i,{...l,...n,interpolationkey:C}):E}const I=C.split(this.formatSeparator),L=I.shift().trim(),x=I.join(this.formatSeparator).trim();return this.format(rv(n,d,L,this.options.keySeparator,this.options.ignoreJSONStructure),x,i,{...l,...n,interpolationkey:L})};this.resetRegExp();const y=l&&l.missingInterpolationHandler||this.options.missingInterpolationHandler,v=l&&l.interpolation&&l.interpolation.skipOnVariables!==void 0?l.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:C=>h(C)},{regex:this.regexp,safeValue:C=>this.escapeValue?h(this.escape(C)):h(C)}].forEach(C=>{for(f=0;s=C.regex.exec(t);){const I=s[1].trim();if(a=g(I),a===void 0)if(typeof y=="function"){const x=y(t,s,l);a=typeof x=="string"?x:""}else if(l&&Object.prototype.hasOwnProperty.call(l,I))a="";else if(v){a=s[0];continue}else this.logger.warn(`missed to pass in variable ${I} for interpolating ${t}`),a="";else typeof a!="string"&&!this.useRawValueToEscape&&(a=J1(a));const L=C.safeValue(a);if(t=t.replace(s[0],L),v?(C.regex.lastIndex+=a.length,C.regex.lastIndex-=s[0].length):C.regex.lastIndex=0,f++,f>=this.maxReplaces)break}}),t}nest(t,n){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},l,s,a;function f(d,h){const g=this.nestingOptionsSeparator;if(d.indexOf(g)<0)return d;const y=d.split(new RegExp(`${g}[ ]*{`));let v=`{${y[1]}`;d=y[0],v=this.interpolate(v,a);const S=v.match(/'/g),C=v.match(/"/g);(S&&S.length%2===0&&!C||C.length%2!==0)&&(v=v.replace(/'/g,'"'));try{a=JSON.parse(v),h&&(a={...h,...a})}catch(I){return this.logger.warn(`failed parsing options string in nesting for key ${d}`,I),`${d}${g}${v}`}return a.defaultValue&&a.defaultValue.indexOf(this.prefix)>-1&&delete a.defaultValue,d}for(;l=this.nestingRegexp.exec(t);){let d=[];a={...i},a=a.replace&&typeof a.replace!="string"?a.replace:a,a.applyPostProcessor=!1,delete a.defaultValue;let h=!1;if(l[0].indexOf(this.formatSeparator)!==-1&&!/{.*}/.test(l[1])){const g=l[1].split(this.formatSeparator).map(y=>y.trim());l[1]=g.shift(),d=g,h=!0}if(s=n(f.call(this,l[1].trim(),a),a),s&&l[0]===t&&typeof s!="string")return s;typeof s!="string"&&(s=J1(s)),s||(this.logger.warn(`missed to resolve ${l[1]} for nesting ${t}`),s=""),h&&(s=d.reduce((g,y)=>this.format(g,y,i.lng,{...i,interpolationkey:l[1].trim()}),s.trim())),t=t.replace(l[0],s),this.regexp.lastIndex=0}return t}}function a3(e){let t=e.toLowerCase().trim();const n={};if(e.indexOf("(")>-1){const i=e.split("(");t=i[0].toLowerCase().trim();const l=i[1].substring(0,i[1].length-1);t==="currency"&&l.indexOf(":")<0?n.currency||(n.currency=l.trim()):t==="relativetime"&&l.indexOf(":")<0?n.range||(n.range=l.trim()):l.split(";").forEach(a=>{if(a){const[f,...d]=a.split(":"),h=d.join(":").trim().replace(/^'+|'+$/g,""),g=f.trim();n[g]||(n[g]=h),h==="false"&&(n[g]=!1),h==="true"&&(n[g]=!0),isNaN(h)||(n[g]=parseInt(h,10))}})}return{formatName:t,formatOptions:n}}function Zo(e){const t={};return function(i,l,s){const a=l+JSON.stringify(s);let f=t[a];return f||(f=e(Tc(l),s),t[a]=f),f(i)}}class c3{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=Tr.create("formatter"),this.options=t,this.formats={number:Zo((n,i)=>{const l=new Intl.NumberFormat(n,{...i});return s=>l.format(s)}),currency:Zo((n,i)=>{const l=new Intl.NumberFormat(n,{...i,style:"currency"});return s=>l.format(s)}),datetime:Zo((n,i)=>{const l=new Intl.DateTimeFormat(n,{...i});return s=>l.format(s)}),relativetime:Zo((n,i)=>{const l=new Intl.RelativeTimeFormat(n,{...i});return s=>l.format(s,i.range||"day")}),list:Zo((n,i)=>{const l=new Intl.ListFormat(n,{...i});return s=>l.format(s)})},this.init(t)}init(t){const i=(arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}}).interpolation;this.formatSeparator=i.formatSeparator?i.formatSeparator:i.formatSeparator||","}add(t,n){this.formats[t.toLowerCase().trim()]=n}addCached(t,n){this.formats[t.toLowerCase().trim()]=Zo(n)}format(t,n,i){let l=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return n.split(this.formatSeparator).reduce((f,d)=>{const{formatName:h,formatOptions:g}=a3(d);if(this.formats[h]){let y=f;try{const v=l&&l.formatParams&&l.formatParams[l.interpolationkey]||{},S=v.locale||v.lng||l.locale||l.lng||i;y=this.formats[h](f,S,{...g,...l,...v})}catch(v){this.logger.warn(v)}return y}else this.logger.warn(`there was no format function for ${h}`);return f},t)}}function f3(e,t){e.pending[t]!==void 0&&(delete e.pending[t],e.pendingCount--)}class d3 extends ff{constructor(t,n,i){let l=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};super(),this.backend=t,this.store=n,this.services=i,this.languageUtils=i.languageUtils,this.options=l,this.logger=Tr.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=l.maxParallelReads||10,this.readingCalls=0,this.maxRetries=l.maxRetries>=0?l.maxRetries:5,this.retryTimeout=l.retryTimeout>=1?l.retryTimeout:350,this.state={},this.queue=[],this.backend&&this.backend.init&&this.backend.init(i,l.backend,l)}queueLoad(t,n,i,l){const s={},a={},f={},d={};return t.forEach(h=>{let g=!0;n.forEach(y=>{const v=`${h}|${y}`;!i.reload&&this.store.hasResourceBundle(h,y)?this.state[v]=2:this.state[v]<0||(this.state[v]===1?a[v]===void 0&&(a[v]=!0):(this.state[v]=1,g=!1,a[v]===void 0&&(a[v]=!0),s[v]===void 0&&(s[v]=!0),d[y]===void 0&&(d[y]=!0)))}),g||(f[h]=!0)}),(Object.keys(s).length||Object.keys(a).length)&&this.queue.push({pending:a,pendingCount:Object.keys(a).length,loaded:{},errors:[],callback:l}),{toLoad:Object.keys(s),pending:Object.keys(a),toLoadLanguages:Object.keys(f),toLoadNamespaces:Object.keys(d)}}loaded(t,n,i){const l=t.split("|"),s=l[0],a=l[1];n&&this.emit("failedLoading",s,a,n),i&&this.store.addResourceBundle(s,a,i,void 0,void 0,{skipCopy:!0}),this.state[t]=n?-1:2;const f={};this.queue.forEach(d=>{GP(d.loaded,[s],a),f3(d,t),n&&d.errors.push(n),d.pendingCount===0&&!d.done&&(Object.keys(d.loaded).forEach(h=>{f[h]||(f[h]={});const g=d.loaded[h];g.length&&g.forEach(y=>{f[h][y]===void 0&&(f[h][y]=!0)})}),d.done=!0,d.errors.length?d.callback(d.errors):d.callback())}),this.emit("loaded",f),this.queue=this.queue.filter(d=>!d.done)}read(t,n,i){let l=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:this.retryTimeout,a=arguments.length>5?arguments[5]:void 0;if(!t.length)return a(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:t,ns:n,fcName:i,tried:l,wait:s,callback:a});return}this.readingCalls++;const f=(h,g)=>{if(this.readingCalls--,this.waitingReads.length>0){const y=this.waitingReads.shift();this.read(y.lng,y.ns,y.fcName,y.tried,y.wait,y.callback)}if(h&&g&&l{this.read.call(this,t,n,i,l+1,s*2,a)},s);return}a(h,g)},d=this.backend[i].bind(this.backend);if(d.length===2){try{const h=d(t,n);h&&typeof h.then=="function"?h.then(g=>f(null,g)).catch(f):f(null,h)}catch(h){f(h)}return}return d(t,n,f)}prepareLoading(t,n){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},l=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."),l&&l();typeof t=="string"&&(t=this.languageUtils.toResolveHierarchy(t)),typeof n=="string"&&(n=[n]);const s=this.queueLoad(t,n,i,l);if(!s.toLoad.length)return s.pending.length||l(),null;s.toLoad.forEach(a=>{this.loadOne(a)})}load(t,n,i){this.prepareLoading(t,n,{},i)}reload(t,n,i){this.prepareLoading(t,n,{reload:!0},i)}loadOne(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";const i=t.split("|"),l=i[0],s=i[1];this.read(l,s,"read",void 0,void 0,(a,f)=>{a&&this.logger.warn(`${n}loading namespace ${s} for language ${l} failed`,a),!a&&f&&this.logger.log(`${n}loaded namespace ${s} for language ${l}`,f),this.loaded(t,a,f)})}saveMissing(t,n,i,l,s){let a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{},f=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 "${i}" 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(!(i==null||i==="")){if(this.backend&&this.backend.create){const d={...a,isUpdate:s},h=this.backend.create.bind(this.backend);if(h.length<6)try{let g;h.length===5?g=h(t,n,i,l,d):g=h(t,n,i,l),g&&typeof g.then=="function"?g.then(y=>f(null,y)).catch(f):f(null,g)}catch(g){f(g)}else h(t,n,i,l,f,d)}!t||!t[0]||this.store.addResource(t[0],n,i,l)}}}function iv(){return{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:function(t){let n={};if(typeof t[1]=="object"&&(n=t[1]),typeof t[1]=="string"&&(n.defaultValue=t[1]),typeof t[2]=="string"&&(n.tDescription=t[2]),typeof t[2]=="object"||typeof t[3]=="object"){const i=t[3]||t[2];Object.keys(i).forEach(l=>{n[l]=i[l]})}return n},interpolation:{escapeValue:!0,format:e=>e,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}}function ov(e){return typeof e.ns=="string"&&(e.ns=[e.ns]),typeof e.fallbackLng=="string"&&(e.fallbackLng=[e.fallbackLng]),typeof e.fallbackNS=="string"&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&e.supportedLngs.indexOf("cimode")<0&&(e.supportedLngs=e.supportedLngs.concat(["cimode"])),e}function $a(){}function p3(e){Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach(n=>{typeof e[n]=="function"&&(e[n]=e[n].bind(e))})}class eu extends ff{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;if(super(),this.options=ov(t),this.services={},this.logger=Tr,this.modules={external:[]},p3(this),n&&!this.isInitialized&&!t.isClone){if(!this.options.initImmediate)return this.init(t,n),this;setTimeout(()=>{this.init(t,n)},0)}}init(){var t=this;let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},i=arguments.length>1?arguments[1]:void 0;this.isInitializing=!0,typeof n=="function"&&(i=n,n={}),!n.defaultNS&&n.defaultNS!==!1&&n.ns&&(typeof n.ns=="string"?n.defaultNS=n.ns:n.ns.indexOf("translation")<0&&(n.defaultNS=n.ns[0]));const l=iv();this.options={...l,...this.options,...ov(n)},this.options.compatibilityAPI!=="v1"&&(this.options.interpolation={...l.interpolation,...this.options.interpolation}),n.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=n.keySeparator),n.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=n.nsSeparator);function s(g){return g?typeof g=="function"?new g:g:null}if(!this.options.isClone){this.modules.logger?Tr.init(s(this.modules.logger),this.options):Tr.init(null,this.options);let g;this.modules.formatter?g=this.modules.formatter:typeof Intl<"u"&&(g=c3);const y=new tv(this.options);this.store=new q1(this.options.resources,this.options);const v=this.services;v.logger=Tr,v.resourceStore=this.store,v.languageUtils=y,v.pluralResolver=new s3(y,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),g&&(!this.options.interpolation.format||this.options.interpolation.format===l.interpolation.format)&&(v.formatter=s(g),v.formatter.init(v,this.options),this.options.interpolation.format=v.formatter.format.bind(v.formatter)),v.interpolator=new u3(this.options),v.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},v.backendConnector=new d3(s(this.modules.backend),v.resourceStore,v,this.options),v.backendConnector.on("*",function(S){for(var C=arguments.length,I=new Array(C>1?C-1:0),L=1;L1?C-1:0),L=1;L{S.init&&S.init(this)})}if(this.format=this.options.interpolation.format,i||(i=$a),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){const g=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);g.length>0&&g[0]!=="dev"&&(this.options.lng=g[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(g=>{this[g]=function(){return t.store[g](...arguments)}}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(g=>{this[g]=function(){return t.store[g](...arguments),t}});const d=Es(),h=()=>{const g=(y,v)=>{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),d.resolve(v),i(y,v)};if(this.languages&&this.options.compatibilityAPI!=="v1"&&!this.isInitialized)return g(null,this.t.bind(this));this.changeLanguage(this.options.lng,g)};return this.options.resources||!this.options.initImmediate?h():setTimeout(h,0),d}loadResources(t){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:$a;const l=typeof t=="string"?t:this.language;if(typeof t=="function"&&(i=t),!this.options.resources||this.options.partialBundledLanguages){if(l&&l.toLowerCase()==="cimode"&&(!this.options.preload||this.options.preload.length===0))return i();const s=[],a=f=>{if(!f||f==="cimode")return;this.services.languageUtils.toResolveHierarchy(f).forEach(h=>{h!=="cimode"&&s.indexOf(h)<0&&s.push(h)})};l?a(l):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(d=>a(d)),this.options.preload&&this.options.preload.forEach(f=>a(f)),this.services.backendConnector.load(s,this.options.ns,f=>{!f&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),i(f)})}else i(null)}reloadResources(t,n,i){const l=Es();return t||(t=this.languages),n||(n=this.options.ns),i||(i=$a),this.services.backendConnector.reload(t,n,s=>{l.resolve(),i(s)}),l}use(t){if(!t)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!t.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return t.type==="backend"&&(this.modules.backend=t),(t.type==="logger"||t.log&&t.warn&&t.error)&&(this.modules.logger=t),t.type==="languageDetector"&&(this.modules.languageDetector=t),t.type==="i18nFormat"&&(this.modules.i18nFormat=t),t.type==="postProcessor"&&ek.addPostProcessor(t),t.type==="formatter"&&(this.modules.formatter=t),t.type==="3rdParty"&&this.modules.external.push(t),this}setResolvedLanguage(t){if(!(!t||!this.languages)&&!(["cimode","dev"].indexOf(t)>-1))for(let n=0;n-1)&&this.store.hasLanguageSomeTranslations(i)){this.resolvedLanguage=i;break}}}changeLanguage(t,n){var i=this;this.isLanguageChangingTo=t;const l=Es();this.emit("languageChanging",t);const s=d=>{this.language=d,this.languages=this.services.languageUtils.toResolveHierarchy(d),this.resolvedLanguage=void 0,this.setResolvedLanguage(d)},a=(d,h)=>{h?(s(h),this.translator.changeLanguage(h),this.isLanguageChangingTo=void 0,this.emit("languageChanged",h),this.logger.log("languageChanged",h)):this.isLanguageChangingTo=void 0,l.resolve(function(){return i.t(...arguments)}),n&&n(d,function(){return i.t(...arguments)})},f=d=>{!t&&!d&&this.services.languageDetector&&(d=[]);const h=typeof d=="string"?d:this.services.languageUtils.getBestMatchFromCodes(d);h&&(this.language||s(h),this.translator.language||this.translator.changeLanguage(h),this.services.languageDetector&&this.services.languageDetector.cacheUserLanguage&&this.services.languageDetector.cacheUserLanguage(h)),this.loadResources(h,g=>{a(g,h)})};return!t&&this.services.languageDetector&&!this.services.languageDetector.async?f(this.services.languageDetector.detect()):!t&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(f):this.services.languageDetector.detect(f):f(t),l}getFixedT(t,n,i){var l=this;const s=function(a,f){let d;if(typeof f!="object"){for(var h=arguments.length,g=new Array(h>2?h-2:0),y=2;y`${d.keyPrefix}${v}${C}`):S=d.keyPrefix?`${d.keyPrefix}${v}${a}`:a,l.t(S,d)};return typeof t=="string"?s.lng=t:s.lngs=t,s.ns=n,s.keyPrefix=i,s}t(){return this.translator&&this.translator.translate(...arguments)}exists(){return this.translator&&this.translator.exists(...arguments)}setDefaultNamespace(t){this.options.defaultNS=t}hasLoadedNamespace(t){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 i=n.lng||this.resolvedLanguage||this.languages[0],l=this.options?this.options.fallbackLng:!1,s=this.languages[this.languages.length-1];if(i.toLowerCase()==="cimode")return!0;const a=(f,d)=>{const h=this.services.backendConnector.state[`${f}|${d}`];return h===-1||h===2};if(n.precheck){const f=n.precheck(this,a);if(f!==void 0)return f}return!!(this.hasResourceBundle(i,t)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||a(i,t)&&(!l||a(s,t)))}loadNamespaces(t,n){const i=Es();return this.options.ns?(typeof t=="string"&&(t=[t]),t.forEach(l=>{this.options.ns.indexOf(l)<0&&this.options.ns.push(l)}),this.loadResources(l=>{i.resolve(),n&&n(l)}),i):(n&&n(),Promise.resolve())}loadLanguages(t,n){const i=Es();typeof t=="string"&&(t=[t]);const l=this.options.preload||[],s=t.filter(a=>l.indexOf(a)<0&&this.services.languageUtils.isSupportedCode(a));return s.length?(this.options.preload=l.concat(s),this.loadResources(a=>{i.resolve(),n&&n(a)}),i):(n&&n(),Promise.resolve())}dir(t){if(t||(t=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!t)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"],i=this.services&&this.services.languageUtils||new tv(iv());return n.indexOf(i.getLanguagePartFromCode(t))>-1||t.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;return new eu(t,n)}cloneInstance(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:$a;const i=t.forkResourceStore;i&&delete t.forkResourceStore;const l={...this.options,...t,isClone:!0},s=new eu(l);return(t.debug!==void 0||t.prefix!==void 0)&&(s.logger=s.logger.clone(t)),["store","services","language"].forEach(f=>{s[f]=this[f]}),s.services={...this.services},s.services.utils={hasLoadedNamespace:s.hasLoadedNamespace.bind(s)},i&&(s.store=new q1(this.store.data,l),s.services.resourceStore=s.store),s.translator=new Ac(s.services,l),s.translator.on("*",function(f){for(var d=arguments.length,h=new Array(d>1?d-1:0),g=1;g{if(t)for(const n in t)e[n]===void 0&&(e[n]=t[n])}),e}const lv=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/,y3=(e,t,n)=>{const i=n||{};i.path=i.path||"/";const l=encodeURIComponent(t);let s=`${e}=${l}`;if(i.maxAge>0){const a=i.maxAge-0;if(Number.isNaN(a))throw new Error("maxAge should be a Number");s+=`; Max-Age=${Math.floor(a)}`}if(i.domain){if(!lv.test(i.domain))throw new TypeError("option domain is invalid");s+=`; Domain=${i.domain}`}if(i.path){if(!lv.test(i.path))throw new TypeError("option path is invalid");s+=`; Path=${i.path}`}if(i.expires){if(typeof i.expires.toUTCString!="function")throw new TypeError("option expires is invalid");s+=`; Expires=${i.expires.toUTCString()}`}if(i.httpOnly&&(s+="; HttpOnly"),i.secure&&(s+="; Secure"),i.sameSite)switch(typeof i.sameSite=="string"?i.sameSite.toLowerCase():i.sameSite){case!0:s+="; SameSite=Strict";break;case"lax":s+="; SameSite=Lax";break;case"strict":s+="; SameSite=Strict";break;case"none":s+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}return s},sv={create(e,t,n,i){let l=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{path:"/",sameSite:"strict"};n&&(l.expires=new Date,l.expires.setTime(l.expires.getTime()+n*60*1e3)),i&&(l.domain=i),document.cookie=y3(e,encodeURIComponent(t),l)},read(e){const t=`${e}=`,n=document.cookie.split(";");for(let i=0;i-1&&(l=window.location.hash.substring(window.location.hash.indexOf("?")));const a=l.substring(1).split("&");for(let f=0;f0&&a[f].substring(0,d)===t&&(n=a[f].substring(d+1))}}return n}};let Cs=null;const uv=()=>{if(Cs!==null)return Cs;try{Cs=window!=="undefined"&&window.localStorage!==null;const e="i18next.translate.boo";window.localStorage.setItem(e,"foo"),window.localStorage.removeItem(e)}catch{Cs=!1}return Cs};var S3={name:"localStorage",lookup(e){let{lookupLocalStorage:t}=e;if(t&&uv())return window.localStorage.getItem(t)||void 0},cacheUserLanguage(e,t){let{lookupLocalStorage:n}=t;n&&uv()&&window.localStorage.setItem(n,e)}};let Ps=null;const av=()=>{if(Ps!==null)return Ps;try{Ps=window!=="undefined"&&window.sessionStorage!==null;const e="i18next.translate.boo";window.sessionStorage.setItem(e,"foo"),window.sessionStorage.removeItem(e)}catch{Ps=!1}return Ps};var k3={name:"sessionStorage",lookup(e){let{lookupSessionStorage:t}=e;if(t&&av())return window.sessionStorage.getItem(t)||void 0},cacheUserLanguage(e,t){let{lookupSessionStorage:n}=t;n&&av()&&window.sessionStorage.setItem(n,e)}},x3={name:"navigator",lookup(e){const t=[];if(typeof navigator<"u"){const{languages:n,userLanguage:i,language:l}=navigator;if(n)for(let s=0;s0?t:void 0}},E3={name:"htmlTag",lookup(e){let{htmlTag:t}=e,n;const i=t||(typeof document<"u"?document.documentElement:null);return i&&typeof i.getAttribute=="function"&&(n=i.getAttribute("lang")),n}},C3={name:"path",lookup(e){var l;let{lookupFromPathIndex:t}=e;if(typeof window>"u")return;const n=window.location.pathname.match(/\/([a-zA-Z-]*)/g);return Array.isArray(n)?(l=n[typeof t=="number"?t:0])==null?void 0:l.replace("/",""):void 0}},P3={name:"subdomain",lookup(e){var l,s;let{lookupFromSubdomainIndex:t}=e;const n=typeof t=="number"?t+1:1,i=typeof window<"u"&&((s=(l=window.location)==null?void 0:l.hostname)==null?void 0:s.match(/^(\w{2,5})\.(([a-z0-9-]{1,63}\.[a-z]{2,6})|localhost)/i));if(i)return i[n]}};function I3(){return{order:["querystring","cookie","localStorage","sessionStorage","navigator","htmlTag"],lookupQuerystring:"lng",lookupCookie:"i18next",lookupLocalStorage:"i18nextLng",lookupSessionStorage:"i18nextLng",caches:["localStorage"],excludeCacheFor:["cimode"],convertDetectedLanguage:e=>e}}class tk{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.type="languageDetector",this.detectors={},this.init(t,n)}init(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=t||{languageUtils:{}},this.options=g3(n,this.options||{},I3()),typeof this.options.convertDetectedLanguage=="string"&&this.options.convertDetectedLanguage.indexOf("15897")>-1&&(this.options.convertDetectedLanguage=l=>l.replace("-","_")),this.options.lookupFromUrlIndex&&(this.options.lookupFromPathIndex=this.options.lookupFromUrlIndex),this.i18nOptions=i,this.addDetector(v3),this.addDetector(w3),this.addDetector(S3),this.addDetector(k3),this.addDetector(x3),this.addDetector(E3),this.addDetector(C3),this.addDetector(P3)}addDetector(t){return this.detectors[t.name]=t,this}detect(t){t||(t=this.options.order);let n=[];return t.forEach(i=>{if(this.detectors[i]){let l=this.detectors[i].lookup(this.options);l&&typeof l=="string"&&(l=[l]),l&&(n=n.concat(l))}}),n=n.map(i=>this.options.convertDetectedLanguage(i)),this.services.languageUtils.getBestMatchFromCodes?n:n.length>0?n[0]:null}cacheUserLanguage(t,n){n||(n=this.options.caches),n&&(this.options.excludeCacheFor&&this.options.excludeCacheFor.indexOf(t)>-1||n.forEach(i=>{this.detectors[i]&&this.detectors[i].cacheUserLanguage(t,this.options)}))}}tk.type="languageDetector";function T3(){if(console&&console.warn){for(var e=arguments.length,t=new Array(e),n=0;n()=>{if(e.isInitialized)t();else{const n=()=>{setTimeout(()=>{e.off("initialized",n)},0),t()};e.on("initialized",n)}};function fv(e,t,n){e.loadNamespaces(t,nk(e,n))}function dv(e,t,n,i){typeof n=="string"&&(n=[n]),n.forEach(l=>{e.options.ns.indexOf(l)<0&&e.options.ns.push(l)}),e.loadLanguages(t,nk(e,i))}function A3(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const i=t.languages[0],l=t.options?t.options.fallbackLng:!1,s=t.languages[t.languages.length-1];if(i.toLowerCase()==="cimode")return!0;const a=(f,d)=>{const h=t.services.backendConnector.state[`${f}|${d}`];return h===-1||h===2};return n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!a(t.isLanguageChangingTo,e)?!1:!!(t.hasResourceBundle(i,e)||!t.services.backendConnector.backend||t.options.resources&&!t.options.partialBundledLanguages||a(i,e)&&(!l||a(s,e)))}function L3(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return!t.languages||!t.languages.length?(Ah("i18n.languages were undefined or empty",t.languages),!0):t.options.ignoreJSONStructure!==void 0?t.hasLoadedNamespace(e,{lng:n.lng,precheck:(l,s)=>{if(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&l.services.backendConnector.backend&&l.isLanguageChangingTo&&!s(l.isLanguageChangingTo,e))return!1}}):A3(e,t,n)}const N3=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,R3={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"©","©":"©","®":"®","®":"®","…":"…","…":"…","/":"/","/":"/"},_3=e=>R3[e],O3=e=>e.replace(N3,_3);let Lh={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:O3};function z3(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Lh={...Lh,...e}}function D3(){return Lh}let rk;function M3(e){rk=e}function $3(){return rk}const F3={type:"3rdParty",init(e){z3(e.options.react),M3(e)}},j3=ee.createContext();class U3{constructor(){this.usedNamespaces={}}addUsedNamespaces(t){t.forEach(n=>{this.usedNamespaces[n]||(this.usedNamespaces[n]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}}const B3=(e,t)=>{const n=ee.useRef();return ee.useEffect(()=>{n.current=t?n.current:e},[e,t]),n.current};function ik(e,t,n,i){return e.getFixedT(t,n,i)}function V3(e,t,n,i){return ee.useCallback(ik(e,t,n,i),[e,t,n,i])}function zn(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const{i18n:n}=t,{i18n:i,defaultNS:l}=ee.useContext(j3)||{},s=n||i||$3();if(s&&!s.reportNamespaces&&(s.reportNamespaces=new U3),!s){Ah("You will need to pass in an i18next instance by using initReactI18next");const N=(R,V)=>typeof V=="string"?V:V&&typeof V=="object"&&typeof V.defaultValue=="string"?V.defaultValue:Array.isArray(R)?R[R.length-1]:R,M=[N,{},!1];return M.t=N,M.i18n={},M.ready=!1,M}s.options.react&&s.options.react.wait!==void 0&&Ah("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");const a={...D3(),...s.options.react,...t},{useSuspense:f,keyPrefix:d}=a;let h=e||l||s.options&&s.options.defaultNS;h=typeof h=="string"?[h]:h||["translation"],s.reportNamespaces.addUsedNamespaces&&s.reportNamespaces.addUsedNamespaces(h);const g=(s.isInitialized||s.initializedStoreOnce)&&h.every(N=>L3(N,s,a)),y=V3(s,t.lng||null,a.nsMode==="fallback"?h:h[0],d),v=()=>y,S=()=>ik(s,t.lng||null,a.nsMode==="fallback"?h:h[0],d),[C,I]=ee.useState(v);let L=h.join();t.lng&&(L=`${t.lng}${L}`);const x=B3(L),E=ee.useRef(!0);ee.useEffect(()=>{const{bindI18n:N,bindI18nStore:M}=a;E.current=!0,!g&&!f&&(t.lng?dv(s,t.lng,h,()=>{E.current&&I(S)}):fv(s,h,()=>{E.current&&I(S)})),g&&x&&x!==L&&E.current&&I(S);function R(){E.current&&I(S)}return N&&s&&s.on(N,R),M&&s&&s.store.on(M,R),()=>{E.current=!1,N&&s&&N.split(" ").forEach(V=>s.off(V,R)),M&&s&&M.split(" ").forEach(V=>s.store.off(V,R))}},[s,L]),ee.useEffect(()=>{E.current&&g&&I(v)},[s,d,g]);const T=[C,s,g];if(T.t=C,T.i18n=s,T.ready=g,g||!g&&!f)return T;throw new Promise(N=>{t.lng?dv(s,t.lng,h,()=>N()):fv(s,h,()=>N())})}const b3={organizations:[{name:"GIST Student Association Infoteam",isImportant:!0,color:"#EB6263",url:"https://introduce.gistory.me/",job:"Team Leader",startedAt:"2022-09",projects:[{name:"AMS Frontend",isImportant:!1,startedAt:"2022-11",endedAt:"2023-02",description:"Developed the frontend for AMS, GIST's club application system. Implemented a drag-and-drop based UI to enhance the convenience of managing interview schedules, and introduced a mono-repo to reduce the rewriting of similar code.",whatIDid:["Frontend Development","UI Design"],techStacks:["React","TypeScript","mono-repo"]},{name:"Ziggle Frontend",isImportant:!0,url:"https://github.com/gsainfoteam/ziggle-fe",startedAt:"2023-04",description:"Developing the frontend for Ziggle, GIST's integrated notice platform. Initially developed the version using React and then migrated to Next.js, actively adopting various technologies like GraphQL and Apollo Client. Successfully established within the school, maintaining 200 DAUs, which is 25% of the undergraduate population.",whatIDid:["Team Leader and Frontend Development"],techStacks:["React","TypeScript","Next.js","Tailwind CSS"]},{name:"IdP Frontend",isImportant:!0,url:"https://idp.gistory.me",startedAt:"2024-03",description:"Maintaining the frontend for IdP, GIST's OAuth2.0 authentication system.",whatIDid:["Frontend Maintenance"],techStacks:["React","TypeScript","Tailwind CSS"]}]},{name:"Wing: GIST Computing Club",isImportant:!1,color:"rgb(151, 123, 242)",url:"https://wing-homepage.vercel.app/",job:"Senior Member",startedAt:"2023-03",projects:[{name:"Wing Session",isImportant:!0,startedAt:"2023-03",description:"Conducting development exchange and sessions within Wing.",whatIDid:["Conducted a session on introducing mono-repo","Conducted a session on React.cpp","Conducted a session on writing code like a UI library: Compound Components"]}]}]},H3={experiences:[{name:"GIST Data Science Lab",isImportant:!0,color:"#b509ac",url:"https://sundong.kim/members/",job:"Intern",startedAt:"2024-01-02",endedAt:"2024-05-31",projects:[{name:"O2ARC 3.0",isImportant:!0,url:"https://o2arc.com/",startedAt:"2024-01",endedAt:"2024-05",description:"Developed O2ARC 3.0, a tool for collecting human solution data for the Abstract and Reasoning Corpus ([ARC](https://github.com/fchollet/ARC)), a benchmark for evaluating AI reasoning abilities. The data collected by the existing tool was not suitable for training, so I restricted user actions to collect over 10,000 data points in a format favorable for AI training. Co-authored a paper published at IJCAI 2024 as a co-first author.",whatIDid:["Developed the overall frontend UI and grid manipulation logic","Developed backend APIs related to events","Designed UX and collected user data to improve data quality"],techStacks:["React","TypeScript","Tailwind CSS","i18next","NestJS","Prisma"]},{name:"Introductory RL Study",isImportant:!1,url:"https://www.coursera.org/specializations/reinforcement-learning",startedAt:"2024-01",endedAt:"2024-02",description:"Studied the basics of reinforcement learning through Coursera's Reinforcement Learning Specialization.",whatIDid:["Studied basics of reinforcement learning (~Q-Learning)"]}]},{name:"Sigor Inc.",isImportant:!0,color:"#FEAA17",url:"https://introduce.sigor.company/",job:"Web Developer",startedAt:"2022-02-23",endedAt:"2023-12-22",projects:[{name:"Doggly Frontend",isImportant:!0,url:"https://doggly.co.kr/",startedAt:"2022-08",endedAt:"2023-03",description:"Developed the frontend for Doggly, an e-commerce that measures dog sizes and recommends fitting clothes based on AI. I developed all the key features of the shopping mall, including the payment module, seller pages, admin pages, and also developed PWA and webview Android/iOS apps. Additionally, I performed logging and A/B testing to improve the user funnel.",whatIDid:["Developed and maintained the overall frontend of the shopping mall","Developed Android & iOS webview apps and integrated payment modules","Conducted A/B testing to improve the user funnel"],techStacks:["React","TypeScript","Jetpack Compose","SwiftUI","i18next","PWA"]},{name:"Rush Hour Frontend",isImportant:!0,url:"https://introduce.rushhourkorea.com/",startedAt:"2023-05",endedAt:"2023-07",description:"Developed the frontend and webview app for Rush Hour, a service that informs about available subway seats. I focused on providing a user experience indistinguishable from native apps, despite it being a webview.",whatIDid:["Developed Rush Hour webview frontend","Developed Rush Hour Android & iOS webview apps"],techStacks:["React","TypeScript","Jetpack Compose","SwiftUI"]},{name:"Rush Hour App",isImportant:!0,url:"https://introduce.rushhourkorea.com/",startedAt:"2023-07",endedAt:"2023-10",description:"Participated in the development of the Flutter version of Rush Hour. Collected user logs through GA, Amplitude, Smartlook, and an in-house logging system, and developed an in-house log analysis tool capable of calculating retention and funnel metrics.",whatIDid:["Developed Rush Hour Flutter app","Recorded app user logs"],techStacks:["Flutter","Firebase"]},{name:"Rush Hour AI",isImportant:!0,startedAt:"2023-09",endedAt:"2023-12",description:"Developed an AI that predicts real-time subway congestion based on congestion data using machine learning.",whatIDid:["Developed AI for predicting subway congestion and available seats"],techStacks:["Scikit-learn","Pandas"]},{name:"Various",isImportant:!0,startedAt:"2022-02",endedAt:"2023-12",description:"Performed various development tasks as a developer in a startup.",whatIDid:["Developed landing pages and admin pages","Analyzed and conducted statistics on user logs","Automated tasks","Integrated mono-repo to improve productivity"],techStacks:["React","TypeScript","Amplitude","AWS Lightsail","AWS Lambda","FastAPI","Pandas","mono-repo"]}]},{name:"GDSC-GIST",isImportant:!1,color:"#008cff",url:"https://gdsc.community.dev/gwangju-institute-of-science-and-technology/",job:"2nd Core, Tech Team",startedAt:"2022-05",endedAt:"2023-07",projects:[{name:"Study Sessions",isImportant:!1,startedAt:"2022-11",endedAt:"2023-05",description:"Led the frontend study sessions within GDSC. I created and conducted the overall curriculum. Additionally, I participated in the JS Pattern study, learning design patterns and applying them to a side project that involved creating a C++ based React.",whatIDid:["Led React study sessions","Participated in JS Pattern study"]},{name:"GIST Mini Solution Challenge",isImportant:!1,url:"https://gdsc.community.dev/events/details/developer-student-clubs-gwangju-institute-of-science-and-technology-presents-gist-mini-solution-challenge/",startedAt:"2023-04",endedAt:"2023-04",description:"A hackathon hosted by GDSC-GIST within GIST, with a total of 60 participants.",whatIDid:["Prepared and managed the hackathon"]}]},{name:"GPERI",isImportant:!1,color:"#4c568f",url:"https://sites.google.com/view/gperigist",job:"Research Member",startedAt:"2023-07",endedAt:"2024-03",projects:[{name:"C Language Education",isImportant:!1,startedAt:"2023-07",endedAt:"2023-08",description:"Provided C language education to club members.",whatIDid:["Conducted C language education"],techStacks:["C"]},{name:"Rocket Communication Development",isImportant:!1,startedAt:"2023-07",endedAt:"2023-11",description:"Attempted to develop communication systems for rockets but did not succeed.",whatIDid:["Developed flight software","Developed communication system"],techStacks:["C","Zigbee"]}]}]},W3={title:{developer:"Developer",name:"Dohyun Ko | 고도현"},introduction:"I worked at a startup for two years, taking the lead on various tasks across front-end, back-end, app development, automation, and machine learning. Afterwards, I worked in an AI research lab where I developed data collection tools and wrote a paper on UX. Since I have often worked in environments with a shortage of developers, I always prioritize productivity and ease of maintenance. I aim to enhance productivity by creating monorepos and libraries, and I strive to write code that is easy for others to understand by using atomic patterns and Storybook.",current:b3,education:{attendedLectures:["Object-Oriented Programming","Data Structures","Introduction to Algorithms","Computer Systems Theory and Laboratory","Automata Theory","Operating Systems","Computer Graphics","Computer Networking","Machine Learning and Deep Learning","Computer Security","Computational Models of Cognition"],attendedLecture:"Attended Courses",major:"Electrical Engineering and Computer Science"},publication:{publications:[{name:"O2ARC 3.0: A Platform for Solving and Creating ARC Tasks",date:"2024-08",isImportant:!0,url:"https://www.ijcai.org/proceedings/2024/1034",publisher:"IJCAI 2024 | Co-First Author",description:"To address the lack of human solution data for ARC tasks and the poor quality of collected data for AI training, I developed O2ARC 3.0. This work introduces methods for improving data collection quality by intentionally creating certain inconveniences in the existing tool's UI/UX and increasing data collection volume through gamification."}]},experience:H3,sideProject:{sideProjects:[{name:"2024 KPMG Ideathon: 🥉 3rd Place",isImportant:!0,url:"https://github.com/gist-optima",startedAt:"2024-1",endedAt:"2024-2",description:"Participated in the [Samjong KPMG Ideathon](https://kpmgkr.notion.site/kpmgkr/2024-KPMG-1fcd8a808f3d4f36a5ae8ad6e9bc413e) and developed the platform Docuflow, which implemented VCS for document work and streamlined-ai-search using LLM. I focused on making VCS intuitive for non-developers through drag & drop and ensuring the UI accommodated AI responses that could take up to a minute.",whatIDid:["Front-end Development"],techStacks:["React","TypeScript","Tailwind CSS"]},{name:"Kaggle - Regression with a Mohs Hardness Dataset: 4th Place",isImportant:!0,url:"https://www.kaggle.com/competitions/playground-series-s3e25",startedAt:"2023-10",endedAt:"2023-12",description:"Achieved 4th place in Kaggle's Mohs Hardness Prediction Competition. I used a unique post-processing technique, leveraging the fact that the scoring metric was MedAE.",whatIDid:["ML Model Development"],techStacks:["Python","Scikit-learn","Pandas"]},{name:"2023 Creative Space G A.I. & IoT Makerthon: 🥈 2nd Place",isImportant:!1,startedAt:"2023-10",endedAt:"2023-11",description:"Developed an AI assistant that interprets meanings from everyday conversations to control IoT devices like switches and speakers, combining GPT-4 API and Raspberry Pi.",whatIDid:["OpenAI API Integration","Planning and Preparing Presentation Materials"],techStacks:["Python"]},{name:"2023 Net Challenge: 🥈 Silver Award",isImportant:!0,url:"https://github.com/Net-Challenge-InfoTeam",startedAt:"2023-06",endedAt:"2023-12",description:"Participated in the 2023 Net Challenge, developing a service that analyzes CCTV data with AI to detect real-time threats. When a threat is detected, it alerts nearby users and displays the location on a map.",whatIDid:["Developed the app using React and PWA","Displayed real-time threat locations using Mapbox"],techStacks:["React","TypeScript","Mapbox","PWA"]},{name:"React-Atoms: React Component Library",isImportant:!0,url:"https://github.com/dohyun-ko/react-atoms",startedAt:"2023-07",endedAt:"2023-07",description:"A library of React components I frequently use, which I published on npm. It follows the atomic design pattern and is documented using Storybook.",whatIDid:["Developed React components","Documented components using Storybook","Published on npm"],techStacks:["React","TypeScript","RollUp","Storybook","npm"]},{name:"Dutch: OOP Final Project",isImportant:!0,url:"https://github.com/dohyun-ko/dutch-wasm",startedAt:"2023-04",endedAt:"2023-06",description:"A Dutch pay platform written entirely in C++ for both front-end and back-end. I implemented key front-end functionalities like navigator, state, router, functional components, and styling using design patterns and utilized Emscripten to transpile C++ to WebAssembly. Submitted as a final project for the GIST Object-Oriented Programming course.",whatIDid:["Developed front-end UI using C++ and WebAssembly","Developed front-end logic such as State, Navigator, etc."],techStacks:["C++","WebAssembly","Emscripten"]},{name:"Speaking Melona: Convenience Store Foods Talk to Each Other",isImportant:!1,url:"https://melona.chat",startedAt:"2024-05",endedAt:"2024-05",description:"A service where each convenience store food item is assigned a persona, and scanning a barcode generates conversations between them. Barcode recognition in the front-end was a challenge.",whatIDid:["Front-end Development","Back-end Development","Prompt Engineering"],techStacks:["React","TypeScript","FastAPI","PostgreSQL"]}]},skill:{skills:[{name:"React",level:5},{name:"TypeScript",level:4},{name:"JavaScript",level:4},{name:"HTML/CSS",level:4},{name:"Python",level:3},{name:"NestJS",level:2},{name:"FastAPI",level:2},{name:"Flutter",level:2},{name:"C++",level:2},{name:"Kotlin",level:1},{name:"Docker",level:1},{name:"Rust",level:1},{name:"Assembly",level:1}]}},Q3=Object.freeze(Object.defineProperty({__proto__:null,main:W3},Symbol.toStringTag,{value:"Module"})),K3={organizations:[{name:"GIST 학생회 정보국",isImportant:!0,color:"#EB6263",url:"https://introduce.gistory.me/",job:"팀장",startedAt:"2022-09",projects:[{name:"AMS 프론트엔드",isImportant:!1,startedAt:"2022-11",endedAt:"2023-02",description:"GIST 동아리 신청 시스템인 AMS의 프론트엔드를 개발했습니다. 면접 일정 관리 편의성을 위해 drag-and-drop 위주의 UI를 구현하였으며, 비슷한 코드의 재작성을 줄이기 위해 mono-repo를 도입했습니다.",whatIDid:["프론트엔드 개발","UI 디자인"],techStacks:["React","TypeScript","mono-repo"]},{name:"Ziggle 프론트엔드",isImportant:!0,url:"https://github.com/gsainfoteam/ziggle-fe",startedAt:"2023-04",description:"GIST 통합 공지 플랫폼인 Ziggle의 프론트엔드를 개발하고 있습니다. React로 초기버전 개발 및 Next.js로 migration을 하였으며, GraphQL, Apollo Client 등 다양한 기술을 적극 도입하고 있습니다. 교내에 성공적으로 정착하여 학부 인원의 25%인 DAU 200명을 유지중입니다.",whatIDid:["팀장 및 프론트엔드 개발"],techStacks:["React","TypeScript","Next.js","Tailwind CSS"]},{name:"IdP 프론트엔드",isImportant:!0,url:"https://idp.gistory.me",startedAt:"2024-03",description:"GIST에서 사용하는 OAuth2.0 인증 시스템 IdP의 프론트엔드를 유지보수하고 있습니다.",whatIDid:["프론트엔드 유지보수"],techStacks:["React","TypeScript","Tailwind CSS"]}]},{name:"Wing: GIST 전산 동아리",isImportant:!1,color:"rgb(151, 123, 242)",url:"https://wing-homepage.vercel.app/",job:"시니어 부원",startedAt:"2023-03",projects:[{name:"Wing Session",isImportant:!0,startedAt:"2023-03",description:"Wing에서 개발 상황 교류 및 세션을 진행합니다.",whatIDid:["모노레포에 도입기 세션 진행","React.cpp 세션 진행","UI 라이브러리처럼 코드 짜기: Compound Components 세션 진행"]}]}]},G3={experiences:[{name:"GIST Data Science Lab",isImportant:!0,color:"#b509ac",url:"https://sundong.kim/members/",job:"인턴",startedAt:"2024-01-02",endedAt:"2024-05-31",projects:[{name:"O2ARC 3.0",isImportant:!0,url:"https://o2arc.com/",startedAt:"2024-01",endedAt:"2024-05",description:"AI의 추론능력을 평가하는 벤치마크 Abstract and Resoning Corpus([ARC](https://github.com/fchollet/ARC))의 사람 풀이 데이터 수집을 위한 툴 O2ARC 3.0을 개발했습니다. 기존 툴에서 수집된 데이터는 학습에 쓰기 어려운 형태였으며, 이를 유저가 취할 수 있는 행동을 제한해 AI 학습에 유리한 형태의 데이터 1만개 이상을 수집하였습니다. IJCAI 2024에 공동 1저자로 논문을 게재하였습니다.",whatIDid:["전체적인 프론트엔드 UI 및 그리드 조작 로직 개발","이벤트 관련 백엔드 API 개발","수집 데이터 품질 개선을 위한 UX 디자인 및 유저 데이터 수집"],techStacks:["React","TypeScript","Tailwind CSS","i18next","NestJS","Prisma"]},{name:"Introductory RL Study",isImportant:!1,url:"https://www.coursera.org/specializations/reinforcement-learning",startedAt:"2024-01",endedAt:"2024-02",description:"Coursera의 강화학습 스페셜리제이션을 통해 강화학습 기초를 공부했습니다.",whatIDid:["강화학습 기초 공부(– Q-Learning)"]}]},{name:"Sigor Inc.",isImportant:!0,color:"#FEAA17",url:"https://introduce.sigor.company/",job:"웹 개발자",startedAt:"2022-02-23",endedAt:"2023-12-22",projects:[{name:"도글리 프론트엔드",isImportant:!0,url:"https://doggly.co.kr/",startedAt:"2022-08",endedAt:"2023-03",description:"AI 기반으로 강아지 사이즈를 측정하고, 맞는 옷을 추천해주는 쇼핑몰 Doggly의 FE를 개발했습니다. 결제모듈을 포함한 쇼핑몰의 전체적인 기능과 판매자용 페이지, admin용 페이지를 전부 개발하였으며 PWA와 웹뷰 android/ios 앱도 개발하였습니다. 유저 퍼널 개선을 위해 로깅과 A/B 테스팅도 수행하였습니다.",whatIDid:["쇼핑몰의 전체적인 프론트엔드 개발 및 유지보수","Android & iOS 웹뷰 앱 개발 및 결제 모듈 연동","퍼널 개선을 위한 A/B 테스팅"],techStacks:["React","TypeScript","Jetpack Compose","SwiftUI","i18next","PWA"]},{name:"러시아워 프론트엔드",isImportant:!0,url:"https://introduce.rushhourkorea.com/",startedAt:"2023-05",endedAt:"2023-07",description:"지하철 빈 자리를 알려주는 서비스인 러시아워의 프론트엔드와 웹뷰 앱을 개발했습니다. 웹뷰지만 네이티브 앱과 구별할 수 없는 사용자 경험을 제공하기 위해 노력했습니다.",whatIDid:["러시아워 웹뷰용 프론트엔드 개발","러시아워 android & ios 웹뷰 앱 개발"],techStacks:["React","TypeScript","Jetpack Compose","SwiftUI"]},{name:"러시아워 앱",isImportant:!0,url:"https://introduce.rushhourkorea.com/",startedAt:"2023-07",endedAt:"2023-10",description:"러시아워의 플러터 버전 개발에 참여했습니다. GA, Amplitude, Smartlook, 자체 로깅 시스템을 통해 유저 로그를 수집하였고, 리텐션, 퍼널을 계산할 수 있는 자체 로그 분석 툴도 개발하였습니다.",whatIDid:["러시아워 플러터 앱 개발","앱 유저 로그 기록"],techStacks:["Flutter","Firebase"]},{name:"러시아워 AI",isImportant:!0,startedAt:"2023-09",endedAt:"2023-12",description:"지하철 혼잡도 데이터를 이용해 ML 기반으로 실시간 혼잡도를 예측하는 AI를 개발하였습니다.",whatIDid:["지하철 혼잡도 및 빈자리 예측 AI 개발"],techStacks:["Scikit-learn","Pandas"]},{name:"기타",isImportant:!0,startedAt:"2022-02",endedAt:"2023-12",description:"스타트업의 개발자로서 다양한 개발 업무를 수행했습니다.",whatIDid:["랜딩 페이지 및 관리자 페이지 개발","유저 로그 분석 및 통계","업무 자동화","생산성 향상을 위한 모노레포 통합"],techStacks:["React","TypeScript","Amplitude","AWS Lightsail","AWS Lambda","FastAPI","Pandas","mono-repo"]}]},{name:"GDSC-GIST",isImportant:!1,color:"#008cff",url:"https://gdsc.community.dev/gwangju-institute-of-science-and-technology/",job:"2nd Core, Tech Team",startedAt:"2022-05",endedAt:"2023-07",projects:[{name:"스터디",isImportant:!1,startedAt:"2022-11",endedAt:"2023-05",description:"GDSC에서 진행한 내부 개발 스터디에서 프론트엔드 스터디 리드를 맡았습니다. 전반적인 커리큘럼을 제작하고 진행했습니다. JS Pattern 스터디에도 참여해 디자인 패턴을 공부하고 C++ 기반 React를 만드는 사이드 프로젝트에 활용했습니다.",whatIDid:["React 스터디 리드","JS Pattern 스터디 참여"]},{name:"GIST Mini Solution Challenge",isImportant:!1,url:"https://gdsc.community.dev/events/details/developer-student-clubs-gwangju-institute-of-science-and-technology-presents-gist-mini-solution-challenge/",startedAt:"2023-04",endedAt:"2023-04",description:"GDSC-GIST가 직접 주최한 GIST 내 해커톤입니다. 총 60명이 참가하였습니다.",whatIDid:["해커톤 준비 & 정산"]}]},{name:"GPERI",isImportant:!1,color:"#4c568f",url:"https://sites.google.com/view/gperigist",job:"연구부원",startedAt:"2023-07",endedAt:"2024-3",projects:[{name:"C언어 교육 진행",isImportant:!1,startedAt:"2023-07",endedAt:"2023-08",description:"부원들에게 C언어 교육을 진행했습니다.",whatIDid:["C언어 교육 진행"],techStacks:["C"]},{name:"발사체 통신 개발",isImportant:!1,startedAt:"2023-07",endedAt:"2023-11",description:"발사체 통신 개발을 시도했지만 성공하지는 못했습니다.",whatIDid:["Flight Software 개발","통신 시스템 개발"],techStacks:["C","Zigbee"]}]}]},Y3={title:{developer:"개발자",name:"고도현 | Dohyun Ko"},introduction:"스타트업에서 2년간 일하며 프론트엔드, 백엔드, 앱, 자동화, ML 등 다양한 분야를 주도적으로 작업했습니다. 이후 AI 연구실에서 일하며 데이터 수집 툴을 제작했고 UX 관련으로 논문을 작성했습니다. 개발인력이 늘 부족한 곳에서 일했기에 생산성과 유지보수의 편의성을 항상 중시합니다. 모노레포와 라이브러리를 제작해 생산성을 높이며 atomic 패턴과 Storybook로 제 다음 사람이 보기 쉬운 코드를 짜려 노력합니다.",current:K3,education:{attendedLectures:["객체 지향 프로그래밍","자료 구조","알고리즘 개론","컴퓨터 시스템 이론 및 실습","오토마타 이론","운영체제","컴퓨터 그래픽스","컴퓨터 네트워킹","기계학습 및 딥러닝","Computer Security","Computational Models of Cognition"],attendedLecture:"수강 강좌",major:"전기전자컴퓨터공학부"},publication:{publications:[{name:"O2ARC 3.0: A Platform for Solving and Creating ARC Tasks",date:"2024-08",isImportant:!0,url:"https://www.ijcai.org/proceedings/2024/1034",publisher:"IJCAI 2024 | 공동 1저자",description:"ARC 문제의 사람 풀이 데이터가 부족하며, 수집된 데이터의 품질도 AI 학습에 적합하지 않다는 문제를 해결하기 위해 O2ARC 3.0을 개발했습니다. 기존 툴의 UI/UX에서 특정 부분을 불편하게 만들어 데이터 수집 품질을 개선한 방법과 gamification을 통해 데이터 수집량을 늘린 방법을 소개합니다."}]},experience:G3,sideProject:{sideProjects:[{name:"2024 KPMG Ideathon: 🥉 3등",isImportant:!0,url:"https://github.com/gist-optima",startedAt:"2024-1",endedAt:"2024-2",description:"[삼정 KPMG 아이디어톤](https://kpmgkr.notion.site/kpmgkr/2024-KPMG-1fcd8a808f3d4f36a5ae8ad6e9bc413e)에 참여해 문서 작업에 VCS를 도입하고 LLM을 이용한 streamlined-ai-search를 구현한 플랫폼 Docuflow를 개발했습니다. 비개발자도 VCS를 직관적으로 사용할 수 있도록 drag & drop을 적극 이용하였으며, 최대 1분까지 걸릴 수 있는 AI 응답을 기다릴 수 있는 UI를 중시했습니다.",whatIDid:["프론트엔드 개발"],techStacks:["React","TypeScript","Tailwind CSS"]},{name:"Kaggle - Regression with a Mohs Hardness Dataset: 4등",isImportant:!0,url:"https://www.kaggle.com/competitions/playground-series-s3e25",startedAt:"2023-10",endedAt:"2023-12",description:"Kaggle의 광물 모스 경도 예측 대회에서 4등을 차지했습니다. 점수 공식이 MedAE인 점을 이용해 독특한 후처리 기법을 사용했습니다.",whatIDid:["ML 모델 개발"],techStacks:["Python","Scikit-learn","Pandas"]},{name:"2023 Creative Space G A.I. & IoT Makerthon: 🥈 2등",isImportant:!1,startedAt:"2023-10",endedAt:"2023-11",description:"메이커톤에서 GPT-4 API와 라즈베리파이를 결합해 일상 대화에서 의미를 추론하고 스위치, 스피커 등 IoT 기기를 조작하는 AI 비서를 개발했습니다.",whatIDid:["OpenAI API 연동","기획 및 발표자료 준비"],techStacks:["Python"]},{name:"2023 Net Challenge: 🥈 은상",isImportant:!0,url:"https://github.com/Net-Challenge-InfoTeam",startedAt:"2023-06",endedAt:"2023-12",description:"2023 Net Chanllenge에 참여했습니다. CCTV 데이터를 AI로 분석해 실시간으로 위협을 감지하고, 위협이 감지되면 주변 유저들에게 알림을 보내며 지도에 표시해주는 서비스를 개발했습니다.",whatIDid:["React와 PWA를 사용한 앱 개발","Mapbox를 사용해 실시간 위협 위치 표시"],techStacks:["React","TypeScript","Mapbox","PWA"]},{name:"React-Atoms: React Component Library",isImportant:!0,url:"https://github.com/dohyun-ko/react-atoms",startedAt:"2023-07",endedAt:"2023-07",description:"개인적으로 자주 사용하는 React 컴포넌트를 모아 npm에 배포한 라이브러리입니다. atomic design 패턴을 따르며, Storybook을 사용해 문서화했습니다.",whatIDid:["React 컴포넌트 개발","Storybook을 사용한 컴포넌트 문서화","npm 배포"],techStacks:["React","TypeScript","RollUp","Storybook","npm"]},{name:"Dutch: OOP Final Project",isImportant:!0,url:"https://github.com/dohyun-ko/dutch-wasm",startedAt:"2023-04",endedAt:"2023-06",description:"프론트엔드와 백엔드 모두 C++로만 작성된 더치페이 플랫폼입니다. Emscripten을 이용해 C++를 웹 어셈블리로 트랜스파일할 수 있다는 점과 디자인 패턴을 이용해 React의 navigator, state, router, 함수형 component, style 등 핵심 기능을 구현했습니다. GIST 객체 지향 프로그래밍 수업 기말 과제로 제출했습니다.",whatIDid:["C++과 웹 어셈블리를 사용한 프론트엔드 UI 개발","State, Navigator 등 프론트엔드 로직 개발"],techStacks:["C++","WebAssembly","Emscripten"]},{name:"Speaking Melona: 편의점 음식이 서로 대화를 해요",isImportant:!1,url:"https://melona.chat",startedAt:"2024-05",endedAt:"2024-05",description:"편의점 음식별로 페르소나를 설정하고 바코드를 스캔하면 서로 간의 대화를 생성해주는 서비스입니다. 프론트엔드에서의 바코드 인식이 challenge였습니다.",whatIDid:["프론트엔드 개발","백엔드 개발","프롬프팅"],techStacks:["React","TypeScript","FastAPI","PostgreSQL"]}]},skill:{skills:[{name:"React",level:5},{name:"TypeScript",level:4},{name:"JavaScript",level:4},{name:"HTML/CSS",level:4},{name:"Python",level:3},{name:"NestJS",level:2},{name:"FastAPI",level:2},{name:"Flutter",level:2},{name:"C++",level:2},{name:"Kotlin",level:1},{name:"Docker",level:1},{name:"Rust",level:1},{name:"Assembly",level:1}]}},X3=Object.freeze(Object.defineProperty({__proto__:null,main:Y3},Symbol.toStringTag,{value:"Module"})),J3={"ko-KR":{...X3},"en-US":{...Q3}};Jt.use(F3).use(tk).init({resources:J3,fallbackLng:{default:["en-US"],"ko-KR":["ko-KR"],ko:["ko-KR"]},interpolation:{escapeValue:!1},ns:["main"],defaultNS:"main"});var Nh={},ok={exports:{}},Dn={},lk={exports:{}},sk={};/**
+ */var jP=ee,UP=Symbol.for("react.element"),BP=Symbol.for("react.fragment"),VP=Object.prototype.hasOwnProperty,bP=jP.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,HP={key:!0,ref:!0,__self:!0,__source:!0};function ZS(e,t,n){var i,l={},s=null,a=null;n!==void 0&&(s=""+n),t.key!==void 0&&(s=""+t.key),t.ref!==void 0&&(a=t.ref);for(i in t)VP.call(t,i)&&!HP.hasOwnProperty(i)&&(l[i]=t[i]);if(e&&e.defaultProps)for(i in t=e.defaultProps,t)l[i]===void 0&&(l[i]=t[i]);return{$$typeof:UP,type:e,key:s,ref:a,props:l,_owner:bP.current}}cf.Fragment=BP;cf.jsx=ZS;cf.jsxs=ZS;bS.exports=cf;var Wm=bS.exports;const Bi=Wm.Fragment,j=Wm.jsx,Ae=Wm.jsxs;const WP={type:"logger",log(e){this.output("log",e)},warn(e){this.output("warn",e)},error(e){this.output("error",e)},output(e,t){console&&console[e]&&console[e].apply(console,t)}};class Pc{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.init(t,n)}init(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.prefix=n.prefix||"i18next:",this.logger=t||WP,this.options=n,this.debug=n.debug}log(){for(var t=arguments.length,n=new Array(t),i=0;i{this.observers[i]||(this.observers[i]=new Map);const l=this.observers[i].get(n)||0;this.observers[i].set(n,l+1)}),this}off(t,n){if(this.observers[t]){if(!n){delete this.observers[t];return}this.observers[t].delete(n)}}emit(t){for(var n=arguments.length,i=new Array(n>1?n-1:0),l=1;l{let[f,d]=a;for(let h=0;h{let[f,d]=a;for(let h=0;h{e=i,t=l});return n.resolve=e,n.reject=t,n}function J1(e){return e==null?"":""+e}function QP(e,t,n){e.forEach(i=>{t[i]&&(n[i]=t[i])})}const KP=/###/g;function Bs(e,t,n){function i(f){return f&&f.indexOf("###")>-1?f.replace(KP,"."):f}function l(){return!e||typeof e=="string"}const s=typeof t!="string"?t:t.split(".");let a=0;for(;a":">",'"':""","'":"'","/":"/"};function JP(e){return typeof e=="string"?e.replace(/[&<>"'\/]/g,t=>XP[t]):e}class ZP{constructor(t){this.capacity=t,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(t){const n=this.regExpMap.get(t);if(n!==void 0)return n;const i=new RegExp(t);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(t,i),this.regExpQueue.push(t),i}}const qP=[" ",",","?","!",";"],e3=new ZP(20);function t3(e,t,n){t=t||"",n=n||"";const i=qP.filter(a=>t.indexOf(a)<0&&n.indexOf(a)<0);if(i.length===0)return!0;const l=e3.getRegExp(`(${i.map(a=>a==="?"?"\\?":a).join("|")})`);let s=!l.test(e);if(!s){const a=e.indexOf(n);a>0&&!l.test(e.substring(0,a))&&(s=!0)}return s}function Th(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:".";if(!e)return;if(e[t])return e[t];const i=t.split(n);let l=e;for(let s=0;s-1&&d0?e.replace("_","-"):e}class q1 extends ff{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{ns:["translation"],defaultNS:"translation"};super(),this.data=t||{},this.options=n,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(t){this.options.ns.indexOf(t)<0&&this.options.ns.push(t)}removeNamespaces(t){const n=this.options.ns.indexOf(t);n>-1&&this.options.ns.splice(n,1)}getResource(t,n,i){let l=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};const s=l.keySeparator!==void 0?l.keySeparator:this.options.keySeparator,a=l.ignoreJSONStructure!==void 0?l.ignoreJSONStructure:this.options.ignoreJSONStructure;let f;t.indexOf(".")>-1?f=t.split("."):(f=[t,n],i&&(Array.isArray(i)?f.push(...i):typeof i=="string"&&s?f.push(...i.split(s)):f.push(i)));const d=Ic(this.data,f);return!d&&!n&&!i&&t.indexOf(".")>-1&&(t=f[0],n=f[1],i=f.slice(2).join(".")),d||!a||typeof i!="string"?d:Th(this.data&&this.data[t]&&this.data[t][n],i,s)}addResource(t,n,i,l){let s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{silent:!1};const a=s.keySeparator!==void 0?s.keySeparator:this.options.keySeparator;let f=[t,n];i&&(f=f.concat(a?i.split(a):i)),t.indexOf(".")>-1&&(f=t.split("."),l=n,n=f[1]),this.addNamespaces(n),Z1(this.data,f,l),s.silent||this.emit("added",t,n,i,l)}addResources(t,n,i){let l=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{silent:!1};for(const s in i)(typeof i[s]=="string"||Array.isArray(i[s]))&&this.addResource(t,n,s,i[s],{silent:!0});l.silent||this.emit("added",t,n,i)}addResourceBundle(t,n,i,l,s){let a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{silent:!1,skipCopy:!1},f=[t,n];t.indexOf(".")>-1&&(f=t.split("."),l=i,i=n,n=f[1]),this.addNamespaces(n);let d=Ic(this.data,f)||{};a.skipCopy||(i=JSON.parse(JSON.stringify(i))),l?qS(d,i,s):d={...d,...i},Z1(this.data,f,d),a.silent||this.emit("added",t,n,i)}removeResourceBundle(t,n){this.hasResourceBundle(t,n)&&delete this.data[t][n],this.removeNamespaces(n),this.emit("removed",t,n)}hasResourceBundle(t,n){return this.getResource(t,n)!==void 0}getResourceBundle(t,n){return n||(n=this.options.defaultNS),this.options.compatibilityAPI==="v1"?{...this.getResource(t,n)}:this.getResource(t,n)}getDataByLanguage(t){return this.data[t]}hasLanguageSomeTranslations(t){const n=this.getDataByLanguage(t);return!!(n&&Object.keys(n)||[]).find(l=>n[l]&&Object.keys(n[l]).length>0)}toJSON(){return this.data}}var ek={processors:{},addPostProcessor(e){this.processors[e.name]=e},handle(e,t,n,i,l){return e.forEach(s=>{this.processors[s]&&(t=this.processors[s].process(t,n,i,l))}),t}};const ev={};class Ac extends ff{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(),QP(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],t,this),this.options=n,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=Tr.create("translator")}changeLanguage(t){t&&(this.language=t)}exists(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}};if(t==null)return!1;const i=this.resolve(t,n);return i&&i.res!==void 0}extractFromKey(t,n){let i=n.nsSeparator!==void 0?n.nsSeparator:this.options.nsSeparator;i===void 0&&(i=":");const l=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator;let s=n.ns||this.options.defaultNS||[];const a=i&&t.indexOf(i)>-1,f=!this.options.userDefinedKeySeparator&&!n.keySeparator&&!this.options.userDefinedNsSeparator&&!n.nsSeparator&&!t3(t,i,l);if(a&&!f){const d=t.match(this.interpolator.nestingRegexp);if(d&&d.length>0)return{key:t,namespaces:s};const h=t.split(i);(i!==l||i===l&&this.options.ns.indexOf(h[0])>-1)&&(s=h.shift()),t=h.join(l)}return typeof s=="string"&&(s=[s]),{key:t,namespaces:s}}translate(t,n,i){if(typeof n!="object"&&this.options.overloadTranslationOptionHandler&&(n=this.options.overloadTranslationOptionHandler(arguments)),typeof n=="object"&&(n={...n}),n||(n={}),t==null)return"";Array.isArray(t)||(t=[String(t)]);const l=n.returnDetails!==void 0?n.returnDetails:this.options.returnDetails,s=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator,{key:a,namespaces:f}=this.extractFromKey(t[t.length-1],n),d=f[f.length-1],h=n.lng||this.language,g=n.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(h&&h.toLowerCase()==="cimode"){if(g){const N=n.nsSeparator||this.options.nsSeparator;return l?{res:`${d}${N}${a}`,usedKey:a,exactUsedKey:a,usedLng:h,usedNS:d,usedParams:this.getUsedParamsDetails(n)}:`${d}${N}${a}`}return l?{res:a,usedKey:a,exactUsedKey:a,usedLng:h,usedNS:d,usedParams:this.getUsedParamsDetails(n)}:a}const y=this.resolve(t,n);let v=y&&y.res;const S=y&&y.usedKey||a,C=y&&y.exactUsedKey||a,I=Object.prototype.toString.apply(v),L=["[object Number]","[object Function]","[object RegExp]"],x=n.joinArrays!==void 0?n.joinArrays:this.options.joinArrays,E=!this.i18nFormat||this.i18nFormat.handleAsObject;if(E&&v&&(typeof v!="string"&&typeof v!="boolean"&&typeof v!="number")&&L.indexOf(I)<0&&!(typeof x=="string"&&Array.isArray(v))){if(!n.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const N=this.options.returnedObjectHandler?this.options.returnedObjectHandler(S,v,{...n,ns:f}):`key '${a} (${this.language})' returned an object instead of string.`;return l?(y.res=N,y.usedParams=this.getUsedParamsDetails(n),y):N}if(s){const N=Array.isArray(v),M=N?[]:{},R=N?C:S;for(const V in v)if(Object.prototype.hasOwnProperty.call(v,V)){const _=`${R}${s}${V}`;M[V]=this.translate(_,{...n,joinArrays:!1,ns:f}),M[V]===_&&(M[V]=v[V])}v=M}}else if(E&&typeof x=="string"&&Array.isArray(v))v=v.join(x),v&&(v=this.extendTranslation(v,t,n,i));else{let N=!1,M=!1;const R=n.count!==void 0&&typeof n.count!="string",V=Ac.hasDefaultValue(n),_=R?this.pluralResolver.getSuffix(h,n.count,n):"",G=n.ordinal&&R?this.pluralResolver.getSuffix(h,n.count,{ordinal:!1}):"",Y=R&&!n.ordinal&&n.count===0&&this.pluralResolver.shouldUseIntlApi(),U=Y&&n[`defaultValue${this.options.pluralSeparator}zero`]||n[`defaultValue${_}`]||n[`defaultValue${G}`]||n.defaultValue;!this.isValidLookup(v)&&V&&(N=!0,v=U),this.isValidLookup(v)||(M=!0,v=a);const J=(n.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&M?void 0:v,ne=V&&U!==v&&this.options.updateMissing;if(M||N||ne){if(this.logger.log(ne?"updateKey":"missingKey",h,d,a,ne?U:v),s){const O=this.resolve(a,{...n,keySeparator:!1});O&&O.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 te=[];const de=this.languageUtils.getFallbackCodes(this.options.fallbackLng,n.lng||this.language);if(this.options.saveMissingTo==="fallback"&&de&&de[0])for(let O=0;O{const W=V&&w!==v?w:J;this.options.missingKeyHandler?this.options.missingKeyHandler(O,d,X,W,ne,n):this.backendConnector&&this.backendConnector.saveMissing&&this.backendConnector.saveMissing(O,d,X,W,ne,n),this.emit("missingKey",O,d,X,v)};this.options.saveMissing&&(this.options.saveMissingPlurals&&R?te.forEach(O=>{const X=this.pluralResolver.getSuffixes(O,n);Y&&n[`defaultValue${this.options.pluralSeparator}zero`]&&X.indexOf(`${this.options.pluralSeparator}zero`)<0&&X.push(`${this.options.pluralSeparator}zero`),X.forEach(w=>{re([O],a+w,n[`defaultValue${w}`]||U)})}):re(te,a,U))}v=this.extendTranslation(v,t,n,y,i),M&&v===a&&this.options.appendNamespaceToMissingKey&&(v=`${d}:${a}`),(M||N)&&this.options.parseMissingKeyHandler&&(this.options.compatibilityAPI!=="v1"?v=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${d}:${a}`:a,N?v:void 0):v=this.options.parseMissingKeyHandler(v))}return l?(y.res=v,y.usedParams=this.getUsedParamsDetails(n),y):v}extendTranslation(t,n,i,l,s){var a=this;if(this.i18nFormat&&this.i18nFormat.parse)t=this.i18nFormat.parse(t,{...this.options.interpolation.defaultVariables,...i},i.lng||this.language||l.usedLng,l.usedNS,l.usedKey,{resolved:l});else if(!i.skipInterpolation){i.interpolation&&this.interpolator.init({...i,interpolation:{...this.options.interpolation,...i.interpolation}});const h=typeof t=="string"&&(i&&i.interpolation&&i.interpolation.skipOnVariables!==void 0?i.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let g;if(h){const v=t.match(this.interpolator.nestingRegexp);g=v&&v.length}let y=i.replace&&typeof i.replace!="string"?i.replace:i;if(this.options.interpolation.defaultVariables&&(y={...this.options.interpolation.defaultVariables,...y}),t=this.interpolator.interpolate(t,y,i.lng||this.language,i),h){const v=t.match(this.interpolator.nestingRegexp),S=v&&v.length;g1&&arguments[1]!==void 0?arguments[1]:{},i,l,s,a,f;return typeof t=="string"&&(t=[t]),t.forEach(d=>{if(this.isValidLookup(i))return;const h=this.extractFromKey(d,n),g=h.key;l=g;let y=h.namespaces;this.options.fallbackNS&&(y=y.concat(this.options.fallbackNS));const v=n.count!==void 0&&typeof n.count!="string",S=v&&!n.ordinal&&n.count===0&&this.pluralResolver.shouldUseIntlApi(),C=n.context!==void 0&&(typeof n.context=="string"||typeof n.context=="number")&&n.context!=="",I=n.lngs?n.lngs:this.languageUtils.toResolveHierarchy(n.lng||this.language,n.fallbackLng);y.forEach(L=>{this.isValidLookup(i)||(f=L,!ev[`${I[0]}-${L}`]&&this.utils&&this.utils.hasLoadedNamespace&&!this.utils.hasLoadedNamespace(f)&&(ev[`${I[0]}-${L}`]=!0,this.logger.warn(`key "${l}" for languages "${I.join(", ")}" won't get resolved as namespace "${f}" 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!!!")),I.forEach(x=>{if(this.isValidLookup(i))return;a=x;const E=[g];if(this.i18nFormat&&this.i18nFormat.addLookupKeys)this.i18nFormat.addLookupKeys(E,g,x,L,n);else{let N;v&&(N=this.pluralResolver.getSuffix(x,n.count,n));const M=`${this.options.pluralSeparator}zero`,R=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(v&&(E.push(g+N),n.ordinal&&N.indexOf(R)===0&&E.push(g+N.replace(R,this.options.pluralSeparator)),S&&E.push(g+M)),C){const V=`${g}${this.options.contextSeparator}${n.context}`;E.push(V),v&&(E.push(V+N),n.ordinal&&N.indexOf(R)===0&&E.push(V+N.replace(R,this.options.pluralSeparator)),S&&E.push(V+M))}}let T;for(;T=E.pop();)this.isValidLookup(i)||(s=T,i=this.getResource(x,L,T,n))}))})}),{res:i,usedKey:l,exactUsedKey:s,usedLng:a,usedNS:f}}isValidLookup(t){return t!==void 0&&!(!this.options.returnNull&&t===null)&&!(!this.options.returnEmptyString&&t==="")}getResource(t,n,i){let l=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(t,n,i,l):this.resourceStore.getResource(t,n,i,l)}getUsedParamsDetails(){let t=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"],i=t.replace&&typeof t.replace!="string";let l=i?t.replace:t;if(i&&typeof t.count<"u"&&(l.count=t.count),this.options.interpolation.defaultVariables&&(l={...this.options.interpolation.defaultVariables,...l}),!i){l={...l};for(const s of n)delete l[s]}return l}static hasDefaultValue(t){const n="defaultValue";for(const i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&n===i.substring(0,n.length)&&t[i]!==void 0)return!0;return!1}}function Dp(e){return e.charAt(0).toUpperCase()+e.slice(1)}class tv{constructor(t){this.options=t,this.supportedLngs=this.options.supportedLngs||!1,this.logger=Tr.create("languageUtils")}getScriptPartFromCode(t){if(t=Tc(t),!t||t.indexOf("-")<0)return null;const n=t.split("-");return n.length===2||(n.pop(),n[n.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(n.join("-"))}getLanguagePartFromCode(t){if(t=Tc(t),!t||t.indexOf("-")<0)return t;const n=t.split("-");return this.formatLanguageCode(n[0])}formatLanguageCode(t){if(typeof t=="string"&&t.indexOf("-")>-1){const n=["hans","hant","latn","cyrl","cans","mong","arab"];let i=t.split("-");return this.options.lowerCaseLng?i=i.map(l=>l.toLowerCase()):i.length===2?(i[0]=i[0].toLowerCase(),i[1]=i[1].toUpperCase(),n.indexOf(i[1].toLowerCase())>-1&&(i[1]=Dp(i[1].toLowerCase()))):i.length===3&&(i[0]=i[0].toLowerCase(),i[1].length===2&&(i[1]=i[1].toUpperCase()),i[0]!=="sgn"&&i[2].length===2&&(i[2]=i[2].toUpperCase()),n.indexOf(i[1].toLowerCase())>-1&&(i[1]=Dp(i[1].toLowerCase())),n.indexOf(i[2].toLowerCase())>-1&&(i[2]=Dp(i[2].toLowerCase()))),i.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?t.toLowerCase():t}isSupportedCode(t){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(t=this.getLanguagePartFromCode(t)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(t)>-1}getBestMatchFromCodes(t){if(!t)return null;let n;return t.forEach(i=>{if(n)return;const l=this.formatLanguageCode(i);(!this.options.supportedLngs||this.isSupportedCode(l))&&(n=l)}),!n&&this.options.supportedLngs&&t.forEach(i=>{if(n)return;const l=this.getLanguagePartFromCode(i);if(this.isSupportedCode(l))return n=l;n=this.options.supportedLngs.find(s=>{if(s===l)return s;if(!(s.indexOf("-")<0&&l.indexOf("-")<0)&&(s.indexOf("-")>0&&l.indexOf("-")<0&&s.substring(0,s.indexOf("-"))===l||s.indexOf(l)===0&&l.length>1))return s})}),n||(n=this.getFallbackCodes(this.options.fallbackLng)[0]),n}getFallbackCodes(t,n){if(!t)return[];if(typeof t=="function"&&(t=t(n)),typeof t=="string"&&(t=[t]),Array.isArray(t))return t;if(!n)return t.default||[];let i=t[n];return i||(i=t[this.getScriptPartFromCode(n)]),i||(i=t[this.formatLanguageCode(n)]),i||(i=t[this.getLanguagePartFromCode(n)]),i||(i=t.default),i||[]}toResolveHierarchy(t,n){const i=this.getFallbackCodes(n||this.options.fallbackLng||[],t),l=[],s=a=>{a&&(this.isSupportedCode(a)?l.push(a):this.logger.warn(`rejecting language code not found in supportedLngs: ${a}`))};return typeof t=="string"&&(t.indexOf("-")>-1||t.indexOf("_")>-1)?(this.options.load!=="languageOnly"&&s(this.formatLanguageCode(t)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&s(this.getScriptPartFromCode(t)),this.options.load!=="currentOnly"&&s(this.getLanguagePartFromCode(t))):typeof t=="string"&&s(this.formatLanguageCode(t)),i.forEach(a=>{l.indexOf(a)<0&&s(this.formatLanguageCode(a))}),l}}let n3=[{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}],r3={1:function(e){return+(e>1)},2:function(e){return+(e!=1)},3:function(e){return 0},4:function(e){return e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2},5:function(e){return e==0?0:e==1?1:e==2?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},6:function(e){return e==1?0:e>=2&&e<=4?1:2},7:function(e){return e==1?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2},8:function(e){return e==1?0:e==2?1:e!=8&&e!=11?2:3},9:function(e){return+(e>=2)},10:function(e){return e==1?0:e==2?1:e<7?2:e<11?3:4},11:function(e){return e==1||e==11?0:e==2||e==12?1:e>2&&e<20?2:3},12:function(e){return+(e%10!=1||e%100==11)},13:function(e){return+(e!==0)},14:function(e){return e==1?0:e==2?1:e==3?2:3},15:function(e){return e%10==1&&e%100!=11?0:e%10>=2&&(e%100<10||e%100>=20)?1:2},16:function(e){return e%10==1&&e%100!=11?0:e!==0?1:2},17:function(e){return e==1||e%10==1&&e%100!=11?0:1},18:function(e){return e==0?0:e==1?1:2},19:function(e){return e==1?0:e==0||e%100>1&&e%100<11?1:e%100>10&&e%100<20?2:3},20:function(e){return e==1?0:e==0||e%100>0&&e%100<20?1:2},21:function(e){return e%100==1?1:e%100==2?2:e%100==3||e%100==4?3:0},22:function(e){return e==1?0:e==2?1:(e<0||e>10)&&e%10==0?2:3}};const i3=["v1","v2","v3"],o3=["v4"],nv={zero:0,one:1,two:2,few:3,many:4,other:5};function l3(){const e={};return n3.forEach(t=>{t.lngs.forEach(n=>{e[n]={numbers:t.nr,plurals:r3[t.fc]}})}),e}class s3{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.languageUtils=t,this.options=n,this.logger=Tr.create("pluralResolver"),(!this.options.compatibilityJSON||o3.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=l3()}addRule(t,n){this.rules[t]=n}getRule(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(this.shouldUseIntlApi())try{return new Intl.PluralRules(Tc(t==="dev"?"en":t),{type:n.ordinal?"ordinal":"cardinal"})}catch{return}return this.rules[t]||this.rules[this.languageUtils.getLanguagePartFromCode(t)]}needsPlural(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const i=this.getRule(t,n);return this.shouldUseIntlApi()?i&&i.resolvedOptions().pluralCategories.length>1:i&&i.numbers.length>1}getPluralFormsOfKey(t,n){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return this.getSuffixes(t,i).map(l=>`${n}${l}`)}getSuffixes(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const i=this.getRule(t,n);return i?this.shouldUseIntlApi()?i.resolvedOptions().pluralCategories.sort((l,s)=>nv[l]-nv[s]).map(l=>`${this.options.prepend}${n.ordinal?`ordinal${this.options.prepend}`:""}${l}`):i.numbers.map(l=>this.getSuffix(t,l,n)):[]}getSuffix(t,n){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const l=this.getRule(t,i);return l?this.shouldUseIntlApi()?`${this.options.prepend}${i.ordinal?`ordinal${this.options.prepend}`:""}${l.select(n)}`:this.getSuffixRetroCompatible(l,n):(this.logger.warn(`no plural rule found for: ${t}`),"")}getSuffixRetroCompatible(t,n){const i=t.noAbs?t.plurals(n):t.plurals(Math.abs(n));let l=t.numbers[i];this.options.simplifyPluralSuffix&&t.numbers.length===2&&t.numbers[0]===1&&(l===2?l="plural":l===1&&(l=""));const s=()=>this.options.prepend&&l.toString()?this.options.prepend+l.toString():l.toString();return this.options.compatibilityJSON==="v1"?l===1?"":typeof l=="number"?`_plural_${l.toString()}`:s():this.options.compatibilityJSON==="v2"||this.options.simplifyPluralSuffix&&t.numbers.length===2&&t.numbers[0]===1?s():this.options.prepend&&i.toString()?this.options.prepend+i.toString():i.toString()}shouldUseIntlApi(){return!i3.includes(this.options.compatibilityJSON)}}function rv(e,t,n){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:".",l=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=YP(e,t,n);return!s&&l&&typeof n=="string"&&(s=Th(e,n,i),s===void 0&&(s=Th(t,n,i))),s}class u3{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=Tr.create("interpolator"),this.options=t,this.format=t.interpolation&&t.interpolation.format||(n=>n),this.init(t)}init(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};t.interpolation||(t.interpolation={escapeValue:!0});const{escape:n,escapeValue:i,useRawValueToEscape:l,prefix:s,prefixEscaped:a,suffix:f,suffixEscaped:d,formatSeparator:h,unescapeSuffix:g,unescapePrefix:y,nestingPrefix:v,nestingPrefixEscaped:S,nestingSuffix:C,nestingSuffixEscaped:I,nestingOptionsSeparator:L,maxReplaces:x,alwaysFormat:E}=t.interpolation;this.escape=n!==void 0?n:JP,this.escapeValue=i!==void 0?i:!0,this.useRawValueToEscape=l!==void 0?l:!1,this.prefix=s?Jo(s):a||"{{",this.suffix=f?Jo(f):d||"}}",this.formatSeparator=h||",",this.unescapePrefix=g?"":y||"-",this.unescapeSuffix=this.unescapePrefix?"":g||"",this.nestingPrefix=v?Jo(v):S||Jo("$t("),this.nestingSuffix=C?Jo(C):I||Jo(")"),this.nestingOptionsSeparator=L||",",this.maxReplaces=x||1e3,this.alwaysFormat=E!==void 0?E:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const t=(n,i)=>n&&n.source===i?(n.lastIndex=0,n):new RegExp(i,"g");this.regexp=t(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=t(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=t(this.nestingRegexp,`${this.nestingPrefix}(.+?)${this.nestingSuffix}`)}interpolate(t,n,i,l){let s,a,f;const d=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{};function h(C){return C.replace(/\$/g,"$$$$")}const g=C=>{if(C.indexOf(this.formatSeparator)<0){const E=rv(n,d,C,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(E,void 0,i,{...l,...n,interpolationkey:C}):E}const I=C.split(this.formatSeparator),L=I.shift().trim(),x=I.join(this.formatSeparator).trim();return this.format(rv(n,d,L,this.options.keySeparator,this.options.ignoreJSONStructure),x,i,{...l,...n,interpolationkey:L})};this.resetRegExp();const y=l&&l.missingInterpolationHandler||this.options.missingInterpolationHandler,v=l&&l.interpolation&&l.interpolation.skipOnVariables!==void 0?l.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:C=>h(C)},{regex:this.regexp,safeValue:C=>this.escapeValue?h(this.escape(C)):h(C)}].forEach(C=>{for(f=0;s=C.regex.exec(t);){const I=s[1].trim();if(a=g(I),a===void 0)if(typeof y=="function"){const x=y(t,s,l);a=typeof x=="string"?x:""}else if(l&&Object.prototype.hasOwnProperty.call(l,I))a="";else if(v){a=s[0];continue}else this.logger.warn(`missed to pass in variable ${I} for interpolating ${t}`),a="";else typeof a!="string"&&!this.useRawValueToEscape&&(a=J1(a));const L=C.safeValue(a);if(t=t.replace(s[0],L),v?(C.regex.lastIndex+=a.length,C.regex.lastIndex-=s[0].length):C.regex.lastIndex=0,f++,f>=this.maxReplaces)break}}),t}nest(t,n){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},l,s,a;function f(d,h){const g=this.nestingOptionsSeparator;if(d.indexOf(g)<0)return d;const y=d.split(new RegExp(`${g}[ ]*{`));let v=`{${y[1]}`;d=y[0],v=this.interpolate(v,a);const S=v.match(/'/g),C=v.match(/"/g);(S&&S.length%2===0&&!C||C.length%2!==0)&&(v=v.replace(/'/g,'"'));try{a=JSON.parse(v),h&&(a={...h,...a})}catch(I){return this.logger.warn(`failed parsing options string in nesting for key ${d}`,I),`${d}${g}${v}`}return a.defaultValue&&a.defaultValue.indexOf(this.prefix)>-1&&delete a.defaultValue,d}for(;l=this.nestingRegexp.exec(t);){let d=[];a={...i},a=a.replace&&typeof a.replace!="string"?a.replace:a,a.applyPostProcessor=!1,delete a.defaultValue;let h=!1;if(l[0].indexOf(this.formatSeparator)!==-1&&!/{.*}/.test(l[1])){const g=l[1].split(this.formatSeparator).map(y=>y.trim());l[1]=g.shift(),d=g,h=!0}if(s=n(f.call(this,l[1].trim(),a),a),s&&l[0]===t&&typeof s!="string")return s;typeof s!="string"&&(s=J1(s)),s||(this.logger.warn(`missed to resolve ${l[1]} for nesting ${t}`),s=""),h&&(s=d.reduce((g,y)=>this.format(g,y,i.lng,{...i,interpolationkey:l[1].trim()}),s.trim())),t=t.replace(l[0],s),this.regexp.lastIndex=0}return t}}function a3(e){let t=e.toLowerCase().trim();const n={};if(e.indexOf("(")>-1){const i=e.split("(");t=i[0].toLowerCase().trim();const l=i[1].substring(0,i[1].length-1);t==="currency"&&l.indexOf(":")<0?n.currency||(n.currency=l.trim()):t==="relativetime"&&l.indexOf(":")<0?n.range||(n.range=l.trim()):l.split(";").forEach(a=>{if(a){const[f,...d]=a.split(":"),h=d.join(":").trim().replace(/^'+|'+$/g,""),g=f.trim();n[g]||(n[g]=h),h==="false"&&(n[g]=!1),h==="true"&&(n[g]=!0),isNaN(h)||(n[g]=parseInt(h,10))}})}return{formatName:t,formatOptions:n}}function Zo(e){const t={};return function(i,l,s){const a=l+JSON.stringify(s);let f=t[a];return f||(f=e(Tc(l),s),t[a]=f),f(i)}}class c3{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=Tr.create("formatter"),this.options=t,this.formats={number:Zo((n,i)=>{const l=new Intl.NumberFormat(n,{...i});return s=>l.format(s)}),currency:Zo((n,i)=>{const l=new Intl.NumberFormat(n,{...i,style:"currency"});return s=>l.format(s)}),datetime:Zo((n,i)=>{const l=new Intl.DateTimeFormat(n,{...i});return s=>l.format(s)}),relativetime:Zo((n,i)=>{const l=new Intl.RelativeTimeFormat(n,{...i});return s=>l.format(s,i.range||"day")}),list:Zo((n,i)=>{const l=new Intl.ListFormat(n,{...i});return s=>l.format(s)})},this.init(t)}init(t){const i=(arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}}).interpolation;this.formatSeparator=i.formatSeparator?i.formatSeparator:i.formatSeparator||","}add(t,n){this.formats[t.toLowerCase().trim()]=n}addCached(t,n){this.formats[t.toLowerCase().trim()]=Zo(n)}format(t,n,i){let l=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return n.split(this.formatSeparator).reduce((f,d)=>{const{formatName:h,formatOptions:g}=a3(d);if(this.formats[h]){let y=f;try{const v=l&&l.formatParams&&l.formatParams[l.interpolationkey]||{},S=v.locale||v.lng||l.locale||l.lng||i;y=this.formats[h](f,S,{...g,...l,...v})}catch(v){this.logger.warn(v)}return y}else this.logger.warn(`there was no format function for ${h}`);return f},t)}}function f3(e,t){e.pending[t]!==void 0&&(delete e.pending[t],e.pendingCount--)}class d3 extends ff{constructor(t,n,i){let l=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};super(),this.backend=t,this.store=n,this.services=i,this.languageUtils=i.languageUtils,this.options=l,this.logger=Tr.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=l.maxParallelReads||10,this.readingCalls=0,this.maxRetries=l.maxRetries>=0?l.maxRetries:5,this.retryTimeout=l.retryTimeout>=1?l.retryTimeout:350,this.state={},this.queue=[],this.backend&&this.backend.init&&this.backend.init(i,l.backend,l)}queueLoad(t,n,i,l){const s={},a={},f={},d={};return t.forEach(h=>{let g=!0;n.forEach(y=>{const v=`${h}|${y}`;!i.reload&&this.store.hasResourceBundle(h,y)?this.state[v]=2:this.state[v]<0||(this.state[v]===1?a[v]===void 0&&(a[v]=!0):(this.state[v]=1,g=!1,a[v]===void 0&&(a[v]=!0),s[v]===void 0&&(s[v]=!0),d[y]===void 0&&(d[y]=!0)))}),g||(f[h]=!0)}),(Object.keys(s).length||Object.keys(a).length)&&this.queue.push({pending:a,pendingCount:Object.keys(a).length,loaded:{},errors:[],callback:l}),{toLoad:Object.keys(s),pending:Object.keys(a),toLoadLanguages:Object.keys(f),toLoadNamespaces:Object.keys(d)}}loaded(t,n,i){const l=t.split("|"),s=l[0],a=l[1];n&&this.emit("failedLoading",s,a,n),i&&this.store.addResourceBundle(s,a,i,void 0,void 0,{skipCopy:!0}),this.state[t]=n?-1:2;const f={};this.queue.forEach(d=>{GP(d.loaded,[s],a),f3(d,t),n&&d.errors.push(n),d.pendingCount===0&&!d.done&&(Object.keys(d.loaded).forEach(h=>{f[h]||(f[h]={});const g=d.loaded[h];g.length&&g.forEach(y=>{f[h][y]===void 0&&(f[h][y]=!0)})}),d.done=!0,d.errors.length?d.callback(d.errors):d.callback())}),this.emit("loaded",f),this.queue=this.queue.filter(d=>!d.done)}read(t,n,i){let l=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:this.retryTimeout,a=arguments.length>5?arguments[5]:void 0;if(!t.length)return a(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:t,ns:n,fcName:i,tried:l,wait:s,callback:a});return}this.readingCalls++;const f=(h,g)=>{if(this.readingCalls--,this.waitingReads.length>0){const y=this.waitingReads.shift();this.read(y.lng,y.ns,y.fcName,y.tried,y.wait,y.callback)}if(h&&g&&l{this.read.call(this,t,n,i,l+1,s*2,a)},s);return}a(h,g)},d=this.backend[i].bind(this.backend);if(d.length===2){try{const h=d(t,n);h&&typeof h.then=="function"?h.then(g=>f(null,g)).catch(f):f(null,h)}catch(h){f(h)}return}return d(t,n,f)}prepareLoading(t,n){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},l=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."),l&&l();typeof t=="string"&&(t=this.languageUtils.toResolveHierarchy(t)),typeof n=="string"&&(n=[n]);const s=this.queueLoad(t,n,i,l);if(!s.toLoad.length)return s.pending.length||l(),null;s.toLoad.forEach(a=>{this.loadOne(a)})}load(t,n,i){this.prepareLoading(t,n,{},i)}reload(t,n,i){this.prepareLoading(t,n,{reload:!0},i)}loadOne(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";const i=t.split("|"),l=i[0],s=i[1];this.read(l,s,"read",void 0,void 0,(a,f)=>{a&&this.logger.warn(`${n}loading namespace ${s} for language ${l} failed`,a),!a&&f&&this.logger.log(`${n}loaded namespace ${s} for language ${l}`,f),this.loaded(t,a,f)})}saveMissing(t,n,i,l,s){let a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{},f=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 "${i}" 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(!(i==null||i==="")){if(this.backend&&this.backend.create){const d={...a,isUpdate:s},h=this.backend.create.bind(this.backend);if(h.length<6)try{let g;h.length===5?g=h(t,n,i,l,d):g=h(t,n,i,l),g&&typeof g.then=="function"?g.then(y=>f(null,y)).catch(f):f(null,g)}catch(g){f(g)}else h(t,n,i,l,f,d)}!t||!t[0]||this.store.addResource(t[0],n,i,l)}}}function iv(){return{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:function(t){let n={};if(typeof t[1]=="object"&&(n=t[1]),typeof t[1]=="string"&&(n.defaultValue=t[1]),typeof t[2]=="string"&&(n.tDescription=t[2]),typeof t[2]=="object"||typeof t[3]=="object"){const i=t[3]||t[2];Object.keys(i).forEach(l=>{n[l]=i[l]})}return n},interpolation:{escapeValue:!0,format:e=>e,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}}function ov(e){return typeof e.ns=="string"&&(e.ns=[e.ns]),typeof e.fallbackLng=="string"&&(e.fallbackLng=[e.fallbackLng]),typeof e.fallbackNS=="string"&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&e.supportedLngs.indexOf("cimode")<0&&(e.supportedLngs=e.supportedLngs.concat(["cimode"])),e}function $a(){}function p3(e){Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach(n=>{typeof e[n]=="function"&&(e[n]=e[n].bind(e))})}class eu extends ff{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;if(super(),this.options=ov(t),this.services={},this.logger=Tr,this.modules={external:[]},p3(this),n&&!this.isInitialized&&!t.isClone){if(!this.options.initImmediate)return this.init(t,n),this;setTimeout(()=>{this.init(t,n)},0)}}init(){var t=this;let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},i=arguments.length>1?arguments[1]:void 0;this.isInitializing=!0,typeof n=="function"&&(i=n,n={}),!n.defaultNS&&n.defaultNS!==!1&&n.ns&&(typeof n.ns=="string"?n.defaultNS=n.ns:n.ns.indexOf("translation")<0&&(n.defaultNS=n.ns[0]));const l=iv();this.options={...l,...this.options,...ov(n)},this.options.compatibilityAPI!=="v1"&&(this.options.interpolation={...l.interpolation,...this.options.interpolation}),n.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=n.keySeparator),n.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=n.nsSeparator);function s(g){return g?typeof g=="function"?new g:g:null}if(!this.options.isClone){this.modules.logger?Tr.init(s(this.modules.logger),this.options):Tr.init(null,this.options);let g;this.modules.formatter?g=this.modules.formatter:typeof Intl<"u"&&(g=c3);const y=new tv(this.options);this.store=new q1(this.options.resources,this.options);const v=this.services;v.logger=Tr,v.resourceStore=this.store,v.languageUtils=y,v.pluralResolver=new s3(y,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),g&&(!this.options.interpolation.format||this.options.interpolation.format===l.interpolation.format)&&(v.formatter=s(g),v.formatter.init(v,this.options),this.options.interpolation.format=v.formatter.format.bind(v.formatter)),v.interpolator=new u3(this.options),v.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},v.backendConnector=new d3(s(this.modules.backend),v.resourceStore,v,this.options),v.backendConnector.on("*",function(S){for(var C=arguments.length,I=new Array(C>1?C-1:0),L=1;L1?C-1:0),L=1;L{S.init&&S.init(this)})}if(this.format=this.options.interpolation.format,i||(i=$a),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){const g=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);g.length>0&&g[0]!=="dev"&&(this.options.lng=g[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(g=>{this[g]=function(){return t.store[g](...arguments)}}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(g=>{this[g]=function(){return t.store[g](...arguments),t}});const d=Es(),h=()=>{const g=(y,v)=>{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),d.resolve(v),i(y,v)};if(this.languages&&this.options.compatibilityAPI!=="v1"&&!this.isInitialized)return g(null,this.t.bind(this));this.changeLanguage(this.options.lng,g)};return this.options.resources||!this.options.initImmediate?h():setTimeout(h,0),d}loadResources(t){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:$a;const l=typeof t=="string"?t:this.language;if(typeof t=="function"&&(i=t),!this.options.resources||this.options.partialBundledLanguages){if(l&&l.toLowerCase()==="cimode"&&(!this.options.preload||this.options.preload.length===0))return i();const s=[],a=f=>{if(!f||f==="cimode")return;this.services.languageUtils.toResolveHierarchy(f).forEach(h=>{h!=="cimode"&&s.indexOf(h)<0&&s.push(h)})};l?a(l):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(d=>a(d)),this.options.preload&&this.options.preload.forEach(f=>a(f)),this.services.backendConnector.load(s,this.options.ns,f=>{!f&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),i(f)})}else i(null)}reloadResources(t,n,i){const l=Es();return t||(t=this.languages),n||(n=this.options.ns),i||(i=$a),this.services.backendConnector.reload(t,n,s=>{l.resolve(),i(s)}),l}use(t){if(!t)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!t.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return t.type==="backend"&&(this.modules.backend=t),(t.type==="logger"||t.log&&t.warn&&t.error)&&(this.modules.logger=t),t.type==="languageDetector"&&(this.modules.languageDetector=t),t.type==="i18nFormat"&&(this.modules.i18nFormat=t),t.type==="postProcessor"&&ek.addPostProcessor(t),t.type==="formatter"&&(this.modules.formatter=t),t.type==="3rdParty"&&this.modules.external.push(t),this}setResolvedLanguage(t){if(!(!t||!this.languages)&&!(["cimode","dev"].indexOf(t)>-1))for(let n=0;n-1)&&this.store.hasLanguageSomeTranslations(i)){this.resolvedLanguage=i;break}}}changeLanguage(t,n){var i=this;this.isLanguageChangingTo=t;const l=Es();this.emit("languageChanging",t);const s=d=>{this.language=d,this.languages=this.services.languageUtils.toResolveHierarchy(d),this.resolvedLanguage=void 0,this.setResolvedLanguage(d)},a=(d,h)=>{h?(s(h),this.translator.changeLanguage(h),this.isLanguageChangingTo=void 0,this.emit("languageChanged",h),this.logger.log("languageChanged",h)):this.isLanguageChangingTo=void 0,l.resolve(function(){return i.t(...arguments)}),n&&n(d,function(){return i.t(...arguments)})},f=d=>{!t&&!d&&this.services.languageDetector&&(d=[]);const h=typeof d=="string"?d:this.services.languageUtils.getBestMatchFromCodes(d);h&&(this.language||s(h),this.translator.language||this.translator.changeLanguage(h),this.services.languageDetector&&this.services.languageDetector.cacheUserLanguage&&this.services.languageDetector.cacheUserLanguage(h)),this.loadResources(h,g=>{a(g,h)})};return!t&&this.services.languageDetector&&!this.services.languageDetector.async?f(this.services.languageDetector.detect()):!t&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(f):this.services.languageDetector.detect(f):f(t),l}getFixedT(t,n,i){var l=this;const s=function(a,f){let d;if(typeof f!="object"){for(var h=arguments.length,g=new Array(h>2?h-2:0),y=2;y`${d.keyPrefix}${v}${C}`):S=d.keyPrefix?`${d.keyPrefix}${v}${a}`:a,l.t(S,d)};return typeof t=="string"?s.lng=t:s.lngs=t,s.ns=n,s.keyPrefix=i,s}t(){return this.translator&&this.translator.translate(...arguments)}exists(){return this.translator&&this.translator.exists(...arguments)}setDefaultNamespace(t){this.options.defaultNS=t}hasLoadedNamespace(t){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 i=n.lng||this.resolvedLanguage||this.languages[0],l=this.options?this.options.fallbackLng:!1,s=this.languages[this.languages.length-1];if(i.toLowerCase()==="cimode")return!0;const a=(f,d)=>{const h=this.services.backendConnector.state[`${f}|${d}`];return h===-1||h===2};if(n.precheck){const f=n.precheck(this,a);if(f!==void 0)return f}return!!(this.hasResourceBundle(i,t)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||a(i,t)&&(!l||a(s,t)))}loadNamespaces(t,n){const i=Es();return this.options.ns?(typeof t=="string"&&(t=[t]),t.forEach(l=>{this.options.ns.indexOf(l)<0&&this.options.ns.push(l)}),this.loadResources(l=>{i.resolve(),n&&n(l)}),i):(n&&n(),Promise.resolve())}loadLanguages(t,n){const i=Es();typeof t=="string"&&(t=[t]);const l=this.options.preload||[],s=t.filter(a=>l.indexOf(a)<0&&this.services.languageUtils.isSupportedCode(a));return s.length?(this.options.preload=l.concat(s),this.loadResources(a=>{i.resolve(),n&&n(a)}),i):(n&&n(),Promise.resolve())}dir(t){if(t||(t=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!t)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"],i=this.services&&this.services.languageUtils||new tv(iv());return n.indexOf(i.getLanguagePartFromCode(t))>-1||t.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;return new eu(t,n)}cloneInstance(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:$a;const i=t.forkResourceStore;i&&delete t.forkResourceStore;const l={...this.options,...t,isClone:!0},s=new eu(l);return(t.debug!==void 0||t.prefix!==void 0)&&(s.logger=s.logger.clone(t)),["store","services","language"].forEach(f=>{s[f]=this[f]}),s.services={...this.services},s.services.utils={hasLoadedNamespace:s.hasLoadedNamespace.bind(s)},i&&(s.store=new q1(this.store.data,l),s.services.resourceStore=s.store),s.translator=new Ac(s.services,l),s.translator.on("*",function(f){for(var d=arguments.length,h=new Array(d>1?d-1:0),g=1;g{if(t)for(const n in t)e[n]===void 0&&(e[n]=t[n])}),e}const lv=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/,y3=(e,t,n)=>{const i=n||{};i.path=i.path||"/";const l=encodeURIComponent(t);let s=`${e}=${l}`;if(i.maxAge>0){const a=i.maxAge-0;if(Number.isNaN(a))throw new Error("maxAge should be a Number");s+=`; Max-Age=${Math.floor(a)}`}if(i.domain){if(!lv.test(i.domain))throw new TypeError("option domain is invalid");s+=`; Domain=${i.domain}`}if(i.path){if(!lv.test(i.path))throw new TypeError("option path is invalid");s+=`; Path=${i.path}`}if(i.expires){if(typeof i.expires.toUTCString!="function")throw new TypeError("option expires is invalid");s+=`; Expires=${i.expires.toUTCString()}`}if(i.httpOnly&&(s+="; HttpOnly"),i.secure&&(s+="; Secure"),i.sameSite)switch(typeof i.sameSite=="string"?i.sameSite.toLowerCase():i.sameSite){case!0:s+="; SameSite=Strict";break;case"lax":s+="; SameSite=Lax";break;case"strict":s+="; SameSite=Strict";break;case"none":s+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}return s},sv={create(e,t,n,i){let l=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{path:"/",sameSite:"strict"};n&&(l.expires=new Date,l.expires.setTime(l.expires.getTime()+n*60*1e3)),i&&(l.domain=i),document.cookie=y3(e,encodeURIComponent(t),l)},read(e){const t=`${e}=`,n=document.cookie.split(";");for(let i=0;i-1&&(l=window.location.hash.substring(window.location.hash.indexOf("?")));const a=l.substring(1).split("&");for(let f=0;f0&&a[f].substring(0,d)===t&&(n=a[f].substring(d+1))}}return n}};let Cs=null;const uv=()=>{if(Cs!==null)return Cs;try{Cs=window!=="undefined"&&window.localStorage!==null;const e="i18next.translate.boo";window.localStorage.setItem(e,"foo"),window.localStorage.removeItem(e)}catch{Cs=!1}return Cs};var S3={name:"localStorage",lookup(e){let{lookupLocalStorage:t}=e;if(t&&uv())return window.localStorage.getItem(t)||void 0},cacheUserLanguage(e,t){let{lookupLocalStorage:n}=t;n&&uv()&&window.localStorage.setItem(n,e)}};let Ps=null;const av=()=>{if(Ps!==null)return Ps;try{Ps=window!=="undefined"&&window.sessionStorage!==null;const e="i18next.translate.boo";window.sessionStorage.setItem(e,"foo"),window.sessionStorage.removeItem(e)}catch{Ps=!1}return Ps};var k3={name:"sessionStorage",lookup(e){let{lookupSessionStorage:t}=e;if(t&&av())return window.sessionStorage.getItem(t)||void 0},cacheUserLanguage(e,t){let{lookupSessionStorage:n}=t;n&&av()&&window.sessionStorage.setItem(n,e)}},x3={name:"navigator",lookup(e){const t=[];if(typeof navigator<"u"){const{languages:n,userLanguage:i,language:l}=navigator;if(n)for(let s=0;s0?t:void 0}},E3={name:"htmlTag",lookup(e){let{htmlTag:t}=e,n;const i=t||(typeof document<"u"?document.documentElement:null);return i&&typeof i.getAttribute=="function"&&(n=i.getAttribute("lang")),n}},C3={name:"path",lookup(e){var l;let{lookupFromPathIndex:t}=e;if(typeof window>"u")return;const n=window.location.pathname.match(/\/([a-zA-Z-]*)/g);return Array.isArray(n)?(l=n[typeof t=="number"?t:0])==null?void 0:l.replace("/",""):void 0}},P3={name:"subdomain",lookup(e){var l,s;let{lookupFromSubdomainIndex:t}=e;const n=typeof t=="number"?t+1:1,i=typeof window<"u"&&((s=(l=window.location)==null?void 0:l.hostname)==null?void 0:s.match(/^(\w{2,5})\.(([a-z0-9-]{1,63}\.[a-z]{2,6})|localhost)/i));if(i)return i[n]}};function I3(){return{order:["querystring","cookie","localStorage","sessionStorage","navigator","htmlTag"],lookupQuerystring:"lng",lookupCookie:"i18next",lookupLocalStorage:"i18nextLng",lookupSessionStorage:"i18nextLng",caches:["localStorage"],excludeCacheFor:["cimode"],convertDetectedLanguage:e=>e}}class tk{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.type="languageDetector",this.detectors={},this.init(t,n)}init(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=t||{languageUtils:{}},this.options=g3(n,this.options||{},I3()),typeof this.options.convertDetectedLanguage=="string"&&this.options.convertDetectedLanguage.indexOf("15897")>-1&&(this.options.convertDetectedLanguage=l=>l.replace("-","_")),this.options.lookupFromUrlIndex&&(this.options.lookupFromPathIndex=this.options.lookupFromUrlIndex),this.i18nOptions=i,this.addDetector(v3),this.addDetector(w3),this.addDetector(S3),this.addDetector(k3),this.addDetector(x3),this.addDetector(E3),this.addDetector(C3),this.addDetector(P3)}addDetector(t){return this.detectors[t.name]=t,this}detect(t){t||(t=this.options.order);let n=[];return t.forEach(i=>{if(this.detectors[i]){let l=this.detectors[i].lookup(this.options);l&&typeof l=="string"&&(l=[l]),l&&(n=n.concat(l))}}),n=n.map(i=>this.options.convertDetectedLanguage(i)),this.services.languageUtils.getBestMatchFromCodes?n:n.length>0?n[0]:null}cacheUserLanguage(t,n){n||(n=this.options.caches),n&&(this.options.excludeCacheFor&&this.options.excludeCacheFor.indexOf(t)>-1||n.forEach(i=>{this.detectors[i]&&this.detectors[i].cacheUserLanguage(t,this.options)}))}}tk.type="languageDetector";function T3(){if(console&&console.warn){for(var e=arguments.length,t=new Array(e),n=0;n()=>{if(e.isInitialized)t();else{const n=()=>{setTimeout(()=>{e.off("initialized",n)},0),t()};e.on("initialized",n)}};function fv(e,t,n){e.loadNamespaces(t,nk(e,n))}function dv(e,t,n,i){typeof n=="string"&&(n=[n]),n.forEach(l=>{e.options.ns.indexOf(l)<0&&e.options.ns.push(l)}),e.loadLanguages(t,nk(e,i))}function A3(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const i=t.languages[0],l=t.options?t.options.fallbackLng:!1,s=t.languages[t.languages.length-1];if(i.toLowerCase()==="cimode")return!0;const a=(f,d)=>{const h=t.services.backendConnector.state[`${f}|${d}`];return h===-1||h===2};return n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!a(t.isLanguageChangingTo,e)?!1:!!(t.hasResourceBundle(i,e)||!t.services.backendConnector.backend||t.options.resources&&!t.options.partialBundledLanguages||a(i,e)&&(!l||a(s,e)))}function L3(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return!t.languages||!t.languages.length?(Ah("i18n.languages were undefined or empty",t.languages),!0):t.options.ignoreJSONStructure!==void 0?t.hasLoadedNamespace(e,{lng:n.lng,precheck:(l,s)=>{if(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&l.services.backendConnector.backend&&l.isLanguageChangingTo&&!s(l.isLanguageChangingTo,e))return!1}}):A3(e,t,n)}const N3=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,R3={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"©","©":"©","®":"®","®":"®","…":"…","…":"…","/":"/","/":"/"},_3=e=>R3[e],O3=e=>e.replace(N3,_3);let Lh={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:O3};function z3(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Lh={...Lh,...e}}function D3(){return Lh}let rk;function M3(e){rk=e}function $3(){return rk}const F3={type:"3rdParty",init(e){z3(e.options.react),M3(e)}},j3=ee.createContext();class U3{constructor(){this.usedNamespaces={}}addUsedNamespaces(t){t.forEach(n=>{this.usedNamespaces[n]||(this.usedNamespaces[n]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}}const B3=(e,t)=>{const n=ee.useRef();return ee.useEffect(()=>{n.current=t?n.current:e},[e,t]),n.current};function ik(e,t,n,i){return e.getFixedT(t,n,i)}function V3(e,t,n,i){return ee.useCallback(ik(e,t,n,i),[e,t,n,i])}function zn(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const{i18n:n}=t,{i18n:i,defaultNS:l}=ee.useContext(j3)||{},s=n||i||$3();if(s&&!s.reportNamespaces&&(s.reportNamespaces=new U3),!s){Ah("You will need to pass in an i18next instance by using initReactI18next");const N=(R,V)=>typeof V=="string"?V:V&&typeof V=="object"&&typeof V.defaultValue=="string"?V.defaultValue:Array.isArray(R)?R[R.length-1]:R,M=[N,{},!1];return M.t=N,M.i18n={},M.ready=!1,M}s.options.react&&s.options.react.wait!==void 0&&Ah("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");const a={...D3(),...s.options.react,...t},{useSuspense:f,keyPrefix:d}=a;let h=e||l||s.options&&s.options.defaultNS;h=typeof h=="string"?[h]:h||["translation"],s.reportNamespaces.addUsedNamespaces&&s.reportNamespaces.addUsedNamespaces(h);const g=(s.isInitialized||s.initializedStoreOnce)&&h.every(N=>L3(N,s,a)),y=V3(s,t.lng||null,a.nsMode==="fallback"?h:h[0],d),v=()=>y,S=()=>ik(s,t.lng||null,a.nsMode==="fallback"?h:h[0],d),[C,I]=ee.useState(v);let L=h.join();t.lng&&(L=`${t.lng}${L}`);const x=B3(L),E=ee.useRef(!0);ee.useEffect(()=>{const{bindI18n:N,bindI18nStore:M}=a;E.current=!0,!g&&!f&&(t.lng?dv(s,t.lng,h,()=>{E.current&&I(S)}):fv(s,h,()=>{E.current&&I(S)})),g&&x&&x!==L&&E.current&&I(S);function R(){E.current&&I(S)}return N&&s&&s.on(N,R),M&&s&&s.store.on(M,R),()=>{E.current=!1,N&&s&&N.split(" ").forEach(V=>s.off(V,R)),M&&s&&M.split(" ").forEach(V=>s.store.off(V,R))}},[s,L]),ee.useEffect(()=>{E.current&&g&&I(v)},[s,d,g]);const T=[C,s,g];if(T.t=C,T.i18n=s,T.ready=g,g||!g&&!f)return T;throw new Promise(N=>{t.lng?dv(s,t.lng,h,()=>N()):fv(s,h,()=>N())})}const b3={organizations:[{name:"GIST Student Association Infoteam",isImportant:!0,color:"#EB6263",url:"https://introduce.gistory.me/",job:"Team Leader",startedAt:"2022-09",projects:[{name:"AMS Frontend",isImportant:!1,startedAt:"2022-11",endedAt:"2023-02",description:"Developed the frontend for AMS, GIST's club application system. Implemented a drag-and-drop based UI to enhance the convenience of managing interview schedules, and introduced a mono-repo to reduce the rewriting of similar code.",whatIDid:["Frontend Development","UI Design"],techStacks:["React","TypeScript","mono-repo"]},{name:"Ziggle Frontend",isImportant:!0,url:"https://github.com/gsainfoteam/ziggle-fe",startedAt:"2023-04",description:"Developing the frontend for Ziggle, GIST's integrated notice platform. Initially developed the version using React and then migrated to Next.js, actively adopting various technologies like GraphQL and Apollo Client. Successfully established within the school, maintaining 200 DAUs, which is 25% of the undergraduate population.",whatIDid:["Team Leader and Frontend Development"],techStacks:["React","TypeScript","Next.js","Tailwind CSS"]},{name:"IdP Frontend",isImportant:!0,url:"https://idp.gistory.me",startedAt:"2024-03",description:"Maintaining the frontend for IdP, GIST's OAuth2.0 authentication system.",whatIDid:["Frontend Maintenance"],techStacks:["React","TypeScript","Tailwind CSS"]}]},{name:"Wing: GIST Computing Club",isImportant:!1,color:"rgb(151, 123, 242)",url:"https://wing-homepage.vercel.app/",job:"Senior Member",startedAt:"2023-03",projects:[{name:"Wing Session",isImportant:!0,startedAt:"2023-03",description:"Conducting development exchange and sessions within Wing.",whatIDid:["Conducted a session on introducing mono-repo","Conducted a session on React.cpp","Conducted a session on writing code like a UI library: Compound Components"]}]}]},H3={experiences:[{name:"GIST Data Science Lab",isImportant:!0,color:"#b509ac",url:"https://sundong.kim/members/",job:"Intern",startedAt:"2024-01-02",endedAt:"2024-05-31",projects:[{name:"O2ARC 3.0",isImportant:!0,url:"https://o2arc.com/",startedAt:"2024-01",endedAt:"2024-05",description:"Developed O2ARC 3.0, a tool for collecting human solution data for the Abstract and Reasoning Corpus ([ARC](https://github.com/fchollet/ARC)), a benchmark for evaluating AI reasoning abilities. The data collected by the existing tool was not suitable for training, so I restricted user actions to collect over 10,000 data points in a format favorable for AI training. Co-authored a paper published at IJCAI 2024 as a co-first author.",whatIDid:["Developed the overall frontend UI and grid manipulation logic","Developed backend APIs related to events","Designed UX and collected user data to improve data quality"],techStacks:["React","TypeScript","Tailwind CSS","i18next","NestJS","Prisma"]},{name:"Introductory RL Study",isImportant:!1,url:"https://www.coursera.org/specializations/reinforcement-learning",startedAt:"2024-01",endedAt:"2024-02",description:"Studied the basics of reinforcement learning through Coursera's Reinforcement Learning Specialization.",whatIDid:["Studied basics of reinforcement learning (–Q-Learning)"]}]},{name:"Sigor Inc.",isImportant:!0,color:"#FEAA17",url:"https://introduce.sigor.company/",job:"Web Developer",startedAt:"2022-02-23",endedAt:"2023-12-22",projects:[{name:"Doggly Frontend",isImportant:!0,url:"https://doggly.co.kr/",startedAt:"2022-08",endedAt:"2023-03",description:"Developed the frontend for Doggly, an e-commerce that measures dog sizes and recommends fitting clothes based on AI. I developed all the key features of the shopping mall, including the payment module, seller pages, admin pages, and also developed PWA and webview Android/iOS apps. Additionally, I performed logging and A/B testing to improve the user funnel.",whatIDid:["Developed and maintained the overall frontend of the shopping mall","Developed Android & iOS webview apps and integrated payment modules","Conducted A/B testing to improve the user funnel"],techStacks:["React","TypeScript","Jetpack Compose","SwiftUI","i18next","PWA"]},{name:"Rush Hour Frontend",isImportant:!0,url:"https://introduce.rushhourkorea.com/",startedAt:"2023-05",endedAt:"2023-07",description:"Developed the frontend and webview app for Rush Hour, a service that informs about available subway seats. I focused on providing a user experience indistinguishable from native apps, despite it being a webview.",whatIDid:["Developed Rush Hour webview frontend","Developed Rush Hour Android & iOS webview apps"],techStacks:["React","TypeScript","Jetpack Compose","SwiftUI"]},{name:"Rush Hour App",isImportant:!0,url:"https://introduce.rushhourkorea.com/",startedAt:"2023-07",endedAt:"2023-10",description:"Participated in the development of the Flutter version of Rush Hour. Collected user logs through GA, Amplitude, Smartlook, and an in-house logging system, and developed an in-house log analysis tool capable of calculating retention and funnel metrics.",whatIDid:["Developed Rush Hour Flutter app","Recorded app user logs"],techStacks:["Flutter","Firebase"]},{name:"Rush Hour AI",isImportant:!0,startedAt:"2023-09",endedAt:"2023-12",description:"Developed an AI that predicts real-time subway congestion based on congestion data using machine learning.",whatIDid:["Developed AI for predicting subway congestion and available seats"],techStacks:["Scikit-learn","Pandas"]},{name:"Various",isImportant:!0,startedAt:"2022-02",endedAt:"2023-12",description:"Performed various development tasks as a developer in a startup.",whatIDid:["Developed landing pages and admin pages","Analyzed and conducted statistics on user logs","Automated tasks","Integrated mono-repo to improve productivity"],techStacks:["React","TypeScript","Amplitude","AWS Lightsail","AWS Lambda","FastAPI","Pandas","mono-repo"]}]},{name:"GDSC-GIST",isImportant:!1,color:"#008cff",url:"https://gdsc.community.dev/gwangju-institute-of-science-and-technology/",job:"2nd Core, Tech Team",startedAt:"2022-05",endedAt:"2023-07",projects:[{name:"Study Sessions",isImportant:!1,startedAt:"2022-11",endedAt:"2023-05",description:"Led the frontend study sessions within GDSC. I created and conducted the overall curriculum. Additionally, I participated in the JS Pattern study, learning design patterns and applying them to a side project that involved creating a C++ based React.",whatIDid:["Led React study sessions","Participated in JS Pattern study"]},{name:"GIST Mini Solution Challenge",isImportant:!1,url:"https://gdsc.community.dev/events/details/developer-student-clubs-gwangju-institute-of-science-and-technology-presents-gist-mini-solution-challenge/",startedAt:"2023-04",endedAt:"2023-04",description:"A hackathon hosted by GDSC-GIST within GIST, with a total of 60 participants.",whatIDid:["Prepared and managed the hackathon"]}]},{name:"GPERI",isImportant:!1,color:"#4c568f",url:"https://sites.google.com/view/gperigist",job:"Research Member",startedAt:"2023-07",endedAt:"2024-03",projects:[{name:"C Language Education",isImportant:!1,startedAt:"2023-07",endedAt:"2023-08",description:"Provided C language education to club members.",whatIDid:["Conducted C language education"],techStacks:["C"]},{name:"Rocket Communication Development",isImportant:!1,startedAt:"2023-07",endedAt:"2023-11",description:"Attempted to develop communication systems for rockets but did not succeed.",whatIDid:["Developed flight software","Developed communication system"],techStacks:["C","Zigbee"]}]}]},W3={title:{developer:"Developer",name:"Dohyun Ko | 고도현"},introduction:"I worked at a startup for two years, taking the lead on various tasks across front-end, back-end, app development, automation, and machine learning. Afterwards, I worked in an AI research lab where I developed data collection tools and wrote a paper on UX. Since I have often worked in environments with a shortage of developers, I always prioritize productivity and ease of maintenance. I aim to enhance productivity by creating monorepos and libraries, and I strive to write code that is easy for others to understand by using atomic patterns and Storybook.",current:b3,education:{attendedLectures:["Object-Oriented Programming","Data Structures","Introduction to Algorithms","Computer Systems Theory and Laboratory","Automata Theory","Operating Systems","Computer Graphics","Computer Networking","Machine Learning and Deep Learning","Computer Security","Computational Models of Cognition"],attendedLecture:"Attended Courses",major:"Electrical Engineering and Computer Science"},publication:{publications:[{name:"O2ARC 3.0: A Platform for Solving and Creating ARC Tasks",date:"2024-08",isImportant:!0,url:"https://www.ijcai.org/proceedings/2024/1034",publisher:"IJCAI 2024 | Co-First Author",description:"To address the lack of human solution data for ARC tasks and the poor quality of collected data for AI training, I developed O2ARC 3.0. This work introduces methods for improving data collection quality by intentionally creating certain inconveniences in the existing tool's UI/UX and increasing data collection volume through gamification."}]},experience:H3,sideProject:{sideProjects:[{name:"2024 KPMG Ideathon: 🥉 3rd Place",isImportant:!0,url:"https://github.com/gist-optima",startedAt:"2024-1",endedAt:"2024-2",description:"Participated in the [Samjong KPMG Ideathon](https://kpmgkr.notion.site/kpmgkr/2024-KPMG-1fcd8a808f3d4f36a5ae8ad6e9bc413e) and developed the platform Docuflow, which implemented VCS for document work and streamlined-ai-search using LLM. I focused on making VCS intuitive for non-developers through drag & drop and ensuring the UI accommodated AI responses that could take up to a minute.",whatIDid:["Front-end Development"],techStacks:["React","TypeScript","Tailwind CSS"]},{name:"Kaggle - Regression with a Mohs Hardness Dataset: 4th Place",isImportant:!0,url:"https://www.kaggle.com/competitions/playground-series-s3e25",startedAt:"2023-10",endedAt:"2023-12",description:"Achieved 4th place in Kaggle's Mohs Hardness Prediction Competition. I used a unique post-processing technique, leveraging the fact that the scoring metric was MedAE.",whatIDid:["ML Model Development"],techStacks:["Python","Scikit-learn","Pandas"]},{name:"2023 Creative Space G A.I. & IoT Makerthon: 🥈 2nd Place",isImportant:!1,startedAt:"2023-10",endedAt:"2023-11",description:"Developed an AI assistant that interprets meanings from everyday conversations to control IoT devices like switches and speakers, combining GPT-4 API and Raspberry Pi.",whatIDid:["OpenAI API Integration","Planning and Preparing Presentation Materials"],techStacks:["Python"]},{name:"2023 Net Challenge: 🥈 Silver Award",isImportant:!0,url:"https://github.com/Net-Challenge-InfoTeam",startedAt:"2023-06",endedAt:"2023-12",description:"Participated in the 2023 Net Challenge, developing a service that analyzes CCTV data with AI to detect real-time threats. When a threat is detected, it alerts nearby users and displays the location on a map.",whatIDid:["Developed the app using React and PWA","Displayed real-time threat locations using Mapbox"],techStacks:["React","TypeScript","Mapbox","PWA"]},{name:"React-Atoms: React Component Library",isImportant:!0,url:"https://github.com/dohyun-ko/react-atoms",startedAt:"2023-07",endedAt:"2023-07",description:"A library of React components I frequently use, which I published on npm. It follows the atomic design pattern and is documented using Storybook.",whatIDid:["Developed React components","Documented components using Storybook","Published on npm"],techStacks:["React","TypeScript","RollUp","Storybook","npm"]},{name:"Dutch: OOP Final Project",isImportant:!0,url:"https://github.com/dohyun-ko/dutch-wasm",startedAt:"2023-04",endedAt:"2023-06",description:"A Dutch pay platform written entirely in C++ for both front-end and back-end. I implemented key front-end functionalities like navigator, state, router, functional components, and styling using design patterns and utilized Emscripten to transpile C++ to WebAssembly. Submitted as a final project for the GIST Object-Oriented Programming course.",whatIDid:["Developed front-end UI using C++ and WebAssembly","Developed front-end logic such as State, Navigator, etc."],techStacks:["C++","WebAssembly","Emscripten"]},{name:"Speaking Melona: Convenience Store Foods Talk to Each Other",isImportant:!1,url:"https://melona.chat",startedAt:"2024-05",endedAt:"2024-05",description:"A service where each convenience store food item is assigned a persona, and scanning a barcode generates conversations between them. Barcode recognition in the front-end was a challenge.",whatIDid:["Front-end Development","Back-end Development","Prompt Engineering"],techStacks:["React","TypeScript","FastAPI","PostgreSQL"]}]},skill:{skills:[{name:"React",level:5},{name:"TypeScript",level:4},{name:"JavaScript",level:4},{name:"HTML/CSS",level:4},{name:"Python",level:3},{name:"NestJS",level:2},{name:"FastAPI",level:2},{name:"Flutter",level:2},{name:"C++",level:2},{name:"Kotlin",level:1},{name:"Docker",level:1},{name:"Rust",level:1},{name:"Assembly",level:1}]}},Q3=Object.freeze(Object.defineProperty({__proto__:null,main:W3},Symbol.toStringTag,{value:"Module"})),K3={organizations:[{name:"GIST 학생회 정보국",isImportant:!0,color:"#EB6263",url:"https://introduce.gistory.me/",job:"팀장",startedAt:"2022-09",projects:[{name:"AMS 프론트엔드",isImportant:!1,startedAt:"2022-11",endedAt:"2023-02",description:"GIST 동아리 신청 시스템인 AMS의 프론트엔드를 개발했습니다. 면접 일정 관리 편의성을 위해 drag-and-drop 위주의 UI를 구현하였으며, 비슷한 코드의 재작성을 줄이기 위해 mono-repo를 도입했습니다.",whatIDid:["프론트엔드 개발","UI 디자인"],techStacks:["React","TypeScript","mono-repo"]},{name:"Ziggle 프론트엔드",isImportant:!0,url:"https://github.com/gsainfoteam/ziggle-fe",startedAt:"2023-04",description:"GIST 통합 공지 플랫폼인 Ziggle의 프론트엔드를 개발하고 있습니다. React로 초기버전 개발 및 Next.js로 migration을 하였으며, GraphQL, Apollo Client 등 다양한 기술을 적극 도입하고 있습니다. 교내에 성공적으로 정착하여 학부 인원의 25%인 DAU 200명을 유지중입니다.",whatIDid:["팀장 및 프론트엔드 개발"],techStacks:["React","TypeScript","Next.js","Tailwind CSS"]},{name:"IdP 프론트엔드",isImportant:!0,url:"https://idp.gistory.me",startedAt:"2024-03",description:"GIST에서 사용하는 OAuth2.0 인증 시스템 IdP의 프론트엔드를 유지보수하고 있습니다.",whatIDid:["프론트엔드 유지보수"],techStacks:["React","TypeScript","Tailwind CSS"]}]},{name:"Wing: GIST 전산 동아리",isImportant:!1,color:"rgb(151, 123, 242)",url:"https://wing-homepage.vercel.app/",job:"시니어 부원",startedAt:"2023-03",projects:[{name:"Wing Session",isImportant:!0,startedAt:"2023-03",description:"Wing에서 개발 상황 교류 및 세션을 진행합니다.",whatIDid:["모노레포에 도입기 세션 진행","React.cpp 세션 진행","UI 라이브러리처럼 코드 짜기: Compound Components 세션 진행"]}]}]},G3={experiences:[{name:"GIST Data Science Lab",isImportant:!0,color:"#b509ac",url:"https://sundong.kim/members/",job:"인턴",startedAt:"2024-01-02",endedAt:"2024-05-31",projects:[{name:"O2ARC 3.0",isImportant:!0,url:"https://o2arc.com/",startedAt:"2024-01",endedAt:"2024-05",description:"AI의 추론능력을 평가하는 벤치마크 Abstract and Resoning Corpus([ARC](https://github.com/fchollet/ARC))의 사람 풀이 데이터 수집을 위한 툴 O2ARC 3.0을 개발했습니다. 기존 툴에서 수집된 데이터는 학습에 쓰기 어려운 형태였으며, 이를 유저가 취할 수 있는 행동을 제한해 AI 학습에 유리한 형태의 데이터 1만개 이상을 수집하였습니다. IJCAI 2024에 공동 1저자로 논문을 게재하였습니다.",whatIDid:["전체적인 프론트엔드 UI 및 그리드 조작 로직 개발","이벤트 관련 백엔드 API 개발","수집 데이터 품질 개선을 위한 UX 디자인 및 유저 데이터 수집"],techStacks:["React","TypeScript","Tailwind CSS","i18next","NestJS","Prisma"]},{name:"Introductory RL Study",isImportant:!1,url:"https://www.coursera.org/specializations/reinforcement-learning",startedAt:"2024-01",endedAt:"2024-02",description:"Coursera의 강화학습 스페셜리제이션을 통해 강화학습 기초를 공부했습니다.",whatIDid:["강화학습 기초 공부(– Q-Learning)"]}]},{name:"Sigor Inc.",isImportant:!0,color:"#FEAA17",url:"https://introduce.sigor.company/",job:"웹 개발자",startedAt:"2022-02-23",endedAt:"2023-12-22",projects:[{name:"도글리 프론트엔드",isImportant:!0,url:"https://doggly.co.kr/",startedAt:"2022-08",endedAt:"2023-03",description:"AI 기반으로 강아지 사이즈를 측정하고, 맞는 옷을 추천해주는 쇼핑몰 Doggly의 FE를 개발했습니다. 결제모듈을 포함한 쇼핑몰의 전체적인 기능과 판매자용 페이지, admin용 페이지를 전부 개발하였으며 PWA와 웹뷰 android/ios 앱도 개발하였습니다. 유저 퍼널 개선을 위해 로깅과 A/B 테스팅도 수행하였습니다.",whatIDid:["쇼핑몰의 전체적인 프론트엔드 개발 및 유지보수","Android & iOS 웹뷰 앱 개발 및 결제 모듈 연동","퍼널 개선을 위한 A/B 테스팅"],techStacks:["React","TypeScript","Jetpack Compose","SwiftUI","i18next","PWA"]},{name:"러시아워 프론트엔드",isImportant:!0,url:"https://introduce.rushhourkorea.com/",startedAt:"2023-05",endedAt:"2023-07",description:"지하철 빈 자리를 알려주는 서비스인 러시아워의 프론트엔드와 웹뷰 앱을 개발했습니다. 웹뷰지만 네이티브 앱과 구별할 수 없는 사용자 경험을 제공하기 위해 노력했습니다.",whatIDid:["러시아워 웹뷰용 프론트엔드 개발","러시아워 android & ios 웹뷰 앱 개발"],techStacks:["React","TypeScript","Jetpack Compose","SwiftUI"]},{name:"러시아워 앱",isImportant:!0,url:"https://introduce.rushhourkorea.com/",startedAt:"2023-07",endedAt:"2023-10",description:"러시아워의 플러터 버전 개발에 참여했습니다. GA, Amplitude, Smartlook, 자체 로깅 시스템을 통해 유저 로그를 수집하였고, 리텐션, 퍼널을 계산할 수 있는 자체 로그 분석 툴도 개발하였습니다.",whatIDid:["러시아워 플러터 앱 개발","앱 유저 로그 기록"],techStacks:["Flutter","Firebase"]},{name:"러시아워 AI",isImportant:!0,startedAt:"2023-09",endedAt:"2023-12",description:"지하철 혼잡도 데이터를 이용해 ML 기반으로 실시간 혼잡도를 예측하는 AI를 개발하였습니다.",whatIDid:["지하철 혼잡도 및 빈자리 예측 AI 개발"],techStacks:["Scikit-learn","Pandas"]},{name:"기타",isImportant:!0,startedAt:"2022-02",endedAt:"2023-12",description:"스타트업의 개발자로서 다양한 개발 업무를 수행했습니다.",whatIDid:["랜딩 페이지 및 관리자 페이지 개발","유저 로그 분석 및 통계","업무 자동화","생산성 향상을 위한 모노레포 통합"],techStacks:["React","TypeScript","Amplitude","AWS Lightsail","AWS Lambda","FastAPI","Pandas","mono-repo"]}]},{name:"GDSC-GIST",isImportant:!1,color:"#008cff",url:"https://gdsc.community.dev/gwangju-institute-of-science-and-technology/",job:"2nd Core, Tech Team",startedAt:"2022-05",endedAt:"2023-07",projects:[{name:"스터디",isImportant:!1,startedAt:"2022-11",endedAt:"2023-05",description:"GDSC에서 진행한 내부 개발 스터디에서 프론트엔드 스터디 리드를 맡았습니다. 전반적인 커리큘럼을 제작하고 진행했습니다. JS Pattern 스터디에도 참여해 디자인 패턴을 공부하고 C++ 기반 React를 만드는 사이드 프로젝트에 활용했습니다.",whatIDid:["React 스터디 리드","JS Pattern 스터디 참여"]},{name:"GIST Mini Solution Challenge",isImportant:!1,url:"https://gdsc.community.dev/events/details/developer-student-clubs-gwangju-institute-of-science-and-technology-presents-gist-mini-solution-challenge/",startedAt:"2023-04",endedAt:"2023-04",description:"GDSC-GIST가 직접 주최한 GIST 내 해커톤입니다. 총 60명이 참가하였습니다.",whatIDid:["해커톤 준비 & 정산"]}]},{name:"GPERI",isImportant:!1,color:"#4c568f",url:"https://sites.google.com/view/gperigist",job:"연구부원",startedAt:"2023-07",endedAt:"2024-3",projects:[{name:"C언어 교육 진행",isImportant:!1,startedAt:"2023-07",endedAt:"2023-08",description:"부원들에게 C언어 교육을 진행했습니다.",whatIDid:["C언어 교육 진행"],techStacks:["C"]},{name:"발사체 통신 개발",isImportant:!1,startedAt:"2023-07",endedAt:"2023-11",description:"발사체 통신 개발을 시도했지만 성공하지는 못했습니다.",whatIDid:["Flight Software 개발","통신 시스템 개발"],techStacks:["C","Zigbee"]}]}]},Y3={title:{developer:"개발자",name:"고도현 | Dohyun Ko"},introduction:"스타트업에서 2년간 일하며 프론트엔드, 백엔드, 앱, 자동화, ML 등 다양한 분야를 주도적으로 작업했습니다. 이후 AI 연구실에서 일하며 데이터 수집 툴을 제작했고 UX 관련으로 논문을 작성했습니다. 개발인력이 늘 부족한 곳에서 일했기에 생산성과 유지보수의 편의성을 항상 중시합니다. 모노레포와 라이브러리를 제작해 생산성을 높이며 atomic 패턴과 Storybook로 제 다음 사람이 보기 쉬운 코드를 짜려 노력합니다.",current:K3,education:{attendedLectures:["객체 지향 프로그래밍","자료 구조","알고리즘 개론","컴퓨터 시스템 이론 및 실습","오토마타 이론","운영체제","컴퓨터 그래픽스","컴퓨터 네트워킹","기계학습 및 딥러닝","Computer Security","Computational Models of Cognition"],attendedLecture:"수강 강좌",major:"전기전자컴퓨터공학부"},publication:{publications:[{name:"O2ARC 3.0: A Platform for Solving and Creating ARC Tasks",date:"2024-08",isImportant:!0,url:"https://www.ijcai.org/proceedings/2024/1034",publisher:"IJCAI 2024 | 공동 1저자",description:"ARC 문제의 사람 풀이 데이터가 부족하며, 수집된 데이터의 품질도 AI 학습에 적합하지 않다는 문제를 해결하기 위해 O2ARC 3.0을 개발했습니다. 기존 툴의 UI/UX에서 특정 부분을 불편하게 만들어 데이터 수집 품질을 개선한 방법과 gamification을 통해 데이터 수집량을 늘린 방법을 소개합니다."}]},experience:G3,sideProject:{sideProjects:[{name:"2024 KPMG Ideathon: 🥉 3등",isImportant:!0,url:"https://github.com/gist-optima",startedAt:"2024-1",endedAt:"2024-2",description:"[삼정 KPMG 아이디어톤](https://kpmgkr.notion.site/kpmgkr/2024-KPMG-1fcd8a808f3d4f36a5ae8ad6e9bc413e)에 참여해 문서 작업에 VCS를 도입하고 LLM을 이용한 streamlined-ai-search를 구현한 플랫폼 Docuflow를 개발했습니다. 비개발자도 VCS를 직관적으로 사용할 수 있도록 drag & drop을 적극 이용하였으며, 최대 1분까지 걸릴 수 있는 AI 응답을 기다릴 수 있는 UI를 중시했습니다.",whatIDid:["프론트엔드 개발"],techStacks:["React","TypeScript","Tailwind CSS"]},{name:"Kaggle - Regression with a Mohs Hardness Dataset: 4등",isImportant:!0,url:"https://www.kaggle.com/competitions/playground-series-s3e25",startedAt:"2023-10",endedAt:"2023-12",description:"Kaggle의 광물 모스 경도 예측 대회에서 4등을 차지했습니다. 점수 공식이 MedAE인 점을 이용해 독특한 후처리 기법을 사용했습니다.",whatIDid:["ML 모델 개발"],techStacks:["Python","Scikit-learn","Pandas"]},{name:"2023 Creative Space G A.I. & IoT Makerthon: 🥈 2등",isImportant:!1,startedAt:"2023-10",endedAt:"2023-11",description:"메이커톤에서 GPT-4 API와 라즈베리파이를 결합해 일상 대화에서 의미를 추론하고 스위치, 스피커 등 IoT 기기를 조작하는 AI 비서를 개발했습니다.",whatIDid:["OpenAI API 연동","기획 및 발표자료 준비"],techStacks:["Python"]},{name:"2023 Net Challenge: 🥈 은상",isImportant:!0,url:"https://github.com/Net-Challenge-InfoTeam",startedAt:"2023-06",endedAt:"2023-12",description:"2023 Net Chanllenge에 참여했습니다. CCTV 데이터를 AI로 분석해 실시간으로 위협을 감지하고, 위협이 감지되면 주변 유저들에게 알림을 보내며 지도에 표시해주는 서비스를 개발했습니다.",whatIDid:["React와 PWA를 사용한 앱 개발","Mapbox를 사용해 실시간 위협 위치 표시"],techStacks:["React","TypeScript","Mapbox","PWA"]},{name:"React-Atoms: React Component Library",isImportant:!0,url:"https://github.com/dohyun-ko/react-atoms",startedAt:"2023-07",endedAt:"2023-07",description:"개인적으로 자주 사용하는 React 컴포넌트를 모아 npm에 배포한 라이브러리입니다. atomic design 패턴을 따르며, Storybook을 사용해 문서화했습니다.",whatIDid:["React 컴포넌트 개발","Storybook을 사용한 컴포넌트 문서화","npm 배포"],techStacks:["React","TypeScript","RollUp","Storybook","npm"]},{name:"Dutch: OOP Final Project",isImportant:!0,url:"https://github.com/dohyun-ko/dutch-wasm",startedAt:"2023-04",endedAt:"2023-06",description:"프론트엔드와 백엔드 모두 C++로만 작성된 더치페이 플랫폼입니다. Emscripten을 이용해 C++를 웹 어셈블리로 트랜스파일할 수 있다는 점과 디자인 패턴을 이용해 React의 navigator, state, router, 함수형 component, style 등 핵심 기능을 구현했습니다. GIST 객체 지향 프로그래밍 수업 기말 과제로 제출했습니다.",whatIDid:["C++과 웹 어셈블리를 사용한 프론트엔드 UI 개발","State, Navigator 등 프론트엔드 로직 개발"],techStacks:["C++","WebAssembly","Emscripten"]},{name:"Speaking Melona: 편의점 음식이 서로 대화를 해요",isImportant:!1,url:"https://melona.chat",startedAt:"2024-05",endedAt:"2024-05",description:"편의점 음식별로 페르소나를 설정하고 바코드를 스캔하면 서로 간의 대화를 생성해주는 서비스입니다. 프론트엔드에서의 바코드 인식이 challenge였습니다.",whatIDid:["프론트엔드 개발","백엔드 개발","프롬프팅"],techStacks:["React","TypeScript","FastAPI","PostgreSQL"]}]},skill:{skills:[{name:"React",level:5},{name:"TypeScript",level:4},{name:"JavaScript",level:4},{name:"HTML/CSS",level:4},{name:"Python",level:3},{name:"NestJS",level:2},{name:"FastAPI",level:2},{name:"Flutter",level:2},{name:"C++",level:2},{name:"Kotlin",level:1},{name:"Docker",level:1},{name:"Rust",level:1},{name:"Assembly",level:1}]}},X3=Object.freeze(Object.defineProperty({__proto__:null,main:Y3},Symbol.toStringTag,{value:"Module"})),J3={"ko-KR":{...X3},"en-US":{...Q3}};Jt.use(F3).use(tk).init({resources:J3,fallbackLng:{default:["en-US"],"ko-KR":["ko-KR"],ko:["ko-KR"]},interpolation:{escapeValue:!1},ns:["main"],defaultNS:"main"});var Nh={},ok={exports:{}},Dn={},lk={exports:{}},sk={};/**
* @license React
* scheduler.production.min.js
*
@@ -456,7 +456,7 @@ Error generating stack: `+m.message+`
@media screen and (max-width: ${Gg}px) {
grid-template-columns: 1fr;
}
-`,Iu=({children:e})=>{const{font:t}=Zn();return j(_e,{as:"h1",font:Ge.Bold,size:t(1.375),children:e})},I4=({})=>{const{t:e}=zn(),{font:t}=Zn();return Ae(Bi,{children:[j(Iu,{children:"학력"}),j(Xe,{height:"10px"}),Ae(F2,{children:[j(Ye,{gap:"20px",style:{borderLeft:"5px solid #EB0D00",paddingLeft:"10px"},children:j(Ye,{flexDirection:"column",gap:"30px",children:Ae(Ye,{flexDirection:"column",children:[j(_e,{font:Ge.Bold,size:t(1),children:"GIST"}),j(_e,{size:"1rem",children:e("education.major")})]})})}),Ae(Ye,{flexDirection:"column",children:[j(_e,{size:t(1),children:"TGPA 4.04 / 4.5"}),j(_e,{size:t(.75),children:"2022. 2 ~ "})]})]})]})},Rr=e=>{const[t,n]=e.toISOString().split("T")[0].split("-");return`${t}. ${n}`};function T4(e,t){const n=t||{};return(e[e.length-1]===""?[...e,""]:e).join((n.padRight?" ":"")+","+(n.padLeft===!1?"":" ")).trim()}const A4=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,L4=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,N4={};function qw(e,t){return((t||N4).jsx?L4:A4).test(e)}const R4=/[ \t\n\f\r]/g;function _4(e){return typeof e=="object"?e.type==="text"?eS(e.value):!1:eS(e)}function eS(e){return e.replace(R4,"")===""}class Tu{constructor(t,n,i){this.property=t,this.normal=n,i&&(this.space=i)}}Tu.prototype.property={};Tu.prototype.normal={};Tu.prototype.space=null;function j2(e,t){const n={},i={};let l=-1;for(;++l4&&n.slice(0,4)==="data"&&$4.test(t)){if(t.charAt(4)==="-"){const s=t.slice(5).replace(nS,B4);i="data"+s.charAt(0).toUpperCase()+s.slice(1)}else{const s=t.slice(4);if(!nS.test(s)){let a=s.replace(F4,U4);a.charAt(0)!=="-"&&(a="-"+a),t="data"+a}}l=Yg}return new l(i,t)}function U4(e){return"-"+e.toLowerCase()}function B4(e){return e.charAt(1).toUpperCase()}const V4={classId:"classID",dataType:"datatype",itemId:"itemID",strokeDashArray:"strokeDasharray",strokeDashOffset:"strokeDashoffset",strokeLineCap:"strokeLinecap",strokeLineJoin:"strokeLinejoin",strokeMiterLimit:"strokeMiterlimit",typeOf:"typeof",xLinkActuate:"xlinkActuate",xLinkArcRole:"xlinkArcrole",xLinkHref:"xlinkHref",xLinkRole:"xlinkRole",xLinkShow:"xlinkShow",xLinkTitle:"xlinkTitle",xLinkType:"xlinkType",xmlnsXLink:"xmlnsXlink"},b4=j2([V2,B2,W2,Q2,D4],"html"),Xg=j2([V2,B2,W2,Q2,M4],"svg");function H4(e){return e.join(" ").trim()}var K2={},rS=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,W4=/\n/g,Q4=/^\s*/,K4=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,G4=/^:\s*/,Y4=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,X4=/^[;\s]*/,J4=/^\s+|\s+$/g,Z4=`
+`,Iu=({children:e})=>{const{font:t}=Zn();return j(_e,{as:"h1",font:Ge.Bold,size:t(1.375),children:e})},I4=({})=>{const{t:e}=zn(),{font:t}=Zn();return Ae(Bi,{children:[j(Iu,{children:"학력"}),j(Xe,{height:"10px"}),Ae(F2,{children:[j(Ye,{gap:"20px",style:{borderLeft:"5px solid #EB0D00",paddingLeft:"10px"},children:j(Ye,{flexDirection:"column",gap:"30px",children:Ae(Ye,{flexDirection:"column",children:[j(_e,{font:Ge.Bold,size:t(1),children:"GIST"}),j(_e,{size:"1rem",children:e("education.major")})]})})}),Ae(Ye,{flexDirection:"column",children:[j(_e,{size:t(1),children:"TGPA 4.04 / 4.5"}),j(_e,{size:t(.75),children:"2022. 2 – "})]})]})]})},Rr=e=>{const[t,n]=e.toISOString().split("T")[0].split("-");return`${t}. ${n}`};function T4(e,t){const n=t||{};return(e[e.length-1]===""?[...e,""]:e).join((n.padRight?" ":"")+","+(n.padLeft===!1?"":" ")).trim()}const A4=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,L4=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,N4={};function qw(e,t){return((t||N4).jsx?L4:A4).test(e)}const R4=/[ \t\n\f\r]/g;function _4(e){return typeof e=="object"?e.type==="text"?eS(e.value):!1:eS(e)}function eS(e){return e.replace(R4,"")===""}class Tu{constructor(t,n,i){this.property=t,this.normal=n,i&&(this.space=i)}}Tu.prototype.property={};Tu.prototype.normal={};Tu.prototype.space=null;function j2(e,t){const n={},i={};let l=-1;for(;++l4&&n.slice(0,4)==="data"&&$4.test(t)){if(t.charAt(4)==="-"){const s=t.slice(5).replace(nS,B4);i="data"+s.charAt(0).toUpperCase()+s.slice(1)}else{const s=t.slice(4);if(!nS.test(s)){let a=s.replace(F4,U4);a.charAt(0)!=="-"&&(a="-"+a),t="data"+a}}l=Yg}return new l(i,t)}function U4(e){return"-"+e.toLowerCase()}function B4(e){return e.charAt(1).toUpperCase()}const V4={classId:"classID",dataType:"datatype",itemId:"itemID",strokeDashArray:"strokeDasharray",strokeDashOffset:"strokeDashoffset",strokeLineCap:"strokeLinecap",strokeLineJoin:"strokeLinejoin",strokeMiterLimit:"strokeMiterlimit",typeOf:"typeof",xLinkActuate:"xlinkActuate",xLinkArcRole:"xlinkArcrole",xLinkHref:"xlinkHref",xLinkRole:"xlinkRole",xLinkShow:"xlinkShow",xLinkTitle:"xlinkTitle",xLinkType:"xlinkType",xmlnsXLink:"xmlnsXlink"},b4=j2([V2,B2,W2,Q2,D4],"html"),Xg=j2([V2,B2,W2,Q2,M4],"svg");function H4(e){return e.join(" ").trim()}var K2={},rS=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,W4=/\n/g,Q4=/^\s*/,K4=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,G4=/^:\s*/,Y4=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,X4=/^[;\s]*/,J4=/^\s+|\s+$/g,Z4=`
`,iS="/",oS="*",uo="",q4="comment",eN="declaration",tN=function(e,t){if(typeof e!="string")throw new TypeError("First argument must be a string");if(!e)return[];t=t||{};var n=1,i=1;function l(C){var I=C.match(W4);I&&(n+=I.length);var L=C.lastIndexOf(Z4);i=~L?C.length-L:i+C.length}function s(){var C={line:n,column:i};return function(I){return I.position=new a(C),h(),I}}function a(C){this.start=C,this.end={line:n,column:i},this.source=t.source}a.prototype.content=e;function f(C){var I=new Error(t.source+":"+n+":"+i+": "+C);if(I.reason=C,I.filename=t.source,I.line=n,I.column=i,I.source=e,!t.silent)throw I}function d(C){var I=C.exec(e);if(I){var L=I[0];return l(L),e=e.slice(L.length),I}}function h(){d(Q4)}function g(C){var I;for(C=C||[];I=y();)I!==!1&&C.push(I);return C}function y(){var C=s();if(!(iS!=e.charAt(0)||oS!=e.charAt(1))){for(var I=2;uo!=e.charAt(I)&&(oS!=e.charAt(I)||iS!=e.charAt(I+1));)++I;if(I+=2,uo===e.charAt(I-1))return f("End of comment missing");var L=e.slice(2,I-2);return i+=2,l(L),e=e.slice(I),i+=2,C({type:q4,comment:L})}}function v(){var C=s(),I=d(K4);if(I){if(y(),!d(G4))return f("property missing ':'");var L=d(Y4),x=C({type:eN,property:lS(I[0].replace(rS,uo)),value:L?lS(L[0].replace(rS,uo)):uo});return d(X4),x}}function S(){var C=[];g(C);for(var I;I=v();)I!==!1&&(C.push(I),g(C));return C}return h(),S()};function lS(e){return e?e.replace(J4,uo):uo}var nN=K1&&K1.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(K2,"__esModule",{value:!0});var rN=nN(tN);function iN(e,t){var n=null;if(!e||typeof e!="string")return n;var i=(0,rN.default)(e),l=typeof t=="function";return i.forEach(function(s){if(s.type==="declaration"){var a=s.property,f=s.value;l?t(a,f,s):f&&(n=n||{},n[a]=f)}}),n}var sS=K2.default=iN;const oN=sS.default||sS,G2=Y2("end"),Jg=Y2("start");function Y2(e){return t;function t(n){const i=n&&n.position&&n.position[e]||{};if(typeof i.line=="number"&&i.line>0&&typeof i.column=="number"&&i.column>0)return{line:i.line,column:i.column,offset:typeof i.offset=="number"&&i.offset>-1?i.offset:void 0}}}function lN(e){const t=Jg(e),n=G2(e);if(t&&n)return{start:t,end:n}}function Zs(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?uS(e.position):"start"in e||"end"in e?uS(e):"line"in e||"column"in e?Om(e):""}function Om(e){return aS(e&&e.line)+":"+aS(e&&e.column)}function uS(e){return Om(e&&e.start)+"-"+Om(e&&e.end)}function aS(e){return e&&typeof e=="number"?e:1}class Zt extends Error{constructor(t,n,i){super(),typeof n=="string"&&(i=n,n=void 0);let l="",s={},a=!1;if(n&&("line"in n&&"column"in n?s={place:n}:"start"in n&&"end"in n?s={place:n}:"type"in n?s={ancestors:[n],place:n.position}:s={...n}),typeof t=="string"?l=t:!s.cause&&t&&(a=!0,l=t.message,s.cause=t),!s.ruleId&&!s.source&&typeof i=="string"){const d=i.indexOf(":");d===-1?s.ruleId=i:(s.source=i.slice(0,d),s.ruleId=i.slice(d+1))}if(!s.place&&s.ancestors&&s.ancestors){const d=s.ancestors[s.ancestors.length-1];d&&(s.place=d.position)}const f=s.place&&"start"in s.place?s.place.start:s.place;this.ancestors=s.ancestors||void 0,this.cause=s.cause||void 0,this.column=f?f.column:void 0,this.fatal=void 0,this.file,this.message=l,this.line=f?f.line:void 0,this.name=Zs(s.place)||"1:1",this.place=s.place||void 0,this.reason=this.message,this.ruleId=s.ruleId||void 0,this.source=s.source||void 0,this.stack=a&&s.cause&&typeof s.cause.stack=="string"?s.cause.stack:"",this.actual,this.expected,this.note,this.url}}Zt.prototype.file="";Zt.prototype.name="";Zt.prototype.reason="";Zt.prototype.message="";Zt.prototype.stack="";Zt.prototype.column=void 0;Zt.prototype.line=void 0;Zt.prototype.ancestors=void 0;Zt.prototype.cause=void 0;Zt.prototype.fatal=void 0;Zt.prototype.place=void 0;Zt.prototype.ruleId=void 0;Zt.prototype.source=void 0;const Zg={}.hasOwnProperty,sN=new Map,uN=/[A-Z]/g,aN=/-([a-z])/g,cN=new Set(["table","tbody","thead","tfoot","tr"]),fN=new Set(["td","th"]),X2="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function dN(e,t){if(!t||t.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const n=t.filePath||void 0;let i;if(t.development){if(typeof t.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");i=SN(n,t.jsxDEV)}else{if(typeof t.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof t.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");i=wN(n,t.jsx,t.jsxs)}const l={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:i,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:n,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space==="svg"?Xg:b4,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},s=J2(l,e,void 0);return s&&typeof s!="string"?s:l.create(e,l.Fragment,{children:s||void 0},void 0)}function J2(e,t,n){if(t.type==="element")return pN(e,t,n);if(t.type==="mdxFlowExpression"||t.type==="mdxTextExpression")return hN(e,t);if(t.type==="mdxJsxFlowElement"||t.type==="mdxJsxTextElement")return gN(e,t,n);if(t.type==="mdxjsEsm")return mN(e,t);if(t.type==="root")return yN(e,t,n);if(t.type==="text")return vN(e,t)}function pN(e,t,n){const i=e.schema;let l=i;t.tagName.toLowerCase()==="svg"&&i.space==="html"&&(l=Xg,e.schema=l),e.ancestors.push(t);const s=q2(e,t.tagName,!1),a=kN(e,t);let f=ey(e,t);return cN.has(t.tagName)&&(f=f.filter(function(d){return typeof d=="string"?!_4(d):!0})),Z2(e,a,s,t),qg(a,f),e.ancestors.pop(),e.schema=i,e.create(t,s,a,n)}function hN(e,t){if(t.data&&t.data.estree&&e.evaluater){const i=t.data.estree.body[0];return i.type,e.evaluater.evaluateExpression(i.expression)}wu(e,t.position)}function mN(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);wu(e,t.position)}function gN(e,t,n){const i=e.schema;let l=i;t.name==="svg"&&i.space==="html"&&(l=Xg,e.schema=l),e.ancestors.push(t);const s=t.name===null?e.Fragment:q2(e,t.name,!0),a=xN(e,t),f=ey(e,t);return Z2(e,a,s,t),qg(a,f),e.ancestors.pop(),e.schema=i,e.create(t,s,a,n)}function yN(e,t,n){const i={};return qg(i,ey(e,t)),e.create(t,e.Fragment,i,n)}function vN(e,t){return t.value}function Z2(e,t,n,i){typeof n!="string"&&n!==e.Fragment&&e.passNode&&(t.node=i)}function qg(e,t){if(t.length>0){const n=t.length>1?t:t[0];n&&(e.children=n)}}function wN(e,t,n){return i;function i(l,s,a,f){const h=Array.isArray(a.children)?n:t;return f?h(s,a,f):h(s,a)}}function SN(e,t){return n;function n(i,l,s,a){const f=Array.isArray(s.children),d=Jg(i);return t(l,s,a,f,{columnNumber:d?d.column-1:void 0,fileName:e,lineNumber:d?d.line:void 0},void 0)}}function kN(e,t){const n={};let i,l;for(l in t.properties)if(l!=="children"&&Zg.call(t.properties,l)){const s=EN(e,l,t.properties[l]);if(s){const[a,f]=s;e.tableCellAlignToStyle&&a==="align"&&typeof f=="string"&&fN.has(t.tagName)?i=f:n[a]=f}}if(i){const s=n.style||(n.style={});s[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=i}return n}function xN(e,t){const n={};for(const i of t.attributes)if(i.type==="mdxJsxExpressionAttribute")if(i.data&&i.data.estree&&e.evaluater){const s=i.data.estree.body[0];s.type;const a=s.expression;a.type;const f=a.properties[0];f.type,Object.assign(n,e.evaluater.evaluateExpression(f.argument))}else wu(e,t.position);else{const l=i.name;let s;if(i.value&&typeof i.value=="object")if(i.value.data&&i.value.data.estree&&e.evaluater){const f=i.value.data.estree.body[0];f.type,s=e.evaluater.evaluateExpression(f.expression)}else wu(e,t.position);else s=i.value===null?!0:i.value;n[l]=s}return n}function ey(e,t){const n=[];let i=-1;const l=e.passKeys?new Map:sN;for(;++il?0:l+t:t=t>l?l:t,n=n>0?n:0,i.length<1e4)a=Array.from(i),a.unshift(t,n),e.splice(...a);else for(n&&e.splice(t,n);s0?(_r(e,e.length,0,t),e):t}const dS={}.hasOwnProperty;function _N(e){const t={};let n=-1;for(;++n13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||(n&65535)===65535||(n&65535)===65534||n>1114111?"�":String.fromCodePoint(n)}function xl(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const Ir=Qi(/[A-Za-z]/),Rn=Qi(/[\dA-Za-z]/),DN=Qi(/[#-'*+\--9=?A-Z^-~]/);function zm(e){return e!==null&&(e<32||e===127)}const Dm=Qi(/\d/),MN=Qi(/[\dA-Fa-f]/),$N=Qi(/[!-/:-@[-`{-~]/);function Ie(e){return e!==null&&e<-2}function wn(e){return e!==null&&(e<0||e===32)}function He(e){return e===-2||e===-1||e===32}const FN=Qi(/\p{P}|\p{S}/u),jN=Qi(/\s/);function Qi(e){return t;function t(n){return n!==null&&n>-1&&e.test(String.fromCharCode(n))}}function jl(e){const t=[];let n=-1,i=0,l=0;for(;++n55295&&s<57344){const f=e.charCodeAt(n+1);s<56320&&f>56319&&f<57344?(a=String.fromCharCode(s,f),l=1):a="�"}else a=String.fromCharCode(s);a&&(t.push(e.slice(i,n),encodeURIComponent(a)),i=n+l+1,a=""),l&&(n+=l,l=0)}return t.join("")+e.slice(i)}function et(e,t,n,i){const l=i?i-1:Number.POSITIVE_INFINITY;let s=0;return a;function a(d){return He(d)?(e.enter(n),f(d)):t(d)}function f(d){return He(d)&&s++a))return;const V=t.events.length;let _=V,G,Y;for(;_--;)if(t.events[_][0]==="exit"&&t.events[_][1].type==="chunkFlow"){if(G){Y=t.events[_][1].end;break}G=!0}for(x(i),R=V;RT;){const M=n[N];t.containerState=M[1],M[0].exit.call(t,e)}n.length=T}function E(){l.write([null]),s=void 0,l=void 0,t.containerState._closeFlow=void 0}}function HN(e,t,n){return et(e,e.attempt(this.parser.constructs.document,t,n),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function hS(e){if(e===null||wn(e)||jN(e))return 1;if(FN(e))return 2}function ny(e,t,n){const i=[];let l=-1;for(;++l1&&e[n][1].end.offset-e[n][1].start.offset>1?2:1;const y=Object.assign({},e[i][1].end),v=Object.assign({},e[n][1].start);mS(y,-d),mS(v,d),a={type:d>1?"strongSequence":"emphasisSequence",start:y,end:Object.assign({},e[i][1].end)},f={type:d>1?"strongSequence":"emphasisSequence",start:Object.assign({},e[n][1].start),end:v},s={type:d>1?"strongText":"emphasisText",start:Object.assign({},e[i][1].end),end:Object.assign({},e[n][1].start)},l={type:d>1?"strong":"emphasis",start:Object.assign({},a.start),end:Object.assign({},f.end)},e[i][1].end=Object.assign({},a.start),e[n][1].start=Object.assign({},f.end),h=[],e[i][1].end.offset-e[i][1].start.offset&&(h=Kn(h,[["enter",e[i][1],t],["exit",e[i][1],t]])),h=Kn(h,[["enter",l,t],["enter",a,t],["exit",a,t],["enter",s,t]]),h=Kn(h,ny(t.parser.constructs.insideSpan.null,e.slice(i+1,n),t)),h=Kn(h,[["exit",s,t],["enter",f,t],["exit",f,t],["exit",l,t]]),e[n][1].end.offset-e[n][1].start.offset?(g=2,h=Kn(h,[["enter",e[n][1],t],["exit",e[n][1],t]])):g=0,_r(e,i-1,n-i+3,h),n=i+h.length-g-2;break}}for(n=-1;++n0&&He(R)?et(e,E,"linePrefix",s+1)(R):E(R)}function E(R){return R===null||Ie(R)?e.check(gS,I,N)(R):(e.enter("codeFlowValue"),T(R))}function T(R){return R===null||Ie(R)?(e.exit("codeFlowValue"),E(R)):(e.consume(R),T)}function N(R){return e.exit("codeFenced"),t(R)}function M(R,V,_){let G=0;return Y;function Y(te){return R.enter("lineEnding"),R.consume(te),R.exit("lineEnding"),U}function U(te){return R.enter("codeFencedFence"),He(te)?et(R,b,"linePrefix",i.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(te):b(te)}function b(te){return te===f?(R.enter("codeFencedFenceSequence"),J(te)):_(te)}function J(te){return te===f?(G++,R.consume(te),J):G>=a?(R.exit("codeFencedFenceSequence"),He(te)?et(R,ne,"whitespace")(te):ne(te)):_(te)}function ne(te){return te===null||Ie(te)?(R.exit("codeFencedFence"),V(te)):_(te)}}}function nR(e,t,n){const i=this;return l;function l(a){return a===null?n(a):(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),s)}function s(a){return i.parser.lazy[i.now().line]?n(a):t(a)}}const vh={name:"codeIndented",tokenize:iR},rR={tokenize:oR,partial:!0};function iR(e,t,n){const i=this;return l;function l(h){return e.enter("codeIndented"),et(e,s,"linePrefix",4+1)(h)}function s(h){const g=i.events[i.events.length-1];return g&&g[1].type==="linePrefix"&&g[2].sliceSerialize(g[1],!0).length>=4?a(h):n(h)}function a(h){return h===null?d(h):Ie(h)?e.attempt(rR,a,d)(h):(e.enter("codeFlowValue"),f(h))}function f(h){return h===null||Ie(h)?(e.exit("codeFlowValue"),a(h)):(e.consume(h),f)}function d(h){return e.exit("codeIndented"),t(h)}}function oR(e,t,n){const i=this;return l;function l(a){return i.parser.lazy[i.now().line]?n(a):Ie(a)?(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),l):et(e,s,"linePrefix",4+1)(a)}function s(a){const f=i.events[i.events.length-1];return f&&f[1].type==="linePrefix"&&f[2].sliceSerialize(f[1],!0).length>=4?t(a):Ie(a)?l(a):n(a)}}const lR={name:"codeText",tokenize:aR,resolve:sR,previous:uR};function sR(e){let t=e.length-4,n=3,i,l;if((e[n][1].type==="lineEnding"||e[n][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(i=n;++i=4?t(a):e.interrupt(i.parser.constructs.flow,n,t)(a)}}function lE(e,t,n,i,l,s,a,f,d){const h=d||Number.POSITIVE_INFINITY;let g=0;return y;function y(x){return x===60?(e.enter(i),e.enter(l),e.enter(s),e.consume(x),e.exit(s),v):x===null||x===32||x===41||zm(x)?n(x):(e.enter(i),e.enter(a),e.enter(f),e.enter("chunkString",{contentType:"string"}),I(x))}function v(x){return x===62?(e.enter(s),e.consume(x),e.exit(s),e.exit(l),e.exit(i),t):(e.enter(f),e.enter("chunkString",{contentType:"string"}),S(x))}function S(x){return x===62?(e.exit("chunkString"),e.exit(f),v(x)):x===null||x===60||Ie(x)?n(x):(e.consume(x),x===92?C:S)}function C(x){return x===60||x===62||x===92?(e.consume(x),S):S(x)}function I(x){return!g&&(x===null||x===41||wn(x))?(e.exit("chunkString"),e.exit(f),e.exit(a),e.exit(i),t(x)):g999||S===null||S===91||S===93&&!d||S===94&&!f&&"_hiddenFootnoteSupport"in a.parser.constructs?n(S):S===93?(e.exit(s),e.enter(l),e.consume(S),e.exit(l),e.exit(i),t):Ie(S)?(e.enter("lineEnding"),e.consume(S),e.exit("lineEnding"),g):(e.enter("chunkString",{contentType:"string"}),y(S))}function y(S){return S===null||S===91||S===93||Ie(S)||f++>999?(e.exit("chunkString"),g(S)):(e.consume(S),d||(d=!He(S)),S===92?v:y)}function v(S){return S===91||S===92||S===93?(e.consume(S),f++,y):y(S)}}function uE(e,t,n,i,l,s){let a;return f;function f(v){return v===34||v===39||v===40?(e.enter(i),e.enter(l),e.consume(v),e.exit(l),a=v===40?41:v,d):n(v)}function d(v){return v===a?(e.enter(l),e.consume(v),e.exit(l),e.exit(i),t):(e.enter(s),h(v))}function h(v){return v===a?(e.exit(s),d(a)):v===null?n(v):Ie(v)?(e.enter("lineEnding"),e.consume(v),e.exit("lineEnding"),et(e,h,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),g(v))}function g(v){return v===a||v===null||Ie(v)?(e.exit("chunkString"),h(v)):(e.consume(v),v===92?y:g)}function y(v){return v===a||v===92?(e.consume(v),g):g(v)}}function qs(e,t){let n;return i;function i(l){return Ie(l)?(e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),n=!0,i):He(l)?et(e,i,n?"linePrefix":"lineSuffix")(l):t(l)}}const gR={name:"definition",tokenize:vR},yR={tokenize:wR,partial:!0};function vR(e,t,n){const i=this;let l;return s;function s(S){return e.enter("definition"),a(S)}function a(S){return sE.call(i,e,f,n,"definitionLabel","definitionLabelMarker","definitionLabelString")(S)}function f(S){return l=xl(i.sliceSerialize(i.events[i.events.length-1][1]).slice(1,-1)),S===58?(e.enter("definitionMarker"),e.consume(S),e.exit("definitionMarker"),d):n(S)}function d(S){return wn(S)?qs(e,h)(S):h(S)}function h(S){return lE(e,g,n,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(S)}function g(S){return e.attempt(yR,y,y)(S)}function y(S){return He(S)?et(e,v,"whitespace")(S):v(S)}function v(S){return S===null||Ie(S)?(e.exit("definition"),i.parser.defined.push(l),t(S)):n(S)}}function wR(e,t,n){return i;function i(f){return wn(f)?qs(e,l)(f):n(f)}function l(f){return uE(e,s,n,"definitionTitle","definitionTitleMarker","definitionTitleString")(f)}function s(f){return He(f)?et(e,a,"whitespace")(f):a(f)}function a(f){return f===null||Ie(f)?t(f):n(f)}}const SR={name:"hardBreakEscape",tokenize:kR};function kR(e,t,n){return i;function i(s){return e.enter("hardBreakEscape"),e.consume(s),l}function l(s){return Ie(s)?(e.exit("hardBreakEscape"),t(s)):n(s)}}const xR={name:"headingAtx",tokenize:CR,resolve:ER};function ER(e,t){let n=e.length-2,i=3,l,s;return e[i][1].type==="whitespace"&&(i+=2),n-2>i&&e[n][1].type==="whitespace"&&(n-=2),e[n][1].type==="atxHeadingSequence"&&(i===n-1||n-4>i&&e[n-2][1].type==="whitespace")&&(n-=i+1===n?2:4),n>i&&(l={type:"atxHeadingText",start:e[i][1].start,end:e[n][1].end},s={type:"chunkText",start:e[i][1].start,end:e[n][1].end,contentType:"text"},_r(e,i,n-i+1,[["enter",l,t],["enter",s,t],["exit",s,t],["exit",l,t]])),e}function CR(e,t,n){let i=0;return l;function l(g){return e.enter("atxHeading"),s(g)}function s(g){return e.enter("atxHeadingSequence"),a(g)}function a(g){return g===35&&i++<6?(e.consume(g),a):g===null||wn(g)?(e.exit("atxHeadingSequence"),f(g)):n(g)}function f(g){return g===35?(e.enter("atxHeadingSequence"),d(g)):g===null||Ie(g)?(e.exit("atxHeading"),t(g)):He(g)?et(e,f,"whitespace")(g):(e.enter("atxHeadingText"),h(g))}function d(g){return g===35?(e.consume(g),d):(e.exit("atxHeadingSequence"),f(g))}function h(g){return g===null||g===35||wn(g)?(e.exit("atxHeadingText"),f(g)):(e.consume(g),h)}}const PR=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],vS=["pre","script","style","textarea"],IR={name:"htmlFlow",tokenize:NR,resolveTo:LR,concrete:!0},TR={tokenize:_R,partial:!0},AR={tokenize:RR,partial:!0};function LR(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function NR(e,t,n){const i=this;let l,s,a,f,d;return h;function h(P){return g(P)}function g(P){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(P),y}function y(P){return P===33?(e.consume(P),v):P===47?(e.consume(P),s=!0,I):P===63?(e.consume(P),l=3,i.interrupt?t:w):Ir(P)?(e.consume(P),a=String.fromCharCode(P),L):n(P)}function v(P){return P===45?(e.consume(P),l=2,S):P===91?(e.consume(P),l=5,f=0,C):Ir(P)?(e.consume(P),l=4,i.interrupt?t:w):n(P)}function S(P){return P===45?(e.consume(P),i.interrupt?t:w):n(P)}function C(P){const Z="CDATA[";return P===Z.charCodeAt(f++)?(e.consume(P),f===Z.length?i.interrupt?t:b:C):n(P)}function I(P){return Ir(P)?(e.consume(P),a=String.fromCharCode(P),L):n(P)}function L(P){if(P===null||P===47||P===62||wn(P)){const Z=P===47,fe=a.toLowerCase();return!Z&&!s&&vS.includes(fe)?(l=1,i.interrupt?t(P):b(P)):PR.includes(a.toLowerCase())?(l=6,Z?(e.consume(P),x):i.interrupt?t(P):b(P)):(l=7,i.interrupt&&!i.parser.lazy[i.now().line]?n(P):s?E(P):T(P))}return P===45||Rn(P)?(e.consume(P),a+=String.fromCharCode(P),L):n(P)}function x(P){return P===62?(e.consume(P),i.interrupt?t:b):n(P)}function E(P){return He(P)?(e.consume(P),E):Y(P)}function T(P){return P===47?(e.consume(P),Y):P===58||P===95||Ir(P)?(e.consume(P),N):He(P)?(e.consume(P),T):Y(P)}function N(P){return P===45||P===46||P===58||P===95||Rn(P)?(e.consume(P),N):M(P)}function M(P){return P===61?(e.consume(P),R):He(P)?(e.consume(P),M):T(P)}function R(P){return P===null||P===60||P===61||P===62||P===96?n(P):P===34||P===39?(e.consume(P),d=P,V):He(P)?(e.consume(P),R):_(P)}function V(P){return P===d?(e.consume(P),d=null,G):P===null||Ie(P)?n(P):(e.consume(P),V)}function _(P){return P===null||P===34||P===39||P===47||P===60||P===61||P===62||P===96||wn(P)?M(P):(e.consume(P),_)}function G(P){return P===47||P===62||He(P)?T(P):n(P)}function Y(P){return P===62?(e.consume(P),U):n(P)}function U(P){return P===null||Ie(P)?b(P):He(P)?(e.consume(P),U):n(P)}function b(P){return P===45&&l===2?(e.consume(P),de):P===60&&l===1?(e.consume(P),re):P===62&&l===4?(e.consume(P),W):P===63&&l===3?(e.consume(P),w):P===93&&l===5?(e.consume(P),X):Ie(P)&&(l===6||l===7)?(e.exit("htmlFlowData"),e.check(TR,Q,J)(P)):P===null||Ie(P)?(e.exit("htmlFlowData"),J(P)):(e.consume(P),b)}function J(P){return e.check(AR,ne,Q)(P)}function ne(P){return e.enter("lineEnding"),e.consume(P),e.exit("lineEnding"),te}function te(P){return P===null||Ie(P)?J(P):(e.enter("htmlFlowData"),b(P))}function de(P){return P===45?(e.consume(P),w):b(P)}function re(P){return P===47?(e.consume(P),a="",O):b(P)}function O(P){if(P===62){const Z=a.toLowerCase();return vS.includes(Z)?(e.consume(P),W):b(P)}return Ir(P)&&a.length<8?(e.consume(P),a+=String.fromCharCode(P),O):b(P)}function X(P){return P===93?(e.consume(P),w):b(P)}function w(P){return P===62?(e.consume(P),W):P===45&&l===2?(e.consume(P),w):b(P)}function W(P){return P===null||Ie(P)?(e.exit("htmlFlowData"),Q(P)):(e.consume(P),W)}function Q(P){return e.exit("htmlFlow"),t(P)}}function RR(e,t,n){const i=this;return l;function l(a){return Ie(a)?(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),s):n(a)}function s(a){return i.parser.lazy[i.now().line]?n(a):t(a)}}function _R(e,t,n){return i;function i(l){return e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),e.attempt(Hf,t,n)}}const OR={name:"htmlText",tokenize:zR};function zR(e,t,n){const i=this;let l,s,a;return f;function f(w){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(w),d}function d(w){return w===33?(e.consume(w),h):w===47?(e.consume(w),M):w===63?(e.consume(w),T):Ir(w)?(e.consume(w),_):n(w)}function h(w){return w===45?(e.consume(w),g):w===91?(e.consume(w),s=0,C):Ir(w)?(e.consume(w),E):n(w)}function g(w){return w===45?(e.consume(w),S):n(w)}function y(w){return w===null?n(w):w===45?(e.consume(w),v):Ie(w)?(a=y,re(w)):(e.consume(w),y)}function v(w){return w===45?(e.consume(w),S):y(w)}function S(w){return w===62?de(w):w===45?v(w):y(w)}function C(w){const W="CDATA[";return w===W.charCodeAt(s++)?(e.consume(w),s===W.length?I:C):n(w)}function I(w){return w===null?n(w):w===93?(e.consume(w),L):Ie(w)?(a=I,re(w)):(e.consume(w),I)}function L(w){return w===93?(e.consume(w),x):I(w)}function x(w){return w===62?de(w):w===93?(e.consume(w),x):I(w)}function E(w){return w===null||w===62?de(w):Ie(w)?(a=E,re(w)):(e.consume(w),E)}function T(w){return w===null?n(w):w===63?(e.consume(w),N):Ie(w)?(a=T,re(w)):(e.consume(w),T)}function N(w){return w===62?de(w):T(w)}function M(w){return Ir(w)?(e.consume(w),R):n(w)}function R(w){return w===45||Rn(w)?(e.consume(w),R):V(w)}function V(w){return Ie(w)?(a=V,re(w)):He(w)?(e.consume(w),V):de(w)}function _(w){return w===45||Rn(w)?(e.consume(w),_):w===47||w===62||wn(w)?G(w):n(w)}function G(w){return w===47?(e.consume(w),de):w===58||w===95||Ir(w)?(e.consume(w),Y):Ie(w)?(a=G,re(w)):He(w)?(e.consume(w),G):de(w)}function Y(w){return w===45||w===46||w===58||w===95||Rn(w)?(e.consume(w),Y):U(w)}function U(w){return w===61?(e.consume(w),b):Ie(w)?(a=U,re(w)):He(w)?(e.consume(w),U):G(w)}function b(w){return w===null||w===60||w===61||w===62||w===96?n(w):w===34||w===39?(e.consume(w),l=w,J):Ie(w)?(a=b,re(w)):He(w)?(e.consume(w),b):(e.consume(w),ne)}function J(w){return w===l?(e.consume(w),l=void 0,te):w===null?n(w):Ie(w)?(a=J,re(w)):(e.consume(w),J)}function ne(w){return w===null||w===34||w===39||w===60||w===61||w===96?n(w):w===47||w===62||wn(w)?G(w):(e.consume(w),ne)}function te(w){return w===47||w===62||wn(w)?G(w):n(w)}function de(w){return w===62?(e.consume(w),e.exit("htmlTextData"),e.exit("htmlText"),t):n(w)}function re(w){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(w),e.exit("lineEnding"),O}function O(w){return He(w)?et(e,X,"linePrefix",i.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(w):X(w)}function X(w){return e.enter("htmlTextData"),a(w)}}const ry={name:"labelEnd",tokenize:UR,resolveTo:jR,resolveAll:FR},DR={tokenize:BR},MR={tokenize:VR},$R={tokenize:bR};function FR(e){let t=-1;for(;++t=3&&(h===null||Ie(h))?(e.exit("thematicBreak"),t(h)):n(h)}function d(h){return h===l?(e.consume(h),i++,d):(e.exit("thematicBreakSequence"),He(h)?et(e,f,"whitespace")(h):f(h))}}const pn={name:"list",tokenize:ZR,continuation:{tokenize:qR},exit:t_},XR={tokenize:n_,partial:!0},JR={tokenize:e_,partial:!0};function ZR(e,t,n){const i=this,l=i.events[i.events.length-1];let s=l&&l[1].type==="linePrefix"?l[2].sliceSerialize(l[1],!0).length:0,a=0;return f;function f(S){const C=i.containerState.type||(S===42||S===43||S===45?"listUnordered":"listOrdered");if(C==="listUnordered"?!i.containerState.marker||S===i.containerState.marker:Dm(S)){if(i.containerState.type||(i.containerState.type=C,e.enter(C,{_container:!0})),C==="listUnordered")return e.enter("listItemPrefix"),S===42||S===45?e.check(Ec,n,h)(S):h(S);if(!i.interrupt||S===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),d(S)}return n(S)}function d(S){return Dm(S)&&++a<10?(e.consume(S),d):(!i.interrupt||a<2)&&(i.containerState.marker?S===i.containerState.marker:S===41||S===46)?(e.exit("listItemValue"),h(S)):n(S)}function h(S){return e.enter("listItemMarker"),e.consume(S),e.exit("listItemMarker"),i.containerState.marker=i.containerState.marker||S,e.check(Hf,i.interrupt?n:g,e.attempt(XR,v,y))}function g(S){return i.containerState.initialBlankLine=!0,s++,v(S)}function y(S){return He(S)?(e.enter("listItemPrefixWhitespace"),e.consume(S),e.exit("listItemPrefixWhitespace"),v):n(S)}function v(S){return i.containerState.size=s+i.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(S)}}function qR(e,t,n){const i=this;return i.containerState._closeFlow=void 0,e.check(Hf,l,s);function l(f){return i.containerState.furtherBlankLines=i.containerState.furtherBlankLines||i.containerState.initialBlankLine,et(e,t,"listItemIndent",i.containerState.size+1)(f)}function s(f){return i.containerState.furtherBlankLines||!He(f)?(i.containerState.furtherBlankLines=void 0,i.containerState.initialBlankLine=void 0,a(f)):(i.containerState.furtherBlankLines=void 0,i.containerState.initialBlankLine=void 0,e.attempt(JR,t,a)(f))}function a(f){return i.containerState._closeFlow=!0,i.interrupt=void 0,et(e,e.attempt(pn,t,n),"linePrefix",i.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(f)}}function e_(e,t,n){const i=this;return et(e,l,"listItemIndent",i.containerState.size+1);function l(s){const a=i.events[i.events.length-1];return a&&a[1].type==="listItemIndent"&&a[2].sliceSerialize(a[1],!0).length===i.containerState.size?t(s):n(s)}}function t_(e){e.exit(this.containerState.type)}function n_(e,t,n){const i=this;return et(e,l,"listItemPrefixWhitespace",i.parser.constructs.disable.null.includes("codeIndented")?void 0:4+1);function l(s){const a=i.events[i.events.length-1];return!He(s)&&a&&a[1].type==="listItemPrefixWhitespace"?t(s):n(s)}}const wS={name:"setextUnderline",tokenize:i_,resolveTo:r_};function r_(e,t){let n=e.length,i,l,s;for(;n--;)if(e[n][0]==="enter"){if(e[n][1].type==="content"){i=n;break}e[n][1].type==="paragraph"&&(l=n)}else e[n][1].type==="content"&&e.splice(n,1),!s&&e[n][1].type==="definition"&&(s=n);const a={type:"setextHeading",start:Object.assign({},e[l][1].start),end:Object.assign({},e[e.length-1][1].end)};return e[l][1].type="setextHeadingText",s?(e.splice(l,0,["enter",a,t]),e.splice(s+1,0,["exit",e[i][1],t]),e[i][1].end=Object.assign({},e[s][1].end)):e[i][1]=a,e.push(["exit",a,t]),e}function i_(e,t,n){const i=this;let l;return s;function s(h){let g=i.events.length,y;for(;g--;)if(i.events[g][1].type!=="lineEnding"&&i.events[g][1].type!=="linePrefix"&&i.events[g][1].type!=="content"){y=i.events[g][1].type==="paragraph";break}return!i.parser.lazy[i.now().line]&&(i.interrupt||y)?(e.enter("setextHeadingLine"),l=h,a(h)):n(h)}function a(h){return e.enter("setextHeadingLineSequence"),f(h)}function f(h){return h===l?(e.consume(h),f):(e.exit("setextHeadingLineSequence"),He(h)?et(e,d,"lineSuffix")(h):d(h))}function d(h){return h===null||Ie(h)?(e.exit("setextHeadingLine"),t(h)):n(h)}}const o_={tokenize:l_};function l_(e){const t=this,n=e.attempt(Hf,i,e.attempt(this.parser.constructs.flowInitial,l,et(e,e.attempt(this.parser.constructs.flow,l,e.attempt(fR,l)),"linePrefix")));return n;function i(s){if(s===null){e.consume(s);return}return e.enter("lineEndingBlank"),e.consume(s),e.exit("lineEndingBlank"),t.currentConstruct=void 0,n}function l(s){if(s===null){e.consume(s);return}return e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),t.currentConstruct=void 0,n}}const s_={resolveAll:cE()},u_=aE("string"),a_=aE("text");function aE(e){return{tokenize:t,resolveAll:cE(e==="text"?c_:void 0)};function t(n){const i=this,l=this.parser.constructs[e],s=n.attempt(l,a,f);return a;function a(g){return h(g)?s(g):f(g)}function f(g){if(g===null){n.consume(g);return}return n.enter("data"),n.consume(g),d}function d(g){return h(g)?(n.exit("data"),s(g)):(n.consume(g),d)}function h(g){if(g===null)return!0;const y=l[g];let v=-1;if(y)for(;++v-1){const f=a[0];typeof f=="string"?a[0]=f.slice(i):a.shift()}s>0&&a.push(e[l].slice(0,s))}return a}function p_(e,t){let n=-1;const i=[];let l;for(;++n0){const Mt=xe.tokenStack[xe.tokenStack.length-1];(Mt[1]||kS).call(xe,void 0,Mt[0])}for(ce.position={start:ki(K.length>0?K[0][1].start:{line:1,column:1,offset:0}),end:ki(K.length>0?K[K.length-2][1].end:{line:1,column:1,offset:0})},be=-1;++be0&&n.push({type:"text",value:`
`}),n}function LS(e){let t=0,n=e.charCodeAt(t);for(;n===9||n===32;)t++,n=e.charCodeAt(t);return e.slice(t)}function NS(e,t){const n=EO(e,t),i=n.one(e,void 0),l=dO(n),s=Array.isArray(i)?{type:"root",children:i}:i||{type:"root",children:[]};return l&&s.children.push({type:"text",value:`
-`},l),s}function AO(e,t){return e&&"run"in e?async function(n,i){const l=NS(n,{file:i,...t});await e.run(l,i)}:function(n,i){return NS(n,{file:i,...t||e})}}function RS(e){if(e)throw e}var Cc=Object.prototype.hasOwnProperty,kE=Object.prototype.toString,_S=Object.defineProperty,OS=Object.getOwnPropertyDescriptor,zS=function(t){return typeof Array.isArray=="function"?Array.isArray(t):kE.call(t)==="[object Array]"},DS=function(t){if(!t||kE.call(t)!=="[object Object]")return!1;var n=Cc.call(t,"constructor"),i=t.constructor&&t.constructor.prototype&&Cc.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!n&&!i)return!1;var l;for(l in t);return typeof l>"u"||Cc.call(t,l)},MS=function(t,n){_S&&n.name==="__proto__"?_S(t,n.name,{enumerable:!0,configurable:!0,value:n.newValue,writable:!0}):t[n.name]=n.newValue},$S=function(t,n){if(n==="__proto__")if(Cc.call(t,n)){if(OS)return OS(t,n).value}else return;return t[n]},LO=function e(){var t,n,i,l,s,a,f=arguments[0],d=1,h=arguments.length,g=!1;for(typeof f=="boolean"&&(g=f,f=arguments[1]||{},d=2),(f==null||typeof f!="object"&&typeof f!="function")&&(f={});da.length;let d;f&&a.push(l);try{d=e.apply(this,a)}catch(h){const g=h;if(f&&n)throw g;return l(g)}f||(d&&d.then&&typeof d.then=="function"?d.then(s,l):d instanceof Error?l(d):s(d))}function l(a,...f){n||(n=!0,t(a,...f))}function s(a){l(null,a)}}const Cr={basename:_O,dirname:OO,extname:zO,join:DO,sep:"/"};function _O(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');Au(e);let n=0,i=-1,l=e.length,s;if(t===void 0||t.length===0||t.length>e.length){for(;l--;)if(e.codePointAt(l)===47){if(s){n=l+1;break}}else i<0&&(s=!0,i=l+1);return i<0?"":e.slice(n,i)}if(t===e)return"";let a=-1,f=t.length-1;for(;l--;)if(e.codePointAt(l)===47){if(s){n=l+1;break}}else a<0&&(s=!0,a=l+1),f>-1&&(e.codePointAt(l)===t.codePointAt(f--)?f<0&&(i=l):(f=-1,i=a));return n===i?i=a:i<0&&(i=e.length),e.slice(n,i)}function OO(e){if(Au(e),e.length===0)return".";let t=-1,n=e.length,i;for(;--n;)if(e.codePointAt(n)===47){if(i){t=n;break}}else i||(i=!0);return t<0?e.codePointAt(0)===47?"/":".":t===1&&e.codePointAt(0)===47?"//":e.slice(0,t)}function zO(e){Au(e);let t=e.length,n=-1,i=0,l=-1,s=0,a;for(;t--;){const f=e.codePointAt(t);if(f===47){if(a){i=t+1;break}continue}n<0&&(a=!0,n=t+1),f===46?l<0?l=t:s!==1&&(s=1):l>-1&&(s=-1)}return l<0||n<0||s===0||s===1&&l===n-1&&l===i+1?"":e.slice(l,n)}function DO(...e){let t=-1,n;for(;++t0&&e.codePointAt(e.length-1)===47&&(n+="/"),t?"/"+n:n}function $O(e,t){let n="",i=0,l=-1,s=0,a=-1,f,d;for(;++a<=e.length;){if(a2){if(d=n.lastIndexOf("/"),d!==n.length-1){d<0?(n="",i=0):(n=n.slice(0,d),i=n.length-1-n.lastIndexOf("/")),l=a,s=0;continue}}else if(n.length>0){n="",i=0,l=a,s=0;continue}}t&&(n=n.length>0?n+"/..":"..",i=2)}else n.length>0?n+="/"+e.slice(l+1,a):n=e.slice(l+1,a),i=a-l-1;l=a,s=0}else f===46&&s>-1?s++:s=-1}return n}function Au(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const FO={cwd:jO};function jO(){return"/"}function jm(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function UO(e){if(typeof e=="string")e=new URL(e);else if(!jm(e)){const t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if(e.protocol!=="file:"){const t=new TypeError("The URL must be of scheme file");throw t.code="ERR_INVALID_URL_SCHEME",t}return BO(e)}function BO(e){if(e.hostname!==""){const i=new TypeError('File URL host must be "localhost" or empty on darwin');throw i.code="ERR_INVALID_FILE_URL_HOST",i}const t=e.pathname;let n=-1;for(;++n0){let[S,...C]=g;const I=i[v][1];Fm(I)&&Fm(S)&&(S=Sh(!0,I,S)),i[v]=[h,S,...C]}}}}const WO=new uy().freeze();function Ch(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function Ph(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function Ih(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function jS(e){if(!Fm(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function US(e,t,n){if(!n)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function sc(e){return QO(e)?e:new xE(e)}function QO(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function KO(e){return typeof e=="string"||GO(e)}function GO(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const YO="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",BS=[],VS={allowDangerousHtml:!0},XO=/^(https?|ircs?|mailto|xmpp)$/i,JO=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function Kf(e){const t=e.allowedElements,n=e.allowElement,i=e.children||"",l=e.className,s=e.components,a=e.disallowedElements,f=e.rehypePlugins||BS,d=e.remarkPlugins||BS,h=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...VS}:VS,g=e.skipHtml,y=e.unwrapDisallowed,v=e.urlTransform||ZO,S=WO().use(O_).use(d).use(AO,h).use(f),C=new xE;typeof i=="string"&&(C.value=i);for(const E of JO)Object.hasOwn(e,E.from)&&(""+E.from+(E.to?"use `"+E.to+"` instead":"remove it")+YO+E.id,void 0);const I=S.parse(C);let L=S.runSync(I,C);return l&&(L={type:"element",tagName:"div",properties:{className:l},children:L.type==="root"?L.children:[L]}),SE(L,x),dN(L,{Fragment:Bi,components:s,ignoreInvalidStyle:!0,jsx:j,jsxs:Ae,passKeys:!0,passNode:!0});function x(E,T,N){if(E.type==="raw"&&N&&typeof T=="number")return g?N.children.splice(T,1):N.children[T]={type:"text",value:E.value},T;if(E.type==="element"){let M;for(M in yh)if(Object.hasOwn(yh,M)&&Object.hasOwn(E.properties,M)){const R=E.properties[M],V=yh[M];(V===null||V.includes(E.tagName))&&(E.properties[M]=v(String(R||""),M,E))}}if(E.type==="element"){let M=t?!t.includes(E.tagName):a?a.includes(E.tagName):!1;if(!M&&n&&typeof T=="number"&&(M=!n(E,T,N)),M&&N&&typeof T=="number")return y&&E.children?N.children.splice(T,1,...E.children):N.children.splice(T,1),T}}}function ZO(e){const t=e.indexOf(":"),n=e.indexOf("?"),i=e.indexOf("#"),l=e.indexOf("/");return t<0||l>-1&&t>l||n>-1&&t>n||i>-1&&t>i||XO.test(e.slice(0,t))?e:""}const El=({href:e,children:t})=>j("a",{href:e,target:"_blank",rel:"noopener noreferrer",style:{color:"inherit"},children:t}),EE=({project:e})=>{const{name:t,url:n,description:i,whatIDid:l,techStacks:s,startedAt:a,endedAt:f}=e,{font:d}=Zn();return bf(),Ae(Ye,{flexDirection:"column",style:{fontSize:"0.75rem"},children:[j(El,{href:n,children:j(_e,{font:Ge.SemiBold,size:d(1),children:t})}),Ae(_e,{size:d(.75),children:[Rr(new Date(a))," ~"," ",f?Rr(new Date(f)):"Now"]}),j(Kf,{children:i}),Ae("ul",{style:{margin:"0px",paddingLeft:"20px"},children:[l.map(h=>j("li",{children:j(_e,{size:d(.75),children:h})},h)),s&&s.length>0&&j("li",{children:Ae(_e,{size:d(.75),children:["사용 기술: ",s.map(h=>h).join(", ")]})})]})]})},qO=({organization:e})=>{const{name:t,color:n,url:i,job:l,startedAt:s,endedAt:a,projects:f}=e,{font:d}=Zn();return Ae(F2,{children:[Ae(Ye,{flexDirection:"column",style:{borderLeft:`5px solid ${n||"gray"}`,paddingLeft:"10px"},children:[j(El,{href:i,children:j(_e,{font:Ge.Bold,size:d(1),children:t})}),j(_e,{size:d(.75),children:l}),Ae(_e,{size:d(.75),children:[Rr(new Date(s))," ~"," ",a?Rr(new Date(a)):"Now"]})]}),j(Ye,{flexDirection:"column",gap:"20px",children:f.filter(h=>h.isImportant).map(h=>j(EE,{project:h},h.name))})]})},ez=({})=>{const{t:e}=zn(),t=[...e("experience.experiences",{returnObjects:!0}),...e("current.organizations",{returnObjects:!0})].filter(n=>n.isImportant);return Ae(Bi,{children:[j(Iu,{children:"경력"}),j(Xe,{height:"10px"}),j(Ye,{flexDirection:"column",gap:"30px",children:t.map(n=>j(qO,{organization:n},n.name))})]})},tz=({publication:e})=>{const{name:t,date:n,url:i,description:l,publisher:s}=e,{font:a}=Zn();return Ae(Ye,{flexDirection:"column",style:{fontSize:"0.75rem"},children:[j(El,{href:i,children:j(_e,{font:Ge.SemiBold,size:a(1),children:t})}),Ae(_e,{size:a(.75),children:[s," - ",Rr(new Date(n))]}),j(Kf,{children:l})]})},nz=({})=>{const{t:e}=zn();return Ae(Bi,{children:[j(Iu,{children:"Publications"}),j(Xe,{height:"30px"}),j(Ye,{flexDirection:"column",gap:"20px",children:e("publication.publications",{returnObjects:!0}).map(t=>j(tz,{publication:t},t.name))})]})},rz=({})=>{const{t:e}=zn();return Ae(Bi,{children:[j(Iu,{children:"Side Projects"}),j(Xe,{height:"10px"}),j(Ye,{flexDirection:"column",gap:"20px",children:e("sideProject.sideProjects",{returnObjects:!0}).filter(t=>t.isImportant).map(t=>j(EE,{project:t},t.name))})]})},iz=e=>{switch(e){case 1:return Ge.Thin;case 2:return Ge.Light;case 3:return Ge.Medium;case 4:return Ge.Bold;case 5:return Ge.Black;default:return Ge.Regular}},oz=[{name:"React",level:5},{name:"TypeScript",level:4},{name:"Python",level:3},{name:"NestJS",level:2},{name:"FastAPI",level:2},{name:"Flutter",level:2},{name:"C++",level:2},{name:"Kotlin",level:1},{name:"Docker",level:1},{name:"Rust",level:1},{name:"Go",level:1}],lz=({})=>(zn(),Ae(Bi,{children:[j(Iu,{children:"보유기술"}),j(Xe,{height:"10px"}),j(Ff,{gridTemplateColumns:"1fr 1fr 1fr 1fr 1fr",gap:"0px",children:oz.map(e=>j(_e,{font:iz(e.level),children:e.name},e.name))})]})),sz=({})=>{const{t:e}=zn(),{font:t}=Zn();return Ae(Bi,{children:[j(_e,{as:"h1",font:Ge.Bold,size:t(2.5),children:e("title.name")}),j(_e,{font:Ge.Medium,size:t(.875),children:e("introduction")}),j(Xe,{height:"20px"}),j(Ye,{children:Ae(_e,{size:t(1),children:[j(El,{href:"mailto:dohyun682@gmail.com",children:"dohyun682@gmail.com"})," ","| 010-3351-0168 |"," ",j(El,{href:"https://github.com/dohyun-ko",children:"github.com/dohyun-ko"})," ",j("br",{}),"Detailed Resume:"," ",j(El,{href:"https://dohyun.is-a.dev/resume",children:"dohyun.is-a.dev"})]})})]})},uz=()=>j(Zr,{children:Ae(Or,{width:"92%",children:[j(sz,{}),j(Xe,{height:"30px"}),j(lz,{}),j(Xe,{height:"30px"}),j(I4,{}),j(Xe,{height:"30px"}),j(ez,{}),j(Xe,{height:"30px"}),j(nz,{}),j(Xe,{height:"30px"}),j(rz,{})]})}),CE=Ve(Ff)`
+`},l),s}function AO(e,t){return e&&"run"in e?async function(n,i){const l=NS(n,{file:i,...t});await e.run(l,i)}:function(n,i){return NS(n,{file:i,...t||e})}}function RS(e){if(e)throw e}var Cc=Object.prototype.hasOwnProperty,kE=Object.prototype.toString,_S=Object.defineProperty,OS=Object.getOwnPropertyDescriptor,zS=function(t){return typeof Array.isArray=="function"?Array.isArray(t):kE.call(t)==="[object Array]"},DS=function(t){if(!t||kE.call(t)!=="[object Object]")return!1;var n=Cc.call(t,"constructor"),i=t.constructor&&t.constructor.prototype&&Cc.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!n&&!i)return!1;var l;for(l in t);return typeof l>"u"||Cc.call(t,l)},MS=function(t,n){_S&&n.name==="__proto__"?_S(t,n.name,{enumerable:!0,configurable:!0,value:n.newValue,writable:!0}):t[n.name]=n.newValue},$S=function(t,n){if(n==="__proto__")if(Cc.call(t,n)){if(OS)return OS(t,n).value}else return;return t[n]},LO=function e(){var t,n,i,l,s,a,f=arguments[0],d=1,h=arguments.length,g=!1;for(typeof f=="boolean"&&(g=f,f=arguments[1]||{},d=2),(f==null||typeof f!="object"&&typeof f!="function")&&(f={});da.length;let d;f&&a.push(l);try{d=e.apply(this,a)}catch(h){const g=h;if(f&&n)throw g;return l(g)}f||(d&&d.then&&typeof d.then=="function"?d.then(s,l):d instanceof Error?l(d):s(d))}function l(a,...f){n||(n=!0,t(a,...f))}function s(a){l(null,a)}}const Cr={basename:_O,dirname:OO,extname:zO,join:DO,sep:"/"};function _O(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');Au(e);let n=0,i=-1,l=e.length,s;if(t===void 0||t.length===0||t.length>e.length){for(;l--;)if(e.codePointAt(l)===47){if(s){n=l+1;break}}else i<0&&(s=!0,i=l+1);return i<0?"":e.slice(n,i)}if(t===e)return"";let a=-1,f=t.length-1;for(;l--;)if(e.codePointAt(l)===47){if(s){n=l+1;break}}else a<0&&(s=!0,a=l+1),f>-1&&(e.codePointAt(l)===t.codePointAt(f--)?f<0&&(i=l):(f=-1,i=a));return n===i?i=a:i<0&&(i=e.length),e.slice(n,i)}function OO(e){if(Au(e),e.length===0)return".";let t=-1,n=e.length,i;for(;--n;)if(e.codePointAt(n)===47){if(i){t=n;break}}else i||(i=!0);return t<0?e.codePointAt(0)===47?"/":".":t===1&&e.codePointAt(0)===47?"//":e.slice(0,t)}function zO(e){Au(e);let t=e.length,n=-1,i=0,l=-1,s=0,a;for(;t--;){const f=e.codePointAt(t);if(f===47){if(a){i=t+1;break}continue}n<0&&(a=!0,n=t+1),f===46?l<0?l=t:s!==1&&(s=1):l>-1&&(s=-1)}return l<0||n<0||s===0||s===1&&l===n-1&&l===i+1?"":e.slice(l,n)}function DO(...e){let t=-1,n;for(;++t0&&e.codePointAt(e.length-1)===47&&(n+="/"),t?"/"+n:n}function $O(e,t){let n="",i=0,l=-1,s=0,a=-1,f,d;for(;++a<=e.length;){if(a2){if(d=n.lastIndexOf("/"),d!==n.length-1){d<0?(n="",i=0):(n=n.slice(0,d),i=n.length-1-n.lastIndexOf("/")),l=a,s=0;continue}}else if(n.length>0){n="",i=0,l=a,s=0;continue}}t&&(n=n.length>0?n+"/..":"..",i=2)}else n.length>0?n+="/"+e.slice(l+1,a):n=e.slice(l+1,a),i=a-l-1;l=a,s=0}else f===46&&s>-1?s++:s=-1}return n}function Au(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const FO={cwd:jO};function jO(){return"/"}function jm(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function UO(e){if(typeof e=="string")e=new URL(e);else if(!jm(e)){const t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if(e.protocol!=="file:"){const t=new TypeError("The URL must be of scheme file");throw t.code="ERR_INVALID_URL_SCHEME",t}return BO(e)}function BO(e){if(e.hostname!==""){const i=new TypeError('File URL host must be "localhost" or empty on darwin');throw i.code="ERR_INVALID_FILE_URL_HOST",i}const t=e.pathname;let n=-1;for(;++n0){let[S,...C]=g;const I=i[v][1];Fm(I)&&Fm(S)&&(S=Sh(!0,I,S)),i[v]=[h,S,...C]}}}}const WO=new uy().freeze();function Ch(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function Ph(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function Ih(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function jS(e){if(!Fm(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function US(e,t,n){if(!n)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function sc(e){return QO(e)?e:new xE(e)}function QO(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function KO(e){return typeof e=="string"||GO(e)}function GO(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const YO="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",BS=[],VS={allowDangerousHtml:!0},XO=/^(https?|ircs?|mailto|xmpp)$/i,JO=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function Kf(e){const t=e.allowedElements,n=e.allowElement,i=e.children||"",l=e.className,s=e.components,a=e.disallowedElements,f=e.rehypePlugins||BS,d=e.remarkPlugins||BS,h=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...VS}:VS,g=e.skipHtml,y=e.unwrapDisallowed,v=e.urlTransform||ZO,S=WO().use(O_).use(d).use(AO,h).use(f),C=new xE;typeof i=="string"&&(C.value=i);for(const E of JO)Object.hasOwn(e,E.from)&&(""+E.from+(E.to?"use `"+E.to+"` instead":"remove it")+YO+E.id,void 0);const I=S.parse(C);let L=S.runSync(I,C);return l&&(L={type:"element",tagName:"div",properties:{className:l},children:L.type==="root"?L.children:[L]}),SE(L,x),dN(L,{Fragment:Bi,components:s,ignoreInvalidStyle:!0,jsx:j,jsxs:Ae,passKeys:!0,passNode:!0});function x(E,T,N){if(E.type==="raw"&&N&&typeof T=="number")return g?N.children.splice(T,1):N.children[T]={type:"text",value:E.value},T;if(E.type==="element"){let M;for(M in yh)if(Object.hasOwn(yh,M)&&Object.hasOwn(E.properties,M)){const R=E.properties[M],V=yh[M];(V===null||V.includes(E.tagName))&&(E.properties[M]=v(String(R||""),M,E))}}if(E.type==="element"){let M=t?!t.includes(E.tagName):a?a.includes(E.tagName):!1;if(!M&&n&&typeof T=="number"&&(M=!n(E,T,N)),M&&N&&typeof T=="number")return y&&E.children?N.children.splice(T,1,...E.children):N.children.splice(T,1),T}}}function ZO(e){const t=e.indexOf(":"),n=e.indexOf("?"),i=e.indexOf("#"),l=e.indexOf("/");return t<0||l>-1&&t>l||n>-1&&t>n||i>-1&&t>i||XO.test(e.slice(0,t))?e:""}const El=({href:e,children:t})=>j("a",{href:e,target:"_blank",rel:"noopener noreferrer",style:{color:"inherit"},children:t}),EE=({project:e})=>{const{name:t,url:n,description:i,whatIDid:l,techStacks:s,startedAt:a,endedAt:f}=e,{font:d}=Zn();return bf(),Ae(Ye,{flexDirection:"column",style:{fontSize:"0.75rem"},children:[j(El,{href:n,children:j(_e,{font:Ge.SemiBold,size:d(1),children:t})}),Ae(_e,{size:d(.75),children:[Rr(new Date(a))," –"," ",f?Rr(new Date(f)):"Now"]}),j(Kf,{children:i}),Ae("ul",{style:{margin:"0px",paddingLeft:"20px"},children:[l.map(h=>j("li",{children:j(_e,{size:d(.75),children:h})},h)),s&&s.length>0&&j("li",{children:Ae(_e,{size:d(.75),children:["사용 기술: ",s.map(h=>h).join(", ")]})})]})]})},qO=({organization:e})=>{const{name:t,color:n,url:i,job:l,startedAt:s,endedAt:a,projects:f}=e,{font:d}=Zn();return Ae(F2,{children:[Ae(Ye,{flexDirection:"column",style:{borderLeft:`5px solid ${n||"gray"}`,paddingLeft:"10px"},children:[j(El,{href:i,children:j(_e,{font:Ge.Bold,size:d(1),children:t})}),j(_e,{size:d(.75),children:l}),Ae(_e,{size:d(.75),children:[Rr(new Date(s))," –"," ",a?Rr(new Date(a)):"Now"]})]}),j(Ye,{flexDirection:"column",gap:"20px",children:f.filter(h=>h.isImportant).map(h=>j(EE,{project:h},h.name))})]})},ez=({})=>{const{t:e}=zn(),t=[...e("experience.experiences",{returnObjects:!0}),...e("current.organizations",{returnObjects:!0})].filter(n=>n.isImportant);return Ae(Bi,{children:[j(Iu,{children:"경력"}),j(Xe,{height:"10px"}),j(Ye,{flexDirection:"column",gap:"30px",children:t.map(n=>j(qO,{organization:n},n.name))})]})},tz=({publication:e})=>{const{name:t,date:n,url:i,description:l,publisher:s}=e,{font:a}=Zn();return Ae(Ye,{flexDirection:"column",style:{fontSize:"0.75rem"},children:[j(El,{href:i,children:j(_e,{font:Ge.SemiBold,size:a(1),children:t})}),Ae(_e,{size:a(.75),children:[s," - ",Rr(new Date(n))]}),j(Kf,{children:l})]})},nz=({})=>{const{t:e}=zn();return Ae(Bi,{children:[j(Iu,{children:"Publications"}),j(Xe,{height:"30px"}),j(Ye,{flexDirection:"column",gap:"20px",children:e("publication.publications",{returnObjects:!0}).map(t=>j(tz,{publication:t},t.name))})]})},rz=({})=>{const{t:e}=zn();return Ae(Bi,{children:[j(Iu,{children:"Side Projects"}),j(Xe,{height:"10px"}),j(Ye,{flexDirection:"column",gap:"20px",children:e("sideProject.sideProjects",{returnObjects:!0}).filter(t=>t.isImportant).map(t=>j(EE,{project:t},t.name))})]})},iz=e=>{switch(e){case 1:return Ge.Thin;case 2:return Ge.Light;case 3:return Ge.Medium;case 4:return Ge.Bold;case 5:return Ge.Black;default:return Ge.Regular}},oz=[{name:"React",level:5},{name:"TypeScript",level:4},{name:"Python",level:3},{name:"NestJS",level:2},{name:"FastAPI",level:2},{name:"Flutter",level:2},{name:"C++",level:2},{name:"Kotlin",level:1},{name:"Docker",level:1},{name:"Rust",level:1},{name:"Go",level:1}],lz=({})=>(zn(),Ae(Bi,{children:[j(Iu,{children:"보유기술"}),j(Xe,{height:"10px"}),j(Ff,{gridTemplateColumns:"1fr 1fr 1fr 1fr 1fr",gap:"0px",children:oz.map(e=>j(_e,{font:iz(e.level),children:e.name},e.name))})]})),sz=({})=>{const{t:e}=zn(),{font:t}=Zn();return Ae(Bi,{children:[j(_e,{as:"h1",font:Ge.Bold,size:t(2.5),children:e("title.name")}),j(_e,{font:Ge.Medium,size:t(.875),children:e("introduction")}),j(Xe,{height:"20px"}),j(Ye,{children:Ae(_e,{size:t(1),children:[j(El,{href:"mailto:dohyun682@gmail.com",children:"dohyun682@gmail.com"})," ","| 010-3351-0168 |"," ",j(El,{href:"https://github.com/dohyun-ko",children:"github.com/dohyun-ko"})," ",j("br",{}),"Detailed Resume:"," ",j(El,{href:"https://dohyun.is-a.dev/resume",children:"dohyun.is-a.dev"})]})})]})},uz=()=>j(Zr,{children:Ae(Or,{width:"92%",children:[j(sz,{}),j(Xe,{height:"30px"}),j(lz,{}),j(Xe,{height:"30px"}),j(I4,{}),j(Xe,{height:"30px"}),j(ez,{}),j(Xe,{height:"30px"}),j(nz,{}),j(Xe,{height:"30px"}),j(rz,{})]})}),CE=Ve(Ff)`
gap: 40px;
grid-template-columns: 280px 1fr;
@media screen and (max-width: ${Gg}px) {
grid-template-columns: 1fr;
}
-`,ho=({href:e,children:t})=>j("a",{href:e,target:"_blank",rel:"noopener noreferrer",style:{color:"inherit"},children:t}),PE=({project:e})=>{const{name:t,url:n,description:i,whatIDid:l,techStacks:s,startedAt:a,endedAt:f}=e,{font:d}=Zn();return bf(),Ae(Ye,{flexDirection:"column",children:[j(ho,{href:n,children:j(_e,{font:Ge.SemiBold,size:d(1.75),children:t})}),Ae(_e,{children:[Rr(new Date(a))," ~"," ",f?Rr(new Date(f)):"Now"]}),j(Kf,{children:i}),Ae("ul",{style:{margin:"0px",paddingLeft:"20px"},children:[l.map(h=>j("li",{children:j(_e,{size:d(1),children:h})},h)),s&&s.length>0&&j("li",{children:Ae(_e,{size:d(1),children:["사용 기술: ",s.map(h=>h).join(", ")]})})]})]})},IE=({organization:e})=>{const{name:t,color:n,url:i,job:l,startedAt:s,endedAt:a}=e,{font:f}=Zn();return Ae(CE,{children:[Ae(Ye,{flexDirection:"column",style:{borderLeft:`5px solid ${n||"gray"}`,paddingLeft:"10px"},children:[j(ho,{href:i,children:j(_e,{font:Ge.Bold,size:f(2),children:t})}),j(_e,{children:l}),Ae(_e,{children:[Rr(new Date(s))," ~"," ",a?Rr(new Date(a)):"Now"]})]}),j(Ye,{flexDirection:"column",gap:"20px",children:e.projects.map(d=>j(PE,{project:d},d.name))})]})},Ul=({children:e})=>{const{font:t}=Zn();return j(_e,{as:"h1",font:Ge.Bold,size:t(2.5),children:e})},az=({})=>{const{t:e}=zn();return j(Zr,{id:"current-section",children:Ae(Or,{children:[j(Ul,{children:"Currently working in"}),j(Xe,{height:"30px"}),j(Ye,{flexDirection:"column",gap:"35px",children:e("current",{returnObjects:!0}).organizations.map(t=>j(IE,{organization:t},t.name))})]})})},cz=({})=>{const{t:e}=zn(),{font:t}=Zn();return j(Zr,{id:"education-section",children:Ae(Or,{children:[j(Ul,{children:"Educations"}),j(Xe,{height:"30px"}),Ae(CE,{children:[Ae(Ye,{gap:"20px",style:{borderLeft:"5px solid #EB0D00",paddingLeft:"10px"},children:[j(Ye,{flexDirection:"column",gap:"30px",children:Ae(Ye,{flexDirection:"column",children:[j(_e,{font:Ge.Bold,size:t(2),children:"GIST"}),j(_e,{size:"1rem",children:e("education.major")}),j(_e,{size:"1rem",children:"2022. 2 ~ "})]})}),j(_e,{size:"1rem",children:"TGPA 4.04 / 4.5"})]}),Ae(Ye,{flexDirection:"column",width:"100%",gap:"10px",children:[j(_e,{size:"1.125rem",weight:"bold",children:e("education.attendedLecture")}),j(Ye,{gap:"0 10px",wrap:"wrap",children:j(_e,{children:e("education.attendedLectures",{returnObjects:!0}).map((n,i,l)=>j(Fe.Fragment,{children:i{const{t:e}=zn();return j(Zr,{id:"experience-section",children:Ae(Or,{children:[j(Ul,{children:"Experiences"}),j(Xe,{height:"30px"}),j(Ye,{flexDirection:"column",gap:"30px",children:e("experience.experiences",{returnObjects:!0}).map(t=>j(IE,{organization:t},t.name))})]})})},dz=({})=>j(Zr,{id:"meta-section",children:j(Or,{children:j(Ye,{children:j(_e,{font:Ge.Thin,size:"1.25rem",children:"Last update: 2024-08-30"})})})}),pz=({publication:e})=>{const{name:t,date:n,url:i,description:l,publisher:s}=e,{font:a}=Zn();return bf(),Ae(Ye,{flexDirection:"column",children:[j(ho,{href:i,children:j(_e,{font:Ge.SemiBold,size:a(1.5),children:t})}),Ae(_e,{children:[s," - ",Rr(new Date(n))]}),j(Kf,{children:l})]})},hz=({})=>{const{t:e}=zn();return j(Zr,{id:"side-project-section",children:Ae(Or,{children:[j(Ul,{children:"Publications"}),j(Xe,{height:"30px"}),j(Ye,{flexDirection:"column",gap:"30px",children:e("publication.publications",{returnObjects:!0}).map(t=>j(pz,{publication:t},t.name))})]})})},mz=({})=>{const{t:e}=zn();return j(Zr,{id:"side-project-section",children:Ae(Or,{children:[j(Ul,{children:"Side Projects"}),j(Xe,{height:"30px"}),j(Ye,{flexDirection:"column",gap:"30px",children:e("sideProject.sideProjects",{returnObjects:!0}).map(t=>j(PE,{project:t},t.name))})]})})},gz=e=>{switch(e){case 1:return Ge.Thin;case 2:return Ge.Light;case 3:return Ge.Medium;case 4:return Ge.Bold;case 5:return Ge.Black;default:return Ge.Regular}},yz=({})=>{const{t:e}=zn();return j(Zr,{id:"skill-section",children:Ae(Or,{children:[j(Ul,{children:"Skills"}),j(Xe,{height:"30px"}),j(Ff,{gridTemplateColumns:"1fr 1fr 1fr",gap:"10px",children:e("skill.skills",{returnObjects:!0}).map(t=>j(_e,{font:gz(t.level),children:t.name},t.name))})]})})},vz=({})=>{const{t:e}=zn(),{font:t}=Zn();return j(Zr,{id:"title-section",children:Ae(Or,{children:[Ae(_e,{as:"h1",font:Ge.Bold,size:t(3.5),children:[e("title.developer"),j("br",{}),e("title.name")]}),j(_e,{font:Ge.Medium,size:t(1.5),children:e("introduction")}),j(Xe,{height:"30px"}),j(Ye,{children:Ae(_e,{size:t(1.5),children:[j(ho,{href:"mailto:dohyun682@gmail.com",children:"dohyun682@gmail.com"})," ","| ",j(ho,{href:"https://github.com/dohyun-ko",children:"GitHub"})," |"," ",j(ho,{href:"https://www.instagram.com/dohyun682",children:"Instagram"})," ","|"," ",j(ho,{href:"https://www.linkedin.com/in/dohyun-ko-92b885212",children:"LinkedIn"})]})})]})})},wz=({})=>Ae(Bi,{children:[j(Xe,{height:"50px"}),j(dz,{}),j(Xe,{height:"50px"}),j(vz,{}),j(Xe,{height:"50px"}),j(yz,{}),j(Xe,{height:"50px"}),j(cz,{}),j(Xe,{height:"50px"}),j(hz,{}),j(Xe,{height:"50px"}),j(az,{}),j(Xe,{height:"50px"}),j(fz,{}),j(Xe,{height:"50px"}),j(mz,{}),j(Xe,{height:"150px"})]}),TE=ee.createContext({windowWidth:0});function Sz(){const[e,t]=ee.useState(0);return ee.useLayoutEffect(()=>{const n=()=>{t(window.innerWidth)};return window.addEventListener("resize",n),n(),()=>window.removeEventListener("resize",n)},[]),j(TE.Provider,{value:{windowWidth:e},children:j(m4,{children:j(p4,{children:Ae(Us,{element:j(P4,{}),children:[j(Us,{path:"*",element:j(c4,{to:"/resume",replace:!0})}),j(Us,{path:"/resume",element:j(wz,{})}),j(Us,{path:"/printable",element:j(uz,{})})]})})})})}Nh.createRoot(document.getElementById("root")).render(j(Fe.StrictMode,{children:j(Sz,{})}));
+`,ho=({href:e,children:t})=>j("a",{href:e,target:"_blank",rel:"noopener noreferrer",style:{color:"inherit"},children:t}),PE=({project:e})=>{const{name:t,url:n,description:i,whatIDid:l,techStacks:s,startedAt:a,endedAt:f}=e,{font:d}=Zn();return bf(),Ae(Ye,{flexDirection:"column",children:[j(ho,{href:n,children:j(_e,{font:Ge.SemiBold,size:d(1.75),children:t})}),Ae(_e,{children:[Rr(new Date(a))," –"," ",f?Rr(new Date(f)):"Now"]}),j(Kf,{children:i}),Ae("ul",{style:{margin:"0px",paddingLeft:"20px"},children:[l.map(h=>j("li",{children:j(_e,{size:d(1),children:h})},h)),s&&s.length>0&&j("li",{children:Ae(_e,{size:d(1),children:["사용 기술: ",s.map(h=>h).join(", ")]})})]})]})},IE=({organization:e})=>{const{name:t,color:n,url:i,job:l,startedAt:s,endedAt:a}=e,{font:f}=Zn();return Ae(CE,{children:[Ae(Ye,{flexDirection:"column",style:{borderLeft:`5px solid ${n||"gray"}`,paddingLeft:"10px"},children:[j(ho,{href:i,children:j(_e,{font:Ge.Bold,size:f(2),children:t})}),j(_e,{children:l}),Ae(_e,{children:[Rr(new Date(s))," –"," ",a?Rr(new Date(a)):"Now"]})]}),j(Ye,{flexDirection:"column",gap:"20px",children:e.projects.map(d=>j(PE,{project:d},d.name))})]})},Ul=({children:e})=>{const{font:t}=Zn();return j(_e,{as:"h1",font:Ge.Bold,size:t(2.5),children:e})},az=({})=>{const{t:e}=zn();return j(Zr,{id:"current-section",children:Ae(Or,{children:[j(Ul,{children:"Currently working in"}),j(Xe,{height:"30px"}),j(Ye,{flexDirection:"column",gap:"35px",children:e("current",{returnObjects:!0}).organizations.map(t=>j(IE,{organization:t},t.name))})]})})},cz=({})=>{const{t:e}=zn(),{font:t}=Zn();return j(Zr,{id:"education-section",children:Ae(Or,{children:[j(Ul,{children:"Educations"}),j(Xe,{height:"30px"}),Ae(CE,{children:[Ae(Ye,{gap:"20px",style:{borderLeft:"5px solid #EB0D00",paddingLeft:"10px"},children:[j(Ye,{flexDirection:"column",gap:"30px",children:Ae(Ye,{flexDirection:"column",children:[j(_e,{font:Ge.Bold,size:t(2),children:"GIST"}),j(_e,{size:"1rem",children:e("education.major")}),j(_e,{size:"1rem",children:"2022. 2 – "})]})}),j(_e,{size:"1rem",children:"TGPA 4.04 / 4.5"})]}),Ae(Ye,{flexDirection:"column",width:"100%",gap:"10px",children:[j(_e,{size:"1.125rem",weight:"bold",children:e("education.attendedLecture")}),j(Ye,{gap:"0 10px",wrap:"wrap",children:j(_e,{children:e("education.attendedLectures",{returnObjects:!0}).map((n,i,l)=>j(Fe.Fragment,{children:i{const{t:e}=zn();return j(Zr,{id:"experience-section",children:Ae(Or,{children:[j(Ul,{children:"Experiences"}),j(Xe,{height:"30px"}),j(Ye,{flexDirection:"column",gap:"30px",children:e("experience.experiences",{returnObjects:!0}).map(t=>j(IE,{organization:t},t.name))})]})})},dz=({})=>j(Zr,{id:"meta-section",children:j(Or,{children:j(Ye,{children:j(_e,{font:Ge.Thin,size:"1.25rem",children:"Last update: 2024-08-30"})})})}),pz=({publication:e})=>{const{name:t,date:n,url:i,description:l,publisher:s}=e,{font:a}=Zn();return bf(),Ae(Ye,{flexDirection:"column",children:[j(ho,{href:i,children:j(_e,{font:Ge.SemiBold,size:a(1.5),children:t})}),Ae(_e,{children:[s," - ",Rr(new Date(n))]}),j(Kf,{children:l})]})},hz=({})=>{const{t:e}=zn();return j(Zr,{id:"side-project-section",children:Ae(Or,{children:[j(Ul,{children:"Publications"}),j(Xe,{height:"30px"}),j(Ye,{flexDirection:"column",gap:"30px",children:e("publication.publications",{returnObjects:!0}).map(t=>j(pz,{publication:t},t.name))})]})})},mz=({})=>{const{t:e}=zn();return j(Zr,{id:"side-project-section",children:Ae(Or,{children:[j(Ul,{children:"Side Projects"}),j(Xe,{height:"30px"}),j(Ye,{flexDirection:"column",gap:"30px",children:e("sideProject.sideProjects",{returnObjects:!0}).map(t=>j(PE,{project:t},t.name))})]})})},gz=e=>{switch(e){case 1:return Ge.Thin;case 2:return Ge.Light;case 3:return Ge.Medium;case 4:return Ge.Bold;case 5:return Ge.Black;default:return Ge.Regular}},yz=({})=>{const{t:e}=zn();return j(Zr,{id:"skill-section",children:Ae(Or,{children:[j(Ul,{children:"Skills"}),j(Xe,{height:"30px"}),j(Ff,{gridTemplateColumns:"1fr 1fr 1fr",gap:"10px",children:e("skill.skills",{returnObjects:!0}).map(t=>j(_e,{font:gz(t.level),children:t.name},t.name))})]})})},vz=({})=>{const{t:e}=zn(),{font:t}=Zn();return j(Zr,{id:"title-section",children:Ae(Or,{children:[Ae(_e,{as:"h1",font:Ge.Bold,size:t(3.5),children:[e("title.developer"),j("br",{}),e("title.name")]}),j(_e,{font:Ge.Medium,size:t(1.5),children:e("introduction")}),j(Xe,{height:"30px"}),j(Ye,{children:Ae(_e,{size:t(1.5),children:[j(ho,{href:"mailto:dohyun682@gmail.com",children:"dohyun682@gmail.com"})," ","| ",j(ho,{href:"https://github.com/dohyun-ko",children:"GitHub"})," |"," ",j(ho,{href:"https://www.instagram.com/dohyun682",children:"Instagram"})," ","|"," ",j(ho,{href:"https://www.linkedin.com/in/dohyun-ko-92b885212",children:"LinkedIn"})]})})]})})},wz=({})=>Ae(Bi,{children:[j(Xe,{height:"50px"}),j(dz,{}),j(Xe,{height:"50px"}),j(vz,{}),j(Xe,{height:"50px"}),j(yz,{}),j(Xe,{height:"50px"}),j(cz,{}),j(Xe,{height:"50px"}),j(hz,{}),j(Xe,{height:"50px"}),j(az,{}),j(Xe,{height:"50px"}),j(fz,{}),j(Xe,{height:"50px"}),j(mz,{}),j(Xe,{height:"150px"})]}),TE=ee.createContext({windowWidth:0});function Sz(){const[e,t]=ee.useState(0);return ee.useLayoutEffect(()=>{const n=()=>{t(window.innerWidth)};return window.addEventListener("resize",n),n(),()=>window.removeEventListener("resize",n)},[]),j(TE.Provider,{value:{windowWidth:e},children:j(m4,{children:j(p4,{children:Ae(Us,{element:j(P4,{}),children:[j(Us,{path:"*",element:j(c4,{to:"/resume",replace:!0})}),j(Us,{path:"/resume",element:j(wz,{})}),j(Us,{path:"/printable",element:j(uz,{})})]})})})})}Nh.createRoot(document.getElementById("root")).render(j(Fe.StrictMode,{children:j(Sz,{})}));
diff --git a/build/index.html b/build/index.html
index 14aba72..37e401a 100644
--- a/build/index.html
+++ b/build/index.html
@@ -94,7 +94,7 @@
region: "eu",
});
-
+
diff --git a/src/locales/en-US/experience.ts b/src/locales/en-US/experience.ts
index 9d68f2e..f5e7d25 100644
--- a/src/locales/en-US/experience.ts
+++ b/src/locales/en-US/experience.ts
@@ -39,7 +39,7 @@ const experience = {
endedAt: "2024-02",
description:
"Studied the basics of reinforcement learning through Coursera's Reinforcement Learning Specialization.",
- whatIDid: ["Studied basics of reinforcement learning (~Q-Learning)"],
+ whatIDid: ["Studied basics of reinforcement learning (–Q-Learning)"],
},
],
},
diff --git a/src/pages/home/printable/components/OrganizationCard.tsx b/src/pages/home/printable/components/OrganizationCard.tsx
index e6bcb2e..77c60ad 100644
--- a/src/pages/home/printable/components/OrganizationCard.tsx
+++ b/src/pages/home/printable/components/OrganizationCard.tsx
@@ -33,7 +33,7 @@ const OrganizationCard = ({ organization }: OrganizationCardProps) => {
{job}
- {formatYearMonth(new Date(startedAt))} ~{" "}
+ {formatYearMonth(new Date(startedAt))} –{" "}
{endedAt ? formatYearMonth(new Date(endedAt)) : "Now"}
diff --git a/src/pages/home/printable/components/ProjectCard.tsx b/src/pages/home/printable/components/ProjectCard.tsx
index cbe1b65..6fc5c33 100644
--- a/src/pages/home/printable/components/ProjectCard.tsx
+++ b/src/pages/home/printable/components/ProjectCard.tsx
@@ -31,7 +31,7 @@ const ProjectCard = ({ project }: ProjectCardProps) => {
- {formatYearMonth(new Date(startedAt))} ~{" "}
+ {formatYearMonth(new Date(startedAt))} –{" "}
{endedAt ? formatYearMonth(new Date(endedAt)) : "Now"}
diff --git a/src/pages/home/printable/sections/EducationSection.tsx b/src/pages/home/printable/sections/EducationSection.tsx
index 60f5d33..46b933d 100644
--- a/src/pages/home/printable/sections/EducationSection.tsx
+++ b/src/pages/home/printable/sections/EducationSection.tsx
@@ -36,7 +36,7 @@ const EducationSection = ({}: EducationSectionProps) => {
TGPA 4.04 / 4.5
- 2022. 2 ~
+ 2022. 2 –
{/*
diff --git a/src/pages/home/resume/components/OrganizationCard.tsx b/src/pages/home/resume/components/OrganizationCard.tsx
index cb70bae..4923d8d 100644
--- a/src/pages/home/resume/components/OrganizationCard.tsx
+++ b/src/pages/home/resume/components/OrganizationCard.tsx
@@ -33,7 +33,7 @@ const OrganizationCard = ({ organization }: OrganizationCardProps) => {
{job}
- {formatYearMonth(new Date(startedAt))} ~{" "}
+ {formatYearMonth(new Date(startedAt))} –{" "}
{endedAt ? formatYearMonth(new Date(endedAt)) : "Now"}
diff --git a/src/pages/home/resume/components/ProjectCard.tsx b/src/pages/home/resume/components/ProjectCard.tsx
index 15855bb..df5d2f7 100644
--- a/src/pages/home/resume/components/ProjectCard.tsx
+++ b/src/pages/home/resume/components/ProjectCard.tsx
@@ -26,7 +26,7 @@ const ProjectCard = ({ project }: ProjectCardProps) => {
- {formatYearMonth(new Date(startedAt))} ~{" "}
+ {formatYearMonth(new Date(startedAt))} –{" "}
{endedAt ? formatYearMonth(new Date(endedAt)) : "Now"}
diff --git a/src/pages/home/resume/sections/EducationSection.tsx b/src/pages/home/resume/sections/EducationSection.tsx
index 66db9e4..f82eb3a 100644
--- a/src/pages/home/resume/sections/EducationSection.tsx
+++ b/src/pages/home/resume/sections/EducationSection.tsx
@@ -33,7 +33,7 @@ const EducationSection = ({}: EducationSectionProps) => {
GIST
{t("education.major")}
- 2022. 2 ~
+ 2022. 2 –