import{r as e}from"./vendor-react-RSDKEZ60.js";const t={fetch:globalThis.fetch?globalThis.fetch.bind(globalThis):void 0,SubtleCrypto:globalThis.crypto?globalThis.crypto.subtle:void 0,EventSource:globalThis.EventSource};function r(e){let t=2166136261;const r=e.length;for(let n=0;n<r;n++)t^=e.charCodeAt(n),t+=(t<<1)+(t<<4)+(t<<7)+(t<<8)+(t<<24);return t>>>0}function n(e,t,n){return 2===n?r(r(e+t)+"")%1e4/1e4:1===n?r(t+e)%1e3/1e3:null}function s(e,t){return e>=t[0]&&e<t[1]}function i(e){try{const t=e.replace(/([^\\])\//g,"$1\\/");return new RegExp(t)}catch(t){return void console.error(t)}}function o(e,t){if(!t.length)return!1;let r=!1,n=!1;for(let s=0;s<t.length;s++){const i=u(e,t[s].type,t[s].pattern);if(!1===t[s].include){if(i)return!1}else r=!0,i&&(n=!0)}return n||!r}function a(e,t){try{const r=new URL(t.replace(/^([^:/?]*)\./i,"https://$1.").replace(/\*/g,"_____"),"https://_____"),n=[[e.host,r.host,!1],[e.pathname,r.pathname,!0]];return r.hash&&n.push([e.hash,r.hash,!1]),r.searchParams.forEach((t,r)=>{n.push([e.searchParams.get(r)||"",t,!1])}),!n.some(e=>!function(e,t,r){try{let n=t.replace(/[*.+?^${}()|[\]\\]/g,"\\$&").replace(/_____/g,".*");return r&&(n="\\/?"+n.replace(/(^\/|\/$)/g,"")+"\\/?"),new RegExp("^"+n+"$","i").test(e)}catch(n){return!1}}(e[0],e[1],e[2]))}catch(r){return!1}}function u(e,t,r){try{const n=new URL(e,"https://_");if("regex"===t){const e=i(r);return!!e&&(e.test(n.href)||e.test(n.href.substring(n.origin.length)))}return"simple"===t&&a(n,r)}catch(n){return!1}}function c(e,t,r){(t=void 0===t?1:t)<0?t=0:t>1&&(t=1);const n=(s=e)<=0?[]:new Array(s).fill(1/s);var s;(r=r||n).length!==e&&(r=n);const i=r.reduce((e,t)=>t+e,0);(i<.99||i>1.01)&&(r=n);let o=0;return r.map(e=>{const r=o;return o+=e,[r,r+t*e]})}const l=e=>Uint8Array.from(atob(e),e=>e.charCodeAt(0));async function h(e,r,n){if(r=r||"",!(n=n||globalThis.crypto&&globalThis.crypto.subtle||t.SubtleCrypto))throw new Error("No SubtleCrypto implementation found");try{const t=await n.importKey("raw",l(r),{name:"AES-CBC",length:128},!0,["encrypt","decrypt"]),[s,i]=e.split("."),o=await n.decrypt({name:"AES-CBC",iv:l(s)},t,l(i));return(new TextDecoder).decode(o)}catch(s){throw new Error("Failed to decrypt")}}function d(e){return"string"==typeof e?e:JSON.stringify(e)}function f(e){"number"==typeof e&&(e+=""),e&&"string"==typeof e||(e="0");const t=e.replace(/(^v|\+.*$)/g,"").split(/[-.]/);return 3===t.length&&t.push("~"),t.map(e=>e.match(/^[0-9]+$/)?e.padStart(5," "):e).join("-")}function p(e){return"object"==typeof e&&null!==e}function g(e){return e.urlPatterns&&e.variations.some(e=>p(e)&&"urlRedirect"in e)?"redirect":e.variations.some(e=>p(e)&&(e.domMutations||"js"in e||"css"in e))?"visual":"unknown"}async function m(e,t){return new Promise(r=>{let n,s=!1;const i=e=>{s||(s=!0,n&&clearTimeout(n),r(e||null))};t&&(n=setTimeout(()=>i(),t)),e.then(e=>i(e)).catch(()=>i())})}const y={staleTTL:6e4,maxAge:144e5,cacheKey:"gbFeaturesCache",backgroundSync:!0,maxEntries:10,disableIdleStreams:!1,idleStreamInterval:2e4,disableCache:!1},v=t,b={fetchFeaturesCall:e=>{let{host:t,clientKey:r,headers:n}=e;return v.fetch(`${t}/api/features/${r}`,{headers:n})},fetchRemoteEvalCall:e=>{let{host:t,clientKey:r,payload:n,headers:s}=e;const i={method:"POST",headers:{"Content-Type":"application/json",...s},body:JSON.stringify(n)};return v.fetch(`${t}/api/eval/${r}`,i)},eventSourceCall:e=>{let{host:t,clientKey:r,headers:n}=e;return n?new v.EventSource(`${t}/sub/${r}`,{headers:n}):new v.EventSource(`${t}/sub/${r}`)},startIdleListener:()=>{let e;if(!("undefined"!=typeof window&&"undefined"!=typeof document))return;const t=()=>{"visible"===document.visibilityState?(window.clearTimeout(e),w.forEach(e=>{e&&"idle"===e.state&&L(e)})):"hidden"===document.visibilityState&&(e=window.setTimeout(C,y.idleStreamInterval))};return document.addEventListener("visibilitychange",t),()=>document.removeEventListener("visibilitychange",t)},stopIdleListener:()=>{}};try{globalThis.localStorage&&(v.localStorage=globalThis.localStorage)}catch(We){}const k=new Map;let _=!1;const A=new Map,E=new Map,w=new Map,x=new Set;async function S(e){let{instance:t,timeout:r,skipCache:n,allowStale:s,backgroundSync:i}=e;return i||(y.backgroundSync=!1),async function(e){let{instance:t,allowStale:r,timeout:n,skipCache:s}=e;const i=V(t),o=D(t),a=new Date,u=new Date(a.getTime()-y.maxAge+y.staleTTL);await async function(){if(_)return;_=!0;try{if(v.localStorage){const e=await v.localStorage.getItem(y.cacheKey);if(!y.disableCache&&e){const t=JSON.parse(e);t&&Array.isArray(t)&&t.forEach(e=>{let[t,r]=e;A.set(t,{...r,staleAt:new Date(r.staleAt)})}),F()}}}catch(We){}if(!y.disableIdleStreams){const e=b.startIdleListener();e&&(b.stopIdleListener=e)}}();const c=y.disableCache||s?void 0:A.get(o);if(c&&(r||c.staleAt>a)&&c.staleAt>u)return c.sse&&x.add(i),c.staleAt<a?$(t):I(t),{data:c.data,success:!0,source:"cache"};return await m($(t),n)||{data:null,success:!1,source:"timeout",error:new Error("Timeout")}}({instance:t,allowStale:s,timeout:r,skipCache:n})}function C(){w.forEach(e=>{e&&(e.state="idle",R(e))})}async function B(){try{if(!v.localStorage)return;await v.localStorage.setItem(y.cacheKey,JSON.stringify(Array.from(A.entries())))}catch(We){}}function V(e){const[t,r]=e.getApiInfo();return`${t}||${r}`}function D(e){const t=V(e);if(!("isRemoteEval"in e)||!e.isRemoteEval())return t;const r=e.getAttributes(),n=e.getCacheKeyAttributes()||Object.keys(e.getAttributes()),s={};n.forEach(e=>{s[e]=r[e]});const i=e.getForcedVariations(),o=e.getUrl();return`${t}||${JSON.stringify({ca:s,fv:i,url:o})}`}function F(){const e=Array.from(A.entries()).map(e=>{let[t,r]=e;return{key:t,staleAt:r.staleAt.getTime()}}).sort((e,t)=>e.staleAt-t.staleAt),t=Math.min(Math.max(0,A.size-y.maxEntries),A.size);for(let r=0;r<t;r++)A.delete(e[r].key)}function T(e,t,r){const n=r.dateUpdated||"",s=new Date(Date.now()+y.staleTTL),i=y.disableCache?void 0:A.get(t);if(i&&n&&i.version===n)return i.staleAt=s,void B();y.disableCache||(A.set(t,{data:r,version:n,staleAt:s,sse:x.has(e)}),F()),B();const o=k.get(e);o&&o.forEach(e=>async function(e,t){await e.setPayload(t||e.getPayload())}(e,r))}async function $(e){const{apiHost:t,apiRequestHeaders:r}=e.getApiHosts(),n=e.getClientKey(),s="isRemoteEval"in e&&e.isRemoteEval(),i=V(e),o=D(e);let a=E.get(o);if(!a){a=(s?b.fetchRemoteEvalCall({host:t,clientKey:n,payload:{attributes:e.getAttributes(),forcedVariations:e.getForcedVariations(),forcedFeatures:Array.from(e.getForcedFeatures().entries()),url:e.getUrl()},headers:r}):b.fetchFeaturesCall({host:t,clientKey:n,headers:r})).then(e=>{if(!e.ok)throw new Error(`HTTP error: ${e.status}`);return"enabled"===e.headers.get("x-sse-support")&&x.add(i),e.json()}).then(t=>(T(i,o,t),I(e),E.delete(o),{data:t,success:!0,source:"network"})).catch(e=>(E.delete(o),{data:null,source:"error",success:!1,error:e})),E.set(o,a)}return a}function I(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const r=V(e),n=D(e),{streamingHost:s,streamingHostRequestHeaders:i}=e.getApiHosts(),o=e.getClientKey();if(t&&x.add(r),y.backgroundSync&&x.has(r)&&v.EventSource){if(w.has(r))return;const e={src:null,host:s,clientKey:o,headers:i,cb:t=>{try{if("features-updated"===t.type){const e=k.get(r);e&&e.forEach(e=>{$(e)})}else if("features"===t.type){const e=JSON.parse(t.data);T(r,n,e)}e.errors=0}catch(We){M(e)}},errors:0,state:"active"};w.set(r,e),L(e)}}function M(e){if("idle"!==e.state&&(e.errors++,e.errors>3||e.src&&2===e.src.readyState)){const t=Math.pow(3,e.errors-3)*(1e3+1e3*Math.random());R(e),setTimeout(()=>{["idle","active"].includes(e.state)||L(e)},Math.min(t,3e5))}}function R(e){e.src&&(e.src.onopen=null,e.src.onerror=null,e.src.close(),e.src=null,"active"===e.state&&(e.state="disabled"))}function L(e){e.src=b.eventSourceCall({host:e.host,clientKey:e.clientKey,headers:e.headers}),e.state="active",e.src.addEventListener("features",e.cb),e.src.addEventListener("features-updated",e.cb),e.src.onerror=()=>M(e),e.src.onopen=()=>{e.errors=0}}function N(e,t){R(e),w.delete(t)}function U(){x.clear(),w.forEach(N),k.clear(),b.stopIdleListener()}function O(e,t){if(t.streaming){if(!e.getClientKey())throw new Error("Must specify clientKey to enable streaming");t.payload&&I(e,!0),function(e){const t=V(e),r=k.get(t)||new Set;r.add(e),k.set(t,r)}(e)}}var K=/^[a-zA-Z:_][a-zA-Z0-9:_.-]*$/,P={revert:function(){}},H=new Map,j=new Set;function q(e){var t=H.get(e);return t||(t={element:e,attributes:{}},H.set(e,t)),t}function G(e,t,r,n,s){var i=r(e),o={isDirty:!1,originalValue:i,virtualValue:i,mutations:[],el:e,_positionTimeout:null,observer:new MutationObserver(function(){if("position"!==t||!o._positionTimeout){"position"===t&&(o._positionTimeout=setTimeout(function(){o._positionTimeout=null},1e3));var n=r(e);"position"===t&&n.parentNode===o.virtualValue.parentNode&&n.insertBeforeNode===o.virtualValue.insertBeforeNode||n!==o.virtualValue&&(o.originalValue=n,s(o))}}),mutationRunner:s,setValue:n,getCurrentValue:r};return"position"===t&&e.parentNode?o.observer.observe(e.parentNode,{childList:!0,subtree:!0,attributes:!1,characterData:!1}):o.observer.observe(e,function(e){return"html"===e?{childList:!0,subtree:!0,attributes:!0,characterData:!0}:{childList:!1,subtree:!1,attributes:!0,attributeFilter:[e]}}(t)),o}function J(e,t){var r=t.getCurrentValue(t.el);t.virtualValue=e,e&&"string"!=typeof e?r&&e.parentNode===r.parentNode&&e.insertBeforeNode===r.insertBeforeNode||(t.isDirty=!0,de()):e!==r&&(t.isDirty=!0,de())}function z(e){var t=e.originalValue;e.mutations.forEach(function(e){return t=e.mutate(t)}),J(function(e){ae||(ae=document.createElement("div"));return ae.innerHTML=e,ae.innerHTML}(t),e)}function Z(e){var t=new Set(e.originalValue.split(/\s+/).filter(Boolean));e.mutations.forEach(function(e){return e.mutate(t)}),J(Array.from(t).filter(Boolean).join(" "),e)}function Q(e){var t=e.originalValue;e.mutations.forEach(function(e){return t=e.mutate(t)}),J(t,e)}function W(e){var t=e.originalValue;e.mutations.forEach(function(e){var r=function(e){var t=e.parentSelector,r=e.insertBeforeSelector,n=document.querySelector(t);if(!n)return null;var s=r?document.querySelector(r):null;return r&&!s?null:{parentNode:n,insertBeforeNode:s}}(e.mutate());t=r||t}),J(t,e)}var X=function(e){return e.innerHTML},Y=function(e,t){return e.innerHTML=t};function ee(e){var t=q(e);return t.html||(t.html=G(e,"html",X,Y,z)),t.html}var te=function(e){return{parentNode:e.parentElement,insertBeforeNode:e.nextElementSibling}},re=function(e,t){t.insertBeforeNode&&!t.parentNode.contains(t.insertBeforeNode)||t.parentNode.insertBefore(e,t.insertBeforeNode)};function ne(e){var t=q(e);return t.position||(t.position=G(e,"position",te,re,W)),t.position}var se=function(e,t){return t?e.className=t:e.removeAttribute("class")},ie=function(e){return e.className};function oe(e){var t=q(e);return t.classes||(t.classes=G(e,"class",ie,se,Z)),t.classes}var ae,ue;function ce(e,t){var r,n=q(e);return n.attributes[t]||(n.attributes[t]=G(e,t,(r=t,function(e){var t;return null!=(t=e.getAttribute(r))?t:null}),function(e){return function(t,r){return null!==r?t.setAttribute(e,r):t.removeAttribute(e)}}(t),Q)),n.attributes[t]}function le(e,t,r){if(r.isDirty){r.isDirty=!1;var n=r.virtualValue;r.mutations.length||function(e,t){var r,n,s=H.get(e);if(s)if("html"===t)null==(r=s.html)||null==(n=r.observer)||n.disconnect(),delete s.html;else if("class"===t){var i,o;null==(i=s.classes)||null==(o=i.observer)||o.disconnect(),delete s.classes}else if("position"===t){var a,u;null==(a=s.position)||null==(u=a.observer)||u.disconnect(),delete s.position}else{var c,l,h;null==(c=s.attributes)||null==(l=c[t])||null==(h=l.observer)||h.disconnect(),delete s.attributes[t]}}(e,t),r.setValue(e,n)}}function he(e,t){e.html&&le(t,"html",e.html),e.classes&&le(t,"class",e.classes),e.position&&le(t,"position",e.position),Object.keys(e.attributes).forEach(function(r){le(t,r,e.attributes[r])})}function de(){H.forEach(he)}function fe(e){if("position"!==e.kind||1!==e.elements.size){var t=new Set(e.elements);document.querySelectorAll(e.selector).forEach(function(r){t.has(r)||(e.elements.add(r),function(e,t){var r=null;"html"===e.kind?r=ee(t):"class"===e.kind?r=oe(t):"attribute"===e.kind?r=ce(t,e.attribute):"position"===e.kind&&(r=ne(t)),r&&(r.mutations.push(e),r.mutationRunner(r))}(e,r))})}}function pe(e){e.elements.forEach(function(t){return function(e,t){var r=null;if("html"===e.kind?r=ee(t):"class"===e.kind?r=oe(t):"attribute"===e.kind?r=ce(t,e.attribute):"position"===e.kind&&(r=ne(t)),r){var n=r.mutations.indexOf(e);-1!==n&&r.mutations.splice(n,1),r.mutationRunner(r)}}(e,t)}),e.elements.clear(),j.delete(e)}function ge(){j.forEach(fe)}function me(e){return"undefined"==typeof document?P:(j.add(e),fe(e),{revert:function(){pe(e)}})}function ye(e,t){return me({kind:"html",elements:new Set,mutate:t,selector:e})}function ve(e,t){return me({kind:"position",elements:new Set,mutate:t,selector:e})}function be(e,t){return me({kind:"class",elements:new Set,mutate:t,selector:e})}function ke(e,t,r){return K.test(t)?"class"===t||"className"===t?be(e,function(e){var t=r(Array.from(e).join(" "));e.clear(),t&&t.split(/\s+/g).filter(Boolean).forEach(function(t){return e.add(t)})}):me({kind:"attribute",attribute:t,elements:new Set,mutate:r,selector:e}):P}"undefined"!=typeof document&&(ue||(ue=new MutationObserver(function(){ge()})),ge(),ue.observe(document.documentElement,{childList:!0,subtree:!0,attributes:!1,characterData:!1}));var _e={html:ye,classes:be,attribute:ke,position:ve,declarative:function(e){var t=e.selector,r=e.action,n=e.value,s=e.attribute,i=e.parentSelector,o=e.insertBeforeSelector;if("html"===s){if("append"===r)return ye(t,function(e){return e+(null!=n?n:"")});if("set"===r)return ye(t,function(){return null!=n?n:""})}else if("class"===s){if("append"===r)return be(t,function(e){n&&e.add(n)});if("remove"===r)return be(t,function(e){n&&e.delete(n)});if("set"===r)return be(t,function(e){e.clear(),n&&e.add(n)})}else if("position"===s){if("set"===r&&i)return ve(t,function(){return{insertBeforeSelector:o,parentSelector:i}})}else{if("append"===r)return ke(t,s,function(e){return null!==e?e+(null!=n?n:""):null!=n?n:""});if("set"===r)return ke(t,s,function(){return null!=n?n:""});if("remove"===r)return ke(t,s,function(){return null})}return P}};const Ae={};function Ee(e,t,r){r=r||{};for(const[n,s]of Object.entries(t))switch(n){case"$or":if(!Ve(e,s,r))return!1;break;case"$nor":if(Ve(e,s,r))return!1;break;case"$and":if(!De(e,s,r))return!1;break;case"$not":if(Ee(e,s,r))return!1;break;default:if(!xe(s,we(e,n),r))return!1}return!0}function we(e,t){const r=t.split(".");let n=e;for(let s=0;s<r.length;s++){if(!n||"object"!=typeof n||!(r[s]in n))return null;n=n[r[s]]}return n}function xe(e,t,r){if("string"==typeof e)return t+""===e;if("number"==typeof e)return 1*t===e;if("boolean"==typeof e)return null!==t&&!!t===e;if(null===e)return null===t;if(Array.isArray(e)||!Se(e))return JSON.stringify(t)===JSON.stringify(e);for(const n in e)if(!Be(n,t,e[n],r))return!1;return!0}function Se(e){const t=Object.keys(e);return t.length>0&&t.filter(e=>"$"===e[0]).length===t.length}function Ce(e,t){return Array.isArray(e)?e.some(e=>t.includes(e)):t.includes(e)}function Be(e,t,r,n){switch(e){case"$veq":return f(t)===f(r);case"$vne":return f(t)!==f(r);case"$vgt":return f(t)>f(r);case"$vgte":return f(t)>=f(r);case"$vlt":return f(t)<f(r);case"$vlte":return f(t)<=f(r);case"$eq":return t===r;case"$ne":return t!==r;case"$lt":return t<r;case"$lte":return t<=r;case"$gt":return t>r;case"$gte":return t>=r;case"$exists":return r?null!=t:null==t;case"$in":return!!Array.isArray(r)&&Ce(t,r);case"$inGroup":return Ce(t,n[r]||[]);case"$notInGroup":return!Ce(t,n[r]||[]);case"$nin":return!!Array.isArray(r)&&!Ce(t,r);case"$not":return!xe(r,t,n);case"$size":return!!Array.isArray(t)&&xe(r,t.length,n);case"$elemMatch":return function(e,t,r){if(!Array.isArray(e))return!1;const n=Se(t)?e=>xe(t,e,r):e=>Ee(e,t,r);for(let s=0;s<e.length;s++)if(e[s]&&n(e[s]))return!0;return!1}(t,r,n);case"$all":if(!Array.isArray(t))return!1;for(let e=0;e<r.length;e++){let s=!1;for(let i=0;i<t.length;i++)if(xe(r[e],t[i],n)){s=!0;break}if(!s)return!1}return!0;case"$regex":try{return(s=r,Ae[s]||(Ae[s]=new RegExp(s.replace(/([^\\])\//g,"$1\\/"))),Ae[s]).test(t)}catch(We){return!1}case"$type":return function(e){if(null===e)return"null";if(Array.isArray(e))return"array";const t=typeof e;return["string","number","boolean","object","undefined"].includes(t)?t:"unknown"}(t)===r;default:return console.error("Unknown operator: "+e),!1}var s}function Ve(e,t,r){if(!t.length)return!0;for(let n=0;n<t.length;n++)if(Ee(e,t[n],r))return!0;return!1}function De(e,t,r){for(let n=0;n<t.length;n++)if(!Ee(e,t[n],r))return!1;return!0}async function Fe(e){try{await e()}catch(We){}}function Te(e,t,r){if(e.user.trackedExperiments){const n=qe(t,r);if(e.user.trackedExperiments.has(n))return[];e.user.trackedExperiments.add(n)}e.user.enableDevMode&&e.user.devLogs&&e.user.devLogs.push({experiment:t,result:r,timestamp:Date.now().toString(),logType:"experiment"});const n=[];if(e.global.trackingCallback){const s=e.global.trackingCallback;n.push(Fe(()=>s(t,r,e.user)))}if(e.user.trackingCallback){const s=e.user.trackingCallback;n.push(Fe(()=>s(t,r)))}if(e.global.eventLogger){const s=e.global.eventLogger;n.push(Fe(()=>s("Experiment Viewed",{experimentId:t.key,variationId:r.key,hashAttribute:r.hashAttribute,hashValue:r.hashValue},e.user)))}return n}function $e(e,t){if(t.stack.evaluatedFeatures.has(e))return Me(t,e,null,"cyclicPrerequisite");t.stack.evaluatedFeatures.add(e),t.stack.id=e;const r=function(e){const t=new Map;return e.global.forcedFeatureValues&&e.global.forcedFeatureValues.forEach((e,r)=>t.set(r,e)),e.user.forcedFeatureValues&&e.user.forcedFeatureValues.forEach((e,r)=>t.set(r,e)),t}(t);if(r.has(e))return Me(t,e,r.get(e),"override");if(!t.global.features||!t.global.features[e])return Me(t,e,null,"unknownFeature");const n=t.global.features[e];if(n.rules){const r=new Set(t.stack.evaluatedFeatures);e:for(const s of n.rules){if(s.parentConditions)for(const o of s.parentConditions){t.stack.evaluatedFeatures=new Set(r);const n=$e(o.id,t);if("cyclicPrerequisite"===n.source)return Me(t,e,null,"cyclicPrerequisite");if(!Ee({value:n.value},o.condition||{})){if(o.gate)return Me(t,e,null,"prerequisite");continue e}}if(s.filters&&Ne(s.filters,t))continue;if("force"in s){if(s.condition&&!Le(s.condition,t))continue;if(!Ue(t,s.seed||e,s.hashAttribute,t.user.saveStickyBucketAssignmentDoc&&!s.disableStickyBucketing?s.fallbackAttribute:void 0,s.range,s.coverage,s.hashVersion))continue;return s.tracks&&s.tracks.forEach(e=>{!Te(t,e.experiment,e.result).length&&t.global.saveDeferredTrack&&t.global.saveDeferredTrack({experiment:e.experiment,result:e.result})}),Me(t,e,s.force,"force",s.id)}if(!s.variations)continue;const n={variations:s.variations,key:s.key||e};"coverage"in s&&(n.coverage=s.coverage),s.weights&&(n.weights=s.weights),s.hashAttribute&&(n.hashAttribute=s.hashAttribute),s.fallbackAttribute&&(n.fallbackAttribute=s.fallbackAttribute),s.disableStickyBucketing&&(n.disableStickyBucketing=s.disableStickyBucketing),void 0!==s.bucketVersion&&(n.bucketVersion=s.bucketVersion),void 0!==s.minBucketVersion&&(n.minBucketVersion=s.minBucketVersion),s.namespace&&(n.namespace=s.namespace),s.meta&&(n.meta=s.meta),s.ranges&&(n.ranges=s.ranges),s.name&&(n.name=s.name),s.phase&&(n.phase=s.phase),s.seed&&(n.seed=s.seed),s.hashVersion&&(n.hashVersion=s.hashVersion),s.filters&&(n.filters=s.filters),s.condition&&(n.condition=s.condition);const{result:i}=Ie(n,e,t);if(t.global.onExperimentEval&&t.global.onExperimentEval(n,i),i.inExperiment&&!i.passthrough)return Me(t,e,i.value,"experiment",s.id,n,i)}}return Me(t,e,void 0===n.defaultValue?null:n.defaultValue,"defaultValue")}function Ie(e,t,r){const a=e.key,u=e.variations.length;if(u<2)return{result:Oe(r,e,-1,!1,t)};if(!1===r.global.enabled||!1===r.user.enabled)return{result:Oe(r,e,-1,!1,t)};if(e=function(e,t){const r=e.key,n=t.global.overrides;n&&n[r]&&"string"==typeof(e=Object.assign({},e,n[r])).url&&(e.url=i(e.url));return e}(e,r),e.urlPatterns&&!o(r.user.url||"",e.urlPatterns))return{result:Oe(r,e,-1,!1,t)};const l=function(e,t,r){if(!t)return null;const n=t.split("?")[1];if(!n)return null;const s=n.replace(/#.*/,"").split("&").map(e=>e.split("=",2)).filter(t=>{let[r]=t;return r===e}).map(e=>{let[,t]=e;return parseInt(t)});return s.length>0&&s[0]>=0&&s[0]<r?s[0]:null}(a,r.user.url||"",u);if(null!==l)return{result:Oe(r,e,l,!1,t)};const h=function(e){return e.global.forcedVariations&&e.user.forcedVariations?{...e.global.forcedVariations,...e.user.forcedVariations}:e.global.forcedVariations?e.global.forcedVariations:e.user.forcedVariations?e.user.forcedVariations:{}}(r);if(a in h){return{result:Oe(r,e,h[a],!1,t)}}if("draft"===e.status||!1===e.active)return{result:Oe(r,e,-1,!1,t)};const{hashAttribute:f,hashValue:p}=Ke(r,e.hashAttribute,r.user.saveStickyBucketAssignmentDoc&&!e.disableStickyBucketing?e.fallbackAttribute:void 0);if(!p)return{result:Oe(r,e,-1,!1,t)};let g=-1,m=!1,y=!1;if(r.user.saveStickyBucketAssignmentDoc&&!e.disableStickyBucketing){const{variation:t,versionIsBlocked:n}=function(e){let{ctx:t,expKey:r,expBucketVersion:n,expHashAttribute:s,expFallbackAttribute:i,expMinBucketVersion:o,expMeta:a}=e;n=n||0,o=o||0,s=s||"id",a=a||[];const u=Pe(r,n),c=function(e,t,r){if(!e.user.stickyBucketAssignmentDocs)return{};const{hashAttribute:n,hashValue:s}=Ke(e,t),i=He(n,d(s)),{hashAttribute:o,hashValue:a}=Ke(e,r),u=a?He(o,d(a)):null,c={};u&&e.user.stickyBucketAssignmentDocs[u]&&Object.assign(c,e.user.stickyBucketAssignmentDocs[u].assignments||{});e.user.stickyBucketAssignmentDocs[i]&&Object.assign(c,e.user.stickyBucketAssignmentDocs[i].assignments||{});return c}(t,s,i);if(o>0)for(let d=0;d<o;d++){if(void 0!==c[Pe(r,d)])return{variation:-1,versionIsBlocked:!0}}const l=c[u];if(void 0===l)return{variation:-1};const h=a.findIndex(e=>e.key===l);return h<0?{variation:-1}:{variation:h}}({ctx:r,expKey:e.key,expBucketVersion:e.bucketVersion,expHashAttribute:e.hashAttribute,expFallbackAttribute:e.fallbackAttribute,expMinBucketVersion:e.minBucketVersion,expMeta:e.meta});m=t>=0,g=t,y=!!n}if(!m){if(e.filters){if(Ne(e.filters,r))return{result:Oe(r,e,-1,!1,t)}}else if(e.namespace&&!function(e,t){const r=n("__"+t[0],e,1);return null!==r&&r>=t[1]&&r<t[2]}(p,e.namespace))return{result:Oe(r,e,-1,!1,t)};if(e.include&&!function(e){try{return e()}catch(We){return console.error(We),!1}}(e.include))return{result:Oe(r,e,-1,!1,t)};if(e.condition&&!Le(e.condition,r))return{result:Oe(r,e,-1,!1,t)};if(e.parentConditions){const n=new Set(r.stack.evaluatedFeatures);for(const s of e.parentConditions){r.stack.evaluatedFeatures=new Set(n);const i=$e(s.id,r);if("cyclicPrerequisite"===i.source)return{result:Oe(r,e,-1,!1,t)};if(!Ee({value:i.value},s.condition||{}))return{result:Oe(r,e,-1,!1,t)}}}if(e.groups&&!function(e,t){const r=t.global.groups||{};for(let n=0;n<e.length;n++)if(r[e[n]])return!0;return!1}(e.groups,r))return{result:Oe(r,e,-1,!1,t)}}if(e.url&&!function(e,t){const r=t.user.url;if(!r)return!1;const n=r.replace(/^https?:\/\//,"").replace(/^[^/]*\//,"/");return!!e.test(r)||!!e.test(n)}(e.url,r))return{result:Oe(r,e,-1,!1,t)};const v=n(e.seed||a,p,e.hashVersion||1);if(null===v)return{result:Oe(r,e,-1,!1,t)};if(!m){g=function(e,t){for(let r=0;r<t.length;r++)if(s(e,t[r]))return r;return-1}(v,e.ranges||c(u,void 0===e.coverage?1:e.coverage,e.weights))}if(y)return{result:Oe(r,e,-1,!1,t,void 0,!0)};if(g<0)return{result:Oe(r,e,-1,!1,t)};if("force"in e)return{result:Oe(r,e,void 0===e.force?-1:e.force,!1,t)};if(r.global.qaMode||r.user.qaMode)return{result:Oe(r,e,-1,!1,t)};if("stopped"===e.status)return{result:Oe(r,e,-1,!1,t)};const b=Oe(r,e,g,!0,t,v,m);if(r.user.saveStickyBucketAssignmentDoc&&!e.disableStickyBucketing){const{changed:t,key:n,doc:s}=function(e,t,r,n){const s=He(t,r),i=e.user.stickyBucketAssignmentDocs&&e.user.stickyBucketAssignmentDocs[s]&&e.user.stickyBucketAssignmentDocs[s].assignments||{},o={...i,...n},a=JSON.stringify(i)!==JSON.stringify(o);return{key:s,doc:{attributeName:t,attributeValue:r,assignments:o},changed:a}}(r,f,d(p),{[Pe(e.key,e.bucketVersion)]:b.key});t&&(r.user.stickyBucketAssignmentDocs=r.user.stickyBucketAssignmentDocs||{},r.user.stickyBucketAssignmentDocs[n]=s,r.user.saveStickyBucketAssignmentDoc(s))}const k=Te(r,e,b);0===k.length&&r.global.saveDeferredTrack&&r.global.saveDeferredTrack({experiment:e,result:b});const _=k.length?1===k.length?k[0]:Promise.all(k).then(()=>{}):void 0;return"changeId"in e&&e.changeId&&r.global.recordChangeId&&r.global.recordChangeId(e.changeId),{result:b,trackingCall:_}}function Me(e,t,r,n,s,i,o){const a={value:r,on:!!r,off:!r,source:n,ruleId:s||""};return i&&(a.experiment=i),o&&(a.experimentResult=o),"override"!==n&&function(e,t,r){if(e.user.trackedFeatureUsage){const n=JSON.stringify(r.value);if(e.user.trackedFeatureUsage[t]===n)return;e.user.trackedFeatureUsage[t]=n,e.user.enableDevMode&&e.user.devLogs&&e.user.devLogs.push({featureKey:t,result:r,timestamp:Date.now().toString(),logType:"feature"})}if(e.global.onFeatureUsage){const n=e.global.onFeatureUsage;Fe(()=>n(t,r,e.user))}if(e.user.onFeatureUsage){const n=e.user.onFeatureUsage;Fe(()=>n(t,r))}if(e.global.eventLogger){const n=e.global.eventLogger;Fe(()=>n("Feature Evaluated",{feature:t,source:r.source,value:r.value,ruleId:"defaultValue"===r.source?"$default":r.ruleId||"",variationId:r.experimentResult?r.experimentResult.key:""},e.user))}}(e,t,a),a}function Re(e){return{...e.user.attributes,...e.user.attributeOverrides}}function Le(e,t){return Ee(Re(t),e,t.global.savedGroups||{})}function Ne(e,t){return e.some(e=>{const{hashValue:r}=Ke(t,e.attribute);if(!r)return!0;const i=n(e.seed,r,e.hashVersion||2);return null===i||!e.ranges.some(e=>s(i,e))})}function Ue(e,t,r,i,o,a,u){if(!o&&void 0===a)return!0;if(!o&&0===a)return!1;const{hashValue:c}=Ke(e,r,i);if(!c)return!1;const l=n(t,c,u||1);return null!==l&&(o?s(l,o):void 0===a||l<=a)}function Oe(e,t,r,n,s,i,o){let a=!0;(r<0||r>=t.variations.length)&&(r=0,a=!1);const{hashAttribute:u,hashValue:c}=Ke(e,t.hashAttribute,e.user.saveStickyBucketAssignmentDoc&&!t.disableStickyBucketing?t.fallbackAttribute:void 0),l=t.meta?t.meta[r]:{},h={key:l.key||""+r,featureId:s,inExperiment:a,hashUsed:n,variationId:r,value:t.variations[r],hashAttribute:u,hashValue:c,stickyBucketUsed:!!o};return l.name&&(h.name=l.name),void 0!==i&&(h.bucket=i),l.passthrough&&(h.passthrough=l.passthrough),h}function Ke(e,t,r){let n=t||"id",s="";const i=Re(e);return i[n]&&(s=i[n]),!s&&r&&(i[r]&&(s=i[r]),s&&(n=r)),{hashAttribute:n,hashValue:s}}function Pe(e,t){return`${e}__${t=t||0}`}function He(e,t){return`${e}||${t}`}function je(e,t){const r={},n=function(e,t){const r=new Set,n=t&&t.features?t.features:e.global.features||{},s=t&&t.experiments?t.experiments:e.global.experiments||[];return Object.keys(n).forEach(e=>{const t=n[e];if(t.rules)for(const n of t.rules)n.variations&&(r.add(n.hashAttribute||"id"),n.fallbackAttribute&&r.add(n.fallbackAttribute))}),s.map(e=>{r.add(e.hashAttribute||"id"),e.fallbackAttribute&&r.add(e.fallbackAttribute)}),Array.from(r)}(e,t);return n.forEach(t=>{const{hashValue:n}=Ke(e,t);r[t]=d(n)}),r}function qe(e,t){return t.hashAttribute+t.hashValue+e.key+t.variationId}const Ge="undefined"!=typeof window&&"undefined"!=typeof document,Je=function(){let e;try{e="1.6.2"}catch(We){e=""}return e}();class ze{constructor(e){if(e=e||{},this.version=Je,this._options=this.context=e,this._renderer=e.renderer||null,this._trackedExperiments=new Set,this._completedChangeIds=new Set,this._trackedFeatures={},this.debug=!!e.debug,this._subscriptions=new Set,this.ready=!1,this._assigned=new Map,this._activeAutoExperiments=new Map,this._triggeredExpKeys=new Set,this._initialized=!1,this._redirectedUrl="",this._deferredTrackingCalls=new Map,this._autoExperimentsAllowed=!e.disableExperimentsOnLoad,this._destroyCallbacks=[],this.logs=[],this.log=this.log.bind(this),this._saveDeferredTrack=this._saveDeferredTrack.bind(this),this._onExperimentEval=this._onExperimentEval.bind(this),this._fireSubscriptions=this._fireSubscriptions.bind(this),this._recordChangedId=this._recordChangedId.bind(this),e.remoteEval){if(e.decryptionKey)throw new Error("Encryption is not available for remoteEval");if(!e.clientKey)throw new Error("Missing clientKey");let t=!1;try{t=!!new URL(e.apiHost||"").hostname.match(/growthbook\.io$/i)}catch(We){}if(t)throw new Error("Cannot use remoteEval on GrowthBook Cloud")}else if(e.cacheKeyAttributes)throw new Error("cacheKeyAttributes are only used for remoteEval");if(e.stickyBucketService){const t=e.stickyBucketService;this._saveStickyBucketAssignmentDoc=e=>t.saveAssignments(e)}if(e.plugins)for(const t of e.plugins)t(this);if(e.features&&(this.ready=!0),Ge&&e.enableDevMode&&(window._growthbook=this,document.dispatchEvent(new Event("gbloaded"))),e.experiments&&(this.ready=!0,this._updateAllAutoExperiments()),this._options.stickyBucketService&&this._options.stickyBucketAssignmentDocs)for(const t in this._options.stickyBucketAssignmentDocs){const e=this._options.stickyBucketAssignmentDocs[t];e&&this._options.stickyBucketService.saveAssignments(e).catch(()=>{})}this.ready&&this.refreshStickyBuckets(this.getPayload())}async setPayload(e){this._payload=e;const t=await async function(e,t,r){if((e={...e}).encryptedFeatures){try{e.features=JSON.parse(await h(e.encryptedFeatures,t,r))}catch(We){console.error(We)}delete e.encryptedFeatures}if(e.encryptedExperiments){try{e.experiments=JSON.parse(await h(e.encryptedExperiments,t,r))}catch(We){console.error(We)}delete e.encryptedExperiments}if(e.encryptedSavedGroups){try{e.savedGroups=JSON.parse(await h(e.encryptedSavedGroups,t,r))}catch(We){console.error(We)}delete e.encryptedSavedGroups}return e}(e,this._options.decryptionKey);this._decryptedPayload=t,await this.refreshStickyBuckets(t),t.features&&(this._options.features=t.features),t.savedGroups&&(this._options.savedGroups=t.savedGroups),t.experiments&&(this._options.experiments=t.experiments,this._updateAllAutoExperiments()),this.ready=!0,this._render()}initSync(e){this._initialized=!0;const t=e.payload;if(t.encryptedExperiments||t.encryptedFeatures)throw new Error("initSync does not support encrypted payloads");return this._options.stickyBucketService&&!this._options.stickyBucketAssignmentDocs&&(this._options.stickyBucketAssignmentDocs=this.generateStickyBucketAssignmentDocsSync(this._options.stickyBucketService,t)),this._payload=t,this._decryptedPayload=t,t.features&&(this._options.features=t.features),t.experiments&&(this._options.experiments=t.experiments,this._updateAllAutoExperiments()),this.ready=!0,O(this,e),this}async init(e){var t;if(this._initialized=!0,(e=e||{}).cacheSettings&&(t=e.cacheSettings,Object.assign(y,t),y.backgroundSync||U()),e.payload)return await this.setPayload(e.payload),O(this,e),{success:!0,source:"init"};{const{data:t,...r}=await this._refresh({...e,allowStale:!0});return O(this,e),await this.setPayload(t||{}),r}}async loadFeatures(e){e=e||{},await this.init({skipCache:e.skipCache,timeout:e.timeout,streaming:(this._options.backgroundSync??!0)&&(e.autoRefresh||this._options.subscribeToChanges)})}async refreshFeatures(e){const t=await this._refresh({...e||{},allowStale:!1});t.data&&await this.setPayload(t.data)}getApiInfo(){return[this.getApiHosts().apiHost,this.getClientKey()]}getApiHosts(){return function(e){const t=e.apiHost||"https://cdn.growthbook.io";return{apiHost:t.replace(/\/*$/,""),streamingHost:(e.streamingHost||t).replace(/\/*$/,""),apiRequestHeaders:e.apiHostRequestHeaders,streamingHostRequestHeaders:e.streamingHostRequestHeaders}}(this._options)}getClientKey(){return this._options.clientKey||""}getPayload(){return this._payload||{features:this.getFeatures(),experiments:this.getExperiments()}}getDecryptedPayload(){return this._decryptedPayload||this.getPayload()}isRemoteEval(){return this._options.remoteEval||!1}getCacheKeyAttributes(){return this._options.cacheKeyAttributes}async _refresh(e){let{timeout:t,skipCache:r,allowStale:n,streaming:s}=e;if(!this._options.clientKey)throw new Error("Missing clientKey");return S({instance:this,timeout:t,skipCache:r||this._options.disableCache,allowStale:n,backgroundSync:s??this._options.backgroundSync??!0})}_render(){if(this._renderer)try{this._renderer()}catch(We){console.error("Failed to render",We)}}setFeatures(e){this._options.features=e,this.ready=!0,this._render()}async setEncryptedFeatures(e,t,r){const n=await h(e,t||this._options.decryptionKey,r);this.setFeatures(JSON.parse(n))}setExperiments(e){this._options.experiments=e,this.ready=!0,this._updateAllAutoExperiments()}async setEncryptedExperiments(e,t,r){const n=await h(e,t||this._options.decryptionKey,r);this.setExperiments(JSON.parse(n))}async setAttributes(e){this._options.attributes=e,this._options.stickyBucketService&&await this.refreshStickyBuckets(),this._options.remoteEval?await this._refreshForRemoteEval():(this._render(),this._updateAllAutoExperiments())}async updateAttributes(e){return this.setAttributes({...this._options.attributes,...e})}async setAttributeOverrides(e){this._options.attributeOverrides=e,this._options.stickyBucketService&&await this.refreshStickyBuckets(),this._options.remoteEval?await this._refreshForRemoteEval():(this._render(),this._updateAllAutoExperiments())}async setForcedVariations(e){this._options.forcedVariations=e||{},this._options.remoteEval?await this._refreshForRemoteEval():(this._render(),this._updateAllAutoExperiments())}setForcedFeatures(e){this._options.forcedFeatureValues=e,this._render()}async setURL(e){if(e!==this._options.url){if(this._options.url=e,this._redirectedUrl="",this._options.remoteEval)return await this._refreshForRemoteEval(),void this._updateAllAutoExperiments(!0);this._updateAllAutoExperiments(!0)}}getAttributes(){return{...this._options.attributes,...this._options.attributeOverrides}}getForcedVariations(){return this._options.forcedVariations||{}}getForcedFeatures(){return this._options.forcedFeatureValues||new Map}getStickyBucketAssignmentDocs(){return this._options.stickyBucketAssignmentDocs||{}}getUrl(){return this._options.url||""}getFeatures(){return this._options.features||{}}getExperiments(){return this._options.experiments||[]}getCompletedChangeIds(){return Array.from(this._completedChangeIds)}subscribe(e){return this._subscriptions.add(e),()=>{this._subscriptions.delete(e)}}async _refreshForRemoteEval(){if(!this._options.remoteEval)return;if(!this._initialized)return;const e=await this._refresh({allowStale:!1});e.data&&await this.setPayload(e.data)}getAllResults(){return new Map(this._assigned)}onDestroy(e){this._destroyCallbacks.push(e)}isDestroyed(){return!!this._destroyed}destroy(e){var t;e=e||{},this._destroyed=!0,this._destroyCallbacks.forEach(e=>{try{e()}catch(We){console.error(We)}}),this._subscriptions.clear(),this._assigned.clear(),this._trackedExperiments.clear(),this._completedChangeIds.clear(),this._deferredTrackingCalls.clear(),this._trackedFeatures={},this._destroyCallbacks=[],this._payload=void 0,this._saveStickyBucketAssignmentDoc=void 0,t=this,k.forEach(e=>e.delete(t)),e.destroyAllStreams&&U(),this.logs=[],Ge&&window._growthbook===this&&delete window._growthbook,this._activeAutoExperiments.forEach(e=>{e.undo()}),this._activeAutoExperiments.clear(),this._triggeredExpKeys.clear()}setRenderer(e){this._renderer=e}forceVariation(e,t){this._options.forcedVariations=this._options.forcedVariations||{},this._options.forcedVariations[e]=t,this._options.remoteEval?this._refreshForRemoteEval():(this._updateAllAutoExperiments(),this._render())}run(e){const{result:t}=Ie(e,null,this._getEvalContext());return this._onExperimentEval(e,t),t}triggerExperiment(e){if(this._triggeredExpKeys.add(e),!this._options.experiments)return null;return this._options.experiments.filter(t=>t.key===e).map(e=>this._runAutoExperiment(e)).filter(e=>null!==e)}triggerAutoExperiments(){this._autoExperimentsAllowed=!0,this._updateAllAutoExperiments(!0)}_getEvalContext(){return{user:this._getUserContext(),global:this._getGlobalContext(),stack:{evaluatedFeatures:new Set}}}_getUserContext(){return{attributes:this._options.user?{...this._options.user,...this._options.attributes}:this._options.attributes,enableDevMode:this._options.enableDevMode,blockedChangeIds:this._options.blockedChangeIds,stickyBucketAssignmentDocs:this._options.stickyBucketAssignmentDocs,url:this._getContextUrl(),forcedVariations:this._options.forcedVariations,forcedFeatureValues:this._options.forcedFeatureValues,attributeOverrides:this._options.attributeOverrides,saveStickyBucketAssignmentDoc:this._saveStickyBucketAssignmentDoc,trackingCallback:this._options.trackingCallback,onFeatureUsage:this._options.onFeatureUsage,devLogs:this.logs,trackedExperiments:this._trackedExperiments,trackedFeatureUsage:this._trackedFeatures}}_getGlobalContext(){return{features:this._options.features,experiments:this._options.experiments,log:this.log,enabled:this._options.enabled,qaMode:this._options.qaMode,savedGroups:this._options.savedGroups,groups:this._options.groups,overrides:this._options.overrides,onExperimentEval:this._onExperimentEval,recordChangeId:this._recordChangedId,saveDeferredTrack:this._saveDeferredTrack,eventLogger:this._options.eventLogger}}_runAutoExperiment(e,t){const r=this._activeAutoExperiments.get(e);if(e.manual&&!this._triggeredExpKeys.has(e.key)&&!r)return null;let n,s;this._isAutoExperimentBlockedByContext(e)?n=Oe(this._getEvalContext(),e,-1,!1,""):(({result:n,trackingCall:s}=Ie(e,null,this._getEvalContext())),this._onExperimentEval(e,n));const i=JSON.stringify(n.value);if(!t&&n.inExperiment&&r&&r.valueHash===i)return n;if(r&&this._undoActiveAutoExperiment(e),n.inExperiment){const t=g(e);if("redirect"===t&&n.value.urlRedirect&&e.urlPatterns){const t=e.persistQueryString?function(e,t){let r,n;try{r=new URL(e),n=new URL(t)}catch(We){return console.error(`Unable to merge query strings: ${We}`),t}return r.searchParams.forEach((e,t)=>{n.searchParams.has(t)||n.searchParams.set(t,e)}),n.toString()}(this._getContextUrl(),n.value.urlRedirect):n.value.urlRedirect;if(o(t,e.urlPatterns))return this.log("Skipping redirect because original URL matches redirect URL",{id:e.key}),n;this._redirectedUrl=t;const{navigate:r,delay:i}=this._getNavigateFunction();if(r)if(Ge)Promise.all([...s?[m(s,this._options.maxNavigateDelay??1e3)]:[],new Promise(e=>window.setTimeout(e,this._options.navigateDelay??i))]).then(()=>{try{r(t)}catch(We){console.error(We)}});else try{r(t)}catch(We){console.error(We)}}else if("visual"===t){const t=this._options.applyDomChangesCallback?this._options.applyDomChangesCallback(n.value):this._applyDOMChanges(n.value);t&&this._activeAutoExperiments.set(e,{undo:t,valueHash:i})}}return n}_undoActiveAutoExperiment(e){const t=this._activeAutoExperiments.get(e);t&&(t.undo(),this._activeAutoExperiments.delete(e))}_updateAllAutoExperiments(e){if(!this._autoExperimentsAllowed)return;const t=this._options.experiments||[],r=new Set(t);this._activeAutoExperiments.forEach((e,t)=>{r.has(t)||(e.undo(),this._activeAutoExperiments.delete(t))});for(const n of t){const t=this._runAutoExperiment(n,e);if(t&&t.inExperiment&&"redirect"===g(n))break}}_onExperimentEval(e,t){const r=this._assigned.get(e.key);this._assigned.set(e.key,{experiment:e,result:t}),this._subscriptions.size>0&&this._fireSubscriptions(e,t,r)}_fireSubscriptions(e,t,r){r&&r.result.inExperiment===t.inExperiment&&r.result.variationId===t.variationId||this._subscriptions.forEach(r=>{try{r(e,t)}catch(We){console.error(We)}})}_recordChangedId(e){this._completedChangeIds.add(e)}isOn(e){return this.evalFeature(e).on}isOff(e){return this.evalFeature(e).off}getFeatureValue(e,t){const r=this.evalFeature(e).value;return null===r?t:r}feature(e){return this.evalFeature(e)}evalFeature(e){return $e(e,this._getEvalContext())}log(e,t){this.debug&&(this._options.log?this._options.log(e,t):console.log(e,t))}getDeferredTrackingCalls(){return Array.from(this._deferredTrackingCalls.values())}setDeferredTrackingCalls(e){this._deferredTrackingCalls=new Map(e.filter(e=>e&&e.experiment&&e.result).map(e=>[qe(e.experiment,e.result),e]))}async fireDeferredTrackingCalls(){if(!this._options.trackingCallback)return;const e=[];this._deferredTrackingCalls.forEach(t=>{t&&t.experiment&&t.result?e.push(this._options.trackingCallback(t.experiment,t.result)):console.error("Invalid deferred tracking call",{call:t})}),this._deferredTrackingCalls.clear(),await Promise.all(e)}setTrackingCallback(e){this._options.trackingCallback=e,this.fireDeferredTrackingCalls()}setEventLogger(e){this._options.eventLogger=e}async logEvent(e,t){if(this._destroyed)console.error("Cannot log event to destroyed GrowthBook instance");else if(this._options.enableDevMode&&this.logs.push({eventName:e,properties:t,timestamp:Date.now().toString(),logType:"event"}),this._options.eventLogger)try{await this._options.eventLogger(e,t||{},this._getUserContext())}catch(We){console.error(We)}else console.error("No event logger configured")}_saveDeferredTrack(e){this._deferredTrackingCalls.set(qe(e.experiment,e.result),e)}_getContextUrl(){return this._options.url||(Ge?window.location.href:"")}_isAutoExperimentBlockedByContext(e){const t=g(e);if("visual"===t){if(this._options.disableVisualExperiments)return!0;if(this._options.disableJsInjection&&e.variations.some(e=>e.js))return!0}else{if("redirect"!==t)return!0;if(this._options.disableUrlRedirectExperiments)return!0;try{const t=new URL(this._getContextUrl());for(const r of e.variations){if(!r||!r.urlRedirect)continue;const e=new URL(r.urlRedirect);if(this._options.disableCrossOriginUrlRedirectExperiments){if(e.protocol!==t.protocol)return!0;if(e.host!==t.host)return!0}}}catch(We){return this.log("Error parsing current or redirect URL",{id:e.key,error:We}),!0}}return!(!e.changeId||!(this._options.blockedChangeIds||[]).includes(e.changeId))}getRedirectUrl(){return this._redirectedUrl}_getNavigateFunction(){return this._options.navigate?{navigate:this._options.navigate,delay:0}:Ge?{navigate:e=>{window.location.replace(e)},delay:100}:{navigate:null,delay:0}}_applyDOMChanges(e){if(!Ge)return;const t=[];if(e.css){const r=document.createElement("style");r.innerHTML=e.css,document.head.appendChild(r),t.push(()=>r.remove())}if(e.js){const r=document.createElement("script");r.innerHTML=e.js,this._options.jsInjectionNonce&&(r.nonce=this._options.jsInjectionNonce),document.head.appendChild(r),t.push(()=>r.remove())}return e.domMutations&&e.domMutations.forEach(e=>{t.push(_e.declarative(e).revert)}),()=>{t.forEach(e=>e())}}async refreshStickyBuckets(e){if(this._options.stickyBucketService){const t=this._getEvalContext(),r=await async function(e,t,r){const n=je(e,r);return t.getAllAssignments(n)}(t,this._options.stickyBucketService,e);this._options.stickyBucketAssignmentDocs=r}}generateStickyBucketAssignmentDocsSync(e,t){if(!("getAllAssignmentsSync"in e))return void console.error("generating StickyBucketAssignmentDocs docs requires StickyBucketServiceSync");const r=je(this._getEvalContext(),t);return e.getAllAssignmentsSync(r)}inDevMode(){return!!this._options.enableDevMode}}const Ze=e.createContext({});function Qe(){const{growthbook:t}=e.useContext(Ze);if(!t)throw new Error("Missing or invalid GrowthBookProvider");return t}export{ze as G,Ze as a,Qe as u};
