{"version":3,"sources":["/home/devil/uniai/dist/index.mjs","../interface/Enum.ts","../src/providers/OpenAI.ts","../src/util.ts","../src/providers/GLM.ts","../src/providers/Other.ts","../src/providers/Google.ts","../src/providers/IFlyTek.ts","../src/providers/Baidu.ts","../src/providers/MoonShot.ts","../src/providers/MidJourney.ts","../src/providers/Stability.ts","../src/providers/AliYun.ts","../src/providers/DeepSeek.ts","../src/providers/IX.ts","../src/UniAI.ts","../src/index.ts"],"names":["ChatModelProvider","EmbedModelProvider","ImagineModelProvider","ModelProvider","OpenAIEmbedModel","OtherEmbedModel","GLMEmbedModel","GoogleEmbedModel","AliEmbedModel","EmbedModel","OpenAIChatModel","DeepSeekChatModel","GoogleChatModel","GLMChatModel","BaiduChatModel","IFlyTekChatModel","MoonShotChatModel","AliChatModel","XAIChatModel","ChatModel","MidJourneyImagineModel","OpenAIImagineModel","StabilityAIImagineModel","IFlyTekImagineModel","ImagineModel","ModelModel","MJTaskType","DETaskType","SDTaskType","SPKTaskType","ImgTaskType","ChatRoleEnum","GPTChatRoleEnum","DSChatRoleEnum","SPKChatRoleEnum","GLMChatRoleEnum","GEMChatRoleEnum","BDUChatRoleEnum","PassThrough","Readable","EventSourceStream","decodeStream","writeFileSync","axios","LocalStorage","path","isBase64","localStorage","Infinity","util_default","get","url","params","config","data","post","body","json","str","JSON","parse","e","getRandomKey","arr","Math","floor","random","length","getRandomId","result","rand","toString","getGCD","a","b","getAspect","width","height","gcd","aspectRatioWidth","aspectRatioHeight","setItem","key","value","stringify","getItem","writeFile","filename","filepath","res","join","startsWith","responseType","Buffer","Error","from","allowMime","STORAGE_KEY","API","VER","OpenAI","api","embedding","input","model","Array","isArray","headers","Authorization","map","v","object","promptTokens","usage","prompt_tokens","totalTokens","total_tokens","chat","messages","stream","top","temperature","maxLength","tools","toolChoice","output","parser","includes","role","content","formatMessage","top_p","max_completion_tokens","tool_choice","completionTokens","on","obj","choices","delta","tool_calls","completion_tokens","write","destroy","end","pipe","message","imagine","prompt","n","id","imgs","i","time","task","tasks","size","response_format","push","b64_json","Date","now","type","info","progress","fail","created","taskId","filter","img","tool","text","image_url","tool_call_id","GLM","proxyAPI","dimensions","max_tokens","Other","BGE_M3","GPT3","JSONParser","extname","readFileSync","SAFE_SET","category","threshold","Google","request","parts","Promise","all","values","block","candidate","contents","system_instruction","generationConfig","topP","maxOutputTokens","safetySettings","candidates","promptFeedback","blockReason","finishReason","base64","toBase64","trim","inline_data","mime_type","mime","match","find","f","toLowerCase","replace","createHmac","hostname","CHAT_API","IMAGINE_API","IFlyTek","pass","secret","appid","getImagineURL","header","app_id","payload","parameter","domain","code","host","date","toUTCString","algorithm","signatureOrigin","signatureSha","update","digest","signature","authorizationOrigin","authorization","Baidu","token","getAccessToken","system","max_output_tokens","error_code","error_msg","cache","expires_in","access_token","grant_type","client_id","client_secret","error","error_description","USER","ASSISTANT","SYSTEM","MoonShot","MidJourney","proxy","imgProxy","nPrompt","aspect","description","pro","imageUrl","URL","protocol","port","action","failReason","parseInt","startTime","change","index","Stability","negativePrompt","samples","prompts","weight","text_prompts","Accept","artifacts","AliYun","DeepSeek","XAI","DEFAULT_MESSAGE","UniAI","openai","deepseek","glm","google","fly","apiPassword","appId","apiKey","apiSecret","baidu","secretKey","moon","ali","xai","other","mj","stability","StabilityAI","chatModels","Object","entries","k","provider","models","imgModels","embedModels","option","num","index_default","default"],"mappings":"AAAA,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACIb,IAAKA,oBAAL,aAAA,GAAA,SAAKA;IACRA,kBAAAA,CAAA,SAAA,GAAS;IACTA,kBAAAA,CAAA,WAAA,GAAW;IACXA,kBAAAA,CAAA,UAAA,GAAU;IACVA,kBAAAA,CAAA,QAAA,GAAQ;IACRA,kBAAAA,CAAA,SAAA,GAAS;IACTA,kBAAAA,CAAA,MAAA,GAAM;IACNA,kBAAAA,CAAA,WAAA,GAAW;IACXA,kBAAAA,CAAA,SAAA,GAAS;IACTA,kBAAAA,CAAA,MAAA,GAAM;IACNA,kBAAAA,CAAA,QAAA,GAAQ;IAVA,OAAAA;AAAA,EAAAA,qBAAA,CAAA;AAaL,IAAKC,qBAAL,aAAA,GAAA,SAAKA;IACRA,mBAAAA,CAAA,SAAA,GAAS;IACTA,mBAAAA,CAAA,SAAA,GAAS;IACTA,mBAAAA,CAAA,MAAA,GAAM;IACNA,mBAAAA,CAAA,SAAA,GAAS;IACTA,mBAAAA,CAAA,QAAA,GAAQ;IALA,OAAAA;AAAA,EAAAA,sBAAA,CAAA;AAQL,IAAKC,uBAAL,aAAA,GAAA,SAAKA;IACRA,qBAAAA,CAAA,SAAA,GAAS;IACTA,qBAAAA,CAAA,aAAA,GAAa;IACbA,qBAAAA,CAAA,cAAA,GAAc;IACdA,qBAAAA,CAAA,UAAA,GAAU;IAJF,OAAAA;AAAA,EAAAA,wBAAA,CAAA;AAQL,IAAMC,gBAAgB,mBAAKH,mBAAsBC,oBAAuBC;AAGxE,IAAKE,mBAAL,aAAA,GAAA,SAAKA;IACRA,iBAAAA,CAAA,MAAA,GAAM;IACNA,iBAAAA,CAAA,QAAA,GAAQ;IACRA,iBAAAA,CAAA,QAAA,GAAQ;IAHA,OAAAA;AAAA,EAAAA,oBAAA,CAAA;AAOL,IAAKC,kBAAL,aAAA,GAAA,SAAKA;IACRA,gBAAAA,CAAA,SAAA,GAAS;IACTA,gBAAAA,CAAA,WAAA,GAAW;IACXA,gBAAAA,CAAA,YAAA,GAAY;IACZA,gBAAAA,CAAA,kBAAA,GAAkB;IAClBA,gBAAAA,CAAA,oBAAA,GAAoB;IACpBA,gBAAAA,CAAA,WAAA,GAAW;IACXA,gBAAAA,CAAA,kBAAA,GAAkB;IAPV,OAAAA;AAAA,EAAAA,mBAAA,CAAA;AAUL,IAAKC,gBAAL,aAAA,GAAA,SAAKA;IACRA,cAAAA,CAAA,UAAA,GAAU;IACVA,cAAAA,CAAA,UAAA,GAAU;IAFF,OAAAA;AAAA,EAAAA,iBAAA,CAAA;AAKL,IAAKC,mBAAL,aAAA,GAAA,SAAKA;IACRA,iBAAAA,CAAA,UAAA,GAAU;IADF,OAAAA;AAAA,EAAAA,oBAAA,CAAA;AAIL,IAAKC,gBAAL,aAAA,GAAA,SAAKA;IACRA,cAAAA,CAAA,SAAA,GAAS;IACTA,cAAAA,CAAA,SAAA,GAAS;IACTA,cAAAA,CAAA,SAAA,GAAS;IACTA,cAAAA,CAAA,eAAA,GAAe;IACfA,cAAAA,CAAA,eAAA,GAAe;IALP,OAAAA;AAAA,EAAAA,iBAAA,CAAA;AASL,IAAMC,aAAa,mBACnBL,kBACAC,iBACAC,eACAC,kBACAC;AAIA,IAAKE,kBAAL,aAAA,GAAA,SAAKA;IACRA,gBAAAA,CAAA,SAAA,GAAS;IACTA,gBAAAA,CAAA,cAAA,GAAc;IACdA,gBAAAA,CAAA,cAAA,GAAc;IACdA,gBAAAA,CAAA,aAAA,GAAa;IACbA,gBAAAA,CAAA,OAAA,GAAO;IACPA,gBAAAA,CAAA,KAAA,GAAK;IACLA,gBAAAA,CAAA,SAAA,GAAS;IACTA,gBAAAA,CAAA,UAAA,GAAU;IACVA,gBAAAA,CAAA,UAAA,GAAU;IACVA,gBAAAA,CAAA,OAAA,GAAO;IAVC,OAAAA;AAAA,EAAAA,mBAAA,CAAA;AAaL,IAAKC,oBAAL,aAAA,GAAA,SAAKA;IACRA,kBAAAA,CAAA,cAAA,GAAc;IACdA,kBAAAA,CAAA,cAAA,GAAc;IAFN,OAAAA;AAAA,EAAAA,qBAAA,CAAA;AAML,IAAKC,kBAAL,aAAA,GAAA,SAAKA;IACRA,gBAAAA,CAAA,cAAA,GAAc;IACdA,gBAAAA,CAAA,gBAAA,GAAgB;IAChBA,gBAAAA,CAAA,mBAAA,GAAmB;IACnBA,gBAAAA,CAAA,cAAA,GAAc;IACdA,gBAAAA,CAAA,mBAAA,GAAmB;IAEnBA,gBAAAA,CAAA,YAAA,GAAY;IACZA,gBAAAA,CAAA,wBAAA,GAAwB;IACxBA,gBAAAA,CAAA,kBAAA,GAAkB;IATV,OAAAA;AAAA,EAAAA,mBAAA,CAAA;AAaL,IAAKC,eAAL,aAAA,GAAA,SAAKA;IACRA,aAAAA,CAAA,cAAA,GAAc;IACdA,aAAAA,CAAA,QAAA,GAAQ;IACRA,aAAAA,CAAA,YAAA,GAAY;IACZA,aAAAA,CAAA,aAAA,GAAa;IACbA,aAAAA,CAAA,cAAA,GAAc;IACdA,aAAAA,CAAA,eAAA,GAAe;IACfA,aAAAA,CAAA,SAAA,GAAS;IACTA,aAAAA,CAAA,cAAA,GAAc;IACdA,aAAAA,CAAA,aAAA,GAAa;IACbA,aAAAA,CAAA,aAAA,GAAa;IAVL,OAAAA;AAAA,EAAAA,gBAAA,CAAA;AAcL,IAAKC,iBAAL,aAAA,GAAA,SAAKA;IACRA,eAAAA,CAAA,YAAA,GAAY;IACZA,eAAAA,CAAA,gBAAA,GAAgB;IAChBA,eAAAA,CAAA,iBAAA,GAAiB;IACjBA,eAAAA,CAAA,mBAAA,GAAmB;IACnBA,eAAAA,CAAA,oBAAA,GAAoB;IACpBA,eAAAA,CAAA,eAAA,GAAe;IACfA,eAAAA,CAAA,yBAAA,GAAyB;IACzBA,eAAAA,CAAA,0BAAA,GAA0B;IAC1BA,eAAAA,CAAA,qBAAA,GAAqB;IACrBA,eAAAA,CAAA,uBAAA,GAAuB;IACvBA,eAAAA,CAAA,iBAAA,GAAiB;IACjBA,eAAAA,CAAA,mBAAA,GAAmB;IACnBA,eAAAA,CAAA,uBAAA,GAAuB;IACvBA,eAAAA,CAAA,gBAAA,GAAgB;IAChBA,eAAAA,CAAA,sBAAA,GAAsB;IACtBA,eAAAA,CAAA,gBAAA,GAAgB;IAChBA,eAAAA,CAAA,gBAAA,GAAgB;IAChBA,eAAAA,CAAA,wBAAA,GAAwB;IACxBA,eAAAA,CAAA,iBAAA,GAAiB;IAnBT,OAAAA;AAAA,EAAAA,kBAAA,CAAA;AAuBL,IAAKC,mBAAL,aAAA,GAAA,SAAKA;IACRA,iBAAAA,CAAA,aAAA,GAAa;IACbA,iBAAAA,CAAA,YAAA,GAAY;IACZA,iBAAAA,CAAA,iBAAA,GAAiB;IACjBA,iBAAAA,CAAA,YAAA,GAAY;IACZA,iBAAAA,CAAA,gBAAA,GAAgB;IAChBA,iBAAAA,CAAA,cAAA,GAAc;IANN,OAAAA;AAAA,EAAAA,oBAAA,CAAA;AASL,IAAKC,oBAAL,aAAA,GAAA,SAAKA;IACRA,kBAAAA,CAAA,aAAA,GAAa;IACbA,kBAAAA,CAAA,cAAA,GAAc;IACdA,kBAAAA,CAAA,eAAA,GAAe;IAHP,OAAAA;AAAA,EAAAA,qBAAA,CAAA;AAML,IAAKC,eAAL,aAAA,GAAA,SAAKA;IACRA,aAAAA,CAAA,WAAA,GAAW;IACXA,aAAAA,CAAA,YAAA,GAAY;IACZA,aAAAA,CAAA,aAAA,GAAa;IACbA,aAAAA,CAAA,YAAA,GAAY;IACZA,aAAAA,CAAA,YAAA,GAAY;IACZA,aAAAA,CAAA,YAAA,GAAY;IACZA,aAAAA,CAAA,cAAA,GAAc;IACdA,aAAAA,CAAA,eAAA,GAAe;IARP,OAAAA;AAAA,EAAAA,gBAAA,CAAA;AAWL,IAAKC,eAAL,aAAA,GAAA,SAAKA;IACRA,aAAAA,CAAA,QAAA,GAAQ;IACRA,aAAAA,CAAA,eAAA,GAAe;IACfA,aAAAA,CAAA,QAAA,GAAQ;IACRA,aAAAA,CAAA,eAAA,GAAe;IAJP,OAAAA;AAAA,EAAAA,gBAAA,CAAA;AAoBL,IAAMC,YAAY,mBAClBT,iBACAC,mBACAG,gBACAD,cACAE,kBACAH,iBACAF,iBACAM,mBACAC,cACAC;AAIA,IAAKE,yBAAL,aAAA,GAAA,SAAKA;IACRA,uBAAAA,CAAA,KAAA,GAAK;IADG,OAAAA;AAAA,EAAAA,0BAAA,CAAA;AAGL,IAAKC,qBAAL,aAAA,GAAA,SAAKA;IACRA,mBAAAA,CAAA,WAAA,GAAW;IACXA,mBAAAA,CAAA,WAAA,GAAW;IAFH,OAAAA;AAAA,EAAAA,sBAAA,CAAA;AAIL,IAAKC,0BAAL,aAAA,GAAA,SAAKA;IACRA,wBAAAA,CAAA,SAAA,GAAS;IACTA,wBAAAA,CAAA,aAAA,GAAa;IAFL,OAAAA;AAAA,EAAAA,2BAAA,CAAA;AAIL,IAAKC,sBAAL,aAAA,GAAA,SAAKA;IACRA,oBAAAA,CAAA,KAAA,GAAK;IADG,OAAAA;AAAA,EAAAA,uBAAA,CAAA;AAIL,IAAMC,eAAe,mBACrBH,oBACAD,wBACAE,yBACAC;AAKA,IAAME,aAAa,mBAAKN,WAAcK,cAAiBf;AAEvD,IAAKiB,aAAL,aAAA,GAAA,SAAKA;IACRA,WAAAA,CAAA,UAAA,GAAU;IACVA,WAAAA,CAAA,UAAA,GAAU;IACVA,WAAAA,CAAA,YAAA,GAAY;IACZA,WAAAA,CAAA,SAAA,GAAS;IACTA,WAAAA,CAAA,WAAA,GAAW;IACXA,WAAAA,CAAA,QAAA,GAAQ;IANA,OAAAA;AAAA,EAAAA,cAAA,CAAA;AASL,IAAKC,aAAL,aAAA,GAAA,SAAKA;IACRA,WAAAA,CAAA,aAAA,GAAa;IACbA,WAAAA,CAAA,OAAA,GAAO;IACPA,WAAAA,CAAA,YAAA,GAAY;IAHJ,OAAAA;AAAA,EAAAA,cAAA,CAAA;AAML,IAAKC,aAAL,aAAA,GAAA,SAAKA;IACRA,WAAAA,CAAA,aAAA,GAAa;IADL,OAAAA;AAAA,EAAAA,cAAA,CAAA;AAIL,IAAKC,cAAL,aAAA,GAAA,SAAKA;IACRA,YAAAA,CAAA,aAAA,GAAa;IADL,OAAAA;AAAA,EAAAA,eAAA,CAAA;AAIL,IAAMC,cAAc,mBAAKJ,YAAeC,YAAeC,YAAeC;AAItE,IAAKE,eAAL,aAAA,GAAA,SAAKA;IACRA,aAAAA,CAAA,SAAA,GAAS;IACTA,aAAAA,CAAA,OAAA,GAAO;IACPA,aAAAA,CAAA,YAAA,GAAY;IACZA,aAAAA,CAAA,OAAA,GAAO;IACPA,aAAAA,CAAA,MAAA,GAAM;IALE,OAAAA;AAAA,EAAAA,gBAAA,CAAA;AASL,IAAKC,kBAAL,aAAA,GAAA,SAAKA;IACRA,gBAAAA,CAAA,SAAA,GAAS;IACTA,gBAAAA,CAAA,OAAA,GAAO;IACPA,gBAAAA,CAAA,YAAA,GAAY;IACZA,gBAAAA,CAAA,MAAA,GAAM;IACNA,gBAAAA,CAAA,OAAA,GAAO;IALC,OAAAA;AAAA,EAAAA,mBAAA,CAAA;AASL,IAAKC,iBAAL,aAAA,GAAA,SAAKA;IACRA,eAAAA,CAAA,SAAA,GAAS;IACTA,eAAAA,CAAA,OAAA,GAAO;IACPA,eAAAA,CAAA,YAAA,GAAY;IACZA,eAAAA,CAAA,OAAA,GAAO;IAJC,OAAAA;AAAA,EAAAA,kBAAA,CAAA;AAQL,IAAKC,kBAAL,aAAA,GAAA,SAAKA;IACRA,gBAAAA,CAAA,OAAA,GAAO;IACPA,gBAAAA,CAAA,YAAA,GAAY;IACZA,gBAAAA,CAAA,SAAA,GAAS;IACTA,gBAAAA,CAAA,OAAA,GAAO;IAJC,OAAAA;AAAA,EAAAA,mBAAA,CAAA;AAQL,IAAKC,kBAAL,aAAA,GAAA,SAAKA;IACRA,gBAAAA,CAAA,SAAA,GAAS;IACTA,gBAAAA,CAAA,OAAA,GAAO;IACPA,gBAAAA,CAAA,YAAA,GAAY;IACZA,gBAAAA,CAAA,OAAA,GAAO;IAJC,OAAAA;AAAA,EAAAA,mBAAA,CAAA;AAQL,IAAKC,kBAAL,aAAA,GAAA,SAAKA;IACRA,gBAAAA,CAAA,OAAA,GAAO;IACPA,gBAAAA,CAAA,QAAA,GAAQ;IAFA,OAAAA;AAAA,EAAAA,mBAAA,CAAA;AAML,IAAKC,kBAAL,aAAA,GAAA,SAAKA;IACRA,gBAAAA,CAAA,OAAA,GAAO;IACPA,gBAAAA,CAAA,YAAA,GAAY;IAFJ,OAAAA;AAAA,EAAAA,mBAAA,CAAA;ADlCZ,0BAA0B;AE9Q1B,SAASC,WAAA,EAAaC,QAAA,QAAgB,SAAA;AACtC,OAAOC,uBAAuB,2BAAA;AAC9B,SAASC,YAAA,QAAoB,aAAA;AFiR7B,cAAc;AGnRd,SAASC,aAAA,QAAqB,KAAA;AAC9B,OAAOC,WAAmC,QAAA;AAC1C,SAASC,YAAA,QAAoB,oBAAA;AAC7B,OAAOC,UAAU,OAAA;AACjB,OAAOC,cAAc,YAAA;AAGrB,IAAMC,eAAe,IAAIH,aAAa,WAAWI;AAEjD,IAAOC,eAAQ;IASLC,KATK;;;;;;;GAAA,GASX,SAAMA,IAAyBC,GAAA,EAAaC,MAAA,EAAmBC,MAAA;eAA6B,oBAAA;;;;wBAChF;;4BAAMV,MAAMO,GAAA,CAAeC,KAAK;gCAAEC,QAAAA;+BAAWC;;;wBAArD;;4BAAQ,cAAwDC,IAAA;;;;QACpE;;IAUMC,MAVN;;;;;;;GAAA,GAUA,SAAMA,KAA0BJ,GAAA,EAAaK,IAAA,EAAiBH,MAAA;eAA6B,oBAAA;;;;wBAC/E;;4BAAMV,MAAMY,IAAA,CAAgBJ,KAAKK,MAAMH;;;wBAA/C;;4BAAQ,cAAgDC,IAAA;;;;QAC5D;;IAAA;;;;;GAAA,GAOAG,MAAAA,SAAAA,KAAQC,GAAA;QACJ,IAAI;YACA,IAAI,CAACA,KAAK,OAAO;YACjB,OAAOC,KAAKC,KAAA,CAAMF;QACtB,EAAA,OAASG,GAAG;YACR,OAAO;QACX;IACJ;IACAC,cAAAA,SAAAA,aAAgBC,GAAA;QACZ,OAAOA,GAAA,CAAIC,KAAKC,KAAA,CAAMD,KAAKE,MAAA,KAAWH,IAAII,MAAM,EAAC;IACrD;IACAC,aAAAA,SAAAA;YAAYD,SAAAA,iEAAS;QACjB,IAAIE,SAAS;QACb,MAAOA,OAAOF,MAAA,GAASA,OAAQ;YAC3B,IAAIG,OAAON,KAAKC,KAAA,CAAMD,KAAKE,MAAA,KAAW;YAEtC,IAAIG,OAAOF,MAAA,KAAW,KAAKG,SAAS,GAAG;YAEvCD,UAAUC,KAAKC,QAAA;QACnB;QACA,OAAOF;IACX;IAAA;;;;;;GAAA,GAQAG,QAAAA,SAAAA,OAAOC,CAAA,EAAWC,CAAA;QACd,IAAIA,MAAM,GAAG,OAAOD;QACpB,OAAO,IAAA,CAAKD,MAAA,CAAOE,GAAGD,IAAIC;IAC9B;IAAA;;;;;;GAAA,GAQAC,WAAAA,SAAAA,UAAUC,KAAA,EAAeC,MAAA;QACrB,IAAI,CAACD,SAAS,CAACC,QAAQ,OAAO;QAE9B,IAAMC,MAAM,IAAA,CAAKN,MAAA,CAAOI,OAAOC;QAC/B,IAAME,mBAAmBH,QAAQE;QACjC,IAAME,oBAAoBH,SAASC;QAEnC,OAAO,GAAuBE,OAApBD,kBAAgB,KAAqB,OAAjBC;IAClC;IAAA;;;;;GAAA,GAOAC,SAAAA,SAAAA,QAAWC,GAAA,EAAaC,KAAA;QACpBpC,aAAakC,OAAA,CAAQC,KAAKvB,KAAKyB,SAAA,CAAUD;IAC7C;IAAA;;;;;GAAA,GAOAE,SAAAA,SAAAA,QAAWH,GAAA;QACP,OAAO,IAAA,CAAKzB,IAAA,CAAQV,aAAasC,OAAA,CAAQH;IAC7C;IASMI,WATN;;;;;;;GAAA,GASA,SAAMA,UAAUhC,IAAA;YAAciC,WAAAA,iEAAW;eAAI,oBAAA;gBAEnCC,UAIIC;;;;wBAJJD,WAAW3C,KAAK6C,IAAA,CAAK,WAAWH;6BAElCjC,CAAAA,KAAKqC,UAAA,CAAW,cAAcrC,KAAKqC,UAAA,CAAW,WAAU,GAAxDrC;;;;wBAEoB;;4BAAM,IAAA,CAAKJ,GAAA,CAAII,MAAM,CAAC,GAAG;gCAAEsC,cAAc;4BAAc;;;wBAArEH,MAAc;wBACpB,IAAI,CAAEA,AAAA,YAAAA,KAAeI,SAAS,MAAM,IAAIC,MAAM;wBAE9CpD,cAAc8C,UAAUC;;;;;;wBACrB/C,cAAc8C,UAAUK,OAAOE,IAAA,CAAKzC,MAAM;;;wBAEjD;;4BAAOkC;;;;QACX;;IAEA1C,UAAAA,SAAAA,UAASQ,IAAA;YAAc0C,YAAAA,iEAAqB;QACxC,OAAOlD,SAASQ,MAAM;YAAE0C,WAAAA;QAAU;IACtC;AACJ;AHwQA,0BAA0B;AEpX1B,IAAMC,cAAc;AACpB,IAAMC,MAAM;AACZ,IAAMC,MAAM;AAEZ,IAAqBC,uBAArB;;aAAqBA,OAULlB,GAAA;YAAyBmB,MAAAA,iEAAcH;gCAVlCE;QAWb,IAAA,CAAKlB,GAAA,GAAMA;QACX,IAAA,CAAKmB,GAAA,GAAMA;;;;YAUTC,KAAAA;mBATN,AASA;;;;;;GATA,GASA,SAAMA,UAAUC,KAAA;oBAAiBC,QAAAA,gDAAA,OAAA,qBAAA;;uBAAjC,oBAAA;wBACUtB,KAGAO,KAMAnC;;;;gCATA4B,MAAMuB,MAAMC,OAAA,CAAQ,MAAKxB,GAAG,IAAIjC,aAAEa,YAAA,CAAa,MAAKoB,GAAG,IAAI,MAAKA,GAAA;gCACtE,IAAI,CAACA,KAAK,MAAM,IAAIY,MAAM;gCAEd;;oCAAM7C,aAAEM,IAAA,CAChB,GAAe4C,OAAZ,MAAKE,GAAG,EAAA,KAAO,OAAHF,KAAG,gBAClB;wCAAEK,OAAAA;wCAAOD,OAAAA;oCAAM,GACf;wCAAEI,SAAS;4CAAEC,eAAe,UAAa,OAAH1B;wCAAM;wCAAGU,cAAc;oCAAO;;;gCAHlEH,MAAM;gCAMNnC,OAA0B;oCAC5BgD,WAAWb,IAAInC,IAAA,CAAKuD,GAAA,CAAI,SAAAC;+CAAKA,EAAER,SAAS;;oCACxCS,QAAQ;oCACRP,OAAAA;oCACAQ,cAAcvB,IAAIwB,KAAA,CAAMC,aAAA,IAAiB;oCACzCC,aAAa1B,IAAIwB,KAAA,CAAMG,YAAA,IAAgB;gCAC3C;gCACA;;oCAAO9D;;;;gBACX;;;;YAeM+D,KAAAA;mBAfN,AAeA;;;;;;;;;;;;GAfA,GAeA,SAAMA,KACFC,QAAA;oBACAd,QAAAA,gDAAA,UAAA,qBAAA,UACAe,SAAAA,iEAAkB,OAClBC,oDACAC,4DACAC,0DACAC,sDACAC;;uBARJ,oBAAA;wBAYU1C,KA4BAO,KAeAnC,MAUIuE,QACAC,QAqBSrC,uBAAAA,eACXA,wBAAAA,gBAAkDA,wBAAAA,gBAGlCA,YACIA,aACLA;;;;gCAjFjBP,MAAMuB,MAAMC,OAAA,CAAQ,MAAKxB,GAAG,IAAIjC,aAAEa,YAAA,CAAa,MAAKoB,GAAG,IAAI,MAAKA,GAAA;gCACtE,IAAI,CAACA,KAAK,MAAM,IAAIY,MAAM;gCAG1B,IACI,CAAC;oCAAA,cAAA,cAAA;oCAAA,SAAA,UAAA;oCAAA,cAAA,eAAA;oCAAA,oBAAA,eAAA;oCAAA,KAAA,MAAA;oCAAA,UAAA,WAAA;oCAAA,aAAA,UAAA;kCAQCiC,QAAA,CAASvB,QAEXc,WAAWA,SAAST,GAAA,CAAI;wCAAGmB,aAAAA,MAAMC,gBAAAA;2CAAe;wCAAED,MAAAA;wCAAMC,SAAAA;oCAAQ;;gCAGpE,IAAI,OAAOR,gBAAgB,UAAU;oCACjC,IAAIA,cAAc,GAAGA,cAAc;oCACnC,IAAIA,cAAc,GAAGA,cAAc;gCACvC;gCAEA,IAAI,OAAOD,QAAQ,UAAU;oCACzB,IAAIA,MAAM,GAAGA,MAAM;oCACnB,IAAIA,MAAM,GAAGA,MAAM;gCACvB;gCAEY;;oCAAMvE,aAAEM,IAAA,CAChB,GAAe4C,OAAZ,MAAKE,GAAG,EAAA,KAAO,OAAHF,KAAG,sBAClB;wCACIK,OAAAA;wCACAc,UAAU,MAAKY,aAAA,CAAcZ;wCAC7BC,QAAAA;wCACAE,aAAAA;wCACAU,OAAOX;wCACPY,uBAAuBV;wCACvBC,OAAAA;wCACAU,aAAaT;oCACjB,GACA;wCAAEjB,SAAS;4CAAEC,eAAe,UAAa,OAAH1B;wCAAM;wCAAGU,cAAc2B,SAAS,WAAW;oCAAO;;;gCAZtF9B,MAAM;gCAeNnC,OAAqB;oCACvB2E,SAAS;oCACTzB,OAAAA;oCACAO,QAAQ;oCACRC,cAAc;oCACdsB,kBAAkB;oCAClBnB,aAAa;gCACjB;gCAEA,IAAI1B,AAAA,YAAAA,KAAelD,WAAU;oCACnBsF,SAAS,IAAIvF;oCACbwF,SAAS,IAAItF;oCAEnBsF,OAAOS,EAAA,CAAG,QAAQ,SAAC1E;wCACf,IAAM2E,MAAMvF,aAAEQ,IAAA,CAA4BI,EAAEP,IAAI;wCAChD,IAAIkF,KAAK;gDACUA,qBAAAA,eACXA,sBAAAA,gBAAgDA,sBAAAA,gBAGhCA,YACIA,aACLA;4CANnBlF,KAAK2E,OAAA,GAAUO,EAAAA,gBAAAA,IAAIC,OAAA,CAAQ,EAAC,cAAbD,qCAAAA,sBAAAA,cAAgBE,KAAA,cAAhBF,0CAAAA,oBAAuBP,OAAA,KAAW;4CACjD,KAAIO,iBAAAA,IAAIC,OAAA,CAAQ,EAAC,cAAbD,sCAAAA,uBAAAA,eAAgBE,KAAA,cAAhBF,2CAAAA,qBAAuBG,UAAA,EAAYrF,KAAKqE,KAAA,IAAQa,iBAAAA,IAAIC,OAAA,CAAQ,EAAC,cAAbD,sCAAAA,uBAAAA,eAAgBE,KAAA,cAAhBF,2CAAAA,qBAAuBG,UAAA;4CAC3ErF,KAAKkD,KAAA,GAAQgC,IAAIhC,KAAA;4CACjBlD,KAAKyD,MAAA,GAASyB,IAAIzB,MAAA;4CAClBzD,KAAK0D,YAAA,GAAewB,EAAAA,aAAAA,IAAIvB,KAAA,cAAJuB,iCAAAA,WAAWtB,aAAA,KAAiB;4CAChD5D,KAAKgF,gBAAA,GAAmBE,EAAAA,cAAAA,IAAIvB,KAAA,cAAJuB,kCAAAA,YAAWI,iBAAA,KAAqB;4CACxDtF,KAAK6D,WAAA,GAAcqB,EAAAA,cAAAA,IAAIvB,KAAA,cAAJuB,kCAAAA,YAAWpB,YAAA,KAAgB;4CAC9CS,OAAOgB,KAAA,CAAMlF,KAAKyB,SAAA,CAAU9B;wCAChC;oCACJ;oCACAwE,OAAOS,EAAA,CAAG,SAAS,SAAA1E;+CAAKgE,OAAOiB,OAAA,CAAQjF;;oCACvCiE,OAAOS,EAAA,CAAG,OAAO;+CAAMV,OAAOkB,GAAA;;oCAE9BtD,IAAIuD,IAAA,CAAKvG,aAAa,UAAUuG,IAAA,CAAKlB;oCACrC;;wCAAOD;;gCACX,OAAO;;oCACHvE,KAAK2E,OAAA,GAAUxC,EAAAA,gBAAAA,IAAIgD,OAAA,CAAQ,EAAC,cAAbhD,qCAAAA,wBAAAA,cAAgBwD,OAAA,cAAhBxD,4CAAAA,sBAAyBwC,OAAA,KAAW;oCACnD,KAAIxC,iBAAAA,IAAIgD,OAAA,CAAQ,EAAC,cAAbhD,sCAAAA,yBAAAA,eAAgBwD,OAAA,cAAhBxD,6CAAAA,uBAAyBkD,UAAA,EAAYrF,KAAKqE,KAAA,IAAQlC,iBAAAA,IAAIgD,OAAA,CAAQ,EAAC,cAAbhD,sCAAAA,yBAAAA,eAAgBwD,OAAA,cAAhBxD,6CAAAA,uBAAyBkD,UAAA;oCAC/ErF,KAAKkD,KAAA,GAAQf,IAAIe,KAAA;oCACjBlD,KAAKyD,MAAA,GAAStB,IAAIsB,MAAA;oCAClBzD,KAAK0D,YAAA,GAAevB,EAAAA,aAAAA,IAAIwB,KAAA,cAAJxB,iCAAAA,WAAWyB,aAAA,KAAiB;oCAChD5D,KAAKgF,gBAAA,GAAmB7C,EAAAA,cAAAA,IAAIwB,KAAA,cAAJxB,kCAAAA,YAAWmD,iBAAA,KAAqB;oCACxDtF,KAAK6D,WAAA,GAAc1B,EAAAA,cAAAA,IAAIwB,KAAA,cAAJxB,kCAAAA,YAAW2B,YAAA,KAAgB;oCAC9C;;wCAAO9D;;gCACX;;;;;;gBACJ;;;;YAYM4F,KAAAA;mBAZN,AAYA;;;;;;;;;GAZA,GAYA,SAAMA,QACFC,MAAA;oBACAvE,QAAAA,iEAAgB,MAChBC,SAAAA,iEAAiB,MACjBuE,IAAAA,iEAAY,GACZ5C,QAAAA,gDAAA,YAAA,qBAAA;;uBALJ,oBAAA;wBAOUtB,KAGAO,KAMA4D,IACAC,uBACKC,MAELC,MACAC,MAWAC;;;;gCAzBAxE,MAAMuB,MAAMC,OAAA,CAAQ,MAAKxB,GAAG,IAAIjC,aAAEa,YAAA,CAAa,MAAKoB,GAAG,IAAI,MAAKA,GAAA;gCACtE,IAAI,CAACA,KAAK,MAAM,IAAIY,MAAM;gCAEd;;oCAAM7C,aAAEM,IAAA,CAChB,GAAe4C,OAAZ,MAAKE,GAAG,EAAA,KAAuC,OAAnCF,KAAG,YAAA,cAAA,cAAA,MAClB;wCAAEK,OAAAA;wCAAO2C,QAAAA;wCAAQC,GAAAA;wCAAGO,MAAM,GAAY9E,OAATD,OAAK,KAAU,OAANC;wCAA4B+E,iBAAiB;oCAAW,GAC9F;wCAAEjD,SAAS;4CAAEC,eAAe,UAAa,OAAH1B;wCAAM;wCAAGU,cAAc;oCAAO;;;gCAHlEH,MAAM;gCAMN4D,KAAKpG,aAAEmB,WAAA;gCACPkF;;6CACU7D,IAAInC,IAAA;;;;;;;;gCAATiG;oCAAeD,KAAKO,IAAA;gCAAK;;oCAAM5G,aAAEqC,SAAA,CAAUG,IAAInC,IAAA,CAAKiG,EAAC,CAAEO,QAAA,EAAW,GAASP,OAANF,IAAE,KAAK,OAADE,GAAC;;;gCAA7DD,QAAAA;oCAAU;;;;;;;;;;gCAE9BE,OAAOO,KAAKC,GAAA;gCACZP,OAAqB;oCACvBJ,IAAAA;oCACAY,MAAA,cAAA,cAAA;oCACAC,MAAM;oCACNC,UAAU;oCACVb,MAAAA;oCACAc,MAAM;oCACNC,SAASb;oCACThD,OAAAA;gCACJ;gCAEMkD,QAAwBzG,aAAEoC,OAAA,CAAQY;gCACxCyD,MAAMG,IAAA,CAAKJ;gCACXxG,aAAEgC,OAAA,CAAQgB,aAAayD;gCACvB;;oCAAO;wCAAEY,QAAQb,KAAKJ,EAAA;wCAAIG,MAAAA;oCAAK;;;;gBACnC;;;;YAAA;;;;;GAAA,GAQAC,KAAAA;mBAAAA,SAAAA,KAAKJ,EAAA;gBACD,IAAMK,QAAwBzG,aAAEoC,OAAA,CAAQY,gBAAgB,EAAC;gBAEzD,IAAIoD,IAAI,OAAOK,MAAMa,MAAA,CAAO,SAAAzD;2BAAKA,EAAEuC,EAAA,KAAOA;;qBACrC,OAAOK;YAChB;;;YAAA;;;;;GAAA,GAQQxB,KAAAA;mBAAAA,SAAAA,cAAcZ,QAAA;gBAClB,IAAM6B,SAA2B,EAAC;oBAElC,kCAAA,2BAAA;;oBAAA,QAAA,YAA2C7B,6BAA3C,SAAA,6BAAA,QAAA,yBAAA,iCAAqD;wBAArD,kBAAA,aAAaU,mBAAAA,MAAMC,sBAAAA,SAASuC,kBAAAA,KAAKC,mBAAAA;wBAE7B,OAAQzC;4BACJ,KAAA,OAAA,QAAA;gCACI,IAAIwC,KACArB,OAAOU,IAAA,CAAK;oCACR7B,MAAAA;oCACAC,SAAS;wCACL;4CAAEgC,MAAM;4CAAQS,MAAMzC;wCAAQ;wCAC9B;4CAAEgC,MAAM;4CAAaU,WAAW;gDAAExH,KAAKqH;4CAAI;wCAAE;qCACjD;gCACJ;qCACCrB,OAAOU,IAAA,CAAK;oCAAE7B,MAAAA;oCAAMC,SAAAA;gCAAQ;gCACjC;4BACJ,KAAA,OAAA,QAAA;gCACIkB,OAAOU,IAAA,CAAK;oCAAE7B,MAAAA;oCAAMC,SAAAA;oCAAS2C,cAAcH;gCAAM;gCACjD;4BACJ;gCACItB,OAAOU,IAAA,CAAK;oCAAE7B,MAAAA;oCAAMC,SAAAA;gCAAQ;gCAC5B;wBACR;oBACJ;;oBArBA;oBAAA;;;6BAAA,6BAAA;4BAAA;;;4BAAA;kCAAA;;;;gBAuBA,OAAOkB;YACX;;;;;AFwUJ,uBAAuB;AI/lBvB,SAAS7G,eAAAA,YAAAA,EAAaC,YAAAA,SAAAA,QAAgB,SAAA;AACtC,OAAOC,wBAAuB,2BAAA;AAC9B,SAASC,gBAAAA,aAAAA,QAAoB,aAAA;AAc7B,IAAMyD,OAAM;AAEZ,IAAqB2E,oBAArB;;aAAqBA,IAIL3F,GAAA;YAAyB4F,WAAAA,iEAAmB5E;gCAJvC2E;QAKb,IAAA,CAAK3F,GAAA,GAAMA;QACX,IAAA,CAAK4F,QAAA,GAAWA;;;;YAUdxE,KAAAA;mBATN,AASA;;;;;;GATA,GASA,SAAMA,UAAUC,KAAA;oBAAiBC,QAAAA,gDAAA,WAAA,qBAAA,eAA8CuE,aAAAA,iEAAa;;uBAA5F,oBAAA;wBACU7F,KAGAO;;;;gCAHAP,MAAMuB,MAAMC,OAAA,CAAQ,MAAKxB,GAAG,IAAIjC,aAAEa,YAAA,CAAa,MAAKoB,GAAG,IAAI,MAAKA,GAAA;gCACtE,IAAI,CAACA,KAAK,MAAM,IAAIY,MAAM;gCAEd;;oCAAM7C,aAAEM,IAAA,CAChB,GAAgB,OAAb,MAAKuH,QAAQ,EAAA,4BAChB;wCAAEtE,OAAAA;wCAAOD,OAAAA;wCAAOwE,YAAAA;oCAAW,GAC3B;wCAAEpE,SAAS;4CAAEC,eAAe,UAAa,OAAH1B;wCAAM;wCAAGU,cAAc;oCAAO;;;gCAHlEH,MAAM;gCAMZ;;oCAAO;wCACHa,WAAWb,IAAInC,IAAA,CAAKuD,GAAA,CAAI,SAAAC;mDAAKA,EAAER,SAAS;;wCACxCS,QAAQ;wCACRP,OAAAA;wCACAQ,cAAcvB,IAAIwB,KAAA,CAAMC,aAAA;wCACxBC,aAAa1B,IAAIwB,KAAA,CAAMG,YAAA;oCAC3B;;;;gBACJ;;;;YAaMC,KAAAA;mBAbN,AAaA;;;;;;;;;;GAbA,GAaA,SAAMA,KACFC,QAAA;oBACAd,QAAAA,gDAAA,eAAA,qBAAA,eACAe,SAAAA,iEAAkB,OAClBC,oDACAC,4DACAC,0DACAC,sDACAC;;uBARJ,oBAAA;wBAyBUtE,MAUA4B,KAGAO,KAgBIoC,QACAC,QAsBSrC,uBAAAA,eACXA,wBAAAA,gBAAkDA,wBAAAA,gBAGlCA,YACIA,aACLA;;;;gCAxEvB,IAAI,CAAC;oCAAA,SAAA,UAAA;oCAAA,cAAA,eAAA;kCAAgDsC,QAAA,CAASvB,QAC1Dc,WAAWA,SAAST,GAAA,CAAI;wCAAGmB,aAAAA,MAAMC,gBAAAA;2CAAe;wCAAED,MAAAA;wCAAMC,SAAAA;oCAAQ;;gCAGpE,IAAI,OAAOR,gBAAgB,UAAU;oCACjC,IAAIA,eAAe,GAAGA,cAAc;oCACpC,IAAIA,cAAc,GAAGA,cAAc;gCACvC;gCAEA,IAAI,OAAOD,QAAQ,UAAU;oCACzB,IAAIA,OAAO,GAAGA,MAAM;oCACpB,IAAIA,OAAO,GAAGA,MAAM;gCACxB;gCAEMlE,OAAqB;oCACvB2E,SAAS;oCACTzB,OAAAA;oCACAO,QAAQ;oCACRC,cAAc;oCACdsB,kBAAkB;oCAClBnB,aAAa;gCACjB;gCAGMjC,MAAMuB,MAAMC,OAAA,CAAQ,MAAKxB,GAAG,IAAIjC,aAAEa,YAAA,CAAa,MAAKoB,GAAG,IAAI,MAAKA,GAAA;gCACtE,IAAI,CAACA,KAAK,MAAM,IAAIY,MAAM;gCAEd;;oCAAM7C,aAAEM,IAAA,CAChB,GAAgB,OAAb,MAAKuH,QAAQ,EAAA,kCAChB;wCACItE,OAAAA;wCACAc,UAAU,MAAKY,aAAA,CAAcZ;wCAC7BC,QAAAA;wCACAE,aAAAA;wCACAU,OAAOX;wCACPwD,YAAYtD;wCACZC,OAAAA;wCACAU,aAAaT;oCACjB,GACA;wCAAEjB,SAAS;4CAAEC,eAAe,UAAa,OAAH1B;wCAAM;wCAAGU,cAAc2B,SAAS,WAAW;oCAAO;;;gCAZtF9B,MAAM;gCAeZ,IAAIA,AAAA,YAAAA,KAAelD,YAAU;oCACnBsF,SAAS,IAAIvF;oCACbwF,SAAS,IAAItF;oCAEnBsF,OAAOS,EAAA,CAAG,QAAQ,SAAC1E;wCACf,IAAM2E,MAAMvF,aAAEQ,IAAA,CAAsBI,EAAEP,IAAI;wCAC1C,IAAIkF,KAAK;gDACUA,qBAAAA,eACXA,sBAAAA,gBAAgDA,sBAAAA,gBAGhCA,YACIA,aACLA;4CANnBlF,KAAK2E,OAAA,GAAUO,EAAAA,gBAAAA,IAAIC,OAAA,CAAQ,EAAC,cAAbD,qCAAAA,sBAAAA,cAAgBE,KAAA,cAAhBF,0CAAAA,oBAAuBP,OAAA,KAAW;4CACjD,KAAIO,iBAAAA,IAAIC,OAAA,CAAQ,EAAC,cAAbD,sCAAAA,uBAAAA,eAAgBE,KAAA,cAAhBF,2CAAAA,qBAAuBG,UAAA,EAAYrF,KAAKqE,KAAA,IAAQa,iBAAAA,IAAIC,OAAA,CAAQ,EAAC,cAAbD,sCAAAA,uBAAAA,eAAgBE,KAAA,cAAhBF,2CAAAA,qBAAuBG,UAAA;4CAC3ErF,KAAKkD,KAAA,GAAQgC,IAAIhC,KAAA;4CACjBlD,KAAKyD,MAAA,GAASyB,IAAIzB,MAAA,IAAU;4CAC5BzD,KAAK0D,YAAA,GAAewB,EAAAA,aAAAA,IAAIvB,KAAA,cAAJuB,iCAAAA,WAAWtB,aAAA,KAAiB;4CAChD5D,KAAKgF,gBAAA,GAAmBE,EAAAA,cAAAA,IAAIvB,KAAA,cAAJuB,kCAAAA,YAAWI,iBAAA,KAAqB;4CACxDtF,KAAK6D,WAAA,GAAcqB,EAAAA,cAAAA,IAAIvB,KAAA,cAAJuB,kCAAAA,YAAWpB,YAAA,KAAgB;4CAC9C,IAAI9D,KAAK2E,OAAA,EAASJ,OAAOgB,KAAA,CAAMlF,KAAKyB,SAAA,CAAU9B;wCAClD;oCACJ;oCAEAwE,OAAOS,EAAA,CAAG,SAAS,SAAA1E;+CAAKgE,OAAOiB,OAAA,CAAQjF;;oCACvCiE,OAAOS,EAAA,CAAG,OAAO;+CAAMV,OAAOkB,GAAA;;oCAE9BtD,IAAIuD,IAAA,CAAKvG,cAAa,UAAUuG,IAAA,CAAKlB;oCACrC;;wCAAOD;;gCACX,OAAO;;oCACHvE,KAAK2E,OAAA,GAAUxC,EAAAA,gBAAAA,IAAIgD,OAAA,CAAQ,EAAC,cAAbhD,qCAAAA,wBAAAA,cAAgBwD,OAAA,cAAhBxD,4CAAAA,sBAAyBwC,OAAA,KAAW;oCACnD,KAAIxC,iBAAAA,IAAIgD,OAAA,CAAQ,EAAC,cAAbhD,sCAAAA,yBAAAA,eAAgBwD,OAAA,cAAhBxD,6CAAAA,uBAAyBkD,UAAA,EAAYrF,KAAKqE,KAAA,IAAQlC,iBAAAA,IAAIgD,OAAA,CAAQ,EAAC,cAAbhD,sCAAAA,yBAAAA,eAAgBwD,OAAA,cAAhBxD,6CAAAA,uBAAyBkD,UAAA;oCAC/ErF,KAAKkD,KAAA,GAAQf,IAAIe,KAAA;oCACjBlD,KAAKyD,MAAA,GAAStB,IAAIsB,MAAA,IAAU;oCAC5BzD,KAAK0D,YAAA,GAAevB,EAAAA,aAAAA,IAAIwB,KAAA,cAAJxB,iCAAAA,WAAWyB,aAAA,KAAiB;oCAChD5D,KAAKgF,gBAAA,GAAmB7C,EAAAA,cAAAA,IAAIwB,KAAA,cAAJxB,kCAAAA,YAAWmD,iBAAA,KAAqB;oCACxDtF,KAAK6D,WAAA,GAAc1B,EAAAA,cAAAA,IAAIwB,KAAA,cAAJxB,kCAAAA,YAAW2B,YAAA,KAAgB;oCAC9C;;wCAAO9D;;gCACX;;;;;;gBACJ;;;;YAAA;;;;;GAAA,GAQQ4E,KAAAA;mBAAAA,SAAAA,cAAcZ,QAAA;gBAClB,IAAM6B,SAA2B,EAAC;oBAElC,kCAAA,2BAAA;;oBAAA,QAAA,YAA2C7B,6BAA3C,SAAA,6BAAA,QAAA,yBAAA,iCAAqD;wBAArD,kBAAA,aAAaU,mBAAAA,MAAMC,sBAAAA,SAASuC,kBAAAA,KAAKC,mBAAAA;wBAC7B,IAAIzC,SAAA,YAAA,OAAA,KAA2B;wBAG/B,OAAQA;4BACJ,KAAA,OAAA,QAAA;gCACI,IAAIwC,KACArB,OAAOU,IAAA,CAAK;oCACR7B,MAAAA;oCACAC,SAAS;wCACL;4CAAEgC,MAAM;4CAAQS,MAAMzC;wCAAQ;wCAC9B;4CAAEgC,MAAM;4CAAaU,WAAW;gDAAExH,KAAKqH;4CAAI;wCAAE;qCACjD;gCACJ;qCACCrB,OAAOU,IAAA,CAAK;oCAAE7B,MAAAA;oCAAMC,SAAAA;gCAAQ;gCACjC;4BACJ,KAAA,OAAA,QAAA;gCACIkB,OAAOU,IAAA,CAAK;oCACR7B,MAAAA;oCACAC,SAAAA;oCACA2C,cAAcH,QAAQ;gCAC1B;gCACA;4BACJ;gCACItB,OAAOU,IAAA,CAAK;oCAAE7B,MAAAA;oCAAMC,SAAAA;gCAAQ;gCAC5B;wBACR;oBACJ;;oBA3BA;oBAAA;;;6BAAA,6BAAA;4BAAA;;;4BAAA;kCAAA;;;;gBA6BA,OAAOkB;YACX;;;;;AJojBJ,yBAAyB;AK7uBzB,SAAS1G,gBAAAA,aAAAA,QAAoB,aAAA;AAC7B,SAASH,eAAAA,YAAAA,EAAaC,YAAAA,SAAAA,QAAgB,SAAA;AACtC,OAAOC,wBAAuB,2BAAA;AAe9B,IAAqByI,sBAArB;;aAAqBA,MAUL5E,GAAA,EAAcnB,GAAA;gCAVT+F;QAWb,IAAA,CAAK5E,GAAA,GAAMA;QACX,IAAA,CAAKnB,GAAA,GAAMA;;;;YAUToB,KAAAA;mBATN,AASA;;;;;;GATA,GASA,SAAMA,UAAUC,KAAA;oBAAiBC,QAAAA,iEAAoB/F,WAAWyK,MAAA;;uBAAhE,oBAAA;wBAEUhG,KAEAO,KAMAnC;;;;gCATN,IAAI,CAAC,MAAK+C,GAAA,EAAK,MAAM,IAAIP,MAAM;gCACzBZ,MAAMuB,MAAMC,OAAA,CAAQ,MAAKxB,GAAG,IAAIjC,aAAEa,YAAA,CAAa,MAAKoB,GAAG,IAAI,MAAKA,GAAA;gCAE1D;;oCAAMjC,aAAEM,IAAA,CAChB,GAAW,OAAR,MAAK8C,GAAG,EAAA,mBACX;wCAAEG,OAAAA;wCAAOD,OAAAA;oCAAM,GACf;wCAAEI,SAAS;4CAAEC,eAAe,UAAa,OAAH1B;wCAAM;wCAAGU,cAAc;oCAAO;;;gCAHlEH,MAAM;gCAMNnC,OAA0B;oCAC5BgD,WAAWb,IAAInC,IAAA,CAAKuD,GAAA,CAAI,SAAAC;+CAAKA,EAAER,SAAS;;oCACxCS,QAAQ;oCACRP,OAAAA;oCACAQ,cAAcvB,IAAIwB,KAAA,CAAMC,aAAA,IAAiB;oCACzCC,aAAa1B,IAAIwB,KAAA,CAAMG,YAAA,IAAgB;gCAC3C;gCACA;;oCAAO9D;;;;gBACX;;;;YAaM+D,KAAAA;mBAbN,AAaA;;;;;;;;;;GAbA,GAaA,SAAMA,KACFC,QAAA;oBACAd,QAAAA,iEAAmBrF,UAAUgK,IAAA,EAC7B5D,SAAAA,iEAAkB,OAClBC,oDACAC,4DACAC,0DACAC,sDACAC;;uBARJ,oBAAA;wBAWU1C,KAEAO,KAeAnC,MAUIuE,QACAC,QAqBSrC,uBAAAA,eACXA,wBAAAA,gBAAkDA,wBAAAA,gBAGlCA,YACIA,aACLA;;;;gCAxDvB,IAAI,CAAC,MAAKY,GAAA,EAAK,MAAM,IAAIP,MAAM;gCACzBZ,MAAMuB,MAAMC,OAAA,CAAQ,MAAKxB,GAAG,IAAIjC,aAAEa,YAAA,CAAa,MAAKoB,GAAG,IAAI,MAAKA,GAAA;gCAE1D;;oCAAMjC,aAAEM,IAAA,CAChB,GAAW,OAAR,MAAK8C,GAAG,EAAA,yBACX;wCACIG,OAAAA;wCACAc,UAAU,MAAKY,aAAA,CAAcZ;wCAC7BC,QAAAA;wCACAE,aAAAA;wCACAU,OAAOX;wCACPwD,YAAYtD;wCACZC,OAAAA;wCACAU,aAAaT;oCACjB,GACA;wCAAEjB,SAAS;4CAAEC,eAAe,UAAa,OAAH1B;wCAAM;wCAAGU,cAAc2B,SAAS,WAAW;oCAAO;;;gCAZtF9B,MAAM;gCAeNnC,OAAqB;oCACvB2E,SAAS;oCACTzB,OAAAA;oCACAO,QAAQ;oCACRC,cAAc;oCACdsB,kBAAkB;oCAClBnB,aAAa;gCACjB;gCAEA,IAAI1B,AAAA,YAAAA,KAAelD,YAAU;oCACnBsF,SAAS,IAAIvF;oCACbwF,SAAS,IAAItF;oCAEnBsF,OAAOS,EAAA,CAAG,QAAQ,SAAC1E;wCACf,IAAM2E,MAAMvF,aAAEQ,IAAA,CAA4BI,EAAEP,IAAI;wCAChD,IAAIkF,KAAK;gDACUA,qBAAAA,eACXA,sBAAAA,gBAAgDA,sBAAAA,gBAGhCA,YACIA,aACLA;4CANnBlF,KAAK2E,OAAA,GAAUO,EAAAA,gBAAAA,IAAIC,OAAA,CAAQ,EAAC,cAAbD,qCAAAA,sBAAAA,cAAgBE,KAAA,cAAhBF,0CAAAA,oBAAuBP,OAAA,KAAW;4CACjD,KAAIO,iBAAAA,IAAIC,OAAA,CAAQ,EAAC,cAAbD,sCAAAA,uBAAAA,eAAgBE,KAAA,cAAhBF,2CAAAA,qBAAuBG,UAAA,EAAYrF,KAAKqE,KAAA,IAAQa,iBAAAA,IAAIC,OAAA,CAAQ,EAAC,cAAbD,sCAAAA,uBAAAA,eAAgBE,KAAA,cAAhBF,2CAAAA,qBAAuBG,UAAA;4CAC3ErF,KAAKkD,KAAA,GAAQgC,IAAIhC,KAAA,IAASA;4CAC1BlD,KAAKyD,MAAA,GAASyB,IAAIzB,MAAA,IAAU;4CAC5BzD,KAAK0D,YAAA,GAAewB,EAAAA,aAAAA,IAAIvB,KAAA,cAAJuB,iCAAAA,WAAWtB,aAAA,KAAiB;4CAChD5D,KAAKgF,gBAAA,GAAmBE,EAAAA,cAAAA,IAAIvB,KAAA,cAAJuB,kCAAAA,YAAWI,iBAAA,KAAqB;4CACxDtF,KAAK6D,WAAA,GAAcqB,EAAAA,cAAAA,IAAIvB,KAAA,cAAJuB,kCAAAA,YAAWpB,YAAA,KAAgB;4CAC9CS,OAAOgB,KAAA,CAAMlF,KAAKyB,SAAA,CAAU9B;wCAChC;oCACJ;oCACAwE,OAAOS,EAAA,CAAG,SAAS,SAAA1E;+CAAKgE,OAAOiB,OAAA,CAAQjF;;oCACvCiE,OAAOS,EAAA,CAAG,OAAO;+CAAMV,OAAOkB,GAAA;;oCAE9BtD,IAAIuD,IAAA,CAAKvG,cAAa,UAAUuG,IAAA,CAAKlB;oCACrC;;wCAAOD;;gCACX,OAAO;;oCACHvE,KAAK2E,OAAA,GAAUxC,EAAAA,gBAAAA,IAAIgD,OAAA,CAAQ,EAAC,cAAbhD,qCAAAA,wBAAAA,cAAgBwD,OAAA,cAAhBxD,4CAAAA,sBAAyBwC,OAAA,KAAW;oCACnD,KAAIxC,iBAAAA,IAAIgD,OAAA,CAAQ,EAAC,cAAbhD,sCAAAA,yBAAAA,eAAgBwD,OAAA,cAAhBxD,6CAAAA,uBAAyBkD,UAAA,EAAYrF,KAAKqE,KAAA,IAAQlC,iBAAAA,IAAIgD,OAAA,CAAQ,EAAC,cAAbhD,sCAAAA,yBAAAA,eAAgBwD,OAAA,cAAhBxD,6CAAAA,uBAAyBkD,UAAA;oCAC/ErF,KAAKkD,KAAA,GAAQf,IAAIe,KAAA,IAASA;oCAC1BlD,KAAKyD,MAAA,GAAStB,IAAIsB,MAAA,IAAU;oCAC5BzD,KAAK0D,YAAA,GAAevB,EAAAA,aAAAA,IAAIwB,KAAA,cAAJxB,iCAAAA,WAAWyB,aAAA,KAAiB;oCAChD5D,KAAKgF,gBAAA,GAAmB7C,EAAAA,cAAAA,IAAIwB,KAAA,cAAJxB,kCAAAA,YAAWmD,iBAAA,KAAqB;oCACxDtF,KAAK6D,WAAA,GAAc1B,EAAAA,cAAAA,IAAIwB,KAAA,cAAJxB,kCAAAA,YAAW2B,YAAA,KAAgB;oCAC9C;;wCAAO9D;;gCACX;;;;;;gBACJ;;;;YAAA;;;;;GAAA,GAQQ4E,KAAAA;mBAAAA,SAAAA,cAAcZ,QAAA;gBAClB,IAAM6B,SAA2B,EAAC;oBAElC,kCAAA,2BAAA;;oBAAA,QAAA,YAA2C7B,6BAA3C,SAAA,6BAAA,QAAA,yBAAA,iCAAqD;wBAArD,kBAAA,aAAaU,mBAAAA,MAAMC,sBAAAA,SAASuC,kBAAAA,KAAKC,mBAAAA;wBAE7B,OAAQzC;4BACJ,KAAA,OAAA,QAAA;gCACI,IAAIwC,KACArB,OAAOU,IAAA,CAAK;oCACR7B,MAAAA;oCACAC,SAAS;wCACL;4CAAEgC,MAAM;4CAAQS,MAAMzC;wCAAQ;wCAC9B;4CAAEgC,MAAM;4CAAaU,WAAW;gDAAExH,KAAKqH;4CAAI;wCAAE;qCACjD;gCACJ;qCACCrB,OAAOU,IAAA,CAAK;oCAAE7B,MAAAA;oCAAMC,SAAAA;gCAAQ;gCACjC;4BACJ,KAAA,OAAA,QAAA;gCACIkB,OAAOU,IAAA,CAAK;oCACR7B,MAAAA;oCACAC,SAAAA;oCACA2C,cAAcH,QAAQ;gCAC1B;gCACA;4BACJ;gCACItB,OAAOU,IAAA,CAAK;oCAAE7B,MAAAA;oCAAMC,SAAAA;gCAAQ;gCAC5B;wBACR;oBACJ;;oBAzBA;oBAAA;;;6BAAA,6BAAA;4BAAA;;;4BAAA;kCAAA;;;;gBA2BA,OAAOkB;YACX;;;;;AL0sBJ,0BAA0B;AMl4B1B,SAAS7G,eAAAA,YAAAA,EAAaC,YAAAA,SAAAA,QAAgB,SAAA;AACtC,SAAS6I,UAAA,QAAkB,0BAAA;AAC3B,SAAS3I,gBAAAA,aAAAA,QAAoB,aAAA;AAU7B,SAAS4I,OAAA,QAAe,OAAA;AACxB,SAASC,YAAA,QAAoB,KAAA;AAG7B,IAAMpF,OAAM;AACZ,IAAMqF,WAAW;IACb;QAAEC,UAAU;QAA4BC,WAAW;IAAa;IAChE;QAAED,UAAU;QAA6BC,WAAW;IAAa;IACjE;QAAED,UAAU;QAAmCC,WAAW;IAAa;IACvE;QAAED,UAAU;QAAmCC,WAAW;IAAa;CAC3E;AAEA,IAAqBC,uBAArB;;aAAqBA,OASLxG,GAAA;YAAyBmB,MAAAA,iEAAcH;gCATlCwF;QAUb,IAAA,CAAKxG,GAAA,GAAMA;QACX,IAAA,CAAKmB,GAAA,GAAMA;;;;YAUTC,KAAAA;mBATN,AASA;;;;;;GATA,GASA,SAAMA,UAAUC,KAAA;oBAAiBC,QAAAA,gDAAA,WAAA,qBAAA;;uBAAjC,oBAAA;wBACUtB,KAGAyG,SACN,2BAAA,mBAAA,gBAAA,WAAA,OAAWjB,MAQLjF,KAEAnC;;;;gCAdA4B,MAAMuB,MAAMC,OAAA,CAAQ,MAAKxB,GAAG,IAAIjC,aAAEa,YAAA,CAAa,MAAKoB,GAAG,IAAI,MAAKA,GAAA;gCACtE,IAAI,CAACA,KAAK,MAAM,IAAIY,MAAM;gCAEpB6F;gCACN,kCAAA,2BAAA;;oCAAA,IAAA,YAAmBpF,4BAAnB,6BAAA,QAAA,yBAAA,iCAA0B;wCAAfmE,OAAX;wCACIiB,QAAQ9B,IAAA,CACJ5G,aAAEM,IAAA,CACE,GAA6BiD,OAA1B,MAAKH,GAAG,EAAA,mBAA4CnB,OAA1BsB,OAAK,sBAAwB,OAAHtB,MACvD;4CAAEsB,OAAO,UAAe,OAALA;4CAASyB,SAAS;gDAAE2D,KAAA;oDAAQ;wDAAElB,MAAAA;oDAAK;;4CAAG;wCAAE;oCAGvE;;oCAPA;oCAAA;;;6CAAA,6BAAA;4CAAA;;;4CAAA;kDAAA;;;;gCAQY;;oCAAMmB,QAAQC,GAAA,CAAIH;;;gCAAxBlG,MAAM;gCAENnC,OAA0B;oCAC5BgD,WAAWb,IAAIoB,GAAA,CAAI,SAAAC;+CAAKA,EAAER,SAAA,CAAUyF,MAAM;;oCAC1ChF,QAAQ;oCACRP,OAAAA;oCACAQ,cAAc;oCACdG,aAAa;gCACjB;gCACA;;oCAAO7D;;;;gBACX;;;;YAYM+D,KAAAA;mBAZN,AAYA;;;;;;;;;GAZA,GAYA,SAAMA,KACFC,QAAA;oBACAd,QAAAA,gDAAA,eAAA,qBAAA,kBACAe,SAAAA,iEAAkB,OAClBC,oDACAC,4DACAC;;uBANJ,oBAAA;wBAQUxC,KAcAO,qBAiBAnC,MASIuE,QACAC,QAsBQrC,qBAARuG,OAIAC;;;;gCAnEJ/G,MAAMuB,MAAMC,OAAA,CAAQ,MAAKxB,GAAG,IAAIjC,aAAEa,YAAA,CAAa,MAAKoB,GAAG,IAAI,MAAKA,GAAA;gCACtE,IAAI,CAACA,KAAK,MAAM,IAAIY,MAAM;gCAG1B,IAAI,OAAO2B,gBAAgB,UAAU;oCACjC,IAAIA,cAAc,GAAGA,cAAc;oCACnC,IAAIA,cAAc,GAAGA,cAAc;gCACvC;gCAEA,IAAI,OAAOD,QAAQ,UAAU;oCACzB,IAAIA,MAAM,GAAGA,MAAM;oCACnB,IAAIA,MAAM,GAAGA,MAAM;gCACvB;oCAEkBvE,aAAEM,IAAA;;oCAChB,GAA6BiD,OAA1B,MAAKH,GAAG,EAAA,mBAA2BkB,OAATf,OAAK,KAAgEtB,OAA5DqC,SAAS,0BAA0B,mBAAiB,SAAW,OAAHrC;;;gCAEpF;;oCAAM,MAAKgD,aAAA,CAAcZ;;;gCAH/B;;oCAAMrE,QAAAA;+CAGViJ,WAAU,qBACVC,qBAAoB;4CAChBP,OAAO;gDACHlB,MAAMpD,SACDiD,MAAA,CAAO,SAAAzD;2DAAKA,EAAEkB,IAAA,KAAA,SAAA,UAAA;mDACdnB,GAAA,CAAI,SAAAC;2DAAKA,EAAEmB,OAAO;mDAClBvC,IAAA,CAAK;4CACd;wCACJ,SACA0G,mBAAkB;4CAAEC,MAAM7E;4CAAKC,aAAAA;4CAAa6E,iBAAiB5E;wCAAU,SACvE6E,iBAAgBhB;wCAEpB;4CAAE3F,cAAc2B,SAAS,WAAW;wCAAO;;;;gCAfzC9B,MAAM;gCAiBNnC,OAAqB;oCACvB2E,SAAS;oCACTzB,OAAAA;oCACAO,QAAQ;oCACRC,cAAc;oCACdsB,kBAAkB;oCAClBnB,aAAa;gCACjB;gCACA,IAAI1B,AAAA,YAAAA,KAAelD,YAAU;oCACnBsF,SAAS,IAAIvF;oCACbwF,SAAS,IAAIsD;oCAEnBtD,OAAOS,EAAA,CAAG,QAAQ;4CAAGpD,cAAAA;wCACjB,IAAIA,MAAMqH,UAAA,IAAcrH,MAAMsH,cAAA,EAAgB;gDAE5BjE;4CADd,IAAMA,MAAuBrD;4CAC7B,IAAM6G,SAAQxD,sBAAAA,IAAIiE,cAAA,cAAJjE,0CAAAA,oBAAoBkE,WAAA;4CAClC,IAAIV,OAAO,OAAOnE,OAAOiB,OAAA,CAAQ,IAAIhD,MAAM,4BAAiC,OAALkG;4CACvE,IAAI,CAACxD,IAAIgE,UAAA,EAAY,OAAO3E,OAAOiB,OAAA,CAAQ,IAAIhD,MAAM;4CACrD,IAAMmG,YAAYzD,IAAIgE,UAAA,CAAW,EAAC;4CAClC,IAAI,CAACP,UAAUhE,OAAA,EAAS,OAAOJ,OAAOiB,OAAA,CAAQ,IAAIhD,MAAMmG,UAAUU,YAAY;4CAC9ErJ,KAAK2E,OAAA,GAAUgE,UAAUhE,OAAA,CAAQ2D,KAAA,CAAM,EAAC,CAAElB,IAAA,IAAQ;4CAClDpH,KAAKyD,MAAA,GAAS;4CACd,OAAOc,OAAOgB,KAAA,CAAMlF,KAAKyB,SAAA,CAAU9B;wCACvC,OAAO,OAAOuE;oCAClB;oCAEAC,OAAOS,EAAA,CAAG,SAAS,SAAA1E;+CAAKgE,OAAOiB,OAAA,CAAQjF;;oCACvCiE,OAAOS,EAAA,CAAG,OAAO;+CAAMV,OAAOkB,GAAA;;oCAE9BtD,IAAIuD,IAAA,CAAKvG,cAAa,UAAUuG,IAAA,CAAKlB;oCACrC;;wCAAOD;;gCACX,OAAO;;oCACGmE,SAAQvG,sBAAAA,IAAIgH,cAAA,cAAJhH,0CAAAA,oBAAoBiH,WAAA;oCAClC,IAAIV,OAAO,MAAM,IAAIlG,MAAM,4BAAiC,OAALkG;oCACvD,IAAI,CAACvG,IAAI+G,UAAA,EAAY,MAAM,IAAI1G,MAAM;oCAE/BmG,YAAYxG,IAAI+G,UAAA,CAAW,EAAC;oCAClC,IAAI,CAACP,UAAUhE,OAAA,EAAS,MAAM,IAAInC,MAAMmG,UAAUU,YAAY;oCAC9DrJ,KAAK2E,OAAA,GAAUgE,UAAUhE,OAAA,CAAQ2D,KAAA,CAAM,EAAC,CAAElB,IAAA,IAAQuB,UAAUU,YAAA;oCAC5DrJ,KAAKyD,MAAA,GAAS;oCACd;;wCAAOzD;;gCACX;;;;;;gBACJ;;;;YAOc4E,KAAAA;mBAPd,AAOA;;;;GAPA,GAOA,SAAcA,cAAcZ,QAAA;;uBAA5B,oBAAA;wBACU6B,QACF5C,OACAqG,QAEJ,2BAAA,mBAAA,gBAAA,WAAA,oBAAa5E,MAAMC,SAASuC;;;;gCAJtBrB;gCACF5C,QAAQ;gCACRqG,SAAgD;gCAEpD,kCAAA,2BAAA;;;;;;;;;gCAAA,YAAqCtF;;;uCAArC,6BAAA,QAAA;;;;8CAAA,aAAaU,mBAAAA,MAAMC,sBAAAA,SAASuC,kBAAAA;gCACxB,IAAI,CAACvC,SAAS;;;;gCACd,IAAID,SAAA,SAAA,UAAA,KAA8B;;;;qCAC9BwC,KAAAA;;;;gCAAc;;oCAAM,MAAKqC,QAAA,CAASrC;;;gCAA7BoC,SAAS;;;gCAElB,IAAI5E,SAAA,YAAA,aAAA,KAAiCzB,SAAS,KAAY,OAAP0B;qCAC9C;oCACD1B,QAAQA,MAAMuG,IAAA;oCACd3D,OAAOU,IAAA,CAAK;wCACR7B,MAAA,OAAA,QAAA;wCACA4D,OAAOgB;4CACA;gDAAElC,MAAMnE,SAAS;4CAAI;4CAAG;gDAAEwG,aAAa;oDAAEC,WAAWJ,OAAOK,IAAA;oDAAM3J,MAAMsJ,OAAOtJ,IAAA;gDAAK;4CAAE;;4CACrF;gDAAEoH,MAAMnE,SAAS;4CAAI;;oCAChC;oCACA4C,OAAOU,IAAA,CAAK;wCAAE7B,MAAA,QAAA,SAAA;wCAA6B4D,KAAA;4CAAQ;gDAAElB,MAAMzC;4CAAQ;;oCAAG;oCACtE1B,QAAQ;gCACZ;;;gCAhBJ;;;;;;;;;;;;gCAAA;gCAAA;;;;;;;yCAAA,6BAAA;wCAAA;;;wCAAA;8CAAA;;;;;;;gCAkBAA,QAAQA,MAAMuG,IAAA;gCAEd,IAAI,CAACvG,OAAO,MAAM,IAAIT,MAAM;gCAC5BqD,OAAOU,IAAA,CAAK;oCACR7B,MAAA,OAAA,QAAA;oCACA4D,OAAOgB;wCACA;4CAAElC,MAAMnE,SAAS;wCAAI;wCAAG;4CAAEwG,aAAa;gDAAEC,WAAWJ,OAAOK,IAAA;gDAAM3J,MAAMsJ,OAAOtJ,IAAA;4CAAK;wCAAE;;wCACrF;4CAAEoH,MAAMnE,SAAS;wCAAI;;gCAChC;gCAEA;;oCAAOqG;wCAAUzD,MAAA,CAAOA,OAAOhF,MAAA,GAAS,EAAE;wCAAIgF;;;;gBAClD;;;;YAOc0D,KAAAA;mBAPd,AAOA;;;;GAPA,GAOA,SAAcA,SAASrC,GAAA;uBAAvB,oBAAA;wBACQyC,MACA3J,MAQU4J,OAQM,OADVzH;;;;gCAhBNwH,OAAe;gCACf3J,OAAe;qCAEfL,aAAEH,QAAA,CAAS0H,MAAXvH;;;;gCAEA,IAAIA,aAAEH,QAAA,CAAS0H,KAAK,QAAQ;oCACxBlH,OAAOkH;oCACPyC,OAAO;gCACX,OAAO;oCACGC,QAAQ1C,IAAI0C,KAAA,CAAM;oCACxB,IAAIA,OAAO;wCACPD,OAAO,SAAiB,OAARC,KAAA,CAAM,EAAE;wCACxB5J,OAAO4J,KAAA,CAAM,EAAC;oCAClB;gCACJ;;;;;;qCACO1C,IAAI7E,UAAA,CAAW,SAAf6E;;;;gCACa;;oCAAMvH,aAAEC,GAAA,CAAIsH,KAAK,CAAC,GAAG;wCAAE5E,cAAc;oCAAc;;;gCAAjEH,MAAc;gCACpBwH,OAAO,SAAiI,OAAxH,EAAA,QAAA;oCAAC;oCAAO;oCAAO;oCAAQ;oCAAQ;oCAAQ;kCAAQE,IAAA,CAAK,SAAAC;2CAAK5C,IAAI6C,WAAA,GAActF,QAAA,CAASqF;gDAApF,4BAAA,MAAyFE,OAAA,CAAQ,OAAO,YAAW;gCACnIhK,OAAOmC,IAAIlB,QAAA,CAAS;;;;;;gCAEpB0I,OAAO,SAAoD,OAA3C5B,QAAQb,KAAK8C,OAAA,CAAQ,KAAK,IAAID,WAAA;gCAC9C/J,OAAOgI,aAAad,KAAKjG,QAAA,CAAS;;;gCAGtC,IAAI,CAAC0I,QAAQ,CAAC3J,MAAM,MAAM,IAAIwC,MAAM;gCAEpC;;oCAAO;wCAAEmH,MAAAA;wCAAM3J,MAAAA;oCAAK;;;;gBACxB;;;;;;ANo1BJ,2BAA2B;AOjkC3B,SAASiK,UAAA,QAAkB,SAAA;AAC3B,SAASC,QAAA,QAAgB,KAAA;AACzB,SAASlL,eAAAA,YAAAA,EAAaC,YAAAA,SAAAA,QAAgB,SAAA;AACtC,OAAOC,wBAAuB,2BAAA;AAC9B,SAASC,gBAAAA,aAAAA,QAAoB,aAAA;AAc7B,IAAMgL,WAAW;AACjB,IAAMC,cAAc;AACpB,IAAMzH,eAAc;AAEpB,IAAqB0H,wBAArB;;aAAqBA,QAYLC,IAAA,EAA0B1I,GAAA,EAAc2I,MAAA,EAAiBC,KAAA;YAAgBzH,MAAAA,iEAAcoH;gCAZlFE;QAab,IAAA,CAAKC,IAAA,GAAOA;QACZ,IAAA,CAAK1I,GAAA,GAAMA;QACX,IAAA,CAAK2I,MAAA,GAASA;QACd,IAAA,CAAKC,KAAA,GAAQA;QACb,IAAA,CAAKzH,GAAA,GAAMA;;;;YAcTgB,KAAAA;mBAbN,AAaA;;;;;;;;;;GAbA,GAaA,SAAMA,KACFC,QAAA;oBACAd,QAAAA,gDAAA,cAAA,qBAAA,QACAe,SAAAA,iEAAkB,OAClBC,oDACAC,4DACAC,0DACAC,sDACAC;;uBARJ,oBAAA;wBAUU1C,KAcAO,KAcAnC,MASIuE,QACAC,QAsBSrC,uBAAAA,eACXA,wBAAAA,gBAAkDA,wBAAAA,gBAGlCA,YACIA,aACLA;;;;gCAlEjBP,MAAMuB,MAAMC,OAAA,CAAQ,MAAKkH,IAAI,IAAI3K,aAAEa,YAAA,CAAa,MAAK8J,IAAI,IAAI,MAAKA,IAAA;gCACxE,IAAI,CAAC1I,KAAK,MAAM,IAAIY,MAAM;gCAG1B,IAAI,OAAO0B,QAAQ,UAAU;oCACzB,IAAIA,OAAO,GAAGA,MAAM;oCACpB,IAAIA,MAAM,GAAGA,MAAM;gCACvB;gCAEA,IAAI,OAAOC,gBAAgB,UAAU;oCACjC,IAAIA,cAAc,GAAGA,cAAc;oCACnC,IAAIA,cAAc,GAAGA,cAAc;gCACvC;gCAEY;;oCAAMxE,aAAEM,IAAA,CAChB,GAAW,OAAR,MAAK8C,GAAG,EAAA,yBACX;wCACIG,OAAAA;wCACAc,UAAU,MAAKY,aAAA,CAAcZ;wCAC7BC,QAAAA;wCACAE,aAAAA;wCACAU,OAAOX;wCACPwD,YAAYtD;wCACZC,OAAAA;wCACAU,aAAaT;oCACjB,GACA;wCAAEjB,SAAS;4CAAEC,eAAe,UAAa,OAAH1B;wCAAM;wCAAGU,cAAc2B,SAAS,WAAW;oCAAO;;;gCAZtF9B,MAAM;gCAcNnC,OAAqB;oCACvB2E,SAAS;oCACTzB,OAAAA;oCACAO,QAAQ;oCACRC,cAAc;oCACdsB,kBAAkB;oCAClBnB,aAAa;gCACjB;gCACA,IAAI1B,AAAA,YAAAA,KAAelD,YAAU;oCACnBsF,SAAS,IAAIvF;oCACbwF,SAAS,IAAItF;oCAEnBsF,OAAOS,EAAA,CAAG,QAAQ,SAAC1E;wCACf,IAAM2E,MAAMvF,aAAEQ,IAAA,CAAwBI,EAAEP,IAAI;wCAC5C,IAAIkF,KAAK;gDACUA,qBAAAA,eACXA,sBAAAA,gBAAgDA,sBAAAA,gBAGhCA,YACIA,aACLA;4CANnBlF,KAAK2E,OAAA,GAAUO,EAAAA,gBAAAA,IAAIC,OAAA,CAAQ,EAAC,cAAbD,qCAAAA,sBAAAA,cAAgBE,KAAA,cAAhBF,0CAAAA,oBAAuBP,OAAA,KAAW;4CACjD,KAAIO,iBAAAA,IAAIC,OAAA,CAAQ,EAAC,cAAbD,sCAAAA,uBAAAA,eAAgBE,KAAA,cAAhBF,2CAAAA,qBAAuBG,UAAA,EAAYrF,KAAKqE,KAAA,IAAQa,iBAAAA,IAAIC,OAAA,CAAQ,EAAC,cAAbD,sCAAAA,uBAAAA,eAAgBE,KAAA,cAAhBF,2CAAAA,qBAAuBG,UAAA;4CAC3ErF,KAAKkD,KAAA,GAAQA;4CACblD,KAAKyD,MAAA,GAAS;4CACdzD,KAAK0D,YAAA,GAAewB,EAAAA,aAAAA,IAAIvB,KAAA,cAAJuB,iCAAAA,WAAWtB,aAAA,KAAiB;4CAChD5D,KAAKgF,gBAAA,GAAmBE,EAAAA,cAAAA,IAAIvB,KAAA,cAAJuB,kCAAAA,YAAWI,iBAAA,KAAqB;4CACxDtF,KAAK6D,WAAA,GAAcqB,EAAAA,cAAAA,IAAIvB,KAAA,cAAJuB,kCAAAA,YAAWpB,YAAA,KAAgB;4CAC9CS,OAAOgB,KAAA,CAAMlF,KAAKyB,SAAA,CAAU9B;wCAChC;oCACJ;oCAEAwE,OAAOS,EAAA,CAAG,SAAS,SAAA1E;+CAAKgE,OAAOiB,OAAA,CAAQjF;;oCACvCiE,OAAOS,EAAA,CAAG,OAAO;+CAAMV,OAAOkB,GAAA;;oCAE9BtD,IAAIuD,IAAA,CAAKvG,cAAa,UAAUuG,IAAA,CAAKlB;oCACrC;;wCAAOD;;gCACX,OAAO;;oCACHvE,KAAK2E,OAAA,GAAUxC,EAAAA,gBAAAA,IAAIgD,OAAA,CAAQ,EAAC,cAAbhD,qCAAAA,wBAAAA,cAAgBwD,OAAA,cAAhBxD,4CAAAA,sBAAyBwC,OAAA,KAAW;oCACnD,KAAIxC,iBAAAA,IAAIgD,OAAA,CAAQ,EAAC,cAAbhD,sCAAAA,yBAAAA,eAAgBwD,OAAA,cAAhBxD,6CAAAA,uBAAyBkD,UAAA,EAAYrF,KAAKqE,KAAA,IAAQlC,iBAAAA,IAAIgD,OAAA,CAAQ,EAAC,cAAbhD,sCAAAA,yBAAAA,eAAgBwD,OAAA,cAAhBxD,6CAAAA,uBAAyBkD,UAAA;oCAC/ErF,KAAKkD,KAAA,GAAQA;oCACblD,KAAKyD,MAAA,GAAS;oCACdzD,KAAK0D,YAAA,GAAevB,EAAAA,aAAAA,IAAIwB,KAAA,cAAJxB,iCAAAA,WAAWyB,aAAA,KAAiB;oCAChD5D,KAAKgF,gBAAA,GAAmB7C,EAAAA,cAAAA,IAAIwB,KAAA,cAAJxB,kCAAAA,YAAWmD,iBAAA,KAAqB;oCACxDtF,KAAK6D,WAAA,GAAc1B,EAAAA,cAAAA,IAAIwB,KAAA,cAAJxB,kCAAAA,YAAW2B,YAAA,KAAgB;oCAC9C;;wCAAO9D;;gCACX;;;;;;gBACJ;;;;YASM4F,KAAAA;mBATN,AASA;;;;;;GATA,GASA,SAAMA,QACFC,MAAA;oBACAvE,QAAAA,iEAAgB,KAChBC,SAAAA,iEAAiB,KACjB2B,QAAAA,gDAAA,MAAA,qBAAA;;uBAJJ,oBAAA;wBAQUrD,KACAsC,KAQA4D,IACAC,uBACKC,MAGLC,MACAC,MAWAC;;;;gCA5BN,IAAI,CAAC,MAAKoE,KAAA,EAAO,MAAM,IAAIhI,MAAM;gCAE3B3C,MAAM,MAAK4K,aAAA,CAAcvH;gCACnB;;oCAAMvD,aAAEM,IAAA,CAA4CJ,KAAK;wCACjE6K,QAAQ;4CAAEC,QAAQ,MAAKH,KAAA;wCAAM;wCAC7BI,SAAS;4CAAEjF,SAAS;gDAAEyB,IAAA;oDAAO;wDAAE1C,MAAM;wDAAQC,SAASkB;oDAAO;;4CAAG;wCAAE;wCAClEgF,WAAW;4CAAE9G,MAAM;gDAAE+G,QAAQ;gDAAWxJ,OAAAA;gDAAOC,QAAAA;4CAAO;wCAAE;oCAC5D;;;gCAJMY,MAAM;gCAKZ,IAAIA,IAAIuI,MAAA,CAAOK,IAAA,KAAS,GAAG,MAAM,IAAIvI,MAAML,IAAIuI,MAAA,CAAO/E,OAAO;gCAC7D,IAAI,CAACxD,IAAIyI,OAAA,EAAS,MAAM,IAAIpI,MAAM;gCAE5BuD,KAAKpG,aAAEmB,WAAA;gCACPkF;;6CACU7D,IAAIyI,OAAA,CAAQzF,OAAA,CAAQiC,IAAA;;;;;;;;gCAAzBnB;oCACPD,KAAKO,IAAA;gCAAK;;oCAAM5G,aAAEqC,SAAA,CAAUG,IAAIyI,OAAA,CAAQzF,OAAA,CAAQiC,IAAA,CAAKnB,EAAC,CAAEtB,OAAA,EAAS,GAASsB,OAANF,IAAE,KAAK,OAADE,GAAC;;;gCAA3ED,QAAAA;oCAAU;;;;;;;;;;gCAERE,OAAOO,KAAKC,GAAA;gCACZP,OAAqB;oCACvBJ,IAAAA;oCACAY,MAAA,aAAA,cAAA;oCACAC,MAAM;oCACNC,UAAU;oCACVb,MAAAA;oCACAc,MAAM;oCACNC,SAASb;oCACThD,OAAAA;gCACJ;gCAEMkD,QAAwBzG,aAAEoC,OAAA,CAAQY;gCACxCyD,MAAMG,IAAA,CAAKJ;gCACXxG,aAAEgC,OAAA,CAAQgB,cAAayD;gCACvB;;oCAAO;wCAAEY,QAAQb,KAAKJ,EAAA;wCAAIG,MAAAA;oCAAK;;;;gBACnC;;;;YAAA;;;;;GAAA,GAQAC,KAAAA;mBAAAA,SAAAA,KAAKJ,EAAA;gBACD,IAAMK,QAAwBzG,aAAEoC,OAAA,CAAQY,iBAAgB,EAAC;gBAEzD,IAAIoD,IAAI,OAAOK,MAAMa,MAAA,CAAO,SAAAzD;2BAAKA,EAAEuC,EAAA,KAAOA;;qBACrC,OAAOK;YAChB;;;YAAA;;;;GAAA,GAOQqE,KAAAA;mBAAAA,SAAAA,cAAcvH,KAAA;gBAClB,IAAI,CAAC,IAAA,CAAKqH,MAAA,EAAQ,MAAM,IAAI/H,MAAM;gBAClC,IAAI,CAAC,IAAA,CAAKZ,GAAA,EAAK,MAAM,IAAIY,MAAM;gBAE/B,IAAMwI,OAAOd;gBACb,IAAMe,OAAA,AAAO,aAAA,GAAA,IAAIxE,OAAOyE,WAAA;gBACxB,IAAMC,YAAY;gBAClB,IAAM9H,UAAU;gBAChB,IAAM+H,kBAAkB,SAAwBH,OAAfD,MAAI,YAA0B9H,OAAf+H,MAAI,YAAgB,OAAL/H,OAAK;gBACpE,IAAMmI,eAAepB,WAAW,UAAU,IAAA,CAAKM,MAAM,EAAEe,MAAA,CAAOF,iBAAiBG,MAAA,CAAO;gBACtF,IAAMC,YAAYjJ,OAAOE,IAAA,CAAK4I,cAAc,OAAOpK,QAAA,CAAS;gBAC5D,IAAMwK,sBAAsB,YAAqCN,OAAzB,IAAA,CAAKvJ,GAAG,EAAA,kBAAyCyB,OAAxB8H,WAAS,gBAAuCK,OAAxBnI,SAAO,kBAA0B,OAATmI,WAAS;gBAC1H,IAAME,gBAAgBnJ,OAAOE,IAAA,CAAKgJ,qBAAqBxK,QAAA,CAAS;gBAChE,OAAO,GAAkBiC,OAAfkH,aAAW,KAA+BsB,OAA3BxI,OAAK,uBAA4C+H,OAAtBS,eAAa,UAAsBV,OAAbC,MAAI,UAAa,OAAJD;YAC3F;;;YAAA;;;;GAAA,GAOQpG,KAAAA;mBAAAA,SAAAA,cAAcZ,QAAA;gBAClB,IAAM6B,SAA2B,EAAC;oBAElC,kCAAA,2BAAA;;oBAAA,QAAA,YAAgC7B,6BAAhC,SAAA,6BAAA,QAAA,yBAAA,iCAA0C;wBAA1C,kBAAA,aAAaU,mBAAAA,MAAMC,sBAAAA;wBACf,IAAID,SAAA,YAAA,OAAA,KAA2B;wBAC/BmB,OAAOU,IAAA,CAAK;4BAAE7B,MAAAA;4BAAMC,SAAAA;wBAAQ;oBAChC;;oBAHA;oBAAA;;;6BAAA,6BAAA;4BAAA;;;4BAAA;kCAAA;;;;gBAKA,OAAOkB;YACX;;;;;APihCJ,yBAAyB;AQtvCzB,SAAS7G,eAAAA,YAAAA,EAAaC,YAAAA,SAAAA,QAAgB,SAAA;AACtC,OAAOC,wBAAuB,2BAAA;AAC9B,SAASC,gBAAAA,aAAAA,QAAoB,aAAA;AAY7B,IAAMyD,OAAM;AACZ,IAAMD,eAAc;AAEpB,IAAqBgJ,sBAArB;;aAAqBA,MAKL/J,GAAA,EAAc2I,MAAA;YAAiBxH,MAAAA,iEAAcH;gCALxC+I;QAMb,IAAA,CAAK/J,GAAA,GAAMA;QACX,IAAA,CAAK2I,MAAA,GAASA;QACd,IAAA,CAAKxH,GAAA,GAAMA;;;;YAaTgB,KAAAA;mBAZN,AAYA;;;;;;;;;;GAZA,GAYA,SAAMA,KACFC,QAAA;oBACAd,QAAAA,gDAAA,aAAA,qBAAA,eACAe,SAAAA,iEAAkB,OAClBC,oDACAC,4DACAC;;uBANJ,oBAAA;wBAyBoBJ,YANV4H,OAEAzJ,KAaAnC,MASIuE,QACAC,QAwBcrC,YACIA,aACLA;;;;gCA7DvB,IAAI,OAAOgC,gBAAgB,UAAU;oCACjC,IAAIA,eAAe,GAAGA,cAAc;oCACpC,IAAIA,cAAc,GAAGA,cAAc;gCACvC;gCAEA,IAAI,OAAOD,QAAQ,UAAU;oCACzB,IAAIA,MAAM,GAAGA,MAAM;oCACnB,IAAIA,MAAM,GAAGA,MAAM;gCACvB;gCAEc;;oCAAM,MAAK2H,cAAA;;;gCAAnBD,QAAQ;gCAEF;;oCAAMjM,aAAEM,IAAA,CAChB,GAAwDiD,OAArD,MAAKH,GAAG,EAAA,8CAAmE6I,OAAtB1I,OAAK,kBAAsB,OAAL0I,QAC9E;wCACI5H,UAAU,MAAKY,aAAA,CAAcZ;wCAC7B8H,QAAQ9H,EAAAA,aAAAA,QAAA,CAAS,EAAC,cAAVA,iCAAAA,WAAaU,IAAA,MAAA,SAAA,UAAA,MAA+BV,QAAA,CAAS,EAAC,CAAEW,OAAA,GAAU;wCAC1EV,QAAAA;wCACAE,aAAAA;wCACAU,OAAOX;wCACP6H,mBAAmB3H;oCACvB,GACA;wCAAE9B,cAAc2B,SAAS,WAAW;oCAAO;;;gCAVzC9B,MAAM;gCAaNnC,OAAqB;oCACvB2E,SAAS;oCACTzB,OAAAA;oCACAO,QAAQ;oCACRC,cAAc;oCACdsB,kBAAkB;oCAClBnB,aAAa;gCACjB;gCACA,IAAI1B,AAAA,YAAAA,KAAelD,YAAU;oCACnBsF,SAAS,IAAIvF;oCACbwF,SAAS,IAAItF;oCACnBsF,OAAOS,EAAA,CAAG,QAAQ,SAAC1E;wCACf,IAAM2E,MAAMvF,aAAEQ,IAAA,CAAwBI,EAAEP,IAAI;wCAC5C,IAAIkF,KAAK;gDAIeA,YACIA,aACLA;4CALnBlF,KAAK2E,OAAA,GAAUO,IAAInE,MAAA,IAAU;4CAC7Bf,KAAKkD,KAAA,GAAQA;4CACblD,KAAKyD,MAAA,GAASyB,IAAIzB,MAAA;4CAClBzD,KAAK0D,YAAA,GAAewB,EAAAA,aAAAA,IAAIvB,KAAA,cAAJuB,iCAAAA,WAAWtB,aAAA,KAAiB;4CAChD5D,KAAKgF,gBAAA,GAAmBE,EAAAA,cAAAA,IAAIvB,KAAA,cAAJuB,kCAAAA,YAAWI,iBAAA,KAAqB;4CACxDtF,KAAK6D,WAAA,GAAcqB,EAAAA,cAAAA,IAAIvB,KAAA,cAAJuB,kCAAAA,YAAWpB,YAAA,KAAgB;4CAC9CS,OAAOgB,KAAA,CAAMlF,KAAKyB,SAAA,CAAU9B;wCAChC;oCACJ;oCAEAwE,OAAOS,EAAA,CAAG,SAAS,SAAA1E;+CAAKgE,OAAOiB,OAAA,CAAQjF;;oCACvCiE,OAAOS,EAAA,CAAG,OAAO;+CAAMV,OAAOkB,GAAA;;oCAE9BtD,IAAIuD,IAAA,CAAKvG,cAAa,UAAUuG,IAAA,CAAKlB;oCACrC;;wCAAOD;;gCACX,OAAO;;oCACH,IAAIpC,IAAI6J,UAAA,EAAY,MAAM,IAAIxJ,MAAML,IAAI8J,SAAS;oCACjDjM,KAAK2E,OAAA,GAAUxC,IAAIpB,MAAA,IAAU;oCAC7Bf,KAAKkD,KAAA,GAAQA;oCACblD,KAAKyD,MAAA,GAAStB,IAAIsB,MAAA;oCAClBzD,KAAK0D,YAAA,GAAevB,EAAAA,aAAAA,IAAIwB,KAAA,cAAJxB,iCAAAA,WAAWyB,aAAA,KAAiB;oCAChD5D,KAAKgF,gBAAA,GAAmB7C,EAAAA,cAAAA,IAAIwB,KAAA,cAAJxB,kCAAAA,YAAWmD,iBAAA,KAAqB;oCACxDtF,KAAK6D,WAAA,GAAc1B,EAAAA,cAAAA,IAAIwB,KAAA,cAAJxB,kCAAAA,YAAW2B,YAAA,KAAgB;oCAC9C;;wCAAO9D;;gCACX;;;;;;gBACJ;;;;YAGc6L,KAAAA;mBAHd,AAGA,yBAHA;YAGA,SAAcA;;uBAAd,oBAAA;wBAIUnF,KAGAwF,OAIA/J;;;;gCAVN,IAAI,CAAC,MAAKP,GAAA,EAAK,MAAM,IAAIY,MAAM;gCAC/B,IAAI,CAAC,MAAK+H,MAAA,EAAQ,MAAM,IAAI/H,MAAM;gCAE5BkE,MAAMD,KAAKC,GAAA;gCAGXwF,QAAQvM,aAAEoC,OAAA,CAAkCY;gCAClD,IAAIuJ,SAASA,MAAMC,UAAA,GAAazF,KAAK;;oCAAOwF,MAAME,YAAA;;gCAGtC;;oCAAMzM,aAAEC,GAAA,CAAuD,GAAW,OAAR,MAAKmD,GAAG,EAAA,qBAAoB;wCACtGsJ,YAAY;wCACZC,WAAW,MAAK1K,GAAA;wCAChB2K,eAAe,MAAKhC,MAAA;oCACxB;;;gCAJMpI,MAAM;gCAKZ,IAAIA,IAAIqK,KAAA,EAAO,MAAM,IAAIhK,MAAML,IAAIsK,iBAAiB;gCAEpDtK,IAAIgK,UAAA,GAAazF,MAAMvE,IAAIgK,UAAA,GAAa;gCAExCxM,aAAEgC,OAAA,CAAQgB,cAAaR;gCAEvB;;oCAAOA,IAAIiK,YAAA;;;;gBACf;;;;YAAA,0BAAA;YAGQxH,KAAAA;mBAAAA,SAAAA,cAAcZ,QAAA;gBAClB,IAAM6B,SAA6B,EAAC;gBACpC,IAAI5C,QAAQ;gBACZ,IAAQyJ,OAA4BjO,aAA5BiO,MAAMC,YAAsBlO,aAAtBkO,WAAWC,SAAWnO,aAAXmO;oBACzB,kCAAA,2BAAA;;oBAAA,QAAA,YAAgC5I,6BAAhC,SAAA,6BAAA,QAAA,yBAAA,iCAA0C;wBAA1C,kBAAA,aAAaU,mBAAAA,MAAMC,sBAAAA;wBACf,IAAI,CAACA,QAAQ6E,IAAA,MAAU9E,SAASkI,QAAQ;wBACxC,IAAIlI,SAASiI,WAAW1J,SAAS,KAAY,OAAP0B;6BACjC;4BACDkB,OAAOU,IAAA,CAAK;gCAAE7B,MAAMgI;gCAAM/H,SAAS1B,MAAMuG,IAAA,MAAU;4BAAI;4BACvD3D,OAAOU,IAAA,CAAK;gCAAE7B,MAAMiI;gCAAWhI,SAAAA;4BAAQ;4BACvC1B,QAAQ;wBACZ;oBACJ;;oBARA;oBAAA;;;6BAAA,6BAAA;4BAAA;;;4BAAA;kCAAA;;;;gBASA,IAAI,CAACA,MAAMuG,IAAA,IAAQ,MAAM,IAAIhH,MAAM;gBACnCqD,OAAOU,IAAA,CAAK;oBAAE7B,MAAMgI;oBAAM/H,SAAS1B,MAAMuG,IAAA;gBAAO;gBAChD,OAAO3D;YACX;;;;;ARmtCJ,4BAA4B;AS/2C5B,SAAS7G,eAAAA,YAAAA,EAAaC,YAAAA,SAAAA,QAAgB,SAAA;AACtC,OAAOC,wBAAuB,2BAAA;AAC9B,SAASC,gBAAAA,aAAAA,QAAoB,aAAA;AAY7B,IAAMyD,OAAM;AACZ,IAAMC,OAAM;AAEZ,IAAqBgK,yBAArB;;aAAqBA,SASLjL,GAAA;YAAyBmB,MAAAA,iEAAcH;gCATlCiK;QAUb,IAAA,CAAKjL,GAAA,GAAMA;QACX,IAAA,CAAKmB,GAAA,GAAMA;;;;YAcTgB,KAAAA;mBAbN,AAaA;;;;;;;;;;GAbA,GAaA,SAAMA,KACFC,QAAA;oBACAd,QAAAA,gDAAA,cAAA,qBAAA,kBACAe,SAAAA,iEAAkB,OAClBC,oDACAC,4DACAC;;uBANJ,oBAAA;wBAUUxC,KAcAO,KAKAnC,MASIuE,QACAC,QAoBSrC,uBAAAA,eAGKA,YACIA,aACLA;;;;gCAtDjBP,MAAMuB,MAAMC,OAAA,CAAQ,MAAKxB,GAAG,IAAIjC,aAAEa,YAAA,CAAa,MAAKoB,GAAG,IAAI,MAAKA,GAAA;gCACtE,IAAI,CAACA,KAAK,MAAM,IAAIY,MAAM;gCAG1B,IAAI,OAAO2B,gBAAgB,UAAU;oCACjC,IAAIA,cAAc,GAAGA,cAAc;oCACnC,IAAIA,cAAc,GAAGA,cAAc;gCACvC;gCAEA,IAAI,OAAOD,QAAQ,UAAU;oCACzB,IAAIA,MAAM,GAAGA,MAAM;oCACnB,IAAIA,MAAM,GAAGA,MAAM;gCACvB;gCAEY;;oCAAMvE,aAAEM,IAAA,CAChB,GAAe4C,OAAZ,MAAKE,GAAG,EAAA,KAAO,OAAHF,MAAG,sBAClB;wCAAEK,OAAAA;wCAAOc,UAAU,MAAKY,aAAA,CAAcZ;wCAAWC,QAAAA;wCAAQE,aAAAA;wCAAaU,OAAOX;wCAAKwD,YAAYtD;oCAAU,GACxG;wCAAEf,SAAS;4CAAEC,eAAe,UAAa,OAAH1B;wCAAM;wCAAGU,cAAc2B,SAAS,WAAW;oCAAO;;;gCAHtF9B,MAAM;gCAKNnC,OAAqB;oCACvB2E,SAAS;oCACTzB,OAAAA;oCACAO,QAAQ;oCACRC,cAAc;oCACdsB,kBAAkB;oCAClBnB,aAAa;gCACjB;gCACA,IAAI1B,AAAA,YAAAA,KAAelD,YAAU;oCACnBsF,SAAS,IAAIvF;oCACbwF,SAAS,IAAItF;oCACnBsF,OAAOS,EAAA,CAAG,QAAQ,SAAC1E;wCACf,IAAM2E,MAAMvF,aAAEQ,IAAA,CAA4BI,EAAEP,IAAI;wCAChD,IAAIkF,KAAK;gDACUA,qBAAAA,eAGKA,YACIA,aACLA;4CALnBlF,KAAK2E,OAAA,GAAUO,EAAAA,gBAAAA,IAAIC,OAAA,CAAQ,EAAC,cAAbD,qCAAAA,sBAAAA,cAAgBE,KAAA,cAAhBF,0CAAAA,oBAAuBP,OAAA,KAAW;4CACjD3E,KAAKkD,KAAA,GAAQgC,IAAIhC,KAAA;4CACjBlD,KAAKyD,MAAA,GAASyB,IAAIzB,MAAA;4CAClBzD,KAAK0D,YAAA,GAAewB,EAAAA,aAAAA,IAAIvB,KAAA,cAAJuB,iCAAAA,WAAWtB,aAAA,KAAiB;4CAChD5D,KAAKgF,gBAAA,GAAmBE,EAAAA,cAAAA,IAAIvB,KAAA,cAAJuB,kCAAAA,YAAWI,iBAAA,KAAqB;4CACxDtF,KAAK6D,WAAA,GAAcqB,EAAAA,cAAAA,IAAIvB,KAAA,cAAJuB,kCAAAA,YAAWpB,YAAA,KAAgB;4CAC9CS,OAAOgB,KAAA,CAAMlF,KAAKyB,SAAA,CAAU9B;wCAChC;oCACJ;oCAEAwE,OAAOS,EAAA,CAAG,SAAS,SAAA1E;+CAAKgE,OAAOiB,OAAA,CAAQjF;;oCACvCiE,OAAOS,EAAA,CAAG,OAAO;+CAAMV,OAAOkB,GAAA;;oCAE9BtD,IAAIuD,IAAA,CAAKvG,cAAa,UAAUuG,IAAA,CAAKlB;oCACrC;;wCAAOD;;gCACX,OAAO;;oCACHvE,KAAK2E,OAAA,GAAUxC,EAAAA,gBAAAA,IAAIgD,OAAA,CAAQ,EAAC,cAAbhD,qCAAAA,wBAAAA,cAAgBwD,OAAA,cAAhBxD,4CAAAA,sBAAyBwC,OAAA,KAAW;oCACnD3E,KAAKkD,KAAA,GAAQf,IAAIe,KAAA;oCACjBlD,KAAKyD,MAAA,GAAStB,IAAIsB,MAAA;oCAClBzD,KAAK0D,YAAA,GAAevB,EAAAA,aAAAA,IAAIwB,KAAA,cAAJxB,iCAAAA,WAAWyB,aAAA,KAAiB;oCAChD5D,KAAKgF,gBAAA,GAAmB7C,EAAAA,cAAAA,IAAIwB,KAAA,cAAJxB,kCAAAA,YAAWmD,iBAAA,KAAqB;oCACxDtF,KAAK6D,WAAA,GAAc1B,EAAAA,cAAAA,IAAIwB,KAAA,cAAJxB,kCAAAA,YAAW2B,YAAA,KAAgB;oCAC9C;;wCAAO9D;;gCACX;;;;;;gBACJ;;;;YAAA;;;;;GAAA,GAQQ4E,KAAAA;mBAAAA,SAAAA,cAAcZ,QAAA;gBAClB,IAAM6B,SAA2B,EAAC;oBAElC,kCAAA,2BAAA;;oBAAA,QAAA,YAAgC7B,6BAAhC,SAAA,6BAAA,QAAA,yBAAA,iCAA0C;wBAA1C,kBAAA,aAAaU,mBAAAA,MAAMC,sBAAAA;wBACf,IAAID,SAAA,OAAA,QAAA,OAA8BA,SAAA,YAAA,OAAA,KAA2B;wBAE7DmB,OAAOU,IAAA,CAAK;4BAAE7B,MAAAA;4BAAMC,SAAAA;wBAAQ;oBAChC;;oBAJA;oBAAA;;;6BAAA,6BAAA;4BAAA;;;4BAAA;kCAAA;;;;gBAMA,OAAOkB;YACX;;;;;ATg1CJ,8BAA8B;AUh8C9B,IAAqBiH,2BAArB;;aAAqBA,WAKLC,KAAA,EAAgBnB,KAAA,EAAgBoB,QAAA;gCAL3BF;QAMb,IAAA,CAAKC,KAAA,GAAQA;QACb,IAAA,CAAKnB,KAAA,GAAQA;QACb,IAAA,CAAKoB,QAAA,GAAWA;;;;YAWdpH,KAAAA;mBAVN,AAUA;;;;;;;GAVA,GAUA,SAAMA,QACFC,MAAA;oBACAoH,UAAAA,iEAAkB,IAClB3L,QAAAA,iEAAgB,MAChBC,SAAAA,iEAAiB;;uBAJrB,oBAAA;wBAQU2L,QACA/K;;;;gCAHN,IAAI,CAAC,MAAK4K,KAAA,EAAO,MAAM,IAAIvK,MAAM;gCAE3B0K,SAASvN,aAAE0B,SAAA,CAAUC,OAAOC;gCACtB;;oCAAM5B,aAAEM,IAAA,CAChB,GAAa,OAAV,MAAK8M,KAAK,EAAA,uBACb;wCAAElH,QAAQ,GAAkBqH,OAAfrH,QAAM,UAAmBoH,OAAVC,QAAM,KAAoC,OAAhCD,UAAU,UAAUA,UAAU;oCAAK,GACzE;wCAAE5J,SAAS;4CAAE,iBAAiB,MAAKuI,KAAA;wCAAM;oCAAE;;;gCAHzCzJ,MAAM;gCAKZ,IAAIA,IAAI4I,IAAA,KAAS,GAAG,MAAM,IAAIvI,MAAML,IAAIgL,WAAW;gCACnD;;oCAAO;wCAAEnG,QAAQ7E,IAAIpB,MAAA;wCAAQmF,MAAMO,KAAKC,GAAA;oCAAM;;;;gBAClD;;;;YAOMP,KAAAA;mBAPN,AAOA;;;;GAPA,GAOA,SAAMA,KAAKJ,EAAA;;uBAAX,oBAAA;wBAIc5D,KAKItC,KACAuN,kBAmBJjL;;;;gCA5BV,IAAI,CAAC,MAAK4K,KAAA,EAAO,MAAM,IAAIvK,MAAM;qCAE7BuD,IAAAA;;;;gCACY;;oCAAMpG,aAAEC,GAAA,CAA0B,GAAyBmG,OAAtB,MAAKgH,KAAK,EAAA,aAAc,OAAFhH,IAAE,WAAU,MAAM;wCACrF1C,SAAS;4CAAE,iBAAiB,MAAKuI,KAAA;wCAAM;oCAC3C;;;gCAFMzJ,MAAM;gCAIZ,IAAIA,IAAIkL,QAAA,IAAY,MAAKL,QAAA,EAAU;oCACzBnN,MAAM,IAAIyN,IAAInL,IAAIkL,QAAQ;oCAC1BD,MAAM,IAAIE,IAAI,MAAKN,QAAQ;oCACjCnN,IAAIqK,QAAA,GAAWkD,IAAIlD,QAAA;oCACnBrK,IAAI0N,QAAA,GAAWH,IAAIG,QAAA;oCACnB1N,IAAI2N,IAAA,GAAOJ,IAAII,IAAA;oCACfrL,IAAIkL,QAAA,GAAWxN,IAAIoB,QAAA;gCACvB;;oCAGQ8E,IAAI5D,IAAI4D,EAAA;oCACRY,MAAMxE,IAAIsL,MAAA;;qCACJtL,IAAIkL,QAAA,EAAJlL;;;;gCAAgB;;oCAAMxC,aAAEqC,SAAA,CAAUG,IAAIkL,QAAA,EAAU,GAAS,OAANlL,IAAI4D,EAAE,EAAA;;;;oCAAzC;;;;;;;;;;gCAJ9B;;;8CAIQC,mBACAY,OAAMzE,IAAIgL,WAAA,OACVrG,OAAM3E,IAAIuL,UAAA,IAAc,SACxB7G,WAAU8G,SAASxL,IAAI0E,QAAQ,KAAK,QACpCE,UAAS5E,IAAIyL,SAAA,OACb1K,QAAA,aAAA,MAAA;;;;gCAII;;oCAAMvD,aAAEC,GAAA,CAA4B,GAAa,OAAV,MAAKmN,KAAK,EAAA,kBAAiB,MAAM;wCAChF1J,SAAS;4CAAE,iBAAiB,MAAKuI,KAAA;wCAAM;oCAC3C;;;gCAFMzJ,OAAM;gCAGZ;;oCAAOA,KAAIoB,GAAA,CAAI,SAAAC;+CAAM;4CACjBuC,IAAIvC,EAAEuC,EAAA;4CACNY,MAAMnD,EAAEiK,MAAA;4CACRzH,MAAMxC,EAAE6J,QAAA,GAAW;gDAAC7J,EAAE6J,QAAQ;6CAAA,GAAI,EAAC;4CACnCzG,MAAMpD,EAAE2J,WAAA;4CACRrG,MAAMtD,EAAEkK,UAAA,IAAc;4CACtB7G,UAAU8G,SAASnK,EAAEqD,QAAQ;4CAC7BE,SAASvD,EAAEoK,SAAA;4CACX1K,OAAA,aAAA,MAAA;wCACJ;;;;;;;;;gBAER;;;;YASM2K,KAAAA;mBATN,AASA;;;;;;GATA,GASA,SAAMA,OAAO7G,MAAA,EAAgByG,MAAA,EAAoBK,KAAA;;uBAAjD,oBAAA;wBAGU3L;;;;gCAFN,IAAI,CAAC,MAAK4K,KAAA,EAAO,MAAM,IAAIvK,MAAM;gCAErB;;oCAAM7C,aAAEM,IAAA,CAChB,GAAa,OAAV,MAAK8M,KAAK,EAAA,sBACb;wCAAE/F,QAAAA;wCAAQyG,QAAAA;wCAAQK,OAAAA;oCAAM,GACxB;wCAAEzK,SAAS;4CAAE,iBAAiB,MAAKuI,KAAA;wCAAM;oCAAE;;;gCAHzCzJ,MAAM;gCAKZ;;oCAAO;wCAAE6E,QAAQ7E,IAAIpB,MAAA;wCAAQmF,MAAMO,KAAKC,GAAA;oCAAM;;;;gBAClD;;;;;;AVq7CJ,6BAA6B;AW/hD7B,IAAM9D,OAAM;AACZ,IAAMD,eAAc;AAEpB,IAAqBoL,0BAArB;;aAAqBA,UAILnM,GAAA;YAAyBmB,MAAAA,iEAAcH;gCAJlCmL;QAKb,IAAA,CAAKnM,GAAA,GAAMA;QACX,IAAA,CAAKmB,GAAA,GAAMA;;;;YAcT6C,KAAAA;mBAbN,AAaA;;;;;;;;;;GAbA,GAaA,SAAMA,QACFC,MAAA;oBACAmI,iBAAAA,iEAAyB,IACzB1M,QAAAA,iEAAgB,MAChBC,SAAAA,iEAAiB,MACjB0M,UAAAA,iEAAkB,GAClB/K,QAAAA,gDAAA,UAAA,qBAAA;;uBANJ,oBAAA;wBAQUtB,KAEAsM,SAGA/L,KAMA4D,IACAC,uBACKC,MAELC,MACAC,MAWAC;;;;gCA3BAxE,MAAMuB,MAAMC,OAAA,CAAQ,MAAKxB,GAAG,IAAIjC,aAAEa,YAAA,CAAa,MAAKoB,GAAG,IAAI,MAAKA,GAAA;gCACtE,IAAI,CAACA,KAAK,MAAM,IAAIY,MAAM;gCACpB0L;oCAAW;wCAAE9G,MAAMvB;wCAAQsI,QAAQ;oCAAE;;gCAC3C,IAAIH,gBAAgBE,QAAQ3H,IAAA,CAAK;oCAAEa,MAAM4G;oCAAgBG,QAAQ,CAAA;gCAAG;gCAExD;;oCAAMxO,aAAEM,IAAA,CAChB,GAA2CiD,OAAxC,MAAKH,GAAG,EAAA,QAAA,aAAA,cAAA,KAA4B,KAAS,OAALG,OAAK,mBAChD;wCAAE5B,OAAAA;wCAAOC,QAAAA;wCAAQ0M,SAAAA;wCAASG,cAAcF;oCAAQ,GAChD;wCAAE7K,SAAS;4CAAEgL,QAAQ;4CAAoB/K,eAAe,UAAa,OAAH1B;wCAAM;oCAAE;;;gCAHxEO,MAAM;gCAMN4D,KAAKpG,aAAEmB,WAAA;gCACPkF;;6CACU7D,IAAImM,SAAA;;;;;;;;gCAATrI;oCAAoBD,KAAKO,IAAA;gCAAK;;oCAAM5G,aAAEqC,SAAA,CAAUG,IAAImM,SAAA,CAAUrI,EAAC,CAAEqD,MAAA,EAAQ,GAASrD,OAANF,IAAE,KAAK,OAADE,GAAC;;;gCAA/DD,QAAAA;oCAAU;;;;;;;;;;gCAEnCE,OAAOO,KAAKC,GAAA;gCACZP,OAAqB;oCACvBJ,IAAAA;oCACAY,MAAA,aAAA,cAAA;oCACAC,MAAMzE,IAAImM,SAAA,CAAU,EAAC,CAAEjF,YAAA;oCACvBxC,UAAU;oCACVb,MAAAA;oCACAc,MAAM;oCACNC,SAASb;oCACThD,OAAAA;gCACJ;gCAEMkD,QAAwBzG,aAAEoC,OAAA,CAAQY;gCACxCyD,MAAMG,IAAA,CAAKJ;gCACXxG,aAAEgC,OAAA,CAAQgB,cAAayD;gCACvB;;oCAAO;wCAAEY,QAAQb,KAAKJ,EAAA;wCAAIG,MAAAA;oCAAK;;;;gBACnC;;;;YAAA;;;;;GAAA,GAQAC,KAAAA;mBAAAA,SAAAA,KAAKJ,EAAA;gBACD,IAAMK,QAAwBzG,aAAEoC,OAAA,CAAQY,iBAAgB,EAAC;gBAEzD,IAAIoD,IAAI,OAAOK,MAAMa,MAAA,CAAO,SAAAzD;2BAAKA,EAAEuC,EAAA,KAAOA;;qBACrC,OAAOK;YAChB;;;;;AXihDJ,0BAA0B;AYxmD1B,SAASpH,eAAAA,YAAAA,EAAaC,YAAAA,SAAAA,QAAgB,SAAA;AACtC,OAAOC,wBAAuB,2BAAA;AAC9B,SAASC,gBAAAA,aAAAA,QAAoB,aAAA;AAc7B,IAAMyD,OAAM;AACZ,IAAMC,OAAM;AAEZ,IAAqB0L,uBAArB;;aAAqBA,OASL3M,GAAA;YAAyBmB,MAAAA,iEAAcH;gCATlC2L;QAUb,IAAA,CAAK3M,GAAA,GAAMA;QACX,IAAA,CAAKmB,GAAA,GAAMA;;;;YAWTC,KAAAA;mBAVN,AAUA;;;;;;;GAVA,GAUA,SAAMA,UAAUC,KAAA;oBAAiBC,QAAAA,gDAAA,UAAA,qBAAA,qBAA6CuE,aAAAA,iEAAa;;uBAA3F,oBAAA;wBACU7F,KAGAO,KAMAnC;;;;gCATA4B,MAAMuB,MAAMC,OAAA,CAAQ,MAAKxB,GAAG,IAAIjC,aAAEa,YAAA,CAAa,MAAKoB,GAAG,IAAI,MAAKA,GAAA;gCACtE,IAAI,CAACA,KAAK,MAAM,IAAIY,MAAM;gCAEd;;oCAAM7C,aAAEM,IAAA,CAChB,GAA+B4C,OAA5B,MAAKE,GAAG,EAAA,qBAAuB,OAAHF,MAAG,gBAClC;wCAAEK,OAAAA;wCAAOD,OAAAA;wCAAOwE,YAAAA;oCAAW,GAC3B;wCAAEpE,SAAS;4CAAEC,eAAe,UAAa,OAAH1B;wCAAM;wCAAGU,cAAc;oCAAO;;;gCAHlEH,MAAM;gCAMNnC,OAA0B;oCAC5BgD,WAAWb,IAAInC,IAAA,CAAKuD,GAAA,CAAI,SAAAC;+CAAKA,EAAER,SAAS;;oCACxCS,QAAQ;oCACRP,OAAAA;oCACAQ,cAAcvB,IAAIwB,KAAA,CAAMC,aAAA,IAAiB;oCACzCC,aAAa1B,IAAIwB,KAAA,CAAMG,YAAA,IAAgB;gCAC3C;gCACA;;oCAAO9D;;;;gBACX;;;;YAaM+D,KAAAA;mBAbN,AAaA;;;;;;;;;;GAbA,GAaA,SAAMA,KACFC,QAAA;oBACAd,QAAAA,gDAAA,cAAA,qBAAA,cACAe,SAAAA,iEAAkB,OAClBC,oDACAC,4DACAC;;uBANJ,oBAAA;wBAUUxC,KAkBAO,KAYAnC,MASIuE,QACAC,QAoBSrC,uBAAAA,eACXA,wBAAAA,gBAAkDA,wBAAAA,gBAGlCA,YACIA,aACLA;;;;gCAlEjBP,MAAMuB,MAAMC,OAAA,CAAQ,MAAKxB,GAAG,IAAIjC,aAAEa,YAAA,CAAa,MAAKoB,GAAG,IAAI,MAAKA,GAAA;gCACtE,IAAI,CAACA,KAAK,MAAM,IAAIY,MAAM;gCAG1B,IAAI,OAAO2B,gBAAgB,UAAU;oCACjC,IAAIA,cAAc,GAAGA,cAAc;oCACnC,IAAIA,eAAe,GAAGA,cAAc;gCACxC;gCAEA,IAAI,OAAOD,QAAQ,UAAU;oCACzB,IAAIA,OAAO,GAAGA,MAAM;oCACpB,IAAIA,MAAM,GAAGA,MAAM;gCACvB;gCAGA,IAAI,CAAC;oCAAA,cAAA,eAAA;oCAAA,eAAA,gBAAA;kCAAsDO,QAAA,CAASvB,QAChEc,WAAWA,SAAST,GAAA,CAAI;wCAAGmB,aAAAA,MAAMC,gBAAAA;2CAAe;wCAAED,MAAAA;wCAAMC,SAAAA;oCAAQ;;gCAExD;;oCAAMhF,aAAEM,IAAA,CAChB,GAA+B4C,OAA5B,MAAKE,GAAG,EAAA,qBAAuB,OAAHF,MAAG,sBAClC;wCACIK,OAAAA;wCACAc,UAAU,MAAKY,aAAA,CAAcZ;wCAC7BC,QAAAA;wCACAE,aAAAA;wCACAU,OAAOX;wCACPwD,YAAYtD;oCAChB,GACA;wCAAEf,SAAS;4CAAEC,eAAe,UAAa,OAAH1B;wCAAM;wCAAGU,cAAc2B,SAAS,WAAW;oCAAO;;;gCAVtF9B,MAAM;gCAYNnC,OAAqB;oCACvB2E,SAAS;oCACTzB,OAAAA;oCACAO,QAAQ;oCACRC,cAAc;oCACdsB,kBAAkB;oCAClBnB,aAAa;gCACjB;gCACA,IAAI1B,AAAA,YAAAA,KAAelD,YAAU;oCACnBsF,SAAS,IAAIvF;oCACbwF,SAAS,IAAItF;oCACnBsF,OAAOS,EAAA,CAAG,QAAQ,SAAC1E;wCACf,IAAM2E,MAAMvF,aAAEQ,IAAA,CAA4BI,EAAEP,IAAI;wCAChD,IAAIkF,KAAK;gDACUA,qBAAAA,eAGKA,YACIA,aACLA;4CALnBlF,KAAK2E,OAAA,GAAUO,CAAAA,gBAAAA,2BAAAA,gBAAAA,IAAKC,OAAA,CAAQ,EAAC,cAAdD,qCAAAA,sBAAAA,cAAiBE,KAAA,cAAjBF,0CAAAA,oBAAwBP,OAAA,KAAW;4CAClD3E,KAAKkD,KAAA,GAAQgC,IAAIhC,KAAA;4CACjBlD,KAAKyD,MAAA,GAASyB,IAAIzB,MAAA;4CAClBzD,KAAK0D,YAAA,GAAewB,EAAAA,aAAAA,IAAIvB,KAAA,cAAJuB,iCAAAA,WAAWtB,aAAA,KAAiB;4CAChD5D,KAAKgF,gBAAA,GAAmBE,EAAAA,cAAAA,IAAIvB,KAAA,cAAJuB,kCAAAA,YAAWI,iBAAA,KAAqB;4CACxDtF,KAAK6D,WAAA,GAAcqB,EAAAA,cAAAA,IAAIvB,KAAA,cAAJuB,kCAAAA,YAAWpB,YAAA,KAAgB;4CAC9CS,OAAOgB,KAAA,CAAMlF,KAAKyB,SAAA,CAAU9B;wCAChC;oCACJ;oCAEAwE,OAAOS,EAAA,CAAG,SAAS,SAAA1E;+CAAKgE,OAAOiB,OAAA,CAAQjF;;oCACvCiE,OAAOS,EAAA,CAAG,OAAO;+CAAMV,OAAOkB,GAAA;;oCAE9BtD,IAAIuD,IAAA,CAAKvG,cAAa,UAAUuG,IAAA,CAAKlB;oCACrC;;wCAAOD;;gCACX,OAAO;;oCACHvE,KAAK2E,OAAA,GAAUxC,EAAAA,gBAAAA,IAAIgD,OAAA,CAAQ,EAAC,cAAbhD,qCAAAA,wBAAAA,cAAgBwD,OAAA,cAAhBxD,4CAAAA,sBAAyBwC,OAAA,KAAW;oCACnD,KAAIxC,iBAAAA,IAAIgD,OAAA,CAAQ,EAAC,cAAbhD,sCAAAA,yBAAAA,eAAgBwD,OAAA,cAAhBxD,6CAAAA,uBAAyBkD,UAAA,EAAYrF,KAAKqE,KAAA,IAAQlC,iBAAAA,IAAIgD,OAAA,CAAQ,EAAC,cAAbhD,sCAAAA,yBAAAA,eAAgBwD,OAAA,cAAhBxD,6CAAAA,uBAAyBkD,UAAA;oCAC/ErF,KAAKkD,KAAA,GAAQf,IAAIe,KAAA;oCACjBlD,KAAKyD,MAAA,GAAStB,IAAIsB,MAAA,IAAU;oCAC5BzD,KAAK0D,YAAA,GAAevB,EAAAA,aAAAA,IAAIwB,KAAA,cAAJxB,iCAAAA,WAAWyB,aAAA,KAAiB;oCAChD5D,KAAKgF,gBAAA,GAAmB7C,EAAAA,cAAAA,IAAIwB,KAAA,cAAJxB,kCAAAA,YAAWmD,iBAAA,KAAqB;oCACxDtF,KAAK6D,WAAA,GAAc1B,EAAAA,cAAAA,IAAIwB,KAAA,cAAJxB,kCAAAA,YAAW2B,YAAA,KAAgB;oCAC9C;;wCAAO9D;;gCACX;;;;;;gBACJ;;;;YAAA;;;;;GAAA,GAQQ4E,KAAAA;mBAAAA,SAAAA,cAAcZ,QAAA;gBAClB,IAAM6B,SAA2B,EAAC;oBAElC,kCAAA,2BAAA;;oBAAA,QAAA,YAAqC7B,6BAArC,SAAA,6BAAA,QAAA,yBAAA,iCAA+C;wBAA/C,kBAAA,aAAaU,mBAAAA,MAAMC,sBAAAA,SAASuC,kBAAAA;wBAExB,IAAIxC,SAAA,OAAA,QAAA,OAA8BA,SAAA,YAAA,OAAA,KAA2B;wBAG7D,IAAIwC,KAAK;4BACL,IAAI,CAACA,IAAI7E,UAAA,CAAW,SAAS,MAAM,IAAIG,MAAM;4BAC7CqD,OAAOU,IAAA,CAAK;gCACR7B,MAAM;gCACNC,SAAS;oCACL;wCAAEgC,MAAM;wCAAQS,MAAMzC;oCAAQ;oCAC9B;wCAAEgC,MAAM;wCAAaU,WAAW;4CAAExH,KAAKqH;wCAAI;oCAAE;iCACjD;4BACJ;wBACJ,OAEKrB,OAAOU,IAAA,CAAK;4BAAE7B,MAAAA;4BAAMC,SAAAA;wBAAQ;oBACrC;;oBAjBA;oBAAA;;;6BAAA,6BAAA;4BAAA;;;4BAAA;kCAAA;;;;gBAmBA,OAAOkB;YACX;;;;;AZ8jDJ,4BAA4B;AapvD5B,SAAS7G,eAAAA,YAAAA,EAAaC,YAAAA,SAAAA,QAAgB,SAAA;AACtC,OAAOC,wBAAuB,2BAAA;AAC9B,SAASC,gBAAAA,aAAAA,QAAoB,aAAA;AAM7B,IAAMyD,OAAM;AAEZ,IAAqB4L,yBAArB;;aAAqBA,SASL5M,GAAA;YAAyBmB,MAAAA,iEAAcH;gCATlC4L;QAUb,IAAA,CAAK5M,GAAA,GAAMA;QACX,IAAA,CAAKmB,GAAA,GAAMA;;;;YAcTgB,KAAAA;mBAbN,AAaA;;;;;;;;;;GAbA,GAaA,SAAMA,KACFC,QAAA;oBACAd,QAAAA,gDAAA,eAAA,qBAAA,iBACAe,SAAAA,iEAAkB,OAClBC,oDACAC,4DACAC;;uBANJ,oBAAA;wBAUUxC,KAmBAO,KAaAnC,MAUIuE,QACAC,QAoBSrC,uBAAAA,eACXA,wBAAAA,gBAAkDA,wBAAAA,gBAGlCA,YACIA,aACLA;;;;gCArEjBP,MAAMuB,MAAMC,OAAA,CAAQ,MAAKxB,GAAG,IAAIjC,aAAEa,YAAA,CAAa,MAAKoB,GAAG,IAAI,MAAKA,GAAA;gCACtE,IAAI,CAACA,KAAK,MAAM,IAAIY,MAAM;gCAE1B,IAAI,OAAO4B,cAAc,UAAU;oCAC/B,IAAIA,YAAY,GAAGA,YAAY;oCAC/B,IAAIA,YAAY,MAAMA,YAAY;gCACtC;gCAGA,IAAI,OAAOD,gBAAgB,UAAU;oCACjC,IAAIA,cAAc,GAAGA,cAAc;oCACnC,IAAIA,cAAc,GAAGA,cAAc;gCACvC;gCAEA,IAAI,OAAOD,QAAQ,UAAU;oCACzB,IAAIA,OAAO,GAAGA,MAAM;oCACpB,IAAIA,MAAM,GAAGA,MAAM;gCACvB;gCAEY;;oCAAMvE,aAAEM,IAAA,CAChB,GAAW,OAAR,MAAK8C,GAAG,EAAA,sBACX;wCACIG,OAAAA;wCACAc,UAAU,MAAKY,aAAA,CAAcZ;wCAC7BC,QAAAA;wCACAE,aAAAA;wCACAU,OAAOX;wCACPwD,YAAYtD;oCAChB,GACA;wCAAEf,SAAS;4CAAEC,eAAe,UAAa,OAAH1B;wCAAM;wCAAGU,cAAc2B,SAAS,WAAW;oCAAO;;;gCAVtF9B,MAAM;gCAaNnC,OAAqB;oCACvB2E,SAAS;oCACTzB,OAAAA;oCACAO,QAAQ;oCACRC,cAAc;oCACdsB,kBAAkB;oCAClBnB,aAAa;gCACjB;gCAEA,IAAI1B,AAAA,YAAAA,KAAelD,YAAU;oCACnBsF,SAAS,IAAIvF;oCACbwF,SAAS,IAAItF;oCAEnBsF,OAAOS,EAAA,CAAG,QAAQ,SAAC1E;wCACf,IAAM2E,MAAMvF,aAAEQ,IAAA,CAAqBI,EAAEP,IAAI;wCACzC,IAAIkF,KAAK;gDACUA,qBAAAA,eAGKA,YACIA,aACLA;4CALnBlF,KAAK2E,OAAA,GAAUO,EAAAA,gBAAAA,IAAIC,OAAA,CAAQ,EAAC,cAAbD,qCAAAA,sBAAAA,cAAgBE,KAAA,cAAhBF,0CAAAA,oBAAuBP,OAAA,KAAW;4CACjD3E,KAAKkD,KAAA,GAAQgC,IAAIhC,KAAA;4CACjBlD,KAAKyD,MAAA,GAASyB,IAAIzB,MAAA;4CAClBzD,KAAK0D,YAAA,GAAewB,EAAAA,aAAAA,IAAIvB,KAAA,cAAJuB,iCAAAA,WAAWtB,aAAA,KAAiB;4CAChD5D,KAAKgF,gBAAA,GAAmBE,EAAAA,cAAAA,IAAIvB,KAAA,cAAJuB,kCAAAA,YAAWI,iBAAA,KAAqB;4CACxDtF,KAAK6D,WAAA,GAAcqB,EAAAA,cAAAA,IAAIvB,KAAA,cAAJuB,kCAAAA,YAAWpB,YAAA,KAAgB;4CAC9CS,OAAOgB,KAAA,CAAMlF,KAAKyB,SAAA,CAAU9B;wCAChC;oCACJ;oCACAwE,OAAOS,EAAA,CAAG,SAAS,SAAA1E;+CAAKgE,OAAOiB,OAAA,CAAQjF;;oCACvCiE,OAAOS,EAAA,CAAG,OAAO;+CAAMV,OAAOkB,GAAA;;oCAE9BtD,IAAIuD,IAAA,CAAKvG,cAAa,UAAUuG,IAAA,CAAKlB;oCACrC;;wCAAOD;;gCACX,OAAO;;oCACHvE,KAAK2E,OAAA,GAAUxC,EAAAA,gBAAAA,IAAIgD,OAAA,CAAQ,EAAC,cAAbhD,qCAAAA,wBAAAA,cAAgBwD,OAAA,cAAhBxD,4CAAAA,sBAAyBwC,OAAA,KAAW;oCACnD,KAAIxC,iBAAAA,IAAIgD,OAAA,CAAQ,EAAC,cAAbhD,sCAAAA,yBAAAA,eAAgBwD,OAAA,cAAhBxD,6CAAAA,uBAAyBkD,UAAA,EAAYrF,KAAKqE,KAAA,IAAQlC,iBAAAA,IAAIgD,OAAA,CAAQ,EAAC,cAAbhD,sCAAAA,yBAAAA,eAAgBwD,OAAA,cAAhBxD,6CAAAA,uBAAyBkD,UAAA;oCAC/ErF,KAAKkD,KAAA,GAAQf,IAAIe,KAAA;oCACjBlD,KAAKyD,MAAA,GAAStB,IAAIsB,MAAA;oCAClBzD,KAAK0D,YAAA,GAAevB,EAAAA,aAAAA,IAAIwB,KAAA,cAAJxB,iCAAAA,WAAWyB,aAAA,KAAiB;oCAChD5D,KAAKgF,gBAAA,GAAmB7C,EAAAA,cAAAA,IAAIwB,KAAA,cAAJxB,kCAAAA,YAAWmD,iBAAA,KAAqB;oCACxDtF,KAAK6D,WAAA,GAAc1B,EAAAA,cAAAA,IAAIwB,KAAA,cAAJxB,kCAAAA,YAAW2B,YAAA,KAAgB;oCAC9C;;wCAAO9D;;gCACX;;;;;;gBACJ;;;;YAAA;;;;;GAAA,GAQQ4E,KAAAA;mBAAAA,SAAAA,cAAcZ,QAAA;gBAClB,IAAM6B,SAA0B,EAAC;oBAEjC,kCAAA,2BAAA;;oBAAA,QAAA,YAAsC7B,6BAAtC,SAAA,6BAAA,QAAA,yBAAA,iCAAgD;wBAAhD,kBAAA,aAAaU,mBAAAA,MAAMC,sBAAAA,SAASwC,mBAAAA;wBAExB,IAAIzC,SAAA,YAAA,OAAA,KAA2B;6BAAA,IACtBA,SAAA,OAAA,QAAA,KAA4BmB,OAAOU,IAAA,CAAK;4BAAE7B,MAAAA;4BAAMC,SAAAA;4BAAS2C,cAAcH;wBAAM;6BAEjFtB,OAAOU,IAAA,CAAK;4BAAE7B,MAAAA;4BAAMC,SAAAA;wBAAQ;oBACrC;;oBANA;oBAAA;;;6BAAA,6BAAA;4BAAA;;;4BAAA;kCAAA;;;;gBAQA,OAAOkB;YACX;;;;;AbutDJ,sBAAsB;Ac31DtB,SAAS7G,eAAAA,aAAAA,EAAaC,YAAAA,UAAAA,QAAgB,SAAA;AACtC,OAAOC,wBAAuB,2BAAA;AAC9B,SAASC,gBAAAA,cAAAA,QAAoB,aAAA;AAa7B,IAAMyD,OAAM;AACZ,IAAMC,OAAM;AAEZ,IAAqB4L,oBAArB;;aAAqBA,IAUL7M,GAAA;YAAyBmB,MAAAA,iEAAcH;gCAVlC6L;QAWb,IAAA,CAAK7M,GAAA,GAAMA;QACX,IAAA,CAAKmB,GAAA,GAAMA;;;;YAgBTgB,KAAAA;mBAfN,AAeA;;;;;;;;;;;;GAfA,GAeA,SAAMA,KACFC,QAAA;oBACAd,QAAAA,gDAAA,SAAA,qBAAA,UACAe,SAAAA,iEAAkB,OAClBC,oDACAC,4DACAC,0DACAC,sDACAC;;uBARJ,oBAAA;wBAUU1C,KAkBAO,KAeAnC,MAUIuE,QACAC,QAoBSrC,uBAAAA,eACXA,wBAAAA,gBAAkDA,wBAAAA,gBAGlCA,YACIA,aACLA;;;;gCAtEjBP,MAAMuB,MAAMC,OAAA,CAAQ,MAAKxB,GAAG,IAAIjC,aAAEa,YAAA,CAAa,MAAKoB,GAAG,IAAI,MAAKA,GAAA;gCACtE,IAAI,CAACA,KAAK,MAAM,IAAIY,MAAM;gCAG1B,IAAI,CAAC;oCAAA,gBAAA,gBAAA;kCAA4BiC,QAAA,CAASvB,QACtCc,WAAWA,SAAST,GAAA,CAAI;wCAAGmB,aAAAA,MAAMC,gBAAAA;2CAAe;wCAAED,MAAAA;wCAAMC,SAAAA;oCAAQ;;gCAGpE,IAAI,OAAOR,gBAAgB,UAAU;oCACjC,IAAIA,cAAc,GAAGA,cAAc;oCACnC,IAAIA,cAAc,GAAGA,cAAc;gCACvC;gCAEA,IAAI,OAAOD,QAAQ,UAAU;oCACzB,IAAIA,MAAM,GAAGA,MAAM;oCACnB,IAAIA,MAAM,GAAGA,MAAM;gCACvB;gCAEY;;oCAAMvE,aAAEM,IAAA,CAChB,GAAe4C,OAAZ,MAAKE,GAAG,EAAA,KAAO,OAAHF,MAAG,sBAClB;wCACIK,OAAAA;wCACAc,UAAU,MAAKY,aAAA,CAAcZ;wCAC7BC,QAAAA;wCACAE,aAAAA;wCACAU,OAAOX;wCACPwD,YAAYtD;wCACZC,OAAAA;wCACAU,aAAaT;oCACjB,GACA;wCAAEjB,SAAS;4CAAEC,eAAe,UAAa,OAAH1B;wCAAM;wCAAGU,cAAc2B,SAAS,WAAW;oCAAO;;;gCAZtF9B,MAAM;gCAeNnC,OAAqB;oCACvB2E,SAAS;oCACTzB,OAAAA;oCACAO,QAAQ;oCACRC,cAAc;oCACdsB,kBAAkB;oCAClBnB,aAAa;gCACjB;gCAEA,IAAI1B,AAAA,YAAAA,KAAelD,aAAU;oCACnBsF,SAAS,IAAIvF;oCACbwF,SAAS,IAAItF;oCAEnBsF,OAAOS,EAAA,CAAG,QAAQ,SAAC1E;wCACf,IAAM2E,MAAMvF,aAAEQ,IAAA,CAA4BI,EAAEP,IAAI;wCAChD,IAAIkF,KAAK;gDACUA,qBAAAA,eAGKA,YACIA,aACLA;4CALnBlF,KAAK2E,OAAA,GAAUO,EAAAA,gBAAAA,IAAIC,OAAA,CAAQ,EAAC,cAAbD,qCAAAA,sBAAAA,cAAgBE,KAAA,cAAhBF,0CAAAA,oBAAuBP,OAAA,KAAW;4CACjD3E,KAAKkD,KAAA,GAAQgC,IAAIhC,KAAA;4CACjBlD,KAAKyD,MAAA,GAASyB,IAAIzB,MAAA;4CAClBzD,KAAK0D,YAAA,GAAewB,EAAAA,aAAAA,IAAIvB,KAAA,cAAJuB,iCAAAA,WAAWtB,aAAA,KAAiB;4CAChD5D,KAAKgF,gBAAA,GAAmBE,EAAAA,cAAAA,IAAIvB,KAAA,cAAJuB,kCAAAA,YAAWI,iBAAA,KAAqB;4CACxDtF,KAAK6D,WAAA,GAAcqB,EAAAA,cAAAA,IAAIvB,KAAA,cAAJuB,kCAAAA,YAAWpB,YAAA,KAAgB;4CAC9CS,OAAOgB,KAAA,CAAMlF,KAAKyB,SAAA,CAAU9B;wCAChC;oCACJ;oCACAwE,OAAOS,EAAA,CAAG,SAAS,SAAA1E;+CAAKgE,OAAOiB,OAAA,CAAQjF;;oCACvCiE,OAAOS,EAAA,CAAG,OAAO;+CAAMV,OAAOkB,GAAA;;oCAE9BtD,IAAIuD,IAAA,CAAKvG,eAAa,UAAUuG,IAAA,CAAKlB;oCACrC;;wCAAOD;;gCACX,OAAO;;oCACHvE,KAAK2E,OAAA,GAAUxC,EAAAA,gBAAAA,IAAIgD,OAAA,CAAQ,EAAC,cAAbhD,qCAAAA,wBAAAA,cAAgBwD,OAAA,cAAhBxD,4CAAAA,sBAAyBwC,OAAA,KAAW;oCACnD,KAAIxC,iBAAAA,IAAIgD,OAAA,CAAQ,EAAC,cAAbhD,sCAAAA,yBAAAA,eAAgBwD,OAAA,cAAhBxD,6CAAAA,uBAAyBkD,UAAA,EAAYrF,KAAKqE,KAAA,IAAQlC,iBAAAA,IAAIgD,OAAA,CAAQ,EAAC,cAAbhD,sCAAAA,yBAAAA,eAAgBwD,OAAA,cAAhBxD,6CAAAA,uBAAyBkD,UAAA;oCAC/ErF,KAAKkD,KAAA,GAAQf,IAAIe,KAAA;oCACjBlD,KAAKyD,MAAA,GAAStB,IAAIsB,MAAA;oCAClBzD,KAAK0D,YAAA,GAAevB,EAAAA,aAAAA,IAAIwB,KAAA,cAAJxB,iCAAAA,WAAWyB,aAAA,KAAiB;oCAChD5D,KAAKgF,gBAAA,GAAmB7C,EAAAA,cAAAA,IAAIwB,KAAA,cAAJxB,kCAAAA,YAAWmD,iBAAA,KAAqB;oCACxDtF,KAAK6D,WAAA,GAAc1B,EAAAA,cAAAA,IAAIwB,KAAA,cAAJxB,kCAAAA,YAAW2B,YAAA,KAAgB;oCAC9C;;wCAAO9D;;gCACX;;;;;;gBACJ;;;;YAAA;;;;;GAAA,GAQQ4E,KAAAA;mBAAAA,SAAAA,cAAcZ,QAAA;gBAClB,IAAM6B,SAA4B,EAAC;oBAEnC,kCAAA,2BAAA;;oBAAA,QAAA,YAAqC7B,6BAArC,SAAA,6BAAA,QAAA,yBAAA,iCAA+C;wBAA/C,kBAAA,aAAaU,mBAAAA,MAAMC,sBAAAA,SAASuC,kBAAAA;wBAExB,OAAQxC;4BACJ,KAAA,OAAA,QAAA;gCACI,IAAIwC,KACArB,OAAOU,IAAA,CAAK;oCACR7B,MAAAA;oCACAC,SAAS;wCACL;4CAAEgC,MAAM;4CAAQS,MAAMzC;wCAAQ;wCAC9B;4CAAEgC,MAAM;4CAAaU,WAAW;gDAAExH,KAAKqH;4CAAI;wCAAE;qCACjD;gCACJ;qCACCrB,OAAOU,IAAA,CAAK;oCAAE7B,MAAAA;oCAAMC,SAAAA;gCAAQ;gCACjC;4BACJ,KAAA,YAAA,aAAA,OAAA,SAAA,UAAA;gCACIkB,OAAOU,IAAA,CAAK;oCAAE7B,MAAAA;oCAAMC,SAAAA;gCAAQ;gCAC5B;4BACJ;gCACI;wBACR;oBACJ;;oBApBA;oBAAA;;;6BAAA,6BAAA;4BAAA;;;4BAAA;kCAAA;;;;gBAsBA,OAAOkB;YACX;;;;;AduzDJ,eAAe;Aeh7Df,IAAM6I,kBAAkB;AAExB,IAAqBC,sBAArB;;aAAqBA;YAoBL5O,SAAAA,iEAAsB,CAAC;gCApBlB4O;YAuBY5O,gBAAoBA,iBAEhBA,kBAAsBA,mBAEhCA,aAAiBA,cAEXA,gBAAoBA,iBAGzCA,iBACAA,kBACAA,kBACAA,kBACAA,kBAGmBA,eAAsBA,gBAAyBA,gBAE7CA,kBAAsBA,mBAEzBA,gBAAoBA,iBAEvBA,aAAiBA,cAEbA,eAAmBA,gBAEjBA,oBAA0BA,qBAA0BA,qBAE9CA,qBAAyBA;QAlD5D,IAAA,CAAOA,MAAA,GAA6B;QAoBhC,IAAA,CAAKA,MAAA,GAASA;QAEd,IAAA,CAAK6O,MAAA,GAAS,IAAI9L,QAAO/C,iBAAAA,OAAO+C,MAAA,cAAP/C,qCAAAA,eAAe6B,GAAA,GAAK7B,kBAAAA,OAAO+C,MAAA,cAAP/C,sCAAAA,gBAAegN,KAAK;QAEjE,IAAA,CAAK8B,QAAA,GAAW,IAAIL,UAASzO,mBAAAA,OAAOyO,QAAA,cAAPzO,uCAAAA,iBAAiB6B,GAAA,GAAK7B,oBAAAA,OAAOyO,QAAA,cAAPzO,wCAAAA,kBAAiBgN,KAAK;QAEzE,IAAA,CAAK+B,GAAA,GAAM,IAAIvH,KAAIxH,cAAAA,OAAOwH,GAAA,cAAPxH,kCAAAA,YAAY6B,GAAA,GAAK7B,eAAAA,OAAOwH,GAAA,cAAPxH,mCAAAA,aAAYgN,KAAK;QAErD,IAAA,CAAKgC,MAAA,GAAS,IAAI3G,QAAOrI,iBAAAA,OAAOqI,MAAA,cAAPrI,qCAAAA,eAAe6B,GAAA,GAAK7B,kBAAAA,OAAOqI,MAAA,cAAPrI,sCAAAA,gBAAegN,KAAK;QAEjE,IAAA,CAAKiC,GAAA,GAAM,IAAI3E,SACXtK,kBAAAA,OAAOsK,OAAA,cAAPtK,sCAAAA,gBAAgBkP,WAAA,GAChBlP,mBAAAA,OAAOsK,OAAA,cAAPtK,uCAAAA,iBAAgBmP,KAAA,GAChBnP,mBAAAA,OAAOsK,OAAA,cAAPtK,uCAAAA,iBAAgBoP,MAAA,GAChBpP,mBAAAA,OAAOsK,OAAA,cAAPtK,uCAAAA,iBAAgBqP,SAAA,GAChBrP,mBAAAA,OAAOsK,OAAA,cAAPtK,uCAAAA,iBAAgBgN,KAAA;QAGpB,IAAA,CAAKsC,KAAA,GAAQ,IAAI1D,OAAM5L,gBAAAA,OAAO4L,KAAA,cAAP5L,oCAAAA,cAAcoP,MAAA,GAAQpP,iBAAAA,OAAO4L,KAAA,cAAP5L,qCAAAA,eAAcuP,SAAA,GAAWvP,iBAAAA,OAAO4L,KAAA,cAAP5L,qCAAAA,eAAcgN,KAAK;QAEzF,IAAA,CAAKwC,IAAA,GAAO,IAAI1C,UAAS9M,mBAAAA,OAAO8M,QAAA,cAAP9M,uCAAAA,iBAAiB6B,GAAA,GAAK7B,oBAAAA,OAAO8M,QAAA,cAAP9M,wCAAAA,kBAAiBgN,KAAK;QAErE,IAAA,CAAKyC,GAAA,GAAM,IAAIjB,QAAOxO,iBAAAA,OAAOwO,MAAA,cAAPxO,qCAAAA,eAAe6B,GAAA,GAAK7B,kBAAAA,OAAOwO,MAAA,cAAPxO,sCAAAA,gBAAegN,KAAK;QAE9D,IAAA,CAAK0C,GAAA,GAAM,IAAIhB,KAAI1O,cAAAA,OAAO0O,GAAA,cAAP1O,kCAAAA,YAAY6B,GAAA,GAAK7B,eAAAA,OAAO0O,GAAA,cAAP1O,mCAAAA,aAAYgN,KAAK;QAErD,IAAA,CAAK2C,KAAA,GAAQ,IAAI/H,OAAM5H,gBAAAA,OAAO4H,KAAA,cAAP5H,oCAAAA,cAAcgD,GAAA,GAAKhD,iBAAAA,OAAO4H,KAAA,cAAP5H,qCAAAA,eAAc6B,GAAG;QAE3D,IAAA,CAAK+N,EAAA,GAAK,IAAI7C,YAAW/M,qBAAAA,OAAO+M,UAAA,cAAP/M,yCAAAA,mBAAmBgN,KAAA,GAAOhN,sBAAAA,OAAO+M,UAAA,cAAP/M,0CAAAA,oBAAmB6L,KAAA,GAAO7L,sBAAAA,OAAO+M,UAAA,cAAP/M,0CAAAA,oBAAmBiN,QAAQ;QAExG,IAAA,CAAK4C,SAAA,GAAY,IAAI7B,WAAUhO,sBAAAA,OAAO8P,WAAA,cAAP9P,0CAAAA,oBAAoB6B,GAAA,GAAK7B,uBAAAA,OAAO8P,WAAA,cAAP9P,2CAAAA,qBAAoBgN,KAAK;QAGjF,IAAA,CAAK+C,UAAA,GAAaC,OAAOC,OAAA,CAAQtT,mBAAmB6G,GAAA,CAAc;qDAAE0M,eAAGzM;gBAI/D;mBAJuE;gBAC3E0M,UAAUD;gBACVpO,OAAO2B;gBACP2M,QAAQJ,OAAOtH,MAAA,CACX,CAAA,WACI,iBADJ,MACI,SAAA,UAAA,KAA4BrL,kBAC5B,iBAFJ,MAEI,WAAA,YAAA,KAA8BC,oBAC9B,iBAHJ,MAGI,QAAA,SAAA,KAA2BG,iBAC3B,iBAJJ,MAII,UAAA,WAAA,KAA6BC,mBAC7B,iBALJ,MAKI,MAAA,OAAA,KAAyBF,eACzB,iBANJ,MAMI,SAAA,UAAA,KAA4BD,kBAC5B,iBAPJ,MAOI,WAAA,YAAA,KAA8BI,oBAC9B,iBARJ,MAQI,SAAA,UAAA,KAA4BC,eAC5B,iBATJ,MASI,MAAA,OAAA,KAAyBC,eACzB,iBAVJ,MAUI,QAAA,SAAA,KAA2B,EAAC,GAVhC,KAWA,CAAE4F,EAAC;YAEX;;QAGA,IAAA,CAAK4M,SAAA,GAAYL,OAAOC,OAAA,CAAQpT,sBAAsB2G,GAAA,CAAc;qDAAE0M,eAAGzM;gBAIjE;mBAJyE;gBAC7E0M,UAAUD;gBACVpO,OAAO2B;gBACP2M,QAAQJ,OAAOtH,MAAA,CACX,CAAA,WACI,iBADJ,MACI,SAAA,UAAA,KAA+B1K,qBAC/B,iBAFJ,MAEI,aAAA,cAAA,KAAmCD,yBACnC,iBAHJ,MAGI,eAAA,eAAA,KAAoCE,0BACpC,iBAJJ,MAII,UAAA,WAAA,KAAgCC,sBAJpC,KAKA,CAAEuF,EAAC;YAEX;;QAGA,IAAA,CAAK6M,WAAA,GAAcN,OAAOC,OAAA,CAAQrT,oBAAoB4G,GAAA,CAAc;qDAAE0M,eAAGzM;gBAIjE;mBAJyE;gBAC7E0M,UAAUD;gBACVpO,OAAO2B;gBACP2M,QAAQJ,OAAOtH,MAAA,CACX,CAAA,WACI,iBADJ,MACI,SAAA,UAAA,KAA6B3L,mBAC7B,iBAFJ,MAEI,MAAA,OAAA,KAA0BE,gBAC1B,iBAHJ,MAGI,SAAA,UAAA,KAA6BC,mBAC7B,iBAJJ,MAII,SAAA,UAAA,KAA6BC,gBAC7B,iBALJ,MAKI,QAAA,SAAA,KAA4BH,kBALhC,KAMA,CAAEyG,EAAC;YAEX;;QAEA,IAAA,CAAK2M,MAAA,GAAS,AAAC,qBAAG,IAAA,CAAKL,UAAA,SAAY,qBAAG,IAAA,CAAKO,WAAA,GAAa,qBAAG,IAAA,CAAKD,SAAS;;;;YAGvErM,KAAAA;mBAAN,SAAMA;oBAAKC,WAAAA,iEAAmC0K,iBAAiB4B,SAAAA,iEAAqB,CAAC;;uBAArF,oBAAA;wBAEUJ,UACEhN,OAAOe,QAAQC,KAAKC,aAAaC,WAAWC,OAAOC;;;;gCAF3D,IAAI,OAAON,aAAa,UAAUA;oCAAY;wCAAEU,MAAA,OAAA,QAAA;wCAAyBC,SAASX;oCAAS;;gCACrFkM,WAAWI,OAAOJ,QAAA,IAAA,SAAA,UAAA;gCAChBhN,QAAkEoN,OAAlEpN,OAAOe,SAA2DqM,OAA3DrM,QAAQC,MAAmDoM,OAAnDpM,KAAKC,cAA8CmM,OAA9CnM,aAAaC,YAAiCkM,OAAjClM,WAAWC,QAAsBiM,OAAtBjM,OAAOC,aAAegM,OAAfhM;qCAEvD4L,CAAAA,aAAA,SAAA,UAAA,GAAA,GAAAA;;;;gCACO;;oCAAM,MAAKtB,MAAA,CAAO7K,IAAA,CACrBC,UACAd,OACAe,QACAC,KACAC,aACAC,WACAC,OACAC;;;gCARJ;;oCAAO;;;qCAUF4L,CAAAA,aAAA,WAAA,YAAA,GAAA,GAAAA;;;;gCACE;;oCAAM,MAAKrB,QAAA,CAAS9K,IAAA,CAAKC,UAAUd,OAA4Be,QAAQC,KAAKC,aAAaC;;;gCAAhG;;oCAAO;;;qCACF8L,CAAAA,aAAA,SAAA,UAAA,GAAA,GAAAA;;;;gCACE;;oCAAM,MAAKnB,MAAA,CAAOhL,IAAA,CAAKC,UAAUd,OAA0Be,QAAQC,KAAKC,aAAaC;;;gCAA5F;;oCAAO;;;qCACF8L,CAAAA,aAAA,MAAA,OAAA,GAAA,GAAAA;;;;gCACE;;oCAAM,MAAKpB,GAAA,CAAI/K,IAAA,CAClBC,UACAd,OACAe,QACAC,KACAC,aACAC,WACAC,OACAC;;;gCARJ;;oCAAO;;;qCAUF4L,CAAAA,aAAA,UAAA,WAAA,GAAA,GAAAA;;;;gCACE;;oCAAM,MAAKlB,GAAA,CAAIjL,IAAA,CAClBC,UACAd,OACAe,QACAC,KACAC,aACAC,WACAC,OACAC;;;gCARJ;;oCAAO;;;qCAUF4L,CAAAA,aAAA,QAAA,SAAA,GAAA,GAAAA;;;;gCACE;;oCAAM,MAAKb,KAAA,CAAMtL,IAAA,CAAKC,UAAUd,OAAyBe,QAAQC,KAAKC,aAAaC;;;gCAA1F;;oCAAO;;;qCACF8L,CAAAA,aAAA,WAAA,YAAA,GAAA,GAAAA;;;;gCACE;;oCAAM,MAAKX,IAAA,CAAKxL,IAAA,CAAKC,UAAUd,OAA4Be,QAAQC,KAAKC,aAAaC;;;gCAA5F;;oCAAO;;;qCACF8L,CAAAA,aAAA,SAAA,UAAA,GAAA,GAAAA;;;;gCACE;;oCAAM,MAAKV,GAAA,CAAIzL,IAAA,CAAKC,UAAUd,OAAuBe,QAAQC,KAAKC,aAAaC;;;gCAAtF;;oCAAO;;;qCACF8L,CAAAA,aAAA,MAAA,OAAA,GAAA,GAAAA;;;;gCACE;;oCAAM,MAAKT,GAAA,CAAI1L,IAAA,CAClBC,UACAd,OACAe,QACAC,KACAC,aACAC,WACAC,OACAC;;;gCARJ;;oCAAO;;;qCAUF4L,CAAAA,aAAA,QAAA,SAAA,GAAA,GAAAA;;;;gCACE;;oCAAM,MAAKR,KAAA,CAAM3L,IAAA,CACpBC,UACAd,OACAe,QACAC,KACAC,aACAC,WACAC,OACAC;;;gCARJ;;oCAAO;;;gCAUN,MAAM,IAAI9B,MAAM;;;;;;;gBACzB;;;;YAEMQ,KAAAA;mBAAN,SAAMA,UAAU2B,OAAA;oBAA4B2L,SAAAA,iEAAsB,CAAC;;uBAAnE,oBAAA;wBACUJ,UACEhN;;;;gCADFgN,WAAWI,OAAOJ,QAAA,IAAYrT,cAAciG,MAAA;gCAC1CI,QAAUoN,OAAVpN;gCACR,IAAI,OAAOyB,YAAY,UAAUA;oCAAWA;;qCAExCuL,CAAAA,aAAA,SAAA,UAAA,GAAA,GAAAA;;;;gCACO;;oCAAM,MAAKtB,MAAA,CAAO5L,SAAA,CAAU2B,SAASzB;;;gCAA5C;;oCAAO;;;qCACFgN,CAAAA,aAAA,MAAA,OAAA,GAAA,GAAAA;;;;gCACE;;oCAAM,MAAKpB,GAAA,CAAI9L,SAAA,CAAU2B,SAASzB,OAAwBoN,OAAO7I,UAAU;;;gCAAlF;;oCAAO;;;qCACFyI,CAAAA,aAAA,SAAA,UAAA,GAAA,GAAAA;;;;gCACE;;oCAAM,MAAKnB,MAAA,CAAO/L,SAAA,CAAU2B,SAASzB;;;gCAA5C;;oCAAO;;;qCACFgN,CAAAA,aAAA,SAAA,UAAA,GAAA,GAAAA;;;;gCACE;;oCAAM,MAAKV,GAAA,CAAIxM,SAAA,CAAU2B,SAASzB,OAAwBoN,OAAO7I,UAAU;;;gCAAlF;;oCAAO;;;qCACFyI,CAAAA,aAAA,QAAA,SAAA,GAAA,GAAAA;;;;gCACE;;oCAAM,MAAKR,KAAA,CAAM1M,SAAA,CAAU2B,SAASzB;;;gCAA3C;;oCAAO;;;gCACN,MAAM,IAAIV,MAAM;;;;;;;gBACzB;;;;YAEMoD,KAAAA;mBAAN,SAAMA,QAAQC,MAAA;oBAAgByK,SAAAA,iEAAwB,CAAC;;uBAAvD,oBAAA;wBACUJ,UACElC,gBAAgB1M,OAAOC,QAAQgP,KAAKrN;;;;gCADtCgN,WAAWI,OAAOJ,QAAA,IAAA,SAAA,UAAA;gCAChBlC,iBAA8CsC,OAA9CtC,gBAAgB1M,QAA8BgP,OAA9BhP,OAAOC,SAAuB+O,OAAvB/O,QAAQgP,MAAeD,OAAfC,KAAKrN,QAAUoN,OAAVpN;qCACxCgN,CAAAA,aAAA,SAAA,UAAA,GAAA,GAAAA;;;;gCACO;;oCAAM,MAAKtB,MAAA,CAAOhJ,OAAA,CAAQC,QAAQvE,OAAOC,QAAQgP,KAAKrN;;;gCAA7D;;oCAAO;;;qCACFgN,CAAAA,aAAA,aAAA,cAAA,GAAA,GAAAA;;;;gCACE;;oCAAM,MAAKP,EAAA,CAAG/J,OAAA,CAAQC,QAAQmI,gBAAgB1M,OAAOC;;;gCAA5D;;oCAAO;;;qCACF2O,CAAAA,aAAA,eAAA,eAAA,GAAA,GAAAA;;;;gCACE;;oCAAM,MAAKN,SAAA,CAAUhK,OAAA,CACxBC,QACAmI,gBACA1M,OACAC,QACAgP,KACArN;;;gCANJ;;oCAAO;;;qCAQFgN,CAAAA,aAAA,UAAA,WAAA,GAAA,GAAAA;;;;gCACE;;oCAAM,MAAKlB,GAAA,CAAIpJ,OAAA,CAAQC,QAAQvE,OAAOC,QAAQ2B;;;gCAArD;;oCAAO;;;gCACN,MAAM,IAAIV,MAAM;;;;;;;gBACzB;;;;YAEM2D,KAAAA;mBAAN,SAAMA,KAAK+J,QAAA,EAAgCnK,EAAA;;uBAA3C,oBAAA;;;;qCACQmK,CAAAA,aAAA,SAAA,UAAA,GAAA,GAAAA;;;;gCAA0C;;oCAAO,MAAKtB,MAAA,CAAOzI,IAAA,CAAKJ;;;qCAC7DmK,CAAAA,aAAA,aAAA,cAAA,GAAA,GAAAA;;;;gCAAqD;;oCAAM,MAAKP,EAAA,CAAGxJ,IAAA,CAAKJ;;;gCAA1B;;oCAAO;;;gCAAqB,IAC1EmK,aAAA,eAAA,eAAA,KAA+C;;oCAAO,MAAKN,SAAA,CAAUzJ,IAAA,CAAKJ;;qCAAE,IAC5EmK,aAAA,UAAA,WAAA,KAA2C;;oCAAO,MAAKlB,GAAA,CAAI7I,IAAA,CAAKJ;;qCACpE,MAAM,IAAIvD,MAAM;;;;;;;;gBACzB;;;;YAEMqL,KAAAA;mBAAN,SAAMA,OAAOqC,QAAA,EAAgClJ,MAAA,EAAgByG,MAAA,EAAgBK,KAAA;;uBAA7E,oBAAA;;wBACI,IAAIoC,aAAA,aAAA,cAAA,KAA8C;;4BAAO,MAAKP,EAAA,CAAG9B,MAAA,CAAO7G,QAAQyG,QAAsBK;;6BACjG,MAAM,IAAItL,MAAM;;;;;gBACzB;;;;;;Afu4DJ,eAAe;AgB/oEf,IAAOgO,gBAAQ7B;AhBipEf,SACEhR,YAAY,EACZT,aAAa,EACb6B,eAAe,EACfvB,cAAc,EACdK,SAAS,EACTnB,iBAAiB,EACjB+B,YAAY,EACZJ,UAAU,EACVM,cAAc,EACdtB,iBAAiB,EACjBF,UAAU,EACVR,kBAAkB,EAClBmC,eAAe,EACfvB,YAAY,EACZsB,eAAe,EACf7B,aAAa,EACb0B,eAAe,EACfpB,eAAe,EACfL,gBAAgB,EAChBQ,gBAAgB,EAChBQ,mBAAmB,EACnBC,YAAY,EACZtB,oBAAoB,EACpB4B,WAAW,EACXJ,UAAU,EACVN,sBAAsB,EACtBK,UAAU,EACVtB,aAAa,EACba,iBAAiB,EACjBN,eAAe,EACfN,gBAAgB,EAChBiB,kBAAkB,EAClBhB,eAAe,EACfuB,UAAU,EACVM,eAAe,EACfL,WAAW,EACXP,uBAAuB,EACvBJ,YAAY,EACZ4S,iBAAiBC,OAAO,GACxB","sourcesContent":["// interface/Enum.ts\nvar ChatModelProvider = /* @__PURE__ */ ((ChatModelProvider2) => {\n  ChatModelProvider2[\"OpenAI\"] = \"openai\";\n  ChatModelProvider2[\"DeepSeek\"] = \"deepseek\";\n  ChatModelProvider2[\"IFlyTek\"] = \"iflytek\";\n  ChatModelProvider2[\"Baidu\"] = \"baidu\";\n  ChatModelProvider2[\"Google\"] = \"google\";\n  ChatModelProvider2[\"GLM\"] = \"glm\";\n  ChatModelProvider2[\"MoonShot\"] = \"moonshot\";\n  ChatModelProvider2[\"AliYun\"] = \"aliyun\";\n  ChatModelProvider2[\"XAI\"] = \"xai\";\n  ChatModelProvider2[\"Other\"] = \"other\";\n  return ChatModelProvider2;\n})(ChatModelProvider || {});\nvar EmbedModelProvider = /* @__PURE__ */ ((EmbedModelProvider2) => {\n  EmbedModelProvider2[\"OpenAI\"] = \"openai\";\n  EmbedModelProvider2[\"Google\"] = \"google\";\n  EmbedModelProvider2[\"GLM\"] = \"glm\";\n  EmbedModelProvider2[\"AliYun\"] = \"aliyun\";\n  EmbedModelProvider2[\"Other\"] = \"other\";\n  return EmbedModelProvider2;\n})(EmbedModelProvider || {});\nvar ImagineModelProvider = /* @__PURE__ */ ((ImagineModelProvider2) => {\n  ImagineModelProvider2[\"OpenAI\"] = \"openai\";\n  ImagineModelProvider2[\"MidJourney\"] = \"midjourney\";\n  ImagineModelProvider2[\"StabilityAI\"] = \"stability.ai\";\n  ImagineModelProvider2[\"IFlyTek\"] = \"iflytek\";\n  return ImagineModelProvider2;\n})(ImagineModelProvider || {});\nvar ModelProvider = { ...ChatModelProvider, ...EmbedModelProvider, ...ImagineModelProvider };\nvar OpenAIEmbedModel = /* @__PURE__ */ ((OpenAIEmbedModel2) => {\n  OpenAIEmbedModel2[\"ADA\"] = \"text-embedding-ada-002\";\n  OpenAIEmbedModel2[\"LARGE\"] = \"text-embedding-3-large\";\n  OpenAIEmbedModel2[\"SMALL\"] = \"text-embedding-3-small\";\n  return OpenAIEmbedModel2;\n})(OpenAIEmbedModel || {});\nvar OtherEmbedModel = /* @__PURE__ */ ((OtherEmbedModel2) => {\n  OtherEmbedModel2[\"BGE_M3\"] = \"bge-m3\";\n  OtherEmbedModel2[\"BASE_CHN\"] = \"text2vec-base-chinese\";\n  OtherEmbedModel2[\"LARGE_CHN\"] = \"text2vec-large-chinese\";\n  OtherEmbedModel2[\"BASE_CHN_PARAPH\"] = \"text2vec-base-chinese-paraphrase\";\n  OtherEmbedModel2[\"BASE_CHN_SENTENCE\"] = \"text2vec-base-chinese-sentence\";\n  OtherEmbedModel2[\"BASE_MUL\"] = \"text2vec-base-multilingual\";\n  OtherEmbedModel2[\"PARAPH_MUL_MINI\"] = \"paraphrase-multilingual-MiniLM-L12-v2\";\n  return OtherEmbedModel2;\n})(OtherEmbedModel || {});\nvar GLMEmbedModel = /* @__PURE__ */ ((GLMEmbedModel2) => {\n  GLMEmbedModel2[\"EMBED_2\"] = \"embedding-2\";\n  GLMEmbedModel2[\"EMBED_3\"] = \"embedding-3\";\n  return GLMEmbedModel2;\n})(GLMEmbedModel || {});\nvar GoogleEmbedModel = /* @__PURE__ */ ((GoogleEmbedModel2) => {\n  GoogleEmbedModel2[\"EMBED_4\"] = \"text-embedding-004\";\n  return GoogleEmbedModel2;\n})(GoogleEmbedModel || {});\nvar AliEmbedModel = /* @__PURE__ */ ((AliEmbedModel2) => {\n  AliEmbedModel2[\"ALI_V3\"] = \"text-embedding-v3\";\n  AliEmbedModel2[\"ALI_V2\"] = \"text-embedding-v2\";\n  AliEmbedModel2[\"ALI_V1\"] = \"text-embedding-v1\";\n  AliEmbedModel2[\"ALI_ASYNC_V2\"] = \"text-embedding-async-v2\";\n  AliEmbedModel2[\"ALI_ASYNC_V1\"] = \"text-embedding-async-v1\";\n  return AliEmbedModel2;\n})(AliEmbedModel || {});\nvar EmbedModel = {\n  ...OpenAIEmbedModel,\n  ...OtherEmbedModel,\n  ...GLMEmbedModel,\n  ...GoogleEmbedModel,\n  ...AliEmbedModel\n};\nvar OpenAIChatModel = /* @__PURE__ */ ((OpenAIChatModel2) => {\n  OpenAIChatModel2[\"GPT_4O\"] = \"gpt-4o\";\n  OpenAIChatModel2[\"GPT_4O_MINI\"] = \"gpt-4o-mini\";\n  OpenAIChatModel2[\"CHAT_GPT_4O\"] = \"chatgpt-4o-latest\";\n  OpenAIChatModel2[\"GPT4_TURBO\"] = \"gpt-4-turbo\";\n  OpenAIChatModel2[\"GPT4\"] = \"gpt-4\";\n  OpenAIChatModel2[\"O1\"] = \"o1\";\n  OpenAIChatModel2[\"O1_PRE\"] = \"o1-preview\";\n  OpenAIChatModel2[\"O1_MINI\"] = \"o1-mini\";\n  OpenAIChatModel2[\"O3_MINI\"] = \"o3-mini\";\n  OpenAIChatModel2[\"GPT3\"] = \"gpt-3.5-turbo\";\n  return OpenAIChatModel2;\n})(OpenAIChatModel || {});\nvar DeepSeekChatModel = /* @__PURE__ */ ((DeepSeekChatModel2) => {\n  DeepSeekChatModel2[\"DEEPSEEK_V3\"] = \"deepseek-chat\";\n  DeepSeekChatModel2[\"DEEPSEEK_R1\"] = \"deepseek-reasoner\";\n  return DeepSeekChatModel2;\n})(DeepSeekChatModel || {});\nvar GoogleChatModel = /* @__PURE__ */ ((GoogleChatModel2) => {\n  GoogleChatModel2[\"GEM_PRO_1_5\"] = \"gemini-1.5-pro\";\n  GoogleChatModel2[\"GEM_FLASH_1_5\"] = \"gemini-1.5-flash\";\n  GoogleChatModel2[\"GEM_FLASH_1_5_8B\"] = \"gemini-1.5-flash-8b\";\n  GoogleChatModel2[\"GEM_FLASH_2\"] = \"gemini-2.0-flash\";\n  GoogleChatModel2[\"GEM_FLASH_2_LITE\"] = \"gemini-2.0-flash-lite-preview\";\n  GoogleChatModel2[\"GEM_PRO_2\"] = \"gemini-2.0-pro-exp\";\n  GoogleChatModel2[\"GEM_FLASH_2_THINK_EXP\"] = \"gemini-2.0-flash-thinking-exp\";\n  GoogleChatModel2[\"LEARNLM_PRO_1_5\"] = \"learnlm-1.5-pro-experimental\";\n  return GoogleChatModel2;\n})(GoogleChatModel || {});\nvar GLMChatModel = /* @__PURE__ */ ((GLMChatModel2) => {\n  GLMChatModel2[\"GLM_3_TURBO\"] = \"glm-3-turbo\";\n  GLMChatModel2[\"GLM_4\"] = \"glm-4\";\n  GLMChatModel2[\"GLM_4_AIR\"] = \"glm-4-air\";\n  GLMChatModel2[\"GLM_4_AIRX\"] = \"glm-4-airx\";\n  GLMChatModel2[\"GLM_4_FLASH\"] = \"glm-4-flash\";\n  GLMChatModel2[\"GLM_4_FLASHX\"] = \"glm-4-flashx\";\n  GLMChatModel2[\"GLM_4V\"] = \"glm-4v\";\n  GLMChatModel2[\"GLM_4V_PLUS\"] = \"glm-4v-plus\";\n  GLMChatModel2[\"GLM_4_LONG\"] = \"glm-4-long\";\n  GLMChatModel2[\"GLM_4_PLUS\"] = \"glm-4-plus\";\n  return GLMChatModel2;\n})(GLMChatModel || {});\nvar BaiduChatModel = /* @__PURE__ */ ((BaiduChatModel2) => {\n  BaiduChatModel2[\"ERNIE_3_5\"] = \"completions\";\n  BaiduChatModel2[\"ERNIE_3_5_PRE\"] = \"ernie-3.5-8k-preview\";\n  BaiduChatModel2[\"ERNIE_3_5_128K\"] = \"ernie-3.5-128k\";\n  BaiduChatModel2[\"ERNIE_4_0_LATEST\"] = \"ernie-4.0-8k-latest\";\n  BaiduChatModel2[\"ERNIE_4_0_PREVIEW\"] = \"ernie-4.0-8k-preview\";\n  BaiduChatModel2[\"ERNIE_4_0_8K\"] = \"completions_pro\";\n  BaiduChatModel2[\"ERNIE_4_0_TURBO_LATEST\"] = \"ernie-4.0-turbo-8k-latest\";\n  BaiduChatModel2[\"ERNIE_4_0_TURBO_PREVIEW\"] = \"ernie-4.0-turbo-8k-preview\";\n  BaiduChatModel2[\"ERNIE_4_0_TURBO_8K\"] = \"ernie-4.0-turbo-8k\";\n  BaiduChatModel2[\"ERNIE_4_0_TURBO_128K\"] = \"ernie-4.0-turbo-128k\";\n  BaiduChatModel2[\"ERNIE_SPEED_8K\"] = \"ernie_speed\";\n  BaiduChatModel2[\"ERNIE_SPEED_128K\"] = \"ernie-speed-128k\";\n  BaiduChatModel2[\"ERNIE_SPEED_PRO_128K\"] = \"ernie-speed-pro-128k\";\n  BaiduChatModel2[\"ERNIE_LITE_8K\"] = \"ernie-lite-8k\";\n  BaiduChatModel2[\"ERNIE_LITE_PRO_128K\"] = \"ernie-lite-pro-128k\";\n  BaiduChatModel2[\"ERNIE_TINY_8K\"] = \"ernie-tiny-8k\";\n  BaiduChatModel2[\"ERNIE_CHAR_8K\"] = \"ernie-char-8k\";\n  BaiduChatModel2[\"ERNIE_CHAR_FICTION_8K\"] = \"ernie-char-fiction-8k\";\n  BaiduChatModel2[\"ERNIE_NOVEL_8K\"] = \"ernie-novel-8k\";\n  return BaiduChatModel2;\n})(BaiduChatModel || {});\nvar IFlyTekChatModel = /* @__PURE__ */ ((IFlyTekChatModel2) => {\n  IFlyTekChatModel2[\"SPARK_LITE\"] = \"lite\";\n  IFlyTekChatModel2[\"SPARK_PRO\"] = \"generalv3\";\n  IFlyTekChatModel2[\"SPARK_PRO_128K\"] = \"pro-128k\";\n  IFlyTekChatModel2[\"SPARK_MAX\"] = \"generalv3.5\";\n  IFlyTekChatModel2[\"SPARK_MAX_32K\"] = \"max-32k\";\n  IFlyTekChatModel2[\"SPARK_ULTRA\"] = \"4.0Ultra\";\n  return IFlyTekChatModel2;\n})(IFlyTekChatModel || {});\nvar MoonShotChatModel = /* @__PURE__ */ ((MoonShotChatModel2) => {\n  MoonShotChatModel2[\"MOON_V1_8K\"] = \"moonshot-v1-8k\";\n  MoonShotChatModel2[\"MOON_V1_32K\"] = \"moonshot-v1-32k\";\n  MoonShotChatModel2[\"MOON_V1_128K\"] = \"moonshot-v1-128k\";\n  return MoonShotChatModel2;\n})(MoonShotChatModel || {});\nvar AliChatModel = /* @__PURE__ */ ((AliChatModel2) => {\n  AliChatModel2[\"QWEN_MAX\"] = \"qwen-max\";\n  AliChatModel2[\"QWEN_PLUS\"] = \"qwen-plus\";\n  AliChatModel2[\"QWEN_TURBO\"] = \"qwen-turbo\";\n  AliChatModel2[\"QWEN_LONG\"] = \"qwen-long\";\n  AliChatModel2[\"QWEN_CODE\"] = \"qwen-coder-turbo\";\n  AliChatModel2[\"QWEN_MATH\"] = \"qwen-math-plus\";\n  AliChatModel2[\"QWEN_VL_MAX\"] = \"qwen-vl-max\";\n  AliChatModel2[\"QWEN_VL_PLUS\"] = \"qwen-vl-plus\";\n  return AliChatModel2;\n})(AliChatModel || {});\nvar XAIChatModel = /* @__PURE__ */ ((XAIChatModel2) => {\n  XAIChatModel2[\"GROK2\"] = \"grok-2\";\n  XAIChatModel2[\"GROK2_VISION\"] = \"grok-2-vision\";\n  XAIChatModel2[\"GROK3\"] = \"grok-3\";\n  XAIChatModel2[\"GROK3_VISION\"] = \"grok-3-vision\";\n  return XAIChatModel2;\n})(XAIChatModel || {});\nvar ChatModel = {\n  ...OpenAIChatModel,\n  ...DeepSeekChatModel,\n  ...BaiduChatModel,\n  ...GLMChatModel,\n  ...IFlyTekChatModel,\n  ...GoogleChatModel,\n  ...OpenAIChatModel,\n  ...MoonShotChatModel,\n  ...AliChatModel,\n  ...XAIChatModel\n};\nvar MidJourneyImagineModel = /* @__PURE__ */ ((MidJourneyImagineModel2) => {\n  MidJourneyImagineModel2[\"MJ\"] = \"midjourney\";\n  return MidJourneyImagineModel2;\n})(MidJourneyImagineModel || {});\nvar OpenAIImagineModel = /* @__PURE__ */ ((OpenAIImagineModel2) => {\n  OpenAIImagineModel2[\"DALL_E_2\"] = \"dall-e-2\";\n  OpenAIImagineModel2[\"DALL_E_3\"] = \"dall-e-3\";\n  return OpenAIImagineModel2;\n})(OpenAIImagineModel || {});\nvar StabilityAIImagineModel = /* @__PURE__ */ ((StabilityAIImagineModel2) => {\n  StabilityAIImagineModel2[\"SD_1_6\"] = \"stable-diffusion-v1-6\";\n  StabilityAIImagineModel2[\"SD_XL_1024\"] = \"stable-diffusion-xl-1024-v1-0\";\n  return StabilityAIImagineModel2;\n})(StabilityAIImagineModel || {});\nvar IFlyTekImagineModel = /* @__PURE__ */ ((IFlyTekImagineModel2) => {\n  IFlyTekImagineModel2[\"V2\"] = \"v2.1\";\n  return IFlyTekImagineModel2;\n})(IFlyTekImagineModel || {});\nvar ImagineModel = {\n  ...OpenAIImagineModel,\n  ...MidJourneyImagineModel,\n  ...StabilityAIImagineModel,\n  ...IFlyTekImagineModel\n};\nvar ModelModel = { ...ChatModel, ...ImagineModel, ...EmbedModel };\nvar MJTaskType = /* @__PURE__ */ ((MJTaskType4) => {\n  MJTaskType4[\"IMAGINE\"] = \"IMAGINE\";\n  MJTaskType4[\"UPSCALE\"] = \"UPSCALE\";\n  MJTaskType4[\"VARIATION\"] = \"VARIATION\";\n  MJTaskType4[\"REROLL\"] = \"REROLL\";\n  MJTaskType4[\"DESCRIBE\"] = \"DESCRIBE\";\n  MJTaskType4[\"BLEND\"] = \"BLEND\";\n  return MJTaskType4;\n})(MJTaskType || {});\nvar DETaskType = /* @__PURE__ */ ((DETaskType2) => {\n  DETaskType2[\"GENERATION\"] = \"generations\";\n  DETaskType2[\"EDIT\"] = \"edits\";\n  DETaskType2[\"VARIATION\"] = \"variation\";\n  return DETaskType2;\n})(DETaskType || {});\nvar SDTaskType = /* @__PURE__ */ ((SDTaskType2) => {\n  SDTaskType2[\"GENERATION\"] = \"generation\";\n  return SDTaskType2;\n})(SDTaskType || {});\nvar SPKTaskType = /* @__PURE__ */ ((SPKTaskType2) => {\n  SPKTaskType2[\"GENERATION\"] = \"generation\";\n  return SPKTaskType2;\n})(SPKTaskType || {});\nvar ImgTaskType = { ...MJTaskType, ...DETaskType, ...SDTaskType, ...SPKTaskType };\nvar ChatRoleEnum = /* @__PURE__ */ ((ChatRoleEnum2) => {\n  ChatRoleEnum2[\"SYSTEM\"] = \"system\";\n  ChatRoleEnum2[\"USER\"] = \"user\";\n  ChatRoleEnum2[\"ASSISTANT\"] = \"assistant\";\n  ChatRoleEnum2[\"TOOL\"] = \"tool\";\n  ChatRoleEnum2[\"DEV\"] = \"developer\";\n  return ChatRoleEnum2;\n})(ChatRoleEnum || {});\nvar GPTChatRoleEnum = /* @__PURE__ */ ((GPTChatRoleEnum2) => {\n  GPTChatRoleEnum2[\"SYSTEM\"] = \"system\";\n  GPTChatRoleEnum2[\"USER\"] = \"user\";\n  GPTChatRoleEnum2[\"ASSISTANT\"] = \"assistant\";\n  GPTChatRoleEnum2[\"DEV\"] = \"developer\";\n  GPTChatRoleEnum2[\"TOOL\"] = \"tool\";\n  return GPTChatRoleEnum2;\n})(GPTChatRoleEnum || {});\nvar DSChatRoleEnum = /* @__PURE__ */ ((DSChatRoleEnum2) => {\n  DSChatRoleEnum2[\"SYSTEM\"] = \"system\";\n  DSChatRoleEnum2[\"USER\"] = \"user\";\n  DSChatRoleEnum2[\"ASSISTANT\"] = \"assistant\";\n  DSChatRoleEnum2[\"TOOL\"] = \"tool\";\n  return DSChatRoleEnum2;\n})(DSChatRoleEnum || {});\nvar SPKChatRoleEnum = /* @__PURE__ */ ((SPKChatRoleEnum2) => {\n  SPKChatRoleEnum2[\"USER\"] = \"user\";\n  SPKChatRoleEnum2[\"ASSISTANT\"] = \"assistant\";\n  SPKChatRoleEnum2[\"SYSTEM\"] = \"system\";\n  SPKChatRoleEnum2[\"TOOL\"] = \"tool\";\n  return SPKChatRoleEnum2;\n})(SPKChatRoleEnum || {});\nvar GLMChatRoleEnum = /* @__PURE__ */ ((GLMChatRoleEnum2) => {\n  GLMChatRoleEnum2[\"SYSTEM\"] = \"system\";\n  GLMChatRoleEnum2[\"USER\"] = \"user\";\n  GLMChatRoleEnum2[\"ASSISTANT\"] = \"assistant\";\n  GLMChatRoleEnum2[\"TOOL\"] = \"tool\";\n  return GLMChatRoleEnum2;\n})(GLMChatRoleEnum || {});\nvar GEMChatRoleEnum = /* @__PURE__ */ ((GEMChatRoleEnum2) => {\n  GEMChatRoleEnum2[\"USER\"] = \"user\";\n  GEMChatRoleEnum2[\"MODEL\"] = \"model\";\n  return GEMChatRoleEnum2;\n})(GEMChatRoleEnum || {});\nvar BDUChatRoleEnum = /* @__PURE__ */ ((BDUChatRoleEnum2) => {\n  BDUChatRoleEnum2[\"USER\"] = \"user\";\n  BDUChatRoleEnum2[\"ASSISTANT\"] = \"assistant\";\n  return BDUChatRoleEnum2;\n})(BDUChatRoleEnum || {});\n\n// src/providers/OpenAI.ts\nimport { PassThrough, Readable } from \"stream\";\nimport EventSourceStream from \"@server-sent-stream/node\";\nimport { decodeStream } from \"iconv-lite\";\n\n// src/util.ts\nimport { writeFileSync } from \"fs\";\nimport axios from \"axios\";\nimport { LocalStorage } from \"node-localstorage\";\nimport path from \"path\";\nimport isBase64 from \"is-base64\";\nvar localStorage = new LocalStorage(\"./cache\", Infinity);\nvar util_default = {\n  /**\n   * Performs an HTTP GET request.\n   *\n   * @param url - The URL to make the request to.\n   * @param params - Optional request parameters.\n   * @param config - Optional Axios request configuration.\n   * @returns A Promise that resolves with the response data.\n   */\n  async get(url, params, config) {\n    return (await axios.get(url, { params, ...config })).data;\n  },\n  /**\n   * Performs an HTTP POST request.\n   *\n   * @param url - The URL to make the request to.\n   * @param body - The request body.\n   * @param config - Optional Axios request configuration.\n   * @returns A Promise that resolves with the response data.\n   */\n  async post(url, body, config) {\n    return (await axios.post(url, body, config)).data;\n  },\n  /**\n   * Parses JSON from a string and returns it as a generic type T.\n   *\n   * @param str - The JSON string to parse.\n   * @returns The parsed JSON as a generic type T.\n   */\n  json(str) {\n    try {\n      if (!str) return null;\n      return JSON.parse(str);\n    } catch (e) {\n      return null;\n    }\n  },\n  getRandomKey(arr) {\n    return arr[Math.floor(Math.random() * arr.length)];\n  },\n  getRandomId(length = 16) {\n    let result = \"\";\n    while (result.length < length) {\n      let rand = Math.floor(Math.random() * 10);\n      if (result.length === 0 && rand === 0) continue;\n      result += rand.toString();\n    }\n    return result;\n  },\n  /**\n   * Computes the greatest common divisor (GCD) of two numbers using Euclidean algorithm.\n   *\n   * @param a - The first number.\n   * @param b - The second number.\n   * @returns The GCD of the two numbers.\n   */\n  getGCD(a, b) {\n    if (b === 0) return a;\n    return this.getGCD(b, a % b);\n  },\n  /**\n   * Calculates and returns the aspect ratio of a width and height.\n   *\n   * @param width - The width dimension.\n   * @param height - The height dimension.\n   * @returns The aspect ratio in the format \"width:height\".\n   */\n  getAspect(width, height) {\n    if (!width || !height) return \"1:1\";\n    const gcd = this.getGCD(width, height);\n    const aspectRatioWidth = width / gcd;\n    const aspectRatioHeight = height / gcd;\n    return `${aspectRatioWidth}:${aspectRatioHeight}`;\n  },\n  /**\n   * Stores an item in local storage with the specified key.\n   *\n   * @param key - The key under which to store the item.\n   * @param value - The value to be stored.\n   */\n  setItem(key, value) {\n    localStorage.setItem(key, JSON.stringify(value));\n  },\n  /**\n   * Retrieves an item from local storage by its key and parses it as a generic type T.\n   *\n   * @param key - The key of the item to retrieve.\n   * @returns The parsed item as a generic type T.\n   */\n  getItem(key) {\n    return this.json(localStorage.getItem(key));\n  },\n  /**\n   * This method is used to write given data to a file. The data can either be a base64 string or an HTTP/HTTPS URL.\n   * If the data is a URL, the method fetches the data as a readable stream and writes it to the file.\n   * If it's a base64 string, it writes it directly to the file.\n   * @param data - The data to be written to the file. Can be a base64 string or a HTTP/HTTPS img URL.\n   * @param filename - The name of the file where the data will be written. If not provided, a unique filename will be generated.\n   * @returns - The file path where the data was written.\n   */\n  async writeFile(data, filename = \"\") {\n    const filepath = path.join(\"./cache\", filename);\n    if (data.startsWith(\"http://\") || data.startsWith(\"https://\")) {\n      const res = await this.get(data, {}, { responseType: \"arraybuffer\" });\n      if (!(res instanceof Buffer)) throw new Error(\"Img is not a buffer\");\n      writeFileSync(filepath, res);\n    } else writeFileSync(filepath, Buffer.from(data, \"base64\"));\n    return filepath;\n  },\n  isBase64(data, allowMime = true) {\n    return isBase64(data, { allowMime });\n  }\n};\n\n// src/providers/OpenAI.ts\nvar STORAGE_KEY = \"task_open_ai\";\nvar API = \"https://api.openai.com\";\nvar VER = \"v1\";\nvar OpenAI = class {\n  /**\n   * Constructor for the OpenAI class.\n   *\n   * @param key - The API key for OpenAI.\n   * @param api - The API endpoint for proxy (optional).\n   */\n  constructor(key, api = API) {\n    this.key = key;\n    this.api = api;\n  }\n  /**\n   * Fetches embeddings for input text.\n   *\n   * @param input - An array of input strings.\n   * @param model - The model to use for embeddings (default: text-embedding-ada-002).\n   * @returns A promise resolving to the embedding response.\n   */\n  async embedding(input, model = \"text-embedding-ada-002\" /* ADA */) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"OpenAI API key is not set in config\");\n    const res = await util_default.post(\n      `${this.api}/${VER}/embeddings`,\n      { model, input },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: \"json\" }\n    );\n    const data = {\n      embedding: res.data.map((v) => v.embedding),\n      object: \"embedding\",\n      model,\n      promptTokens: res.usage.prompt_tokens || 0,\n      totalTokens: res.usage.total_tokens || 0\n    };\n    return data;\n  }\n  /**\n   * Sends messages to the GPT chat model.\n   *\n   * @param messages - An array of chat messages.\n   * @param model - The model to use for chat (default: gpt-3.5-turbo).\n   * @param stream - Whether to use stream response (default: false).\n   * @param top - Top probability to sample (optional).\n   * @param temperature - Temperature for sampling (optional).\n   * @param maxLength - Maximum token length for response (optional).\n   * @param tools - Tools for model to use (optional).\n   * @param toolChoice - Controls which (if any) tool is called by the model: none, required, auto (optional).\n   * @returns A promise resolving to the chat response or a stream.\n   */\n  async chat(messages, model = \"gpt-4o\" /* GPT_4O */, stream = false, top, temperature, maxLength, tools, toolChoice) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"OpenAI API key is not set in config\");\n    if (![\n      \"gpt-4-turbo\" /* GPT4_TURBO */,\n      \"gpt-4o\" /* GPT_4O */,\n      \"gpt-4o-mini\" /* GPT_4O_MINI */,\n      \"chatgpt-4o-latest\" /* CHAT_GPT_4O */,\n      \"o1\" /* O1 */,\n      \"o1-mini\" /* O1_MINI */,\n      \"o1-preview\" /* O1_PRE */\n    ].includes(model))\n      messages = messages.map(({ role, content }) => ({ role, content }));\n    if (typeof temperature === \"number\") {\n      if (temperature < 0) temperature = 0;\n      if (temperature > 1) temperature = 1;\n    }\n    if (typeof top === \"number\") {\n      if (top < 0) top = 0;\n      if (top > 1) top = 1;\n    }\n    const res = await util_default.post(\n      `${this.api}/${VER}/chat/completions`,\n      {\n        model,\n        messages: this.formatMessage(messages),\n        stream,\n        temperature,\n        top_p: top,\n        max_completion_tokens: maxLength,\n        tools,\n        tool_choice: toolChoice\n      },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? \"stream\" : \"json\" }\n    );\n    const data = {\n      content: \"\",\n      model,\n      object: \"\",\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0\n    };\n    if (res instanceof Readable) {\n      const output = new PassThrough();\n      const parser = new EventSourceStream();\n      parser.on(\"data\", (e) => {\n        const obj = util_default.json(e.data);\n        if (obj) {\n          data.content = obj.choices[0]?.delta?.content || \"\";\n          if (obj.choices[0]?.delta?.tool_calls) data.tools = obj.choices[0]?.delta?.tool_calls;\n          data.model = obj.model;\n          data.object = obj.object;\n          data.promptTokens = obj.usage?.prompt_tokens || 0;\n          data.completionTokens = obj.usage?.completion_tokens || 0;\n          data.totalTokens = obj.usage?.total_tokens || 0;\n          output.write(JSON.stringify(data));\n        }\n      });\n      parser.on(\"error\", (e) => output.destroy(e));\n      parser.on(\"end\", () => output.end());\n      res.pipe(decodeStream(\"utf-8\")).pipe(parser);\n      return output;\n    } else {\n      data.content = res.choices[0]?.message?.content || \"\";\n      if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls;\n      data.model = res.model;\n      data.object = res.object;\n      data.promptTokens = res.usage?.prompt_tokens || 0;\n      data.completionTokens = res.usage?.completion_tokens || 0;\n      data.totalTokens = res.usage?.total_tokens || 0;\n      return data;\n    }\n  }\n  /**\n   * Generates images based on a prompt.\n   *\n   * @param prompt - The prompt for image generation.\n   * @param width - Image width (default: 1024).\n   * @param height - Image height (default: 1024).\n   * @param n - Number of images to generate (default: 1).\n   * @param model - Model choice (default: dall-e-3).\n   * @returns A promise resolving to the image generation response.\n   */\n  async imagine(prompt, width = 1024, height = 1024, n = 1, model = \"dall-e-3\" /* DALL_E_3 */) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"OpenAI API key is not set in config\");\n    const res = await util_default.post(\n      `${this.api}/${VER}/images/${\"generations\" /* GENERATION */}`,\n      { model, prompt, n, size: `${width}x${height}`, response_format: \"b64_json\" },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: \"json\" }\n    );\n    const id = util_default.getRandomId();\n    const imgs = [];\n    for (const i in res.data) imgs.push(await util_default.writeFile(res.data[i].b64_json, `${id}-${i}.png`));\n    const time = Date.now();\n    const task = {\n      id,\n      type: \"generations\" /* GENERATION */,\n      info: \"success\",\n      progress: 100,\n      imgs,\n      fail: \"\",\n      created: time,\n      model\n    };\n    const tasks = util_default.getItem(STORAGE_KEY) || [];\n    tasks.push(task);\n    util_default.setItem(STORAGE_KEY, tasks);\n    return { taskId: task.id, time };\n  }\n  /**\n   * Simulate tasks.\n   *\n   * @param id - The task ID to retrieve (optional).\n   * @returns An array of task responses or a specific task by ID.\n   */\n  task(id) {\n    const tasks = util_default.getItem(STORAGE_KEY) || [];\n    if (id) return tasks.filter((v) => v.id === id);\n    else return tasks;\n  }\n  /**\n   * Formats chat messages according to the GPT model's message format.\n   *\n   * @param messages - An array of chat messages.\n   * @returns Formatted messages compatible with the GPT model.\n   */\n  formatMessage(messages) {\n    const prompt = [];\n    for (const { role, content, img, tool } of messages) {\n      switch (role) {\n        case \"user\" /* USER */:\n          if (img)\n            prompt.push({\n              role,\n              content: [\n                { type: \"text\", text: content },\n                { type: \"image_url\", image_url: { url: img } }\n              ]\n            });\n          else prompt.push({ role, content });\n          break;\n        case \"tool\" /* TOOL */:\n          prompt.push({ role, content, tool_call_id: tool });\n          break;\n        default:\n          prompt.push({ role, content });\n          break;\n      }\n    }\n    return prompt;\n  }\n};\n\n// src/providers/GLM.ts\nimport { PassThrough as PassThrough2, Readable as Readable2 } from \"stream\";\nimport EventSourceStream2 from \"@server-sent-stream/node\";\nimport { decodeStream as decodeStream2 } from \"iconv-lite\";\nvar API2 = \"https://open.bigmodel.cn\";\nvar GLM = class {\n  constructor(key, proxyAPI = API2) {\n    this.key = key;\n    this.proxyAPI = proxyAPI;\n  }\n  /**\n   * Fetches embeddings for input text.\n   *\n   * @param input - An array of input strings.\n   * @param model - The model to use for embeddings (default: text-embedding-ada-002).\n   * @returns A promise resolving to the embedding response.\n   */\n  async embedding(input, model = \"embedding-2\" /* EMBED_2 */, dimensions = 1024) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"ZhiPu GLM API key is not set in config\");\n    const res = await util_default.post(\n      `${this.proxyAPI}/api/paas/v4/embeddings`,\n      { model, input, dimensions },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: \"json\" }\n    );\n    return {\n      embedding: res.data.map((v) => v.embedding),\n      object: \"embedding\",\n      model,\n      promptTokens: res.usage.prompt_tokens,\n      totalTokens: res.usage.total_tokens\n    };\n  }\n  /**\n   * Sends messages to the GLM chat model.\n   *\n   * @param messages - An array of chat messages.\n   * @param model - The model to use for chat (default: GLM_6B a local deployed chatglm3-6b-32k).\n   * @param stream - Whether to use stream response (default: false).\n   * @param top - Top probability to sample (optional).\n   * @param temperature - Temperature for sampling (optional).\n   * @param maxLength - Maximum token length for response (optional).\n   * @returns A promise resolving to the chat response or a stream.\n   */\n  async chat(messages, model = \"glm-3-turbo\" /* GLM_3_TURBO */, stream = false, top, temperature, maxLength, tools, toolChoice) {\n    if (![\"glm-4v\" /* GLM_4V */, \"glm-4v-plus\" /* GLM_4V_PLUS */].includes(model))\n      messages = messages.map(({ role, content }) => ({ role, content }));\n    if (typeof temperature === \"number\") {\n      if (temperature <= 0) temperature = 0.1;\n      if (temperature > 1) temperature = 1;\n    }\n    if (typeof top === \"number\") {\n      if (top <= 0) top = 0.1;\n      if (top >= 1) top = 0.9;\n    }\n    const data = {\n      content: \"\",\n      model,\n      object: \"\",\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0\n    };\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"ZhiPu GLM API key is not set in config\");\n    const res = await util_default.post(\n      `${this.proxyAPI}/api/paas/v4/chat/completions`,\n      {\n        model,\n        messages: this.formatMessage(messages),\n        stream,\n        temperature,\n        top_p: top,\n        max_tokens: maxLength,\n        tools,\n        tool_choice: toolChoice\n      },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? \"stream\" : \"json\" }\n    );\n    if (res instanceof Readable2) {\n      const output = new PassThrough2();\n      const parser = new EventSourceStream2();\n      parser.on(\"data\", (e) => {\n        const obj = util_default.json(e.data);\n        if (obj) {\n          data.content = obj.choices[0]?.delta?.content || \"\";\n          if (obj.choices[0]?.delta?.tool_calls) data.tools = obj.choices[0]?.delta?.tool_calls;\n          data.model = obj.model;\n          data.object = obj.object || \"chat.completion.chunk\";\n          data.promptTokens = obj.usage?.prompt_tokens || 0;\n          data.completionTokens = obj.usage?.completion_tokens || 0;\n          data.totalTokens = obj.usage?.total_tokens || 0;\n          if (data.content) output.write(JSON.stringify(data));\n        }\n      });\n      parser.on(\"error\", (e) => output.destroy(e));\n      parser.on(\"end\", () => output.end());\n      res.pipe(decodeStream2(\"utf-8\")).pipe(parser);\n      return output;\n    } else {\n      data.content = res.choices[0]?.message?.content || \"\";\n      if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls;\n      data.model = res.model;\n      data.object = res.object || \"chat.completion\";\n      data.promptTokens = res.usage?.prompt_tokens || 0;\n      data.completionTokens = res.usage?.completion_tokens || 0;\n      data.totalTokens = res.usage?.total_tokens || 0;\n      return data;\n    }\n  }\n  /**\n   * Formats chat messages according to the GPT model's message format.\n   *\n   * @param messages - An array of chat messages.\n   * @returns Formatted messages compatible with the GPT model.\n   */\n  formatMessage(messages) {\n    const prompt = [];\n    for (const { role, content, img, tool } of messages) {\n      if (role === \"developer\" /* DEV */) continue;\n      switch (role) {\n        case \"user\" /* USER */:\n          if (img)\n            prompt.push({\n              role,\n              content: [\n                { type: \"text\", text: content },\n                { type: \"image_url\", image_url: { url: img } }\n              ]\n            });\n          else prompt.push({ role, content });\n          break;\n        case \"tool\" /* TOOL */:\n          prompt.push({\n            role,\n            content,\n            tool_call_id: tool || \"\"\n          });\n          break;\n        default:\n          prompt.push({ role, content });\n          break;\n      }\n    }\n    return prompt;\n  }\n};\n\n// src/providers/Other.ts\nimport { decodeStream as decodeStream3 } from \"iconv-lite\";\nimport { PassThrough as PassThrough3, Readable as Readable3 } from \"stream\";\nimport EventSourceStream3 from \"@server-sent-stream/node\";\nvar Other = class {\n  /**\n   * Constructor for the OpenAI class.\n   *\n   * @param api - The API endpoint for the model (optional).\n   * @param key - The API key for the model (Optional).\n   */\n  constructor(api, key) {\n    this.api = api;\n    this.key = key;\n  }\n  /**\n   * Fetches embeddings for input text.\n   *\n   * @param input - An array of input strings.\n   * @param model - The model to use for embeddings (default: text-embedding-ada-002).\n   * @returns A promise resolving to the embedding response.\n   */\n  async embedding(input, model = EmbedModel.BGE_M3) {\n    if (!this.api) throw new Error(\"Other embed model API is not set in config\");\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    const res = await util_default.post(\n      `${this.api}/v1/embeddings`,\n      { model, input },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: \"json\" }\n    );\n    const data = {\n      embedding: res.data.map((v) => v.embedding),\n      object: \"embedding\",\n      model,\n      promptTokens: res.usage.prompt_tokens || 0,\n      totalTokens: res.usage.total_tokens || 0\n    };\n    return data;\n  }\n  /**\n   * Sends messages to the GPT compatible chat model.\n   *\n   * @param messages - An array of chat messages.\n   * @param model - The model to use for chat (default: gpt-3.5-turbo).\n   * @param stream - Whether to use stream response (default: false).\n   * @param top - Top probability to sample (optional).\n   * @param temperature - Temperature for sampling (optional).\n   * @param maxLength - Maximum token length for response (optional).\n   * @returns A promise resolving to the chat response or a stream.\n   */\n  async chat(messages, model = ChatModel.GPT3, stream = false, top, temperature, maxLength, tools, toolChoice) {\n    if (!this.api) throw new Error(\"Other chat model API is not set in config\");\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    const res = await util_default.post(\n      `${this.api}/v1/chat/completions`,\n      {\n        model,\n        messages: this.formatMessage(messages),\n        stream,\n        temperature,\n        top_p: top,\n        max_tokens: maxLength,\n        tools,\n        tool_choice: toolChoice\n      },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? \"stream\" : \"json\" }\n    );\n    const data = {\n      content: \"\",\n      model,\n      object: \"\",\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0\n    };\n    if (res instanceof Readable3) {\n      const output = new PassThrough3();\n      const parser = new EventSourceStream3();\n      parser.on(\"data\", (e) => {\n        const obj = util_default.json(e.data);\n        if (obj) {\n          data.content = obj.choices[0]?.delta?.content || \"\";\n          if (obj.choices[0]?.delta?.tool_calls) data.tools = obj.choices[0]?.delta?.tool_calls;\n          data.model = obj.model || model;\n          data.object = obj.object || \"chat.completion.chunk\";\n          data.promptTokens = obj.usage?.prompt_tokens || 0;\n          data.completionTokens = obj.usage?.completion_tokens || 0;\n          data.totalTokens = obj.usage?.total_tokens || 0;\n          output.write(JSON.stringify(data));\n        }\n      });\n      parser.on(\"error\", (e) => output.destroy(e));\n      parser.on(\"end\", () => output.end());\n      res.pipe(decodeStream3(\"utf-8\")).pipe(parser);\n      return output;\n    } else {\n      data.content = res.choices[0]?.message?.content || \"\";\n      if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls;\n      data.model = res.model || model;\n      data.object = res.object || \"chat.completion\";\n      data.promptTokens = res.usage?.prompt_tokens || 0;\n      data.completionTokens = res.usage?.completion_tokens || 0;\n      data.totalTokens = res.usage?.total_tokens || 0;\n      return data;\n    }\n  }\n  /**\n   * Formats chat messages according to the GPT model's message format.\n   *\n   * @param messages - An array of chat messages.\n   * @returns Formatted messages compatible with the GPT model.\n   */\n  formatMessage(messages) {\n    const prompt = [];\n    for (const { role, content, img, tool } of messages) {\n      switch (role) {\n        case \"user\" /* USER */:\n          if (img)\n            prompt.push({\n              role,\n              content: [\n                { type: \"text\", text: content },\n                { type: \"image_url\", image_url: { url: img } }\n              ]\n            });\n          else prompt.push({ role, content });\n          break;\n        case \"tool\" /* TOOL */:\n          prompt.push({\n            role,\n            content,\n            tool_call_id: tool || \"\"\n          });\n          break;\n        default:\n          prompt.push({ role, content });\n          break;\n      }\n    }\n    return prompt;\n  }\n};\n\n// src/providers/Google.ts\nimport { PassThrough as PassThrough4, Readable as Readable4 } from \"stream\";\nimport { JSONParser } from \"@streamparser/json-node\";\nimport { decodeStream as decodeStream4 } from \"iconv-lite\";\nimport { extname } from \"path\";\nimport { readFileSync } from \"fs\";\nvar API3 = \"https://generativelanguage.googleapis.com\";\nvar SAFE_SET = [\n  { category: \"HARM_CATEGORY_HARASSMENT\", threshold: \"BLOCK_NONE\" },\n  { category: \"HARM_CATEGORY_HATE_SPEECH\", threshold: \"BLOCK_NONE\" },\n  { category: \"HARM_CATEGORY_SEXUALLY_EXPLICIT\", threshold: \"BLOCK_NONE\" },\n  { category: \"HARM_CATEGORY_DANGEROUS_CONTENT\", threshold: \"BLOCK_NONE\" }\n];\nvar Google = class {\n  /**\n   * Google API client class for chat functionalities.\n   * @param key - The Google API key or an array of keys.\n   * @param api - The API endpoint (default: 'https://generativelanguage.googleapis.com').\n   */\n  constructor(key, api = API3) {\n    this.key = key;\n    this.api = api;\n  }\n  /**\n   * Fetches embeddings for input text.\n   *\n   * @param input - An array of input strings.\n   * @param model - The model to use for embeddings (default: text-embedding-ada-002).\n   * @returns A promise resolving to the embedding response.\n   */\n  async embedding(input, model = \"text-embedding-004\" /* EMBED_4 */) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"Google API key is not set in config\");\n    const request = [];\n    for (const text of input) {\n      request.push(\n        util_default.post(\n          `${this.api}/v1beta/models/${model}:embedContent?key=${key}`,\n          { model: `models/${model}`, content: { parts: [{ text }] } }\n        )\n      );\n    }\n    const res = await Promise.all(request);\n    const data = {\n      embedding: res.map((v) => v.embedding.values),\n      object: \"embedding\",\n      model,\n      promptTokens: 0,\n      totalTokens: 0\n    };\n    return data;\n  }\n  /**\n   * Sends messages to the Google Gemini chat model.\n   * @param messages - An array of chat messages.\n   * @param model - The model to use for chat (default: gemini-pro).\n   * @param stream - Whether to use stream response (default: false).\n   * @param top - Top probability to sample (optional).\n   * @param temperature - Temperature for sampling (optional).\n   * @param maxLength - Maximum token length for response (optional).\n   * @returns A promise resolving to the chat response or a stream.\n   */\n  async chat(messages, model = \"gemini-1.5-pro\" /* GEM_PRO_1_5 */, stream = false, top, temperature, maxLength) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"Google AI API key is not set in config\");\n    if (typeof temperature === \"number\") {\n      if (temperature < 0) temperature = 0;\n      if (temperature > 1) temperature = 1;\n    }\n    if (typeof top === \"number\") {\n      if (top < 0) top = 0;\n      if (top > 1) top = 1;\n    }\n    const res = await util_default.post(\n      `${this.api}/v1beta/models/${model}:${stream ? \"streamGenerateContent\" : \"generateContent\"}?key=${key}`,\n      {\n        contents: await this.formatMessage(messages),\n        system_instruction: {\n          parts: {\n            text: messages.filter((v) => v.role === \"system\" /* SYSTEM */).map((v) => v.content).join(\"\\n\")\n          }\n        },\n        generationConfig: { topP: top, temperature, maxOutputTokens: maxLength },\n        safetySettings: SAFE_SET\n      },\n      { responseType: stream ? \"stream\" : \"json\" }\n    );\n    const data = {\n      content: \"\",\n      model,\n      object: \"\",\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0\n    };\n    if (res instanceof Readable4) {\n      const output = new PassThrough4();\n      const parser = new JSONParser();\n      parser.on(\"data\", ({ value }) => {\n        if (value.candidates || value.promptFeedback) {\n          const obj = value;\n          const block = obj.promptFeedback?.blockReason;\n          if (block) return output.destroy(new Error(`Content blocked, reason: ${block}`));\n          if (!obj.candidates) return output.destroy(new Error(\"Google API error, no candidates\"));\n          const candidate = obj.candidates[0];\n          if (!candidate.content) return output.destroy(new Error(candidate.finishReason));\n          data.content = candidate.content.parts[0].text || \"\";\n          data.object = `chat.completion.chunk`;\n          return output.write(JSON.stringify(data));\n        } else return output;\n      });\n      parser.on(\"error\", (e) => output.destroy(e));\n      parser.on(\"end\", () => output.end());\n      res.pipe(decodeStream4(\"utf-8\")).pipe(parser);\n      return output;\n    } else {\n      const block = res.promptFeedback?.blockReason;\n      if (block) throw new Error(`Content blocked, reason: ${block}`);\n      if (!res.candidates) throw new Error(\"Google API error, no candidates\");\n      const candidate = res.candidates[0];\n      if (!candidate.content) throw new Error(candidate.finishReason);\n      data.content = candidate.content.parts[0].text || candidate.finishReason;\n      data.object = `chat.completion`;\n      return data;\n    }\n  }\n  /**\n   * Formats chat messages into GEMChatMessage format.\n   * @param messages - An array of chat messages.\n   * @returns A formatted array of GEMChatMessage.\n   */\n  async formatMessage(messages) {\n    const prompt = [];\n    let input = \"\";\n    let base64 = null;\n    for (const { role, content, img } of messages) {\n      if (!content) continue;\n      if (role === \"system\" /* SYSTEM */) continue;\n      if (img) base64 = await this.toBase64(img);\n      if (role !== \"assistant\" /* ASSISTANT */) input += `\n${content}`;\n      else {\n        input = input.trim();\n        prompt.push({\n          role: \"user\" /* USER */,\n          parts: base64 ? [{ text: input || \" \" }, { inline_data: { mime_type: base64.mime, data: base64.data } }] : [{ text: input || \" \" }]\n        });\n        prompt.push({ role: \"model\" /* MODEL */, parts: [{ text: content }] });\n        input = \"\";\n      }\n    }\n    input = input.trim();\n    if (!input) throw new Error(\"User input nothing\");\n    prompt.push({\n      role: \"user\" /* USER */,\n      parts: base64 ? [{ text: input || \" \" }, { inline_data: { mime_type: base64.mime, data: base64.data } }] : [{ text: input || \" \" }]\n    });\n    return base64 ? [prompt[prompt.length - 1]] : prompt;\n  }\n  /**\n   * Convert an image to base64 format object.\n   * @param img The image string to convert.\n   * @returns An object containing the MIME type and base64 data.\n   */\n  async toBase64(img) {\n    let mime = \"\";\n    let data = \"\";\n    if (util_default.isBase64(img)) {\n      if (util_default.isBase64(img, false)) {\n        data = img;\n        mime = \"image/png\";\n      } else {\n        const match = img.match(/^data:image\\/([a-zA-Z]*);base64,([^\\\"']*)$/);\n        if (match) {\n          mime = `image/${match[1]}`;\n          data = match[2];\n        }\n      }\n    } else if (img.startsWith(\"http\")) {\n      const res = await util_default.get(img, {}, { responseType: \"arraybuffer\" });\n      mime = `image/${[\"png\", \"jpg\", \"jpeg\", \"webp\", \"heic\", \"heif\"].find((f) => img.toLowerCase().includes(f))?.replace(\"jpg\", \"jpeg\") || \"png\"}`;\n      data = res.toString(\"base64\");\n    } else {\n      mime = `image/${extname(img).replace(\".\", \"\").toLowerCase()}`;\n      data = readFileSync(img).toString(\"base64\");\n    }\n    if (!mime || !data) throw new Error(\"Can not transfer base64\");\n    return { mime, data };\n  }\n};\n\n// src/providers/IFlyTek.ts\nimport { createHmac } from \"crypto\";\nimport { hostname } from \"os\";\nimport { PassThrough as PassThrough5, Readable as Readable5 } from \"stream\";\nimport EventSourceStream4 from \"@server-sent-stream/node\";\nimport { decodeStream as decodeStream5 } from \"iconv-lite\";\nvar CHAT_API = \"https://spark-api-open.xf-yun.com\";\nvar IMAGINE_API = \"https://spark-api.cn-huabei-1.xf-yun.com\";\nvar STORAGE_KEY2 = \"task_iflytek\";\nvar IFlyTek = class {\n  /**\n   * Constructor for IFlyTek class.\n   * @param key - The API key for MoonShot.\n   * @param api - The API endpoint for proxy (optional).\n   */\n  constructor(pass, key, secret, appid, api = CHAT_API) {\n    this.pass = pass;\n    this.key = key;\n    this.secret = secret;\n    this.appid = appid;\n    this.api = api;\n  }\n  /**\n   * Initiates a chat conversation with IFLYTEK Spark API.\n   *\n   * @param messages - An array of chat messages.\n   * @param model - The Spark model version to use (default: SPARK_DEFAULT_MODEL_VERSION).\n   * @param stream - Whether to use stream response (default: false).\n   * @param top - Top probability to sample (optional).\n   * @param temperature - Temperature for sampling (optional).\n   * @param maxLength - Maximum token length for response (optional).\n   * @returns A promise resolving to the chat response or a stream.\n   */\n  async chat(messages, model = \"lite\" /* SPARK_LITE */, stream = false, top, temperature, maxLength, tools, toolChoice) {\n    const key = Array.isArray(this.pass) ? util_default.getRandomKey(this.pass) : this.pass;\n    if (!key) throw new Error(\"IFlyTek Spark API Password is not set in config\");\n    if (typeof top === \"number\") {\n      if (top <= 0) top = 0.1;\n      if (top > 1) top = 1;\n    }\n    if (typeof temperature === \"number\") {\n      if (temperature < 0) temperature = 0;\n      if (temperature > 2) temperature = 2;\n    }\n    const res = await util_default.post(\n      `${this.api}/v1/chat/completions`,\n      {\n        model,\n        messages: this.formatMessage(messages),\n        stream,\n        temperature,\n        top_p: top,\n        max_tokens: maxLength,\n        tools,\n        tool_choice: toolChoice\n      },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? \"stream\" : \"json\" }\n    );\n    const data = {\n      content: \"\",\n      model,\n      object: \"\",\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0\n    };\n    if (res instanceof Readable5) {\n      const output = new PassThrough5();\n      const parser = new EventSourceStream4();\n      parser.on(\"data\", (e) => {\n        const obj = util_default.json(e.data);\n        if (obj) {\n          data.content = obj.choices[0]?.delta?.content || \"\";\n          if (obj.choices[0]?.delta?.tool_calls) data.tools = obj.choices[0]?.delta?.tool_calls;\n          data.model = model;\n          data.object = \"chat.completion.chunk\";\n          data.promptTokens = obj.usage?.prompt_tokens || 0;\n          data.completionTokens = obj.usage?.completion_tokens || 0;\n          data.totalTokens = obj.usage?.total_tokens || 0;\n          output.write(JSON.stringify(data));\n        }\n      });\n      parser.on(\"error\", (e) => output.destroy(e));\n      parser.on(\"end\", () => output.end());\n      res.pipe(decodeStream5(\"utf-8\")).pipe(parser);\n      return output;\n    } else {\n      data.content = res.choices[0]?.message?.content || \"\";\n      if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls;\n      data.model = model;\n      data.object = \"chat.completion\";\n      data.promptTokens = res.usage?.prompt_tokens || 0;\n      data.completionTokens = res.usage?.completion_tokens || 0;\n      data.totalTokens = res.usage?.total_tokens || 0;\n      return data;\n    }\n  }\n  /**\n   * Generate an image based on the given prompt.\n   * @param prompt The prompt for image generation.\n   * @param width The width of the image, default is 512.\n   * @param height The height of the image, default is 512.\n   * @param model The model to use for generating the image, default is IFlyTekImagineModel.V2.\n   */\n  async imagine(prompt, width = 512, height = 512, model = \"v2.1\" /* V2 */) {\n    if (!this.appid) throw new Error(\"IFlyTek APP ID is not set in config\");\n    const url = this.getImagineURL(model);\n    const res = await util_default.post(url, {\n      header: { app_id: this.appid },\n      payload: { message: { text: [{ role: \"user\", content: prompt }] } },\n      parameter: { chat: { domain: \"general\", width, height } }\n    });\n    if (res.header.code !== 0) throw new Error(res.header.message);\n    if (!res.payload) throw new Error(\"Fail to generate image, empty payload\");\n    const id = util_default.getRandomId();\n    const imgs = [];\n    for (const i in res.payload.choices.text)\n      imgs.push(await util_default.writeFile(res.payload.choices.text[i].content, `${id}-${i}.png`));\n    const time = Date.now();\n    const task = {\n      id,\n      type: \"generation\" /* GENERATION */,\n      info: \"success\",\n      progress: 100,\n      imgs,\n      fail: \"\",\n      created: time,\n      model\n    };\n    const tasks = util_default.getItem(STORAGE_KEY2) || [];\n    tasks.push(task);\n    util_default.setItem(STORAGE_KEY2, tasks);\n    return { taskId: task.id, time };\n  }\n  /**\n   * Simulate tasks.\n   *\n   * @param id - The task ID to retrieve (optional).\n   * @returns An array of task responses or a specific task by ID.\n   */\n  task(id) {\n    const tasks = util_default.getItem(STORAGE_KEY2) || [];\n    if (id) return tasks.filter((v) => v.id === id);\n    else return tasks;\n  }\n  /**\n   * Generates the Imagine API URL.\n   *\n   * @param model - The Spark imagine model.\n   */\n  getImagineURL(model) {\n    if (!this.secret) throw new Error(\"IFlyTek API secret is not set in config\");\n    if (!this.key) throw new Error(\"IFlyTek API key is not set in config\");\n    const host = hostname();\n    const date = (/* @__PURE__ */ new Date()).toUTCString();\n    const algorithm = \"hmac-sha256\";\n    const headers = \"host date request-line\";\n    const signatureOrigin = `host: ${host}\ndate: ${date}\nPOST /${model}/tti HTTP/1.1`;\n    const signatureSha = createHmac(\"sha256\", this.secret).update(signatureOrigin).digest(\"hex\");\n    const signature = Buffer.from(signatureSha, \"hex\").toString(\"base64\");\n    const authorizationOrigin = `api_key=\"${this.key}\", algorithm=\"${algorithm}\", headers=\"${headers}\", signature=\"${signature}\"`;\n    const authorization = Buffer.from(authorizationOrigin).toString(\"base64\");\n    return `${IMAGINE_API}/${model}/tti?authorization=${authorization}&date=${date}&host=${host}`;\n  }\n  /**\n   * Format the chat message for IFlyTek Spark model.\n   *\n   * @param messages - Original chat messages\n   */\n  formatMessage(messages) {\n    const prompt = [];\n    for (const { role, content } of messages) {\n      if (role === \"developer\" /* DEV */) continue;\n      prompt.push({ role, content });\n    }\n    return prompt;\n  }\n};\n\n// src/providers/Baidu.ts\nimport { PassThrough as PassThrough6, Readable as Readable6 } from \"stream\";\nimport EventSourceStream5 from \"@server-sent-stream/node\";\nimport { decodeStream as decodeStream6 } from \"iconv-lite\";\nvar API4 = \"https://aip.baidubce.com\";\nvar STORAGE_KEY3 = \"baidu\";\nvar Baidu = class {\n  constructor(key, secret, api = API4) {\n    this.key = key;\n    this.secret = secret;\n    this.api = api;\n  }\n  /**\n   * Sends messages to the GLM chat model.\n   *\n   * @param messages - An array of chat messages.\n   * @param model - The submodel to use for chat (default: ERNIE 8K).\n   * @param stream - Whether to use stream response (default: false).\n   * @param top - Top probability to sample (optional).\n   * @param temperature - Temperature for sampling (optional).\n   * @param maxLength - Maximum token length for response (optional).\n   * @returns A promise resolving to the chat response or a stream.\n   */\n  async chat(messages, model = \"completions\" /* ERNIE_3_5 */, stream = false, top, temperature, maxLength) {\n    if (typeof temperature === \"number\") {\n      if (temperature <= 0) temperature = 0.1;\n      if (temperature > 1) temperature = 1;\n    }\n    if (typeof top === \"number\") {\n      if (top < 0) top = 0;\n      if (top > 1) top = 1;\n    }\n    const token = await this.getAccessToken();\n    const res = await util_default.post(\n      `${this.api}/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/${model}?access_token=${token}`,\n      {\n        messages: this.formatMessage(messages),\n        system: messages[0]?.role === \"system\" /* SYSTEM */ ? messages[0].content : \"\",\n        stream,\n        temperature,\n        top_p: top,\n        max_output_tokens: maxLength\n      },\n      { responseType: stream ? \"stream\" : \"json\" }\n    );\n    const data = {\n      content: \"\",\n      model,\n      object: \"\",\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0\n    };\n    if (res instanceof Readable6) {\n      const output = new PassThrough6();\n      const parser = new EventSourceStream5();\n      parser.on(\"data\", (e) => {\n        const obj = util_default.json(e.data);\n        if (obj) {\n          data.content = obj.result || \"\";\n          data.model = model;\n          data.object = obj.object;\n          data.promptTokens = obj.usage?.prompt_tokens || 0;\n          data.completionTokens = obj.usage?.completion_tokens || 0;\n          data.totalTokens = obj.usage?.total_tokens || 0;\n          output.write(JSON.stringify(data));\n        }\n      });\n      parser.on(\"error\", (e) => output.destroy(e));\n      parser.on(\"end\", () => output.end());\n      res.pipe(decodeStream6(\"utf-8\")).pipe(parser);\n      return output;\n    } else {\n      if (res.error_code) throw new Error(res.error_msg);\n      data.content = res.result || \"\";\n      data.model = model;\n      data.object = res.object;\n      data.promptTokens = res.usage?.prompt_tokens || 0;\n      data.completionTokens = res.usage?.completion_tokens || 0;\n      data.totalTokens = res.usage?.total_tokens || 0;\n      return data;\n    }\n  }\n  // get baidu access token\n  async getAccessToken() {\n    if (!this.key) throw new Error(\"Baidu API key is not set in config\");\n    if (!this.secret) throw new Error(\"Baidu API secret is not set in config\");\n    const now = Date.now();\n    const cache = util_default.getItem(STORAGE_KEY3);\n    if (cache && cache.expires_in > now) return cache.access_token;\n    const res = await util_default.get(`${this.api}/oauth/2.0/token`, {\n      grant_type: \"client_credentials\",\n      client_id: this.key,\n      client_secret: this.secret\n    });\n    if (res.error) throw new Error(res.error_description);\n    res.expires_in = now + res.expires_in * 1e3;\n    util_default.setItem(STORAGE_KEY3, res);\n    return res.access_token;\n  }\n  // format to baidu message\n  formatMessage(messages) {\n    const prompt = [];\n    let input = \"\";\n    const { USER, ASSISTANT, SYSTEM } = ChatRoleEnum;\n    for (const { role, content } of messages) {\n      if (!content.trim() || role === SYSTEM) continue;\n      if (role !== ASSISTANT) input += `\n${content}`;\n      else {\n        prompt.push({ role: USER, content: input.trim() || \" \" });\n        prompt.push({ role: ASSISTANT, content });\n        input = \"\";\n      }\n    }\n    if (!input.trim()) throw new Error(\"User input nothing\");\n    prompt.push({ role: USER, content: input.trim() });\n    return prompt;\n  }\n};\n\n// src/providers/MoonShot.ts\nimport { PassThrough as PassThrough7, Readable as Readable7 } from \"stream\";\nimport EventSourceStream6 from \"@server-sent-stream/node\";\nimport { decodeStream as decodeStream7 } from \"iconv-lite\";\nvar API5 = \"https://api.moonshot.cn\";\nvar VER2 = \"v1\";\nvar MoonShot = class {\n  /**\n   * Constructor for MoonShot class.\n   * @param key - The API key for MoonShot.\n   * @param api - The API endpoint for proxy (optional).\n   */\n  constructor(key, api = API5) {\n    this.key = key;\n    this.api = api;\n  }\n  /**\n   * Sends messages to the MoonShot chat model.\n   *\n   * @param messages - An array of chat messages.\n   * @param model - The model to use for chat (default: moonshot-v1-8k).\n   * @param stream - Whether to use stream response (default: false).\n   * @param top - Top probability to sample (optional).\n   * @param temperature - Temperature for sampling (optional).\n   * @param maxLength - Maximum token length for response (optional).\n   * @returns A promise resolving to the chat response or a stream.\n   */\n  async chat(messages, model = \"moonshot-v1-8k\" /* MOON_V1_8K */, stream = false, top, temperature, maxLength) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"MoonShot API key is not set in config\");\n    if (typeof temperature === \"number\") {\n      if (temperature < 0) temperature = 0;\n      if (temperature > 1) temperature = 1;\n    }\n    if (typeof top === \"number\") {\n      if (top < 0) top = 0;\n      if (top > 1) top = 1;\n    }\n    const res = await util_default.post(\n      `${this.api}/${VER2}/chat/completions`,\n      { model, messages: this.formatMessage(messages), stream, temperature, top_p: top, max_tokens: maxLength },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? \"stream\" : \"json\" }\n    );\n    const data = {\n      content: \"\",\n      model,\n      object: \"\",\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0\n    };\n    if (res instanceof Readable7) {\n      const output = new PassThrough7();\n      const parser = new EventSourceStream6();\n      parser.on(\"data\", (e) => {\n        const obj = util_default.json(e.data);\n        if (obj) {\n          data.content = obj.choices[0]?.delta?.content || \"\";\n          data.model = obj.model;\n          data.object = obj.object;\n          data.promptTokens = obj.usage?.prompt_tokens || 0;\n          data.completionTokens = obj.usage?.completion_tokens || 0;\n          data.totalTokens = obj.usage?.total_tokens || 0;\n          output.write(JSON.stringify(data));\n        }\n      });\n      parser.on(\"error\", (e) => output.destroy(e));\n      parser.on(\"end\", () => output.end());\n      res.pipe(decodeStream7(\"utf-8\")).pipe(parser);\n      return output;\n    } else {\n      data.content = res.choices[0]?.message?.content || \"\";\n      data.model = res.model;\n      data.object = res.object;\n      data.promptTokens = res.usage?.prompt_tokens || 0;\n      data.completionTokens = res.usage?.completion_tokens || 0;\n      data.totalTokens = res.usage?.total_tokens || 0;\n      return data;\n    }\n  }\n  /**\n   * Formats chat messages according to the GPT model's message format.\n   *\n   * @param messages - An array of chat messages.\n   * @returns Formatted messages compatible with the GPT model.\n   */\n  formatMessage(messages) {\n    const prompt = [];\n    for (const { role, content } of messages) {\n      if (role === \"tool\" /* TOOL */ || role === \"developer\" /* DEV */) continue;\n      prompt.push({ role, content });\n    }\n    return prompt;\n  }\n};\n\n// src/providers/MidJourney.ts\nvar MidJourney = class {\n  // User token of MidJourney\n  constructor(proxy, token, imgProxy) {\n    this.proxy = proxy;\n    this.token = token;\n    this.imgProxy = imgProxy;\n  }\n  /**\n   * Call the imagine API of MidJourney to generate text.\n   * @param prompt - The input prompt text.\n   * @param nPrompt - The excluded text.\n   * @param width - The image width. Default value is 1.\n   * @param height - The image height. Default value is 1.\n   * @returns The generated text.\n   */\n  async imagine(prompt, nPrompt = \"\", width = 1024, height = 1024) {\n    if (!this.proxy) throw new Error(\"MidJourney image model proxy is not set in config\");\n    const aspect = util_default.getAspect(width, height);\n    const res = await util_default.post(\n      `${this.proxy}/mj/submit/imagine`,\n      { prompt: `${prompt} --ar ${aspect} ${nPrompt ? \"--no \" + nPrompt : \"\"}` },\n      { headers: { \"mj-api-secret\": this.token } }\n    );\n    if (res.code !== 1) throw new Error(res.description);\n    return { taskId: res.result, time: Date.now() };\n  }\n  /**\n   * Get task information by id or get a list of imagining tasks.\n   * @param id - The task id. If provided, it will return the task information with the specified id. Otherwise, it will return the task list.\n   * @returns The task list or the task information with the specified id.\n   */\n  async task(id) {\n    if (!this.proxy) throw new Error(\"MidJourney image model proxy is not set in config\");\n    if (id) {\n      const res = await util_default.get(`${this.proxy}/mj/task/${id}/fetch`, null, {\n        headers: { \"mj-api-secret\": this.token }\n      });\n      if (res.imageUrl && this.imgProxy) {\n        const url = new URL(res.imageUrl);\n        const pro = new URL(this.imgProxy);\n        url.hostname = pro.hostname;\n        url.protocol = pro.protocol;\n        url.port = pro.port;\n        res.imageUrl = url.toString();\n      }\n      return [\n        {\n          id: res.id,\n          type: res.action,\n          imgs: res.imageUrl ? [await util_default.writeFile(res.imageUrl, `${res.id}.png`)] : [],\n          info: res.description,\n          fail: res.failReason || \"\",\n          progress: parseInt(res.progress) || 0,\n          created: res.startTime,\n          model: \"midjourney\" /* MJ */\n        }\n      ];\n    } else {\n      const res = await util_default.get(`${this.proxy}/mj/task/list`, null, {\n        headers: { \"mj-api-secret\": this.token }\n      });\n      return res.map((v) => ({\n        id: v.id,\n        type: v.action,\n        imgs: v.imageUrl ? [v.imageUrl] : [],\n        info: v.description,\n        fail: v.failReason || \"\",\n        progress: parseInt(v.progress),\n        created: v.startTime,\n        model: \"midjourney\" /* MJ */\n      }));\n    }\n  }\n  /**\n   * Submit a change request for a imagined task.\n   * @param taskId - The task id.\n   * @param action - The action type of the task.\n   * @param index - The index for modification (optional).\n   * @returns The modified task response.\n   */\n  async change(taskId, action, index) {\n    if (!this.proxy) throw new Error(\"MidJourney image model proxy is not set in config\");\n    const res = await util_default.post(\n      `${this.proxy}/mj/submit/change`,\n      { taskId, action, index },\n      { headers: { \"mj-api-secret\": this.token } }\n    );\n    return { taskId: res.result, time: Date.now() };\n  }\n};\n\n// src/providers/Stability.ts\nvar API6 = \"https://api.stability.ai\";\nvar STORAGE_KEY4 = \"task_stability_ai\";\nvar Stability = class {\n  constructor(key, api = API6) {\n    this.key = key;\n    this.api = api;\n  }\n  /**\n   * Generate images using Stability AI.\n   *\n   * @param prompt - The main text prompt for image generation.\n   * @param negativePrompt - The negative text prompt (optional).\n   * @param width - Image width (default: 1024).\n   * @param height - Image height (default: 1024).\n   * @param samples - Number of images to generate (default: 1).\n   * @param model - The Stability AI model to use (default: StabilityAIImagineModel.SD_1_6).\n   * @returns A promise resolving to the image generation response.\n   */\n  async imagine(prompt, negativePrompt = \"\", width = 1024, height = 1024, samples = 1, model = \"stable-diffusion-v1-6\" /* SD_1_6 */) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"Stability key is not set in config\");\n    const prompts = [{ text: prompt, weight: 1 }];\n    if (negativePrompt) prompts.push({ text: negativePrompt, weight: -1 });\n    const res = await util_default.post(\n      `${this.api}/v1/${\"generation\" /* GENERATION */}/${model}/text-to-image`,\n      { width, height, samples, text_prompts: prompts },\n      { headers: { Accept: \"application/json\", Authorization: `Bearer ${key}` } }\n    );\n    const id = util_default.getRandomId();\n    const imgs = [];\n    for (const i in res.artifacts) imgs.push(await util_default.writeFile(res.artifacts[i].base64, `${id}-${i}.png`));\n    const time = Date.now();\n    const task = {\n      id,\n      type: \"generation\" /* GENERATION */,\n      info: res.artifacts[0].finishReason,\n      progress: 100,\n      imgs,\n      fail: \"\",\n      created: time,\n      model\n    };\n    const tasks = util_default.getItem(STORAGE_KEY4) || [];\n    tasks.push(task);\n    util_default.setItem(STORAGE_KEY4, tasks);\n    return { taskId: task.id, time };\n  }\n  /**\n   * Simulate tasks or retrieve a specific task by ID.\n   *\n   * @param id - The task ID to retrieve (optional).\n   * @returns An array of task responses or a specific task by ID.\n   */\n  task(id) {\n    const tasks = util_default.getItem(STORAGE_KEY4) || [];\n    if (id) return tasks.filter((v) => v.id === id);\n    else return tasks;\n  }\n};\n\n// src/providers/AliYun.ts\nimport { PassThrough as PassThrough8, Readable as Readable8 } from \"stream\";\nimport EventSourceStream7 from \"@server-sent-stream/node\";\nimport { decodeStream as decodeStream8 } from \"iconv-lite\";\nvar API7 = \"https://dashscope.aliyuncs.com\";\nvar VER3 = \"v1\";\nvar AliYun = class {\n  /**\n   * Constructor for AliYun class.\n   * @param key - The API key for MoonShot.\n   * @param api - The API endpoint for proxy (optional).\n   */\n  constructor(key, api = API7) {\n    this.key = key;\n    this.api = api;\n  }\n  /**\n   * Fetches embeddings for input text.\n   *\n   * @param input - An array of input strings.\n   * @param model - The model to use for embeddings (default: text-embedding-v3).\n   * @param dimensions - The dimensions of output embedding vector (default: 1024)\n   * @returns A promise resolving to the embedding response.\n   */\n  async embedding(input, model = \"text-embedding-v3\" /* ALI_V3 */, dimensions = 1024) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"AliYun API key is not set in config\");\n    const res = await util_default.post(\n      `${this.api}/compatible-mode/${VER3}/embeddings`,\n      { model, input, dimensions },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: \"json\" }\n    );\n    const data = {\n      embedding: res.data.map((v) => v.embedding),\n      object: \"embedding\",\n      model,\n      promptTokens: res.usage.prompt_tokens || 0,\n      totalTokens: res.usage.total_tokens || 0\n    };\n    return data;\n  }\n  /**\n   * Sends messages to the AliYun LLMs.\n   *\n   * @param messages - An array of chat messages.\n   * @param model - The model to use for chat (default: moonshot-v1-8k).\n   * @param stream - Whether to use stream response (default: false).\n   * @param top - Top probability to sample (optional).\n   * @param temperature - Temperature for sampling (optional).\n   * @param maxLength - Maximum token length for response (optional).\n   * @returns A promise resolving to the chat response or a stream.\n   */\n  async chat(messages, model = \"qwen-turbo\" /* QWEN_TURBO */, stream = false, top, temperature, maxLength) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"Qian Wen API key is not set in config\");\n    if (typeof temperature === \"number\") {\n      if (temperature < 0) temperature = 0;\n      if (temperature >= 2) temperature = 1.9;\n    }\n    if (typeof top === \"number\") {\n      if (top <= 0) top = 0.1;\n      if (top > 1) top = 1;\n    }\n    if (![\"qwen-vl-max\" /* QWEN_VL_MAX */, \"qwen-vl-plus\" /* QWEN_VL_PLUS */].includes(model))\n      messages = messages.map(({ role, content }) => ({ role, content }));\n    const res = await util_default.post(\n      `${this.api}/compatible-mode/${VER3}/chat/completions`,\n      {\n        model,\n        messages: this.formatMessage(messages),\n        stream,\n        temperature,\n        top_p: top,\n        max_tokens: maxLength\n      },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? \"stream\" : \"json\" }\n    );\n    const data = {\n      content: \"\",\n      model,\n      object: \"\",\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0\n    };\n    if (res instanceof Readable8) {\n      const output = new PassThrough8();\n      const parser = new EventSourceStream7();\n      parser.on(\"data\", (e) => {\n        const obj = util_default.json(e.data);\n        if (obj) {\n          data.content = obj?.choices[0]?.delta?.content || \"\";\n          data.model = obj.model;\n          data.object = obj.object;\n          data.promptTokens = obj.usage?.prompt_tokens || 0;\n          data.completionTokens = obj.usage?.completion_tokens || 0;\n          data.totalTokens = obj.usage?.total_tokens || 0;\n          output.write(JSON.stringify(data));\n        }\n      });\n      parser.on(\"error\", (e) => output.destroy(e));\n      parser.on(\"end\", () => output.end());\n      res.pipe(decodeStream8(\"utf-8\")).pipe(parser);\n      return output;\n    } else {\n      data.content = res.choices[0]?.message?.content || \"\";\n      if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls;\n      data.model = res.model;\n      data.object = res.object || \"chat.completion\";\n      data.promptTokens = res.usage?.prompt_tokens || 0;\n      data.completionTokens = res.usage?.completion_tokens || 0;\n      data.totalTokens = res.usage?.total_tokens || 0;\n      return data;\n    }\n  }\n  /**\n   * Formats chat messages according to the GPT model's message format.\n   *\n   * @param messages - An array of chat messages.\n   * @returns Formatted messages compatible with the GPT model.\n   */\n  formatMessage(messages) {\n    const prompt = [];\n    for (const { role, content, img } of messages) {\n      if (role === \"tool\" /* TOOL */ || role === \"developer\" /* DEV */) continue;\n      if (img) {\n        if (!img.startsWith(\"http\")) throw new Error(\"Invalid img HTTP URL\");\n        prompt.push({\n          role: \"user\",\n          content: [\n            { type: \"text\", text: content },\n            { type: \"image_url\", image_url: { url: img } }\n          ]\n        });\n      } else prompt.push({ role, content });\n    }\n    return prompt;\n  }\n};\n\n// src/providers/DeepSeek.ts\nimport { PassThrough as PassThrough9, Readable as Readable9 } from \"stream\";\nimport EventSourceStream8 from \"@server-sent-stream/node\";\nimport { decodeStream as decodeStream9 } from \"iconv-lite\";\nvar API8 = \"https://api.deepseek.com\";\nvar DeepSeek = class {\n  /**\n   * Constructor for MoonShot class.\n   * @param key - The API key for MoonShot.\n   * @param api - The API endpoint for proxy (optional).\n   */\n  constructor(key, api = API8) {\n    this.key = key;\n    this.api = api;\n  }\n  /**\n   * Sends messages to the Ali QianWen chat model.\n   *\n   * @param messages - An array of chat messages.\n   * @param model - The model to use for chat (default: moonshot-v1-8k).\n   * @param stream - Whether to use stream response (default: false).\n   * @param top - Top probability to sample (optional).\n   * @param temperature - Temperature for sampling (optional).\n   * @param maxLength - Maximum token length for response (optional).\n   * @returns A promise resolving to the chat response or a stream.\n   */\n  async chat(messages, model = \"deepseek-chat\" /* DEEPSEEK_V3 */, stream = false, top, temperature, maxLength) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"DeepSeek API key is not set in config\");\n    if (typeof maxLength === \"number\") {\n      if (maxLength < 1) maxLength = 1;\n      if (maxLength > 8192) maxLength = 8192;\n    }\n    if (typeof temperature === \"number\") {\n      if (temperature < 0) temperature = 0;\n      if (temperature > 2) temperature = 2;\n    }\n    if (typeof top === \"number\") {\n      if (top <= 0) top = 0.1;\n      if (top > 1) top = 1;\n    }\n    const res = await util_default.post(\n      `${this.api}/chat/completions`,\n      {\n        model,\n        messages: this.formatMessage(messages),\n        stream,\n        temperature,\n        top_p: top,\n        max_tokens: maxLength\n      },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? \"stream\" : \"json\" }\n    );\n    const data = {\n      content: \"\",\n      model,\n      object: \"\",\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0\n    };\n    if (res instanceof Readable9) {\n      const output = new PassThrough9();\n      const parser = new EventSourceStream8();\n      parser.on(\"data\", (e) => {\n        const obj = util_default.json(e.data);\n        if (obj) {\n          data.content = obj.choices[0]?.delta?.content || \"\";\n          data.model = obj.model;\n          data.object = obj.object;\n          data.promptTokens = obj.usage?.prompt_tokens || 0;\n          data.completionTokens = obj.usage?.completion_tokens || 0;\n          data.totalTokens = obj.usage?.total_tokens || 0;\n          output.write(JSON.stringify(data));\n        }\n      });\n      parser.on(\"error\", (e) => output.destroy(e));\n      parser.on(\"end\", () => output.end());\n      res.pipe(decodeStream9(\"utf-8\")).pipe(parser);\n      return output;\n    } else {\n      data.content = res.choices[0]?.message?.content || \"\";\n      if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls;\n      data.model = res.model;\n      data.object = res.object;\n      data.promptTokens = res.usage?.prompt_tokens || 0;\n      data.completionTokens = res.usage?.completion_tokens || 0;\n      data.totalTokens = res.usage?.total_tokens || 0;\n      return data;\n    }\n  }\n  /**\n   * Formats chat messages according to the GPT model's message format.\n   *\n   * @param messages - An array of chat messages.\n   * @returns Formatted messages compatible with the GPT model.\n   */\n  formatMessage(messages) {\n    const prompt = [];\n    for (const { role, content, tool } of messages) {\n      if (role === \"developer\" /* DEV */) continue;\n      else if (role === \"tool\" /* TOOL */) prompt.push({ role, content, tool_call_id: tool });\n      else prompt.push({ role, content });\n    }\n    return prompt;\n  }\n};\n\n// src/providers/IX.ts\nimport { PassThrough as PassThrough10, Readable as Readable10 } from \"stream\";\nimport EventSourceStream9 from \"@server-sent-stream/node\";\nimport { decodeStream as decodeStream10 } from \"iconv-lite\";\nvar API9 = \"https://api.x.ai\";\nvar VER4 = \"v1\";\nvar XAI = class {\n  /**\n   * Constructor for the OpenAI class.\n   *\n   * @param key - The API key for OpenAI.\n   * @param api - The API endpoint for proxy (optional).\n   */\n  constructor(key, api = API9) {\n    this.key = key;\n    this.api = api;\n  }\n  /**\n   * Sends messages to the GPT chat model.\n   *\n   * @param messages - An array of chat messages.\n   * @param model - The model to use for chat (default: gpt-3.5-turbo).\n   * @param stream - Whether to use stream response (default: false).\n   * @param top - Top probability to sample (optional).\n   * @param temperature - Temperature for sampling (optional).\n   * @param maxLength - Maximum token length for response (optional).\n   * @param tools - Tools for model to use (optional).\n   * @param toolChoice - Controls which (if any) tool is called by the model: none, required, auto (optional).\n   * @returns A promise resolving to the chat response or a stream.\n   */\n  async chat(messages, model = \"grok-2\" /* GROK2 */, stream = false, top, temperature, maxLength, tools, toolChoice) {\n    const key = Array.isArray(this.key) ? util_default.getRandomKey(this.key) : this.key;\n    if (!key) throw new Error(\"X AI API key is not set in config\");\n    if (![\"grok-2-vision\" /* GROK2_VISION */].includes(model))\n      messages = messages.map(({ role, content }) => ({ role, content }));\n    if (typeof temperature === \"number\") {\n      if (temperature < 0) temperature = 0;\n      if (temperature > 2) temperature = 2;\n    }\n    if (typeof top === \"number\") {\n      if (top < 0) top = 0;\n      if (top > 1) top = 1;\n    }\n    const res = await util_default.post(\n      `${this.api}/${VER4}/chat/completions`,\n      {\n        model,\n        messages: this.formatMessage(messages),\n        stream,\n        temperature,\n        top_p: top,\n        max_tokens: maxLength,\n        tools,\n        tool_choice: toolChoice\n      },\n      { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? \"stream\" : \"json\" }\n    );\n    const data = {\n      content: \"\",\n      model,\n      object: \"\",\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0\n    };\n    if (res instanceof Readable10) {\n      const output = new PassThrough10();\n      const parser = new EventSourceStream9();\n      parser.on(\"data\", (e) => {\n        const obj = util_default.json(e.data);\n        if (obj) {\n          data.content = obj.choices[0]?.delta?.content || \"\";\n          data.model = obj.model;\n          data.object = obj.object;\n          data.promptTokens = obj.usage?.prompt_tokens || 0;\n          data.completionTokens = obj.usage?.completion_tokens || 0;\n          data.totalTokens = obj.usage?.total_tokens || 0;\n          output.write(JSON.stringify(data));\n        }\n      });\n      parser.on(\"error\", (e) => output.destroy(e));\n      parser.on(\"end\", () => output.end());\n      res.pipe(decodeStream10(\"utf-8\")).pipe(parser);\n      return output;\n    } else {\n      data.content = res.choices[0]?.message?.content || \"\";\n      if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls;\n      data.model = res.model;\n      data.object = res.object;\n      data.promptTokens = res.usage?.prompt_tokens || 0;\n      data.completionTokens = res.usage?.completion_tokens || 0;\n      data.totalTokens = res.usage?.total_tokens || 0;\n      return data;\n    }\n  }\n  /**\n   * Formats chat messages according to the GPT model's message format.\n   *\n   * @param messages - An array of chat messages.\n   * @returns Formatted messages compatible with the GPT model.\n   */\n  formatMessage(messages) {\n    const prompt = [];\n    for (const { role, content, img } of messages) {\n      switch (role) {\n        case \"user\" /* USER */:\n          if (img)\n            prompt.push({\n              role,\n              content: [\n                { type: \"text\", text: content },\n                { type: \"image_url\", image_url: { url: img } }\n              ]\n            });\n          else prompt.push({ role, content });\n          break;\n        case (\"assistant\" /* ASSISTANT */ || \"system\" /* SYSTEM */):\n          prompt.push({ role, content });\n          break;\n        default:\n          break;\n      }\n    }\n    return prompt;\n  }\n};\n\n// src/UniAI.ts\nvar DEFAULT_MESSAGE = \"Hi, who are you? Answer in 10 words!\";\nvar UniAI = class {\n  constructor(config = {}) {\n    this.config = null;\n    this.config = config;\n    this.openai = new OpenAI(config.OpenAI?.key, config.OpenAI?.proxy);\n    this.deepseek = new DeepSeek(config.DeepSeek?.key, config.DeepSeek?.proxy);\n    this.glm = new GLM(config.GLM?.key, config.GLM?.proxy);\n    this.google = new Google(config.Google?.key, config.Google?.proxy);\n    this.fly = new IFlyTek(\n      config.IFlyTek?.apiPassword,\n      config.IFlyTek?.appId,\n      config.IFlyTek?.apiKey,\n      config.IFlyTek?.apiSecret,\n      config.IFlyTek?.proxy\n    );\n    this.baidu = new Baidu(config.Baidu?.apiKey, config.Baidu?.secretKey, config.Baidu?.proxy);\n    this.moon = new MoonShot(config.MoonShot?.key, config.MoonShot?.proxy);\n    this.ali = new AliYun(config.AliYun?.key, config.AliYun?.proxy);\n    this.xai = new XAI(config.XAI?.key, config.XAI?.proxy);\n    this.other = new Other(config.Other?.api, config.Other?.key);\n    this.mj = new MidJourney(config.MidJourney?.proxy, config.MidJourney?.token, config.MidJourney?.imgProxy);\n    this.stability = new Stability(config.StabilityAI?.key, config.StabilityAI?.proxy);\n    this.chatModels = Object.entries(ChatModelProvider).map(([k, v]) => ({\n      provider: k,\n      value: v,\n      models: Object.values(\n        {\n          [\"openai\" /* OpenAI */]: OpenAIChatModel,\n          [\"deepseek\" /* DeepSeek */]: DeepSeekChatModel,\n          [\"baidu\" /* Baidu */]: BaiduChatModel,\n          [\"iflytek\" /* IFlyTek */]: IFlyTekChatModel,\n          [\"glm\" /* GLM */]: GLMChatModel,\n          [\"google\" /* Google */]: GoogleChatModel,\n          [\"moonshot\" /* MoonShot */]: MoonShotChatModel,\n          [\"aliyun\" /* AliYun */]: AliChatModel,\n          [\"xai\" /* XAI */]: XAIChatModel,\n          [\"other\" /* Other */]: []\n        }[v]\n      )\n    }));\n    this.imgModels = Object.entries(ImagineModelProvider).map(([k, v]) => ({\n      provider: k,\n      value: v,\n      models: Object.values(\n        {\n          [\"openai\" /* OpenAI */]: OpenAIImagineModel,\n          [\"midjourney\" /* MidJourney */]: MidJourneyImagineModel,\n          [\"stability.ai\" /* StabilityAI */]: StabilityAIImagineModel,\n          [\"iflytek\" /* IFlyTek */]: IFlyTekImagineModel\n        }[v]\n      )\n    }));\n    this.embedModels = Object.entries(EmbedModelProvider).map(([k, v]) => ({\n      provider: k,\n      value: v,\n      models: Object.values(\n        {\n          [\"openai\" /* OpenAI */]: OpenAIEmbedModel,\n          [\"glm\" /* GLM */]: GLMEmbedModel,\n          [\"google\" /* Google */]: GoogleEmbedModel,\n          [\"aliyun\" /* AliYun */]: AliEmbedModel,\n          [\"other\" /* Other */]: OtherEmbedModel\n        }[v]\n      )\n    }));\n    this.models = [...this.chatModels, ...this.embedModels, ...this.imgModels];\n  }\n  async chat(messages = DEFAULT_MESSAGE, option = {}) {\n    if (typeof messages === \"string\") messages = [{ role: \"user\" /* USER */, content: messages }];\n    const provider = option.provider || \"openai\" /* OpenAI */;\n    const { model, stream, top, temperature, maxLength, tools, toolChoice } = option;\n    if (provider === \"openai\" /* OpenAI */)\n      return await this.openai.chat(\n        messages,\n        model,\n        stream,\n        top,\n        temperature,\n        maxLength,\n        tools,\n        toolChoice\n      );\n    else if (provider === \"deepseek\" /* DeepSeek */)\n      return await this.deepseek.chat(messages, model, stream, top, temperature, maxLength);\n    else if (provider === \"google\" /* Google */)\n      return await this.google.chat(messages, model, stream, top, temperature, maxLength);\n    else if (provider === \"glm\" /* GLM */)\n      return await this.glm.chat(\n        messages,\n        model,\n        stream,\n        top,\n        temperature,\n        maxLength,\n        tools,\n        toolChoice\n      );\n    else if (provider === \"iflytek\" /* IFlyTek */)\n      return await this.fly.chat(\n        messages,\n        model,\n        stream,\n        top,\n        temperature,\n        maxLength,\n        tools,\n        toolChoice\n      );\n    else if (provider === \"baidu\" /* Baidu */)\n      return await this.baidu.chat(messages, model, stream, top, temperature, maxLength);\n    else if (provider === \"moonshot\" /* MoonShot */)\n      return await this.moon.chat(messages, model, stream, top, temperature, maxLength);\n    else if (provider === \"aliyun\" /* AliYun */)\n      return await this.ali.chat(messages, model, stream, top, temperature, maxLength);\n    else if (provider === \"xai\" /* XAI */)\n      return await this.xai.chat(\n        messages,\n        model,\n        stream,\n        top,\n        temperature,\n        maxLength,\n        tools,\n        toolChoice\n      );\n    else if (provider === \"other\" /* Other */)\n      return await this.other.chat(\n        messages,\n        model,\n        stream,\n        top,\n        temperature,\n        maxLength,\n        tools,\n        toolChoice\n      );\n    else throw new Error(\"Chat model Provider not found\");\n  }\n  async embedding(content, option = {}) {\n    const provider = option.provider || ModelProvider.OpenAI;\n    const { model } = option;\n    if (typeof content === \"string\") content = [content];\n    if (provider === \"openai\" /* OpenAI */)\n      return await this.openai.embedding(content, model);\n    else if (provider === \"glm\" /* GLM */)\n      return await this.glm.embedding(content, model, option.dimensions);\n    else if (provider === \"google\" /* Google */)\n      return await this.google.embedding(content, model);\n    else if (provider === \"aliyun\" /* AliYun */)\n      return await this.ali.embedding(content, model, option.dimensions);\n    else if (provider === \"other\" /* Other */)\n      return await this.other.embedding(content, model);\n    else throw new Error(\"Embedding model provider not found\");\n  }\n  async imagine(prompt, option = {}) {\n    const provider = option.provider || \"openai\" /* OpenAI */;\n    const { negativePrompt, width, height, num, model } = option;\n    if (provider === \"openai\" /* OpenAI */)\n      return await this.openai.imagine(prompt, width, height, num, model);\n    else if (provider === \"midjourney\" /* MidJourney */)\n      return await this.mj.imagine(prompt, negativePrompt, width, height);\n    else if (provider === \"stability.ai\" /* StabilityAI */)\n      return await this.stability.imagine(\n        prompt,\n        negativePrompt,\n        width,\n        height,\n        num,\n        model\n      );\n    else if (provider === \"iflytek\" /* IFlyTek */)\n      return await this.fly.imagine(prompt, width, height, model);\n    else throw new Error(\"Imagine model provider not found\");\n  }\n  async task(provider, id) {\n    if (provider === \"openai\" /* OpenAI */) return this.openai.task(id);\n    else if (provider === \"midjourney\" /* MidJourney */) return await this.mj.task(id);\n    else if (provider === \"stability.ai\" /* StabilityAI */) return this.stability.task(id);\n    else if (provider === \"iflytek\" /* IFlyTek */) return this.fly.task(id);\n    else throw new Error(\"Imagine model provider not found\");\n  }\n  async change(provider, taskId, action, index) {\n    if (provider === \"midjourney\" /* MidJourney */) return this.mj.change(taskId, action, index);\n    else throw new Error(\"Imagine model provider not found\");\n  }\n};\n\n// src/index.ts\nvar index_default = UniAI;\nexport {\n  AliChatModel,\n  AliEmbedModel,\n  BDUChatRoleEnum,\n  BaiduChatModel,\n  ChatModel,\n  ChatModelProvider,\n  ChatRoleEnum,\n  DETaskType,\n  DSChatRoleEnum,\n  DeepSeekChatModel,\n  EmbedModel,\n  EmbedModelProvider,\n  GEMChatRoleEnum,\n  GLMChatModel,\n  GLMChatRoleEnum,\n  GLMEmbedModel,\n  GPTChatRoleEnum,\n  GoogleChatModel,\n  GoogleEmbedModel,\n  IFlyTekChatModel,\n  IFlyTekImagineModel,\n  ImagineModel,\n  ImagineModelProvider,\n  ImgTaskType,\n  MJTaskType,\n  MidJourneyImagineModel,\n  ModelModel,\n  ModelProvider,\n  MoonShotChatModel,\n  OpenAIChatModel,\n  OpenAIEmbedModel,\n  OpenAIImagineModel,\n  OtherEmbedModel,\n  SDTaskType,\n  SPKChatRoleEnum,\n  SPKTaskType,\n  StabilityAIImagineModel,\n  XAIChatModel,\n  index_default as default\n};\n","/** @format */\n\n// model providers\n\nexport enum ChatModelProvider {\n    OpenAI = 'openai',\n    DeepSeek = 'deepseek',\n    IFlyTek = 'iflytek',\n    Baidu = 'baidu',\n    Google = 'google',\n    GLM = 'glm',\n    MoonShot = 'moonshot',\n    AliYun = 'aliyun',\n    XAI = 'xai',\n    Other = 'other'\n}\n\nexport enum EmbedModelProvider {\n    OpenAI = 'openai',\n    Google = 'google',\n    GLM = 'glm',\n    AliYun = 'aliyun',\n    Other = 'other'\n}\n\nexport enum ImagineModelProvider {\n    OpenAI = 'openai',\n    MidJourney = 'midjourney',\n    StabilityAI = 'stability.ai',\n    IFlyTek = 'iflytek'\n}\n\nexport type ModelProvider = ChatModelProvider | EmbedModelProvider | ImagineModelProvider\nexport const ModelProvider = { ...ChatModelProvider, ...EmbedModelProvider, ...ImagineModelProvider }\n\n// openai embed models\nexport enum OpenAIEmbedModel {\n    ADA = 'text-embedding-ada-002',\n    LARGE = 'text-embedding-3-large',\n    SMALL = 'text-embedding-3-small'\n}\n\n// local embedding models\nexport enum OtherEmbedModel {\n    BGE_M3 = 'bge-m3',\n    BASE_CHN = 'text2vec-base-chinese',\n    LARGE_CHN = 'text2vec-large-chinese',\n    BASE_CHN_PARAPH = 'text2vec-base-chinese-paraphrase',\n    BASE_CHN_SENTENCE = 'text2vec-base-chinese-sentence',\n    BASE_MUL = 'text2vec-base-multilingual',\n    PARAPH_MUL_MINI = 'paraphrase-multilingual-MiniLM-L12-v2'\n}\n\nexport enum GLMEmbedModel {\n    EMBED_2 = 'embedding-2',\n    EMBED_3 = 'embedding-3'\n}\n\nexport enum GoogleEmbedModel {\n    EMBED_4 = 'text-embedding-004'\n}\n\nexport enum AliEmbedModel {\n    ALI_V3 = 'text-embedding-v3',\n    ALI_V2 = 'text-embedding-v2',\n    ALI_V1 = 'text-embedding-v1',\n    ALI_ASYNC_V2 = 'text-embedding-async-v2',\n    ALI_ASYNC_V1 = 'text-embedding-async-v1'\n}\n\nexport type EmbedModel = OpenAIEmbedModel | OtherEmbedModel | GLMEmbedModel | GoogleEmbedModel | AliEmbedModel\nexport const EmbedModel = {\n    ...OpenAIEmbedModel,\n    ...OtherEmbedModel,\n    ...GLMEmbedModel,\n    ...GoogleEmbedModel,\n    ...AliEmbedModel\n}\n\n// openai chat models\nexport enum OpenAIChatModel {\n    GPT_4O = 'gpt-4o',\n    GPT_4O_MINI = 'gpt-4o-mini',\n    CHAT_GPT_4O = 'chatgpt-4o-latest',\n    GPT4_TURBO = 'gpt-4-turbo',\n    GPT4 = 'gpt-4',\n    O1 = 'o1',\n    O1_PRE = 'o1-preview',\n    O1_MINI = 'o1-mini',\n    O3_MINI = 'o3-mini',\n    GPT3 = 'gpt-3.5-turbo'\n}\n\nexport enum DeepSeekChatModel {\n    DEEPSEEK_V3 = 'deepseek-chat',\n    DEEPSEEK_R1 = 'deepseek-reasoner'\n}\n\n// google chat models\nexport enum GoogleChatModel {\n    GEM_PRO_1_5 = 'gemini-1.5-pro',\n    GEM_FLASH_1_5 = 'gemini-1.5-flash',\n    GEM_FLASH_1_5_8B = 'gemini-1.5-flash-8b',\n    GEM_FLASH_2 = 'gemini-2.0-flash',\n    GEM_FLASH_2_LITE = 'gemini-2.0-flash-lite-preview',\n    // experimental\n    GEM_PRO_2 = 'gemini-2.0-pro-exp',\n    GEM_FLASH_2_THINK_EXP = 'gemini-2.0-flash-thinking-exp',\n    LEARNLM_PRO_1_5 = 'learnlm-1.5-pro-experimental'\n}\n\n// glm chat models\nexport enum GLMChatModel {\n    GLM_3_TURBO = 'glm-3-turbo',\n    GLM_4 = 'glm-4',\n    GLM_4_AIR = 'glm-4-air',\n    GLM_4_AIRX = 'glm-4-airx',\n    GLM_4_FLASH = 'glm-4-flash',\n    GLM_4_FLASHX = 'glm-4-flashx',\n    GLM_4V = 'glm-4v',\n    GLM_4V_PLUS = 'glm-4v-plus',\n    GLM_4_LONG = 'glm-4-long',\n    GLM_4_PLUS = 'glm-4-plus'\n}\n\n// https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fm2vrveyu\nexport enum BaiduChatModel {\n    ERNIE_3_5 = 'completions', // 'ernie-3.5-8k', // ERNIE 3.5 8K\n    ERNIE_3_5_PRE = 'ernie-3.5-8k-preview', // ERNIE 3.5 8K Preview\n    ERNIE_3_5_128K = 'ernie-3.5-128k', // ERNIE 3.5 128K\n    ERNIE_4_0_LATEST = 'ernie-4.0-8k-latest', // ERNIE 4.0 8K Latest\n    ERNIE_4_0_PREVIEW = 'ernie-4.0-8k-preview', // ERNIE 4.0 8K Preview\n    ERNIE_4_0_8K = 'completions_pro', // 'ernie-4.0-8k', // ERNIE 4.0 8K\n    ERNIE_4_0_TURBO_LATEST = 'ernie-4.0-turbo-8k-latest', // ERNIE 4.0 Turbo 8K Latest\n    ERNIE_4_0_TURBO_PREVIEW = 'ernie-4.0-turbo-8k-preview', // ERNIE 4.0 Turbo 8K Preview\n    ERNIE_4_0_TURBO_8K = 'ernie-4.0-turbo-8k', // ERNIE 4.0 Turbo 8K\n    ERNIE_4_0_TURBO_128K = 'ernie-4.0-turbo-128k', // ERNIE 4.0 Turbo 128K\n    ERNIE_SPEED_8K = 'ernie_speed', // ERNIE Speed 8K\n    ERNIE_SPEED_128K = 'ernie-speed-128k', // ERNIE Speed 128K\n    ERNIE_SPEED_PRO_128K = 'ernie-speed-pro-128k', // ERNIE Speed Pro 128K\n    ERNIE_LITE_8K = 'ernie-lite-8k', // ERNIE Lite 8K\n    ERNIE_LITE_PRO_128K = 'ernie-lite-pro-128k', // ERNIE Lite Pro 128K\n    ERNIE_TINY_8K = 'ernie-tiny-8k', // ERNIE Tiny 8K\n    ERNIE_CHAR_8K = 'ernie-char-8k', // ERNIE Character 8K\n    ERNIE_CHAR_FICTION_8K = 'ernie-char-fiction-8k', // ERNIE Character Fiction 8K\n    ERNIE_NOVEL_8K = 'ernie-novel-8k' // ERNIE Novel 8K\n}\n\n// iFlyTek spark model\nexport enum IFlyTekChatModel {\n    SPARK_LITE = 'lite',\n    SPARK_PRO = 'generalv3',\n    SPARK_PRO_128K = 'pro-128k',\n    SPARK_MAX = 'generalv3.5',\n    SPARK_MAX_32K = 'max-32k',\n    SPARK_ULTRA = '4.0Ultra'\n}\n\nexport enum MoonShotChatModel {\n    MOON_V1_8K = 'moonshot-v1-8k',\n    MOON_V1_32K = 'moonshot-v1-32k',\n    MOON_V1_128K = 'moonshot-v1-128k'\n}\n\nexport enum AliChatModel {\n    QWEN_MAX = 'qwen-max',\n    QWEN_PLUS = 'qwen-plus',\n    QWEN_TURBO = 'qwen-turbo',\n    QWEN_LONG = 'qwen-long',\n    QWEN_CODE = 'qwen-coder-turbo',\n    QWEN_MATH = 'qwen-math-plus',\n    QWEN_VL_MAX = 'qwen-vl-max',\n    QWEN_VL_PLUS = 'qwen-vl-plus'\n}\n\nexport enum XAIChatModel {\n    GROK2 = 'grok-2',\n    GROK2_VISION = 'grok-2-vision',\n    GROK3 = 'grok-3',\n    GROK3_VISION = 'grok-3-vision'\n}\n\n// All chat models\nexport type ChatModel =\n    | OpenAIChatModel\n    | DeepSeekChatModel\n    | BaiduChatModel\n    | GLMChatModel\n    | IFlyTekChatModel\n    | GoogleChatModel\n    | MoonShotChatModel\n    | AliChatModel\n    | XAIChatModel\n    | string\n\nexport const ChatModel = {\n    ...OpenAIChatModel,\n    ...DeepSeekChatModel,\n    ...BaiduChatModel,\n    ...GLMChatModel,\n    ...IFlyTekChatModel,\n    ...GoogleChatModel,\n    ...OpenAIChatModel,\n    ...MoonShotChatModel,\n    ...AliChatModel,\n    ...XAIChatModel\n}\n\n// image models\nexport enum MidJourneyImagineModel {\n    MJ = 'midjourney'\n}\nexport enum OpenAIImagineModel {\n    DALL_E_2 = 'dall-e-2',\n    DALL_E_3 = 'dall-e-3'\n}\nexport enum StabilityAIImagineModel {\n    SD_1_6 = 'stable-diffusion-v1-6',\n    SD_XL_1024 = 'stable-diffusion-xl-1024-v1-0'\n}\nexport enum IFlyTekImagineModel {\n    V2 = 'v2.1'\n}\n\nexport const ImagineModel = {\n    ...OpenAIImagineModel,\n    ...MidJourneyImagineModel,\n    ...StabilityAIImagineModel,\n    ...IFlyTekImagineModel\n}\nexport type ImagineModel = OpenAIImagineModel | MidJourneyImagineModel | StabilityAIImagineModel | IFlyTekImagineModel\n\nexport type ModelModel = ChatModel | ImagineModel | EmbedModel\nexport const ModelModel = { ...ChatModel, ...ImagineModel, ...EmbedModel }\n\nexport enum MJTaskType {\n    IMAGINE = 'IMAGINE',\n    UPSCALE = 'UPSCALE',\n    VARIATION = 'VARIATION',\n    REROLL = 'REROLL',\n    DESCRIBE = 'DESCRIBE',\n    BLEND = 'BLEND'\n}\n\nexport enum DETaskType {\n    GENERATION = 'generations',\n    EDIT = 'edits',\n    VARIATION = 'variation'\n}\n\nexport enum SDTaskType {\n    GENERATION = 'generation'\n}\n\nexport enum SPKTaskType {\n    GENERATION = 'generation'\n}\n\nexport const ImgTaskType = { ...MJTaskType, ...DETaskType, ...SDTaskType, ...SPKTaskType }\nexport type ImgTaskType = MJTaskType | DETaskType | SDTaskType | SPKTaskType\n\n// UniAI specified model roles\nexport enum ChatRoleEnum {\n    SYSTEM = 'system',\n    USER = 'user',\n    ASSISTANT = 'assistant',\n    TOOL = 'tool',\n    DEV = 'developer'\n}\n\n// OpenAI GPT model roles\nexport enum GPTChatRoleEnum {\n    SYSTEM = 'system',\n    USER = 'user',\n    ASSISTANT = 'assistant',\n    DEV = 'developer',\n    TOOL = 'tool'\n}\n\n// DeepSeek model roles\nexport enum DSChatRoleEnum {\n    SYSTEM = 'system',\n    USER = 'user',\n    ASSISTANT = 'assistant',\n    TOOL = 'tool'\n}\n\n// IflyTek Spark model roles\nexport enum SPKChatRoleEnum {\n    USER = 'user',\n    ASSISTANT = 'assistant',\n    SYSTEM = 'system',\n    TOOL = 'tool'\n}\n\n// ChatGLM model roles\nexport enum GLMChatRoleEnum {\n    SYSTEM = 'system',\n    USER = 'user',\n    ASSISTANT = 'assistant',\n    TOOL = 'tool'\n}\n\n// Google Gemini\nexport enum GEMChatRoleEnum {\n    USER = 'user',\n    MODEL = 'model'\n}\n\n// Baidu WenXin Workshop\nexport enum BDUChatRoleEnum {\n    USER = 'user',\n    ASSISTANT = 'assistant'\n}\n","/**\n * Utility for connecting to the OpenAI model API.\n *\n * @format prettier\n * @author devilyouwei\n */\nimport { PassThrough, Readable } from 'stream'\nimport EventSourceStream from '@server-sent-stream/node'\nimport { decodeStream } from 'iconv-lite'\n\nimport {\n    GPTChatRequest,\n    GPTChatResponse,\n    GPTChatStreamRequest,\n    GPTImagineSize,\n    GPTChatStreamResponse,\n    GPTChatMessage,\n    OpenAIEmbedRequest,\n    OpenAIEmbedResponse,\n    OpenAIImagineRequest,\n    OpenAIImagineResponse\n} from '../../interface/IOpenAI'\n\nimport { ChatRoleEnum, DETaskType, OpenAIChatModel, OpenAIEmbedModel, OpenAIImagineModel } from '../../interface/Enum'\n\nimport { ChatResponse, ChatMessage, TaskResponse, ImagineResponse } from '../../interface/IModel'\nimport { EmbeddingResponse } from '../../interface/IModel'\nimport $ from '../util'\nimport { ChatCompletionTool, ChatCompletionToolChoiceOption } from 'openai/resources'\n\nconst STORAGE_KEY = 'task_open_ai'\nconst API = 'https://api.openai.com'\nconst VER = 'v1'\n\nexport default class OpenAI {\n    private api: string\n    private key?: string | string[]\n\n    /**\n     * Constructor for the OpenAI class.\n     *\n     * @param key - The API key for OpenAI.\n     * @param api - The API endpoint for proxy (optional).\n     */\n    constructor(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    /**\n     * Fetches embeddings for input text.\n     *\n     * @param input - An array of input strings.\n     * @param model - The model to use for embeddings (default: text-embedding-ada-002).\n     * @returns A promise resolving to the embedding response.\n     */\n    async embedding(input: string[], model: OpenAIEmbedModel = OpenAIEmbedModel.ADA) {\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('OpenAI API key is not set in config')\n\n        const res = await $.post<OpenAIEmbedRequest, OpenAIEmbedResponse>(\n            `${this.api}/${VER}/embeddings`,\n            { model, input },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: 'json' }\n        )\n\n        const data: EmbeddingResponse = {\n            embedding: res.data.map(v => v.embedding),\n            object: 'embedding',\n            model,\n            promptTokens: res.usage.prompt_tokens || 0,\n            totalTokens: res.usage.total_tokens || 0\n        }\n        return data\n    }\n\n    /**\n     * Sends messages to the GPT chat model.\n     *\n     * @param messages - An array of chat messages.\n     * @param model - The model to use for chat (default: gpt-3.5-turbo).\n     * @param stream - Whether to use stream response (default: false).\n     * @param top - Top probability to sample (optional).\n     * @param temperature - Temperature for sampling (optional).\n     * @param maxLength - Maximum token length for response (optional).\n     * @param tools - Tools for model to use (optional).\n     * @param toolChoice - Controls which (if any) tool is called by the model: none, required, auto (optional).\n     * @returns A promise resolving to the chat response or a stream.\n     */\n    async chat(\n        messages: ChatMessage[],\n        model: OpenAIChatModel = OpenAIChatModel.GPT_4O,\n        stream: boolean = false,\n        top?: number,\n        temperature?: number,\n        maxLength?: number,\n        tools?: ChatCompletionTool[],\n        toolChoice?: ChatCompletionToolChoiceOption\n    ) {\n        // if (!Object.values(OpenAIChatModel).includes(model)) throw new Error('OpenAI chat model not found')\n\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('OpenAI API key is not set in config')\n\n        // remove imgs for not vision model\n        if (\n            ![\n                OpenAIChatModel.GPT4_TURBO,\n                OpenAIChatModel.GPT_4O,\n                OpenAIChatModel.GPT_4O_MINI,\n                OpenAIChatModel.CHAT_GPT_4O,\n                OpenAIChatModel.O1,\n                OpenAIChatModel.O1_MINI,\n                OpenAIChatModel.O1_PRE\n            ].includes(model)\n        )\n            messages = messages.map(({ role, content }) => ({ role, content }))\n\n        // temperature is float in [0,1]\n        if (typeof temperature === 'number') {\n            if (temperature < 0) temperature = 0\n            if (temperature > 1) temperature = 1\n        }\n        // top is float in [0,1]\n        if (typeof top === 'number') {\n            if (top < 0) top = 0\n            if (top > 1) top = 1\n        }\n\n        const res = await $.post<GPTChatRequest | GPTChatStreamRequest, Readable | GPTChatResponse>(\n            `${this.api}/${VER}/chat/completions`,\n            {\n                model,\n                messages: this.formatMessage(messages),\n                stream,\n                temperature,\n                top_p: top,\n                max_completion_tokens: maxLength,\n                tools,\n                tool_choice: toolChoice\n            },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? 'stream' : 'json' }\n        )\n\n        const data: ChatResponse = {\n            content: '',\n            model,\n            object: '',\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0\n        }\n\n        if (res instanceof Readable) {\n            const output = new PassThrough()\n            const parser = new EventSourceStream()\n\n            parser.on('data', (e: MessageEvent) => {\n                const obj = $.json<GPTChatStreamResponse>(e.data)\n                if (obj) {\n                    data.content = obj.choices[0]?.delta?.content || ''\n                    if (obj.choices[0]?.delta?.tool_calls) data.tools = obj.choices[0]?.delta?.tool_calls\n                    data.model = obj.model\n                    data.object = obj.object\n                    data.promptTokens = obj.usage?.prompt_tokens || 0\n                    data.completionTokens = obj.usage?.completion_tokens || 0\n                    data.totalTokens = obj.usage?.total_tokens || 0\n                    output.write(JSON.stringify(data))\n                }\n            })\n            parser.on('error', e => output.destroy(e))\n            parser.on('end', () => output.end())\n\n            res.pipe(decodeStream('utf-8')).pipe(parser)\n            return output as Readable\n        } else {\n            data.content = res.choices[0]?.message?.content || ''\n            if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls\n            data.model = res.model\n            data.object = res.object\n            data.promptTokens = res.usage?.prompt_tokens || 0\n            data.completionTokens = res.usage?.completion_tokens || 0\n            data.totalTokens = res.usage?.total_tokens || 0\n            return data\n        }\n    }\n\n    /**\n     * Generates images based on a prompt.\n     *\n     * @param prompt - The prompt for image generation.\n     * @param width - Image width (default: 1024).\n     * @param height - Image height (default: 1024).\n     * @param n - Number of images to generate (default: 1).\n     * @param model - Model choice (default: dall-e-3).\n     * @returns A promise resolving to the image generation response.\n     */\n    async imagine(\n        prompt: string,\n        width: number = 1024,\n        height: number = 1024,\n        n: number = 1,\n        model: OpenAIImagineModel = OpenAIImagineModel.DALL_E_3\n    ): Promise<ImagineResponse> {\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('OpenAI API key is not set in config')\n\n        const res = await $.post<OpenAIImagineRequest, OpenAIImagineResponse>(\n            `${this.api}/${VER}/images/${DETaskType.GENERATION}`,\n            { model, prompt, n, size: `${width}x${height}` as GPTImagineSize, response_format: 'b64_json' },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: 'json' }\n        )\n\n        const id = $.getRandomId()\n        const imgs: string[] = []\n        for (const i in res.data) imgs.push(await $.writeFile(res.data[i].b64_json!, `${id}-${i}.png`))\n\n        const time = Date.now()\n        const task: TaskResponse = {\n            id,\n            type: DETaskType.GENERATION,\n            info: 'success',\n            progress: 100,\n            imgs,\n            fail: '',\n            created: time,\n            model\n        }\n\n        const tasks: TaskResponse[] = $.getItem(STORAGE_KEY) || []\n        tasks.push(task)\n        $.setItem(STORAGE_KEY, tasks)\n        return { taskId: task.id, time }\n    }\n\n    /**\n     * Simulate tasks.\n     *\n     * @param id - The task ID to retrieve (optional).\n     * @returns An array of task responses or a specific task by ID.\n     */\n    task(id?: string) {\n        const tasks: TaskResponse[] = $.getItem(STORAGE_KEY) || []\n\n        if (id) return tasks.filter(v => v.id === id)\n        else return tasks\n    }\n\n    /**\n     * Formats chat messages according to the GPT model's message format.\n     *\n     * @param messages - An array of chat messages.\n     * @returns Formatted messages compatible with the GPT model.\n     */\n    private formatMessage(messages: ChatMessage[]) {\n        const prompt: GPTChatMessage[] = []\n\n        for (const { role, content, img, tool } of messages) {\n            // with image\n            switch (role) {\n                case ChatRoleEnum.USER:\n                    if (img)\n                        prompt.push({\n                            role,\n                            content: [\n                                { type: 'text', text: content },\n                                { type: 'image_url', image_url: { url: img } }\n                            ]\n                        })\n                    else prompt.push({ role, content })\n                    break\n                case ChatRoleEnum.TOOL:\n                    prompt.push({ role, content, tool_call_id: tool! })\n                    break\n                default:\n                    prompt.push({ role, content })\n                    break\n            }\n        }\n\n        return prompt\n    }\n}\n","/**\n * @author devilyouwei\n * @format prettier\n * Utils for UniAI\n **/\n\nimport { writeFileSync } from 'fs'\nimport axios, { AxiosRequestConfig } from 'axios'\nimport { LocalStorage } from 'node-localstorage'\nimport path from 'path'\nimport isBase64 from 'is-base64'\n\n// Initialize local storage\nconst localStorage = new LocalStorage('./cache', Infinity)\n\nexport default {\n    /**\n     * Performs an HTTP GET request.\n     *\n     * @param url - The URL to make the request to.\n     * @param params - Optional request parameters.\n     * @param config - Optional Axios request configuration.\n     * @returns A Promise that resolves with the response data.\n     */\n    async get<RequestT, ResponseT>(url: string, params?: RequestT, config?: AxiosRequestConfig) {\n        return (await axios.get<ResponseT>(url, { params, ...config })).data\n    },\n\n    /**\n     * Performs an HTTP POST request.\n     *\n     * @param url - The URL to make the request to.\n     * @param body - The request body.\n     * @param config - Optional Axios request configuration.\n     * @returns A Promise that resolves with the response data.\n     */\n    async post<RequestT, ResponseT>(url: string, body?: RequestT, config?: AxiosRequestConfig) {\n        return (await axios.post<ResponseT>(url, body, config)).data\n    },\n    /**\n     * Parses JSON from a string and returns it as a generic type T.\n     *\n     * @param str - The JSON string to parse.\n     * @returns The parsed JSON as a generic type T.\n     */\n    json<T>(str?: string | null) {\n        try {\n            if (!str) return null\n            return JSON.parse(str) as T\n        } catch (e) {\n            return null\n        }\n    },\n    getRandomKey<T>(arr: T[]): T {\n        return arr[Math.floor(Math.random() * arr.length)]\n    },\n    getRandomId(length = 16): string {\n        let result = ''\n        while (result.length < length) {\n            let rand = Math.floor(Math.random() * 10)\n            // Ensure the number doesn't start with zero\n            if (result.length === 0 && rand === 0) continue\n            // Append the number to the result string\n            result += rand.toString()\n        }\n        return result\n    },\n    /**\n     * Computes the greatest common divisor (GCD) of two numbers using Euclidean algorithm.\n     *\n     * @param a - The first number.\n     * @param b - The second number.\n     * @returns The GCD of the two numbers.\n     */\n    getGCD(a: number, b: number): number {\n        if (b === 0) return a\n        return this.getGCD(b, a % b)\n    },\n    /**\n     * Calculates and returns the aspect ratio of a width and height.\n     *\n     * @param width - The width dimension.\n     * @param height - The height dimension.\n     * @returns The aspect ratio in the format \"width:height\".\n     */\n    getAspect(width: number, height: number) {\n        if (!width || !height) return '1:1'\n\n        const gcd = this.getGCD(width, height)\n        const aspectRatioWidth = width / gcd\n        const aspectRatioHeight = height / gcd\n\n        return `${aspectRatioWidth}:${aspectRatioHeight}`\n    },\n    /**\n     * Stores an item in local storage with the specified key.\n     *\n     * @param key - The key under which to store the item.\n     * @param value - The value to be stored.\n     */\n    setItem<T>(key: string, value: T) {\n        localStorage.setItem(key, JSON.stringify(value))\n    },\n    /**\n     * Retrieves an item from local storage by its key and parses it as a generic type T.\n     *\n     * @param key - The key of the item to retrieve.\n     * @returns The parsed item as a generic type T.\n     */\n    getItem<T>(key: string) {\n        return this.json<T>(localStorage.getItem(key))\n    },\n    /**\n     * This method is used to write given data to a file. The data can either be a base64 string or an HTTP/HTTPS URL.\n     * If the data is a URL, the method fetches the data as a readable stream and writes it to the file.\n     * If it's a base64 string, it writes it directly to the file.\n     * @param data - The data to be written to the file. Can be a base64 string or a HTTP/HTTPS img URL.\n     * @param filename - The name of the file where the data will be written. If not provided, a unique filename will be generated.\n     * @returns - The file path where the data was written.\n     */\n    async writeFile(data: string, filename = '') {\n        // Generate a unique filename for the output\n        const filepath = path.join('./cache', filename)\n\n        if (data.startsWith('http://') || data.startsWith('https://')) {\n            // Use the get method to fetch the image\n            const res: Buffer = await this.get(data, {}, { responseType: 'arraybuffer' })\n            if (!(res instanceof Buffer)) throw new Error('Img is not a buffer')\n            // write to file\n            writeFileSync(filepath, res)\n        } else writeFileSync(filepath, Buffer.from(data, 'base64'))\n\n        return filepath\n    },\n\n    isBase64(data: string, allowMime: boolean = true) {\n        return isBase64(data, { allowMime })\n    }\n}\n","/** @format */\n\nimport { PassThrough, Readable } from 'stream'\nimport EventSourceStream from '@server-sent-stream/node'\nimport { decodeStream } from 'iconv-lite'\nimport {\n    GLMChatMessage,\n    GLMChatRequest,\n    GLMChatResponse,\n    GLMEmbedRequest,\n    GLMEmbedResponse,\n    GLMTool,\n    GLMToolChoice\n} from '../../interface/IGLM'\nimport { ChatRoleEnum, GLMChatModel, GLMEmbedModel } from '../../interface/Enum'\nimport { ChatMessage, ChatResponse, EmbeddingResponse } from '../../interface/IModel'\nimport $ from '../util'\n\nconst API = 'https://open.bigmodel.cn'\n\nexport default class GLM {\n    private key?: string | string[]\n    private proxyAPI: string\n\n    constructor(key?: string | string[], proxyAPI: string = API) {\n        this.key = key\n        this.proxyAPI = proxyAPI\n    }\n\n    /**\n     * Fetches embeddings for input text.\n     *\n     * @param input - An array of input strings.\n     * @param model - The model to use for embeddings (default: text-embedding-ada-002).\n     * @returns A promise resolving to the embedding response.\n     */\n    async embedding(input: string[], model: GLMEmbedModel = GLMEmbedModel.EMBED_2, dimensions = 1024) {\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('ZhiPu GLM API key is not set in config')\n\n        const res = await $.post<GLMEmbedRequest, GLMEmbedResponse>(\n            `${this.proxyAPI}/api/paas/v4/embeddings`,\n            { model, input, dimensions },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: 'json' }\n        )\n\n        return {\n            embedding: res.data.map(v => v.embedding),\n            object: 'embedding',\n            model,\n            promptTokens: res.usage.prompt_tokens,\n            totalTokens: res.usage.total_tokens\n        } as EmbeddingResponse\n    }\n\n    /**\n     * Sends messages to the GLM chat model.\n     *\n     * @param messages - An array of chat messages.\n     * @param model - The model to use for chat (default: GLM_6B a local deployed chatglm3-6b-32k).\n     * @param stream - Whether to use stream response (default: false).\n     * @param top - Top probability to sample (optional).\n     * @param temperature - Temperature for sampling (optional).\n     * @param maxLength - Maximum token length for response (optional).\n     * @returns A promise resolving to the chat response or a stream.\n     */\n    async chat(\n        messages: ChatMessage[],\n        model: GLMChatModel = GLMChatModel.GLM_3_TURBO,\n        stream: boolean = false,\n        top?: number,\n        temperature?: number,\n        maxLength?: number,\n        tools?: GLMTool[],\n        toolChoice?: GLMToolChoice\n    ) {\n        // filter images\n        if (![GLMChatModel.GLM_4V, GLMChatModel.GLM_4V_PLUS].includes(model))\n            messages = messages.map(({ role, content }) => ({ role, content }))\n\n        // temperature is float in (0,1]\n        if (typeof temperature === 'number') {\n            if (temperature <= 0) temperature = 0.1\n            if (temperature > 1) temperature = 1\n        }\n        // top is float in (0,1)\n        if (typeof top === 'number') {\n            if (top <= 0) top = 0.1\n            if (top >= 1) top = 0.9\n        }\n\n        const data: ChatResponse = {\n            content: '',\n            model,\n            object: '',\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0\n        }\n\n        // ZhiPu GLM official API\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('ZhiPu GLM API key is not set in config')\n\n        const res = await $.post<GLMChatRequest, Readable | GLMChatResponse>(\n            `${this.proxyAPI}/api/paas/v4/chat/completions`,\n            {\n                model,\n                messages: this.formatMessage(messages),\n                stream,\n                temperature,\n                top_p: top,\n                max_tokens: maxLength,\n                tools,\n                tool_choice: toolChoice\n            },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? 'stream' : 'json' }\n        )\n\n        if (res instanceof Readable) {\n            const output = new PassThrough()\n            const parser = new EventSourceStream()\n\n            parser.on('data', (e: MessageEvent) => {\n                const obj = $.json<GLMChatResponse>(e.data)\n                if (obj) {\n                    data.content = obj.choices[0]?.delta?.content || ''\n                    if (obj.choices[0]?.delta?.tool_calls) data.tools = obj.choices[0]?.delta?.tool_calls\n                    data.model = obj.model\n                    data.object = obj.object || 'chat.completion.chunk'\n                    data.promptTokens = obj.usage?.prompt_tokens || 0\n                    data.completionTokens = obj.usage?.completion_tokens || 0\n                    data.totalTokens = obj.usage?.total_tokens || 0\n                    if (data.content) output.write(JSON.stringify(data))\n                }\n            })\n\n            parser.on('error', e => output.destroy(e))\n            parser.on('end', () => output.end())\n\n            res.pipe(decodeStream('utf-8')).pipe(parser)\n            return output as Readable\n        } else {\n            data.content = res.choices[0]?.message?.content || ''\n            if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls\n            data.model = res.model\n            data.object = res.object || 'chat.completion'\n            data.promptTokens = res.usage?.prompt_tokens || 0\n            data.completionTokens = res.usage?.completion_tokens || 0\n            data.totalTokens = res.usage?.total_tokens || 0\n            return data\n        }\n    }\n\n    /**\n     * Formats chat messages according to the GPT model's message format.\n     *\n     * @param messages - An array of chat messages.\n     * @returns Formatted messages compatible with the GPT model.\n     */\n    private formatMessage(messages: ChatMessage[]) {\n        const prompt: GLMChatMessage[] = []\n\n        for (const { role, content, img, tool } of messages) {\n            if (role === ChatRoleEnum.DEV) continue\n\n            // with image\n            switch (role) {\n                case ChatRoleEnum.USER:\n                    if (img)\n                        prompt.push({\n                            role,\n                            content: [\n                                { type: 'text', text: content },\n                                { type: 'image_url', image_url: { url: img } }\n                            ]\n                        })\n                    else prompt.push({ role, content })\n                    break\n                case ChatRoleEnum.TOOL:\n                    prompt.push({\n                        role,\n                        content,\n                        tool_call_id: tool || ''\n                    })\n                    break\n                default:\n                    prompt.push({ role, content })\n                    break\n            }\n        }\n\n        return prompt\n    }\n}\n","/**\n * Other.ts - A class for accessing the Other model's chat and embedding functionality.\n * Such as models from hugging face, text2vec\n *\n * @format by prettier\n * @author devilyouwei\n */\n\nimport { decodeStream } from 'iconv-lite'\nimport { PassThrough, Readable } from 'stream'\nimport EventSourceStream from '@server-sent-stream/node'\nimport { ChatModel, ChatRoleEnum, EmbedModel } from '../../interface/Enum'\nimport { ChatMessage, ChatResponse, EmbeddingResponse } from '../../interface/IModel'\nimport $ from '../util'\nimport {\n    GPTChatMessage,\n    GPTChatRequest,\n    GPTChatResponse,\n    GPTChatStreamRequest,\n    GPTChatStreamResponse,\n    OpenAIEmbedRequest,\n    OpenAIEmbedResponse\n} from '../../interface/IOpenAI'\nimport { ChatCompletionTool, ChatCompletionToolChoiceOption } from 'openai/resources'\n\nexport default class Other {\n    private api?: string\n    private key?: string | string[]\n\n    /**\n     * Constructor for the OpenAI class.\n     *\n     * @param api - The API endpoint for the model (optional).\n     * @param key - The API key for the model (Optional).\n     */\n    constructor(api?: string, key?: string | string[]) {\n        this.api = api\n        this.key = key\n    }\n\n    /**\n     * Fetches embeddings for input text.\n     *\n     * @param input - An array of input strings.\n     * @param model - The model to use for embeddings (default: text-embedding-ada-002).\n     * @returns A promise resolving to the embedding response.\n     */\n    async embedding(input: string[], model: EmbedModel = EmbedModel.BGE_M3) {\n        if (!this.api) throw new Error('Other embed model API is not set in config')\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n\n        const res = await $.post<OpenAIEmbedRequest, OpenAIEmbedResponse>(\n            `${this.api}/v1/embeddings`,\n            { model, input },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: 'json' }\n        )\n\n        const data: EmbeddingResponse = {\n            embedding: res.data.map(v => v.embedding),\n            object: 'embedding',\n            model,\n            promptTokens: res.usage.prompt_tokens || 0,\n            totalTokens: res.usage.total_tokens || 0\n        }\n        return data\n    }\n\n    /**\n     * Sends messages to the GPT compatible chat model.\n     *\n     * @param messages - An array of chat messages.\n     * @param model - The model to use for chat (default: gpt-3.5-turbo).\n     * @param stream - Whether to use stream response (default: false).\n     * @param top - Top probability to sample (optional).\n     * @param temperature - Temperature for sampling (optional).\n     * @param maxLength - Maximum token length for response (optional).\n     * @returns A promise resolving to the chat response or a stream.\n     */\n    async chat(\n        messages: ChatMessage[],\n        model: ChatModel = ChatModel.GPT3,\n        stream: boolean = false,\n        top?: number,\n        temperature?: number,\n        maxLength?: number,\n        tools?: ChatCompletionTool[],\n        toolChoice?: ChatCompletionToolChoiceOption\n    ) {\n        if (!this.api) throw new Error('Other chat model API is not set in config')\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n\n        const res = await $.post<GPTChatRequest | GPTChatStreamRequest, Readable | GPTChatResponse>(\n            `${this.api}/v1/chat/completions`,\n            {\n                model,\n                messages: this.formatMessage(messages),\n                stream,\n                temperature,\n                top_p: top,\n                max_tokens: maxLength,\n                tools,\n                tool_choice: toolChoice\n            },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? 'stream' : 'json' }\n        )\n\n        const data: ChatResponse = {\n            content: '',\n            model,\n            object: '',\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0\n        }\n\n        if (res instanceof Readable) {\n            const output = new PassThrough()\n            const parser = new EventSourceStream()\n\n            parser.on('data', (e: MessageEvent) => {\n                const obj = $.json<GPTChatStreamResponse>(e.data)\n                if (obj) {\n                    data.content = obj.choices[0]?.delta?.content || ''\n                    if (obj.choices[0]?.delta?.tool_calls) data.tools = obj.choices[0]?.delta?.tool_calls\n                    data.model = obj.model || model\n                    data.object = obj.object || 'chat.completion.chunk'\n                    data.promptTokens = obj.usage?.prompt_tokens || 0\n                    data.completionTokens = obj.usage?.completion_tokens || 0\n                    data.totalTokens = obj.usage?.total_tokens || 0\n                    output.write(JSON.stringify(data))\n                }\n            })\n            parser.on('error', e => output.destroy(e))\n            parser.on('end', () => output.end())\n\n            res.pipe(decodeStream('utf-8')).pipe(parser)\n            return output as Readable\n        } else {\n            data.content = res.choices[0]?.message?.content || ''\n            if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls\n            data.model = res.model || model\n            data.object = res.object || 'chat.completion'\n            data.promptTokens = res.usage?.prompt_tokens || 0\n            data.completionTokens = res.usage?.completion_tokens || 0\n            data.totalTokens = res.usage?.total_tokens || 0\n            return data\n        }\n    }\n\n    /**\n     * Formats chat messages according to the GPT model's message format.\n     *\n     * @param messages - An array of chat messages.\n     * @returns Formatted messages compatible with the GPT model.\n     */\n    private formatMessage(messages: ChatMessage[]) {\n        const prompt: GPTChatMessage[] = []\n\n        for (const { role, content, img, tool } of messages) {\n            // with image\n            switch (role) {\n                case ChatRoleEnum.USER:\n                    if (img)\n                        prompt.push({\n                            role,\n                            content: [\n                                { type: 'text', text: content },\n                                { type: 'image_url', image_url: { url: img } }\n                            ]\n                        })\n                    else prompt.push({ role, content })\n                    break\n                case ChatRoleEnum.TOOL:\n                    prompt.push({\n                        role,\n                        content,\n                        tool_call_id: tool || ''\n                    })\n                    break\n                default:\n                    prompt.push({ role, content })\n                    break\n            }\n        }\n\n        return prompt\n    }\n}\n","/** @format */\n\nimport { PassThrough, Readable } from 'stream'\nimport { JSONParser } from '@streamparser/json-node'\nimport { decodeStream } from 'iconv-lite'\nimport {\n    GEMChatRequest,\n    GEMChatResponse,\n    GEMChatMessage,\n    GoogleEmbedRequest,\n    GoogleEmbedResponse\n} from '../../interface/IGoogle'\nimport { ChatRoleEnum, GEMChatRoleEnum, GoogleChatModel, GoogleEmbedModel } from '../../interface/Enum'\nimport { ChatMessage, ChatResponse, EmbeddingResponse } from '../../interface/IModel'\nimport { extname } from 'path'\nimport { readFileSync } from 'fs'\nimport $ from '../util'\n\nconst API = 'https://generativelanguage.googleapis.com'\nconst SAFE_SET = [\n    { category: 'HARM_CATEGORY_HARASSMENT', threshold: 'BLOCK_NONE' },\n    { category: 'HARM_CATEGORY_HATE_SPEECH', threshold: 'BLOCK_NONE' },\n    { category: 'HARM_CATEGORY_SEXUALLY_EXPLICIT', threshold: 'BLOCK_NONE' },\n    { category: 'HARM_CATEGORY_DANGEROUS_CONTENT', threshold: 'BLOCK_NONE' }\n]\n\nexport default class Google {\n    private key?: string | string[]\n    private api: string\n\n    /**\n     * Google API client class for chat functionalities.\n     * @param key - The Google API key or an array of keys.\n     * @param api - The API endpoint (default: 'https://generativelanguage.googleapis.com').\n     */\n    constructor(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    /**\n     * Fetches embeddings for input text.\n     *\n     * @param input - An array of input strings.\n     * @param model - The model to use for embeddings (default: text-embedding-ada-002).\n     * @returns A promise resolving to the embedding response.\n     */\n    async embedding(input: string[], model: GoogleEmbedModel = GoogleEmbedModel.EMBED_4) {\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('Google API key is not set in config')\n\n        const request: Promise<GoogleEmbedResponse>[] = []\n        for (const text of input) {\n            request.push(\n                $.post<GoogleEmbedRequest, GoogleEmbedResponse>(\n                    `${this.api}/v1beta/models/${model}:embedContent?key=${key}`,\n                    { model: `models/${model}`, content: { parts: [{ text }] } }\n                )\n            )\n        }\n        const res = await Promise.all(request)\n\n        const data: EmbeddingResponse = {\n            embedding: res.map(v => v.embedding.values),\n            object: 'embedding',\n            model,\n            promptTokens: 0,\n            totalTokens: 0\n        }\n        return data\n    }\n\n    /**\n     * Sends messages to the Google Gemini chat model.\n     * @param messages - An array of chat messages.\n     * @param model - The model to use for chat (default: gemini-pro).\n     * @param stream - Whether to use stream response (default: false).\n     * @param top - Top probability to sample (optional).\n     * @param temperature - Temperature for sampling (optional).\n     * @param maxLength - Maximum token length for response (optional).\n     * @returns A promise resolving to the chat response or a stream.\n     */\n    async chat(\n        messages: ChatMessage[],\n        model: GoogleChatModel = GoogleChatModel.GEM_PRO_1_5,\n        stream: boolean = false,\n        top?: number,\n        temperature?: number,\n        maxLength?: number\n    ) {\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('Google AI API key is not set in config')\n\n        // temperature is float in [0,1]\n        if (typeof temperature === 'number') {\n            if (temperature < 0) temperature = 0\n            if (temperature > 1) temperature = 1\n        }\n        // top is float in [0,1]\n        if (typeof top === 'number') {\n            if (top < 0) top = 0\n            if (top > 1) top = 1\n        }\n\n        const res = await $.post<GEMChatRequest, GEMChatResponse | Readable>(\n            `${this.api}/v1beta/models/${model}:${stream ? 'streamGenerateContent' : 'generateContent'}?key=${key}`,\n            {\n                contents: await this.formatMessage(messages),\n                system_instruction: {\n                    parts: {\n                        text: messages\n                            .filter(v => v.role === ChatRoleEnum.SYSTEM)\n                            .map(v => v.content)\n                            .join('\\n')\n                    }\n                },\n                generationConfig: { topP: top, temperature, maxOutputTokens: maxLength },\n                safetySettings: SAFE_SET\n            },\n            { responseType: stream ? 'stream' : 'json' }\n        )\n        const data: ChatResponse = {\n            content: '',\n            model,\n            object: '',\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0\n        }\n        if (res instanceof Readable) {\n            const output = new PassThrough()\n            const parser = new JSONParser()\n\n            parser.on('data', ({ value }) => {\n                if (value.candidates || value.promptFeedback) {\n                    const obj: GEMChatResponse = value\n                    const block = obj.promptFeedback?.blockReason\n                    if (block) return output.destroy(new Error(`Content blocked, reason: ${block}`))\n                    if (!obj.candidates) return output.destroy(new Error('Google API error, no candidates'))\n                    const candidate = obj.candidates[0]\n                    if (!candidate.content) return output.destroy(new Error(candidate.finishReason))\n                    data.content = candidate.content.parts[0].text || ''\n                    data.object = `chat.completion.chunk`\n                    return output.write(JSON.stringify(data))\n                } else return output\n            })\n\n            parser.on('error', e => output.destroy(e))\n            parser.on('end', () => output.end())\n\n            res.pipe(decodeStream('utf-8')).pipe(parser)\n            return output as Readable\n        } else {\n            const block = res.promptFeedback?.blockReason\n            if (block) throw new Error(`Content blocked, reason: ${block}`)\n            if (!res.candidates) throw new Error('Google API error, no candidates')\n\n            const candidate = res.candidates[0]\n            if (!candidate.content) throw new Error(candidate.finishReason)\n            data.content = candidate.content.parts[0].text || candidate.finishReason\n            data.object = `chat.completion`\n            return data\n        }\n    }\n\n    /**\n     * Formats chat messages into GEMChatMessage format.\n     * @param messages - An array of chat messages.\n     * @returns A formatted array of GEMChatMessage.\n     */\n    private async formatMessage(messages: ChatMessage[]) {\n        const prompt: GEMChatMessage[] = []\n        let input = ''\n        let base64: { mime: string; data: string } | null = null\n\n        for (const { role, content, img } of messages) {\n            if (!content) continue\n            if (role === ChatRoleEnum.SYSTEM) continue\n            if (img) base64 = await this.toBase64(img)\n\n            if (role !== ChatRoleEnum.ASSISTANT) input += `\\n${content}`\n            else {\n                input = input.trim()\n                prompt.push({\n                    role: GEMChatRoleEnum.USER,\n                    parts: base64\n                        ? [{ text: input || ' ' }, { inline_data: { mime_type: base64.mime, data: base64.data } }]\n                        : [{ text: input || ' ' }]\n                })\n                prompt.push({ role: GEMChatRoleEnum.MODEL, parts: [{ text: content }] })\n                input = ''\n            }\n        }\n        input = input.trim()\n\n        if (!input) throw new Error('User input nothing')\n        prompt.push({\n            role: GEMChatRoleEnum.USER,\n            parts: base64\n                ? [{ text: input || ' ' }, { inline_data: { mime_type: base64.mime, data: base64.data } }]\n                : [{ text: input || ' ' }]\n        })\n        // Gemini Vision currently only support 1 prompt\n        return base64 ? [prompt[prompt.length - 1]] : prompt\n    }\n\n    /**\n     * Convert an image to base64 format object.\n     * @param img The image string to convert.\n     * @returns An object containing the MIME type and base64 data.\n     */\n    private async toBase64(img: string): Promise<{ mime: string; data: string }> {\n        let mime: string = ''\n        let data: string = ''\n\n        if ($.isBase64(img)) {\n            // Handle pure base64 data\n            if ($.isBase64(img, false)) {\n                data = img\n                mime = 'image/png'\n            } else {\n                const match = img.match(/^data:image\\/([a-zA-Z]*);base64,([^\\\"']*)$/)\n                if (match) {\n                    mime = `image/${match[1]}`\n                    data = match[2]\n                }\n            }\n        } else if (img.startsWith('http')) {\n            const res: Buffer = await $.get(img, {}, { responseType: 'arraybuffer' })\n            mime = `image/${['png', 'jpg', 'jpeg', 'webp', 'heic', 'heif'].find(f => img.toLowerCase().includes(f))?.replace('jpg', 'jpeg') || 'png'}`\n            data = res.toString('base64')\n        } else {\n            mime = `image/${extname(img).replace('.', '').toLowerCase()}`\n            data = readFileSync(img).toString('base64')\n        }\n\n        if (!mime || !data) throw new Error('Can not transfer base64')\n\n        return { mime, data }\n    }\n}\n","/** @format */\n\nimport { createHmac } from 'crypto'\nimport { hostname } from 'os'\nimport { PassThrough, Readable } from 'stream'\nimport EventSourceStream from '@server-sent-stream/node'\nimport { decodeStream } from 'iconv-lite'\nimport { ChatMessage, ChatResponse, TaskResponse } from '../../interface/IModel'\nimport {\n    SparkChatRequest,\n    SparkChatResponse,\n    SPKChatMessage,\n    SPKImagineRequest,\n    SPKImagineResponse,\n    SPKTool,\n    SPKToolChoice\n} from '../../interface/IFlyTek'\nimport { ChatRoleEnum, IFlyTekChatModel, IFlyTekImagineModel, SPKTaskType } from '../../interface/Enum'\nimport $ from '../util'\n\nconst CHAT_API = 'https://spark-api-open.xf-yun.com'\nconst IMAGINE_API = 'https://spark-api.cn-huabei-1.xf-yun.com'\nconst STORAGE_KEY = 'task_iflytek'\n\nexport default class IFlyTek {\n    private pass?: string | string[]\n    private key?: string\n    private secret?: string\n    private appid?: string\n    private api?: string\n\n    /**\n     * Constructor for IFlyTek class.\n     * @param key - The API key for MoonShot.\n     * @param api - The API endpoint for proxy (optional).\n     */\n    constructor(pass?: string | string[], key?: string, secret?: string, appid?: string, api: string = CHAT_API) {\n        this.pass = pass\n        this.key = key\n        this.secret = secret\n        this.appid = appid\n        this.api = api\n    }\n\n    /**\n     * Initiates a chat conversation with IFLYTEK Spark API.\n     *\n     * @param messages - An array of chat messages.\n     * @param model - The Spark model version to use (default: SPARK_DEFAULT_MODEL_VERSION).\n     * @param stream - Whether to use stream response (default: false).\n     * @param top - Top probability to sample (optional).\n     * @param temperature - Temperature for sampling (optional).\n     * @param maxLength - Maximum token length for response (optional).\n     * @returns A promise resolving to the chat response or a stream.\n     */\n    async chat(\n        messages: ChatMessage[],\n        model: IFlyTekChatModel = IFlyTekChatModel.SPARK_LITE,\n        stream: boolean = false,\n        top?: number,\n        temperature?: number,\n        maxLength?: number,\n        tools?: SPKTool[],\n        toolChoice?: SPKToolChoice\n    ) {\n        const key = Array.isArray(this.pass) ? $.getRandomKey(this.pass) : this.pass\n        if (!key) throw new Error('IFlyTek Spark API Password is not set in config')\n\n        // top is integer in [1,6]\n        if (typeof top === 'number') {\n            if (top <= 0) top = 0.1\n            if (top > 1) top = 1\n        }\n        // temperature is float in (0,1]\n        if (typeof temperature === 'number') {\n            if (temperature < 0) temperature = 0\n            if (temperature > 2) temperature = 2\n        }\n\n        const res = await $.post<SparkChatRequest, Readable | SparkChatResponse>(\n            `${this.api}/v1/chat/completions`,\n            {\n                model,\n                messages: this.formatMessage(messages),\n                stream,\n                temperature,\n                top_p: top,\n                max_tokens: maxLength,\n                tools,\n                tool_choice: toolChoice\n            },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? 'stream' : 'json' }\n        )\n        const data: ChatResponse = {\n            content: '',\n            model,\n            object: '',\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0\n        }\n        if (res instanceof Readable) {\n            const output = new PassThrough()\n            const parser = new EventSourceStream()\n\n            parser.on('data', (e: MessageEvent) => {\n                const obj = $.json<SparkChatResponse>(e.data)\n                if (obj) {\n                    data.content = obj.choices[0]?.delta?.content || ''\n                    if (obj.choices[0]?.delta?.tool_calls) data.tools = obj.choices[0]?.delta?.tool_calls\n                    data.model = model\n                    data.object = 'chat.completion.chunk'\n                    data.promptTokens = obj.usage?.prompt_tokens || 0\n                    data.completionTokens = obj.usage?.completion_tokens || 0\n                    data.totalTokens = obj.usage?.total_tokens || 0\n                    output.write(JSON.stringify(data))\n                }\n            })\n\n            parser.on('error', e => output.destroy(e))\n            parser.on('end', () => output.end())\n\n            res.pipe(decodeStream('utf-8')).pipe(parser)\n            return output as Readable\n        } else {\n            data.content = res.choices[0]?.message?.content || ''\n            if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls\n            data.model = model\n            data.object = 'chat.completion'\n            data.promptTokens = res.usage?.prompt_tokens || 0\n            data.completionTokens = res.usage?.completion_tokens || 0\n            data.totalTokens = res.usage?.total_tokens || 0\n            return data\n        }\n    }\n\n    /**\n     * Generate an image based on the given prompt.\n     * @param prompt The prompt for image generation.\n     * @param width The width of the image, default is 512.\n     * @param height The height of the image, default is 512.\n     * @param model The model to use for generating the image, default is IFlyTekImagineModel.V2.\n     */\n    async imagine(\n        prompt: string,\n        width: number = 512,\n        height: number = 512,\n        model: IFlyTekImagineModel = IFlyTekImagineModel.V2\n    ) {\n        if (!this.appid) throw new Error('IFlyTek APP ID is not set in config')\n        // get specific generated URL\n        const url = this.getImagineURL(model)\n        const res = await $.post<SPKImagineRequest, SPKImagineResponse>(url, {\n            header: { app_id: this.appid },\n            payload: { message: { text: [{ role: 'user', content: prompt }] } },\n            parameter: { chat: { domain: 'general', width, height } }\n        })\n        if (res.header.code !== 0) throw new Error(res.header.message)\n        if (!res.payload) throw new Error('Fail to generate image, empty payload')\n\n        const id = $.getRandomId()\n        const imgs: string[] = []\n        for (const i in res.payload.choices.text)\n            imgs.push(await $.writeFile(res.payload.choices.text[i].content, `${id}-${i}.png`))\n\n        const time = Date.now()\n        const task: TaskResponse = {\n            id,\n            type: SPKTaskType.GENERATION,\n            info: 'success',\n            progress: 100,\n            imgs,\n            fail: '',\n            created: time,\n            model\n        }\n\n        const tasks: TaskResponse[] = $.getItem(STORAGE_KEY) || []\n        tasks.push(task)\n        $.setItem(STORAGE_KEY, tasks)\n        return { taskId: task.id, time }\n    }\n\n    /**\n     * Simulate tasks.\n     *\n     * @param id - The task ID to retrieve (optional).\n     * @returns An array of task responses or a specific task by ID.\n     */\n    task(id?: string) {\n        const tasks: TaskResponse[] = $.getItem(STORAGE_KEY) || []\n\n        if (id) return tasks.filter(v => v.id === id)\n        else return tasks\n    }\n\n    /**\n     * Generates the Imagine API URL.\n     *\n     * @param model - The Spark imagine model.\n     */\n    private getImagineURL(model: IFlyTekImagineModel) {\n        if (!this.secret) throw new Error('IFlyTek API secret is not set in config')\n        if (!this.key) throw new Error('IFlyTek API key is not set in config')\n\n        const host = hostname()\n        const date = new Date().toUTCString()\n        const algorithm = 'hmac-sha256'\n        const headers = 'host date request-line'\n        const signatureOrigin = `host: ${host}\\ndate: ${date}\\nPOST /${model}/tti HTTP/1.1`\n        const signatureSha = createHmac('sha256', this.secret).update(signatureOrigin).digest('hex')\n        const signature = Buffer.from(signatureSha, 'hex').toString('base64')\n        const authorizationOrigin = `api_key=\"${this.key}\", algorithm=\"${algorithm}\", headers=\"${headers}\", signature=\"${signature}\"`\n        const authorization = Buffer.from(authorizationOrigin).toString('base64')\n        return `${IMAGINE_API}/${model}/tti?authorization=${authorization}&date=${date}&host=${host}`\n    }\n\n    /**\n     * Format the chat message for IFlyTek Spark model.\n     *\n     * @param messages - Original chat messages\n     */\n    private formatMessage(messages: ChatMessage[]) {\n        const prompt: SPKChatMessage[] = []\n\n        for (const { role, content } of messages) {\n            if (role === ChatRoleEnum.DEV) continue\n            prompt.push({ role, content })\n        }\n\n        return prompt\n    }\n}\n","/** @format */\n\nimport { PassThrough, Readable } from 'stream'\nimport EventSourceStream from '@server-sent-stream/node'\nimport { decodeStream } from 'iconv-lite'\nimport {\n    BaiduAccessTokenRequest,\n    BaiduAccessTokenResponse,\n    BaiduChatMessage,\n    BaiduChatRequest,\n    BaiduChatResponse\n} from '../../interface/IBaidu'\nimport { BaiduChatModel, ChatRoleEnum } from '../../interface/Enum'\nimport { ChatMessage, ChatResponse } from '../../interface/IModel'\nimport $ from '../util'\n\nconst API = 'https://aip.baidubce.com'\nconst STORAGE_KEY = 'baidu'\n\nexport default class Baidu {\n    private key?: string\n    private secret?: string\n    private api?: string\n\n    constructor(key?: string, secret?: string, api: string = API) {\n        this.key = key\n        this.secret = secret\n        this.api = api\n    }\n    /**\n     * Sends messages to the GLM chat model.\n     *\n     * @param messages - An array of chat messages.\n     * @param model - The submodel to use for chat (default: ERNIE 8K).\n     * @param stream - Whether to use stream response (default: false).\n     * @param top - Top probability to sample (optional).\n     * @param temperature - Temperature for sampling (optional).\n     * @param maxLength - Maximum token length for response (optional).\n     * @returns A promise resolving to the chat response or a stream.\n     */\n    async chat(\n        messages: ChatMessage[],\n        model: BaiduChatModel = BaiduChatModel.ERNIE_3_5,\n        stream: boolean = false,\n        top?: number,\n        temperature?: number,\n        maxLength?: number\n    ) {\n        // temperature is float in (0,1]\n        if (typeof temperature === 'number') {\n            if (temperature <= 0) temperature = 0.1\n            if (temperature > 1) temperature = 1\n        }\n        // top is float in [0,1]\n        if (typeof top === 'number') {\n            if (top < 0) top = 0\n            if (top > 1) top = 1\n        }\n\n        const token = await this.getAccessToken()\n\n        const res = await $.post<BaiduChatRequest, BaiduChatResponse | Readable>(\n            `${this.api}/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/${model}?access_token=${token}`,\n            {\n                messages: this.formatMessage(messages),\n                system: messages[0]?.role === ChatRoleEnum.SYSTEM ? messages[0].content : '',\n                stream,\n                temperature,\n                top_p: top,\n                max_output_tokens: maxLength\n            },\n            { responseType: stream ? 'stream' : 'json' }\n        )\n\n        const data: ChatResponse = {\n            content: '',\n            model,\n            object: '',\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0\n        }\n        if (res instanceof Readable) {\n            const output = new PassThrough()\n            const parser = new EventSourceStream()\n            parser.on('data', (e: MessageEvent<string>) => {\n                const obj = $.json<BaiduChatResponse>(e.data)\n                if (obj) {\n                    data.content = obj.result || ''\n                    data.model = model\n                    data.object = obj.object\n                    data.promptTokens = obj.usage?.prompt_tokens || 0\n                    data.completionTokens = obj.usage?.completion_tokens || 0\n                    data.totalTokens = obj.usage?.total_tokens || 0\n                    output.write(JSON.stringify(data))\n                }\n            })\n\n            parser.on('error', e => output.destroy(e))\n            parser.on('end', () => output.end())\n\n            res.pipe(decodeStream('utf-8')).pipe(parser)\n            return output as Readable\n        } else {\n            if (res.error_code) throw new Error(res.error_msg)\n            data.content = res.result || ''\n            data.model = model\n            data.object = res.object\n            data.promptTokens = res.usage?.prompt_tokens || 0\n            data.completionTokens = res.usage?.completion_tokens || 0\n            data.totalTokens = res.usage?.total_tokens || 0\n            return data\n        }\n    }\n\n    // get baidu access token\n    private async getAccessToken() {\n        if (!this.key) throw new Error('Baidu API key is not set in config')\n        if (!this.secret) throw new Error('Baidu API secret is not set in config')\n\n        const now = Date.now()\n\n        // load access token\n        const cache = $.getItem<BaiduAccessTokenResponse>(STORAGE_KEY)\n        if (cache && cache.expires_in > now) return cache.access_token\n\n        // get new access token\n        const res = await $.get<BaiduAccessTokenRequest, BaiduAccessTokenResponse>(`${this.api}/oauth/2.0/token`, {\n            grant_type: 'client_credentials',\n            client_id: this.key,\n            client_secret: this.secret\n        })\n        if (res.error) throw new Error(res.error_description)\n\n        res.expires_in = now + res.expires_in * 1000\n\n        $.setItem(STORAGE_KEY, res)\n\n        return res.access_token\n    }\n\n    // format to baidu message\n    private formatMessage(messages: ChatMessage[]) {\n        const prompt: BaiduChatMessage[] = []\n        let input = ''\n        const { USER, ASSISTANT, SYSTEM } = ChatRoleEnum\n        for (const { role, content } of messages) {\n            if (!content.trim() || role === SYSTEM) continue\n            if (role !== ASSISTANT) input += `\\n${content}`\n            else {\n                prompt.push({ role: USER, content: input.trim() || ' ' })\n                prompt.push({ role: ASSISTANT, content })\n                input = ''\n            }\n        }\n        if (!input.trim()) throw new Error('User input nothing')\n        prompt.push({ role: USER, content: input.trim() })\n        return prompt\n    }\n}\n","/** @format */\n\nimport { PassThrough, Readable } from 'stream'\nimport EventSourceStream from '@server-sent-stream/node'\nimport { decodeStream } from 'iconv-lite'\nimport { ChatRoleEnum, MoonShotChatModel } from '../../interface/Enum'\nimport { ChatMessage, ChatResponse } from '../../interface/IModel'\nimport {\n    GPTChatMessage,\n    GPTChatRequest,\n    GPTChatResponse,\n    GPTChatStreamRequest,\n    GPTChatStreamResponse\n} from '../../interface/IOpenAI'\nimport $ from '../util'\n\nconst API = 'https://api.moonshot.cn'\nconst VER = 'v1'\n\nexport default class MoonShot {\n    private key?: string | string[]\n    private api?: string\n\n    /**\n     * Constructor for MoonShot class.\n     * @param key - The API key for MoonShot.\n     * @param api - The API endpoint for proxy (optional).\n     */\n    constructor(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    /**\n     * Sends messages to the MoonShot chat model.\n     *\n     * @param messages - An array of chat messages.\n     * @param model - The model to use for chat (default: moonshot-v1-8k).\n     * @param stream - Whether to use stream response (default: false).\n     * @param top - Top probability to sample (optional).\n     * @param temperature - Temperature for sampling (optional).\n     * @param maxLength - Maximum token length for response (optional).\n     * @returns A promise resolving to the chat response or a stream.\n     */\n    async chat(\n        messages: ChatMessage[],\n        model: MoonShotChatModel = MoonShotChatModel.MOON_V1_8K,\n        stream: boolean = false,\n        top?: number,\n        temperature?: number,\n        maxLength?: number\n    ) {\n        // if (!Object.values(MoonShotChatModel).includes(model)) throw new Error('MoonShot chat model not found')\n\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('MoonShot API key is not set in config')\n\n        // temperature is float in [0,1]\n        if (typeof temperature === 'number') {\n            if (temperature < 0) temperature = 0\n            if (temperature > 1) temperature = 1\n        }\n        // top is float in [0,1]\n        if (typeof top === 'number') {\n            if (top < 0) top = 0\n            if (top > 1) top = 1\n        }\n\n        const res = await $.post<GPTChatRequest | GPTChatStreamRequest, Readable | GPTChatResponse>(\n            `${this.api}/${VER}/chat/completions`,\n            { model, messages: this.formatMessage(messages), stream, temperature, top_p: top, max_tokens: maxLength },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? 'stream' : 'json' }\n        )\n        const data: ChatResponse = {\n            content: '',\n            model,\n            object: '',\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0\n        }\n        if (res instanceof Readable) {\n            const output = new PassThrough()\n            const parser = new EventSourceStream()\n            parser.on('data', (e: MessageEvent) => {\n                const obj = $.json<GPTChatStreamResponse>(e.data)\n                if (obj) {\n                    data.content = obj.choices[0]?.delta?.content || ''\n                    data.model = obj.model\n                    data.object = obj.object\n                    data.promptTokens = obj.usage?.prompt_tokens || 0\n                    data.completionTokens = obj.usage?.completion_tokens || 0\n                    data.totalTokens = obj.usage?.total_tokens || 0\n                    output.write(JSON.stringify(data))\n                }\n            })\n\n            parser.on('error', e => output.destroy(e))\n            parser.on('end', () => output.end())\n\n            res.pipe(decodeStream('utf-8')).pipe(parser)\n            return output as Readable\n        } else {\n            data.content = res.choices[0]?.message?.content || ''\n            data.model = res.model\n            data.object = res.object\n            data.promptTokens = res.usage?.prompt_tokens || 0\n            data.completionTokens = res.usage?.completion_tokens || 0\n            data.totalTokens = res.usage?.total_tokens || 0\n            return data\n        }\n    }\n\n    /**\n     * Formats chat messages according to the GPT model's message format.\n     *\n     * @param messages - An array of chat messages.\n     * @returns Formatted messages compatible with the GPT model.\n     */\n    private formatMessage(messages: ChatMessage[]) {\n        const prompt: GPTChatMessage[] = []\n\n        for (const { role, content } of messages) {\n            if (role === ChatRoleEnum.TOOL || role === ChatRoleEnum.DEV) continue\n\n            prompt.push({ role, content })\n        }\n\n        return prompt\n    }\n}\n","/**\n * Class for interacting with MidJourney using the midjourney-proxy API.\n *\n * Make sure to have the midjourney-proxy deployed before using this class.\n *\n * The midjourney-proxy project can be found at: https://github.com/novicezk/midjourney-proxy.git\n * If you already have a deployed proxy, provide the proxy URL when initializing the Midjourney class.\n *\n * @format by prettier\n * @author devilyouwei\n */\n\nimport { MJTaskType, MidJourneyImagineModel } from '../../interface/Enum'\nimport { MJChangeRequest, MJImagineRequest, MJImagineResponse, MJTaskResponse } from '../../interface/IMidJourney'\nimport { ImagineResponse, TaskResponse } from '../../interface/IModel'\nimport $ from '../util'\n\nexport default class MidJourney {\n    private proxy?: string // Proxy address of MidJourney\n    private token?: string // User token of MidJourney\n    private imgProxy?: string // User token of MidJourney\n\n    constructor(proxy?: string, token?: string, imgProxy?: string) {\n        this.proxy = proxy\n        this.token = token\n        this.imgProxy = imgProxy\n    }\n\n    /**\n     * Call the imagine API of MidJourney to generate text.\n     * @param prompt - The input prompt text.\n     * @param nPrompt - The excluded text.\n     * @param width - The image width. Default value is 1.\n     * @param height - The image height. Default value is 1.\n     * @returns The generated text.\n     */\n    async imagine(\n        prompt: string,\n        nPrompt: string = '',\n        width: number = 1024,\n        height: number = 1024\n    ): Promise<ImagineResponse> {\n        if (!this.proxy) throw new Error('MidJourney image model proxy is not set in config')\n\n        const aspect = $.getAspect(width, height)\n        const res = await $.post<MJImagineRequest, MJImagineResponse>(\n            `${this.proxy}/mj/submit/imagine`,\n            { prompt: `${prompt} --ar ${aspect} ${nPrompt ? '--no ' + nPrompt : ''}` },\n            { headers: { 'mj-api-secret': this.token } }\n        )\n        if (res.code !== 1) throw new Error(res.description)\n        return { taskId: res.result, time: Date.now() }\n    }\n\n    /**\n     * Get task information by id or get a list of imagining tasks.\n     * @param id - The task id. If provided, it will return the task information with the specified id. Otherwise, it will return the task list.\n     * @returns The task list or the task information with the specified id.\n     */\n    async task(id?: string): Promise<TaskResponse[]> {\n        if (!this.proxy) throw new Error('MidJourney image model proxy is not set in config')\n\n        if (id) {\n            const res = await $.get<null, MJTaskResponse>(`${this.proxy}/mj/task/${id}/fetch`, null, {\n                headers: { 'mj-api-secret': this.token }\n            })\n            // image proxy, replace hostname\n            if (res.imageUrl && this.imgProxy) {\n                const url = new URL(res.imageUrl)\n                const pro = new URL(this.imgProxy)\n                url.hostname = pro.hostname\n                url.protocol = pro.protocol\n                url.port = pro.port\n                res.imageUrl = url.toString()\n            }\n            return [\n                {\n                    id: res.id,\n                    type: res.action,\n                    imgs: res.imageUrl ? [await $.writeFile(res.imageUrl, `${res.id}.png`)] : [],\n                    info: res.description,\n                    fail: res.failReason || '',\n                    progress: parseInt(res.progress) || 0,\n                    created: res.startTime,\n                    model: MidJourneyImagineModel.MJ\n                }\n            ]\n        } else {\n            const res = await $.get<null, MJTaskResponse[]>(`${this.proxy}/mj/task/list`, null, {\n                headers: { 'mj-api-secret': this.token }\n            })\n            return res.map(v => ({\n                id: v.id,\n                type: v.action,\n                imgs: v.imageUrl ? [v.imageUrl] : [],\n                info: v.description,\n                fail: v.failReason || '',\n                progress: parseInt(v.progress),\n                created: v.startTime,\n                model: MidJourneyImagineModel.MJ\n            }))\n        }\n    }\n\n    /**\n     * Submit a change request for a imagined task.\n     * @param taskId - The task id.\n     * @param action - The action type of the task.\n     * @param index - The index for modification (optional).\n     * @returns The modified task response.\n     */\n    async change(taskId: string, action: MJTaskType, index?: number): Promise<ImagineResponse> {\n        if (!this.proxy) throw new Error('MidJourney image model proxy is not set in config')\n\n        const res = await $.post<MJChangeRequest, MJImagineResponse>(\n            `${this.proxy}/mj/submit/change`,\n            { taskId, action, index },\n            { headers: { 'mj-api-secret': this.token } }\n        )\n        return { taskId: res.result, time: Date.now() }\n    }\n}\n","/**\n * Class for interacting with Stability AI.\n *\n * To interact with Stability AI, refer to the documentation at: https://platform.stability.ai/docs/getting-started\n * You need to create an account and generate an API key to use this class.\n *\n * @format by prettier\n * @author devilyouwei\n */\nimport { SDTaskType, StabilityAIImagineModel } from '../../interface/Enum'\nimport { ImagineResponse, TaskResponse } from '../../interface/IModel'\nimport { StabilityImagineRequest, StabilityImagineResponse } from '../../interface/IStability'\nimport $ from '../util'\n\nconst API = 'https://api.stability.ai'\nconst STORAGE_KEY = 'task_stability_ai'\n\nexport default class Stability {\n    private api?: string\n    private key?: string | string[]\n\n    constructor(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    /**\n     * Generate images using Stability AI.\n     *\n     * @param prompt - The main text prompt for image generation.\n     * @param negativePrompt - The negative text prompt (optional).\n     * @param width - Image width (default: 1024).\n     * @param height - Image height (default: 1024).\n     * @param samples - Number of images to generate (default: 1).\n     * @param model - The Stability AI model to use (default: StabilityAIImagineModel.SD_1_6).\n     * @returns A promise resolving to the image generation response.\n     */\n    async imagine(\n        prompt: string,\n        negativePrompt: string = '',\n        width: number = 1024,\n        height: number = 1024,\n        samples: number = 1,\n        model: StabilityAIImagineModel = StabilityAIImagineModel.SD_1_6\n    ): Promise<ImagineResponse> {\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('Stability key is not set in config')\n        const prompts = [{ text: prompt, weight: 1 }]\n        if (negativePrompt) prompts.push({ text: negativePrompt, weight: -1 })\n\n        const res = await $.post<StabilityImagineRequest, StabilityImagineResponse>(\n            `${this.api}/v1/${SDTaskType.GENERATION}/${model}/text-to-image`,\n            { width, height, samples, text_prompts: prompts },\n            { headers: { Accept: 'application/json', Authorization: `Bearer ${key}` } }\n        )\n\n        const id = $.getRandomId()\n        const imgs: string[] = []\n        for (const i in res.artifacts) imgs.push(await $.writeFile(res.artifacts[i].base64, `${id}-${i}.png`))\n\n        const time = Date.now()\n        const task: TaskResponse = {\n            id,\n            type: SDTaskType.GENERATION,\n            info: res.artifacts[0].finishReason,\n            progress: 100,\n            imgs,\n            fail: '',\n            created: time,\n            model\n        }\n\n        const tasks: TaskResponse[] = $.getItem(STORAGE_KEY) || []\n        tasks.push(task)\n        $.setItem(STORAGE_KEY, tasks)\n        return { taskId: task.id, time }\n    }\n\n    /**\n     * Simulate tasks or retrieve a specific task by ID.\n     *\n     * @param id - The task ID to retrieve (optional).\n     * @returns An array of task responses or a specific task by ID.\n     */\n    task(id?: string) {\n        const tasks: TaskResponse[] = $.getItem(STORAGE_KEY) || []\n\n        if (id) return tasks.filter(v => v.id === id)\n        else return tasks\n    }\n}\n","/** @format */\n\nimport { PassThrough, Readable } from 'stream'\nimport EventSourceStream from '@server-sent-stream/node'\nimport { decodeStream } from 'iconv-lite'\nimport { ChatRoleEnum, AliChatModel, AliEmbedModel } from '../../interface/Enum'\nimport { ChatMessage, ChatResponse, EmbeddingResponse } from '../../interface/IModel'\nimport {\n    GPTChatMessage,\n    GPTChatRequest,\n    GPTChatResponse,\n    GPTChatStreamRequest,\n    GPTChatStreamResponse,\n    OpenAIEmbedRequest,\n    OpenAIEmbedResponse\n} from '../../interface/IOpenAI'\nimport $ from '../util'\n\nconst API = 'https://dashscope.aliyuncs.com'\nconst VER = 'v1'\n\nexport default class AliYun {\n    private key?: string | string[]\n    private api?: string\n\n    /**\n     * Constructor for AliYun class.\n     * @param key - The API key for MoonShot.\n     * @param api - The API endpoint for proxy (optional).\n     */\n    constructor(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    /**\n     * Fetches embeddings for input text.\n     *\n     * @param input - An array of input strings.\n     * @param model - The model to use for embeddings (default: text-embedding-v3).\n     * @param dimensions - The dimensions of output embedding vector (default: 1024)\n     * @returns A promise resolving to the embedding response.\n     */\n    async embedding(input: string[], model: AliEmbedModel = AliEmbedModel.ALI_V3, dimensions = 1024) {\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('AliYun API key is not set in config')\n\n        const res = await $.post<OpenAIEmbedRequest, OpenAIEmbedResponse>(\n            `${this.api}/compatible-mode/${VER}/embeddings`,\n            { model, input, dimensions },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: 'json' }\n        )\n\n        const data: EmbeddingResponse = {\n            embedding: res.data.map(v => v.embedding),\n            object: 'embedding',\n            model,\n            promptTokens: res.usage.prompt_tokens || 0,\n            totalTokens: res.usage.total_tokens || 0\n        }\n        return data\n    }\n\n    /**\n     * Sends messages to the AliYun LLMs.\n     *\n     * @param messages - An array of chat messages.\n     * @param model - The model to use for chat (default: moonshot-v1-8k).\n     * @param stream - Whether to use stream response (default: false).\n     * @param top - Top probability to sample (optional).\n     * @param temperature - Temperature for sampling (optional).\n     * @param maxLength - Maximum token length for response (optional).\n     * @returns A promise resolving to the chat response or a stream.\n     */\n    async chat(\n        messages: ChatMessage[],\n        model: AliChatModel = AliChatModel.QWEN_TURBO,\n        stream: boolean = false,\n        top?: number,\n        temperature?: number,\n        maxLength?: number\n    ) {\n        // if (!Object.values(AliChatModel).includes(model)) throw new Error('Qian Wen chat model not found')\n\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('Qian Wen API key is not set in config')\n\n        // temperature is float in [0,1]\n        if (typeof temperature === 'number') {\n            if (temperature < 0) temperature = 0\n            if (temperature >= 2) temperature = 1.9\n        }\n        // top is float in [0,1]\n        if (typeof top === 'number') {\n            if (top <= 0) top = 0.1\n            if (top > 1) top = 1.0\n        }\n\n        // remove imgs for not vision model\n        if (![AliChatModel.QWEN_VL_MAX, AliChatModel.QWEN_VL_PLUS].includes(model))\n            messages = messages.map(({ role, content }) => ({ role, content }))\n\n        const res = await $.post<GPTChatRequest | GPTChatStreamRequest, Readable | GPTChatResponse>(\n            `${this.api}/compatible-mode/${VER}/chat/completions`,\n            {\n                model,\n                messages: this.formatMessage(messages),\n                stream,\n                temperature,\n                top_p: top,\n                max_tokens: maxLength\n            },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? 'stream' : 'json' }\n        )\n        const data: ChatResponse = {\n            content: '',\n            model,\n            object: '',\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0\n        }\n        if (res instanceof Readable) {\n            const output = new PassThrough()\n            const parser = new EventSourceStream()\n            parser.on('data', (e: MessageEvent) => {\n                const obj = $.json<GPTChatStreamResponse>(e.data)\n                if (obj) {\n                    data.content = obj?.choices[0]?.delta?.content || ''\n                    data.model = obj.model\n                    data.object = obj.object\n                    data.promptTokens = obj.usage?.prompt_tokens || 0\n                    data.completionTokens = obj.usage?.completion_tokens || 0\n                    data.totalTokens = obj.usage?.total_tokens || 0\n                    output.write(JSON.stringify(data))\n                }\n            })\n\n            parser.on('error', e => output.destroy(e))\n            parser.on('end', () => output.end())\n\n            res.pipe(decodeStream('utf-8')).pipe(parser)\n            return output as Readable\n        } else {\n            data.content = res.choices[0]?.message?.content || ''\n            if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls\n            data.model = res.model\n            data.object = res.object || 'chat.completion'\n            data.promptTokens = res.usage?.prompt_tokens || 0\n            data.completionTokens = res.usage?.completion_tokens || 0\n            data.totalTokens = res.usage?.total_tokens || 0\n            return data\n        }\n    }\n\n    /**\n     * Formats chat messages according to the GPT model's message format.\n     *\n     * @param messages - An array of chat messages.\n     * @returns Formatted messages compatible with the GPT model.\n     */\n    private formatMessage(messages: ChatMessage[]) {\n        const prompt: GPTChatMessage[] = []\n\n        for (const { role, content, img } of messages) {\n            // GPT not support function role\n            if (role === ChatRoleEnum.TOOL || role === ChatRoleEnum.DEV) continue\n\n            // with image\n            if (img) {\n                if (!img.startsWith('http')) throw new Error('Invalid img HTTP URL')\n                prompt.push({\n                    role: 'user',\n                    content: [\n                        { type: 'text', text: content },\n                        { type: 'image_url', image_url: { url: img } }\n                    ]\n                })\n            }\n            // only text\n            else prompt.push({ role, content })\n        }\n\n        return prompt\n    }\n}\n","/** @format */\n\nimport { PassThrough, Readable } from 'stream'\nimport EventSourceStream from '@server-sent-stream/node'\nimport { decodeStream } from 'iconv-lite'\nimport { ChatRoleEnum, DeepSeekChatModel } from '../../interface/Enum'\nimport { ChatMessage, ChatResponse } from '../../interface/IModel'\nimport $ from '../util'\nimport { DSChatMessage, DSChatRequest, DSChatResponse } from '../../interface/IDeepSeek'\n\nconst API = 'https://api.deepseek.com'\n\nexport default class DeepSeek {\n    private key?: string | string[]\n    private api?: string\n\n    /**\n     * Constructor for MoonShot class.\n     * @param key - The API key for MoonShot.\n     * @param api - The API endpoint for proxy (optional).\n     */\n    constructor(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    /**\n     * Sends messages to the Ali QianWen chat model.\n     *\n     * @param messages - An array of chat messages.\n     * @param model - The model to use for chat (default: moonshot-v1-8k).\n     * @param stream - Whether to use stream response (default: false).\n     * @param top - Top probability to sample (optional).\n     * @param temperature - Temperature for sampling (optional).\n     * @param maxLength - Maximum token length for response (optional).\n     * @returns A promise resolving to the chat response or a stream.\n     */\n    async chat(\n        messages: ChatMessage[],\n        model: DeepSeekChatModel = DeepSeekChatModel.DEEPSEEK_V3,\n        stream: boolean = false,\n        top?: number,\n        temperature?: number,\n        maxLength?: number\n    ) {\n        // if (!Object.values(AliChatModel).includes(model)) throw new Error('Qian Wen chat model not found')\n\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('DeepSeek API key is not set in config')\n\n        if (typeof maxLength === 'number') {\n            if (maxLength < 1) maxLength = 1\n            if (maxLength > 8192) maxLength = 8192\n        }\n\n        // temperature is float in [0,1]\n        if (typeof temperature === 'number') {\n            if (temperature < 0) temperature = 0\n            if (temperature > 2) temperature = 2\n        }\n        // top is float in [0,1]\n        if (typeof top === 'number') {\n            if (top <= 0) top = 0.1\n            if (top > 1) top = 1.0\n        }\n\n        const res = await $.post<DSChatRequest, Readable | DSChatResponse>(\n            `${this.api}/chat/completions`,\n            {\n                model,\n                messages: this.formatMessage(messages),\n                stream,\n                temperature,\n                top_p: top,\n                max_tokens: maxLength\n            },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? 'stream' : 'json' }\n        )\n\n        const data: ChatResponse = {\n            content: '',\n            model,\n            object: '',\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0\n        }\n\n        if (res instanceof Readable) {\n            const output = new PassThrough()\n            const parser = new EventSourceStream()\n\n            parser.on('data', (e: MessageEvent) => {\n                const obj = $.json<DSChatResponse>(e.data)\n                if (obj) {\n                    data.content = obj.choices[0]?.delta?.content || ''\n                    data.model = obj.model\n                    data.object = obj.object\n                    data.promptTokens = obj.usage?.prompt_tokens || 0\n                    data.completionTokens = obj.usage?.completion_tokens || 0\n                    data.totalTokens = obj.usage?.total_tokens || 0\n                    output.write(JSON.stringify(data))\n                }\n            })\n            parser.on('error', e => output.destroy(e))\n            parser.on('end', () => output.end())\n\n            res.pipe(decodeStream('utf-8')).pipe(parser)\n            return output as Readable\n        } else {\n            data.content = res.choices[0]?.message?.content || ''\n            if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls\n            data.model = res.model\n            data.object = res.object\n            data.promptTokens = res.usage?.prompt_tokens || 0\n            data.completionTokens = res.usage?.completion_tokens || 0\n            data.totalTokens = res.usage?.total_tokens || 0\n            return data\n        }\n    }\n\n    /**\n     * Formats chat messages according to the GPT model's message format.\n     *\n     * @param messages - An array of chat messages.\n     * @returns Formatted messages compatible with the GPT model.\n     */\n    private formatMessage(messages: ChatMessage[]) {\n        const prompt: DSChatMessage[] = []\n\n        for (const { role, content, tool } of messages) {\n            // DeepSeek not support develop role\n            if (role === ChatRoleEnum.DEV) continue\n            else if (role === ChatRoleEnum.TOOL) prompt.push({ role, content, tool_call_id: tool! })\n            // DeepSeek not support image, only text\n            else prompt.push({ role, content })\n        }\n\n        return prompt\n    }\n}\n","/**\n * Utility for connecting to the OpenAI model API.\n *\n * @format prettier\n * @author devilyouwei\n */\n\nimport { PassThrough, Readable } from 'stream'\nimport EventSourceStream from '@server-sent-stream/node'\nimport { decodeStream } from 'iconv-lite'\nimport { ChatRoleEnum, XAIChatModel } from '../../interface/Enum'\nimport { ChatMessage, ChatResponse } from '../../interface/IModel'\nimport {\n    GrokChatMessage,\n    GrokChatRequest,\n    GrokChatResponse,\n    GrokChatResponseChunk,\n    GrokTool,\n    GrokToolChoice\n} from '../../interface/IX'\nimport $ from '../util'\n\nconst API = 'https://api.x.ai'\nconst VER = 'v1'\n\nexport default class XAI {\n    private api: string\n    private key?: string | string[]\n\n    /**\n     * Constructor for the OpenAI class.\n     *\n     * @param key - The API key for OpenAI.\n     * @param api - The API endpoint for proxy (optional).\n     */\n    constructor(key?: string | string[], api: string = API) {\n        this.key = key\n        this.api = api\n    }\n\n    /**\n     * Sends messages to the GPT chat model.\n     *\n     * @param messages - An array of chat messages.\n     * @param model - The model to use for chat (default: gpt-3.5-turbo).\n     * @param stream - Whether to use stream response (default: false).\n     * @param top - Top probability to sample (optional).\n     * @param temperature - Temperature for sampling (optional).\n     * @param maxLength - Maximum token length for response (optional).\n     * @param tools - Tools for model to use (optional).\n     * @param toolChoice - Controls which (if any) tool is called by the model: none, required, auto (optional).\n     * @returns A promise resolving to the chat response or a stream.\n     */\n    async chat(\n        messages: ChatMessage[],\n        model: XAIChatModel = XAIChatModel.GROK2,\n        stream: boolean = false,\n        top?: number,\n        temperature?: number,\n        maxLength?: number,\n        tools?: GrokTool[],\n        toolChoice?: GrokToolChoice\n    ) {\n        const key = Array.isArray(this.key) ? $.getRandomKey(this.key) : this.key\n        if (!key) throw new Error('X AI API key is not set in config')\n\n        // remove imgs for not vision model\n        if (![XAIChatModel.GROK2_VISION].includes(model))\n            messages = messages.map(({ role, content }) => ({ role, content }))\n\n        // temperature is float in [0,1]\n        if (typeof temperature === 'number') {\n            if (temperature < 0) temperature = 0\n            if (temperature > 2) temperature = 2\n        }\n        // top is float in [0,1]\n        if (typeof top === 'number') {\n            if (top < 0) top = 0\n            if (top > 1) top = 1\n        }\n\n        const res = await $.post<GrokChatRequest, Readable | GrokChatResponse>(\n            `${this.api}/${VER}/chat/completions`,\n            {\n                model,\n                messages: this.formatMessage(messages),\n                stream,\n                temperature,\n                top_p: top,\n                max_tokens: maxLength,\n                tools,\n                tool_choice: toolChoice\n            },\n            { headers: { Authorization: `Bearer ${key}` }, responseType: stream ? 'stream' : 'json' }\n        )\n\n        const data: ChatResponse = {\n            content: '',\n            model,\n            object: '',\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0\n        }\n\n        if (res instanceof Readable) {\n            const output = new PassThrough()\n            const parser = new EventSourceStream()\n\n            parser.on('data', (e: MessageEvent) => {\n                const obj = $.json<GrokChatResponseChunk>(e.data)\n                if (obj) {\n                    data.content = obj.choices[0]?.delta?.content || ''\n                    data.model = obj.model\n                    data.object = obj.object\n                    data.promptTokens = obj.usage?.prompt_tokens || 0\n                    data.completionTokens = obj.usage?.completion_tokens || 0\n                    data.totalTokens = obj.usage?.total_tokens || 0\n                    output.write(JSON.stringify(data))\n                }\n            })\n            parser.on('error', e => output.destroy(e))\n            parser.on('end', () => output.end())\n\n            res.pipe(decodeStream('utf-8')).pipe(parser)\n            return output as Readable\n        } else {\n            data.content = res.choices[0]?.message?.content || ''\n            if (res.choices[0]?.message?.tool_calls) data.tools = res.choices[0]?.message?.tool_calls\n            data.model = res.model\n            data.object = res.object\n            data.promptTokens = res.usage?.prompt_tokens || 0\n            data.completionTokens = res.usage?.completion_tokens || 0\n            data.totalTokens = res.usage?.total_tokens || 0\n            return data\n        }\n    }\n\n    /**\n     * Formats chat messages according to the GPT model's message format.\n     *\n     * @param messages - An array of chat messages.\n     * @returns Formatted messages compatible with the GPT model.\n     */\n    private formatMessage(messages: ChatMessage[]) {\n        const prompt: GrokChatMessage[] = []\n\n        for (const { role, content, img } of messages) {\n            // with image\n            switch (role) {\n                case ChatRoleEnum.USER:\n                    if (img)\n                        prompt.push({\n                            role,\n                            content: [\n                                { type: 'text', text: content },\n                                { type: 'image_url', image_url: { url: img } }\n                            ]\n                        })\n                    else prompt.push({ role, content })\n                    break\n                case ChatRoleEnum.ASSISTANT || ChatRoleEnum.SYSTEM:\n                    prompt.push({ role, content })\n                    break\n                default:\n                    break\n            }\n        }\n\n        return prompt\n    }\n}\n","/** @format */\nimport {\n    AliChatModel,\n    AliEmbedModel,\n    BaiduChatModel,\n    ChatModel,\n    ChatModelProvider,\n    ChatRoleEnum,\n    DeepSeekChatModel,\n    EmbedModel,\n    EmbedModelProvider,\n    GLMChatModel,\n    GLMEmbedModel,\n    GoogleChatModel,\n    GoogleEmbedModel,\n    IFlyTekChatModel,\n    IFlyTekImagineModel,\n    ImagineModel,\n    ImagineModelProvider,\n    MJTaskType,\n    MidJourneyImagineModel,\n    ModelProvider,\n    MoonShotChatModel,\n    OpenAIChatModel,\n    OpenAIEmbedModel,\n    OpenAIImagineModel,\n    OtherEmbedModel,\n    StabilityAIImagineModel,\n    XAIChatModel\n} from '../interface/Enum'\nimport { UniAIConfig } from '../interface/IConfig'\nimport { ChatMessage, ChatOption, EmbedOption, ImagineOption, ModelList, Provider } from '../interface/IModel'\nimport OpenAI from './providers/OpenAI'\nimport GLM from './providers/GLM'\nimport Other from './providers/Other'\nimport Google from './providers/Google'\nimport IFlyTek from './providers/IFlyTek'\nimport Baidu from './providers/Baidu'\nimport MoonShot from './providers/MoonShot'\nimport MidJourney from './providers/MidJourney'\nimport Stability from './providers/Stability'\nimport AliYun from './providers/AliYun'\nimport { ChatCompletionTool, ChatCompletionToolChoiceOption } from 'openai/resources'\nimport { GLMTool, GLMToolChoice } from '../interface/IGLM'\nimport { SPKTool, SPKToolChoice } from '../interface/IFlyTek'\nimport DeepSeek from './providers/DeepSeek'\nimport XAI from './providers/IX'\nimport { GrokTool, GrokToolChoice } from '../interface/IX'\n\nconst DEFAULT_MESSAGE = 'Hi, who are you? Answer in 10 words!'\n\nexport default class UniAI {\n    public config: UniAIConfig | null = null\n    public models: ModelList\n    public embedModels: ModelList\n    public chatModels: ModelList\n    public imgModels: ModelList\n\n    private openai: OpenAI\n    private deepseek: DeepSeek\n    private google: Google\n    private glm: GLM\n    private fly: IFlyTek\n    private baidu: Baidu\n    private other: Other\n    private moon: MoonShot\n    private ali: AliYun\n    private mj: MidJourney\n    private xai: XAI\n    private stability: Stability\n\n    constructor(config: UniAIConfig = {}) {\n        this.config = config\n        // OpenAI key, your OpenAI proxy API (optional)\n        this.openai = new OpenAI(config.OpenAI?.key, config.OpenAI?.proxy)\n        // DeepSeek Key\n        this.deepseek = new DeepSeek(config.DeepSeek?.key, config.DeepSeek?.proxy)\n        // ZhiPu AI with ChatGLM6B(local)\n        this.glm = new GLM(config.GLM?.key, config.GLM?.proxy)\n        // Google AI key, your Google AI API proxy (optional)\n        this.google = new Google(config.Google?.key, config.Google?.proxy)\n        // IFlyTek appid, API key, API secret\n        this.fly = new IFlyTek(\n            config.IFlyTek?.apiPassword,\n            config.IFlyTek?.appId,\n            config.IFlyTek?.apiKey,\n            config.IFlyTek?.apiSecret,\n            config.IFlyTek?.proxy\n        )\n        // Baidu WenXin Workshop, baidu api key, baidu secret key\n        this.baidu = new Baidu(config.Baidu?.apiKey, config.Baidu?.secretKey, config.Baidu?.proxy)\n        // MoonShot, moonshot API key\n        this.moon = new MoonShot(config.MoonShot?.key, config.MoonShot?.proxy)\n        // AliYun, QWen API key\n        this.ali = new AliYun(config.AliYun?.key, config.AliYun?.proxy)\n        // XAI Grok, XAI API key\n        this.xai = new XAI(config.XAI?.key, config.XAI?.proxy)\n        // Other model text2vec\n        this.other = new Other(config.Other?.api, config.Other?.key)\n        // Midjourney, proxy\n        this.mj = new MidJourney(config.MidJourney?.proxy, config.MidJourney?.token, config.MidJourney?.imgProxy)\n        // Stability AI, key, proxy\n        this.stability = new Stability(config.StabilityAI?.key, config.StabilityAI?.proxy)\n\n        // expand chat models to list\n        this.chatModels = Object.entries(ChatModelProvider).map<Provider>(([k, v]) => ({\n            provider: k as keyof typeof ChatModelProvider,\n            value: v,\n            models: Object.values<ChatModel>(\n                {\n                    [ChatModelProvider.OpenAI]: OpenAIChatModel,\n                    [ChatModelProvider.DeepSeek]: DeepSeekChatModel,\n                    [ChatModelProvider.Baidu]: BaiduChatModel,\n                    [ChatModelProvider.IFlyTek]: IFlyTekChatModel,\n                    [ChatModelProvider.GLM]: GLMChatModel,\n                    [ChatModelProvider.Google]: GoogleChatModel,\n                    [ChatModelProvider.MoonShot]: MoonShotChatModel,\n                    [ChatModelProvider.AliYun]: AliChatModel,\n                    [ChatModelProvider.XAI]: XAIChatModel,\n                    [ChatModelProvider.Other]: []\n                }[v]\n            )\n        }))\n\n        // expand chat models to list\n        this.imgModels = Object.entries(ImagineModelProvider).map<Provider>(([k, v]) => ({\n            provider: k as keyof typeof ImagineModelProvider,\n            value: v,\n            models: Object.values<ImagineModel>(\n                {\n                    [ImagineModelProvider.OpenAI]: OpenAIImagineModel,\n                    [ImagineModelProvider.MidJourney]: MidJourneyImagineModel,\n                    [ImagineModelProvider.StabilityAI]: StabilityAIImagineModel,\n                    [ImagineModelProvider.IFlyTek]: IFlyTekImagineModel\n                }[v]\n            )\n        }))\n\n        // expand chat models to list\n        this.embedModels = Object.entries(EmbedModelProvider).map<Provider>(([k, v]) => ({\n            provider: k as keyof typeof EmbedModelProvider,\n            value: v,\n            models: Object.values<EmbedModel>(\n                {\n                    [EmbedModelProvider.OpenAI]: OpenAIEmbedModel,\n                    [EmbedModelProvider.GLM]: GLMEmbedModel,\n                    [EmbedModelProvider.Google]: GoogleEmbedModel,\n                    [EmbedModelProvider.AliYun]: AliEmbedModel,\n                    [EmbedModelProvider.Other]: OtherEmbedModel\n                }[v]\n            )\n        }))\n\n        this.models = [...this.chatModels, ...this.embedModels, ...this.imgModels]\n    }\n\n    async chat(messages: ChatMessage[] | string = DEFAULT_MESSAGE, option: ChatOption = {}) {\n        if (typeof messages === 'string') messages = [{ role: ChatRoleEnum.USER, content: messages }]\n        const provider = option.provider || ChatModelProvider.OpenAI // default is OpenAI gpt-3.5-turbo\n        const { model, stream, top, temperature, maxLength, tools, toolChoice } = option\n\n        if (provider === ChatModelProvider.OpenAI)\n            return await this.openai.chat(\n                messages,\n                model as OpenAIChatModel,\n                stream,\n                top,\n                temperature,\n                maxLength,\n                tools as ChatCompletionTool[],\n                toolChoice as ChatCompletionToolChoiceOption\n            )\n        else if (provider === ChatModelProvider.DeepSeek)\n            return await this.deepseek.chat(messages, model as DeepSeekChatModel, stream, top, temperature, maxLength)\n        else if (provider === ChatModelProvider.Google)\n            return await this.google.chat(messages, model as GoogleChatModel, stream, top, temperature, maxLength)\n        else if (provider === ChatModelProvider.GLM)\n            return await this.glm.chat(\n                messages,\n                model as GLMChatModel,\n                stream,\n                top,\n                temperature,\n                maxLength,\n                tools as GLMTool[],\n                toolChoice as GLMToolChoice\n            )\n        else if (provider === ChatModelProvider.IFlyTek)\n            return await this.fly.chat(\n                messages,\n                model as IFlyTekChatModel,\n                stream,\n                top,\n                temperature,\n                maxLength,\n                tools as SPKTool[],\n                toolChoice as SPKToolChoice\n            )\n        else if (provider === ChatModelProvider.Baidu)\n            return await this.baidu.chat(messages, model as BaiduChatModel, stream, top, temperature, maxLength)\n        else if (provider === ChatModelProvider.MoonShot)\n            return await this.moon.chat(messages, model as MoonShotChatModel, stream, top, temperature, maxLength)\n        else if (provider === ChatModelProvider.AliYun)\n            return await this.ali.chat(messages, model as AliChatModel, stream, top, temperature, maxLength)\n        else if (provider === ChatModelProvider.XAI)\n            return await this.xai.chat(\n                messages,\n                model as XAIChatModel,\n                stream,\n                top,\n                temperature,\n                maxLength,\n                tools as GrokTool[],\n                toolChoice as GrokToolChoice\n            )\n        else if (provider === ChatModelProvider.Other)\n            return await this.other.chat(\n                messages,\n                model as ChatModel,\n                stream,\n                top,\n                temperature,\n                maxLength,\n                tools as ChatCompletionTool[],\n                toolChoice as ChatCompletionToolChoiceOption\n            )\n        else throw new Error('Chat model Provider not found')\n    }\n\n    async embedding(content: string | string[], option: EmbedOption = {}) {\n        const provider = option.provider || ModelProvider.OpenAI\n        const { model } = option\n        if (typeof content === 'string') content = [content]\n\n        if (provider === EmbedModelProvider.OpenAI)\n            return await this.openai.embedding(content, model as OpenAIEmbedModel)\n        else if (provider === EmbedModelProvider.GLM)\n            return await this.glm.embedding(content, model as GLMEmbedModel, option.dimensions)\n        else if (provider === EmbedModelProvider.Google)\n            return await this.google.embedding(content, model as GoogleEmbedModel)\n        else if (provider === EmbedModelProvider.AliYun)\n            return await this.ali.embedding(content, model as AliEmbedModel, option.dimensions)\n        else if (provider === EmbedModelProvider.Other)\n            return await this.other.embedding(content, model as OtherEmbedModel)\n        else throw new Error('Embedding model provider not found')\n    }\n\n    async imagine(prompt: string, option: ImagineOption = {}) {\n        const provider = option.provider || ImagineModelProvider.OpenAI\n        const { negativePrompt, width, height, num, model } = option\n        if (provider === ImagineModelProvider.OpenAI)\n            return await this.openai.imagine(prompt, width, height, num, model as OpenAIImagineModel)\n        else if (provider === ImagineModelProvider.MidJourney)\n            return await this.mj.imagine(prompt, negativePrompt, width, height)\n        else if (provider === ImagineModelProvider.StabilityAI)\n            return await this.stability.imagine(\n                prompt,\n                negativePrompt,\n                width,\n                height,\n                num,\n                model as StabilityAIImagineModel\n            )\n        else if (provider === ImagineModelProvider.IFlyTek)\n            return await this.fly.imagine(prompt, width, height, model as IFlyTekImagineModel)\n        else throw new Error('Imagine model provider not found')\n    }\n\n    async task(provider: ImagineModelProvider, id?: string) {\n        if (provider === ImagineModelProvider.OpenAI) return this.openai.task(id)\n        else if (provider === ImagineModelProvider.MidJourney) return await this.mj.task(id)\n        else if (provider === ImagineModelProvider.StabilityAI) return this.stability.task(id)\n        else if (provider === ImagineModelProvider.IFlyTek) return this.fly.task(id)\n        else throw new Error('Imagine model provider not found')\n    }\n\n    async change(provider: ImagineModelProvider, taskId: string, action: string, index?: number) {\n        if (provider === ImagineModelProvider.MidJourney) return this.mj.change(taskId, action as MJTaskType, index)\n        else throw new Error('Imagine model provider not found')\n    }\n}\n","/** @format */\nexport * from '../interface/Enum'\nexport * from '../interface/IBaidu'\nexport * from '../interface/IConfig'\nexport * from '../interface/IFlyTek'\nexport * from '../interface/IGLM'\nexport * from '../interface/IGoogle'\nexport * from '../interface/IModel'\nexport * from '../interface/IOpenAI'\nexport * from '../interface/IX'\nexport * from '../interface/IDeepSeek'\nexport * from '../interface/IMidJourney'\nexport * from '../interface/IStability'\n\nimport UniAI from './UniAI'\nexport default UniAI\n"]}