@zaplier/sdk 1.8.1 → 1.8.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/core-ultra.min.js +1 -1
- package/dist/index.cjs +1615 -34
- package/dist/index.d.ts +11 -7
- package/dist/index.esm.js +1615 -34
- package/dist/v2/chunks/browser-apis-AyU2utpF.min.js +6 -0
- package/dist/v2/chunks/confidence-BslwbUCt.min.js +6 -0
- package/dist/v2/chunks/device-signals-2L_62qNZ.min.js +6 -0
- package/dist/v2/chunks/dom-blockers-C467-IRd.min.js +6 -0
- package/dist/v2/chunks/fingerprint-FfUEEIAd.min.js +6 -0
- package/dist/v2/chunks/hardware-9ikfSEs-.min.js +6 -0
- package/dist/v2/chunks/incognito-CkKAdE8Z.min.js +6 -0
- package/dist/v2/chunks/math-Q4s6nkVD.min.js +6 -0
- package/dist/v2/chunks/plugins-enhanced-mUjU1EXe.min.js +6 -0
- package/dist/v2/chunks/session-replay-C5Tp0d16.min.js +6 -0
- package/dist/v2/chunks/storage-Bl_8oytT.min.js +6 -0
- package/dist/v2/chunks/system-DTjxyOZF.min.js +6 -0
- package/dist/v2/core.d.ts +289 -7
- package/dist/v2/core.min.js +2 -2
- package/dist/v2/modules/anti-adblock.js +1 -1
- package/dist/v2/modules/browser-apis-DzzjRXFN.js +6 -0
- package/dist/v2/modules/confidence-CLylpqVh.js +6 -0
- package/dist/v2/modules/device-signals-D-VQg-o6.js +6 -0
- package/dist/v2/modules/dom-blockers-D9M2aO9M.js +6 -0
- package/dist/v2/modules/fingerprint-Ddq30bun.js +6 -0
- package/dist/v2/modules/fingerprint.js +2 -2
- package/dist/v2/modules/hardware-BxWqOjae.js +6 -0
- package/dist/v2/modules/heatmap.js +1 -1
- package/dist/v2/modules/incognito-DpuYoC8S.js +6 -0
- package/dist/v2/modules/math-B13vt1ND.js +6 -0
- package/dist/v2/modules/plugins-enhanced-D5ft0k0e.js +6 -0
- package/dist/v2/modules/replay.js +1 -1
- package/dist/v2/modules/storage-D8dcMojB.js +6 -0
- package/dist/v2/modules/system-ZMflVbka.js +6 -0
- package/package.json +13 -13
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Zaplier SDK v2.0.0 - Performance Optimized
|
|
3
|
+
* Advanced privacy-first tracking with code splitting
|
|
4
|
+
* (c) 2026 Zaplier Team
|
|
5
|
+
*/
|
|
6
|
+
import{i as t,a as n,b as e}from"./fingerprint-FfUEEIAd.min.js";function r(){var n;try{return t()&&null!==(n=navigator.pdfViewerEnabled)&&void 0!==n?n:null}catch{return null}}function o(){try{if(!n())return-1;const{ApplePaySession:t}=window;if("function"!=typeof(null==t?void 0:t.canMakePayments))return-1;if(!e())return-2;if(window.self!==window.top)return-3;try{return t.canMakePayments()?1:0}catch(t){if(t instanceof Error&&"InvalidAccessError"===t.name)return-2;throw t}}catch{return-1}}function i(){try{return"attributionReporting"in window||"privateClickMeasurement"in window||null}catch{return null}}function a(){const n={enabled:!1,sameSiteSupport:!1,secureSupport:!1,partitionedSupport:!1};try{if(n.enabled=navigator.cookieEnabled,!n.enabled)return n;n.sameSiteSupport=c("__rb_test_samesite","SameSite=Strict"),e()&&(n.secureSupport=c("__rb_test_secure","Secure")),e()&&t()&&(n.partitionedSupport=c("__rb_test_partitioned","Partitioned; Secure; SameSite=None"))}catch{}return n}function c(t,n){try{const e="1",r=`${t}=${e}; ${n}; path=/`;document.cookie=r;const o=document.cookie.includes(`${t}=${e}`);return u(t),o}catch{return u(t),!1}}function u(t){try{const n=[`${t}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`,`${t}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=${location.hostname}`,`${t}=; max-age=0; path=/`,`${t}=; max-age=0; path=/; domain=${location.hostname}`];for(const t of n)try{document.cookie=t}catch{}setTimeout(()=>{try{document.cookie=`${t}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`}catch{}},100)}catch{}}function s(){try{const t=document.createElement("canvas"),n=t.getContext("webgl")||t.getContext("experimental-webgl");return n?(n.getSupportedExtensions()||[]).sort():[]}catch{return[]}}function l(){try{const t=performance.memory;return t?{usedJSHeapSize:t.usedJSHeapSize,totalJSHeapSize:t.totalJSHeapSize,jsHeapSizeLimit:t.jsHeapSizeLimit}:null}catch{return null}}function p(){try{const t=navigator.connection||navigator.mozConnection||navigator.webkitConnection;return t?{effectiveType:t.effectiveType,downlink:t.downlink,rtt:t.rtt,saveData:t.saveData}:null}catch{return null}}function d(){var t;const n={};try{n.webkitTemporaryStorage="webkitTemporaryStorage"in navigator,n.webkitPersistentStorage="webkitPersistentStorage"in navigator,window.safari&&(n.safariObjectTypes=Object.getOwnPropertyNames(window.safari)),n.chromeRuntime=!!(null===(t=window.chrome)||void 0===t?void 0:t.runtime),n.mozInnerScreenX="mozInnerScreenX"in window,n.msCredentials="msCredentials"in navigator}catch{}return n}function f(){return"undefined"!=typeof window&&"undefined"!=typeof navigator}function w(){const t=r(),n=o(),e=i(),c=a(),u=s(),f=l(),w=p(),m=d();let h="unknown";m.chromeRuntime?h="chrome":-1!==n?h="safari":m.mozInnerScreenX?h="firefox":m.msCredentials&&(h="edge");const v=Boolean(t||n>-1||e||f||w),S=[null!==t,-1!==n,null!==e,c.enabled,u.length>0,null!==f,null!==w,Object.keys(m).length>0];return{pdfViewerEnabled:t,applePayState:n,privateClickMeasurement:e,cookieCapabilities:c,webglExtensions:u,performanceMemory:f,connectionInfo:w,vendorProperties:m,browserVendor:h,hasNativeFeatures:v,apiScore:Math.round(S.filter(Boolean).length/S.length*100)}}export{o as getApplePayState,w as getBrowserApisFingerprint,p as getConnectionInfo,a as getCookieCapabilities,r as getPdfViewerEnabled,l as getPerformanceMemory,i as getPrivateClickMeasurement,d as getVendorProperties,s as getWebGLExtensions,f as isBrowserApisDetectionAvailable};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Zaplier SDK v2.0.0 - Performance Optimized
|
|
3
|
+
* Advanced privacy-first tracking with code splitting
|
|
4
|
+
* (c) 2026 Zaplier Team
|
|
5
|
+
*/
|
|
6
|
+
const e={canvas:{stability:.95,entropy:.9,uniqueness:.85,spoofResistance:.8},webgl:{stability:.92,entropy:.88,uniqueness:.82,spoofResistance:.85},audio:{stability:.9,entropy:.85,uniqueness:.8,spoofResistance:.9},hardware:{stability:.98,entropy:.7,uniqueness:.75,spoofResistance:.95},screen:{stability:.85,entropy:.6,uniqueness:.65,spoofResistance:.7},system:{stability:.8,entropy:.65,uniqueness:.7,spoofResistance:.6},browser:{stability:.75,entropy:.6,uniqueness:.65,spoofResistance:.5},fonts:{stability:.7,entropy:.75,uniqueness:.7,spoofResistance:.4},math:{stability:.95,entropy:.8,uniqueness:.9,spoofResistance:.95},storage:{stability:.6,entropy:.5,uniqueness:.6,spoofResistance:.3},incognito:{stability:.5,entropy:.4,uniqueness:.3,spoofResistance:.2},domBlockers:{stability:.8,entropy:.7,uniqueness:.6,spoofResistance:.9},accessibility:{stability:.9,entropy:.6,uniqueness:.7,spoofResistance:.85},browserApis:{stability:.85,entropy:.75,uniqueness:.8,spoofResistance:.7},pluginsEnhanced:{stability:.7,entropy:.65,uniqueness:.75,spoofResistance:.5},mathFingerprint:{stability:.99,entropy:.95,uniqueness:.9,spoofResistance:.98},fontPreferences:{stability:.92,entropy:.88,uniqueness:.85,spoofResistance:.75},dateTimeLocale:{stability:.95,entropy:.7,uniqueness:.75,spoofResistance:.8},accessibilityEnhanced:{stability:.93,entropy:.65,uniqueness:.8,spoofResistance:.9},enhancedFonts:{stability:.88,entropy:.85,uniqueness:.82,spoofResistance:.7},webrtc:{stability:.92,entropy:.85,uniqueness:.8,spoofResistance:.9},permissions:{stability:.88,entropy:.75,uniqueness:.72,spoofResistance:.8},speech:{stability:.9,entropy:.7,uniqueness:.65,spoofResistance:.85},cssFeatures:{stability:.97,entropy:.88,uniqueness:.85,spoofResistance:.95},mediaCodecs:{stability:.95,entropy:.82,uniqueness:.78,spoofResistance:.92},wasmFeatures:{stability:.98,entropy:.7,uniqueness:.72,spoofResistance:.97},mathml:{stability:.9,entropy:.8,uniqueness:.75,spoofResistance:.88},clientHints:{stability:.93,entropy:.92,uniqueness:.9,spoofResistance:.85}},s={domBlockers:{stability:.8,entropy:.7,uniqueness:.6,spoofResistance:.9},accessibility:{stability:.9,entropy:.6,uniqueness:.7,spoofResistance:.85},browserApis:{stability:.85,entropy:.75,uniqueness:.8,spoofResistance:.7}};function n(n){const t=e[n]||s[n];if(!t)return.5;const i=.3*t.stability+.25*t.entropy+.25*t.uniqueness+.2*t.spoofResistance;return Math.max(.1,Math.min(1,i))}function t(t,i={}){const{requireMinimumComponents:o=4,penalizeMissingCore:a=!0,adjustForIncognito:r=!0}=i,c=t.filter(e=>e.success),p=[];c.length<o&&p.push(`Collect at least ${o} components for reliable identification`);let u=0,y=0,l=0,b=0,f=0;const q=["canvas","webgl","audio","hardware"].filter(e=>!c.some(s=>s.component===e));for(const t of c){const i=n(t.component),o=e[t.component]||s[t.component];o&&(u+=i,y+=o.stability*i,l+=o.entropy*i,b+=o.uniqueness*i,f+=o.spoofResistance*i)}const R=u>0?y/u:0,m=u>0?l/u:0,d=u>0?f/u:0;let h,g,w=.35*R+.25*m+.25*(u>0?b/u:0)+.15*d,M=w;return a&&q.length>0&&(M-=.1*q.length,p.push(`Missing core components: ${q.join(", ")}`)),c.length<6&&(M-=.05*(6-c.length)),r&&c.some(e=>"incognito"===e.component)&&(M+=.02),c.filter(e=>["domBlockers","accessibility","browserApis","math"].includes(e.component)).length>=2&&(M+=.05),M=Math.max(0,Math.min(1,M)),M>=.995?(h=.995,g="Very High"):M>=.99?(h=.99,g="High"):M>=.95?(h=.95,g="Medium"):M>=.8?(h=.8,g="Low"):(h=.5,g="Very Low",p.push("Consider implementing additional fingerprinting techniques")),M<.95&&p.push("Enable all available fingerprinting components for better accuracy"),d<.6&&p.push("Include more spoof-resistant components like audio and WebGL"),m<.6&&p.push("Add high-entropy components like canvas and math fingerprinting"),{score:h,level:g,factors:{componentCount:c.length,weightedScore:Math.round(1e3*w)/1e3,stabilityScore:Math.round(1e3*R)/1e3,entropyScore:Math.round(1e3*m)/1e3,spoofResistanceScore:Math.round(1e3*d)/1e3},recommendations:p.slice(0,3)}}export{s as ADVANCED_COMPONENT_CHARACTERISTICS,e as COMPONENT_CHARACTERISTICS,n as calculateComponentWeight,t as calculateConfidence};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Zaplier SDK v2.0.0 - Performance Optimized
|
|
3
|
+
* Advanced privacy-first tracking with code splitting
|
|
4
|
+
* (c) 2026 Zaplier Team
|
|
5
|
+
*/
|
|
6
|
+
function r(){var r,n,t,e;try{const o=screen,i=null!==(r=o.availTop)&&void 0!==r?r:0,a=null!==(n=o.availLeft)&&void 0!==n?n:0,u=null!==(t=o.availWidth)&&void 0!==t?t:o.width,c=null!==(e=o.availHeight)&&void 0!==e?e:o.height,l=i||null,d=o.width-u-a||null,v=o.height-c-i||null,f=a||null;if(null===l&&null===d&&null===v&&null===f)return null;const s=r=>null===r?null:10*Math.round(r/10);return{top:s(l),right:s(d),bottom:s(v),left:s(f)}}catch{return null}}function n(){var r,n,t,e;try{const o=(null===(r=navigator.platform)||void 0===r?void 0:r.toLowerCase())||"",i=(null===(n=navigator.userAgent)||void 0===n?void 0:n.toLowerCase())||"";if(o.includes("win")&&(i.includes("wow64")||i.includes("x64")||i.includes("x86_64")))return 0;if(o.includes("linux")&&(o.includes("x86_64")||i.includes("x86_64")))return 0;if(o.includes("mac")&&(o.includes("intel")||i.includes("intel mac")))return 0;if(o.includes("x86")||o.includes("x64")||o.includes("intel")||o.includes("amd64")||i.includes("x86")||i.includes("amd64"))return 0;if(o.includes("arm")||i.includes("arm")||i.includes("aarch64")||o.includes("aarch64"))return 255;try{const r=document.createElement("canvas"),n=r.getContext("webgl")||r.getContext("experimental-webgl");if(n&&"getExtension"in n&&"getParameter"in n){const r=n.getExtension("WEBGL_debug_renderer_info");if(r){const o=(null===(t=n.getParameter(r.UNMASKED_VENDOR_WEBGL))||void 0===t?void 0:t.toLowerCase())||"",i=(null===(e=n.getParameter(r.UNMASKED_RENDERER_WEBGL))||void 0===e?void 0:e.toLowerCase())||"";if(o.includes("intel")||o.includes("nvidia")||o.includes("amd")||i.includes("intel")||i.includes("nvidia")||i.includes("amd")||i.includes("radeon")||i.includes("geforce")||i.includes("quadro")||i.includes("iris")||i.includes("uhd")||i.includes("hd graphics"))return 0;if(i.includes("mali")||i.includes("adreno")||i.includes("powervr")||i.includes("tegra")||i.includes("apple gpu")||o.includes("arm")||i.includes("videocore"))return 255}}}catch{}try{const r=new Float32Array(1),n=new Uint8Array(r.buffer);r[0]=1/0,r[0]=r[0]-r[0];const t=n[3];return o.includes("linux"),t}catch{return}}catch{return}}function t(){try{const r=navigator;let n=0;void 0!==r.maxTouchPoints?n=r.maxTouchPoints:void 0!==r.msMaxTouchPoints&&(n=r.msMaxTouchPoints);let t=!1;try{document.createEvent("TouchEvent"),t=!0}catch{t=!1}return{maxTouchPoints:n,touchEvent:t,touchStart:"ontouchstart"in window}}catch{return}}function e(){const r=[],n=["chrome","safari","__crWeb","__gCrWeb","yandex","__yb","__ybro","__firefox__","__edgeTrackingPreventionStatistics","webkit","oprt","samsungAr","ucweb","UCShellJava","puffinDevice"];for(const t of n){const n=window[t];n&&"object"==typeof n&&r.push(t)}return r.sort()}function o(){try{const r=navigator.deviceMemory;if("number"==typeof r)return Math.round(r);if("string"==typeof r){const n=parseFloat(r);return isNaN(n)?void 0:Math.round(n)}return}catch{return}}function i(){try{return screen.colorDepth||void 0}catch{return}}function a(){try{for(const r of["rec2020","p3","srgb"])if(window.matchMedia(`(color-gamut: ${r})`).matches)return r;return}catch{return}}function u(){return{screenFrame:r(),hardwareConcurrency:navigator.hardwareConcurrency||void 0,deviceMemory:o(),architecture:n(),touchSupport:t(),vendorFlavors:e(),cpuClass:navigator.cpuClass||void 0,colorDepth:i(),colorGamut:a()}}export{u as collectDeviceSignals};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Zaplier SDK v2.0.0 - Performance Optimized
|
|
3
|
+
* Advanced privacy-first tracking with code splitting
|
|
4
|
+
* (c) 2026 Zaplier Team
|
|
5
|
+
*/
|
|
6
|
+
import{g as t}from"./fingerprint-FfUEEIAd.min.js";function e(){const t=atob;return{adBlock:["#ad-banner",".advertisement",t("I2FkLWNvbnRhaW5lcg=="),t("LmFkdmVydGlzZW1lbnQ="),t("W2NsYXNzKj0iYWQtIl0=")],uBlockOrigin:["#ublock-stats",".adsbygoogle",t("I2dvb2dsZV9hZHM="),t("LmFkc2J5Z29vZ2xl"),t("LnVibG9jay1ibG9ja2Vk")],adGuardBase:[".BetterJsPopOverlay",t("I2FkXzMwMFgyNTA="),t("I2Jhbm5lcmZsb2F0"),t("I2NhbXBhaWduLWJhbm5lcg=="),t("I0FkLUNvbnRlbnQ=")],adGuardAnnoyances:[".hs-sosyal","#cookieconsentdiv",'div[class^="app_gdpr"]',".as-oil",'[data-cypress="soft-push-notification-modal"]'],easyList:[".yb-floorad",t("LndpZGdldF9wb19hZHNfd2lkZ2V0"),t("LnRyYWZmaWNqdW5reS1hZA=="),".textad_headline",t("LnNwb25zb3JlZC10ZXh0LWxpbmtz")],privacyBadger:["#privacy-badger-popup",".privacy-badger-blocked",t("LnByaXZhY3ktYmFkZ2Vy")],ghostery:["#ghostery-popup",".ghostery-blocking",t("Lmdob3N0ZXJ5LWJsb2NrZWQ=")],brave:["#brave-ads-blocked",".brave-blocked",t("LmJyYXZlLWFkLWJsb2Nr")],facebookContainer:[".facebook-container-blocked",t("LmZiLWJsb2NrZWQ=")],cookieBlockers:[".cookie-notice-blocked","#cookie-banner-hidden",t("LmNvb2tpZS1ibG9ja2Vy")],trackingProtection:[".tracking-blocked","#tracking-protection-enabled",t("LnRyYWNrZXItYmxvY2tlZA==")]}}function o(t){const e=document.createElement("div");if(t.startsWith("#"))e.id=t.substring(1);else if(t.startsWith("."))e.className=t.substring(1);else if(t.includes("["))try{const o=t.match(/\[([^=]+)([*^$|~]?=)"([^"]+)"\]/);if(o&&o[1]&&o[3]){const[,t,r,n]=o;"*="===r?e.setAttribute(t,`test-${n}-test`):e.setAttribute(t,n)}}catch{e.className="test-element"}else e.className=t.replace(/[^a-zA-Z0-9-_]/g,"");return e}function r(t){const e=t.style;e.setProperty("visibility","hidden","important"),e.setProperty("display","block","important"),e.setProperty("position","absolute","important"),e.setProperty("left","-9999px","important"),e.setProperty("width","1px","important"),e.setProperty("height","1px","important"),e.setProperty("pointer-events","none","important"),e.setProperty("z-index","-1","important")}function n(t){return new Promise(e=>setTimeout(e,t))}async function i(t){var e,i;const a=document,c=a.createElement("div"),s=new Array(t.length),d={};r(c);const l=a.createDocumentFragment();for(let n=0;n<t.length;n++){const c=t[n];if(c)try{const t=o(c),d=a.createElement("div");"DIALOG"===t.tagName&&(null===(i=(e=t).show)||void 0===i||i.call(e)),r(d),d.appendChild(t),l.appendChild(d),s[n]=t}catch(t){s[n]=void 0}}c.appendChild(l);let b=0;for(;!a.body&&b<100;)await n(50),b++;if(!a.body)throw new Error("Document body not available for DOM blockers detection");a.body.appendChild(c);try{await n(50),await new Promise(e=>{requestAnimationFrame(()=>{for(let e=0;e<t.length;e++){const o=s[e],r=t[e];o&&r&&!o.offsetParent&&(d[r]=!0)}e()})})}finally{try{c.parentNode&&c.parentNode.removeChild(c)}catch(t){setTimeout(()=>{try{c.parentNode&&c.parentNode.removeChild(c)}catch{}},0)}}return d}async function a(t={}){const{debug:o=!1,timeout:r=5e3}=t;try{if(!c())return"BROWSER_INCOMPATIBLE";if(!document||!document.body)return"DOM_NOT_AVAILABLE";const t=e(),n=Object.keys(t),a=[].concat(...n.map(e=>t[e]||[])),s=new Promise((t,e)=>{setTimeout(()=>e(new Error("DOM blockers detection timeout")),r)}),d=await Promise.race([i(a),s]);return o&&(a.length,Object.keys(d).length),n.filter(e=>{const o=t[e];return!(!o||0===o.length)&&o.map(t=>d[t]).filter(Boolean).length>.6*o.length}).sort()}catch(t){if(o&&console.error("[RabbitTracker] DOM Blockers detection failed:",t),t instanceof Error){if(t.message.includes("timeout"))return"TIMEOUT";if("SecurityError"===t.name||t.message.includes("SecurityError"))return"SECURITY_ERROR"}return"NOT_SUPPORTED"}}function c(){return t().canRunDOMBlockers}async function s(t={}){const e=await a(t),o=Array.isArray(e)?e:[];return{activeBlockers:o,blockerCount:o.length,hasAdBlocker:o.some(t=>["adBlock","uBlockOrigin","adGuardBase","easyList"].includes(t)),hasPrivacyExtension:o.some(t=>["privacyBadger","ghostery","brave"].includes(t)),hasTrackingProtection:o.includes("trackingProtection")}}export{i as getBlockedSelectors,e as getBlockerFilters,a as getDomBlockers,s as getDomBlockersFingerprint,c as isDomBlockersDetectionAvailable};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Zaplier SDK v2.0.0 - Performance Optimized
|
|
3
|
+
* Advanced privacy-first tracking with code splitting
|
|
4
|
+
* (c) 2026 Zaplier Team
|
|
5
|
+
*/
|
|
6
|
+
function n(n){var e;const t=[];return null!==(e=function n(e){var r;if(e&&"function"==typeof e.toJSON&&(e=e.toJSON()),void 0===e)return;if("number"==typeof e)return Number.isFinite(e)?String(e):"null";if("object"!=typeof e)return JSON.stringify(e);if(Array.isArray(e)){let t="[";for(let o=0;o<e.length;o++)o&&(t+=","),t+=null!==(r=n(e[o]))&&void 0!==r?r:"null";return t+"]"}if(null===e)return"null";if(-1!==t.indexOf(e))throw new TypeError("Converting circular structure to JSON");const o=t.push(e)-1,i=Object.keys(e).sort();let a="";for(const t of i){const r=n(e[t]);void 0!==r&&(a&&(a+=","),a+=JSON.stringify(t)+":"+r)}return t.splice(o,1),"{"+a+"}"}(n))&&void 0!==e?e:""}function e(n,e){const t=n[1]+e[1]&4294967295;return[n[0]+e[0]+(t<n[1]?1:0)&4294967295,t]}function t(n,e){const t=65535&n[1],r=n[1]>>>16,o=65535&e[1],i=e[1]>>>16,a=t*i+r*o&4294967295,c=r*i+(a>>>16),s=t*o+((65535&a)<<16)&4294967295;return[n[0]*e[1]+n[1]*e[0]+c&4294967295,s]}function r(n,e){return 0==(e%=64)?n:e<32?[4294967295&(n[0]<<e|n[1]>>>32-e),4294967295&(n[1]<<e|n[0]>>>32-e)]:(e-=32,[4294967295&(n[1]<<e|n[0]>>>32-e),4294967295&(n[0]<<e|n[1]>>>32-e)])}function o(n,e){return[n[0]^e[0],n[1]^e[1]]}function i(n){let e=n;return e=o(e,[0,e[0]>>>1]),e=t(e,[4283543511,3981806797]),e=o(e,[0,e[0]>>>1]),e=t(e,[3301882366,444984403]),e=o(e,[0,e[0]>>>1]),e}function a(n,a=0){const c=function(n){const e=[];for(let t=0;t<n.length;t+=4){let r=0;for(let e=Math.min(3,n.length-t-1);e>=0;e--)r=r<<8|n.charCodeAt(t+e);e.push(r)}return e}(n),s=Math.floor(c.length/4);let u=[0,a],l=[0,a];const d=[2277735313,289559509],f=[1291169091,658871167];for(let n=0;n<s;n++){const i=4*n,a=4*n+2;let s=[c[i+1]||0,c[i]||0],m=[c[a+1]||0,c[a]||0];s=t(s,d),s=r(s,31),s=t(s,f),u=o(u,s),u=r(u,27),u=e(u,l),u=e(t(u,[0,5]),[0,1390208809]),m=t(m,f),m=r(m,33),m=t(m,d),l=o(l,m),l=r(l,31),l=e(l,u),l=e(t(l,[0,5]),[0,944331445])}const m=4*s,p=c.length-m;let h=[0,0],w=[0,0];return p>=12&&(w=o(w,[c[m+3]||0,0])),p>=8&&(w=o(w,[0,c[m+2]||0]),w=t(w,f),w=r(w,33),w=t(w,d),l=o(l,w)),p>=4&&(h=o(h,[c[m+1]||0,0])),p>=1&&(h=o(h,[0,c[m]||0]),h=t(h,d),h=r(h,31),h=t(h,f),u=o(u,h)),u=o(u,[0,n.length]),l=o(l,[0,n.length]),u=e(u,l),l=e(l,u),u=i(u),l=i(l),u=e(u,l),l=e(l,u),(u[0]>>>0).toString(16).padStart(8,"0")+(u[1]>>>0).toString(16).padStart(8,"0")+((l[0]>>>0).toString(16).padStart(8,"0")+(l[1]>>>0).toString(16).padStart(8,"0"))}function c(n){let e=0;if(0===n.length)return e.toString(36);for(let t=0;t<n.length;t++)e=(e<<5)-e+n.charCodeAt(t),e&=e;return Math.abs(e).toString(36)}function s(n){return["duration","timestamp","error","errors","collectionTime","startTime","endTime","_timestamp"].includes(n)||n.endsWith("_timestamp")||n.endsWith("Timestamp")}function u(n){if(null==n)return null;if(Array.isArray(n))return n.map(n=>u(n)).filter(n=>null!==n).sort((n,e)=>JSON.stringify(n).localeCompare(JSON.stringify(e)));if("object"==typeof n){const e=Object.keys(n).sort(),t={};for(const r of e){if(s(r))continue;const e=u(n[r]);null!==e&&(t[r]=e)}return t}return"number"==typeof n?Number.isFinite(n)?Math.abs(n)<1e-4?0:Math.abs(n)>1e6?n>0?1e6:-1e6:Number(n>=.1&&n<=10?n.toFixed(3):n.toFixed(2)):0:"string"==typeof n?n.trim().toLowerCase():"boolean"==typeof n?n:null}const l={SAMPLE_RATE:44100,DURATION:.1,FREQUENCIES:[440,1e3,1760,3520],COMPRESSOR_THRESHOLD:-50,COMPRESSOR_KNEE:40,COMPRESSOR_RATIO:12,COMPRESSOR_ATTACK:.003,COMPRESSOR_RELEASE:.25,FILTER_FREQUENCY:2e3,GAIN_VALUE:.5,DELAY_TIME:.02};function d(){try{const n=window.OfflineAudioContext||window.webkitOfflineAudioContext;if(!n)return null;const e=44100,t=l.DURATION;return new n(1,Math.floor(e*t),e)}catch{return null}}async function f(n){try{const e=l.FREQUENCIES.map((e,t)=>{const r=n.createOscillator(),o=["sine","square","sawtooth","triangle"],i=o[t%o.length];return r.type=i||"sine",r.frequency.setValueAtTime(e,n.currentTime),r}),t=n.createDynamicsCompressor(),r=n.createBiquadFilter(),o=n.createGain(),i=n.createDelay(),a=n.createAnalyser();t.threshold.setValueAtTime(l.COMPRESSOR_THRESHOLD,n.currentTime),t.knee.setValueAtTime(l.COMPRESSOR_KNEE,n.currentTime),t.ratio.setValueAtTime(l.COMPRESSOR_RATIO,n.currentTime),t.attack.setValueAtTime(l.COMPRESSOR_ATTACK,n.currentTime),t.release.setValueAtTime(l.COMPRESSOR_RELEASE,n.currentTime),r.type="bandpass",r.frequency.setValueAtTime(l.FILTER_FREQUENCY,n.currentTime),r.Q.setValueAtTime(.7,n.currentTime),o.gain.setValueAtTime(l.GAIN_VALUE,n.currentTime),i.delayTime.setValueAtTime(l.DELAY_TIME,n.currentTime);const s=n.createGain();s.gain.setValueAtTime(.25,n.currentTime),e.forEach(n=>{n.connect(s)}),s.connect(r),r.connect(t),t.connect(o),o.connect(i),i.connect(a),a.connect(n.destination),e.forEach((n,e)=>{n.start(.01*e),n.stop(l.DURATION)});const u=(await n.startRendering()).getChannelData(0),d=[];for(let n=0;n<32;n++){const e=Math.floor(u.length/32*n);d.push(u[e]||0)}const f=Math.sqrt(d.reduce((n,e)=>n+e*e,0)/d.length),m=Math.max(...d.map(Math.abs)),p=d.reduce((n,e)=>n+Math.abs(e),0)/d.length;let h=0;for(let n=0;n<Math.min(d.length,16);n++){const e=d[n];void 0!==e&&(h+=n*Math.abs(e))}return c([...d,f,m,p,h].join(","))}catch(n){return c("multi_oscillator_error")}}async function m(n){try{const e=[100,440,1e3,2e3,4e3,8e3,12e3,16e3],t=[];for(const r of e){const e=n.createOscillator(),o=n.createAnalyser();e.type="sine",e.frequency.setValueAtTime(r,n.currentTime),o.fftSize=256,o.smoothingTimeConstant=0,e.connect(o),o.connect(n.destination),e.start(),e.stop(.05);const i=d();if(i){const n=i.createOscillator();n.type="sine",n.frequency.setValueAtTime(r,i.currentTime),n.connect(i.destination),n.start(),n.stop(.05);try{const n=(await i.startRendering()).getChannelData(0),e=Math.sqrt(n.reduce((n,e)=>n+e*e,0)/n.length);t.push(e)}catch{t.push(0)}}}return c(t.join(","))}catch(n){return c("frequency_response_error")}}async function p(n){try{const e=n.createOscillator(),t=n.createDynamicsCompressor();e.type="triangle",e.frequency.setValueAtTime(l.FREQUENCIES[0],n.currentTime),t.threshold.setValueAtTime(l.COMPRESSOR_THRESHOLD,n.currentTime),t.knee.setValueAtTime(l.COMPRESSOR_KNEE,n.currentTime),t.ratio.setValueAtTime(l.COMPRESSOR_RATIO,n.currentTime),t.attack.setValueAtTime(l.COMPRESSOR_ATTACK,n.currentTime),t.release.setValueAtTime(l.COMPRESSOR_RELEASE,n.currentTime),e.connect(t),t.connect(n.destination),e.start(),e.stop(l.DURATION);const r=(await n.startRendering()).getChannelData(0);return c([r[0]||0,r[Math.floor(.25*r.length)]||0,r[Math.floor(.5*r.length)]||0,r[Math.floor(.75*r.length)]||0,r[r.length-1]||0].join(","))}catch(n){return c("compressor_error")}}async function h(){var n;const e=performance.now();try{const t=function(){try{const n=window.OfflineAudioContext||window.webkitOfflineAudioContext;if(n)try{return new n(1,1,44100).sampleRate}catch{}const e=window.AudioContext||window.webkitAudioContext;if(e)try{const n=new e,t=n.sampleRate;return n.close().catch(()=>{}),t}catch{}}catch{}return 44100}(),r=function(){const n={};try{const e=d();if(e){n.sampleRate=e.sampleRate,n.length=e.length,n.state=e.state;const t=[],r=[8e3,22050,44100,48e3,96e3];for(const n of r)try{const e=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,1,n);e.sampleRate===n&&t.push(n),"close"in e&&"function"==typeof e.close&&e.close()}catch{}n.supportedSampleRates=t,"baseLatency"in e&&(n.baseLatency=e.baseLatency);try{const t=e.createBufferSource();n.channelCountMode=t.channelCountMode}catch{n.channelCountMode="max"}"close"in e&&"function"==typeof e.close&&e.close()}}catch(e){n.error="context_characteristics_error"}return n}(),o={multiOsc:d(),compressor:d(),frequencyResponse:d()};if(!o.multiOsc||!o.compressor||!o.frequencyResponse)throw new Error("OfflineAudioContext not available");const[i,a,s]=await Promise.all([f(o.multiOsc).catch(()=>"multi_oscillator_error"),p(o.compressor).catch(()=>"compressor_error"),m(o.frequencyResponse).catch(()=>"frequency_response_error")]),u={};try{const n=d();if(n){const e=["createOscillator","createAnalyser","createBiquadFilter","createConvolver","createDelay","createDynamicsCompressor","createGain","createWaveShaper","createStereoPanner","createChannelSplitter","createChannelMerger"];for(const t of e)try{"function"==typeof n[t]&&(n[t](),u[t]=!0)}catch{u[t]=!1}"close"in n&&"function"==typeof n.close&&n.close()}}catch{}const l=c([i,a,s,t.toString(),JSON.stringify(r),JSON.stringify(u)].join("|")),h=performance.now();return{value:{oscillator:i,compressor:a,sampleRate:t,maxChannelCount:(null===(n=r.supportedSampleRates)||void 0===n?void 0:n.length)||2,multiOscillatorFingerprint:i,frequencyResponseFingerprint:s,contextCharacteristics:r,nodeCapabilities:u,audioStackHash:l,supportedSampleRates:r.supportedSampleRates||[],channelCountMode:r.channelCountMode||"max"},duration:h-e}}catch(n){return{value:{oscillator:"error",compressor:"error",sampleRate:0,maxChannelCount:0,multiOscillatorFingerprint:"error",frequencyResponseFingerprint:"error",contextCharacteristics:{},nodeCapabilities:{},audioStackHash:"error",supportedSampleRates:[],channelCountMode:"max"},duration:performance.now()-e,error:n instanceof Error?n.message:"Audio fingerprinting failed"}}}function w(){try{return"WebKitAppearance"in document.documentElement.style||"webkitRequestFileSystem"in window||"webkitResolveLocalFileSystemURL"in window||Boolean(window.safari)}catch{return!1}}function y(){try{return"ontouchstart"in window&&("orientation"in window||"onorientationchange"in window)&&/android/i.test(navigator.userAgent)}catch{return!1}}function v(){try{if("brave"in navigator&&navigator.brave)return!0;const n=navigator.userAgent;return!!n.includes("Brave")||!(!window.chrome||!window.chrome.runtime||window.chrome.webstore||window.navigator.getBattery||!/Chrome/.test(n))}catch{return!1}}function g(){try{const n=navigator.userAgent;return!!(n.includes("Arc/")||window.arc||window.Arc||window.chrome&&window.chrome.runtime&&/Chrome/.test(n)&&(n.includes("ArcBrowser")||"arc:"===window.location.protocol))}catch{return!1}}function b(){try{if(window.opr||window.opera)return!0;const n=navigator.userAgent;return!(!n.includes("OPR/")&&!n.includes("Opera/"))}catch{return!1}}function M(){try{return!!navigator.userAgent.includes("Vivaldi/")||!!window.vivaldi}catch{return!1}}function S(){try{const n=navigator.userAgent;return n.includes("SamsungBrowser/")||n.includes("Samsung Internet")}catch{return!1}}function k(){try{return!(v()||g()||b()||M()||x()||S())&&Boolean(window.chrome&&(window.chrome.webstore||window.chrome.runtime)&&/Chrome/.test(navigator.userAgent)&&!/Edg|OPR|Opera|Vivaldi|SamsungBrowser|Arc|Brave/.test(navigator.userAgent))}catch{return!1}}function E(){try{return"InstallTrigger"in window||"mozInnerScreenX"in window||"mozPaintCount"in window||Boolean(navigator.mozApps)}catch{return!1}}function x(){try{return"msCredentials"in navigator||Boolean(window.StyleMedia)||k()&&/edg/i.test(navigator.userAgent)}catch{return!1}}function A(){try{return w()&&!k()&&!x()&&Boolean(window.safari)&&/safari/i.test(navigator.userAgent)}catch{return!1}}function C(){try{return window.isSecureContext||"https:"===location.protocol}catch{return!1}}function T(){try{return"webkitTemporaryStorage"in navigator||navigator.storage&&navigator.storage.estimate&&navigator.storage.estimate().then(n=>(n.quota||0)<104857600),!1}catch{return!1}}function _(){return v()||g()||b()||M()||S()||k()?"Blink":x()?"EdgeHTML/Blink":E()?"Gecko":w()||A()?"WebKit":"Unknown"}function R(){const n=function(){try{if(v())return"Brave";if(g())return"Arc";if(b())return"Opera";if(M())return"Vivaldi";if(S())return"Samsung Internet";if(x())return"Edge";if(E())return"Firefox";if(A())return"Safari";if(k())return"Chrome";const n=navigator.userAgent;return/Firefox/i.test(n)&&!k()?"Firefox":/Safari/i.test(n)&&!k()?"Safari":/Chrome/i.test(n)?"Chrome":"Unknown"}catch{return"Unknown"}}(),e=_(),t=["Brave","Arc","Opera","Vivaldi","Samsung Internet","Edge","Chrome"].includes(n);let r=n.toLowerCase();return t&&"Chrome"!==n&&(r=`${n.toLowerCase()}-chromium`),{name:n,engine:e,isChromiumBased:t,family:r}}function F(){try{return"undefined"!=typeof document&&"function"==typeof document.createElement&&void 0!==document.body}catch{return!1}}function O(){try{if(!F())return!1;const n=document.createElement("canvas"),e=n.getContext("webgl")||n.getContext("experimental-webgl");if(!e)return!1;const t=e,r=t.getParameter(t.RENDERER),o=Boolean(r&&"string"==typeof r),i=t.getExtension("WEBGL_lose_context");return i&&i.loseContext(),o}catch{return!1}}function I(){try{return!(!window.AudioContext&&!window.webkitAudioContext)}catch{return!1}}function P(){const n=F(),e=function(){try{return"undefined"!=typeof window&&"function"==typeof window.matchMedia}catch{return!1}}();return{engine:_(),supportsDOM:n,supportsMediaQueries:e,supportsWebGL:O(),supportsAudio:I(),isSecure:C(),isPrivateMode:T(),canRunDOMBlockers:(w()||y())&&n,canRunAccessibility:e,canRunBrowserAPIs:n&&"undefined"!=typeof navigator}}async function L(){const n=performance.now();try{const e=function(){try{const n=navigator.language||"";let e=[];navigator.languages?e=Array.from(navigator.languages):navigator.language&&(e=[navigator.language]);const t=[navigator.userLanguage,navigator.browserLanguage,navigator.systemLanguage].filter(Boolean);return e=[...new Set([...e,...t])],{language:n,languages:e}}catch{return{language:"",languages:[]}}}(),t=function(){try{let n="";if(Intl&&Intl.DateTimeFormat)try{n=Intl.DateTimeFormat().resolvedOptions().timeZone}catch{}if(!n){const e=new Date(2024,0,1).getTimezoneOffset(),t=e>0?"-":"+",r=Math.floor(Math.abs(e)/60),o=Math.abs(e)%60;n=`UTC${t}${r.toString().padStart(2,"0")}:${o.toString().padStart(2,"0")}`}return{timezone:n,timezoneOffset:new Date(2024,0,1).getTimezoneOffset()}}catch{return{timezone:"",timezoneOffset:0}}}(),r=function(){try{return{platform:navigator.platform||"",userAgent:navigator.userAgent||""}}catch{return{platform:"",userAgent:""}}}(),o=function(){try{const n=navigator.hardwareConcurrency||0;let e;"deviceMemory"in navigator&&(e=navigator.deviceMemory);const t={hardwareConcurrency:n};return void 0!==e&&(t.deviceMemory=e),t}catch{return{hardwareConcurrency:0}}}(),i=function(){try{const n=!1!==navigator.cookieEnabled;let e=null;return"doNotTrack"in navigator?e=navigator.doNotTrack:"msDoNotTrack"in navigator?e=navigator.msDoNotTrack:"mozDoNotTrack"in window&&(e=window.mozDoNotTrack),{cookieEnabled:n,doNotTrack:e}}catch{return{cookieEnabled:!0,doNotTrack:null}}}(),a=function(){try{if(!navigator.plugins)return{length:0,names:[]};const n=Array.from(navigator.plugins).map(n=>n.name).filter(n=>n).sort();return{length:navigator.plugins.length,names:n.slice(0,10)}}catch{return{length:0,names:[]}}}(),c=function(){try{let n=0,e=!1,t=!1;"maxTouchPoints"in navigator?n=navigator.maxTouchPoints:"msMaxTouchPoints"in navigator&&(n=navigator.msMaxTouchPoints);try{e="TouchEvent"in window}catch{e="ontouchstart"in window}return t="ontouchstart"in window,{maxTouchPoints:n,touchEvent:e,touchStart:t}}catch{return{maxTouchPoints:0,touchEvent:!1,touchStart:!1}}}(),s=function(){try{return R()}catch{return{name:"Unknown",engine:"Unknown",isChromiumBased:!1,family:"unknown"}}}(),u=performance.now(),l={language:e.language,languages:e.languages,timezone:t.timezone,timezoneOffset:t.timezoneOffset,platform:r.platform,userAgent:r.userAgent,browserInfo:s,hardwareConcurrency:o.hardwareConcurrency,cookieEnabled:i.cookieEnabled,doNotTrack:i.doNotTrack,plugins:a,touchSupport:c};void 0!==o.deviceMemory&&(l.deviceMemory=o.deviceMemory);const d=navigator.productSub;return"string"==typeof d&&d&&(l.productSub=d),l.applePayVersion=(()=>{try{if(void 0===globalThis.ApplePaySession)return 0;if("function"!=typeof globalThis.ApplePaySession.supportsVersion)return 0;for(let n=15;n>=1;n--)if(globalThis.ApplePaySession.supportsVersion(n))return n;return 0}catch{return 0}})(),{value:l,duration:u-n}}catch(e){return{value:{language:"",languages:[],timezone:"",timezoneOffset:0,platform:"",userAgent:"",hardwareConcurrency:0,cookieEnabled:!0,doNotTrack:null,plugins:{length:0,names:[]},touchSupport:{maxTouchPoints:0,touchEvent:!1,touchStart:!1}},duration:performance.now()-n,error:e instanceof Error?e.message:"Browser fingerprinting failed"}}}function N(n){var e;if(0===n.length)return 0;const t={};for(const r of n)t[r]=(null!==(e=t[r])&&void 0!==e?e:0)+1;let r=n[0];for(const n in t){const e=parseInt(n,10);t[e]>t[r]&&(r=e)}return r}function D(n,e,t){const r=n[0].data.length,o=new Uint8ClampedArray(r);for(let e=0;e<r;e++){const t=[];for(const r of n)t.push(r.data[e]);o[e]=N(t)}return new ImageData(o,e,t)}const B=["Zap Canvas 🎨🔒2024","Żółć gęślą jaźń €$¢£¥","αβγδεζηθικλμνξο","中文测试字体渲染","🌟🎯🚀💎🌊🎨"];function H(n){n.imageSmoothingEnabled=!0,n.imageSmoothingQuality="high";const e=n.createRadialGradient(75,75,0,75,75,50);e.addColorStop(0,"rgba(255, 0, 0, 0.8)"),e.addColorStop(.3,"rgba(0, 255, 0, 0.6)"),e.addColorStop(.7,"rgba(0, 0, 255, 0.4)"),e.addColorStop(1,"rgba(255, 255, 0, 0.2)"),n.fillStyle=e,n.fillRect(10,10,130,100),n.fillStyle="rgba(102, 204, 0, 0.7)",n.fillRect(15.5,15.3,49.7,49.2),n.fillStyle="#f60",n.fillRect(70.3,10.7,50.1,50.9),n.beginPath(),n.moveTo(25.2,120.1),n.bezierCurveTo(25.2,120.1,75.8,90.3,125.5,120.7),n.bezierCurveTo(125.5,120.7,90.1,150.2,60.8,140.9),n.closePath(),n.fillStyle="rgba(200, 100, 50, 0.6)",n.fill(),n.globalCompositeOperation="multiply",n.beginPath(),n.arc(50.7,80.3,20.1,0,2*Math.PI),n.fillStyle="rgba(255, 0, 100, 0.5)",n.fill(),n.beginPath(),n.arc(70.3,80.7,20.9,0,2*Math.PI),n.fillStyle="rgba(0, 255, 100, 0.5)",n.fill(),n.globalCompositeOperation="source-over",n.strokeStyle="rgba(50, 50, 50, 0.8)",n.lineWidth=.5,n.setLineDash([2.3,1.7]);for(let e=0;e<10;e++)n.beginPath(),n.moveTo(10+13.7*e,160),n.lineTo(50+11.3*e,200),n.stroke();n.setLineDash([]);const t=document.createElement("canvas");t.width=20,t.height=20;const r=t.getContext("2d");if(r){r.fillStyle="rgba(150, 75, 200, 0.3)",r.fillRect(0,0,10,10),r.fillRect(10,10,10,10);const e=n.createPattern(t,"repeat");e&&(n.fillStyle=e,n.fillRect(150,120,80,60))}n.shadowColor="rgba(0, 0, 0, 0.5)",n.shadowBlur=3.2,n.shadowOffsetX=2.1,n.shadowOffsetY=2.7,n.fillStyle="rgba(100, 200, 150, 0.8)",n.fillRect(160,30,60,40),n.shadowColor="transparent",n.shadowBlur=0,n.shadowOffsetX=0,n.shadowOffsetY=0}function $(n){const e=["14px Arial, sans-serif",'13px "Times New Roman", serif',"12px Georgia, serif","15px Helvetica, Arial, sans-serif",'11px "Courier New", monospace',"13px Verdana, sans-serif","16px Impact, fantasy",'12px "Comic Sans MS", cursive'],t=["#000","#333","#666","#999","rgba(255, 0, 0, 0.8)","rgba(0, 255, 0, 0.7)","rgba(0, 0, 255, 0.6)","rgba(128, 64, 192, 0.9)"],r=["top","hanging","middle","alphabetic","bottom"],o=["left","center","right"];let i=250;B.forEach((a,c)=>{e.forEach((e,s)=>{const u=(c+s)%t.length,l=s%r.length,d=s%o.length;n.font=e,n.fillStyle=t[u]||t[0],n.textBaseline=r[l]||"top",n.textAlign=o[d]||"left";const f=10+.7*s%200,m=i+18.3*s%100;n.fillText(a,f,m),s%2==0&&(n.strokeStyle=`rgba(${100+20*s}, ${50+15*s}, ${150+10*s}, 0.5)`,n.lineWidth=.3,n.strokeText(a,f+.5,m+.5))}),i+=120}),n.save(),n.translate(100,400),n.rotate(Math.PI/6),n.scale(1.2,.8),n.font="italic 14px Arial",n.fillStyle="rgba(200, 100, 50, 0.8)",n.fillText("Transformed & Rotated Text",0,0),n.restore(),n.font="6px Arial",n.fillStyle="#000",n.fillText("Tiny text rendering test",10,500),n.font="32px Arial",n.fillStyle="rgba(255, 0, 0, 0.5)",n.fillText("Large",10,540),n.textAlign="left",n.textBaseline="top"}async function G(){const n=performance.now();try{const e=document.createElement("canvas");e.width=300,e.height=600;const t=e.getContext("2d",{alpha:!0,desynchronized:!1,colorSpace:"srgb",willReadFrequently:!0});if(!t)throw new Error("Canvas 2D context not available");t.rect(0,0,10,10),t.rect(2,2,6,6);const r=t.isPointInPath(5,5,"evenodd");$(t);const o=c(e.toDataURL("image/png"));t.clearRect(0,0,e.width,e.height),H(t);const i=c(e.toDataURL("image/png")),a=function(n,e){try{n.clearRect(0,0,e.width,e.height),n.fillStyle="rgb(100, 150, 200)",n.fillRect(10.3,10.7,20.1,20.9),n.strokeStyle="rgb(200, 100, 50)",n.lineWidth=1.3,n.beginPath(),n.moveTo(15.2,35.8),n.lineTo(25.7,45.1),n.stroke();const t=n.getImageData(10,10,30,40).data;let r=0,o=0,i=0,a=0,c=0;for(let n=0;n<t.length;n+=4){const e=t[n]||0,s=t[n+1]||0,u=t[n+2]||0;if((t[n+3]||0)>25&&(r+=e,o+=s,i+=u,c++,n>=16)){const r=t[n-16]||0,o=Math.abs(e-r);o>=8&&(a+=o)}}if(0===c)return"no-valid-pixels";return`${10*Math.round(r/c/10)}-${10*Math.round(o/c/10)}-${10*Math.round(i/c/10)}-${10*Math.round(a/c/10)}`}catch(n){return"subpixel-error"}}(t,e),s=function(n,e,t,r){const o=[];let i=0;try{const a=r.getImageData(0,0,1,1);a&&0!==a.data.length||(o.push("getImageData-blocked"),i+=3),(n.length<8||e.length<8)&&(o.push("short-hash"),i+=2);const c=["error","blocked","disabled","00000000","ffffffff","12345678"];(c.includes(n)||c.includes(e))&&(o.push("known-blocked-hash"),i+=3),("subpixel-error"===t||t.includes("0-0-0"))&&(o.push("subpixel-anomaly"),i+=2),n===e&&"error"!==n&&(o.push("identical-hashes"),i+=2);const s=document.createElement("canvas");s.width=10,s.height=10;const u=s.getContext("2d");if(u){const n=performance.now();u.fillStyle="red",u.fillRect(0,0,10,10),s.toDataURL(),performance.now()-n>50&&(o.push("slow-canvas"),i+=1)}return{isInconsistent:i>=2,confidence:Math.min(i/5,1),reasons:o}}catch(n){return{isInconsistent:!0,confidence:1,reasons:["detection-error"]}}}(o,i,a,t);let u;s.isInconsistent||v()||S()?u=function(n,e,t,r=3){const o=[];for(let i=0;i<r;i++){const r=document.createElement("canvas");r.width=n,r.height=e;const i=r.getContext("2d",{willReadFrequently:!0});if(i){t(i);try{o.push(i.getImageData(0,0,n,e))}catch{}}}if(0===o.length)return"consensus-blocked";if(1===o.length)return c(Array.from(o[0].data).join(","));const i=D(o,n,e);return c(Array.from(i.data).join(","))}(e.width,e.height,n=>{$(n),n.globalCompositeOperation="multiply",H(n),n.globalCompositeOperation="source-over"}):(t.clearRect(0,0,e.width,e.height),$(t),t.globalCompositeOperation="multiply",H(t),t.globalCompositeOperation="source-over",u=c(e.toDataURL("image/png")));const l=performance.now();return{value:{text:o,geometry:i,winding:r,isInconsistent:s.isInconsistent,subPixelAnalysis:a,compositeHash:u,inconsistencyConfidence:s.confidence,blockingReasons:s.reasons},duration:l-n}}catch(e){return{value:{text:"error",geometry:"error",winding:!1,isInconsistent:!0,subPixelAnalysis:"error",compositeHash:"error",inconsistencyConfidence:1,blockingReasons:["canvas-error"]},duration:performance.now()-n,error:e instanceof Error?e.message:"Canvas fingerprinting failed"}}}const U=["Arial","Arial Black","Calibri","Cambria","Comic Sans MS","Consolas","Courier New","Georgia","Impact","Lucida Console","Lucida Sans Unicode","Microsoft Sans Serif","Palatino Linotype","Segoe UI","Tahoma","Times New Roman","Trebuchet MS","Verdana","American Typewriter","Avenir","Baskerville","Big Caslon","Brush Script MT","Copperplate","Didot","Futura","Gill Sans","Helvetica","Helvetica Neue","Hoefler Text","Lucida Grande","Marker Felt","Optima","Papyrus","Phosphate","Rockwell","Savoye LET","SignPainter","Skia","Snell Roundhand","System Font","Zapfino","DejaVu Sans","DejaVu Sans Mono","DejaVu Serif","Droid Sans","Droid Sans Mono","Droid Serif","Liberation Sans","Liberation Sans Narrow","Liberation Serif","Ubuntu","Ubuntu Mono","Roboto","Roboto Condensed","Roboto Mono","Roboto Slab","Droid Sans","Droid Sans Mono","Droid Serif","Helvetica Neue","Arial","Helvetica","Courier New","Times New Roman","San Francisco","Avenir Next","Open Sans","Lato","Montserrat","Source Sans Pro","Raleway","PT Sans","Lora","Playfair Display","Oswald","Slabo 27px","Fira Sans","Hiragino Sans","Hiragino Kaku Gothic ProN","Meiryo","MS Gothic","MS Mincho","SimSun","SimHei","Microsoft YaHei","Malgun Gothic","Apple SD Gothic Neo"],j=["monospace","sans-serif","serif"],V="mmMwWLliI0O&1 ※";function W(n,e){const t=document.createElement("canvas").getContext("2d");if(!t)return{width:0,height:0};t.font=`12px ${e}`;const r=t.measureText(n);return{width:r.width,height:r.actualBoundingBoxAscent+r.actualBoundingBoxDescent}}function z(n,e){const t=document.createElement("span");t.style.position="absolute",t.style.left="-9999px",t.style.top="-9999px",t.style.fontSize="12px",t.style.fontFamily=e,t.style.whiteSpace="nowrap",t.textContent=n,document.body.appendChild(t);const r=t.getBoundingClientRect(),o={width:r.width,height:r.height};return document.body.removeChild(t),o}function X(n,e="canvas"){const t="canvas"===e?W:z,r=j.map(n=>t(V,n)),o=j.map(e=>t(V,`${n}, ${e}`));for(let n=0;n<r.length;n++){const e=r[n],t=o[n];if(e&&t){const n=Math.abs(e.width-t.width),r=Math.abs(e.height-t.height);if(n>.1||r>.1)return!0}}return!1}function q(n){return 10*Math.round(n/10)}async function J(){const n=performance.now();try{const e=function(){try{return{width:screen.width||0,height:screen.height||0}}catch{return{width:0,height:0}}}(),t=screen.colorDepth||screen.pixelDepth||0,r=function(){try{return window.devicePixelRatio||1}catch{return 1}}(),o=function(){try{const n=screen.availWidth||0,e=screen.availHeight||0;return 0===n&&0===e?{width:q(screen.width||0),height:q(screen.height||0)}:{width:q(n),height:q(e)}}catch{return{width:q(screen.width||0),height:q(screen.height||0)}}}(),i=function(){try{const n=document.documentElement,e=Math.max(n.clientWidth||0,window.innerWidth||0),t=Math.max(n.clientHeight||0,window.innerHeight||0);return{width:q(e),height:q(t)}}catch{const n=window.innerWidth||0,e=window.innerHeight||0;return{width:q(n),height:q(e)}}}(),a=function(){try{if(screen.orientation)return{angle:screen.orientation.angle,type:screen.orientation.type};const n=screen.mozOrientation||screen.msOrientation||screen.webkitOrientation;if(void 0!==n)return{angle:n,type:"unknown"};const e=screen.width>screen.height;return{angle:e?90:0,type:e?"landscape-primary":"portrait-primary"}}catch{return}}(),c=performance.now(),s={width:e.width,height:e.height,colorDepth:t,pixelRatio:r,availableWidth:o.width,availableHeight:o.height,viewportWidth:i.width,viewportHeight:i.height};return a&&(s.orientation=a),{value:s,duration:c-n}}catch(e){return{value:{width:0,height:0,colorDepth:0,pixelRatio:1,viewportWidth:0,viewportHeight:0,availableWidth:0,availableHeight:0},duration:performance.now()-n,error:e instanceof Error?e.message:"Screen fingerprinting failed"}}}let Z=null,K=0,Y=0;function Q(){try{const n=performance.now();if(Z&&Z.isValid)if(n-Z.timestamp<18e5){if(Z.context&&!Z.context.isContextLost())return Z.usageCount++,Z.lastUsed=n,Z.context;nn()}else nn();if(K>=8)return console.warn("[WebGL Cache] Maximum context limit reached, reusing existing contexts"),null;const e=function(){try{if("undefined"==typeof document)return null;const n=document.createElement("canvas");return n.width=1,n.height=1,n}catch{return null}}();if(!e)return null;const t=function(n){try{const e={alpha:!1,antialias:!1,depth:!1,stencil:!1,preserveDrawingBuffer:!1,failIfMajorPerformanceCaveat:!0,powerPreference:"default"};return n.getContext("webgl",e)||n.getContext("experimental-webgl",e)}catch{return null}}(e);return t?(K++,Y++,Z={context:t,canvas:e,timestamp:n,isValid:!0,usageCount:1,lastUsed:n},t):null}catch(n){return nn(),null}}function nn(){if(Z){try{if(Z.context){const n=Z.context.getExtension("WEBGL_lose_context");n&&n.loseContext()}Z.canvas&&(Z.canvas.width=0,Z.canvas.height=0),K>0&&K--}catch{K>0&&K--}Z.isValid=!1,Z=null}}function en(){if(!Z||!Z.context)return!1;try{return!Z.context.isContextLost()}catch{return!1}}function tn(){const n=Q();if(!n)return[];try{const e=n.getSupportedExtensions();return e?Array.from(e).sort():[]}catch{return[]}}function rn(){const n=Q();if(!n)return{};try{const e={},t=["VERSION","VENDOR","RENDERER","SHADING_LANGUAGE_VERSION","MAX_TEXTURE_SIZE","MAX_RENDERBUFFER_SIZE","MAX_VIEWPORT_DIMS","MAX_VERTEX_ATTRIBS","MAX_VERTEX_UNIFORM_VECTORS","MAX_FRAGMENT_UNIFORM_VECTORS","MAX_VARYING_VECTORS"];for(const r of t)try{const t=n[r];void 0!==t&&(e[r]=n.getParameter(t))}catch{}return e}catch{return{}}}function on(){try{nn(),K=0,Y=0}catch(n){console.warn("[WebGL Cache] Cleanup error:",n)}}if("undefined"!=typeof window&&(window.addEventListener("beforeunload",on),window.addEventListener("pagehide",on),window.addEventListener("unload",on),document.addEventListener("visibilitychange",()=>{}),"memory"in performance&&"function"==typeof performance.memory.addEventListener))try{performance.memory.addEventListener("memorypressure",on)}catch(n){}var an=Object.freeze({__proto__:null,cleanupWebGLCache:on,forceCleanupWebGL:function(){nn(),K=0},getCachedWebGLContext:Q,getCachedWebGLExtensions:tn,getCachedWebGLParameters:rn,invalidateWebGLCache:nn,isWebGLContextValid:en});const cn={VENDOR:7936,RENDERER:7937,VERSION:7938,SHADING_LANGUAGE_VERSION:35724,MAX_VERTEX_ATTRIBS:34921,MAX_TEXTURE_SIZE:3379,MAX_RENDERBUFFER_SIZE:34024,MAX_VIEWPORT_DIMS:3386,ALIASED_LINE_WIDTH_RANGE:33902,ALIASED_POINT_SIZE_RANGE:33901,MAX_FRAGMENT_UNIFORM_VECTORS:36349,MAX_VERTEX_UNIFORM_VECTORS:36347,MAX_VARYING_VECTORS:36348,MAX_VERTEX_TEXTURE_IMAGE_UNITS:35660,MAX_TEXTURE_IMAGE_UNITS:34930,MAX_COMBINED_TEXTURE_IMAGE_UNITS:35661};function sn(n,e,t){const r=n.createShader(e);return r?(n.shaderSource(r,t),n.compileShader(r),n.getShaderParameter(r,n.COMPILE_STATUS)?r:(n.deleteShader(r),null)):null}function un(n,e,t){const r=n.createProgram();return r?(n.attachShader(r,e),n.attachShader(r,t),n.linkProgram(r),n.getProgramParameter(r,n.LINK_STATUS)?r:(n.deleteProgram(r),null)):null}function ln(n){const e=new Uint8Array(n.canvas.width*n.canvas.height*4);return n.readPixels(0,0,n.canvas.width,n.canvas.height,n.RGBA,n.UNSIGNED_BYTE,e),e}function dn(n){var e,t,r,o;let i=0;for(let a=0;a<n.length;a+=4)i=33*i+(null!==(e=n[a])&&void 0!==e?e:0)+256*(null!==(t=n[a+1])&&void 0!==t?t:0)+65536*(null!==(r=n[a+2])&&void 0!==r?r:0)+16777216*(null!==(o=n[a+3])&&void 0!==o?o:0)>>>0;return i.toString(16)}function fn(n){try{const e=n.getParameter(n.VENDOR)||"unknown",t=n.getParameter(n.RENDERER)||"unknown",r=n.getParameter(n.VERSION)||"unknown",o=`${e}|${t}|${r}|${n.getParameter(n.MAX_TEXTURE_SIZE)||0}|${n.getParameter(n.MAX_VERTEX_ATTRIBS)||0}|${n.getParameter(n.MAX_VIEWPORT_DIMS)||[0,0]}`;let i=0;for(let n=0;n<o.length;n++)i=(i<<5)-i+o.charCodeAt(n)&4294967295;return`fallback_${Math.abs(i).toString(16)}`}catch{return"webgl_unavailable"}}async function mn(){const n=performance.now();try{if(!hn())throw new Error("WebGL not supported in this browser");const e=Q();if(!e)throw new Error("WebGL context not available");if(!en())throw new Error("WebGL context lost");const t=function(){try{return rn()}catch{return{}}}(),r=t.VENDOR||"unknown",o=t.RENDERER||"unknown",i=t.VERSION||"unknown";let a=r,c=o;for(let n=0;n<3;n++)try{const n=e.getExtension("WEBGL_debug_renderer_info");if(n){const t=e.getParameter(n.UNMASKED_VENDOR_WEBGL),r=e.getParameter(n.UNMASKED_RENDERER_WEBGL);t&&"unknown"!==t&&(a=t),r&&"unknown"!==r&&(c=r);break}}catch(e){if(2===n)break;await new Promise(n=>setTimeout(n,10))}const s=function(){try{return tn()}catch{return[]}}(),u=function(n){const e={};return Object.entries(cn).forEach(([t,r])=>{const o=function(n,e){try{return n.getParameter(e)}catch{return null}}(n,r);null!==o&&(e[t]=Array.isArray(o)?o.join(","):o)}),["UNMASKED_VENDOR_WEBGL","UNMASKED_RENDERER_WEBGL"].forEach(t=>{try{const r=n.getExtension("WEBGL_debug_renderer_info");if(r){const o=r[t];if(void 0!==o){const r=n.getParameter(o);r&&(e[t]=r)}}}catch{}}),e}(e),l=function(n){const e=[],t=[];try{const r=[n.LOW_FLOAT,n.MEDIUM_FLOAT,n.HIGH_FLOAT,n.LOW_INT,n.MEDIUM_INT,n.HIGH_INT],o=["LOW_FLOAT","MEDIUM_FLOAT","HIGH_FLOAT","LOW_INT","MEDIUM_INT","HIGH_INT"];for(let i=0;i<r.length;i++){const a=r[i];if(void 0===a)continue;const c=n.getShaderPrecisionFormat(n.VERTEX_SHADER,a),s=n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,a);c&&e.push(`${o[i]}:${c.precision},${c.rangeMin},${c.rangeMax}`),s&&t.push(`${o[i]}:${s.precision},${s.rangeMin},${s.rangeMax}`)}}catch{}return{vertex:e.join(";"),fragment:t.join(";")}}(e),d=function(n){try{const e="\n attribute vec2 a_position;\n attribute vec3 a_color;\n varying vec3 v_color;\n uniform float u_time;\n \n void main() {\n // Complex mathematical operations to differentiate GPUs\n float wave = sin(a_position.x * 10.0 + u_time) * 0.1;\n vec2 position = a_position + vec2(wave, cos(a_position.y * 8.0) * 0.1);\n \n // GPU-specific floating point calculations\n float precision = sin(position.x * 123.456) + cos(position.y * 789.012);\n position += vec2(precision * 0.001);\n \n gl_Position = vec4(position, 0.0, 1.0);\n v_color = a_color;\n }\n ",t="\n precision mediump float;\n varying vec3 v_color;\n uniform float u_time;\n \n void main() {\n // Complex color calculations that vary between GPU vendors\n vec3 color = v_color;\n color.r += sin(gl_FragCoord.x * 0.1 + u_time) * 0.1;\n color.g += cos(gl_FragCoord.y * 0.1 + u_time) * 0.1;\n color.b += sin((gl_FragCoord.x + gl_FragCoord.y) * 0.05) * 0.1;\n \n // GPU-specific precision in color calculations\n color = normalize(color) * length(v_color);\n \n gl_FragColor = vec4(color, 1.0);\n }\n ",r=sn(n,n.VERTEX_SHADER,e),o=sn(n,n.FRAGMENT_SHADER,t);if(!r||!o)return fn(n);const i=un(n,r,o);if(!i)return fn(n);n.useProgram(i);const a=new Float32Array([-.8,-.6,1,.2,.3,0,.8,.3,1,.2,.8,-.6,.2,.3,1,-.5,-.2,.8,.9,.1,.3,.6,.1,.8,.9,.7,-.3,.9,.1,.8]),c=n.createBuffer();n.bindBuffer(n.ARRAY_BUFFER,c),n.bufferData(n.ARRAY_BUFFER,a,n.STATIC_DRAW);const s=n.getAttribLocation(i,"a_position"),u=n.getAttribLocation(i,"a_color"),l=n.getUniformLocation(i,"u_time");let d;if(n.enableVertexAttribArray(s),n.enableVertexAttribArray(u),n.vertexAttribPointer(s,2,n.FLOAT,!1,20,0),n.vertexAttribPointer(u,3,n.FLOAT,!1,20,8),n.uniform1f(l,1.23456789),n.enable(n.BLEND),n.blendFunc(n.SRC_ALPHA,n.ONE_MINUS_SRC_ALPHA),n.clearColor(.1,.2,.3,1),n.clear(n.COLOR_BUFFER_BIT),n.drawArrays(n.TRIANGLES,0,6),v()||S()){const r=n.canvas.width,o=n.canvas.height,i=[ln(n)];for(let n=0;n<2;n++){const n=document.createElement("canvas");n.width=r,n.height=o;const c=n.getContext("webgl");if(!c)continue;const s=e,u=t,l=sn(c,c.VERTEX_SHADER,s),d=sn(c,c.FRAGMENT_SHADER,u);if(!l||!d)continue;const f=un(c,l,d);if(!f)continue;c.useProgram(f);const m=c.createBuffer();c.bindBuffer(c.ARRAY_BUFFER,m),c.bufferData(c.ARRAY_BUFFER,a,c.STATIC_DRAW);const p=c.getAttribLocation(f,"a_position"),h=c.getAttribLocation(f,"a_color"),w=c.getUniformLocation(f,"u_time");c.enableVertexAttribArray(p),c.enableVertexAttribArray(h),c.vertexAttribPointer(p,2,c.FLOAT,!1,20,0),c.vertexAttribPointer(h,3,c.FLOAT,!1,20,8),c.uniform1f(w,1.23456789),c.enable(c.BLEND),c.blendFunc(c.SRC_ALPHA,c.ONE_MINUS_SRC_ALPHA),c.clearColor(.1,.2,.3,1),c.clear(c.COLOR_BUFFER_BIT),c.drawArrays(c.TRIANGLES,0,6),i.push(ln(c)),c.deleteProgram(f),c.deleteShader(l),c.deleteShader(d),c.deleteBuffer(m)}const c=D(i.map(n=>new ImageData(new Uint8ClampedArray(n),r,o)),r,o);d=dn(new Uint8Array(c.data))}else d=dn(ln(n));return n.deleteProgram(i),n.deleteShader(r),n.deleteShader(o),n.deleteBuffer(c),d}catch(e){return fn(n)}}(e),f=function(n){var e;const t={};try{const r=n.getExtension("WEBGL_debug_renderer_info");r&&(t.unmaskedVendor=n.getParameter(r.UNMASKED_VENDOR_WEBGL),t.unmaskedRenderer=n.getParameter(r.UNMASKED_RENDERER_WEBGL)),t.maxTextureSize=n.getParameter(n.MAX_TEXTURE_SIZE),t.maxCombinedTextureImageUnits=n.getParameter(n.MAX_COMBINED_TEXTURE_IMAGE_UNITS),t.maxViewportDims=n.getParameter(n.MAX_VIEWPORT_DIMS),t.maxRenderbufferSize=n.getParameter(n.MAX_RENDERBUFFER_SIZE),t.maxVertexAttribs=n.getParameter(n.MAX_VERTEX_ATTRIBS),t.maxVertexUniformVectors=n.getParameter(n.MAX_VERTEX_UNIFORM_VECTORS),t.maxFragmentUniformVectors=n.getParameter(n.MAX_FRAGMENT_UNIFORM_VECTORS),t.maxVaryingVectors=n.getParameter(n.MAX_VARYING_VECTORS),t.antialias=(null===(e=n.getContextAttributes())||void 0===e?void 0:e.antialias)||!1;const o=n.getExtension("OES_texture_float");t.floatTextures=!!o;const i=n.getExtension("OES_texture_half_float");t.halfFloatTextures=!!i;const a=n.getParameter(n.COMPRESSED_TEXTURE_FORMATS);t.compressedTextureFormats=Array.isArray(a)?a.length:0;const c=n instanceof WebGL2RenderingContext;if(t.webgl2=c,c){const e=n;t.maxColorAttachments=e.getParameter(e.MAX_COLOR_ATTACHMENTS),t.maxDrawBuffers=e.getParameter(e.MAX_DRAW_BUFFERS),t.maxTexture3DSize=e.getParameter(e.MAX_3D_TEXTURE_SIZE)}const s=n.getParameter(n.ALIASED_LINE_WIDTH_RANGE);t.lineWidthRange=Array.isArray(s)?s.join(","):"";const u=n.getParameter(n.ALIASED_POINT_SIZE_RANGE);t.pointSizeRange=Array.isArray(u)?u.join(","):""}catch(n){}return t}(e),m=(()=>{const n=`${a||r||""}|${c||o||""}`.toLowerCase();let e=0;for(let t=0;t<n.length;t++)e=(e<<5)-e+n.charCodeAt(t)&4294967295;return Math.abs(e).toString(16)})(),p=performance.now();return{value:{vendor:a,renderer:c,version:i,extensions:s,parameters:u,shaderPrecision:l,renderHash:d,capabilities:f,vendorRendererHash:m,contextAttributes:e.getContextAttributes()||{}},duration:p-n}}catch(e){return{value:{vendor:"unknown",renderer:"unknown",version:"unknown",extensions:[],parameters:{},shaderPrecision:{vertex:"",fragment:""},renderHash:"",capabilities:{},vendorRendererHash:"",contextAttributes:{}},duration:performance.now()-n,error:e instanceof Error?e.message:"WebGL fingerprinting failed"}}}let pn=null;function hn(){if(null!==pn)return pn;try{const n=document.createElement("canvas");n.width=1,n.height=1;const e=n.getContext("webgl",{failIfMajorPerformanceCaveat:!0,antialias:!1,alpha:!1,depth:!1,stencil:!1,preserveDrawingBuffer:!1})||n.getContext("experimental-webgl",{failIfMajorPerformanceCaveat:!0,antialias:!1,alpha:!1,depth:!1,stencil:!1,preserveDrawingBuffer:!1}),t=null!==e;if(e&&"getExtension"in e)try{const n=e.getExtension("WEBGL_lose_context");n&&n.loseContext()}catch(n){}return n.width=0,n.height=0,pn=t,t}catch{return pn=!1,!1}}function wn(){try{for(const n of["rec2020","p3","srgb"]){const e=Tn(`(color-gamut: ${n})`);if(null==e?void 0:e.matches)return n}return"unknown"}catch{return"unknown"}}function yn(){try{const n=Tn("(forced-colors: active)");if(null==n?void 0:n.matches)return!0;const e=Tn("(forced-colors: none)");return!(null==e?void 0:e.matches)&&null}catch{return null}}function vn(){try{const n=["no-preference","high","more","low","less","forced"];for(const e of n){const n=Tn(`(prefers-contrast: ${e})`);if(null==n?void 0:n.matches)return"high"===e?"more":"low"===e?"less":e}return"unknown"}catch{return"unknown"}}function gn(){try{const n=Tn("(prefers-reduced-motion: reduce)");if(null==n?void 0:n.matches)return!0;const e=Tn("(prefers-reduced-motion: no-preference)");return!(null==e?void 0:e.matches)&&null}catch{return null}}function bn(){try{return!!matchMedia("(prefers-reduced-transparency: reduce)").matches||!matchMedia("(prefers-reduced-transparency: no-preference)").matches&&null}catch{return null}}function Mn(){try{for(let n=8;n>=0;n--)if(matchMedia(`(monochrome: ${n})`).matches)return n;return 0}catch{return 0}}function Sn(){try{return!!matchMedia("(inverted-colors: inverted)").matches||!matchMedia("(inverted-colors: none)").matches&&null}catch{return null}}function kn(){try{return!!matchMedia("(dynamic-range: high)").matches||!matchMedia("(dynamic-range: standard)").matches&&null}catch{return null}}function En(){try{const n=[48,36,30,24,16,15,8];for(const e of n)if(matchMedia(`(color: ${e})`).matches)return e;return screen.colorDepth||24}catch{return screen.colorDepth||24}}function xn(){try{return matchMedia("(hover: hover)").matches?"hover":matchMedia("(hover: none)").matches?"none":"unknown"}catch{return"unknown"}}function An(){try{return matchMedia("(pointer: fine)").matches?"fine":matchMedia("(pointer: coarse)").matches?"coarse":matchMedia("(pointer: none)").matches?"none":"unknown"}catch{return"unknown"}}function Cn(){return P().canRunAccessibility}function Tn(n){try{return Cn()?matchMedia(n):null}catch(n){return null}}function _n(){try{return!!matchMedia("(prefers-reduced-data: reduce)").matches||!matchMedia("(prefers-reduced-data: no-preference)").matches&&null}catch{return null}}function Rn(){try{const n=["fullscreen","standalone","minimal-ui","browser"];for(const e of n)if(matchMedia(`(display-mode: ${e})`).matches)return e;return"unknown"}catch{return"unknown"}}function Fn(){try{const n=["opaque","additive","subtractive"];for(const e of n)if(matchMedia(`(environment-blending: ${e})`).matches)return e;return"unknown"}catch{return"unknown"}}function On(){try{return!!matchMedia("(any-hover: hover)").matches||!matchMedia("(any-hover: none)").matches&&null}catch{return null}}function In(){try{return matchMedia("(any-pointer: fine)").matches?"fine":matchMedia("(any-pointer: coarse)").matches?"coarse":matchMedia("(any-pointer: none)").matches?"none":"unknown"}catch{return"unknown"}}function Pn(){try{return matchMedia("(prefers-color-scheme: dark)").matches?"dark":matchMedia("(prefers-color-scheme: light)").matches?"light":matchMedia("(prefers-color-scheme: no-preference)").matches?"no-preference":"unknown"}catch{return"unknown"}}function Ln(){var n;try{for(const e of["enabled","initial-only","none"])if(null===(n=Tn(`(scripting: ${e})`))||void 0===n?void 0:n.matches)return e;return"unknown"}catch{return"unknown"}}function Nn(){var n;try{for(const e of["fast","slow","none"])if(null===(n=Tn(`(update: ${e})`))||void 0===n?void 0:n.matches)return e;return"unknown"}catch{return"unknown"}}function Dn(){const n=wn(),e=yn(),t=vn(),r=gn(),o=bn(),i=Mn(),a=Sn(),c=kn(),s=En(),u=xn(),l=An(),d=_n(),f=Rn(),m=Fn(),p=On(),h=In(),w=Pn(),y=Ln(),v=Nn(),g=Boolean(e||r||o||a||d||"no-preference"!==t||"no-preference"!==w||i>0),b=[n,c?"hdr":"sdr",`${s}bit`,i>0?`mono${i}`:"color",w,f,m].join("-"),M=[u,l,p?"anyhover":"nohover",h].join("-");return{colorGamut:n,forcedColors:e,contrastPreference:t,reducedMotion:r,reducedTransparency:o,monochromeDepth:i,invertedColors:a,hdrSupport:c,enhancedColorDepth:s,hoverCapability:u,pointerCapability:l,reducedData:d,displayMode:f,environmentBlending:m,anyHover:p,anyPointer:h,colorScheme:w,scripting:y,updateFrequency:v,hasAccessibilityFeatures:g,displayCapabilities:b,interactionCapabilities:M}}function Bn(n){const e=["unknown"!==n.colorGamut,null!==n.forcedColors,"unknown"!==n.contrastPreference,null!==n.reducedMotion,null!==n.reducedTransparency,null!==n.invertedColors,null!==n.hdrSupport,null!==n.reducedData,"unknown"!==n.displayMode,"unknown"!==n.environmentBlending,null!==n.anyHover,"unknown"!==n.colorScheme],t=e.filter(Boolean).length/e.length,r=[null!==n.reducedData,"unknown"!==n.displayMode,"unknown"!==n.environmentBlending,"unknown"!==n.colorScheme,null!==n.hdrSupport],o=r.filter(Boolean).length/r.length,i=[!0===n.forcedColors,!0===n.reducedMotion,!0===n.reducedTransparency,!0===n.invertedColors,!0===n.reducedData,"no-preference"!==n.contrastPreference,"dark"===n.colorScheme,n.monochromeDepth>0],a=i.filter(Boolean).length/i.length,c=["srgb"!==n.colorGamut,!0===n.forcedColors,!0===n.reducedMotion,!0===n.reducedTransparency,!0===n.invertedColors,!0===n.reducedData,n.monochromeDepth>0,!0===n.hdrSupport,"browser"!==n.displayMode,"opaque"!==n.environmentBlending,"dark"===n.colorScheme],s=c.filter(Boolean).length/c.length;return{confidence:Math.round(100*t)/100,uniqueness:Math.round(100*s)/100,accessibilityScore:Math.round(100*a)/100,modernBrowserScore:Math.round(100*o)/100}}var Hn=Object.freeze({__proto__:null,analyzeAccessibilityFingerprint:Bn,getAccessibilityFingerprint:Dn,getAnyHover:On,getAnyPointer:In,getColorGamut:wn,getColorScheme:Pn,getContrastPreference:vn,getDisplayMode:Rn,getEnhancedColorDepth:En,getEnvironmentBlending:Fn,getForcedColors:yn,getHDRSupport:kn,getHoverCapability:xn,getInvertedColors:Sn,getMonochromeDepth:Mn,getPointerCapability:An,getReducedData:_n,getReducedMotion:gn,getReducedTransparency:bn,getScriptingSupport:Ln,getUpdateFrequency:Nn,isAccessibilityDetectionAvailable:Cn});function $n(n){if("number"==typeof n)return{confidence:0,uniqueness:0,intlApiSupport:0,localeComplexity:0};const e=Object.values(n.intlSupport).filter(Boolean).length/Object.keys(n.intlSupport).length,t=[n.locale,n.calendar,n.numberingSystem,n.timeZone,n.dateStyle,n.timeStyle,n.hourCycle,n.numberLocale,n.currencyDisplay,n.currencySign,n.notation,n.signDisplay,n.listStyle,n.relativeTimeStyle,n.pluralRules],r=t.filter(n=>"unknown"!==n&&""!==n).length/t.length,o=[n.locale.length>2?1:0,"gregory"!==n.calendar?1:0,"latn"!==n.numberingSystem?1:0,n.hour12?1:0,n.localeMatch?0:1].reduce((n,e)=>n+e,0)/5,i=(r+e+o)/3;return{confidence:Math.round(100*r)/100,uniqueness:Math.round(100*i)/100,intlApiSupport:Math.round(100*e)/100,localeComplexity:Math.round(100*o)/100}}const Gn="mmMwWLliI0fiflO&1",Un={default:{text:Gn},serif:{style:{fontFamily:"serif"},text:Gn},sans:{style:{fontFamily:"sans-serif"},text:Gn},mono:{style:{fontFamily:"monospace"},text:Gn},apple:{style:{font:"-apple-system-body"},text:Gn},system:{style:{fontFamily:"system-ui"},text:Gn},min:{style:{fontSize:"1px"},text:Gn},large:{style:{fontSize:"72px"},text:Gn},ui:{style:{fontFamily:"ui-serif"},text:Gn},emoji:{style:{fontFamily:"Apple Color Emoji, Segoe UI Emoji, Noto Color Emoji"},text:"🎯🔥💯"},math:{style:{fontFamily:"STIX Two Math, Cambria Math"},text:"∑∆∇∂"},cjk:{style:{fontFamily:"Hiragino Sans, Microsoft YaHei, SimSun"},text:"中文测试"},arabic:{style:{fontFamily:"Tahoma, Arial Unicode MS"},text:"اختبار"},hebrew:{style:{fontFamily:"Tahoma, Arial Unicode MS"},text:"בדיקה"},subpixel:{style:{fontFamily:"Arial",fontSize:"11px",textRendering:"optimizeLegibility"},text:Gn},kerning:{style:{fontFamily:"Times",fontSize:"24px",fontKerning:"normal"},text:"AV To"},ligatures:{style:{fontFamily:"Times",fontSize:"24px",fontVariantLigatures:"common-ligatures"},text:"ffi ffl fi fl"}};function jn(n,e,t){try{const r="mmmmmmmmmmlli",o=Vn(n,e,{style:{fontFamily:t},text:r}),i=Vn(n,e,{style:{fontFamily:"monospace"},text:r});if(Math.abs(o-i)<1)return"monospace-fallback";const a=Vn(n,e,{style:{fontFamily:"sans-serif"},text:r});return Math.abs(o-a)<1?"sans-serif-fallback":"native-font"}catch(n){return"fallback-error"}}function Vn(n,e,t){const r=n.createElement("span"),{style:o={},text:i=Gn}=t;r.textContent=i,r.style.cssText="position: absolute; left: 0; top: 0; white-space: nowrap; visibility: hidden;",Object.entries(o).forEach(([n,e])=>{void 0!==e&&(r.style[n]=e)}),e.appendChild(r);const a=r.getBoundingClientRect().width;return e.removeChild(r),Math.round(100*a)/100}function Wn(n){const e=[n.default,n.serif,n.sans,n.mono,n.apple,n.system,n.min,n.large,n.ui,n.emoji,n.math,n.cjk,n.arabic,n.hebrew,n.subpixel,n.kerning,n.ligatures],t=e.some(n=>n>0),r=e.filter(n=>n>0).length,o=e.length;let i=t?r/o:0;(n.antiAliasing.enabled||n.systemFontHints.clearType)&&(i+=.2),Object.keys(n.fallbackBehavior).length>0&&(i+=.1),i=Math.min(i,1);const a=n.apple>0||n.system>0,c=[n.subpixel,n.kerning,n.ligatures,n.emoji,n.math].some(n=>n>0)||n.antiAliasing.enabled||n.systemFontHints.clearType,s=e.reduce((n,e)=>n+e,0)/e.length,u=e.reduce((n,e)=>n+Math.pow(e-s,2),0)/e.length;let l=Math.min(u/100,1);n.antiAliasing.smoothingLevel>0&&(l+=.1),n.systemFontHints.hintingLevel>0&&(l+=.1),l=Math.min(l,1);let d="low";const f=n.antiAliasing.smoothingLevel;f>50||n.systemFontHints.clearType?d="high":(f>20||n.systemFontHints.hintingLevel>2)&&(d="medium");const m="error"!==n.isolatedHash&&n.isolatedHash.length>0;return{confidence:Math.round(100*i)/100,uniqueness:Math.round(100*l)/100,hasSystemFonts:a,hasAdvancedFeatures:c,renderingQuality:d,isolationIntegrity:m}}const zn=["sans-serif-thin","ARNO PRO","Agency FB","Arabic Typesetting","Arial Unicode MS","AvantGarde Bk BT","BankGothic Md BT","Batang","Bitstream Vera Sans Mono","Calibri","Century","Century Gothic","Clarendon","EUROSTILE","Franklin Gothic","Futura Bk BT","Futura Md BT","GOTHAM","Gill Sans","HELV","Haettenschweiler","Helvetica Neue","Humanst521 BT","Leelawadee","Letter Gothic","Levenim MT","Lucida Bright","Lucida Sans","Menlo","MS Mincho","MS Outlook","MS Reference Specialty","MS UI Gothic","MT Extra","MYRIAD PRO","Marlett","Meiryo UI","Microsoft Uighur","Minion Pro","Monotype Corsiva","PMingLiU","Pristina","SCRIPTINA","Segoe UI Light","Serifa","SimHei","Small Fonts","Staccato222 BT","TRAJAN PRO","Univers CE 55 Medium","Vrinda","ZWAdobeF","Arial","Arial Black","Comic Sans MS","Courier New","Georgia","Impact","Palatino Linotype","Tahoma","Times New Roman","Trebuchet MS","Verdana","American Typewriter","Avenir","Baskerville","Big Caslon","Brush Script MT","Copperplate","Didot","Futura","Helvetica","Hoefler Text","Lucida Grande","Marker Felt","Optima","Papyrus","Phosphate","Rockwell","Savoye LET","SignPainter","Skia","Snell Roundhand","Zapfino","DejaVu Sans","DejaVu Sans Mono","DejaVu Serif","Liberation Sans","Liberation Serif","Ubuntu","Ubuntu Mono"],Xn="mmMwWLliI0O&1",qn="48px",Jn=["monospace","sans-serif","serif"];function Zn(n,e){const t=n.createElement("span");return t.style.position="absolute",t.style.top="0",t.style.left="0",t.style.fontFamily=e,t.style.fontSize=qn,t.style.whiteSpace="nowrap",t.textContent=Xn,t}function Kn(n,e,t){return Zn(n,`'${e}',${t}`)}function Yn(n,e){return Jn.some((t,r)=>{const o=n[r],i=e[t];return!(!o||!i||o.offsetWidth===i.width&&o.offsetHeight===i.height)})}function Qn(n){const{available:e,method:t,precision:r,totalTested:o,detectionTime:i}=n;let a=.5;"iframe"===t?a=.9:"dom"===t&&(a=.7),a*=r;const c=e.filter(n=>["Calibri","Segoe UI Light","MS UI Gothic","Arial Unicode MS"].includes(n)).length,s=e.filter(n=>["Helvetica Neue","Avenir","Menlo","Zapfino","Baskerville"].includes(n)).length,u=e.filter(n=>["DejaVu Sans","Liberation Sans","Ubuntu"].includes(n)).length,l=e.filter(n=>["sans-serif-thin","Roboto"].includes(n)).length;let d="unknown";c>=2?d="windows":s>=2?d="macos":u>=1?d="linux":l>=1&&(d="android");const f=Math.min(i<100?1:.8,1),m=["Arial","Times New Roman","Helvetica"],p=e.filter(n=>!m.includes(n)),h=Math.min(p.length/10,1);return{confidence:Math.round(100*a)/100,uniqueness:Math.round(100*h)/100,osSignature:d,browserCapabilities:Math.round(100*f)/100}}function ne(n){return`${n.available.sort().join(",")}|${n.method}|${n.precision.toFixed(2)}`}const ee=Math;function te(n,e,t,r){const o=(t-e)/r;let i=0;for(let t=0;t<r;t++)i+=n(e+(t+.5)*o);return i*o}const re=()=>0;function oe(){const n=ee.acos||re,e=ee.acosh||re,t=ee.asin||re,r=ee.asinh||re,o=ee.atanh||re,i=ee.atan||re,a=ee.sin||re,c=ee.sinh||re,s=ee.cos||re,u=ee.cosh||re,l=ee.tan||re,d=ee.tanh||re,f=ee.exp||re,m=ee.expm1||re,p=ee.log1p||re,h=ee.cbrt||re,w=ee.hypot||re,y=ee.log10||re,v=ee.log2||re;return{acos:n(.12312423423423424),asin:t(.12312423423423424),atan:i(.5),cos:s(10.000000000123),sin:a(-1e300),tan:l(-1e300),acosh:e(1e308),asinh:r(1),atanh:o(.5),cosh:u(1),sinh:c(1),tanh:d(1),exp:f(1),expm1:m(1),log1p:p(10),powPI:ee.pow(ee.PI,-100),cbrt:h(27),hypot:w(3,4),log10:y(100),log2:v(8),acoshPf:(g=1e154,ee.log(g+ee.sqrt(g*g-1))),asinhPf:ee.log(1+ee.sqrt(2)),atanhPf:ee.log(3)/2,sinhPf:(ee.exp(1)-ee.exp(-1))/2,coshPf:(ee.exp(1)+ee.exp(-1))/2,expm1Pf:ee.exp(1)-1,tanhPf:(ee.exp(2)-1)/(ee.exp(2)+1),log1pPf:ee.log(11),precision:{float32:ee.abs(0),float64:ee.abs(2-2.0000000000000004),bigNumbers:ee.abs(1),smallNumbers:ee.abs(1e-15+2e-15-3e-15)},largeCos:ee.cos(1e20),largeSin:ee.sin(1e20),largeTan:ee.tan(1e20),integratedAsin:te(ee.asin,-1,1,97),integratedCos:te(ee.cos,0,ee.PI,97),integratedSin:te(ee.sin,-ee.PI,ee.PI,97),integratedTan:te(ee.tan,0,2*ee.PI,97)};var g}function ie(){try{const n=oe();return[n.acos,n.asin,n.atan,n.cos,n.sin,n.tan,n.acosh,n.asinh,n.atanh,n.cosh,n.sinh,n.tanh,n.exp,n.expm1,n.log1p,n.powPI,n.cbrt,n.hypot,n.log10,n.log2,n.precision.float32,n.precision.float64,n.precision.bigNumbers,n.precision.smallNumbers].join(",")}catch{return"math-unavailable"}}function ae(n){let e=.9,t=.8;Object.values(n).some(n=>"number"==typeof n&&0!==n)||(e=.1,t=.1),e*=Object.values(n.precision).reduce((n,e)=>n+("number"!=typeof e||isNaN(e)?0:1),0)/4;let r="high";return e<.3?r="low":e<.7&&(r="medium"),{confidence:Math.round(100*e)/100,stability:r,uniqueness:Math.round(100*t)/100}}function ce(n,e){const t=n.match(new RegExp(`m=${e} [^\\s]+ [^\\s]+ ([^\\n\\r]+)`));return(t?t[1].split(" "):[]).map(t=>{var r;const o=new RegExp(`(rtpmap|fmtp|rtcp-fb):${t} (.+)`,"g"),i=[...n.matchAll(o)];if(!i.length)return null;const a={};for(const n of i){const t=n[1],o=n[2],i=o.split("/");"rtpmap"===t?(a.mimeType=`${e}/${i[0]}`,a.clockRate=Number(i[1]),"audio"===e&&(a.channels=Number(i[2])||1)):"rtcp-fb"===t?(null!==(r=a.feedbackSupport)&&void 0!==r||(a.feedbackSupport=[]),a.feedbackSupport.push(o)):"fmtp"===t&&(a.sdpFmtpLine=o)}return a}).filter(Boolean)}const se=["accelerometer","accessibility","accessibility-events","ambient-light-sensor","background-fetch","background-sync","bluetooth","camera","clipboard-read","clipboard-write","device-info","display-capture","geolocation","gyroscope","local-fonts","magnetometer","microphone","midi","nfc","notifications","payment-handler","persistent-storage","push","speaker","storage-access","top-level-storage-access","window-management"];async function ue(){const n={};return await Promise.allSettled(se.map(async e=>{try{const t=await navigator.permissions.query({name:e});n[e]=t.state}catch{}})),n}function le(n){var e;if(0===n.length)return"unknown";const t={};for(const r of n)t[r]=(null!==(e=t[r])&&void 0!==e?e:0)+1;let r=n[0];for(const n in t)t[n]>t[r]&&(r=n);return r}async function de(){var n;const e=performance.now();try{if(!(null===(n=null===navigator||void 0===navigator?void 0:navigator.permissions)||void 0===n?void 0:n.query))return{value:{},duration:performance.now()-e,error:"Permissions API not available"};const t=await Promise.all([ue(),ue(),ue()]),r={};for(const n of se){const e=t.map(e=>e[n]).filter(n=>void 0!==n);e.length>0&&(r[n]=le(e))}return{value:r,duration:performance.now()-e}}catch(n){return{value:{},duration:performance.now()-e,error:n instanceof Error?n.message:"Permissions fingerprinting failed"}}}function fe(n){return n.replace(/\\/g,"\\\\").replace(/,/g,"\\,")}async function me(){const e=performance.now();return new Promise(t=>{try{if("undefined"==typeof window||!window.speechSynthesis||"function"!=typeof window.speechSynthesis.getVoices)return void t({value:{supported:!1,voiceCount:0,voicesHash:"unsupported"},duration:performance.now()-e,error:"Speech Synthesis API not supported"});let r=!1,o=null;const i=i=>{if(!r){r=!0,o&&clearTimeout(o);try{const r=function(n){return n.map(n=>{var e,t,r;return[fe(null!==(e=n.voiceURI)&&void 0!==e?e:""),fe(null!==(t=n.name)&&void 0!==t?t:""),fe(null!==(r=n.lang)&&void 0!==r?r:""),n.localService?"1":"0",n.default?"1":"0"].join(",")}).sort()}(i);t({value:{supported:!0,voiceCount:i.length,voicesHash:c(n(r))},duration:performance.now()-e})}catch(n){t({value:{supported:!0,voiceCount:0,voicesHash:"error"},duration:performance.now()-e,error:n instanceof Error?n.message:"Voice processing failed"})}}},a=window.speechSynthesis.getVoices();if(a.length>0)return void i(a);o=setTimeout(()=>{i(window.speechSynthesis.getVoices())},800);const s=()=>{window.speechSynthesis.removeEventListener("voiceschanged",s),i(window.speechSynthesis.getVoices())};window.speechSynthesis.addEventListener("voiceschanged",s)}catch(n){t({value:{supported:!1,voiceCount:0,voicesHash:"error"},duration:performance.now()-e,error:n instanceof Error?n.message:"Speech synthesis error"})}})}const pe=[{exclude:["canvas"],browsers:["firefox","safari","brave"]},{exclude:["audio"],browsers:["safari","samsung"]},{exclude:["fonts"],browsers:["firefox"]},{exclude:["hardware","pluginsEnhanced"],browsers:["brave"]}],he=[{exclude:["system"],browsers:["safari"]},{exclude:["permissions"]}],we=[{exclude:["speech"],browsers:["brave","firefox"]}],ye=[["aspect-ratio","aspect-ratio: 1"],["container-type","container-type: inline-size"],["content-visibility","content-visibility: auto"],["field-sizing","field-sizing: content"],["subgrid","grid-template-columns: subgrid"],["masonry","grid-template-rows: masonry"],["has-selector","selector(:has(*))"],["is-selector","selector(:is(*))"],["where-selector","selector(:where(*))"],["focus-visible","selector(:focus-visible)"],["color-mix","color: color-mix(in srgb, red, blue)"],["oklch","color: oklch(0.5 0.2 200)"],["relative-color","color: hsl(from red h s l)"],["backdrop-filter","backdrop-filter: blur(10px)"],["text-wrap-balance","text-wrap: balance"],["text-wrap-pretty","text-wrap: pretty"],["overscroll-behavior","overscroll-behavior: none"],["scroll-behavior","scroll-behavior: smooth"],["view-transition","view-transition-name: auto"],["animation-timeline","animation-timeline: scroll()"],["animation-range","animation-range: 10% 90%"],["scroll-timeline","scroll-timeline: --t block"],["font-variant-numeric","font-variant-numeric: oldstyle-nums"],["hyphenate-character","hyphenate-character: auto"],["text-decoration-skip-ink","text-decoration-skip-ink: auto"],["hanging-punctuation","hanging-punctuation: first"],["individual-transform","translate: 10px"],["rotate-property","rotate: 45deg"],["margin-inline","margin-inline: auto"],["inset","inset: 0"],["contain","contain: layout"],["contain-intrinsic-size","contain-intrinsic-size: auto"],["cascade-layers","@layer"],["revert-layer","color: revert-layer"],["scrollbar-width","scrollbar-width: thin"],["scrollbar-color","scrollbar-color: red blue"],["webkit-text-stroke","-webkit-text-stroke: 1px black"],["webkit-line-clamp","-webkit-line-clamp: 2"],["css-nesting","selector(& .child)"],["forced-colors","(forced-colors: active)"]];function ve(n){try{return n.startsWith("selector(")||n.startsWith("(")||n.startsWith("@"),CSS.supports(n)}catch{return!1}}function ge(){try{return"undefined"!=typeof CSS&&"function"==typeof CSS.supports}catch{return!1}}const be=['video/mp4; codecs="avc1.42E01E"','video/mp4; codecs="avc1.4D001E"','video/mp4; codecs="hev1.1.6.L93.B0"','video/mp4; codecs="vp09.00.10.08"','video/mp4; codecs="av01.0.01M.08"','video/webm; codecs="vp8"','video/webm; codecs="vp9"','video/webm; codecs="av01.0.01M.08"','video/ogg; codecs="theora"'],Me=['audio/mp4; codecs="mp4a.40.2"','audio/mp4; codecs="mp4a.40.5"',"audio/mpeg",'audio/ogg; codecs="vorbis"','audio/ogg; codecs="opus"','audio/webm; codecs="opus"','audio/wav; codecs="1"',"audio/flac","audio/aac"],Se=['video/webm; codecs="vp8"','video/webm; codecs="vp9"','video/webm; codecs="av1"','video/webm; codecs="vp9,opus"','audio/webm; codecs="opus"','audio/ogg; codecs="opus"','video/mp4; codecs="avc1"'];function ke(){try{return"undefined"!=typeof document}catch{return!1}}const Ee=new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,253,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11]),xe=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,3,1,0,0,10,12,1,10,0,65,0,65,0,65,0,252,10,0,0,11]),Ae=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,13,3,1,0,0]),Ce=new Uint8Array([0,97,115,109,1,0,0,0,1,3,1,78,0]);function Te(n){try{return WebAssembly.validate(n)}catch{return!1}}const _e=["𝔸","𝔹","ℂ","𝔻","𝔼","𝔽","𝔾","ℍ","𝕀","𝕁","𝕂","𝕃"],Re=[["β","ψ"],["λ","ε"],["ζ","α"],["ξ","μ"],["ρ","φ"],["κ","τ"],["η","σ"],["ι","ω"],["γ","ν"],["χ","δ"],["θ","π"],["υ","ο"]],Fe=["<math><msubsup><mo>∫</mo><mi>a</mi><mi>b</mi></msubsup><mfrac><mrow><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mrow><mi>d</mi><mi>x</mi></mrow></mfrac></math>","<math><mfrac><mrow><mi>π</mi><mo>×</mo><msup><mi>r</mi><mn>2</mn></msup></mrow><mrow><mn>4</mn></mrow></mfrac></math>","<math><mo>[</mo><mtable><mtr><mtd><mi>α</mi></mtd><mtd><mi>β</mi></mtd></mtr><mtr><mtd><mi>γ</mi></mtd><mtd><mi>δ</mi></mtd></mtr></mtable><mo>]</mo></math>",`<math><munderover><mo>∏</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover><mrow>${_e.map((n,e)=>{const[t,r]=Re[e];return`<mmultiscripts><mi>${n}</mi><mi>${t}</mi><mi>${r}</mi></mmultiscripts>`}).join("")}</mrow></math>`,..._e.map((n,e)=>{const[t,r]=Re[e];return`<math><mmultiscripts><mi>${n}</mi><mi>${t}</mi><mi>${r}</mi></mmultiscripts></math>`})],Oe=["fontFamily","fontSize","fontWeight","fontStyle","lineHeight","fontVariant","fontStretch","fontKerning","fontFeatureSettings","fontVariantNumeric"];function Ie(n){let e=2166136261;for(let t=0;t<n.length;t++)e^=n.charCodeAt(t),e=(0|Math.imul(e,16777619))>>>0;return e.toString(16).padStart(8,"0")}async function Pe(){const e=performance.now();try{if(!Le())return{value:{supported:!1,dimensionsHash:"",fontStyleHash:""},duration:performance.now()-e,error:"document not available"};if(!function(){try{const n=document.createElement("div");n.style.cssText="position:absolute;visibility:hidden;top:-9999px;left:-9999px",n.innerHTML="<math><mrow><mi>x</mi></mrow></math>",document.body.appendChild(n);const e=n.querySelector("math"),t=null==e?void 0:e.getBoundingClientRect();return document.body.removeChild(n),!!(t&&t.width>0&&t.height>0)}catch{return!1}}())return{value:{supported:!1,dimensionsHash:"",fontStyleHash:""},duration:performance.now()-e};return{value:{supported:!0,dimensionsHash:Ie(n(Fe.map(n=>function(n){var e;const t=document.createElement("div");t.style.cssText="position:absolute;visibility:hidden;top:-9999px;left:-9999px;font-size:16px",t.innerHTML=n,document.body.appendChild(t);const r=t.querySelector("math"),o=null!==(e=null==r?void 0:r.getBoundingClientRect())&&void 0!==e?e:{width:0,height:0};return document.body.removeChild(t),{width:Math.round(100*o.width)/100,height:Math.round(100*o.height)/100}}(n)))),fontStyleHash:Ie(n(function(){var n;const e=document.createElement("div");e.style.cssText="position:absolute;visibility:hidden;top:-9999px;left:-9999px;font-size:16px",e.innerHTML="<math><mi>x</mi></math>",document.body.appendChild(e);const t=e.querySelector("math"),r=t?window.getComputedStyle(t):null,o={};for(const e of Oe)o[e]=r&&null!==(n=r[e])&&void 0!==n?n:"";return document.body.removeChild(e),o}()))},duration:performance.now()-e}}catch(n){return{value:{supported:!1,dimensionsHash:"",fontStyleHash:""},duration:performance.now()-e,error:n instanceof Error?n.message:"MathML fingerprinting failed"}}}function Le(){try{return"undefined"!=typeof document&&"function"==typeof document.createElement&&void 0!==document.body&&null!==document.body}catch{return!1}}async function Ne(){var n;const e=performance.now();try{if(!De())return{value:{available:!1},duration:performance.now()-e};const t=navigator.userAgentData,r=await t.getHighEntropyValues(["architecture","bitness","fullVersionList","mobile","model","platformVersion","formFactor","uaFullVersion"]);return{value:{available:!0,brands:null===(n=r.fullVersionList)||void 0===n?void 0:n.map(n=>{var e,t;return{brand:null!==(e=n.brand)&&void 0!==e?e:"",version:null!==(t=n.version)&&void 0!==t?t:""}}),mobile:r.mobile,platform:t.platform,platformVersion:r.platformVersion,architecture:r.architecture,bitness:r.bitness,model:r.model,uaFullVersion:r.uaFullVersion,formFactor:r.formFactor},duration:performance.now()-e}}catch(n){return{value:{available:!1},duration:performance.now()-e,error:n instanceof Error?n.message:"Client Hints fingerprinting failed"}}}function De(){var n;try{return"undefined"!=typeof navigator&&"userAgentData"in navigator&&"function"==typeof(null===(n=navigator.userAgentData)||void 0===n?void 0:n.getHighEntropyValues)}catch{return!1}}const Be={gdprMode:!1,includeInvasive:!0,timeout:5e3,debug:!1,excludeComponents:[]},He=new Map;function $e(n,e){return!(e.excludeComponents.includes(n)||e.gdprMode&&!e.includeInvasive&&["canvas","webgl","audio","fontPreferences","enhancedFonts"].includes(n)||(["mathFingerprint","dateTimeLocale","accessibilityEnhanced","fontPreferences","enhancedFonts","webrtc","permissions","speech","cssFeatures","mediaCodecs","wasmFeatures","mathml","clientHints"].includes(n),0))}function Ge(n,e){He.set(n,e)}async function Ue(n,e,t){const r=`${n}_${t.gdprMode}`,o=(i=r,He.get(i)||null);var i;if(o)return o;const a="webgl"===n,c=["canvas","webgl","audio","hardware","system"].includes(n),s=a?2:c?3:1,u=a?[200,500]:[100,250,500];for(let o=0;o<s;o++)try{const i=t.timeout+o*(a?2e3:1e3),c=new Promise((e,t)=>{setTimeout(()=>t(new Error(`${n} timeout after ${i}ms (attempt ${o+1})`)),i)}),s=await Promise.race([e(),c]);if(null!=s)return Ge(r,s),s;throw new Error(`${n} returned null/undefined result`)}catch(e){const t=o===s-1,r=e instanceof Error?e.message:String(e);if(a&&r.includes("context")){console.warn(`[RabbitTracker] WebGL context issue detected: ${r}`);try{const{forceCleanupWebGL:n}=await Promise.resolve().then(function(){return an});n()}catch(n){}return null}if(t)return console.warn(`[RabbitTracker] Component ${n} failed after ${s} attempts: ${r}`),null;!r.includes("timeout")&&o<u.length&&await new Promise(n=>setTimeout(n,u[o])),a&&await new Promise(n=>setTimeout(n,100))}return null}async function je(e={}){var t,r,o,i,s,l,d,f;const m=performance.now(),p={...Be,...e},y=[],g=[],b={collectionTime:m,gdprMode:p.gdprMode,components:[]},M=[];if($e("canvas",p)&&function(){try{const n=document.createElement("canvas").getContext("2d");return null!==n&&"function"==typeof n.fillText}catch{return!1}}()&&M.push(Ue("canvas",G,p).then(n=>({component:"canvas",result:n}))),$e("webgl",p)&&hn()&&M.push(Ue("webgl",mn,p).then(n=>({component:"webgl",result:n}))),$e("audio",p)&&function(){try{return"function"==typeof(window.OfflineAudioContext||window.webkitOfflineAudioContext)||"function"==typeof(window.AudioContext||window.webkitAudioContext)}catch{return!1}}()&&M.push(Ue("audio",h,p).then(n=>({component:"audio",result:n}))),$e("fonts",p)&&function(){try{const n=document.createElement("span");return n&&"object"==typeof n.style}catch{return!1}}()&&M.push(Ue("fonts",()=>async function(n=!0){const e=performance.now();try{let t;if(n&&function(){try{const n=document.createElement("canvas").getContext("2d");return null!==n&&"function"==typeof n.measureText}catch{return!1}}()){const{available:n,measurements:e}=function(){const n=[],e={};for(const t of U)try{const r=W(V,t);e[t]=r,X(t,"canvas")&&n.push(t)}catch(n){continue}return{available:n,measurements:e}}();t={available:n.sort(),method:"advanced",measurements:e}}else t={available:function(){const n=[];for(const e of U)try{X(e,"dom")&&n.push(e)}catch(n){continue}return n}().sort(),method:"basic"};return{value:t,duration:performance.now()-e}}catch(n){return{value:{available:[],method:"basic"},duration:performance.now()-e,error:n instanceof Error?n.message:"Font detection failed"}}}(!p.gdprMode),p).then(n=>({component:"fonts",result:n}))),$e("screen",p)&&function(){try{return"object"==typeof screen&&"number"==typeof screen.width&&"number"==typeof screen.height}catch{return!1}}()&&M.push(Ue("screen",J,p).then(n=>({component:"screen",result:n}))),$e("browser",p)&&function(){try{return"object"==typeof navigator&&null!==navigator}catch{return!1}}()&&M.push(Ue("browser",L,p).then(n=>({component:"browser",result:n}))),$e("webrtc",p)&&function(){try{return!!(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection)}catch{return!1}}()&&M.push(Ue("webrtc",()=>async function(e=4500){const t=performance.now();return new Promise(r=>{try{const o=window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection;if(!o)return void r({value:{supported:!1,extensionsHash:"unsupported",audio:{count:0,hash:"unsupported"},video:{count:0,hash:"unsupported"},candidateType:null},duration:performance.now()-t});const i=new o({iceCandidatePoolSize:1,iceServers:[]});i.createDataChannel(""),(async()=>{var o,a;try{const s=await i.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0});await i.setLocalDescription(s);const u=null!==(o=s.sdp)&&void 0!==o?o:"",l=[...new Set((null!==(a=u.match(/extmap:\d+ [^\n\r]+/g))&&void 0!==a?a:[]).map(n=>n.replace(/extmap:\d+ /,"")))].sort(),d=ce(u,"audio"),f=ce(u,"video"),m={extensionsHash:c(n(l)),audio:{count:d.length,hash:c(n(d))},video:{count:f.length,hash:c(n(f))}},p=Math.floor(.9*e),h=await new Promise(n=>{const e=setTimeout(()=>{i.removeEventListener("icecandidate",t),i.close(),n(null)},p),t=r=>{var o,a;(null===(o=r.candidate)||void 0===o?void 0:o.candidate)&&(clearTimeout(e),i.removeEventListener("icecandidate",t),i.close(),n(null!==(a=r.candidate.type)&&void 0!==a?a:null))};i.addEventListener("icecandidate",t)});r({value:{supported:!0,...m,candidateType:h,timedOut:null===h},duration:performance.now()-t})}catch(n){i.close(),r({value:{supported:!0,extensionsHash:"offer-error",audio:{count:0,hash:"offer-error"},video:{count:0,hash:"offer-error"},candidateType:null},duration:performance.now()-t,error:n instanceof Error?n.message:"WebRTC offer failed"})}})()}catch(n){r({value:{supported:!1,extensionsHash:"error",audio:{count:0,hash:"error"},video:{count:0,hash:"error"},candidateType:null},duration:performance.now()-t,error:n instanceof Error?n.message:"WebRTC error"})}})}(p.timeout),p).then(n=>({component:"webrtc",result:n}))),$e("permissions",p)&&function(){var n;try{return"undefined"!=typeof navigator&&"function"==typeof(null===(n=navigator.permissions)||void 0===n?void 0:n.query)}catch{return!1}}()&&M.push(Ue("permissions",de,p).then(n=>({component:"permissions",result:n}))),!p.gdprMode&&$e("speech",p)&&function(){var n;try{return"undefined"!=typeof window&&"function"==typeof(null===(n=window.speechSynthesis)||void 0===n?void 0:n.getVoices)}catch{return!1}}()&&M.push(Ue("speech",me,p).then(n=>({component:"speech",result:n}))),$e("cssFeatures",p)&&ge()&&M.push(Ue("cssFeatures",async()=>function(){const e=performance.now();try{if(!ge())return{value:{features:{},supportedCount:0,hash:""},duration:performance.now()-e,error:"CSS.supports not available"};const t={};for(const[n,e]of ye)t[n]=ve(e);const r=Object.values(t).filter(Boolean).length,o=function(e){const t=n(e);let r=2166136261;for(let n=0;n<t.length;n++)r^=t.charCodeAt(n),r=(0|Math.imul(r,16777619))>>>0;return r.toString(16).padStart(8,"0")}(t);return{value:{features:t,supportedCount:r,hash:o},duration:performance.now()-e}}catch(n){return{value:{features:{},supportedCount:0,hash:""},duration:performance.now()-e,error:n instanceof Error?n.message:"CSS features fingerprinting failed"}}}(),p).then(n=>({component:"cssFeatures",result:n}))),$e("mediaCodecs",p)&&ke()&&M.push(Ue("mediaCodecs",async()=>function(){const e=performance.now();try{if(!ke())return{value:{video:{},audio:{},recorder:{},hash:""},duration:performance.now()-e,error:"document not available"};const t=document.createElement("video"),r={};for(const n of be)try{r[n]=t.canPlayType(n)}catch{r[n]=""}const o=document.createElement("audio"),i={};for(const n of Me)try{i[n]=o.canPlayType(n)}catch{i[n]=""}const a={},c="undefined"!=typeof MediaRecorder&&"function"==typeof MediaRecorder.isTypeSupported;for(const n of Se)try{a[n]=!!c&&MediaRecorder.isTypeSupported(n)}catch{a[n]=!1}const s=function(e,t,r){const o=n({video:e,audio:t,recorder:r});let i=2166136261;for(let n=0;n<o.length;n++)i^=o.charCodeAt(n),i=(0|Math.imul(i,16777619))>>>0;return i.toString(16).padStart(8,"0")}(r,i,a);return{value:{video:r,audio:i,recorder:a,hash:s},duration:performance.now()-e}}catch(n){return{value:{video:{},audio:{},recorder:{},hash:""},duration:performance.now()-e,error:n instanceof Error?n.message:"Media codecs fingerprinting failed"}}}(),p).then(n=>({component:"mediaCodecs",result:n}))),$e("wasmFeatures",p)&&function(){try{return"undefined"!=typeof WebAssembly&&"function"==typeof WebAssembly.validate}catch{return!1}}()&&M.push(Ue("wasmFeatures",async()=>function(){const n=performance.now();try{if("undefined"==typeof WebAssembly)return{value:{basic:!1,validate:!1,compile:!1,simd:!1,threads:!1,bulkMemory:!1,exceptions:!1,gc:!1},duration:performance.now()-n};const e="function"==typeof WebAssembly.validate;return{value:{basic:!0,validate:e,compile:"function"==typeof WebAssembly.compile,simd:!!e&&Te(Ee),threads:"undefined"!=typeof SharedArrayBuffer,bulkMemory:!!e&&Te(xe),exceptions:!!e&&Te(Ae),gc:!!e&&Te(Ce)},duration:performance.now()-n}}catch(e){return{value:{basic:!1,validate:!1,compile:!1,simd:!1,threads:!1,bulkMemory:!1,exceptions:!1,gc:!1},duration:performance.now()-n,error:e instanceof Error?e.message:"Wasm features fingerprinting failed"}}}(),p).then(n=>({component:"wasmFeatures",result:n}))),$e("mathml",p)&&Le()&&M.push(Ue("mathml",Pe,p).then(n=>({component:"mathml",result:n}))),!p.gdprMode&&$e("clientHints",p)&&De()&&M.push(Ue("clientHints",Ne,p).then(n=>({component:"clientHints",result:n}))),(await Promise.allSettled(M)).forEach((n,e)=>{var t,r;if("fulfilled"===n.status&&n.value.result){const{component:e,result:t}=n.value;b[e]=t,y.push(e)}else{const o=M[e],i=(null===(t=null==o?void 0:o.toString().match(/component: "(\w+)"/))||void 0===t?void 0:t[1])||"unknown";g.push({component:i,error:"rejected"===n.status?(null===(r=n.reason)||void 0===r?void 0:r.message)||"Promise rejected":"Collection failed or timeout"})}}),!p.gdprMode)try{const{detectIncognitoHeuristics:n}=await import("./incognito-CkKAdE8Z.min.js"),e=await n();e&&(b.incognitoDetection={likelihood:e.likelihood,methods:e.methods},y.push("incognito"))}catch(n){g.push({component:"incognito",error:n instanceof Error?n.message:"Incognito detection failed"})}if($e("hardware",p))try{const n=await import("./hardware-9ikfSEs-.min.js").catch(()=>null);if(null===(t=null==n?void 0:n.isHardwareDetectionAvailable)||void 0===t?void 0:t.call(n)){const e=null===(r=n.getHardwareFingerprint)||void 0===r?void 0:r.call(n);e&&(b.hardware={value:e,duration:0},y.push("hardware"))}else if(!n){const n={hardwareConcurrency:navigator.hardwareConcurrency||0,deviceMemory:navigator.deviceMemory||0,platform:navigator.platform||"unknown"};b.hardware={value:n,duration:0},y.push("hardware")}}catch(n){g.push({component:"hardware",error:n instanceof Error?n.message:"Hardware detection failed"})}if($e("system",p))try{const{getSystemFingerprint:n,isSystemDetectionAvailable:e}=await import("./system-DTjxyOZF.min.js");if(e()){const e=n();e&&(b.system={value:e,duration:0},y.push("system"))}}catch(n){g.push({component:"system",error:n instanceof Error?n.message:"System detection failed"})}if($e("storage",p))try{const{getStorageFingerprint:n,isStorageDetectionAvailable:e}=await import("./storage-Bl_8oytT.min.js");if(e()){const e=performance.now(),t=await n(),r=performance.now()-e;t&&(b.storage={value:t,duration:r},y.push("storage"))}}catch(n){g.push({component:"storage",error:n instanceof Error?n.message:"Storage detection failed"})}if($e("math",p))try{const{getCompleteMathFingerprint:n,isMathDetectionAvailable:e}=await import("./math-Q4s6nkVD.min.js");if(e()){const e=performance.now(),t=n(),r=performance.now()-e;t&&(b.math={value:t,duration:r},y.push("math"))}}catch(n){g.push({component:"math",error:n instanceof Error?n.message:"Math fingerprinting failed"})}if($e("domBlockers",p))try{const{getDomBlockersFingerprint:n,isDomBlockersDetectionAvailable:e}=await import("./dom-blockers-C467-IRd.min.js");if(e()){const e=performance.now(),t=await n({debug:p.debug}),r=performance.now()-e;t&&(b.domBlockers={value:t,duration:r},y.push("domBlockers"))}}catch(n){g.push({component:"domBlockers",error:n instanceof Error?n.message:"DOM blockers detection failed"})}if($e("accessibility",p))try{const{getAccessibilityFingerprint:n,isAccessibilityDetectionAvailable:e}=await Promise.resolve().then(function(){return Hn});if(e()){const e=performance.now(),t=n(),r=performance.now()-e;t&&(b.accessibility={value:t,duration:r},y.push("accessibility"))}}catch(n){g.push({component:"accessibility",error:n instanceof Error?n.message:"Accessibility detection failed"})}if($e("browserApis",p))try{const{getBrowserApisFingerprint:n,isBrowserApisDetectionAvailable:e}=await import("./browser-apis-AyU2utpF.min.js");if(e()){const e=performance.now(),t=n(),r=performance.now()-e;t&&(b.browserApis={value:t,duration:r},y.push("browserApis"))}}catch(n){g.push({component:"browserApis",error:n instanceof Error?n.message:"Browser APIs detection failed"})}if($e("pluginsEnhanced",p))try{const{getEnhancedPluginFingerprint:n,isEnhancedPluginDetectionAvailable:e}=await import("./plugins-enhanced-mUjU1EXe.min.js");if(e()){const e=performance.now(),t=n(),r=performance.now()-e;t&&(b.pluginsEnhanced={value:t,duration:r},y.push("pluginsEnhanced"))}}catch(n){g.push({component:"pluginsEnhanced",error:n instanceof Error?n.message:"Enhanced plugin detection failed"})}if($e("mathFingerprint",p)&&function(){try{return"undefined"!=typeof Math&&"function"==typeof Math.sin}catch{return!1}}())try{const n=performance.now(),e=oe(),t=performance.now()-n;e&&(b.mathFingerprint={value:e,duration:t,analysis:ae(e),hash:ie()},y.push("mathFingerprint"))}catch(n){g.push({component:"mathFingerprint",error:n instanceof Error?n.message:"Math fingerprinting failed"})}if($e("fontPreferences",p)&&function(){try{return"undefined"!=typeof document&&"function"==typeof document.createElement&&void 0!==document.body}catch{return!1}}())try{const n=performance.now(),e=await async function(){try{const{document:n,container:e,cleanup:t}=await new Promise((n,e)=>{const t=document.createElement("iframe");t.style.cssText="position: absolute; left: -9999px; top: -9999px; width: 1px; height: 1px; opacity: 0;",t.srcdoc='<!doctype html>\n <html>\n <head>\n <meta name="viewport" content="width=device-width, initial-scale=1">\n <style>\n body { \n margin: 0; \n padding: 20px; \n width: 4000px;\n text-size-adjust: none;\n -webkit-text-size-adjust: none;\n }\n </style>\n </head>\n <body></body>\n </html>',t.onload=()=>{try{const r=t.contentDocument,o=t.contentWindow;if(!r||!o)return void e(new Error("Cannot access iframe content"));const i=r.body;k()?i.style.zoom=""+1/o.devicePixelRatio:w()&&(i.style.zoom="reset");const a=r.createElement("div");a.textContent=Array(200).fill("word").join(" "),i.appendChild(a),n({document:r,container:i,cleanup:()=>{t.parentNode&&t.parentNode.removeChild(t)}})}catch(n){e(n)}},t.onerror=()=>{e(new Error("Failed to load iframe"))},document.body.appendChild(t)}),r={};for(const[t,o]of Object.entries(Un))try{r[t]=Vn(n,e,o)}catch(n){r[t]=0}const o=function(n,e,t="Arial"){try{const e=n.createElement("canvas");e.width=100,e.height=50;const r=e.getContext("2d",{willReadFrequently:!0});if(!r)return{quality:0,antiAliasing:!1,smoothing:0};r.font=`24px "${t}"`,r.fillStyle="#000000",r.fillText("Wg",10.5,30.7);const o=r.getImageData(10,20,30,20).data;let i=0,a=0,c=0;for(let n=0;n<o.length;n+=4){const e=o[n]||0,t=o[n+1]||0,r=o[n+2]||0;(o[n+3]||0)<10||(c++,e===t&&t===r&&e>0&&e<255&&a++,n>4&&Math.abs(e-(o[n-4]||0))>50&&i++)}const s=c>0?a/c:0,u=c>0?100*a/c:0;return{quality:Math.round(u),antiAliasing:s>.1,smoothing:Math.round(100*u)/100}}catch(n){return{quality:0,antiAliasing:!1,smoothing:0}}}(n,0,"Arial"),i=function(n){try{const e=n.createElement("canvas");e.width=100,e.height=50;const t=e.getContext("2d",{willReadFrequently:!0});if(!t)return{clearType:!1,hintingLevel:0,subpixelRendering:!1};const r=["rn","il","WW","mm"];let o=0,i=0,a=0;for(const n of r){t.clearRect(0,0,e.width,e.height),t.font="16px Arial",t.fillStyle="#000",t.fillText(n,10,25);const r=t.getImageData(10,15,40,20).data;for(let n=0;n<r.length;n+=12){const e=r[n]||0,t=r[n+1]||0,c=r[n+2]||0,s=r[n+4]||0,u=r[n+5]||0,l=r[n+6]||0;(Math.abs(e-t)>20||Math.abs(t-c)>20)&&o++,Math.abs(e-s)+Math.abs(t-u)+Math.abs(c-l)>50&&i++,(e>0&&e<255||t>0&&t<255||c>0&&c<255)&&a++}}return{clearType:o>10,hintingLevel:Math.min(Math.round(a/10),5),subpixelRendering:i>5}}catch(n){return{clearType:!1,hintingLevel:0,subpixelRendering:!1}}}(n),a={},s=["Arial","Helvetica","Times New Roman","Georgia","Courier New"];for(const t of s)try{a[t]=jn(n,e,t)}catch(n){a[t]="fallback-error"}const u=c([JSON.stringify(r),JSON.stringify(o),JSON.stringify(i),JSON.stringify(a)].join("|"));return t(),{...r,antiAliasing:{enabled:o.antiAliasing,type:i.clearType?"cleartype":o.antiAliasing?"standard":"none",smoothingLevel:o.smoothing},systemFontHints:i,fallbackBehavior:a,isolatedHash:u}}catch(n){return{...Object.keys(Un).reduce((n,e)=>(n[e]=0,n),{}),antiAliasing:{enabled:!1,type:"unknown",smoothingLevel:0},systemFontHints:{clearType:!1,hintingLevel:0,subpixelRendering:!1},fallbackBehavior:{},isolatedHash:"error"}}}(),t=performance.now()-n;e&&(b.fontPreferences={value:e,duration:t,analysis:Wn(e),hash:(x=e,x.isolatedHash&&"error"!==x.isolatedHash?x.isolatedHash:[...[x.default,x.serif,x.sans,x.mono,x.apple,x.system,x.min,x.large,x.ui,x.emoji,x.math,x.cjk,x.arabic,x.hebrew,x.subpixel,x.kerning,x.ligatures].map(n=>Math.round(n)),x.antiAliasing.enabled?1:0,x.systemFontHints.clearType?1:0,x.systemFontHints.hintingLevel,Math.round(x.antiAliasing.smoothingLevel)].join(","))},y.push("fontPreferences"))}catch(n){g.push({component:"fontPreferences",error:n instanceof Error?n.message:"Font preferences detection failed"})}var x,C;if($e("dateTimeLocale",p)&&function(){try{return"undefined"!=typeof window&&void 0!==window.Intl}catch{return!1}}())try{const n=performance.now(),e=function(){const n=function(){try{if(!window.Intl)return-1;const n=window.Intl.DateTimeFormat;if(!n)return-2;const e=(new n).resolvedOptions();return e.locale||""===e.locale?{locale:e.locale||"unknown",calendar:e.calendar||"unknown",numberingSystem:e.numberingSystem||"unknown",timeZone:e.timeZone||"unknown",hourCycle:e.hourCycle||"unknown",hour12:void 0!==e.hour12&&e.hour12}:-3}catch(n){return-2}}();if("number"==typeof n)return n;const e=function(){try{if(!window.Intl||!window.Intl.NumberFormat)return-4;const n=(new Intl.NumberFormat).resolvedOptions(),e=new Intl.NumberFormat(void 0,{style:"currency",currency:"USD"}).resolvedOptions();return{numberLocale:n.locale||"unknown",currencyDisplay:e.currencyDisplay||"unknown",currencySign:e.currencySign||"unknown",notation:n.notation||"unknown",signDisplay:n.signDisplay||"unknown"}}catch(n){return-4}}(),t="number"==typeof e?{}:e,r=function(){const n={listStyle:"unknown",relativeTimeStyle:"unknown",pluralRules:"unknown"};try{if(window.Intl&&window.Intl.ListFormat){const e=(new window.Intl.ListFormat).resolvedOptions();n.listStyle=e.style||"unknown"}}catch(n){}try{if(window.Intl&&window.Intl.RelativeTimeFormat){const e=(new window.Intl.RelativeTimeFormat).resolvedOptions();n.relativeTimeStyle=e.style||"unknown"}}catch(n){}try{if(window.Intl&&window.Intl.PluralRules){const e=(new window.Intl.PluralRules).select(1);n.pluralRules=e||"unknown"}}catch(n){}return n}(),o=function(){const n={DateTimeFormat:!1,NumberFormat:!1,RelativeTimeFormat:!1,ListFormat:!1,PluralRules:!1,Collator:!1};try{window.Intl&&(n.DateTimeFormat="function"==typeof window.Intl.DateTimeFormat,n.NumberFormat="function"==typeof window.Intl.NumberFormat,n.RelativeTimeFormat="function"==typeof window.Intl.RelativeTimeFormat,n.ListFormat="function"==typeof window.Intl.ListFormat,n.PluralRules="function"==typeof window.Intl.PluralRules,n.Collator="function"==typeof window.Intl.Collator)}catch(n){}return n}(),i=navigator.language||"unknown",a=n.locale===i;let c="unknown",s="unknown";try{if(window.Intl&&"function"==typeof window.Intl.DateTimeFormat){const n=new Intl.DateTimeFormat(void 0,{dateStyle:"long"}),e=new Intl.DateTimeFormat(void 0,{timeStyle:"long"}),t=n.resolvedOptions(),r=e.resolvedOptions();c=t.dateStyle||"unknown",s=r.timeStyle||"unknown"}}catch(n){}return{locale:n.locale||"unknown",calendar:n.calendar||"unknown",numberingSystem:n.numberingSystem||"unknown",timeZone:n.timeZone||"unknown",dateStyle:c,timeStyle:s,hourCycle:n.hourCycle||"unknown",hour12:n.hour12||!1,numberLocale:t.numberLocale||n.locale||"unknown",currencyDisplay:t.currencyDisplay||"unknown",currencySign:t.currencySign||"unknown",notation:t.notation||"unknown",signDisplay:t.signDisplay||"unknown",listStyle:r.listStyle||"unknown",relativeTimeStyle:r.relativeTimeStyle||"unknown",pluralRules:r.pluralRules||"unknown",navigatorLanguage:i,localeMatch:a,intlSupport:o}}(),t=performance.now()-n;e&&"object"==typeof e&&(b.dateTimeLocale={value:e,duration:t,analysis:$n(e),hash:(C=e,"number"==typeof C?`status-${C}`:[C.locale,C.calendar,C.numberingSystem,C.timeZone,C.hourCycle,C.hour12?"1":"0",C.localeMatch?"1":"0",Object.values(C.intlSupport).map(n=>n?"1":"0").join("")].join("|"))},y.push("dateTimeLocale"))}catch(n){g.push({component:"dateTimeLocale",error:n instanceof Error?n.message:"DateTime locale detection failed"})}if($e("accessibilityEnhanced",p)&&Cn())try{const n=performance.now(),e=Dn(),t=performance.now()-n;e&&(b.accessibilityEnhanced={value:e,duration:t,analysis:Bn(e)},y.push("accessibilityEnhanced"))}catch(n){g.push({component:"accessibilityEnhanced",error:n instanceof Error?n.message:"Enhanced accessibility detection failed"})}if($e("enhancedFonts",p)&&function(){try{return"undefined"!=typeof document&&"function"==typeof document.createElement&&void 0!==document.body}catch{return!1}}())try{const n=performance.now(),e=await async function(){const n=performance.now();try{const{document:e,body:t,cleanup:r}=await new Promise((n,e)=>{const t=document.createElement("iframe");t.style.cssText="position: absolute; left: -9999px; top: -9999px; width: 1px; height: 1px; opacity: 0; pointer-events: none;",t.onload=()=>{try{const e=t.contentDocument;if(!e)throw new Error("Cannot access iframe document");const r=e.body;if(!r)throw new Error("Iframe body not available");r.style.fontSize=qn,r.style.margin="0",r.style.padding="0",n({document:e,body:r,cleanup:()=>{t.parentNode&&t.parentNode.removeChild(t)}})}catch(n){e(n)}},t.onerror=()=>{e(new Error("Failed to load font measurement iframe"))},document.body.appendChild(t)});try{const r=e.createElement("div");r.style.setProperty("visibility","hidden","important");const o=Jn.map(n=>Zn(e,n));o.forEach(n=>r.appendChild(n));const i={};for(const n of zn)i[n]=Jn.map(t=>Kn(e,n,t)),i[n].forEach(n=>r.appendChild(n));t.appendChild(r);const a={};Jn.forEach((n,e)=>{const t=o[e];t&&(a[n]={width:t.offsetWidth,height:t.offsetHeight})});const c=[],s={};for(const n of zn){const e=i[n];e&&(Yn(e,a)&&c.push(n),e.length>0&&e[0]&&(s[n]={width:e[0].offsetWidth,height:e[0].offsetHeight}))}const u=performance.now()-n,l=Object.values(s).map(n=>n.width);return{available:c,method:"iframe",measurements:s,precision:new Set(l).size/l.length,totalTested:zn.length,detectionTime:u}}finally{r()}}catch(e){return function(n){const e=[],t={};try{const n=document.createElement("div");n.style.cssText="position: absolute; left: -9999px; top: -9999px; visibility: hidden;";const r={};Jn.forEach(e=>{const t=document.createElement("span");t.style.fontFamily=e,t.style.fontSize=qn,t.style.whiteSpace="nowrap",t.textContent=Xn,n.appendChild(t),document.body.appendChild(n),r[e]={width:t.offsetWidth,height:t.offsetHeight},document.body.removeChild(n),n.removeChild(t)});for(const o of zn){let i=!1;for(const e of Jn){const a=document.createElement("span");a.style.fontFamily=`'${o}',${e}`,a.style.fontSize=qn,a.style.whiteSpace="nowrap",a.textContent=Xn,n.appendChild(a),document.body.appendChild(n);const c={width:a.offsetWidth,height:a.offsetHeight};t[o]=c;const s=r[e];if(!s||c.width===s.width&&c.height===s.height||(i=!0),document.body.removeChild(n),n.removeChild(a),i)break}i&&e.push(o)}}catch(n){}const r=performance.now()-n,o=Object.values(t).map(n=>n.width),i=new Set(o).size;return{available:e,method:"dom",measurements:t,precision:o.length>0?i/o.length:0,totalTested:zn.length,detectionTime:r}}(n)}}(),t=performance.now()-n;e&&(b.enhancedFonts={value:e,duration:t,analysis:Qn(e),hash:ne(e)},y.push("enhancedFonts"))}catch(n){g.push({component:"enhancedFonts",error:n instanceof Error?n.message:"Enhanced font detection failed"})}{const n=function(n){const e=function(){try{return v()?"brave":E()?"firefox":A()?"safari":S()?"samsung":"other"}catch{return"other"}}(),t=new Set,r=n=>{for(const r of n)if(!r.browsers||r.browsers.includes(e))for(const n of r.exclude)t.add(n)};return r(we),function(){try{return window!==window.top}catch{return!0}}()&&r(he),function(n){return(null!=n?n:0)>=.6}(n)&&r(pe),t}(null!==(i=null===(o=b.incognitoDetection)||void 0===o?void 0:o.likelihood)&&void 0!==i?i:0);if(n.size>0)for(const e of n)if(void 0!==b[e]){b[e]=null;const n=y.indexOf(e);-1!==n&&(y.splice(n,1),g.push({component:e,error:"excluded by stabilization rules"}))}}const T={};let _;y.forEach(n=>{const e=b[n];e&&e.value&&(T[n]=e.value)});try{const{calculateConfidence:n}=await import("./confidence-BslwbUCt.min.js"),e=[...y.map(n=>{var e,t;return{component:n,success:!0,duration:(null===(e=b[n])||void 0===e?void 0:e.duration)||0,value:null===(t=b[n])||void 0===t?void 0:t.value}}),...g.map(n=>({component:n.component,success:!1,duration:0,error:n.error}))];_=n(e,{requireMinimumComponents:6,penalizeMissingCore:!0,adjustForIncognito:!0}),b.confidence={score:_.score,level:_.level,factors:_.factors,recommendations:_.recommendations}}catch(n){const e=y.length/(y.length+g.length||1);b.confidence={score:e>=.8?.95:e>=.6?.8:.5,level:e>=.8?"High":e>=.6?"Medium":"Low",factors:{componentCount:y.length,weightedScore:e,stabilityScore:e,entropyScore:e,spoofResistanceScore:e},recommendations:e<.8?["Enable more fingerprinting components"]:[]}}const F={...b,hash:"",components:y,collectionTime:performance.now()-m},O={success:y.length>0,collectedComponents:y,failedComponents:g,confidence:_||b.confidence};if(y.length>0){const e=null===(s=F.browser)||void 0===s?void 0:s.value,t=null===(l=F.screen)||void 0===l?void 0:l.value,r=(null==e?void 0:e.userAgent)||"",o=(()=>{var n;const e=!0===(null===(n=navigator.userAgentData)||void 0===n?void 0:n.mobile),r=navigator.maxTouchPoints||0,o=(null==t?void 0:t.width)||0,i=(null==t?void 0:t.height)||0,a=Math.min(o,i);return Math.max(o,i),e?"mobile":r>0?a<=480?"mobile":"tablet":a>1024?"desktop":a<=480?"mobile":"desktop"})();let i={};try{const{collectDeviceSignals:n}=await import("./device-signals-2L_62qNZ.min.js");i=n()}catch(n){}const c={ua:(()=>{try{return R().family}catch{const n=r,e=n.match(/(chrome|safari|firefox|edge|edg|brave|opera|opr|chromium)/i);return((null==e?void 0:e[1])||n.split(" ")[0]||"unknown").toLowerCase()}})(),timezone:(null==e?void 0:e.timezone)||"unknown",primaryLanguage:(()=>{try{const n=null==e?void 0:e.languages;return Array.isArray(n)&&n.length>0&&n[0]?n[0].toLowerCase().split("-")[0]:"undefined"!=typeof navigator&&navigator.language?navigator.language.toLowerCase().split("-")[0]:"unknown"}catch{return"unknown"}})(),platform:((null==e?void 0:e.platform)||"unknown").toLowerCase(),deviceType:o,hardware:(()=>{var n;const e=i.hardwareConcurrency,t=i.deviceMemory;if(!e&&!t)return;const r=e?(n=>n>=32?"workstation":n>=20?"ultra":n>=16?"high":n>=12?"premium":n>=8?"mid":n>=6?"normal":n>=4?"basic":n>=2?"low":"minimal")(e):"unknown",o=t?(n=>n>=64?"workstation":n>=32?"ultra":n>=24?"high":n>=16?"premium":n>=12?"mid":n>=8?"normal":n>=4?"basic":n>=2?"low":"minimal")(t):"unknown";var a;return{cores:r,memory:o,arch:void 0===(a=i.architecture)?"unknown":255===a?"arm64":0===a?"x86_64":"other",class:((n,e)=>"workstation"!==n&&"ultra"!==n||"workstation"!==e&&"ultra"!==e?"high"!==n&&"premium"!==n||"high"!==e&&"premium"!==e&&"ultra"!==e?"mid"!==n&&"normal"!==n||"mid"!==e&&"normal"!==e&&"premium"!==e?"basic"!==n&&"low"!==n||"basic"!==e&&"low"!==e&&"normal"!==e?"minimal"===n||"minimal"===e?"mobile":"mixed":"budget":"mainstream":"enthusiast":"professional")(r,o),touch:(null===(n=i.touchSupport)||void 0===n?void 0:n.maxTouchPoints)?i.touchSupport.maxTouchPoints>=10?"multi":i.touchSupport.maxTouchPoints>=5?"standard":"basic":"none"}})(),screenFrame:(null==i?void 0:i.screenFrame)?{top:i.screenFrame.top||0,right:i.screenFrame.right||0,bottom:i.screenFrame.bottom||0,left:i.screenFrame.left||0}:void 0,display:(()=>{const n=i.colorDepth,e=i.colorGamut,t=(n=>n?n>=48?"ultra_high":n>=32?"high":n>=24?"normal":n>=16?"basic":"low":"unknown")(n),r=(n=>{if(!n)return"unknown";switch(n){case"rec2020":return"professional";case"p3":return"enhanced";case"srgb":return"standard";default:return"unknown"}})(e);return{depth:t,gamut:r,class:((n,e)=>"ultra_high"===n||"professional"===e?"professional":"high"===n||"enhanced"===e?"premium":"normal"===n&&"standard"===e?"standard":"basic"===n?"basic":"legacy")(t,r)}})()},m=[c.ua||"",c.platform||"",c.deviceType||"",c.timezone||"",c.primaryLanguage||""].filter(Boolean);if(m.length>=3){const n=m.join("|");let e=0;for(let t=0;t<n.length;t++)e=(e<<5)-e+n.charCodeAt(t)&4294967295;c.t=Math.abs(e).toString(36).substring(0,8)}(p.debug||"undefined"!=typeof window&&window._rabbitTrackerDebug)&&(c.ua,c.platform,c.deviceType,c.timezone,c.primaryLanguage,c.hardware,c.display,c.screenFrame,c.t);const h=function(e,t=!1){const r=u(e),o=n(r);t&&(Object.keys(e),Object.keys(r),o.length,o.substring(0,200));const i=a(o);return t&&i.substring(0,32),i}(c,p.debug),w=["canvas","webgl","audio","mathFingerprint","fontPreferences","enhancedFonts","dateTimeLocale","accessibilityEnhanced","domBlockers","pluginsEnhanced","speech","clientHints"],v={};for(const[n,e]of Object.entries(T))w.includes(n)||(v[n]=e);const b={...v,o:c},M=function(e,t=!1){const r=u(e),o=n(r);t&&(Object.keys(e),Object.keys(r),o.length,o.substring(0,200));const i=a(o);return t&&i.substring(0,32),i}(b,p.debug);F.hash=M,p.debug&&(Object.keys(c),c.t,h.substring(0,16),M.substring(0,16),c.ua,c.deviceType,c.platform,c.timezone,c.screenFrame,null===(d=c.hardware)||void 0===d||d.class,null===(f=c.display)||void 0===f||f.class,Object.keys(b).length),O.data={...F,stableCoreHash:h,stableCoreVector:c},p.debug&&(y.length,g.length,F.collectionTime,F.hash,null==_||_.level,null==_||_.score,(null==_?void 0:_.recommendations.length)&&_.recommendations)}else O.error="No components could be collected";return O}var Ve=Object.freeze({__proto__:null,collectFingerprint:je,getCompleteFingerprint:async function(){return je({gdprMode:!1,includeInvasive:!0,timeout:5e3})}});export{A as a,C as b,E as c,Ve as f,P as g,k as i};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Zaplier SDK v2.0.0 - Performance Optimized
|
|
3
|
+
* Advanced privacy-first tracking with code splitting
|
|
4
|
+
* (c) 2026 Zaplier Team
|
|
5
|
+
*/
|
|
6
|
+
function n(){try{if("deviceMemory"in navigator){const n=navigator.deviceMemory;return"number"==typeof n?n:null}return null}catch{return null}}function r(){try{if("hardwareConcurrency"in navigator){const n=navigator.hardwareConcurrency;return"number"==typeof n?n:null}return null}catch{return null}}function t(){try{return[navigator.platform,navigator.userAgent,navigator.userAgent.includes("ARM")?"ARM":null,navigator.userAgent.includes("arm64")?"ARM64":null,navigator.userAgent.includes("aarch64")?"ARM64":null,navigator.userAgent.includes("x86_64")?"x86_64":null,navigator.userAgent.includes("WOW64")?"x86_64":null,navigator.userAgent.includes("Win64")?"x86_64":null,navigator.userAgent.includes("Intel")?"Intel":null].filter(Boolean).join("|")||"unknown"}catch{return"unknown"}}function a(){try{return navigator.maxTouchPoints||0}catch{return 0}}function o(){return"undefined"!=typeof navigator}function u(){var o,u;return{deviceMemory:n(),hardwareConcurrency:r(),architecture:t(),maxTouchPoints:a(),platform:navigator.platform||"unknown",jsHeapSizeLimit:null!==(u=null===(o=performance.memory)||void 0===o?void 0:o.jsHeapSizeLimit)&&void 0!==u?u:0,architectureFloat32:(()=>{var n;try{const r=new Float32Array(1);return r[0]=1/0,r[0]-=r[0],null!==(n=new Uint8Array(r.buffer)[3])&&void 0!==n?n:-1}catch{return-1}})()}}export{t as getArchitecture,n as getDeviceMemory,r as getHardwareConcurrency,u as getHardwareFingerprint,a as getMaxTouchPoints,o as isHardwareDetectionAvailable};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Zaplier SDK v2.0.0 - Performance Optimized
|
|
3
|
+
* Advanced privacy-first tracking with code splitting
|
|
4
|
+
* (c) 2026 Zaplier Team
|
|
5
|
+
*/
|
|
6
|
+
async function t(){var t,n;const o=[];let e=0;const a=await async function(){try{const t="__incognito_test__",n=Date.now().toString();localStorage.setItem(t,n);const o=localStorage.getItem(t);return localStorage.removeItem(t),o===n}catch{return!1}}();a||(e+=.25,o.push("localStorage_blocked"));const r=await async function(){try{const t="__incognito_test__",n=Date.now().toString();sessionStorage.setItem(t,n);const o=sessionStorage.getItem(t);return sessionStorage.removeItem(t),o===n}catch{return!1}}();r||(e+=.2,o.push("sessionStorage_blocked"));const i=await async function(){try{return!!window.indexedDB&&new Promise(t=>{const n=indexedDB.open("__incognito_test__",1);n.onsuccess=()=>{n.result.close(),indexedDB.deleteDatabase("__incognito_test__"),t(!0)},n.onerror=()=>t(!1),n.onblocked=()=>t(!1)})}catch{return!1}}();i||(e+=.15,o.push("indexedDB_blocked"));const c=function(){try{const t="__incognito_test__",n=Date.now().toString();document.cookie=`${t}=${n}; SameSite=Strict; path=/`;const o=-1!==document.cookie.indexOf(`${t}=${n}`);return document.cookie=`${t}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`,o}catch{return!1}}();c||(e+=.2,o.push("cookies_blocked")),function(){try{return!(!Array.isArray(navigator.languages)||1!==navigator.languages.length||!navigator.language)&&navigator.languages[0]===navigator.language}catch{return!1}}()&&(e+=.25,o.push("languages_single_value"));try{if(a){const t="__incognito_persistence_test__",n="persist_test";localStorage.setItem(t,n);const a=localStorage.getItem(t)===n;localStorage.removeItem(t),a||(e+=.2,o.push("localStorage_not_persistent"))}}catch{}try{if(null===(t=navigator.storage)||void 0===t?void 0:t.estimate){const t=await navigator.storage.estimate(),n=(null==t?void 0:t.quota)||0,a=(null==t?void 0:t.usage)||0;0===n?(e+=.3,o.push("storage_quota_zero")):n>0&&n<125829120&&(e+=.25,o.push("storage_quota_low")),0===a&&n>0&&(e+=.1,o.push("storage_usage_zero"))}else o.push("storage_estimate_unavailable")}catch{o.push("storage_estimate_error")}"serviceWorker"in navigator||(e+=.1,o.push("service_worker_absent")),"caches"in window||(e+=.05,o.push("cache_api_absent"));try{if(null===(n=navigator.permissions)||void 0===n?void 0:n.query){const t=await navigator.permissions.query({name:"notifications"});"denied"===(null==t?void 0:t.state)&&(e+=.05,o.push("notifications_denied"))}}catch{o.push("permissions_query_error")}(function(){try{return!!window.showOpenFilePicker}catch{return!1}})()||o.push("fs_access_absent"),"connection"in navigator||o.push("network_info_absent"),e=Math.max(0,Math.min(1,e));const s=[a,r,i,c].filter(t=>!t).length;return s>=3?e=Math.max(e,.85):s>=2&&(e=Math.max(e,.7)),o.includes("languages_single_value")&&(s>=1||e>=.2)&&(e=Math.max(e,.5)),{likelihood:e,methods:o}}export{t as detectIncognitoHeuristics};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Zaplier SDK v2.0.0 - Performance Optimized
|
|
3
|
+
* Advanced privacy-first tracking with code splitting
|
|
4
|
+
* (c) 2026 Zaplier Team
|
|
5
|
+
*/
|
|
6
|
+
function e(){const e=Math,a=()=>0,t=e.acos||a,n=e.acosh||a,r=e.asin||a,i=e.asinh||a,c=e.atanh||a,o=e.atan||a,s=e.sin||a,h=e.sinh||a,p=e.cos||a,u=e.cosh||a,f=e.tan||a,l=e.tanh||a,M=e.exp||a,P=e.expm1||a,g=e.log1p||a,m=a=>e.pow(e.PI,a),N=a=>e.log(a+e.sqrt(a*a+1)),b=a=>e.log((1+a)/(1-a))/2,_=a=>(e.exp(a)-1/e.exp(a))/2,x=a=>(e.exp(a)+1/e.exp(a))/2,y=a=>e.exp(a)-1,S=a=>(e.exp(2*a)-1)/(e.exp(2*a)+1),d=a=>e.log(1+a);try{return{acos:t(.12312423423423424),asin:r(.12312423423423424),atan:o(.5),cos:p(10.000000000123),sin:s(-1e300),tan:f(-1e300),acosh:n(1e308),acoshPf:(I=1e154,e.log(I+e.sqrt(I*I-1))),asinh:i(1),asinhPf:N(1),atanh:c(.5),atanhPf:b(.5),cosh:u(1),coshPf:x(1),sinh:h(1),sinhPf:_(1),tanh:l(1),tanhPf:S(1),exp:M(1),expm1:P(1),expm1Pf:y(1),log1p:g(10),log1pPf:d(10),powPI:m(-100),sqrt:e.sqrt(2),cbrt:e.cbrt?e.cbrt(8):0,log:e.log(e.E),log10:e.log10?e.log10(10):0,log2:e.log2?e.log2(2):0,special_0:e.sin(e.PI),special_1:e.cos(e.PI/2),special_2:e.tan(e.PI/4),special_3:e.sqrt(-1),special_4:e.log(-1),special_5:1/0,special_6:NaN}}catch(a){return{error:1,basicMath:e.PI+e.E}}var I}function a(){try{return{PI:Math.PI,E:Math.E,LN2:Math.LN2,LN10:Math.LN10,LOG2E:Math.LOG2E,LOG10E:Math.LOG10E,SQRT1_2:Math.SQRT1_2,SQRT2:Math.SQRT2}}catch{return{}}}function t(){try{return{precision1:.1+.2,precision2:.3-.1,precision3:.1*3,precision4:1.1-.9,largeAdd:1e16,largeSub:1e16,tiny:Number.MIN_VALUE,epsilon:Number.EPSILON||2220446049250313e-31,maxValue:Number.MAX_VALUE,maxSafeInteger:Number.MAX_SAFE_INTEGER||9007199254740991,minSafeInteger:Number.MIN_SAFE_INTEGER||-9007199254740991}}catch{return{}}}function n(){return"undefined"!=typeof Math}function r(){return{operations:e(),constants:a(),floatingPoint:t()}}export{r as getCompleteMathFingerprint,t as getFloatingPointBehavior,a as getMathConstants,e as getMathFingerprint,n as isMathDetectionAvailable};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Zaplier SDK v2.0.0 - Performance Optimized
|
|
3
|
+
* Advanced privacy-first tracking with code splitting
|
|
4
|
+
* (c) 2026 Zaplier Team
|
|
5
|
+
*/
|
|
6
|
+
import{g as r,i as n,c as t}from"./fingerprint-FfUEEIAd.min.js";function o(){try{if(!p())return"NOT_SUPPORTED";const r=function(){try{return navigator.plugins||null}catch(r){if("SecurityError"===r.name)return null;throw r}}();if(!r)return"NAVIGATOR_UNAVAILABLE";const n=[];if(0===r.length)return n;for(let t=0;t<r.length;t++){const o=r[t];if(!o)continue;const a=[];if(o.length>0)for(let r=0;r<o.length;r++){const n=o[r];n&&n.type&&a.push(n.type)}n.push({name:o.name||"",filename:o.filename||"",description:o.description||"",version:o.version||void 0,mimeTypes:a})}return n.sort((r,n)=>r.name.localeCompare(n.name))}catch(r){return"SecurityError"===r.name?"SECURITY_RESTRICTED":[]}}function a(){try{if(!navigator.mimeTypes||0===navigator.mimeTypes.length)return[];const r=[];for(let n=0;n<navigator.mimeTypes.length;n++){const t=navigator.mimeTypes[n];t&&t.type&&r.push(t.type)}return r.sort()}catch{return[]}}function i(){try{if(navigator.plugins&&Array.from(navigator.plugins).some(r=>r.name.toLowerCase().includes("flash")||r.description.toLowerCase().includes("flash")))return!0;if(navigator.mimeTypes&&Array.from(navigator.mimeTypes).some(r=>"application/x-shockwave-flash"===r.type))return!0;if(void 0!==window.ActiveXObject)try{return!!new window.ActiveXObject("ShockwaveFlash.ShockwaveFlash")}catch{return!1}return!1}catch{return!1}}function e(){try{if(navigator.plugins&&Array.from(navigator.plugins).some(r=>r.name.toLowerCase().includes("java")&&!r.name.toLowerCase().includes("javascript")))return!0;const r=["application/x-java-applet","application/x-java-bean","application/x-java-vm"];return!(!navigator.mimeTypes||!r.some(r=>Array.from(navigator.mimeTypes).some(n=>n.type===r)))||"function"==typeof navigator.javaEnabled&&navigator.javaEnabled()}catch{return!1}}function c(){try{if(navigator.plugins&&Array.from(navigator.plugins).some(r=>r.name.toLowerCase().includes("silverlight")))return!0;if(navigator.mimeTypes&&Array.from(navigator.mimeTypes).some(r=>"application/x-silverlight"===r.type))return!0;if(void 0!==window.ActiveXObject)try{return!!new window.ActiveXObject("AgControl.AgControl")}catch{return!1}return!1}catch{return!1}}function u(){var r,t;try{if(!n())return"NOT_SUPPORTED";if(!navigator.plugins)return"NAVIGATOR_UNAVAILABLE";const o=navigator.plugins.length;return 0===o||!(null===(r=window.chrome)||void 0===r?void 0:r.runtime)&&!(null===(t=window.chrome)||void 0===t?void 0:t.webstore)&&void 0!==window.chrome||!Array.from(navigator.plugins).some(r=>r.name.toLowerCase().includes("pdf")||r.name.toLowerCase().includes("chrome"))&&o<3}catch(r){return"SecurityError"===r.name&&"SECURITY_RESTRICTED"}}function s(){try{if(!t())return"NOT_SUPPORTED";const r={mozInnerScreenX:"mozInnerScreenX"in window,mozPaintCount:"mozPaintCount"in window,mozApps:!!navigator.mozApps,buildID:!!navigator.buildID,oscpu:!!navigator.oscpu},n=Object.values(r).filter(Boolean).length;return 0===n||(navigator.plugins?0===navigator.plugins.length&&n<2:"NAVIGATOR_UNAVAILABLE")}catch(r){return"SecurityError"===r.name&&"SECURITY_RESTRICTED"}}function l(r){const n=["antivirus","security","firewall","malware","protection","kaspersky","norton","mcafee","avast","avira","bitdefender","eset","sophos","symantec","trend micro","f-secure"];return r.filter(r=>n.some(n=>r.name.toLowerCase().includes(n)||r.description.toLowerCase().includes(n))).map(r=>r.name)}function v(r){const n=["adblock","adblocker","ad block","ublock","ghostery","privacy badger","disconnect","noscript","tracking protection"];return r.filter(r=>n.some(n=>r.name.toLowerCase().includes(n)||r.description.toLowerCase().includes(n))).map(r=>r.name)}function f(r,n,t,o){let a=50;return a+=10*r.length,a+=5*n.length,t&&(a-=15),o&&(a-=10),Math.max(0,Math.min(100,a))}function g(r,n){const t=r.map(r=>r.name).sort(),o=n.slice(0,10).sort();return[`plugins:${t.length}`,`mimes:${n.length}`,...t.slice(0,5),...o.slice(0,5)].join("|")}function p(){return r().canRunBrowserAPIs&&"undefined"!=typeof navigator}function y(){const r=o(),n=Array.isArray(r)?r:[],t=a(),p=Array.isArray(t)?t:[],y=i(),d=e(),h=c(),A=u(),w="boolean"==typeof A&&A,m=s(),E="boolean"==typeof m&&m,T=l(n),S=v(n),I=g(n,p),R=f(T,S,y,d);return{plugins:n,pluginCount:n.length,mimeTypes:p,mimeTypeCount:p.length,flashEnabled:y,javaEnabled:d,silverLightEnabled:h,chromeExtensionsBlocked:w,firefoxExtensionsBlocked:E,securityPlugins:T,adBlockerPlugins:S,pluginSignature:I,securityScore:R}}export{f as calculateSecurityScore,u as detectChromeExtensionsBlocked,s as detectFirefoxExtensionsBlocked,g as generatePluginSignature,y as getEnhancedPluginFingerprint,a as getMimeTypes,o as getNavigatorPlugins,v as identifyAdBlockerPlugins,l as identifySecurityPlugins,p as isEnhancedPluginDetectionAvailable,i as testFlashEnabled,e as testJavaEnabled,c as testSilverlightEnabled};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Zaplier SDK v2.0.0 - Performance Optimized
|
|
3
|
+
* Advanced privacy-first tracking with code splitting
|
|
4
|
+
* (c) 2026 Zaplier Team
|
|
5
|
+
*/
|
|
6
|
+
import{record as t}from"rrweb";class i{constructor(t,i,s={}){this.events=[],this.isActive=!1,this.isPaused=!1,this.lastActivityTime=Date.now(),this.sessionStartTime=Date.now(),this.sessionId=t,this.visitorId=i,this.config={enabled:!0,sampleRate:1,batchInterval:1e4,inactivityTimeout:3e4,pauseOnInactive:!0,...s}}start(){if(!this.config.enabled||this.isActive)return!1;if(Math.random()>this.config.sampleRate)return!1;try{return this.rrwebStopRecord=t({emit:t=>{this.onActivity(),this.isPaused||this.events.push(t)}}),this.isActive=!0,this.startBatchTimer(),this.startInactivityTracking(),!0}catch(t){return console.error("[Zaplier] Failed to start rrweb recording:",t),!1}}stop(){this.isActive&&(this.isActive=!1,this.rrwebStopRecord&&(this.rrwebStopRecord(),this.rrwebStopRecord=void 0),this.batchTimer&&(clearInterval(this.batchTimer),this.batchTimer=void 0),this.inactivityTimer&&(clearTimeout(this.inactivityTimer),this.inactivityTimer=void 0),this.sendBatch())}startBatchTimer(){this.batchTimer=window.setInterval(()=>{this.sendBatch()},this.config.batchInterval)}sendBatch(){if(0===this.events.length)return;const t={sessionId:this.sessionId,visitorId:this.visitorId,events:[...this.events],metadata:{userAgent:navigator.userAgent,timestamp:Date.now(),startUrl:window.location.href,duration:Date.now()-this.sessionStartTime,activeTime:this.getActiveTime(),funnelSteps:[],hasConversion:!1,eventsCount:this.events.length,isPaused:this.isPaused}};this.events=[],t.events.length,this.sendToBackend(t)}setSDKInstance(t){this.sdkInstance=t}async sendToBackend(t){try{if(!this.sdkInstance)return void console.error("[Zaplier] No SDK instance available for replay transport");const i=await this.sdkInstance.sendReplayBatch(t);i&&i.success||console.error("[Zaplier] Session replay batch failed:",i)}catch(t){console.error("[Zaplier] Session replay error:",t)}}getEventCount(){return this.events.length}isRecording(){return this.isActive}isPausedState(){return this.isPaused}startInactivityTracking(){this.config.pauseOnInactive&&(["mousedown","mousemove","keypress","scroll","touchstart","click"].forEach(t=>{document.addEventListener(t,this.onActivity.bind(this),!0)}),this.resetInactivityTimer())}onActivity(){this.lastActivityTime=Date.now(),this.isPaused&&this.resume(),this.resetInactivityTimer()}resetInactivityTimer(){this.inactivityTimer&&clearTimeout(this.inactivityTimer),this.inactivityTimer=window.setTimeout(()=>{this.pauseForInactivity()},this.config.inactivityTimeout)}pauseForInactivity(){this.isPaused||(this.isPaused=!0)}resume(){this.isPaused&&(this.isPaused=!1)}getActiveTime(){return Date.now()-this.sessionStartTime}getVisitorId(){return this.visitorId}}export{i as SessionReplayEngine};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Zaplier SDK v2.0.0 - Performance Optimized
|
|
3
|
+
* Advanced privacy-first tracking with code splitting
|
|
4
|
+
* (c) 2026 Zaplier Team
|
|
5
|
+
*/
|
|
6
|
+
function t(){try{if("undefined"==typeof localStorage)return!1;const t="__rb_test__",e="test";localStorage.setItem(t,e);const n=localStorage.getItem(t);return localStorage.removeItem(t),n===e}catch(t){return"blocked"}}function e(){try{if("undefined"==typeof sessionStorage)return!1;const t="__rb_test__",e="test";sessionStorage.setItem(t,e);const n=sessionStorage.getItem(t);return sessionStorage.removeItem(t),n===e}catch(t){return"blocked"}}function n(){return new Promise(t=>{try{if(!("indexedDB"in window))return void t(!1);const e="__rb_test_db__",n=indexedDB.open(e,1);let o=!1;const r=e=>{o||(o=!0,t(e))};setTimeout(()=>r("blocked"),1e3),n.onerror=()=>r("blocked"),n.onsuccess=()=>{try{n.result.close();const t=indexedDB.deleteDatabase(e);t.onsuccess=()=>r(!0),t.onerror=()=>r(!0)}catch{r("blocked")}},n.onupgradeneeded=()=>{try{const t=n.result;t.objectStoreNames.contains("test")||t.createObjectStore("test")}catch{r("blocked")}}}catch{t("blocked")}})}function o(){try{return"openDatabase"in window&&"function"==typeof window.openDatabase}catch{return!1}}async function r(){try{if("storage"in navigator&&"estimate"in navigator.storage){const t=await navigator.storage.estimate();return{quota:t.quota||null,usage:t.usage||null,available:t.quota&&t.usage?t.quota-t.usage:null}}return{}}catch{return{}}}function c(){return"undefined"!=typeof window}async function a(){const[c,a]=await Promise.all([n(),r()]);return{localStorage:t(),sessionStorage:e(),indexedDB:c,webSQL:o(),quota:a}}export{n as getIndexedDBSupport,t as getLocalStorageSupport,e as getSessionStorageSupport,a as getStorageFingerprint,r as getStorageQuota,o as getWebSQLSupport,c as isStorageDetectionAvailable};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Zaplier SDK v2.0.0 - Performance Optimized
|
|
3
|
+
* Advanced privacy-first tracking with code splitting
|
|
4
|
+
* (c) 2026 Zaplier Team
|
|
5
|
+
*/
|
|
6
|
+
function n(){try{if("undefined"!=typeof Intl&&Intl.DateTimeFormat){const n=Intl.DateTimeFormat().resolvedOptions().timeZone;if(n)return n}const n=new Date(2024,0,1).getTimezoneOffset();return`UTC${n>0?"-":"+"}${Math.abs(n/60)}`}catch{return"unknown"}}function t(){try{const n=[];navigator.languages&&Array.isArray(navigator.languages)&&n.push(...navigator.languages),navigator.language&&n.push(navigator.language);const t=navigator.userLanguage||navigator.browserLanguage;return t&&n.push(t),[...new Set(n)]}catch{return["unknown"]}}function o(){try{if("undefined"!=typeof Intl&&Intl.DateTimeFormat){const n=(new Intl.DateTimeFormat).resolvedOptions();return{locale:n.locale||"unknown",calendar:n.calendar||"unknown",numberingSystem:n.numberingSystem||"unknown",timeZone:n.timeZone||"unknown"}}return{locale:"unknown"}}catch{return{locale:"unknown"}}}function e(){try{const n={platform:navigator.platform||"unknown",oscpu:navigator.oscpu||null,vendor:navigator.vendor||null},t=navigator.userAgent;if(t.includes("Windows"))n.os="Windows",t.includes("Windows NT 10.0")?n.osVersion="10":t.includes("Windows NT 6.3")?n.osVersion="8.1":t.includes("Windows NT 6.2")?n.osVersion="8":t.includes("Windows NT 6.1")&&(n.osVersion="7");else if(t.includes("Macintosh")||t.includes("Mac OS")){n.os="macOS";const o=t.match(/Mac OS X ([0-9_]+)/);o&&o[1]&&(n.osVersion=o[1].replace(/_/g,"."))}else if(t.includes("Linux"))n.os="Linux";else if(t.includes("Android")){n.os="Android";const o=t.match(/Android ([0-9.]+)/);o&&o[1]&&(n.osVersion=o[1])}else if(t.includes("iOS")||t.includes("iPhone")||t.includes("iPad")){n.os="iOS";const o=t.match(/OS ([0-9_]+)/);o&&o[1]&&(n.osVersion=o[1].replace(/_/g,"."))}return n}catch{return{platform:"unknown"}}}function r(){return"undefined"!=typeof navigator}function a(){return{timezone:n(),languages:t(),dateTimeLocale:o(),platform:e(),cookiesEnabled:navigator.cookieEnabled||!1}}export{o as getDateTimeLocale,t as getLanguages,e as getPlatformExtended,a as getSystemFingerprint,n as getTimezone,r as isSystemDetectionAvailable};
|