{"version":3,"sources":["webpack:///../node_modules/react-intl/lib/src/components/createFormattedComponent.js","webpack:///../node_modules/react-intl/lib/index.js","webpack:///../node_modules/@uds/product/dist/es/index.js","webpack:///./domain/url.ts","webpack:///../node_modules/lodash.merge/index.js"],"names":["DisplayName","DisplayNameParts","__rest","s","e","t","p","Object","prototype","hasOwnProperty","call","indexOf","getOwnPropertySymbols","i","length","propertyIsEnumerable","createFormattedDateTimePartsComponent","name","ComponentParts","props","Consumer","intl","value","children","formatProps","date","Date","formatDateToParts","formatTimeToParts","displayName","createFormattedComponent","Component","formattedValue","Text","textComponent","FormattedNumber","useShouldIncludeTax$1","_useBrandConfig","_useBrandConfig$payme","payment","addTaxToDisplayPrice","getId$1","_ref","product","id","getName$1","_product$displayName","getProductName$1","_product$name","getDescription$1","_product$description","description","getCategory$1","_product$categoryName","categoryName","getTagline$1","tagline","getProductType","_product$productType","productType","DOMAIN_REGEX","getBasePrices$1","_product$priceTiers","term","interval","priceTiers","priceTier","find","tier","paymentInterval","defaultPrice","cancellationPeriod","cancellationPeriodType","getCancellationPeriod$1","basePrices","getTerm$1","_getBasePrices","getInterval$1","_prices$paymentInterv","prices","getPromotion$1","_promotion$priceTiers","promotion","promotionMessage","priceTerm","priceInterval","hasDiscount$1","keys","getRawPrices$1","_ref2","_ref3","_basePrices$retail","promotional","_getPromotion","discountedPrice","getPromotionalPrice$1","result","retail","retailPrice","price","upFront","upFrontCost","recurring","recurringCost","firstTerm","firstTermCost","forEach","key","getCurrency$1","_getRawPrices","_Object$values$","_Object$values$$gross","values","gross","currency","ViewMode","DiscountInterval","INTLNAMESPACE","getPrices$1","includeTax","taxProperty","getTaxProperty","rawPrices","entries","reduce","acc","amount","getPriceByType","_prices$type","displayInterval","type","withDisplay","adjustPriceByDisplayPeriod","getRetailPrice","options","getUpFrontPrice","_ref4","getPromotionalPrice","_ref6","getPrice$1","viewMode","RETAIL_INCLUDES_UPFRONT","getPromotionalRate$1","_promotion$percentOff","percentOff","getTax$2","getTaxRate$1","net","perc","toFixed","calcPerc","hasUpFrontCost$1","getDiscountInterval$1","_product$promotionMes","discountInterval","getRecurringPrice$1","recurringPrice","EVERGREEN","isTierPrice","item","createPromotionTier","totalPrice","totalDiscountedPrice","priceWithAdjustments","unitDiscountedPrice","totalAdjustmentValue","totalDiscountAmount","unitAdjustmentValue","unitDiscountAmount","orderItemPriceDetails","discountAmount","mergePrice","_product$defaultPrice","_product$defaultPrice2","isDefaultPrice","priceBeforeAdjustments","upfrontCost","mergeDefaultPrice","map","createTier","getBasketItemProduct$1","basketItem","basketItemProduct","JSON","parse","stringify","_normalizedProduct","_normalizedProduct$pr","_normalizedProduct2","_normalizedProduct2$p","found","isAdjusted","hasAdjustments","normalizedProduct","_normalizedProduct3","_normalizedProduct$pr2","_normalizedProduct4","_normalizedProduct4$p","mergePromotions","index","freeze","__proto__","useShouldIncludeTax","getId","getName","getProductName","getDescription","getCategory","getTagline","isDomain","test","getCancellationPeriod","getCurrency","getInterval","getPrice","getPrices","getPromotionalRate","getTax","getTaxRate","getTerm","hasDiscount","hasUpFrontCost","getRecurringPrice","getFirstTermPrice","_ref5","getBasketItemProduct","RenewalPeriod$1","intlNamespace","period","frequency","RenewalMessage$1","years","Math","floor","months","differs","priceNumber","style","recurringNumber","periodComponent","recurringMessage","termMessage","feeNumber","feeMessage","fee","useProductPrice$1","discount","discountPerc","taxRate","taxPerc","getRecurring","LegalText$1","bespoke","cancellation","tax","legalText","isInternalUrl","url","charAt","isHashUrl","reIsHostCtor","reIsUint","typedArrayTags","freeGlobal","global","freeSelf","self","root","Function","freeExports","exports","nodeType","freeModule","module","moduleExports","freeProcess","process","nodeUtil","types","require","binding","nodeIsTypedArray","isTypedArray","apply","func","thisArg","args","arrayProto","Array","funcProto","objectProto","coreJsData","funcToString","toString","maskSrcKey","uid","exec","IE_PROTO","nativeObjectToString","objectCtorString","reIsNative","RegExp","replace","Buffer","undefined","Symbol","Uint8Array","allocUnsafe","getPrototype","transform","arg","overArg","getPrototypeOf","objectCreate","create","splice","symToStringTag","toStringTag","defineProperty","getNative","nativeIsBuffer","isBuffer","nativeMax","max","nativeNow","now","Map","nativeCreate","baseCreate","object","proto","isObject","Hash","this","clear","entry","set","ListCache","MapCache","Stack","data","__data__","size","arrayLikeKeys","inherited","isArr","isArray","isArg","isArguments","isBuff","isType","skipIndexes","n","iteratee","baseTimes","String","isIndex","push","assignMergeValue","eq","baseAssignValue","assignValue","objValue","assocIndexOf","array","has","get","pop","getMapData","pairs","LARGE_ARRAY_SIZE","baseFor","fromRight","keysFunc","iterable","createBaseFor","baseGetTag","isOwn","tag","unmasked","getRawTag","objectToString","baseIsArguments","isObjectLike","baseIsNative","isMasked","isFunction","toSource","baseKeysIn","nativeKeysIn","isProto","isPrototype","baseMerge","source","srcIndex","customizer","stack","srcValue","mergeFunc","safeGet","stacked","newValue","isCommon","isTyped","isArrayLike","isArrayLikeObject","buffer","isDeep","slice","constructor","copy","cloneBuffer","typedArray","arrayBuffer","byteLength","cloneArrayBuffer","byteOffset","cloneTypedArray","copyArray","Ctor","isPlainObject","isNew","copyObject","keysIn","toPlainObject","initCloneObject","baseMergeDeep","baseRest","start","setToString","arguments","otherArgs","overRest","identity","isKeyable","getValue","count","lastCalled","stamp","remaining","shortOut","string","constant","other","isLength","baseUnary","merge","assigner","sources","guard","isIterateeCall","createAssigner"],"mappings":"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","file":"pex-static/34/1.9b79373a7685cf32e55b.chunk.js","sourcesContent":["var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport { invariantIntlContext } from '../utils';\nimport { Context } from './injectIntl';\nvar DisplayName;\n(function (DisplayName) {\n DisplayName[\"formatDate\"] = \"FormattedDate\";\n DisplayName[\"formatTime\"] = \"FormattedTime\";\n DisplayName[\"formatNumber\"] = \"FormattedNumber\";\n DisplayName[\"formatList\"] = \"FormattedList\";\n // Note that this DisplayName is the locale display name, not to be confused with\n // the name of the enum, which is for React component display name in dev tools.\n DisplayName[\"formatDisplayName\"] = \"FormattedDisplayName\";\n})(DisplayName || (DisplayName = {}));\nvar DisplayNameParts;\n(function (DisplayNameParts) {\n DisplayNameParts[\"formatDate\"] = \"FormattedDateParts\";\n DisplayNameParts[\"formatTime\"] = \"FormattedTimeParts\";\n DisplayNameParts[\"formatNumber\"] = \"FormattedNumberParts\";\n DisplayNameParts[\"formatList\"] = \"FormattedListParts\";\n})(DisplayNameParts || (DisplayNameParts = {}));\nexport var FormattedNumberParts = function (props) { return (React.createElement(Context.Consumer, null, function (intl) {\n invariantIntlContext(intl);\n var value = props.value, children = props.children, formatProps = __rest(props, [\"value\", \"children\"]);\n return children(intl.formatNumberToParts(value, formatProps));\n})); };\nFormattedNumberParts.displayName = 'FormattedNumberParts';\nexport function createFormattedDateTimePartsComponent(name) {\n var ComponentParts = function (props) { return (React.createElement(Context.Consumer, null, function (intl) {\n invariantIntlContext(intl);\n var value = props.value, children = props.children, formatProps = __rest(props, [\"value\", \"children\"]);\n var date = typeof value === 'string' ? new Date(value || 0) : value;\n var formattedParts = name === 'formatDate'\n ? intl.formatDateToParts(date, formatProps)\n : intl.formatTimeToParts(date, formatProps);\n return children(formattedParts);\n })); };\n ComponentParts.displayName = DisplayNameParts[name];\n return ComponentParts;\n}\nexport function createFormattedComponent(name) {\n var Component = function (props) { return (React.createElement(Context.Consumer, null, function (intl) {\n invariantIntlContext(intl);\n var value = props.value, children = props.children, formatProps = __rest(props, [\"value\", \"children\"]);\n // TODO: fix TS type definition for localeMatcher upstream\n var formattedValue = intl[name](value, formatProps);\n if (typeof children === 'function') {\n return children(formattedValue);\n }\n var Text = intl.textComponent || React.Fragment;\n return React.createElement(Text, null, formattedValue);\n })); };\n Component.displayName = DisplayName[name];\n return Component;\n}\n","import { createFormattedComponent, createFormattedDateTimePartsComponent, } from './src/components/createFormattedComponent';\nexport function defineMessages(msgs) {\n return msgs;\n}\nexport function defineMessage(msg) {\n return msg;\n}\nexport { default as injectIntl, Provider as RawIntlProvider, Context as IntlContext, } from './src/components/injectIntl';\nexport { default as useIntl } from './src/components/useIntl';\nexport { default as IntlProvider, createIntl } from './src/components/provider';\n// IMPORTANT: Explicit here to prevent api-extractor from outputing `import('./src/types').CustomFormatConfig`\nexport var FormattedDate = createFormattedComponent('formatDate');\nexport var FormattedTime = createFormattedComponent('formatTime');\nexport var FormattedNumber = createFormattedComponent('formatNumber');\nexport var FormattedList = createFormattedComponent('formatList');\nexport var FormattedDisplayName = createFormattedComponent('formatDisplayName');\nexport var FormattedDateParts = createFormattedDateTimePartsComponent('formatDate');\nexport var FormattedTimeParts = createFormattedDateTimePartsComponent('formatTime');\nexport { FormattedNumberParts } from './src/components/createFormattedComponent';\nexport { default as FormattedRelativeTime } from './src/components/relative';\nexport { default as FormattedPlural } from './src/components/plural';\nexport { default as FormattedMessage } from './src/components/message';\nexport { createIntlCache } from './src/utils';\nexport * from './src/error';\n","import Message from '@uds/message';\nimport { FormattedNumber } from 'react-intl';\nimport { jsx } from 'react/jsx-runtime';\nimport merge from 'lodash.merge';\nimport { useBrandConfig } from '@ux/whitelabel';\n\nconst useShouldIncludeTax = () => {\n var _useBrandConfig, _useBrandConfig$payme;\n return (_useBrandConfig = useBrandConfig()) === null || _useBrandConfig === void 0 ? void 0 : (_useBrandConfig$payme = _useBrandConfig.payment) === null || _useBrandConfig$payme === void 0 ? void 0 : _useBrandConfig$payme.addTaxToDisplayPrice;\n};\nvar useShouldIncludeTax$1 = useShouldIncludeTax;\n\nconst getId = _ref => {\n let {\n product\n } = _ref;\n return product === null || product === void 0 ? void 0 : product.id;\n};\nvar getId$1 = getId;\n\nconst getName = _ref => {\n var _product$displayName;\n let {\n product\n } = _ref;\n return (_product$displayName = product === null || product === void 0 ? void 0 : product.displayName) != null ? _product$displayName : '';\n};\nvar getName$1 = getName;\n\nconst getProductName = _ref => {\n var _product$name;\n let {\n product\n } = _ref;\n return (_product$name = product === null || product === void 0 ? void 0 : product.name) != null ? _product$name : '';\n};\nvar getProductName$1 = getProductName;\n\nconst getDescription = _ref => {\n var _product$description;\n let {\n product\n } = _ref;\n return (_product$description = product === null || product === void 0 ? void 0 : product.description) != null ? _product$description : '';\n};\nvar getDescription$1 = getDescription;\n\nconst getCategory = _ref => {\n var _product$categoryName;\n let {\n product\n } = _ref;\n return (_product$categoryName = product === null || product === void 0 ? void 0 : product.categoryName) != null ? _product$categoryName : '';\n};\nvar getCategory$1 = getCategory;\n\nconst getTagline = _ref => {\n let {\n product\n } = _ref;\n return product === null || product === void 0 ? void 0 : product.tagline;\n};\nvar getTagline$1 = getTagline;\n\nconst getProductType = _ref => {\n var _product$productType;\n let {\n product\n } = _ref;\n return (_product$productType = product === null || product === void 0 ? void 0 : product.productType) != null ? _product$productType : '';\n};\nconst DOMAIN_REGEX = /^\\/domains\\/.*domain.*/;\nconst isDomain = _ref2 => {\n let {\n product\n } = _ref2;\n return DOMAIN_REGEX.test(getProductType({\n product\n }));\n};\n\n// this function pulls all of the raw price data together\n// if you pass a term/interval it will attempt to find the price\n// from the priceTiers property\n// otherwise it'll just fall back to the default price\n\nconst getBasePrices = _ref => {\n var _product$priceTiers;\n let {\n product,\n term,\n interval\n } = _ref;\n const priceTiers = (_product$priceTiers = product === null || product === void 0 ? void 0 : product.priceTiers) != null ? _product$priceTiers : [];\n let priceTier;\n if (term != null && interval != null && priceTiers.length > 0) {\n priceTier = priceTiers.find(tier => {\n return tier.term === term && tier.paymentInterval === interval;\n });\n }\n if (priceTier == null) {\n // unlike price tiers, the default price doesn't contain the cancellation period\n // so we have to manually pull it out of the root product and merge it in\n priceTier = merge(product === null || product === void 0 ? void 0 : product.defaultPrice, {\n cancellationPeriod: product === null || product === void 0 ? void 0 : product.cancellationPeriod,\n cancellationPeriodType: product === null || product === void 0 ? void 0 : product.cancellationPeriodType\n });\n }\n return priceTier;\n};\nvar getBasePrices$1 = getBasePrices;\n\nconst getCancellationPeriod = _ref => {\n let {\n product,\n term,\n interval\n } = _ref;\n const basePrices = getBasePrices$1({\n product,\n term,\n interval\n });\n return basePrices === null || basePrices === void 0 ? void 0 : basePrices.cancellationPeriod;\n};\nvar getCancellationPeriod$1 = getCancellationPeriod;\n\nconst getTerm = _ref => {\n var _getBasePrices;\n let {\n product,\n term,\n interval\n } = _ref;\n return (_getBasePrices = getBasePrices$1({\n product,\n term,\n interval\n })) === null || _getBasePrices === void 0 ? void 0 : _getBasePrices.term;\n};\nvar getTerm$1 = getTerm;\n\nconst getInterval = _ref => {\n var _prices$paymentInterv;\n let {\n product,\n term,\n interval\n } = _ref;\n const prices = getBasePrices$1({\n product,\n term,\n interval\n });\n return (_prices$paymentInterv = prices === null || prices === void 0 ? void 0 : prices.paymentInterval) != null ? _prices$paymentInterv : prices === null || prices === void 0 ? void 0 : prices.interval;\n};\nvar getInterval$1 = getInterval;\n\nconst getPromotion = _ref => {\n var _promotion$priceTiers;\n let {\n product,\n term,\n interval\n } = _ref;\n const promotion = product === null || product === void 0 ? void 0 : product.promotionMessage;\n const priceTerm = getTerm$1({\n product,\n term,\n interval\n });\n const priceInterval = getInterval$1({\n product,\n term,\n interval\n });\n\n // promotions have a priceTiers object. If the term and interval do not\n // match then there is not a promo\n return promotion === null || promotion === void 0 ? void 0 : (_promotion$priceTiers = promotion.priceTiers) === null || _promotion$priceTiers === void 0 ? void 0 : _promotion$priceTiers.find(tier => {\n return tier.term === priceTerm && tier.paymentInterval === priceInterval;\n });\n};\nvar getPromotion$1 = getPromotion;\n\nconst hasDiscount = _ref => {\n let {\n product,\n term,\n interval\n } = _ref;\n const promotion = getPromotion$1({\n product,\n term,\n interval\n });\n return promotion != null && Object.keys(promotion).length > 0;\n};\nvar hasDiscount$1 = hasDiscount;\n\nconst getPromotionalPrice$1 = _ref => {\n let {\n product,\n term,\n interval\n } = _ref;\n if (hasDiscount$1({\n product,\n term,\n interval\n })) {\n var _getPromotion;\n return (_getPromotion = getPromotion$1({\n product,\n term,\n interval\n })) === null || _getPromotion === void 0 ? void 0 : _getPromotion.discountedPrice;\n }\n return null;\n};\nconst getRawPrices = _ref2 => {\n var _ref3, _basePrices$retail;\n let {\n product,\n term,\n interval\n } = _ref2;\n const basePrices = getBasePrices$1({\n product,\n term,\n interval\n });\n const promotional = getPromotionalPrice$1({\n product,\n term,\n interval\n });\n const retail = (_ref3 = (_basePrices$retail = basePrices === null || basePrices === void 0 ? void 0 : basePrices.retail) != null ? _basePrices$retail : basePrices === null || basePrices === void 0 ? void 0 : basePrices.retailPrice) != null ? _ref3 : basePrices === null || basePrices === void 0 ? void 0 : basePrices.price;\n const upFront = basePrices === null || basePrices === void 0 ? void 0 : basePrices.upFrontCost;\n const recurring = basePrices === null || basePrices === void 0 ? void 0 : basePrices.recurringCost;\n const firstTerm = basePrices === null || basePrices === void 0 ? void 0 : basePrices.firstTermCost;\n const result = {\n retail,\n upFront,\n recurring,\n firstTerm,\n promotional\n };\n\n // strip out null/undefined properties from the result\n Object.keys(result).forEach(key => {\n if (result[key] == null) {\n delete result[key];\n }\n });\n return result;\n};\nvar getRawPrices$1 = getRawPrices;\n\nconst getCurrency = _ref => {\n var _getRawPrices, _Object$values$, _Object$values$$gross;\n let {\n product,\n term,\n interval\n } = _ref;\n const prices = (_getRawPrices = getRawPrices$1({\n product,\n term,\n interval\n })) != null ? _getRawPrices : {};\n return (_Object$values$ = Object.values(prices)[0]) === null || _Object$values$ === void 0 ? void 0 : (_Object$values$$gross = _Object$values$.gross) === null || _Object$values$$gross === void 0 ? void 0 : _Object$values$$gross.currency;\n};\nvar getCurrency$1 = getCurrency;\n\nlet ViewMode;\n(function (ViewMode) {\n ViewMode[ViewMode[\"RETAIL_AND_UPFRONT\"] = 0] = \"RETAIL_AND_UPFRONT\";\n ViewMode[ViewMode[\"RETAIL_INCLUDES_UPFRONT\"] = 1] = \"RETAIL_INCLUDES_UPFRONT\";\n ViewMode[ViewMode[\"RETAIL_ONLY\"] = 2] = \"RETAIL_ONLY\";\n})(ViewMode || (ViewMode = {}));\nlet DiscountInterval;\n(function (DiscountInterval) {\n DiscountInterval[DiscountInterval[\"EVERGREEN\"] = -1] = \"EVERGREEN\";\n})(DiscountInterval || (DiscountInterval = {}));\nconst INTLNAMESPACE = 'ux.product';\n\nconst getTaxProperty = includeTax => {\n switch (includeTax) {\n case 'taxOnly':\n return 'tax';\n case true:\n return 'gross';\n default:\n return 'net';\n }\n};\nconst getPrices = _ref => {\n var _getRawPrices;\n let {\n product,\n term,\n interval,\n includeTax\n } = _ref;\n const taxProperty = getTaxProperty(includeTax != null ? includeTax : true);\n const rawPrices = (_getRawPrices = getRawPrices$1({\n product,\n term,\n interval\n })) != null ? _getRawPrices : {};\n return Object.entries(rawPrices).reduce((acc, _ref2) => {\n let [key, value] = _ref2;\n return {\n ...acc,\n [key]: value === null || value === void 0 ? void 0 : value[taxProperty].amount\n };\n }, {});\n};\nvar getPrices$1 = getPrices;\n\nconst adjustPriceByDisplayPeriod = _ref => {\n let {\n price,\n interval,\n displayInterval\n } = _ref;\n if (interval == null) {\n return price;\n }\n // when display period matches the price's interval we don't need to adjust\n if (interval === displayInterval) {\n return price;\n }\n // when want to display in a different interval than the product's\n if (displayInterval === 1 || displayInterval === 12) {\n return price / interval * displayInterval;\n }\n return price;\n};\nconst getPriceByType = _ref2 => {\n var _prices$type;\n let {\n product,\n term,\n interval,\n includeTax,\n displayInterval,\n type,\n withDisplay\n } = _ref2;\n const prices = getPrices$1({\n product,\n term,\n interval,\n includeTax\n });\n let price = (_prices$type = prices === null || prices === void 0 ? void 0 : prices[type]) != null ? _prices$type : 0;\n if (displayInterval != null && withDisplay) {\n price = adjustPriceByDisplayPeriod({\n price,\n interval: getInterval$1({\n product,\n term,\n interval\n }),\n displayInterval\n });\n }\n return price;\n};\nconst getRetailPrice = _ref3 => {\n let {\n product,\n ...options\n } = _ref3;\n return getPriceByType({\n product,\n ...options,\n type: 'retail',\n withDisplay: true\n });\n};\nconst getUpFrontPrice = _ref4 => {\n let {\n product,\n ...options\n } = _ref4;\n return getPriceByType({\n product,\n ...options,\n type: 'upFront',\n withDisplay: false\n });\n};\nconst getFirstTermPrice = _ref5 => {\n let {\n product,\n ...options\n } = _ref5;\n return getPriceByType({\n product,\n ...options,\n type: 'firstTerm',\n withDisplay: true\n });\n};\nconst getPromotionalPrice = _ref6 => {\n let {\n product,\n ...options\n } = _ref6;\n return getPriceByType({\n product,\n ...options,\n type: 'promotional',\n withDisplay: true\n });\n};\n\nconst getPrice = _ref => {\n let {\n product,\n viewMode,\n ...options\n } = _ref;\n // get the \"standard price\" this will either be the retail price or the promotional price\n let price = hasDiscount$1({\n product,\n ...options\n }) ? getPromotionalPrice({\n product,\n ...options\n }) : getRetailPrice({\n product,\n ...options\n });\n if (viewMode === ViewMode.RETAIL_INCLUDES_UPFRONT) {\n price = price + getUpFrontPrice({\n product,\n ...options\n });\n }\n return price;\n};\nvar getPrice$1 = getPrice;\n\nconst getPromotionalRate = _ref => {\n var _promotion$percentOff;\n let {\n product,\n term,\n interval\n } = _ref;\n const promotion = getPromotion$1({\n product,\n term,\n interval\n });\n return (_promotion$percentOff = promotion === null || promotion === void 0 ? void 0 : promotion.percentOff) != null ? _promotion$percentOff : 0;\n};\nvar getPromotionalRate$1 = getPromotionalRate;\n\nconst getTax$1 = _ref => {\n let {\n product,\n ...options\n } = _ref;\n return getPrice$1({\n product,\n ...options,\n includeTax: 'taxOnly'\n });\n};\nvar getTax$2 = getTax$1;\n\nconst calcPerc = (net, gross) => {\n const perc = ((gross - net) / net * 100).toFixed(0);\n return net && gross ? perc : '—';\n};\nconst getTaxRate = _ref => {\n let {\n product,\n ...options\n } = _ref;\n const netPrice = getPrice$1({\n product,\n ...options,\n includeTax: false\n });\n const grossPrice = getPrice$1({\n product,\n ...options,\n includeTax: true\n });\n return calcPerc(netPrice, grossPrice);\n};\nvar getTaxRate$1 = getTaxRate;\n\nconst hasUpFrontCost = _ref => {\n let {\n product,\n term,\n interval,\n displayInterval,\n includeTax\n } = _ref;\n return getUpFrontPrice({\n product,\n term,\n interval,\n displayInterval,\n includeTax\n }) > 0;\n};\nvar hasUpFrontCost$1 = hasUpFrontCost;\n\nconst getDiscountInterval = _ref => {\n var _product$promotionMes;\n let {\n product\n } = _ref;\n return product === null || product === void 0 ? void 0 : (_product$promotionMes = product.promotionMessage) === null || _product$promotionMes === void 0 ? void 0 : _product$promotionMes.discountInterval;\n};\nvar getDiscountInterval$1 = getDiscountInterval;\n\nconst getRecurringPrice = _ref => {\n let {\n product,\n ...options\n } = _ref;\n const discountInterval = getDiscountInterval$1({\n product\n });\n const price = getPrice$1({\n product,\n ...options\n });\n const recurringPrice = getPriceByType({\n product,\n ...options,\n type: 'recurring',\n withDisplay: true\n });\n return discountInterval === DiscountInterval.EVERGREEN ? price : recurringPrice;\n};\nvar getRecurringPrice$1 = getRecurringPrice;\n\n// is the basket item's current term/interval the default price tier?\nconst isDefaultPrice = (item, product) => {\n var _product$defaultPrice, _product$defaultPrice2;\n const interval = product === null || product === void 0 ? void 0 : (_product$defaultPrice = product.defaultPrice) === null || _product$defaultPrice === void 0 ? void 0 : _product$defaultPrice.interval;\n const term = product === null || product === void 0 ? void 0 : (_product$defaultPrice2 = product.defaultPrice) === null || _product$defaultPrice2 === void 0 ? void 0 : _product$defaultPrice2.term;\n return item.paymentInterval === interval && item.term === term;\n};\nconst mergeDefaultPrice = (item, product) => {\n return {\n ...product,\n defaultPrice: merge(product.defaultPrice, {\n retailPrice: item.priceBeforeAdjustments,\n firstTermCost: item.firstTermCost,\n recurringCost: item.recurringCost,\n upFrontCost: item.upfrontCost\n })\n };\n};\n\n// is the basket item's current term/interval the same as this tier?\nconst isTierPrice = (item, tier) => {\n return item.paymentInterval === tier.paymentInterval && item.term === tier.term;\n};\n\n// generate a tier from the basket item's price data\nconst createTier = (item, tier) => {\n return {\n ...tier,\n paymentInterval: item.paymentInterval,\n term: item.term,\n firstTermCost: item.firstTermCost,\n price: item.priceBeforeAdjustments,\n recurringCost: item.recurringCost,\n upFrontCost: item.upfrontCost\n };\n};\n\n// does the basket item have price adjustments?\nconst hasAdjustments = item => {\n return item.totalAdjustmentValue.gross.amount > 0;\n};\n\n// generate a tier from the basket item's price data\nconst createPromotionTier = item => {\n const {\n term,\n paymentInterval,\n totalPrice: totalDiscountedPrice,\n // unit equivalent of totalPrice, only available for baskets created after multiquantity PPE changes\n priceWithAdjustments: unitDiscountedPrice,\n totalAdjustmentValue: totalDiscountAmount,\n // unit equivalent of AdjustmentValue, only available for baskets created after multiquantity PPE changes\n unitAdjustmentValue: unitDiscountAmount,\n orderItemPriceDetails: [{\n percentOff\n }]\n } = item;\n const discountedPrice = unitDiscountedPrice ? unitDiscountedPrice : totalDiscountedPrice;\n const discountAmount = unitDiscountAmount ? unitDiscountAmount : totalDiscountAmount;\n return {\n term,\n paymentInterval,\n discountedPrice,\n discountAmount,\n percentOff\n };\n};\n\n// find which price tier the basket item is currently set to\n// and override it with the basket's pricing\nconst mergePrice = (item, product) => {\n var _product$priceTiers;\n if (isDefaultPrice(item, product)) {\n return mergeDefaultPrice(item, product);\n }\n // loop through the price tiers to see if we can find a match\n const priceTiers = ((_product$priceTiers = product.priceTiers) != null ? _product$priceTiers : []).map(tier => {\n if (isTierPrice(item, tier)) {\n return createTier(item, tier);\n }\n return tier;\n });\n return {\n ...product,\n priceTiers\n };\n};\n\n// if the basket item has adjustments, we treat this as if it was on offer\n// if the product doesn't have any offers, we just create a bespoke one\nconst mergePromotions = (item, product) => {\n var _normalizedProduct, _normalizedProduct$pr, _normalizedProduct2, _normalizedProduct2$p;\n let found = false;\n const isAdjusted = hasAdjustments(item);\n let normalizedProduct = product;\n\n // if for some reason priceTiers isn't set (it has happened),\n // we should default it\n normalizedProduct = {\n ...normalizedProduct,\n promotionMessage: {\n ...((_normalizedProduct = normalizedProduct) === null || _normalizedProduct === void 0 ? void 0 : _normalizedProduct.promotionMessage),\n priceTiers: ((_normalizedProduct$pr = (_normalizedProduct2 = normalizedProduct) === null || _normalizedProduct2 === void 0 ? void 0 : (_normalizedProduct2$p = _normalizedProduct2.promotionMessage) === null || _normalizedProduct2$p === void 0 ? void 0 : _normalizedProduct2$p.priceTiers) != null ? _normalizedProduct$pr : []).reduce((acc, tier) => {\n // if the price tier matches the basket's term/interval\n // we want to replace it with the basket's actual pricing\n if (isTierPrice(item, tier)) {\n found = true;\n // if the product has an offer for this tier\n // but the basket doesn't have any adjustments\n // that means that the offer isn't valid for this customer\n // so we should remove it from the price tiers\n if (!isAdjusted) {\n return acc;\n }\n return [...acc, createPromotionTier(item)];\n }\n return [...acc, tier];\n }, [])\n }\n };\n\n // if the currently-selected term/interval doesn't match a promotion tier\n // we want to force a new one onto the product\n if (!found && isAdjusted) {\n var _normalizedProduct3, _normalizedProduct$pr2, _normalizedProduct4, _normalizedProduct4$p;\n normalizedProduct = {\n ...normalizedProduct,\n promotionMessage: {\n ...((_normalizedProduct3 = normalizedProduct) === null || _normalizedProduct3 === void 0 ? void 0 : _normalizedProduct3.promotionMessage),\n priceTiers: [...((_normalizedProduct$pr2 = (_normalizedProduct4 = normalizedProduct) === null || _normalizedProduct4 === void 0 ? void 0 : (_normalizedProduct4$p = _normalizedProduct4.promotionMessage) === null || _normalizedProduct4$p === void 0 ? void 0 : _normalizedProduct4$p.priceTiers) != null ? _normalizedProduct$pr2 : []), createPromotionTier(item)]\n }\n };\n }\n return normalizedProduct;\n};\n\n// a basket item contains a PPE product, but it has its own\n// pricing fields, which take precedence over the PPE data\n// this selector merges the basket item pricing into the\n// PPE object\nconst getBasketItemProduct = basketItem => {\n const product = basketItem.product;\n if (product == null) {\n return product;\n }\n\n // Don't mutate original basketItem product; its generally a\n // bad idea to have side effects but specifically this can\n // cause issues where there is one product for different basket items\n // and you end up altering the orignal product and effecting both items pricing\n let basketItemProduct = JSON.parse(JSON.stringify(product));\n basketItemProduct = mergePrice(basketItem, basketItemProduct);\n basketItemProduct = mergePromotions(basketItem, basketItemProduct);\n return basketItemProduct;\n};\nvar getBasketItemProduct$1 = getBasketItemProduct;\n\nvar index = /*#__PURE__*/Object.freeze({\n __proto__: null,\n useShouldIncludeTax: useShouldIncludeTax$1,\n getId: getId$1,\n getName: getName$1,\n getProductName: getProductName$1,\n getDescription: getDescription$1,\n getCategory: getCategory$1,\n getTagline: getTagline$1,\n getProductType: getProductType,\n isDomain: isDomain,\n getCancellationPeriod: getCancellationPeriod$1,\n getCurrency: getCurrency$1,\n getInterval: getInterval$1,\n getPrice: getPrice$1,\n getPrices: getPrices$1,\n getPromotionalRate: getPromotionalRate$1,\n getTax: getTax$2,\n getTaxRate: getTaxRate$1,\n getTerm: getTerm$1,\n hasDiscount: hasDiscount$1,\n hasUpFrontCost: hasUpFrontCost$1,\n getRecurringPrice: getRecurringPrice$1,\n getFirstTermPrice: getFirstTermPrice,\n getPromotionalPrice: getPromotionalPrice,\n getRetailPrice: getRetailPrice,\n getUpFrontPrice: getUpFrontPrice,\n getBasketItemProduct: getBasketItemProduct$1\n});\n\n// ux.product.renewalPeriod.{yearly,monthly,nMonthly}\n// per year / per month / every n months\nconst RenewalPeriod = _ref => {\n let {\n intlNamespace = INTLNAMESPACE,\n period\n } = _ref;\n let frequency = 'nMonthly';\n if (period === 12) {\n frequency = 'yearly';\n }\n if (period === 1) {\n frequency = 'monthly';\n }\n return /*#__PURE__*/jsx(Message, {\n id: `${intlNamespace}.renewalPeriod.${frequency}`,\n values: {\n period\n }\n });\n};\nvar RenewalPeriod$1 = RenewalPeriod;\n\nconst RenewalMessage = _ref => {\n let {\n intlNamespace = INTLNAMESPACE,\n interval,\n currency,\n price,\n upFront,\n recurring,\n term\n } = _ref;\n const years = Math.floor(term / 12);\n const months = term % 12;\n const differs = price !== recurring;\n\n // the price, either the discount price or the retail price\n // £9.99\n const priceNumber = /*#__PURE__*/jsx(FormattedNumber, {\n value: price,\n style: \"currency\",\n currency: currency\n });\n // the price after the initial period has ended\n // £19.99\n const recurringNumber = /*#__PURE__*/jsx(FormattedNumber, {\n value: recurring,\n style: \"currency\",\n currency: currency\n });\n // per month\n const periodComponent = /*#__PURE__*/jsx(RenewalPeriod$1, {\n intlNamespace: intlNamespace,\n period: interval != null ? interval : 1\n });\n // ux.product.recurring.price\n // shown when the renewal price is different to the first term price\n // , then £19.99 per month\n const recurringMessage = (() => {\n if (recurring === price || recurring === 0) {\n return '';\n }\n return /*#__PURE__*/jsx(Message, {\n id: `${intlNamespace}.recurring.price`,\n values: {\n price: recurringNumber,\n period: periodComponent\n }\n });\n })();\n // ux.product.term.{months,years,monthsAndYears}\n // 2 years / 6 months / 2 years and 6 months\n const termMessage = (() => {\n if (term < 12) {\n return /*#__PURE__*/jsx(Message, {\n id: `${intlNamespace}.term.months`,\n values: {\n months\n }\n });\n }\n if (term % 12 === 0) {\n return /*#__PURE__*/jsx(Message, {\n id: `${intlNamespace}.term.years`,\n values: {\n years\n }\n });\n }\n return /*#__PURE__*/jsx(Message, {\n id: `${intlNamespace}.term.monthsAndYears`,\n values: {\n months,\n years\n }\n });\n })();\n // the setup fee\n // £50\n const feeNumber = /*#__PURE__*/jsx(FormattedNumber, {\n value: upFront,\n style: \"currency\",\n currency: currency\n });\n // ux.product.fee\n // will not display if there isn't a fee\n // Setup fee: £50\n const feeMessage = upFront != null && upFront > 0 ? /*#__PURE__*/jsx(Message, {\n id: `${intlNamespace}.fee`,\n values: {\n price: feeNumber\n }\n }) : null;\n\n // ux.product.recurring\n return /*#__PURE__*/jsx(Message, {\n id: `${intlNamespace}.recurring`,\n values: {\n price: priceNumber,\n recurringPrice: recurringMessage,\n term: termMessage,\n period: periodComponent,\n fee: feeMessage,\n differs\n }\n });\n};\nvar RenewalMessage$1 = RenewalMessage;\n\nconst useProductPrice = props => {\n const {\n interval,\n term,\n displayInterval\n } = props;\n return {\n currency: getCurrency$1(props),\n price: getPrice$1(props),\n upFront: getUpFrontPrice(props),\n recurring: getRecurringPrice$1(props),\n retail: getRetailPrice(props),\n discount: getPromotionalPrice(props),\n discountPerc: getPromotionalRate$1(props),\n taxRate: getTaxRate$1(props),\n hasUpFrontCost: hasUpFrontCost$1(props),\n hasDiscount: hasDiscount$1(props),\n interval: interval != null ? interval : getInterval$1(props),\n term: term != null ? term : getTerm$1(props),\n displayInterval: displayInterval != null ? displayInterval : getInterval$1(props)\n };\n};\nvar useProductPrice$1 = useProductPrice;\n\nconst getTax = _ref => {\n let {\n includeTax,\n taxRate,\n intlNamespace\n } = _ref;\n if (taxRate === '—' || taxRate === '0') {\n return '';\n }\n if (includeTax) {\n return (\n /*#__PURE__*/\n // ux.product.legal.tax.inc\n // includes tax at 20%\n jsx(Message, {\n id: `${intlNamespace}.legal.tax.inc`,\n values: {\n taxPerc: `${taxRate}%`\n }\n })\n );\n }\n return (\n /*#__PURE__*/\n // ux.product.legal.tax.exc\n // excludes tax at 20%\n jsx(Message, {\n id: `${intlNamespace}.legal.tax.exc`,\n values: {\n taxPerc: `${taxRate}%`\n }\n })\n );\n};\nconst getRecurring = _ref2 => {\n let {\n intlNamespace,\n term,\n interval,\n displayInterval,\n currency,\n price,\n upFront,\n recurring\n } = _ref2;\n if (term == null || interval == null) {\n return null;\n }\n if (term > 0 && interval > 0) {\n return /*#__PURE__*/jsx(RenewalMessage$1, {\n intlNamespace: intlNamespace,\n term: term,\n interval: displayInterval,\n currency: currency,\n price: price,\n upFront: upFront,\n recurring: recurring\n });\n }\n return null;\n};\nconst LegalText = _ref3 => {\n var _ref4;\n let {\n intlNamespace = INTLNAMESPACE,\n ...props\n } = _ref3;\n const {\n product,\n bespoke\n } = props;\n const includeTax = useShouldIncludeTax$1();\n const {\n currency,\n price,\n upFront,\n recurring,\n taxRate,\n interval,\n term,\n displayInterval\n } = useProductPrice$1({\n includeTax,\n ...props\n });\n const cancellation = getCancellationPeriod$1({\n product,\n term,\n interval\n });\n\n // {tax}{recurring}{bespoke}{cancellation}\n // includes 20% tax\n return /*#__PURE__*/jsx(Message, {\n id: `${intlNamespace}.legal`,\n values: {\n tax: getTax({\n intlNamespace,\n includeTax,\n taxRate\n }),\n recurring: getRecurring({\n intlNamespace,\n term,\n interval,\n displayInterval,\n currency,\n price,\n upFront,\n recurring\n }),\n bespoke: (_ref4 = bespoke != null ? bespoke : product === null || product === void 0 ? void 0 : product.legalText) != null ? _ref4 : '',\n // ux.product.legal.cancellation\n // 4 weeks notice\n cancellation: cancellation != null ? /*#__PURE__*/jsx(Message, {\n id: `${intlNamespace}.legal.cancellation`,\n values: {\n cancellation\n }\n }) : null\n }\n });\n};\nvar LegalText$1 = LegalText;\n\nconst price = function () {\n let amount = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10;\n return {\n amount,\n currency: 'GBP'\n };\n};\nconst prices = function () {\n let net = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10;\n let taxRate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.2;\n return {\n raw: price(net),\n net: price(net),\n tax: price(net * taxRate),\n gross: price(net + net * taxRate)\n };\n};\nconst priceTier = function () {\n let {\n retail = 10,\n firstTerm = retail,\n recurring = retail,\n upfront = 0,\n interval = 1,\n term = 12,\n taxRate = 0.2\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return {\n cancellationPeriodType: '',\n hidden: false,\n legacyTariffId: '',\n minQuantity: 1,\n term,\n paymentInterval: interval,\n cancellationPeriod: '4 weeks',\n price: prices(retail, taxRate),\n upFrontCost: prices(upfront, taxRate),\n recurringCost: prices(recurring, taxRate),\n firstTermCost: prices(firstTerm, taxRate)\n };\n};\nconst promotionPriceTier = _ref => {\n let {\n term = 12,\n interval = 1,\n retail = 10,\n offer = retail / 2,\n taxRate = 0.2\n } = _ref;\n return {\n term,\n paymentInterval: interval,\n discountedPrice: prices(offer, taxRate),\n discountAmount: prices(retail - offer, taxRate),\n percentOff: Math.round(offer / retail * 100)\n };\n};\nconst promotionMessage = function () {\n let {\n term = 12,\n interval = 1,\n retail = 10,\n offer = retail / 2,\n taxRate = 0.2,\n tiers = [promotionPriceTier({\n term,\n interval,\n offer,\n retail,\n taxRate\n })]\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return {\n offerType: '',\n discountType: '',\n discountValue: 5,\n percentOff: 50,\n discountAmount: prices(5, taxRate),\n message: '',\n messagePlacement: '',\n priority: 0,\n media: {\n allowOverrideUrl: false,\n id: 1,\n url: '',\n archived: ''\n },\n discountedPrice: prices(5, taxRate),\n priceTiers: tiers\n };\n};\nconst defaultPrice = function () {\n let {\n interval = 1,\n term = 12,\n retail = 10,\n firstTerm = retail,\n recurring = retail,\n upfront = 0,\n taxRate = 0.2\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return {\n term,\n interval,\n retailPrice: prices(retail, taxRate),\n upFrontCost: prices(upfront, taxRate),\n recurringCost: prices(recurring, taxRate),\n firstTermCost: prices(firstTerm, taxRate)\n };\n};\nconst productAttribute = function () {\n let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'name';\n let value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'value';\n return {\n attributeName: name,\n attributeValue: value,\n id: Math.random() * 1024\n };\n};\nconst product = function () {\n let overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return {\n id: 1234,\n name: 'name',\n url: '/url',\n activeStartDate: '',\n externalId: '',\n displayName: 'display name',\n productType: '',\n tagline: '',\n keywords: '',\n legalText: '',\n isEntitlement: false,\n isOptimisticProvision: false,\n cancellationPeriod: '4 weeks',\n cancellationPeriodType: '4_WEEKS',\n defaultPrice: defaultPrice({\n firstTerm: 10,\n interval: 1,\n term: 12,\n recurring: 10,\n retail: 10,\n upfront: 0\n }),\n defaultSkuId: 1,\n categoryName: 'category',\n priceTiers: [priceTier({\n term: 12,\n interval: 12,\n retail: 120\n })],\n productAttributes: [],\n ...overrides\n };\n};\n\nvar mocks = /*#__PURE__*/Object.freeze({\n __proto__: null,\n price: price,\n prices: prices,\n priceTier: priceTier,\n promotionPriceTier: promotionPriceTier,\n promotionMessage: promotionMessage,\n defaultPrice: defaultPrice,\n productAttribute: productAttribute,\n product: product\n});\n\nexport { LegalText$1 as LegalText, RenewalMessage$1 as RenewalMessage, RenewalPeriod$1 as RenewalPeriod, ViewMode, mocks, index as selectors, useProductPrice$1 as useProductPrice };\n","export const isInternalUrl = (url: string | null | undefined) => {\n return (url ?? '').charAt(0) === '/';\n};\nexport const isHashUrl = (url: string | null | undefined) => {\n return (url ?? '').charAt(0) === '#';\n};\n","/**\n * Lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright OpenJS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeMax = Math.max,\n nativeNow = Date.now;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\n/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\n/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\n/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = merge;\n"],"sourceRoot":""}