@kalamba/sdk 0.23.0 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/plugins.cjs CHANGED
@@ -2,4 +2,4 @@
2
2
  * BSD 3-Clause License
3
3
  * Copyright (c) 2025, Kalamba Games Limited
4
4
  */
5
- "use strict";var rs=Object.defineProperty;var ft=i=>{throw TypeError(i)};var cs=(i,t,e)=>t in i?rs(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var b=(i,t,e)=>cs(i,typeof t!="symbol"?t+"":t,e),yt=(i,t,e)=>t.has(i)||ft("Cannot "+e);var k=(i,t,e)=>(yt(i,t,"read from private field"),e?e.call(i):t.get(i)),M=(i,t,e)=>t.has(i)?ft("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e),v=(i,t,e,s)=>(yt(i,t,"write to private field"),s?s.call(i,e):t.set(i,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const He=require("./errors-BXO3dlhS.cjs"),qe=require("./encoders-DVHzIpWT.cjs"),gt=require("./v4-CoqWKwnX.cjs");function A(i,t){return(e,...s)=>{console.log(`[%c${i}\x1B[m] %s`,t,e,...s)}}function Kt(i,t){return Math.round(i*100/t)}class U{constructor(t,e){b(this,"config");b(this,"sdkConfig");this.config=t,this.sdkConfig=e}on(t,e,s){const a=function(c){c.data.message!==`kalamba:wrapper-casino:${t}`&&c.data.message!==`kalamba:wrapper:${t}`||e(c.data.payload)};window.addEventListener("message",a,s)}send(t,...[e]){window.postMessage({message:`kalamba:casino:${t}`,payload:e})}}const ds=A("BasicPlugin","color:#000000;font-weight:bold;");class ls extends U{constructor(...t){super(...t),this.registerToSdkEvents(),this.registerFromSdkEvents(),ds("configured")}registerToSdkEvents(){window.addEventListener("message",t=>{try{const{type:e,payload:s}=t.data;switch(e){case"doAudioSettings":this.send("settings",{music:s==null?void 0:s.musicEnabled,sounds:s==null?void 0:s.soundEnabled});return;case"doBalanceUpdate":const{currency:a,coinValueInCents:r}=this.sdkConfig.api;s.currency===a&&typeof s.balanceInCurrency=="number"?this.send("balance",{balance:Kt(s.balanceInCurrency,r)}):(s.balanceInCoins,this.send("balance",{balance:s.balanceInCoins}));return;case"doGamePause":this.send("freeze");return;case"doGameResume":this.send("unfreeze");return;case"doGameSuspend":this.send("suspend");return;default:return}}catch{}})}registerFromSdkEvents(){this.on("close",()=>{if(this.sdkConfig.api.homeUrl)try{window.top.location=this.sdkConfig.api.homeUrl}catch{window.location=this.sdkConfig.api.homeUrl}else try{window.top.history.back()}catch{window.history.back()}})}}const E=A("▼ DebuggingPlugin IN ▼","color:#444444;font-weight:bold;"),us=A("▲ DebuggingPlugin OUT ▲","color:#444444;font-weight:bold;");class hs extends U{constructor(...t){super(...t),this.registerDebugToSdkEvents(),this.registerSdkToDebugEvents()}registerDebugToSdkEvents(){window.DebuggingPlugin={balance:t=>this._send("balance",t),bet:t=>this._send("bet",t),choice:t=>this._send("choice",t),close:t=>this._send("close",t),help:t=>this._send("help",t),history:t=>this._send("history",t),freeze:t=>this._send("freeze",t),paytable:t=>this._send("paytable",t),settings:t=>this._send("settings",t),suspend:t=>this._send("suspend",t),unfreeze:t=>this._send("unfreeze",t)}}registerSdkToDebugEvents(){this.on("autoplay",t=>E("autoplay",t)),this.on("balance",t=>E("balance",t)),this.on("bet",t=>E("bet",t)),this.on("cashier",t=>E("cashier",t)),this.on("choice",t=>E("choice",t)),this.on("close",t=>E("close",t)),this.on("error",t=>E("error",t)),this.on("loadEnd",t=>E("loadEnd",t)),this.on("loadProgress",t=>E("loadProgress",t)),this.on("loadStart",t=>E("loadStart",t)),this.on("playCycleStart",t=>E("playCycleStart",t)),this.on("playCycleEnd",t=>E("playCycleEnd",t)),this.on("playEnd",t=>E("playEnd",t)),this.on("playError",t=>E("playError",t)),this.on("playReady",t=>E("playReady",t)),this.on("playStart",t=>E("playStart",t)),this.on("settings",t=>E("settings",t))}_send(...t){us.apply(null,t),this.send.apply(this,t)}}const kt=A("GigPlugin","color:#000000;font-weight:bold;");class gs extends U{constructor(...t){super(...t),this.registerToSdkEvents(),this.registerFromSdkEvents(),kt("configured")}postMessage(t){const e={event:t};kt("postMessage",e),window.top.postMessage(e,"*")}registerToSdkEvents(){window.addEventListener("message",t=>{try{const{data:e}=t;switch(e){case"STOP_AUTO_PLAY":this.send("suspend");return;case"BLOCK_BETS":this.send("freeze");return;case"UNBLOCK_BETS":this.send("unfreeze");return;default:return}}catch{}})}registerFromSdkEvents(){this.on("close",()=>{if(this.sdkConfig.api.homeUrl)try{window.top.location=this.sdkConfig.api.homeUrl}catch{window.location=this.sdkConfig.api.homeUrl}else try{window.top.history.back()}catch{window.history.back()}}),this.on("playReady",()=>{this.postMessage("GAME_READY")})}}const ps=A("OryxPlugin","color:#000000;font-weight:bold;");class ws extends U{constructor(...t){super(...t),this.registerToSdkEvents(),this.registerFromSdkEvents(),ps("configured")}registerToSdkEvents(){window.addEventListener("message",t=>{try{const{type:e,param:s}=t.data;switch(e){case"doBalanceUpdate":this.send("balance",{balance:s});return;case"doGamePause":this.send("freeze");return;case"doGameResume":this.send("unfreeze");return;case"doGameSuspend":this.send("suspend");return;default:return}}catch{}})}registerFromSdkEvents(){let t=0;this.on("close",()=>{window.top.postMessage({wpgaction:"close"},"*"),window.parent.postMessage({wpgaction:"close.parent"},"*")}),this.on("balance",({balance:e})=>{t!==e&&(t=e,window.top.postMessage({param:{},wpgaction:"balance"},"*"),window.parent.postMessage({param:{},wpgaction:"balance.parent"},"*"))}),this.on("loadStart",()=>{window.top.postMessage({wpgaction:"loadStart"},"*"),window.parent.postMessage({wpgaction:"loadStart.parent"},"*")}),this.on("loadEnd",()=>{window.top.postMessage({wpgaction:"loadEnd"},"*"),window.parent.postMessage({wpgaction:"loadEnd.parent"},"*")}),this.on("playStart",()=>{window.top.postMessage({wpgaction:"gameSpinStart"},"*"),window.parent.postMessage({wpgaction:"gameSpinStart.parent"},"*")}),this.on("playEnd",()=>{window.top.postMessage({wpgaction:"gameSpinEnd"},"*"),window.parent.postMessage({wpgaction:"gameSpinEnd.parent"},"*")}),this.on("cashier",({type:e})=>{switch(e){case"BALANCE_LOW":window.top.postMessage({wpgaction:"cashier"},"*"),window.parent.postMessage({wpgaction:"cashier.parent"},"*");break;case"BALANCE_INSUFFICIENT":window.top.postMessage({wpgaction:"errorOutOfMoney"},"*"),window.parent.postMessage({wpgaction:"errorOutOfMoney.parent"},"*");break}})}}const We=A("PariplayPlugin","color:#000000;font-weight:bold;");function je(i){try{window.top.location=i}catch{window.location=i}}function $e(i,t){return new Promise(function(s,a){const r=new XMLHttpRequest;r.onload=function(){r.status>=200&&r.status<300?s(r.responseText):a(r.responseText)},r.open(i,t),r.send()})}function Ke(){}function ms(i){return i.filter(function(e){return e.messageType.toUpperCase()==="DATA"})}function Qe(i){return i.filter(function(e){return["NOTIFICATION","POPUP"].includes(e.messageType.toUpperCase())})}function Qt(i){try{return JSON.parse(i.text)}catch{return{}}}function bs(i){return i.map(Qt).filter(Boolean).find(function(e){return e.betId!=null&&e.winId!=null})||{}}function fs(i){return i.map(Qt).filter(Boolean).find(function(e){return e.TotalBet!=null&&e.TotalWin!=null})||{}}class ys extends U{constructor(...t){super(...t),this.registerToSdkEvents(),this.registerFromSdkEvents(),We("configured")}postMessage(t,e){const s={lang:this.sdkConfig.ui.language,sender:this.sdkConfig.api.game,type:t};e!=null&&(s.data=e),We("postMessage",s),window.parent.postMessage(s,"*")}coinsToCurrency(t){return t*this.sdkConfig.api.coinValueInCents/100}handleContinueButton(t,e){t.link&&$e("GET",t.link),e()}handleLinkButton(t,e){switch(t.linkType.toUpperCase()){case"AJAX":$e("GET",t.link),e();return;case"AJAXRESPONSE":$e("GET",t.link).then(()=>{e()});return;case"REDIRECT":je(t.link),e();return}}handleQuitButton(t,e){this.send("close"),e()}handleCashierButton(t,e){this.send("cashier",{type:"ON_DEMAND"}),e()}handleHistoryButton(t,e){this.send("history",{source:"casino"}),e()}get buttonActions(){return{CASHIER:this.handleCashierButton,CONTINUE:this.handleContinueButton,HISTORY:this.handleHistoryButton,LINK:this.handleLinkButton,QUIT:this.handleQuitButton}}processInfoUiMessages(t){return t.reduce((e,s)=>e.then(()=>new Promise(a=>{const r=Object.assign({},s,{buttons:s.buttons.filter(c=>c.action.toUpperCase()==="CASHIER"?!!this.sdkConfig.api.cashierUrl:!0).map(c=>Object.assign({},c,{onRelease:()=>{const g=s.messageType.toUpperCase()==="POPUP"?Ke:a,h=this.buttonActions[c.action.toUpperCase()];h?h(c,g):g()}}))});We("showMessage",r)}).catch(Ke)),Promise.resolve()).then(()=>{}).catch(Ke)}registerToSdkEvents(){window.addEventListener("message",t=>{try{const{type:e}=t.data;switch(e){case"pause":case"disableSpin":this.send("freeze");return;case"resume":case"enableSpin":this.send("unfreeze");return;case"stopAutobet":this.send("suspend");return;default:return}}catch{}})}registerFromSdkEvents(){let t=0;this.on("openGameResponse",e=>{let s;try{const a=JSON.parse(JSON.parse(atob(this.sdkConfig.api.integrationData.token.split(".")[1])).token),r=JSON.parse(a.integrationSpecificAttributes.sessionData||"{}");s={ClientToken:a.integrationSpecificAttributes.clientToken,CurrencyCode:a.currency,PlayerTokenId:a.user,SessionData:r}}catch{s=void 0}this.postMessage("gameDataLoaded",{LoadGameData:s,success:!0});try{const a=Qe(e.contract.uiMessages);this.processInfoUiMessages(a)}catch{}}),this.on("balance",({balance:e})=>{t!==e&&(t=e,this.postMessage("balance",{amount:this.coinsToCurrency(e)}))}),this.on("close",()=>{if(this.sdkConfig.api.homeUrl)if(this.sdkConfig.api.homeUrl==="(back)")try{window.top.history.back()}catch{window.history.back()}else this.sdkConfig.api.homeUrl==="(api)"?this.postMessage("quit"):je(this.sdkConfig.api.homeUrl)}),this.on("playEnd",e=>{this.postMessage("roundEnded",{balanceAfter:this.coinsToCurrency(e.contract.balance.coins),win:this.coinsToCurrency(e.contract.win.round)});try{const s=Qe(e.contract.uiMessages);this.processInfoUiMessages(s)}catch{}}),this.on("playError",e=>{this.postMessage("ticketReceived",{ErrorCode:e.type==="error"?e.data.code:"TIMEOUT",ErrorMessage:"ERROR",Status:{ErrCode:e.type==="error"?e.data.code:"TIMEOUT"}})}),this.on("playResponse",e=>{this.postMessage("roundStarted",{balanceBefore:this.coinsToCurrency(e.contract.balance.coins+e.contract.bet.lastPaid.base*e.contract.bet.lastPaid.multiplier)});const s=["BaseGame","PaidSpin"].includes(e.contract.stateType.thisRound),a=ms(e.contract.uiMessages),r=Qe(e.contract.uiMessages),c=bs(a),g=fs(a);this.postMessage("ticketReceived",{Balance:this.coinsToCurrency(e.contract.balance.coins),BetAmount:s?this.coinsToCurrency(e.contract.bet.lastPaid.base*e.contract.bet.lastPaid.multiplier):0,CreditTransactionId:c.betId,DebitTransactionId:c.winId,Message:r,SessionData:g,Status:{ErrCode:0},WinAmount:this.coinsToCurrency(e.contract.win.round)})}),this.on("playStart",e=>{e.bet&&this.postMessage("roundStart",{totalBet:this.coinsToCurrency(e.bet.base*e.bet.multiplier)})}),this.on("loadEnd",()=>{this.postMessage("gameReady")}),this.on("loadStart",()=>{this.postMessage("onAppFrameReady")}),this.on("cashier",()=>{this.sdkConfig.api.cashierUrl&&(this.sdkConfig.api.cashierUrl==="(api)"?this.postMessage("cashier"):je(this.sdkConfig.api.cashierUrl))})}}const we=A("RelaxFEIMPlugin","color:#000000;font-weight:bold;");class ks extends U{constructor(...e){super(...e);b(this,"VERSION","1.17.0");const s=document.createElement("script");s.src=`https://d3nsdzdtjbr5ml.cloudfront.net/casino/relaxlibs/feim/${this.VERSION}/rlxfeim.min.js`,s.onload=()=>{we("loaded"),window.FEIM.configure({p2pConfig:{currency:this.sdkConfig.api.currency,launchParams:{homeurl:"homeUrl"}}}),we("configured"),this.registerToSdkEvents(),this.registerFromSdkEvents()},document.body.appendChild(s)}registerToSdkEvents(){window.FEIM.on.errorMessageDismissed(()=>this.send("unfreeze")),window.FEIM.on.errorMessageDisplayed(()=>this.send("freeze")),window.FEIM.on.exitingGame(()=>we("!!! NOT IMPLEMENTED: exitingGame !!!")),window.FEIM.on.freeze(()=>this.send("freeze")),window.FEIM.on.initialized(()=>we("!!! NOT IMPLEMENTED: initialized !!!")),window.FEIM.on.pauseAutoPlay(()=>this.send("suspend")),window.FEIM.on.refreshBalance(()=>we("!!! NOT IMPLEMENTED: refreshBalance !!!")),window.FEIM.on.toggleGameHelp(()=>{this.send("help")}),window.FEIM.on.togglePaytable(()=>{this.send("paytable")}),window.FEIM.on.unfreeze(()=>this.send("unfreeze")),window.FEIM.on.updateSettings(({payload:[e]})=>this.send("settings",{sounds:e.sounds,fastPlay:e.fastPlay}))}registerFromSdkEvents(){this.on("autoplay",({action:e})=>{switch(e){case"start":window.FEIM.send.autoPlayStarted();break;case"stop":window.FEIM.send.autoPlayFinished();break}}),this.on("balance",({balance:e})=>{window.FEIM.send.balanceUpdate(e)}),this.on("bet",({base:e,multiplier:s})=>{window.FEIM.send.betUpdate(e*s)}),this.on("error",e=>{const s="message"in e?e.message:"Unknown error";window.FEIM.send.errorMessage(s)}),this.on("close",()=>{window.FEIM.send.exitGame()}),this.on("loadEnd",()=>{window.FEIM.send.gameLoadCompleted()}),this.on("loadProgress",({progress:e})=>{window.FEIM.send.gameLoadProgress(e)}),this.on("loadStart",()=>{window.FEIM.send.gameLoadStarted()}),this.on("cashier",()=>{window.FEIM.send.openQuickDeposit()}),this.on("playCycleEnd",e=>{const s={balance:e.contract.balance.coins,bet:e.contract.bet.lastPaid.base*e.contract.bet.lastPaid.multiplier,win:{win:e.contract.win.total}};window.FEIM.send.roundFinished(s)}),this.on("playResponse",e=>{const s={balance:e.contract.balance.coins,playResponse:e.data};window.FEIM.send.roundStarted(s)}),this.on("history",()=>{window.FEIM.send.showHistory()}),this.on("settings",e=>{window.FEIM.send.updateSettings(e)})}}const Xe=A("TukoPlugin","color:#000000;font-weight:bold;");class vs extends U{constructor(...e){super(...e);b(this,"PING_INTERVAL",1e4);const a=new URLSearchParams(window.location.search).get("pingCallbackUrl");a&&window.setInterval(()=>{this.ping(a)},this.PING_INTERVAL),this.registerToSdkEvents(),this.registerFromSdkEvents(),Xe("configured")}ping(e){const s=new XMLHttpRequest;s.onreadystatechange=function(){s.readyState===XMLHttpRequest.DONE&&(s.status===0||s.status>=200&&s.status<400?Xe("ping ok",s):Xe("ping error",s))},s.open("GET",e),s.send()}registerToSdkEvents(){window.addEventListener("message",e=>{try{const{type:s,payload:a}=e.data;switch(s){case"doAudioSettings":this.send("settings",{music:a==null?void 0:a.musicEnabled,sounds:a==null?void 0:a.soundEnabled});return;case"doBalanceUpdate":const{currency:r,coinValueInCents:c}=this.sdkConfig.api;a.currency===r&&typeof a.balanceInCurrency=="number"?this.send("balance",{balance:Kt(a.balanceInCurrency,c)}):(a.balanceInCoins,this.send("balance",{balance:a.balanceInCoins}));return;case"doGamePause":this.send("freeze");return;case"doGameResume":this.send("unfreeze");return;case"doGameSuspend":this.send("suspend");return;default:return}}catch{}})}registerFromSdkEvents(){this.on("close",()=>{if(this.sdkConfig.api.homeUrl)try{window.top.location=this.sdkConfig.api.homeUrl}catch{window.location=this.sdkConfig.api.homeUrl}else try{window.top.history.back()}catch{window.history.back()}})}}const vt=A("QuantaPlugin","color:#000000;font-weight:bold;");class Es extends U{constructor(...t){super(...t),this.registerFromSdkEvents(),vt("configured")}postMessage(t){const e={event:t};vt("postMessage",e),window.parent.postMessage(e,"*")}registerFromSdkEvents(){this.on("close",()=>{this.postMessage("GameClosed")}),this.on("loadEnd",()=>{this.postMessage("GameLoaded")}),this.on("playCycleStart",()=>{this.postMessage("RoundStarted")}),this.on("playCycleEnd",()=>{this.postMessage("RoundEnded")}),this.on("playError",()=>{this.postMessage("RoundEnded")})}}const Et=A("SoftSwissPlugin","color:#000000;font-weight:bold;");class Cs extends U{constructor(...t){super(...t),this.registerFromSdkEvents(),Et("configured")}postMessage(t,e){const s={event:t,payload:e};Et("postMessage",s),window.top.postMessage(s,"*")}registerFromSdkEvents(){this.on("loadStart",()=>{this.postMessage("gameLoadStarted")}),this.on("loadProgress",({progress:t})=>{this.postMessage("gameLoadProgress",{progress:t})}),this.on("loadEnd",()=>{this.postMessage("gameLoadCompleted")}),this.on("playCycleStart",()=>{this.postMessage("gameAnimationStart")}),this.on("playCycleEnd",t=>{this.postMessage("winUpdate",{win:t.contract.win.total}),this.postMessage("gameAnimationCompleted")}),this.on("playError",()=>{this.postMessage("gameAnimationCompleted")}),this.on("balance",({balance:t})=>{this.postMessage("balanceUpdate",{balance:t})}),this.on("bet",t=>{this.postMessage("stakeUpdate",{bet:t})})}}const Ct=A("EveryMatrixPlugin","color:#000000;font-weight:bold;");class Ms extends U{constructor(...t){super(...t),this.registerToSdkEvents(),this.registerFromSdkEvents(),Ct("configured")}postMessage(t,e){const s={name:t,sender:"game",data:e};Ct("postMessage",s),window.top.postMessage(s,"*")}registerToSdkEvents(){window.addEventListener("message",t=>{try{const{name:e,sender:s}=t.data;if(s!=="emwindow")return;switch(e){case"updateBalance":this.send("getBalance");return;case"togglePaytable":this.send("paytable");return;case"stopAutoplay":this.send("suspend");return;case"showHelp":this.send("help",{show:!0});return;default:return}}catch{}})}registerFromSdkEvents(){this.on("loadProgress",({progress:t})=>{this.postMessage("loadProgress",{progress:t})}),this.on("loadEnd",()=>{this.postMessage("loadCompleted")}),this.on("settings",t=>{(t!=null&&t.music||t!=null&&t.sounds)&&this.postMessage("audioToggle")}),this.on("playCycleStart",()=>{this.postMessage("roundStart")}),this.on("playCycleEnd",()=>{this.postMessage("roundEnd")}),this.on("playError",()=>{this.postMessage("errorMessage")}),this.on("error",()=>{this.postMessage("errorMessage")}),this.on("close",()=>{this.postMessage("close")}),this.on("bet",()=>{this.postMessage("stakeUpdate")})}}var Ss="2.0.3",dt=500,Mt="user-agent",le="",St="?",Be="function",j="undefined",ue="object",lt="string",S="browser",F="cpu",L="device",x="engine",O="os",te="result",l="name",n="type",d="vendor",u="version",T="architecture",Se="major",o="model",Ce="console",w="mobile",f="tablet",y="smarttv",R="wearable",Je="xr",Me="embedded",me="inapp",pt="brands",Y="formFactors",wt="fullVersionList",se="platform",mt="platformVersion",Ve="bitness",$="sec-ch-ua",Ts=$+"-full-version-list",Is=$+"-arch",Ps=$+"-"+Ve,As=$+"-form-factors",Os=$+"-"+w,xs=$+"-"+o,Xt=$+"-"+se,Us=Xt+"-version",Jt=[pt,wt,w,o,se,mt,T,Y,Ve],xe="Amazon",Z="Apple",Tt="ASUS",It="BlackBerry",J="Google",Pt="Huawei",At="Lenovo",Ot="Honor",Ue="LG",Ye="Microsoft",Ze="Motorola",et="Nvidia",xt="OnePlus",tt="OPPO",be="Samsung",Ut="Sharp",fe="Sony",st="Xiaomi",it="Zebra",Rt="Chrome",Lt="Chromium",V="Chromecast",Rs="Edge",ye="Firefox",ke="Opera",at="Facebook",Bt="Sogou",ee="Mobile ",ve=" Browser",ut="Windows",Ls=typeof window!==j,I=Ls&&window.navigator?window.navigator:void 0,z=I&&I.userAgentData?I.userAgentData:void 0,Bs=function(i,t){var e={},s=t;if(!_e(t)){s={};for(var a in t)for(var r in t[a])s[r]=t[a][r].concat(s[r]?s[r]:[])}for(var c in i)e[c]=s[c]&&s[c].length%2===0?s[c].concat(i[c]):i[c];return e},ze=function(i){for(var t={},e=0;e<i.length;e++)t[i[e].toUpperCase()]=i[e];return t},ht=function(i,t){if(typeof i===ue&&i.length>0){for(var e in i)if(N(i[e])==N(t))return!0;return!1}return ge(i)?N(t).indexOf(N(i))!==-1:!1},_e=function(i,t){for(var e in i)return/^(browser|cpu|device|engine|os)$/.test(e)||(t?_e(i[e]):!1)},ge=function(i){return typeof i===lt},nt=function(i){if(i){for(var t=[],e=he(/\\?\"/g,i).split(","),s=0;s<e.length;s++)if(e[s].indexOf(";")>-1){var a=Te(e[s]).split(";v=");t[s]={brand:a[0],version:a[1]}}else t[s]=Te(e[s]);return t}},N=function(i){return ge(i)?i.toLowerCase():i},ot=function(i){return ge(i)?he(/[^\d\.]/g,i).split(".")[0]:void 0},D=function(i){for(var t in i){var e=i[t];typeof e==ue&&e.length==2?this[e[0]]=e[1]:this[e]=void 0}return this},he=function(i,t){return ge(t)?t.replace(i,le):t},Ee=function(i){return he(/\\?\"/g,i)},Te=function(i,t){if(ge(i))return i=he(/^\s\s*/,i),typeof t===j?i:i.substring(0,dt)},rt=function(i,t){if(!(!i||!t))for(var e=0,s,a,r,c,g,h;e<t.length&&!g;){var p=t[e],m=t[e+1];for(s=a=0;s<p.length&&!g&&p[s];)if(g=p[s++].exec(i),g)for(r=0;r<m.length;r++)h=g[++a],c=m[r],typeof c===ue&&c.length>0?c.length===2?typeof c[1]==Be?this[c[0]]=c[1].call(this,h):this[c[0]]=c[1]:c.length===3?typeof c[1]===Be&&!(c[1].exec&&c[1].test)?this[c[0]]=h?c[1].call(this,h,c[2]):void 0:this[c[0]]=h?h.replace(c[1],c[2]):void 0:c.length===4&&(this[c[0]]=h?c[3].call(this,h.replace(c[1],c[2])):void 0):this[c]=h||void 0;e+=2}},q=function(i,t){for(var e in t)if(typeof t[e]===ue&&t[e].length>0){for(var s=0;s<t[e].length;s++)if(ht(t[e][s],i))return e===St?void 0:e}else if(ht(t[e],i))return e===St?void 0:e;return t.hasOwnProperty("*")?t["*"]:i},_t={ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2","8.1":"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"},Ft={embedded:"Automotive",mobile:"Mobile",tablet:["Tablet","EInk"],smarttv:"TV",wearable:"Watch",xr:["VR","XR"],"?":["Desktop","Unknown"],"*":void 0},Nt={browser:[[/\b(?:crmo|crios)\/([\w\.]+)/i],[u,[l,ee+"Chrome"]],[/edg(?:e|ios|a)?\/([\w\.]+)/i],[u,[l,"Edge"]],[/(opera mini)\/([-\w\.]+)/i,/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i],[l,u],[/opios[\/ ]+([\w\.]+)/i],[u,[l,ke+" Mini"]],[/\bop(?:rg)?x\/([\w\.]+)/i],[u,[l,ke+" GX"]],[/\bopr\/([\w\.]+)/i],[u,[l,ke]],[/\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i],[u,[l,"Baidu"]],[/\b(?:mxbrowser|mxios|myie2)\/?([-\w\.]*)\b/i],[u,[l,"Maxthon"]],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\/ ]?([\w\.]*)/i,/(avant|iemobile|slim(?:browser|boat|jet))[\/ ]?([\d\.]*)/i,/(?:ms|\()(ie) ([\w\.]+)/i,/(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon|otter|dooble|(?:lg |qute)browser)\/([-\w\.]+)/i,/(heytap|ovi|115|surf)browser\/([\d\.]+)/i,/(ecosia|weibo)(?:__| \w+@)([\d\.]+)/i],[l,u],[/quark(?:pc)?\/([-\w\.]+)/i],[u,[l,"Quark"]],[/\bddg\/([\w\.]+)/i],[u,[l,"DuckDuckGo"]],[/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i],[u,[l,"UCBrowser"]],[/microm.+\bqbcore\/([\w\.]+)/i,/\bqbcore\/([\w\.]+).+microm/i,/micromessenger\/([\w\.]+)/i],[u,[l,"WeChat"]],[/konqueror\/([\w\.]+)/i],[u,[l,"Konqueror"]],[/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i],[u,[l,"IE"]],[/ya(?:search)?browser\/([\w\.]+)/i],[u,[l,"Yandex"]],[/slbrowser\/([\w\.]+)/i],[u,[l,"Smart "+At+ve]],[/(avast|avg)\/([\w\.]+)/i],[[l,/(.+)/,"$1 Secure"+ve],u],[/\bfocus\/([\w\.]+)/i],[u,[l,ye+" Focus"]],[/\bopt\/([\w\.]+)/i],[u,[l,ke+" Touch"]],[/coc_coc\w+\/([\w\.]+)/i],[u,[l,"Coc Coc"]],[/dolfin\/([\w\.]+)/i],[u,[l,"Dolphin"]],[/coast\/([\w\.]+)/i],[u,[l,ke+" Coast"]],[/miuibrowser\/([\w\.]+)/i],[u,[l,"MIUI"+ve]],[/fxios\/([\w\.-]+)/i],[u,[l,ee+ye]],[/\bqihoobrowser\/?([\w\.]*)/i],[u,[l,"360"]],[/\b(qq)\/([\w\.]+)/i],[[l,/(.+)/,"$1Browser"],u],[/(oculus|sailfish|huawei|vivo|pico)browser\/([\w\.]+)/i],[[l,/(.+)/,"$1"+ve],u],[/samsungbrowser\/([\w\.]+)/i],[u,[l,be+" Internet"]],[/metasr[\/ ]?([\d\.]+)/i],[u,[l,Bt+" Explorer"]],[/(sogou)mo\w+\/([\d\.]+)/i],[[l,Bt+" Mobile"],u],[/(electron)\/([\w\.]+) safari/i,/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,/m?(qqbrowser|2345(?=browser|chrome|explorer))\w*[\/ ]?v?([\w\.]+)/i],[l,u],[/(lbbrowser|rekonq)/i],[l],[/ome\/([\w\.]+) \w* ?(iron) saf/i,/ome\/([\w\.]+).+qihu (360)[es]e/i],[u,l],[/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i],[[l,at],u,[n,me]],[/(Klarna)\/([\w\.]+)/i,/(kakao(?:talk|story))[\/ ]([\w\.]+)/i,/(naver)\(.*?(\d+\.[\w\.]+).*\)/i,/(daum)apps[\/ ]([\w\.]+)/i,/safari (line)\/([\w\.]+)/i,/\b(line)\/([\w\.]+)\/iab/i,/(alipay)client\/([\w\.]+)/i,/(twitter)(?:and| f.+e\/([\w\.]+))/i,/(instagram|snapchat)[\/ ]([-\w\.]+)/i],[l,u,[n,me]],[/\bgsa\/([\w\.]+) .*safari\//i],[u,[l,"GSA"],[n,me]],[/musical_ly(?:.+app_?version\/|_)([\w\.]+)/i],[u,[l,"TikTok"],[n,me]],[/\[(linkedin)app\]/i],[l,[n,me]],[/(chromium)[\/ ]([-\w\.]+)/i],[l,u],[/headlesschrome(?:\/([\w\.]+)| )/i],[u,[l,Rt+" Headless"]],[/ wv\).+(chrome)\/([\w\.]+)/i],[[l,Rt+" WebView"],u],[/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i],[u,[l,"Android"+ve]],[/chrome\/([\w\.]+) mobile/i],[u,[l,ee+"Chrome"]],[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i],[l,u],[/version\/([\w\.\,]+) .*mobile(?:\/\w+ | ?)safari/i],[u,[l,ee+"Safari"]],[/iphone .*mobile(?:\/\w+ | ?)safari/i],[[l,ee+"Safari"]],[/version\/([\w\.\,]+) .*(safari)/i],[u,l],[/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i],[l,[u,"1"]],[/(webkit|khtml)\/([\w\.]+)/i],[l,u],[/(?:mobile|tablet);.*(firefox)\/([\w\.-]+)/i],[[l,ee+ye],u],[/(navigator|netscape\d?)\/([-\w\.]+)/i],[[l,"Netscape"],u],[/(wolvic|librewolf)\/([\w\.]+)/i],[l,u],[/mobile vr; rv:([\w\.]+)\).+firefox/i],[u,[l,ye+" Reality"]],[/ekiohf.+(flow)\/([\w\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\/ ]?([\w\.\+]+)/i,/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,/(firefox)\/([\w\.]+)/i,/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,/(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,/\b(links) \(([\w\.]+)/i],[l,[u,/_/g,"."]],[/(cobalt)\/([\w\.]+)/i],[l,[u,/[^\d\.]+./,le]]],cpu:[[/\b((amd|x|x86[-_]?|wow|win)64)\b/i],[[T,"amd64"]],[/(ia32(?=;))/i,/\b((i[346]|x)86)(pc)?\b/i],[[T,"ia32"]],[/\b(aarch64|arm(v?[89]e?l?|_?64))\b/i],[[T,"arm64"]],[/\b(arm(v[67])?ht?n?[fl]p?)\b/i],[[T,"armhf"]],[/( (ce|mobile); ppc;|\/[\w\.]+arm\b)/i],[[T,"arm"]],[/((ppc|powerpc)(64)?)( mac|;|\))/i],[[T,/ower/,le,N]],[/ sun4\w[;\)]/i],[[T,"sparc"]],[/\b(avr32|ia64(?=;)|68k(?=\))|\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\b|pa-risc)/i],[[T,N]]],device:[[/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i],[o,[d,be],[n,f]],[/\b((?:s[cgp]h|gt|sm)-(?![lr])\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,/samsung[- ]((?!sm-[lr])[-\w]+)/i,/sec-(sgh\w+)/i],[o,[d,be],[n,w]],[/(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i],[o,[d,Z],[n,w]],[/\((ipad);[-\w\),; ]+apple/i,/applecoremedia\/[\w\.]+ \((ipad)/i,/\b(ipad)\d\d?,\d\d?[;\]].+ios/i],[o,[d,Z],[n,f]],[/(macintosh);/i],[o,[d,Z]],[/\b(sh-?[altvz]?\d\d[a-ekm]?)/i],[o,[d,Ut],[n,w]],[/\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\)|;)/i],[o,[d,Ot],[n,f]],[/honor([-\w ]+)[;\)]/i],[o,[d,Ot],[n,w]],[/\b((?:ag[rs][2356]?k?|bah[234]?|bg[2o]|bt[kv]|cmr|cpn|db[ry]2?|jdn2|got|kob2?k?|mon|pce|scm|sht?|[tw]gr|vrd)-[ad]?[lw][0125][09]b?|605hw|bg2-u03|(?:gem|fdr|m2|ple|t1)-[7a]0[1-4][lu]|t1-a2[13][lw]|mediapad[\w\. ]*(?= bui|\)))\b(?!.+d\/s)/i],[o,[d,Pt],[n,f]],[/(?:huawei)([-\w ]+)[;\)]/i,/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i],[o,[d,Pt],[n,w]],[/oid[^\)]+; (2[\dbc]{4}(182|283|rp\w{2})[cgl]|m2105k81a?c)(?: bui|\))/i,/\b((?:red)?mi[-_ ]?pad[\w- ]*)(?: bui|\))/i],[[o,/_/g," "],[d,st],[n,f]],[/\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i,/\b; (\w+) build\/hm\1/i,/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,/oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i,/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite|pro)?)(?: bui|\))/i,/ ([\w ]+) miui\/v?\d/i],[[o,/_/g," "],[d,st],[n,w]],[/; (\w+) bui.+ oppo/i,/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i],[o,[d,tt],[n,w]],[/\b(opd2(\d{3}a?))(?: bui|\))/i],[o,[d,q,{OnePlus:["304","403","203"],"*":tt}],[n,f]],[/(vivo (5r?|6|8l?|go|one|s|x[il]?[2-4]?)[\w\+ ]*)(?: bui|\))/i],[o,[d,"BLU"],[n,w]],[/; vivo (\w+)(?: bui|\))/i,/\b(v[12]\d{3}\w?[at])(?: bui|;)/i],[o,[d,"Vivo"],[n,w]],[/\b(rmx[1-3]\d{3})(?: bui|;|\))/i],[o,[d,"Realme"],[n,w]],[/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,/\bmot(?:orola)?[- ](\w*)/i,/((?:moto(?! 360)[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i],[o,[d,Ze],[n,w]],[/\b(mz60\d|xoom[2 ]{0,2}) build\//i],[o,[d,Ze],[n,f]],[/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i],[o,[d,Ue],[n,f]],[/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,/\blg[-e;\/ ]+(?!.*(?:browser|netcast|android tv|watch))(\w+)/i,/\blg-?([\d\w]+) bui/i],[o,[d,Ue],[n,w]],[/(ideatab[-\w ]+|602lv|d-42a|a101lv|a2109a|a3500-hv|s[56]000|pb-6505[my]|tb-?x?\d{3,4}(?:f[cu]|xu|[av])|yt\d?-[jx]?\d+[lfmx])( bui|;|\)|\/)/i,/lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\w- ]+?)|tb[\w-]{6,7})( bui|;|\)|\/)/i],[o,[d,At],[n,f]],[/(nokia) (t[12][01])/i],[d,o,[n,f]],[/(?:maemo|nokia).*(n900|lumia \d+|rm-\d+)/i,/nokia[-_ ]?(([-\w\. ]*))/i],[[o,/_/g," "],[n,w],[d,"Nokia"]],[/(pixel (c|tablet))\b/i],[o,[d,J],[n,f]],[/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i],[o,[d,J],[n,w]],[/droid.+; (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i],[o,[d,fe],[n,w]],[/sony tablet [ps]/i,/\b(?:sony)?sgp\w+(?: bui|\))/i],[[o,"Xperia Tablet"],[d,fe],[n,f]],[/ (kb2005|in20[12]5|be20[12][59])\b/i,/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i],[o,[d,xt],[n,w]],[/(alexa)webm/i,/(kf[a-z]{2}wi|aeo(?!bc)\w\w)( bui|\))/i,/(kf[a-z]+)( bui|\)).+silk\//i],[o,[d,xe],[n,f]],[/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i],[[o,/(.+)/g,"Fire Phone $1"],[d,xe],[n,w]],[/(playbook);[-\w\),; ]+(rim)/i],[o,d,[n,f]],[/\b((?:bb[a-f]|st[hv])100-\d)/i,/\(bb10; (\w+)/i],[o,[d,It],[n,w]],[/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i],[o,[d,Tt],[n,f]],[/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i],[o,[d,Tt],[n,w]],[/(nexus 9)/i],[o,[d,"HTC"],[n,f]],[/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i],[d,[o,/_/g," "],[n,w]],[/tcl (xess p17aa)/i,/droid [\w\.]+; ((?:8[14]9[16]|9(?:0(?:48|60|8[01])|1(?:3[27]|66)|2(?:6[69]|9[56])|466))[gqswx])(_\w(\w|\w\w))?(\)| bui)/i],[o,[d,"TCL"],[n,f]],[/droid [\w\.]+; (418(?:7d|8v)|5087z|5102l|61(?:02[dh]|25[adfh]|27[ai]|56[dh]|59k|65[ah])|a509dl|t(?:43(?:0w|1[adepqu])|50(?:6d|7[adju])|6(?:09dl|10k|12b|71[efho]|76[hjk])|7(?:66[ahju]|67[hw]|7[045][bh]|71[hk]|73o|76[ho]|79w|81[hks]?|82h|90[bhsy]|99b)|810[hs]))(_\w(\w|\w\w))?(\)| bui)/i],[o,[d,"TCL"],[n,w]],[/(itel) ((\w+))/i],[[d,N],o,[n,q,{tablet:["p10001l","w7001"],"*":"mobile"}]],[/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i],[o,[d,"Acer"],[n,f]],[/droid.+; (m[1-5] note) bui/i,/\bmz-([-\w]{2,})/i],[o,[d,"Meizu"],[n,w]],[/; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i],[o,[d,"Ulefone"],[n,w]],[/; (energy ?\w+)(?: bui|\))/i,/; energizer ([\w ]+)(?: bui|\))/i],[o,[d,"Energizer"],[n,w]],[/; cat (b35);/i,/; (b15q?|s22 flip|s48c|s62 pro)(?: bui|\))/i],[o,[d,"Cat"],[n,w]],[/((?:new )?andromax[\w- ]+)(?: bui|\))/i],[o,[d,"Smartfren"],[n,w]],[/droid.+; (a(?:015|06[35]|142p?))/i],[o,[d,"Nothing"],[n,w]],[/; (x67 5g|tikeasy \w+|ac[1789]\d\w+)( b|\))/i,/archos ?(5|gamepad2?|([\w ]*[t1789]|hello) ?\d+[\w ]*)( b|\))/i],[o,[d,"Archos"],[n,f]],[/archos ([\w ]+)( b|\))/i,/; (ac[3-6]\d\w{2,8})( b|\))/i],[o,[d,"Archos"],[n,w]],[/(imo) (tab \w+)/i,/(infinix) (x1101b?)/i],[d,o,[n,f]],[/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|infinix|tecno|micromax|advan)[-_ ]?([-\w]*)/i,/; (blu|hmd|imo|tcl)[_ ]([\w\+ ]+?)(?: bui|\)|; r)/i,/(hp) ([\w ]+\w)/i,/(microsoft); (lumia[\w ]+)/i,/(lenovo)[-_ ]?([-\w ]+?)(?: bui|\)|\/)/i,/(oppo) ?([\w ]+) bui/i],[d,o,[n,w]],[/(kobo)\s(ereader|touch)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\/([\w\.]+)/i],[d,o,[n,f]],[/(surface duo)/i],[o,[d,Ye],[n,f]],[/droid [\d\.]+; (fp\du?)(?: b|\))/i],[o,[d,"Fairphone"],[n,w]],[/((?:tegranote|shield t(?!.+d tv))[\w- ]*?)(?: b|\))/i],[o,[d,et],[n,f]],[/(sprint) (\w+)/i],[d,o,[n,w]],[/(kin\.[onetw]{3})/i],[[o,/\./g," "],[d,Ye],[n,w]],[/droid.+; ([c6]+|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],[o,[d,it],[n,f]],[/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i],[o,[d,it],[n,w]],[/smart-tv.+(samsung)/i],[d,[n,y]],[/hbbtv.+maple;(\d+)/i],[[o,/^/,"SmartTV"],[d,be],[n,y]],[/tcast.+(lg)e?. ([-\w]+)/i],[d,o,[n,y]],[/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i],[[d,Ue],[n,y]],[/(apple) ?tv/i],[d,[o,Z+" TV"],[n,y]],[/crkey.*devicetype\/chromecast/i],[[o,V+" Third Generation"],[d,J],[n,y]],[/crkey.*devicetype\/([^/]*)/i],[[o,/^/,"Chromecast "],[d,J],[n,y]],[/fuchsia.*crkey/i],[[o,V+" Nest Hub"],[d,J],[n,y]],[/crkey/i],[[o,V],[d,J],[n,y]],[/(portaltv)/i],[o,[d,at],[n,y]],[/droid.+aft(\w+)( bui|\))/i],[o,[d,xe],[n,y]],[/(shield \w+ tv)/i],[o,[d,et],[n,y]],[/\(dtv[\);].+(aquos)/i,/(aquos-tv[\w ]+)\)/i],[o,[d,Ut],[n,y]],[/(bravia[\w ]+)( bui|\))/i],[o,[d,fe],[n,y]],[/(mi(tv|box)-?\w+) bui/i],[o,[d,st],[n,y]],[/Hbbtv.*(technisat) (.*);/i],[d,o,[n,y]],[/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i],[[d,Te],[o,Te],[n,y]],[/droid.+; ([\w- ]+) (?:android tv|smart[- ]?tv)/i],[o,[n,y]],[/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i],[[n,y]],[/(ouya)/i,/(nintendo) (\w+)/i],[d,o,[n,Ce]],[/droid.+; (shield)( bui|\))/i],[o,[d,et],[n,Ce]],[/(playstation \w+)/i],[o,[d,fe],[n,Ce]],[/\b(xbox(?: one)?(?!; xbox))[\); ]/i],[o,[d,Ye],[n,Ce]],[/\b(sm-[lr]\d\d[0156][fnuw]?s?|gear live)\b/i],[o,[d,be],[n,R]],[/((pebble))app/i,/(asus|google|lg|oppo) ((pixel |zen)?watch[\w ]*)( bui|\))/i],[d,o,[n,R]],[/(ow(?:19|20)?we?[1-3]{1,3})/i],[o,[d,tt],[n,R]],[/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i],[o,[d,Z],[n,R]],[/(opwwe\d{3})/i],[o,[d,xt],[n,R]],[/(moto 360)/i],[o,[d,Ze],[n,R]],[/(smartwatch 3)/i],[o,[d,fe],[n,R]],[/(g watch r)/i],[o,[d,Ue],[n,R]],[/droid.+; (wt63?0{2,3})\)/i],[o,[d,it],[n,R]],[/droid.+; (glass) \d/i],[o,[d,J],[n,Je]],[/(pico) (4|neo3(?: link|pro)?)/i],[d,o,[n,Je]],[/(quest( \d| pro)?s?).+vr/i],[o,[d,at],[n,Je]],[/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i],[d,[n,Me]],[/(aeobc)\b/i],[o,[d,xe],[n,Me]],[/(homepod).+mac os/i],[o,[d,Z],[n,Me]],[/windows iot/i],[[n,Me]],[/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+?(mobile|vr|\d) safari/i],[o,[n,q,{mobile:"Mobile",xr:"VR","*":f}]],[/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i],[[n,f]],[/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i],[[n,w]],[/droid .+?; ([\w\. -]+)( bui|\))/i],[o,[d,"Generic"]]],engine:[[/windows.+ edge\/([\w\.]+)/i],[u,[l,Rs+"HTML"]],[/(arkweb)\/([\w\.]+)/i],[l,u],[/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i],[u,[l,"Blink"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna|servo)\/([\w\.]+)/i,/ekioh(flow)\/([\w\.]+)/i,/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,/(icab)[\/ ]([23]\.[\d\.]+)/i,/\b(libweb)/i],[l,u],[/ladybird\//i],[[l,"LibWeb"]],[/rv\:([\w\.]{1,9})\b.+(gecko)/i],[u,l]],os:[[/microsoft (windows) (vista|xp)/i],[l,u],[/(windows (?:phone(?: os)?|mobile|iot))[\/ ]?([\d\.\w ]*)/i],[l,[u,q,_t]],[/windows nt 6\.2; (arm)/i,/windows[\/ ]([ntce\d\. ]+\w)(?!.+xbox)/i,/(?:win(?=3|9|n)|win 9x )([nt\d\.]+)/i],[[u,q,_t],[l,ut]],[/[adehimnop]{4,7}\b(?:.*os ([\w]+) like mac|; opera)/i,/(?:ios;fbsv\/|iphone.+ios[\/ ])([\d\.]+)/i,/cfnetwork\/.+darwin/i],[[u,/_/g,"."],[l,"iOS"]],[/(mac os x) ?([\w\. ]*)/i,/(macintosh|mac_powerpc\b)(?!.+haiku)/i],[[l,"macOS"],[u,/_/g,"."]],[/android ([\d\.]+).*crkey/i],[u,[l,V+" Android"]],[/fuchsia.*crkey\/([\d\.]+)/i],[u,[l,V+" Fuchsia"]],[/crkey\/([\d\.]+).*devicetype\/smartspeaker/i],[u,[l,V+" SmartSpeaker"]],[/linux.*crkey\/([\d\.]+)/i],[u,[l,V+" Linux"]],[/crkey\/([\d\.]+)/i],[u,[l,V]],[/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i],[u,l],[/(ubuntu) ([\w\.]+) like android/i],[[l,/(.+)/,"$1 Touch"],u],[/(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen|webos)\w*[-\/\.; ]?([\d\.]*)/i],[l,u],[/\(bb(10);/i],[u,[l,It]],[/(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\/ ]?([\w\.]*)/i],[u,[l,"Symbian"]],[/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i],[u,[l,ye+" OS"]],[/web0s;.+rt(tv)/i,/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i],[u,[l,"webOS"]],[/watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i],[u,[l,"watchOS"]],[/(cros) [\w]+(?:\)| ([\w\.]+)\b)/i],[[l,"Chrome OS"],u],[/panasonic;(viera)/i,/(netrange)mmh/i,/(nettv)\/(\d+\.[\w\.]+)/i,/(nintendo|playstation) (\w+)/i,/(xbox); +xbox ([^\);]+)/i,/(pico) .+os([\w\.]+)/i,/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,/(mint)[\/\(\) ]?(\w*)/i,/(mageia|vectorlinux)[; ]/i,/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,/(hurd|linux)(?: arm\w*| x86\w*| ?)([\w\.]*)/i,/(gnu) ?([\w\.]*)/i,/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,/(haiku) (\w+)/i],[l,u],[/(sunos) ?([\w\.\d]*)/i],[[l,"Solaris"],u],[/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,/(aix) ((\d)(?=\.|\)| )[\w\.])*/i,/\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,/(unix) ?([\w\.]*)/i],[l,u]]},Re=function(){var i={init:{},isIgnore:{},isIgnoreRgx:{},toString:{}};return D.call(i.init,[[S,[l,u,Se,n]],[F,[T]],[L,[n,o,d]],[x,[l,u]],[O,[l,u]]]),D.call(i.isIgnore,[[S,[u,Se]],[x,[u]],[O,[u]]]),D.call(i.isIgnoreRgx,[[S,/ ?browser$/i],[O,/ ?os$/i]]),D.call(i.toString,[[S,[l,u]],[F,[T]],[L,[d,o]],[x,[l,u]],[O,[l,u]]]),i}(),_s=function(i,t){var e=Re.init[t],s=Re.isIgnore[t]||0,a=Re.isIgnoreRgx[t]||0,r=Re.toString[t]||0;function c(){D.call(this,e)}return c.prototype.getItem=function(){return i},c.prototype.withClientHints=function(){return z?z.getHighEntropyValues(Jt).then(function(g){return i.setCH(new Yt(g,!1)).parseCH().get()}):i.parseCH().get()},c.prototype.withFeatureCheck=function(){return i.detectFeature().get()},t!=te&&(c.prototype.is=function(g){var h=!1;for(var p in this)if(this.hasOwnProperty(p)&&!ht(s,p)&&N(a?he(a,this[p]):this[p])==N(a?he(a,g):g)){if(h=!0,g!=j)break}else if(g==j&&h){h=!h;break}return h},c.prototype.toString=function(){var g=le;for(var h in r)typeof this[r[h]]!==j&&(g+=(g?" ":le)+this[r[h]]);return g||j}),z||(c.prototype.then=function(g){var h=this,p=function(){for(var C in h)h.hasOwnProperty(C)&&(this[C]=h[C])};p.prototype={is:c.prototype.is,toString:c.prototype.toString};var m=new p;return g(m),m}),new c};function Yt(i,t){if(i=i||{},D.call(this,Jt),t)D.call(this,[[pt,nt(i[$])],[wt,nt(i[Ts])],[w,/\?1/.test(i[Os])],[o,Ee(i[xs])],[se,Ee(i[Xt])],[mt,Ee(i[Us])],[T,Ee(i[Is])],[Y,nt(i[As])],[Ve,Ee(i[Ps])]]);else for(var e in i)this.hasOwnProperty(e)&&typeof i[e]!==j&&(this[e]=i[e])}function Dt(i,t,e,s){return this.get=function(a){return a?this.data.hasOwnProperty(a)?this.data[a]:void 0:this.data},this.set=function(a,r){return this.data[a]=r,this},this.setCH=function(a){return this.uaCH=a,this},this.detectFeature=function(){if(I&&I.userAgent==this.ua)switch(this.itemType){case S:I.brave&&typeof I.brave.isBrave==Be&&this.set(l,"Brave");break;case L:!this.get(n)&&z&&z[w]&&this.set(n,w),this.get(o)=="Macintosh"&&I&&typeof I.standalone!==j&&I.maxTouchPoints&&I.maxTouchPoints>2&&this.set(o,"iPad").set(n,f);break;case O:!this.get(l)&&z&&z[se]&&this.set(l,z[se]);break;case te:var a=this.data,r=function(c){return a[c].getItem().detectFeature().get()};this.set(S,r(S)).set(F,r(F)).set(L,r(L)).set(x,r(x)).set(O,r(O))}return this},this.parseUA=function(){return this.itemType!=te&&rt.call(this.data,this.ua,this.rgxMap),this.itemType==S&&this.set(Se,ot(this.get(u))),this},this.parseCH=function(){var a=this.uaCH,r=this.rgxMap;switch(this.itemType){case S:case x:var c=a[wt]||a[pt],g;if(c)for(var h in c){var p=c[h].brand||c[h],m=c[h].version;this.itemType==S&&!/not.a.brand/i.test(p)&&(!g||/chrom/i.test(g)&&p!=Lt)&&(p=q(p,{Chrome:"Google Chrome",Edge:"Microsoft Edge","Chrome WebView":"Android WebView","Chrome Headless":"HeadlessChrome","Huawei Browser":"HuaweiBrowser","MIUI Browser":"Miui Browser","Opera Mobi":"OperaMobile",Yandex:"YaBrowser"}),this.set(l,p).set(u,m).set(Se,ot(m)),g=p),this.itemType==x&&p==Lt&&this.set(u,m)}break;case F:var C=a[T];C&&(C&&a[Ve]=="64"&&(C+="64"),rt.call(this.data,C+";",r));break;case L:if(a[w]&&this.set(n,w),a[o]&&(this.set(o,a[o]),!this.get(n)||!this.get(d))){var P={};rt.call(P,"droid 9; "+a[o]+")",r),!this.get(n)&&P.type&&this.set(n,P.type),!this.get(d)&&P.vendor&&this.set(d,P.vendor)}if(a[Y]){var G;if(typeof a[Y]!="string")for(var pe=0;!G&&pe<a[Y].length;)G=q(a[Y][pe++],Ft);else G=q(a[Y],Ft);this.set(n,G)}break;case O:var _=a[se];if(_){var K=a[mt];_==ut&&(K=parseInt(ot(K),10)>=13?"11":"10"),this.set(l,_).set(u,K)}this.get(l)==ut&&a[o]=="Xbox"&&this.set(l,"Xbox").set(u,void 0);break;case te:var Q=this.data,H=function(Oe){return Q[Oe].getItem().setCH(a).parseCH().get()};this.set(S,H(S)).set(F,H(F)).set(L,H(L)).set(x,H(x)).set(O,H(O))}return this},D.call(this,[["itemType",i],["ua",t],["uaCH",s],["rgxMap",e],["data",_s(this,i)]]),this}function B(i,t,e){if(typeof i===ue?(_e(i,!0)?(typeof t===ue&&(e=t),t=i):(e=i,t=void 0),i=void 0):typeof i===lt&&!_e(t,!0)&&(e=t,t=void 0),e&&typeof e.append===Be){var s={};e.forEach(function(h,p){s[p]=h}),e=s}if(!(this instanceof B))return new B(i,t,e).getResult();var a=typeof i===lt?i:e&&e[Mt]?e[Mt]:I&&I.userAgent?I.userAgent:le,r=new Yt(e,!0),c=t?Bs(Nt,t):Nt,g=function(h){return h==te?function(){return new Dt(h,a,c,r).set("ua",a).set(S,this.getBrowser()).set(F,this.getCPU()).set(L,this.getDevice()).set(x,this.getEngine()).set(O,this.getOS()).get()}:function(){return new Dt(h,a,c[h],r).parseUA().get()}};return D.call(this,[["getBrowser",g(S)],["getCPU",g(F)],["getDevice",g(L)],["getEngine",g(x)],["getOS",g(O)],["getResult",g(te)],["getUA",function(){return a}],["setUA",function(h){return ge(h)&&(a=h.length>dt?Te(h,dt):h),this}]]).setUA(a),this}B.VERSION=Ss;B.BROWSER=ze([l,u,Se,n]);B.CPU=ze([T]);B.DEVICE=ze([o,d,n,Ce,w,y,f,R,Me]);B.ENGINE=B.OS=ze([l,u]);class Zt{constructor(t,e){b(this,"config");b(this,"sdkConfig");this.config=t,this.sdkConfig=e}on(t,e,s){const a=function(c){c.data.message!==`kalamba:wrapper-rgs:${t}`&&c.data.message!==`kalamba:wrapper:${t}`||e(c.data.payload)};window.addEventListener("message",a,s)}send(t,...[e]){window.postMessage({message:`kalamba:rgs:${t}`,payload:e})}}class Fs{constructor(t){b(this,"socket",null);b(this,"webSocketUrl");b(this,"eventListeners",{close:[],error:[],message:[]});b(this,"connect",async()=>{const t=new WebSocket(this.webSocketUrl);return t.addEventListener("message",this.handleMessage),new Promise(e=>{t.addEventListener("open",s=>{this.handleOpen(s),e(this.socket)},{once:!0})})});b(this,"send",t=>{if(this.socket==null)throw new Error("Cannot send message, the WebSocket connection is not open");this.socket.send(t)});b(this,"close",()=>{if(this.socket==null)throw new Error("Cannot close the WebSocket connection that is not open");this.socket.close()});b(this,"handleClose",t=>{this.eventListeners.close.forEach(e=>{e(t)}),this.socket.removeEventListener("message",this.handleMessage),this.socket.removeEventListener("close",this.handleClose),this.socket.removeEventListener("error",this.handleError),this.socket=null});b(this,"handleError",t=>{this.eventListeners.error.forEach(e=>{e(t)})});b(this,"handleMessage",t=>{this.eventListeners.message.forEach(e=>{e(t)})});b(this,"handleOpen",t=>{const e=t.target;e.addEventListener("close",this.handleClose),e.addEventListener("error",this.handleError),this.socket=e});this.webSocketUrl=t}addEventListener(t,e){this.eventListeners[t].push(e)}removeEventListener(t,e){const s=this.eventListeners[t].indexOf(e);s!==-1&&this.eventListeners[t].splice(s,1)}}function Le(i){return JSON.parse(i==null?void 0:i.data)}function Ns(i){var t;return((t=i==null?void 0:i.header)==null?void 0:t.name)==="Ping"}function Gt(i){var t;return((t=i==null?void 0:i.header)==null?void 0:t.name)==="RealityCheck"}function Fe(i){return i.header.name==="GameEvent"}function Ds(i){return Fe(i)&&i.body.event==="OPEN_GAME"}function Ht(i){return i.header.code!==1}function Gs(i){return Fe(i)&&i.body.event.includes("_RESULT")}var ie,Ie;class Hs extends Fs{constructor(e,s){const a=new URL(e.apiUrl);a.searchParams.set("cageCode",e.cageCode),a.searchParams.set("gameCode",e.gameCode),a.searchParams.set("operatorCode",e.operatorCode),a.searchParams.set("playMode",e.playMode),a.searchParams.set("token",e.token),a.searchParams.set("username",e.username);super(a.toString());b(this,"cId",0);b(this,"mId",0);b(this,"seqId",0);b(this,"gameCode");M(this,ie);M(this,Ie);b(this,"onMessage",e=>{const s=Le(e);(Fe(s)||Ns(s)||Gt(s))&&this.sendAcknowledgement(s),Gt(s)&&this.handleRealityCheck(s)});this.eventListeners.realityCheck=[],this.gameCode=e.gameCode,v(this,ie,s.requestTimeoutMs),v(this,Ie,s.gameVersion??"unknown"),this.addEventListener("message",this.onMessage)}handleRealityCheck(e){this.eventListeners.realityCheck.forEach(s=>{s(e.body)})}addEventListener(e,s){super.addEventListener(e,s)}removeEventListener(e,s){super.removeEventListener(e,s)}buildHeader(e,s=null){return{cId:s??++this.cId,code:s!==null?1:void 0,mId:++this.mId,name:e}}buildPayload(e,s){return JSON.stringify({body:s,header:e})}getBodyExtras(e){return{action:e,seqId:++this.seqId}}request(e,s){const a=this.buildPayload(e,s);return new Promise((r,c)=>{setTimeout(()=>c({type:"timeout"}),k(this,ie));const g=h=>{const p=Le(h);try{e.cId===p.header.cId&&(this.removeEventListener("message",g),p.header.code===1?r(p):c({message:p,type:"error"}))}catch{c({message:p,type:"error"})}};this.addEventListener("message",g),this.send(a)})}freeRounds(e){const s=this.buildHeader("ActivateFreeRound");return this.request(s,e).then(a=>a.body).catch(a=>{var r;throw{data:(r=a==null?void 0:a.message)==null?void 0:r.body,type:a.type}})}async authenticate(e=!1){const s=this.buildHeader("Authenticate"),a={clientType:3,version:k(this,Ie),reconnect:e};return this.request(s,a).then(r=>r.body).catch(r=>{var c;throw{data:(c=r==null?void 0:r.message)==null?void 0:c.body,type:r.type}})}async getBalance(){const e=this.buildHeader("GetBalance"),s={};return this.request(e,s).then(a=>a.body).catch(a=>{var r;throw{data:(r=a==null?void 0:a.message)==null?void 0:r.body,type:a.type}})}async openGame(){const e=this.buildHeader("OpenGame"),s={gameCode:this.gameCode};return new Promise((a,r)=>{const c=g=>{const h=Le(g);Ds(h)?(this.removeEventListener("message",c),a(h.body)):Ht(h)&&r({data:h.body,type:"error"})};this.addEventListener("message",c),this.request(e,s).catch(g=>{var h;return r({data:(h=g==null?void 0:g.message)==null?void 0:h.body,type:g.type})})})}sendAcknowledgement(e){const{name:s,cId:a}=e.header,r=this.buildHeader(s,a),c=this.buildPayload(r,{});this.send(c)}sendAction(e,s){const a=this.buildHeader("GameAction"),r={...this.getBodyExtras(e),data:s};return new Promise((c,g)=>{const h=p=>{const m=Le(p);Fe(m)&&r.seqId===m.body.correlationSeqId&&(this.removeEventListener("message",h),Gs(m)?c(m.body):Ht(m)&&g({data:m.body,type:"error"}))};this.addEventListener("message",h),this.request(a,r).catch(p=>{var m;return g({data:(m=p==null?void 0:p.message)==null?void 0:m.body,type:p.type})})})}setRequestTimeoutMs(e){v(this,ie,e)}}ie=new WeakMap,Ie=new WeakMap;const Vs={CA_BC:"CA",CA_ON:"CA",GER:"DE",US_CT:"US",US_MI:"US",US_NJ:"US",USA:"US"};function Vt(i){return!i||i==="NOT_APPLICABLE"?null:Vs[i]??i}function es(i){const t=i.contract;return t?{contract:{balance:{coins:t.balance,version:t.balanceVersion},coinValueInCents:t.coinValueInCents,country:t.countryCode,currency:t.currencyCode,jurisdiction:Vt(t.jurisdictionCode),uiMessages:t.uiMessages,username:t.username}}:{contract:{balance:{coins:i.balance,version:i.balanceVersion},coinValueInCents:i.coinValueInCents,country:i.countryCode,currency:i.currencyCode,jurisdiction:Vt(i.jurisdictionCode),uiMessages:i.uiMessages,username:i.username}}}function ts(i){var t,e;return{code:((t=i.data)==null?void 0:t.code)??He.RgsErrorCode.UNKNOWN,details:(e=i.data)==null?void 0:e.details}}function ss(i,t,e){const s=t.contract;if(!s){const a=t.data;return{contract:{bet:{available:a.additionalConfigData.availableMultipliersPerBaseBet,default:{base:a.additionalConfigData.defaultBet.baseBet,multiplier:a.additionalConfigData.defaultBet.betMultiplier},max:a.additionalConfigData.maxAllowedOverallBetInCoins??null,last:a.gameState.betFromCurrentRound?{base:a.gameState.betFromCurrentRound.baseBet,multiplier:a.gameState.betFromCurrentRound.betMultiplier}:null,lastPaid:a.gameState.lastPlacedMainGameBet?{base:a.gameState.lastPlacedMainGameBet.baseBet,multiplier:a.gameState.lastPlacedMainGameBet.betMultiplier}:null},balance:{coins:t.balance,version:t.balanceVersion},freeRounds:(a.FREE_ROUNDS??[]).map(r=>({conf:{base:r.conf.baseBet,multiplier:r.conf.betMultiplier,numAwarded:r.conf.numAwarded},data:{numPlayed:r.data.numPlayed,win:r.data.winAmount,numLeft:r.data.numLeft},id:r.id,rejectable:r.rejectable,skippable:r.skippable,status:r.status,type:r.type})),gameModel:a.additionalConfigData.gameModelFile,metaData:a.gameConfigData.metaData,roundId:a.gameState.cycleId,serverTime:t.balanceVersion,sessionId:a.gameState.sessionId,stateType:{thisRound:a.gameState.stateTypeThisRound,nextRound:a.gameState.stateTypeNextRound},uiMessages:i.uiMessages,win:{max:a.maxWin??null,round:a.gameState.totalWinFromCurrentRound,total:a.gameState.totalWinFromCurrentGameCycle}},data:a}}return{contract:{bet:{available:s.availableMultipliersPerBaseBet,default:{base:s.defaultBet.baseBet,multiplier:s.defaultBet.betMultiplier},max:s.maxBetInCoins??null,last:s.lastBet?{base:s.lastBet.baseBet,multiplier:s.lastBet.betMultiplier}:null,lastPaid:s.lastMainGameBet?{base:s.lastMainGameBet.baseBet,multiplier:s.lastMainGameBet.betMultiplier}:null},balance:{coins:s.balanceInCoins,version:s.balanceVersion},freeRounds:(s.freeRounds??[]).map(a=>({conf:{base:a.conf.baseBet,multiplier:a.conf.betMultiplier,numAwarded:a.conf.numAwarded},data:{numPlayed:a.data.numPlayed,win:a.data.winAmount,numLeft:a.data.numLeft},id:a.id,rejectable:a.rejectable,skippable:a.skippable,status:a.status,type:a.type})),gameModel:s.gameModelFile,metaData:s.metaData,roundId:s.roundId,serverTime:s.serverTime,sessionId:s.sessionId,stateType:{thisRound:s.stateTypeThisRound,nextRound:s.stateTypeNextRound},uiMessages:i.contract.uiMessages.concat(s.uiMessages),win:{max:s.maxWinInCoins??null,round:s.roundWin,total:s.totalWin}},data:e?e(t.opaqueGameServerToUi):t.opaqueGameServerToUi}}function is(i){var t,e;return{code:((t=i.data)==null?void 0:t.code)??He.RgsErrorCode.UNKNOWN,details:(e=i.data)==null?void 0:e.details}}function as(i,t){const e=i.contract;if(!e){const s=i.data;return{contract:{bet:{last:s.gameState.betFromCurrentRound?{base:s.gameState.betFromCurrentRound.baseBet,multiplier:s.gameState.betFromCurrentRound.betMultiplier}:null,lastPaid:{base:(s.gameState.lastPlacedMainGameBet??s.gameState.betFromCurrentRound).baseBet,multiplier:(s.gameState.lastPlacedMainGameBet??s.gameState.betFromCurrentRound).betMultiplier}},balance:{coins:i.balance,version:i.balanceVersion},freeRounds:(s.FREE_ROUNDS??[]).map(a=>({conf:{base:a.conf.baseBet,multiplier:a.conf.betMultiplier,numAwarded:a.conf.numAwarded},data:{numPlayed:a.data.numPlayed,win:a.data.winAmount,numLeft:a.data.numLeft},id:a.id,rejectable:a.rejectable,skippable:a.skippable,status:a.status,type:a.type})),serverTime:i.balanceVersion,roundId:s.gameState.cycleId,stateType:{thisRound:s.gameState.stateTypeThisRound,nextRound:s.gameState.stateTypeNextRound},uiMessages:s.uiMessages,win:{round:s.gameState.totalWinFromCurrentRound,total:s.gameState.totalWinFromCurrentGameCycle}},data:s}}return{contract:{bet:{last:e.lastBet?{base:e.lastBet.baseBet,multiplier:e.lastBet.betMultiplier}:null,lastPaid:{base:e.lastMainGameBet.baseBet,multiplier:e.lastMainGameBet.betMultiplier}},balance:{coins:e.balanceInCoins,version:e.balanceVersion},freeRounds:(e.freeRounds??[]).map(s=>({conf:{base:s.conf.baseBet,multiplier:s.conf.betMultiplier,numAwarded:s.conf.numAwarded},data:{numPlayed:s.data.numPlayed,win:s.data.winAmount,numLeft:s.data.numLeft},id:s.id,rejectable:s.rejectable,skippable:s.skippable,status:s.status,type:s.type})),serverTime:e.serverTime,roundId:e.roundId,stateType:{thisRound:e.stateTypeThisRound,nextRound:e.stateTypeNextRound},uiMessages:e.uiMessages,win:{round:e.roundWin,total:e.totalWin}},data:t?t(i.opaqueGameServerToUi):i.opaqueGameServerToUi}}function ns(i){var t,e;return{code:((t=i.data)==null?void 0:t.code)??He.RgsErrorCode.UNKNOWN,details:(e=i.data)==null?void 0:e.details}}const zs={parseAuthenticateResponse:es,parseAuthenticateError:ts,parseOpenGameResponse:ss,parseOpenGameError:is,parsePlayResponse:as,parsePlayError:ns},qs={aze:"az",bul:"bg",chi:"zh",zho:"zh",hrv:"hr",cze:"cs",dan:"da",dut:"nl",eng:"en",est:"et",fin:"fi",fra:"fr",ger:"de",gre:"el",hun:"hu",ind:"id",ita:"it",jpn:"ja",kor:"ko",nor:"no",pol:"pl",por:"pt",rum:"ro",rus:"ru",srp:"sr",slo:"sk",spa:"es",swe:"sv",tha:"th",tur:"tr",ukr:"uk",vie:"vi"},{device:Ws}=B(navigator.userAgent),js=A("KalambaBullseyePlugin","color:#000000;font-weight:bold;");class $s extends Zt{constructor(...e){super(...e);b(this,"socket");b(this,"error");this.on("openGame",async()=>{try{this.error=void 0;const s=await this.openGame();this.send("openGameResponse",s)}catch(s){this.error=s,this.send("openGameError",s)}}),this.on("play",async s=>{try{this.error=void 0;const a=await this.play(s);this.send("playResponse",a)}catch(a){this.error=a,this.send("playError",a)}}),this.on("freeRounds",async s=>{try{this.error=void 0,await this.socket.freeRounds(s),this.send("freeRoundsResponse",s)}catch(a){this.error=a,this.send("freeRoundsError",a)}}),this.on("getBalance",async()=>{try{this.error=void 0;const s=await this.socket.getBalance();this.send("balance",{balance:s.balance})}catch{}}),this.on("configured",s=>{this.socket.setRequestTimeoutMs(s.ui.requestTimeoutMs)}),this.registerFromSdkEvents()}initialize(e){this.socket=new Hs(e,{gameVersion:this.config.gameVersion,requestTimeoutMs:this.sdkConfig.ui.requestTimeoutMs}),["fireboltroulette"].includes(e.gameCode)||(this.socket.addEventListener("close",s=>{s.code===1008?this.error||this.send("error",{type:"CLOSE",messageCode:"TOO_MANY_OPEN_GAMES",messageKey:"RgsError.TOO_MANY_OPEN_GAMES"}):s.code===1011?this.error||this.send("error",{type:"CLOSE",messageCode:"UNKNOWN",messageKey:"RgsError.UNKNOWN"}):this.reconnect()}),["mobile","tablet"].includes(Ws.type??"")&&document.addEventListener("visibilitychange",async()=>{document.hidden||(this.socket.socket?this.socket.socket&&[WebSocket.CONNECTING,WebSocket.OPEN].includes(this.socket.socket.readyState)&&this.socket.close():this.reconnect())})),this.socket.addEventListener("error",s=>js("error",s)),this.socket.addEventListener("realityCheck",s=>{this.send("realityCheck",s)})}async reconnect(){try{await this.socket.connect(),await this.socket.authenticate(!0),await this.socket.openGame()}catch{this.send("error",{type:"CLOSE",messageCode:"CONNECTION_ERROR",messageKey:"RgsError.CONNECTION_ERROR"})}}async openGame(){var H,Oe;const e=new URLSearchParams(window.location.search),s=e.get("apiUrl"),a=e.get("cageCode"),r=e.get("gameCode"),c=e.get("operatorCode"),g=e.get("playMode"),h=e.get("token"),p=e.get("username"),m=e.get("gameHistoryUrl"),C=e.get("homeUrl")??void 0,P=e.get("cashierUrl")??void 0;this.initialize({apiUrl:s,cageCode:a,gameCode:r,operatorCode:c,playMode:g,token:h,username:p});try{await this.socket.connect()}catch{throw{type:"error",data:{code:He.RgsErrorCode.CONNECTION_ERROR}}}let G;try{G=await this.socket.authenticate()}catch(X){throw{type:X.type,data:X.type==="error"?ts(X.data):void 0}}let pe;try{pe=await this.socket.openGame()}catch(X){throw{type:X.type,data:X.type==="error"?is(X.data):void 0}}const _=es(G),K=ss(G,pe,this.config.dataDecoder&&qe.decoders[this.config.dataDecoder]);this.sdkConfig.api={...this.sdkConfig.api,brand:a,game:r,integration:c,jurisdiction:_.contract.jurisdiction,playMode:g,user:_.contract.username,integrationData:{token:h},country:_.contract.country,currency:_.contract.currency,coinValueInCents:_.contract.coinValueInCents,gameHistoryUrl:m,homeUrl:C,cashierUrl:P,backendSessionId:K.contract.sessionId,lastRoundId:K.contract.roundId};const Q=(Oe=(H=e.get("languageCode"))==null?void 0:H.split("_"))==null?void 0:Oe[0];return Q&&(this.sdkConfig.ui.language=Q.length===3?qs[Q]??Q:Q),K}async play(e){for(;!this.socket.socket;)await new Promise(P=>setTimeout(()=>P(),500));const{contract:{bet:s,forcedOutcomes:a,...r},extra:c,payloadToInject:g,actionType:h}=e,p=this.config.dataEncoder&&qe.encoders[this.config.dataEncoder],m={bet:s?{baseBet:s.base,betMultiplier:s.multiplier}:void 0,forcedOutcomes:a,...r,...g,opaqueUiToGameServer:p?p(c):c};let C;try{C=await this.socket.sendAction(h,m)}catch(P){throw{type:P.type,data:P.type==="error"?ns(P.data):void 0}}return as(C,this.config.dataDecoder&&qe.decoders[this.config.dataDecoder])}registerFromSdkEvents(){this.on("history",()=>{const{api:{game:e,integration:s,integrationData:a,jurisdiction:r,user:c,gameHistoryUrl:g},ui:{language:h}}=this.sdkConfig,p=c.replace(/^user_/,"").replace(new RegExp(`_${s}$`),""),m=new URL(window.location.href);m.hostname=m.hostname.replace(/^v\./,"").replace(/^play\./,"history."),m.pathname=m.pathname.replace(/(\/[0-9]+\.[0-9]+\.[0-9]+)?\/wrapper\.html/,"/list/index.html"),m.search="",m.searchParams.set("apiUrl",new URL(g).origin),m.searchParams.set("gameCode",e),r&&m.searchParams.set("jurisdiction",r),m.searchParams.set("operatorCode",s),m.searchParams.set("token",a.token),m.searchParams.set("username",p),m.searchParams.set("languageCode",h),this.config.gameHistoryUrl&&m.searchParams.set("gameHistoryUrl",this.config.gameHistoryUrl),window.open(m.toString(),"_blank")})}}class os{constructor(t,e,s){b(this,"trackers");b(this,"config");b(this,"sdkConfig");this.trackers=t,this.config=e,this.sdkConfig=s}on(t,e,s){const a=function(c){c.data.message!==`kalamba:wrapper-telemetry:${t}`&&c.data.message!==`kalamba:wrapper:${t}`||e(c.data.payload)};window.addEventListener("message",a,s)}track(t,e){this.trackers.forEach(s=>s.track(t,e))}}function zt(i){return i.reduce((t,e)=>t+e,0)}function Ks(i){const t=i.length,e=zt(i)/t,s=i.map(r=>Math.pow(r-e,2)),a=zt(s)/t;return Math.sqrt(a)}class qt{constructor(){b(this,"rafId",-1);b(this,"startTime",0);b(this,"stopTime",0);b(this,"frames",[]);b(this,"calculateFPS",()=>{const t=Math.floor((this.stopTime-this.startTime)/1e3);return this.frames.map(e=>Math.floor((e-this.startTime)/1e3)).reduce((e,s,a,r)=>(r[a]!==r[a-1]?e.push(1):e[e.length-1]++,e),[]).slice(0,t)});b(this,"getReport",()=>{const t=this.calculateFPS(),e=Math.floor(this.frames.length/((this.stopTime-this.startTime)/1e3)),s=t.length>0?Math.max(...t):e,a=t.length>0?Math.min(...t):e,r=t.length>0?Ks(t):0;return{fpsAvg:e,fpsMax:s,fpsMin:a,fpsStdDev:r}});b(this,"start",()=>{this.startTime=Date.now(),this.frames=[],this.trackFrames()});b(this,"stop",()=>{cancelAnimationFrame(this.rafId),this.stopTime=Date.now()});b(this,"trackFrames",()=>{this.frames.push(Date.now()),this.rafId=requestAnimationFrame(this.trackFrames)})}}const Qs="landscape",Xs="portrait";function Js(){try{const i=document.createElement("canvas");return!!window.WebGLRenderingContext&&(i.getContext("webgl")||i.getContext("experimental-webgl"))instanceof WebGLRenderingContext}catch{return!1}}async function Ys(){if(!window.createImageBitmap)return!1;const e=await(await fetch("data:image/webp;base64,UklGRiQAAABXRUJQVlA4IBgAAAAwAQCdASoCAAEAAQAcJaQAA3AA/v3AgAA=")).blob();try{return await createImageBitmap(e),!0}catch{return!1}}function ct(){return window.innerWidth>=window.innerHeight?Qs:Xs}var Ne,ae,ne,oe,Pe,De,Ae,Ge;class Zs extends os{constructor(...e){super(...e);b(this,"FPS_SAMPLE_INTERVAL",1e4);M(this,Ne,0);M(this,ae);M(this,ne);M(this,oe);M(this,Pe,!1);M(this,De,!1);M(this,Ae,"");M(this,Ge,[]);v(this,ne,{}),v(this,oe,this.deviceInfo()),v(this,ae,this.config.gameVersion),this.on("state",({balance:s})=>{v(this,Ne,s)}),this.on("autoplay",({action:s})=>{["start","resume"].includes(s)?v(this,Pe,!0):v(this,Pe,!1)}),this.on("settings",({fastPlay:s})=>{s!==void 0&&v(this,De,s)}),this.registerEvents()}async registerEvents(){k(this,oe).then(e=>{this.track("Device Information",e)}),this.on("loadStart",()=>{this.track("Game Loading",{progress:0,step:"initial"})}),this.on("loadProgress",e=>{this.track("Game Loading",{progress:e.progress})}),this.on("loadEnd",()=>{this.track("Game Loading",{progress:100,step:"complete"})}),this.on("error",e=>{this.track("System Message",{systemMessageText:e.messageCode,systemMessageType:e.type})}),this.on("openGameResponse",async e=>{v(this,Ae,e.contract.stateType.nextRound),v(this,ne,{balanceInCoins:e.contract.balance.coins,clientVersion:k(this,ae),coinValueInCents:this.sdkConfig.api.coinValueInCents,coinValueInCentsFloat:this.sdkConfig.api.coinValueInCents,currency:this.sdkConfig.api.currency,defaultBaseBet:e.contract.bet.default.base,defaultBetMultiplier:e.contract.bet.default.multiplier,environment:"release",gameCode:this.sdkConfig.api.game,gameCodeServer:this.sdkConfig.api.game,gameModelFile:e.contract.gameModel,jurisdiction:this.sdkConfig.api.jurisdiction,languageCode:this.sdkConfig.ui.language,operatorName:"kalamba",partnerId:this.sdkConfig.api.brand,partnerParentId:this.sdkConfig.api.integration,platform:"WEB",playMode:this.sdkConfig.api.playMode,referrer:window.location.hostname,rootTrackingSessionID:this.sdkConfig.api.sessionId,backendSessionID:this.sdkConfig.api.backendSessionId,serverVersion:e.contract.metaData.version}),this.track("Game Open",k(this,ne))}),this.on("playCycleEnd",async e=>{const s=await k(this,oe),{base:a,multiplier:r}=e.contract.bet.lastPaid??{},c=e.contract.balance.coins,g=e.contract.bet.lastPaid.base*e.contract.bet.lastPaid.multiplier,h=e.contract.win.total,p=h-g,m="spin",C=e.contract.roundId;this.track("Betting Activity",{balance:c-p,balanceAfter:c,baseBet:a,betMultiplier:r,betType:m,gameVersion:k(this,ae),coinValueInCents:this.sdkConfig.api.coinValueInCents,coinValueInCentsFloat:this.sdkConfig.api.coinValueInCents,currency:this.sdkConfig.api.currency,environment:"release",gameCode:this.sdkConfig.api.game,gameCodeServer:this.sdkConfig.api.game,isMobile:s.isMobile,netResult:p,operatorName:"kalamba",orientation:ct(),partnerId:this.sdkConfig.api.brand,partnerParentId:this.sdkConfig.api.integration,platform:"WEB",playMode:this.sdkConfig.api.playMode,roundId:C,roundTypes:["BaseGame"],totalBet:g,totalWin:h}),v(this,Ge,[])}),this.on("telemetry.click",e=>{this.track("UI Interaction",{action:"click",...this.getExtraUiInteractionData(),...e})}),this.on("telemetry.orientationChange",()=>{this.track("UI Interaction",{action:"orientationChange",...this.getExtraUiInteractionData()})}),this.reportFpsSample(),this.reportFpsRound()}reportFpsSample(){const e=new qt,s=()=>{e.stop();const r=e.getReport();this.track("FPS Performance",{...r,fpsType:"sample"}),a()},a=async()=>{e.start(),setTimeout(s,this.FPS_SAMPLE_INTERVAL)};a()}reportFpsRound(){const e=new qt;this.on("playCycleStart",()=>{e.start()}),this.on("playCycleEnd",()=>{e.stop();const s=e.getReport();this.track("FPS Performance",{...s,fpsType:"playCycleStart->playCycleEnd"})})}getExtraUiInteractionData(){return{orientation:ct(),stateType:k(this,Ae)}}async deviceInfo(){var g;const{browser:e,device:s,os:a}=B(navigator.userAgent),r=Js(),c=await Ys();return{browserName:e.name,browserVersion:e.version,connection:(g=navigator.connection)==null?void 0:g.effectiveType,deviceName:s.model,deviceType:s.type,isMobile:["mobile","tablet"].includes(s.type??""),isWebGLSupported:r,isWebPSupported:c,manufacturer:s.vendor,operatingSystem:a.name,operatingSystemVersion:a.version,orientation:ct(),pixelRatio:window.devicePixelRatio,screenHeight:window.screen.height,screenSize:`${window.screen.width}x${window.screen.height}`,screenWidth:window.screen.width,timezoneOffsetMinutes:new Date().getTimezoneOffset(),windowHeight:window.innerHeight,windowSize:`${window.innerWidth}x${window.innerHeight}`,windowWidth:window.innerWidth}}}Ne=new WeakMap,ae=new WeakMap,ne=new WeakMap,oe=new WeakMap,Pe=new WeakMap,De=new WeakMap,Ae=new WeakMap,Ge=new WeakMap;var ei=gt.requireNoop();const Wt=gt.getDefaultExportFromCjs(ei);class bt{constructor(t,e){b(this,"config");b(this,"sdkConfig");this.config=t,this.sdkConfig=e}}const jt=25,$t=1e4;var re,ce,de,W;class ti extends bt{constructor(...e){super(...e);M(this,re,"https://europe-west3-stargazer-328808.cloudfunctions.net/collect-events");M(this,ce);M(this,de);M(this,W,[]);b(this,"processQueueForced");v(this,ce,new Date().getTime()),v(this,W,[]),this.processQueueForced=this.processQueue.bind(this,!0),this.schedule(),fetch(k(this,re),{method:"OPTIONS"}).catch(Wt),this.subscribe()}subscribe(){window.addEventListener("beforeunload",this.processQueueForced,!1),window.addEventListener("pagehide",this.processQueueForced,!1),window.addEventListener("visibilitychange",this.processQueueForced,!1)}schedule(){k(this,de)&&clearTimeout(k(this,de)),v(this,de,window.setTimeout(()=>this.processQueue(),$t))}send(e){v(this,ce,new Date().getTime());try{navigator.sendBeacon(k(this,re),JSON.stringify(e))}catch{fetch(k(this,re),{body:JSON.stringify(e),method:"POST",headers:{"Content-Type":"application/json"},keepalive:!0}).catch(Wt)}this.schedule()}addToQueue(e){k(this,W).push(e),this.processQueue()}processQueue(e=!1){if(!(this.sdkConfig==null||!this.sdkConfig.ui.feature.allowTelemetry)&&!(!e&&k(this,W).length<jt&&new Date().getTime()-k(this,ce)<$t))for(;k(this,W).length;){const s=k(this,W).splice(0,jt).map(a=>({...a,sessionID:this.sdkConfig.api.sessionId,userID:this.sdkConfig.api.user}));this.send(s)}}track(e,s){this.addToQueue({eventName:e,eventParams:s,eventTimestamp:new Date().getTime(),eventUUID:gt.v4()})}}re=new WeakMap,ce=new WeakMap,de=new WeakMap,W=new WeakMap;const si=A("LoggingTracker","color:#000000;font-weight:bold;");class ii extends bt{track(t,e){si(`@${this.sdkConfig.api.user}`,`[${t}]`,e)}}exports.BasicPlugin=ls;exports.CasinoPlugin=U;exports.DebuggingPlugin=hs;exports.EveryMatrixPlugin=Ms;exports.GigPlugin=gs;exports.KalambaBullseyeParsers=zs;exports.KalambaBullseyePlugin=$s;exports.KalambaStargazerPlugin=Zs;exports.KalambaStargazerTracker=ti;exports.LoggingTracker=ii;exports.OryxPlugin=ws;exports.PariplayPlugin=ys;exports.QuantaPlugin=Es;exports.RelaxFEIMPlugin=ks;exports.RgsPlugin=Zt;exports.SoftSwissPlugin=Cs;exports.TelemetryPlugin=os;exports.Tracker=bt;exports.TukoPlugin=vs;
5
+ "use strict";var rs=Object.defineProperty;var ft=i=>{throw TypeError(i)};var cs=(i,t,e)=>t in i?rs(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var b=(i,t,e)=>cs(i,typeof t!="symbol"?t+"":t,e),yt=(i,t,e)=>t.has(i)||ft("Cannot "+e);var k=(i,t,e)=>(yt(i,t,"read from private field"),e?e.call(i):t.get(i)),M=(i,t,e)=>t.has(i)?ft("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e),E=(i,t,e,s)=>(yt(i,t,"write to private field"),s?s.call(i,e):t.set(i,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const te=require("./errors-BXO3dlhS.cjs"),qe=require("./encoders-DVHzIpWT.cjs"),gt=require("./v4-CoqWKwnX.cjs");function A(i,t){return(e,...s)=>{console.log(`[%c${i}\x1B[m] %s`,t,e,...s)}}function Kt(i,t){return Math.round(i*100/t)}class R{constructor(t,e){b(this,"config");b(this,"sdkConfig");this.config=t,this.sdkConfig=e}on(t,e,s){const a=function(c){c.data.message!==`kalamba:wrapper-casino:${t}`&&c.data.message!==`kalamba:wrapper:${t}`||e(c.data.payload)};window.addEventListener("message",a,s)}send(t,...[e]){window.postMessage({message:`kalamba:casino:${t}`,payload:e})}}const ds=A("BasicPlugin","color:#000000;font-weight:bold;");class ls extends R{constructor(...t){super(...t),this.registerToSdkEvents(),this.registerFromSdkEvents(),ds("configured")}registerToSdkEvents(){window.addEventListener("message",t=>{try{const{type:e,payload:s}=t.data;switch(e){case"doAudioSettings":this.send("settings",{music:s==null?void 0:s.musicEnabled,sounds:s==null?void 0:s.soundEnabled});return;case"doBalanceUpdate":const{currency:a,coinValueInCents:r}=this.sdkConfig.api;s.currency===a&&typeof s.balanceInCurrency=="number"?this.send("balance",{balance:Kt(s.balanceInCurrency,r)}):(s.balanceInCoins,this.send("balance",{balance:s.balanceInCoins}));return;case"doGamePause":this.send("freeze");return;case"doGameResume":this.send("unfreeze");return;case"doGameSuspend":this.send("suspend");return;default:return}}catch{}})}registerFromSdkEvents(){this.on("close",()=>{if(this.sdkConfig.api.homeUrl)try{window.top.location=this.sdkConfig.api.homeUrl}catch{window.location=this.sdkConfig.api.homeUrl}else try{window.top.history.back()}catch{window.history.back()}})}}const v=A("▼ DebuggingPlugin IN ▼","color:#444444;font-weight:bold;"),us=A("▲ DebuggingPlugin OUT ▲","color:#444444;font-weight:bold;");class hs extends R{constructor(...t){super(...t),this.registerDebugToSdkEvents(),this.registerSdkToDebugEvents()}registerDebugToSdkEvents(){window.DebuggingPlugin={balance:t=>this._send("balance",t),bet:t=>this._send("bet",t),choice:t=>this._send("choice",t),close:t=>this._send("close",t),help:t=>this._send("help",t),history:t=>this._send("history",t),freeze:t=>this._send("freeze",t),paytable:t=>this._send("paytable",t),settings:t=>this._send("settings",t),suspend:t=>this._send("suspend",t),unfreeze:t=>this._send("unfreeze",t)}}registerSdkToDebugEvents(){this.on("autoplay",t=>v("autoplay",t)),this.on("balance",t=>v("balance",t)),this.on("bet",t=>v("bet",t)),this.on("cashier",t=>v("cashier",t)),this.on("choice",t=>v("choice",t)),this.on("close",t=>v("close",t)),this.on("error",t=>v("error",t)),this.on("loadEnd",t=>v("loadEnd",t)),this.on("loadProgress",t=>v("loadProgress",t)),this.on("loadStart",t=>v("loadStart",t)),this.on("playCycleStart",t=>v("playCycleStart",t)),this.on("playCycleEnd",t=>v("playCycleEnd",t)),this.on("playEnd",t=>v("playEnd",t)),this.on("playError",t=>v("playError",t)),this.on("playReady",t=>v("playReady",t)),this.on("playStart",t=>v("playStart",t)),this.on("settings",t=>v("settings",t))}_send(...t){us.apply(null,t),this.send.apply(this,t)}}const kt=A("GigPlugin","color:#000000;font-weight:bold;");class gs extends R{constructor(...t){super(...t),this.registerToSdkEvents(),this.registerFromSdkEvents(),kt("configured")}postMessage(t){const e={event:t};kt("postMessage",e),window.top.postMessage(e,"*")}registerToSdkEvents(){window.addEventListener("message",t=>{try{const{data:e}=t;switch(e){case"STOP_AUTO_PLAY":this.send("suspend");return;case"BLOCK_BETS":this.send("freeze");return;case"UNBLOCK_BETS":this.send("unfreeze");return;default:return}}catch{}})}registerFromSdkEvents(){this.on("close",()=>{if(this.sdkConfig.api.homeUrl)try{window.top.location=this.sdkConfig.api.homeUrl}catch{window.location=this.sdkConfig.api.homeUrl}else try{window.top.history.back()}catch{window.history.back()}}),this.on("playReady",()=>{this.postMessage("GAME_READY")})}}const ps=A("OryxPlugin","color:#000000;font-weight:bold;");class ws extends R{constructor(...t){super(...t),this.registerToSdkEvents(),this.registerFromSdkEvents(),ps("configured")}registerToSdkEvents(){window.addEventListener("message",t=>{try{const{type:e,param:s}=t.data;switch(e){case"doBalanceUpdate":this.send("balance",{balance:s});return;case"doGamePause":this.send("freeze");return;case"doGameResume":this.send("unfreeze");return;case"doGameSuspend":this.send("suspend");return;default:return}}catch{}})}registerFromSdkEvents(){let t=0;this.on("close",()=>{window.top.postMessage({wpgaction:"close"},"*"),window.parent.postMessage({wpgaction:"close.parent"},"*")}),this.on("balance",({balance:e})=>{t!==e&&(t=e,window.top.postMessage({param:{},wpgaction:"balance"},"*"),window.parent.postMessage({param:{},wpgaction:"balance.parent"},"*"))}),this.on("loadStart",()=>{window.top.postMessage({wpgaction:"loadStart"},"*"),window.parent.postMessage({wpgaction:"loadStart.parent"},"*")}),this.on("loadEnd",()=>{window.top.postMessage({wpgaction:"loadEnd"},"*"),window.parent.postMessage({wpgaction:"loadEnd.parent"},"*")}),this.on("playStart",()=>{window.top.postMessage({wpgaction:"gameSpinStart"},"*"),window.parent.postMessage({wpgaction:"gameSpinStart.parent"},"*")}),this.on("playEnd",()=>{window.top.postMessage({wpgaction:"gameSpinEnd"},"*"),window.parent.postMessage({wpgaction:"gameSpinEnd.parent"},"*")}),this.on("cashier",({type:e})=>{switch(e){case"BALANCE_LOW":window.top.postMessage({wpgaction:"cashier"},"*"),window.parent.postMessage({wpgaction:"cashier.parent"},"*");break;case"BALANCE_INSUFFICIENT":window.top.postMessage({wpgaction:"errorOutOfMoney"},"*"),window.parent.postMessage({wpgaction:"errorOutOfMoney.parent"},"*");break}})}}const We=A("PariplayPlugin","color:#000000;font-weight:bold;");function je(i){try{window.top.location=i}catch{window.location=i}}function $e(i,t){return new Promise(function(s,a){const r=new XMLHttpRequest;r.onload=function(){r.status>=200&&r.status<300?s(r.responseText):a(r.responseText)},r.open(i,t),r.send()})}function Ke(){}function ms(i){return i.filter(function(e){return e.messageType.toUpperCase()==="DATA"})}function Qe(i){return i.filter(function(e){return["NOTIFICATION","POPUP"].includes(e.messageType.toUpperCase())})}function Qt(i){try{return JSON.parse(i.text)}catch{return{}}}function bs(i){return i.map(Qt).filter(Boolean).find(function(e){return e.betId!=null&&e.winId!=null})||{}}function fs(i){return i.map(Qt).filter(Boolean).find(function(e){return e.TotalBet!=null&&e.TotalWin!=null})||{}}class ys extends R{constructor(...t){super(...t),this.registerToSdkEvents(),this.registerFromSdkEvents(),We("configured")}postMessage(t,e){const s={lang:this.sdkConfig.ui.language,sender:this.sdkConfig.api.game,type:t};e!=null&&(s.data=e),We("postMessage",s),window.parent.postMessage(s,"*")}coinsToCurrency(t){return t*this.sdkConfig.api.coinValueInCents/100}handleContinueButton(t,e){t.link&&$e("GET",t.link),e()}handleLinkButton(t,e){switch(t.linkType.toUpperCase()){case"AJAX":$e("GET",t.link),e();return;case"AJAXRESPONSE":$e("GET",t.link).then(()=>{e()});return;case"REDIRECT":je(t.link),e();return}}handleQuitButton(t,e){this.send("close"),e()}handleCashierButton(t,e){this.send("cashier",{type:"ON_DEMAND"}),e()}handleHistoryButton(t,e){this.send("history",{source:"casino"}),e()}get buttonActions(){return{CASHIER:this.handleCashierButton,CONTINUE:this.handleContinueButton,HISTORY:this.handleHistoryButton,LINK:this.handleLinkButton,QUIT:this.handleQuitButton}}processInfoUiMessages(t){return t.reduce((e,s)=>e.then(()=>new Promise(a=>{const r=Object.assign({},s,{buttons:s.buttons.filter(c=>c.action.toUpperCase()==="CASHIER"?!!this.sdkConfig.api.cashierUrl:!0).map(c=>Object.assign({},c,{onRelease:()=>{const g=s.messageType.toUpperCase()==="POPUP"?Ke:a,h=this.buttonActions[c.action.toUpperCase()];h?h(c,g):g()}}))});We("showMessage",r)}).catch(Ke)),Promise.resolve()).then(()=>{}).catch(Ke)}registerToSdkEvents(){window.addEventListener("message",t=>{try{const{type:e}=t.data;switch(e){case"pause":case"disableSpin":this.send("freeze");return;case"resume":case"enableSpin":this.send("unfreeze");return;case"stopAutobet":this.send("suspend");return;default:return}}catch{}})}registerFromSdkEvents(){let t=0;this.on("openGameResponse",e=>{let s;try{const a=JSON.parse(JSON.parse(atob(this.sdkConfig.api.integrationData.token.split(".")[1])).token),r=JSON.parse(a.integrationSpecificAttributes.sessionData||"{}");s={ClientToken:a.integrationSpecificAttributes.clientToken,CurrencyCode:a.currency,PlayerTokenId:a.user,SessionData:r}}catch{s=void 0}this.postMessage("gameDataLoaded",{LoadGameData:s,success:!0});try{const a=Qe(e.contract.uiMessages);this.processInfoUiMessages(a)}catch{}}),this.on("balance",({balance:e})=>{t!==e&&(t=e,this.postMessage("balance",{amount:this.coinsToCurrency(e)}))}),this.on("close",()=>{if(this.sdkConfig.api.homeUrl)if(this.sdkConfig.api.homeUrl==="(back)")try{window.top.history.back()}catch{window.history.back()}else this.sdkConfig.api.homeUrl==="(api)"?this.postMessage("quit"):je(this.sdkConfig.api.homeUrl)}),this.on("playEnd",e=>{this.postMessage("roundEnded",{balanceAfter:this.coinsToCurrency(e.contract.balance.coins),win:this.coinsToCurrency(e.contract.win.round)});try{const s=Qe(e.contract.uiMessages);this.processInfoUiMessages(s)}catch{}}),this.on("playError",e=>{this.postMessage("ticketReceived",{ErrorCode:e.type==="error"?e.data.code:"TIMEOUT",ErrorMessage:"ERROR",Status:{ErrCode:e.type==="error"?e.data.code:"TIMEOUT"}})}),this.on("playResponse",e=>{this.postMessage("roundStarted",{balanceBefore:this.coinsToCurrency(e.contract.balance.coins+e.contract.bet.lastPaid.base*e.contract.bet.lastPaid.multiplier)});const s=["BaseGame","PaidSpin"].includes(e.contract.stateType.thisRound),a=ms(e.contract.uiMessages),r=Qe(e.contract.uiMessages),c=bs(a),g=fs(a);this.postMessage("ticketReceived",{Balance:this.coinsToCurrency(e.contract.balance.coins),BetAmount:s?this.coinsToCurrency(e.contract.bet.lastPaid.base*e.contract.bet.lastPaid.multiplier):0,CreditTransactionId:c.betId,DebitTransactionId:c.winId,Message:r,SessionData:g,Status:{ErrCode:0},WinAmount:this.coinsToCurrency(e.contract.win.round)})}),this.on("playStart",e=>{e.bet&&this.postMessage("roundStart",{totalBet:this.coinsToCurrency(e.bet.base*e.bet.multiplier)})}),this.on("loadEnd",()=>{this.postMessage("gameReady")}),this.on("loadStart",()=>{this.postMessage("onAppFrameReady")}),this.on("cashier",()=>{this.sdkConfig.api.cashierUrl&&(this.sdkConfig.api.cashierUrl==="(api)"?this.postMessage("cashier"):je(this.sdkConfig.api.cashierUrl))})}}const me=A("RelaxFEIMPlugin","color:#000000;font-weight:bold;");class ks extends R{constructor(...e){super(...e);b(this,"VERSION","1.17.0");const s=document.createElement("script");s.src=`https://d3nsdzdtjbr5ml.cloudfront.net/casino/relaxlibs/feim/${this.VERSION}/rlxfeim.min.js`,s.onload=()=>{me("loaded"),window.FEIM.configure({p2pConfig:{currency:this.sdkConfig.api.currency,launchParams:{homeurl:"homeUrl"}}}),me("configured"),this.registerToSdkEvents(),this.registerFromSdkEvents()},document.body.appendChild(s)}registerToSdkEvents(){window.FEIM.on.errorMessageDismissed(()=>this.send("unfreeze")),window.FEIM.on.errorMessageDisplayed(()=>this.send("freeze")),window.FEIM.on.exitingGame(()=>me("!!! NOT IMPLEMENTED: exitingGame !!!")),window.FEIM.on.freeze(()=>this.send("freeze")),window.FEIM.on.initialized(()=>me("!!! NOT IMPLEMENTED: initialized !!!")),window.FEIM.on.pauseAutoPlay(()=>this.send("suspend")),window.FEIM.on.refreshBalance(()=>me("!!! NOT IMPLEMENTED: refreshBalance !!!")),window.FEIM.on.toggleGameHelp(()=>{this.send("help")}),window.FEIM.on.togglePaytable(()=>{this.send("paytable")}),window.FEIM.on.unfreeze(()=>this.send("unfreeze")),window.FEIM.on.updateSettings(({payload:[e]})=>this.send("settings",{sounds:e.sounds,fastPlay:e.fastPlay}))}registerFromSdkEvents(){this.on("autoplay",({action:e})=>{switch(e){case"start":window.FEIM.send.autoPlayStarted();break;case"stop":window.FEIM.send.autoPlayFinished();break}}),this.on("balance",({balance:e})=>{window.FEIM.send.balanceUpdate(e)}),this.on("bet",({base:e,multiplier:s})=>{window.FEIM.send.betUpdate(e*s)}),this.on("error",e=>{const s="message"in e?e.message:"Unknown error";window.FEIM.send.errorMessage(s)}),this.on("close",()=>{window.FEIM.send.exitGame()}),this.on("loadEnd",()=>{window.FEIM.send.gameLoadCompleted()}),this.on("loadProgress",({progress:e})=>{window.FEIM.send.gameLoadProgress(e)}),this.on("loadStart",()=>{window.FEIM.send.gameLoadStarted()}),this.on("cashier",()=>{window.FEIM.send.openQuickDeposit()}),this.on("playCycleEnd",e=>{const s={balance:e.contract.balance.coins,bet:e.contract.bet.lastPaid.base*e.contract.bet.lastPaid.multiplier,win:{win:e.contract.win.total}};window.FEIM.send.roundFinished(s)}),this.on("playResponse",e=>{const s={balance:e.contract.balance.coins,playResponse:e.data};window.FEIM.send.roundStarted(s)}),this.on("history",()=>{window.FEIM.send.showHistory()}),this.on("settings",e=>{window.FEIM.send.updateSettings(e)})}}const Xe=A("TukoPlugin","color:#000000;font-weight:bold;");class Es extends R{constructor(...e){super(...e);b(this,"PING_INTERVAL",1e4);const a=new URLSearchParams(window.location.search).get("pingCallbackUrl");a&&window.setInterval(()=>{this.ping(a)},this.PING_INTERVAL),this.registerToSdkEvents(),this.registerFromSdkEvents(),Xe("configured")}ping(e){const s=new XMLHttpRequest;s.onreadystatechange=function(){s.readyState===XMLHttpRequest.DONE&&(s.status===0||s.status>=200&&s.status<400?Xe("ping ok",s):Xe("ping error",s))},s.open("GET",e),s.send()}registerToSdkEvents(){window.addEventListener("message",e=>{try{const{type:s,payload:a}=e.data;switch(s){case"doAudioSettings":this.send("settings",{music:a==null?void 0:a.musicEnabled,sounds:a==null?void 0:a.soundEnabled});return;case"doBalanceUpdate":const{currency:r,coinValueInCents:c}=this.sdkConfig.api;a.currency===r&&typeof a.balanceInCurrency=="number"?this.send("balance",{balance:Kt(a.balanceInCurrency,c)}):(a.balanceInCoins,this.send("balance",{balance:a.balanceInCoins}));return;case"doGamePause":this.send("freeze");return;case"doGameResume":this.send("unfreeze");return;case"doGameSuspend":this.send("suspend");return;default:return}}catch{}})}registerFromSdkEvents(){this.on("close",()=>{if(this.sdkConfig.api.homeUrl)try{window.top.location=this.sdkConfig.api.homeUrl}catch{window.location=this.sdkConfig.api.homeUrl}else try{window.top.history.back()}catch{window.history.back()}})}}const Et=A("QuantaPlugin","color:#000000;font-weight:bold;");class vs extends R{constructor(...t){super(...t),this.registerFromSdkEvents(),Et("configured")}postMessage(t){const e={event:t};Et("postMessage",e),window.parent.postMessage(e,"*")}registerFromSdkEvents(){this.on("close",()=>{this.postMessage("GameClosed")}),this.on("loadEnd",()=>{this.postMessage("GameLoaded")}),this.on("playCycleStart",()=>{this.postMessage("RoundStarted")}),this.on("playCycleEnd",()=>{this.postMessage("RoundEnded")}),this.on("playError",()=>{this.postMessage("RoundEnded")})}}const vt=A("SoftSwissPlugin","color:#000000;font-weight:bold;");class Cs extends R{constructor(...t){super(...t),this.registerFromSdkEvents(),vt("configured")}postMessage(t,e){const s={event:t,payload:e};vt("postMessage",s),window.top.postMessage(s,"*")}registerFromSdkEvents(){this.on("loadStart",()=>{this.postMessage("gameLoadStarted")}),this.on("loadProgress",({progress:t})=>{this.postMessage("gameLoadProgress",{progress:t})}),this.on("loadEnd",()=>{this.postMessage("gameLoadCompleted")}),this.on("playCycleStart",()=>{this.postMessage("gameAnimationStart")}),this.on("playCycleEnd",t=>{this.postMessage("winUpdate",{win:t.contract.win.total}),this.postMessage("gameAnimationCompleted")}),this.on("playError",()=>{this.postMessage("gameAnimationCompleted")}),this.on("balance",({balance:t})=>{this.postMessage("balanceUpdate",{balance:t})}),this.on("bet",t=>{this.postMessage("stakeUpdate",{bet:t})})}}const Ct=A("EveryMatrixPlugin","color:#000000;font-weight:bold;");class Ms extends R{constructor(...t){super(...t),this.registerToSdkEvents(),this.registerFromSdkEvents(),Ct("configured")}postMessage(t,e){const s={name:t,sender:"game",data:e};Ct("postMessage",s),window.top.postMessage(s,"*")}registerToSdkEvents(){window.addEventListener("message",t=>{try{const{name:e,sender:s}=t.data;if(s!=="emwindow")return;switch(e){case"updateBalance":this.send("getBalance");return;case"togglePaytable":this.send("paytable");return;case"stopAutoplay":this.send("suspend");return;case"showHelp":this.send("help",{show:!0});return;default:return}}catch{}})}registerFromSdkEvents(){this.on("loadProgress",({progress:t})=>{this.postMessage("loadProgress",{progress:t})}),this.on("loadEnd",()=>{this.postMessage("loadCompleted")}),this.on("settings",t=>{(t!=null&&t.music||t!=null&&t.sounds)&&this.postMessage("audioToggle")}),this.on("playCycleStart",()=>{this.postMessage("roundStart")}),this.on("playCycleEnd",()=>{this.postMessage("roundEnd")}),this.on("playError",()=>{this.postMessage("errorMessage")}),this.on("error",()=>{this.postMessage("errorMessage")}),this.on("close",()=>{this.postMessage("close")}),this.on("bet",()=>{this.postMessage("stakeUpdate")})}}var Ss="2.0.3",dt=500,Mt="user-agent",ue="",St="?",_e="function",j="undefined",he="object",lt="string",S="browser",N="cpu",L="device",x="engine",O="os",se="result",l="name",n="type",d="vendor",u="version",T="architecture",Te="major",o="model",Me="console",w="mobile",f="tablet",y="smarttv",U="wearable",Je="xr",Se="embedded",be="inapp",pt="brands",Y="formFactors",wt="fullVersionList",ie="platform",mt="platformVersion",Ve="bitness",$="sec-ch-ua",Ts=$+"-full-version-list",Is=$+"-arch",Ps=$+"-"+Ve,As=$+"-form-factors",Os=$+"-"+w,xs=$+"-"+o,Xt=$+"-"+ie,Rs=Xt+"-version",Jt=[pt,wt,w,o,ie,mt,T,Y,Ve],Re="Amazon",Z="Apple",Tt="ASUS",It="BlackBerry",J="Google",Pt="Huawei",At="Lenovo",Ot="Honor",Ue="LG",Ye="Microsoft",Ze="Motorola",et="Nvidia",xt="OnePlus",tt="OPPO",fe="Samsung",Rt="Sharp",ye="Sony",st="Xiaomi",it="Zebra",Ut="Chrome",Lt="Chromium",V="Chromecast",Us="Edge",ke="Firefox",Ee="Opera",at="Facebook",Bt="Sogou",ee="Mobile ",ve=" Browser",ut="Windows",Ls=typeof window!==j,I=Ls&&window.navigator?window.navigator:void 0,z=I&&I.userAgentData?I.userAgentData:void 0,Bs=function(i,t){var e={},s=t;if(!Ne(t)){s={};for(var a in t)for(var r in t[a])s[r]=t[a][r].concat(s[r]?s[r]:[])}for(var c in i)e[c]=s[c]&&s[c].length%2===0?s[c].concat(i[c]):i[c];return e},ze=function(i){for(var t={},e=0;e<i.length;e++)t[i[e].toUpperCase()]=i[e];return t},ht=function(i,t){if(typeof i===he&&i.length>0){for(var e in i)if(F(i[e])==F(t))return!0;return!1}return pe(i)?F(t).indexOf(F(i))!==-1:!1},Ne=function(i,t){for(var e in i)return/^(browser|cpu|device|engine|os)$/.test(e)||(t?Ne(i[e]):!1)},pe=function(i){return typeof i===lt},nt=function(i){if(i){for(var t=[],e=ge(/\\?\"/g,i).split(","),s=0;s<e.length;s++)if(e[s].indexOf(";")>-1){var a=Ie(e[s]).split(";v=");t[s]={brand:a[0],version:a[1]}}else t[s]=Ie(e[s]);return t}},F=function(i){return pe(i)?i.toLowerCase():i},ot=function(i){return pe(i)?ge(/[^\d\.]/g,i).split(".")[0]:void 0},D=function(i){for(var t in i){var e=i[t];typeof e==he&&e.length==2?this[e[0]]=e[1]:this[e]=void 0}return this},ge=function(i,t){return pe(t)?t.replace(i,ue):t},Ce=function(i){return ge(/\\?\"/g,i)},Ie=function(i,t){if(pe(i))return i=ge(/^\s\s*/,i),typeof t===j?i:i.substring(0,dt)},rt=function(i,t){if(!(!i||!t))for(var e=0,s,a,r,c,g,h;e<t.length&&!g;){var p=t[e],m=t[e+1];for(s=a=0;s<p.length&&!g&&p[s];)if(g=p[s++].exec(i),g)for(r=0;r<m.length;r++)h=g[++a],c=m[r],typeof c===he&&c.length>0?c.length===2?typeof c[1]==_e?this[c[0]]=c[1].call(this,h):this[c[0]]=c[1]:c.length===3?typeof c[1]===_e&&!(c[1].exec&&c[1].test)?this[c[0]]=h?c[1].call(this,h,c[2]):void 0:this[c[0]]=h?h.replace(c[1],c[2]):void 0:c.length===4&&(this[c[0]]=h?c[3].call(this,h.replace(c[1],c[2])):void 0):this[c]=h||void 0;e+=2}},q=function(i,t){for(var e in t)if(typeof t[e]===he&&t[e].length>0){for(var s=0;s<t[e].length;s++)if(ht(t[e][s],i))return e===St?void 0:e}else if(ht(t[e],i))return e===St?void 0:e;return t.hasOwnProperty("*")?t["*"]:i},_t={ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2","8.1":"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"},Nt={embedded:"Automotive",mobile:"Mobile",tablet:["Tablet","EInk"],smarttv:"TV",wearable:"Watch",xr:["VR","XR"],"?":["Desktop","Unknown"],"*":void 0},Ft={browser:[[/\b(?:crmo|crios)\/([\w\.]+)/i],[u,[l,ee+"Chrome"]],[/edg(?:e|ios|a)?\/([\w\.]+)/i],[u,[l,"Edge"]],[/(opera mini)\/([-\w\.]+)/i,/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i],[l,u],[/opios[\/ ]+([\w\.]+)/i],[u,[l,Ee+" Mini"]],[/\bop(?:rg)?x\/([\w\.]+)/i],[u,[l,Ee+" GX"]],[/\bopr\/([\w\.]+)/i],[u,[l,Ee]],[/\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i],[u,[l,"Baidu"]],[/\b(?:mxbrowser|mxios|myie2)\/?([-\w\.]*)\b/i],[u,[l,"Maxthon"]],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\/ ]?([\w\.]*)/i,/(avant|iemobile|slim(?:browser|boat|jet))[\/ ]?([\d\.]*)/i,/(?:ms|\()(ie) ([\w\.]+)/i,/(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon|otter|dooble|(?:lg |qute)browser)\/([-\w\.]+)/i,/(heytap|ovi|115|surf)browser\/([\d\.]+)/i,/(ecosia|weibo)(?:__| \w+@)([\d\.]+)/i],[l,u],[/quark(?:pc)?\/([-\w\.]+)/i],[u,[l,"Quark"]],[/\bddg\/([\w\.]+)/i],[u,[l,"DuckDuckGo"]],[/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i],[u,[l,"UCBrowser"]],[/microm.+\bqbcore\/([\w\.]+)/i,/\bqbcore\/([\w\.]+).+microm/i,/micromessenger\/([\w\.]+)/i],[u,[l,"WeChat"]],[/konqueror\/([\w\.]+)/i],[u,[l,"Konqueror"]],[/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i],[u,[l,"IE"]],[/ya(?:search)?browser\/([\w\.]+)/i],[u,[l,"Yandex"]],[/slbrowser\/([\w\.]+)/i],[u,[l,"Smart "+At+ve]],[/(avast|avg)\/([\w\.]+)/i],[[l,/(.+)/,"$1 Secure"+ve],u],[/\bfocus\/([\w\.]+)/i],[u,[l,ke+" Focus"]],[/\bopt\/([\w\.]+)/i],[u,[l,Ee+" Touch"]],[/coc_coc\w+\/([\w\.]+)/i],[u,[l,"Coc Coc"]],[/dolfin\/([\w\.]+)/i],[u,[l,"Dolphin"]],[/coast\/([\w\.]+)/i],[u,[l,Ee+" Coast"]],[/miuibrowser\/([\w\.]+)/i],[u,[l,"MIUI"+ve]],[/fxios\/([\w\.-]+)/i],[u,[l,ee+ke]],[/\bqihoobrowser\/?([\w\.]*)/i],[u,[l,"360"]],[/\b(qq)\/([\w\.]+)/i],[[l,/(.+)/,"$1Browser"],u],[/(oculus|sailfish|huawei|vivo|pico)browser\/([\w\.]+)/i],[[l,/(.+)/,"$1"+ve],u],[/samsungbrowser\/([\w\.]+)/i],[u,[l,fe+" Internet"]],[/metasr[\/ ]?([\d\.]+)/i],[u,[l,Bt+" Explorer"]],[/(sogou)mo\w+\/([\d\.]+)/i],[[l,Bt+" Mobile"],u],[/(electron)\/([\w\.]+) safari/i,/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,/m?(qqbrowser|2345(?=browser|chrome|explorer))\w*[\/ ]?v?([\w\.]+)/i],[l,u],[/(lbbrowser|rekonq)/i],[l],[/ome\/([\w\.]+) \w* ?(iron) saf/i,/ome\/([\w\.]+).+qihu (360)[es]e/i],[u,l],[/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i],[[l,at],u,[n,be]],[/(Klarna)\/([\w\.]+)/i,/(kakao(?:talk|story))[\/ ]([\w\.]+)/i,/(naver)\(.*?(\d+\.[\w\.]+).*\)/i,/(daum)apps[\/ ]([\w\.]+)/i,/safari (line)\/([\w\.]+)/i,/\b(line)\/([\w\.]+)\/iab/i,/(alipay)client\/([\w\.]+)/i,/(twitter)(?:and| f.+e\/([\w\.]+))/i,/(instagram|snapchat)[\/ ]([-\w\.]+)/i],[l,u,[n,be]],[/\bgsa\/([\w\.]+) .*safari\//i],[u,[l,"GSA"],[n,be]],[/musical_ly(?:.+app_?version\/|_)([\w\.]+)/i],[u,[l,"TikTok"],[n,be]],[/\[(linkedin)app\]/i],[l,[n,be]],[/(chromium)[\/ ]([-\w\.]+)/i],[l,u],[/headlesschrome(?:\/([\w\.]+)| )/i],[u,[l,Ut+" Headless"]],[/ wv\).+(chrome)\/([\w\.]+)/i],[[l,Ut+" WebView"],u],[/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i],[u,[l,"Android"+ve]],[/chrome\/([\w\.]+) mobile/i],[u,[l,ee+"Chrome"]],[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i],[l,u],[/version\/([\w\.\,]+) .*mobile(?:\/\w+ | ?)safari/i],[u,[l,ee+"Safari"]],[/iphone .*mobile(?:\/\w+ | ?)safari/i],[[l,ee+"Safari"]],[/version\/([\w\.\,]+) .*(safari)/i],[u,l],[/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i],[l,[u,"1"]],[/(webkit|khtml)\/([\w\.]+)/i],[l,u],[/(?:mobile|tablet);.*(firefox)\/([\w\.-]+)/i],[[l,ee+ke],u],[/(navigator|netscape\d?)\/([-\w\.]+)/i],[[l,"Netscape"],u],[/(wolvic|librewolf)\/([\w\.]+)/i],[l,u],[/mobile vr; rv:([\w\.]+)\).+firefox/i],[u,[l,ke+" Reality"]],[/ekiohf.+(flow)\/([\w\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\/ ]?([\w\.\+]+)/i,/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,/(firefox)\/([\w\.]+)/i,/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,/(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,/\b(links) \(([\w\.]+)/i],[l,[u,/_/g,"."]],[/(cobalt)\/([\w\.]+)/i],[l,[u,/[^\d\.]+./,ue]]],cpu:[[/\b((amd|x|x86[-_]?|wow|win)64)\b/i],[[T,"amd64"]],[/(ia32(?=;))/i,/\b((i[346]|x)86)(pc)?\b/i],[[T,"ia32"]],[/\b(aarch64|arm(v?[89]e?l?|_?64))\b/i],[[T,"arm64"]],[/\b(arm(v[67])?ht?n?[fl]p?)\b/i],[[T,"armhf"]],[/( (ce|mobile); ppc;|\/[\w\.]+arm\b)/i],[[T,"arm"]],[/((ppc|powerpc)(64)?)( mac|;|\))/i],[[T,/ower/,ue,F]],[/ sun4\w[;\)]/i],[[T,"sparc"]],[/\b(avr32|ia64(?=;)|68k(?=\))|\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\b|pa-risc)/i],[[T,F]]],device:[[/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i],[o,[d,fe],[n,f]],[/\b((?:s[cgp]h|gt|sm)-(?![lr])\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,/samsung[- ]((?!sm-[lr])[-\w]+)/i,/sec-(sgh\w+)/i],[o,[d,fe],[n,w]],[/(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i],[o,[d,Z],[n,w]],[/\((ipad);[-\w\),; ]+apple/i,/applecoremedia\/[\w\.]+ \((ipad)/i,/\b(ipad)\d\d?,\d\d?[;\]].+ios/i],[o,[d,Z],[n,f]],[/(macintosh);/i],[o,[d,Z]],[/\b(sh-?[altvz]?\d\d[a-ekm]?)/i],[o,[d,Rt],[n,w]],[/\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\)|;)/i],[o,[d,Ot],[n,f]],[/honor([-\w ]+)[;\)]/i],[o,[d,Ot],[n,w]],[/\b((?:ag[rs][2356]?k?|bah[234]?|bg[2o]|bt[kv]|cmr|cpn|db[ry]2?|jdn2|got|kob2?k?|mon|pce|scm|sht?|[tw]gr|vrd)-[ad]?[lw][0125][09]b?|605hw|bg2-u03|(?:gem|fdr|m2|ple|t1)-[7a]0[1-4][lu]|t1-a2[13][lw]|mediapad[\w\. ]*(?= bui|\)))\b(?!.+d\/s)/i],[o,[d,Pt],[n,f]],[/(?:huawei)([-\w ]+)[;\)]/i,/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i],[o,[d,Pt],[n,w]],[/oid[^\)]+; (2[\dbc]{4}(182|283|rp\w{2})[cgl]|m2105k81a?c)(?: bui|\))/i,/\b((?:red)?mi[-_ ]?pad[\w- ]*)(?: bui|\))/i],[[o,/_/g," "],[d,st],[n,f]],[/\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i,/\b; (\w+) build\/hm\1/i,/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,/oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i,/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite|pro)?)(?: bui|\))/i,/ ([\w ]+) miui\/v?\d/i],[[o,/_/g," "],[d,st],[n,w]],[/; (\w+) bui.+ oppo/i,/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i],[o,[d,tt],[n,w]],[/\b(opd2(\d{3}a?))(?: bui|\))/i],[o,[d,q,{OnePlus:["304","403","203"],"*":tt}],[n,f]],[/(vivo (5r?|6|8l?|go|one|s|x[il]?[2-4]?)[\w\+ ]*)(?: bui|\))/i],[o,[d,"BLU"],[n,w]],[/; vivo (\w+)(?: bui|\))/i,/\b(v[12]\d{3}\w?[at])(?: bui|;)/i],[o,[d,"Vivo"],[n,w]],[/\b(rmx[1-3]\d{3})(?: bui|;|\))/i],[o,[d,"Realme"],[n,w]],[/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,/\bmot(?:orola)?[- ](\w*)/i,/((?:moto(?! 360)[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i],[o,[d,Ze],[n,w]],[/\b(mz60\d|xoom[2 ]{0,2}) build\//i],[o,[d,Ze],[n,f]],[/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i],[o,[d,Ue],[n,f]],[/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,/\blg[-e;\/ ]+(?!.*(?:browser|netcast|android tv|watch))(\w+)/i,/\blg-?([\d\w]+) bui/i],[o,[d,Ue],[n,w]],[/(ideatab[-\w ]+|602lv|d-42a|a101lv|a2109a|a3500-hv|s[56]000|pb-6505[my]|tb-?x?\d{3,4}(?:f[cu]|xu|[av])|yt\d?-[jx]?\d+[lfmx])( bui|;|\)|\/)/i,/lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\w- ]+?)|tb[\w-]{6,7})( bui|;|\)|\/)/i],[o,[d,At],[n,f]],[/(nokia) (t[12][01])/i],[d,o,[n,f]],[/(?:maemo|nokia).*(n900|lumia \d+|rm-\d+)/i,/nokia[-_ ]?(([-\w\. ]*))/i],[[o,/_/g," "],[n,w],[d,"Nokia"]],[/(pixel (c|tablet))\b/i],[o,[d,J],[n,f]],[/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i],[o,[d,J],[n,w]],[/droid.+; (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i],[o,[d,ye],[n,w]],[/sony tablet [ps]/i,/\b(?:sony)?sgp\w+(?: bui|\))/i],[[o,"Xperia Tablet"],[d,ye],[n,f]],[/ (kb2005|in20[12]5|be20[12][59])\b/i,/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i],[o,[d,xt],[n,w]],[/(alexa)webm/i,/(kf[a-z]{2}wi|aeo(?!bc)\w\w)( bui|\))/i,/(kf[a-z]+)( bui|\)).+silk\//i],[o,[d,Re],[n,f]],[/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i],[[o,/(.+)/g,"Fire Phone $1"],[d,Re],[n,w]],[/(playbook);[-\w\),; ]+(rim)/i],[o,d,[n,f]],[/\b((?:bb[a-f]|st[hv])100-\d)/i,/\(bb10; (\w+)/i],[o,[d,It],[n,w]],[/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i],[o,[d,Tt],[n,f]],[/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i],[o,[d,Tt],[n,w]],[/(nexus 9)/i],[o,[d,"HTC"],[n,f]],[/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i],[d,[o,/_/g," "],[n,w]],[/tcl (xess p17aa)/i,/droid [\w\.]+; ((?:8[14]9[16]|9(?:0(?:48|60|8[01])|1(?:3[27]|66)|2(?:6[69]|9[56])|466))[gqswx])(_\w(\w|\w\w))?(\)| bui)/i],[o,[d,"TCL"],[n,f]],[/droid [\w\.]+; (418(?:7d|8v)|5087z|5102l|61(?:02[dh]|25[adfh]|27[ai]|56[dh]|59k|65[ah])|a509dl|t(?:43(?:0w|1[adepqu])|50(?:6d|7[adju])|6(?:09dl|10k|12b|71[efho]|76[hjk])|7(?:66[ahju]|67[hw]|7[045][bh]|71[hk]|73o|76[ho]|79w|81[hks]?|82h|90[bhsy]|99b)|810[hs]))(_\w(\w|\w\w))?(\)| bui)/i],[o,[d,"TCL"],[n,w]],[/(itel) ((\w+))/i],[[d,F],o,[n,q,{tablet:["p10001l","w7001"],"*":"mobile"}]],[/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i],[o,[d,"Acer"],[n,f]],[/droid.+; (m[1-5] note) bui/i,/\bmz-([-\w]{2,})/i],[o,[d,"Meizu"],[n,w]],[/; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i],[o,[d,"Ulefone"],[n,w]],[/; (energy ?\w+)(?: bui|\))/i,/; energizer ([\w ]+)(?: bui|\))/i],[o,[d,"Energizer"],[n,w]],[/; cat (b35);/i,/; (b15q?|s22 flip|s48c|s62 pro)(?: bui|\))/i],[o,[d,"Cat"],[n,w]],[/((?:new )?andromax[\w- ]+)(?: bui|\))/i],[o,[d,"Smartfren"],[n,w]],[/droid.+; (a(?:015|06[35]|142p?))/i],[o,[d,"Nothing"],[n,w]],[/; (x67 5g|tikeasy \w+|ac[1789]\d\w+)( b|\))/i,/archos ?(5|gamepad2?|([\w ]*[t1789]|hello) ?\d+[\w ]*)( b|\))/i],[o,[d,"Archos"],[n,f]],[/archos ([\w ]+)( b|\))/i,/; (ac[3-6]\d\w{2,8})( b|\))/i],[o,[d,"Archos"],[n,w]],[/(imo) (tab \w+)/i,/(infinix) (x1101b?)/i],[d,o,[n,f]],[/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|infinix|tecno|micromax|advan)[-_ ]?([-\w]*)/i,/; (blu|hmd|imo|tcl)[_ ]([\w\+ ]+?)(?: bui|\)|; r)/i,/(hp) ([\w ]+\w)/i,/(microsoft); (lumia[\w ]+)/i,/(lenovo)[-_ ]?([-\w ]+?)(?: bui|\)|\/)/i,/(oppo) ?([\w ]+) bui/i],[d,o,[n,w]],[/(kobo)\s(ereader|touch)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\/([\w\.]+)/i],[d,o,[n,f]],[/(surface duo)/i],[o,[d,Ye],[n,f]],[/droid [\d\.]+; (fp\du?)(?: b|\))/i],[o,[d,"Fairphone"],[n,w]],[/((?:tegranote|shield t(?!.+d tv))[\w- ]*?)(?: b|\))/i],[o,[d,et],[n,f]],[/(sprint) (\w+)/i],[d,o,[n,w]],[/(kin\.[onetw]{3})/i],[[o,/\./g," "],[d,Ye],[n,w]],[/droid.+; ([c6]+|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],[o,[d,it],[n,f]],[/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i],[o,[d,it],[n,w]],[/smart-tv.+(samsung)/i],[d,[n,y]],[/hbbtv.+maple;(\d+)/i],[[o,/^/,"SmartTV"],[d,fe],[n,y]],[/tcast.+(lg)e?. ([-\w]+)/i],[d,o,[n,y]],[/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i],[[d,Ue],[n,y]],[/(apple) ?tv/i],[d,[o,Z+" TV"],[n,y]],[/crkey.*devicetype\/chromecast/i],[[o,V+" Third Generation"],[d,J],[n,y]],[/crkey.*devicetype\/([^/]*)/i],[[o,/^/,"Chromecast "],[d,J],[n,y]],[/fuchsia.*crkey/i],[[o,V+" Nest Hub"],[d,J],[n,y]],[/crkey/i],[[o,V],[d,J],[n,y]],[/(portaltv)/i],[o,[d,at],[n,y]],[/droid.+aft(\w+)( bui|\))/i],[o,[d,Re],[n,y]],[/(shield \w+ tv)/i],[o,[d,et],[n,y]],[/\(dtv[\);].+(aquos)/i,/(aquos-tv[\w ]+)\)/i],[o,[d,Rt],[n,y]],[/(bravia[\w ]+)( bui|\))/i],[o,[d,ye],[n,y]],[/(mi(tv|box)-?\w+) bui/i],[o,[d,st],[n,y]],[/Hbbtv.*(technisat) (.*);/i],[d,o,[n,y]],[/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i],[[d,Ie],[o,Ie],[n,y]],[/droid.+; ([\w- ]+) (?:android tv|smart[- ]?tv)/i],[o,[n,y]],[/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i],[[n,y]],[/(ouya)/i,/(nintendo) (\w+)/i],[d,o,[n,Me]],[/droid.+; (shield)( bui|\))/i],[o,[d,et],[n,Me]],[/(playstation \w+)/i],[o,[d,ye],[n,Me]],[/\b(xbox(?: one)?(?!; xbox))[\); ]/i],[o,[d,Ye],[n,Me]],[/\b(sm-[lr]\d\d[0156][fnuw]?s?|gear live)\b/i],[o,[d,fe],[n,U]],[/((pebble))app/i,/(asus|google|lg|oppo) ((pixel |zen)?watch[\w ]*)( bui|\))/i],[d,o,[n,U]],[/(ow(?:19|20)?we?[1-3]{1,3})/i],[o,[d,tt],[n,U]],[/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i],[o,[d,Z],[n,U]],[/(opwwe\d{3})/i],[o,[d,xt],[n,U]],[/(moto 360)/i],[o,[d,Ze],[n,U]],[/(smartwatch 3)/i],[o,[d,ye],[n,U]],[/(g watch r)/i],[o,[d,Ue],[n,U]],[/droid.+; (wt63?0{2,3})\)/i],[o,[d,it],[n,U]],[/droid.+; (glass) \d/i],[o,[d,J],[n,Je]],[/(pico) (4|neo3(?: link|pro)?)/i],[d,o,[n,Je]],[/(quest( \d| pro)?s?).+vr/i],[o,[d,at],[n,Je]],[/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i],[d,[n,Se]],[/(aeobc)\b/i],[o,[d,Re],[n,Se]],[/(homepod).+mac os/i],[o,[d,Z],[n,Se]],[/windows iot/i],[[n,Se]],[/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+?(mobile|vr|\d) safari/i],[o,[n,q,{mobile:"Mobile",xr:"VR","*":f}]],[/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i],[[n,f]],[/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i],[[n,w]],[/droid .+?; ([\w\. -]+)( bui|\))/i],[o,[d,"Generic"]]],engine:[[/windows.+ edge\/([\w\.]+)/i],[u,[l,Us+"HTML"]],[/(arkweb)\/([\w\.]+)/i],[l,u],[/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i],[u,[l,"Blink"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna|servo)\/([\w\.]+)/i,/ekioh(flow)\/([\w\.]+)/i,/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,/(icab)[\/ ]([23]\.[\d\.]+)/i,/\b(libweb)/i],[l,u],[/ladybird\//i],[[l,"LibWeb"]],[/rv\:([\w\.]{1,9})\b.+(gecko)/i],[u,l]],os:[[/microsoft (windows) (vista|xp)/i],[l,u],[/(windows (?:phone(?: os)?|mobile|iot))[\/ ]?([\d\.\w ]*)/i],[l,[u,q,_t]],[/windows nt 6\.2; (arm)/i,/windows[\/ ]([ntce\d\. ]+\w)(?!.+xbox)/i,/(?:win(?=3|9|n)|win 9x )([nt\d\.]+)/i],[[u,q,_t],[l,ut]],[/[adehimnop]{4,7}\b(?:.*os ([\w]+) like mac|; opera)/i,/(?:ios;fbsv\/|iphone.+ios[\/ ])([\d\.]+)/i,/cfnetwork\/.+darwin/i],[[u,/_/g,"."],[l,"iOS"]],[/(mac os x) ?([\w\. ]*)/i,/(macintosh|mac_powerpc\b)(?!.+haiku)/i],[[l,"macOS"],[u,/_/g,"."]],[/android ([\d\.]+).*crkey/i],[u,[l,V+" Android"]],[/fuchsia.*crkey\/([\d\.]+)/i],[u,[l,V+" Fuchsia"]],[/crkey\/([\d\.]+).*devicetype\/smartspeaker/i],[u,[l,V+" SmartSpeaker"]],[/linux.*crkey\/([\d\.]+)/i],[u,[l,V+" Linux"]],[/crkey\/([\d\.]+)/i],[u,[l,V]],[/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i],[u,l],[/(ubuntu) ([\w\.]+) like android/i],[[l,/(.+)/,"$1 Touch"],u],[/(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen|webos)\w*[-\/\.; ]?([\d\.]*)/i],[l,u],[/\(bb(10);/i],[u,[l,It]],[/(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\/ ]?([\w\.]*)/i],[u,[l,"Symbian"]],[/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i],[u,[l,ke+" OS"]],[/web0s;.+rt(tv)/i,/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i],[u,[l,"webOS"]],[/watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i],[u,[l,"watchOS"]],[/(cros) [\w]+(?:\)| ([\w\.]+)\b)/i],[[l,"Chrome OS"],u],[/panasonic;(viera)/i,/(netrange)mmh/i,/(nettv)\/(\d+\.[\w\.]+)/i,/(nintendo|playstation) (\w+)/i,/(xbox); +xbox ([^\);]+)/i,/(pico) .+os([\w\.]+)/i,/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,/(mint)[\/\(\) ]?(\w*)/i,/(mageia|vectorlinux)[; ]/i,/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,/(hurd|linux)(?: arm\w*| x86\w*| ?)([\w\.]*)/i,/(gnu) ?([\w\.]*)/i,/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,/(haiku) (\w+)/i],[l,u],[/(sunos) ?([\w\.\d]*)/i],[[l,"Solaris"],u],[/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,/(aix) ((\d)(?=\.|\)| )[\w\.])*/i,/\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,/(unix) ?([\w\.]*)/i],[l,u]]},Le=function(){var i={init:{},isIgnore:{},isIgnoreRgx:{},toString:{}};return D.call(i.init,[[S,[l,u,Te,n]],[N,[T]],[L,[n,o,d]],[x,[l,u]],[O,[l,u]]]),D.call(i.isIgnore,[[S,[u,Te]],[x,[u]],[O,[u]]]),D.call(i.isIgnoreRgx,[[S,/ ?browser$/i],[O,/ ?os$/i]]),D.call(i.toString,[[S,[l,u]],[N,[T]],[L,[d,o]],[x,[l,u]],[O,[l,u]]]),i}(),_s=function(i,t){var e=Le.init[t],s=Le.isIgnore[t]||0,a=Le.isIgnoreRgx[t]||0,r=Le.toString[t]||0;function c(){D.call(this,e)}return c.prototype.getItem=function(){return i},c.prototype.withClientHints=function(){return z?z.getHighEntropyValues(Jt).then(function(g){return i.setCH(new Yt(g,!1)).parseCH().get()}):i.parseCH().get()},c.prototype.withFeatureCheck=function(){return i.detectFeature().get()},t!=se&&(c.prototype.is=function(g){var h=!1;for(var p in this)if(this.hasOwnProperty(p)&&!ht(s,p)&&F(a?ge(a,this[p]):this[p])==F(a?ge(a,g):g)){if(h=!0,g!=j)break}else if(g==j&&h){h=!h;break}return h},c.prototype.toString=function(){var g=ue;for(var h in r)typeof this[r[h]]!==j&&(g+=(g?" ":ue)+this[r[h]]);return g||j}),z||(c.prototype.then=function(g){var h=this,p=function(){for(var C in h)h.hasOwnProperty(C)&&(this[C]=h[C])};p.prototype={is:c.prototype.is,toString:c.prototype.toString};var m=new p;return g(m),m}),new c};function Yt(i,t){if(i=i||{},D.call(this,Jt),t)D.call(this,[[pt,nt(i[$])],[wt,nt(i[Ts])],[w,/\?1/.test(i[Os])],[o,Ce(i[xs])],[ie,Ce(i[Xt])],[mt,Ce(i[Rs])],[T,Ce(i[Is])],[Y,nt(i[As])],[Ve,Ce(i[Ps])]]);else for(var e in i)this.hasOwnProperty(e)&&typeof i[e]!==j&&(this[e]=i[e])}function Dt(i,t,e,s){return this.get=function(a){return a?this.data.hasOwnProperty(a)?this.data[a]:void 0:this.data},this.set=function(a,r){return this.data[a]=r,this},this.setCH=function(a){return this.uaCH=a,this},this.detectFeature=function(){if(I&&I.userAgent==this.ua)switch(this.itemType){case S:I.brave&&typeof I.brave.isBrave==_e&&this.set(l,"Brave");break;case L:!this.get(n)&&z&&z[w]&&this.set(n,w),this.get(o)=="Macintosh"&&I&&typeof I.standalone!==j&&I.maxTouchPoints&&I.maxTouchPoints>2&&this.set(o,"iPad").set(n,f);break;case O:!this.get(l)&&z&&z[ie]&&this.set(l,z[ie]);break;case se:var a=this.data,r=function(c){return a[c].getItem().detectFeature().get()};this.set(S,r(S)).set(N,r(N)).set(L,r(L)).set(x,r(x)).set(O,r(O))}return this},this.parseUA=function(){return this.itemType!=se&&rt.call(this.data,this.ua,this.rgxMap),this.itemType==S&&this.set(Te,ot(this.get(u))),this},this.parseCH=function(){var a=this.uaCH,r=this.rgxMap;switch(this.itemType){case S:case x:var c=a[wt]||a[pt],g;if(c)for(var h in c){var p=c[h].brand||c[h],m=c[h].version;this.itemType==S&&!/not.a.brand/i.test(p)&&(!g||/chrom/i.test(g)&&p!=Lt)&&(p=q(p,{Chrome:"Google Chrome",Edge:"Microsoft Edge","Chrome WebView":"Android WebView","Chrome Headless":"HeadlessChrome","Huawei Browser":"HuaweiBrowser","MIUI Browser":"Miui Browser","Opera Mobi":"OperaMobile",Yandex:"YaBrowser"}),this.set(l,p).set(u,m).set(Te,ot(m)),g=p),this.itemType==x&&p==Lt&&this.set(u,m)}break;case N:var C=a[T];C&&(C&&a[Ve]=="64"&&(C+="64"),rt.call(this.data,C+";",r));break;case L:if(a[w]&&this.set(n,w),a[o]&&(this.set(o,a[o]),!this.get(n)||!this.get(d))){var P={};rt.call(P,"droid 9; "+a[o]+")",r),!this.get(n)&&P.type&&this.set(n,P.type),!this.get(d)&&P.vendor&&this.set(d,P.vendor)}if(a[Y]){var G;if(typeof a[Y]!="string")for(var we=0;!G&&we<a[Y].length;)G=q(a[Y][we++],Nt);else G=q(a[Y],Nt);this.set(n,G)}break;case O:var _=a[ie];if(_){var K=a[mt];_==ut&&(K=parseInt(ot(K),10)>=13?"11":"10"),this.set(l,_).set(u,K)}this.get(l)==ut&&a[o]=="Xbox"&&this.set(l,"Xbox").set(u,void 0);break;case se:var Q=this.data,H=function(xe){return Q[xe].getItem().setCH(a).parseCH().get()};this.set(S,H(S)).set(N,H(N)).set(L,H(L)).set(x,H(x)).set(O,H(O))}return this},D.call(this,[["itemType",i],["ua",t],["uaCH",s],["rgxMap",e],["data",_s(this,i)]]),this}function B(i,t,e){if(typeof i===he?(Ne(i,!0)?(typeof t===he&&(e=t),t=i):(e=i,t=void 0),i=void 0):typeof i===lt&&!Ne(t,!0)&&(e=t,t=void 0),e&&typeof e.append===_e){var s={};e.forEach(function(h,p){s[p]=h}),e=s}if(!(this instanceof B))return new B(i,t,e).getResult();var a=typeof i===lt?i:e&&e[Mt]?e[Mt]:I&&I.userAgent?I.userAgent:ue,r=new Yt(e,!0),c=t?Bs(Ft,t):Ft,g=function(h){return h==se?function(){return new Dt(h,a,c,r).set("ua",a).set(S,this.getBrowser()).set(N,this.getCPU()).set(L,this.getDevice()).set(x,this.getEngine()).set(O,this.getOS()).get()}:function(){return new Dt(h,a,c[h],r).parseUA().get()}};return D.call(this,[["getBrowser",g(S)],["getCPU",g(N)],["getDevice",g(L)],["getEngine",g(x)],["getOS",g(O)],["getResult",g(se)],["getUA",function(){return a}],["setUA",function(h){return pe(h)&&(a=h.length>dt?Ie(h,dt):h),this}]]).setUA(a),this}B.VERSION=Ss;B.BROWSER=ze([l,u,Te,n]);B.CPU=ze([T]);B.DEVICE=ze([o,d,n,Me,w,y,f,U,Se]);B.ENGINE=B.OS=ze([l,u]);class Zt{constructor(t,e){b(this,"config");b(this,"sdkConfig");b(this,"error");this.config=t,this.sdkConfig=e,this.on("openGame",async()=>{try{this.error=void 0;const s=await this.openGame();this.send("openGameResponse",s)}catch(s){this.error=s,this.send("openGameError",this.error)}}),this.on("play",async s=>{try{this.error=void 0;const a=await this.play(s);this.send("playResponse",a)}catch(a){this.error=a,this.send("playError",this.error)}}),this.on("freeRounds",async s=>{try{this.error=void 0;const a=await this.freeRounds(s);this.send("freeRoundsResponse",a)}catch(a){this.error=a,this.send("freeRoundsError",this.error)}}),this.on("getBalance",async()=>{try{this.error=void 0;const s=await this.getBalance();this.send("balance",s)}catch{}}),this.showHistory=this.showHistory.bind(this),this.on("history",this.showHistory)}on(t,e,s){const a=function(c){c.data.message!==`kalamba:wrapper-rgs:${t}`&&c.data.message!==`kalamba:wrapper:${t}`||e(c.data.payload)};window.addEventListener("message",a,s)}send(t,...[e]){window.postMessage({message:`kalamba:rgs:${t}`,payload:e})}async openGame(){throw new Error("Not implemented")}async play(t){throw new Error("Not implemented")}async freeRounds(t){throw new Error("Not implemented")}async getBalance(){throw new Error("Not implemented")}async showHistory(){throw new Error("Not implemented")}}class Ns{constructor(t){b(this,"socket",null);b(this,"webSocketUrl");b(this,"eventListeners",{close:[],error:[],message:[]});b(this,"connect",async()=>{const t=new WebSocket(this.webSocketUrl);return t.addEventListener("message",this.handleMessage),new Promise(e=>{t.addEventListener("open",s=>{this.handleOpen(s),e(this.socket)},{once:!0})})});b(this,"send",t=>{if(this.socket==null)throw new Error("Cannot send message, the WebSocket connection is not open");this.socket.send(t)});b(this,"close",()=>{if(this.socket==null)throw new Error("Cannot close the WebSocket connection that is not open");this.socket.close()});b(this,"handleClose",t=>{this.eventListeners.close.forEach(e=>{e(t)}),this.socket.removeEventListener("message",this.handleMessage),this.socket.removeEventListener("close",this.handleClose),this.socket.removeEventListener("error",this.handleError),this.socket=null});b(this,"handleError",t=>{this.eventListeners.error.forEach(e=>{e(t)})});b(this,"handleMessage",t=>{this.eventListeners.message.forEach(e=>{e(t)})});b(this,"handleOpen",t=>{const e=t.target;e.addEventListener("close",this.handleClose),e.addEventListener("error",this.handleError),this.socket=e});this.webSocketUrl=t}addEventListener(t,e){this.eventListeners[t].push(e)}removeEventListener(t,e){const s=this.eventListeners[t].indexOf(e);s!==-1&&this.eventListeners[t].splice(s,1)}}function Be(i){return JSON.parse(i==null?void 0:i.data)}function Fs(i){var t;return((t=i==null?void 0:i.header)==null?void 0:t.name)==="Ping"}function Gt(i){var t;return((t=i==null?void 0:i.header)==null?void 0:t.name)==="RealityCheck"}function Fe(i){return i.header.name==="GameEvent"}function Ds(i){return Fe(i)&&i.body.event==="OPEN_GAME"}function Ht(i){return i.header.code!==1}function Gs(i){return Fe(i)&&i.body.event.includes("_RESULT")}var ae,Pe;class Hs extends Ns{constructor(e,s){const a=new URL(e.apiUrl);a.searchParams.set("cageCode",e.cageCode),a.searchParams.set("gameCode",e.gameCode),a.searchParams.set("operatorCode",e.operatorCode),a.searchParams.set("playMode",e.playMode),a.searchParams.set("token",e.token),a.searchParams.set("username",e.username);super(a.toString());b(this,"cId",0);b(this,"mId",0);b(this,"seqId",0);b(this,"gameCode");M(this,ae);M(this,Pe);b(this,"onMessage",e=>{const s=Be(e);(Fe(s)||Fs(s)||Gt(s))&&this.sendAcknowledgement(s),Gt(s)&&this.handleRealityCheck(s)});this.eventListeners.realityCheck=[],this.gameCode=e.gameCode,E(this,ae,s.requestTimeoutMs),E(this,Pe,s.gameVersion??"unknown"),this.addEventListener("message",this.onMessage)}handleRealityCheck(e){this.eventListeners.realityCheck.forEach(s=>{s(e.body)})}addEventListener(e,s){super.addEventListener(e,s)}removeEventListener(e,s){super.removeEventListener(e,s)}buildHeader(e,s=null){return{cId:s??++this.cId,code:s!==null?1:void 0,mId:++this.mId,name:e}}buildPayload(e,s){return JSON.stringify({body:s,header:e})}getBodyExtras(e){return{action:e,seqId:++this.seqId}}request(e,s){const a=this.buildPayload(e,s);return new Promise((r,c)=>{setTimeout(()=>c({type:"timeout"}),k(this,ae));const g=h=>{const p=Be(h);try{e.cId===p.header.cId&&(this.removeEventListener("message",g),p.header.code===1?r(p):c({message:p,type:"error"}))}catch{c({message:p,type:"error"})}};this.addEventListener("message",g),this.send(a)})}freeRounds(e){const s=this.buildHeader("ActivateFreeRound");return this.request(s,e).then(a=>a.body).catch(a=>{var r;throw{data:(r=a==null?void 0:a.message)==null?void 0:r.body,type:a.type}})}async authenticate(e=!1){const s=this.buildHeader("Authenticate"),a={clientType:3,version:k(this,Pe),reconnect:e};return this.request(s,a).then(r=>r.body).catch(r=>{var c;throw{data:(c=r==null?void 0:r.message)==null?void 0:c.body,type:r.type}})}async getBalance(){const e=this.buildHeader("GetBalance"),s={};return this.request(e,s).then(a=>a.body).catch(a=>{var r;throw{data:(r=a==null?void 0:a.message)==null?void 0:r.body,type:a.type}})}async openGame(){const e=this.buildHeader("OpenGame"),s={gameCode:this.gameCode};return new Promise((a,r)=>{const c=g=>{const h=Be(g);Ds(h)?(this.removeEventListener("message",c),a(h.body)):Ht(h)&&r({data:h.body,type:"error"})};this.addEventListener("message",c),this.request(e,s).catch(g=>{var h;return r({data:(h=g==null?void 0:g.message)==null?void 0:h.body,type:g.type})})})}sendAcknowledgement(e){const{name:s,cId:a}=e.header,r=this.buildHeader(s,a),c=this.buildPayload(r,{});this.send(c)}sendAction(e,s){const a=this.buildHeader("GameAction"),r={...this.getBodyExtras(e),data:s};return new Promise((c,g)=>{const h=p=>{const m=Be(p);Fe(m)&&r.seqId===m.body.correlationSeqId&&(this.removeEventListener("message",h),Gs(m)?c(m.body):Ht(m)&&g({data:m.body,type:"error"}))};this.addEventListener("message",h),this.request(a,r).catch(p=>{var m;return g({data:(m=p==null?void 0:p.message)==null?void 0:m.body,type:p.type})})})}setRequestTimeoutMs(e){E(this,ae,e)}}ae=new WeakMap,Pe=new WeakMap;const Vs={CA_BC:"CA",CA_ON:"CA",GER:"DE",US_CT:"US",US_MI:"US",US_NJ:"US",USA:"US"};function Vt(i){return!i||i==="NOT_APPLICABLE"?null:Vs[i]??i}function es(i){const t=i.contract;return t?{contract:{balance:{coins:t.balance,version:t.balanceVersion},coinValueInCents:t.coinValueInCents,country:t.countryCode,currency:t.currencyCode,jurisdiction:Vt(t.jurisdictionCode),uiMessages:t.uiMessages,username:t.username}}:{contract:{balance:{coins:i.balance,version:i.balanceVersion},coinValueInCents:i.coinValueInCents,country:i.countryCode,currency:i.currencyCode,jurisdiction:Vt(i.jurisdictionCode),uiMessages:i.uiMessages,username:i.username}}}function ts(i){var t,e;return{code:((t=i.data)==null?void 0:t.code)??te.RgsErrorCode.UNKNOWN,details:(e=i.data)==null?void 0:e.details}}function ss(i,t,e){const s=t.contract;if(!s){const a=t.data;return{contract:{bet:{available:a.additionalConfigData.availableMultipliersPerBaseBet,default:{base:a.additionalConfigData.defaultBet.baseBet,multiplier:a.additionalConfigData.defaultBet.betMultiplier},max:a.additionalConfigData.maxAllowedOverallBetInCoins??null,last:a.gameState.betFromCurrentRound?{base:a.gameState.betFromCurrentRound.baseBet,multiplier:a.gameState.betFromCurrentRound.betMultiplier}:null,lastPaid:a.gameState.lastPlacedMainGameBet?{base:a.gameState.lastPlacedMainGameBet.baseBet,multiplier:a.gameState.lastPlacedMainGameBet.betMultiplier}:null},balance:{coins:t.balance,version:t.balanceVersion},freeRounds:(a.FREE_ROUNDS??[]).map(r=>({conf:{base:r.conf.baseBet,multiplier:r.conf.betMultiplier,numAwarded:r.conf.numAwarded},data:{numPlayed:r.data.numPlayed,win:r.data.winAmount,numLeft:r.data.numLeft},id:r.id,rejectable:r.rejectable,skippable:r.skippable,status:r.status,type:r.type})),gameModel:a.additionalConfigData.gameModelFile,metaData:a.gameConfigData.metaData,roundId:a.gameState.cycleId,serverTime:t.balanceVersion,sessionId:a.gameState.sessionId,stateType:{thisRound:a.gameState.stateTypeThisRound,nextRound:a.gameState.stateTypeNextRound},uiMessages:i.uiMessages,win:{max:a.maxWin??null,round:a.gameState.totalWinFromCurrentRound,total:a.gameState.totalWinFromCurrentGameCycle}},data:a}}return{contract:{bet:{available:s.availableMultipliersPerBaseBet,default:{base:s.defaultBet.baseBet,multiplier:s.defaultBet.betMultiplier},max:s.maxBetInCoins??null,last:s.lastBet?{base:s.lastBet.baseBet,multiplier:s.lastBet.betMultiplier}:null,lastPaid:s.lastMainGameBet?{base:s.lastMainGameBet.baseBet,multiplier:s.lastMainGameBet.betMultiplier}:null},balance:{coins:s.balanceInCoins,version:s.balanceVersion},freeRounds:(s.freeRounds??[]).map(a=>({conf:{base:a.conf.baseBet,multiplier:a.conf.betMultiplier,numAwarded:a.conf.numAwarded},data:{numPlayed:a.data.numPlayed,win:a.data.winAmount,numLeft:a.data.numLeft},id:a.id,rejectable:a.rejectable,skippable:a.skippable,status:a.status,type:a.type})),gameModel:s.gameModelFile,metaData:s.metaData,roundId:s.roundId,serverTime:s.serverTime,sessionId:s.sessionId,stateType:{thisRound:s.stateTypeThisRound,nextRound:s.stateTypeNextRound},uiMessages:i.contract.uiMessages.concat(s.uiMessages),win:{max:s.maxWinInCoins??null,round:s.roundWin,total:s.totalWin}},data:e?e(t.opaqueGameServerToUi):t.opaqueGameServerToUi}}function is(i){var t,e;return{code:((t=i.data)==null?void 0:t.code)??te.RgsErrorCode.UNKNOWN,details:(e=i.data)==null?void 0:e.details}}function as(i,t){const e=i.contract;if(!e){const s=i.data;return{contract:{bet:{last:s.gameState.betFromCurrentRound?{base:s.gameState.betFromCurrentRound.baseBet,multiplier:s.gameState.betFromCurrentRound.betMultiplier}:null,lastPaid:{base:(s.gameState.lastPlacedMainGameBet??s.gameState.betFromCurrentRound).baseBet,multiplier:(s.gameState.lastPlacedMainGameBet??s.gameState.betFromCurrentRound).betMultiplier}},balance:{coins:i.balance,version:i.balanceVersion},freeRounds:(s.FREE_ROUNDS??[]).map(a=>({conf:{base:a.conf.baseBet,multiplier:a.conf.betMultiplier,numAwarded:a.conf.numAwarded},data:{numPlayed:a.data.numPlayed,win:a.data.winAmount,numLeft:a.data.numLeft},id:a.id,rejectable:a.rejectable,skippable:a.skippable,status:a.status,type:a.type})),serverTime:i.balanceVersion,roundId:s.gameState.cycleId,stateType:{thisRound:s.gameState.stateTypeThisRound,nextRound:s.gameState.stateTypeNextRound},uiMessages:s.uiMessages,win:{round:s.gameState.totalWinFromCurrentRound,total:s.gameState.totalWinFromCurrentGameCycle}},data:s}}return{contract:{bet:{last:e.lastBet?{base:e.lastBet.baseBet,multiplier:e.lastBet.betMultiplier}:null,lastPaid:{base:e.lastMainGameBet.baseBet,multiplier:e.lastMainGameBet.betMultiplier}},balance:{coins:e.balanceInCoins,version:e.balanceVersion},freeRounds:(e.freeRounds??[]).map(s=>({conf:{base:s.conf.baseBet,multiplier:s.conf.betMultiplier,numAwarded:s.conf.numAwarded},data:{numPlayed:s.data.numPlayed,win:s.data.winAmount,numLeft:s.data.numLeft},id:s.id,rejectable:s.rejectable,skippable:s.skippable,status:s.status,type:s.type})),serverTime:e.serverTime,roundId:e.roundId,stateType:{thisRound:e.stateTypeThisRound,nextRound:e.stateTypeNextRound},uiMessages:e.uiMessages,win:{round:e.roundWin,total:e.totalWin}},data:t?t(i.opaqueGameServerToUi):i.opaqueGameServerToUi}}function ns(i){var t,e;return{code:((t=i.data)==null?void 0:t.code)??te.RgsErrorCode.UNKNOWN,details:(e=i.data)==null?void 0:e.details}}const zs={parseAuthenticateResponse:es,parseAuthenticateError:ts,parseOpenGameResponse:ss,parseOpenGameError:is,parsePlayResponse:as,parsePlayError:ns},qs={aze:"az",bul:"bg",chi:"zh",zho:"zh",hrv:"hr",cze:"cs",dan:"da",dut:"nl",eng:"en",est:"et",fin:"fi",fra:"fr",ger:"de",gre:"el",hun:"hu",ind:"id",ita:"it",jpn:"ja",kor:"ko",nor:"no",pol:"pl",por:"pt",rum:"ro",rus:"ru",srp:"sr",slo:"sk",spa:"es",swe:"sv",tha:"th",tur:"tr",ukr:"uk",vie:"vi"},{device:Ws}=B(navigator.userAgent),js=A("KalambaBullseyePlugin","color:#000000;font-weight:bold;");class $s extends Zt{constructor(...e){super(...e);b(this,"socket");this.on("configured",s=>{this.socket.setRequestTimeoutMs(s.ui.requestTimeoutMs)})}initialize(e){this.socket=new Hs(e,{gameVersion:this.config.gameVersion,requestTimeoutMs:this.sdkConfig.ui.requestTimeoutMs}),["fireboltroulette"].includes(e.gameCode)||(this.socket.addEventListener("close",s=>{s.code===1008?this.error||this.send("error",{type:"CLOSE",messageCode:"TOO_MANY_OPEN_GAMES",messageKey:"RgsError.TOO_MANY_OPEN_GAMES"}):s.code===1011?this.error||this.send("error",{type:"CLOSE",messageCode:"UNKNOWN",messageKey:"RgsError.UNKNOWN"}):this.reconnect()}),["mobile","tablet"].includes(Ws.type??"")&&document.addEventListener("visibilitychange",async()=>{document.hidden||(this.socket.socket?this.socket.socket&&[WebSocket.CONNECTING,WebSocket.OPEN].includes(this.socket.socket.readyState)&&this.socket.close():this.reconnect())})),this.socket.addEventListener("error",s=>js("error",s)),this.socket.addEventListener("realityCheck",s=>{this.send("realityCheck",s)})}async reconnect(){try{await this.socket.connect(),await this.socket.authenticate(!0),await this.socket.openGame()}catch{this.send("error",{type:"CLOSE",messageCode:"CONNECTION_ERROR",messageKey:"RgsError.CONNECTION_ERROR"})}}async openGame(){var H,xe;const e=new URLSearchParams(window.location.search),s=e.get("apiUrl"),a=e.get("cageCode"),r=e.get("gameCode"),c=e.get("operatorCode"),g=e.get("playMode"),h=e.get("token"),p=e.get("username"),m=e.get("gameHistoryUrl"),C=e.get("homeUrl")??void 0,P=e.get("cashierUrl")??void 0;this.initialize({apiUrl:s,cageCode:a,gameCode:r,operatorCode:c,playMode:g,token:h,username:p});try{await this.socket.connect()}catch{throw{type:"error",data:{code:te.RgsErrorCode.CONNECTION_ERROR}}}let G;try{G=await this.socket.authenticate()}catch(X){throw{type:X.type,data:X.type==="error"?ts(X.data):void 0}}let we;try{we=await this.socket.openGame()}catch(X){throw{type:X.type,data:X.type==="error"?is(X.data):void 0}}const _=es(G),K=ss(G,we,this.config.dataDecoder&&qe.decoders[this.config.dataDecoder]);this.sdkConfig.api={...this.sdkConfig.api,brand:a,game:r,integration:c,jurisdiction:_.contract.jurisdiction,playMode:g,user:_.contract.username,integrationData:{token:h},country:_.contract.country,currency:_.contract.currency,coinValueInCents:_.contract.coinValueInCents,gameHistoryUrl:m,homeUrl:C,cashierUrl:P,backendSessionId:K.contract.sessionId,lastRoundId:K.contract.roundId};const Q=(xe=(H=e.get("languageCode"))==null?void 0:H.split("_"))==null?void 0:xe[0];return Q&&(this.sdkConfig.ui.language=Q.length===3?qs[Q]??Q:Q),K}async play(e){for(;!this.socket.socket;)await new Promise(P=>setTimeout(()=>P(),500));const{contract:{bet:s,forcedOutcomes:a,...r},extra:c,payloadToInject:g,actionType:h}=e,p=this.config.dataEncoder&&qe.encoders[this.config.dataEncoder],m={bet:s?{baseBet:s.base,betMultiplier:s.multiplier}:void 0,forcedOutcomes:a,...r,...g,opaqueUiToGameServer:p?p(c):c};let C;try{C=await this.socket.sendAction(h,m)}catch(P){throw{type:P.type,data:P.type==="error"?ns(P.data):void 0}}return as(C,this.config.dataDecoder&&qe.decoders[this.config.dataDecoder])}async freeRounds(e){try{await this.socket.freeRounds(e)}catch{throw{type:"error",data:{code:te.RgsErrorCode.UNKNOWN}}}return e}async getBalance(){try{return{balance:(await this.socket.getBalance()).balance}}catch{throw{type:"error",data:{code:te.RgsErrorCode.UNKNOWN}}}}async showHistory(){const{api:{game:e,integration:s,integrationData:a,jurisdiction:r,user:c,gameHistoryUrl:g},ui:{language:h}}=this.sdkConfig,p=c.replace(/^user_/,"").replace(new RegExp(`_${s}$`),""),m=new URL(window.location.href);m.hostname=m.hostname.replace(/^v\./,"").replace(/^play\./,"history."),m.pathname=m.pathname.replace(/(\/[0-9]+\.[0-9]+\.[0-9]+)?\/wrapper\.html/,"/list/index.html"),m.search="",m.searchParams.set("apiUrl",new URL(g).origin),m.searchParams.set("gameCode",e),r&&m.searchParams.set("jurisdiction",r),m.searchParams.set("operatorCode",s),m.searchParams.set("token",a.token),m.searchParams.set("username",p),m.searchParams.set("languageCode",h),this.config.gameHistoryUrl&&m.searchParams.set("gameHistoryUrl",this.config.gameHistoryUrl),window.open(m.toString(),"_blank")}}class os{constructor(t,e,s){b(this,"trackers");b(this,"config");b(this,"sdkConfig");this.trackers=t,this.config=e,this.sdkConfig=s}on(t,e,s){const a=function(c){c.data.message!==`kalamba:wrapper-telemetry:${t}`&&c.data.message!==`kalamba:wrapper:${t}`||e(c.data.payload)};window.addEventListener("message",a,s)}track(t,e){this.trackers.forEach(s=>s.track(t,e))}}function zt(i){return i.reduce((t,e)=>t+e,0)}function Ks(i){const t=i.length,e=zt(i)/t,s=i.map(r=>Math.pow(r-e,2)),a=zt(s)/t;return Math.sqrt(a)}class qt{constructor(){b(this,"rafId",-1);b(this,"startTime",0);b(this,"stopTime",0);b(this,"frames",[]);b(this,"calculateFPS",()=>{const t=Math.floor((this.stopTime-this.startTime)/1e3);return this.frames.map(e=>Math.floor((e-this.startTime)/1e3)).reduce((e,s,a,r)=>(r[a]!==r[a-1]?e.push(1):e[e.length-1]++,e),[]).slice(0,t)});b(this,"getReport",()=>{const t=this.calculateFPS(),e=Math.floor(this.frames.length/((this.stopTime-this.startTime)/1e3)),s=t.length>0?Math.max(...t):e,a=t.length>0?Math.min(...t):e,r=t.length>0?Ks(t):0;return{fpsAvg:e,fpsMax:s,fpsMin:a,fpsStdDev:r}});b(this,"start",()=>{this.startTime=Date.now(),this.frames=[],this.trackFrames()});b(this,"stop",()=>{cancelAnimationFrame(this.rafId),this.stopTime=Date.now()});b(this,"trackFrames",()=>{this.frames.push(Date.now()),this.rafId=requestAnimationFrame(this.trackFrames)})}}const Qs="landscape",Xs="portrait";function Js(){try{const i=document.createElement("canvas");return!!window.WebGLRenderingContext&&(i.getContext("webgl")||i.getContext("experimental-webgl"))instanceof WebGLRenderingContext}catch{return!1}}async function Ys(){if(!window.createImageBitmap)return!1;const e=await(await fetch("data:image/webp;base64,UklGRiQAAABXRUJQVlA4IBgAAAAwAQCdASoCAAEAAQAcJaQAA3AA/v3AgAA=")).blob();try{return await createImageBitmap(e),!0}catch{return!1}}function ct(){return window.innerWidth>=window.innerHeight?Qs:Xs}var De,ne,oe,re,Ae,Ge,Oe,He;class Zs extends os{constructor(...e){super(...e);b(this,"FPS_SAMPLE_INTERVAL",1e4);M(this,De,0);M(this,ne);M(this,oe);M(this,re);M(this,Ae,!1);M(this,Ge,!1);M(this,Oe,"");M(this,He,[]);E(this,oe,{}),E(this,re,this.deviceInfo()),E(this,ne,this.config.gameVersion),this.on("state",({balance:s})=>{E(this,De,s)}),this.on("autoplay",({action:s})=>{["start","resume"].includes(s)?E(this,Ae,!0):E(this,Ae,!1)}),this.on("settings",({fastPlay:s})=>{s!==void 0&&E(this,Ge,s)}),this.registerEvents()}async registerEvents(){k(this,re).then(e=>{this.track("Device Information",e)}),this.on("loadStart",()=>{this.track("Game Loading",{progress:0,step:"initial"})}),this.on("loadProgress",e=>{this.track("Game Loading",{progress:e.progress})}),this.on("loadEnd",()=>{this.track("Game Loading",{progress:100,step:"complete"})}),this.on("error",e=>{this.track("System Message",{systemMessageText:e.messageCode,systemMessageType:e.type})}),this.on("openGameResponse",async e=>{E(this,Oe,e.contract.stateType.nextRound),E(this,oe,{balanceInCoins:e.contract.balance.coins,clientVersion:k(this,ne),coinValueInCents:this.sdkConfig.api.coinValueInCents,coinValueInCentsFloat:this.sdkConfig.api.coinValueInCents,currency:this.sdkConfig.api.currency,defaultBaseBet:e.contract.bet.default.base,defaultBetMultiplier:e.contract.bet.default.multiplier,environment:"release",gameCode:this.sdkConfig.api.game,gameCodeServer:this.sdkConfig.api.game,gameModelFile:e.contract.gameModel,jurisdiction:this.sdkConfig.api.jurisdiction,languageCode:this.sdkConfig.ui.language,operatorName:"kalamba",partnerId:this.sdkConfig.api.brand,partnerParentId:this.sdkConfig.api.integration,platform:"WEB",playMode:this.sdkConfig.api.playMode,referrer:window.location.hostname,rootTrackingSessionID:this.sdkConfig.api.sessionId,backendSessionID:this.sdkConfig.api.backendSessionId,serverVersion:e.contract.metaData.version}),this.track("Game Open",k(this,oe))}),this.on("playCycleEnd",async e=>{const s=await k(this,re),{base:a,multiplier:r}=e.contract.bet.lastPaid??{},c=e.contract.balance.coins,g=e.contract.bet.lastPaid.base*e.contract.bet.lastPaid.multiplier,h=e.contract.win.total,p=h-g,m="spin",C=e.contract.roundId;this.track("Betting Activity",{balance:c-p,balanceAfter:c,baseBet:a,betMultiplier:r,betType:m,gameVersion:k(this,ne),coinValueInCents:this.sdkConfig.api.coinValueInCents,coinValueInCentsFloat:this.sdkConfig.api.coinValueInCents,currency:this.sdkConfig.api.currency,environment:"release",gameCode:this.sdkConfig.api.game,gameCodeServer:this.sdkConfig.api.game,isMobile:s.isMobile,netResult:p,operatorName:"kalamba",orientation:ct(),partnerId:this.sdkConfig.api.brand,partnerParentId:this.sdkConfig.api.integration,platform:"WEB",playMode:this.sdkConfig.api.playMode,roundId:C,roundTypes:["BaseGame"],totalBet:g,totalWin:h}),E(this,He,[])}),this.on("telemetry.click",e=>{this.track("UI Interaction",{action:"click",...this.getExtraUiInteractionData(),...e})}),this.on("telemetry.orientationChange",()=>{this.track("UI Interaction",{action:"orientationChange",...this.getExtraUiInteractionData()})}),this.reportFpsSample(),this.reportFpsRound()}reportFpsSample(){const e=new qt,s=()=>{e.stop();const r=e.getReport();this.track("FPS Performance",{...r,fpsType:"sample"}),a()},a=async()=>{e.start(),setTimeout(s,this.FPS_SAMPLE_INTERVAL)};a()}reportFpsRound(){const e=new qt;this.on("playCycleStart",()=>{e.start()}),this.on("playCycleEnd",()=>{e.stop();const s=e.getReport();this.track("FPS Performance",{...s,fpsType:"playCycleStart->playCycleEnd"})})}getExtraUiInteractionData(){return{orientation:ct(),stateType:k(this,Oe)}}async deviceInfo(){var g;const{browser:e,device:s,os:a}=B(navigator.userAgent),r=Js(),c=await Ys();return{browserName:e.name,browserVersion:e.version,connection:(g=navigator.connection)==null?void 0:g.effectiveType,deviceName:s.model,deviceType:s.type,isMobile:["mobile","tablet"].includes(s.type??""),isWebGLSupported:r,isWebPSupported:c,manufacturer:s.vendor,operatingSystem:a.name,operatingSystemVersion:a.version,orientation:ct(),pixelRatio:window.devicePixelRatio,screenHeight:window.screen.height,screenSize:`${window.screen.width}x${window.screen.height}`,screenWidth:window.screen.width,timezoneOffsetMinutes:new Date().getTimezoneOffset(),windowHeight:window.innerHeight,windowSize:`${window.innerWidth}x${window.innerHeight}`,windowWidth:window.innerWidth}}}De=new WeakMap,ne=new WeakMap,oe=new WeakMap,re=new WeakMap,Ae=new WeakMap,Ge=new WeakMap,Oe=new WeakMap,He=new WeakMap;var ei=gt.requireNoop();const Wt=gt.getDefaultExportFromCjs(ei);class bt{constructor(t,e){b(this,"config");b(this,"sdkConfig");this.config=t,this.sdkConfig=e}}const jt=25,$t=1e4;var ce,de,le,W;class ti extends bt{constructor(...e){super(...e);M(this,ce,"https://europe-west3-stargazer-328808.cloudfunctions.net/collect-events");M(this,de);M(this,le);M(this,W,[]);b(this,"processQueueForced");E(this,de,new Date().getTime()),E(this,W,[]),this.processQueueForced=this.processQueue.bind(this,!0),this.schedule(),fetch(k(this,ce),{method:"OPTIONS"}).catch(Wt),this.subscribe()}subscribe(){window.addEventListener("beforeunload",this.processQueueForced,!1),window.addEventListener("pagehide",this.processQueueForced,!1),window.addEventListener("visibilitychange",this.processQueueForced,!1)}schedule(){k(this,le)&&clearTimeout(k(this,le)),E(this,le,window.setTimeout(()=>this.processQueue(),$t))}send(e){E(this,de,new Date().getTime());try{navigator.sendBeacon(k(this,ce),JSON.stringify(e))}catch{fetch(k(this,ce),{body:JSON.stringify(e),method:"POST",headers:{"Content-Type":"application/json"},keepalive:!0}).catch(Wt)}this.schedule()}addToQueue(e){k(this,W).push(e),this.processQueue()}processQueue(e=!1){if(!(this.sdkConfig==null||!this.sdkConfig.ui.feature.allowTelemetry)&&!(!e&&k(this,W).length<jt&&new Date().getTime()-k(this,de)<$t))for(;k(this,W).length;){const s=k(this,W).splice(0,jt).map(a=>({...a,sessionID:this.sdkConfig.api.sessionId,userID:this.sdkConfig.api.user}));this.send(s)}}track(e,s){this.addToQueue({eventName:e,eventParams:s,eventTimestamp:new Date().getTime(),eventUUID:gt.v4()})}}ce=new WeakMap,de=new WeakMap,le=new WeakMap,W=new WeakMap;const si=A("LoggingTracker","color:#000000;font-weight:bold;");class ii extends bt{track(t,e){si(`@${this.sdkConfig.api.user}`,`[${t}]`,e)}}exports.BasicPlugin=ls;exports.CasinoPlugin=R;exports.DebuggingPlugin=hs;exports.EveryMatrixPlugin=Ms;exports.GigPlugin=gs;exports.KalambaBullseyeParsers=zs;exports.KalambaBullseyePlugin=$s;exports.KalambaStargazerPlugin=Zs;exports.KalambaStargazerTracker=ti;exports.LoggingTracker=ii;exports.OryxPlugin=ws;exports.PariplayPlugin=ys;exports.QuantaPlugin=vs;exports.RelaxFEIMPlugin=ks;exports.RgsPlugin=Zt;exports.SoftSwissPlugin=Cs;exports.TelemetryPlugin=os;exports.Tracker=bt;exports.TukoPlugin=Es;
package/dist/plugins.d.ts CHANGED
@@ -183,6 +183,11 @@ declare type FreeRoundsAction = {
183
183
  id: string;
184
184
  };
185
185
 
186
+ declare type FreeRoundsRequest = {
187
+ id: string;
188
+ action: 'ACCEPT' | 'DECLINE' | 'SKIP';
189
+ };
190
+
186
191
  declare type FreeRoundsResponse = {
187
192
  action: 'ACCEPT' | 'DECLINE' | 'SKIP';
188
193
  id: string;
@@ -222,6 +227,10 @@ declare const GameEventResponseCode: {
222
227
  readonly OK: 1;
223
228
  };
224
229
 
230
+ declare type GetBalanceResponse = {
231
+ balance: number;
232
+ };
233
+
225
234
  export declare class GigPlugin extends CasinoPlugin {
226
235
  constructor(...args: ConstructorParameters<typeof CasinoPlugin>);
227
236
  postMessage(event: unknown): void;
@@ -244,15 +253,14 @@ export declare const KalambaBullseyeParsers: {
244
253
 
245
254
  export declare class KalambaBullseyePlugin extends RgsPlugin {
246
255
  socket: KalambaWebSocketClient;
247
- error?: RgsErrorWithType;
248
256
  constructor(...args: ConstructorParameters<typeof RgsPlugin>);
249
257
  initialize(init: KalambaWebSocketClientInit): void;
250
258
  reconnect(): Promise<void>;
251
259
  openGame(): Promise<OpenGameResponse>;
252
- play(payload: PlayRequest & {
253
- payloadToInject?: Record<string, unknown>;
254
- }): Promise<PlayResponse>;
255
- registerFromSdkEvents(): void;
260
+ play(payload: PlayRequestEnhanced): Promise<PlayResponse>;
261
+ freeRounds(payload: FreeRoundsRequest): Promise<FreeRoundsResponse>;
262
+ getBalance(): Promise<GetBalanceResponse>;
263
+ showHistory(): Promise<void>;
256
264
  }
257
265
 
258
266
  export declare class KalambaStargazerPlugin extends TelemetryPlugin {
@@ -571,6 +579,10 @@ declare type PlayRequest = {
571
579
  actionType: string;
572
580
  };
573
581
 
582
+ declare type PlayRequestEnhanced = PlayRequest & {
583
+ payloadToInject?: Record<string, unknown>;
584
+ };
585
+
574
586
  declare type PlayResponse = {
575
587
  contract: {
576
588
  bet: {
@@ -731,9 +743,15 @@ declare type RgsOnlyMessagePayloadMap = {
731
743
  export declare abstract class RgsPlugin {
732
744
  config: WrapperConfig;
733
745
  sdkConfig: SdkConfig;
746
+ error?: RgsErrorWithType;
734
747
  constructor(config: WrapperConfig, sdkConfig: SdkConfig);
735
748
  protected on<M extends DomainMessage<'wrapper'> | ForwardToPluginsMessage<'rgs'>>(message: M, listener: (payload: M extends DomainMessage<'wrapper'> ? DomainMessagePayload<'wrapper', M> : M extends ForwardToPluginsMessage<'rgs'> ? ForwardToPluginsMessagePayload<'rgs', M> : never) => void, options?: AddEventListenerOptions): void;
736
749
  protected send<M extends DomainMessage<'rgs'>>(message: M, ...[payload]: DomainMessagePayload<'rgs', M> extends never ? [] : undefined extends DomainMessagePayload<'rgs', M> ? [] | [DomainMessagePayload<'rgs', M>] : [DomainMessagePayload<'rgs', M>]): void;
750
+ openGame(): Promise<OpenGameResponse>;
751
+ play(payload: PlayRequestEnhanced): Promise<PlayResponse>;
752
+ freeRounds(payload: FreeRoundsRequest): Promise<FreeRoundsResponse>;
753
+ getBalance(): Promise<GetBalanceResponse>;
754
+ showHistory(): Promise<void>;
737
755
  }
738
756
 
739
757
  declare interface SdkConfig {
@@ -803,6 +821,7 @@ declare interface SdkConfig {
803
821
  realityCheck: RealityCheckConfig;
804
822
  skipInsufficientFundsCheck: boolean;
805
823
  skipSplash: boolean;
824
+ cheatPanel: boolean;
806
825
  };
807
826
  }
808
827
 
@@ -978,6 +997,7 @@ declare type WrapperConfig = {
978
997
  gameVersion: string;
979
998
  gameHistoryUrl?: string;
980
999
  showFreeRounds: boolean;
1000
+ showPromoPanel: boolean;
981
1001
  showRealityCheck: boolean;
982
1002
  showErrors: boolean;
983
1003
  showBars: boolean;
@@ -996,9 +1016,7 @@ declare type WrapperOnlyMessagePayloadMap = {
996
1016
  suspend: never;
997
1017
  unfreeze: never;
998
1018
  legalBets: Record<number, number[]>;
999
- play: PlayRequest & {
1000
- payloadToInject?: Record<string, unknown>;
1001
- };
1019
+ play: PlayRequestEnhanced;
1002
1020
  freeRounds: FreeRoundsAction;
1003
1021
  freeRoundsOffer: FreeRound;
1004
1022
  freeRoundsInfo: FreeRound;