@dtect/security-sdk-js 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var ce=Object.defineProperty;var At=Object.getOwnPropertyDescriptor;var St=Object.getOwnPropertyNames;var Dt=Object.prototype.hasOwnProperty;var Pt=(t,e)=>{for(var n in e)ce(t,n,{get:e[n],enumerable:!0})},kt=(t,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of St(e))!Dt.call(t,r)&&r!==n&&ce(t,r,{get:()=>e[r],enumerable:!(o=At(e,r))||o.enumerable});return t};var _t=t=>kt(ce({},"__esModule",{value:!0}),t);var Hn={};Pt(Hn,{LanguageCodes:()=>V,QualityQuestionsRespondentTypes:()=>W,SecurityAPIError:()=>Tt,checkQualityQuestions:()=>oe,default:()=>Zn,getQualityQuestions:()=>re,getSecurityResult:()=>te,getSecurityToken:()=>ne,hasCredentials:()=>qn,init:()=>Rt,isAIUsageDetected:()=>z});module.exports=_t(Hn);var Ot={UNAUTHORIZED:"Unauthorized"},Mt={EXPIRED:"EXPIRED_TOKEN",INVALID_API_KEY:"INVALID_API_KEY",MISSING_AUTHENTICATION_TOKEN:"MISSING_AUTHENTICATION_TOKEN"},_e={INTERNAL_SERVER_ERROR:"Internal Server Error during API Request",MISSING_CREDENTIALS:"Missing Public Client ID or Public API Key",MAINTENANCE_MODE:"API Under Maintenance",RATE_LIMIT_REACHED:"Too many requests. Rate limit exceeded"},Oe={SDK_INIT_ERROR:"Internal Server Error during SDK Initialization",DUPLICATE_INITIALIZATION:"Multiple SDK Initializations Detected",NOT_INITIALIZED:"SDK Not Initialized"},Me={INVALID_CREDENTIALS:"Invalid Public Client ID or Public API Key"},Ne={FAILED_TO_GET_SECURITY_RESULT:"Failed to Retrieve Security Result"},Le={FAILED_TO_GET_SECURITY_TOKEN:" Failed to Generate Security Token"},h={...Ot,...Mt,..._e,...Oe,...Me,...Ne,...Le},Ce={..._e,...Oe,...Me,...Ne,...Le};var V=(p=>(p.AR="ar",p.BN="bn",p.DE="de",p.EN="en",p.ES="es",p.FR="fr",p.HI="hi",p.ID="id",p.IT="it",p.JA="ja",p.KO="ko",p.MS="ms",p.NL="nl",p.PT="pt",p.RU="ru",p.YU="yu",p.ZH="zh",p))(V||{}),W=(y=>(y.GeneralConsumer="general-consumer",y.HRManagerDirector="hr-manager-director",y.WebDeveloper="web-developer",y.SoftwareEngineer="software-engineer",y.ITDirector="it-director",y.BusinessAdministrator="business-administrator",y.AccountsPayableManager="accounts-payable-manager",y.Accountant="accountant",y.FinanceDirector="finance-director",y.SmallBusinessOwner="small-business-owner",y.GeneralContractor="general-contractor",y.MarketingManagerDirector="marketing-manager-director",y.ConsumerShopper="consumer-shopper",y.Travel="travel",y.Entertainment="entertainment",y.FinanceAndBanking="finance-and-banking",y.General="general",y.B2BWhiteCollar="b2b-white-collar",y.B2BBlueCollar="b2b-blue-collar",y.Lawyer="lawyer",y))(W||{});var E=[];for(let t=0;t<256;++t)E.push((t+256).toString(16).slice(1));function Be(t,e=0){return(E[t[e+0]]+E[t[e+1]]+E[t[e+2]]+E[t[e+3]]+"-"+E[t[e+4]]+E[t[e+5]]+"-"+E[t[e+6]]+E[t[e+7]]+"-"+E[t[e+8]]+E[t[e+9]]+"-"+E[t[e+10]]+E[t[e+11]]+E[t[e+12]]+E[t[e+13]]+E[t[e+14]]+E[t[e+15]]).toLowerCase()}var ue,Nt=new Uint8Array(16);function le(){if(!ue){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");ue=crypto.getRandomValues.bind(crypto)}return ue(Nt)}var Lt=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),me={randomUUID:Lt};function Ct(t,e,n){if(me.randomUUID&&!e&&!t)return me.randomUUID();t=t||{};let o=t.random??t.rng?.()??le();if(o.length<16)throw new Error("Random bytes length must be >= 16");if(o[6]=o[6]&15|64,o[8]=o[8]&63|128,e){if(n=n||0,n<0||n+16>e.length)throw new RangeError(`UUID byte range ${n}:${n+15} is out of buffer bounds`);for(let r=0;r<16;++r)e[n+r]=o[r];return e}return Be(o)}var M=Ct;var Fe="dtect_security_sdk_state",Ue=typeof window<"u",Ge={isLoading:!1,token:"",visitorId:"",projectId:"",questionData:null,clientData:null,aiCheckData:null,aiUsageFlagged:!1},Y={state:{...Ge},securityKeys:{behaviorKey:"",automationKey:""}};function Ve(){if(!Ue)return Y;try{let t=sessionStorage.getItem(Fe);if(!t)return Y;let e=JSON.parse(t);return e.expiresAt&&e.expiresAt<Date.now()?Y:{state:{...Ge,...e.state},securityKeys:e.securityKeys||{behaviorKey:"",automationKey:""}}}catch{return Y}}function We(t){if(Ue)try{let e=Date.now()+864e5,n={...t,expiresAt:e};sessionStorage.setItem(Fe,JSON.stringify(n))}catch{}}function qe(t){return t||M()}var Bt="0.1.2",q={...Ve(),monitor:void 0,version:Bt};function w(){return q}function D(t){q=t(q),We({state:q.state,securityKeys:q.securityKeys})}function N(){let{config:t}=w(),e=t?.endpoint||"https://api.dtect.io/security",n=t?.includeResults?`${e}/client/check/result`:`${e}/client/check`;return{endpoint:e,clientId:t?.clientId,apiKey:t?.apiKey,checkResultEndpoint:n}}async function I(t,e="info",n={}){let o=`${n.endpoint??"https://api.dtect.io/security"}/log`,r={message:t,type:e,payload:n};navigator.sendBeacon(o,JSON.stringify(r))}function L(t){if(t instanceof Error){if(t?.message?.includes("maintenance_mode"))throw new Error(h.MAINTENANCE_MODE);switch(t?.message){default:throw new Error(h.INTERNAL_SERVER_ERROR)}}throw new Error(h.FAILED_TO_GET_SECURITY_TOKEN)}function $e(t,e){let{state:n,config:o}=w();if(t instanceof Error){if(I(t.message,"error",{function:"init",endpoint:o?.endpoint,error:t,token:n.token,clientId:e.clientId}),t.message.includes("maintenance_mode"))throw new Error(h.MAINTENANCE_MODE);if([h.INVALID_API_KEY,h.UNAUTHORIZED].includes(t.message))throw new Error(h.INVALID_CREDENTIALS)}throw new Error(h.SDK_INIT_ERROR)}function Ke(t){let e=t?.qbc||!1,n=t?.mas||!1,o=t?.apd||!1,r=t?.scb||null,i=0,a=new Set,s=()=>{a.forEach(g=>g())},c=()=>{e=!1,n=!1,o=!1,r=void 0,i=0},m=()=>{let f=window?.getSelection()?.toString();f&&f.length>0&&(i=Date.now(),e=!0,s())},u=g=>{let f=g.clipboardData?.getData("text"),T=g.target instanceof HTMLInputElement||g.target instanceof HTMLTextAreaElement;f&&T&&(o=!0,s())},d=()=>{n=!0;let g=Date.now();if(i){let f=(g-i)/1e3;(r==null||f<r)&&(r=f)}s()};return document?.addEventListener("copy",m),document?.addEventListener("paste",u),window?.addEventListener("blur",d),{get qbc(){return e},get mas(){return n},get apd(){return o},get scb(){return r},onChange(g){return a.add(g),()=>{a.delete(g)}},reset:c,destroy(){a.clear(),document?.removeEventListener("copy",m),document?.removeEventListener("paste",u),window?.removeEventListener("blur",d)}}}function je(t){D(e=>{let n=Ke(null);return{...e,monitor:n,state:{...e.state,isLoading:!0,token:t||"",aiUsageFlagged:!1}}})}function ze(t){D(e=>({...e,state:{...e.state,isLoading:!1,token:t||""}}))}function C({projectId:t,visitorId:e}){let{state:n,monitor:o}=w();if(n.projectId===t&&n.visitorId===e)return;let r=M();o?.reset(),D(i=>({...i,state:{...i.state,aiCheckData:null,questionData:null,clientData:null,aiUsageFlagged:!1,projectId:t,visitorId:e,token:r}}))}var B={exclude:[],include:[],stabilize:["private","iframe"],logging:!0,timeout:5e3,cache_api_call:!0,performance:!1,experimental:!1},Br={...B},de={private:[{exclude:["canvas"],browsers:["firefox","safari>=17","brave"]},{exclude:["audio"],browsers:["samsungbrowser","safari"]},{exclude:["fonts"],browsers:["firefox"]},{exclude:["audio.sampleHash","hardware.deviceMemory","header.acceptLanguage.q","system.hardwareConcurrency","plugins"],browsers:["brave"]},{exclude:["tls.extensions"],browsers:["firefox","chrome","safari"]},{exclude:["header.acceptLanguage"],browsers:["edge","chrome"]}],iframe:[{exclude:["system.applePayVersion","system.cookieEnabled"],browsers:["safari"]},{exclude:["permissions"]}],vpn:[{exclude:["ip"]}]};async function ge(){return Ft()}async function Ft(){return new Promise((e,n)=>{try{let i=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,5e3,44100),a=i?.createBufferSource(),s=i.createOscillator();s.frequency.value=1e3;let c=i.createDynamicsCompressor();c.threshold.value=-50,c.knee.value=40,c.ratio.value=12,c.attack.value=0,c.release.value=.2,s.connect(c),c.connect(i.destination),s.start();let m;i.oncomplete=u=>{m=u.renderedBuffer.getChannelData(0),e({sampleHash:Ut(m),maxChannels:i.destination.maxChannelCount,channelCountMode:a.channelCountMode})},i.startRendering()}catch(o){console.error("Error creating audio fingerprint:",o),n(o)}})}function Ut(t){let e=0;for(let n=0;n<t.length;++n)e+=Math.abs(t[n]);return e}function Q(t,e,n){let o=[];for(let a=0;a<t[0].data.length;a++){let s=[];for(let c=0;c<t.length;c++)s.push(t[c].data[a]);o.push(Gt(s))}let r=o,i=new Uint8ClampedArray(r);return new ImageData(i,e,n)}function Gt(t){if(t.length===0)return 0;let e={};for(let o of t)e[o]=(e[o]||0)+1;let n=t[0];for(let o in e)e[o]>e[n]&&(n=parseInt(o,10));return n}function Vt(t){return new TextEncoder().encode(t).buffer}function J(t){return t^=t>>>16,t=Math.imul(t,2246822507),t^=t>>>13,t=Math.imul(t,3266489909),t^=t>>>16,t>>>0}var x=new Uint32Array([597399067,2869860233,951274213,2716044179]);function P(t,e){return t<<e|t>>>32-e}function Wt(t,e){let n=t.byteLength/16|0,o=new Uint32Array(t,0,n*4);for(let r=0;r<n;r++){let i=o.subarray(r*4,(r+1)*4);i[0]=Math.imul(i[0],x[0]),i[0]=P(i[0],15),i[0]=Math.imul(i[0],x[1]),e[0]=e[0]^i[0],e[0]=P(e[0],19),e[0]=e[0]+e[1],e[0]=Math.imul(e[0],5)+1444728091,i[1]=Math.imul(i[1],x[1]),i[1]=P(i[1],16),i[1]=Math.imul(i[1],x[2]),e[1]=e[1]^i[1],e[1]=P(e[1],17),e[1]=e[1]+e[2],e[1]=Math.imul(e[1],5)+197830471,i[2]=Math.imul(i[2],x[2]),i[2]=P(i[2],17),i[2]=Math.imul(i[2],x[3]),e[2]=e[2]^i[2],e[2]=P(e[2],15),e[2]=e[2]+e[3],e[2]=Math.imul(e[2],5)+2530024501,i[3]=Math.imul(i[3],x[3]),i[3]=P(i[3],18),i[3]=Math.imul(i[3],x[0]),e[3]=e[3]^i[3],e[3]=P(e[3],13),e[3]=e[3]+e[0],e[3]=Math.imul(e[3],5)+850148119}}function qt(t,e){let n=t.byteLength/16|0,o=t.byteLength%16,r=new Uint32Array(4),i=new Uint8Array(t,n*16,o);switch(o){case 15:r[3]=r[3]^i[14]<<16;case 14:r[3]=r[3]^i[13]<<8;case 13:r[3]=r[3]^i[12]<<0,r[3]=Math.imul(r[3],x[3]),r[3]=P(r[3],18),r[3]=Math.imul(r[3],x[0]),e[3]=e[3]^r[3];case 12:r[2]=r[2]^i[11]<<24;case 11:r[2]=r[2]^i[10]<<16;case 10:r[2]=r[2]^i[9]<<8;case 9:r[2]=r[2]^i[8]<<0,r[2]=Math.imul(r[2],x[2]),r[2]=P(r[2],17),r[2]=Math.imul(r[2],x[3]),e[2]=e[2]^r[2];case 8:r[1]=r[1]^i[7]<<24;case 7:r[1]=r[1]^i[6]<<16;case 6:r[1]=r[1]^i[5]<<8;case 5:r[1]=r[1]^i[4]<<0,r[1]=Math.imul(r[1],x[1]),r[1]=P(r[1],16),r[1]=Math.imul(r[1],x[2]),e[1]=e[1]^r[1];case 4:r[0]=r[0]^i[3]<<24;case 3:r[0]=r[0]^i[2]<<16;case 2:r[0]=r[0]^i[1]<<8;case 1:r[0]=r[0]^i[0]<<0,r[0]=Math.imul(r[0],x[0]),r[0]=P(r[0],15),r[0]=Math.imul(r[0],x[1]),e[0]=e[0]^r[0]}}function $t(t,e){e[0]=e[0]^t.byteLength,e[1]=e[1]^t.byteLength,e[2]=e[2]^t.byteLength,e[3]=e[3]^t.byteLength,e[0]=e[0]+e[1]|0,e[0]=e[0]+e[2]|0,e[0]=e[0]+e[3]|0,e[1]=e[1]+e[0]|0,e[2]=e[2]+e[0]|0,e[3]=e[3]+e[0]|0,e[0]=J(e[0]),e[1]=J(e[1]),e[2]=J(e[2]),e[3]=J(e[3]),e[0]=e[0]+e[1]|0,e[0]=e[0]+e[2]|0,e[0]=e[0]+e[3]|0,e[1]=e[1]+e[0]|0,e[2]=e[2]+e[0]|0,e[3]=e[3]+e[0]|0}function b(t,e=0){if(e=e?e|0:0,typeof t=="string"&&(t=Vt(t)),!(t instanceof ArrayBuffer))throw new TypeError("Expected key to be ArrayBuffer or string");let n=new Uint32Array([e,e,e,e]);Wt(t,n),qt(t,n),$t(t,n);let o=new Uint8Array(n.buffer);return Array.from(o).map(r=>r.toString(16).padStart(2,"0")).join("")}var Kt=3,Ye=280,Qe=20;async function fe(){return jt()}function jt(){return new Promise(t=>{let e=Array.from({length:Kt},()=>zt()),n=Q(e,Ye,Qe);t({commonPixelsHash:b(n.data.toString()).toString()})})}function zt(){let t=document.createElement("canvas"),e=t.getContext("2d");if(!e)return new ImageData(1,1);t.width=Ye,t.height=Qe;let n=e.createLinearGradient(0,0,t.width,t.height);n.addColorStop(0,"red"),n.addColorStop(1/6,"orange"),n.addColorStop(2/6,"yellow"),n.addColorStop(3/6,"green"),n.addColorStop(4/6,"blue"),n.addColorStop(5/6,"indigo"),n.addColorStop(1,"violet"),e.fillStyle=n,e.fillRect(0,0,t.width,t.height);let o="Random Text WMwmil10Oo";return e.font="23.123px Arial",e.fillStyle="black",e.fillText(o,-5,15),e.fillStyle="rgba(0, 0, 255, 0.5)",e.fillText(o,-3.3,17.7),e.beginPath(),e.moveTo(0,0),e.lineTo(t.width*2/7,t.height),e.strokeStyle="white",e.lineWidth=2,e.stroke(),e.getImageData(0,0,t.width,t.height)}async function X(t){for(;!document.body;)await Yt(50);let e=document.createElement("iframe");e.setAttribute("frameBorder","0");let n=e.style;n.setProperty("position","fixed"),n.setProperty("display","block","important"),n.setProperty("visibility","visible"),n.setProperty("border","0"),n.setProperty("opacity","0"),e.src="about:blank",document.body.appendChild(e);let o=e.contentDocument||e.contentWindow?.document;if(!o)throw new Error("Iframe document is not accessible");t({iframe:o}),setTimeout(()=>{document.body.removeChild(e)},0)}function Yt(t,e){return new Promise(n=>setTimeout(n,t,e))}var Qt=["Arial","Arial Black","Arial Narrow","Arial Rounded MT","Arimo","Archivo","Barlow","Bebas Neue","Bitter","Bookman","Calibri","Cabin","Candara","Century","Century Gothic","Comic Sans MS","Constantia","Courier","Courier New","Crimson Text","DM Mono","DM Sans","DM Serif Display","DM Serif Text","Dosis","Droid Sans","Exo","Fira Code","Fira Sans","Franklin Gothic Medium","Garamond","Geneva","Georgia","Gill Sans","Helvetica","Impact","Inconsolata","Indie Flower","Inter","Josefin Sans","Karla","Lato","Lexend","Lucida Bright","Lucida Console","Lucida Sans Unicode","Manrope","Merriweather","Merriweather Sans","Montserrat","Myriad","Noto Sans","Nunito","Nunito Sans","Open Sans","Optima","Orbitron","Oswald","Pacifico","Palatino","Perpetua","PT Sans","PT Serif","Poppins","Prompt","Public Sans","Quicksand","Rajdhani","Recursive","Roboto","Roboto Condensed","Rockwell","Rubik","Segoe Print","Segoe Script","Segoe UI","Sora","Source Sans Pro","Space Mono","Tahoma","Taviraj","Times","Times New Roman","Titillium Web","Trebuchet MS","Ubuntu","Varela Round","Verdana","Work Sans"],Jt=["monospace","sans-serif","serif"];async function pe(t){return Xt()}function Xt(){return new Promise((t,e)=>{try{X(async({iframe:n})=>{let r=n.createElement("canvas").getContext("2d"),i=Jt.map(s=>Je(r,s)),a={};Qt.forEach(s=>{let c=Je(r,s);i.includes(c)||(a[s]=c)}),t(a)})}catch{e({error:"unsupported"})}})}function Je(t,e){if(!t)return null;let n="WwMmLli0Oo";return t.font=`72px ${e}`,t.measureText(n).width}function ye(){return new Promise((t,e)=>{let n=navigator.deviceMemory!==void 0?navigator.deviceMemory:0,o=window.performance&&window.performance.memory?window.performance.memory:0;t({videocard:Zt(),architecture:Ht(),deviceMemory:n.toString()||"undefined",jsHeapSizeLimit:o.jsHeapSizeLimit||0})})}function Zt(){let t=document.createElement("canvas"),e=t.getContext("webgl")??t.getContext("experimental-webgl");if(e&&"getParameter"in e)try{let n=(e.getParameter(e.VENDOR)||"").toString(),o=(e.getParameter(e.RENDERER)||"").toString(),r={vendor:n,renderer:o,version:(e.getParameter(e.VERSION)||"").toString(),shadingLanguageVersion:(e.getParameter(e.SHADING_LANGUAGE_VERSION)||"").toString()};if(!o.length||!n.length){let i=e.getExtension("WEBGL_debug_renderer_info");if(i){let a=(e.getParameter(i.UNMASKED_VENDOR_WEBGL)||"").toString(),s=(e.getParameter(i.UNMASKED_RENDERER_WEBGL)||"").toString();a&&(r.vendorUnmasked=a),s&&(r.rendererUnmasked=s)}}return r}catch{}return"undefined"}function Ht(){let t=new Float32Array(1),e=new Uint8Array(t.buffer);return t[0]=1/0,t[0]=t[0]-t[0],e[3]}function he(){return new Promise(t=>{t({languages:en(),timezone:tn()})})}function en(){let t=[];return navigator.language}function tn(){return Intl.DateTimeFormat().resolvedOptions().timeZone}var Z=(t,e,n,o)=>{let r=(n-e)/o,i=0;for(let a=0;a<o;a++){let s=e+(a+.5)*r;i+=t(s)}return i*r};function we(){return new Promise(t=>{t({acos:Math.acos(.5),asin:Z(Math.asin,-1,1,97),cos:Z(Math.cos,0,Math.PI,97),largeCos:Math.cos(1e20),largeSin:Math.sin(1e20),largeTan:Math.tan(1e20),sin:Z(Math.sin,-Math.PI,Math.PI,97),tan:Z(Math.tan,0,2*Math.PI,97)})})}function nn(t){if(t.length===0)return null;let e={};t.forEach(r=>{let i=String(r);e[i]=(e[i]||0)+1});let n=t[0],o=1;return Object.keys(e).forEach(r=>{e[r]>o&&(n=r,o=e[r])}),n}function Xe(t,e){let n={};return e.forEach(o=>{let r=t.map(a=>o in a?a[o]:void 0).filter(a=>a!==void 0),i=nn(r);i&&(n[o]=i)}),n}var rn=["accelerometer","accessibility","accessibility-events","ambient-light-sensor","background-fetch","background-sync","bluetooth","camera","clipboard-read","clipboard-write","device-info","display-capture","gyroscope","geolocation","local-fonts","magnetometer","microphone","midi","nfc","notifications","payment-handler","persistent-storage","push","speaker","storage-access","top-level-storage-access","window-management","query"];async function Ie(t){let e=t?.permissions_to_check||rn,o=await Promise.all(Array.from({length:3},()=>on(e)));return Xe(o,e)}async function on(t){let e={};for(let n of t)try{let o=await navigator.permissions.query({name:n});e[n]=o.state.toString()}catch{}return e}async function ve(){let t=[];if(navigator.plugins)for(let e=0;e<navigator.plugins.length;e++){let n=navigator.plugins[e];t.push([n.name,n.filename,n.description].join("|"))}return new Promise(e=>{e({plugins:t})})}function F(){if(typeof navigator>"u")return{name:"unknown",version:"unknown"};let t=navigator.userAgent,e=[/(?<name>SamsungBrowser)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>EdgA|EdgiOS|Edg)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>OPR|OPX)\/(?<version>\d+(?:\.\d+)+)/,/Opera[\s\/](?<version>\d+(?:\.\d+)+)/,/Opera Mini\/(?<version>\d+(?:\.\d+)+)/,/Opera Mobi\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Vivaldi)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Brave)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>CriOS)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>FxiOS)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Chrome|Chromium)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Firefox|Waterfox|Iceweasel|IceCat)\/(?<version>\d+(?:\.\d+)+)/,/Version\/(?<version1>[\d.]+).*Safari\/[\d.]+|(?<name>Safari)\/(?<version2>[\d.]+)/,/(?<name>MSIE|Trident|IEMobile).+?(?<version>\d+(?:\.\d+)+)/,/(?<name>[A-Za-z]+)\/(?<version>\d+(?:\.\d+)+)/],n={edg:"Edge",edga:"Edge",edgios:"Edge",opr:"Opera",opx:"Opera",crios:"Chrome",fxios:"Firefox",samsung:"SamsungBrowser",vivaldi:"Vivaldi",brave:"Brave"};for(let o of e){let r=t.match(o);if(r){let i=r.groups?.name,a=r.groups?.version||r.groups?.version1||r.groups?.version2;if(!i&&(r.groups?.version1||r.groups?.version2)&&(i="Safari"),!i&&o.source.includes("Opera Mini")&&(i="Opera Mini"),!i&&o.source.includes("Opera Mobi")&&(i="Opera Mobi"),!i&&o.source.includes("Opera")&&(i="Opera"),!i&&r[1]&&(i=r[1]),!a&&r[2]&&(a=r[2]),i)return{name:n[i.toLowerCase()]||i,version:a||"unknown"}}}return{name:"unknown",version:"unknown"}}function H(){if(typeof navigator>"u"||!navigator.userAgent)return!1;let t=navigator.userAgent;return/Mobi|Android|iPhone|iPod|IEMobile|Opera Mini|Opera Mobi|webOS|BlackBerry|Windows Phone/i.test(t)&&!/iPad/i.test(t)}function Ee(){return new Promise(t=>{let e={is_touchscreen:navigator.maxTouchPoints>0,maxTouchPoints:navigator.maxTouchPoints,colorDepth:screen.colorDepth,mediaMatches:sn()};H()&&navigator.maxTouchPoints>0&&(e.resolution=an()),t(e)})}function an(){let t=window.screen.width,e=window.screen.height,n=Math.max(t,e).toString(),o=Math.min(t,e).toString();return`${n}x${o}`}function sn(){let t=[],e={"prefers-contrast":["high","more","low","less","forced","no-preference"],"any-hover":["hover","none"],"any-pointer":["none","coarse","fine"],pointer:["none","coarse","fine"],hover:["hover","none"],update:["fast","slow"],"inverted-colors":["inverted","none"],"prefers-reduced-motion":["reduce","no-preference"],"prefers-reduced-transparency":["reduce","no-preference"],scripting:["none","initial-only","enabled"],"forced-colors":["active","none"]};return Object.keys(e).forEach(n=>{e[n].forEach(o=>{matchMedia(`(${n}: ${o})`).matches&&t.push(`${n}: ${o}`)})}),t}function be(){return new Promise(t=>{let e=F(),n=navigator.userAgent,o={platform:window.navigator.platform,productSub:navigator.productSub,product:navigator.product,useragent:navigator.userAgent,hardwareConcurrency:navigator.hardwareConcurrency,browser:{name:e.name,version:e.version},mobile:H(),applePayVersion:cn(),cookieEnabled:window.navigator.cookieEnabled};t(o)})}function cn(){if(window.location.protocol==="https:"&&typeof window.ApplePaySession=="function")try{let t=window.ApplePaySession.supportsVersion;for(let e=15;e>0;e--)if(t(e))return e}catch{return 0}return 0}var un=F().name!=="SamsungBrowser"?1:3,A,l=null;function ln(){typeof document<"u"&&(A=document.createElement("canvas"),A.width=200,A.height=100,l=A.getContext("webgl"))}async function Te(){ln();try{if(!l)throw new Error("WebGL not supported");let t=Array.from({length:un},()=>mn()),e=Q(t,A.width,A.height);return{commonPixelsHash:b(e.data.toString()).toString()}}catch{return{webgl:"unsupported"}}}function mn(){try{if(!l)throw new Error("WebGL not supported");let t=`
1
+ "use strict";var ce=Object.defineProperty;var St=Object.getOwnPropertyDescriptor;var Dt=Object.getOwnPropertyNames;var Pt=Object.prototype.hasOwnProperty;var kt=(t,e)=>{for(var n in e)ce(t,n,{get:e[n],enumerable:!0})},_t=(t,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Dt(e))!Pt.call(t,r)&&r!==n&&ce(t,r,{get:()=>e[r],enumerable:!(o=St(e,r))||o.enumerable});return t};var Ot=t=>_t(ce({},"__esModule",{value:!0}),t);var er={};kt(er,{LanguageCodes:()=>V,QualityQuestionsRespondentTypes:()=>W,SecurityAPIError:()=>Rt,checkQualityQuestions:()=>oe,default:()=>Hn,getQualityQuestions:()=>re,getSecurityResult:()=>te,getSecurityToken:()=>ne,hasCredentials:()=>$n,init:()=>xt,isAIUsageDetected:()=>z});module.exports=Ot(er);var Mt={UNAUTHORIZED:"Unauthorized"},Nt={EXPIRED:"EXPIRED_TOKEN",INVALID_API_KEY:"INVALID_API_KEY",MISSING_AUTHENTICATION_TOKEN:"MISSING_AUTHENTICATION_TOKEN"},Oe={INTERNAL_SERVER_ERROR:"Internal Server Error during API Request",MISSING_CREDENTIALS:"Missing Public Client ID or Public API Key",MAINTENANCE_MODE:"API Under Maintenance",RATE_LIMIT_REACHED:"Too many requests. Rate limit exceeded"},Me={SDK_INIT_ERROR:"Internal Server Error during SDK Initialization",DUPLICATE_INITIALIZATION:"Multiple SDK Initializations Detected",NOT_INITIALIZED:"SDK Not Initialized"},Ne={INVALID_CREDENTIALS:"Invalid Public Client ID or Public API Key"},Le={FAILED_TO_GET_SECURITY_RESULT:"Failed to Retrieve Security Result"},Ce={FAILED_TO_GET_SECURITY_TOKEN:" Failed to Generate Security Token"},h={...Mt,...Nt,...Oe,...Me,...Ne,...Le,...Ce},Be={...Oe,...Me,...Ne,...Le,...Ce};var V=(p=>(p.AR="ar",p.BN="bn",p.DE="de",p.EN="en",p.ES="es",p.FR="fr",p.HI="hi",p.ID="id",p.IT="it",p.JA="ja",p.KO="ko",p.MS="ms",p.NL="nl",p.PT="pt",p.RU="ru",p.YU="yu",p.ZH="zh",p))(V||{}),W=(y=>(y.GeneralConsumer="general-consumer",y.HRManagerDirector="hr-manager-director",y.WebDeveloper="web-developer",y.SoftwareEngineer="software-engineer",y.ITDirector="it-director",y.BusinessAdministrator="business-administrator",y.AccountsPayableManager="accounts-payable-manager",y.Accountant="accountant",y.FinanceDirector="finance-director",y.SmallBusinessOwner="small-business-owner",y.GeneralContractor="general-contractor",y.MarketingManagerDirector="marketing-manager-director",y.ConsumerShopper="consumer-shopper",y.Travel="travel",y.Entertainment="entertainment",y.FinanceAndBanking="finance-and-banking",y.General="general",y.B2BWhiteCollar="b2b-white-collar",y.B2BBlueCollar="b2b-blue-collar",y.Lawyer="lawyer",y))(W||{});var E=[];for(let t=0;t<256;++t)E.push((t+256).toString(16).slice(1));function Fe(t,e=0){return(E[t[e+0]]+E[t[e+1]]+E[t[e+2]]+E[t[e+3]]+"-"+E[t[e+4]]+E[t[e+5]]+"-"+E[t[e+6]]+E[t[e+7]]+"-"+E[t[e+8]]+E[t[e+9]]+"-"+E[t[e+10]]+E[t[e+11]]+E[t[e+12]]+E[t[e+13]]+E[t[e+14]]+E[t[e+15]]).toLowerCase()}var ue,Lt=new Uint8Array(16);function le(){if(!ue){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");ue=crypto.getRandomValues.bind(crypto)}return ue(Lt)}var Ct=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),me={randomUUID:Ct};function Bt(t,e,n){if(me.randomUUID&&!e&&!t)return me.randomUUID();t=t||{};let o=t.random??t.rng?.()??le();if(o.length<16)throw new Error("Random bytes length must be >= 16");if(o[6]=o[6]&15|64,o[8]=o[8]&63|128,e){if(n=n||0,n<0||n+16>e.length)throw new RangeError(`UUID byte range ${n}:${n+15} is out of buffer bounds`);for(let r=0;r<16;++r)e[n+r]=o[r];return e}return Fe(o)}var M=Bt;var Ue="dtect_security_sdk_state",Ge=typeof window<"u",Ve={isLoading:!1,token:"",visitorId:"",projectId:"",questionData:null,clientData:null,aiCheckData:null,aiUsageFlagged:!1},Y={state:{...Ve},securityKeys:{behaviorKey:"",automationKey:""}};function We(){if(!Ge)return Y;try{let t=sessionStorage.getItem(Ue);if(!t)return Y;let e=JSON.parse(t);return e.expiresAt&&e.expiresAt<Date.now()?Y:{state:{...Ve,...e.state},securityKeys:e.securityKeys||{behaviorKey:"",automationKey:""}}}catch{return Y}}function qe(t){if(Ge)try{let e=Date.now()+864e5,n={...t,expiresAt:e};sessionStorage.setItem(Ue,JSON.stringify(n))}catch{}}function $e(t){return t||M()}var Ft="0.1.3",q={...We(),monitor:void 0,version:Ft};function w(){return q}function S(t){q=t(q),qe({state:q.state,securityKeys:q.securityKeys})}function N(){let{config:t}=w(),e=t?.endpoint||"https://api.dtect.io/security",n=t?.includeResults?`${e}/client/check/result`:`${e}/client/check`;return{endpoint:e,clientId:t?.clientId,apiKey:t?.apiKey,checkResultEndpoint:n}}async function I(t,e="info",n={}){let o=`${n.endpoint??"https://api.dtect.io/security"}/log`,r={message:t,type:e,payload:n};navigator.sendBeacon(o,JSON.stringify(r))}function L(t){if(t instanceof Error){if(t?.message?.includes("maintenance_mode"))throw new Error(h.MAINTENANCE_MODE);switch(t?.message){default:throw new Error(h.INTERNAL_SERVER_ERROR)}}throw new Error(h.FAILED_TO_GET_SECURITY_TOKEN)}function Ke(t,e){let{state:n,config:o}=w();if(t instanceof Error){if(I(t.message,"error",{function:"init",endpoint:o?.endpoint,error:t,token:n.token,clientId:e.clientId}),t.message.includes("maintenance_mode"))throw new Error(h.MAINTENANCE_MODE);if([h.INVALID_API_KEY,h.UNAUTHORIZED].includes(t.message))throw new Error(h.INVALID_CREDENTIALS)}throw new Error(h.SDK_INIT_ERROR)}function je(t){let e=t?.qbc||!1,n=t?.mas||!1,o=t?.apd||!1,r=t?.scb||null,i=0,a=new Set,s=()=>{a.forEach(g=>g())},c=()=>{e=!1,n=!1,o=!1,r=void 0,i=0},m=()=>{let f=window?.getSelection()?.toString();f&&f.length>0&&(i=Date.now(),e=!0,s())},u=g=>{let f=g.clipboardData?.getData("text"),T=g.target instanceof HTMLInputElement||g.target instanceof HTMLTextAreaElement;f&&T&&(o=!0,s())},d=()=>{n=!0;let g=Date.now();if(i){let f=(g-i)/1e3;(r==null||f<r)&&(r=f)}s()};return document?.addEventListener("copy",m),document?.addEventListener("paste",u),window?.addEventListener("blur",d),{get qbc(){return e},get mas(){return n},get apd(){return o},get scb(){return r},onChange(g){return a.add(g),()=>{a.delete(g)}},reset:c,destroy(){a.clear(),document?.removeEventListener("copy",m),document?.removeEventListener("paste",u),window?.removeEventListener("blur",d)}}}function ze(t){S(e=>{let n=je(null);return{...e,monitor:n,state:{...e.state,isLoading:!0,token:t||"",aiUsageFlagged:!1}}})}function Ye(t){S(e=>({...e,state:{...e.state,isLoading:!1,token:t||""}}))}function C({projectId:t,visitorId:e}){let{state:n,monitor:o}=w();if(n.projectId===t&&n.visitorId===e)return;let r=M();o?.reset(),S(i=>({...i,state:{...i.state,aiCheckData:null,questionData:null,clientData:null,aiUsageFlagged:!1,projectId:t,visitorId:e,token:r}}))}var B={exclude:[],include:[],stabilize:["private","iframe"],logging:!0,timeout:5e3,cache_api_call:!0,performance:!1,experimental:!1},Fr={...B},de={private:[{exclude:["canvas"],browsers:["firefox","safari>=17","brave"]},{exclude:["audio"],browsers:["samsungbrowser","safari"]},{exclude:["fonts"],browsers:["firefox"]},{exclude:["audio.sampleHash","hardware.deviceMemory","header.acceptLanguage.q","system.hardwareConcurrency","plugins"],browsers:["brave"]},{exclude:["tls.extensions"],browsers:["firefox","chrome","safari"]},{exclude:["header.acceptLanguage"],browsers:["edge","chrome"]}],iframe:[{exclude:["system.applePayVersion","system.cookieEnabled"],browsers:["safari"]},{exclude:["permissions"]}],vpn:[{exclude:["ip"]}]};async function ge(){return Ut()}async function Ut(){return new Promise((e,n)=>{try{let i=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,5e3,44100),a=i?.createBufferSource(),s=i.createOscillator();s.frequency.value=1e3;let c=i.createDynamicsCompressor();c.threshold.value=-50,c.knee.value=40,c.ratio.value=12,c.attack.value=0,c.release.value=.2,s.connect(c),c.connect(i.destination),s.start();let m;i.oncomplete=u=>{m=u.renderedBuffer.getChannelData(0),e({sampleHash:Gt(m),maxChannels:i.destination.maxChannelCount,channelCountMode:a.channelCountMode})},i.startRendering()}catch(o){console.error("Error creating audio fingerprint:",o),n(o)}})}function Gt(t){let e=0;for(let n=0;n<t.length;++n)e+=Math.abs(t[n]);return e}function Q(t,e,n){let o=[];for(let a=0;a<t[0].data.length;a++){let s=[];for(let c=0;c<t.length;c++)s.push(t[c].data[a]);o.push(Vt(s))}let r=o,i=new Uint8ClampedArray(r);return new ImageData(i,e,n)}function Vt(t){if(t.length===0)return 0;let e={};for(let o of t)e[o]=(e[o]||0)+1;let n=t[0];for(let o in e)e[o]>e[n]&&(n=parseInt(o,10));return n}function Wt(t){return new TextEncoder().encode(t).buffer}function J(t){return t^=t>>>16,t=Math.imul(t,2246822507),t^=t>>>13,t=Math.imul(t,3266489909),t^=t>>>16,t>>>0}var x=new Uint32Array([597399067,2869860233,951274213,2716044179]);function P(t,e){return t<<e|t>>>32-e}function qt(t,e){let n=t.byteLength/16|0,o=new Uint32Array(t,0,n*4);for(let r=0;r<n;r++){let i=o.subarray(r*4,(r+1)*4);i[0]=Math.imul(i[0],x[0]),i[0]=P(i[0],15),i[0]=Math.imul(i[0],x[1]),e[0]=e[0]^i[0],e[0]=P(e[0],19),e[0]=e[0]+e[1],e[0]=Math.imul(e[0],5)+1444728091,i[1]=Math.imul(i[1],x[1]),i[1]=P(i[1],16),i[1]=Math.imul(i[1],x[2]),e[1]=e[1]^i[1],e[1]=P(e[1],17),e[1]=e[1]+e[2],e[1]=Math.imul(e[1],5)+197830471,i[2]=Math.imul(i[2],x[2]),i[2]=P(i[2],17),i[2]=Math.imul(i[2],x[3]),e[2]=e[2]^i[2],e[2]=P(e[2],15),e[2]=e[2]+e[3],e[2]=Math.imul(e[2],5)+2530024501,i[3]=Math.imul(i[3],x[3]),i[3]=P(i[3],18),i[3]=Math.imul(i[3],x[0]),e[3]=e[3]^i[3],e[3]=P(e[3],13),e[3]=e[3]+e[0],e[3]=Math.imul(e[3],5)+850148119}}function $t(t,e){let n=t.byteLength/16|0,o=t.byteLength%16,r=new Uint32Array(4),i=new Uint8Array(t,n*16,o);switch(o){case 15:r[3]=r[3]^i[14]<<16;case 14:r[3]=r[3]^i[13]<<8;case 13:r[3]=r[3]^i[12]<<0,r[3]=Math.imul(r[3],x[3]),r[3]=P(r[3],18),r[3]=Math.imul(r[3],x[0]),e[3]=e[3]^r[3];case 12:r[2]=r[2]^i[11]<<24;case 11:r[2]=r[2]^i[10]<<16;case 10:r[2]=r[2]^i[9]<<8;case 9:r[2]=r[2]^i[8]<<0,r[2]=Math.imul(r[2],x[2]),r[2]=P(r[2],17),r[2]=Math.imul(r[2],x[3]),e[2]=e[2]^r[2];case 8:r[1]=r[1]^i[7]<<24;case 7:r[1]=r[1]^i[6]<<16;case 6:r[1]=r[1]^i[5]<<8;case 5:r[1]=r[1]^i[4]<<0,r[1]=Math.imul(r[1],x[1]),r[1]=P(r[1],16),r[1]=Math.imul(r[1],x[2]),e[1]=e[1]^r[1];case 4:r[0]=r[0]^i[3]<<24;case 3:r[0]=r[0]^i[2]<<16;case 2:r[0]=r[0]^i[1]<<8;case 1:r[0]=r[0]^i[0]<<0,r[0]=Math.imul(r[0],x[0]),r[0]=P(r[0],15),r[0]=Math.imul(r[0],x[1]),e[0]=e[0]^r[0]}}function Kt(t,e){e[0]=e[0]^t.byteLength,e[1]=e[1]^t.byteLength,e[2]=e[2]^t.byteLength,e[3]=e[3]^t.byteLength,e[0]=e[0]+e[1]|0,e[0]=e[0]+e[2]|0,e[0]=e[0]+e[3]|0,e[1]=e[1]+e[0]|0,e[2]=e[2]+e[0]|0,e[3]=e[3]+e[0]|0,e[0]=J(e[0]),e[1]=J(e[1]),e[2]=J(e[2]),e[3]=J(e[3]),e[0]=e[0]+e[1]|0,e[0]=e[0]+e[2]|0,e[0]=e[0]+e[3]|0,e[1]=e[1]+e[0]|0,e[2]=e[2]+e[0]|0,e[3]=e[3]+e[0]|0}function b(t,e=0){if(e=e?e|0:0,typeof t=="string"&&(t=Wt(t)),!(t instanceof ArrayBuffer))throw new TypeError("Expected key to be ArrayBuffer or string");let n=new Uint32Array([e,e,e,e]);qt(t,n),$t(t,n),Kt(t,n);let o=new Uint8Array(n.buffer);return Array.from(o).map(r=>r.toString(16).padStart(2,"0")).join("")}var jt=3,Qe=280,Je=20;async function fe(){return zt()}function zt(){return new Promise(t=>{let e=Array.from({length:jt},()=>Yt()),n=Q(e,Qe,Je);t({commonPixelsHash:b(n.data.toString()).toString()})})}function Yt(){let t=document.createElement("canvas"),e=t.getContext("2d");if(!e)return new ImageData(1,1);t.width=Qe,t.height=Je;let n=e.createLinearGradient(0,0,t.width,t.height);n.addColorStop(0,"red"),n.addColorStop(1/6,"orange"),n.addColorStop(2/6,"yellow"),n.addColorStop(3/6,"green"),n.addColorStop(4/6,"blue"),n.addColorStop(5/6,"indigo"),n.addColorStop(1,"violet"),e.fillStyle=n,e.fillRect(0,0,t.width,t.height);let o="Random Text WMwmil10Oo";return e.font="23.123px Arial",e.fillStyle="black",e.fillText(o,-5,15),e.fillStyle="rgba(0, 0, 255, 0.5)",e.fillText(o,-3.3,17.7),e.beginPath(),e.moveTo(0,0),e.lineTo(t.width*2/7,t.height),e.strokeStyle="white",e.lineWidth=2,e.stroke(),e.getImageData(0,0,t.width,t.height)}async function X(t){for(;!document.body;)await Qt(50);let e=document.createElement("iframe");e.setAttribute("frameBorder","0");let n=e.style;n.setProperty("position","fixed"),n.setProperty("display","block","important"),n.setProperty("visibility","visible"),n.setProperty("border","0"),n.setProperty("opacity","0"),e.src="about:blank",document.body.appendChild(e);let o=e.contentDocument||e.contentWindow?.document;if(!o)throw new Error("Iframe document is not accessible");t({iframe:o}),setTimeout(()=>{document.body.removeChild(e)},0)}function Qt(t,e){return new Promise(n=>setTimeout(n,t,e))}var Jt=["Arial","Arial Black","Arial Narrow","Arial Rounded MT","Arimo","Archivo","Barlow","Bebas Neue","Bitter","Bookman","Calibri","Cabin","Candara","Century","Century Gothic","Comic Sans MS","Constantia","Courier","Courier New","Crimson Text","DM Mono","DM Sans","DM Serif Display","DM Serif Text","Dosis","Droid Sans","Exo","Fira Code","Fira Sans","Franklin Gothic Medium","Garamond","Geneva","Georgia","Gill Sans","Helvetica","Impact","Inconsolata","Indie Flower","Inter","Josefin Sans","Karla","Lato","Lexend","Lucida Bright","Lucida Console","Lucida Sans Unicode","Manrope","Merriweather","Merriweather Sans","Montserrat","Myriad","Noto Sans","Nunito","Nunito Sans","Open Sans","Optima","Orbitron","Oswald","Pacifico","Palatino","Perpetua","PT Sans","PT Serif","Poppins","Prompt","Public Sans","Quicksand","Rajdhani","Recursive","Roboto","Roboto Condensed","Rockwell","Rubik","Segoe Print","Segoe Script","Segoe UI","Sora","Source Sans Pro","Space Mono","Tahoma","Taviraj","Times","Times New Roman","Titillium Web","Trebuchet MS","Ubuntu","Varela Round","Verdana","Work Sans"],Xt=["monospace","sans-serif","serif"];async function pe(t){return Zt()}function Zt(){return new Promise((t,e)=>{try{X(async({iframe:n})=>{let r=n.createElement("canvas").getContext("2d"),i=Xt.map(s=>Xe(r,s)),a={};Jt.forEach(s=>{let c=Xe(r,s);i.includes(c)||(a[s]=c)}),t(a)})}catch{e({error:"unsupported"})}})}function Xe(t,e){if(!t)return null;let n="WwMmLli0Oo";return t.font=`72px ${e}`,t.measureText(n).width}function ye(){return new Promise((t,e)=>{let n=navigator.deviceMemory!==void 0?navigator.deviceMemory:0,o=window.performance&&window.performance.memory?window.performance.memory:0;t({videocard:Ht(),architecture:en(),deviceMemory:n.toString()||"undefined",jsHeapSizeLimit:o.jsHeapSizeLimit||0})})}function Ht(){let t=document.createElement("canvas"),e=t.getContext("webgl")??t.getContext("experimental-webgl");if(e&&"getParameter"in e)try{let n=(e.getParameter(e.VENDOR)||"").toString(),o=(e.getParameter(e.RENDERER)||"").toString(),r={vendor:n,renderer:o,version:(e.getParameter(e.VERSION)||"").toString(),shadingLanguageVersion:(e.getParameter(e.SHADING_LANGUAGE_VERSION)||"").toString()};if(!o.length||!n.length){let i=e.getExtension("WEBGL_debug_renderer_info");if(i){let a=(e.getParameter(i.UNMASKED_VENDOR_WEBGL)||"").toString(),s=(e.getParameter(i.UNMASKED_RENDERER_WEBGL)||"").toString();a&&(r.vendorUnmasked=a),s&&(r.rendererUnmasked=s)}}return r}catch{}return"undefined"}function en(){let t=new Float32Array(1),e=new Uint8Array(t.buffer);return t[0]=1/0,t[0]=t[0]-t[0],e[3]}function he(){return new Promise(t=>{t({languages:tn(),timezone:nn()})})}function tn(){let t=[];return navigator.language}function nn(){return Intl.DateTimeFormat().resolvedOptions().timeZone}var Z=(t,e,n,o)=>{let r=(n-e)/o,i=0;for(let a=0;a<o;a++){let s=e+(a+.5)*r;i+=t(s)}return i*r};function we(){return new Promise(t=>{t({acos:Math.acos(.5),asin:Z(Math.asin,-1,1,97),cos:Z(Math.cos,0,Math.PI,97),largeCos:Math.cos(1e20),largeSin:Math.sin(1e20),largeTan:Math.tan(1e20),sin:Z(Math.sin,-Math.PI,Math.PI,97),tan:Z(Math.tan,0,2*Math.PI,97)})})}function rn(t){if(t.length===0)return null;let e={};t.forEach(r=>{let i=String(r);e[i]=(e[i]||0)+1});let n=t[0],o=1;return Object.keys(e).forEach(r=>{e[r]>o&&(n=r,o=e[r])}),n}function Ze(t,e){let n={};return e.forEach(o=>{let r=t.map(a=>o in a?a[o]:void 0).filter(a=>a!==void 0),i=rn(r);i&&(n[o]=i)}),n}var on=["accelerometer","accessibility","accessibility-events","ambient-light-sensor","background-fetch","background-sync","bluetooth","camera","clipboard-read","clipboard-write","device-info","display-capture","gyroscope","geolocation","local-fonts","magnetometer","microphone","midi","nfc","notifications","payment-handler","persistent-storage","push","speaker","storage-access","top-level-storage-access","window-management","query"];async function Ie(t){let e=t?.permissions_to_check||on,o=await Promise.all(Array.from({length:3},()=>an(e)));return Ze(o,e)}async function an(t){let e={};for(let n of t)try{let o=await navigator.permissions.query({name:n});e[n]=o.state.toString()}catch{}return e}async function ve(){let t=[];if(navigator.plugins)for(let e=0;e<navigator.plugins.length;e++){let n=navigator.plugins[e];t.push([n.name,n.filename,n.description].join("|"))}return new Promise(e=>{e({plugins:t})})}function F(){if(typeof navigator>"u")return{name:"unknown",version:"unknown"};let t=navigator.userAgent,e=[/(?<name>SamsungBrowser)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>EdgA|EdgiOS|Edg)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>OPR|OPX)\/(?<version>\d+(?:\.\d+)+)/,/Opera[\s\/](?<version>\d+(?:\.\d+)+)/,/Opera Mini\/(?<version>\d+(?:\.\d+)+)/,/Opera Mobi\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Vivaldi)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Brave)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>CriOS)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>FxiOS)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Chrome|Chromium)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Firefox|Waterfox|Iceweasel|IceCat)\/(?<version>\d+(?:\.\d+)+)/,/Version\/(?<version1>[\d.]+).*Safari\/[\d.]+|(?<name>Safari)\/(?<version2>[\d.]+)/,/(?<name>MSIE|Trident|IEMobile).+?(?<version>\d+(?:\.\d+)+)/,/(?<name>[A-Za-z]+)\/(?<version>\d+(?:\.\d+)+)/],n={edg:"Edge",edga:"Edge",edgios:"Edge",opr:"Opera",opx:"Opera",crios:"Chrome",fxios:"Firefox",samsung:"SamsungBrowser",vivaldi:"Vivaldi",brave:"Brave"};for(let o of e){let r=t.match(o);if(r){let i=r.groups?.name,a=r.groups?.version||r.groups?.version1||r.groups?.version2;if(!i&&(r.groups?.version1||r.groups?.version2)&&(i="Safari"),!i&&o.source.includes("Opera Mini")&&(i="Opera Mini"),!i&&o.source.includes("Opera Mobi")&&(i="Opera Mobi"),!i&&o.source.includes("Opera")&&(i="Opera"),!i&&r[1]&&(i=r[1]),!a&&r[2]&&(a=r[2]),i)return{name:n[i.toLowerCase()]||i,version:a||"unknown"}}}return{name:"unknown",version:"unknown"}}function H(){if(typeof navigator>"u"||!navigator.userAgent)return!1;let t=navigator.userAgent;return/Mobi|Android|iPhone|iPod|IEMobile|Opera Mini|Opera Mobi|webOS|BlackBerry|Windows Phone/i.test(t)&&!/iPad/i.test(t)}function Ee(){return new Promise(t=>{let e={is_touchscreen:navigator.maxTouchPoints>0,maxTouchPoints:navigator.maxTouchPoints,colorDepth:screen.colorDepth,mediaMatches:cn()};H()&&navigator.maxTouchPoints>0&&(e.resolution=sn()),t(e)})}function sn(){let t=window.screen.width,e=window.screen.height,n=Math.max(t,e).toString(),o=Math.min(t,e).toString();return`${n}x${o}`}function cn(){let t=[],e={"prefers-contrast":["high","more","low","less","forced","no-preference"],"any-hover":["hover","none"],"any-pointer":["none","coarse","fine"],pointer:["none","coarse","fine"],hover:["hover","none"],update:["fast","slow"],"inverted-colors":["inverted","none"],"prefers-reduced-motion":["reduce","no-preference"],"prefers-reduced-transparency":["reduce","no-preference"],scripting:["none","initial-only","enabled"],"forced-colors":["active","none"]};return Object.keys(e).forEach(n=>{e[n].forEach(o=>{matchMedia(`(${n}: ${o})`).matches&&t.push(`${n}: ${o}`)})}),t}function be(){return new Promise(t=>{let e=F(),n=navigator.userAgent,o={platform:window.navigator.platform,productSub:navigator.productSub,product:navigator.product,useragent:navigator.userAgent,hardwareConcurrency:navigator.hardwareConcurrency,browser:{name:e.name,version:e.version},mobile:H(),applePayVersion:un(),cookieEnabled:window.navigator.cookieEnabled};t(o)})}function un(){if(window.location.protocol==="https:"&&typeof window.ApplePaySession=="function")try{let t=window.ApplePaySession.supportsVersion;for(let e=15;e>0;e--)if(t(e))return e}catch{return 0}return 0}var ln=F().name!=="SamsungBrowser"?1:3,A,l=null;function mn(){typeof document<"u"&&(A=document.createElement("canvas"),A.width=200,A.height=100,l=A.getContext("webgl"))}async function Te(){mn();try{if(!l)throw new Error("WebGL not supported");let t=Array.from({length:ln},()=>dn()),e=Q(t,A.width,A.height);return{commonPixelsHash:b(e.data.toString()).toString()}}catch{return{webgl:"unsupported"}}}function dn(){try{if(!l)throw new Error("WebGL not supported");let t=`
2
2
  attribute vec2 position;
3
3
  void main() {
4
4
  gl_Position = vec4(position, 0.0, 1.0);
@@ -8,4 +8,4 @@
8
8
  void main() {
9
9
  gl_FragColor = vec4(0.812, 0.195, 0.553, 0.921); // Set line color
10
10
  }
11
- `,n=l.createShader(l.VERTEX_SHADER),o=l.createShader(l.FRAGMENT_SHADER);if(!n||!o)throw new Error("Failed to create shaders");if(l.shaderSource(n,t),l.shaderSource(o,e),l.compileShader(n),!l.getShaderParameter(n,l.COMPILE_STATUS))throw new Error("Vertex shader compilation failed: "+l.getShaderInfoLog(n));if(l.compileShader(o),!l.getShaderParameter(o,l.COMPILE_STATUS))throw new Error("Fragment shader compilation failed: "+l.getShaderInfoLog(o));let r=l.createProgram();if(!r)throw new Error("Failed to create shader program");if(l.attachShader(r,n),l.attachShader(r,o),l.linkProgram(r),!l.getProgramParameter(r,l.LINK_STATUS))throw new Error("Shader program linking failed: "+l.getProgramInfoLog(r));l.useProgram(r);let i=137,a=new Float32Array(i*4),s=2*Math.PI/i;for(let g=0;g<i;g++){let f=g*s;a[g*4]=0,a[g*4+1]=0,a[g*4+2]=Math.cos(f)*(A.width/2),a[g*4+3]=Math.sin(f)*(A.height/2)}let c=l.createBuffer();l.bindBuffer(l.ARRAY_BUFFER,c),l.bufferData(l.ARRAY_BUFFER,a,l.STATIC_DRAW);let m=l.getAttribLocation(r,"position");l.enableVertexAttribArray(m),l.vertexAttribPointer(m,2,l.FLOAT,!1,0,0),l.viewport(0,0,A.width,A.height),l.clearColor(0,0,0,1),l.clear(l.COLOR_BUFFER_BIT),l.drawArrays(l.LINES,0,i*2);let u=new Uint8ClampedArray(A.width*A.height*4);return l.readPixels(0,0,A.width,A.height,l.RGBA,l.UNSIGNED_BYTE,u),new ImageData(u,A.width,A.height)}catch{return new ImageData(1,1)}finally{l&&(l.bindBuffer(l.ARRAY_BUFFER,null),l.useProgram(null),l.viewport(0,0,l.drawingBufferWidth,l.drawingBufferHeight),l.clearColor(0,0,0,0))}}function S(t){let e=[];return function n(o){if(o&&o.toJSON&&typeof o.toJSON=="function"&&(o=o.toJSON()),o===void 0)return;if(typeof o=="number")return isFinite(o)?""+o:"null";if(typeof o!="object")return JSON.stringify(o);let r,i;if(Array.isArray(o)){for(i="[",r=0;r<o.length;r++)r&&(i+=","),i+=n(o[r])||"null";return i+"]"}if(o===null)return"null";if(e.indexOf(o)!==-1)throw new TypeError("Converting circular structure to JSON");let a=e.push(o)-1,s=Object.keys(o).sort();for(i="",r=0;r<s.length;r++){let c=s[r],m=n(o[c]);m&&(i&&(i+=","),i+=JSON.stringify(c)+":"+m)}return e.splice(a,1),"{"+i+"}"}(t)||""}async function Re(){return new Promise(t=>{try{let e=window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection;if(!e){t({supported:!1,error:"WebRTC not supported"});return}let n={iceCandidatePoolSize:1,iceServers:[]},o=new e(n);o.createDataChannel(""),(async()=>{try{let i={offerToReceiveAudio:!0,offerToReceiveVideo:!0},a=await o.createOffer(i);await o.setLocalDescription(a);let s=a.sdp||"",c=[...new Set((s.match(/extmap:\d+ [^\n\r]+/g)||[]).map(v=>v.replace(/extmap:\d+ /,"")))].sort(),m=v=>{let R=s.match(new RegExp(`m=${v} [^\\s]+ [^\\s]+ ([^\\n\\r]+)`));return R?R[1].split(" "):[]},u=(v,R)=>R.map(p=>{let _=new RegExp(`(rtpmap|fmtp|rtcp-fb):${p} (.+)`,"g"),O=[...s.matchAll(_)];if(!O.length)return null;let y={};return O.forEach(xt=>{let[er,ie,ae]=xt,se=ae.split("/");ie==="rtpmap"?(y.mimeType=`${v}/${se[0]}`,y.clockRate=+se[1],v==="audio"&&(y.channels=+se[2]||1)):ie==="rtcp-fb"?(y.feedbackSupport=y.feedbackSupport||[],y.feedbackSupport.push(ae)):ie==="fmtp"&&(y.sdpFmtpLine=ae)}),y}).filter(Boolean),d=u("audio",m("audio")),g=u("video",m("video")),f={audio:{count:d.length,hash:b(S(d))},video:{count:g.length,hash:b(S(g))},extensionsHash:b(S(c))},T=await new Promise(v=>{let R=setTimeout(()=>{o.removeEventListener("icecandidate",p),o.close(),v({supported:!0,...f,timeout:!0})},3e3),p=_=>{let O=_.candidate;!O||!O.candidate||(clearTimeout(R),o.removeEventListener("icecandidate",p),o.close(),v({supported:!0,...f,candidateType:O.type||""}))};o.addEventListener("icecandidate",p)});t({details:T,hash:b(S(T))})}catch(i){o.close(),t({supported:!0,error:`WebRTC offer failed: ${i.message}`})}})()}catch(e){t({supported:!1,error:`WebRTC error: ${e.message}`})}})}var Ze=["\u{1D504}","\u{1D505}","\u212D","\u{1D507}","\u{1D508}","\u{1D509}","\u{1D538}","\u{1D539}","\u2102","\u{1D53B}","\u{1D53C}","\u{1D53D}"],He=["\u03B2","\u03C8","\u03BB","\u03B5","\u03B6","\u03B1","\u03BE","\u03BC","\u03C1","\u03C6","\u03BA","\u03C4","\u03B7","\u03C3","\u03B9","\u03C9","\u03B3","\u03BD","\u03C7","\u03B4","\u03B8","\u03C0","\u03C5","\u03BF"];async function xe(){return new Promise(t=>{try{X(async({iframe:e})=>{try{if(!dn(e)){t({supported:!1,error:"MathML not supported"});return}let n=[$("integral","<msubsup><mo>\u222B</mo><mi>a</mi><mi>b</mi></msubsup><mfrac><mrow><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mrow><mi>g</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mfrac><mi>dx</mi>"),$("fraction","<mfrac><mrow><mi>\u03C0</mi><mo>\xD7</mo><msup><mi>r</mi><mn>2</mn></msup></mrow><mrow><mn>2</mn><mi>\u03C3</mi></mrow></mfrac>"),$("matrix","<mo>[</mo><mtable><mtr><mtd><mi>\u03B1</mi></mtd><mtd><mi>\u03B2</mi></mtd></mtr><mtr><mtd><mi>\u03B3</mi></mtd><mtd><mi>\u03B4</mi></mtd></mtr></mtable><mo>]</mo>"),gn(),...fn()],o=[],r="";n.forEach((a,s)=>{let c=pn(a,e);o.push({width:c.dimensions.width,height:c.dimensions.height}),s===0&&c.fontInfo&&(r=b(S(c.fontInfo)))});let i={fontStyleHash:r,dimensions:o};t({details:i,hash:b(S(i))})}catch(n){t({supported:!1,error:`MathML error: ${n.message}`})}})}catch(e){t({supported:!1,error:`MathML error: ${e.message}`})}})}function dn(t){try{let e=t.createElement("math");e.innerHTML="<mrow><mi>x</mi></mrow>",e.style.position="absolute",e.style.visibility="hidden",t.body.appendChild(e);let n=e.getBoundingClientRect();return t.body.removeChild(e),n.width>0&&n.height>0}catch{return!1}}function $(t,e){return`<math><mrow>${e}</mrow></math>`}function gn(){let t="<mo>\u220F</mo>";return Ze.forEach((e,n)=>{let o=n*2,r=He.slice(o,o+2);r.length===2&&(t+=`<mmultiscripts><mi>${e}</mi><none/><mi>${r[1]}</mi><mprescripts></mprescripts><mi>${r[0]}</mi><none/></mmultiscripts>`)}),$("complex_nested",`<munderover><mmultiscripts>${t}</mmultiscripts></munderover>`)}function fn(){let t=[];return Ze.forEach((e,n)=>{let o=n*2,r=He.slice(o,o+2);r.length===2&&t.push($("combined",`<mmultiscripts><mi>${e}</mi><none/><mi>${r[1]}</mi><mprescripts></mprescripts><mi>${r[0]}</mi><none/></mmultiscripts>`))}),t}function pn(t,e){try{let n=e.createElement("math");n.innerHTML=t.replace(/<\/?math>/g,""),n.style.whiteSpace="nowrap",n.style.position="absolute",n.style.visibility="hidden",n.style.top="-9999px",e.body.appendChild(n);let o=n.getBoundingClientRect(),i=(e.defaultView||window).getComputedStyle(n),a={dimensions:{width:o.width,height:o.height},fontInfo:{fontFamily:i.fontFamily,fontSize:i.fontSize,fontWeight:i.fontWeight,fontStyle:i.fontStyle,lineHeight:i.lineHeight,fontVariant:i.fontVariant||"normal",fontStretch:i.fontStretch||"normal",fontSizeAdjust:i.fontSizeAdjust||"none",textRendering:i.textRendering||"auto",fontFeatureSettings:i.fontFeatureSettings||"normal",fontVariantNumeric:i.fontVariantNumeric||"normal",fontKerning:i.fontKerning||"auto"}};return e.body.removeChild(n),a}catch(n){return{error:n.message}}}var yn=800;async function Ae(){return new Promise(t=>{try{if(typeof window>"u"||!window.speechSynthesis||typeof window.speechSynthesis.getVoices!="function"){t({supported:!1,error:"Speech Synthesis API not supported"});return}let e=!1,n=null,o=a=>{if(!e){e=!0,n&&clearTimeout(n);try{let s=a.map(m=>{let u=g=>g.replace(/\\/g,"\\\\").replace(/,/g,"\\,");return[u(m.voiceURI||""),u(m.name||""),u(m.lang||""),m.localService?"1":"0",m.default?"1":"0"].join(",")});s.sort();let c={voiceCount:a.length,voicesHash:b(S(s))};t({details:c,hash:b(S(c))})}catch(s){t({supported:!0,error:`Voice processing failed: ${s.message}`})}}},r=window.speechSynthesis.getVoices();if(r.length>0){o(r);return}n=setTimeout(()=>{let a=window.speechSynthesis.getVoices();o(a)},yn);let i=()=>{window.speechSynthesis.removeEventListener("voiceschanged",i);let a=window.speechSynthesis.getVoices();o(a)};window.speechSynthesis.addEventListener("voiceschanged",i)}catch(e){t({supported:!1,error:`Speech Synthesis error: ${e.message}`})}})}var et={audio:ge,canvas:fe,fonts:pe,hardware:ye,locales:he,math:we,permissions:Ie,plugins:ve,screen:Ee,system:be,webgl:Te},tt={webrtc:Re,mathml:xe,speech:Ae},Se={},nt={timeout:"true"},De=(t,e,n)=>{Se[t]=e};function hn(t,e){return new Promise(n=>{setTimeout(()=>n(e),t)})}function rt(t,e,n){return Promise.all(t.map(o=>{let r=performance.now();return Promise.race([o.then(i=>({value:i,elapsed:performance.now()-r})),hn(e,n).then(i=>({value:i,elapsed:performance.now()-r}))])}))}function ee(t,e){let n=F();if(n.name==="unknown"&&t.system&&typeof t.system=="object"&&!Array.isArray(t.system)){let d=t.system.browser;if(d&&typeof d=="object"&&!Array.isArray(d)){let g=d;n={name:g.name||"unknown",version:g.version||"unknown"}}}let o=n.name.toLowerCase(),r=n.version.split(".")[0]||"0",i=parseInt(r,10),a=[...e?.exclude||[]],s=e?.stabilize||[],c=e?.include||[];for(let u of s){let d=de[u];if(d)for(let g of d){let f=!("browsers"in g),T=!f&&g.browsers?.some(v=>{let R=v.match(/(.+?)(>=)(\d+)/);if(R){let[,p,,_]=R,O=parseInt(_,10);return o===p&&i>=O}return o===v});(f||T)&&a.push(...g.exclude)}}function m(u,d=""){let g={};for(let[f,T]of Object.entries(u)){let v=d?`${d}.${f}`:f;if(typeof T=="object"&&!Array.isArray(T)&&T!==null){let R=m(T,v);Object.keys(R).length>0&&(g[f]=R)}else{let R=a.some(_=>v.startsWith(_)),p=c.some(_=>v.startsWith(_));(!R||p)&&(g[f]=T)}}return g}return m(t)}async function Pe(t){let e={...B,...t},n=e.logging&&!sessionStorage.getItem("_tmjs_l")&&Math.random()<1e-4,o={...et,...Se},{elapsed:r,resolvedComponents:i}=await ot(o,e),a={},s={};if(n||e.experimental){let{elapsed:R,resolvedComponents:p}=await ot(tt,e);a=p,s=R}let c={...r,...s},m=e.performance?{elapsed:c}:{},u=ee({},e),d={...i,...u},g={};return{thumbmark:b(S(d)),components:d,info:g,version:"",...m,...Object.keys(a).length>0&&e.experimental&&{experimental:a}}}async function ot(t,e){let n={...B,...e},o=Object.entries(t).filter(([u])=>!n?.exclude?.includes(u)).filter(([u])=>n?.include?.some(d=>d.includes("."))?n?.include?.some(d=>d.startsWith(u)):n?.include?.length===0||n?.include?.includes(u)),r=o.map(([u])=>u),i=o.map(([u,d])=>d(e)),a=await rt(i,n?.timeout||5e3,nt),s={},c={};a.forEach((u,d)=>{u.value!=null&&(c[r[d]]=u.value,s[r[d]]=u.elapsed??0)});let m=ee(c,n);return{elapsed:s,resolvedComponents:m}}var K=class{options;constructor(e){this.options={...B,...e}}async get(e){let n={...this.options,...e};return Pe(n)}getVersion(){return""}includeComponent(e,n){De(e,n)}};var wn=(t,e={})=>({"Content-Type":"application/json",...t?.accessToken&&{Authorization:`Bearer ${t?.accessToken}`},...e}),In=async(t,e)=>{if(!t.ok){let n=await t.text();throw new Error(n)}return e==="file"?t.blob():e==="json"?t.json():e==="text"?t.text():null},it=async({url:t,auth:e,body:n,method:o="GET",headers:r={},responseType:i="json"})=>{let a={method:o,headers:wn(e,r),...n?{body:n instanceof FormData?n:JSON.stringify(n)}:{}},s=await fetch(t,a);return In(s,i)},at=t=>it({...t,method:"GET"}),U=t=>it({...t,method:"POST"});var vn=[{name:"lowCpuCores",weight:2,async check(){let t=navigator.hardwareConcurrency||0,e=t>0&&t<=2;return{value:t,triggered:e}}},{name:"lowDeviceMemory",weight:0,async check(){let t=navigator.deviceMemory||0,e=t>0&&t<=4;return{value:t,triggered:e}}},{name:"platformMismatch",weight:1,async check(){let t=navigator.userAgent||"",e=navigator.platform||"",n=t.includes("Mac")&&e.includes("Linux")||t.includes("Win")&&e.includes("Mac")||e===""||e==="Unknown";return{value:e,triggered:n}}},{name:"webglSoftwareRenderer",weight:4,async check(){let t=null,e=null,n=!1;try{let o=document.createElement("canvas"),r=o.getContext("webgl")||o.getContext("experimental-webgl");if(r){let i=r.getExtension("WEBGL_debug_renderer_info");if(i){t=r.getParameter(i.UNMASKED_VENDOR_WEBGL)||"",e=r.getParameter(i.UNMASKED_RENDERER_WEBGL)||"";let a=e.toLowerCase(),s=t.toLowerCase();n=a.includes("swiftshader")||a.includes("llvmpipe")||a.includes("softwar")||a.includes("basic render")||a.includes("vmware")||a.includes("virtualbox")||s.includes("vmware")||s.includes("parallels")}}}catch{}return{value:{vendor:t,renderer:e},triggered:n}}},{name:"missingWebGPUAdapter",weight:3,async check(){if(!("gpu"in navigator))return{value:"no WebGPU",triggered:!0};try{let t=await navigator.gpu.requestAdapter();return{value:t?"adapter-present":"adapter-null",triggered:!t}}catch{return{value:"adapter-error",triggered:!0}}}},{name:"reducedTimerPrecision",weight:1,async check(){let t=performance.now();await new Promise(o=>setTimeout(o,50));let e=performance.now()-t,n=e<30||e>80;return{value:e.toFixed(2),triggered:n}}},{name:"timerJitter",weight:0,async check(){let t=[];for(let n=0;n<10;n++){let o=performance.now();await new Promise(i=>setTimeout(i,10));let r=performance.now();t.push(r-o)}let e=Math.sqrt(t.map(n=>(n-10)**2).reduce((n,o)=>n+o)/t.length);return{value:e.toFixed(3),triggered:e>5}}},{name:"audioFingerprint",weight:1,async check(){try{let t=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,44100,44100),e=t.createOscillator();e.frequency.value=440,e.connect(t.destination),e.start(0);let o=(await t.startRendering()).getChannelData(0).reduce((r,i)=>r+Math.abs(i),0);return{value:o,triggered:o<100}}catch{return{value:"audio-error",triggered:!0}}}},{name:"canvasEntropy",weight:1,async check(){try{let t=document.createElement("canvas"),e=t.getContext("2d");e.textBaseline="top",e.font="14px 'Arial'",e.fillText("VM CHECK",2,2);let o=[...t.toDataURL()].reduce((r,i)=>(r+i.charCodeAt(0))%9999999,0);return{value:o,triggered:o===0||o===999999}}catch{return{value:"canvas-error",triggered:!0}}}},{name:"windowSizeWeird",weight:1,async check(){let t=window.innerWidth/window.innerHeight,e=t===1.333||t===1.6;return{value:t.toFixed(2),triggered:e}}},{name:"touchMismatch",weight:1,async check(){let t="ontouchstart"in window,e=navigator.maxTouchPoints||0;return{value:{hasTouch:t,maxTouch:e},triggered:t&&e===0}}},{name:"batteryVirtualized",weight:1,async check(){if(!navigator.getBattery)return{value:"no API",triggered:!0};try{let t=await navigator.getBattery(),e=t.chargingTime===0&&t.dischargingTime===1/0;return{value:{chargingTime:t.chargingTime,dischargingTime:t.dischargingTime},triggered:e}}catch{return{value:"battery-error",triggered:!0}}}},{name:"permissionsWeird",weight:0,async check(){try{let t=await navigator.permissions.query({name:"camera"});return{value:t.state,triggered:t.state==="prompt"}}catch{return{value:"perm-error",triggered:!0}}}},{name:"noMediaDevices",weight:1,async check(){try{let t=await navigator.mediaDevices.enumerateDevices();return{value:t.length,triggered:t.length===0}}catch{return{value:"media-error",triggered:!0}}}},{name:"virtualizedMediaDevices",weight:1,async check(){try{let t=await navigator.mediaDevices.enumerateDevices(),e=t.some(n=>n.label.toLowerCase().includes("virtual"));return{value:t.map(n=>n.label),triggered:e}}catch{return{value:"media-error",triggered:!0}}}},{name:"webrtcIpPattern",weight:2,async check(){return new Promise(t=>{try{let e=new RTCPeerConnection({iceServers:[]});e.createDataChannel("x");let n=setTimeout(()=>{e.close(),t({value:"timeout",triggered:!1})},3e3);e.onicecandidate=o=>{if(!o?.candidate){clearTimeout(n),e.close(),t({value:"no candidate",triggered:!1});return}let r=o.candidate.candidate.toLowerCase();clearTimeout(n),e.close(),t({value:r,triggered:r.includes("10.0.2.")||r.includes("172.16.")||r.includes("192.168.56.")})},e.createOffer().then(o=>e.setLocalDescription(o))}catch{t({value:"rtc-error",triggered:!1})}})}},{name:"gpuAccelerationDisabled",weight:3,async check(){let e=document.createElement("canvas").getContext("webgl");return{value:!!e,triggered:!e}}},{name:"noWebGL2",weight:3,async check(){let t=document.createElement("canvas").getContext("webgl2");return{value:!!t,triggered:!t}}},{name:"lowStorageQuota",weight:1,async check(){try{let t=await navigator.storage.estimate();return{value:t.quota,triggered:(t.quota??0)<524288e3}}catch{return{value:"storage-error",triggered:!0}}}},{name:"lowEntropy",weight:1,async check(){let t=Object.keys(navigator).length+Object.keys(screen).length+Object.keys(window).length;return{value:t,triggered:t<200}}},{name:"noLanguages",weight:1,async check(){let t=navigator.languages||[];return{value:t,triggered:t.length===0}}},{name:"uaEntropyLow",weight:1,async check(){let t=navigator.userAgent;return{value:t,triggered:t.length<30}}},{name:"weirdDPI",weight:2,async check(){let t=window.devicePixelRatio;return{value:t,triggered:t===1}}}],En=[{name:"tamperingPluginMismatch",penalty:3,async check(){try{let t=navigator.userAgent.toLowerCase(),e=(t.includes("chrome")||t.includes("edg"))&&!t.includes("firefox")&&!t.includes("safari"),n=navigator.plugins?.length??0,o=!e&&n>0;return{value:{pluginCount:n,isChromeLike:e},triggered:o}}catch{return{value:"error",triggered:!1}}}},{name:"tamperingWebglNoise",penalty:1,async check(){try{let t=document.createElement("canvas");t.width=16,t.height=16;let e=t.getContext("webgl");if(!e)return{value:"no-webgl",triggered:!1};e.clearColor(.1,.2,.3,1),e.clear(e.COLOR_BUFFER_BIT);let n=new Uint8Array(16*16*4);e.readPixels(0,0,16,16,e.RGBA,e.UNSIGNED_BYTE,n);let o=new Set(n).size;return{value:{uniqueValues:o},triggered:o>4}}catch{return{value:"error",triggered:!1}}}},{name:"tamperingServiceWorkerBlocked",penalty:1,async check(){let t=!("serviceWorker"in navigator);return{value:{serviceWorkerAvailable:!t},triggered:t}}},{name:"permissionsWeirdAntiVM",penalty:2,async check(){try{let t=await navigator.permissions.query({name:"camera"});return{value:t.state,triggered:t.state==="prompt"}}catch{return{value:"error",triggered:!1}}}}];async function st({threshold:t=4}={}){let e={},n=0;for(let r of vn)try{let i=await r.check();e[r.name]={...i,weight:r.weight},i.triggered&&r.weight>0&&(n+=r.weight)}catch{e[r.name]={value:"error",triggered:!1,weight:r.weight}}let o=n;for(let r of En)try{let i=await r.check();e[r.name]={...i,penalty:r.penalty},i.triggered&&(n-=r.penalty)}catch{e[r.name]={value:"error",triggered:!1,penalty:r.penalty}}return{isLikelyVM:n>=t,score:n,rawScore:o,threshold:t,signals:e}}var bn=[{name:"hookedFunctionToString",weight:2,async check(){let t=Function.prototype.toString.toString(),e=Function.prototype.toString+"";return{value:{native:t,current:e},triggered:t!==e}}},{name:"navigatorProxyTrap",weight:2,async check(){let t=!1;try{let e=Object.getOwnPropertyDescriptor(window,"navigator");e&&e.get&&e.get.toString()?.includes("[native code]")===!1&&(t=!0)}catch{}return{value:"navigator getter",triggered:t}}},{name:"uaMismatch",weight:2,async check(){let t=navigator.userAgent||"",e="";try{let o=await navigator.userAgentData?.getHighEntropyValues?.(["platform","brands"]);e=JSON.stringify(o)}catch{}let n=t?.includes("Mac")&&e?.includes("Windows")||t?.includes("Win")&&e?.includes("Mac")||e&&e.length>0&&!t;return{value:{ua:t,brandInfo:e},triggered:n}}},{name:"timezoneLocaleMismatch",weight:1,async check(){let t=Intl.DateTimeFormat().resolvedOptions().timeZone,e=navigator.language||"",n=e.startsWith("en")&&t==="Asia/Shanghai"||e.startsWith("zh")&&t==="America/New_York"||t===void 0;return{value:{tz:t,lang:e},triggered:n}}},{name:"canvasNoise",weight:2,async check(){let t=()=>{let r=document.createElement("canvas"),i=r.getContext("2d");return i.textBaseline="top",i.font="14px Arial",i.fillText("anti-detect-check",2,2),r.toDataURL()},e=t(),n=t();return{value:{a:e,b:n},triggered:e!==n}}},{name:"webglNoise",weight:-2,async check(){try{let e=document.createElement("canvas").getContext("webgl");if(!e)return{value:"no-webgl",triggered:!0};let n=e.getExtension("WEBGL_debug_renderer_info");if(!n)return{value:"no-debug-extension",triggered:!1};let o=e.getParameter(n.UNMASKED_VENDOR_WEBGL),r=e.getParameter(n.UNMASKED_RENDERER_WEBGL),i=o===""||r===""||o?.includes(" ")===!1||r?.includes(" ")===!1;return{value:{v:o,r},triggered:i}}catch{return{value:"gl-error",triggered:!0}}}},{name:"webdriverFlag",weight:3,async check(){let t=navigator.webdriver===!0;return{value:navigator.webdriver,triggered:t}}},{name:"perfectEventTiming",weight:-3,async check(){let t=performance.now();return{value:t,triggered:t%1===0}}},{name:"serviceWorkerBlocked",weight:-4,async check(){let t=!("serviceWorker"in navigator);return{value:t,triggered:t}}},{name:"smallQuota",weight:2,async check(){try{let t=await navigator.storage.estimate(),e=t.quota<50*1024*1024;return{value:t.quota,triggered:e}}catch{return{value:"quota-error",triggered:!0}}}},{name:"indexedDbBlocked",weight:2,async check(){try{let t=indexedDB.open("tamper-check");return await new Promise(e=>{t.onerror=()=>e({value:"error",triggered:!0}),t.onsuccess=()=>e({value:"ok",triggered:!1})})}catch{return{value:"throw",triggered:!0}}}},{name:"screenDprMismatch",weight:0,async check(){let t=window.screen.width,e=window.screen.height,n=window.devicePixelRatio,o=t===1920&&n===1&&e===1080||n%1!==0&&n%1!==.5;return{value:{w:t,h:e,dpr:n},triggered:o}}},{name:"missingCommonFonts",weight:1,async check(){return{value:"skipped",triggered:!1}}},{name:"noMediaDevices",weight:1,async check(){try{let t=await navigator.mediaDevices.enumerateDevices();return{value:t.length,triggered:t.length===0}}catch{return{value:"error",triggered:!0}}}},{name:"languagesEmpty",weight:1,async check(){let t=navigator.languages||[];return{value:t,triggered:t.length===0}}},{name:"pluginMismatch",weight:-4,async check(){try{let t=navigator.plugins.length;return{value:t,triggered:t===0}}catch{return{value:"error",triggered:!0}}}},{name:"devtoolsDetected",weight:-2,async check(){return new Promise(async t=>{let e={viewportBreakpoint:!1,consoleSpeed:!1,consoleProfileTiming:!1},n=160,o=window.outerWidth-window.innerWidth,r=window.outerHeight-window.innerHeight;(o>n||r>n)&&(e.viewportBreakpoint=!0);async function i(c=50){return new Promise(m=>{let u=performance.now();console.log("%c ","font-size:3000px");let d=performance.now();m(d-u>c)})}e.consoleSpeed=await i();function a(){if(typeof console.profile!="function"||typeof console.profileEnd!="function")return!1;let c=5,m=3,u=[];try{for(let g=0;g<c;g++){let f=performance.now(),T=`profile_${f.toString()}`;console.profile(T),console.profileEnd(T),u.push(performance.now()-f)}}catch{return!1}return u.sort((g,f)=>g-f),u[Math.floor(u.length/2)]>m}e.consoleProfileTiming=a();let s=Object.values(e).some(Boolean);setTimeout(()=>{t({value:s,triggered:s})},50)})}},{name:"knownAntiDetectBrowser",weight:5,async check(){let t=navigator.userAgent.toLowerCase(),n=["incogniton","multilogin","morelogin","adspect","kameleo","goLogin"].some(o=>t?.includes(o));return{value:t,triggered:n}}},{name:"batteryVirtualized",weight:4,async check(){try{let t=await navigator.getBattery(),e=t.chargingTime,n=t.dischargingTime;return{value:{chargingTime:e,dischargingTime:n},triggered:e===0}}catch{return{value:"no-battery-api",triggered:!1}}}},{name:"permissionDenied",weight:4,async check(){try{let t=await navigator.permissions.query({name:"notifications"}),e=t.state==="denied";return{value:t.state,triggered:e}}catch{return{value:"perm-error",triggered:!1}}}}];async function ct({anomalyMin:t=.52,anomalyMax:e=.54}={}){let n={},o=0;for(let d of bn){let g=await d.check();n[d.name]=g,g.triggered&&(o+=d.weight)}let r=navigator?.platform||"",i=(navigator?.userAgent||"").toLowerCase(),a=r.toLowerCase().includes("win"),s=n.batteryVirtualized?.triggered||!1,c=n.permissionDenied?.triggered||!1,m=!a&&r!==""&&s&&c,u=Math.min(1,Math.max(0,o)/15);return{result:m&&u>=t&&u<=e||n.knownAntiDetectBrowser?.triggered,anomalyScore:u,score:o,signals:n}}function Tn(){let t=0;try{0 .toFixed(-1)}catch(e){t=e.message.length}return t}function Rn(){let t=navigator.userAgent,e=Tn();return e===44||e===43?"Safari":e===51?"Chrome":e===25?"Firefox":navigator.msSaveBlob!==void 0?"MSIE":t.match(/Chrome/)?navigator.brave!==void 0?"Brave":t.includes("Edg")?"Edge":t.includes("OPR")?"Opera":"Chrome":"Unknown"}var xn=[{name:"safari_currentStorageTest",weight:2,browser:"Safari",async check(){if(typeof navigator.storage?.getDirectory!="function")return{triggered:!1,value:"unsupported"};try{return await navigator.storage.getDirectory(),{triggered:!1,value:"ok"}}catch(t){let e=t?.message??String(t);return{triggered:e.includes("unknown transient reason"),value:e}}}},{name:"safari13to18_indexedDbBlobTest",weight:2,browser:"Safari",async check(){return await new Promise(t=>{let e=String(Math.random()),n=indexedDB.open(e,1);n.onupgradeneeded=o=>{let r=o.target.result;try{r.createObjectStore("t",{autoIncrement:!0}).put(new Blob),t({triggered:!1,value:"ok"})}catch(i){let a=i?.message??String(i);t({triggered:a.includes("are not yet supported"),value:a})}finally{r.close(),indexedDB.deleteDatabase(e)}},n.onerror=()=>t({triggered:!1,value:"idb-error"})})}},{name:"safari_oldWebkitTest",weight:1,browser:"Safari",async check(){let t=window.openDatabase,e=window.localStorage;try{t(null,null,null,null)}catch{return{triggered:!0,value:"openDatabase denied"}}try{e.setItem("test","1"),e.removeItem("test")}catch{return{triggered:!0,value:"localStorage denied"}}return{triggered:!1,value:"ok"}}},{name:"chrome_storageQuotaPrivateTest",weight:2,browser:"Chrome",async check(){return await new Promise((t,e)=>{let o=window?.performance?.memory?.jsHeapSizeLimit??1073741824;navigator.webkitTemporaryStorage.queryUsageAndQuota((r,i)=>{let a=Math.round(i/1048576),s=Math.round(o/(1024*1024))*2;t({triggered:a<s,value:{quotaMB:a,limitMB:s}})},r=>e(r))})}},{name:"chrome_oldFileSystemTest",weight:1,browser:"Chrome",async check(){let t=window.webkitRequestFileSystem;return t?await new Promise(e=>t(0,1,()=>e({triggered:!1,value:"ok"}),()=>e({triggered:!0,value:"denied"}))):{triggered:!1,value:"unsupported"}}},{name:"firefox_storageDirectoryTest",weight:2,browser:"Firefox",async check(){if(typeof navigator.storage?.getDirectory!="function")return{triggered:!1,value:"unsupported"};try{return await navigator.storage.getDirectory(),{triggered:!1,value:"ok"}}catch(t){let e=t?.message??String(t);return{triggered:e.includes("Security error"),value:e}}}},{name:"firefox_indexedDbInvalidStateTest",weight:1,browser:"Firefox",async check(){return await new Promise(t=>{let e=indexedDB.open("inPrivate");e.onerror=()=>{t({triggered:e.error?.name==="InvalidStateError",value:e.error?.name})},e.onsuccess=()=>{indexedDB.deleteDatabase("inPrivate"),t({triggered:!1,value:"ok"})}})}},{name:"msie_indexedDbMissing",weight:2,browser:"MSIE",async check(){return{triggered:window.indexedDB===void 0,value:"msie-idb-check"}}}];async function ut(){let t=Rn(),e={},n=0;for(let o of xn){if(o.browser!==t)continue;let r=await o.check();e[o.name]=r,r.triggered&&(n+=o.weight)}return{isPrivate:n>0,browserName:t,score:n,signals:e}}typeof window<"u"&&(window.detectIncognito=ut);var lt=ut;var mt=[{name:"globalPrivacyControl",weight:3,async check(){let t=navigator.globalPrivacyControl;return{triggered:t===!0,value:t}}},{name:"doNotTrack",weight:1,async check(){let t=navigator.doNotTrack;return{triggered:t==="1",value:t}}},{name:"cookiesDisabled",weight:3,async check(){let t=navigator.cookieEnabled;return{triggered:t===!1,value:t}}},{name:"thirdPartyCookiesBlocked",weight:3,async check(){try{if("hasStorageAccess"in document&&!await document.hasStorageAccess())try{return await document.requestStorageAccess(),{triggered:!1,value:"access_granted"}}catch{return{triggered:!0,value:"access_denied"}}let t=`__dtect_3p_test_${Date.now()}`;document.cookie=`${t}=1; SameSite=None; Secure`;let e=document.cookie.includes(t);return document.cookie=`${t}=; expires=Thu, 01 Jan 1970 00:00:00 GMT`,{triggered:!1,value:e?"cookies_work":"may_be_blocked"}}catch(t){return{triggered:!1,value:`error: ${t?.message}`}}}},{name:"firefoxResistFingerprinting",weight:2,async check(){let t=[],e=new Date().getTimezoneOffset();e===0&&Intl.DateTimeFormat().resolvedOptions().timeZone==="UTC"&&t.push("timezone_utc");let n=navigator.hardwareConcurrency;n===2&&t.push("cores_capped");let o=window.screen.width,r=window.screen.height,i=window.innerWidth,a=window.innerHeight;o===i&&r===a&&t.push("screen_matches_inner");let s=window.matchMedia("(prefers-reduced-motion: reduce)").matches;return{triggered:t.length>=2,value:{signals:t,timezoneOffset:e,cores:n,prefersReducedMotion:s}}}},{name:"braveShields",weight:3,async check(){if(!(navigator.brave!==void 0))return{triggered:!1,value:"not_brave"};try{if(!await navigator.brave.isBrave())return{triggered:!1,value:"brave_check_false"};let o=document.createElement("canvas").getContext("2d");if(o){o.fillStyle="rgb(255, 0, 0)",o.fillRect(0,0,1,1);let r=o.getImageData(0,0,1,1).data;o.fillRect(0,0,1,1);let i=o.getImageData(0,0,1,1).data;if(r[0]!==i[0]||r[1]!==i[1]||r[2]!==i[2])return{triggered:!0,value:"shields_active_canvas"}}try{let r=new RTCPeerConnection({iceServers:[{urls:"stun:stun.l.google.com:19302"}]});if(r.createDataChannel(""),await new Promise(a=>{let s=setTimeout(()=>{r.close(),a(!1)},1e3);r.onicecandidate=c=>{c.candidate?.candidate&&(/([0-9]{1,3}\.){3}[0-9]{1,3}/.test(c.candidate.candidate)||(clearTimeout(s),r.close(),a(!0)))},r.createOffer().then(c=>r.setLocalDescription(c))}))return{triggered:!0,value:"shields_active_webrtc"}}catch{return{triggered:!0,value:"shields_active_webrtc_blocked"}}return{triggered:!0,value:"brave_detected_shields_default"}}catch(e){return{triggered:!1,value:`error: ${e?.message}`}}}}];async function dt(){let t={},e=0,n=await Promise.allSettled(mt.map(async o=>{let r=await o.check();return{name:o.name,weight:o.weight,result:r}}));for(let o of n)if(o.status==="fulfilled"){let{name:r,weight:i,result:a}=o.value;t[r]=a,a.triggered&&(e+=i)}else{let r=n.indexOf(o),i=mt[r];i&&(t[i.name]={triggered:!1,value:`check_failed: ${o.reason}`})}return{isPrivacyEnabled:e>3,score:e,signals:t}}typeof window<"u"&&(window.detectPrivacy=dt);var gt=dt;var ft={screenResolution:"",screenAvailResolution:"",screenPixelDepth:null,fontPreferences:"",colorGamut:"",dynamicRange:"",monochrome:null,audioBaseLatency:null,audioSampleRate:null,vendorFlavors:[],pdfViewerEnabled:null,osCpu:"",dateTimeLocale:""};function k(t,e){try{let n=t();return n??e}catch{return e}}function pt(t,e){return typeof t!="number"||typeof e!="number"||!t||!e?"":`${Math.max(t,e)}x${Math.min(t,e)}`}var An=[["default",{}],["apple",{fontFamily:"-apple-system"}],["serif",{fontFamily:"serif"}],["sans",{fontFamily:"sans-serif"}],["mono",{fontFamily:"monospace"}],["min",{fontSize:"1px"}],["system",{fontFamily:"system-ui"}]],Sn="mmMwWLliI0fiflO&1IlV%\u4E2D\u6587\u5B57\u4F53\xE9\xE8\xEA";function Dn(){let t=document.createElement("div");t.style.cssText="position:absolute;visibility:hidden;left:-9999px;top:-9999px;width:auto;height:auto;white-space:nowrap;font-size:48px;";let e=An.map(([n,o])=>{let r=document.createElement("span");return r.textContent=Sn,r.style.whiteSpace="nowrap",Object.assign(r.style,o),t.appendChild(r),[n,r]});document.body.appendChild(t);try{return e.map(([n,o])=>`${n}:${o.getBoundingClientRect().width}`).join("|")}finally{t.remove()}}function yt(t,e){for(let n of e)if(matchMedia(`(${t}: ${n})`).matches)return n;return""}function Pn(){if(!matchMedia("(min-monochrome: 0)").matches)return null;for(let t=0;t<=100;t++)if(matchMedia(`(max-monochrome: ${t})`).matches)return t;return null}function kn(){let t=window.AudioContext||window.webkitAudioContext;if(!t)return{baseLatency:null,sampleRate:null};let e=new t;try{return{baseLatency:typeof e.baseLatency=="number"?e.baseLatency:null,sampleRate:typeof e.sampleRate=="number"?e.sampleRate:null}}finally{typeof e.close=="function"&&e.close()}}function _n(){return["chrome","safari","__crWeb","__gCrWeb","yandex","__yb","__ybro","__firefox__","__edgeTrackingPreventionStatistics","webkit","oprt","samsungAr","ucweb","UCShellJava","puffinDevice"].filter(e=>{let n=window[e];return typeof n=="object"&&n!==null})}async function ht(){try{if(typeof document>"u"||typeof window>"u")return ft;let t=k(kn,{baseLatency:null,sampleRate:null}),e=k(()=>Intl.DateTimeFormat().resolvedOptions(),null);return{screenResolution:k(()=>pt(screen.width,screen.height),""),screenAvailResolution:k(()=>pt(screen.availWidth,screen.availHeight),""),screenPixelDepth:k(()=>screen.pixelDepth,null),fontPreferences:k(Dn,""),colorGamut:k(()=>yt("color-gamut",["rec2020","p3","srgb"]),""),dynamicRange:k(()=>yt("dynamic-range",["high","standard"]),""),monochrome:k(Pn,null),audioBaseLatency:t.baseLatency,audioSampleRate:t.sampleRate,vendorFlavors:k(_n,[]),pdfViewerEnabled:k(()=>navigator.pdfViewerEnabled??null,null),osCpu:k(()=>navigator.oscpu??"",""),dateTimeLocale:e?`${e.locale??""}|${e.calendar??""}|${e.numberingSystem??""}`:""}}catch{return ft}}var ke={supported:!1,extensions:[],parametersHash:"",parametersCount:0,shaderPrecisions:[],contextAttributes:[]};function On(t){let e=2166136261,n=16777619;for(let o=0;o<t.length;o++){let r=t.charCodeAt(o);e=Math.imul(e^r,16777619)>>>0,n=Math.imul(n^r,2246822507)>>>0}return e.toString(16).padStart(8,"0")+n.toString(16).padStart(8,"0")}var Mn=["VERTEX_SHADER","FRAGMENT_SHADER"],Nn=["LOW_FLOAT","MEDIUM_FLOAT","HIGH_FLOAT","LOW_INT","MEDIUM_INT","HIGH_INT"];function Ln(t){let e=[],n=Object.getPrototypeOf(t);for(let o of Object.getOwnPropertyNames(n)){if(!/^[A-Z][A-Z0-9_]*$/.test(o))continue;let r=t[o];if(typeof r=="number")try{let i=t.getParameter(r);if(t.getError()!==t.NO_ERROR||i==null)continue;e.push(`${o}=${r}=${Cn(i)}`)}catch{}}return e.sort()}function Cn(t){return t instanceof Int32Array||t instanceof Float32Array?Array.from(t).join(","):Array.isArray(t)?t.join(","):String(t)}function Bn(t){let e=[];for(let n of Mn)for(let o of Nn)try{let r=t.getShaderPrecisionFormat(t[n],t[o]);if(!r)continue;e.push(`${n}.${o}=${r.rangeMin},${r.rangeMax},${r.precision}`)}catch{}return e}function Fn(t){let e=t.getContextAttributes();return e?Object.keys(e).sort().map(n=>`${n}=${String(e[n])}`):[]}async function wt(){try{if(typeof document>"u")return ke;let t=document.createElement("canvas"),e=t.getContext("webgl")||t.getContext("experimental-webgl");if(!e)return ke;let n=Ln(e);return{supported:!0,extensions:(e.getSupportedExtensions()??[]).slice().sort(),parametersHash:n.length?On(n.join("|")):"",parametersCount:n.length,shaderPrecisions:Bn(e),contextAttributes:Fn(e)}}catch{return ke}}function Un(t){let e=t?.projectId,n=t?.visitorId||M();return(typeof t?.projectId=="number"||typeof t?.visitorId=="number")&&(e=`${t?.projectId}`,n=`${t?.visitorId}`),{visitorId:n,projectId:e}}function G(t){let{projectId:e,visitorId:n}=Un(t);return{projectId:e,visitorId:n}}async function Gn(){let t=new K,[e,n,o,r,i,a,s]=await Promise.allSettled([t.get(),st(),ct(),lt(),gt(),wt(),ht()]);return{deviceRes:e,vmDtectResults:n,tamperingDtectResults:o,incognitoDtectResults:r,privacySettingsDtectResults:i,webglExtensionsResults:a,stableEntropyResults:s}}function Vn(t,e){return{entryLink:window?.location?.href,securitySettings:t.securitySettings,metaData:t.metaData,vmDtectResults:e?.vmDtectResults?.value,tamperingDtectResults:e?.tamperingDtectResults?.value,incognitoDtectResults:e?.incognitoDtectResults?.value,deviceIdResults:e?.deviceRes?.value,privacySettingsDtectResults:e?.privacySettingsDtectResults?.value,webglExtensionsResults:e?.webglExtensionsResults?.value,stableEntropyResults:e?.stableEntropyResults?.value}}function Wn(t,e,n,o){let r=(performance.now()-e).toFixed();I(`${t} finishes in ${r}ms`,"info",{function:t,endpoint:n?.endpoint,diff:r,token:o,clientId:n?.clientId})}function It(t,e,n,o,r){let i=(performance.now()-e).toFixed();I(`${t} error`,"error",{function:t,endpoint:n?.endpoint,error:r,diff:i,token:o,clientId:n?.clientId})}async function vt(t,e){let n=performance.now(),{projectId:o,visitorId:r}=G(t);if(!t||!o?.trim())throw new Error(h.FAILED_TO_GET_SECURITY_RESULT);C({projectId:o,visitorId:r});let{state:i,config:a,version:s}=w();try{let c=await Gn(),m=Vn(t,c),u={...t,projectId:o,visitorId:r,clientData:m,version:s,token:i.token,questionData:i.questionData,aiCheckData:i.aiCheckData},d=await U({url:e,body:u,headers:{"client-id":a?.clientId||"","x-api-key":a?.apiKey||""}});if(!("token"in d||"results"in d))throw new Error(h.INTERNAL_SERVER_ERROR);let g="results"in d&&d.results.isAIUsageDetected===!0;return D(f=>({...f,state:{...f.state,token:i.token,visitorId:r,projectId:o,clientData:m,aiUsageFlagged:f.state.aiUsageFlagged||g}})),Wn("getResultBase",n,a,i.token),d}catch(c){c instanceof Error?It("getResultBase",n,a,i.token,{message:c.message,stack:c.stack,name:c.name}):It("getResultBase",n,a,i.token,c),L(c)}}async function te(t){let{endpoint:e}=N();if(t)return vt(t,`${e}/client/check/result`)}async function ne(t){let{endpoint:e}=N();return vt(t,`${e}/client/check`)}var j;function Et(){let{config:t,monitor:e,state:n}=w();if(!t?.autoFlagAIUsage||!e||(j?.(),j=void 0,n.aiUsageFlagged))return;let o=()=>{let{state:r}=w();r.aiUsageFlagged||!(e.apd||e.qbc&&e.mas&&e.scb!=null)||r.projectId&&(D(a=>({...a,state:{...a.state,aiUsageFlagged:!0}})),j?.(),j=void 0,z({projectId:r.projectId,visitorId:r.visitorId}))};j=e.onChange(o),o()}async function z(t){let e=performance.now(),{visitorId:n,projectId:o}=G(t);C({projectId:o,visitorId:n});let{state:r,config:i,monitor:a,version:s}=w(),{checkResultEndpoint:c}=N(),m={timeTakenSeconds:t.timeTakenSeconds,qbc:a?.qbc,mas:a?.mas,scb:a?.scb,apd:a?.apd};try{let u=await U({url:c,headers:{"client-id":i?.clientId||"","x-api-key":i?.apiKey||""},body:{token:r.token,visitorId:n,projectId:o,version:s,clientData:r.clientData,questionData:r.questionData,aiCheckData:m}});if(!u)throw new Error(h.INTERNAL_SERVER_ERROR);let d="results"in u&&u.results.isAIUsageDetected===!0;D(f=>({...f,state:{...f.state,aiCheckData:m,visitorId:n,projectId:o,aiUsageFlagged:f.state.aiUsageFlagged||d}}));let g=(performance.now()-e).toFixed();return I(`isAIUsageDetected finishes in ${g}ms`,"info",{endpoint:i?.endpoint,diff:g,token:r.token,clientId:i?.clientId}),u}catch(u){let d=(performance.now()-e).toFixed();u instanceof Error?I("isAIUsageDetected error","error",{endpoint:i?.endpoint,error:{message:u.message,stack:u.stack,name:u.name},diff:d,token:r.token,clientId:i?.clientId}):I("isAIUsageDetected error","error",{endpoint:i?.endpoint,error:u,diff:d,token:r.token,clientId:i?.clientId}),L(u)}}async function re(t){let e=performance.now(),{state:n,config:o}=w(),{respondentType:r,language:i}=t;try{let a=await at({url:`${o?.endpoint}/client/quality-questions/${r}/${i}`,headers:{"client-id":o?.clientId||"","x-api-key":o?.apiKey||""}});if(!a)throw new Error(h.INTERNAL_SERVER_ERROR);let s=(performance.now()-e).toFixed();return I(`getQualityQuestions finishes in ${s}ms`,"info",{function:"getQualityQuestions",endpoint:o?.endpoint,diff:s,token:n.token,clientId:o?.clientId}),a}catch(a){let s=(performance.now()-e).toFixed();I("getQualityQuestions error","error",{endpoint:o?.endpoint,error:a,diff:s,token:n.token,clientId:o?.clientId}),L(a)}}async function oe(t){let e=performance.now(),{visitorId:n,projectId:o}=G(t);C({projectId:o,visitorId:n});let{state:r,config:i,version:a}=w(),{checkResultEndpoint:s}=N(),c={questions:t.questions};try{let m=await U({url:s,headers:{"client-id":i?.clientId||"","x-api-key":i?.apiKey||""},body:{token:r.token,visitorId:n,projectId:o,version:a,questionData:c,aiCheckData:r.aiCheckData,clientData:r.clientData}});if(!m)throw new Error(h.INTERNAL_SERVER_ERROR);D(d=>({...d,state:{...d.state,token:r.token,questionData:c,visitorId:n,projectId:o}}));let u=(performance.now()-e).toFixed();return I(`checkQualityQuestions finishes in ${u}ms`,"info",{function:"checkQualityQuestions",endpoint:i?.endpoint,diff:u,token:r.token,clientId:i?.clientId}),m}catch(m){let u=(performance.now()-e).toFixed();m instanceof Error?I("checkQualityQuestions error","error",{endpoint:i?.endpoint,error:{message:m.message,stack:m.stack,name:m.name},diff:u,token:r.token,clientId:i?.clientId}):I("checkQualityQuestions error","error",{endpoint:i?.endpoint,error:m,diff:u,token:r.token,clientId:i?.clientId}),L(m)}}var bt,Tt=Ce;function qn(){let{config:t}=w();return!!(t?.clientId&&t?.apiKey)}function $n(t){let{config:e}=w();if(!t?.clientId||!t?.apiKey)throw I(h.MISSING_CREDENTIALS,"error",{endpoint:e?.endpoint,...t}),new Error(h.MISSING_CREDENTIALS)}function Kn(){let{config:t}=w();return!!(t?.clientId&&t.apiKey)}function jn(t){let{config:e}=w();if(!Kn())throw I(h.MISSING_CREDENTIALS,"error",{endpoint:e?.endpoint,...t}),new Error(h.MISSING_CREDENTIALS)}function zn(t){return{clientId:t.clientId,apiKey:t.apiKey,endpoint:t.endpoint||"https://api.dtect.io/security",includeResults:t.includeResults,autoFlagAIUsage:t.autoFlagAIUsage}}function Yn(t){let e=t.endpoint,n=t.includeResults?`${e}/client/check/result`:`${e}/client/check`;return{...t,checkResultEndpoint:n}}function Qn(t){let e=Yn(t);D(n=>({...n,config:e}))}function Jn(){let{state:t}=w();if(t.isLoading)throw new Error(h.DUPLICATE_INITIALIZATION)}async function Xn(t){let{state:e,config:n}=w(),r=(performance.now()-t).toFixed();return I(`init() finishes ${r}ms`,"info",{endpoint:n?.endpoint,function:"init",diff:r,token:e.token,clientId:n?.clientId}),{getSecurityResult:te,getSecurityToken:ne,SecurityAPIError:Tt,isAIUsageDetected:z,checkQualityQuestions:oe,getQualityQuestions:re,LanguageCodes:V,QualityQuestionsRespondentTypes:W}}async function Rt(t){let{state:e}=w(),n=performance.now();$n(t);let o=zn(t);Qn(o),jn(t);let r=qe(e.token);Jn(),je(r),Et();try{return await Xn(n)}catch(i){$e(i,o)}finally{ze(r)}}bt={init:Rt,getSecurityResult:te,getSecurityToken:ne,isAIUsageDetected:z,checkQualityQuestions:oe,getQualityQuestions:re,QualityQuestionsRespondentTypes:W,LanguageCodes:V};var Zn=bt;
11
+ `,n=l.createShader(l.VERTEX_SHADER),o=l.createShader(l.FRAGMENT_SHADER);if(!n||!o)throw new Error("Failed to create shaders");if(l.shaderSource(n,t),l.shaderSource(o,e),l.compileShader(n),!l.getShaderParameter(n,l.COMPILE_STATUS))throw new Error("Vertex shader compilation failed: "+l.getShaderInfoLog(n));if(l.compileShader(o),!l.getShaderParameter(o,l.COMPILE_STATUS))throw new Error("Fragment shader compilation failed: "+l.getShaderInfoLog(o));let r=l.createProgram();if(!r)throw new Error("Failed to create shader program");if(l.attachShader(r,n),l.attachShader(r,o),l.linkProgram(r),!l.getProgramParameter(r,l.LINK_STATUS))throw new Error("Shader program linking failed: "+l.getProgramInfoLog(r));l.useProgram(r);let i=137,a=new Float32Array(i*4),s=2*Math.PI/i;for(let g=0;g<i;g++){let f=g*s;a[g*4]=0,a[g*4+1]=0,a[g*4+2]=Math.cos(f)*(A.width/2),a[g*4+3]=Math.sin(f)*(A.height/2)}let c=l.createBuffer();l.bindBuffer(l.ARRAY_BUFFER,c),l.bufferData(l.ARRAY_BUFFER,a,l.STATIC_DRAW);let m=l.getAttribLocation(r,"position");l.enableVertexAttribArray(m),l.vertexAttribPointer(m,2,l.FLOAT,!1,0,0),l.viewport(0,0,A.width,A.height),l.clearColor(0,0,0,1),l.clear(l.COLOR_BUFFER_BIT),l.drawArrays(l.LINES,0,i*2);let u=new Uint8ClampedArray(A.width*A.height*4);return l.readPixels(0,0,A.width,A.height,l.RGBA,l.UNSIGNED_BYTE,u),new ImageData(u,A.width,A.height)}catch{return new ImageData(1,1)}finally{l&&(l.bindBuffer(l.ARRAY_BUFFER,null),l.useProgram(null),l.viewport(0,0,l.drawingBufferWidth,l.drawingBufferHeight),l.clearColor(0,0,0,0))}}function D(t){let e=[];return function n(o){if(o&&o.toJSON&&typeof o.toJSON=="function"&&(o=o.toJSON()),o===void 0)return;if(typeof o=="number")return isFinite(o)?""+o:"null";if(typeof o!="object")return JSON.stringify(o);let r,i;if(Array.isArray(o)){for(i="[",r=0;r<o.length;r++)r&&(i+=","),i+=n(o[r])||"null";return i+"]"}if(o===null)return"null";if(e.indexOf(o)!==-1)throw new TypeError("Converting circular structure to JSON");let a=e.push(o)-1,s=Object.keys(o).sort();for(i="",r=0;r<s.length;r++){let c=s[r],m=n(o[c]);m&&(i&&(i+=","),i+=JSON.stringify(c)+":"+m)}return e.splice(a,1),"{"+i+"}"}(t)||""}async function Re(){return new Promise(t=>{try{let e=window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection;if(!e){t({supported:!1,error:"WebRTC not supported"});return}let n={iceCandidatePoolSize:1,iceServers:[]},o=new e(n);o.createDataChannel(""),(async()=>{try{let i={offerToReceiveAudio:!0,offerToReceiveVideo:!0},a=await o.createOffer(i);await o.setLocalDescription(a);let s=a.sdp||"",c=[...new Set((s.match(/extmap:\d+ [^\n\r]+/g)||[]).map(v=>v.replace(/extmap:\d+ /,"")))].sort(),m=v=>{let R=s.match(new RegExp(`m=${v} [^\\s]+ [^\\s]+ ([^\\n\\r]+)`));return R?R[1].split(" "):[]},u=(v,R)=>R.map(p=>{let _=new RegExp(`(rtpmap|fmtp|rtcp-fb):${p} (.+)`,"g"),O=[...s.matchAll(_)];if(!O.length)return null;let y={};return O.forEach(At=>{let[tr,ie,ae]=At,se=ae.split("/");ie==="rtpmap"?(y.mimeType=`${v}/${se[0]}`,y.clockRate=+se[1],v==="audio"&&(y.channels=+se[2]||1)):ie==="rtcp-fb"?(y.feedbackSupport=y.feedbackSupport||[],y.feedbackSupport.push(ae)):ie==="fmtp"&&(y.sdpFmtpLine=ae)}),y}).filter(Boolean),d=u("audio",m("audio")),g=u("video",m("video")),f={audio:{count:d.length,hash:b(D(d))},video:{count:g.length,hash:b(D(g))},extensionsHash:b(D(c))},T=await new Promise(v=>{let R=setTimeout(()=>{o.removeEventListener("icecandidate",p),o.close(),v({supported:!0,...f,timeout:!0})},3e3),p=_=>{let O=_.candidate;!O||!O.candidate||(clearTimeout(R),o.removeEventListener("icecandidate",p),o.close(),v({supported:!0,...f,candidateType:O.type||""}))};o.addEventListener("icecandidate",p)});t({details:T,hash:b(D(T))})}catch(i){o.close(),t({supported:!0,error:`WebRTC offer failed: ${i.message}`})}})()}catch(e){t({supported:!1,error:`WebRTC error: ${e.message}`})}})}var He=["\u{1D504}","\u{1D505}","\u212D","\u{1D507}","\u{1D508}","\u{1D509}","\u{1D538}","\u{1D539}","\u2102","\u{1D53B}","\u{1D53C}","\u{1D53D}"],et=["\u03B2","\u03C8","\u03BB","\u03B5","\u03B6","\u03B1","\u03BE","\u03BC","\u03C1","\u03C6","\u03BA","\u03C4","\u03B7","\u03C3","\u03B9","\u03C9","\u03B3","\u03BD","\u03C7","\u03B4","\u03B8","\u03C0","\u03C5","\u03BF"];async function xe(){return new Promise(t=>{try{X(async({iframe:e})=>{try{if(!gn(e)){t({supported:!1,error:"MathML not supported"});return}let n=[$("integral","<msubsup><mo>\u222B</mo><mi>a</mi><mi>b</mi></msubsup><mfrac><mrow><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mrow><mi>g</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mfrac><mi>dx</mi>"),$("fraction","<mfrac><mrow><mi>\u03C0</mi><mo>\xD7</mo><msup><mi>r</mi><mn>2</mn></msup></mrow><mrow><mn>2</mn><mi>\u03C3</mi></mrow></mfrac>"),$("matrix","<mo>[</mo><mtable><mtr><mtd><mi>\u03B1</mi></mtd><mtd><mi>\u03B2</mi></mtd></mtr><mtr><mtd><mi>\u03B3</mi></mtd><mtd><mi>\u03B4</mi></mtd></mtr></mtable><mo>]</mo>"),fn(),...pn()],o=[],r="";n.forEach((a,s)=>{let c=yn(a,e);o.push({width:c.dimensions.width,height:c.dimensions.height}),s===0&&c.fontInfo&&(r=b(D(c.fontInfo)))});let i={fontStyleHash:r,dimensions:o};t({details:i,hash:b(D(i))})}catch(n){t({supported:!1,error:`MathML error: ${n.message}`})}})}catch(e){t({supported:!1,error:`MathML error: ${e.message}`})}})}function gn(t){try{let e=t.createElement("math");e.innerHTML="<mrow><mi>x</mi></mrow>",e.style.position="absolute",e.style.visibility="hidden",t.body.appendChild(e);let n=e.getBoundingClientRect();return t.body.removeChild(e),n.width>0&&n.height>0}catch{return!1}}function $(t,e){return`<math><mrow>${e}</mrow></math>`}function fn(){let t="<mo>\u220F</mo>";return He.forEach((e,n)=>{let o=n*2,r=et.slice(o,o+2);r.length===2&&(t+=`<mmultiscripts><mi>${e}</mi><none/><mi>${r[1]}</mi><mprescripts></mprescripts><mi>${r[0]}</mi><none/></mmultiscripts>`)}),$("complex_nested",`<munderover><mmultiscripts>${t}</mmultiscripts></munderover>`)}function pn(){let t=[];return He.forEach((e,n)=>{let o=n*2,r=et.slice(o,o+2);r.length===2&&t.push($("combined",`<mmultiscripts><mi>${e}</mi><none/><mi>${r[1]}</mi><mprescripts></mprescripts><mi>${r[0]}</mi><none/></mmultiscripts>`))}),t}function yn(t,e){try{let n=e.createElement("math");n.innerHTML=t.replace(/<\/?math>/g,""),n.style.whiteSpace="nowrap",n.style.position="absolute",n.style.visibility="hidden",n.style.top="-9999px",e.body.appendChild(n);let o=n.getBoundingClientRect(),i=(e.defaultView||window).getComputedStyle(n),a={dimensions:{width:o.width,height:o.height},fontInfo:{fontFamily:i.fontFamily,fontSize:i.fontSize,fontWeight:i.fontWeight,fontStyle:i.fontStyle,lineHeight:i.lineHeight,fontVariant:i.fontVariant||"normal",fontStretch:i.fontStretch||"normal",fontSizeAdjust:i.fontSizeAdjust||"none",textRendering:i.textRendering||"auto",fontFeatureSettings:i.fontFeatureSettings||"normal",fontVariantNumeric:i.fontVariantNumeric||"normal",fontKerning:i.fontKerning||"auto"}};return e.body.removeChild(n),a}catch(n){return{error:n.message}}}var hn=800;async function Ae(){return new Promise(t=>{try{if(typeof window>"u"||!window.speechSynthesis||typeof window.speechSynthesis.getVoices!="function"){t({supported:!1,error:"Speech Synthesis API not supported"});return}let e=!1,n=null,o=a=>{if(!e){e=!0,n&&clearTimeout(n);try{let s=a.map(m=>{let u=g=>g.replace(/\\/g,"\\\\").replace(/,/g,"\\,");return[u(m.voiceURI||""),u(m.name||""),u(m.lang||""),m.localService?"1":"0",m.default?"1":"0"].join(",")});s.sort();let c={voiceCount:a.length,voicesHash:b(D(s))};t({details:c,hash:b(D(c))})}catch(s){t({supported:!0,error:`Voice processing failed: ${s.message}`})}}},r=window.speechSynthesis.getVoices();if(r.length>0){o(r);return}n=setTimeout(()=>{let a=window.speechSynthesis.getVoices();o(a)},hn);let i=()=>{window.speechSynthesis.removeEventListener("voiceschanged",i);let a=window.speechSynthesis.getVoices();o(a)};window.speechSynthesis.addEventListener("voiceschanged",i)}catch(e){t({supported:!1,error:`Speech Synthesis error: ${e.message}`})}})}var tt={audio:ge,canvas:fe,fonts:pe,hardware:ye,locales:he,math:we,permissions:Ie,plugins:ve,screen:Ee,system:be,webgl:Te},nt={webrtc:Re,mathml:xe,speech:Ae},Se={},rt={timeout:"true"},De=(t,e,n)=>{Se[t]=e};function wn(t,e){return new Promise(n=>{setTimeout(()=>n(e),t)})}function ot(t,e,n){return Promise.all(t.map(o=>{let r=performance.now();return Promise.race([o.then(i=>({value:i,elapsed:performance.now()-r})),wn(e,n).then(i=>({value:i,elapsed:performance.now()-r}))])}))}function ee(t,e){let n=F();if(n.name==="unknown"&&t.system&&typeof t.system=="object"&&!Array.isArray(t.system)){let d=t.system.browser;if(d&&typeof d=="object"&&!Array.isArray(d)){let g=d;n={name:g.name||"unknown",version:g.version||"unknown"}}}let o=n.name.toLowerCase(),r=n.version.split(".")[0]||"0",i=parseInt(r,10),a=[...e?.exclude||[]],s=e?.stabilize||[],c=e?.include||[];for(let u of s){let d=de[u];if(d)for(let g of d){let f=!("browsers"in g),T=!f&&g.browsers?.some(v=>{let R=v.match(/(.+?)(>=)(\d+)/);if(R){let[,p,,_]=R,O=parseInt(_,10);return o===p&&i>=O}return o===v});(f||T)&&a.push(...g.exclude)}}function m(u,d=""){let g={};for(let[f,T]of Object.entries(u)){let v=d?`${d}.${f}`:f;if(typeof T=="object"&&!Array.isArray(T)&&T!==null){let R=m(T,v);Object.keys(R).length>0&&(g[f]=R)}else{let R=a.some(_=>v.startsWith(_)),p=c.some(_=>v.startsWith(_));(!R||p)&&(g[f]=T)}}return g}return m(t)}async function Pe(t){let e={...B,...t},n=e.logging&&!sessionStorage.getItem("_tmjs_l")&&Math.random()<1e-4,o={...tt,...Se},{elapsed:r,resolvedComponents:i}=await it(o,e),a={},s={};if(n||e.experimental){let{elapsed:R,resolvedComponents:p}=await it(nt,e);a=p,s=R}let c={...r,...s},m=e.performance?{elapsed:c}:{},u=ee({},e),d={...i,...u},g={};return{thumbmark:b(D(d)),components:d,info:g,version:"",...m,...Object.keys(a).length>0&&e.experimental&&{experimental:a}}}async function it(t,e){let n={...B,...e},o=Object.entries(t).filter(([u])=>!n?.exclude?.includes(u)).filter(([u])=>n?.include?.some(d=>d.includes("."))?n?.include?.some(d=>d.startsWith(u)):n?.include?.length===0||n?.include?.includes(u)),r=o.map(([u])=>u),i=o.map(([u,d])=>d(e)),a=await ot(i,n?.timeout||5e3,rt),s={},c={};a.forEach((u,d)=>{u.value!=null&&(c[r[d]]=u.value,s[r[d]]=u.elapsed??0)});let m=ee(c,n);return{elapsed:s,resolvedComponents:m}}var K=class{options;constructor(e){this.options={...B,...e}}async get(e){let n={...this.options,...e};return Pe(n)}getVersion(){return""}includeComponent(e,n){De(e,n)}};var In=(t,e={})=>({"Content-Type":"application/json",...t?.accessToken&&{Authorization:`Bearer ${t?.accessToken}`},...e}),vn=async(t,e)=>{if(!t.ok){let n=await t.text();throw new Error(n)}return e==="file"?t.blob():e==="json"?t.json():e==="text"?t.text():null},at=async({url:t,auth:e,body:n,method:o="GET",headers:r={},responseType:i="json"})=>{let a={method:o,headers:In(e,r),...n?{body:n instanceof FormData?n:JSON.stringify(n)}:{}},s=await fetch(t,a);return vn(s,i)},st=t=>at({...t,method:"GET"}),U=t=>at({...t,method:"POST"});var En=[{name:"lowCpuCores",weight:2,async check(){let t=navigator.hardwareConcurrency||0,e=t>0&&t<=2;return{value:t,triggered:e}}},{name:"lowDeviceMemory",weight:0,async check(){let t=navigator.deviceMemory||0,e=t>0&&t<=4;return{value:t,triggered:e}}},{name:"platformMismatch",weight:1,async check(){let t=navigator.userAgent||"",e=navigator.platform||"",n=t.includes("Mac")&&e.includes("Linux")||t.includes("Win")&&e.includes("Mac")||e===""||e==="Unknown";return{value:e,triggered:n}}},{name:"webglSoftwareRenderer",weight:4,async check(){let t=null,e=null,n=!1;try{let o=document.createElement("canvas"),r=o.getContext("webgl")||o.getContext("experimental-webgl");if(r){let i=r.getExtension("WEBGL_debug_renderer_info");if(i){t=r.getParameter(i.UNMASKED_VENDOR_WEBGL)||"",e=r.getParameter(i.UNMASKED_RENDERER_WEBGL)||"";let a=e.toLowerCase(),s=t.toLowerCase();n=a.includes("swiftshader")||a.includes("llvmpipe")||a.includes("softwar")||a.includes("basic render")||a.includes("vmware")||a.includes("virtualbox")||s.includes("vmware")||s.includes("parallels")}}}catch{}return{value:{vendor:t,renderer:e},triggered:n}}},{name:"missingWebGPUAdapter",weight:3,async check(){if(!("gpu"in navigator))return{value:"no WebGPU",triggered:!0};try{let t=await navigator.gpu.requestAdapter();return{value:t?"adapter-present":"adapter-null",triggered:!t}}catch{return{value:"adapter-error",triggered:!0}}}},{name:"reducedTimerPrecision",weight:1,async check(){let t=performance.now();await new Promise(o=>setTimeout(o,50));let e=performance.now()-t,n=e<30||e>80;return{value:e.toFixed(2),triggered:n}}},{name:"timerJitter",weight:0,async check(){let t=[];for(let n=0;n<10;n++){let o=performance.now();await new Promise(i=>setTimeout(i,10));let r=performance.now();t.push(r-o)}let e=Math.sqrt(t.map(n=>(n-10)**2).reduce((n,o)=>n+o)/t.length);return{value:e.toFixed(3),triggered:e>5}}},{name:"audioFingerprint",weight:1,async check(){try{let t=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,44100,44100),e=t.createOscillator();e.frequency.value=440,e.connect(t.destination),e.start(0);let o=(await t.startRendering()).getChannelData(0).reduce((r,i)=>r+Math.abs(i),0);return{value:o,triggered:o<100}}catch{return{value:"audio-error",triggered:!0}}}},{name:"canvasEntropy",weight:1,async check(){try{let t=document.createElement("canvas"),e=t.getContext("2d");e.textBaseline="top",e.font="14px 'Arial'",e.fillText("VM CHECK",2,2);let o=[...t.toDataURL()].reduce((r,i)=>(r+i.charCodeAt(0))%9999999,0);return{value:o,triggered:o===0||o===999999}}catch{return{value:"canvas-error",triggered:!0}}}},{name:"windowSizeWeird",weight:1,async check(){let t=window.innerWidth/window.innerHeight,e=t===1.333||t===1.6;return{value:t.toFixed(2),triggered:e}}},{name:"touchMismatch",weight:1,async check(){let t="ontouchstart"in window,e=navigator.maxTouchPoints||0;return{value:{hasTouch:t,maxTouch:e},triggered:t&&e===0}}},{name:"batteryVirtualized",weight:1,async check(){if(!navigator.getBattery)return{value:"no API",triggered:!0};try{let t=await navigator.getBattery(),e=t.chargingTime===0&&t.dischargingTime===1/0;return{value:{chargingTime:t.chargingTime,dischargingTime:t.dischargingTime},triggered:e}}catch{return{value:"battery-error",triggered:!0}}}},{name:"permissionsWeird",weight:0,async check(){try{let t=await navigator.permissions.query({name:"camera"});return{value:t.state,triggered:t.state==="prompt"}}catch{return{value:"perm-error",triggered:!0}}}},{name:"noMediaDevices",weight:1,async check(){try{let t=await navigator.mediaDevices.enumerateDevices();return{value:t.length,triggered:t.length===0}}catch{return{value:"media-error",triggered:!0}}}},{name:"virtualizedMediaDevices",weight:1,async check(){try{let t=await navigator.mediaDevices.enumerateDevices(),e=t.some(n=>n.label.toLowerCase().includes("virtual"));return{value:t.map(n=>n.label),triggered:e}}catch{return{value:"media-error",triggered:!0}}}},{name:"webrtcIpPattern",weight:2,async check(){return new Promise(t=>{try{let e=new RTCPeerConnection({iceServers:[]});e.createDataChannel("x");let n=setTimeout(()=>{e.close(),t({value:"timeout",triggered:!1})},3e3);e.onicecandidate=o=>{if(!o?.candidate){clearTimeout(n),e.close(),t({value:"no candidate",triggered:!1});return}let r=o.candidate.candidate.toLowerCase();clearTimeout(n),e.close(),t({value:r,triggered:r.includes("10.0.2.")||r.includes("172.16.")||r.includes("192.168.56.")})},e.createOffer().then(o=>e.setLocalDescription(o))}catch{t({value:"rtc-error",triggered:!1})}})}},{name:"gpuAccelerationDisabled",weight:3,async check(){let e=document.createElement("canvas").getContext("webgl");return{value:!!e,triggered:!e}}},{name:"noWebGL2",weight:3,async check(){let t=document.createElement("canvas").getContext("webgl2");return{value:!!t,triggered:!t}}},{name:"lowStorageQuota",weight:1,async check(){try{let t=await navigator.storage.estimate();return{value:t.quota,triggered:(t.quota??0)<524288e3}}catch{return{value:"storage-error",triggered:!0}}}},{name:"lowEntropy",weight:1,async check(){let t=Object.keys(navigator).length+Object.keys(screen).length+Object.keys(window).length;return{value:t,triggered:t<200}}},{name:"noLanguages",weight:1,async check(){let t=navigator.languages||[];return{value:t,triggered:t.length===0}}},{name:"uaEntropyLow",weight:1,async check(){let t=navigator.userAgent;return{value:t,triggered:t.length<30}}},{name:"weirdDPI",weight:2,async check(){let t=window.devicePixelRatio;return{value:t,triggered:t===1}}}],bn=[{name:"tamperingPluginMismatch",penalty:3,async check(){try{let t=navigator.userAgent.toLowerCase(),e=(t.includes("chrome")||t.includes("edg"))&&!t.includes("firefox")&&!t.includes("safari"),n=navigator.plugins?.length??0,o=!e&&n>0;return{value:{pluginCount:n,isChromeLike:e},triggered:o}}catch{return{value:"error",triggered:!1}}}},{name:"tamperingWebglNoise",penalty:1,async check(){try{let t=document.createElement("canvas");t.width=16,t.height=16;let e=t.getContext("webgl");if(!e)return{value:"no-webgl",triggered:!1};e.clearColor(.1,.2,.3,1),e.clear(e.COLOR_BUFFER_BIT);let n=new Uint8Array(16*16*4);e.readPixels(0,0,16,16,e.RGBA,e.UNSIGNED_BYTE,n);let o=new Set(n).size;return{value:{uniqueValues:o},triggered:o>4}}catch{return{value:"error",triggered:!1}}}},{name:"tamperingServiceWorkerBlocked",penalty:1,async check(){let t=!("serviceWorker"in navigator);return{value:{serviceWorkerAvailable:!t},triggered:t}}},{name:"permissionsWeirdAntiVM",penalty:2,async check(){try{let t=await navigator.permissions.query({name:"camera"});return{value:t.state,triggered:t.state==="prompt"}}catch{return{value:"error",triggered:!1}}}}];async function ct({threshold:t=4}={}){let e={},n=0;for(let r of En)try{let i=await r.check();e[r.name]={...i,weight:r.weight},i.triggered&&r.weight>0&&(n+=r.weight)}catch{e[r.name]={value:"error",triggered:!1,weight:r.weight}}let o=n;for(let r of bn)try{let i=await r.check();e[r.name]={...i,penalty:r.penalty},i.triggered&&(n-=r.penalty)}catch{e[r.name]={value:"error",triggered:!1,penalty:r.penalty}}return{isLikelyVM:n>=t,score:n,rawScore:o,threshold:t,signals:e}}var Tn=[{name:"hookedFunctionToString",weight:2,async check(){let t=Function.prototype.toString.toString(),e=Function.prototype.toString+"";return{value:{native:t,current:e},triggered:t!==e}}},{name:"navigatorProxyTrap",weight:2,async check(){let t=!1;try{let e=Object.getOwnPropertyDescriptor(window,"navigator");e&&e.get&&e.get.toString()?.includes("[native code]")===!1&&(t=!0)}catch{}return{value:"navigator getter",triggered:t}}},{name:"uaMismatch",weight:2,async check(){let t=navigator.userAgent||"",e="";try{let o=await navigator.userAgentData?.getHighEntropyValues?.(["platform","brands"]);e=JSON.stringify(o)}catch{}let n=t?.includes("Mac")&&e?.includes("Windows")||t?.includes("Win")&&e?.includes("Mac")||e&&e.length>0&&!t;return{value:{ua:t,brandInfo:e},triggered:n}}},{name:"timezoneLocaleMismatch",weight:1,async check(){let t=Intl.DateTimeFormat().resolvedOptions().timeZone,e=navigator.language||"",n=e.startsWith("en")&&t==="Asia/Shanghai"||e.startsWith("zh")&&t==="America/New_York"||t===void 0;return{value:{tz:t,lang:e},triggered:n}}},{name:"canvasNoise",weight:2,async check(){let t=()=>{let r=document.createElement("canvas"),i=r.getContext("2d");return i.textBaseline="top",i.font="14px Arial",i.fillText("anti-detect-check",2,2),r.toDataURL()},e=t(),n=t();return{value:{a:e,b:n},triggered:e!==n}}},{name:"webglNoise",weight:-2,async check(){try{let e=document.createElement("canvas").getContext("webgl");if(!e)return{value:"no-webgl",triggered:!0};let n=e.getExtension("WEBGL_debug_renderer_info");if(!n)return{value:"no-debug-extension",triggered:!1};let o=e.getParameter(n.UNMASKED_VENDOR_WEBGL),r=e.getParameter(n.UNMASKED_RENDERER_WEBGL),i=o===""||r===""||o?.includes(" ")===!1||r?.includes(" ")===!1;return{value:{v:o,r},triggered:i}}catch{return{value:"gl-error",triggered:!0}}}},{name:"webdriverFlag",weight:3,async check(){let t=navigator.webdriver===!0;return{value:navigator.webdriver,triggered:t}}},{name:"perfectEventTiming",weight:-3,async check(){let t=performance.now();return{value:t,triggered:t%1===0}}},{name:"serviceWorkerBlocked",weight:-4,async check(){let t=!("serviceWorker"in navigator);return{value:t,triggered:t}}},{name:"smallQuota",weight:2,async check(){try{let t=await navigator.storage.estimate(),e=t.quota<50*1024*1024;return{value:t.quota,triggered:e}}catch{return{value:"quota-error",triggered:!0}}}},{name:"indexedDbBlocked",weight:2,async check(){try{let t=indexedDB.open("tamper-check");return await new Promise(e=>{t.onerror=()=>e({value:"error",triggered:!0}),t.onsuccess=()=>e({value:"ok",triggered:!1})})}catch{return{value:"throw",triggered:!0}}}},{name:"screenDprMismatch",weight:0,async check(){let t=window.screen.width,e=window.screen.height,n=window.devicePixelRatio,o=t===1920&&n===1&&e===1080||n%1!==0&&n%1!==.5;return{value:{w:t,h:e,dpr:n},triggered:o}}},{name:"missingCommonFonts",weight:1,async check(){return{value:"skipped",triggered:!1}}},{name:"noMediaDevices",weight:1,async check(){try{let t=await navigator.mediaDevices.enumerateDevices();return{value:t.length,triggered:t.length===0}}catch{return{value:"error",triggered:!0}}}},{name:"languagesEmpty",weight:1,async check(){let t=navigator.languages||[];return{value:t,triggered:t.length===0}}},{name:"pluginMismatch",weight:-4,async check(){try{let t=navigator.plugins.length;return{value:t,triggered:t===0}}catch{return{value:"error",triggered:!0}}}},{name:"devtoolsDetected",weight:-2,async check(){return new Promise(async t=>{let e={viewportBreakpoint:!1,consoleSpeed:!1,consoleProfileTiming:!1},n=160,o=window.outerWidth-window.innerWidth,r=window.outerHeight-window.innerHeight;(o>n||r>n)&&(e.viewportBreakpoint=!0);async function i(c=50){return new Promise(m=>{let u=performance.now();console.log("%c ","font-size:3000px");let d=performance.now();m(d-u>c)})}e.consoleSpeed=await i();function a(){if(typeof console.profile!="function"||typeof console.profileEnd!="function")return!1;let c=5,m=3,u=[];try{for(let g=0;g<c;g++){let f=performance.now(),T=`profile_${f.toString()}`;console.profile(T),console.profileEnd(T),u.push(performance.now()-f)}}catch{return!1}return u.sort((g,f)=>g-f),u[Math.floor(u.length/2)]>m}e.consoleProfileTiming=a();let s=Object.values(e).some(Boolean);setTimeout(()=>{t({value:s,triggered:s})},50)})}},{name:"knownAntiDetectBrowser",weight:5,async check(){let t=navigator.userAgent.toLowerCase(),n=["incogniton","multilogin","morelogin","adspect","kameleo","goLogin"].some(o=>t?.includes(o));return{value:t,triggered:n}}},{name:"batteryVirtualized",weight:4,async check(){try{let t=await navigator.getBattery(),e=t.chargingTime,n=t.dischargingTime;return{value:{chargingTime:e,dischargingTime:n},triggered:e===0}}catch{return{value:"no-battery-api",triggered:!1}}}},{name:"permissionDenied",weight:4,async check(){try{let t=await navigator.permissions.query({name:"notifications"}),e=t.state==="denied";return{value:t.state,triggered:e}}catch{return{value:"perm-error",triggered:!1}}}}];async function ut({anomalyMin:t=.52,anomalyMax:e=.54}={}){let n={},o=0;for(let d of Tn){let g=await d.check();n[d.name]=g,g.triggered&&(o+=d.weight)}let r=navigator?.platform||"",i=(navigator?.userAgent||"").toLowerCase(),a=r.toLowerCase().includes("win"),s=n.batteryVirtualized?.triggered||!1,c=n.permissionDenied?.triggered||!1,m=!a&&r!==""&&s&&c,u=Math.min(1,Math.max(0,o)/15);return{result:m&&u>=t&&u<=e||n.knownAntiDetectBrowser?.triggered,anomalyScore:u,score:o,signals:n}}function Rn(){let t=0;try{0 .toFixed(-1)}catch(e){t=e.message.length}return t}function xn(){let t=navigator.userAgent,e=Rn();return e===44||e===43?"Safari":e===51?"Chrome":e===25?"Firefox":navigator.msSaveBlob!==void 0?"MSIE":t.match(/Chrome/)?navigator.brave!==void 0?"Brave":t.includes("Edg")?"Edge":t.includes("OPR")?"Opera":"Chrome":"Unknown"}var An=[{name:"safari_currentStorageTest",weight:2,browser:"Safari",async check(){if(typeof navigator.storage?.getDirectory!="function")return{triggered:!1,value:"unsupported"};try{return await navigator.storage.getDirectory(),{triggered:!1,value:"ok"}}catch(t){let e=t?.message??String(t);return{triggered:e.includes("unknown transient reason"),value:e}}}},{name:"safari13to18_indexedDbBlobTest",weight:2,browser:"Safari",async check(){return await new Promise(t=>{let e=String(Math.random()),n=indexedDB.open(e,1);n.onupgradeneeded=o=>{let r=o.target.result;try{r.createObjectStore("t",{autoIncrement:!0}).put(new Blob),t({triggered:!1,value:"ok"})}catch(i){let a=i?.message??String(i);t({triggered:a.includes("are not yet supported"),value:a})}finally{r.close(),indexedDB.deleteDatabase(e)}},n.onerror=()=>t({triggered:!1,value:"idb-error"})})}},{name:"safari_oldWebkitTest",weight:1,browser:"Safari",async check(){let t=window.openDatabase,e=window.localStorage;try{t(null,null,null,null)}catch{return{triggered:!0,value:"openDatabase denied"}}try{e.setItem("test","1"),e.removeItem("test")}catch{return{triggered:!0,value:"localStorage denied"}}return{triggered:!1,value:"ok"}}},{name:"chrome_storageQuotaPrivateTest",weight:2,browser:"Chrome",async check(){return await new Promise((t,e)=>{let o=window?.performance?.memory?.jsHeapSizeLimit??1073741824;navigator.webkitTemporaryStorage.queryUsageAndQuota((r,i)=>{let a=Math.round(i/1048576),s=Math.round(o/(1024*1024))*2;t({triggered:a<s,value:{quotaMB:a,limitMB:s}})},r=>e(r))})}},{name:"chrome_oldFileSystemTest",weight:1,browser:"Chrome",async check(){let t=window.webkitRequestFileSystem;return t?await new Promise(e=>t(0,1,()=>e({triggered:!1,value:"ok"}),()=>e({triggered:!0,value:"denied"}))):{triggered:!1,value:"unsupported"}}},{name:"firefox_storageDirectoryTest",weight:2,browser:"Firefox",async check(){if(typeof navigator.storage?.getDirectory!="function")return{triggered:!1,value:"unsupported"};try{return await navigator.storage.getDirectory(),{triggered:!1,value:"ok"}}catch(t){let e=t?.message??String(t);return{triggered:e.includes("Security error"),value:e}}}},{name:"firefox_indexedDbInvalidStateTest",weight:1,browser:"Firefox",async check(){return await new Promise(t=>{let e=indexedDB.open("inPrivate");e.onerror=()=>{t({triggered:e.error?.name==="InvalidStateError",value:e.error?.name})},e.onsuccess=()=>{indexedDB.deleteDatabase("inPrivate"),t({triggered:!1,value:"ok"})}})}},{name:"msie_indexedDbMissing",weight:2,browser:"MSIE",async check(){return{triggered:window.indexedDB===void 0,value:"msie-idb-check"}}}];async function lt(){let t=xn(),e={},n=0;for(let o of An){if(o.browser!==t)continue;let r=await o.check();e[o.name]=r,r.triggered&&(n+=o.weight)}return{isPrivate:n>0,browserName:t,score:n,signals:e}}typeof window<"u"&&(window.detectIncognito=lt);var mt=lt;var dt=[{name:"globalPrivacyControl",weight:3,async check(){let t=navigator.globalPrivacyControl;return{triggered:t===!0,value:t}}},{name:"doNotTrack",weight:1,async check(){let t=navigator.doNotTrack;return{triggered:t==="1",value:t}}},{name:"cookiesDisabled",weight:3,async check(){let t=navigator.cookieEnabled;return{triggered:t===!1,value:t}}},{name:"thirdPartyCookiesBlocked",weight:3,async check(){try{if("hasStorageAccess"in document&&!await document.hasStorageAccess())try{return await document.requestStorageAccess(),{triggered:!1,value:"access_granted"}}catch{return{triggered:!0,value:"access_denied"}}let t=`__dtect_3p_test_${Date.now()}`;document.cookie=`${t}=1; SameSite=None; Secure`;let e=document.cookie.includes(t);return document.cookie=`${t}=; expires=Thu, 01 Jan 1970 00:00:00 GMT`,{triggered:!1,value:e?"cookies_work":"may_be_blocked"}}catch(t){return{triggered:!1,value:`error: ${t?.message}`}}}},{name:"firefoxResistFingerprinting",weight:2,async check(){let t=[],e=new Date().getTimezoneOffset();e===0&&Intl.DateTimeFormat().resolvedOptions().timeZone==="UTC"&&t.push("timezone_utc");let n=navigator.hardwareConcurrency;n===2&&t.push("cores_capped");let o=window.screen.width,r=window.screen.height,i=window.innerWidth,a=window.innerHeight;o===i&&r===a&&t.push("screen_matches_inner");let s=window.matchMedia("(prefers-reduced-motion: reduce)").matches;return{triggered:t.length>=2,value:{signals:t,timezoneOffset:e,cores:n,prefersReducedMotion:s}}}},{name:"braveShields",weight:3,async check(){if(!(navigator.brave!==void 0))return{triggered:!1,value:"not_brave"};try{if(!await navigator.brave.isBrave())return{triggered:!1,value:"brave_check_false"};let o=document.createElement("canvas").getContext("2d");if(o){o.fillStyle="rgb(255, 0, 0)",o.fillRect(0,0,1,1);let r=o.getImageData(0,0,1,1).data;o.fillRect(0,0,1,1);let i=o.getImageData(0,0,1,1).data;if(r[0]!==i[0]||r[1]!==i[1]||r[2]!==i[2])return{triggered:!0,value:"shields_active_canvas"}}try{let r=new RTCPeerConnection({iceServers:[{urls:"stun:stun.l.google.com:19302"}]});if(r.createDataChannel(""),await new Promise(a=>{let s=setTimeout(()=>{r.close(),a(!1)},1e3);r.onicecandidate=c=>{c.candidate?.candidate&&(/([0-9]{1,3}\.){3}[0-9]{1,3}/.test(c.candidate.candidate)||(clearTimeout(s),r.close(),a(!0)))},r.createOffer().then(c=>r.setLocalDescription(c))}))return{triggered:!0,value:"shields_active_webrtc"}}catch{return{triggered:!0,value:"shields_active_webrtc_blocked"}}return{triggered:!0,value:"brave_detected_shields_default"}}catch(e){return{triggered:!1,value:`error: ${e?.message}`}}}}];async function gt(){let t={},e=0,n=await Promise.allSettled(dt.map(async o=>{let r=await o.check();return{name:o.name,weight:o.weight,result:r}}));for(let o of n)if(o.status==="fulfilled"){let{name:r,weight:i,result:a}=o.value;t[r]=a,a.triggered&&(e+=i)}else{let r=n.indexOf(o),i=dt[r];i&&(t[i.name]={triggered:!1,value:`check_failed: ${o.reason}`})}return{isPrivacyEnabled:e>3,score:e,signals:t}}typeof window<"u"&&(window.detectPrivacy=gt);var ft=gt;var pt={screenResolution:"",screenAvailResolution:"",screenPixelDepth:null,fontPreferences:"",colorGamut:"",dynamicRange:"",monochrome:null,audioBaseLatency:null,audioSampleRate:null,vendorFlavors:[],pdfViewerEnabled:null,osCpu:"",dateTimeLocale:""};function k(t,e){try{let n=t();return n??e}catch{return e}}function yt(t,e){return typeof t!="number"||typeof e!="number"||!t||!e?"":`${Math.max(t,e)}x${Math.min(t,e)}`}var Sn=[["default",{}],["apple",{fontFamily:"-apple-system"}],["serif",{fontFamily:"serif"}],["sans",{fontFamily:"sans-serif"}],["mono",{fontFamily:"monospace"}],["min",{fontSize:"1px"}],["system",{fontFamily:"system-ui"}]],Dn="mmMwWLliI0fiflO&1IlV%\u4E2D\u6587\u5B57\u4F53\xE9\xE8\xEA";function Pn(){let t=document.createElement("div");t.style.cssText="position:absolute;visibility:hidden;left:-9999px;top:-9999px;width:auto;height:auto;white-space:nowrap;font-size:48px;";let e=Sn.map(([n,o])=>{let r=document.createElement("span");return r.textContent=Dn,r.style.whiteSpace="nowrap",Object.assign(r.style,o),t.appendChild(r),[n,r]});document.body.appendChild(t);try{return e.map(([n,o])=>`${n}:${o.getBoundingClientRect().width}`).join("|")}finally{t.remove()}}function ht(t,e){for(let n of e)if(matchMedia(`(${t}: ${n})`).matches)return n;return""}function kn(){if(!matchMedia("(min-monochrome: 0)").matches)return null;for(let t=0;t<=100;t++)if(matchMedia(`(max-monochrome: ${t})`).matches)return t;return null}function _n(){let t=window.AudioContext||window.webkitAudioContext;if(!t)return{baseLatency:null,sampleRate:null};let e=new t;try{return{baseLatency:typeof e.baseLatency=="number"?e.baseLatency:null,sampleRate:typeof e.sampleRate=="number"?e.sampleRate:null}}finally{typeof e.close=="function"&&e.close()}}function On(){return["chrome","safari","__crWeb","__gCrWeb","yandex","__yb","__ybro","__firefox__","__edgeTrackingPreventionStatistics","webkit","oprt","samsungAr","ucweb","UCShellJava","puffinDevice"].filter(e=>{let n=window[e];return typeof n=="object"&&n!==null})}async function wt(){try{if(typeof document>"u"||typeof window>"u")return pt;let t=k(_n,{baseLatency:null,sampleRate:null}),e=k(()=>Intl.DateTimeFormat().resolvedOptions(),null);return{screenResolution:k(()=>yt(screen.width,screen.height),""),screenAvailResolution:k(()=>yt(screen.availWidth,screen.availHeight),""),screenPixelDepth:k(()=>screen.pixelDepth,null),fontPreferences:k(Pn,""),colorGamut:k(()=>ht("color-gamut",["rec2020","p3","srgb"]),""),dynamicRange:k(()=>ht("dynamic-range",["high","standard"]),""),monochrome:k(kn,null),audioBaseLatency:t.baseLatency,audioSampleRate:t.sampleRate,vendorFlavors:k(On,[]),pdfViewerEnabled:k(()=>navigator.pdfViewerEnabled??null,null),osCpu:k(()=>navigator.oscpu??"",""),dateTimeLocale:e?`${e.locale??""}|${e.calendar??""}|${e.numberingSystem??""}`:""}}catch{return pt}}var ke={supported:!1,extensions:[],parametersHash:"",parametersCount:0,shaderPrecisions:[],contextAttributes:[]};function Mn(t){let e=2166136261,n=16777619;for(let o=0;o<t.length;o++){let r=t.charCodeAt(o);e=Math.imul(e^r,16777619)>>>0,n=Math.imul(n^r,2246822507)>>>0}return e.toString(16).padStart(8,"0")+n.toString(16).padStart(8,"0")}var Nn=["VERTEX_SHADER","FRAGMENT_SHADER"],Ln=["LOW_FLOAT","MEDIUM_FLOAT","HIGH_FLOAT","LOW_INT","MEDIUM_INT","HIGH_INT"];function Cn(t){let e=[],n=Object.getPrototypeOf(t);for(let o of Object.getOwnPropertyNames(n)){if(!/^[A-Z][A-Z0-9_]*$/.test(o))continue;let r=t[o];if(typeof r=="number")try{let i=t.getParameter(r);if(t.getError()!==t.NO_ERROR||i==null)continue;e.push(`${o}=${r}=${Bn(i)}`)}catch{}}return e.sort()}function Bn(t){return t instanceof Int32Array||t instanceof Float32Array?Array.from(t).join(","):Array.isArray(t)?t.join(","):String(t)}function Fn(t){let e=[];for(let n of Nn)for(let o of Ln)try{let r=t.getShaderPrecisionFormat(t[n],t[o]);if(!r)continue;e.push(`${n}.${o}=${r.rangeMin},${r.rangeMax},${r.precision}`)}catch{}return e}function Un(t){let e=t.getContextAttributes();return e?Object.keys(e).sort().map(n=>`${n}=${String(e[n])}`):[]}async function It(){try{if(typeof document>"u")return ke;let t=document.createElement("canvas"),e=t.getContext("webgl")||t.getContext("experimental-webgl");if(!e)return ke;let n=Cn(e);return{supported:!0,extensions:(e.getSupportedExtensions()??[]).slice().sort(),parametersHash:n.length?Mn(n.join("|")):"",parametersCount:n.length,shaderPrecisions:Fn(e),contextAttributes:Un(e)}}catch{return ke}}function Gn(t){let e=t?.projectId,n=t?.visitorId||M();return(typeof t?.projectId=="number"||typeof t?.visitorId=="number")&&(e=`${t?.projectId}`,n=`${t?.visitorId}`),{visitorId:n,projectId:e}}function G(t){let{projectId:e,visitorId:n}=Gn(t);return{projectId:e,visitorId:n}}async function Vn(){let t=new K,[e,n,o,r,i,a,s]=await Promise.allSettled([t.get(),ct(),ut(),mt(),ft(),It(),wt()]);return{deviceRes:e,vmDtectResults:n,tamperingDtectResults:o,incognitoDtectResults:r,privacySettingsDtectResults:i,webglExtensionsResults:a,stableEntropyResults:s}}function _e(){let t=w().signalsPromise;if(t)return t;let e=Vn();return e.catch(()=>{S(n=>n.signalsPromise===e?{...n,signalsPromise:void 0}:n)}),S(n=>({...n,signalsPromise:e})),e}function Wn(t,e){return{entryLink:window?.location?.href,securitySettings:t.securitySettings,metaData:t.metaData,vmDtectResults:e?.vmDtectResults?.value,tamperingDtectResults:e?.tamperingDtectResults?.value,incognitoDtectResults:e?.incognitoDtectResults?.value,deviceIdResults:e?.deviceRes?.value,privacySettingsDtectResults:e?.privacySettingsDtectResults?.value,webglExtensionsResults:e?.webglExtensionsResults?.value,stableEntropyResults:e?.stableEntropyResults?.value}}function qn(t,e,n,o){let r=(performance.now()-e).toFixed();I(`${t} finishes in ${r}ms`,"info",{function:t,endpoint:n?.endpoint,diff:r,token:o,clientId:n?.clientId})}function vt(t,e,n,o,r){let i=(performance.now()-e).toFixed();I(`${t} error`,"error",{function:t,endpoint:n?.endpoint,error:r,diff:i,token:o,clientId:n?.clientId})}async function Et(t,e){let n=performance.now(),{projectId:o,visitorId:r}=G(t);if(!t||!o?.trim())throw new Error(h.FAILED_TO_GET_SECURITY_RESULT);C({projectId:o,visitorId:r});let{state:i,config:a,version:s}=w();try{let c=await _e(),m=Wn(t,c),u={...t,projectId:o,visitorId:r,clientData:m,version:s,token:i.token,questionData:i.questionData,aiCheckData:i.aiCheckData},d=await U({url:e,body:u,headers:{"client-id":a?.clientId||"","x-api-key":a?.apiKey||""}});if(!("token"in d||"results"in d))throw new Error(h.INTERNAL_SERVER_ERROR);let g="results"in d&&d.results.isAIUsageDetected===!0;return S(f=>({...f,state:{...f.state,token:i.token,visitorId:r,projectId:o,clientData:m,aiUsageFlagged:f.state.aiUsageFlagged||g}})),qn("getResultBase",n,a,i.token),d}catch(c){c instanceof Error?vt("getResultBase",n,a,i.token,{message:c.message,stack:c.stack,name:c.name}):vt("getResultBase",n,a,i.token,c),L(c)}}async function te(t){let{endpoint:e}=N();if(t)return Et(t,`${e}/client/check/result`)}async function ne(t){let{endpoint:e}=N();return Et(t,`${e}/client/check`)}var j;function bt(){let{config:t,monitor:e,state:n}=w();if(!t?.autoFlagAIUsage||!e||(j?.(),j=void 0,n.aiUsageFlagged))return;let o=()=>{let{state:r}=w();r.aiUsageFlagged||!(e.apd||e.qbc&&e.mas&&e.scb!=null)||r.projectId&&(S(a=>({...a,state:{...a.state,aiUsageFlagged:!0}})),j?.(),j=void 0,z({projectId:r.projectId,visitorId:r.visitorId}))};j=e.onChange(o),o()}async function z(t){let e=performance.now(),{visitorId:n,projectId:o}=G(t);C({projectId:o,visitorId:n});let{state:r,config:i,monitor:a,version:s}=w(),{checkResultEndpoint:c}=N(),m={timeTakenSeconds:t.timeTakenSeconds,qbc:a?.qbc,mas:a?.mas,scb:a?.scb,apd:a?.apd};try{let u=await U({url:c,headers:{"client-id":i?.clientId||"","x-api-key":i?.apiKey||""},body:{token:r.token,visitorId:n,projectId:o,version:s,clientData:r.clientData,questionData:r.questionData,aiCheckData:m}});if(!u)throw new Error(h.INTERNAL_SERVER_ERROR);let d="results"in u&&u.results.isAIUsageDetected===!0;S(f=>({...f,state:{...f.state,aiCheckData:m,visitorId:n,projectId:o,aiUsageFlagged:f.state.aiUsageFlagged||d}}));let g=(performance.now()-e).toFixed();return I(`isAIUsageDetected finishes in ${g}ms`,"info",{endpoint:i?.endpoint,diff:g,token:r.token,clientId:i?.clientId}),u}catch(u){let d=(performance.now()-e).toFixed();u instanceof Error?I("isAIUsageDetected error","error",{endpoint:i?.endpoint,error:{message:u.message,stack:u.stack,name:u.name},diff:d,token:r.token,clientId:i?.clientId}):I("isAIUsageDetected error","error",{endpoint:i?.endpoint,error:u,diff:d,token:r.token,clientId:i?.clientId}),L(u)}}async function re(t){let e=performance.now(),{state:n,config:o}=w(),{respondentType:r,language:i}=t;try{let a=await st({url:`${o?.endpoint}/client/quality-questions/${r}/${i}`,headers:{"client-id":o?.clientId||"","x-api-key":o?.apiKey||""}});if(!a)throw new Error(h.INTERNAL_SERVER_ERROR);let s=(performance.now()-e).toFixed();return I(`getQualityQuestions finishes in ${s}ms`,"info",{function:"getQualityQuestions",endpoint:o?.endpoint,diff:s,token:n.token,clientId:o?.clientId}),a}catch(a){let s=(performance.now()-e).toFixed();I("getQualityQuestions error","error",{endpoint:o?.endpoint,error:a,diff:s,token:n.token,clientId:o?.clientId}),L(a)}}async function oe(t){let e=performance.now(),{visitorId:n,projectId:o}=G(t);C({projectId:o,visitorId:n});let{state:r,config:i,version:a}=w(),{checkResultEndpoint:s}=N(),c={questions:t.questions};try{let m=await U({url:s,headers:{"client-id":i?.clientId||"","x-api-key":i?.apiKey||""},body:{token:r.token,visitorId:n,projectId:o,version:a,questionData:c,aiCheckData:r.aiCheckData,clientData:r.clientData}});if(!m)throw new Error(h.INTERNAL_SERVER_ERROR);S(d=>({...d,state:{...d.state,token:r.token,questionData:c,visitorId:n,projectId:o}}));let u=(performance.now()-e).toFixed();return I(`checkQualityQuestions finishes in ${u}ms`,"info",{function:"checkQualityQuestions",endpoint:i?.endpoint,diff:u,token:r.token,clientId:i?.clientId}),m}catch(m){let u=(performance.now()-e).toFixed();m instanceof Error?I("checkQualityQuestions error","error",{endpoint:i?.endpoint,error:{message:m.message,stack:m.stack,name:m.name},diff:u,token:r.token,clientId:i?.clientId}):I("checkQualityQuestions error","error",{endpoint:i?.endpoint,error:m,diff:u,token:r.token,clientId:i?.clientId}),L(m)}}var Tt,Rt=Be;function $n(){let{config:t}=w();return!!(t?.clientId&&t?.apiKey)}function Kn(t){let{config:e}=w();if(!t?.clientId||!t?.apiKey)throw I(h.MISSING_CREDENTIALS,"error",{endpoint:e?.endpoint,...t}),new Error(h.MISSING_CREDENTIALS)}function jn(){let{config:t}=w();return!!(t?.clientId&&t.apiKey)}function zn(t){let{config:e}=w();if(!jn())throw I(h.MISSING_CREDENTIALS,"error",{endpoint:e?.endpoint,...t}),new Error(h.MISSING_CREDENTIALS)}function Yn(t){return{clientId:t.clientId,apiKey:t.apiKey,endpoint:t.endpoint||"https://api.dtect.io/security",includeResults:t.includeResults,autoFlagAIUsage:t.autoFlagAIUsage}}function Qn(t){let e=t.endpoint,n=t.includeResults?`${e}/client/check/result`:`${e}/client/check`;return{...t,checkResultEndpoint:n}}function Jn(t){let e=Qn(t);S(n=>({...n,config:e}))}function Xn(){let{state:t}=w();if(t.isLoading)throw new Error(h.DUPLICATE_INITIALIZATION)}async function Zn(t){let{state:e,config:n}=w(),r=(performance.now()-t).toFixed();return I(`init() finishes ${r}ms`,"info",{endpoint:n?.endpoint,function:"init",diff:r,token:e.token,clientId:n?.clientId}),{getSecurityResult:te,getSecurityToken:ne,SecurityAPIError:Rt,isAIUsageDetected:z,checkQualityQuestions:oe,getQualityQuestions:re,LanguageCodes:V,QualityQuestionsRespondentTypes:W}}async function xt(t){let{state:e}=w(),n=performance.now();Kn(t);let o=Yn(t);Jn(o),zn(t);let r=$e(e.token);Xn(),ze(r),bt();try{return setTimeout(_e,0),await Zn(n)}catch(i){Ke(i,o)}finally{Ye(r)}}Tt={init:xt,getSecurityResult:te,getSecurityToken:ne,isAIUsageDetected:z,checkQualityQuestions:oe,getQualityQuestions:re,QualityQuestionsRespondentTypes:W,LanguageCodes:V};var Hn=Tt;
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- var Tt={UNAUTHORIZED:"Unauthorized"},Rt={EXPIRED:"EXPIRED_TOKEN",INVALID_API_KEY:"INVALID_API_KEY",MISSING_AUTHENTICATION_TOKEN:"MISSING_AUTHENTICATION_TOKEN"},ke={INTERNAL_SERVER_ERROR:"Internal Server Error during API Request",MISSING_CREDENTIALS:"Missing Public Client ID or Public API Key",MAINTENANCE_MODE:"API Under Maintenance",RATE_LIMIT_REACHED:"Too many requests. Rate limit exceeded"},_e={SDK_INIT_ERROR:"Internal Server Error during SDK Initialization",DUPLICATE_INITIALIZATION:"Multiple SDK Initializations Detected",NOT_INITIALIZED:"SDK Not Initialized"},Oe={INVALID_CREDENTIALS:"Invalid Public Client ID or Public API Key"},Me={FAILED_TO_GET_SECURITY_RESULT:"Failed to Retrieve Security Result"},Ne={FAILED_TO_GET_SECURITY_TOKEN:" Failed to Generate Security Token"},h={...Tt,...Rt,...ke,..._e,...Oe,...Me,...Ne},Le={...ke,..._e,...Oe,...Me,...Ne};var K=(p=>(p.AR="ar",p.BN="bn",p.DE="de",p.EN="en",p.ES="es",p.FR="fr",p.HI="hi",p.ID="id",p.IT="it",p.JA="ja",p.KO="ko",p.MS="ms",p.NL="nl",p.PT="pt",p.RU="ru",p.YU="yu",p.ZH="zh",p))(K||{}),j=(y=>(y.GeneralConsumer="general-consumer",y.HRManagerDirector="hr-manager-director",y.WebDeveloper="web-developer",y.SoftwareEngineer="software-engineer",y.ITDirector="it-director",y.BusinessAdministrator="business-administrator",y.AccountsPayableManager="accounts-payable-manager",y.Accountant="accountant",y.FinanceDirector="finance-director",y.SmallBusinessOwner="small-business-owner",y.GeneralContractor="general-contractor",y.MarketingManagerDirector="marketing-manager-director",y.ConsumerShopper="consumer-shopper",y.Travel="travel",y.Entertainment="entertainment",y.FinanceAndBanking="finance-and-banking",y.General="general",y.B2BWhiteCollar="b2b-white-collar",y.B2BBlueCollar="b2b-blue-collar",y.Lawyer="lawyer",y))(j||{});var E=[];for(let t=0;t<256;++t)E.push((t+256).toString(16).slice(1));function Ce(t,e=0){return(E[t[e+0]]+E[t[e+1]]+E[t[e+2]]+E[t[e+3]]+"-"+E[t[e+4]]+E[t[e+5]]+"-"+E[t[e+6]]+E[t[e+7]]+"-"+E[t[e+8]]+E[t[e+9]]+"-"+E[t[e+10]]+E[t[e+11]]+E[t[e+12]]+E[t[e+13]]+E[t[e+14]]+E[t[e+15]]).toLowerCase()}var oe,xt=new Uint8Array(16);function ie(){if(!oe){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");oe=crypto.getRandomValues.bind(crypto)}return oe(xt)}var At=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),ae={randomUUID:At};function St(t,e,n){if(ae.randomUUID&&!e&&!t)return ae.randomUUID();t=t||{};let o=t.random??t.rng?.()??ie();if(o.length<16)throw new Error("Random bytes length must be >= 16");if(o[6]=o[6]&15|64,o[8]=o[8]&63|128,e){if(n=n||0,n<0||n+16>e.length)throw new RangeError(`UUID byte range ${n}:${n+15} is out of buffer bounds`);for(let r=0;r<16;++r)e[n+r]=o[r];return e}return Ce(o)}var M=St;var Be="dtect_security_sdk_state",Fe=typeof window<"u",Ue={isLoading:!1,token:"",visitorId:"",projectId:"",questionData:null,clientData:null,aiCheckData:null,aiUsageFlagged:!1},z={state:{...Ue},securityKeys:{behaviorKey:"",automationKey:""}};function Ge(){if(!Fe)return z;try{let t=sessionStorage.getItem(Be);if(!t)return z;let e=JSON.parse(t);return e.expiresAt&&e.expiresAt<Date.now()?z:{state:{...Ue,...e.state},securityKeys:e.securityKeys||{behaviorKey:"",automationKey:""}}}catch{return z}}function Ve(t){if(Fe)try{let e=Date.now()+864e5,n={...t,expiresAt:e};sessionStorage.setItem(Be,JSON.stringify(n))}catch{}}function We(t){return t||M()}var Dt="0.1.2",V={...Ge(),monitor:void 0,version:Dt};function w(){return V}function D(t){V=t(V),Ve({state:V.state,securityKeys:V.securityKeys})}function N(){let{config:t}=w(),e=t?.endpoint||"https://api.dtect.io/security",n=t?.includeResults?`${e}/client/check/result`:`${e}/client/check`;return{endpoint:e,clientId:t?.clientId,apiKey:t?.apiKey,checkResultEndpoint:n}}async function I(t,e="info",n={}){let o=`${n.endpoint??"https://api.dtect.io/security"}/log`,r={message:t,type:e,payload:n};navigator.sendBeacon(o,JSON.stringify(r))}function L(t){if(t instanceof Error){if(t?.message?.includes("maintenance_mode"))throw new Error(h.MAINTENANCE_MODE);switch(t?.message){default:throw new Error(h.INTERNAL_SERVER_ERROR)}}throw new Error(h.FAILED_TO_GET_SECURITY_TOKEN)}function qe(t,e){let{state:n,config:o}=w();if(t instanceof Error){if(I(t.message,"error",{function:"init",endpoint:o?.endpoint,error:t,token:n.token,clientId:e.clientId}),t.message.includes("maintenance_mode"))throw new Error(h.MAINTENANCE_MODE);if([h.INVALID_API_KEY,h.UNAUTHORIZED].includes(t.message))throw new Error(h.INVALID_CREDENTIALS)}throw new Error(h.SDK_INIT_ERROR)}function $e(t){let e=t?.qbc||!1,n=t?.mas||!1,o=t?.apd||!1,r=t?.scb||null,i=0,a=new Set,s=()=>{a.forEach(g=>g())},c=()=>{e=!1,n=!1,o=!1,r=void 0,i=0},m=()=>{let f=window?.getSelection()?.toString();f&&f.length>0&&(i=Date.now(),e=!0,s())},u=g=>{let f=g.clipboardData?.getData("text"),T=g.target instanceof HTMLInputElement||g.target instanceof HTMLTextAreaElement;f&&T&&(o=!0,s())},d=()=>{n=!0;let g=Date.now();if(i){let f=(g-i)/1e3;(r==null||f<r)&&(r=f)}s()};return document?.addEventListener("copy",m),document?.addEventListener("paste",u),window?.addEventListener("blur",d),{get qbc(){return e},get mas(){return n},get apd(){return o},get scb(){return r},onChange(g){return a.add(g),()=>{a.delete(g)}},reset:c,destroy(){a.clear(),document?.removeEventListener("copy",m),document?.removeEventListener("paste",u),window?.removeEventListener("blur",d)}}}function Ke(t){D(e=>{let n=$e(null);return{...e,monitor:n,state:{...e.state,isLoading:!0,token:t||"",aiUsageFlagged:!1}}})}function je(t){D(e=>({...e,state:{...e.state,isLoading:!1,token:t||""}}))}function C({projectId:t,visitorId:e}){let{state:n,monitor:o}=w();if(n.projectId===t&&n.visitorId===e)return;let r=M();o?.reset(),D(i=>({...i,state:{...i.state,aiCheckData:null,questionData:null,clientData:null,aiUsageFlagged:!1,projectId:t,visitorId:e,token:r}}))}var B={exclude:[],include:[],stabilize:["private","iframe"],logging:!0,timeout:5e3,cache_api_call:!0,performance:!1,experimental:!1},Ar={...B},se={private:[{exclude:["canvas"],browsers:["firefox","safari>=17","brave"]},{exclude:["audio"],browsers:["samsungbrowser","safari"]},{exclude:["fonts"],browsers:["firefox"]},{exclude:["audio.sampleHash","hardware.deviceMemory","header.acceptLanguage.q","system.hardwareConcurrency","plugins"],browsers:["brave"]},{exclude:["tls.extensions"],browsers:["firefox","chrome","safari"]},{exclude:["header.acceptLanguage"],browsers:["edge","chrome"]}],iframe:[{exclude:["system.applePayVersion","system.cookieEnabled"],browsers:["safari"]},{exclude:["permissions"]}],vpn:[{exclude:["ip"]}]};async function ce(){return Pt()}async function Pt(){return new Promise((e,n)=>{try{let i=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,5e3,44100),a=i?.createBufferSource(),s=i.createOscillator();s.frequency.value=1e3;let c=i.createDynamicsCompressor();c.threshold.value=-50,c.knee.value=40,c.ratio.value=12,c.attack.value=0,c.release.value=.2,s.connect(c),c.connect(i.destination),s.start();let m;i.oncomplete=u=>{m=u.renderedBuffer.getChannelData(0),e({sampleHash:kt(m),maxChannels:i.destination.maxChannelCount,channelCountMode:a.channelCountMode})},i.startRendering()}catch(o){console.error("Error creating audio fingerprint:",o),n(o)}})}function kt(t){let e=0;for(let n=0;n<t.length;++n)e+=Math.abs(t[n]);return e}function Y(t,e,n){let o=[];for(let a=0;a<t[0].data.length;a++){let s=[];for(let c=0;c<t.length;c++)s.push(t[c].data[a]);o.push(_t(s))}let r=o,i=new Uint8ClampedArray(r);return new ImageData(i,e,n)}function _t(t){if(t.length===0)return 0;let e={};for(let o of t)e[o]=(e[o]||0)+1;let n=t[0];for(let o in e)e[o]>e[n]&&(n=parseInt(o,10));return n}function Ot(t){return new TextEncoder().encode(t).buffer}function Q(t){return t^=t>>>16,t=Math.imul(t,2246822507),t^=t>>>13,t=Math.imul(t,3266489909),t^=t>>>16,t>>>0}var x=new Uint32Array([597399067,2869860233,951274213,2716044179]);function P(t,e){return t<<e|t>>>32-e}function Mt(t,e){let n=t.byteLength/16|0,o=new Uint32Array(t,0,n*4);for(let r=0;r<n;r++){let i=o.subarray(r*4,(r+1)*4);i[0]=Math.imul(i[0],x[0]),i[0]=P(i[0],15),i[0]=Math.imul(i[0],x[1]),e[0]=e[0]^i[0],e[0]=P(e[0],19),e[0]=e[0]+e[1],e[0]=Math.imul(e[0],5)+1444728091,i[1]=Math.imul(i[1],x[1]),i[1]=P(i[1],16),i[1]=Math.imul(i[1],x[2]),e[1]=e[1]^i[1],e[1]=P(e[1],17),e[1]=e[1]+e[2],e[1]=Math.imul(e[1],5)+197830471,i[2]=Math.imul(i[2],x[2]),i[2]=P(i[2],17),i[2]=Math.imul(i[2],x[3]),e[2]=e[2]^i[2],e[2]=P(e[2],15),e[2]=e[2]+e[3],e[2]=Math.imul(e[2],5)+2530024501,i[3]=Math.imul(i[3],x[3]),i[3]=P(i[3],18),i[3]=Math.imul(i[3],x[0]),e[3]=e[3]^i[3],e[3]=P(e[3],13),e[3]=e[3]+e[0],e[3]=Math.imul(e[3],5)+850148119}}function Nt(t,e){let n=t.byteLength/16|0,o=t.byteLength%16,r=new Uint32Array(4),i=new Uint8Array(t,n*16,o);switch(o){case 15:r[3]=r[3]^i[14]<<16;case 14:r[3]=r[3]^i[13]<<8;case 13:r[3]=r[3]^i[12]<<0,r[3]=Math.imul(r[3],x[3]),r[3]=P(r[3],18),r[3]=Math.imul(r[3],x[0]),e[3]=e[3]^r[3];case 12:r[2]=r[2]^i[11]<<24;case 11:r[2]=r[2]^i[10]<<16;case 10:r[2]=r[2]^i[9]<<8;case 9:r[2]=r[2]^i[8]<<0,r[2]=Math.imul(r[2],x[2]),r[2]=P(r[2],17),r[2]=Math.imul(r[2],x[3]),e[2]=e[2]^r[2];case 8:r[1]=r[1]^i[7]<<24;case 7:r[1]=r[1]^i[6]<<16;case 6:r[1]=r[1]^i[5]<<8;case 5:r[1]=r[1]^i[4]<<0,r[1]=Math.imul(r[1],x[1]),r[1]=P(r[1],16),r[1]=Math.imul(r[1],x[2]),e[1]=e[1]^r[1];case 4:r[0]=r[0]^i[3]<<24;case 3:r[0]=r[0]^i[2]<<16;case 2:r[0]=r[0]^i[1]<<8;case 1:r[0]=r[0]^i[0]<<0,r[0]=Math.imul(r[0],x[0]),r[0]=P(r[0],15),r[0]=Math.imul(r[0],x[1]),e[0]=e[0]^r[0]}}function Lt(t,e){e[0]=e[0]^t.byteLength,e[1]=e[1]^t.byteLength,e[2]=e[2]^t.byteLength,e[3]=e[3]^t.byteLength,e[0]=e[0]+e[1]|0,e[0]=e[0]+e[2]|0,e[0]=e[0]+e[3]|0,e[1]=e[1]+e[0]|0,e[2]=e[2]+e[0]|0,e[3]=e[3]+e[0]|0,e[0]=Q(e[0]),e[1]=Q(e[1]),e[2]=Q(e[2]),e[3]=Q(e[3]),e[0]=e[0]+e[1]|0,e[0]=e[0]+e[2]|0,e[0]=e[0]+e[3]|0,e[1]=e[1]+e[0]|0,e[2]=e[2]+e[0]|0,e[3]=e[3]+e[0]|0}function b(t,e=0){if(e=e?e|0:0,typeof t=="string"&&(t=Ot(t)),!(t instanceof ArrayBuffer))throw new TypeError("Expected key to be ArrayBuffer or string");let n=new Uint32Array([e,e,e,e]);Mt(t,n),Nt(t,n),Lt(t,n);let o=new Uint8Array(n.buffer);return Array.from(o).map(r=>r.toString(16).padStart(2,"0")).join("")}var Ct=3,ze=280,Ye=20;async function ue(){return Bt()}function Bt(){return new Promise(t=>{let e=Array.from({length:Ct},()=>Ft()),n=Y(e,ze,Ye);t({commonPixelsHash:b(n.data.toString()).toString()})})}function Ft(){let t=document.createElement("canvas"),e=t.getContext("2d");if(!e)return new ImageData(1,1);t.width=ze,t.height=Ye;let n=e.createLinearGradient(0,0,t.width,t.height);n.addColorStop(0,"red"),n.addColorStop(1/6,"orange"),n.addColorStop(2/6,"yellow"),n.addColorStop(3/6,"green"),n.addColorStop(4/6,"blue"),n.addColorStop(5/6,"indigo"),n.addColorStop(1,"violet"),e.fillStyle=n,e.fillRect(0,0,t.width,t.height);let o="Random Text WMwmil10Oo";return e.font="23.123px Arial",e.fillStyle="black",e.fillText(o,-5,15),e.fillStyle="rgba(0, 0, 255, 0.5)",e.fillText(o,-3.3,17.7),e.beginPath(),e.moveTo(0,0),e.lineTo(t.width*2/7,t.height),e.strokeStyle="white",e.lineWidth=2,e.stroke(),e.getImageData(0,0,t.width,t.height)}async function J(t){for(;!document.body;)await Ut(50);let e=document.createElement("iframe");e.setAttribute("frameBorder","0");let n=e.style;n.setProperty("position","fixed"),n.setProperty("display","block","important"),n.setProperty("visibility","visible"),n.setProperty("border","0"),n.setProperty("opacity","0"),e.src="about:blank",document.body.appendChild(e);let o=e.contentDocument||e.contentWindow?.document;if(!o)throw new Error("Iframe document is not accessible");t({iframe:o}),setTimeout(()=>{document.body.removeChild(e)},0)}function Ut(t,e){return new Promise(n=>setTimeout(n,t,e))}var Gt=["Arial","Arial Black","Arial Narrow","Arial Rounded MT","Arimo","Archivo","Barlow","Bebas Neue","Bitter","Bookman","Calibri","Cabin","Candara","Century","Century Gothic","Comic Sans MS","Constantia","Courier","Courier New","Crimson Text","DM Mono","DM Sans","DM Serif Display","DM Serif Text","Dosis","Droid Sans","Exo","Fira Code","Fira Sans","Franklin Gothic Medium","Garamond","Geneva","Georgia","Gill Sans","Helvetica","Impact","Inconsolata","Indie Flower","Inter","Josefin Sans","Karla","Lato","Lexend","Lucida Bright","Lucida Console","Lucida Sans Unicode","Manrope","Merriweather","Merriweather Sans","Montserrat","Myriad","Noto Sans","Nunito","Nunito Sans","Open Sans","Optima","Orbitron","Oswald","Pacifico","Palatino","Perpetua","PT Sans","PT Serif","Poppins","Prompt","Public Sans","Quicksand","Rajdhani","Recursive","Roboto","Roboto Condensed","Rockwell","Rubik","Segoe Print","Segoe Script","Segoe UI","Sora","Source Sans Pro","Space Mono","Tahoma","Taviraj","Times","Times New Roman","Titillium Web","Trebuchet MS","Ubuntu","Varela Round","Verdana","Work Sans"],Vt=["monospace","sans-serif","serif"];async function le(t){return Wt()}function Wt(){return new Promise((t,e)=>{try{J(async({iframe:n})=>{let r=n.createElement("canvas").getContext("2d"),i=Vt.map(s=>Qe(r,s)),a={};Gt.forEach(s=>{let c=Qe(r,s);i.includes(c)||(a[s]=c)}),t(a)})}catch{e({error:"unsupported"})}})}function Qe(t,e){if(!t)return null;let n="WwMmLli0Oo";return t.font=`72px ${e}`,t.measureText(n).width}function me(){return new Promise((t,e)=>{let n=navigator.deviceMemory!==void 0?navigator.deviceMemory:0,o=window.performance&&window.performance.memory?window.performance.memory:0;t({videocard:qt(),architecture:$t(),deviceMemory:n.toString()||"undefined",jsHeapSizeLimit:o.jsHeapSizeLimit||0})})}function qt(){let t=document.createElement("canvas"),e=t.getContext("webgl")??t.getContext("experimental-webgl");if(e&&"getParameter"in e)try{let n=(e.getParameter(e.VENDOR)||"").toString(),o=(e.getParameter(e.RENDERER)||"").toString(),r={vendor:n,renderer:o,version:(e.getParameter(e.VERSION)||"").toString(),shadingLanguageVersion:(e.getParameter(e.SHADING_LANGUAGE_VERSION)||"").toString()};if(!o.length||!n.length){let i=e.getExtension("WEBGL_debug_renderer_info");if(i){let a=(e.getParameter(i.UNMASKED_VENDOR_WEBGL)||"").toString(),s=(e.getParameter(i.UNMASKED_RENDERER_WEBGL)||"").toString();a&&(r.vendorUnmasked=a),s&&(r.rendererUnmasked=s)}}return r}catch{}return"undefined"}function $t(){let t=new Float32Array(1),e=new Uint8Array(t.buffer);return t[0]=1/0,t[0]=t[0]-t[0],e[3]}function de(){return new Promise(t=>{t({languages:Kt(),timezone:jt()})})}function Kt(){let t=[];return navigator.language}function jt(){return Intl.DateTimeFormat().resolvedOptions().timeZone}var X=(t,e,n,o)=>{let r=(n-e)/o,i=0;for(let a=0;a<o;a++){let s=e+(a+.5)*r;i+=t(s)}return i*r};function ge(){return new Promise(t=>{t({acos:Math.acos(.5),asin:X(Math.asin,-1,1,97),cos:X(Math.cos,0,Math.PI,97),largeCos:Math.cos(1e20),largeSin:Math.sin(1e20),largeTan:Math.tan(1e20),sin:X(Math.sin,-Math.PI,Math.PI,97),tan:X(Math.tan,0,2*Math.PI,97)})})}function zt(t){if(t.length===0)return null;let e={};t.forEach(r=>{let i=String(r);e[i]=(e[i]||0)+1});let n=t[0],o=1;return Object.keys(e).forEach(r=>{e[r]>o&&(n=r,o=e[r])}),n}function Je(t,e){let n={};return e.forEach(o=>{let r=t.map(a=>o in a?a[o]:void 0).filter(a=>a!==void 0),i=zt(r);i&&(n[o]=i)}),n}var Yt=["accelerometer","accessibility","accessibility-events","ambient-light-sensor","background-fetch","background-sync","bluetooth","camera","clipboard-read","clipboard-write","device-info","display-capture","gyroscope","geolocation","local-fonts","magnetometer","microphone","midi","nfc","notifications","payment-handler","persistent-storage","push","speaker","storage-access","top-level-storage-access","window-management","query"];async function fe(t){let e=t?.permissions_to_check||Yt,o=await Promise.all(Array.from({length:3},()=>Qt(e)));return Je(o,e)}async function Qt(t){let e={};for(let n of t)try{let o=await navigator.permissions.query({name:n});e[n]=o.state.toString()}catch{}return e}async function pe(){let t=[];if(navigator.plugins)for(let e=0;e<navigator.plugins.length;e++){let n=navigator.plugins[e];t.push([n.name,n.filename,n.description].join("|"))}return new Promise(e=>{e({plugins:t})})}function F(){if(typeof navigator>"u")return{name:"unknown",version:"unknown"};let t=navigator.userAgent,e=[/(?<name>SamsungBrowser)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>EdgA|EdgiOS|Edg)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>OPR|OPX)\/(?<version>\d+(?:\.\d+)+)/,/Opera[\s\/](?<version>\d+(?:\.\d+)+)/,/Opera Mini\/(?<version>\d+(?:\.\d+)+)/,/Opera Mobi\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Vivaldi)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Brave)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>CriOS)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>FxiOS)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Chrome|Chromium)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Firefox|Waterfox|Iceweasel|IceCat)\/(?<version>\d+(?:\.\d+)+)/,/Version\/(?<version1>[\d.]+).*Safari\/[\d.]+|(?<name>Safari)\/(?<version2>[\d.]+)/,/(?<name>MSIE|Trident|IEMobile).+?(?<version>\d+(?:\.\d+)+)/,/(?<name>[A-Za-z]+)\/(?<version>\d+(?:\.\d+)+)/],n={edg:"Edge",edga:"Edge",edgios:"Edge",opr:"Opera",opx:"Opera",crios:"Chrome",fxios:"Firefox",samsung:"SamsungBrowser",vivaldi:"Vivaldi",brave:"Brave"};for(let o of e){let r=t.match(o);if(r){let i=r.groups?.name,a=r.groups?.version||r.groups?.version1||r.groups?.version2;if(!i&&(r.groups?.version1||r.groups?.version2)&&(i="Safari"),!i&&o.source.includes("Opera Mini")&&(i="Opera Mini"),!i&&o.source.includes("Opera Mobi")&&(i="Opera Mobi"),!i&&o.source.includes("Opera")&&(i="Opera"),!i&&r[1]&&(i=r[1]),!a&&r[2]&&(a=r[2]),i)return{name:n[i.toLowerCase()]||i,version:a||"unknown"}}}return{name:"unknown",version:"unknown"}}function Z(){if(typeof navigator>"u"||!navigator.userAgent)return!1;let t=navigator.userAgent;return/Mobi|Android|iPhone|iPod|IEMobile|Opera Mini|Opera Mobi|webOS|BlackBerry|Windows Phone/i.test(t)&&!/iPad/i.test(t)}function ye(){return new Promise(t=>{let e={is_touchscreen:navigator.maxTouchPoints>0,maxTouchPoints:navigator.maxTouchPoints,colorDepth:screen.colorDepth,mediaMatches:Xt()};Z()&&navigator.maxTouchPoints>0&&(e.resolution=Jt()),t(e)})}function Jt(){let t=window.screen.width,e=window.screen.height,n=Math.max(t,e).toString(),o=Math.min(t,e).toString();return`${n}x${o}`}function Xt(){let t=[],e={"prefers-contrast":["high","more","low","less","forced","no-preference"],"any-hover":["hover","none"],"any-pointer":["none","coarse","fine"],pointer:["none","coarse","fine"],hover:["hover","none"],update:["fast","slow"],"inverted-colors":["inverted","none"],"prefers-reduced-motion":["reduce","no-preference"],"prefers-reduced-transparency":["reduce","no-preference"],scripting:["none","initial-only","enabled"],"forced-colors":["active","none"]};return Object.keys(e).forEach(n=>{e[n].forEach(o=>{matchMedia(`(${n}: ${o})`).matches&&t.push(`${n}: ${o}`)})}),t}function he(){return new Promise(t=>{let e=F(),n=navigator.userAgent,o={platform:window.navigator.platform,productSub:navigator.productSub,product:navigator.product,useragent:navigator.userAgent,hardwareConcurrency:navigator.hardwareConcurrency,browser:{name:e.name,version:e.version},mobile:Z(),applePayVersion:Zt(),cookieEnabled:window.navigator.cookieEnabled};t(o)})}function Zt(){if(window.location.protocol==="https:"&&typeof window.ApplePaySession=="function")try{let t=window.ApplePaySession.supportsVersion;for(let e=15;e>0;e--)if(t(e))return e}catch{return 0}return 0}var Ht=F().name!=="SamsungBrowser"?1:3,A,l=null;function en(){typeof document<"u"&&(A=document.createElement("canvas"),A.width=200,A.height=100,l=A.getContext("webgl"))}async function we(){en();try{if(!l)throw new Error("WebGL not supported");let t=Array.from({length:Ht},()=>tn()),e=Y(t,A.width,A.height);return{commonPixelsHash:b(e.data.toString()).toString()}}catch{return{webgl:"unsupported"}}}function tn(){try{if(!l)throw new Error("WebGL not supported");let t=`
1
+ var Rt={UNAUTHORIZED:"Unauthorized"},xt={EXPIRED:"EXPIRED_TOKEN",INVALID_API_KEY:"INVALID_API_KEY",MISSING_AUTHENTICATION_TOKEN:"MISSING_AUTHENTICATION_TOKEN"},_e={INTERNAL_SERVER_ERROR:"Internal Server Error during API Request",MISSING_CREDENTIALS:"Missing Public Client ID or Public API Key",MAINTENANCE_MODE:"API Under Maintenance",RATE_LIMIT_REACHED:"Too many requests. Rate limit exceeded"},Oe={SDK_INIT_ERROR:"Internal Server Error during SDK Initialization",DUPLICATE_INITIALIZATION:"Multiple SDK Initializations Detected",NOT_INITIALIZED:"SDK Not Initialized"},Me={INVALID_CREDENTIALS:"Invalid Public Client ID or Public API Key"},Ne={FAILED_TO_GET_SECURITY_RESULT:"Failed to Retrieve Security Result"},Le={FAILED_TO_GET_SECURITY_TOKEN:" Failed to Generate Security Token"},h={...Rt,...xt,..._e,...Oe,...Me,...Ne,...Le},Ce={..._e,...Oe,...Me,...Ne,...Le};var K=(p=>(p.AR="ar",p.BN="bn",p.DE="de",p.EN="en",p.ES="es",p.FR="fr",p.HI="hi",p.ID="id",p.IT="it",p.JA="ja",p.KO="ko",p.MS="ms",p.NL="nl",p.PT="pt",p.RU="ru",p.YU="yu",p.ZH="zh",p))(K||{}),j=(y=>(y.GeneralConsumer="general-consumer",y.HRManagerDirector="hr-manager-director",y.WebDeveloper="web-developer",y.SoftwareEngineer="software-engineer",y.ITDirector="it-director",y.BusinessAdministrator="business-administrator",y.AccountsPayableManager="accounts-payable-manager",y.Accountant="accountant",y.FinanceDirector="finance-director",y.SmallBusinessOwner="small-business-owner",y.GeneralContractor="general-contractor",y.MarketingManagerDirector="marketing-manager-director",y.ConsumerShopper="consumer-shopper",y.Travel="travel",y.Entertainment="entertainment",y.FinanceAndBanking="finance-and-banking",y.General="general",y.B2BWhiteCollar="b2b-white-collar",y.B2BBlueCollar="b2b-blue-collar",y.Lawyer="lawyer",y))(j||{});var E=[];for(let t=0;t<256;++t)E.push((t+256).toString(16).slice(1));function Be(t,e=0){return(E[t[e+0]]+E[t[e+1]]+E[t[e+2]]+E[t[e+3]]+"-"+E[t[e+4]]+E[t[e+5]]+"-"+E[t[e+6]]+E[t[e+7]]+"-"+E[t[e+8]]+E[t[e+9]]+"-"+E[t[e+10]]+E[t[e+11]]+E[t[e+12]]+E[t[e+13]]+E[t[e+14]]+E[t[e+15]]).toLowerCase()}var oe,At=new Uint8Array(16);function ie(){if(!oe){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");oe=crypto.getRandomValues.bind(crypto)}return oe(At)}var St=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),ae={randomUUID:St};function Dt(t,e,n){if(ae.randomUUID&&!e&&!t)return ae.randomUUID();t=t||{};let o=t.random??t.rng?.()??ie();if(o.length<16)throw new Error("Random bytes length must be >= 16");if(o[6]=o[6]&15|64,o[8]=o[8]&63|128,e){if(n=n||0,n<0||n+16>e.length)throw new RangeError(`UUID byte range ${n}:${n+15} is out of buffer bounds`);for(let r=0;r<16;++r)e[n+r]=o[r];return e}return Be(o)}var M=Dt;var Fe="dtect_security_sdk_state",Ue=typeof window<"u",Ge={isLoading:!1,token:"",visitorId:"",projectId:"",questionData:null,clientData:null,aiCheckData:null,aiUsageFlagged:!1},z={state:{...Ge},securityKeys:{behaviorKey:"",automationKey:""}};function Ve(){if(!Ue)return z;try{let t=sessionStorage.getItem(Fe);if(!t)return z;let e=JSON.parse(t);return e.expiresAt&&e.expiresAt<Date.now()?z:{state:{...Ge,...e.state},securityKeys:e.securityKeys||{behaviorKey:"",automationKey:""}}}catch{return z}}function We(t){if(Ue)try{let e=Date.now()+864e5,n={...t,expiresAt:e};sessionStorage.setItem(Fe,JSON.stringify(n))}catch{}}function qe(t){return t||M()}var Pt="0.1.3",V={...Ve(),monitor:void 0,version:Pt};function w(){return V}function S(t){V=t(V),We({state:V.state,securityKeys:V.securityKeys})}function N(){let{config:t}=w(),e=t?.endpoint||"https://api.dtect.io/security",n=t?.includeResults?`${e}/client/check/result`:`${e}/client/check`;return{endpoint:e,clientId:t?.clientId,apiKey:t?.apiKey,checkResultEndpoint:n}}async function I(t,e="info",n={}){let o=`${n.endpoint??"https://api.dtect.io/security"}/log`,r={message:t,type:e,payload:n};navigator.sendBeacon(o,JSON.stringify(r))}function L(t){if(t instanceof Error){if(t?.message?.includes("maintenance_mode"))throw new Error(h.MAINTENANCE_MODE);switch(t?.message){default:throw new Error(h.INTERNAL_SERVER_ERROR)}}throw new Error(h.FAILED_TO_GET_SECURITY_TOKEN)}function $e(t,e){let{state:n,config:o}=w();if(t instanceof Error){if(I(t.message,"error",{function:"init",endpoint:o?.endpoint,error:t,token:n.token,clientId:e.clientId}),t.message.includes("maintenance_mode"))throw new Error(h.MAINTENANCE_MODE);if([h.INVALID_API_KEY,h.UNAUTHORIZED].includes(t.message))throw new Error(h.INVALID_CREDENTIALS)}throw new Error(h.SDK_INIT_ERROR)}function Ke(t){let e=t?.qbc||!1,n=t?.mas||!1,o=t?.apd||!1,r=t?.scb||null,i=0,a=new Set,s=()=>{a.forEach(g=>g())},c=()=>{e=!1,n=!1,o=!1,r=void 0,i=0},m=()=>{let f=window?.getSelection()?.toString();f&&f.length>0&&(i=Date.now(),e=!0,s())},u=g=>{let f=g.clipboardData?.getData("text"),T=g.target instanceof HTMLInputElement||g.target instanceof HTMLTextAreaElement;f&&T&&(o=!0,s())},d=()=>{n=!0;let g=Date.now();if(i){let f=(g-i)/1e3;(r==null||f<r)&&(r=f)}s()};return document?.addEventListener("copy",m),document?.addEventListener("paste",u),window?.addEventListener("blur",d),{get qbc(){return e},get mas(){return n},get apd(){return o},get scb(){return r},onChange(g){return a.add(g),()=>{a.delete(g)}},reset:c,destroy(){a.clear(),document?.removeEventListener("copy",m),document?.removeEventListener("paste",u),window?.removeEventListener("blur",d)}}}function je(t){S(e=>{let n=Ke(null);return{...e,monitor:n,state:{...e.state,isLoading:!0,token:t||"",aiUsageFlagged:!1}}})}function ze(t){S(e=>({...e,state:{...e.state,isLoading:!1,token:t||""}}))}function C({projectId:t,visitorId:e}){let{state:n,monitor:o}=w();if(n.projectId===t&&n.visitorId===e)return;let r=M();o?.reset(),S(i=>({...i,state:{...i.state,aiCheckData:null,questionData:null,clientData:null,aiUsageFlagged:!1,projectId:t,visitorId:e,token:r}}))}var B={exclude:[],include:[],stabilize:["private","iframe"],logging:!0,timeout:5e3,cache_api_call:!0,performance:!1,experimental:!1},Sr={...B},se={private:[{exclude:["canvas"],browsers:["firefox","safari>=17","brave"]},{exclude:["audio"],browsers:["samsungbrowser","safari"]},{exclude:["fonts"],browsers:["firefox"]},{exclude:["audio.sampleHash","hardware.deviceMemory","header.acceptLanguage.q","system.hardwareConcurrency","plugins"],browsers:["brave"]},{exclude:["tls.extensions"],browsers:["firefox","chrome","safari"]},{exclude:["header.acceptLanguage"],browsers:["edge","chrome"]}],iframe:[{exclude:["system.applePayVersion","system.cookieEnabled"],browsers:["safari"]},{exclude:["permissions"]}],vpn:[{exclude:["ip"]}]};async function ce(){return kt()}async function kt(){return new Promise((e,n)=>{try{let i=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,5e3,44100),a=i?.createBufferSource(),s=i.createOscillator();s.frequency.value=1e3;let c=i.createDynamicsCompressor();c.threshold.value=-50,c.knee.value=40,c.ratio.value=12,c.attack.value=0,c.release.value=.2,s.connect(c),c.connect(i.destination),s.start();let m;i.oncomplete=u=>{m=u.renderedBuffer.getChannelData(0),e({sampleHash:_t(m),maxChannels:i.destination.maxChannelCount,channelCountMode:a.channelCountMode})},i.startRendering()}catch(o){console.error("Error creating audio fingerprint:",o),n(o)}})}function _t(t){let e=0;for(let n=0;n<t.length;++n)e+=Math.abs(t[n]);return e}function Y(t,e,n){let o=[];for(let a=0;a<t[0].data.length;a++){let s=[];for(let c=0;c<t.length;c++)s.push(t[c].data[a]);o.push(Ot(s))}let r=o,i=new Uint8ClampedArray(r);return new ImageData(i,e,n)}function Ot(t){if(t.length===0)return 0;let e={};for(let o of t)e[o]=(e[o]||0)+1;let n=t[0];for(let o in e)e[o]>e[n]&&(n=parseInt(o,10));return n}function Mt(t){return new TextEncoder().encode(t).buffer}function Q(t){return t^=t>>>16,t=Math.imul(t,2246822507),t^=t>>>13,t=Math.imul(t,3266489909),t^=t>>>16,t>>>0}var x=new Uint32Array([597399067,2869860233,951274213,2716044179]);function P(t,e){return t<<e|t>>>32-e}function Nt(t,e){let n=t.byteLength/16|0,o=new Uint32Array(t,0,n*4);for(let r=0;r<n;r++){let i=o.subarray(r*4,(r+1)*4);i[0]=Math.imul(i[0],x[0]),i[0]=P(i[0],15),i[0]=Math.imul(i[0],x[1]),e[0]=e[0]^i[0],e[0]=P(e[0],19),e[0]=e[0]+e[1],e[0]=Math.imul(e[0],5)+1444728091,i[1]=Math.imul(i[1],x[1]),i[1]=P(i[1],16),i[1]=Math.imul(i[1],x[2]),e[1]=e[1]^i[1],e[1]=P(e[1],17),e[1]=e[1]+e[2],e[1]=Math.imul(e[1],5)+197830471,i[2]=Math.imul(i[2],x[2]),i[2]=P(i[2],17),i[2]=Math.imul(i[2],x[3]),e[2]=e[2]^i[2],e[2]=P(e[2],15),e[2]=e[2]+e[3],e[2]=Math.imul(e[2],5)+2530024501,i[3]=Math.imul(i[3],x[3]),i[3]=P(i[3],18),i[3]=Math.imul(i[3],x[0]),e[3]=e[3]^i[3],e[3]=P(e[3],13),e[3]=e[3]+e[0],e[3]=Math.imul(e[3],5)+850148119}}function Lt(t,e){let n=t.byteLength/16|0,o=t.byteLength%16,r=new Uint32Array(4),i=new Uint8Array(t,n*16,o);switch(o){case 15:r[3]=r[3]^i[14]<<16;case 14:r[3]=r[3]^i[13]<<8;case 13:r[3]=r[3]^i[12]<<0,r[3]=Math.imul(r[3],x[3]),r[3]=P(r[3],18),r[3]=Math.imul(r[3],x[0]),e[3]=e[3]^r[3];case 12:r[2]=r[2]^i[11]<<24;case 11:r[2]=r[2]^i[10]<<16;case 10:r[2]=r[2]^i[9]<<8;case 9:r[2]=r[2]^i[8]<<0,r[2]=Math.imul(r[2],x[2]),r[2]=P(r[2],17),r[2]=Math.imul(r[2],x[3]),e[2]=e[2]^r[2];case 8:r[1]=r[1]^i[7]<<24;case 7:r[1]=r[1]^i[6]<<16;case 6:r[1]=r[1]^i[5]<<8;case 5:r[1]=r[1]^i[4]<<0,r[1]=Math.imul(r[1],x[1]),r[1]=P(r[1],16),r[1]=Math.imul(r[1],x[2]),e[1]=e[1]^r[1];case 4:r[0]=r[0]^i[3]<<24;case 3:r[0]=r[0]^i[2]<<16;case 2:r[0]=r[0]^i[1]<<8;case 1:r[0]=r[0]^i[0]<<0,r[0]=Math.imul(r[0],x[0]),r[0]=P(r[0],15),r[0]=Math.imul(r[0],x[1]),e[0]=e[0]^r[0]}}function Ct(t,e){e[0]=e[0]^t.byteLength,e[1]=e[1]^t.byteLength,e[2]=e[2]^t.byteLength,e[3]=e[3]^t.byteLength,e[0]=e[0]+e[1]|0,e[0]=e[0]+e[2]|0,e[0]=e[0]+e[3]|0,e[1]=e[1]+e[0]|0,e[2]=e[2]+e[0]|0,e[3]=e[3]+e[0]|0,e[0]=Q(e[0]),e[1]=Q(e[1]),e[2]=Q(e[2]),e[3]=Q(e[3]),e[0]=e[0]+e[1]|0,e[0]=e[0]+e[2]|0,e[0]=e[0]+e[3]|0,e[1]=e[1]+e[0]|0,e[2]=e[2]+e[0]|0,e[3]=e[3]+e[0]|0}function b(t,e=0){if(e=e?e|0:0,typeof t=="string"&&(t=Mt(t)),!(t instanceof ArrayBuffer))throw new TypeError("Expected key to be ArrayBuffer or string");let n=new Uint32Array([e,e,e,e]);Nt(t,n),Lt(t,n),Ct(t,n);let o=new Uint8Array(n.buffer);return Array.from(o).map(r=>r.toString(16).padStart(2,"0")).join("")}var Bt=3,Ye=280,Qe=20;async function ue(){return Ft()}function Ft(){return new Promise(t=>{let e=Array.from({length:Bt},()=>Ut()),n=Y(e,Ye,Qe);t({commonPixelsHash:b(n.data.toString()).toString()})})}function Ut(){let t=document.createElement("canvas"),e=t.getContext("2d");if(!e)return new ImageData(1,1);t.width=Ye,t.height=Qe;let n=e.createLinearGradient(0,0,t.width,t.height);n.addColorStop(0,"red"),n.addColorStop(1/6,"orange"),n.addColorStop(2/6,"yellow"),n.addColorStop(3/6,"green"),n.addColorStop(4/6,"blue"),n.addColorStop(5/6,"indigo"),n.addColorStop(1,"violet"),e.fillStyle=n,e.fillRect(0,0,t.width,t.height);let o="Random Text WMwmil10Oo";return e.font="23.123px Arial",e.fillStyle="black",e.fillText(o,-5,15),e.fillStyle="rgba(0, 0, 255, 0.5)",e.fillText(o,-3.3,17.7),e.beginPath(),e.moveTo(0,0),e.lineTo(t.width*2/7,t.height),e.strokeStyle="white",e.lineWidth=2,e.stroke(),e.getImageData(0,0,t.width,t.height)}async function J(t){for(;!document.body;)await Gt(50);let e=document.createElement("iframe");e.setAttribute("frameBorder","0");let n=e.style;n.setProperty("position","fixed"),n.setProperty("display","block","important"),n.setProperty("visibility","visible"),n.setProperty("border","0"),n.setProperty("opacity","0"),e.src="about:blank",document.body.appendChild(e);let o=e.contentDocument||e.contentWindow?.document;if(!o)throw new Error("Iframe document is not accessible");t({iframe:o}),setTimeout(()=>{document.body.removeChild(e)},0)}function Gt(t,e){return new Promise(n=>setTimeout(n,t,e))}var Vt=["Arial","Arial Black","Arial Narrow","Arial Rounded MT","Arimo","Archivo","Barlow","Bebas Neue","Bitter","Bookman","Calibri","Cabin","Candara","Century","Century Gothic","Comic Sans MS","Constantia","Courier","Courier New","Crimson Text","DM Mono","DM Sans","DM Serif Display","DM Serif Text","Dosis","Droid Sans","Exo","Fira Code","Fira Sans","Franklin Gothic Medium","Garamond","Geneva","Georgia","Gill Sans","Helvetica","Impact","Inconsolata","Indie Flower","Inter","Josefin Sans","Karla","Lato","Lexend","Lucida Bright","Lucida Console","Lucida Sans Unicode","Manrope","Merriweather","Merriweather Sans","Montserrat","Myriad","Noto Sans","Nunito","Nunito Sans","Open Sans","Optima","Orbitron","Oswald","Pacifico","Palatino","Perpetua","PT Sans","PT Serif","Poppins","Prompt","Public Sans","Quicksand","Rajdhani","Recursive","Roboto","Roboto Condensed","Rockwell","Rubik","Segoe Print","Segoe Script","Segoe UI","Sora","Source Sans Pro","Space Mono","Tahoma","Taviraj","Times","Times New Roman","Titillium Web","Trebuchet MS","Ubuntu","Varela Round","Verdana","Work Sans"],Wt=["monospace","sans-serif","serif"];async function le(t){return qt()}function qt(){return new Promise((t,e)=>{try{J(async({iframe:n})=>{let r=n.createElement("canvas").getContext("2d"),i=Wt.map(s=>Je(r,s)),a={};Vt.forEach(s=>{let c=Je(r,s);i.includes(c)||(a[s]=c)}),t(a)})}catch{e({error:"unsupported"})}})}function Je(t,e){if(!t)return null;let n="WwMmLli0Oo";return t.font=`72px ${e}`,t.measureText(n).width}function me(){return new Promise((t,e)=>{let n=navigator.deviceMemory!==void 0?navigator.deviceMemory:0,o=window.performance&&window.performance.memory?window.performance.memory:0;t({videocard:$t(),architecture:Kt(),deviceMemory:n.toString()||"undefined",jsHeapSizeLimit:o.jsHeapSizeLimit||0})})}function $t(){let t=document.createElement("canvas"),e=t.getContext("webgl")??t.getContext("experimental-webgl");if(e&&"getParameter"in e)try{let n=(e.getParameter(e.VENDOR)||"").toString(),o=(e.getParameter(e.RENDERER)||"").toString(),r={vendor:n,renderer:o,version:(e.getParameter(e.VERSION)||"").toString(),shadingLanguageVersion:(e.getParameter(e.SHADING_LANGUAGE_VERSION)||"").toString()};if(!o.length||!n.length){let i=e.getExtension("WEBGL_debug_renderer_info");if(i){let a=(e.getParameter(i.UNMASKED_VENDOR_WEBGL)||"").toString(),s=(e.getParameter(i.UNMASKED_RENDERER_WEBGL)||"").toString();a&&(r.vendorUnmasked=a),s&&(r.rendererUnmasked=s)}}return r}catch{}return"undefined"}function Kt(){let t=new Float32Array(1),e=new Uint8Array(t.buffer);return t[0]=1/0,t[0]=t[0]-t[0],e[3]}function de(){return new Promise(t=>{t({languages:jt(),timezone:zt()})})}function jt(){let t=[];return navigator.language}function zt(){return Intl.DateTimeFormat().resolvedOptions().timeZone}var X=(t,e,n,o)=>{let r=(n-e)/o,i=0;for(let a=0;a<o;a++){let s=e+(a+.5)*r;i+=t(s)}return i*r};function ge(){return new Promise(t=>{t({acos:Math.acos(.5),asin:X(Math.asin,-1,1,97),cos:X(Math.cos,0,Math.PI,97),largeCos:Math.cos(1e20),largeSin:Math.sin(1e20),largeTan:Math.tan(1e20),sin:X(Math.sin,-Math.PI,Math.PI,97),tan:X(Math.tan,0,2*Math.PI,97)})})}function Yt(t){if(t.length===0)return null;let e={};t.forEach(r=>{let i=String(r);e[i]=(e[i]||0)+1});let n=t[0],o=1;return Object.keys(e).forEach(r=>{e[r]>o&&(n=r,o=e[r])}),n}function Xe(t,e){let n={};return e.forEach(o=>{let r=t.map(a=>o in a?a[o]:void 0).filter(a=>a!==void 0),i=Yt(r);i&&(n[o]=i)}),n}var Qt=["accelerometer","accessibility","accessibility-events","ambient-light-sensor","background-fetch","background-sync","bluetooth","camera","clipboard-read","clipboard-write","device-info","display-capture","gyroscope","geolocation","local-fonts","magnetometer","microphone","midi","nfc","notifications","payment-handler","persistent-storage","push","speaker","storage-access","top-level-storage-access","window-management","query"];async function fe(t){let e=t?.permissions_to_check||Qt,o=await Promise.all(Array.from({length:3},()=>Jt(e)));return Xe(o,e)}async function Jt(t){let e={};for(let n of t)try{let o=await navigator.permissions.query({name:n});e[n]=o.state.toString()}catch{}return e}async function pe(){let t=[];if(navigator.plugins)for(let e=0;e<navigator.plugins.length;e++){let n=navigator.plugins[e];t.push([n.name,n.filename,n.description].join("|"))}return new Promise(e=>{e({plugins:t})})}function F(){if(typeof navigator>"u")return{name:"unknown",version:"unknown"};let t=navigator.userAgent,e=[/(?<name>SamsungBrowser)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>EdgA|EdgiOS|Edg)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>OPR|OPX)\/(?<version>\d+(?:\.\d+)+)/,/Opera[\s\/](?<version>\d+(?:\.\d+)+)/,/Opera Mini\/(?<version>\d+(?:\.\d+)+)/,/Opera Mobi\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Vivaldi)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Brave)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>CriOS)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>FxiOS)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Chrome|Chromium)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Firefox|Waterfox|Iceweasel|IceCat)\/(?<version>\d+(?:\.\d+)+)/,/Version\/(?<version1>[\d.]+).*Safari\/[\d.]+|(?<name>Safari)\/(?<version2>[\d.]+)/,/(?<name>MSIE|Trident|IEMobile).+?(?<version>\d+(?:\.\d+)+)/,/(?<name>[A-Za-z]+)\/(?<version>\d+(?:\.\d+)+)/],n={edg:"Edge",edga:"Edge",edgios:"Edge",opr:"Opera",opx:"Opera",crios:"Chrome",fxios:"Firefox",samsung:"SamsungBrowser",vivaldi:"Vivaldi",brave:"Brave"};for(let o of e){let r=t.match(o);if(r){let i=r.groups?.name,a=r.groups?.version||r.groups?.version1||r.groups?.version2;if(!i&&(r.groups?.version1||r.groups?.version2)&&(i="Safari"),!i&&o.source.includes("Opera Mini")&&(i="Opera Mini"),!i&&o.source.includes("Opera Mobi")&&(i="Opera Mobi"),!i&&o.source.includes("Opera")&&(i="Opera"),!i&&r[1]&&(i=r[1]),!a&&r[2]&&(a=r[2]),i)return{name:n[i.toLowerCase()]||i,version:a||"unknown"}}}return{name:"unknown",version:"unknown"}}function Z(){if(typeof navigator>"u"||!navigator.userAgent)return!1;let t=navigator.userAgent;return/Mobi|Android|iPhone|iPod|IEMobile|Opera Mini|Opera Mobi|webOS|BlackBerry|Windows Phone/i.test(t)&&!/iPad/i.test(t)}function ye(){return new Promise(t=>{let e={is_touchscreen:navigator.maxTouchPoints>0,maxTouchPoints:navigator.maxTouchPoints,colorDepth:screen.colorDepth,mediaMatches:Zt()};Z()&&navigator.maxTouchPoints>0&&(e.resolution=Xt()),t(e)})}function Xt(){let t=window.screen.width,e=window.screen.height,n=Math.max(t,e).toString(),o=Math.min(t,e).toString();return`${n}x${o}`}function Zt(){let t=[],e={"prefers-contrast":["high","more","low","less","forced","no-preference"],"any-hover":["hover","none"],"any-pointer":["none","coarse","fine"],pointer:["none","coarse","fine"],hover:["hover","none"],update:["fast","slow"],"inverted-colors":["inverted","none"],"prefers-reduced-motion":["reduce","no-preference"],"prefers-reduced-transparency":["reduce","no-preference"],scripting:["none","initial-only","enabled"],"forced-colors":["active","none"]};return Object.keys(e).forEach(n=>{e[n].forEach(o=>{matchMedia(`(${n}: ${o})`).matches&&t.push(`${n}: ${o}`)})}),t}function he(){return new Promise(t=>{let e=F(),n=navigator.userAgent,o={platform:window.navigator.platform,productSub:navigator.productSub,product:navigator.product,useragent:navigator.userAgent,hardwareConcurrency:navigator.hardwareConcurrency,browser:{name:e.name,version:e.version},mobile:Z(),applePayVersion:Ht(),cookieEnabled:window.navigator.cookieEnabled};t(o)})}function Ht(){if(window.location.protocol==="https:"&&typeof window.ApplePaySession=="function")try{let t=window.ApplePaySession.supportsVersion;for(let e=15;e>0;e--)if(t(e))return e}catch{return 0}return 0}var en=F().name!=="SamsungBrowser"?1:3,A,l=null;function tn(){typeof document<"u"&&(A=document.createElement("canvas"),A.width=200,A.height=100,l=A.getContext("webgl"))}async function we(){tn();try{if(!l)throw new Error("WebGL not supported");let t=Array.from({length:en},()=>nn()),e=Y(t,A.width,A.height);return{commonPixelsHash:b(e.data.toString()).toString()}}catch{return{webgl:"unsupported"}}}function nn(){try{if(!l)throw new Error("WebGL not supported");let t=`
2
2
  attribute vec2 position;
3
3
  void main() {
4
4
  gl_Position = vec4(position, 0.0, 1.0);
@@ -8,4 +8,4 @@ var Tt={UNAUTHORIZED:"Unauthorized"},Rt={EXPIRED:"EXPIRED_TOKEN",INVALID_API_KEY
8
8
  void main() {
9
9
  gl_FragColor = vec4(0.812, 0.195, 0.553, 0.921); // Set line color
10
10
  }
11
- `,n=l.createShader(l.VERTEX_SHADER),o=l.createShader(l.FRAGMENT_SHADER);if(!n||!o)throw new Error("Failed to create shaders");if(l.shaderSource(n,t),l.shaderSource(o,e),l.compileShader(n),!l.getShaderParameter(n,l.COMPILE_STATUS))throw new Error("Vertex shader compilation failed: "+l.getShaderInfoLog(n));if(l.compileShader(o),!l.getShaderParameter(o,l.COMPILE_STATUS))throw new Error("Fragment shader compilation failed: "+l.getShaderInfoLog(o));let r=l.createProgram();if(!r)throw new Error("Failed to create shader program");if(l.attachShader(r,n),l.attachShader(r,o),l.linkProgram(r),!l.getProgramParameter(r,l.LINK_STATUS))throw new Error("Shader program linking failed: "+l.getProgramInfoLog(r));l.useProgram(r);let i=137,a=new Float32Array(i*4),s=2*Math.PI/i;for(let g=0;g<i;g++){let f=g*s;a[g*4]=0,a[g*4+1]=0,a[g*4+2]=Math.cos(f)*(A.width/2),a[g*4+3]=Math.sin(f)*(A.height/2)}let c=l.createBuffer();l.bindBuffer(l.ARRAY_BUFFER,c),l.bufferData(l.ARRAY_BUFFER,a,l.STATIC_DRAW);let m=l.getAttribLocation(r,"position");l.enableVertexAttribArray(m),l.vertexAttribPointer(m,2,l.FLOAT,!1,0,0),l.viewport(0,0,A.width,A.height),l.clearColor(0,0,0,1),l.clear(l.COLOR_BUFFER_BIT),l.drawArrays(l.LINES,0,i*2);let u=new Uint8ClampedArray(A.width*A.height*4);return l.readPixels(0,0,A.width,A.height,l.RGBA,l.UNSIGNED_BYTE,u),new ImageData(u,A.width,A.height)}catch{return new ImageData(1,1)}finally{l&&(l.bindBuffer(l.ARRAY_BUFFER,null),l.useProgram(null),l.viewport(0,0,l.drawingBufferWidth,l.drawingBufferHeight),l.clearColor(0,0,0,0))}}function S(t){let e=[];return function n(o){if(o&&o.toJSON&&typeof o.toJSON=="function"&&(o=o.toJSON()),o===void 0)return;if(typeof o=="number")return isFinite(o)?""+o:"null";if(typeof o!="object")return JSON.stringify(o);let r,i;if(Array.isArray(o)){for(i="[",r=0;r<o.length;r++)r&&(i+=","),i+=n(o[r])||"null";return i+"]"}if(o===null)return"null";if(e.indexOf(o)!==-1)throw new TypeError("Converting circular structure to JSON");let a=e.push(o)-1,s=Object.keys(o).sort();for(i="",r=0;r<s.length;r++){let c=s[r],m=n(o[c]);m&&(i&&(i+=","),i+=JSON.stringify(c)+":"+m)}return e.splice(a,1),"{"+i+"}"}(t)||""}async function Ie(){return new Promise(t=>{try{let e=window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection;if(!e){t({supported:!1,error:"WebRTC not supported"});return}let n={iceCandidatePoolSize:1,iceServers:[]},o=new e(n);o.createDataChannel(""),(async()=>{try{let i={offerToReceiveAudio:!0,offerToReceiveVideo:!0},a=await o.createOffer(i);await o.setLocalDescription(a);let s=a.sdp||"",c=[...new Set((s.match(/extmap:\d+ [^\n\r]+/g)||[]).map(v=>v.replace(/extmap:\d+ /,"")))].sort(),m=v=>{let R=s.match(new RegExp(`m=${v} [^\\s]+ [^\\s]+ ([^\\n\\r]+)`));return R?R[1].split(" "):[]},u=(v,R)=>R.map(p=>{let _=new RegExp(`(rtpmap|fmtp|rtcp-fb):${p} (.+)`,"g"),O=[...s.matchAll(_)];if(!O.length)return null;let y={};return O.forEach(bt=>{let[$n,te,ne]=bt,re=ne.split("/");te==="rtpmap"?(y.mimeType=`${v}/${re[0]}`,y.clockRate=+re[1],v==="audio"&&(y.channels=+re[2]||1)):te==="rtcp-fb"?(y.feedbackSupport=y.feedbackSupport||[],y.feedbackSupport.push(ne)):te==="fmtp"&&(y.sdpFmtpLine=ne)}),y}).filter(Boolean),d=u("audio",m("audio")),g=u("video",m("video")),f={audio:{count:d.length,hash:b(S(d))},video:{count:g.length,hash:b(S(g))},extensionsHash:b(S(c))},T=await new Promise(v=>{let R=setTimeout(()=>{o.removeEventListener("icecandidate",p),o.close(),v({supported:!0,...f,timeout:!0})},3e3),p=_=>{let O=_.candidate;!O||!O.candidate||(clearTimeout(R),o.removeEventListener("icecandidate",p),o.close(),v({supported:!0,...f,candidateType:O.type||""}))};o.addEventListener("icecandidate",p)});t({details:T,hash:b(S(T))})}catch(i){o.close(),t({supported:!0,error:`WebRTC offer failed: ${i.message}`})}})()}catch(e){t({supported:!1,error:`WebRTC error: ${e.message}`})}})}var Xe=["\u{1D504}","\u{1D505}","\u212D","\u{1D507}","\u{1D508}","\u{1D509}","\u{1D538}","\u{1D539}","\u2102","\u{1D53B}","\u{1D53C}","\u{1D53D}"],Ze=["\u03B2","\u03C8","\u03BB","\u03B5","\u03B6","\u03B1","\u03BE","\u03BC","\u03C1","\u03C6","\u03BA","\u03C4","\u03B7","\u03C3","\u03B9","\u03C9","\u03B3","\u03BD","\u03C7","\u03B4","\u03B8","\u03C0","\u03C5","\u03BF"];async function ve(){return new Promise(t=>{try{J(async({iframe:e})=>{try{if(!nn(e)){t({supported:!1,error:"MathML not supported"});return}let n=[W("integral","<msubsup><mo>\u222B</mo><mi>a</mi><mi>b</mi></msubsup><mfrac><mrow><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mrow><mi>g</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mfrac><mi>dx</mi>"),W("fraction","<mfrac><mrow><mi>\u03C0</mi><mo>\xD7</mo><msup><mi>r</mi><mn>2</mn></msup></mrow><mrow><mn>2</mn><mi>\u03C3</mi></mrow></mfrac>"),W("matrix","<mo>[</mo><mtable><mtr><mtd><mi>\u03B1</mi></mtd><mtd><mi>\u03B2</mi></mtd></mtr><mtr><mtd><mi>\u03B3</mi></mtd><mtd><mi>\u03B4</mi></mtd></mtr></mtable><mo>]</mo>"),rn(),...on()],o=[],r="";n.forEach((a,s)=>{let c=an(a,e);o.push({width:c.dimensions.width,height:c.dimensions.height}),s===0&&c.fontInfo&&(r=b(S(c.fontInfo)))});let i={fontStyleHash:r,dimensions:o};t({details:i,hash:b(S(i))})}catch(n){t({supported:!1,error:`MathML error: ${n.message}`})}})}catch(e){t({supported:!1,error:`MathML error: ${e.message}`})}})}function nn(t){try{let e=t.createElement("math");e.innerHTML="<mrow><mi>x</mi></mrow>",e.style.position="absolute",e.style.visibility="hidden",t.body.appendChild(e);let n=e.getBoundingClientRect();return t.body.removeChild(e),n.width>0&&n.height>0}catch{return!1}}function W(t,e){return`<math><mrow>${e}</mrow></math>`}function rn(){let t="<mo>\u220F</mo>";return Xe.forEach((e,n)=>{let o=n*2,r=Ze.slice(o,o+2);r.length===2&&(t+=`<mmultiscripts><mi>${e}</mi><none/><mi>${r[1]}</mi><mprescripts></mprescripts><mi>${r[0]}</mi><none/></mmultiscripts>`)}),W("complex_nested",`<munderover><mmultiscripts>${t}</mmultiscripts></munderover>`)}function on(){let t=[];return Xe.forEach((e,n)=>{let o=n*2,r=Ze.slice(o,o+2);r.length===2&&t.push(W("combined",`<mmultiscripts><mi>${e}</mi><none/><mi>${r[1]}</mi><mprescripts></mprescripts><mi>${r[0]}</mi><none/></mmultiscripts>`))}),t}function an(t,e){try{let n=e.createElement("math");n.innerHTML=t.replace(/<\/?math>/g,""),n.style.whiteSpace="nowrap",n.style.position="absolute",n.style.visibility="hidden",n.style.top="-9999px",e.body.appendChild(n);let o=n.getBoundingClientRect(),i=(e.defaultView||window).getComputedStyle(n),a={dimensions:{width:o.width,height:o.height},fontInfo:{fontFamily:i.fontFamily,fontSize:i.fontSize,fontWeight:i.fontWeight,fontStyle:i.fontStyle,lineHeight:i.lineHeight,fontVariant:i.fontVariant||"normal",fontStretch:i.fontStretch||"normal",fontSizeAdjust:i.fontSizeAdjust||"none",textRendering:i.textRendering||"auto",fontFeatureSettings:i.fontFeatureSettings||"normal",fontVariantNumeric:i.fontVariantNumeric||"normal",fontKerning:i.fontKerning||"auto"}};return e.body.removeChild(n),a}catch(n){return{error:n.message}}}var sn=800;async function Ee(){return new Promise(t=>{try{if(typeof window>"u"||!window.speechSynthesis||typeof window.speechSynthesis.getVoices!="function"){t({supported:!1,error:"Speech Synthesis API not supported"});return}let e=!1,n=null,o=a=>{if(!e){e=!0,n&&clearTimeout(n);try{let s=a.map(m=>{let u=g=>g.replace(/\\/g,"\\\\").replace(/,/g,"\\,");return[u(m.voiceURI||""),u(m.name||""),u(m.lang||""),m.localService?"1":"0",m.default?"1":"0"].join(",")});s.sort();let c={voiceCount:a.length,voicesHash:b(S(s))};t({details:c,hash:b(S(c))})}catch(s){t({supported:!0,error:`Voice processing failed: ${s.message}`})}}},r=window.speechSynthesis.getVoices();if(r.length>0){o(r);return}n=setTimeout(()=>{let a=window.speechSynthesis.getVoices();o(a)},sn);let i=()=>{window.speechSynthesis.removeEventListener("voiceschanged",i);let a=window.speechSynthesis.getVoices();o(a)};window.speechSynthesis.addEventListener("voiceschanged",i)}catch(e){t({supported:!1,error:`Speech Synthesis error: ${e.message}`})}})}var He={audio:ce,canvas:ue,fonts:le,hardware:me,locales:de,math:ge,permissions:fe,plugins:pe,screen:ye,system:he,webgl:we},et={webrtc:Ie,mathml:ve,speech:Ee},be={},tt={timeout:"true"},Te=(t,e,n)=>{be[t]=e};function cn(t,e){return new Promise(n=>{setTimeout(()=>n(e),t)})}function nt(t,e,n){return Promise.all(t.map(o=>{let r=performance.now();return Promise.race([o.then(i=>({value:i,elapsed:performance.now()-r})),cn(e,n).then(i=>({value:i,elapsed:performance.now()-r}))])}))}function H(t,e){let n=F();if(n.name==="unknown"&&t.system&&typeof t.system=="object"&&!Array.isArray(t.system)){let d=t.system.browser;if(d&&typeof d=="object"&&!Array.isArray(d)){let g=d;n={name:g.name||"unknown",version:g.version||"unknown"}}}let o=n.name.toLowerCase(),r=n.version.split(".")[0]||"0",i=parseInt(r,10),a=[...e?.exclude||[]],s=e?.stabilize||[],c=e?.include||[];for(let u of s){let d=se[u];if(d)for(let g of d){let f=!("browsers"in g),T=!f&&g.browsers?.some(v=>{let R=v.match(/(.+?)(>=)(\d+)/);if(R){let[,p,,_]=R,O=parseInt(_,10);return o===p&&i>=O}return o===v});(f||T)&&a.push(...g.exclude)}}function m(u,d=""){let g={};for(let[f,T]of Object.entries(u)){let v=d?`${d}.${f}`:f;if(typeof T=="object"&&!Array.isArray(T)&&T!==null){let R=m(T,v);Object.keys(R).length>0&&(g[f]=R)}else{let R=a.some(_=>v.startsWith(_)),p=c.some(_=>v.startsWith(_));(!R||p)&&(g[f]=T)}}return g}return m(t)}async function Re(t){let e={...B,...t},n=e.logging&&!sessionStorage.getItem("_tmjs_l")&&Math.random()<1e-4,o={...He,...be},{elapsed:r,resolvedComponents:i}=await rt(o,e),a={},s={};if(n||e.experimental){let{elapsed:R,resolvedComponents:p}=await rt(et,e);a=p,s=R}let c={...r,...s},m=e.performance?{elapsed:c}:{},u=H({},e),d={...i,...u},g={};return{thumbmark:b(S(d)),components:d,info:g,version:"",...m,...Object.keys(a).length>0&&e.experimental&&{experimental:a}}}async function rt(t,e){let n={...B,...e},o=Object.entries(t).filter(([u])=>!n?.exclude?.includes(u)).filter(([u])=>n?.include?.some(d=>d.includes("."))?n?.include?.some(d=>d.startsWith(u)):n?.include?.length===0||n?.include?.includes(u)),r=o.map(([u])=>u),i=o.map(([u,d])=>d(e)),a=await nt(i,n?.timeout||5e3,tt),s={},c={};a.forEach((u,d)=>{u.value!=null&&(c[r[d]]=u.value,s[r[d]]=u.elapsed??0)});let m=H(c,n);return{elapsed:s,resolvedComponents:m}}var q=class{options;constructor(e){this.options={...B,...e}}async get(e){let n={...this.options,...e};return Re(n)}getVersion(){return""}includeComponent(e,n){Te(e,n)}};var un=(t,e={})=>({"Content-Type":"application/json",...t?.accessToken&&{Authorization:`Bearer ${t?.accessToken}`},...e}),ln=async(t,e)=>{if(!t.ok){let n=await t.text();throw new Error(n)}return e==="file"?t.blob():e==="json"?t.json():e==="text"?t.text():null},ot=async({url:t,auth:e,body:n,method:o="GET",headers:r={},responseType:i="json"})=>{let a={method:o,headers:un(e,r),...n?{body:n instanceof FormData?n:JSON.stringify(n)}:{}},s=await fetch(t,a);return ln(s,i)},it=t=>ot({...t,method:"GET"}),U=t=>ot({...t,method:"POST"});var mn=[{name:"lowCpuCores",weight:2,async check(){let t=navigator.hardwareConcurrency||0,e=t>0&&t<=2;return{value:t,triggered:e}}},{name:"lowDeviceMemory",weight:0,async check(){let t=navigator.deviceMemory||0,e=t>0&&t<=4;return{value:t,triggered:e}}},{name:"platformMismatch",weight:1,async check(){let t=navigator.userAgent||"",e=navigator.platform||"",n=t.includes("Mac")&&e.includes("Linux")||t.includes("Win")&&e.includes("Mac")||e===""||e==="Unknown";return{value:e,triggered:n}}},{name:"webglSoftwareRenderer",weight:4,async check(){let t=null,e=null,n=!1;try{let o=document.createElement("canvas"),r=o.getContext("webgl")||o.getContext("experimental-webgl");if(r){let i=r.getExtension("WEBGL_debug_renderer_info");if(i){t=r.getParameter(i.UNMASKED_VENDOR_WEBGL)||"",e=r.getParameter(i.UNMASKED_RENDERER_WEBGL)||"";let a=e.toLowerCase(),s=t.toLowerCase();n=a.includes("swiftshader")||a.includes("llvmpipe")||a.includes("softwar")||a.includes("basic render")||a.includes("vmware")||a.includes("virtualbox")||s.includes("vmware")||s.includes("parallels")}}}catch{}return{value:{vendor:t,renderer:e},triggered:n}}},{name:"missingWebGPUAdapter",weight:3,async check(){if(!("gpu"in navigator))return{value:"no WebGPU",triggered:!0};try{let t=await navigator.gpu.requestAdapter();return{value:t?"adapter-present":"adapter-null",triggered:!t}}catch{return{value:"adapter-error",triggered:!0}}}},{name:"reducedTimerPrecision",weight:1,async check(){let t=performance.now();await new Promise(o=>setTimeout(o,50));let e=performance.now()-t,n=e<30||e>80;return{value:e.toFixed(2),triggered:n}}},{name:"timerJitter",weight:0,async check(){let t=[];for(let n=0;n<10;n++){let o=performance.now();await new Promise(i=>setTimeout(i,10));let r=performance.now();t.push(r-o)}let e=Math.sqrt(t.map(n=>(n-10)**2).reduce((n,o)=>n+o)/t.length);return{value:e.toFixed(3),triggered:e>5}}},{name:"audioFingerprint",weight:1,async check(){try{let t=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,44100,44100),e=t.createOscillator();e.frequency.value=440,e.connect(t.destination),e.start(0);let o=(await t.startRendering()).getChannelData(0).reduce((r,i)=>r+Math.abs(i),0);return{value:o,triggered:o<100}}catch{return{value:"audio-error",triggered:!0}}}},{name:"canvasEntropy",weight:1,async check(){try{let t=document.createElement("canvas"),e=t.getContext("2d");e.textBaseline="top",e.font="14px 'Arial'",e.fillText("VM CHECK",2,2);let o=[...t.toDataURL()].reduce((r,i)=>(r+i.charCodeAt(0))%9999999,0);return{value:o,triggered:o===0||o===999999}}catch{return{value:"canvas-error",triggered:!0}}}},{name:"windowSizeWeird",weight:1,async check(){let t=window.innerWidth/window.innerHeight,e=t===1.333||t===1.6;return{value:t.toFixed(2),triggered:e}}},{name:"touchMismatch",weight:1,async check(){let t="ontouchstart"in window,e=navigator.maxTouchPoints||0;return{value:{hasTouch:t,maxTouch:e},triggered:t&&e===0}}},{name:"batteryVirtualized",weight:1,async check(){if(!navigator.getBattery)return{value:"no API",triggered:!0};try{let t=await navigator.getBattery(),e=t.chargingTime===0&&t.dischargingTime===1/0;return{value:{chargingTime:t.chargingTime,dischargingTime:t.dischargingTime},triggered:e}}catch{return{value:"battery-error",triggered:!0}}}},{name:"permissionsWeird",weight:0,async check(){try{let t=await navigator.permissions.query({name:"camera"});return{value:t.state,triggered:t.state==="prompt"}}catch{return{value:"perm-error",triggered:!0}}}},{name:"noMediaDevices",weight:1,async check(){try{let t=await navigator.mediaDevices.enumerateDevices();return{value:t.length,triggered:t.length===0}}catch{return{value:"media-error",triggered:!0}}}},{name:"virtualizedMediaDevices",weight:1,async check(){try{let t=await navigator.mediaDevices.enumerateDevices(),e=t.some(n=>n.label.toLowerCase().includes("virtual"));return{value:t.map(n=>n.label),triggered:e}}catch{return{value:"media-error",triggered:!0}}}},{name:"webrtcIpPattern",weight:2,async check(){return new Promise(t=>{try{let e=new RTCPeerConnection({iceServers:[]});e.createDataChannel("x");let n=setTimeout(()=>{e.close(),t({value:"timeout",triggered:!1})},3e3);e.onicecandidate=o=>{if(!o?.candidate){clearTimeout(n),e.close(),t({value:"no candidate",triggered:!1});return}let r=o.candidate.candidate.toLowerCase();clearTimeout(n),e.close(),t({value:r,triggered:r.includes("10.0.2.")||r.includes("172.16.")||r.includes("192.168.56.")})},e.createOffer().then(o=>e.setLocalDescription(o))}catch{t({value:"rtc-error",triggered:!1})}})}},{name:"gpuAccelerationDisabled",weight:3,async check(){let e=document.createElement("canvas").getContext("webgl");return{value:!!e,triggered:!e}}},{name:"noWebGL2",weight:3,async check(){let t=document.createElement("canvas").getContext("webgl2");return{value:!!t,triggered:!t}}},{name:"lowStorageQuota",weight:1,async check(){try{let t=await navigator.storage.estimate();return{value:t.quota,triggered:(t.quota??0)<524288e3}}catch{return{value:"storage-error",triggered:!0}}}},{name:"lowEntropy",weight:1,async check(){let t=Object.keys(navigator).length+Object.keys(screen).length+Object.keys(window).length;return{value:t,triggered:t<200}}},{name:"noLanguages",weight:1,async check(){let t=navigator.languages||[];return{value:t,triggered:t.length===0}}},{name:"uaEntropyLow",weight:1,async check(){let t=navigator.userAgent;return{value:t,triggered:t.length<30}}},{name:"weirdDPI",weight:2,async check(){let t=window.devicePixelRatio;return{value:t,triggered:t===1}}}],dn=[{name:"tamperingPluginMismatch",penalty:3,async check(){try{let t=navigator.userAgent.toLowerCase(),e=(t.includes("chrome")||t.includes("edg"))&&!t.includes("firefox")&&!t.includes("safari"),n=navigator.plugins?.length??0,o=!e&&n>0;return{value:{pluginCount:n,isChromeLike:e},triggered:o}}catch{return{value:"error",triggered:!1}}}},{name:"tamperingWebglNoise",penalty:1,async check(){try{let t=document.createElement("canvas");t.width=16,t.height=16;let e=t.getContext("webgl");if(!e)return{value:"no-webgl",triggered:!1};e.clearColor(.1,.2,.3,1),e.clear(e.COLOR_BUFFER_BIT);let n=new Uint8Array(16*16*4);e.readPixels(0,0,16,16,e.RGBA,e.UNSIGNED_BYTE,n);let o=new Set(n).size;return{value:{uniqueValues:o},triggered:o>4}}catch{return{value:"error",triggered:!1}}}},{name:"tamperingServiceWorkerBlocked",penalty:1,async check(){let t=!("serviceWorker"in navigator);return{value:{serviceWorkerAvailable:!t},triggered:t}}},{name:"permissionsWeirdAntiVM",penalty:2,async check(){try{let t=await navigator.permissions.query({name:"camera"});return{value:t.state,triggered:t.state==="prompt"}}catch{return{value:"error",triggered:!1}}}}];async function at({threshold:t=4}={}){let e={},n=0;for(let r of mn)try{let i=await r.check();e[r.name]={...i,weight:r.weight},i.triggered&&r.weight>0&&(n+=r.weight)}catch{e[r.name]={value:"error",triggered:!1,weight:r.weight}}let o=n;for(let r of dn)try{let i=await r.check();e[r.name]={...i,penalty:r.penalty},i.triggered&&(n-=r.penalty)}catch{e[r.name]={value:"error",triggered:!1,penalty:r.penalty}}return{isLikelyVM:n>=t,score:n,rawScore:o,threshold:t,signals:e}}var gn=[{name:"hookedFunctionToString",weight:2,async check(){let t=Function.prototype.toString.toString(),e=Function.prototype.toString+"";return{value:{native:t,current:e},triggered:t!==e}}},{name:"navigatorProxyTrap",weight:2,async check(){let t=!1;try{let e=Object.getOwnPropertyDescriptor(window,"navigator");e&&e.get&&e.get.toString()?.includes("[native code]")===!1&&(t=!0)}catch{}return{value:"navigator getter",triggered:t}}},{name:"uaMismatch",weight:2,async check(){let t=navigator.userAgent||"",e="";try{let o=await navigator.userAgentData?.getHighEntropyValues?.(["platform","brands"]);e=JSON.stringify(o)}catch{}let n=t?.includes("Mac")&&e?.includes("Windows")||t?.includes("Win")&&e?.includes("Mac")||e&&e.length>0&&!t;return{value:{ua:t,brandInfo:e},triggered:n}}},{name:"timezoneLocaleMismatch",weight:1,async check(){let t=Intl.DateTimeFormat().resolvedOptions().timeZone,e=navigator.language||"",n=e.startsWith("en")&&t==="Asia/Shanghai"||e.startsWith("zh")&&t==="America/New_York"||t===void 0;return{value:{tz:t,lang:e},triggered:n}}},{name:"canvasNoise",weight:2,async check(){let t=()=>{let r=document.createElement("canvas"),i=r.getContext("2d");return i.textBaseline="top",i.font="14px Arial",i.fillText("anti-detect-check",2,2),r.toDataURL()},e=t(),n=t();return{value:{a:e,b:n},triggered:e!==n}}},{name:"webglNoise",weight:-2,async check(){try{let e=document.createElement("canvas").getContext("webgl");if(!e)return{value:"no-webgl",triggered:!0};let n=e.getExtension("WEBGL_debug_renderer_info");if(!n)return{value:"no-debug-extension",triggered:!1};let o=e.getParameter(n.UNMASKED_VENDOR_WEBGL),r=e.getParameter(n.UNMASKED_RENDERER_WEBGL),i=o===""||r===""||o?.includes(" ")===!1||r?.includes(" ")===!1;return{value:{v:o,r},triggered:i}}catch{return{value:"gl-error",triggered:!0}}}},{name:"webdriverFlag",weight:3,async check(){let t=navigator.webdriver===!0;return{value:navigator.webdriver,triggered:t}}},{name:"perfectEventTiming",weight:-3,async check(){let t=performance.now();return{value:t,triggered:t%1===0}}},{name:"serviceWorkerBlocked",weight:-4,async check(){let t=!("serviceWorker"in navigator);return{value:t,triggered:t}}},{name:"smallQuota",weight:2,async check(){try{let t=await navigator.storage.estimate(),e=t.quota<50*1024*1024;return{value:t.quota,triggered:e}}catch{return{value:"quota-error",triggered:!0}}}},{name:"indexedDbBlocked",weight:2,async check(){try{let t=indexedDB.open("tamper-check");return await new Promise(e=>{t.onerror=()=>e({value:"error",triggered:!0}),t.onsuccess=()=>e({value:"ok",triggered:!1})})}catch{return{value:"throw",triggered:!0}}}},{name:"screenDprMismatch",weight:0,async check(){let t=window.screen.width,e=window.screen.height,n=window.devicePixelRatio,o=t===1920&&n===1&&e===1080||n%1!==0&&n%1!==.5;return{value:{w:t,h:e,dpr:n},triggered:o}}},{name:"missingCommonFonts",weight:1,async check(){return{value:"skipped",triggered:!1}}},{name:"noMediaDevices",weight:1,async check(){try{let t=await navigator.mediaDevices.enumerateDevices();return{value:t.length,triggered:t.length===0}}catch{return{value:"error",triggered:!0}}}},{name:"languagesEmpty",weight:1,async check(){let t=navigator.languages||[];return{value:t,triggered:t.length===0}}},{name:"pluginMismatch",weight:-4,async check(){try{let t=navigator.plugins.length;return{value:t,triggered:t===0}}catch{return{value:"error",triggered:!0}}}},{name:"devtoolsDetected",weight:-2,async check(){return new Promise(async t=>{let e={viewportBreakpoint:!1,consoleSpeed:!1,consoleProfileTiming:!1},n=160,o=window.outerWidth-window.innerWidth,r=window.outerHeight-window.innerHeight;(o>n||r>n)&&(e.viewportBreakpoint=!0);async function i(c=50){return new Promise(m=>{let u=performance.now();console.log("%c ","font-size:3000px");let d=performance.now();m(d-u>c)})}e.consoleSpeed=await i();function a(){if(typeof console.profile!="function"||typeof console.profileEnd!="function")return!1;let c=5,m=3,u=[];try{for(let g=0;g<c;g++){let f=performance.now(),T=`profile_${f.toString()}`;console.profile(T),console.profileEnd(T),u.push(performance.now()-f)}}catch{return!1}return u.sort((g,f)=>g-f),u[Math.floor(u.length/2)]>m}e.consoleProfileTiming=a();let s=Object.values(e).some(Boolean);setTimeout(()=>{t({value:s,triggered:s})},50)})}},{name:"knownAntiDetectBrowser",weight:5,async check(){let t=navigator.userAgent.toLowerCase(),n=["incogniton","multilogin","morelogin","adspect","kameleo","goLogin"].some(o=>t?.includes(o));return{value:t,triggered:n}}},{name:"batteryVirtualized",weight:4,async check(){try{let t=await navigator.getBattery(),e=t.chargingTime,n=t.dischargingTime;return{value:{chargingTime:e,dischargingTime:n},triggered:e===0}}catch{return{value:"no-battery-api",triggered:!1}}}},{name:"permissionDenied",weight:4,async check(){try{let t=await navigator.permissions.query({name:"notifications"}),e=t.state==="denied";return{value:t.state,triggered:e}}catch{return{value:"perm-error",triggered:!1}}}}];async function st({anomalyMin:t=.52,anomalyMax:e=.54}={}){let n={},o=0;for(let d of gn){let g=await d.check();n[d.name]=g,g.triggered&&(o+=d.weight)}let r=navigator?.platform||"",i=(navigator?.userAgent||"").toLowerCase(),a=r.toLowerCase().includes("win"),s=n.batteryVirtualized?.triggered||!1,c=n.permissionDenied?.triggered||!1,m=!a&&r!==""&&s&&c,u=Math.min(1,Math.max(0,o)/15);return{result:m&&u>=t&&u<=e||n.knownAntiDetectBrowser?.triggered,anomalyScore:u,score:o,signals:n}}function fn(){let t=0;try{0 .toFixed(-1)}catch(e){t=e.message.length}return t}function pn(){let t=navigator.userAgent,e=fn();return e===44||e===43?"Safari":e===51?"Chrome":e===25?"Firefox":navigator.msSaveBlob!==void 0?"MSIE":t.match(/Chrome/)?navigator.brave!==void 0?"Brave":t.includes("Edg")?"Edge":t.includes("OPR")?"Opera":"Chrome":"Unknown"}var yn=[{name:"safari_currentStorageTest",weight:2,browser:"Safari",async check(){if(typeof navigator.storage?.getDirectory!="function")return{triggered:!1,value:"unsupported"};try{return await navigator.storage.getDirectory(),{triggered:!1,value:"ok"}}catch(t){let e=t?.message??String(t);return{triggered:e.includes("unknown transient reason"),value:e}}}},{name:"safari13to18_indexedDbBlobTest",weight:2,browser:"Safari",async check(){return await new Promise(t=>{let e=String(Math.random()),n=indexedDB.open(e,1);n.onupgradeneeded=o=>{let r=o.target.result;try{r.createObjectStore("t",{autoIncrement:!0}).put(new Blob),t({triggered:!1,value:"ok"})}catch(i){let a=i?.message??String(i);t({triggered:a.includes("are not yet supported"),value:a})}finally{r.close(),indexedDB.deleteDatabase(e)}},n.onerror=()=>t({triggered:!1,value:"idb-error"})})}},{name:"safari_oldWebkitTest",weight:1,browser:"Safari",async check(){let t=window.openDatabase,e=window.localStorage;try{t(null,null,null,null)}catch{return{triggered:!0,value:"openDatabase denied"}}try{e.setItem("test","1"),e.removeItem("test")}catch{return{triggered:!0,value:"localStorage denied"}}return{triggered:!1,value:"ok"}}},{name:"chrome_storageQuotaPrivateTest",weight:2,browser:"Chrome",async check(){return await new Promise((t,e)=>{let o=window?.performance?.memory?.jsHeapSizeLimit??1073741824;navigator.webkitTemporaryStorage.queryUsageAndQuota((r,i)=>{let a=Math.round(i/1048576),s=Math.round(o/(1024*1024))*2;t({triggered:a<s,value:{quotaMB:a,limitMB:s}})},r=>e(r))})}},{name:"chrome_oldFileSystemTest",weight:1,browser:"Chrome",async check(){let t=window.webkitRequestFileSystem;return t?await new Promise(e=>t(0,1,()=>e({triggered:!1,value:"ok"}),()=>e({triggered:!0,value:"denied"}))):{triggered:!1,value:"unsupported"}}},{name:"firefox_storageDirectoryTest",weight:2,browser:"Firefox",async check(){if(typeof navigator.storage?.getDirectory!="function")return{triggered:!1,value:"unsupported"};try{return await navigator.storage.getDirectory(),{triggered:!1,value:"ok"}}catch(t){let e=t?.message??String(t);return{triggered:e.includes("Security error"),value:e}}}},{name:"firefox_indexedDbInvalidStateTest",weight:1,browser:"Firefox",async check(){return await new Promise(t=>{let e=indexedDB.open("inPrivate");e.onerror=()=>{t({triggered:e.error?.name==="InvalidStateError",value:e.error?.name})},e.onsuccess=()=>{indexedDB.deleteDatabase("inPrivate"),t({triggered:!1,value:"ok"})}})}},{name:"msie_indexedDbMissing",weight:2,browser:"MSIE",async check(){return{triggered:window.indexedDB===void 0,value:"msie-idb-check"}}}];async function ct(){let t=pn(),e={},n=0;for(let o of yn){if(o.browser!==t)continue;let r=await o.check();e[o.name]=r,r.triggered&&(n+=o.weight)}return{isPrivate:n>0,browserName:t,score:n,signals:e}}typeof window<"u"&&(window.detectIncognito=ct);var ut=ct;var lt=[{name:"globalPrivacyControl",weight:3,async check(){let t=navigator.globalPrivacyControl;return{triggered:t===!0,value:t}}},{name:"doNotTrack",weight:1,async check(){let t=navigator.doNotTrack;return{triggered:t==="1",value:t}}},{name:"cookiesDisabled",weight:3,async check(){let t=navigator.cookieEnabled;return{triggered:t===!1,value:t}}},{name:"thirdPartyCookiesBlocked",weight:3,async check(){try{if("hasStorageAccess"in document&&!await document.hasStorageAccess())try{return await document.requestStorageAccess(),{triggered:!1,value:"access_granted"}}catch{return{triggered:!0,value:"access_denied"}}let t=`__dtect_3p_test_${Date.now()}`;document.cookie=`${t}=1; SameSite=None; Secure`;let e=document.cookie.includes(t);return document.cookie=`${t}=; expires=Thu, 01 Jan 1970 00:00:00 GMT`,{triggered:!1,value:e?"cookies_work":"may_be_blocked"}}catch(t){return{triggered:!1,value:`error: ${t?.message}`}}}},{name:"firefoxResistFingerprinting",weight:2,async check(){let t=[],e=new Date().getTimezoneOffset();e===0&&Intl.DateTimeFormat().resolvedOptions().timeZone==="UTC"&&t.push("timezone_utc");let n=navigator.hardwareConcurrency;n===2&&t.push("cores_capped");let o=window.screen.width,r=window.screen.height,i=window.innerWidth,a=window.innerHeight;o===i&&r===a&&t.push("screen_matches_inner");let s=window.matchMedia("(prefers-reduced-motion: reduce)").matches;return{triggered:t.length>=2,value:{signals:t,timezoneOffset:e,cores:n,prefersReducedMotion:s}}}},{name:"braveShields",weight:3,async check(){if(!(navigator.brave!==void 0))return{triggered:!1,value:"not_brave"};try{if(!await navigator.brave.isBrave())return{triggered:!1,value:"brave_check_false"};let o=document.createElement("canvas").getContext("2d");if(o){o.fillStyle="rgb(255, 0, 0)",o.fillRect(0,0,1,1);let r=o.getImageData(0,0,1,1).data;o.fillRect(0,0,1,1);let i=o.getImageData(0,0,1,1).data;if(r[0]!==i[0]||r[1]!==i[1]||r[2]!==i[2])return{triggered:!0,value:"shields_active_canvas"}}try{let r=new RTCPeerConnection({iceServers:[{urls:"stun:stun.l.google.com:19302"}]});if(r.createDataChannel(""),await new Promise(a=>{let s=setTimeout(()=>{r.close(),a(!1)},1e3);r.onicecandidate=c=>{c.candidate?.candidate&&(/([0-9]{1,3}\.){3}[0-9]{1,3}/.test(c.candidate.candidate)||(clearTimeout(s),r.close(),a(!0)))},r.createOffer().then(c=>r.setLocalDescription(c))}))return{triggered:!0,value:"shields_active_webrtc"}}catch{return{triggered:!0,value:"shields_active_webrtc_blocked"}}return{triggered:!0,value:"brave_detected_shields_default"}}catch(e){return{triggered:!1,value:`error: ${e?.message}`}}}}];async function mt(){let t={},e=0,n=await Promise.allSettled(lt.map(async o=>{let r=await o.check();return{name:o.name,weight:o.weight,result:r}}));for(let o of n)if(o.status==="fulfilled"){let{name:r,weight:i,result:a}=o.value;t[r]=a,a.triggered&&(e+=i)}else{let r=n.indexOf(o),i=lt[r];i&&(t[i.name]={triggered:!1,value:`check_failed: ${o.reason}`})}return{isPrivacyEnabled:e>3,score:e,signals:t}}typeof window<"u"&&(window.detectPrivacy=mt);var dt=mt;var gt={screenResolution:"",screenAvailResolution:"",screenPixelDepth:null,fontPreferences:"",colorGamut:"",dynamicRange:"",monochrome:null,audioBaseLatency:null,audioSampleRate:null,vendorFlavors:[],pdfViewerEnabled:null,osCpu:"",dateTimeLocale:""};function k(t,e){try{let n=t();return n??e}catch{return e}}function ft(t,e){return typeof t!="number"||typeof e!="number"||!t||!e?"":`${Math.max(t,e)}x${Math.min(t,e)}`}var hn=[["default",{}],["apple",{fontFamily:"-apple-system"}],["serif",{fontFamily:"serif"}],["sans",{fontFamily:"sans-serif"}],["mono",{fontFamily:"monospace"}],["min",{fontSize:"1px"}],["system",{fontFamily:"system-ui"}]],wn="mmMwWLliI0fiflO&1IlV%\u4E2D\u6587\u5B57\u4F53\xE9\xE8\xEA";function In(){let t=document.createElement("div");t.style.cssText="position:absolute;visibility:hidden;left:-9999px;top:-9999px;width:auto;height:auto;white-space:nowrap;font-size:48px;";let e=hn.map(([n,o])=>{let r=document.createElement("span");return r.textContent=wn,r.style.whiteSpace="nowrap",Object.assign(r.style,o),t.appendChild(r),[n,r]});document.body.appendChild(t);try{return e.map(([n,o])=>`${n}:${o.getBoundingClientRect().width}`).join("|")}finally{t.remove()}}function pt(t,e){for(let n of e)if(matchMedia(`(${t}: ${n})`).matches)return n;return""}function vn(){if(!matchMedia("(min-monochrome: 0)").matches)return null;for(let t=0;t<=100;t++)if(matchMedia(`(max-monochrome: ${t})`).matches)return t;return null}function En(){let t=window.AudioContext||window.webkitAudioContext;if(!t)return{baseLatency:null,sampleRate:null};let e=new t;try{return{baseLatency:typeof e.baseLatency=="number"?e.baseLatency:null,sampleRate:typeof e.sampleRate=="number"?e.sampleRate:null}}finally{typeof e.close=="function"&&e.close()}}function bn(){return["chrome","safari","__crWeb","__gCrWeb","yandex","__yb","__ybro","__firefox__","__edgeTrackingPreventionStatistics","webkit","oprt","samsungAr","ucweb","UCShellJava","puffinDevice"].filter(e=>{let n=window[e];return typeof n=="object"&&n!==null})}async function yt(){try{if(typeof document>"u"||typeof window>"u")return gt;let t=k(En,{baseLatency:null,sampleRate:null}),e=k(()=>Intl.DateTimeFormat().resolvedOptions(),null);return{screenResolution:k(()=>ft(screen.width,screen.height),""),screenAvailResolution:k(()=>ft(screen.availWidth,screen.availHeight),""),screenPixelDepth:k(()=>screen.pixelDepth,null),fontPreferences:k(In,""),colorGamut:k(()=>pt("color-gamut",["rec2020","p3","srgb"]),""),dynamicRange:k(()=>pt("dynamic-range",["high","standard"]),""),monochrome:k(vn,null),audioBaseLatency:t.baseLatency,audioSampleRate:t.sampleRate,vendorFlavors:k(bn,[]),pdfViewerEnabled:k(()=>navigator.pdfViewerEnabled??null,null),osCpu:k(()=>navigator.oscpu??"",""),dateTimeLocale:e?`${e.locale??""}|${e.calendar??""}|${e.numberingSystem??""}`:""}}catch{return gt}}var xe={supported:!1,extensions:[],parametersHash:"",parametersCount:0,shaderPrecisions:[],contextAttributes:[]};function Tn(t){let e=2166136261,n=16777619;for(let o=0;o<t.length;o++){let r=t.charCodeAt(o);e=Math.imul(e^r,16777619)>>>0,n=Math.imul(n^r,2246822507)>>>0}return e.toString(16).padStart(8,"0")+n.toString(16).padStart(8,"0")}var Rn=["VERTEX_SHADER","FRAGMENT_SHADER"],xn=["LOW_FLOAT","MEDIUM_FLOAT","HIGH_FLOAT","LOW_INT","MEDIUM_INT","HIGH_INT"];function An(t){let e=[],n=Object.getPrototypeOf(t);for(let o of Object.getOwnPropertyNames(n)){if(!/^[A-Z][A-Z0-9_]*$/.test(o))continue;let r=t[o];if(typeof r=="number")try{let i=t.getParameter(r);if(t.getError()!==t.NO_ERROR||i==null)continue;e.push(`${o}=${r}=${Sn(i)}`)}catch{}}return e.sort()}function Sn(t){return t instanceof Int32Array||t instanceof Float32Array?Array.from(t).join(","):Array.isArray(t)?t.join(","):String(t)}function Dn(t){let e=[];for(let n of Rn)for(let o of xn)try{let r=t.getShaderPrecisionFormat(t[n],t[o]);if(!r)continue;e.push(`${n}.${o}=${r.rangeMin},${r.rangeMax},${r.precision}`)}catch{}return e}function Pn(t){let e=t.getContextAttributes();return e?Object.keys(e).sort().map(n=>`${n}=${String(e[n])}`):[]}async function ht(){try{if(typeof document>"u")return xe;let t=document.createElement("canvas"),e=t.getContext("webgl")||t.getContext("experimental-webgl");if(!e)return xe;let n=An(e);return{supported:!0,extensions:(e.getSupportedExtensions()??[]).slice().sort(),parametersHash:n.length?Tn(n.join("|")):"",parametersCount:n.length,shaderPrecisions:Dn(e),contextAttributes:Pn(e)}}catch{return xe}}function kn(t){let e=t?.projectId,n=t?.visitorId||M();return(typeof t?.projectId=="number"||typeof t?.visitorId=="number")&&(e=`${t?.projectId}`,n=`${t?.visitorId}`),{visitorId:n,projectId:e}}function G(t){let{projectId:e,visitorId:n}=kn(t);return{projectId:e,visitorId:n}}async function _n(){let t=new q,[e,n,o,r,i,a,s]=await Promise.allSettled([t.get(),at(),st(),ut(),dt(),ht(),yt()]);return{deviceRes:e,vmDtectResults:n,tamperingDtectResults:o,incognitoDtectResults:r,privacySettingsDtectResults:i,webglExtensionsResults:a,stableEntropyResults:s}}function On(t,e){return{entryLink:window?.location?.href,securitySettings:t.securitySettings,metaData:t.metaData,vmDtectResults:e?.vmDtectResults?.value,tamperingDtectResults:e?.tamperingDtectResults?.value,incognitoDtectResults:e?.incognitoDtectResults?.value,deviceIdResults:e?.deviceRes?.value,privacySettingsDtectResults:e?.privacySettingsDtectResults?.value,webglExtensionsResults:e?.webglExtensionsResults?.value,stableEntropyResults:e?.stableEntropyResults?.value}}function Mn(t,e,n,o){let r=(performance.now()-e).toFixed();I(`${t} finishes in ${r}ms`,"info",{function:t,endpoint:n?.endpoint,diff:r,token:o,clientId:n?.clientId})}function wt(t,e,n,o,r){let i=(performance.now()-e).toFixed();I(`${t} error`,"error",{function:t,endpoint:n?.endpoint,error:r,diff:i,token:o,clientId:n?.clientId})}async function It(t,e){let n=performance.now(),{projectId:o,visitorId:r}=G(t);if(!t||!o?.trim())throw new Error(h.FAILED_TO_GET_SECURITY_RESULT);C({projectId:o,visitorId:r});let{state:i,config:a,version:s}=w();try{let c=await _n(),m=On(t,c),u={...t,projectId:o,visitorId:r,clientData:m,version:s,token:i.token,questionData:i.questionData,aiCheckData:i.aiCheckData},d=await U({url:e,body:u,headers:{"client-id":a?.clientId||"","x-api-key":a?.apiKey||""}});if(!("token"in d||"results"in d))throw new Error(h.INTERNAL_SERVER_ERROR);let g="results"in d&&d.results.isAIUsageDetected===!0;return D(f=>({...f,state:{...f.state,token:i.token,visitorId:r,projectId:o,clientData:m,aiUsageFlagged:f.state.aiUsageFlagged||g}})),Mn("getResultBase",n,a,i.token),d}catch(c){c instanceof Error?wt("getResultBase",n,a,i.token,{message:c.message,stack:c.stack,name:c.name}):wt("getResultBase",n,a,i.token,c),L(c)}}async function Ae(t){let{endpoint:e}=N();if(t)return It(t,`${e}/client/check/result`)}async function Se(t){let{endpoint:e}=N();return It(t,`${e}/client/check`)}var $;function vt(){let{config:t,monitor:e,state:n}=w();if(!t?.autoFlagAIUsage||!e||($?.(),$=void 0,n.aiUsageFlagged))return;let o=()=>{let{state:r}=w();r.aiUsageFlagged||!(e.apd||e.qbc&&e.mas&&e.scb!=null)||r.projectId&&(D(a=>({...a,state:{...a.state,aiUsageFlagged:!0}})),$?.(),$=void 0,ee({projectId:r.projectId,visitorId:r.visitorId}))};$=e.onChange(o),o()}async function ee(t){let e=performance.now(),{visitorId:n,projectId:o}=G(t);C({projectId:o,visitorId:n});let{state:r,config:i,monitor:a,version:s}=w(),{checkResultEndpoint:c}=N(),m={timeTakenSeconds:t.timeTakenSeconds,qbc:a?.qbc,mas:a?.mas,scb:a?.scb,apd:a?.apd};try{let u=await U({url:c,headers:{"client-id":i?.clientId||"","x-api-key":i?.apiKey||""},body:{token:r.token,visitorId:n,projectId:o,version:s,clientData:r.clientData,questionData:r.questionData,aiCheckData:m}});if(!u)throw new Error(h.INTERNAL_SERVER_ERROR);let d="results"in u&&u.results.isAIUsageDetected===!0;D(f=>({...f,state:{...f.state,aiCheckData:m,visitorId:n,projectId:o,aiUsageFlagged:f.state.aiUsageFlagged||d}}));let g=(performance.now()-e).toFixed();return I(`isAIUsageDetected finishes in ${g}ms`,"info",{endpoint:i?.endpoint,diff:g,token:r.token,clientId:i?.clientId}),u}catch(u){let d=(performance.now()-e).toFixed();u instanceof Error?I("isAIUsageDetected error","error",{endpoint:i?.endpoint,error:{message:u.message,stack:u.stack,name:u.name},diff:d,token:r.token,clientId:i?.clientId}):I("isAIUsageDetected error","error",{endpoint:i?.endpoint,error:u,diff:d,token:r.token,clientId:i?.clientId}),L(u)}}async function De(t){let e=performance.now(),{state:n,config:o}=w(),{respondentType:r,language:i}=t;try{let a=await it({url:`${o?.endpoint}/client/quality-questions/${r}/${i}`,headers:{"client-id":o?.clientId||"","x-api-key":o?.apiKey||""}});if(!a)throw new Error(h.INTERNAL_SERVER_ERROR);let s=(performance.now()-e).toFixed();return I(`getQualityQuestions finishes in ${s}ms`,"info",{function:"getQualityQuestions",endpoint:o?.endpoint,diff:s,token:n.token,clientId:o?.clientId}),a}catch(a){let s=(performance.now()-e).toFixed();I("getQualityQuestions error","error",{endpoint:o?.endpoint,error:a,diff:s,token:n.token,clientId:o?.clientId}),L(a)}}async function Pe(t){let e=performance.now(),{visitorId:n,projectId:o}=G(t);C({projectId:o,visitorId:n});let{state:r,config:i,version:a}=w(),{checkResultEndpoint:s}=N(),c={questions:t.questions};try{let m=await U({url:s,headers:{"client-id":i?.clientId||"","x-api-key":i?.apiKey||""},body:{token:r.token,visitorId:n,projectId:o,version:a,questionData:c,aiCheckData:r.aiCheckData,clientData:r.clientData}});if(!m)throw new Error(h.INTERNAL_SERVER_ERROR);D(d=>({...d,state:{...d.state,token:r.token,questionData:c,visitorId:n,projectId:o}}));let u=(performance.now()-e).toFixed();return I(`checkQualityQuestions finishes in ${u}ms`,"info",{function:"checkQualityQuestions",endpoint:i?.endpoint,diff:u,token:r.token,clientId:i?.clientId}),m}catch(m){let u=(performance.now()-e).toFixed();m instanceof Error?I("checkQualityQuestions error","error",{endpoint:i?.endpoint,error:{message:m.message,stack:m.stack,name:m.name},diff:u,token:r.token,clientId:i?.clientId}):I("checkQualityQuestions error","error",{endpoint:i?.endpoint,error:m,diff:u,token:r.token,clientId:i?.clientId}),L(m)}}var Et,Nn=Le;function ua(){let{config:t}=w();return!!(t?.clientId&&t?.apiKey)}function Ln(t){let{config:e}=w();if(!t?.clientId||!t?.apiKey)throw I(h.MISSING_CREDENTIALS,"error",{endpoint:e?.endpoint,...t}),new Error(h.MISSING_CREDENTIALS)}function Cn(){let{config:t}=w();return!!(t?.clientId&&t.apiKey)}function Bn(t){let{config:e}=w();if(!Cn())throw I(h.MISSING_CREDENTIALS,"error",{endpoint:e?.endpoint,...t}),new Error(h.MISSING_CREDENTIALS)}function Fn(t){return{clientId:t.clientId,apiKey:t.apiKey,endpoint:t.endpoint||"https://api.dtect.io/security",includeResults:t.includeResults,autoFlagAIUsage:t.autoFlagAIUsage}}function Un(t){let e=t.endpoint,n=t.includeResults?`${e}/client/check/result`:`${e}/client/check`;return{...t,checkResultEndpoint:n}}function Gn(t){let e=Un(t);D(n=>({...n,config:e}))}function Vn(){let{state:t}=w();if(t.isLoading)throw new Error(h.DUPLICATE_INITIALIZATION)}async function Wn(t){let{state:e,config:n}=w(),r=(performance.now()-t).toFixed();return I(`init() finishes ${r}ms`,"info",{endpoint:n?.endpoint,function:"init",diff:r,token:e.token,clientId:n?.clientId}),{getSecurityResult:Ae,getSecurityToken:Se,SecurityAPIError:Nn,isAIUsageDetected:ee,checkQualityQuestions:Pe,getQualityQuestions:De,LanguageCodes:K,QualityQuestionsRespondentTypes:j}}async function qn(t){let{state:e}=w(),n=performance.now();Ln(t);let o=Fn(t);Gn(o),Bn(t);let r=We(e.token);Vn(),Ke(r),vt();try{return await Wn(n)}catch(i){qe(i,o)}finally{je(r)}}Et={init:qn,getSecurityResult:Ae,getSecurityToken:Se,isAIUsageDetected:ee,checkQualityQuestions:Pe,getQualityQuestions:De,QualityQuestionsRespondentTypes:j,LanguageCodes:K};var la=Et;export{K as LanguageCodes,j as QualityQuestionsRespondentTypes,Nn as SecurityAPIError,Pe as checkQualityQuestions,la as default,De as getQualityQuestions,Ae as getSecurityResult,Se as getSecurityToken,ua as hasCredentials,qn as init,ee as isAIUsageDetected};
11
+ `,n=l.createShader(l.VERTEX_SHADER),o=l.createShader(l.FRAGMENT_SHADER);if(!n||!o)throw new Error("Failed to create shaders");if(l.shaderSource(n,t),l.shaderSource(o,e),l.compileShader(n),!l.getShaderParameter(n,l.COMPILE_STATUS))throw new Error("Vertex shader compilation failed: "+l.getShaderInfoLog(n));if(l.compileShader(o),!l.getShaderParameter(o,l.COMPILE_STATUS))throw new Error("Fragment shader compilation failed: "+l.getShaderInfoLog(o));let r=l.createProgram();if(!r)throw new Error("Failed to create shader program");if(l.attachShader(r,n),l.attachShader(r,o),l.linkProgram(r),!l.getProgramParameter(r,l.LINK_STATUS))throw new Error("Shader program linking failed: "+l.getProgramInfoLog(r));l.useProgram(r);let i=137,a=new Float32Array(i*4),s=2*Math.PI/i;for(let g=0;g<i;g++){let f=g*s;a[g*4]=0,a[g*4+1]=0,a[g*4+2]=Math.cos(f)*(A.width/2),a[g*4+3]=Math.sin(f)*(A.height/2)}let c=l.createBuffer();l.bindBuffer(l.ARRAY_BUFFER,c),l.bufferData(l.ARRAY_BUFFER,a,l.STATIC_DRAW);let m=l.getAttribLocation(r,"position");l.enableVertexAttribArray(m),l.vertexAttribPointer(m,2,l.FLOAT,!1,0,0),l.viewport(0,0,A.width,A.height),l.clearColor(0,0,0,1),l.clear(l.COLOR_BUFFER_BIT),l.drawArrays(l.LINES,0,i*2);let u=new Uint8ClampedArray(A.width*A.height*4);return l.readPixels(0,0,A.width,A.height,l.RGBA,l.UNSIGNED_BYTE,u),new ImageData(u,A.width,A.height)}catch{return new ImageData(1,1)}finally{l&&(l.bindBuffer(l.ARRAY_BUFFER,null),l.useProgram(null),l.viewport(0,0,l.drawingBufferWidth,l.drawingBufferHeight),l.clearColor(0,0,0,0))}}function D(t){let e=[];return function n(o){if(o&&o.toJSON&&typeof o.toJSON=="function"&&(o=o.toJSON()),o===void 0)return;if(typeof o=="number")return isFinite(o)?""+o:"null";if(typeof o!="object")return JSON.stringify(o);let r,i;if(Array.isArray(o)){for(i="[",r=0;r<o.length;r++)r&&(i+=","),i+=n(o[r])||"null";return i+"]"}if(o===null)return"null";if(e.indexOf(o)!==-1)throw new TypeError("Converting circular structure to JSON");let a=e.push(o)-1,s=Object.keys(o).sort();for(i="",r=0;r<s.length;r++){let c=s[r],m=n(o[c]);m&&(i&&(i+=","),i+=JSON.stringify(c)+":"+m)}return e.splice(a,1),"{"+i+"}"}(t)||""}async function Ie(){return new Promise(t=>{try{let e=window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection;if(!e){t({supported:!1,error:"WebRTC not supported"});return}let n={iceCandidatePoolSize:1,iceServers:[]},o=new e(n);o.createDataChannel(""),(async()=>{try{let i={offerToReceiveAudio:!0,offerToReceiveVideo:!0},a=await o.createOffer(i);await o.setLocalDescription(a);let s=a.sdp||"",c=[...new Set((s.match(/extmap:\d+ [^\n\r]+/g)||[]).map(v=>v.replace(/extmap:\d+ /,"")))].sort(),m=v=>{let R=s.match(new RegExp(`m=${v} [^\\s]+ [^\\s]+ ([^\\n\\r]+)`));return R?R[1].split(" "):[]},u=(v,R)=>R.map(p=>{let _=new RegExp(`(rtpmap|fmtp|rtcp-fb):${p} (.+)`,"g"),O=[...s.matchAll(_)];if(!O.length)return null;let y={};return O.forEach(Tt=>{let[Kn,te,ne]=Tt,re=ne.split("/");te==="rtpmap"?(y.mimeType=`${v}/${re[0]}`,y.clockRate=+re[1],v==="audio"&&(y.channels=+re[2]||1)):te==="rtcp-fb"?(y.feedbackSupport=y.feedbackSupport||[],y.feedbackSupport.push(ne)):te==="fmtp"&&(y.sdpFmtpLine=ne)}),y}).filter(Boolean),d=u("audio",m("audio")),g=u("video",m("video")),f={audio:{count:d.length,hash:b(D(d))},video:{count:g.length,hash:b(D(g))},extensionsHash:b(D(c))},T=await new Promise(v=>{let R=setTimeout(()=>{o.removeEventListener("icecandidate",p),o.close(),v({supported:!0,...f,timeout:!0})},3e3),p=_=>{let O=_.candidate;!O||!O.candidate||(clearTimeout(R),o.removeEventListener("icecandidate",p),o.close(),v({supported:!0,...f,candidateType:O.type||""}))};o.addEventListener("icecandidate",p)});t({details:T,hash:b(D(T))})}catch(i){o.close(),t({supported:!0,error:`WebRTC offer failed: ${i.message}`})}})()}catch(e){t({supported:!1,error:`WebRTC error: ${e.message}`})}})}var Ze=["\u{1D504}","\u{1D505}","\u212D","\u{1D507}","\u{1D508}","\u{1D509}","\u{1D538}","\u{1D539}","\u2102","\u{1D53B}","\u{1D53C}","\u{1D53D}"],He=["\u03B2","\u03C8","\u03BB","\u03B5","\u03B6","\u03B1","\u03BE","\u03BC","\u03C1","\u03C6","\u03BA","\u03C4","\u03B7","\u03C3","\u03B9","\u03C9","\u03B3","\u03BD","\u03C7","\u03B4","\u03B8","\u03C0","\u03C5","\u03BF"];async function ve(){return new Promise(t=>{try{J(async({iframe:e})=>{try{if(!rn(e)){t({supported:!1,error:"MathML not supported"});return}let n=[W("integral","<msubsup><mo>\u222B</mo><mi>a</mi><mi>b</mi></msubsup><mfrac><mrow><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mrow><mi>g</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mfrac><mi>dx</mi>"),W("fraction","<mfrac><mrow><mi>\u03C0</mi><mo>\xD7</mo><msup><mi>r</mi><mn>2</mn></msup></mrow><mrow><mn>2</mn><mi>\u03C3</mi></mrow></mfrac>"),W("matrix","<mo>[</mo><mtable><mtr><mtd><mi>\u03B1</mi></mtd><mtd><mi>\u03B2</mi></mtd></mtr><mtr><mtd><mi>\u03B3</mi></mtd><mtd><mi>\u03B4</mi></mtd></mtr></mtable><mo>]</mo>"),on(),...an()],o=[],r="";n.forEach((a,s)=>{let c=sn(a,e);o.push({width:c.dimensions.width,height:c.dimensions.height}),s===0&&c.fontInfo&&(r=b(D(c.fontInfo)))});let i={fontStyleHash:r,dimensions:o};t({details:i,hash:b(D(i))})}catch(n){t({supported:!1,error:`MathML error: ${n.message}`})}})}catch(e){t({supported:!1,error:`MathML error: ${e.message}`})}})}function rn(t){try{let e=t.createElement("math");e.innerHTML="<mrow><mi>x</mi></mrow>",e.style.position="absolute",e.style.visibility="hidden",t.body.appendChild(e);let n=e.getBoundingClientRect();return t.body.removeChild(e),n.width>0&&n.height>0}catch{return!1}}function W(t,e){return`<math><mrow>${e}</mrow></math>`}function on(){let t="<mo>\u220F</mo>";return Ze.forEach((e,n)=>{let o=n*2,r=He.slice(o,o+2);r.length===2&&(t+=`<mmultiscripts><mi>${e}</mi><none/><mi>${r[1]}</mi><mprescripts></mprescripts><mi>${r[0]}</mi><none/></mmultiscripts>`)}),W("complex_nested",`<munderover><mmultiscripts>${t}</mmultiscripts></munderover>`)}function an(){let t=[];return Ze.forEach((e,n)=>{let o=n*2,r=He.slice(o,o+2);r.length===2&&t.push(W("combined",`<mmultiscripts><mi>${e}</mi><none/><mi>${r[1]}</mi><mprescripts></mprescripts><mi>${r[0]}</mi><none/></mmultiscripts>`))}),t}function sn(t,e){try{let n=e.createElement("math");n.innerHTML=t.replace(/<\/?math>/g,""),n.style.whiteSpace="nowrap",n.style.position="absolute",n.style.visibility="hidden",n.style.top="-9999px",e.body.appendChild(n);let o=n.getBoundingClientRect(),i=(e.defaultView||window).getComputedStyle(n),a={dimensions:{width:o.width,height:o.height},fontInfo:{fontFamily:i.fontFamily,fontSize:i.fontSize,fontWeight:i.fontWeight,fontStyle:i.fontStyle,lineHeight:i.lineHeight,fontVariant:i.fontVariant||"normal",fontStretch:i.fontStretch||"normal",fontSizeAdjust:i.fontSizeAdjust||"none",textRendering:i.textRendering||"auto",fontFeatureSettings:i.fontFeatureSettings||"normal",fontVariantNumeric:i.fontVariantNumeric||"normal",fontKerning:i.fontKerning||"auto"}};return e.body.removeChild(n),a}catch(n){return{error:n.message}}}var cn=800;async function Ee(){return new Promise(t=>{try{if(typeof window>"u"||!window.speechSynthesis||typeof window.speechSynthesis.getVoices!="function"){t({supported:!1,error:"Speech Synthesis API not supported"});return}let e=!1,n=null,o=a=>{if(!e){e=!0,n&&clearTimeout(n);try{let s=a.map(m=>{let u=g=>g.replace(/\\/g,"\\\\").replace(/,/g,"\\,");return[u(m.voiceURI||""),u(m.name||""),u(m.lang||""),m.localService?"1":"0",m.default?"1":"0"].join(",")});s.sort();let c={voiceCount:a.length,voicesHash:b(D(s))};t({details:c,hash:b(D(c))})}catch(s){t({supported:!0,error:`Voice processing failed: ${s.message}`})}}},r=window.speechSynthesis.getVoices();if(r.length>0){o(r);return}n=setTimeout(()=>{let a=window.speechSynthesis.getVoices();o(a)},cn);let i=()=>{window.speechSynthesis.removeEventListener("voiceschanged",i);let a=window.speechSynthesis.getVoices();o(a)};window.speechSynthesis.addEventListener("voiceschanged",i)}catch(e){t({supported:!1,error:`Speech Synthesis error: ${e.message}`})}})}var et={audio:ce,canvas:ue,fonts:le,hardware:me,locales:de,math:ge,permissions:fe,plugins:pe,screen:ye,system:he,webgl:we},tt={webrtc:Ie,mathml:ve,speech:Ee},be={},nt={timeout:"true"},Te=(t,e,n)=>{be[t]=e};function un(t,e){return new Promise(n=>{setTimeout(()=>n(e),t)})}function rt(t,e,n){return Promise.all(t.map(o=>{let r=performance.now();return Promise.race([o.then(i=>({value:i,elapsed:performance.now()-r})),un(e,n).then(i=>({value:i,elapsed:performance.now()-r}))])}))}function H(t,e){let n=F();if(n.name==="unknown"&&t.system&&typeof t.system=="object"&&!Array.isArray(t.system)){let d=t.system.browser;if(d&&typeof d=="object"&&!Array.isArray(d)){let g=d;n={name:g.name||"unknown",version:g.version||"unknown"}}}let o=n.name.toLowerCase(),r=n.version.split(".")[0]||"0",i=parseInt(r,10),a=[...e?.exclude||[]],s=e?.stabilize||[],c=e?.include||[];for(let u of s){let d=se[u];if(d)for(let g of d){let f=!("browsers"in g),T=!f&&g.browsers?.some(v=>{let R=v.match(/(.+?)(>=)(\d+)/);if(R){let[,p,,_]=R,O=parseInt(_,10);return o===p&&i>=O}return o===v});(f||T)&&a.push(...g.exclude)}}function m(u,d=""){let g={};for(let[f,T]of Object.entries(u)){let v=d?`${d}.${f}`:f;if(typeof T=="object"&&!Array.isArray(T)&&T!==null){let R=m(T,v);Object.keys(R).length>0&&(g[f]=R)}else{let R=a.some(_=>v.startsWith(_)),p=c.some(_=>v.startsWith(_));(!R||p)&&(g[f]=T)}}return g}return m(t)}async function Re(t){let e={...B,...t},n=e.logging&&!sessionStorage.getItem("_tmjs_l")&&Math.random()<1e-4,o={...et,...be},{elapsed:r,resolvedComponents:i}=await ot(o,e),a={},s={};if(n||e.experimental){let{elapsed:R,resolvedComponents:p}=await ot(tt,e);a=p,s=R}let c={...r,...s},m=e.performance?{elapsed:c}:{},u=H({},e),d={...i,...u},g={};return{thumbmark:b(D(d)),components:d,info:g,version:"",...m,...Object.keys(a).length>0&&e.experimental&&{experimental:a}}}async function ot(t,e){let n={...B,...e},o=Object.entries(t).filter(([u])=>!n?.exclude?.includes(u)).filter(([u])=>n?.include?.some(d=>d.includes("."))?n?.include?.some(d=>d.startsWith(u)):n?.include?.length===0||n?.include?.includes(u)),r=o.map(([u])=>u),i=o.map(([u,d])=>d(e)),a=await rt(i,n?.timeout||5e3,nt),s={},c={};a.forEach((u,d)=>{u.value!=null&&(c[r[d]]=u.value,s[r[d]]=u.elapsed??0)});let m=H(c,n);return{elapsed:s,resolvedComponents:m}}var q=class{options;constructor(e){this.options={...B,...e}}async get(e){let n={...this.options,...e};return Re(n)}getVersion(){return""}includeComponent(e,n){Te(e,n)}};var ln=(t,e={})=>({"Content-Type":"application/json",...t?.accessToken&&{Authorization:`Bearer ${t?.accessToken}`},...e}),mn=async(t,e)=>{if(!t.ok){let n=await t.text();throw new Error(n)}return e==="file"?t.blob():e==="json"?t.json():e==="text"?t.text():null},it=async({url:t,auth:e,body:n,method:o="GET",headers:r={},responseType:i="json"})=>{let a={method:o,headers:ln(e,r),...n?{body:n instanceof FormData?n:JSON.stringify(n)}:{}},s=await fetch(t,a);return mn(s,i)},at=t=>it({...t,method:"GET"}),U=t=>it({...t,method:"POST"});var dn=[{name:"lowCpuCores",weight:2,async check(){let t=navigator.hardwareConcurrency||0,e=t>0&&t<=2;return{value:t,triggered:e}}},{name:"lowDeviceMemory",weight:0,async check(){let t=navigator.deviceMemory||0,e=t>0&&t<=4;return{value:t,triggered:e}}},{name:"platformMismatch",weight:1,async check(){let t=navigator.userAgent||"",e=navigator.platform||"",n=t.includes("Mac")&&e.includes("Linux")||t.includes("Win")&&e.includes("Mac")||e===""||e==="Unknown";return{value:e,triggered:n}}},{name:"webglSoftwareRenderer",weight:4,async check(){let t=null,e=null,n=!1;try{let o=document.createElement("canvas"),r=o.getContext("webgl")||o.getContext("experimental-webgl");if(r){let i=r.getExtension("WEBGL_debug_renderer_info");if(i){t=r.getParameter(i.UNMASKED_VENDOR_WEBGL)||"",e=r.getParameter(i.UNMASKED_RENDERER_WEBGL)||"";let a=e.toLowerCase(),s=t.toLowerCase();n=a.includes("swiftshader")||a.includes("llvmpipe")||a.includes("softwar")||a.includes("basic render")||a.includes("vmware")||a.includes("virtualbox")||s.includes("vmware")||s.includes("parallels")}}}catch{}return{value:{vendor:t,renderer:e},triggered:n}}},{name:"missingWebGPUAdapter",weight:3,async check(){if(!("gpu"in navigator))return{value:"no WebGPU",triggered:!0};try{let t=await navigator.gpu.requestAdapter();return{value:t?"adapter-present":"adapter-null",triggered:!t}}catch{return{value:"adapter-error",triggered:!0}}}},{name:"reducedTimerPrecision",weight:1,async check(){let t=performance.now();await new Promise(o=>setTimeout(o,50));let e=performance.now()-t,n=e<30||e>80;return{value:e.toFixed(2),triggered:n}}},{name:"timerJitter",weight:0,async check(){let t=[];for(let n=0;n<10;n++){let o=performance.now();await new Promise(i=>setTimeout(i,10));let r=performance.now();t.push(r-o)}let e=Math.sqrt(t.map(n=>(n-10)**2).reduce((n,o)=>n+o)/t.length);return{value:e.toFixed(3),triggered:e>5}}},{name:"audioFingerprint",weight:1,async check(){try{let t=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,44100,44100),e=t.createOscillator();e.frequency.value=440,e.connect(t.destination),e.start(0);let o=(await t.startRendering()).getChannelData(0).reduce((r,i)=>r+Math.abs(i),0);return{value:o,triggered:o<100}}catch{return{value:"audio-error",triggered:!0}}}},{name:"canvasEntropy",weight:1,async check(){try{let t=document.createElement("canvas"),e=t.getContext("2d");e.textBaseline="top",e.font="14px 'Arial'",e.fillText("VM CHECK",2,2);let o=[...t.toDataURL()].reduce((r,i)=>(r+i.charCodeAt(0))%9999999,0);return{value:o,triggered:o===0||o===999999}}catch{return{value:"canvas-error",triggered:!0}}}},{name:"windowSizeWeird",weight:1,async check(){let t=window.innerWidth/window.innerHeight,e=t===1.333||t===1.6;return{value:t.toFixed(2),triggered:e}}},{name:"touchMismatch",weight:1,async check(){let t="ontouchstart"in window,e=navigator.maxTouchPoints||0;return{value:{hasTouch:t,maxTouch:e},triggered:t&&e===0}}},{name:"batteryVirtualized",weight:1,async check(){if(!navigator.getBattery)return{value:"no API",triggered:!0};try{let t=await navigator.getBattery(),e=t.chargingTime===0&&t.dischargingTime===1/0;return{value:{chargingTime:t.chargingTime,dischargingTime:t.dischargingTime},triggered:e}}catch{return{value:"battery-error",triggered:!0}}}},{name:"permissionsWeird",weight:0,async check(){try{let t=await navigator.permissions.query({name:"camera"});return{value:t.state,triggered:t.state==="prompt"}}catch{return{value:"perm-error",triggered:!0}}}},{name:"noMediaDevices",weight:1,async check(){try{let t=await navigator.mediaDevices.enumerateDevices();return{value:t.length,triggered:t.length===0}}catch{return{value:"media-error",triggered:!0}}}},{name:"virtualizedMediaDevices",weight:1,async check(){try{let t=await navigator.mediaDevices.enumerateDevices(),e=t.some(n=>n.label.toLowerCase().includes("virtual"));return{value:t.map(n=>n.label),triggered:e}}catch{return{value:"media-error",triggered:!0}}}},{name:"webrtcIpPattern",weight:2,async check(){return new Promise(t=>{try{let e=new RTCPeerConnection({iceServers:[]});e.createDataChannel("x");let n=setTimeout(()=>{e.close(),t({value:"timeout",triggered:!1})},3e3);e.onicecandidate=o=>{if(!o?.candidate){clearTimeout(n),e.close(),t({value:"no candidate",triggered:!1});return}let r=o.candidate.candidate.toLowerCase();clearTimeout(n),e.close(),t({value:r,triggered:r.includes("10.0.2.")||r.includes("172.16.")||r.includes("192.168.56.")})},e.createOffer().then(o=>e.setLocalDescription(o))}catch{t({value:"rtc-error",triggered:!1})}})}},{name:"gpuAccelerationDisabled",weight:3,async check(){let e=document.createElement("canvas").getContext("webgl");return{value:!!e,triggered:!e}}},{name:"noWebGL2",weight:3,async check(){let t=document.createElement("canvas").getContext("webgl2");return{value:!!t,triggered:!t}}},{name:"lowStorageQuota",weight:1,async check(){try{let t=await navigator.storage.estimate();return{value:t.quota,triggered:(t.quota??0)<524288e3}}catch{return{value:"storage-error",triggered:!0}}}},{name:"lowEntropy",weight:1,async check(){let t=Object.keys(navigator).length+Object.keys(screen).length+Object.keys(window).length;return{value:t,triggered:t<200}}},{name:"noLanguages",weight:1,async check(){let t=navigator.languages||[];return{value:t,triggered:t.length===0}}},{name:"uaEntropyLow",weight:1,async check(){let t=navigator.userAgent;return{value:t,triggered:t.length<30}}},{name:"weirdDPI",weight:2,async check(){let t=window.devicePixelRatio;return{value:t,triggered:t===1}}}],gn=[{name:"tamperingPluginMismatch",penalty:3,async check(){try{let t=navigator.userAgent.toLowerCase(),e=(t.includes("chrome")||t.includes("edg"))&&!t.includes("firefox")&&!t.includes("safari"),n=navigator.plugins?.length??0,o=!e&&n>0;return{value:{pluginCount:n,isChromeLike:e},triggered:o}}catch{return{value:"error",triggered:!1}}}},{name:"tamperingWebglNoise",penalty:1,async check(){try{let t=document.createElement("canvas");t.width=16,t.height=16;let e=t.getContext("webgl");if(!e)return{value:"no-webgl",triggered:!1};e.clearColor(.1,.2,.3,1),e.clear(e.COLOR_BUFFER_BIT);let n=new Uint8Array(16*16*4);e.readPixels(0,0,16,16,e.RGBA,e.UNSIGNED_BYTE,n);let o=new Set(n).size;return{value:{uniqueValues:o},triggered:o>4}}catch{return{value:"error",triggered:!1}}}},{name:"tamperingServiceWorkerBlocked",penalty:1,async check(){let t=!("serviceWorker"in navigator);return{value:{serviceWorkerAvailable:!t},triggered:t}}},{name:"permissionsWeirdAntiVM",penalty:2,async check(){try{let t=await navigator.permissions.query({name:"camera"});return{value:t.state,triggered:t.state==="prompt"}}catch{return{value:"error",triggered:!1}}}}];async function st({threshold:t=4}={}){let e={},n=0;for(let r of dn)try{let i=await r.check();e[r.name]={...i,weight:r.weight},i.triggered&&r.weight>0&&(n+=r.weight)}catch{e[r.name]={value:"error",triggered:!1,weight:r.weight}}let o=n;for(let r of gn)try{let i=await r.check();e[r.name]={...i,penalty:r.penalty},i.triggered&&(n-=r.penalty)}catch{e[r.name]={value:"error",triggered:!1,penalty:r.penalty}}return{isLikelyVM:n>=t,score:n,rawScore:o,threshold:t,signals:e}}var fn=[{name:"hookedFunctionToString",weight:2,async check(){let t=Function.prototype.toString.toString(),e=Function.prototype.toString+"";return{value:{native:t,current:e},triggered:t!==e}}},{name:"navigatorProxyTrap",weight:2,async check(){let t=!1;try{let e=Object.getOwnPropertyDescriptor(window,"navigator");e&&e.get&&e.get.toString()?.includes("[native code]")===!1&&(t=!0)}catch{}return{value:"navigator getter",triggered:t}}},{name:"uaMismatch",weight:2,async check(){let t=navigator.userAgent||"",e="";try{let o=await navigator.userAgentData?.getHighEntropyValues?.(["platform","brands"]);e=JSON.stringify(o)}catch{}let n=t?.includes("Mac")&&e?.includes("Windows")||t?.includes("Win")&&e?.includes("Mac")||e&&e.length>0&&!t;return{value:{ua:t,brandInfo:e},triggered:n}}},{name:"timezoneLocaleMismatch",weight:1,async check(){let t=Intl.DateTimeFormat().resolvedOptions().timeZone,e=navigator.language||"",n=e.startsWith("en")&&t==="Asia/Shanghai"||e.startsWith("zh")&&t==="America/New_York"||t===void 0;return{value:{tz:t,lang:e},triggered:n}}},{name:"canvasNoise",weight:2,async check(){let t=()=>{let r=document.createElement("canvas"),i=r.getContext("2d");return i.textBaseline="top",i.font="14px Arial",i.fillText("anti-detect-check",2,2),r.toDataURL()},e=t(),n=t();return{value:{a:e,b:n},triggered:e!==n}}},{name:"webglNoise",weight:-2,async check(){try{let e=document.createElement("canvas").getContext("webgl");if(!e)return{value:"no-webgl",triggered:!0};let n=e.getExtension("WEBGL_debug_renderer_info");if(!n)return{value:"no-debug-extension",triggered:!1};let o=e.getParameter(n.UNMASKED_VENDOR_WEBGL),r=e.getParameter(n.UNMASKED_RENDERER_WEBGL),i=o===""||r===""||o?.includes(" ")===!1||r?.includes(" ")===!1;return{value:{v:o,r},triggered:i}}catch{return{value:"gl-error",triggered:!0}}}},{name:"webdriverFlag",weight:3,async check(){let t=navigator.webdriver===!0;return{value:navigator.webdriver,triggered:t}}},{name:"perfectEventTiming",weight:-3,async check(){let t=performance.now();return{value:t,triggered:t%1===0}}},{name:"serviceWorkerBlocked",weight:-4,async check(){let t=!("serviceWorker"in navigator);return{value:t,triggered:t}}},{name:"smallQuota",weight:2,async check(){try{let t=await navigator.storage.estimate(),e=t.quota<50*1024*1024;return{value:t.quota,triggered:e}}catch{return{value:"quota-error",triggered:!0}}}},{name:"indexedDbBlocked",weight:2,async check(){try{let t=indexedDB.open("tamper-check");return await new Promise(e=>{t.onerror=()=>e({value:"error",triggered:!0}),t.onsuccess=()=>e({value:"ok",triggered:!1})})}catch{return{value:"throw",triggered:!0}}}},{name:"screenDprMismatch",weight:0,async check(){let t=window.screen.width,e=window.screen.height,n=window.devicePixelRatio,o=t===1920&&n===1&&e===1080||n%1!==0&&n%1!==.5;return{value:{w:t,h:e,dpr:n},triggered:o}}},{name:"missingCommonFonts",weight:1,async check(){return{value:"skipped",triggered:!1}}},{name:"noMediaDevices",weight:1,async check(){try{let t=await navigator.mediaDevices.enumerateDevices();return{value:t.length,triggered:t.length===0}}catch{return{value:"error",triggered:!0}}}},{name:"languagesEmpty",weight:1,async check(){let t=navigator.languages||[];return{value:t,triggered:t.length===0}}},{name:"pluginMismatch",weight:-4,async check(){try{let t=navigator.plugins.length;return{value:t,triggered:t===0}}catch{return{value:"error",triggered:!0}}}},{name:"devtoolsDetected",weight:-2,async check(){return new Promise(async t=>{let e={viewportBreakpoint:!1,consoleSpeed:!1,consoleProfileTiming:!1},n=160,o=window.outerWidth-window.innerWidth,r=window.outerHeight-window.innerHeight;(o>n||r>n)&&(e.viewportBreakpoint=!0);async function i(c=50){return new Promise(m=>{let u=performance.now();console.log("%c ","font-size:3000px");let d=performance.now();m(d-u>c)})}e.consoleSpeed=await i();function a(){if(typeof console.profile!="function"||typeof console.profileEnd!="function")return!1;let c=5,m=3,u=[];try{for(let g=0;g<c;g++){let f=performance.now(),T=`profile_${f.toString()}`;console.profile(T),console.profileEnd(T),u.push(performance.now()-f)}}catch{return!1}return u.sort((g,f)=>g-f),u[Math.floor(u.length/2)]>m}e.consoleProfileTiming=a();let s=Object.values(e).some(Boolean);setTimeout(()=>{t({value:s,triggered:s})},50)})}},{name:"knownAntiDetectBrowser",weight:5,async check(){let t=navigator.userAgent.toLowerCase(),n=["incogniton","multilogin","morelogin","adspect","kameleo","goLogin"].some(o=>t?.includes(o));return{value:t,triggered:n}}},{name:"batteryVirtualized",weight:4,async check(){try{let t=await navigator.getBattery(),e=t.chargingTime,n=t.dischargingTime;return{value:{chargingTime:e,dischargingTime:n},triggered:e===0}}catch{return{value:"no-battery-api",triggered:!1}}}},{name:"permissionDenied",weight:4,async check(){try{let t=await navigator.permissions.query({name:"notifications"}),e=t.state==="denied";return{value:t.state,triggered:e}}catch{return{value:"perm-error",triggered:!1}}}}];async function ct({anomalyMin:t=.52,anomalyMax:e=.54}={}){let n={},o=0;for(let d of fn){let g=await d.check();n[d.name]=g,g.triggered&&(o+=d.weight)}let r=navigator?.platform||"",i=(navigator?.userAgent||"").toLowerCase(),a=r.toLowerCase().includes("win"),s=n.batteryVirtualized?.triggered||!1,c=n.permissionDenied?.triggered||!1,m=!a&&r!==""&&s&&c,u=Math.min(1,Math.max(0,o)/15);return{result:m&&u>=t&&u<=e||n.knownAntiDetectBrowser?.triggered,anomalyScore:u,score:o,signals:n}}function pn(){let t=0;try{0 .toFixed(-1)}catch(e){t=e.message.length}return t}function yn(){let t=navigator.userAgent,e=pn();return e===44||e===43?"Safari":e===51?"Chrome":e===25?"Firefox":navigator.msSaveBlob!==void 0?"MSIE":t.match(/Chrome/)?navigator.brave!==void 0?"Brave":t.includes("Edg")?"Edge":t.includes("OPR")?"Opera":"Chrome":"Unknown"}var hn=[{name:"safari_currentStorageTest",weight:2,browser:"Safari",async check(){if(typeof navigator.storage?.getDirectory!="function")return{triggered:!1,value:"unsupported"};try{return await navigator.storage.getDirectory(),{triggered:!1,value:"ok"}}catch(t){let e=t?.message??String(t);return{triggered:e.includes("unknown transient reason"),value:e}}}},{name:"safari13to18_indexedDbBlobTest",weight:2,browser:"Safari",async check(){return await new Promise(t=>{let e=String(Math.random()),n=indexedDB.open(e,1);n.onupgradeneeded=o=>{let r=o.target.result;try{r.createObjectStore("t",{autoIncrement:!0}).put(new Blob),t({triggered:!1,value:"ok"})}catch(i){let a=i?.message??String(i);t({triggered:a.includes("are not yet supported"),value:a})}finally{r.close(),indexedDB.deleteDatabase(e)}},n.onerror=()=>t({triggered:!1,value:"idb-error"})})}},{name:"safari_oldWebkitTest",weight:1,browser:"Safari",async check(){let t=window.openDatabase,e=window.localStorage;try{t(null,null,null,null)}catch{return{triggered:!0,value:"openDatabase denied"}}try{e.setItem("test","1"),e.removeItem("test")}catch{return{triggered:!0,value:"localStorage denied"}}return{triggered:!1,value:"ok"}}},{name:"chrome_storageQuotaPrivateTest",weight:2,browser:"Chrome",async check(){return await new Promise((t,e)=>{let o=window?.performance?.memory?.jsHeapSizeLimit??1073741824;navigator.webkitTemporaryStorage.queryUsageAndQuota((r,i)=>{let a=Math.round(i/1048576),s=Math.round(o/(1024*1024))*2;t({triggered:a<s,value:{quotaMB:a,limitMB:s}})},r=>e(r))})}},{name:"chrome_oldFileSystemTest",weight:1,browser:"Chrome",async check(){let t=window.webkitRequestFileSystem;return t?await new Promise(e=>t(0,1,()=>e({triggered:!1,value:"ok"}),()=>e({triggered:!0,value:"denied"}))):{triggered:!1,value:"unsupported"}}},{name:"firefox_storageDirectoryTest",weight:2,browser:"Firefox",async check(){if(typeof navigator.storage?.getDirectory!="function")return{triggered:!1,value:"unsupported"};try{return await navigator.storage.getDirectory(),{triggered:!1,value:"ok"}}catch(t){let e=t?.message??String(t);return{triggered:e.includes("Security error"),value:e}}}},{name:"firefox_indexedDbInvalidStateTest",weight:1,browser:"Firefox",async check(){return await new Promise(t=>{let e=indexedDB.open("inPrivate");e.onerror=()=>{t({triggered:e.error?.name==="InvalidStateError",value:e.error?.name})},e.onsuccess=()=>{indexedDB.deleteDatabase("inPrivate"),t({triggered:!1,value:"ok"})}})}},{name:"msie_indexedDbMissing",weight:2,browser:"MSIE",async check(){return{triggered:window.indexedDB===void 0,value:"msie-idb-check"}}}];async function ut(){let t=yn(),e={},n=0;for(let o of hn){if(o.browser!==t)continue;let r=await o.check();e[o.name]=r,r.triggered&&(n+=o.weight)}return{isPrivate:n>0,browserName:t,score:n,signals:e}}typeof window<"u"&&(window.detectIncognito=ut);var lt=ut;var mt=[{name:"globalPrivacyControl",weight:3,async check(){let t=navigator.globalPrivacyControl;return{triggered:t===!0,value:t}}},{name:"doNotTrack",weight:1,async check(){let t=navigator.doNotTrack;return{triggered:t==="1",value:t}}},{name:"cookiesDisabled",weight:3,async check(){let t=navigator.cookieEnabled;return{triggered:t===!1,value:t}}},{name:"thirdPartyCookiesBlocked",weight:3,async check(){try{if("hasStorageAccess"in document&&!await document.hasStorageAccess())try{return await document.requestStorageAccess(),{triggered:!1,value:"access_granted"}}catch{return{triggered:!0,value:"access_denied"}}let t=`__dtect_3p_test_${Date.now()}`;document.cookie=`${t}=1; SameSite=None; Secure`;let e=document.cookie.includes(t);return document.cookie=`${t}=; expires=Thu, 01 Jan 1970 00:00:00 GMT`,{triggered:!1,value:e?"cookies_work":"may_be_blocked"}}catch(t){return{triggered:!1,value:`error: ${t?.message}`}}}},{name:"firefoxResistFingerprinting",weight:2,async check(){let t=[],e=new Date().getTimezoneOffset();e===0&&Intl.DateTimeFormat().resolvedOptions().timeZone==="UTC"&&t.push("timezone_utc");let n=navigator.hardwareConcurrency;n===2&&t.push("cores_capped");let o=window.screen.width,r=window.screen.height,i=window.innerWidth,a=window.innerHeight;o===i&&r===a&&t.push("screen_matches_inner");let s=window.matchMedia("(prefers-reduced-motion: reduce)").matches;return{triggered:t.length>=2,value:{signals:t,timezoneOffset:e,cores:n,prefersReducedMotion:s}}}},{name:"braveShields",weight:3,async check(){if(!(navigator.brave!==void 0))return{triggered:!1,value:"not_brave"};try{if(!await navigator.brave.isBrave())return{triggered:!1,value:"brave_check_false"};let o=document.createElement("canvas").getContext("2d");if(o){o.fillStyle="rgb(255, 0, 0)",o.fillRect(0,0,1,1);let r=o.getImageData(0,0,1,1).data;o.fillRect(0,0,1,1);let i=o.getImageData(0,0,1,1).data;if(r[0]!==i[0]||r[1]!==i[1]||r[2]!==i[2])return{triggered:!0,value:"shields_active_canvas"}}try{let r=new RTCPeerConnection({iceServers:[{urls:"stun:stun.l.google.com:19302"}]});if(r.createDataChannel(""),await new Promise(a=>{let s=setTimeout(()=>{r.close(),a(!1)},1e3);r.onicecandidate=c=>{c.candidate?.candidate&&(/([0-9]{1,3}\.){3}[0-9]{1,3}/.test(c.candidate.candidate)||(clearTimeout(s),r.close(),a(!0)))},r.createOffer().then(c=>r.setLocalDescription(c))}))return{triggered:!0,value:"shields_active_webrtc"}}catch{return{triggered:!0,value:"shields_active_webrtc_blocked"}}return{triggered:!0,value:"brave_detected_shields_default"}}catch(e){return{triggered:!1,value:`error: ${e?.message}`}}}}];async function dt(){let t={},e=0,n=await Promise.allSettled(mt.map(async o=>{let r=await o.check();return{name:o.name,weight:o.weight,result:r}}));for(let o of n)if(o.status==="fulfilled"){let{name:r,weight:i,result:a}=o.value;t[r]=a,a.triggered&&(e+=i)}else{let r=n.indexOf(o),i=mt[r];i&&(t[i.name]={triggered:!1,value:`check_failed: ${o.reason}`})}return{isPrivacyEnabled:e>3,score:e,signals:t}}typeof window<"u"&&(window.detectPrivacy=dt);var gt=dt;var ft={screenResolution:"",screenAvailResolution:"",screenPixelDepth:null,fontPreferences:"",colorGamut:"",dynamicRange:"",monochrome:null,audioBaseLatency:null,audioSampleRate:null,vendorFlavors:[],pdfViewerEnabled:null,osCpu:"",dateTimeLocale:""};function k(t,e){try{let n=t();return n??e}catch{return e}}function pt(t,e){return typeof t!="number"||typeof e!="number"||!t||!e?"":`${Math.max(t,e)}x${Math.min(t,e)}`}var wn=[["default",{}],["apple",{fontFamily:"-apple-system"}],["serif",{fontFamily:"serif"}],["sans",{fontFamily:"sans-serif"}],["mono",{fontFamily:"monospace"}],["min",{fontSize:"1px"}],["system",{fontFamily:"system-ui"}]],In="mmMwWLliI0fiflO&1IlV%\u4E2D\u6587\u5B57\u4F53\xE9\xE8\xEA";function vn(){let t=document.createElement("div");t.style.cssText="position:absolute;visibility:hidden;left:-9999px;top:-9999px;width:auto;height:auto;white-space:nowrap;font-size:48px;";let e=wn.map(([n,o])=>{let r=document.createElement("span");return r.textContent=In,r.style.whiteSpace="nowrap",Object.assign(r.style,o),t.appendChild(r),[n,r]});document.body.appendChild(t);try{return e.map(([n,o])=>`${n}:${o.getBoundingClientRect().width}`).join("|")}finally{t.remove()}}function yt(t,e){for(let n of e)if(matchMedia(`(${t}: ${n})`).matches)return n;return""}function En(){if(!matchMedia("(min-monochrome: 0)").matches)return null;for(let t=0;t<=100;t++)if(matchMedia(`(max-monochrome: ${t})`).matches)return t;return null}function bn(){let t=window.AudioContext||window.webkitAudioContext;if(!t)return{baseLatency:null,sampleRate:null};let e=new t;try{return{baseLatency:typeof e.baseLatency=="number"?e.baseLatency:null,sampleRate:typeof e.sampleRate=="number"?e.sampleRate:null}}finally{typeof e.close=="function"&&e.close()}}function Tn(){return["chrome","safari","__crWeb","__gCrWeb","yandex","__yb","__ybro","__firefox__","__edgeTrackingPreventionStatistics","webkit","oprt","samsungAr","ucweb","UCShellJava","puffinDevice"].filter(e=>{let n=window[e];return typeof n=="object"&&n!==null})}async function ht(){try{if(typeof document>"u"||typeof window>"u")return ft;let t=k(bn,{baseLatency:null,sampleRate:null}),e=k(()=>Intl.DateTimeFormat().resolvedOptions(),null);return{screenResolution:k(()=>pt(screen.width,screen.height),""),screenAvailResolution:k(()=>pt(screen.availWidth,screen.availHeight),""),screenPixelDepth:k(()=>screen.pixelDepth,null),fontPreferences:k(vn,""),colorGamut:k(()=>yt("color-gamut",["rec2020","p3","srgb"]),""),dynamicRange:k(()=>yt("dynamic-range",["high","standard"]),""),monochrome:k(En,null),audioBaseLatency:t.baseLatency,audioSampleRate:t.sampleRate,vendorFlavors:k(Tn,[]),pdfViewerEnabled:k(()=>navigator.pdfViewerEnabled??null,null),osCpu:k(()=>navigator.oscpu??"",""),dateTimeLocale:e?`${e.locale??""}|${e.calendar??""}|${e.numberingSystem??""}`:""}}catch{return ft}}var xe={supported:!1,extensions:[],parametersHash:"",parametersCount:0,shaderPrecisions:[],contextAttributes:[]};function Rn(t){let e=2166136261,n=16777619;for(let o=0;o<t.length;o++){let r=t.charCodeAt(o);e=Math.imul(e^r,16777619)>>>0,n=Math.imul(n^r,2246822507)>>>0}return e.toString(16).padStart(8,"0")+n.toString(16).padStart(8,"0")}var xn=["VERTEX_SHADER","FRAGMENT_SHADER"],An=["LOW_FLOAT","MEDIUM_FLOAT","HIGH_FLOAT","LOW_INT","MEDIUM_INT","HIGH_INT"];function Sn(t){let e=[],n=Object.getPrototypeOf(t);for(let o of Object.getOwnPropertyNames(n)){if(!/^[A-Z][A-Z0-9_]*$/.test(o))continue;let r=t[o];if(typeof r=="number")try{let i=t.getParameter(r);if(t.getError()!==t.NO_ERROR||i==null)continue;e.push(`${o}=${r}=${Dn(i)}`)}catch{}}return e.sort()}function Dn(t){return t instanceof Int32Array||t instanceof Float32Array?Array.from(t).join(","):Array.isArray(t)?t.join(","):String(t)}function Pn(t){let e=[];for(let n of xn)for(let o of An)try{let r=t.getShaderPrecisionFormat(t[n],t[o]);if(!r)continue;e.push(`${n}.${o}=${r.rangeMin},${r.rangeMax},${r.precision}`)}catch{}return e}function kn(t){let e=t.getContextAttributes();return e?Object.keys(e).sort().map(n=>`${n}=${String(e[n])}`):[]}async function wt(){try{if(typeof document>"u")return xe;let t=document.createElement("canvas"),e=t.getContext("webgl")||t.getContext("experimental-webgl");if(!e)return xe;let n=Sn(e);return{supported:!0,extensions:(e.getSupportedExtensions()??[]).slice().sort(),parametersHash:n.length?Rn(n.join("|")):"",parametersCount:n.length,shaderPrecisions:Pn(e),contextAttributes:kn(e)}}catch{return xe}}function _n(t){let e=t?.projectId,n=t?.visitorId||M();return(typeof t?.projectId=="number"||typeof t?.visitorId=="number")&&(e=`${t?.projectId}`,n=`${t?.visitorId}`),{visitorId:n,projectId:e}}function G(t){let{projectId:e,visitorId:n}=_n(t);return{projectId:e,visitorId:n}}async function On(){let t=new q,[e,n,o,r,i,a,s]=await Promise.allSettled([t.get(),st(),ct(),lt(),gt(),wt(),ht()]);return{deviceRes:e,vmDtectResults:n,tamperingDtectResults:o,incognitoDtectResults:r,privacySettingsDtectResults:i,webglExtensionsResults:a,stableEntropyResults:s}}function Ae(){let t=w().signalsPromise;if(t)return t;let e=On();return e.catch(()=>{S(n=>n.signalsPromise===e?{...n,signalsPromise:void 0}:n)}),S(n=>({...n,signalsPromise:e})),e}function Mn(t,e){return{entryLink:window?.location?.href,securitySettings:t.securitySettings,metaData:t.metaData,vmDtectResults:e?.vmDtectResults?.value,tamperingDtectResults:e?.tamperingDtectResults?.value,incognitoDtectResults:e?.incognitoDtectResults?.value,deviceIdResults:e?.deviceRes?.value,privacySettingsDtectResults:e?.privacySettingsDtectResults?.value,webglExtensionsResults:e?.webglExtensionsResults?.value,stableEntropyResults:e?.stableEntropyResults?.value}}function Nn(t,e,n,o){let r=(performance.now()-e).toFixed();I(`${t} finishes in ${r}ms`,"info",{function:t,endpoint:n?.endpoint,diff:r,token:o,clientId:n?.clientId})}function It(t,e,n,o,r){let i=(performance.now()-e).toFixed();I(`${t} error`,"error",{function:t,endpoint:n?.endpoint,error:r,diff:i,token:o,clientId:n?.clientId})}async function vt(t,e){let n=performance.now(),{projectId:o,visitorId:r}=G(t);if(!t||!o?.trim())throw new Error(h.FAILED_TO_GET_SECURITY_RESULT);C({projectId:o,visitorId:r});let{state:i,config:a,version:s}=w();try{let c=await Ae(),m=Mn(t,c),u={...t,projectId:o,visitorId:r,clientData:m,version:s,token:i.token,questionData:i.questionData,aiCheckData:i.aiCheckData},d=await U({url:e,body:u,headers:{"client-id":a?.clientId||"","x-api-key":a?.apiKey||""}});if(!("token"in d||"results"in d))throw new Error(h.INTERNAL_SERVER_ERROR);let g="results"in d&&d.results.isAIUsageDetected===!0;return S(f=>({...f,state:{...f.state,token:i.token,visitorId:r,projectId:o,clientData:m,aiUsageFlagged:f.state.aiUsageFlagged||g}})),Nn("getResultBase",n,a,i.token),d}catch(c){c instanceof Error?It("getResultBase",n,a,i.token,{message:c.message,stack:c.stack,name:c.name}):It("getResultBase",n,a,i.token,c),L(c)}}async function Se(t){let{endpoint:e}=N();if(t)return vt(t,`${e}/client/check/result`)}async function De(t){let{endpoint:e}=N();return vt(t,`${e}/client/check`)}var $;function Et(){let{config:t,monitor:e,state:n}=w();if(!t?.autoFlagAIUsage||!e||($?.(),$=void 0,n.aiUsageFlagged))return;let o=()=>{let{state:r}=w();r.aiUsageFlagged||!(e.apd||e.qbc&&e.mas&&e.scb!=null)||r.projectId&&(S(a=>({...a,state:{...a.state,aiUsageFlagged:!0}})),$?.(),$=void 0,ee({projectId:r.projectId,visitorId:r.visitorId}))};$=e.onChange(o),o()}async function ee(t){let e=performance.now(),{visitorId:n,projectId:o}=G(t);C({projectId:o,visitorId:n});let{state:r,config:i,monitor:a,version:s}=w(),{checkResultEndpoint:c}=N(),m={timeTakenSeconds:t.timeTakenSeconds,qbc:a?.qbc,mas:a?.mas,scb:a?.scb,apd:a?.apd};try{let u=await U({url:c,headers:{"client-id":i?.clientId||"","x-api-key":i?.apiKey||""},body:{token:r.token,visitorId:n,projectId:o,version:s,clientData:r.clientData,questionData:r.questionData,aiCheckData:m}});if(!u)throw new Error(h.INTERNAL_SERVER_ERROR);let d="results"in u&&u.results.isAIUsageDetected===!0;S(f=>({...f,state:{...f.state,aiCheckData:m,visitorId:n,projectId:o,aiUsageFlagged:f.state.aiUsageFlagged||d}}));let g=(performance.now()-e).toFixed();return I(`isAIUsageDetected finishes in ${g}ms`,"info",{endpoint:i?.endpoint,diff:g,token:r.token,clientId:i?.clientId}),u}catch(u){let d=(performance.now()-e).toFixed();u instanceof Error?I("isAIUsageDetected error","error",{endpoint:i?.endpoint,error:{message:u.message,stack:u.stack,name:u.name},diff:d,token:r.token,clientId:i?.clientId}):I("isAIUsageDetected error","error",{endpoint:i?.endpoint,error:u,diff:d,token:r.token,clientId:i?.clientId}),L(u)}}async function Pe(t){let e=performance.now(),{state:n,config:o}=w(),{respondentType:r,language:i}=t;try{let a=await at({url:`${o?.endpoint}/client/quality-questions/${r}/${i}`,headers:{"client-id":o?.clientId||"","x-api-key":o?.apiKey||""}});if(!a)throw new Error(h.INTERNAL_SERVER_ERROR);let s=(performance.now()-e).toFixed();return I(`getQualityQuestions finishes in ${s}ms`,"info",{function:"getQualityQuestions",endpoint:o?.endpoint,diff:s,token:n.token,clientId:o?.clientId}),a}catch(a){let s=(performance.now()-e).toFixed();I("getQualityQuestions error","error",{endpoint:o?.endpoint,error:a,diff:s,token:n.token,clientId:o?.clientId}),L(a)}}async function ke(t){let e=performance.now(),{visitorId:n,projectId:o}=G(t);C({projectId:o,visitorId:n});let{state:r,config:i,version:a}=w(),{checkResultEndpoint:s}=N(),c={questions:t.questions};try{let m=await U({url:s,headers:{"client-id":i?.clientId||"","x-api-key":i?.apiKey||""},body:{token:r.token,visitorId:n,projectId:o,version:a,questionData:c,aiCheckData:r.aiCheckData,clientData:r.clientData}});if(!m)throw new Error(h.INTERNAL_SERVER_ERROR);S(d=>({...d,state:{...d.state,token:r.token,questionData:c,visitorId:n,projectId:o}}));let u=(performance.now()-e).toFixed();return I(`checkQualityQuestions finishes in ${u}ms`,"info",{function:"checkQualityQuestions",endpoint:i?.endpoint,diff:u,token:r.token,clientId:i?.clientId}),m}catch(m){let u=(performance.now()-e).toFixed();m instanceof Error?I("checkQualityQuestions error","error",{endpoint:i?.endpoint,error:{message:m.message,stack:m.stack,name:m.name},diff:u,token:r.token,clientId:i?.clientId}):I("checkQualityQuestions error","error",{endpoint:i?.endpoint,error:m,diff:u,token:r.token,clientId:i?.clientId}),L(m)}}var bt,Ln=Ce;function la(){let{config:t}=w();return!!(t?.clientId&&t?.apiKey)}function Cn(t){let{config:e}=w();if(!t?.clientId||!t?.apiKey)throw I(h.MISSING_CREDENTIALS,"error",{endpoint:e?.endpoint,...t}),new Error(h.MISSING_CREDENTIALS)}function Bn(){let{config:t}=w();return!!(t?.clientId&&t.apiKey)}function Fn(t){let{config:e}=w();if(!Bn())throw I(h.MISSING_CREDENTIALS,"error",{endpoint:e?.endpoint,...t}),new Error(h.MISSING_CREDENTIALS)}function Un(t){return{clientId:t.clientId,apiKey:t.apiKey,endpoint:t.endpoint||"https://api.dtect.io/security",includeResults:t.includeResults,autoFlagAIUsage:t.autoFlagAIUsage}}function Gn(t){let e=t.endpoint,n=t.includeResults?`${e}/client/check/result`:`${e}/client/check`;return{...t,checkResultEndpoint:n}}function Vn(t){let e=Gn(t);S(n=>({...n,config:e}))}function Wn(){let{state:t}=w();if(t.isLoading)throw new Error(h.DUPLICATE_INITIALIZATION)}async function qn(t){let{state:e,config:n}=w(),r=(performance.now()-t).toFixed();return I(`init() finishes ${r}ms`,"info",{endpoint:n?.endpoint,function:"init",diff:r,token:e.token,clientId:n?.clientId}),{getSecurityResult:Se,getSecurityToken:De,SecurityAPIError:Ln,isAIUsageDetected:ee,checkQualityQuestions:ke,getQualityQuestions:Pe,LanguageCodes:K,QualityQuestionsRespondentTypes:j}}async function $n(t){let{state:e}=w(),n=performance.now();Cn(t);let o=Un(t);Vn(o),Fn(t);let r=qe(e.token);Wn(),je(r),Et();try{return setTimeout(Ae,0),await qn(n)}catch(i){$e(i,o)}finally{ze(r)}}bt={init:$n,getSecurityResult:Se,getSecurityToken:De,isAIUsageDetected:ee,checkQualityQuestions:ke,getQualityQuestions:Pe,QualityQuestionsRespondentTypes:j,LanguageCodes:K};var ma=bt;export{K as LanguageCodes,j as QualityQuestionsRespondentTypes,Ln as SecurityAPIError,ke as checkQualityQuestions,ma as default,Pe as getQualityQuestions,Se as getSecurityResult,De as getSecurityToken,la as hasCredentials,$n as init,ee as isAIUsageDetected};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dtect/security-sdk-js",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.mjs",
6
6
  "types": "dist/index.d.ts",