{"version":3,"sources":["jsdelivr-header.js","/npm/hockeystack@1.3.234/hockeystack.js"],"names":[],"mappings":"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","file":"/npm/hockeystack@1.3.234/hockeystack.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/hockeystack@1.3.234/hockeystack.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/* global jQuery */\n\nwindow.HockeyStack = (() => {\n  'use strict';\n\n  const HockeyStack = {};\n\n  const INTEGRATIONS = [\n    {\n      name: '6sense',\n      check: () => !!document.querySelector('script[src*=\"j.6sc.co/6si.min.js\"]'),\n      script: 'https://cdn.jsdelivr.net/npm/hockeystack@latest/hockeystack-6sense.min.js'\n    },\n    {\n      name: 'arcade',\n      check: () => !!document.querySelector('iframe[src*=\"demo.arcade.software\"]'),\n      script: 'https://cdn.jsdelivr.net/npm/hockeystack@latest/hockeystack-arcade.min.js'\n    },\n    {\n      name: 'calendly',\n      check: () => !!(new URLSearchParams(window.location.search)).get('event_type_uuid'),\n      script: 'https://cdn.jsdelivr.net/npm/hockeystack@latest/hockeystack-calendly.min.js'\n    },\n    {\n      name: 'demandbase',\n      check: () => !!document.querySelector('script[src*=\"tag.demandbase.com\"]'),\n      script: 'https://cdn.jsdelivr.net/npm/hockeystack@latest/hockeystack-demandbase.min.js'\n    },\n    {\n      name: 'drift',\n      check: () => !!document.querySelector('script[src*=\"js.driftt.com\"]'),\n      script: 'https://cdn.jsdelivr.net/npm/hockeystack@latest/hockeystack-drift.min.js'\n    },\n    {\n      name: 'heyflow',\n      check: () => !!document.querySelector('script[src*=\"heyflow.app\"]'),\n      script: 'https://cdn.jsdelivr.net/npm/hockeystack@latest/hockeystack-heyflow.min.js'\n    },\n    {\n      name: 'marketo-forms',\n      check: () => !!document.querySelector('script[src*=\"forms2.min.js\"]'),\n      script: 'https://cdn.jsdelivr.net/npm/hockeystack@latest/hockeystack-marketo-forms.min.js'\n    },\n    {\n      name: 'navattic',\n      check: () => !!document.querySelector('script[src*=\"js.navattic.com\"]'),\n      script: 'https://cdn.jsdelivr.net/npm/hockeystack@latest/hockeystack-navattic.min.js'\n    },\n    {\n      name: 'pardot',\n      check: () => !!document.querySelector('script[src*=\"pi.pardot.com\"]'),\n      script: 'https://cdn.jsdelivr.net/npm/hockeystack@latest/hockeystack-pardot.min.js'\n    },\n    {\n      name: 'qualified',\n      check: () => !!document.querySelector('script[src*=\"qualified\"]'),\n      script: 'https://cdn.jsdelivr.net/npm/hockeystack@latest/hockeystack-qualified.min.js'\n    },\n    {\n      name: 'zoominfo-chat',\n      check: () => !!document.querySelector('script[src*=\"insent.ai\"]'),\n      script: 'https://cdn.jsdelivr.net/npm/hockeystack@latest/hockeystack-zoominfo-chat.min.js'\n    }\n  ];\n\n  // VARIABLES\n  const inactivityTime = 10;\n  const eventListenerList = [];\n  const actionLog = [];\n  const MAX_SQS_PAYLOAD_BYTES = 256 * 1024;\n  const MAX_ACTIVITY_PAYLOAD_BYTES = Math.floor(MAX_SQS_PAYLOAD_BYTES * 0.9);\n  const textEncoder = typeof TextEncoder === 'function' ? new TextEncoder() : null;\n  const BOT_UA_REGEX = /(preview|funnelytics|crawl|hexometer|curl|lynx|ptst|nuhk|googlebot|googlesecurityscanner|gtmetrix|slurp|ask jeeves\\/teoma|ia_archiver|google web preview|mediapartners-google|baiduspider|ezooms|yahooseeker|altavista|mercator|scooter|infoseek|ultraseek|lycos|wget|yadirectfetcher|magpie-crawler|nutch crawler|cms crawler|domnutch|netseer|digincore|fr-crawler|wesee|aliasio|bingpreview|headlesschrome|facebookexternalhit|facebookplatform|facebookexternalua|bot|crawler|sp(i|y)der|search|worm|fetch|nutch)/i;\n\n  const addToLocalStorage = (key, value) => {\n    const item = {\n      value,\n      expiration: Date.now() + (60 * 60 * 1000)\n    };\n    localStorage.setItem(key, JSON.stringify(item));\n  };\n\n  const getFromLocalStorage = key => {\n    try {\n      const itemStr = localStorage.getItem(key);\n\n      if (!itemStr) return null;\n\n      const item = JSON.parse(itemStr);\n\n      // Check if item has expiration and if it's expired\n      if (item.expiration && Date.now() > item.expiration) {\n        localStorage.removeItem(key);\n\n        return null;\n      }\n\n      return item.value;\n    } catch (e) {\n      return null;\n    }\n  };\n\n  const hsScript = document.currentScript || document.querySelector('script[src*=\"hockeystack.min.js\"]');\n\n  if (!hsScript) {\n    console.error('HockeyStack: Script element not found');\n\n    return;\n  }\n\n  const serverURL = hsScript.getAttribute('data-server-url') || 'https://data.hockeystack.com';\n  const apiKey = hsScript.getAttribute('apikey') || hsScript.getAttribute('data-apikey');\n  let fingerprintApiKey = hsScript.getAttribute('data-fingerprint-apikey');\n\n  if (apiKey === '97c0d7b226357c703f4588fe18144d') {\n    fingerprintApiKey = 'vh2bFEwArYpztsvgGQ87';\n  }\n\n  const copyTrackingScript = () => {\n    // create a copy of the current script and change source to staging\n    const newScript = document.createElement('script');\n    newScript.src = 'https://cdn.jsdelivr.net/npm/hockeystack@latest/hockeystack-staging.min.js';\n    newScript.async = 1;\n\n    // Copy all data attributes from current script\n    Array.from(hsScript.attributes).forEach(attr => {\n      if (attr.name.startsWith('data-') || attr.name === 'apikey') {\n        newScript.setAttribute(attr.name, attr.value);\n      }\n    });\n    newScript.dataset.autoGenerated = true;\n    document.getElementsByTagName('head')[0].append(newScript);\n  };\n\n  const hsStaging = getFromLocalStorage('hs_staging') || window.location.search.includes('hsstaging=true');\n\n  if (hsStaging) {\n    if (document.querySelector('script[src*=\"hockeystack-staging.min.js\"]')) {\n      console.log('Script already exists. Skipping initialization');\n\n      return;\n    }\n\n    addToLocalStorage('hs_staging', 'true');\n    copyTrackingScript();\n    console.log('HockeyStack: Running in staging mode');\n\n    return;\n  }\n\n  let intervalStart = hsScript.getAttribute('data-interval-start') * 1000 || 5000;\n  const intervalIncrement = hsScript.getAttribute('data-interval-increment') * 1000 || 2000;\n  let isFingerprintV2 = !!fingerprintApiKey;\n  let isFingerprintV1 =\n    !!(hsScript.getAttribute('cookieless') || hsScript.getAttribute('data-cookieless') || hsScript.getAttribute('data-cookieless') === '') &&\n    !isFingerprintV2;\n  const crossDomain = !!(hsScript.getAttribute('cross-domain') || hsScript.getAttribute('data-cross-domain')) && !isFingerprintV1;\n  let autoIdentify = !!(hsScript.getAttribute('auto-identify') || hsScript.getAttribute('data-auto-identify'));\n  const allowIframe = true; // !!(hsScript.getAttribute('allow-iframe') || hsScript.getAttribute('data-allow-iframe'));\n  const onlyIdentify = !!(hsScript.getAttribute('only-identify') || hsScript.getAttribute('data-only-identify'));\n  const privacyMode = !!(\n    hsScript.getAttribute('privacy-mode') ||\n    hsScript.getAttribute('data-privacy-mode') ||\n    hsScript.getAttribute('data-privacy-mode') === ''\n  );\n\n  const debugMode = window.location.search.includes('hsdebug=true');\n  HockeyStack.cookieless = isFingerprintV1 || isFingerprintV2;\n\n  const fallbackToFingerprintV1 = () => {\n    isFingerprintV2 = false;\n    isFingerprintV1 = true;\n  };\n\n  let fpV2PromiseGet = null;\n\n  if (isFingerprintV2 && fingerprintApiKey) {\n    const existingFingerprintV2 = sessionStorage.getItem('hsfpj');\n\n    if (existingFingerprintV2) {\n      const parsedObject = JSON.parse(existingFingerprintV2);\n      parsedObject.initialized = true;\n\n      fpV2PromiseGet = new Promise((resolve, reject) => {\n        resolve(parsedObject);\n      });\n    } else {\n      const fpPromise = import(`https://fpjscdn.net/v3/${fingerprintApiKey}`)\n        .then(FingerprintJS => FingerprintJS.load({ region: 'eu' }))\n        .catch(err => {\n          if (debugMode) console.error('HockeyStack: Error while loading fingerprint v2 script: ', err);\n\n          fallbackToFingerprintV1();\n        });\n\n      fpV2PromiseGet = fpPromise\n        .then(fp => fp.get())\n        .catch(err => {\n          if (debugMode) console.error('HockeyStack: Error while getting fingerprint from v2 script: ', err);\n\n          fallbackToFingerprintV1();\n        });\n    }\n  }\n\n  let fingerprintV2 = '';\n  let fingerprintMetadata = {};\n\n  if (!apiKey) {\n    console.error('HockeyStack: No API key provided');\n\n    return;\n  }\n\n  // disable HockeyStack for specific API keys\n  if (['d7a8d720de58efe016822c1390cebb', '3f5faca79c311a7348a04aa7389bcb'].includes(apiKey)) {\n    return;\n  }\n\n  if (['695accfb6c874ac0d46cf9c7b3303f', '78f842f2350d245dd06df65bfa49b9', '82ee9e4a8b15fc058046998d5e9fbe'].includes(apiKey)) autoIdentify = true;\n\n  if (debugMode) console.log('HockeyStack: debug mode is on');\n\n  let inactivityCounter = 0;\n  let isInactive = false;\n  let scrollMax = 0;\n  let lastActiveDate = new Date();\n  let isDevicePhone;\n  let exitedPage = false; // sometimes two consequent endSession() calls are made from event listeners in phones\n  let formsOnPage = [];\n  let identity;\n\n  if (hsScript.getAttribute('data-identity')) identity = hsScript.getAttribute('data-identity');\n\n  const documentAlias = document;\n  const navigatorAlias = navigator;\n  const windowAlias = window;\n\n  let customerObject;\n  let userObject = {};\n\n  const getCurrentURL = () => {\n    const url = windowAlias.location.origin + windowAlias.location.pathname + windowAlias.location.search + windowAlias.location.hash;\n\n    return url.toLowerCase();\n  };\n\n  // Tracking state management functions\n  const getTrackingState = () => {\n    try {\n      const stored = localStorage.getItem('hs_tracking_enabled');\n\n      // Default to true (tracking enabled) if not set\n      return stored === null ? true : stored === 'true';\n    } catch (err) {\n      // If localStorage is not available, default to true\n      return true;\n    }\n  };\n\n  const setTrackingState = enabled => {\n    try {\n      localStorage.setItem('hs_tracking_enabled', enabled.toString());\n\n      if (debugMode) console.log('HockeyStack tracking state set to:', enabled);\n    } catch (err) {\n      if (debugMode) console.log('Failed to set tracking state in localStorage:', err.message);\n    }\n  };\n\n  let globalCurrentPage = getCurrentURL();\n\n  const getUtf8ByteSize = value => {\n    const stringifiedValue = typeof value === 'string' ? value : JSON.stringify(value);\n\n    if (textEncoder) return textEncoder.encode(stringifiedValue).length;\n\n    return encodeURIComponent(stringifiedValue).replace(/%[A-F\\d]{2}/g, 'U').length;\n  };\n\n  const sendReq = (path, requestObj, skipError) => {\n    if (!getTrackingState()) {\n      if (debugMode) console.log('HockeyStack tracking is disabled, skipping request');\n\n      return;\n    }\n\n    const supportsSendBeacon =\n      typeof navigatorAlias === 'object' &&\n      typeof navigatorAlias.sendBeacon === 'function' &&\n      typeof Blob === 'function' &&\n      apiKey !== '50fcf52eca5476546b54230ccbaea2';\n\n    const serverUrl = `${serverURL}${path}`;\n    let success;\n\n    if (supportsSendBeacon) {\n      success = sendReqViaBeacon(serverUrl, requestObj, skipError);\n\n      // If it failed with beacon, fall back and try it with XHR.\n      if (!success) {\n        success = sendReqViaXHR(serverUrl, requestObj, skipError);\n      }\n    } else {\n      success = sendReqViaXHR(serverUrl, requestObj, skipError);\n    }\n\n    return success;\n  };\n\n  const sendReqViaBeacon = (serverUrl, requestObj, skipError) => {\n    if (debugMode) console.log('Send request via beacon', JSON.stringify(requestObj));\n\n    let success;\n\n    try {\n      // sendBeacon skips CORS, so we need to use a content type that is CORS-safelisted (application/json is not,\n      // but text/plain is). See https://fetch.spec.whatwg.org/#cors-safelisted-request-header.\n      const data = new Blob([JSON.stringify(requestObj)], { type: 'text/plain' });\n      success = navigatorAlias.sendBeacon(serverUrl, data);\n    } catch (err) {\n      if (debugMode) console.log('Error while sending request via beacon: ', err.message);\n\n      if (!skipError) sendErrorsToServer(err, { operation: 'sendReqViaBeacon', requestObj, serverUrl });\n\n      success = false;\n    }\n\n    if (debugMode) console.log('Sent request via beacon', success);\n\n    return success;\n  };\n\n  const sendReqViaXHR = (serverUrl, requestObj, skipError) => {\n    if (debugMode) console.log('Send request via XHR', JSON.stringify(requestObj));\n\n    let success;\n\n    try {\n      const request = new XMLHttpRequest();\n      request.open('POST', serverUrl, true);\n      request.setRequestHeader('Content-Type', 'text/plain; charset=UTF-8');\n      request.send(JSON.stringify(requestObj));\n      request.onreadystatechange = () => true;\n      success = true;\n    } catch (err) {\n      if (!skipError) sendErrorsToServer(err, { operation: 'sendReqViaXHR', requestObj, serverUrl });\n\n      success = false;\n    }\n\n    if (debugMode) console.log('Sent request via XHR', success);\n\n    return success;\n  };\n\n  const cssEscape = v => {\n    try {\n      return (window.CSS && CSS.escape) ?\n        CSS.escape(String(v)) :\n        String(v)\n          // eslint-disable-next-line no-control-regex\n          .replace(/[\\0-\\x1F\\x7F]/g, '\\uFFFD')\n          .replace(/(^-?\\d)|(^-)|(^--)/, m => '\\\\' + m)\n          .replace(/[\\s!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~]/g, m => '\\\\' + m);\n    } catch { return String(v); }\n  };\n\n  const sendErrorsToServer = (err, metadata) => {\n    if (debugMode) {\n      console.log('HockeyStack: error metadata', metadata);\n      console.error(err);\n    }\n\n    const errorObj = {\n      error: err.message,\n      apiKey,\n      page: window.location.href,\n      metadata\n    };\n    sendReq('/send-error', errorObj, true);\n  };\n\n  const initializeWithFingerprintV2 = apiKey => {\n    if (debugMode) console.log('HockeyStack: Initializing with fingerprint v2');\n\n    fpV2PromiseGet\n      .then(response => {\n        if (response && response.visitorId) {\n          if (debugMode) console.log('HockeyStack: Fingerprint v2 found', response);\n\n          fingerprintV2 = response.visitorId;\n          fingerprintMetadata = {\n            confidence: response.confidence.score,\n            version: response.meta.version,\n            requestId: response.requestId,\n            visitorFound: response.visitorFound\n          };\n\n          // if response is coming from api, save it to session storage\n          if (!response.initialized) {\n            sessionStorage.setItem('hsfpj', JSON.stringify(response));\n          }\n        } else {\n          if (debugMode) console.log('HockeyStack: Fingerprint v2 not found, falling back to v1');\n\n          fallbackToFingerprintV1();\n        }\n\n        HockeyStack.init(apiKey);\n      })\n      .catch(err => {\n        if (debugMode) console.error('HockeyStack: Error while getting fingerprint v2: ', err);\n\n        fallbackToFingerprintV1();\n        HockeyStack.init(apiKey);\n      });\n  };\n\n  try {\n    HockeyStack.initWrapper = function (apiKey) {\n      if (!isFingerprintV2) HockeyStack.init(apiKey);\n      else initializeWithFingerprintV2(apiKey);\n    };\n\n    HockeyStack.init = function (apiKey) {\n      if (shouldSkipTracking()) return; // if bot/webdriver/disabled param, don't run the script\n\n      try {\n        if (!allowIframe && window.parent.location !== window.location) return; // if in iframe, don't run the script\n      } catch (err) {\n        // error is most likely due to cors. don't run the script.\n        return;\n      }\n\n      HockeyStack.apiKey = apiKey;\n\n      lastActiveDate = new Date();\n      isDevicePhone = getDevice(navigatorAlias.userAgent.toLowerCase()) === 'phone';\n\n      // check if we should add visitor id cookie\n      if (!(isFingerprintV1 || isFingerprintV2)) setCookie('hs_uuid', getId(), 365);\n\n      customerObject = {\n        website: window.location.hostname,\n        apiKey: HockeyStack.apiKey,\n        isFingerprintV1,\n        isFingerprintV2,\n        fingerprintMetadata,\n        debugMode\n      };\n\n      if (debugMode) console.log('HockeyStack: userObject before init', JSON.parse(JSON.stringify(userObject)));\n\n      // Important: apply defaults first so previously-set values (including shared/custom) are not overwritten.\n      userObject = { ...getUserProperties(), ...userObject };\n\n      if (debugMode) console.log('HockeyStack: userObject in init', JSON.parse(JSON.stringify(userObject)));\n\n      HockeyStack.initialized = true;\n\n      // Process queued calls now that fingerprint is ready\n      if (window.hockeystackQueue) {\n        window.hockeystackQueue.forEach(callback => {\n          if (debugMode) console.log('HockeyStack: processing queued callback', callback);\n\n          try {\n            callback();\n          } catch (err) {\n            sendErrorsToServer(err, { operation: 'hockeystackQueue callback' });\n          }\n        });\n        window.hockeystackQueue = [];\n      }\n\n      identifyThroughURL();\n      trackGravityForms();\n\n      createAction('enter-page', null);\n      sendActions();\n\n      try {\n        trackContentSchema();\n      } catch (err) {\n        sendErrorsToServer(err, { operation: 'trackContentSchema' });\n      }\n\n      HockeyStack.trackSession();\n      HockeyStack.sendIntervalData();\n    };\n\n    HockeyStack.sendIntervalData = function () {\n      setTimeout(() => {\n        if (documentAlias.hasFocus()) {\n          intervalStart += intervalIncrement;\n          HockeyStack.endSession(true);\n          HockeyStack.sendIntervalData();\n        } else {\n          HockeyStack.sendIntervalData();\n        }\n      }, intervalStart);\n    };\n\n    HockeyStack.endSession = function (isMid) {\n      let scrollDepth = (!hasVerticalScroll()) ? 100 : parseInt((scrollMax / (getDocHeight() - getViewportHeight())) * 100);\n\n      if (scrollDepth > 100) scrollDepth = 100;\n\n      if (isInactive && (typeof isMid === 'undefined' || !isMid)) {\n        createAction('scroll-depth', null, scrollDepth);\n        createAction('end-session');\n        sendActions();\n\n        return;\n      }\n\n      if (!isInactive && typeof isMid !== 'undefined' && isMid) {\n        createAction('scroll-depth', null, scrollDepth);\n        sendActions();\n\n        return;\n      }\n\n      let nextSiteURL = documentAlias.activeElement.href;\n\n      if (sameSite(nextSiteURL) && globalCurrentPage !== nextSiteURL) {\n        nextSiteURL = nextSiteURL.split('#')[0];\n        const currentURL = getCurrentURL();\n\n        if (nextSiteURL.startsWith('http') && currentURL !== nextSiteURL) { // && currentURL === lastURL\n          createAction('scroll-depth', null, scrollDepth);\n          sendActions();\n        }\n      } else {\n        createAction('scroll-depth', null, scrollDepth);\n        createAction('end-session');\n        sendActions();\n      }\n    };\n\n    HockeyStack.trackSession = () => {\n      isInactive = false;\n\n      addEvent(windowAlias, 'pagehide', () => {\n        if (!exitedPage) {\n          exitedPage = true;\n          HockeyStack.endSession();\n        }\n      });\n\n      if (isDevicePhone) {\n        addEvent(windowAlias, 'pageshow', event => {\n          if (event.persisted) HockeyStack.initWrapper(HockeyStack.apiKey);\n        });\n      }\n\n      // check if page is in focus\n      let hasFocus = documentAlias.hasFocus();\n\n      function onchange () {\n        hasFocus = documentAlias.hasFocus();\n\n        if (hasFocus) {\n          exitedPage = false;\n          resetInactivity();\n        } else {\n          if (isDevicePhone && !exitedPage) {\n            exitedPage = true;\n            HockeyStack.endSession();\n          }\n        }\n      }\n\n      setInterval(() => {\n        if (hasFocus !== documentAlias.hasFocus()) onchange();\n      }, 500);\n\n      addEvent(windowAlias, 'message', event => {\n        if (event.data && event.data.name === 'hockeystack-identify' && event.data.email) {\n          HockeyStack.identify(event.data.email);\n        } else if (event.data && event.data.name === 'hockeystack-onsubmit' && event.data.element && event.source !== window) {\n          createAction('onsubmit', null, { element: event.data.element, eventSource: 'hockeystack-onsubmit' });\n        } else if (event.data && event.data.name === 'hockeystack-identify-form' && event.data.value) {\n          identifyThroughForm(event.data.value, null);\n        } else if (event.data && event.data.type === 'hsFormCallback' && event.data.eventName === 'onFormSubmit') {\n          if (autoIdentify) {\n            const email = event.data.data.find(d => d.name === 'email').value;\n            HockeyStack.identify(email);\n          }\n\n          createAction('onsubmit', null, { element: '#hsForm_' + event.data.id, eventSource: 'hsFormCallback' });\n        } else if (event.data && event.data.meetingBookSucceeded) {\n          if (autoIdentify) {\n            const email = event.data.meetingsPayload.bookingResponse.postResponse.contact.email;\n            HockeyStack.identify(email);\n          }\n\n          HockeyStack.goal('Meeting Booked on Website', { integration: 'HubSpot' });\n        }\n      });\n\n      addEvent(windowAlias, 'klaviyoForms', event => {\n        const metadata = event.detail.metaData;\n\n        if (!metadata) return;\n\n        if (autoIdentify) {\n          const email = metadata.$email;\n          HockeyStack.identify(email);\n        }\n\n        HockeyStack.goal('Submit Klaviyo Form', { integration: 'Klaviyo', klaviyoFormId: event.detail.formId });\n      });\n\n      function identifyThroughForm (value, form) {\n        const email = value.trim();\n\n        if (debugMode) console.log('identifyThroughForm fired', email);\n\n        let clickInfo = {};\n        try {\n          clickInfo = getClickInfo(form);\n        } catch (err) {\n          sendErrorsToServer(err, { operation: 'identifyThroughForm/getClickInfo' });\n        }\n\n        if (validateEmail(email)) {\n          HockeyStack.identify(email);\n\n          HockeyStack.goal('Identified from Form', {\n            email: formatIdentity(email),\n            ...JSON.parse(JSON.stringify(clickInfo))\n          });\n        }\n      }\n\n      function checkSubmitClickInForm (target) {\n        const clickedButton = target.closest('button') || target.closest('a');\n\n        if (!clickedButton) return;\n\n        if (clickedButton.nodeName === 'A' && !clickedButton.className.includes('button')) return;\n\n        if (debugMode) console.log('checkSubmitClickInForm fired', clickedButton);\n\n        const form = target.closest('form');\n\n        if (form) {\n          if (debugMode) console.log('found form', form);\n\n          const elements = form.elements;\n          let isValid = true;\n\n          for (let i = 0; i < elements.length; i++) {\n            const element = elements[i];\n\n            if (!element || element.type === 'hidden') continue;\n\n            if (element.validity && !element.validity.valid) {\n              isValid = false;\n            }\n\n            // identify if element is type email\n            if (autoIdentify && element.type === 'email') {\n              identifyThroughForm(element.value, form);\n            }\n          }\n\n          // track submission if button is type submit or has submission classes\n          const hasSubmissionClasses = !!clickedButton.className.match(/(cta |submit|submission|book-demo)/g);\n          const hasOnSubmitInActionLog = actionLog.find(action => action.action.actionType === 'onsubmit');\n\n          if (\n            isValid &&\n            !hasOnSubmitInActionLog &&\n            (clickedButton.type === 'submit' || hasSubmissionClasses)\n          ) {\n            let clickInfo = {};\n\n            try {\n              clickInfo = getClickInfo(form);\n            } catch (err) {\n              sendErrorsToServer(err, { operation: 'checkSubmitClickInForm/getClickInfo' });\n            }\n\n            const clickInfoObj = JSON.parse(JSON.stringify(clickInfo));\n\n            createAction('onsubmit', null, { ...clickInfoObj, eventSource: 'checkSubmitClickInForm' });\n          }\n        } else if (autoIdentify) {\n          const allInputs = [...document.querySelectorAll('input')];\n\n          if (debugMode) console.log('found all inputs to search for email', allInputs);\n\n          allInputs.forEach(input => {\n            if (\n              input.type !== 'email' &&\n              !input.placeholder?.toLowerCase().includes('email') &&\n              !input.name?.toLowerCase().includes('email')\n            ) return;\n\n            const email = input.value.trim();\n\n            if (validateEmail(email)) HockeyStack.identify(email);\n          });\n        }\n      }\n\n      function onClickFunc (e) {\n        if (!window.innerPageClick) return;\n\n        resetInactivity();\n\n        let obj;\n        try {\n          obj = getClickInfo(e.target);\n          createAction('onclick', null, obj);\n        } catch (err) {\n          sendErrorsToServer(err, { operation: 'onClickFunc/getClickInfo' });\n        }\n\n        checkSubmitClickInForm(e.target);\n\n        urlRefresh();\n      }\n\n      let scrollHeight = 0;\n\n      function onScrollFunc (e) {\n        resetInactivity();\n\n        scrollHeight = Math.max(scrollHeight, window.scrollY, document.body.scrollTop, document.documentElement.scrollTop);\n\n        if (scrollHeight > scrollMax) scrollMax = scrollHeight;\n      }\n\n      function onSubmitFunc (e) {\n        resetInactivity();\n\n        if (debugMode) console.log('onsubmit fired');\n\n        const form = e.target;\n\n        let clickInfo = {};\n        try {\n          clickInfo = getClickInfo(form);\n        } catch (err) {\n          sendErrorsToServer(err, { operation: 'onSubmitFunc/getClickInfo' });\n        }\n\n        if (clickInfo && clickInfo.element.startsWith('#hsForm_')) return;\n\n        try {\n          const elements = form.elements;\n\n          for (let i = 0; i < elements.length; i++) {\n            const element = elements[i];\n\n            if (debugMode) console.log('form element', element.type, element.name, element.value);\n\n            if (element.type === 'search' && elements.length <= 2) {\n              const obj = { ...clickInfo, value: element.value };\n              createAction('onsearch', null, obj);\n\n              return;\n            } else if (element.type === 'text' && (['s', 'q', 'k'].includes(element.name) || /search|query|keyword/i.test(element.name)) && elements.length <= 2) {\n              const obj = { ...clickInfo, value: element.value };\n              createAction('onsearch', null, obj);\n\n              return;\n            } else if (autoIdentify && ['email', 'text'].includes(element.type)) {\n              identifyThroughForm(element.value, form);\n\n              window.parent?.postMessage({ name: 'hockeystack-identify-form', value: element.value }, '*');\n            }\n          }\n\n          if (e.target.querySelector('input[type=submit]') && /search/i.test(e.target.querySelector('input[type=submit]').value) && e.target.querySelectorAll('input[type=text]').length === 1) {\n            const element = e.target.querySelector('input[type=text]');\n            const obj = { ...clickInfo, value: element.value };\n            createAction('onsearch', null, obj);\n\n            return;\n          }\n\n          const clickInfoObj = JSON.parse(JSON.stringify(clickInfo));\n\n          createAction('onsubmit', null, { ...clickInfoObj, eventSource: 'onSubmitFunc' });\n\n          window.parent?.postMessage({ name: 'hockeystack-onsubmit', element: (clickInfo || {}).element }, '*');\n        } catch (err) {\n          sendErrorsToServer(err, { operation: 'onSubmitFunc' });\n        }\n      }\n\n      addEvent(document, 'mouseover', () => {\n        window.innerPageClick = true;\n      });\n      addEvent(document, 'mouseleave', () => {\n        window.innerPageClick = false;\n      });\n\n      function resetInactivity () {\n        if ((new Date().getTime()) - lastActiveDate.getTime() > (1000 * 60 * inactivityTime)) {\n          isInactive = true;\n          HockeyStack.endSession();\n        }\n\n        lastActiveDate = new Date();\n        inactivityCounter = 0;\n\n        if (isInactive) {\n          setTimeout(() => {\n            if (documentAlias.hasFocus()) HockeyStack.initWrapper(HockeyStack.apiKey);\n          }, 5000);\n        }\n\n        isInactive = false;\n      }\n\n      addEvent(windowAlias, 'mousemove', resetInactivity);\n      addEvent(windowAlias, 'mousedown', e => onClickFunc(e));\n      addEvent(windowAlias, 'scroll', e => onScrollFunc(e));\n      addEvent(windowAlias, 'keydown', resetInactivity);\n\n      // track forms on page and window submissions\n      formsOnPage = [...document.querySelectorAll('form')];\n      formsOnPage.forEach(form => addEvent(form, 'submit', e => onSubmitFunc(e)));\n\n      // workaround to dynamically added forms\n      setInterval(() => {\n        const newFormsOnPage = [...document.querySelectorAll('form')].filter(form => !formsOnPage.includes(form));\n        newFormsOnPage.forEach(form => addEvent(form, 'submit', e => onSubmitFunc(e)));\n        formsOnPage = formsOnPage.concat(newFormsOnPage);\n      }, 5000);\n\n      addEvent(windowAlias, 'submit', e => {\n        if (formsOnPage.includes(e.target)) return;\n\n        onSubmitFunc(e);\n      });\n\n      // track user inactivity\n      const inactivityCheck = setInterval(() => {\n        inactivityCounter++;\n\n        if (inactivityCounter >= inactivityTime) inactivityEndSession();\n      }, 60000);\n\n      function inactivityEndSession () {\n        clearInterval(inactivityCheck);\n        isInactive = true;\n        HockeyStack.endSession();\n      }\n    };\n\n    HockeyStack.identify = (newIdentity, userProp) => {\n      if (debugMode) console.log('Identify called with', newIdentity, userProp);\n\n      if (typeof newIdentity === 'string') {\n        newIdentity = formatIdentity(newIdentity);\n        identity = newIdentity;\n        userObject.identity = newIdentity;\n\n        if (window.parent && window.parent.postMessage) {\n          window.parent.postMessage({ name: 'hockeystack-identify', identity }, '*');\n        }\n      } else if (typeof newIdentity === 'object') {\n        userObject.custom = Object.assign((userObject.custom || {}), newIdentity);\n      }\n\n      if (userProp && typeof userProp === 'object') {\n        userObject.custom = Object.assign((userObject.custom || {}), userProp);\n      }\n\n      createAction('identify', null);\n    };\n\n    HockeyStack.addSharedProperty = ({ key, value, properties }) => {\n      const sharedObject = { key, value, properties };\n\n      if (debugMode) console.log('HockeyStack: Shared property called with', JSON.stringify(sharedObject));\n\n      if (!userObject.shared) userObject.shared = [];\n\n      if (debugMode) console.log('HockeyStack: userObject.shared', userObject.shared);\n\n      try {\n        const existingIndex = userObject.shared.findIndex(shared => shared.key === key);\n\n        if (existingIndex !== -1) {\n          userObject.shared.splice(existingIndex, 1, sharedObject);\n        } else {\n          userObject.shared.push(sharedObject);\n        }\n      } catch (err) {\n        sendErrorsToServer(err, { operation: 'addSharedProperty', sharedObject });\n      }\n\n      createAction('identify', null);\n    };\n\n    HockeyStack.goal = (actionName, actionProperties = {}, actionDate) => {\n      if (debugMode) console.log('Goal called with', actionName, JSON.stringify(actionProperties), actionDate);\n\n      const currentURL = windowAlias.location.origin + windowAlias.location.pathname + windowAlias.location.search;\n      const actionObject = {\n        actionName,\n        actionProperties,\n        actionType: 'custom',\n        actionDate: actionDate ?\n          new Date(actionDate).toISOString() :\n          (isInactive ? new Date(lastActiveDate.getTime()).toISOString() : new Date().toISOString())\n      };\n      actionLog.push({ action: actionObject, url: currentURL.toLowerCase() });\n    };\n\n    HockeyStack.toggleTracking = enabled => {\n      if (typeof enabled === 'undefined') {\n        // If no argument provided, toggle the current state\n        const currentState = getTrackingState();\n        setTrackingState(!currentState);\n\n        if (debugMode) console.log('HockeyStack tracking toggled to:', !currentState);\n\n        return !currentState;\n      } else {\n        // Set to specific state\n        setTrackingState(!!enabled);\n\n        if (debugMode) console.log('HockeyStack tracking set to:', !!enabled);\n\n        return !!enabled;\n      }\n    };\n\n    // OTHER METHODS\n    const addEvent = (element, type, listener) => {\n      if (!['submit', 'change'].includes(type) && eventListenerList.includes(type)) return;\n\n      if (debugMode) console.log('Adding event listener for', type, 'on', element);\n      if (typeof element.addEventListener !== 'undefined') element.addEventListener(type, listener, false);\n      else element.attachEvent('on' + type, listener);\n\n      eventListenerList.push(type);\n    };\n\n    const urlRefresh = () => {\n      // if page changed on its own, create an enter-page action\n      if (getCurrentURL() !== globalCurrentPage) {\n        const scrollDepth = (!hasVerticalScroll()) ? 100 : parseInt((scrollMax / (getDocHeight() - getViewportHeight())) * 100);\n        createAction('scroll-depth', globalCurrentPage, scrollDepth);\n\n        createAction('enter-page', null);\n        sendActions();\n      }\n\n      globalCurrentPage = getCurrentURL();\n    };\n\n    setInterval(() => {\n      urlRefresh();\n    }, 500);\n\n    const createAction = (actionType, URL, actionInfo) => {\n      if (debugMode) console.log('Creating action', actionType, URL, JSON.stringify(actionInfo));\n\n      const currentURL = URL || getCurrentURL();\n      const localCurrentPage = globalCurrentPage;\n\n      if (onlyIdentify && actionType !== 'identify') return;\n\n      const actionObject = {\n        actionType,\n        actionDate: isInactive ? new Date(lastActiveDate.getTime()).toISOString() : new Date().toISOString()\n      };\n\n      if (actionType === 'onclick') {\n        actionObject.actionElement = actionInfo.element;\n\n        if (actionInfo.text) actionObject.actionText = actionInfo.text;\n        if (actionInfo.url) {\n          actionObject.actionUrl = actionInfo.url;\n\n          if (actionInfo.url === currentURL && currentURL !== localCurrentPage) {\n            createAction('onclick', localCurrentPage, actionInfo);\n\n            return;\n          }\n        }\n      } else if (actionType === 'onsearch') {\n        actionObject.actionValue = actionInfo.value;\n        actionObject.actionElement = actionInfo.element;\n      } else if (actionType === 'scroll-depth') {\n        actionObject.actionNumber = actionInfo || 100; // scroll-depth null bug\n      } else if (actionType === 'onsubmit') {\n        actionObject.actionElement = actionInfo.element;\n      }\n\n      if (!['enter-page', 'scroll-depth'].includes(actionType) && currentURL !== globalCurrentPage) {\n        urlRefresh();\n      }\n\n      actionLog.push({ action: actionObject, url: currentURL.toLowerCase() });\n\n      // send actions automatically on submit or identify\n      if (actionType === 'onsubmit' || actionType === 'identify') {\n        sendActions();\n      }\n    };\n\n    const formatIdentity = identity => privacyMode ? SHA1(identity.toLowerCase()) : identity.toLowerCase();\n\n    const buildActionBatches = (actions, requestBase) => {\n      const batches = [];\n      let currentBatch = [];\n      let currentBatchStartIndex = -1;\n      const fitsWithinLimit = batch =>\n        getUtf8ByteSize({ ...requestBase, actionLog: batch }) <= MAX_ACTIVITY_PAYLOAD_BYTES;\n\n      actions.forEach((actionEntry, actionIndex) => {\n        const candidateBatch = currentBatch.concat(actionEntry);\n\n        if (fitsWithinLimit(candidateBatch)) {\n          if (currentBatch.length === 0) {\n            currentBatchStartIndex = actionIndex;\n          }\n\n          currentBatch = candidateBatch;\n\n          return;\n        }\n\n        if (currentBatch.length > 0) {\n          batches.push({\n            actions: currentBatch,\n            startIndex: currentBatchStartIndex,\n            endIndex: actionIndex - 1\n          });\n\n          const nextBatch = [actionEntry];\n\n          if (fitsWithinLimit(nextBatch)) {\n            currentBatch = nextBatch;\n            currentBatchStartIndex = actionIndex;\n          } else {\n            if (debugMode) console.warn('HockeyStack: Dropping oversized action from payload', actionEntry);\n\n            currentBatch = [];\n            currentBatchStartIndex = -1;\n          }\n        } else {\n          if (debugMode) console.warn('HockeyStack: Dropping oversized action from payload', actionEntry);\n        }\n      });\n\n      if (currentBatch.length > 0) {\n        batches.push({\n          actions: currentBatch,\n          startIndex: currentBatchStartIndex,\n          endIndex: actions.length - 1\n        });\n      }\n\n      return batches;\n    };\n\n    const sendActions = () => {\n      if (shouldSkipTracking()) return; // do not send tracking payloads at all\n      if (actionLog.length === 0) return;\n\n      const actionLogCopy = JSON.parse(JSON.stringify(actionLog));\n\n      const referrer = getReferrer(getCurrentURL(), document.referrer);\n      const requestBase = { customerObject, userObject, referrer };\n      const actionBatches = buildActionBatches(actionLogCopy, requestBase);\n\n      if (actionBatches.length === 0) {\n        actionLog.length = 0;\n\n        return;\n      }\n\n      let removeUntilIndex = -1;\n\n      actionBatches.every(batch => {\n        const success = sendReq('/send', { ...requestBase, actionLog: batch.actions });\n\n        if (success) {\n          removeUntilIndex = batch.endIndex;\n\n          return true;\n        }\n\n        // Keep unsent actions in the queue while still trimming oversized dropped entries.\n        removeUntilIndex = batch.startIndex - 1;\n\n        return false;\n      });\n\n      if (removeUntilIndex >= 0) actionLog.splice(0, removeUntilIndex + 1);\n    };\n\n    const sameSite = uri => {\n      if (typeof uri === 'undefined') return false;\n\n      let url;\n      try {\n        url = new URL(uri);\n      } catch (err) {\n        sendErrorsToServer(err, { operation: 'sameSite/newURL', uri });\n\n        return false;\n      }\n\n      return windowAlias.location.hostname === url.hostname;\n    };\n\n    const getId = () => getCookie('hs_uuid') || generateUUID();\n\n    const generateUUID = () => {\n      // Use native crypto.randomUUID() if available (Chrome 92+, Firefox 95+, Safari 15.4+)\n      if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n        return crypto.randomUUID();\n      }\n\n      // Fallback to crypto.getRandomValues() for older browsers (IE11+, all modern browsers)\n      if (typeof crypto !== 'undefined' && typeof crypto.getRandomValues === 'function') {\n        const bytes = new Uint8Array(16);\n        crypto.getRandomValues(bytes);\n\n        // Set version 4 bits (0100xxxx in byte 6)\n        bytes[6] = (bytes[6] & 0x0f) | 0x40;\n        // Set variant bits (10xxxxxx in byte 8)\n        bytes[8] = (bytes[8] & 0x3f) | 0x80;\n\n        // Convert to hex string with proper UUID format\n        const hex = Array.from(bytes, b => b.toString(16).padStart(2, '0')).join('');\n\n        return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n      }\n\n      // Last resort fallback for extremely old browsers without crypto support\n      // Uses performance.now() for additional entropy if available\n      let d = new Date().getTime();\n      let d2 = (typeof performance !== 'undefined' && performance.now && (performance.now() * 1000)) || 0;\n\n      return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n        let r = Math.random() * 16;\n\n        if (d > 0) {\n          r = (d + r) % 16 | 0;\n          d = Math.floor(d / 16);\n        } else {\n          r = (d2 + r) % 16 | 0;\n          d2 = Math.floor(d2 / 16);\n        }\n\n        return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);\n      });\n    };\n\n    const validateEmail = email =>\n      String(email)\n        .toLowerCase()\n        .match(\n          /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\n        );\n\n    const setCookie = (cookieKey, value, days) => {\n      const date = new Date();\n      date.setDate(date.getDate() + days);\n      const cookieValue = value + ((days == null) ? '' : '; expires=' + date.toUTCString()) + '; path=/;SameSite=Lax' + (crossDomain ? `;domain=${window.location.hostname}` : '');\n      documentAlias.cookie = cookieKey + '=' + cookieValue;\n    };\n\n    const getCookie = cookieKey => {\n      let i;\n      let k;\n      let v;\n      const cookieArray = documentAlias.cookie.split(';');\n\n      for (i = 0; i < cookieArray.length; i++) {\n        k = cookieArray[i].substr(0, cookieArray[i].indexOf('='));\n        v = cookieArray[i].substr(cookieArray[i].indexOf('=') + 1);\n        k = k.replace(/^\\s+|\\s+$/g, '');\n\n        if (k === cookieKey) return v;\n      }\n\n      return null;\n    };\n\n    const getReferrer = (pageUrl, referrerUrl) => {\n      if (/(\\?.*utm_.*=)/.test(pageUrl)) return pageUrl;\n      else if (/((\\?|&)ref=)/.test(pageUrl)) return pageUrl;\n      else if (/((\\?|&)(gclid|fbclid|msclkid)=)/.test(pageUrl)) return pageUrl;\n      else if (referrerUrl !== '') return referrerUrl;\n      else return '';\n    };\n\n    const isBot = () => {\n      const userAgent = navigatorAlias.userAgent.toLowerCase();\n\n      return BOT_UA_REGEX.test(userAgent);\n    };\n\n    const shouldSkipTracking = () =>\n      windowAlias.location.search.includes('disable_abtestingai') ||\n      navigatorAlias.webdriver ||\n      isBot();\n\n    const getDevice = userAgent => /(ipad|tablet|(android(?!.*mobile))|(windows(?!.*phone)(.*touch))|kindle|playbook|silk|(puffin(?!.*(IP|AP|WP))))/i.test(userAgent) ?\n      'tablet' :\n      /(mobi|ipod|phone|blackberry|opera mini|fennec|minimo|symbian|psp|nintendo ds|archos|skyfire|puffin|blazer|bolt|gobrowser|iris|maemo|semc|teashark|uzard)/i.test(userAgent) ?\n        'phone' :\n        'desktop';\n\n    const safeGet = (fn, fallback) => {\n      try {\n        const v = fn();\n\n        return (v === undefined || v === null) ? fallback : v;\n      } catch { return fallback; }\n    };\n\n    const getUserProperties = () => ({\n      language: safeGet(() => navigatorAlias.language, undefined),\n      platform: safeGet(() => navigatorAlias.platform, undefined),\n      uuid: getId(),\n      fingerprintV2: isFingerprintV2 ? fingerprintV2 : undefined,\n      screen: {\n        availHeight: safeGet(() => windowAlias.screen.availHeight, undefined),\n        height: safeGet(() => windowAlias.screen.height, undefined),\n        width: safeGet(() => windowAlias.screen.width, undefined),\n        depth: safeGet(() => windowAlias.screen.colorDepth + windowAlias.screen.pixelDepth, undefined)\n      },\n      // those are deprecated so we can remove them i think?\n      mimeTypes: safeGet(() => Array.from(navigatorAlias.mimeTypes || []).map(m => m.type).join(''), ''),\n      plugins: safeGet(() => Array.from(navigatorAlias.plugins || []).map(p => p.filename || p.name || '').join(''), ''),\n      storageEnabled: [\n        safeGet(() => !!localStorage, false),\n        safeGet(() => !!indexedDB, false),\n        safeGet(() => !!navigatorAlias.cookieEnabled, false)\n      ].join(''),\n      otherInfo: String(Number(safeGet(() => navigatorAlias.hardwareConcurrency, 0)) || 0),\n      identity,\n      custom: {},\n      shared: []\n    });\n\n    const identifyThroughURL = parameterName => {\n      const urlParams = [...new URLSearchParams(window.location.search)];\n      const identityMap = urlParams.find(param => {\n        let isParamKeyMatch = false;\n\n        const paramKeyFromURL = param[0].toLowerCase();\n\n        if (parameterName) isParamKeyMatch = paramKeyFromURL === parameterName;\n        else isParamKeyMatch = paramKeyFromURL.includes('email');\n\n        if (isParamKeyMatch) {\n          if (debugMode) console.log('Possible identify through URL: ', JSON.stringify(param));\n          if (validateEmail(param[1])) return true;\n        }\n\n        return false;\n      });\n\n      if (identityMap && identityMap[1]) HockeyStack.identify(identityMap[1]);\n    };\n\n    const getDocHeight = () => {\n      const d = documentAlias;\n\n      return Math.max(\n        Math.max(d.body.scrollHeight, d.documentElement.scrollHeight),\n        Math.max(d.body.offsetHeight, d.documentElement.offsetHeight),\n        Math.max(d.body.clientHeight, d.documentElement.clientHeight)\n      );\n    };\n\n    const getViewportHeight = () => {\n      const d = documentAlias;\n\n      return Math.min(\n        Math.min(d.body.clientHeight, d.documentElement.clientHeight),\n        Math.min(d.body.offsetHeight, d.documentElement.offsetHeight),\n        window.innerHeight\n      );\n    };\n\n    const hasVerticalScroll = () => {\n      if (windowAlias.innerHeight) {\n        return Math.max(documentAlias.body.scrollHeight, documentAlias.documentElement.scrollHeight) > windowAlias.innerHeight;\n      } else {\n        return documentAlias.documentElement.scrollHeight >\n            documentAlias.documentElement.offsetHeight ||\n            documentAlias.body.scrollHeight > documentAlias.body.offsetHeight;\n      }\n    };\n\n    const getClickInfo = el => {\n      const path = [];\n      let text = '';\n      let url = '';\n\n      if (!el) return {};\n\n      if (el.placeholder) text = el.placeholder;\n      else if (el.innerText) {\n        let innerText = el.innerText.replace(/\\n/g, ' ');\n\n        if (innerText.length > 103) innerText = innerText.substring(0, 100) + '...';\n\n        text = innerText.trim();\n      } else if (el.tagName.toLowerCase() === 'input' && (el.type === 'button' || el.type === 'submit')) {\n        text = (el.value || '').trim();\n      }\n\n      if (el.src) url = el.src.trim();\n      else if (el.href) url = el.href.trim();\n\n      while (el && el.parentNode) {\n        // Prefer an id if present\n        if (el.id) {\n          path.unshift('#' + cssEscape(el.id));\n          break;\n        }\n\n        // Build safe tag + classes selector\n        const isSVG = (el.nodeType === 1 && el.namespaceURI === 'http://www.w3.org/2000/svg');\n        const rawClass = isSVG ? (el.className ? el.className.baseVal : el.getAttribute('class')) : el.className;\n        const classTokens = (rawClass || '').trim().split(/\\s+/).filter(Boolean);\n        const classSelector = classTokens.map(c => '.' + cssEscape(c)).join('');\n\n        let t = el.tagName.toLowerCase() + classSelector;\n\n        const parent = el.parentElement;\n\n        if (parent) {\n          const tag = el.tagName.toLowerCase();\n          const sibByTag = Array.from(parent.children).filter(n => n.tagName.toLowerCase() === tag);\n\n          if (sibByTag.length > 1) t += `:nth-of-type(${sibByTag.indexOf(el) + 1})`;\n        }\n\n        path.unshift(t);\n        el = el.parentNode;\n      }\n\n      const res = { element: path.join(' ') };\n\n      if (text) res.text = text;\n      if (url) res.url = url;\n\n      return res;\n    };\n\n    HockeyStack.getClickInfo = getClickInfo;\n\n    const SHA1 = msg => {\n      const rotateLeft = (n, s) => (n << s) | (n >>> (32 - s));\n\n      const cvtHex = val => {\n        let str = '';\n        let i;\n        let v;\n\n        for (i = 7; i >= 0; i--) {\n          v = (val >>> (i * 4)) & 0x0f;\n          str += v.toString(16);\n        }\n\n        return str;\n      };\n\n      const Utf8Encode = string => {\n        string = string.replace(/\\r\\n/g, '\\n');\n        let utftext = '';\n\n        for (let n = 0; n < string.length; n++) {\n          const c = string.charCodeAt(n);\n\n          if (c < 128) {\n            utftext += String.fromCharCode(c);\n          } else if ((c > 127) && (c < 2048)) {\n            utftext += String.fromCharCode((c >> 6) | 192);\n            utftext += String.fromCharCode((c & 63) | 128);\n          } else {\n            utftext += String.fromCharCode((c >> 12) | 224);\n            utftext += String.fromCharCode(((c >> 6) & 63) | 128);\n            utftext += String.fromCharCode((c & 63) | 128);\n          }\n        }\n\n        return utftext;\n      };\n\n      let blockstart;\n      let i, j;\n      const W = new Array(80);\n      let H0 = 0x67452301;\n      let H1 = 0xEFCDAB89;\n      let H2 = 0x98BADCFE;\n      let H3 = 0x10325476;\n      let H4 = 0xC3D2E1F0;\n      let A, B, C, D, E;\n      let temp;\n      msg = Utf8Encode(msg);\n      const msgLen = msg.length;\n      const wordArray = [];\n\n      for (i = 0; i < msgLen - 3; i += 4) {\n        j = msg.charCodeAt(i) << 24 | msg.charCodeAt(i + 1) << 16 |\n            msg.charCodeAt(i + 2) << 8 | msg.charCodeAt(i + 3);\n        wordArray.push(j);\n      }\n\n      switch (msgLen % 4) {\n        case 0:\n          i = 0x080000000;\n          break;\n        case 1:\n          i = msg.charCodeAt(msgLen - 1) << 24 | 0x0800000;\n          break;\n        case 2:\n          i = msg.charCodeAt(msgLen - 2) << 24 | msg.charCodeAt(msgLen - 1) << 16 | 0x08000;\n          break;\n        case 3:\n          i = msg.charCodeAt(msgLen - 3) << 24 | msg.charCodeAt(msgLen - 2) << 16 | msg.charCodeAt(msgLen - 1) << 8 | 0x80;\n          break;\n      }\n\n      wordArray.push(i);\n      while ((wordArray.length % 16) !== 14) wordArray.push(0);\n      wordArray.push(msgLen >>> 29);\n      wordArray.push((msgLen << 3) & 0x0ffffffff);\n\n      for (blockstart = 0; blockstart < wordArray.length; blockstart += 16) {\n        for (i = 0; i < 16; i++) W[i] = wordArray[blockstart + i];\n\n        for (i = 16; i <= 79; i++) W[i] = rotateLeft(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n        A = H0;\n        B = H1;\n        C = H2;\n        D = H3;\n        E = H4;\n\n        for (i = 0; i <= 19; i++) {\n          temp = (rotateLeft(A, 5) + ((B & C) | (~B & D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;\n          E = D;\n          D = C;\n          C = rotateLeft(B, 30);\n          B = A;\n          A = temp;\n        }\n\n        for (i = 20; i <= 39; i++) {\n          temp = (rotateLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;\n          E = D;\n          D = C;\n          C = rotateLeft(B, 30);\n          B = A;\n          A = temp;\n        }\n\n        for (i = 40; i <= 59; i++) {\n          temp = (rotateLeft(A, 5) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;\n          E = D;\n          D = C;\n          C = rotateLeft(B, 30);\n          B = A;\n          A = temp;\n        }\n\n        for (i = 60; i <= 79; i++) {\n          temp = (rotateLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;\n          E = D;\n          D = C;\n          C = rotateLeft(B, 30);\n          B = A;\n          A = temp;\n        }\n\n        H0 = (H0 + A) & 0x0ffffffff;\n        H1 = (H1 + B) & 0x0ffffffff;\n        H2 = (H2 + C) & 0x0ffffffff;\n        H3 = (H3 + D) & 0x0ffffffff;\n        H4 = (H4 + E) & 0x0ffffffff;\n      }\n\n      temp = cvtHex(H0) + cvtHex(H1) + cvtHex(H2) + cvtHex(H3) + cvtHex(H4);\n\n      return temp.toLowerCase();\n    };\n\n    const trackContentSchema = () => {\n      const schemaScript = document.querySelector('script.yoast-schema-graph');\n\n      if (schemaScript && schemaScript.innerText) {\n        const articleSchema = JSON.parse(schemaScript.innerText)['@graph'].find(object => object['@type'] === 'Article');\n        const breadcrumbListSchema = JSON.parse(schemaScript.innerText)['@graph'].find(object => object['@type'] === 'BreadcrumbList');\n        const personSchema = JSON.parse(schemaScript.innerText)['@graph'].find(object => object['@type'] === 'Person');\n\n        if (articleSchema) {\n          HockeyStack.goal('View Content', {\n            content_category: articleSchema.articleSection[0],\n            content_author: (articleSchema.author && articleSchema.author.name) || (personSchema && personSchema.name),\n            content_title: articleSchema.headline,\n            content_url: new URL(articleSchema.mainEntityOfPage['@id']).pathname\n          });\n        } else if (breadcrumbListSchema && breadcrumbListSchema.itemListElement.some(item => item.name.toLowerCase().includes('blog'))) {\n          HockeyStack.goal('View Content', {\n            content_author: (personSchema && personSchema.name),\n            content_title: document.title,\n            content_url: window.location.pathname\n          });\n        }\n      }\n    };\n\n    const trackGravityForms = () => {\n      const identifyForm = emailInput => {\n        const email = emailInput.value.trim();\n\n        if (email) window.HockeyStack.identify(email);\n      };\n\n      const processGForms = () => {\n        if (!(timeout > 5000 || typeof jQuery !== 'undefined')) {\n          timeout += 50;\n          setTimeout(processGForms, 50);\n\n          return;\n        }\n\n        try {\n          if (typeof jQuery === 'function') {\n            jQuery(document).on('gform_page_loaded', function (event, formId, currentPage) {\n              const emailInput = document.querySelector(`#gform_${formId} input[type=\"email\"]`);\n\n              window.HockeyStack.goal('Move to New Page', {\n                formId,\n                page: currentPage,\n                integration: 'Gravity Forms'\n              });\n\n              if (emailInput) identifyForm(emailInput);\n            });\n          }\n\n          window.addEventListener('click', event => {\n            const form = event.target.closest('form');\n            const isGravityForm = form && form.id && form.id.includes('gform');\n\n            if (!isGravityForm) return;\n\n            const formId = form.id.replace('gform_', '');\n\n            if (window[`gf_submitting_${formId}`]) {\n              window.HockeyStack.goal('Submit Gravity Form', {\n                formId,\n                integration: 'Gravity Forms'\n              });\n\n              const emailInput = form.querySelector('input[type=\"email\"]');\n\n              if (emailInput) identifyForm(emailInput);\n            }\n          });\n        } catch (error) {\n          sendErrorsToServer(error, { operation: 'processGForms' });\n        }\n      };\n\n      let timeout = 0;\n      processGForms();\n    };\n\n    if (apiKey) HockeyStack.initWrapper(apiKey);\n\n    (() => {\n      const loadedIntegrations = new Set();\n\n      // Initialize list of loaded integrations by checking all scripts loaded before we got here.\n      INTEGRATIONS.forEach(integration => {\n        if (document.querySelector(`script[src*=\"${integration.script}\"]`)) {\n          if (debugMode) console.log(`HockeyStack: ${integration.name} already loaded`);\n\n          loadedIntegrations.add(integration.name);\n        }\n      });\n\n      const createScript = script => {\n        if (!apiKey) return;\n        if (document.querySelector(`script[src*=\"${script}\"]`)) return;\n        if (debugMode) console.log('HockeyStack: Creating script', script);\n\n        const newScript = document.createElement('script');\n        newScript.src = script;\n        newScript.async = 1;\n        document.getElementsByTagName('head')[0].append(newScript);\n      };\n\n      // Loads any scripts if the dependency is present. It also marks scripts as already loaded if something else\n      // added them before we detected the dependency so that we don't load them again.\n      const loadScripts = () => {\n        INTEGRATIONS.forEach(integration => {\n          if (!loadedIntegrations.has(integration.name)) {\n            if (document.querySelector(`script[src*=\"${integration.script}\"]`)) {\n              if (debugMode) console.log(`HockeyStack: ${integration.name} loaded before dependency detected`);\n\n              loadedIntegrations.add(integration.name);\n            } else if (integration.check()) {\n              createScript(integration.script);\n              loadedIntegrations.add(integration.name);\n\n              if (debugMode) console.log(`HockeyStack: Detected dependency and injected ${integration.name}`);\n            }\n          }\n        });\n      };\n\n      const getElements = (node, selector) => {\n        if (node.nodeType !== Node.ELEMENT_NODE) {\n          return [];\n        }\n\n        const elements = Array.from(node.querySelectorAll(selector));\n\n        if (node.matches(selector)) {\n          elements.unshift(node);\n        }\n\n        return elements;\n      };\n\n      const checkNode = node => {\n        const scripts = getElements(node, 'script[src]');\n        const iframes = getElements(node, 'iframe[src]');\n\n        if (debugMode) {\n          scripts.forEach(script => {\n            console.log('HockeyStack: Script found:', script.src);\n          });\n          iframes.forEach(iframe => {\n            console.log('HockeyStack: iFrame found:', iframe.src);\n          });\n        }\n\n        return scripts.length > 0 || iframes.length > 0;\n      };\n\n      // Watch for any new scripts or iFrames.\n      const observer = new MutationObserver((mutationsList, observer) => {\n        let found = false;\n\n        for (const mutation of mutationsList) {\n          // Don't short-circuit once found something so that we log everything that was found.\n\n          // Check if src was added or changed on a script or iframe.\n          if (mutation.type === 'attributes') {\n            found |= checkNode(mutation.target);\n          }\n          // Check if a script or iframe was added on a script or iframe.\n          if (mutation.type === 'childList') {\n            mutation.addedNodes.forEach(node => {\n              found |= checkNode(node);\n            });\n          }\n        }\n\n        // Potentially found something that could require loading scripts.\n        if (found) {\n          loadScripts();\n        }\n      });\n      observer.observe(document, { attributes: true, attributeFilter: ['src'], childList: true, subtree: true });\n\n      // We can check and load scripts now if the page is ready enough.\n      if (document.readyState === 'complete' || document.readyState === 'interactive') {\n        loadScripts();\n      }\n\n      // Check and load all scripts once the page finishes loading.\n      window.addEventListener('load', () => {\n        loadScripts();\n      });\n    })();\n\n    return HockeyStack;\n  } catch (err) {\n    sendErrorsToServer(err, { operation: 'general' });\n  }\n})();\n"]}