{"version":3,"file":"js/homecomponents.js","mappings":"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","sources":["webpack://pcloud-site/webpack/runtime/chunk loaded","webpack://pcloud-site/./src/lib/move.js","webpack://pcloud-site/./src/lib/componentMount.js","webpack://pcloud-site/./src/components/FAQPartial.js","webpack://pcloud-site/./src/lib/utils.js","webpack://pcloud-site/./src/components/PricingPage/views/MoreOptions.js","webpack://pcloud-site/./src/components/HomeEUPage/PartialFAQHome.js","webpack://pcloud-site/./src/exports/homecomponents.js","webpack://pcloud-site/./node_modules/clsx/dist/clsx.m.js","webpack://pcloud-site/./node_modules/shallowequal/index.js","webpack://pcloud-site/external window \"jQuery\"","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/array/from.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/array/is-array.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/object/assign.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/object/define-properties.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/object/define-property.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/object/get-own-property-descriptor.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/object/get-own-property-descriptors.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/object/get-own-property-symbols.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/object/keys.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/parse-float.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/parse-int.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/symbol.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/symbol/iterator.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/symbol/to-primitive.js","webpack://pcloud-site/./node_modules/tslib/tslib.es6.mjs","webpack://pcloud-site/webpack/bootstrap","webpack://pcloud-site/webpack/runtime/amd options","webpack://pcloud-site/webpack/runtime/compat get default export","webpack://pcloud-site/webpack/runtime/define property getters","webpack://pcloud-site/webpack/runtime/global","webpack://pcloud-site/webpack/runtime/hasOwnProperty shorthand","webpack://pcloud-site/webpack/runtime/make namespace object","webpack://pcloud-site/webpack/runtime/jsonp chunk loading","webpack://pcloud-site/webpack/runtime/nonce","webpack://pcloud-site/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","const _move = (obj, _attachList) => {\n for (var n in obj) {\n if (obj.hasOwnProperty(n)) {\n for (var k = 0; k < _attachList.length; ++k) {\n if (_attachList[k].list.indexOf(n) != -1) {\n _attachList[k].attach[n] = obj[n];\n }\n }\n }\n }\n}\n\nexport default _move;","// @flow\n\nimport * as React from \"react\";\nimport { createRoot } from 'react-dom/client';\n\nconst usedReactRoots = {};\n\nconst getExistingOrNewRoot = (element: HTMLElement) => {\n // Existing ID or create new unique ID.\n const reactRootId = element.dataset.reactRootId || Math.random().toString(16).slice(2);\n let root = usedReactRoots[reactRootId] || null;\n\n if (root === null) {\n // Save the generated new ID to the element to be reused if we change the props and call this again.\n element.dataset.reactRootId = reactRootId;\n root = createRoot(element);\n }\n\n // Cache the root.\n usedReactRoots[reactRootId] = root;\n\n return {reactRootId , root};\n}\n\nconst componentMount = (render: (props: {}) => React.Node) => (element: HTMLElement, props: {}) => {\n if (!element) {\n return null;\n }\n\n const {reactRootId, root} = getExistingOrNewRoot(element);\n root.render(render(props));\n\n return () => {\n root.unmount();\n delete usedReactRoots[reactRootId];\n };\n};\n\nexport function componentRender(element: HTMLElement, render: React.Element) {\n const {reactRootId, root} = getExistingOrNewRoot(element);\n root.render(render);\n\n return () => {\n root.unmount();\n delete usedReactRoots[reactRootId];\n };\n}\n\nexport default componentMount;\n","//@ flow\n\nimport React, { useState, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { hiDPI } from \"polished\";\nimport Componentify from \"react-componentify\";\nimport { brTagConverter, linkConverterSelf, listItemConverter, paragraphConverter, boldConverter, headline4Converter, linkConverter} from \"@pcloud/web-utilities/dist/lib/componentifyConverters\";\n\n\ntype QuestionType = {\n id: number,\n question: string,\n answer: string,\n leftsideMark: string\n}\n\ntype FAQPartialProps = {\n questions: Array\n};\n\nconst FAQPartial = ({\n questions,\n leftsideMark = \"Q:\",\n leftSideMarkColor = \"#17bed0\",\n QuestionCollapseIcon,\n CloseAnswerIcon,\n}: FAQPartialProps) => {\n const [activeTab, setActiveTab] = useState(null);\n\n useEffect(() => {\n initTabs();\n window.onresize = initTabs;\n }, []);\n\n const initTabs = () => {\n let paddingValue = 23;\n\n if (window.innerWidth <= 768) {\n paddingValue = 16;\n }\n const tabsElements = document.querySelectorAll('.question-tab');\n for (let index = 0; index < tabsElements.length; index++) {\n const tab = tabsElements[index];\n\n const answerEl = tab.getElementsByClassName(\"answer\")[0];\n\n if (tab.classList.contains(\"active\") && !(window.innerWidth <= 768)) {\n const activeQuestionTabs = document.querySelectorAll('.question-tab.active');\n\n for (let aindex = 0; aindex < activeQuestionTabs.length; aindex++) {\n const activeTab = activeQuestionTabs[aindex];\n activeTab.style.maxHeight = (tab.getElementsByClassName(\"text\")[0].offsetHeight + paddingValue*2) + \"px\";\n activeTab.classList.remove(\"active\");\n }\n\n tab.classList.add(\"active\");\n tab.style.maxHeight = (tab.offsetHeight + answerEl.offsetHeight + paddingValue*2) + \"px\";\n } else {\n tab.style.maxHeight = (tab.getElementsByClassName(\"text\")[0].offsetHeight + paddingValue*2) + \"px\";\n }\n\n if (tab.classList.contains(\"active\") && window.innerWidth <= 768) {\n tab.classList.remove(\"active\");\n }\n }\n }\n\n const onTabClick = (event) => {\n event.stopPropagation();\n\n const element = event.currentTarget;\n const tabEl = element.parentElement;\n const answerEl = element.parentElement.getElementsByClassName(\"answer\")[0];\n\n let paddingValue = 23;\n\n if (window.innerWidth <= 768) {\n paddingValue = 16;\n }\n\n if (tabEl.classList.contains(\"active\")) {\n tabEl.classList.remove(\"active\");\n tabEl.style.maxHeight = (tabEl.getElementsByClassName(\"text\")[0].offsetHeight + paddingValue*2) + \"px\";\n } else {\n tabEl.classList.add(\"active\");\n tabEl.style.maxHeight = (tabEl.offsetHeight + answerEl.offsetHeight + paddingValue*2 ) + \"px\";\n window.scrollTo(tabEl.offsetTop - document.querySelector(\"header\").offsetHeight);\n }\n } \n\n const renderQuestions = () => {\n if (!questions || !Array.isArray(questions)) {\n return null;\n }\n\n return (\n questions.map(({ question, answer, AnswerComponent, answeComponentProps = {}, id }) => {\n return (\n \n \n <Texts className=\"text\">\n {leftsideMark ? <QuestionMark className=\"question-mark\" leftSideMarkColor={leftSideMarkColor}>Q:</QuestionMark> : null}\n <span>{question}</span>\n </Texts>\n { CloseAnswerIcon ? <CustomIconWrapper className=\"hide-icon\"><CloseAnswerIcon/></CustomIconWrapper> : <HideIcon className=\"hide-icon\"/> }\n { QuestionCollapseIcon ? <QuestionCollapseIcon className=\"show-icon\"/> : <ShowIcon className=\"show-icon\"/> }\n \n \n { AnswerComponent ? : }\n \n \n )\n })\n )\n }\n\n return (\n \n { renderQuestions() }\n \n )\n}\n\nexport default FAQPartial;\n\nconst Wrapper = styled.div`\n\n`;\n\nconst Tab = styled.div`\n max-height: 64px;\n overflow: hidden;\n transition: all .4s ease;\n border-radius: 0px;\n background-color: inherit;\n margin: 2px auto;\n box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.02);\n\n svg {\n flex-grow: 0;\n flex-shrink: 0;\n }\n\n &:first-of-type {\n border-top-left-radius: 18px;\n border-top-right-radius: 18px;\n margin-top: 0px;\n }\n\n &:last-of-type {\n border-bottom-left-radius: 18px;\n border-bottom-right-radius: 18px;\n margin-bottom: 0px;\n }\n\n &.active {\n background-color: inherit;\n \n .show-icon {\n display: none;\n }\n\n .hide-icon {\n display: inline-block;\n }\n\n .answer {\n overflow-y: auto;\n opacity: 1;\n /* padding-top: 6px; */\n }\n\n .question-mark {\n color: #000000;\n }\n\n .title {\n /* padding-bottom: 0px; */\n }\n }\n`;\n\nconst Title = styled.div`\n display: flex;\n cursor: pointer !important;\n font-size: 18px;\n font-weight: 500;\n color: #000000;\n padding: 23px 20px;\n justify-content: space-between;\n align-items: center;\n transition: all .4s ease;\n\n @media (max-width: 768px) {\n padding: 17px 20px;\n }\n`\n\nconst Texts = styled.div`\n flex-shrink: 1;\n flex-grow: 0;\n display: flex;\n align-items: center;\n flex-direction: row;\n`;\n\nconst QuestionMark = styled.span`\n margin-right: 6px;\n color: ${({ leftSideMarkColor }) => leftSideMarkColor};\n transition: all .4s ease;\n`;\n\nconst showFaqImg = (typeof cdnPath !== 'undefined' ? cdnPath : '/') + (window.devicePixelRatio > 1.5 ? 'images/backup/show-faq@2x.png' : 'images/backup/show-faq.png');\nconst ShowIcon = styled.div`\n flex-shrink: 0;\n display: inline-block;\n width: 12px;\n height: 12px;\n background-size: 12px 12px;\n background-repeat: no-repeat;\n background-position: 0 0;\n background-color: transparent;\n background-image: url(${showFaqImg});\n`;\n\nconst hideFaqImg = (typeof cdnPath !== 'undefined' ? cdnPath : '/') + (window.devicePixelRatio > 1.5 ? 'images/backup/hide-faq@2x.png' : 'images/backup/hide-faq.png');\nconst HideIcon = styled.div`\n flex-shrink: 0;\n display: none;\n width: 12px;\n height: 2px;\n background-size: 12px 2px;\n background-repeat: no-repeat;\n background-position: 0 0;\n background-color: transparent;\n \n background-image: url(${hideFaqImg});\n`;\n\nconst Answer = styled.div`\n font-size: 15px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: normal;\n text-align: left;\n color: #757575;\n padding: 0px 47px;\n box-sizing: border-box;\n opacity: 0.5;\n padding-bottom: 17px;\n transition: all .4s ease;\n\n @media (max-width: 768px) {\n padding: 0px 20px 20px 20px;\n }\n`;\n\nconst CustomIconWrapper = styled.div`\n display: none;\n\n svg {\n vertical-align: middle;\n }\n`;\n","//@flow\n\nimport {\n DiscountType,\n Userinfo,\n PlanIDType,\n Subscription\n} from \"../lib/types/dataTypes.components\";\n\n// import {\n// ADD_STORAGE_1COUNT_PLAN_ID, \n// ADD_STORAGE_4COUNT_PLAN_ID,\n// MB_PER_STORAGE_COUNT\n// } from \"./plansInfo\";\n\nimport {\n rcookie,\n setcookie,\n hrefSearch\n} from \"@pcloud/web-utilities/dist/lib/utils\";\nimport { __ } from \"@pcloud/web-utilities/dist/lib/langManager\";\nimport { renderQuota } from \"@pcloud/web-utilities/dist/plans/utils.plans\";\n\nimport {\n PREMIUM_PLAN_ID,\n PREMIUM_PLUS_PLAN_ID,\n CUSTOM4TB_PLAN_ID,\n FAMILY2TB_PLAN_ID,\n FAMILY_CUSTOM_PLAN_ID,\n FAMILY_CUSTOM_2COUNT_PLAN_ID,\n FAMILY_CUSTOM_5COUNT_PLAN_ID,\n FAMILY_ADD_1COUNT_PLAN_ID,\n FAMILY_ADD_2COUNT_PLAN_ID,\n FAMILY_ADD_5COUNT_PLAN_ID,\n CUSTOM_PLAN_ID,\n ADD_STORAGE_1COUNT_PLAN_ID,\n ADD_STORAGE_4COUNT_PLAN_ID,\n ADD_STORAGE_8COUNT_PLAN_ID,\n ADD_STORAGE_12COUNT_PLAN_ID,\n ADD_STORAGE_20COUNT_PLAN_ID,\n CUSTOM_20COUNT_PLAN_ID,\n CRYPTO_PLAN_ID,\n EFH_PLAN_ID,\n ADDITIONAL_TRAFFIC_ID,\n MAX_CUSTOM_STORAGE_COUNT,\n MAX_FAMILY_STORAGE_COUNT,\n PASS_PREMIUM_PLAN_ID,\n PASS_FAMILY_PLAN_ID,\n} from \"@pcloud/web-utilities/dist/plans/constants.plans\";\n\nexport {\n rcookie,\n setcookie,\n hrefSearch,\n __,\n renderQuota\n};\n\nexport const removeHrefSearch = (params: Array, forceRefresh?: boolean) => {\n if (params && typeof params == 'string') {\n params = [params];\n }\n\n if (params && params.length && location.search.length) {\n var currentQueriesArr = location.search.substring(1).split('&');\n var currentQueriesMap = {};\n var finalQueriesArr = [];\n var finalURL;\n\n // Create object map with all current search queries\n for (var i in currentQueriesArr) {\n currentQueriesMap[currentQueriesArr[i].split('=').shift()] = currentQueriesArr[i].split('=').pop();\n }\n\n // Delete requested queries\n for (var i in params) {\n if (params[i].split('=').shift() in currentQueriesMap) {\n delete currentQueriesMap[params[i].split('=').shift()];\n }\n }\n\n if (Object.keys(currentQueriesMap).length) {\n for (var i in currentQueriesMap) {\n finalQueriesArr.push(i + '=' + currentQueriesMap[i]);\n }\n\n finalURL = location.origin + location.pathname + '?' + finalQueriesArr.join('&');\n } else {\n finalURL = location.origin + location.pathname;\n }\n\n if (forceRefresh) {\n location = finalURL;\n } else {\n window.history.pushState({}, null, finalURL);\n }\n }\n};\n\nexport const addHrefSearch = (params: Array | string, forceRefresh: boolean, newLocationUrl?: string) => {\n if (!params) {\n return;\n }\n\n let finalURL;\n\n if (typeof params == 'string') {\n params = [params];\n }\n\n if (location.search.length) {\n let oldQueriesArr = location.search.substring(1).split('&');\n let oldQueriesMap = {};\n let givenQueriesMap = {};\n let finalQueriesMap = {};\n let finalQueriesArr = [];\n\n // Create object map with all current search queries\n for (let i in oldQueriesArr) {\n oldQueriesMap[oldQueriesArr[i].split('=').shift()] = oldQueriesArr[i].split('=').pop();\n }\n\n for (let i in params) {\n givenQueriesMap[params[i].split('=').shift()] = params[i].split('=').pop();\n\n // Delete queries which will be duplicated in the end and remove them\n if (params[i].split('=').shift() in oldQueriesMap) {\n delete oldQueriesMap[params[i].split('=').shift()];\n }\n }\n\n finalQueriesMap = Object.assign(oldQueriesMap, givenQueriesMap);\n\n for (let i in finalQueriesMap) {\n finalQueriesArr.push(i + '=' + finalQueriesMap[i]);\n }\n\n finalURL = (newLocationUrl ? newLocationUrl : (location.origin + location.pathname)) + '?' + finalQueriesArr.join('&');\n\n } else {\n // Directly append newly provided params\n finalURL = (newLocationUrl ? newLocationUrl : location.href) + '?' + params.join('&');\n }\n\n if (forceRefresh) {\n location = finalURL;\n } else {\n if (!window.history.state || window.history.state.page != finalURL) {\n window.history.pushState({ \"page\": finalURL }, null, finalURL);\n }\n }\n};\n\nexport const saveToSessionstorage = (label: string, value: any) => {\n if (\n typeof Storage === \"undefined\" ||\n typeof sessionStorage === \"undefined\" ||\n sessionStorage === null\n ) {\n setcookie(label, value, 0);\n } else {\n sessionStorage.setItem(label, value);\n }\n};\n\nexport const signToCurrency = {\n \"$\": \"USD\",\n \"€\": \"EUR\",\n \"₤\": \"GBP\",\n \"BGN\": \"BGN\"\n};\n\nexport const currencyMap = {\n 'USD': '$',\n 'EUR': '€',\n 'GBP': '₤',\n // Used for Vivacom plans only\n 'BGN': 'BGN'\n};\n\nconst _repl = (str: string, repl: {} = {}) => {\n str = _properSpaces(str);\n\n if (!obLength(repl)) {\n return str;\n }\n\n for (var n in repl) {\n str = str.replace(new RegExp(\"%\" + n + \"%\", \"g\"), repl[n]);\n }\n\n return str;\n};\n\nconst _properSpaces = str => {\n return str.split(String.fromCharCode(160)).join(\" \");\n};\n\nexport const obLength = (obj: {}) => {\n var size = 0,\n key;\n for (key in obj) {\n if (obj.hasOwnProperty(key)) {\n size++;\n }\n }\n return size;\n};\n\ntype getDisabledPlanReasonParams = {\n user: Userinfo,\n forPlan: PlanIDType,\n forPeriod: \"trial\" | \"month\" | \"year\" | \"lifetime\",\n downgradeAllowed?: boolean,\n add500GBAllowed?: boolean,\n trafficCount?: number,\n maxCustomStorageCount?: number\n};\n\nexport const getDisabledPlanReason = ({\n user = {},\n forPlan,\n forPeriod,\n downgradeAllowed,\n add500GBAllowed,\n trafficCount,\n canAddStorage,\n maxCustomStorageCount = MAX_CUSTOM_STORAGE_COUNT,\n maxFamilyStorageCount = MAX_FAMILY_STORAGE_COUNT\n}: getDisabledPlanReasonParams) => {\n if (!user || !forPlan || !forPeriod) {\n return \"\";\n }\n\n const {\n business,\n lastsubscription,\n cryptolifetime,\n plan,\n premium,\n premiumlifetime,\n premiumexpires,\n cryptosubscription,\n efh,\n planparams,\n additionaltraffic,\n additionaltrafficlifetime,\n family,\n passmanagerdata,\n usepassmanagertrial: isfreetrialused\n } = user;\n\n const hasUserInfo = Object.keys(user).length > 0\n let islifetime;\n let isfreetrialactive;\n let passplan;\n let passpremiumexpire;\n let passFamily;\n\n if (passmanagerdata) {\n islifetime = passmanagerdata.islifetime\n isfreetrialactive = passmanagerdata.isfreetrialactive;\n passplan = passmanagerdata.plan;\n passpremiumexpire = passmanagerdata.premiumexpires;\n passFamily = passmanagerdata.family;\n }\n\n if (hasUserInfo) {\n // const {\n // islifetime,\n // istrial: isfreetrialactive,\n // plan: passplan,\n // planexpires: passpremiumexpire\n // } = passmanagerdata\n\n if (business) {\n return (\"business\");\n } else {\n let hasStorageSubscription = premium && !premiumlifetime;\n let hasCryptoSubscription = cryptosubscription;\n let hasSubscriptionPeriod = false;\n let isCanceled = lastsubscription && lastsubscription.status === \"canceled\";\n let incStorage = 0;\n if (!isCanceled && lastsubscription) {\n hasSubscriptionPeriod = lastsubscription.period;\n }\n\n const isCustomPlanId = forPlan === ADD_STORAGE_1COUNT_PLAN_ID || forPlan === ADD_STORAGE_4COUNT_PLAN_ID || forPlan === ADD_STORAGE_8COUNT_PLAN_ID || forPlan === ADD_STORAGE_12COUNT_PLAN_ID || forPlan === ADD_STORAGE_20COUNT_PLAN_ID || forPlan === CUSTOM_20COUNT_PLAN_ID;\n const isFamilyPlanId = forPlan === FAMILY_ADD_1COUNT_PLAN_ID || forPlan === FAMILY_ADD_2COUNT_PLAN_ID || forPlan === FAMILY_ADD_5COUNT_PLAN_ID || forPlan === FAMILY_CUSTOM_2COUNT_PLAN_ID || forPlan === FAMILY_CUSTOM_5COUNT_PLAN_ID;\n\n if (isCustomPlanId || isFamilyPlanId) {\n const parts = forPlan.split(\"_\");\n incStorage = Number(parts[1]);\n forPlan = Number(parts[0]);\n }\n\n if ((!lastsubscription || (hasSubscriptionPeriod && lastsubscription.products.indexOf(forPlan) === -1) && !downgradeAllowed) && forPeriod != \"lifetime\") {\n if (hasStorageSubscription && plan) {\n if (plan == forPlan && hasStorageSubscription == forPeriod) {\n return (\"current_plan\");\n } else if (plan > forPlan) {\n return (\"lower_plan\");\n }\n } else if (efh && forPlan === EFH_PLAN_ID) {\n return (\"current_plan\");\n } else if (additionaltraffic && forPlan == ADDITIONAL_TRAFFIC_ID) {\n if (!additionaltrafficlifetime && planparams.additionaltraffic == trafficCount) {\n return (\"current_plan\");\n } else if (planparams.additionaltraffic > trafficCount) {\n return (\"traffic_downgrade_restriction\");\n }\n }\n } else if (!lastsubscription && forPeriod === \"lifetime\" && hasStorageSubscription && plan && plan > forPlan) {\n return (\"lower_plan\");\n } else if (plan && hasStorageSubscription && hasSubscriptionPeriod && lastsubscription.products.indexOf(plan) === -1 && forPeriod != \"lifetime\" && !downgradeAllowed) {\n if (forPlan == plan) {\n return (\"current_plan\");\n } else if (plan > forPlan) {\n return (\"lower_plan\");\n }\n }\n\n // Buying Crypto\n if (forPlan == CRYPTO_PLAN_ID) {\n if (cryptolifetime) {\n return (\"crypto_lifetime\");\n } else if (hasSubscriptionPeriod && !hasCryptoSubscription) {\n if (hasCryptoSubscription == \"month\" && forPeriod == \"month\") {\n return (\"current_plan\");\n } else if (hasSubscriptionPeriod == \"year\" && forPeriod == \"month\") {\n return (\"lower_period\");\n }\n } else if (\n hasCryptoSubscription &&\n hasSubscriptionPeriod &&\n isCanceled == false\n ) {\n if (hasSubscriptionPeriod == \"month\" && forPeriod == \"month\") {\n return (\"current_plan\");\n } else if (hasSubscriptionPeriod == \"year\") {\n if (forPeriod == \"month\") {\n return (\"lower_period\");\n } else if (forPeriod == \"year\") {\n return (\"current_plan\");\n }\n }\n }\n } else if (forPlan == EFH_PLAN_ID) {\n if (efh) {\n if (hasSubscriptionPeriod == forPeriod) {\n return (\"current_plan\");\n } else if (hasSubscriptionPeriod == \"year\") {\n if (forPeriod == \"month\") {\n return (\"lower_period\");\n }\n }\n }\n // Buying Traffic\n } else if (forPlan == ADDITIONAL_TRAFFIC_ID) {\n if (plan === CUSTOM4TB_PLAN_ID) {\n return (\"custom_subscription\");\n } else if (forPeriod === \"lifetime\" && !premiumlifetime) {\n return \"traffic_lifetime_restriction\";\n } else if (plan == FAMILY2TB_PLAN_ID || plan == FAMILY_CUSTOM_PLAN_ID) {\n return \"custom_subscription\";\n } else if (forPeriod !== \"lifetime\" && additionaltrafficlifetime) {\n return \"traffic_lifetime_restriction_subs\";\n } else if (forPeriod === \"month\" && hasSubscriptionPeriod == \"year\" && (!downgradeAllowed || lastsubscription.billingprovider === 11)) {\n return (\"traffic_downgrade_restriction\");\n } else if (additionaltraffic && !additionaltrafficlifetime && (forPeriod === \"month\" || forPeriod === \"year\") && planparams.additionaltraffic == trafficCount && forPeriod === hasSubscriptionPeriod) {\n return (\"current_plan\");\n } else if (additionaltrafficlifetime && forPeriod === \"lifetime\" && planparams.additionaltraffic == trafficCount) {\n return (\"current_plan\");\n } else if (additionaltraffic && planparams.additionaltraffic > trafficCount && ((forPeriod === hasSubscriptionPeriod && !downgradeAllowed) || (forPeriod === \"lifetime\" && additionaltrafficlifetime))) {\n return (\"traffic_lifetime_restriction_subs\");\n }\n // Buying Pass\n } else if (forPlan == PASS_PREMIUM_PLAN_ID) {\n if ((isfreetrialactive && forPeriod === \"trial\") || (islifetime && forPeriod === \"lifetime\" && passplan === 1)) {\n return (\"current_plan\");\n } else if (passmanagerdata && forPeriod === \"free\") {\n return (\"current_active_plan\");\n } else if (isfreetrialused && forPeriod === 'trial') {\n return \"plan_upgrade_restrictions\";\n } else if ((islifetime && forPeriod != \"lifetime\") || passplan === 2) {\n return (\"custom_subscription\");\n // } else if (!emailverified) {\n // return (\"verify_email\")\n } else if (lastsubscription && !isCanceled) {\n if (lastsubscription.planid) {\n let activePlanId = lastsubscription.planid;\n let activePlanPeriod = lastsubscription.period;\n if (activePlanId === forPlan) {\n if (activePlanPeriod === forPeriod) {\n return \"current_plan\";\n } else if (activePlanPeriod === 'month' && (forPeriod === 'trial' || forPeriod === 'free')) {\n return \"plan_upgrade_restrictions\";\n } else if (activePlanPeriod === 'year' && (forPeriod === 'trial' || forPeriod === 'free' || forPeriod === 'month')) {\n return \"plan_upgrade_restrictions\";\n }\n }\n\n } else if (lastsubscription.products) {\n let products = lastsubscription.products;\n let activePlanPeriod = lastsubscription.period;\n if (products.indexOf(PASS_PREMIUM_PLAN_ID) !== -1) {\n if (activePlanPeriod === forPeriod) {\n return \"current_plan\";\n } else if (activePlanPeriod === 'month' && (forPeriod === 'trial' || forPeriod === 'free')) {\n return \"plan_upgrade_restrictions\";\n } else if (activePlanPeriod === 'year' && (forPeriod === 'trial' || forPeriod === 'free' || forPeriod === 'month')) {\n return \"plan_upgrade_restrictions\";\n }\n }\n }\n } else if ((!lastsubscription || (lastsubscription && isCanceled)) && passplan == 1 && !isfreetrialactive) {\n if (islifetime || (!islifetime && forPeriod != \"lifetime\")) {\n return \"plan_upgrade_restrictions\";\n }\n }\n\n // Active Pass Lifetime plan = disable any other Pass Plans.\n if (!isfreetrialactive && (passplan === 1 || passplan === 2) && islifetime) {\n return \"plan_upgrade_restrictions\";\n }\n } else if (forPlan == PASS_FAMILY_PLAN_ID) {\n if (passplan === 2 && passFamily && !passFamily.owner) {\n return \"custom_subscription\";\n };\n\n if ((isfreetrialactive && forPeriod === \"trial\") || (islifetime && forPeriod === \"lifetime\" && passplan === 2)) {\n return \"current_plan\";\n }\n\n if (lastsubscription && !isCanceled) {\n let activePlanPeriod = lastsubscription.period;\n\n if (activePlanPeriod === 'year' && forPeriod === 'month') {\n return \"plan_upgrade_restrictions\";\n }\n\n if (lastsubscription.planid) {\n let activePlanId = lastsubscription.planid;\n\n if (activePlanId === forPlan && activePlanPeriod === forPeriod) {\n return \"current_plan\";\n }\n } else if (lastsubscription.products) {\n let products = lastsubscription.products;\n\n if (products.indexOf(forPlan) !== -1 && activePlanPeriod === forPeriod) {\n return \"current_plan\";\n }\n }\n }\n\n // Active Pass Lifetime plan = disable any other Pass Plans.\n if (!isfreetrialactive && (passplan === 1 || passplan === 2) && islifetime) {\n return \"plan_upgrade_restrictions\";\n }\n\n // Buying Storage\n } else {\n if (plan == PREMIUM_PLAN_ID || plan == PREMIUM_PLUS_PLAN_ID || plan == CUSTOM4TB_PLAN_ID) {\n if (premiumlifetime) {\n if (plan == CUSTOM4TB_PLAN_ID && typeof planparams != 'undefined' && planparams.storage > 1 && canAddStorage) {\n return (\"custom_plan_upgrade_exceeded\");\n } else if (forPlan == CUSTOM_PLAN_ID && canAddStorage) {\n if ((incStorage == maxCustomStorageCount && (plan == PREMIUM_PLAN_ID || plan == CUSTOM4TB_PLAN_ID)) || (incStorage > maxCustomStorageCount && plan == PREMIUM_PLAN_ID)) {\n return (\"plan_upgrade_restrictions\");\n } else if (incStorage == 1 && !add500GBAllowed) {\n return ((plan == PREMIUM_PLUS_PLAN_ID || plan == CUSTOM4TB_PLAN_ID) ? \"plan_upgrade_restrictions\" : \"custom_plan_upgrade_restrictions\");\n }\n } else if (forPlan <= plan || forPlan == FAMILY2TB_PLAN_ID || forPlan == FAMILY_CUSTOM_PLAN_ID || (forPlan == CUSTOM_PLAN_ID && !canAddStorage)) {\n return (\"storage_lifetime\");\n }\n } else if (hasSubscriptionPeriod && isCanceled == false) {\n if (forPeriod == \"lifetime\") {\n if (forPlan < plan) {\n return (\"lower_plan\");\n }\n } else if (hasSubscriptionPeriod == \"month\") {\n if (forPeriod == \"month\") {\n if (forPlan < plan && !downgradeAllowed) {\n return (\"lower_plan\");\n } else if (forPlan == plan) {\n return (\"current_plan\");\n }\n } else if (\n (forPeriod == \"year\" && forPlan < plan) ||\n (forPlan < plan && premiumexpires)\n ) {\n return (\"lower_plan\");\n }\n } else if (hasSubscriptionPeriod == \"year\") {\n if (forPeriod == \"month\" && !downgradeAllowed) {\n return (\"lower_period\");\n } else {\n if (forPlan < plan && !downgradeAllowed) {\n return (\"lower_plan\");\n } else if (forPlan == plan) {\n if (!downgradeAllowed || hasSubscriptionPeriod == forPeriod) {\n return (\"current_plan\");\n }\n }\n }\n }\n } else if (isCanceled == false) {\n if (forPlan < plan) {\n return (\"lower_plan\");\n } else if (forPlan <= plan && premiumexpires) {\n let now = new Date();\n let expires = new Date(premiumexpires);\n //Get 1 day in milliseconds\n let oneDay = 1000 * 60 * 60 * 24;\n let daysLeft = Number(expires) - Number(now) / oneDay;\n\n let monthlyTabisActive = forPeriod === \"month\";\n let annualTabisActive = forPeriod === \"year\";\n\n if (daysLeft > 10 && (annualTabisActive || monthlyTabisActive)) {\n return (\"lower_period\");\n }\n }\n }\n } else if (plan == CUSTOM_PLAN_ID) {\n if (typeof planparams != 'undefined' && planparams.storage >= maxCustomStorageCount && forPlan == CUSTOM_PLAN_ID && canAddStorage) {\n return (\"custom_plan_upgrade_exceeded\");\n } else if (typeof planparams != 'undefined' && ((planparams.storage + incStorage) > maxCustomStorageCount) && forPlan == CUSTOM_PLAN_ID && canAddStorage) {\n return (\"plan_upgrade_restrictions\");\n } else if (forPlan == CUSTOM_PLAN_ID && incStorage == 1 && !add500GBAllowed) {\n if (typeof planparams != 'undefined' && planparams.storage <= 3) {\n return (\"custom_plan_upgrade_restrictions\");\n } else {\n return (\"plan_upgrade_restrictions\");\n }\n } else if (forPlan < plan || (!canAddStorage && forPlan == CUSTOM_PLAN_ID)) {\n return (\"storage_lifetime\");\n } else if (forPeriod === \"year\" || forPeriod === \"month\") {\n return (\"storage_lifetime\");\n }\n } else if ((plan == FAMILY2TB_PLAN_ID || plan == FAMILY_CUSTOM_PLAN_ID) && forPlan !== FAMILY_CUSTOM_PLAN_ID) {\n return (\"family\");\n } else if (forPlan == FAMILY_CUSTOM_PLAN_ID || forPlan == FAMILY2TB_PLAN_ID) {\n if ((plan == FAMILY_CUSTOM_PLAN_ID || plan == FAMILY2TB_PLAN_ID) && family && !family.owner) {\n return \"family\";\n } else if (plan == FAMILY_CUSTOM_PLAN_ID && typeof planparams != 'undefined') {\n if (planparams.storage >= maxFamilyStorageCount && canAddStorage) {\n return (\"custom_plan_upgrade_exceeded\");\n } else if (((planparams.storage + incStorage) > maxFamilyStorageCount) && canAddStorage) {\n return (\"plan_upgrade_restrictions\");\n }\n }\n } else {\n if (forPlan == CUSTOM_PLAN_ID && incStorage > maxCustomStorageCount) {\n return (\"plan_upgrade_restrictions\");\n }\n }\n }\n }\n }\n};\n\nexport const preventEnteringNumbers = (event) => {\n const key = event.which || event.keyCode || event.charCode;\n const pressedCharacter = String.fromCharCode(key);\n\n if (!(/[a-zA-Z '-]/).test(pressedCharacter)) {\n event.preventDefault();\n }\n}\n\ntype creditCardValidation = {\n name: string,\n range: string,\n valid_length: Array\n}\n\nexport const findCardType = (cardNumber: string): creditCardValidation => {\n const creditCardValidations = [\n {\n name: \"amex\",\n range: \"34, 37\",\n valid_length: [\"15\"]\n },\n {\n name: \"diners\",\n range: \"301, 302, 303, 304, 305, 36\",\n valid_length: [\"16\"]\n },\n {\n name: \"jcb\",\n range: \"352, 353, 354, 355, 356, 357, 358\",\n valid_length: [\"16\"]\n },\n {\n name: \"visa\",\n range: \"4\",\n valid_length: [\"19\", \"18\", \"17\", \"16\", \"15\", \"14\", \"13\"]\n },\n {\n name: \"mastercard\",\n range: \"50, 51, 52, 53, 54, 55, 222\",\n valid_length: [\"16\"]\n },\n {\n name: \"discover\",\n range: \"6011, 622, 644, 645, 646, 647, 648, 649\",\n valid_length: [\"16\"]\n }\n ];\n\n return creditCardValidations.find((cardTemplate: creditCardValidation): (creditCardValidation | false) => {\n let isThereAMatch = cardTemplate.range.split(\", \").some((range: string) => {\n const rangeLength = range.length;\n return range === cardNumber.slice(0, rangeLength);\n });\n return isThereAMatch;\n });\n}\n\nexport const getExpiryDatePeriod = (expiryDate: string, period: string): string => {\n const periods = {\n month: Number(expiryDate.split(\"/\")[0]),\n year: Number(expiryDate.split(\"/\")[1])\n }\n\n if (periods.year > 2000 && periods.year < 2100) {\n periods.year -= 2000;\n }\n\n return periods[period];\n}\n\nexport const validateExpiryDate = (expiryDate: string): boolean => {\n const month = getExpiryDatePeriod(expiryDate, \"month\");\n const year = getExpiryDatePeriod(expiryDate, \"year\");\n const currentYear = new Date().getFullYear() - 2000;\n const currentMonth = new Date().getMonth() + 1;\n\n const validateExpression =\n month <= 12 &&\n ((month > 0 && year > currentYear) || (month >= currentMonth && year == currentYear)) &&\n year <= 40;\n\n return validateExpression;\n};\n\n\nexport const getDeviceID = () => {\n if (!window.localStorage.getItem(\"deviceid\") && !rcookie(\"deviceid\")) {\n return rcookie(\"deviceid\");\n } else if (rcookie(\"deviceid\")) {\n if (window.localStorage.getItem(\"deviceid\")) {\n window.localStorage.removeItem(\"deviceid\");\n }\n return rcookie(\"deviceid\");\n } else if (window.localStorage.getItem(\"deviceid\")) {\n setcookie(\"deviceid\", window.localStorage.getItem(\"deviceid\"), 365);\n window.localStorage.removeItem(\"deviceid\");\n return rcookie(\"deviceid\");\n }\n};\n\nexport const getCurrency = ({ auth, callback = () => { } }: { auth: string, callback: () => void }) => {\n const params = {};\n let getCurrencyTries = 0;\n\n if (getCurrencyTries >= 5) {\n onSuccess(\"$\");\n return;\n }\n\n if (auth) {\n params[\"auth\"] = $.cookie(\"pcauth\");\n }\n\n if (rcookie(\"forcecurrency\")) {\n params[\"currency\"] = $.cookie(\"forcecurrency\");\n }\n\n if (rcookie(\"forcecountry\")) {\n params[\"country\"] = $.cookie(\"forcecountry\");\n }\n\n const onSuccess = (currency) => {\n if (typeof Storage !== \"undefined\" && currencyMap[currency]) {\n sessionStorage.setItem(\"pclCurrency\", currencyMap[currency]);\n }\n\n callback(currency);\n };\n\n const getCurrencyApiCall = () => {\n getCurrencyTries++;\n const onError = () => {\n setTimeout(() => {\n getCurrencyApiCall();\n }, 300);\n };\n\n pCloudGlobals.apiMethod && pCloudGlobals.apiMethod(\n \"getcurrency\",\n params,\n (data) => {\n if (data.currency) {\n onSuccess(data.currency);\n } else {\n onError();\n }\n },\n {\n errorCallback: onError\n }\n );\n };\n\n getCurrencyApiCall();\n};\n\nexport const areArraysEqual = (array1: Array, array2: Array): boolean => {\n if (!array1 || !array2) {\n return false;\n }\n\n if (array1.length !== array2.length) {\n return false;\n }\n\n for (let index1 = 0; index1 < array1.length; index1++) {\n const e1 = array1[index1];\n const e2 = array2[index1];\n\n if (Array.isArray(e1) && Array.isArray(e2)) {\n compareArrays(e1, e2);\n } else if (e1 !== e2) {\n return false;\n }\n }\n\n return true;\n}\n\nexport const formatMS = (milliseconds: number, type: \"day\" | \"hour\" | \"minute\" | \"second\"): number => {\n const typeMap = {\n \"day\": { \"divider\": 86400000, \"modulo\": milliseconds + 1 },\n \"hour\": { \"divider\": 3600000, \"modulo\": 24 },\n \"minute\": { \"divider\": 60000, \"modulo\": 60 },\n \"second\": { \"divider\": 1000, \"modulo\": 60 }\n };\n\n if (!(type in typeMap)) {\n console.error(\"Invalid duration type: \" + type);\n\n return 0;\n }\n\n return parseInt((milliseconds / typeMap[type].divider) % typeMap[type].modulo);\n};\n\nexport const msToTime = (duration: number, showHours = true): string => {\n let seconds = parseInt((duration / 1000) % 60);\n let minutes = parseInt((duration / 60000) % 60);\n let hours = parseInt((duration / 3600000) % 24);\n\n hours = hours < 10 ? '0' + hours : hours;\n minutes = minutes < 10 ? '0' + minutes : minutes;\n seconds = seconds < 10 ? '0' + seconds : seconds;\n\n return (showHours ? hours + ':' : '') + minutes + ':' + seconds;\n};\n\nexport const cleanFloat = (number: number): number => {\n let value = Number(number);\n let decimal = value % 1 == 0 ? 0 : 2;\n let result = Number(value.toFixed(decimal));\n\n if (result % 1 == 0) {\n decimal = 0;\n }\n\n return Number(value.toFixed(decimal));\n};\n\nexport const browserVersion = (userAgent, regex) => {\n return userAgent.match(regex) ? userAgent.match(regex)[2] : null;\n}\n\nexport const detectBrowser = (version) => {\n const userAgent = navigator.userAgent;\n let browser = \"unkown\";\n // Detect browser name\n browser = (/ucbrowser/i).test(userAgent) ? 'UCBrowser' : browser;\n browser = (/edg/i).test(userAgent) ? 'Edge' : browser;\n browser = (/googlebot/i).test(userAgent) ? 'GoogleBot' : browser;\n browser = (/chromium/i).test(userAgent) ? 'Chromium' : browser;\n browser = (/firefox|fxios/i).test(userAgent) && !(/seamonkey/i).test(userAgent) ? 'Firefox' : browser;\n browser = (/; msie|trident/i).test(userAgent) && !(/ucbrowser/i).test(userAgent) ? 'IE' : browser;\n browser = (/chrome|crios/i).test(userAgent) && !(/opr|opera|chromium|edg|ucbrowser|googlebot/i).test(userAgent) ? 'Chrome' : browser;;\n browser = (/safari/i).test(userAgent) && !(/chromium|edg|ucbrowser|chrome|crios|opr|opera|fxios|firefox/i).test(userAgent) ? 'Safari' : browser;\n browser = (/opr|opera/i).test(userAgent) ? 'Opera' : browser;\n browser = navigator.brave ? \"Brave\" : browser;\n\n if (version) {\n switch (browser) {\n case 'UCBrowser': return `${browser}/${browserVersion(userAgent, /(ucbrowser)\\/([\\d\\.]+)/i)}`;\n case 'Edge': return `${browser}/${browserVersion(userAgent, /(edge|edga|edgios|edg)\\/([\\d\\.]+)/i)}`;\n case 'GoogleBot': return `${browser}/${browserVersion(userAgent, /(googlebot)\\/([\\d\\.]+)/i)}`;\n case 'Chromium': return `${browser}/${browserVersion(userAgent, /(chromium)\\/([\\d\\.]+)/i)}`;\n case 'Firefox': return `${browser}/${browserVersion(userAgent, /(firefox|fxios)\\/([\\d\\.]+)/i)}`;\n case 'Chrome': return `${browser}/${browserVersion(userAgent, /(chrome|crios)\\/([\\d\\.]+)/i)}`;\n case 'Safari': return `${browser}/${browserVersion(userAgent, /(safari)\\/([\\d\\.]+)/i)}`;\n case 'Opera': return `${browser}/${browserVersion(userAgent, /(opera|opr)\\/([\\d\\.]+)/i)}`;\n case 'IE': const version = browserVersion(userAgent, /(trident)\\/([\\d\\.]+)/i);\n // IE version is mapped using trident version \n // IE/8.0 = Trident/4.0, IE/9.0 = Trident/5.0\n return version ? `${browser}/${parseFloat(version) + 4.0}` : `${browser}/7.0`;\n default: return `unknown/0.0.0.0`;\n }\n }\n\n return browser;\n}\n\nexport const isValidEmailAddress = (email: string): boolean => {\n const pattern = new RegExp(/^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\t\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/);\n return pattern.test(email);\n};\n\nexport const apiCall = (method, params, onSuccess, onError, opts) => {\n const dfd = jQuery.Deferred();\n opts = {\n errorCallback: (data) => {\n dfd.reject(data);\n if (typeof onError === 'function') {\n onError(data);\n }\n },\n ...opts\n }\n\n pCloudGlobals.apiMethod(\n method,\n params,\n (data) => {\n if (typeof onSuccess === 'function') {\n onSuccess(data);\n }\n dfd.resolve(data);\n },\n opts\n );\n\n return dfd.promise();\n};\n\nexport const apiCallPost = (method, params, onSuccess, onError, opts) => {\n const dfd = jQuery.Deferred();\n opts = {\n type: \"POST\",\n errorCallback: (data) => {\n dfd.reject(data);\n if (typeof onError === 'function') {\n onError(data);\n }\n },\n ...opts\n }\n\n pCloudGlobals.apiMethod(\n method,\n params,\n (data) => {\n dfd.resolve(data);\n if (typeof onSuccess === 'function') {\n onSuccess(data);\n }\n },\n opts\n );\n\n return dfd.promise();\n};\n\nexport const detectIsMobile = () => {\n return /Mobile|mini|Fennec|Android|iP(od|hone)/.test(navigator.appVersion);\n};\n\nexport const onMouseOut = (event, callback) => {\n const e = event ? event : window.event;\n // If this is an autocomplete element.\n if (e.target && e.target.tagName && e.target.tagName.toLowerCase() == \"input\") {\n return;\n }\n\n // Get the current viewport width.\n const vpWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n\n // If the current mouse X position is within 50px of the right edge of the viewport, return.\n if (e.clientX >= (vpWidth - 50)) {\n return;\n }\n\n // If the current mouse Y position is not within 50px of the top edge of the viewport, return.\n if (e.clientY >= 50) {\n return;\n }\n\n // Fixes mozila problem where event is getting triggered on rigth click. -83 seems to be a constant value for clientY in that case.\n if (e.clientY === -83) {\n return;\n }\n\n // Reliable, works on mouse exiting window and user switching active program\n const from = e.relatedTarget || e.toElement;\n\n // User is exiting window\n if (!from && callback) {\n callback();\n }\n}\n\nexport const isInternetExplorer = () => {\n return !!document.documentMode;\n}\n\nexport const scrollToTop = () => {\n window.scrollTo(0);\n};\n\nexport const bytesToSize = (bytes) => {\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n if (bytes == 0) return null;\n const i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));\n if (i == 0) return bytes + ' ' + sizes[i];\n return (bytes / Math.pow(1024, i)).toFixed(0) + ' ' + sizes[i];\n};\n\nexport const setTitleByCodeUrl = (codeUrl, setTitle, setRegisterTitle, setLoginTitle) => {\n if (codeUrl) {\n if (codeUrl == 'DROPBOX2PCLOUD') {\n setTitle('Special for Dropbox users - press submit and enjoy 3 months of Premium 500 GB for Free');\n } else if (codeUrl == 'HUBIC2PCLOUD') {\n setTitle('Special for hubiC users - press submit and enjoy 3 months of Premium 500 GB for Free');\n } else if (codeUrl == 'APPO') {\n setTitle('Special for\"APPO\" members - register now and enjoy 3 months of Premium 500 GB for Free');\n } else if (codeUrl == 'BIRTHDAY4U') {\n setTitle(__(\"PromoPage_birthday_text\"));\n } else if (codeUrl == 'PCLOUDMUSIC') {\n setTitle(__(\"pCloud_Music_coupon_submit\").replace(\"%url_promo%\", codeUrl));\n setRegisterTitle(__(\"pCloud_Music_coupon_register\").replace(\"%url_promo%\", codeUrl));\n setLoginTitle(__(\"pCloud_Music_coupon_login\").replace(\"%url_promo%\", codeUrl));\n } else if (codeUrl == 'BDAY3MONTHS') {\n setTitle(__(\"pm_coupon_submit\").replace(\"%url_promo%\", codeUrl).replace(\"%months%\", 3));\n setRegisterTitle(__(\"pm_coupon_register\").replace(\"%url_promo%\", codeUrl).replace(\"%months%\", 3));\n setLoginTitle(__(\"pm_coupon_login\").replace(\"%url_promo%\", codeUrl).replace(\"%months%\", 3));\n } else if (codeUrl == 'PM6MONTHS' || codeUrl == \"INT6MONTHS\"|| codeUrl == \"LFS6MONTHS\") {\n setTitle(__(\"pm_coupon_submit\").replace(\"%url_promo%\", codeUrl).replace(\"%months%\", 6));\n setRegisterTitle(__(\"pm_coupon_register\").replace(\"%url_promo%\", codeUrl).replace(\"%months%\", 6));\n setLoginTitle(__(\"pm_coupon_login\").replace(\"%url_promo%\", codeUrl).replace(\"%months%\", 6));\n } else {\n setTitle(__(\"promo_submit_with_url\").replace(\"%url_promo%\", codeUrl));\n setRegisterTitle(__(\"Register for Free and enter your promo code. It will become effective immediately!\"));\n setLoginTitle(__(\"Enter your promo code upon Login and it will become effective immediately.\"));\n }\n }\n else {\n setTitle(__('Have a promo code? Enter it below.'));\n setRegisterTitle(__(\"Register for Free and enter your promo code. It will become effective immediately!\"));\n setLoginTitle(__(\"Enter your promo code upon Login and it will become effective immediately.\"));\n }\n};\n\nexport const getMonthsFromCode = (code) => {\n if (!code) {\n return \"\"\n };\n\n const indexPosition = code.indexOf(\"MONTHS\");\n let monthsCountIndex;\n\n if (indexPosition === -1) {\n return \"\";\n }\n\n if (indexPosition > 0) {\n monthsCountIndex = indexPosition - 1;\n } else {\n monthsCountIndex = indexPosition + 7;\n }\n\n if (!isNaN(code[monthsCountIndex])) {\n return code[monthsCountIndex]\n }\n\n return \"\";\n};\n\nexport const getLanguage = () => {\n return currentLang || $.cookie('set_lang') || $.cookie('lang') || 'en'\n}\n\nexport const countriesInEuropeList = {\n \"AT\": \"Austria\",\n \"BE\": \"Belgium\",\n \"BG\": \"Bulgaria\",\n \"HR\": \"Croatia\",\n \"CY\": \"Cyprus\",\n \"CZ\": \"Czech Republic\",\n \"DK\": \"Denmark\",\n \"EE\": \"Estonia\",\n \"FI\": \"Finland\",\n \"FR\": \"France\",\n \"DE\": \"Germany\",\n \"GR\": \"Greece\",\n \"HU\": \"Hungary\",\n \"IE\": \"Ireland\",\n \"IT\": \"Italy\",\n \"LV\": \"Latvia\",\n \"LT\": \"Lithuania\",\n \"LU\": \"Luxembourg\",\n \"MT\": \"Malta\",\n \"NL\": \"Netherlands\",\n \"PL\": \"Poland\",\n \"PT\": \"Portugal\",\n \"RO\": \"Romania\",\n \"SK\": \"Slovakia\",\n \"SI\": \"Slovenia\",\n \"ES\": \"Spain\",\n \"SE\": \"Sweden\",\n \"CH\": \"Switzerland\",\n \"GB\": \"United Kingdom\",\n \"AL\": \"Albania\",\n \"AD\": \"Andorra\",\n \"AM\": \"Armenia\",\n \"BY\": \"Belarus\",\n \"BA\": \"Bosnia and Herzegovina\",\n \"FO\": \"Faroe Islands\",\n \"GE\": \"Georgia\",\n \"GI\": \"Gibraltar\",\n \"IS\": \"Iceland\",\n \"IM\": \"Isle of Man\",\n \"XK\": \"Kosovo\",\n \"LI\": \"Liechtenstein\",\n \"MK\": \"Macedonia\",\n \"MD\": \"Moldova\",\n \"MC\": \"Monaco\",\n \"ME\": \"Montenegro\",\n \"NO\": \"Norway\",\n \"RU\": \"Russian Federation\",\n \"SM\": \"San Marino\",\n \"RS\": \"Serbia\",\n \"CH\": \"Switzerland\",\n \"TR\": \"Turkey\",\n \"UA\": \"Ukraine\",\n \"GB\": \"United Kingdom\",\n \"VA\": \"Vatican City State\"\n};\n\nexport const isCountryInEurope = (countryCodeToNameMap, country) => {\n return countryCodeToNameMap[country];\n};\n\nexport const encodeQueryData = (data) => {\n const ret = [];\n\n for (let d in data) {\n ret.push(encodeURIComponent(d) + '=' + encodeURIComponent(data[d]));\n }\n\n return ret.join('&');\n};\n\nexport const calculateDiscountPercent = (price, oldPrice) => Math.floor((1 - (price/oldPrice)) * 100);\n\nexport const convertDateToDDMMMYY = (date: string, shortMonthName = true, dayMonthSeparator = \" \", monthYearSeparator = \" \") => {\n const monthNames = [\n \"jan\",\n \"feb\",\n \"mar\",\n \"apr\",\n \"may\",\n \"jun\",\n \"jul\",\n \"aug\",\n \"sep\",\n \"oct\",\n \"nov\",\n \"dec\"\n ];\n const dateObj = new Date(date);\n const day = dateObj.getDate();\n const month = monthNames[dateObj.getMonth()];\n const monthKey = \"month_\" + (!shortMonthName ? \"full_\" : \"\") + month;\n const year = dateObj.getFullYear();\n\n return day + dayMonthSeparator + __(monthKey) + monthYearSeparator + year;\n};\n\nexport const daysDiff = (dateTo: string, dateFrom: string = null) => {\n const dateFromObj = dateFrom !== null && dateFrom !== \"\" ? new Date(dateFrom) : new Date();\n const dateToObj = new Date(dateTo);\n\n // Change hours and minutes to be from the start of the day.\n dateFromObj.setHours(0,0,0,0);\n dateToObj.setHours(0,0,0,0);\n return (dateToObj.getTime() - dateFromObj.getTime() + ((dateFromObj.getTimezoneOffset() - dateToObj.getTimezoneOffset()) * 60 * 1000)) / (1000 * 3600 * 24);\n};","import React from \"react\";\nimport styled from \"styled-components\";\nimport { hiDPI } from \"polished\";\nimport { __ } from \"../../../lib/utils\";\n\nconst MoreOptions = ({\n options = [\"family\", \"business\", \"traffic\"],\n showTitle\n}) => {\n const optionValues = {\n family: {\n icon: ,\n title: __(\"family_pricing_headline\"),\n description: __(\"family_pricing_description\"),\n linkHref: \"/family\",\n linkText: __(\"LEARN_MORE\"),\n linkTestId: \"learn_more_family\"\n },\n business: {\n icon: ,\n title: __(\"pCloud Business\"),\n description: __(\"business_pricing_description\"),\n linkHref: \"/business\",\n linkText: __(\"LEARN_MORE\"),\n linkTestId: \"learn_more_business\"\n },\n traffic: {\n icon: ,\n title: __(\"pricing_traffic_option_title\"),\n description: __(\"pricing_traffic_option_description\"),\n linkHref: \"/additional-traffic\",\n linkText: __(\"pricing_traffic_option_cta\"),\n linkTestId: \"buy_now_traffic\"\n }\n }\n return (\n \n { showTitle ? {__(\"looking_for_more\")} : null }\n \n {\n options.map((option) => {\n const optionData = optionValues[option];\n const { icon, title, description, linkHref, linkText, linkTestId } = optionData;\n\n return (\n \n { icon }\n \n
\n {title}\n {description}\n
\n \n {linkText}\n \n \n
\n
\n )\n })\n }\n
\n
\n );\n};\n\nexport default MoreOptions;\n\nconst MoreOptionsWrapper = styled.div`\n width: 100%;\n max-width: 1220px;\n padding: 0px 20px;\n box-sizing: border-box;\n margin: 25px auto;\n`;\n\nconst MoreOptionsTitle = styled.h2`\n text-align: center;\n font-weight: bold;\n font-size: 28px;\n margin-bottom: 22px;\n letter-spacing: normal;\n\n @media (max-width: 768px) {\n font-size: 24px;\n letter-spacing: -0.6px;\n }\n`;\n\nconst MoreOptionsBoxContainer = styled.div`\n display: flex;\n width: 100%;\n justify-content: center;\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n`;\n\nconst MoreOptionsBox = styled.div`\n width: 33.33%;\n box-sizing: border-box;\n padding: 36px;\n margin: 0px 13px;\n box-shadow: 4px 4px 4px 0 rgb(96 96 96 / 2%);\n background-color: #ffffff;\n border-radius: 17px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-direction: column;\n\n &:first-of-type {\n margin-left: 0px;\n }\n\n &:last-of-type {\n margin-right: 0px;\n }\n\n @media (max-width: 768px) {\n border-radius: 0px;\n margin: 8px auto;\n width: 100%;\n flex-direction: row;\n\n &:first-of-type {\n margin-top: 0px;\n }\n\n &:last-of-type {\n margin-bottom: 0px;\n }\n }\n`;\n\nconst IconGeneric = styled.div`\n display: inline-block;\n width: 64px;\n height: 64px;\n margin-bottom: 22px;\n background-repeat: no-repeat;\n background-size: 64px 64px;\n background-position: center;\n flex-shrink: 0;\n\n @media (max-width: 768px) {\n margin-bottom: 0px;\n }\n`;\n\nconst FamilyIcon = styled(IconGeneric)`\n background-image: url(\"/images/plans/family.png\");\n ${hiDPI(1.5)} {\n background-image: url(\"/images/plans/family@2x.png\");\n }\n`;\n\nconst BusinessIcon = styled(IconGeneric)`\n background-image: url(\"/images/plans/business.png\");\n ${hiDPI(1.5)} {\n background-image: url(\"/images/plans/business@2x.png\");\n }\n`;\n\nconst TrafficIcon = styled(IconGeneric)`\n background-image: url(\"/images/plans/traffic.png\");\n ${hiDPI(1.5)} {\n background-image: url(\"/images/plans/traffic@2x.png\");\n }\n`;\n\nconst TextWrap = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: center;\n flex-grow: 1;\n\n @media (max-width: 768px) {\n width: 100%;\n margin-left: 20px;\n align-items: flex-start;\n }\n`;\n\nconst MoreOptionTitle = styled.h3`\n font-size: 19px;\n font-weight: 500;\n line-height: 1.21;\n letter-spacing: -0.3px;\n text-align: center;\n color: #222;\n margin-bottom: 8px;\n padding: 0px;\n\n @media (max-width: 768px) {\n text-align: left;\n }\n`;\n\nconst MoreOptionDescription = styled.p`\n font-size: 15px;\n line-height: 1.2;\n letter-spacing: -0.2px;\n text-align: center;\n color: #222;\n font-weight: 400;\n padding: 0px;\n margin-bottom: 18px;\n\n @media (max-width: 768px) {\n text-align: left;\n margin-bottom: 0px;\n width: auto;\n }\n`;\n\nconst Link = styled.a`\n color: #17bed0;\n text-decoration: none;\n display: inline-block;\n cursor: pointer;\n font-size: 15px;\n text-align: center;\n margin-top: 8px;\n`;\n\nconst LinkArrow = styled.div`\n display: inline-block;\n width: 6px;\n height: 10px;\n margin-left: 4px;\n background-repeat: no-repeat;\n background-size: 6px 10px;\n background-position: center;\n background-image: url(\"/images/plans/more.png\");\n ${hiDPI(1.5)} {\n background-image: url(\"/images/plans/more@2x.png\");\n }\n`;\n","import React from \"react\";\nimport FAQPartial from \"../FAQPartial\";\nimport { __ } from \"../../lib/utils\";\nimport MoreOptions from \"../PricingPage/views/MoreOptions\";\n\nconst PartialFAQHome = () => {\n return \n}\n\nexport default PartialFAQHome;\n","import React from \"react\";\n\nimport _move from \"../lib/move\";\nimport componentMount from \"../lib/componentMount\"\nimport PartialFAQHome from \"../components/HomeEUPage/PartialFAQHome\";\n\nconst _attachList = [\n {\n attach: self,\n list: [\n //components\n \"PartialFAQHome\"\n ]\n }\n]\n\nconst prepComponents = {\n PartialFAQHome: componentMount(props => )\n};\n\n_move(prepComponents, _attachList);","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t43: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkpcloud_site\"] = self[\"webpackChunkpcloud_site\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [0], () => (__webpack_require__(55258)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","obj","_attachList","n","hasOwnProperty","k","length","list","indexOf","attach","usedReactRoots","getExistingOrNewRoot","element","reactRootId","dataset","Math","random","toString","slice","root","createRoot","render","props","_getExistingOrNewRoot","unmount","_ref","questions","_ref$leftsideMark","leftsideMark","_ref$leftSideMarkColo","leftSideMarkColor","QuestionCollapseIcon","CloseAnswerIcon","_useState2","_slicedToArray","useState","useEffect","initTabs","window","onresize","paddingValue","innerWidth","tabsElements","document","querySelectorAll","index","tab","answerEl","getElementsByClassName","classList","contains","style","maxHeight","offsetHeight","activeQuestionTabs","aindex","activeTab","remove","add","onTabClick","event","stopPropagation","currentTarget","tabEl","parentElement","scrollTo","offsetTop","querySelector","React","Wrapper","className","_Array$isArray","map","_ref2","question","answer","AnswerComponent","_ref2$answeComponentP","answeComponentProps","id","Tab","key","Title","onClick","Texts","QuestionMark","CustomIconWrapper","HideIcon","ShowIcon","Answer","Componentify","text","replace","converters","brTagConverter","linkConverterSelf","linkConverter","headline4Converter","listItemConverter","boldConverter","paragraphConverter","styled","div","withConfig","displayName","componentId","span","_ref3","showFaqImg","cdnPath","devicePixelRatio","hideFaqImg","_defineProperty","_countriesInEuropeLis","_ref$options","options","showTitle","optionValues","family","icon","FamilyIcon","title","__","description","linkHref","linkText","linkTestId","business","BusinessIcon","traffic","TrafficIcon","MoreOptionsWrapper","MoreOptionsTitle","MoreOptionsBoxContainer","option","optionData","MoreOptionsBox","TextWrap","MoreOptionTitle","MoreOptionDescription","Link","href","LinkArrow","h2","IconGeneric","hiDPI","h3","p","a","FAQPartial","MoreOptions","self","_move","PartialFAQHome","componentMount","r","e","t","f","Array","isArray","clsx","arguments","module","exports","objA","objB","compare","compareContext","ret","call","keysA","Object","keys","keysB","bHasOwnProperty","prototype","bind","idx","valueA","valueB","__assign","assign","s","i","apply","this","create","__spreadArray","to","from","pack","ar","l","concat","SuppressedError","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","m","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","every","splice","getter","__esModule","d","definition","o","defineProperty","enumerable","get","g","globalThis","Function","prop","Symbol","toStringTag","value","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","data","moreModules","runtime","some","chunkLoadingGlobal","forEach","push","nc","__webpack_exports__"],"sourceRoot":""}