{"tags":[{"tagId":"d98a0792-c211-4ba7-b1e9-eb2abacddabe","tagTypeId":"custom_js","name":"PGG2 Feedback","description":"PGG2 CMS Feedback Clicks & Reporting","config":{"code":"(async () => {\n    Playtech.on('GAME_LAUNCH', ([\n        {\n            gameCode,\n            gameFeed,\n            launchType,\n            container,\n            gamePositionInCategory,\n            categoryPosition,\n            categoryName,\n            pggCategoryName\n        }\n    ]) => {\n        if (!Playtech.API.auth.isLoggedIn || launchType !== 'Real') {\n            return;\n        }\n\n        const params = new URLSearchParams({\n            launch_ctx: container,\n            user_id: Playtech.fetchUserDetails().userId,\n            launch_code: gameCode,\n            brand: Playtech.Variables.casinoName,\n            cplat: Playtech.API.device.formFactor,\n            cat_name: categoryName,\n            feed_name: gameFeed || 'Dynamic',\n            game_pos: gamePositionInCategory,\n            cat_pos: categoryPosition,\n            pgg_cat_name: pggCategoryName\n        });\n\n        fetch(`https://pgg.bit.ptecha.io/feedback?${params.toString()}`);\n    });\n})();\n"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"d6838a7c-7ce4-4a18-aa05-c7b8c31a3a89","tagTypeId":"hc_aws_message","name":"New AWS message","description":"test for HC-12871 [HC-12996]","config":{"apiUrl":"https://cache.production.api.hollandcasino.nl/v1/maintenance/message/","apiKey":"FARJ9ybYar8WL1binV6115LFBVkCKAgJ9pafQDfk"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"f5b654b1-f39e-41c3-9efa-c5adf7443573","tagTypeId":"custom_tag_type","name":"<11> - New Checkin","description":"<11> - New Checkin","config":{"beforeEndHead":"<style>\n  /* start HC-11301 */\n  :root {\n    --biggestPossibleInt: 2147483647;\n  }\n\n  :root:has(.checkinFlow) {\n    --help-button-z-index: calc(var(--biggestPossibleInt)) !important;\n    --chat-z-index: calc(var(--biggestPossibleInt)) !important;\n  }\n\n  :root:has(.checkinFlow) #ada-chat-frame {\n    z-index: calc(var(--biggestPossibleInt)) !important;\n  }\n  /* end HC-11301 */\n\n  .checkinError {\n    text-align: center;\n    margin: 1rem 0;\n    color: var(--hc-red);\n  }\n  /* HC-12293 - start */\n  body:has(.btnDeclineCheckinPopup)\n    [class*=\"PopupManager__layout\"]\n    [class*=\"FlexButtonsBlock__flexButtonsBlock\"] {\n    display: none;\n  }\n  /* HC-12293 - end */\n</style>\n<script>\n  var checkinLoaded = Promise.withResolvers();\n\n  function onCheckinLoad(checkin) {\n    console.log(\"[CHECKIN] Checkin loaded\", checkin);\n    checkinLoaded.resolve(checkin);\n  }\n\n  (() => {\n    var isInitialized = false;\n\n    // HC-11856 - start\n    const pageDocUploadTagName = \"portal/registration/PageDocUpload\";\n    const pageExternalServiceTagName =\n      \"portal/registration/PageExternalService\";\n    const bodyElement = document.querySelector(\"body\");\n    const checkinFlowClassName = \"checkinFlow\";\n    // HC-11856 - end\n\n    function log() {\n      if (localStorage.getItem(\"isLoggerEnabled\") === \"true\") {\n        console.log.apply(\n          console,\n          [\"[CHECKIN] \"].concat(Array.from(arguments)),\n        );\n      }\n    }\n\n    function translate(tKey) {\n      try {\n        return Playtech.API.translation.translate(tKey);\n      } catch (err) {\n        log(\"Error getting translation\", err);\n        return \"Something went wrong...\";\n      }\n    }\n\n    function createError() {\n      var errorElement = document.createElement(\"div\");\n      errorElement.classList.add(\"checkinError\");\n      errorElement.innerHTML = translate(\n        \"playtech.mobile.system.error.default\",\n      );\n\n      return errorElement;\n    }\n\n    function getAwsRequestData() {\n      var awsApiUrl = Playtech.Variables.dynamicTags.find(\n        (tag) => tag.name === \"AWS_API_URL\",\n      ).value;\n      var regBsnXApiKey = Playtech.Variables.dynamicTags.find(\n        (tag) => tag.name === \"REG_BSN_X_API_KEY\",\n      ).value;\n\n      if (!awsApiUrl) {\n        log(\"No api url provided\");\n        return;\n      }\n\n      if (!regBsnXApiKey) {\n        log(\"BsnXApiKey not set\");\n        return;\n      }\n\n      return {\n        awsApiUrl,\n        headers: {\n          \"Content-Type\": \"application/json\",\n          \"x-api-key\": regBsnXApiKey,\n        },\n      };\n    }\n\n    // HC-11102 - start\n    async function sendErrorDataToAWS(error, checkinData) {\n      try {\n        var awsRequestData = getAwsRequestData();\n\n        if (awsRequestData) {\n          var { awsApiUrl, headers } = awsRequestData;\n          var email = Playtech.fetchUserDetails().email;\n\n          var options = {\n            method: \"POST\",\n            headers,\n            body: JSON.stringify({\n              email,\n              error,\n              checkinData,\n            }),\n          };\n\n          var response = await window.fetch(\n            `${awsApiUrl}/BSNOnboarding/Public/Anonymous/Data`,\n            options,\n          );\n\n          log(\"AWS response to error case\", response); // qa can check response status\n        }\n      } catch (err) {\n        log(\"Could not submit error data to AWS\", err);\n      }\n    }\n    // HC-11102 - end\n\n    async function processCheckinData({ data, completeData }) {\n      try {\n        log(\"data, completeData\", data, completeData);\n        await Playtech.API.server.send({\n          ID: 33045,\n          description: \"Update player info\",\n          responses: [33006, 31008],\n          changeTimestamp: new Date()\n            .toISOString()\n            .replace(/[TZ]/g, \" \")\n            .trim(),\n          // HC-11238 - send only custom11\n          dataMap: {\n            custom11: completeData.mapped.ocrData.userData.dataMap.custom11,\n          },\n        });\n\n        await Playtech.API.server.checkInDotComListenerRequest({\n          // HC-11269\n          requestContent: btoa(\n            JSON.stringify({\n              ocrData: { signed: completeData.mapped.ocrData.signed },\n            }),\n          ),\n        });\n      } catch (error) {\n        log(\"Error submitting checking data: \", error);\n        var placeholderText = document.querySelector(\".docUploadPlaceholder\");\n        if (placeholderText) {\n          placeholderText.parentNode.append(createError());\n          placeholderText.style.display = \"none\";\n        }\n        sendErrorDataToAWS(error, {\n          data,\n          completeData,\n        });\n      }\n    }\n\n    // HC-10924 - start\n    async function sendBSN(bsn) {\n      try {\n        var awsRequestData = getAwsRequestData();\n        var userId = Playtech.fetchUserDetails().userId;\n        var temporaryToken =\n          await Playtech.API.auth.getTemporaryAuthenticationToken();\n\n        if (awsRequestData && temporaryToken && userId) {\n          var { awsApiUrl, headers } = awsRequestData;\n          var bsnEndpoint = `${awsApiUrl}/BSNOnboarding/Public/Authenticated/BSN?userId=${encodeURIComponent(\n            userId,\n          )}&source=checkin`;\n          var options = {\n            method: \"POST\",\n            headers: {\n              ...headers,\n              sessiontoken: temporaryToken,\n            },\n            body: JSON.stringify({ BSN: bsn }),\n          };\n\n          var response = await window.fetch(bsnEndpoint, options);\n          log(\"AWS BSN response\", response); // qa can check response status\n        }\n      } catch (e) {\n        log(`Error sending BSN: ${e}`);\n      }\n    }\n\n    function handleBSN(data, diff) {\n      log(\">> onUpdate diff\", {\n        diff,\n        data,\n      });\n      if (diff.user && diff.user.bsn) {\n        sendBSN(diff.user.bsn);\n      }\n    }\n\n    // HC-10924 - end\n\n    function initCheckin() {\n      if (localStorage.getItem(\"isLoggerEnabled\") === \"true\") {\n        checkin.settings.enableConsoleLog();\n      }\n\n      checkin.dataFlow.setOnComplete(processCheckinData); // checkin will send user data in this cb in the end of the flow\n      checkin.dataFlow.setOnUpdate(handleBSN); // checkin will send user data in this cb when there's any new data\n      isInitialized = true;\n    }\n\n    function startCheckinFlow(tags, checkin) {\n      if (!isInitialized) {\n        initCheckin(checkin);\n      }\n      // HC-11856 - start\n      bodyElement.classList.add(checkinFlowClassName);\n      // HC-11856 - end\n      var playerData = Playtech.fetchUserDetails();\n\n      checkin.settings.setLang(\n        Playtech.API.language.getCurrentLanguage() === \"en_US\" ? \"en\" : \"nl\",\n      );\n      // HC-12160\n      checkin.settings.setVariant(\"fullflow\");\n      const recoveryAppId = getRecoveryAppId(tags);\n      const user = { externalId: playerData.username };\n      if (recoveryAppId != null) {\n        user.recoveryAppId = recoveryAppId;\n      }\n      log(\"Pass user data to checkin\", user);\n      checkin.dataFlow.setKnownData({\n        idscan: {\n          variants: [\"fullflow\"],\n          user: user,\n        },\n      }); // HC-11268\n      checkin.signUp.open(); // open Checkin popup\n    }\n\n    async function handlePageDocUpload() {\n      const checkin = await checkinLoaded.promise;\n      const response = await Playtech.API.user.getPlayerTags(\"\", true);\n      log(\"Player tags response\", response);\n      try {\n        var tags = response.data.tags;\n        var isCheckinFlow =\n          tags.some(function (tag) {\n            return tag.name === pageDocUploadTagName; // if it's a 2nd step of reg\n          }) &&\n          tags.some(function (tag) {\n            return (\n              tag.name === pageExternalServiceTagName &&\n              tag.value &&\n              tag.value.toLowerCase() === \"checkin\"\n            );\n          });\n\n        if (isCheckinFlow) {\n          startCheckinFlow(tags, checkin);\n        }\n      } catch (err) {\n        throw {\n          error: err,\n          code: 1,\n        };\n      }\n    }\n\n    // HC-12160\n    function getRecoveryAppId(tags) {\n      const processidTagName = \"checkin/processid\";\n      const processidTag = tags.filter(function (tag) {\n        return tag.name === processidTagName;\n      });\n\n      return (processidTag[0] && processidTag[0].value) || null;\n    }\n\n    // HC-11856 - start\n    function handleRemoveClass(isRemovedORModifiedTag) {\n      if (isRemovedORModifiedTag) {\n        log(\"Remove class\");\n        bodyElement.classList.remove(checkinFlowClassName);\n      }\n    }\n\n    function handleChangePlayerTag(e) {\n      const { tag, value, removed } = e?.detail || {};\n\n      if (tag === pageDocUploadTagName || tag === pageExternalServiceTagName) {\n        const isRemovedORModifiedTag =\n          removed ||\n          (tag === pageExternalServiceTagName &&\n            value?.toLowerCase() !== \"checkin\");\n        handleRemoveClass(isRemovedORModifiedTag);\n      }\n    }\n\n    Playtech.API.events.addEventListener(\n      \"player-tag-change\",\n      handleChangePlayerTag,\n    );\n\n    // HC-11856 - end\n\n    if (Playtech.API.auth.isLoggedIn) {\n      handlePageDocUpload();\n    }\n\n    Playtech.on(Playtech.Events.LOGGED_IN, handlePageDocUpload);\n\n    Playtech.on(Playtech.Events.LOGGED_OUT, function () {\n      window.checkin?.signUp.close();\n    });\n\n  })();\n</script>\n<script\n  src=\"https://hollandcasino-fullflow.regily.com/50fcba4f77b326fe0e1f4db038d206f9.js\"\n  async\n></script>","beforeEndBody":""},"conditionIds":["2e8f68c0-2d83-4009-bf0e-9507529535dc","bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"34672df7-7a22-4ff3-b45d-4fae1090acc3","tagTypeId":"custom_tag_type","name":"<8> Onboarding - TN custom START Button","description":"HC-12276 - temporary fix for LOGGED_IN","config":{"beforeEndHead":"","beforeEndBody":"<style>\n  [class*=\"StepsCounter__stepCounter\"] + [class*=\"Iframe__\"],\n  .docUploadContainer + [class*=\"Iframe__\"] {\n    display: none;\n  }\n\n  .docUploadContainer {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n  }\n\n  .docUploadContainer > * {\n    margin: 1rem 0;\n  }\n\n  .docUploadButton.inactive {\n    pointer-events: none;\n  }\n\n  .docUploadError {\n    font-size: 80%;\n    text-align: center;\n    margin: 1rem 0;\n    color: var(--hc-red);\n  }\n</style>\n<script>\n  (function () {\n    var playerTags = [];\n    var tKeys = {\n      captureTooltip:\n        \"playtech.mobile.system.step2.onboarding.docs.capture.tooltip\",\n      startBtnText: \"system.step2.onboarding.docs.start\",\n      startTooltip: \"system.step2.onboarding.docs.start.tooltip\",\n    };\n    const customDocUploadProvider = Playtech.Variables.dynamicTags.find(\n      ({ name }) => name === \"CUSTOM_DOC_UPLOAD_PROVIDER\",\n    )?.value;\n    // console.log('>>> customDocUploadProvider', customDocUploadProvider)\n    function translate(tKey) {\n      try {\n        return Playtech.API.translation.translate(tKey);\n      } catch (err) {\n        throw { error: err, code: 3 };\n      }\n    }\n\n    // start HC-11285\n    function isTruNarrativeFlow() {\n      try {\n        return (\n          playerTags.some(function (tag) {\n            return tag.name === \"portal/registration/PageDocUpload\";\n          }) &&\n          !playerTags.some(function (tag) {\n            return (\n              tag.name === \"portal/registration/PageExternalService\" &&\n              tag.value &&\n              tag.value.toLowerCase() === customDocUploadProvider\n            );\n          })\n        );\n      } catch (err) {\n        throw { error: err, code: 1 };\n      }\n    }\n    // end HC-11285\n\n    function observeIframe() {\n      return new Promise(function (resolve, reject) {\n        try {\n          var wrapper = document.querySelector(\n            \"[class*=Iframe__iframeWrapper]\",\n          );\n\n          if (\n            wrapper &&\n            wrapper.querySelector(\"iframe\") &&\n            wrapper.querySelector(\"iframe\").src\n          ) {\n            resolve(wrapper.querySelector(\"iframe\"));\n            return;\n          }\n\n          var popupEl = getPopupContentContainer();\n\n          new MutationObserver(function (mutationList, observer) {\n            try {\n              for (var mutation of mutationList) {\n                if (\n                  mutation.target.querySelector(\"iframe\") &&\n                  mutation.target.querySelector(\"iframe\").src\n                ) {\n                  resolve(mutation.target.querySelector(\"iframe\"));\n                  observer.disconnect();\n                  break;\n                }\n              }\n            } catch (err) {\n              reject(err);\n            }\n          }).observe(popupEl, {\n            childList: true,\n            subtree: true,\n            attributes: true,\n          });\n        } catch (err) {\n          reject(err);\n        }\n      });\n    }\n\n    function getRedirectURL() {\n      return observeIframe()\n        .then(function (iframe) {\n          var src = iframe.src;\n          iframe.src = \"about:blank\";\n\n          return src;\n        })\n        .catch(function (err) {\n          return Promise.reject({ error: err, code: 4 });\n        });\n    }\n\n    function getPopupContentContainer() {\n      try {\n        return document.querySelector(\"[class*=StepsCounter__stepCounter]\")\n          .parentNode;\n      } catch (err) {\n        throw { error: err, code: 5 };\n      }\n    }\n\n    function createDocUploadContainer() {\n      var div = document.createElement(\"div\");\n      div.classList.add(\"docUploadContainer\");\n\n      return div;\n    }\n\n    function createDocUploadCaptureTooltip() {\n      var div = document.createElement(\"div\");\n      div.innerHTML = translate(tKeys.captureTooltip);\n\n      return div;\n    }\n\n    function createDocUploadLink(src) {\n      var link = document.createElement(\"a\");\n      link.href = src;\n      link.target = \"_blank\";\n      link.classList.add(\"docUploadButton\");\n      link.classList.add(\"inactive\");\n\n      var btn = document.createElement(\"button\");\n      btn.type = \"button\";\n      btn.classList.add(\"btn\");\n      btn.innerHTML = translate(tKeys.startBtnText);\n      btn.disabled = true;\n\n      var disable = function (isDisabled) {\n        if (isDisabled) {\n          btn.setAttribute(\"disabled\", \"disabled\");\n          link.classList.add(\"inactive\");\n        } else {\n          btn.removeAttribute(\"disabled\");\n          link.classList.remove(\"inactive\");\n        }\n      };\n\n      btn.addEventListener(\"click\", function () {\n        disable(true);\n      });\n\n      link.append(btn);\n\n      return [link, disable];\n    }\n\n    function createError(err) {\n      var div = document.createElement(\"div\");\n      var error = err.error || err;\n      var prefix = \"Error \" + (err.code || -1) + \": \";\n\n      div.classList.add(\"docUploadError\");\n      div.innerHTML =\n        prefix +\n        ((error.response && (error.response.data.errorMessage || err.reason)) ||\n          error.message);\n\n      return div;\n    }\n\n    function createDocUploadLinkTooltip() {\n      var text = document.createElement(\"p\");\n      text.innerHTML = translate(tKeys.startTooltip);\n\n      return text;\n    }\n\n    function main() {\n      try {\n        if (isTruNarrativeFlow()) {\n          var docUploadContainer = createDocUploadContainer();\n          var capture = createDocUploadCaptureTooltip();\n          var [uploadLink, disable] = createDocUploadLink();\n          var uploadLinkTooltip = createDocUploadLinkTooltip();\n\n          docUploadContainer.append(capture);\n          docUploadContainer.append(uploadLink);\n          docUploadContainer.append(uploadLinkTooltip);\n          getPopupContentContainer().append(docUploadContainer);\n\n          getRedirectURL()\n            .then(function (url) {\n              uploadLink.href = url;\n              disable(false);\n            })\n            .catch(function (err) {\n              docUploadContainer.append(createError(err));\n            });\n        }\n      } catch (err) {\n        getPopupContentContainer().append(createError(err));\n      }\n    }\n\n    function getPlayerTags() {\n      return Playtech.API.user.getPlayerTags().then(function (response) {\n        playerTags = response.data.tags;\n      });\n    }\n\n    Playtech.on(Playtech.Events.LOGGED_IN, function () {\n      getPlayerTags().then(main);\n    });\n\n    Playtech.on(Playtech.Events.LOGGED_OUT, function () {\n      playerTags = [];\n    });\n\n    if (Playtech.API.auth.isLoggedIn) {\n      getPlayerTags().then(main);\n    }\n  })();\n</script>"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"a887fda8-544d-4fc7-8ec8-3fab7d512f49","tagTypeId":"custom_tag_type","name":"<5> - BlockingModalPopup","description":"popup that blocks the entire site (HC-11939). HC-12276 - temporary fix for LOGGED_IN","config":{"beforeEndHead":"","beforeEndBody":"<style>\n  :root {\n    --biggestPossibleInt: 2147483647;\n  }\n  #blockingModalPopup .hideBtn {\n    display: none;\n  }\n  [class*=\"PopupManager__popups\"]:has(#blockingModalPopup) {\n    z-index: calc(var(--biggestPossibleInt) - 1);\n    position: relative; /* HC-11379 */\n  }\n  :root:has(#blockingModalPopup) {\n    --help-button-z-index: calc(var(--biggestPossibleInt)) !important;\n    --chat-z-index: calc(var(--biggestPossibleInt)) !important;\n  }\n  body:has(#blockingModalPopup) #ada-chat-frame {\n    z-index: calc(var(--biggestPossibleInt)) !important;\n  }\n\n  /* start HC-11939 */\n  .regily-module {\n    z-index: calc(var(--biggestPossibleInt) - 2);\n  }\n  /* end HC-11939 */\n</style>\n\n<script>\n  (function () {\n    let isPopupOpened = false;\n    const popupID = \"blockingModalPopup\";\n    const pageHoldTagName = \"portal/registration/pageHold\";\n\n    function log() {\n      if (localStorage.getItem(\"isLoggerEnabled\") === \"true\") {\n        console.log.apply(\n          console,\n          [\"[Blocking Modal Popup] \"].concat(Array.from(arguments)),\n        );\n      }\n    }\n\n    function showPopup(webContent) {\n      if (isPopupOpened) {\n        return;\n      }\n\n      Playtech.API.popup.showPopup({\n        id: popupID,\n        layer: \"VERY_HIGH_PRIORITY\",\n        classNames: { actionButtons: \"hideBtn\" },\n        articleId: webContent,\n        isModal: true,\n      });\n      log(\"Show Popup\");\n      isPopupOpened = true;\n    }\n\n    function closePopup() {\n      if (!isPopupOpened) {\n        return;\n      }\n\n      log(\"Close Popup\");\n      Playtech.API.popup.closePopups(popupID);\n      isPopupOpened = false;\n    }\n\n    function handleLoggedIn({ value } = {}) {\n      log(\"Web Content ID\", value);\n\n      if (value) {\n        showPopup(value);\n      }\n    }\n\n    function handleChangePlayerTag(e) {\n      const { tag, value, removed } = e?.detail || {};\n\n      if (tag === pageHoldTagName) {\n        log(\"Player tag change\");\n        // HC-12296 - start\n        closePopup();\n        // HC-12296 - end\n        if (removed) {\n          log(\"Close Popup\");\n          return;\n        }\n\n        if (value) {\n          log(\"Open Popup with new WC\");\n          showPopup(value);\n        }\n      }\n    }\n\n    function getPageHoldTagValue() {\n      return Playtech.API.user.getPlayerTags(pageHoldTagName).then(function ({\n        data,\n      }) {\n        log(\"Get page hold tag value\", data);\n        if (data.tags[0]) {\n          return {\n            value: data.tags[0].value,\n          };\n        }\n        return {};\n      });\n    }\n\n    Playtech.on(Playtech.Events.LOGGED_IN, function () {\n      getPageHoldTagValue().then(handleLoggedIn);\n    });\n    Playtech.on(Playtech.Events.LOGGED_OUT, function () {\n      closePopup();\n    });\n    Playtech.API.events.addEventListener(\n      \"player-tag-change\",\n      handleChangePlayerTag,\n    );\n    if (Playtech.API.auth.isLoggedIn) {\n      getPageHoldTagValue().then(handleLoggedIn);\n    }\n  })();\n</script>\n"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"322c5fc7-b67f-4c98-9558-06597561344e","tagTypeId":"custom_tag_type","name":"<4> [Regulation] - MessagePopupWithTimer","description":"HC-11601 [STC] 30s popup should be shown every time until user has confirmed deposit limits. HC-12276 - temporary fix for LOGGED_IN","config":{"beforeEndHead":"<!-- Tag start -->\n<style>\n  #regulationMessagePopupWithTimer .regulationBtnContainer {\n    display: none;\n  }\n</style>\n\n<script>\n  (function () {\n    let playerTags = [];\n    const POPUP_ID = \"regulationMessagePopupWithTimer\";\n    const WEB_CONTENT = \"REGULATIONS_MESSAGE_WITH_TIMER\";\n    const REQUIRE_CONFIRMATION_PLAYER_TAG_NAME =\n      \"portal/regulation/requireConfirmation\";\n    const BTN_CONTAINER_CLASS_NAME = \"regulationBtnContainer\";\n\n    function log() {\n      if (localStorage.getItem(\"isLoggerEnabled\") === \"true\") {\n        console.log.apply(\n          console,\n          [\"[Regulation Message Popup With Timer] \"].concat(\n            Array.from(arguments),\n          ),\n        );\n      }\n    }\n\n    function shouldShowBlockingPopup() {\n      try {\n        return playerTags.some(function (tag) {\n          return (\n            tag.name === REQUIRE_CONFIRMATION_PLAYER_TAG_NAME &&\n            tag.value === \"true\"\n          );\n        });\n      } catch (err) {\n        throw { error: err, code: 1 };\n      }\n    }\n\n    function showRegulationPopup() {\n      try {\n        if (shouldShowBlockingPopup()) {\n          log(\"Show Popup\");\n          Playtech.API.popup.showPopup({\n            articleId: WEB_CONTENT,\n            layer: \"VERY_HIGH_PRIORITY\",\n            classNames: { actionButtons: BTN_CONTAINER_CLASS_NAME },\n            id: POPUP_ID,\n            onClose: function () {\n              Playtech.API.auth.logout();\n              log(\"Logout user\");\n            },\n          });\n        }\n      } catch (err) {\n        log(\"Error\", err);\n      }\n    }\n\n    function getPlayerTags() {\n      return Playtech.API.user.getPlayerTags().then(function (response) {\n        playerTags = response.data.tags;\n      });\n    }\n\n    Playtech.on(Playtech.Events.LOGGED_IN, function () {\n      getPlayerTags().then(showRegulationPopup);\n    });\n\n    Playtech.on(Playtech.Events.LOGGED_OUT, function () {\n      playerTags = [];\n    });\n\n    if (Playtech.API.auth.isLoggedIn) {\n      getPlayerTags().then(showRegulationPopup);\n    }\n  })();\n</script>\n<!-- Tag end -->","beforeEndBody":""},"conditionIds":["2e8f68c0-2d83-4009-bf0e-9507529535dc","bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"1e696d4c-ba61-483d-ae59-e74a7b8b3aa0","tagTypeId":"custom_js","name":"<3> - Pre-cache IDIN url","description":"Pre-cache IDIN url. HC-12276 - temporary fix for LOGGED_IN","config":{"code":"(function () {\n  let wasCached = false;\n\n  async function initiateDocumentUpload(docType) {\n    await Playtech.API.server.initiateDocumentUpload({\n      documentType: docType,\n      service: \"trunarrative\",\n    });\n\n    wasCached = true;\n  }\n\n  async function fetchDocumentType() {\n    const {\n      data: { tags },\n    } = await Playtech.API.user.getPlayerTags(\n      \"portal/registration/PageExternalService\",\n    );\n    console.log(\">>> fetchDocumentType tags:\", tags);\n    return tags[0]?.value;\n  }\n\n  async function initiateDocumentUploadIfIDIN() {\n    if (wasCached) {\n      return;\n    }\n\n    const docType = await fetchDocumentType();\n\n    if (docType === \"IDIN\") {\n      initiateDocumentUpload(docType);\n    }\n  }\n\n  function playerTagChangeListener(e) {\n    const { tag, value, removed } = e.detail;\n\n    if (\n      !wasCached &&\n      tag === \"portal/registration/PageExternalService\" &&\n      !removed &&\n      value === \"IDIN\"\n    ) {\n      initiateDocumentUpload(value);\n    }\n  }\n\n  function subscribeOnTagChange() {\n    initiateDocumentUploadIfIDIN();\n\n    Playtech.API.events.addEventListener(\n      \"player-tag-change\",\n      playerTagChangeListener,\n    );\n  }\n\n  function unsubscribeOnTagChange() {\n    Playtech.API.events.removeEventListener(\n      \"player-tag-change\",\n      playerTagChangeListener,\n    );\n  }\n\n  Playtech.on(Playtech.Events.LOGGED_IN, subscribeOnTagChange);\n\n  Playtech.on(Playtech.Events.LOGGED_OUT, unsubscribeOnTagChange);\n\n  if (Playtech.API.auth.isLoggedIn) {\n    subscribeOnTagChange();\n  }\n})();"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"1d7dc88d-9050-4e85-8200-183391995c5b","tagTypeId":"custom_tag_type","name":"<2> - NEW ADA AI Integration","description":"NEW ADA AI Integration","config":{"beforeEndHead":"<style type=\"text/css\">\n  iframe#ada-button-frame {\n    display: none !important;\n  }\n</style>\n<script>\n  (function () {\n    let isAdaReady = false;\n    let isStarted = false;\n\n    let isToggled = false;\n    let isProactive = false;\n    let playerTags = [];\n    let proactiveMessageKey = null;\n\n    const PROACTIVE_NEW_USER_TAG_NAME = \"adachatbot/proactive_new\";\n\n    function log() {\n      if (localStorage.getItem(\"isLoggerEnabled\") === \"true\") {\n        console.log.apply(console, [\"[AI ADA] \"].concat(Array.from(arguments)));\n      }\n    }\n\n    function getJWTToken() {\n      log(\"get JWT\");\n\n      return Playtech.API.server.getJWTToken().then(function ({ data }) {\n        return data.jwtToken;\n      });\n    }\n\n    function toggleCallback(isDrawerOpen) {\n      isToggled = isDrawerOpen;\n\n      log(\"toggleCallback received\", isToggled);\n\n      Playtech.API.events.dispatchEvent(\n        new CustomEvent(Playtech.Events.CHAT_WINDOW_STATUS, {\n          detail: {\n            chat: \"ada\",\n            isOpened: isDrawerOpen,\n          },\n        }),\n      );\n    }\n\n    function onAdaEmbedLoaded() {\n      log(\"onAdaEmbedLoaded received\");\n    }\n\n    function adaReadyCallback({ isRolledOut }) {\n      isAdaReady = isRolledOut;\n      log(\"adaReadyCallback received\", isAdaReady);\n\n      if (hasProactiveNewUserTagName(playerTags)) {\n        triggerProactiveMessage(proactiveMessageKey);\n      }\n\n      if (isProactive && !isToggled) {\n        toggleBot([{ chat: \"ada\" }]);\n      }\n    }\n\n    function getSensitiveMetaFields(token) {\n      return token\n        ? {\n            jwt_token: token,\n          }\n        : {};\n    }\n\n    function getMetaFields(extraFields) {\n      return {\n        // list of predefined vars here,\n        // which must be specified with empty value,\n        // even if they are not ready right now\n        userId: Playtech.fetchUserDetails().userId,\n        ...extraFields,\n      };\n    }\n\n    function getAdaSettings({ token, messageKey }) {\n      const dataSettings = {\n        cluster: \"eu\",\n        toggleCallback,\n        // hideMask: false,\n        // language: \"NL\",\n        adaReadyCallback,\n        onAdaEmbedLoaded,\n        mobileOverlay: true,\n        handle: \"hollandcasinoai\",\n        metaFields: getMetaFields(messageKey),\n        sensitiveMetaFields: getSensitiveMetaFields(token),\n        // greeting: \"6372813824417240bce71f1a\", // greeting we do not use.\n      };\n      log(\"Ada settings\", dataSettings);\n\n      return dataSettings;\n    }\n\n    // TODO: I don't know if we need it.\n    // for further usage\n    // function openAnswer(answerId) {\n    //   if (!isAdaReady) {\n    //     return;\n    //   }\n\n    //   if (isToggled) {\n    //     log(\"triggering specific answer\", answerId);\n    //     window.adaEmbed.triggerAnswer(answerId);\n    //   } else {\n    //     log(\"toggling\");\n    //     window.adaEmbed.toggle();\n    //   }\n    // }\n    // TODO: end.\n\n    function triggerProactiveMessage(messageKey) {\n      log(\"triggering proactive message\", { messageKey });\n      window.adaEmbed?.triggerProactive(messageKey);\n    }\n\n    async function startBot() {\n      if (isStarted) {\n        return;\n      }\n\n      const token = await getJWTToken();\n      log(\"starting\");\n\n      proactiveMessageKey = await getProactiveMessageKey();\n\n      window.adaEmbed.start(\n        getAdaSettings({ token, messageKey: proactiveMessageKey }),\n      );\n      isStarted = true;\n      log(\"message Key\", { messageKey: proactiveMessageKey });\n\n      if (!hasProactiveNewUserTagName(playerTags)) {\n        isProactive = Boolean(metaFields);\n      }\n    }\n\n    // TODO: I don't know if we need it.\n    // for further usage\n    // async function resetBot(metaFields) {\n    //   if (!isAdaReady) {\n    //     return;\n    //   }\n\n    //   const token = await getJWTToken();\n    //   log(\"reset\", { metaFields });\n    //   window.adaEmbed.reset(getAdaSettings({ token, metaFields }));\n    //   isStarted = true;\n    // }\n    // TODO: end.\n\n    function stopBot() {\n      if (!isStarted) {\n        return;\n      }\n\n      log(\"stopping\");\n      window.adaEmbed.stop();\n      isStarted = false;\n      isProactive = false;\n    }\n\n    function toggleBot(e) {\n      if (!isAdaReady || !isStarted) {\n        return;\n      }\n\n      if (e && e.length > 0 && e[0].chat === \"ada\") {\n        log(\"toggling\");\n        window.adaEmbed.toggle();\n      }\n    }\n\n    // TODO: I think we don't need this function.\n    // HC-10930\n    // async function adaChatBotProactive(e) {\n    //   const metaFields = await getNextAnswerToRun(e);\n\n    //   if (metaFields) {\n    //     await resetBot(metaFields);\n\n    //     if (!isToggled) {\n    //       toggleBot([{ chat: \"ada\" }]);\n    //     }\n    //   }\n    // }\n    // TODO: end.\n\n    async function openAdaChatBotProactiveTag(e) {\n      proactiveMessageKey = await getProactiveMessageKey(e);\n\n      if (proactiveMessageKey) {\n        triggerProactiveMessage(proactiveMessageKey);\n      }\n    }\n\n    function hasProactiveNewUserTagName(tags) {\n      if (Array.isArray(tags)) {\n        return tags.some(({ name }) => name === PROACTIVE_NEW_USER_TAG_NAME);\n      }\n      return false;\n    }\n\n    function handlePlayerTagChange(e) {\n      if (hasProactiveNewUserTagName([{ name: e.detail?.tag }])) {\n        return openAdaChatBotProactiveTag(e);\n      }\n    }\n\n    function getSessionData() {\n      try {\n        return JSON.parse(sessionStorage.userModel);\n      } catch (e) {\n        return {};\n      }\n    }\n\n    async function getProactiveMessageKey(e) {\n      const { authType } = getSessionData();\n\n      if (e) {\n        const { tag, value, removed } = e.detail;\n\n        if (PROACTIVE_NEW_USER_TAG_NAME === tag && !removed) {\n          return {\n            messageKey: value,\n          };\n        }\n\n        return null;\n      }\n\n      // HC-11020 - task to add authType to sessionStorage\n      if (authType === \"credentials\") {\n        ({\n          data: { tags: playerTags },\n        } = await Playtech.API.user.getPlayerTags(PROACTIVE_NEW_USER_TAG_NAME));\n\n        log(\"Player tags response\", playerTags);\n\n        if (Array.isArray(playerTags)) {\n          if (playerTags.length === 1) {\n            return {\n              messageKey: playerTags[0].value,\n            };\n          }\n        }\n      }\n      return null;\n    }\n\n    function onLoadBot() {\n      if (Playtech.API.auth.isLoggedIn) {\n        startBot();\n      }\n\n      Playtech.on(Playtech.Events.LOGGED_IN, startBot);\n      Playtech.on(Playtech.Events.LOGGED_OUT, stopBot);\n      Playtech.on(Playtech.Events.CHAT_TOGGLE, toggleBot);\n      Playtech.API.events.addEventListener(\n        \"player-tag-change\",\n        handlePlayerTagChange,\n      );\n    }\n\n    window.onLoadBot = onLoadBot;\n  })();\n</script>\n<script\n  async\n  id=\"__ada\"\n  data-lazy\n  onload=\"onLoadBot()\"\n  src=\"https://static.ada.support/embed2.js\"\n></script>","beforeEndBody":""},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"1c96b0ea-3174-4ffd-9811-16ca64c17fe7","tagTypeId":"custom_tag_type","name":"<3> - IDIN Native","description":"Custom onClick handler for LaunchIDIN btn in native (PageIDINAddress). HC-12276 - temporary fix for LOGGED_IN","config":{"beforeEndHead":"<style>\n  button[class*=\"IDINAddress__btnLaunch\"] {\n    display: none !important;\n  }\n\n  .idinError {\n    font-size: 80%;\n    text-align: center;\n    margin: 1rem 0;\n    color: var(--hc-red);\n  }\n\n  .btn {\n    display: block;\n    margin: 5rem auto 3rem;\n  }\n</style>\n<script>\n  (function () {\n    var playerTags = [];\n\n    function translate(tKey) {\n      try {\n        return Playtech.API.translation.translate(tKey);\n      } catch (err) {\n        throw { error: err, code: 5 };\n      }\n    }\n\n    function isPageIDINAddress() {\n      try {\n        return playerTags.some(function (tag) {\n          return tag.name === \"portal/registration/PageIDINAddress\";\n        });\n      } catch (err) {\n        throw { error: err, code: 1 };\n      }\n    }\n\n    function getPopupContentContainer() {\n      try {\n        return document.querySelector(\"[class*=StepsCounter__stepCounter]\")\n          .parentNode;\n      } catch (err) {\n        throw { error: err, code: 5 };\n      }\n    }\n\n    function createContainer() {\n      var div = document.createElement(\"div\");\n      div.classList.add(\"idinContainer\");\n\n      return div;\n    }\n\n    function createError(err) {\n      var div = document.createElement(\"div\");\n      var error = err.error || err;\n      var prefix = \"Error \" + (err.code || -1) + \": \";\n\n      div.classList.add(\"idinError\");\n      div.innerHTML =\n        prefix +\n        ((error.response && (error.response.data.errorMessage || err.reason)) ||\n          error.message);\n\n      return div;\n    }\n\n    function appendError(err) {\n      var containerEl =\n        document.querySelector(\".idinContainer\") || getPopupContentContainer();\n      if (containerEl) {\n        containerEl.append(createError(err));\n      }\n    }\n\n    function createNewLaunchBtn() {\n      var btn = document.createElement(\"button\");\n      btn.type = \"button\";\n      btn.classList.add(\"btn\");\n      btn.innerHTML = translate(\n        \"playtech.mobile.system.hc-registration.IDINAddress.button.launchIDIN\",\n      );\n\n      btn.addEventListener(\"click\", function () {\n        btn.setAttribute(\"disabled\", \"disabled\");\n\n        var docType =\n          playerTags &&\n          playerTags.find(\n            (tag) => tag.name === \"portal/registration/PageExternalService\",\n          )?.value;\n        if (docType) {\n          Playtech.API.server\n            .initiateDocumentUpload({\n              documentType: docType,\n              service: \"trunarrative\",\n            })\n            .then((response) => {\n              var redirectURL = response.data && response.data.redirectURL;\n              btn.removeAttribute(\"disabled\");\n\n              Playtech.API.htcmd.sendMessage(\"openCustomTab\", {\n                path: redirectURL,\n              });\n            })\n            .catch((err) => {\n              btn.removeAttribute(\"disabled\");\n              appendError({ error: err, code: 2 });\n            });\n        } else {\n          btn.removeAttribute(\"disabled\");\n          appendError({ error: \"Cannot find document type\", code: 3 });\n        }\n      });\n\n      return btn;\n    }\n\n    function main() {\n      try {\n        if (isPageIDINAddress()) {\n          var containerEl = createContainer();\n          var newLaunchBtn = createNewLaunchBtn();\n\n          containerEl.append(newLaunchBtn);\n          getPopupContentContainer().append(containerEl);\n        }\n      } catch (err) {\n        getPopupContentContainer().append(createError(err));\n      }\n    }\n\n    function getPlayerTags() {\n      return Playtech.API.user.getPlayerTags().then(function (response) {\n        playerTags = response.data.tags;\n      });\n    }\n\n    Playtech.on(Playtech.Events.LOGGED_IN, function () {\n      getPlayerTags().then(main);\n    });\n\n    Playtech.on(Playtech.Events.LOGGED_OUT, function () {\n      playerTags = [];\n    });\n\n    if (Playtech.API.auth.isLoggedIn) {\n      getPlayerTags().then(main);\n    }\n  })();\n</script>","beforeEndBody":""},"conditionIds":["109b8f48-da23-4e5d-8f62-b1371cf41a08","bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"027718b9-8d8c-403b-a6d5-e4ed9b02e8e8","tagTypeId":"custom_js","name":"TPI Events","description":"TPI Events","config":{"code":"(() => {\n    function getSid() {\n        try {\n            return JSON.parse(localStorage.getItem('tpi_sid'))?.id ?? 'unknown';\n        } catch (error) {\n            window.TPI?.track?.('error', 'error', {\n                message: 'tpi_sid not found'\n            });\n\n            return 'error';\n        }\n    }\n\n    function getUid() {\n        try {\n            return localStorage.getItem('tpi_uid') ?? 'unknown';\n        } catch (error) {\n            window.TPI?.track?.('error', 'error', {\n                message: 'tpi_uid not found'\n            });\n\n            return 'error';\n        }\n    }\n\n    async function updatePlayerTags() {\n        await Playtech.API.user.setPlayerTags([\n            {\n                name: 'portal/tpi_sid',\n                type: 'text',\n                value: getSid()\n\n            }, {\n                name: 'portal/tpi_uid',\n                type: 'text',\n                value: getUid()\n            }\n        ]);\n    }\n\n\n    Playtech.on('auth:generic_login:success', () => {\n        updatePlayerTags();\n    });\n\n    // Playtech.on('socket-response', ({\n    //     requestId,\n    //     responseId,\n    //     time\n    // }) => {\n    //     window.TPI?.track?.('socket-response', 'socket', {\n    //         requestId,\n    //         responseId,\n    //         time\n    //     });\n    // });\n\n    // Playtech.on('pas-response', ({\n    //     actionName,\n    //     time\n    // }) => {\n    //     window.TPI?.track?.('pas-response', 'pas', {\n    //         pasActionName: actionName,\n    //         time\n    //     });\n    // });\n\n    Playtech.on('pas-error', ({\n        actionName,\n        error\n    }) => {\n        window.TPI?.track?.('pas-error', 'pas', {\n            pasActionName: actionName,\n            errorCode: error?.errorCode,\n            requestId: error?.requestId,\n            error: error && JSON.stringify(error, Object.getOwnPropertyNames(error))\n        });\n    });\n\n    Playtech.on('socket-error', ({\n        requestId,\n        responseId,\n        errorCode,\n        error\n    }) => {\n        window.TPI?.track?.('socket-error', 'socket', {\n            requestId,\n            responseId,\n            errorCode,\n            error: error && JSON.stringify(error, Object.getOwnPropertyNames(error))\n        });\n    });\n\n    Playtech.on('bia-error', ({\n        event,\n        error\n    }) => {\n        window.TPI?.track?.('bia-error', 'bia', {\n            event,\n            error: error && JSON.stringify(error, Object.getOwnPropertyNames(error))\n        });\n    });\n\n    Playtech.on('socket-breakdown', ({\n        reason,\n        requestId,\n        responseId\n    }) => {\n        window.TPI?.track?.('socket-breakdown', 'socket', {\n            reason,\n            requestId,\n            responseId\n        });\n    });\n\n\n    Playtech.on('socket-notice', ({ requestId }) => {\n        window.TPI?.track?.('socket-notice', 'socket', {\n            requestId\n        });\n    });\n\n\n    Playtech.on('geofencing-init', ({ geolocationType }) => {\n        window.TPI?.track?.('geofencing-init', 'geofencing', {\n            geolocationType\n        });\n    });\n\n    Playtech.on('geofencing-trigger', ({ reason }) => {\n        window.TPI?.track?.('geofencing-trigger', 'geofencing', {\n            reason\n        });\n    });\n\n    Playtech.on('geofencing-response', ({\n        transactionID,\n        time\n    }) => {\n        window.TPI?.track?.('geofencing-response', 'geofencing', {\n            transactionID,\n            time\n        });\n    });\n\n    Playtech.on('geofencing-error', ({\n        error,\n        errorCode,\n        message,\n        response\n    }) => {\n        window.TPI?.track?.('geofencing-error', 'geofencing', {\n            error: error && JSON.stringify(error, Object.getOwnPropertyNames(error)),\n            errorCode,\n            message,\n            response\n        });\n    });\n\n    Playtech.on('auth:generic_login:success', () => {\n        window.TPI?.track?.('sso-login-success', 'login');\n    });\n\n    Playtech.on('auth:credentials:login', () => {\n        window.TPI?.track?.('login-success', 'login');\n    });\n\n    Playtech.on('LOGGED_OUT', () => {\n        window.TPI?.track?.('logout-success', 'login');\n    });\n\n    Playtech.on('LOGGED_IN_FAIL', ([error]) => {\n        window.TPI?.track?.('login-error', 'login', {\n            error: error && JSON.stringify(error, Object.getOwnPropertyNames(error)),\n        });\n    });\n\n    Playtech.on('REGISTRATION_SUBMITTED', () => {\n        window.TPI?.track?.('registration-submitted', 'registration');\n    });\n\n    Playtech.on('REGISTRATION_COMPLETED', () => {\n        window.TPI?.track?.('registration-success', 'registration');\n    });\n\n    Playtech.on('REGISTRATION_FAIL', ([error]) => {\n        window.TPI?.track?.('registration-error', 'registration', {\n            error: error && JSON.stringify(error, Object.getOwnPropertyNames(error)),\n        });\n    });\n\n    Playtech.on('DEPOSIT_FAIL', ({\n        error,\n        errorCode,\n        errorDescription,\n        errorMessage\n    }) => {\n        window.TPI?.track?.('deposit-error', 'deposit', {\n            error: error && JSON.stringify(error, Object.getOwnPropertyNames(error)),\n            errorCode,\n            errorDescription,\n            errorMessage\n        });\n    });\n\n    (async () => {\n        const { games = {} } = await Playtech.API.game.getGamesConfiguration();\n        const { formFactor = 'mobile' } = Playtech.API.device ?? {};\n\n        let latest_tpi_lid = null;\n\n        Playtech.API.game.addBeforeGameLaunchHook?.((launchGameUrl) => {\n            const url = new URL(launchGameUrl, document.baseURI);\n\n            latest_tpi_lid = crypto.randomUUID();\n\n            url.searchParams.set('tpi_lid', latest_tpi_lid);\n            url.searchParams.set('tpi_sid', getSid());\n            url.searchParams.set('tpi_uid', getUid());\n\n            return url.toString();\n        });\n\n        Playtech.on('GAME_LAUNCH', ([{\n            gameCode,\n            container,\n            gameName,\n            game_pos\n        }]) => {\n            const {\n                desktopGameType = '',\n                mobileGameType = ''\n            } = games[gameCode] ?? {};\n            const gameType = formFactor === 'desktop' ? desktopGameType : mobileGameType;\n\n            const product = gameCode.includes('gpas') ? 'GPAS' : gameCode.includes('pop') ? 'POP' : gameType.includes('LIVE') ? 'LIVE' : 'OTHER';\n\n            window.TPI?.track?.('portal:game:launch', 'game', {\n                product,\n                gameCode,\n                tpi_lid: latest_tpi_lid,\n            });\n        });\n    })();\n\n    // sportsbook\n    Playtech.on('sportsbook-analytics', ({\n        eventName,\n        currency,\n        raw\n    }) => {\n        const data = typeof raw === 'string' ? { data: raw } : raw;\n\n        window.TPI?.track?.(`sports-${eventName}`, 'sports', {\n            ...data,\n            currency\n        });\n    });\n\n    Playtech.on('player-tag-change', ({\n        tag,\n        value,\n        removed\n    }) => {\n        if (removed) {\n            return;\n        }\n\n        window.TPI?.track?.(`tag-${tag.replaceAll('/', ':')}`, 'tag', {\n            value\n        });\n    });\n\n    window.addEventListener('unhandledrejection', (event) => {\n        if (event.reason?.reason && event.reason?.request) {\n            // is oapi, so safe to skip\n            event.preventDefault();\n        }\n    });\n\n    window.addEventListener('online', () => {\n        window.TPI?.track?.('online', 'browser', {\n            effectiveType: navigator?.connection?.effectiveType ?? 'unknown'\n        });\n    });\n\n    window.addEventListener('offline', () => {\n        window.TPI?.track?.('offline', 'browser');\n    });\n})();\n"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"9efcb0e5-d71d-4c22-945b-92bb6260a95d","tagTypeId":"custom_js","name":" EzPush","description":" EzPush integration","config":{"code":"(function() {\n    var startEzPush = function() {\n        if (window.EzPush) {\n            return;\n        }\n\n        Playtech.API.common.getScript('https://ezpush.techonlinecorp.com/SDK/v2/ezpush-client.js').then(function() {\n            EzPush.init({\n                applicationId: '610154bd5853fced6dad05e2', // ID of application from ezpush admin\n                subscribeOnInit: true, // true by default\n                language: 'en', // taken from from window.navigator.language by default\n                logEnabled: true, // false by default\n                serviceWorkerUrl: window.SPORTS_SW_LIBRARY // optional, 'ezpush-sw.js' by default, Service-Worker-Allowed HTTP\n                // header required\n            }).then(function() {\n                console.log('[EzPush] You are subscribed to push notifications.');\n\n                if (window.EzPush && window.EzPush.pushToken) {\n                    var pushId = window.EzPush.pushToken;\n                    var deviceType = Playtech.API.device.browserName;\n                    var correlationId = String(Math.random()).slice(2);\n\n                    Playtech.API.server.send({\n                        ID: 35613,\n                        application: 'hollandcasino',\n                        deviceId: EzPush.hwid,\n                        pushId: pushId,\n                        deviceType: deviceType,\n                        correlationId: correlationId\n                    });\n                }\n\n            }).catch(function(error) {\n                console.log('[EzPush] Failed to subscribe to push notifications: ', error);\n            });\n        });\n    };\n\n    Playtech.on(Playtech.Events.LOGGED_IN, startEzPush);\n\n    if (Playtech.API.user.isLoggedIn()) {\n        startEzPush();\n    }\n})();"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"2bf293bd-336d-4de2-8d33-57fa1df1c317","tagTypeId":"custom_tag_type","name":"SportsSlideGamesStyle","description":"Sports side games config","config":{"beforeEndHead":"<style>\n  :root {\n    --card-control-height: 2.5rem;\n    --sport-footer-height: 3rem;\n    --card-popup-minimized-margin: calc(\n      100dvh -\n        (\n          var(--header-height) + var(--sport-footer-height) +\n            var(--card-control-height)\n        )\n    );\n    /* 152px is the height sport-footer-height + card-control-height + header-height. card-popup-minimized-margin: calc(100dvh - 140px) -  it is default core value */\n  }  #sportsbook-side-games {\n    padding: 0;\n    margin: 0 auto;\n  }  .mobile-layout #sportsbook-side-games {\n    bottom: auto;\n    top: var(--header-height);\n    max-height: calc(\n      100dvh - var(--header-height) - var(--sport-footer-height)\n    );\n  }\n  #sportsbook-side-games [class*=\"CardPopup__category\"],\n  #sportsbook-side-games [class*=\"contentContainer\"] {\n    margin: 0 0 0.1rem 0;\n    padding: 0;\n  }  #sportsbook-side-games [class*=\"CardPopup__buttons\"] {\n    width: 100%;\n    text-align: right;\n    background: var(--light-theme-bg-color);\n    height: var(--card-control-height);\n  }  #sportsbook-side-games .game-iframe {\n    height: calc(\n      100dvh - var(--header-height) - var(--card-control-height) -\n        var(--sport-footer-height)\n    );\n  }  .mobile-layout\n    #sportsbook-side-games\n    [class*=\"GamesView__grid\"]\n    [class*=\"GamesView__slide\"]:first-child,\n  .tablet\n    #sportsbook-side-games\n    [class*=\"GamesView__grid\"]\n    [class*=\"GamesView__slide\"]:first-child {\n    padding: 0;\n  }\n  /* I use class \"tablet\" because the \"desktop-layout\" class is used for the iPad Pro*/  #sportsbook-side-games [class*=\"CloseButton__close\"] {\n    display: none;\n  }  @media (max-width: 400px) {\n    .mobile-layout #sportsbook-side-games .col-mob-4 {\n      width: calc(100vw - 0.5rem);\n    }\n  }\n</style>","beforeEndBody":""},"conditionIds":["1a66cab4-39b1-4092-a5cb-81887c12ee83","10c6a1bf-bd4b-4c65-9256-45b166858b9d"]},{"tagId":"e7115f33-a80f-4310-a46c-8672d8e57293","tagTypeId":"custom_js","name":"Advanced Dialog Game and Non-Game","description":"HC-12646 Advanced player messages with different Window types (Game / Non-Game)","config":{"code":"(function () {\r\n  function getButtons({ buttons, actionId, windowSessionId }) {\r\n    const { buttons: popupButtons, onClose } = Playtech.API.popup.getButtons({\r\n      buttons,\r\n      actionId,\r\n      windowSessionId,\r\n    });\r\n\r\n    return { popupButtons, onClose };\r\n  }\r\n\r\n  function showPopup({ buttons, content, onClose }) {\r\n    Playtech.API.popup.showPopup(\"common\", {\r\n      buttons,\r\n      content,\r\n      onClose,\r\n    });\r\n  }\r\n\r\n  Playtech.on(\r\n    \"advanced-dialog-nongame\",\r\n    ({ actionId, actionInfo: { buttons, message }, windowSessionId }) => {\r\n      const { popupButtons, onClose } = getButtons({\r\n        buttons,\r\n        actionId,\r\n        windowSessionId,\r\n      });\r\n\r\n      showPopup({\r\n        buttons: popupButtons,\r\n        content: message,\r\n        onClose,\r\n      });\r\n    },\r\n  );\r\n\r\n  Playtech.on(\r\n    \"advanced-dialog\",\r\n    ({ actionId, actionInfo: { buttons, message }, windowSessionId }) => {\r\n      const { popupButtons, onClose } = getButtons({\r\n        buttons,\r\n        actionId,\r\n        windowSessionId,\r\n      });\r\n\r\n      showPopup({\r\n        buttons: popupButtons,\r\n        content: message,\r\n        onClose,\r\n      });\r\n    },\r\n  );\r\n})();"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"487101b8-7f6f-4927-b5d2-0d9a13468748","tagTypeId":"custom_tag_type","name":"LEADERBOARD_GAMETILE_CSS","description":"Updating the CSS because of leaderboard game tile issue","config":{"beforeEndHead":"<style>\n.GameLabels__label--2e4:last-of-type {\n  display: none !important;\n}\n</style>","beforeEndBody":""},"conditionIds":["20d65c93-a18d-40f0-bb20-6c2053c29822","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"8809bde3-5ee0-434e-a84b-256bff07f6cb","tagTypeId":"custom_tag_type","name":"HIDE_SHADOW_LEADERBOARD_TILE","description":"Hides the Hero Banner top Shadow Gradient","config":{"beforeEndHead":"<style>\n  [class*=RaceListCard__mediaContent--1Xv] [class*=RaceListCard__mediaContent--1Xv]::before {\n      background: none!important;\n  }\n  </style>","beforeEndBody":""},"conditionIds":["4c81598f-2592-452e-b680-3c1eed17cba1","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"ad22010b-b5a9-44d0-bd4b-fb5133e12864","tagTypeId":"custom_tag_type","name":"<3> GTM and CookieBot","description":"HC-12311 Reconfigure GTM and Cookiebot on STG2","config":{"beforeEndHead":"<!-- Google Tag Manager -->\n<script data-cookieconsent=\"ignore\">\n(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\nj=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n'https://sgtm.hollandcasino.nl/hctm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n})(window,document,'script','dataLayer','GTM-KGF9BMX');\n</script>\n\n<!-- Cookiebot CMP -->\n<!--<script id=\"Cookiebot\" src=\"https://consent.cookiebot.com/uc.js\" data-cbid=\"74529192-6709-483c-a1c9-c9b9c22221b3\" type=\"text/javascript\" async></script>-->","beforeEndBody":""},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"3772972c-9037-4fbf-aeeb-6d8073d6470b","tagTypeId":"page_styling","name":"Premium Style","description":"Premium Style","config":{"displayStyle":"premium"},"conditionIds":["b8cd6255-5275-430e-b4b3-34917ce3e157","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"ad5d2463-92a7-41aa-bb67-9d0f75a3c0a7","tagTypeId":"custom_tag_type","name":"ADVERTISING_PREFERENCES_FORM_EXTENSION","description":"HC-12332","config":{"beforeEndHead":"<style>\n  input:-webkit-autofill,\n  input:-webkit-autofill:hover, \n  input:-webkit-autofill:focus, \n  input:-webkit-autofill:active{\n    -webkit-text-fill-color: var(--input-font-color) !important;\n  }\n</style>\n<script>\n  // HC-12332\n(function () {\n    const API_BASE_URL = Playtech.Variables.dynamicTags.find(tag => tag.name === 'ACQ_API_BASE_URL')?.value;\n    const API_KEY = Playtech.Variables.dynamicTags.find(tag => tag.name === 'ACQ_API_KEY')?.value;\n    const TOKEN_ENDPOINT = '/v1/acqoptout/tokens';\n    const CONFIRM_ENDPOINT = '/v1/acqoptout/tokens/confirm';    function waitForElement(selector, callback, interval = 300, timeout = 10000) {\n        const start = Date.now();\n        const check = () => {\n            const element = document.querySelector(selector);\n            if (element && element.querySelectorAll('button[type=\"button\"]')?.length >= 2) {\n                callback(element);\n            } else if (Date.now() - start < timeout) {\n                setTimeout(check, interval);\n            }\n        };\n        check();\n    }    waitForElement('form[data-form-name=\"Advertising Preferences\"]', function (form) {\n        const buttons = form.querySelectorAll('button[type=\"button\"]');        const send2FAMailButton = buttons[0];\n        const confirm2FAButton = buttons[1];        const twoFAInput = form.querySelector('input[name=\"promoExclusion2FAField\"]');\n        const phoneInput = form.querySelector('input[name=\"promoExclusionPhoneField\"]');\n        const emailInput = form.querySelector('input[name=\"promoExclusionEmailField\"]');        const twoFAInputContainer = twoFAInput?.closest('[class*=Control__control]');\n        const phoneInputContainer = phoneInput?.closest('[class*=Control__control]');\n        const confirm2FAButtonContainer = confirm2FAButton.closest('.cms-form-field-name-promoExclusionConfirm2FACodeButton');        const phoneLabel = form.querySelector('label[for^=\"promoExclusionPhoneField\"]');\n        if (phoneLabel) phoneLabel.style.display = 'none';        const explanationText = form.querySelector('[class*=PlainText__text]');\n        if (explanationText) {\n            explanationText.style.display = 'none';\n        }        if (twoFAInputContainer) twoFAInputContainer.style.display = 'none';\n        if (phoneInputContainer) phoneInputContainer.style.display = 'none';\n        if (confirm2FAButtonContainer) confirm2FAButtonContainer.style.display = 'none';        let isSubmitting = false;\n        let storedEmail = '';        send2FAMailButton.addEventListener('click', function () {\n            document.getElementById('form-output')?.remove();\n            document.getElementById('form-error')?.remove();            const email = emailInput?.value.trim() || '';\n            const selectedRadio = form.querySelector('input[name=\"formType\"]:checked');\n            const selectedOption = selectedRadio?.value || '';            const hasEmail = email.length > 0;\n            const hasRadio = !!selectedOption;\n            const errorFields = form.querySelectorAll('[class*=\"Control__invalid\"], [class*=\"ErrorMessage\"]');\n            const hasVisualErrors = errorFields.length > 0;            if (!hasEmail || !hasRadio || hasVisualErrors) {\n                const error = document.createElement('div');\n                error.id = 'form-error';\n                error.style.color = 'red';\n                error.style.marginTop = '1rem';\n                error.textContent = Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.tooltip.required'); // 'Vul alle vereiste velden in';\n                form.parentNode.insertBefore(error, form.nextSibling);\n                return;\n            }            if (isSubmitting) return;\n            isSubmitting = true;\n            send2FAMailButton.disabled = true;\n            const currentLang = Playtech.API.language.getCurrentLanguage()?.substring(0, 2);            const queryParams = new URLSearchParams({\n                type: selectedOption,\n                email: email,\n                language_code: currentLang\n            }).toString();            fetch(`${API_BASE_URL}${TOKEN_ENDPOINT}?${queryParams}`, {\n                method: 'POST',\n                headers: { 'x-api-key': API_KEY }\n            })\n                .then(response => {\n                    isSubmitting = false;\n                    send2FAMailButton.disabled = false;                    if (!response.ok) {\n                        return response.json().then(data => {\n                            const error = document.createElement('div');\n                            error.id = 'form-error';\n                            error.style.color = 'red';\n                            error.style.marginTop = '1rem';\n                            error.textContent = data.message ||  Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.tooltip.response.error'); // 'Kon het formulier niet verzenden. Controleer jouw code en probeer opnieuw';\n                            form.parentNode.insertBefore(error, form.nextSibling);\n                            throw new Error(data.message || 'Submission error');\n                        });\n                    }                    storedEmail = email;                    send2FAMailButton.style.display = 'none';\n                    if (twoFAInputContainer) twoFAInputContainer.style.display = '';\n                    if (phoneInputContainer) phoneInputContainer.style.display = '';\n                    if (confirm2FAButtonContainer) confirm2FAButtonContainer.style.display = '';                    if (explanationText) explanationText.style.display = '';\n                })\n                .catch(err => {\n                    isSubmitting = false;\n                    send2FAMailButton.disabled = false;\n                    console.error(err);\n                });\n        });        confirm2FAButton.addEventListener('click', function () {\n            document.getElementById('form-output')?.remove();\n            document.getElementById('form-error')?.remove();            const phone = phoneInput?.value.trim() || '';\n            const token = twoFAInput?.value.trim() || '';\n            const email = storedEmail;            if (!phone || !token || !email) {\n                const error = document.createElement('div');\n                error.id = 'form-error';\n                error.style.color = 'red';\n                error.style.marginTop = '1rem';\n                error.textContent = Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.tooltip.required'); //'Vul alle vereiste velden in'\n                form.parentNode.insertBefore(error, form.nextSibling);\n                return;\n            }            confirm2FAButton.disabled = true;            const queryParams = new URLSearchParams({\n                phone: phone,\n                token: token,\n                email: email\n            }).toString();            fetch(`${API_BASE_URL}${CONFIRM_ENDPOINT}?${queryParams}`, {\n                method: 'POST',\n                headers: { 'x-api-key': API_KEY }\n            })\n                .then(response => {\n                    confirm2FAButton.disabled = false;                    if (!response.ok) {\n                        return response.json().then(data => {\n                            const error = document.createElement('div');\n                            error.id = 'form-error';\n                            error.style.color = 'red';\n                            error.style.marginTop = '1rem';\n                            error.textContent = data.message || Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.tooltip.code.error'); // 'Fout bij versturen. Controleer de ingevoerde code';\n                            form.parentNode.insertBefore(error, form.nextSibling);\n                            throw new Error(data.message || 'Confirmation error');\n                        });\n                    }                    // form.style.display = 'none';\n                    //\n                    // const successDiv = document.createElement('div');\n                    // successDiv.id = 'form-output';\n                    // successDiv.style.paddingTop = '20vh';\n                    // successDiv.style.paddingBottom = '20vh';\n                    // successDiv.style.textAlign = 'center';\n                    //\n                    // const header = document.createElement('h2');\n                    // header.textContent = Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.successTitle'); // 'Het is gelukt!';\n                    // header.style.marginBottom = '1rem';\n                    //\n                    // const paragraph = document.createElement('p');\n                    // paragraph.innerHTML = Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.successMessage'); // 'We hebben je voorkeur opgeslagen en zorgen ervoor dat je er geen omkijken meer naar hebt. Toch iets wijzigen? Vul dan het formulier opnieuw in.<br><br>Let op: het kan een paar dagen duren voordat je aan- of afmelding volledig verwerkt is. In de tussentijd kun je nog advertenties van ons tegenkomen. Bedankt voor je geduld!';\n                    // paragraph.style.margin = '0 auto';\n                    // paragraph.style.maxWidth = '100%';\n                    // paragraph.style.lineHeight = '1.6';\n                    // paragraph.style.padding = '0 1rem';\n                    //\n                    //\n                    // successDiv.appendChild(header);\n                    // successDiv.appendChild(paragraph);\n                    //\n                    // form.parentNode.insertBefore(successDiv, form.nextSibling);                    Playtech.API.common.navigate('/');\n                    Playtech.API.popup.showPopup({\n                        title: Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.successTitle'),\n                        content: Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.successMessage')\n                    });\n                })\n                .catch(err => {\n                    confirm2FAButton.disabled = false;\n                    console.error(err);\n                });\n        });\n    });\n})();\n</script>","beforeEndBody":""},"conditionIds":["5dfa5ec7-2f60-4ec3-a4b2-2a26294bd859","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"2f8c08e0-cfd1-4da9-8ae1-9e2d86701048","tagTypeId":"custom_js","name":"Page time counter for specific RG pages","description":"HC-11165","config":{"code":"// HC-11165\n(function() {\n    if (!Playtech.API.user.isLoggedIn()) {\n        return;\n    }\n\n    var FIFTEEN_SECONDS = 15000;\n    var ONE_MINUTE = 60000;\n    var clearUrl = Playtech.API.common.getCleanUrl();\n    var notificationSession = Date.now();\n\n    setPlayerTag(clearUrl, notificationSession, 0);\n\n    var timeout = setTimeout(() => {\n        setPlayerTag(clearUrl, notificationSession, 1);\n    }, FIFTEEN_SECONDS);\n\n    let i = 2;\n    var interval = setInterval(() => {\n        if (i === 11) {\n            clearInterval(interval);\n        }\n\n        setPlayerTag(clearUrl, notificationSession, i++);\n\n    }, ONE_MINUTE);\n\n    function setPlayerTag(pageName, sessionId, increment) {\n        var currentPage = Playtech.API.common.getCleanUrl();\n        if (currentPage !== pageName) {\n            clearInterval(interval);\n            clearTimeout(timeout);\n            return;\n        }\n\n        var tagValue = { pageName, notificationSession: sessionId, timestampCount: increment };\n\n        Playtech.API.user.setPlayerTags([\n            {\n                name: 'Portal/SafeBet/ResponsibleGamingPage',\n                value: JSON.stringify(tagValue),\n                type: 'text'\n            }\n        ]);\n    }\n})();"},"conditionIds":["10c6a1bf-bd4b-4c65-9256-45b166858b9d"]},{"tagId":"2f9347a2-7cc0-4494-b31b-a07c5ea3b13b","tagTypeId":"custom_tag_type","name":"Sportsbook Styles","description":"HC-11970 Sportsbook max page width","config":{"beforeEndHead":"<style>\n  /* HC-11970 */\n  :root {\n    --layout-max-width: 1440px;\n  }\n</style>","beforeEndBody":""},"conditionIds":["1a66cab4-39b1-4092-a5cb-81887c12ee83","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"a5557c0e-b2f1-466e-b8e3-d171b0254ac3","tagTypeId":"custom_js","name":"<3> Push User Data to DataLayer","description":"HC-11951,HC-11898 ( push userId, email and ageGroup to dataLayer)","config":{"code":" (function () {\r\n    const loginEvent = \"login\";\r\n    const registrationCompletedEvent = \"Registration:online:first_login\";\r\n\r\n    async function sha256Hash(email) {\r\n      const encoder = new TextEncoder();\r\n      const emailBuffer = encoder.encode(email);\r\n      const hashBuffer = await crypto.subtle.digest(\"SHA-256\", emailBuffer);\r\n      const hashArray = Array.from(new Uint8Array(hashBuffer));\r\n      const hashHex = hashArray\r\n        .map((byte) => byte.toString(16).padStart(2, \"0\"))\r\n        .join(\"\");\r\n      return hashHex;\r\n    }\r\n\r\n    function calculateUserAge(date) {\r\n      if (!date) return 0;\r\n\r\n      return Math.abs(\r\n        new Date(new Date() - new Date(date)).getFullYear() - 1970\r\n      );\r\n    }\r\n\r\n    function getAgeGroup(age) {\r\n      const ageGroups = [\r\n        { min: 18, max: 23, group: 1 },\r\n        { min: 24, max: 29, group: 2 },\r\n        { min: 30, max: 34, group: 3 },\r\n        { min: 35, max: 39, group: 4 },\r\n        { min: 40, max: 44, group: 5 },\r\n        { min: 45, max: 49, group: 6 },\r\n        { min: 50, max: 54, group: 7 },\r\n        { min: 55, max: 60, group: 8 },\r\n        { min: 61, max: Infinity, group: 9 },\r\n      ];\r\n\r\n      for (const ageGroup of ageGroups) {\r\n        if (age >= ageGroup.min && age <= ageGroup.max) {\r\n          return ageGroup.group;\r\n        }\r\n      }\r\n\r\n      return \"\";\r\n    }\r\n\r\n    const setUserData = (event) => {\r\n      let userDetails = {};\r\n      const user = {};\r\n\r\n      if (event === registrationCompletedEvent) {\r\n        userDetails = JSON.parse(sessionStorage.getItem(\"userModel\"));\r\n      }\r\n\r\n      const { userId, email, birthDate } =\r\n        event === loginEvent\r\n          ? Playtech.fetchUserDetails()\r\n          : {\r\n              ...userDetails,\r\n              ...userDetails?.formData,\r\n              birthDate: userDetails?.formData?.birthdate,\r\n            };\r\n\r\n      const userAge = calculateUserAge(birthDate);\r\n      const ageGroup = getAgeGroup(userAge);\r\n\r\n      user.userId = userId;\r\n      if (ageGroup) {\r\n        user.ageGroup = ageGroup;\r\n      }\r\n\r\n      sha256Hash(email)\r\n        .then((hash) => {\r\n          user.hash = hash;\r\n        })\r\n        .catch((err) => {\r\n          console.error(\"HC-11898 Error hashing email:\", err);\r\n        })\r\n        .finally((err) => {\r\n          window.dataLayer = window.dataLayer || [];\r\n\r\n          const dataLayerObject = {\r\n            event: event,\r\n            user: user,\r\n          };\r\n\r\n          if (event === registrationCompletedEvent) {\r\n            dataLayerObject.new_customer = true;\r\n          }\r\n          window.dataLayer.push(dataLayerObject);\r\n        });\r\n    };\r\n\r\n    if (Playtech.API.auth.isLoggedIn) {\r\n      setUserData(loginEvent);\r\n    }\r\n\r\n    Playtech.on(Playtech.Events.LOGGED_IN, () => {\r\n      setUserData(loginEvent);\r\n    });\r\n\r\n    Playtech.on(Playtech.Events.REGISTRATION_COMPLETED, () => {\r\n      setUserData(registrationCompletedEvent);\r\n    });\r\n  })();"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"32950625-cb76-43b7-b3e7-4c5e24f0ea64","tagTypeId":"custom_js","name":"Game launch","description":"game launch","config":{"code":"(function () {\n    if (\n        Playtech.API.common.getCleanUrl() !== '/gamelaunch' ||\n        Playtech.Variables.isAdminLoggedIn\n    ) {\n        return;\n    }\n\n    var searchParams = new URLSearchParams(window.location.search);\n    var gameCodeValue = searchParams.get('gameCode');\n\n    function waitForGamesConfiguration() {\n        var delay = 1000;\n        var timeout = -1;\n        var times = 0;\n        var callback = function (res, rej) {\n            if (Playtech.Variables.games) {\n                res({ times });\n                return;\n            }\n\n            if (times >= 30) {\n                rej({ times });\n                return;\n            }\n\n            times += 1;\n\n            timeout = setTimeout(function () {\n                callback(res, rej);\n            }, delay);\n        };\n\n        return new Promise(function (resolve, reject) {\n            timeout = setTimeout(function () {\n                callback(resolve, reject);\n            }, delay);\n        });\n    }\n\n    function launchGame(code) {\n        if (Playtech.API.auth.isLoggedIn) {\n            Playtech.API.popup.showPopup({\n                content:\n                    'playtech.mobile.system.games.popup-blocker-with-confirm',\n                buttons: [\n                    {\n                        text: 'playtech.mobile.system.button.realPlay',\n\n                        onClick() {\n                            Playtech.API.game.open({ code: code });\n                        }\n                    }\n                ],\n                layer: 'HIGH_PRIORITY'\n                // closeAll: true\n            });\n        } else {\n            Playtech.API.game.open({ code: code });\n        }\n    }\n\n    if (gameCodeValue) {\n        waitForGamesConfiguration().then(function () {\n            Playtech?.API.common.navigate(\n                '/',\n                { replace: true },\n                { removeParams: ['gameCode'] }\n            );\n\n            launchGame(gameCodeValue);\n        });\n    } else {\n        Playtech.API.common.navigate('/error-page');\n    }\n})();\n"},"conditionIds":["f47bb07f-0e1a-4901-b766-673d8728d2dd","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"590a37aa-25d0-42ac-93ec-1f21f5804a7b","tagTypeId":"custom_tag_type","name":"[Regulation] - BlockAccessOnNativeApps","description":"HC-11575 - Block access on Native Apps","config":{"beforeEndHead":"<style>\n  #blockAccessOnNativeAppsPopup .hideBtn {\n    display: none;\n  }\n</style>\n<script>\n  (function () {\n    const WEB_CONTENT = \"BLOCK_ACCESS_ON_NATIVE_APPS\";\n    const POPUP_ID = \"blockAccessOnNativeAppsPopup\";\n    const REQUIRE_CONFIRMATION_PLAYER_TAG_NAME =\n      \"portal/regulation/requireConfirmation\";\n\n    function log() {\n      if (localStorage.getItem(\"isLoggerEnabled\") === \"true\") {\n        console.log.apply(\n          console,\n          [\"[Block Access On Native Apps] \"].concat(Array.from(arguments))\n        );\n      }\n    }\n\n    function shouldShowBlockingPopup(tags) {\n      try {\n        return Boolean(\n          tags[0]?.name === REQUIRE_CONFIRMATION_PLAYER_TAG_NAME &&\n            tags[0]?.value === \"true\"\n        );\n      } catch (err) {\n        throw { error: err, code: 1 };\n      }\n    }\n\n    function showBlockingPopup(tags) {\n      try {\n        if (shouldShowBlockingPopup(tags)) {\n          log(\"show Popup\");\n          Playtech.API.popup.showPopup({\n            articleId: WEB_CONTENT,\n            layer: \"VERY_HIGH_PRIORITY\",\n            classNames: { actionButtons: \"hideBtn\" },\n            isModal: true,\n            id: POPUP_ID,\n          });\n        }\n      } catch (err) {\n        log(\"error\", err);\n      }\n    }\n\n    function getPlayerTags() {\n      return Playtech.API.user\n        .getPlayerTags(REQUIRE_CONFIRMATION_PLAYER_TAG_NAME)\n        .then(function (response) {\n          return response?.data?.tags || [];\n        });\n    }\n\n    Playtech.on(Playtech.Events.LOGGED_IN, function () {\n      getPlayerTags().then(showBlockingPopup);\n    });\n\n    if (Playtech.API.auth.isLoggedIn) {\n      getPlayerTags().then(showBlockingPopup);\n    }\n  })();\n</script>","beforeEndBody":""},"conditionIds":["109b8f48-da23-4e5d-8f62-b1371cf41a08","bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"44fb0671-95f8-4991-b22c-8a14227c68c6","tagTypeId":"custom_js","name":"Hide games for sportsbook native app","description":"Hide games for sportsbook native app","config":{"code":"(function() {\n  var params = new URLSearchParams(location.search);\n  if (params.has('additionalContext') && params.has('isNative')) {\n    var games = document.querySelectorAll('[data-portlet-type=\"responsivegames\"]');\n    if (games.length > 0) {\n      Array.from(games).forEach(function(el) {\n        el.classList.add('hidden');\n      })\n    }\n  }\n\n})();"},"conditionIds":["1a66cab4-39b1-4092-a5cb-81887c12ee83","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"7da1d382-a9c6-4904-a45b-82981b7797a0","tagTypeId":"custom_tag_type","name":"Native disable reg","description":"HC-10828 - Show a popup hiding registration for native users","config":{"beforeEndHead":"<style>\n    #disableRegPopup button {\n        display: none !important;\n    }\n</style>\n<script>\n    (function () {\n\n        var playerTags = [];\n\n        function isRegInProgress() {\n            try {\n                return playerTags.some(function (tag) {\n                    return tag.name === 'portal/registration/InProgress' && tag.value === 'true';\n                });\n            } catch (err) {\n                throw {error: err, code: 1};\n            }\n        }\n\n        function main() {\n            try {\n                if (isRegInProgress()) {\n                    Playtech.API.popup.showPopup({\n                        articleId: 'NATIVE_REG_DISABLED',\n                        layer: 'VERY_HIGH_PRIORITY',\n                        isModal: true,\n                        id: 'disableRegPopup'\n                    });\n                }\n            } catch (err) {\n                console.log('disable reg error >>>', err);\n            }\n        }\n\n        function getPlayerTags() {\n            return Playtech.API.user.getPlayerTags().then(function (response) {\n                playerTags = response.data.tags;\n            });\n        }\n\n        Playtech.on(Playtech.Events.LOGGED_IN, function () {\n            getPlayerTags().then(main);\n        });\n\n        Playtech.on(Playtech.Events.LOGGED_OUT, function () {\n            playerTags = [];\n        });\n\n        if (Playtech.API.auth.isLoggedIn) {\n            getPlayerTags().then(main);\n        }\n\n    })();\n</script>\n","beforeEndBody":""},"conditionIds":["109b8f48-da23-4e5d-8f62-b1371cf41a08","bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"8d3e1d2d-058d-4aba-8717-75317d98ac9a","tagTypeId":"hc_ticket_counter","name":"TicketCounterTest","description":"Ticket Counter Test","config":{"playerTagName":"Player Journey/Raffleticketcount","webContentId":"TICKETCOUNTERTEST_BRIAN","vipLevelEqual":"3-20","vipLevelNotEqual":"1, 24"},"conditionIds":["01e72e94-c3b4-4182-ba14-bf084569e3b4","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"11d2bc52-84c6-443e-926f-6a71b3c13c4c","tagTypeId":"custom_js","name":"Add VIP Level as class","description":"Add VIP Level as class","config":{"code":"(() => {\r\n   // html tag to attach CSS classes to\r\n   // needs to be #applicaion, because otherwise classes will get overwritten by Portal\r\n   const root = document.querySelector('#application');\r\n   const handler = () => {\r\n      if (!Playtech.API.auth.isLoggedIn) {\r\n         // if player is not logged in, do nothing\r\n         return;\r\n      }\r\n\r\n      const getPlayersLevel = Playtech.fetchUserDetails();\r\n      const vipLevel  = getPlayersLevel.vipLevel; //get vip status\r\n      // add viplevel1\r\n      root.classList.add(`viplevel${vipLevel}`);\r\n   };\r\n   // subscribe to login event\r\n   Playtech.on(Playtech.Events.LOGGED_IN, handler);\r\n   // subscribe to logout event\r\n   Playtech.on(Playtech.Events.LOGGED_OUT, () => {\r\n      Array.from(root.classList)\r\n         .filter((name) => name.startsWith('vipl'))\r\n         .forEach((name) => root.classList.remove(name));\r\n   });\r\n   // check on app init\r\n   handler();\r\n})();"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"eee46cd0-5594-4ac6-a4bd-72feb3ea09d6","tagTypeId":"custom_tag_type","name":"HideBtnInIDINOption","description":"Hide the \"Verify my account with IDIN\" button in IDINOption registration","config":{"beforeEndHead":"<style>\r\n  button[class*=IDINOption__btn] {\r\n    display: none !important;\r\n  }\r\n  a[class*=IDINOption__btn] [class*=PlainText__text] {\r\n    font-size: 1.2rem;\r\n  }\r\n</style>","beforeEndBody":""},"conditionIds":["109b8f48-da23-4e5d-8f62-b1371cf41a08","ffa107aa-bb77-47e8-86d3-caad97cbbf82"]},{"tagId":"372aa339-83a2-4102-aa11-e4f4e9de8759","tagTypeId":"custom_tag_type","name":"AVENT_CALENDAR_STYLES_DEC23","description":"Advent calendar styles","config":{"beforeEndHead":"<style>\r\n  .bannerAdventCalendar [class*=\"AdventCalendar__adventCalendarWrapper\"] {\r\n    max-width: 63.875rem;\r\n    margin: 0 auto;\r\n    background-size: contain;\r\n    width: 100%;\r\n    background-repeat: no-repeat;\r\n    aspect-ratio: 2.2 / 1;\r\n  }\r\n\r\n  .bannerAdventCalendar [class*=\"col-mob-4 col-dsk-10 AdventCalendar__adventCalendar\"] {\r\n    width: 100% !important;\r\n    min-width: auto !important;\r\n    padding: 0;\r\n    display: grid;\r\n    grid-template: repeat(5, 1fr) / repeat(7, 1fr);\r\n    grid-gap: 0.5rem;\r\n    margin: 5% 9.5%;\r\n  }\r\n\r\n  [class*=\"AdventItem__adventItemWrapper\"] {\r\n    width: 100% !important;\r\n    display: block;\r\n  }\r\n\r\n  [class*=\"AdventItem__adventItemWrapper\"] [class*=\"Overlay__overlay\"] {\r\n    height: 200vh;\r\n    top: -50vh;\r\n  }\r\n\r\n  [class*=\"Button__success\"][class*=\"Button__dark\"][class*=\"AdventItem__adventItem\"] {\r\n    margin: 0;\r\n    width: 100%;\r\n    height: 100%;\r\n    text-shadow: none;\r\n    box-shadow: none;\r\n    border: 0 !important;\r\n    transform: none !important;\r\n    font-size: 3rem;\r\n    font-weight: 800;\r\n    line-height: 0.2rem;\r\n    background-color: #18042c !important;\r\n    color: #524361;\r\n  }\r\n\r\n  [class*=\"Button__success\"][class*=\"Button__dark\"][class*=\"AdventItem__future\"] {\r\n    background-color: var(--hc-white) !important;\r\n    color: #fb258d;\r\n  }\r\n\r\n  [class*=\"Button__success\"][class*=\"Button__dark\"][class*=\"AdventItem__active\"] {\r\n    background-color: #fb258d !important;\r\n    color: var(--hc-white);\r\n    background-image: none;\r\n  }\r\n\r\n  .mobile-layout .bannerAdventCalendar [class*=\"AdventCalendar__adventCalendarWrapper\"] {\r\n    width: 74vw;\r\n  }\r\n\r\n  .mobile-layout\r\n    [class*=\"col-mob-4 col-dsk-10 AdventCalendar__adventCalendar\"] {\r\n    grid-gap: 0.188rem;\r\n    margin: 0;\r\n  }\r\n\r\n  .mobile-layout\r\n    [class*=\"Button__success\"][class*=\"Button__dark\"][class*=\"AdventItem__adventItem\"] {\r\n    font-size: 1.7rem;\r\n    line-height: 0.2rem;\r\n  }\r\n\r\n  @media (min-width: 1183px) {\r\n    .bannerAdventCalendar [class*=\"AdventCalendar__adventCalendarWrapper\"] {\r\n      height: 51vh;\r\n      background-position: center;\r\n      max-height: 462px;\r\n      width: auto;\r\n    }\r\n  }\r\n\r\n  @media (max-width: 1182px) and (min-width: 1000px) {\r\n    .bannerAdventCalendar [class*=\"AdventCalendar__adventCalendarWrapper\"] {\r\n      max-width: 100%;\r\n    }\r\n\r\n    .bannerAdventCalendar [class*=\"col-mob-4 col-dsk-10 AdventCalendar__adventCalendar\"] {\r\n      margin: 8% 16%;\r\n    }\r\n  }\r\n\r\n  @media (max-width: 500px) {\r\n    .mobile-layout\r\n      [class*=\"Button__success\"][class*=\"Button__dark\"][class*=\"AdventItem__adventItem\"] {\r\n      font-size: 1.2rem;\r\n    }\r\n  }\r\n\r\n  @media screen and (orientation: landscape) {\r\n    .mobile-layout .bannerAdventCalendar [class*=\"AdventCalendar__adventCalendarWrapper\"] {\r\n      max-width: 65vh;\r\n    }\r\n  }\r\n\r\n  /* hero banner */\r\n  .bannerAdventCalendar [class*=\"withHollandLayouts__wrapper\"] {\r\n    --content-height: 60vh;\r\n  }\r\n  .bannerAdventCalendar [class*=\"Banner__sliderContainer\"],\r\n  .bannerAdventCalendar [class*=\"Banner__slider\"] {\r\n    flex: 1 0 100%;\r\n  }\r\n\r\n  .bannerAdventCalendar [class*=\"Slide__wc\"][class*=\"withHollandLayouts__wc\"] {\r\n    top: 50%;\r\n    transform: translateY(-50%);\r\n    height: auto;\r\n    display: block;\r\n  }\r\n\r\n  /* popup */\r\n  .application-root [class*=\"AdventItemPopup__popup\"] {\r\n    overflow: hidden;\r\n  }\r\n\r\n  [class*=\"AdventItemPopup__popup\"] .popup-modal__inner-content {\r\n    overflow-y: auto;\r\n    height: 100%;\r\n    padding: 0 1rem;\r\n    white-space: initial;\r\n  }\r\n\r\n  .mobile-layout .bannerAdventCalendar [class*=\"Popup__close\"] {\r\n    top: 1.5rem !important;\r\n    right: 1rem !important;\r\n  }\r\n\r\n  @media (max-width: 1000px) {\r\n    .bannerAdventCalendar [class*=\"Popup__container\"] {\r\n      top: -20vh;\r\n    }\r\n\r\n    .mobile.landscape\r\n      .application-root\r\n      .bannerAdventCalendar\r\n      [class*=\"AdventItemPopup__popup\"] {\r\n      height: calc(71vh - 2rem);\r\n    }\r\n\r\n    [class*=\"AdventItemPopup__popup\"] .popup-modal__inner-content {\r\n      padding: 0 1rem 3rem;\r\n    }\r\n  }\r\n</style>\r\n","beforeEndBody":""},"conditionIds":["2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"217da009-6c1b-467b-9ed0-2b3c716a4eaa","tagTypeId":"custom_tag_type","name":"Promotions Main Page - Remove Shadow Gradient on image","description":"Promotions Main Page - Remove Shadow Gradient on image","config":{"beforeEndHead":"<style>\n  [class*=Promo__mediaWrapper--]:after {\n      content: none !important;\n  }\n</style>\n<style>\n  [class*=Promo__mediaWrapper--]:before {\n      content: none !important;\n  }\n</style>","beforeEndBody":""},"conditionIds":["4c81598f-2592-452e-b680-3c1eed17cba1","345f5466-1ecb-41f0-a758-0aa6b96e7697","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"3579f170-18b0-4c6b-8c79-73371d5d1041","tagTypeId":"custom_js","name":"Refresh page by player tag","description":"Refresh page by player tag","config":{"code":"(function () {\n    function removePlayerTags(tags) {\n        Playtech.API.server.send({\n            ID: 35553,\n            tags: [...tags],\n            responses: [35554, 35555],\n            description: 'Remove Player Tags Request'\n        })\n    }\n\n    function playerTagChangeListener(e) {\n        const { tag, removed } = e.detail;\n\n        if (tag === 'CRM/refresh' && !removed) {\n            removePlayerTags([{name: tag}])\n            window.location.reload();\n        }\n    }\n\n    function subscribeOnTagChange() {\n        Playtech.API.events.addEventListener(\n            'player-tag-change',\n            playerTagChangeListener\n        );\n    }\n\n    function unsubscribeOnTagChange() {\n        Playtech.API.events.removeEventListener(\n            'player-tag-change',\n            playerTagChangeListener\n        );\n    }\n\n    Playtech.on(Playtech.Events.LOGGED_IN, subscribeOnTagChange);\n\n    Playtech.on(Playtech.Events.LOGGED_OUT, unsubscribeOnTagChange);\n\n    if (Playtech.API.auth.isLoggedIn) {\n        subscribeOnTagChange();\n    }\n})();\n"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"5df800d8-4757-4c99-8f7e-4fc034847b88","tagTypeId":"vip_icons","name":"VIP Icons","description":"Configuration of avatar images by vip levels","config":{"vipIconsConfig":[{"vipLevel":"30","icon":"/library/VIP/icons/vip-premium-icon.png"},{"vipLevel":"29","icon":"/library/VIP/icons/vip-premium-icon.png"},{"vipLevel":"28","icon":"/library/VIP/icons/vip-platinum-icon.png"},{"vipLevel":"27","icon":"/library/VIP/icons/vip-gold-icon.png"},{"vipLevel":"26","icon":"/library/VIP/icons/vip-silver-icon.png"},{"vipLevel":"20","icon":"/library/VIP/icons/vip-platinum-icon.png"},{"vipLevel":"19","icon":"/library/VIP/icons/vip-premium-icon.png"},{"vipLevel":"18","icon":"/library/VIP/icons/vip-platinum-icon.png"},{"vipLevel":"17","icon":"/library/VIP/icons/vip-gold-icon.png"},{"vipLevel":"16","icon":"/library/VIP/icons/vip-silver-icon.png"}]},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"974b3a3f-5b73-4edc-b702-ab6ddaa1df0a","tagTypeId":"custom_js","name":"PJ Initial Offer Tag Setter","description":"Impl for tag setter","config":{"code":"document.body.addEventListener('click', (event) => {\n    if (event.target.id === 'sports-offer') {\n        Playtech.API.user.setPlayerTags([{ name: 'sports-tag' }]);\n    } else if (event.target.id === 'casino-offer') {\n        Playtech.API.user.setPlayerTags([{ name: 'casino-tag' }]);\n    }\n});"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]}],"conditions":[{"conditionId":"b8cd6255-5275-430e-b4b3-34917ce3e157","conditionTypeId":"page_condition","name":"Premium pages","description":"list of premium pages","config":{"onPageLaunch":"/test/test-premium-components, /test-premium-components2, /test-premium-components/test-home, /premium-lounge, /premium-lounge/home, /premium-lounge/promoties, /premium-lounge/events, /test-premium-components-code","onPageNotLaunch":""}},{"conditionId":"9772dc61-ab34-460f-9759-be2edb11cd51","conditionTypeId":"page_condition","name":"aws page ","description":"run aws tag","config":{"onPageLaunch":"/online/casino/slotmachines,/casino","onPageNotLaunch":""}},{"conditionId":"dfe6bbcd-e4c0-4a93-bf8e-b3ad13646c71","conditionTypeId":"page_condition","name":"/awsmessagetest2","description":"/awsmessagetest2","config":{"onPageLaunch":"/awsmessagetest2","onPageNotLaunch":""}},{"conditionId":"20d65c93-a18d-40f0-bb20-6c2053c29822","conditionTypeId":"page_condition","name":"Leaderboard-page","description":"Leaderboard-pages","config":{"onPageLaunch":"/leaderboard-page","onPageNotLaunch":""}},{"conditionId":"60352a4d-5190-4f6f-8ddd-22780680eed3","conditionTypeId":"page_condition","name":"/live-casino","description":"live-casino","config":{"onPageLaunch":"/live-casino","onPageNotLaunch":""}},{"conditionId":"5dfa5ec7-2f60-4ec3-a4b2-2a26294bd859","conditionTypeId":"page_condition","name":"afmelden-advertenties/formulier","description":"afmelden-advertenties/formulier","config":{"onPageLaunch":"/afmelden-advertenties/formulier","onPageNotLaunch":""}},{"conditionId":"3a3b7ebd-924c-4201-9b64-c60367a4f411","conditionTypeId":"page_condition","name":"on poker page","description":"on poker page","config":{"onPageLaunch":"/poker","onPageNotLaunch":""}},{"conditionId":"9f733509-bbb6-4048-8901-85533034314c","conditionTypeId":"page_condition","name":"structured-data-test","description":"structured-data-test","config":{"onPageLaunch":"/structured-data-test","onPageNotLaunch":""}},{"conditionId":"2e8f68c0-2d83-4009-bf0e-9507529535dc","conditionTypeId":"native_app_condition","name":"excludeFromNative","description":"will not run in native apps","config":{"nativeAppRule":"0"}},{"conditionId":"01e72e94-c3b4-4182-ba14-bf084569e3b4","conditionTypeId":"page_condition","name":"WhiteBlackListTCount","description":"WhiteBlackListTCount","config":{"onPageLaunch":"","onPageNotLaunch":"/sportsbook"}},{"conditionId":"4c81598f-2592-452e-b680-3c1eed17cba1","conditionTypeId":"page_condition","name":"General pages","description":"Main URLs for use with custom CSS changes","config":{"onPageLaunch":"/home , /casino , /live-casino , /promoties ,/bingo , /sportsbook , /poker , /online/casino/premium , /online/casino/exclusief , /online/casino/tablegames , /online/casino/slotmachines , /online/casino/jackpots , /en/online/casino/all-games-casino , /online/veilig-en-verantwoord-spelen , /promoties/poker-welcome-2022 , /promoties/poker-welcome-offer , /live/exclusive , /live/tafelspelen , /live/roulette , /live/gameshows ,  /live/highroller , /live/ander, /promoties/casino/niet-normaal-novemberprijs, /promoties/poker-mcop-2022, /promoties/sports/HCSPBGSRV-nov22, /promoties/sports/HCSPBGSR-nov22, /promoties/sports/HCSPXmasSpecial-dec22, /TEst-Xenia-Engagement_NORMAL, /promoties/poker-irish-open, /promoties/sports/football-combo-boost, /promoties/sports/tennis-combo-boost, /promoties/sports/basketball-combi-boost, /promoties/sports/darts-combo-boost, /promoties/sports/bet-watch, /promoties/sports/cash-out, /promoties/sports/Chineesnieuwjaar, /promoties/sports/ChineesnieuwjaarV, /promoties/wpt-prime-qualifiers, /promoties/poker-leaderboard, /promoties/sports/FEBRUARIFREEBET, /promoties/sports/FebruariCombi, /promoties/sports/FebruariCombiV, /leaderboards, /inloggen, /registreren, /promoties/vip, /promoties/, /promoties/casino, /promoties/sportsbook, /promoties/poker, /promoties/bingo","onPageNotLaunch":""}},{"conditionId":"345f5466-1ecb-41f0-a758-0aa6b96e7697","conditionTypeId":"page_condition","name":"Main promo page only","description":"Main promo page only","config":{"onPageLaunch":"/promoties,/Promogrid-test-final,/promoties/casino,/promoties/sportsbook,/promoties/poker,/promoties/bingo,/promoties/vip,/prev.hollandcasino.nl/en/promoties, /prev.hollandcasino.nl/promoties","onPageNotLaunch":""}},{"conditionId":"109b8f48-da23-4e5d-8f62-b1371cf41a08","conditionTypeId":"native_app_condition","name":"inNative","description":"the tag will run only if url has param ?isNative=1","config":{"nativeAppRule":"1"}},{"conditionId":"eff80154-dd28-44c2-8dcd-9d0bc83ef6b3","conditionTypeId":"page_condition","name":"/cookie-settings","description":"/cookie-settings","config":{"onPageLaunch":"/cookie-settings","onPageNotLaunch":""}},{"conditionId":"ffa107aa-bb77-47e8-86d3-caad97cbbf82","conditionTypeId":"basic_condition","name":"OnPreloader","description":"OnPreloader","config":{"launch":"onPreloader"}},{"conditionId":"8059f1cb-fd6e-4142-8071-26a5376abe4c","conditionTypeId":"page_condition","name":"PenaltyShootout page","description":"/promoties/sports/PenaltySpel","config":{"onPageLaunch":"/promoties/sports/PenaltySpel","onPageNotLaunch":""}},{"conditionId":"00496ce8-f9cc-44f7-95cc-11d9faef1d0c","conditionTypeId":"page_condition","name":"TN docs upload page","description":"TN docs upload page","config":{"onPageLaunch":"/mijnhc/account-verificatie","onPageNotLaunch":""}},{"conditionId":"f47bb07f-0e1a-4901-b766-673d8728d2dd","conditionTypeId":"page_condition","name":"/gamelaunch","description":"/gamelaunch","config":{"onPageLaunch":"/gamelaunch","onPageNotLaunch":""}},{"conditionId":"5a613a7e-8cb1-4ad7-b227-581f8b0a392d","conditionTypeId":"page_condition","name":"Test - Brian test","description":"test page ","config":{"onPageLaunch":"/briantest","onPageNotLaunch":""}},{"conditionId":"bc0b6529-9f7a-4f6b-8c4d-15194d057ee8","conditionTypeId":"basic_condition","name":"onAppInit","description":"Application initialisation","config":{"launch":"onAppInit"}},{"conditionId":"5d6c9f1d-245e-415b-a164-2a5752005ef1","conditionTypeId":"page_condition","name":"/ada","description":"/ada","config":{"onPageLaunch":"/ada","onPageNotLaunch":""}},{"conditionId":"a7c25c7b-c02c-4d63-bd9a-4cb9c6993006","conditionTypeId":"page_condition","name":"/bingo","description":"/bingo","config":{"onPageLaunch":"/bingo","onPageNotLaunch":""}},{"conditionId":"54ecef8c-410a-4aae-935a-ae7b66a2be91","conditionTypeId":"page_condition","name":"/home_page_trigger","description":"when user visits the /home page","config":{"onPageLaunch":"/home","onPageNotLaunch":""}},{"conditionId":"3b190ea9-16dc-4436-aa2e-4e2ba3cbb820","conditionTypeId":"page_condition","name":"/casino","description":"/casino","config":{"onPageLaunch":"/casino","onPageNotLaunch":""}},{"conditionId":"1a66cab4-39b1-4092-a5cb-81887c12ee83","conditionTypeId":"page_condition","name":"/sportsbook","description":"/sportsbook","config":{"onPageLaunch":"/sportsbook","onPageNotLaunch":""}},{"conditionId":"f74d4594-d23a-483d-8da4-916549a7fe7f","conditionTypeId":"page_condition","name":"/inloggen","description":"/inloggen","config":{"onPageLaunch":"/inloggen","onPageNotLaunch":""}},{"conditionId":"2069bef2-303b-40f0-82c4-5b0178ce78ea","conditionTypeId":"basic_condition","name":"Before page rendered","description":"Before page rendered","config":{"launch":"beforePageRendered"}},{"conditionId":"d37e588d-0329-4469-8cfa-4159ff363d48","conditionTypeId":"page_condition","name":"Game results","description":"Game results","config":{"onPageLaunch":"/mijnhc/game-resultaten-hidden","onPageNotLaunch":""}},{"conditionId":"07120f96-4ad3-430d-a64c-231bd2dda580","conditionTypeId":"page_condition","name":"/registreren","description":"/registreren","config":{"onPageLaunch":"/registreren","onPageNotLaunch":""}},{"conditionId":"10c6a1bf-bd4b-4c65-9256-45b166858b9d","conditionTypeId":"basic_condition","name":"afterPageRendered","description":"afterPageRendered","config":{"launch":"afterPageRendered"}}]}