{"version":3,"file":"int_braintree.min.js","sources":["webpack:///webpack/bootstrap","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/applepay/applepayHelper.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/braintreeApplepay.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/braintreeCreditCard.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/braintreeGooglepay.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/braintreeLocal.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/braintreePaypal.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/braintreeSrc.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/braintreeUtils.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/braintreeVenmo.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/creditcardAccount.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/creditcardFields.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/creditcardHelper.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/creditcard/creditcardPayment.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/googlepay/googlepayAccount.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/googlepay/googlepayHelper.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/googlepay/googlepayPayment.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/helper.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/loaderHelper.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/local/localPayment.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/minicartHelper.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/paypalAccount.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/paypalHelper.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/paypal/paypalSavedAccountHandler.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/src/srcAccount.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/src/srcHelper.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/src/srcPayment.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/venmo/venmoAccount.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/venmo/venmoHelper.js","webpack:///./link_braintree/cartridges/int_braintree/cartridge/client/default/js/braintree/venmo/venmoPayment.js","webpack:///./org_irobot/cartridge/client/default/js/braintree/braintreeMFRA.js","webpack:///./org_irobot/cartridge/client/default/js/braintree/paypal/paypalPayment.js","webpack:///./org_irobot/cartridge/client/default/js/int_braintree.js","webpack:///./storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/components/scrollAnimate.js"],"sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./org_irobot/cartridge/client/default/js/int_braintree.js\");\n","'use strict';\nvar applePay = require('../braintreeApplepay');\nvar {\n    isValidInputField,\n    removeActiveSessionPayment,\n    createPaymentFormData,\n    showCartErrorMsg,\n    updateBillingFormValues\n} = require('./../helper');\n\n\nvar $applePayButton = document.querySelector('.js_braintree_applepay_button');\nvar $applepayButtonsWrap = document.querySelector('.js_braintree_applepayButtonsWrap');\nvar $applepayDataMethod = document.querySelector('.payment-options[role=tablist] .nav-item[data-method-id=\"ApplePay\"]');\nvar $phoneField = document.querySelector('.contact-info-block [name=dwfrm_billing_contactInfoFields_phone]');\n\nfunction makeApplePayButtonDisabled() {\n    $applePayButton.classList.add('js_braintree_applepay_button_disabled');\n}\n\nfunction hideApplePayButton() {\n    $applepayButtonsWrap.style.display = 'none'; // Remove the ApplePay select payment method radiobutton\n    if ($applepayDataMethod) {\n        $applepayDataMethod.style.display = 'none';\n    }\n}\n\nfunction showApplePayButton() {\n    $applepayButtonsWrap.style.display = 'block'; // Show the ApplePay select payment method radiobutton\n    if ($applepayDataMethod) {\n        $applepayDataMethod.style.display = 'block';\n    }\n}\n\nfunction initApplepayButton() {\n    document.querySelectorAll('.js_braintree_applepay_button').forEach(function (el) {\n        var $btn = el;\n        if (JSON.parse($btn.getAttribute('data-is-inited'))) {\n            return;\n        }\n        var config = JSON.parse($btn.getAttribute('data-braintree-config'));\n        if (typeof config !== 'object' || config === null) {\n            // eslint-disable-next-line no-console\n            console.error(el, 'not valid data-braintree-config');\n            return;\n        }\n\n        $btn.addEventListener('braintree:deviceNotSupportApplePay', function () {\n            hideApplePayButton();\n        }, false);\n        $btn.addEventListener('braintree:deviceSupportApplePay', function () {\n            showApplePayButton();\n        }, false);\n        $btn.addEventListener('braintree:ApplePayCanNotMakePaymentWithActiveCard', function () {\n            makeApplePayButtonDisabled();\n        }, false);\n\n        config.isRequiredBillingContactFields = true;\n        config.isRequiredShippingContactFields = true;\n        var applePayIns = applePay.init(config, $btn);\n\n        $btn.addEventListener('click', function () {\n            applePayIns.startPayment();\n        });\n\n        function updateCartApplepayAmount() {\n            if (!applePayIns) {\n                return;\n            }\n            applePayIns.loader.show();\n            $.ajax({\n                url: config.getOrderInfoUrl,\n                type: 'get',\n                dataType: 'json',\n                success: function (data) {\n                    applePayIns.loader.hide();\n                    applePayIns.updateAmount(data.amount);\n                },\n                error: function () {\n                    window.location.reload();\n                }\n            });\n            return;\n        }\n        $('body').on('braintree:updateCartTotals', updateCartApplepayAmount);\n\n        $btn.addEventListener('braintree:ApplePayPaymentAuthorized', function (e) {\n            applePayIns.loader.show();\n            var responseData = e.detail.data;\n            var billingAddressData = responseData.billingAddress;\n\n            var paymentMethodName = JSON.parse($applePayButton.getAttribute('data-braintree-config')).paymentMethodName;\n            var $braintreeCartButtons = document.querySelector('.braintree-cart-buttons-wrap');\n            var placeOrderUrl = $braintreeCartButtons.getAttribute('data-checkout-placeorder-url');\n            var checkoutFromCartUrl = $braintreeCartButtons.getAttribute('data-checkout-from-cart-url');\n            var checkoutFormFields = $braintreeCartButtons.getAttribute('data-checkout-form-fields');\n            var applePayCheckoutFormData = createPaymentFormData(checkoutFormFields, {\n                firstName: billingAddressData.firstName,\n                lastName: billingAddressData.lastName,\n                address1: billingAddressData.streetAddress,\n                address2: billingAddressData.extendedAddress || '',\n                city: billingAddressData.locality,\n                postalCode: billingAddressData.postalCode,\n                stateCode: billingAddressData.region,\n                country: billingAddressData.countryCodeAlpha2,\n                email: billingAddressData.email,\n                phone: billingAddressData.phone,\n                paymentMethod: paymentMethodName\n            });\n\n            var csrfToken = document.querySelector('.braintree-cart-buttons-wrap  #csrf_token');\n            applePayCheckoutFormData.append(csrfToken.name, csrfToken.value);\n            applePayCheckoutFormData.append('braintreeApplePayNonce', responseData.nonce);\n            applePayCheckoutFormData.append('braintreeApplePayDeviceDataInput', responseData.deviceData);\n            applePayCheckoutFormData.append('braintreeApplePayShippingAddress',\n            JSON.stringify(responseData.shippingAddress) || '{}'\n            );\n\n            $.ajax({\n                type: 'POST',\n                url: checkoutFromCartUrl,\n                data: applePayCheckoutFormData,\n                contentType: false,\n                processData: false,\n                success: function (data) {\n                    if (data.error) {\n                        var errorMessage = '';\n                        if (data.fieldErrors.length) {\n                            data.fieldErrors.forEach(function (error, index) {\n                                var keys = Object.keys(error);\n                                if (keys.length) {\n                                    errorMessage += `${keys[index].replace('dwfrm_billing_', '').replace('_', ' ')} ${data.fieldErrors[index][keys[index]]}. `;\n                                }\n                            });\n                            showCartErrorMsg(errorMessage);\n                        }\n\n                        if (data.serverErrors.length) {\n                            data.serverErrors.forEach(function (error) {\n                                errorMessage += `${error}. `;\n                            });\n                            showCartErrorMsg(errorMessage);\n                        }\n\n                        if (data.cartError) {\n                            window.location.href = data.redirectUrl;\n                        }\n                        return;\n                    }\n\n                    window.location.href = placeOrderUrl;\n                },\n                error: function (err) {\n                    if (err && err.redirectUrl) {\n                        window.location.href = err.redirectUrl;\n                    }\n                }\n            });\n        }, false);\n\n        $btn.setAttribute('data-is-inited', true);\n    });\n}\n\nfunction applepayPayment(continueButton) {\n    var config = JSON.parse($applePayButton.getAttribute('data-braintree-config'));\n    if (typeof config !== 'object' || config === null) {\n        // eslint-disable-next-line no-console\n        console.error($applePayButton, 'not valid data-braintree-config');\n    }\n    var applepayButton = $('.js_braintree_applepay_button');\n    applepayButton.on('braintree:deviceNotSupportApplePay', function () {\n        hideApplePayButton();\n    });\n    applepayButton.on('braintree:deviceSupportApplePay', function () {\n        showApplePayButton();\n    });\n    applepayButton.on('braintree:ApplePayCanNotMakePaymentWithActiveCard', function () {\n        makeApplePayButtonDisabled();\n    });\n\n    config.isRequiredBillingContactFields = true;\n    var applePayIns = applePay.init(config, $applePayButton);\n\n    function authorizedApplePayPayment(e) {\n        removeActiveSessionPayment();\n        applePayIns.loader.show();\n        document.querySelector(('#braintreeApplePayNonce')).value = e.detail.data.nonce;\n\n        // Updating Storefront Billing Form data with ApplePay Billing\n        var applePayBillingData = e.detail.data.billingAddress;\n        var storeFrontBillingData = JSON.parse(document.querySelector('.braintree-billing-payment-wrap').getAttribute('data-billing-form-fields-names'));\n        storeFrontBillingData.dwfrm_billing_addressFields_firstName = applePayBillingData.firstName;\n        storeFrontBillingData.dwfrm_billing_addressFields_lastName = applePayBillingData.lastName;\n        storeFrontBillingData.dwfrm_billing_addressFields_address1 = applePayBillingData.streetAddress;\n        storeFrontBillingData.dwfrm_billing_addressFields_address2 = applePayBillingData.extendedAddress || '';\n        storeFrontBillingData.dwfrm_billing_addressFields_city = applePayBillingData.locality;\n        storeFrontBillingData.dwfrm_billing_addressFields_postalCode = applePayBillingData.postalCode;\n        storeFrontBillingData.dwfrm_billing_addressFields_states_stateCode = applePayBillingData.region;\n        storeFrontBillingData.dwfrm_billing_addressFields_country = applePayBillingData.countryCodeAlpha2;\n        storeFrontBillingData.dwfrm_billing_contactInfoFields_email = applePayBillingData.email;\n        storeFrontBillingData.dwfrm_billing_contactInfoFields_phone = applePayBillingData.phone;\n\n        updateBillingFormValues(storeFrontBillingData);\n        continueButton.click();\n    }\n\n    if (!applePayIns) return;\n    $applePayButton.addEventListener('click', function () {\n        if (isValidInputField($phoneField)) {\n            return applePayIns.startPayment();\n        }\n    });\n\n    applepayButton.on('braintree:ApplePayPaymentAuthorized', authorizedApplePayPayment);\n\n    function appleUpdateAmountData() { // eslint-disable-line no-inner-declarations\n        applePayIns.loader.show();\n        $.ajax({\n            url: config.getOrderInfoUrl,\n            type: 'get',\n            dataType: 'json',\n            success: function (data) {\n                applePayIns.loader.hide();\n                applePayIns.updateAmount(data.amount);\n            },\n            error: function () {\n                window.location.reload();\n            }\n        });\n    }\n    $('body').on('checkout:updateCheckoutView', appleUpdateAmountData);\n    appleUpdateAmountData();\n}\n\n/*\n    Remove method was used and change appearance of applepay tab\n**/\nfunction removeSessionNonce() {\n    document.querySelector('#braintreeApplePayNonce').value = '';\n    document.querySelector('#braintreeApplePayDeviceData').value = '';\n}\n\nmodule.exports = {\n    initApplepayButton,\n    applepayPayment,\n    removeSessionNonce\n};\n","'use strict';\nvar braintreeUtils = require('./braintreeUtils');\nvar loaderInstance = require('./loaderHelper');\n/* global braintreeUtils braintree $ ApplePaySession */\n\nvar bu = braintreeUtils;\nvar loader;\n\nfunction Constructor(initParams, $btn) {\n    this.$btn = $btn;\n    var $errorContainer = document.createElement('div');\n    $errorContainer.className = 'error';\n    var $loaderContainter = document.querySelector('.braintreeApplePayLoader');\n    loader = loaderInstance($loaderContainter);\n    this.loader = loader;\n    $btn.parentNode.insertBefore($errorContainer, $btn.nextSibling);\n    this.params = initParams;\n    this.er = bu.createErrorInstance($errorContainer);\n}\n\nConstructor.prototype.createApplePay = function () {\n    var that = this;\n    var params = that.params;\n    this.$braintreeApplePayDeviceDataInput = document.querySelector('input[name=braintreeApplePayDeviceDataInput]');\n    loader.show();\n\n    braintree.client.create({\n        authorization: bu.clientToken\n    }, function (clientErr, clientInstance) {\n        if (clientErr) {\n            that.er.show(clientErr);\n            return;\n        }\n\n        if (params.isFraudToolsEnabled) {\n            braintree.dataCollector.create({\n                client: clientInstance,\n                paypal: true\n            }, function (dataCollectorErr, dataCollectorInstance) {\n                if (dataCollectorErr) {\n                    that.er.show(dataCollectorErr);\n                    return;\n                }\n\n                if (that.$braintreeApplePayDeviceDataInput) {\n                    that.$braintreeApplePayDeviceDataInput.value = dataCollectorInstance.deviceData;\n                }\n                that.loader.hide();\n            });\n        }\n\n        braintree.applePay.create({\n            client: clientInstance\n        }, function (error, applePayInstance) {\n            loader.hide();\n            if (error) {\n                that.er.show(error);\n                return;\n            }\n            that.createApplePaySession = function () {\n                var paymentRequest = applePayInstance.createPaymentRequest({\n                    total: {\n                        label: params.options.displayName,\n                        amount: params.options.amount\n                    }\n                });\n                if (params.isRequiredBillingContactFields) {\n                    paymentRequest.requiredBillingContactFields = ['postalAddress', 'name'];\n                }\n                if (params.isRequiredShippingContactFields) {\n                    paymentRequest.requiredShippingContactFields = ['postalAddress', 'name', 'phone', 'email'];\n                }\n\n                var session = new ApplePaySession(1, paymentRequest);\n\n                session.onvalidatemerchant = function (event) {\n                    loader.show();\n                    applePayInstance.performValidation({\n                        validationURL: event.validationURL,\n                        displayName: params.options.displayName\n                    }, function (eventError, merchantSession) {\n                        loader.hide();\n                        if (eventError) {\n                            that.er.show(eventError);\n                            session.abort();\n                            return;\n                        }\n                        session.completeMerchantValidation(merchantSession);\n                    });\n                };\n                session.onpaymentauthorized = function (event) {\n                    loader.show();\n                    applePayInstance.tokenize({\n                        token: event.payment.token\n                    }, function (eventError, payload) {\n                        loader.hide();\n                        if (eventError) {\n                            that.er.show(eventError);\n                            session.completePayment(ApplePaySession.STATUS_FAILURE);\n                            return;\n                        }\n\n                        session.completePayment(ApplePaySession.STATUS_SUCCESS);\n\n                        var data = {\n                            event: event,\n                            payload: payload,\n                            nonce: payload.nonce,\n                            deviceData: document.querySelector('input[name=braintreeApplePayDeviceDataInput]').value\n                        };\n                        var shippingContact = event.payment.shippingContact;\n                        if (shippingContact) {\n                            data.shippingAddress = {\n                                streetAddress: shippingContact.addressLines[0],\n                                extendedAddress: shippingContact.addressLines[1],\n                                locality: shippingContact.locality,\n                                region: shippingContact.administrativeArea.toUpperCase(),\n                                postalCode: shippingContact.postalCode,\n                                countryCodeAlpha2: shippingContact.countryCode.toUpperCase(),\n                                firstName: shippingContact.givenName,\n                                lastName: shippingContact.familyName,\n                                phone: shippingContact.phoneNumber,\n                                email: shippingContact.emailAddress\n                            };\n                        } else {\n                            shippingContact = {\n                                emailAddress: document.querySelector('.customer-summary-email').innerHTML,\n                                phoneNumber: document.querySelector('.contact-info-block [name=dwfrm_billing_contactInfoFields_phone]').value\n                            };\n                        }\n\n                        var billingContact = event.payment.billingContact;\n                        if (billingContact) {\n                            data.billingAddress = {\n                                streetAddress: billingContact.addressLines[0],\n                                extendedAddress: billingContact.addressLines[1],\n                                locality: billingContact.locality,\n                                region: billingContact.administrativeArea.toUpperCase(),\n                                postalCode: billingContact.postalCode,\n                                countryCodeAlpha2: billingContact.countryCode.toUpperCase(),\n                                firstName: billingContact.givenName,\n                                lastName: billingContact.familyName,\n                                email: shippingContact.emailAddress,\n                                phone: shippingContact.phoneNumber\n                            };\n                        }\n\n                        that.$btn.dispatchEvent(new CustomEvent('braintree:ApplePayPaymentAuthorized', {\n                            detail: {\n                                data: data\n                            }\n                        }));\n                    });\n                };\n                session.begin();\n            };\n            var promise = ApplePaySession.canMakePaymentsWithActiveCard(applePayInstance.merchantIdentifier);\n            promise.then(function (canMakePaymentsWithActiveCard) {\n                if (!canMakePaymentsWithActiveCard) {\n                    that.$btn.dispatchEvent(new CustomEvent('braintree:ApplePayCanNotMakePaymentWithActiveCard'));\n                    that.createApplePaySession = null;\n                    return;\n                }\n            });\n        });\n    });\n};\n\nConstructor.prototype.startPayment = function () {\n    this.er.hide();\n    if (this.createApplePaySession) {\n        this.createApplePaySession();\n    }\n};\n\nConstructor.prototype.updateAmount = function (amount) {\n    this.params.options.amount = amount;\n};\n\nmodule.exports = {\n    init: function (params, $btn) {\n        if (!window.ApplePaySession) {\n            $btn.dispatchEvent(new CustomEvent('braintree:deviceNotSupportApplePay'));\n            return false;\n        }\n        $btn.dispatchEvent(new CustomEvent('braintree:deviceSupportApplePay'));\n        var ins = new Constructor(params, $btn);\n        bu.clientToken = params.clientToken;\n        $.extend(bu.messages, params.messages);\n        ins.createApplePay();\n        return ins;\n    }\n};\n\n","/* eslint-disable block-scoped-var */\n'use strict';\nvar braintreeUtils = require('./braintreeUtils');\nvar loaderInstance = require('./loaderHelper');\nvar creditcardHelper = require('./creditcard/creditcardHelper');\n\n/* global braintreeUtils braintree $ */\n\nvar bu = braintreeUtils;\nvar er = null;\nvar loader;\nvar params;\n\nfunction createHostedFields() {\n    if (params.isFraudToolsEnabled) {\n        loader.show();\n        braintree.dataCollector.create({\n            authorization: bu.clientToken,\n            kount: true,\n            paypal: false\n        }, function (error, data) {\n            loader.hide();\n            if (error) {\n                return;\n            }\n            document.querySelector('#braintreeDeviceData').value = data.deviceData;\n        });\n    }\n    loader.show();\n\n    braintree.hostedFields.create({\n        authorization: bu.clientToken,\n        styles: params.hostedFieldsStyles,\n        fields: params.hostedFieldsConfig\n    }, function (error, hostedFieldsInstance) {\n        loader.hide();\n        if (error) {\n            er.show(error);\n            return;\n        }\n        params.hostedFieldsInstance = hostedFieldsInstance;\n        hostedFieldsInstance.on('validityChange', function () {\n            if (params.continueButton && JSON.parse(params.continueButton.getAttribute('data-is-allow-submit-form'))) {\n                params.continueButton.setAttribute('data-is-allow-submit-form', false);\n            }\n        });\n    });\n}\n\nfunction isFormValid() {\n    if (params.data && params.data.amount === 0) {\n        er.show('Order total 0 is not allowed for Credit Card');\n        return false;\n    }\n    var $cardOwnerEl = document.querySelector('#braintreeCardOwner');\n    if ($cardOwnerEl.value.length === 0) {\n        $cardOwnerEl.parentNode.classList.add('braintree-hosted-fields-invalid');\n        er.show(params.messages.validation);\n        return false;\n    }\n    $cardOwnerEl.parentNode.classList.remove('braintree-hosted-fields-invalid');\n    er.hide();\n\n    return true;\n}\n\nfunction clearHostedFields() {\n    params.hostedFieldsInstance.clear('number');\n    params.hostedFieldsInstance.clear('cvv');\n    params.hostedFieldsInstance.clear('expirationDate');\n}\n\nfunction check3dSecureAndSubmit(response, startTokenizeCb) {\n    if (!response.nonce || response.nonce === 'null') {\n        document.querySelector('#braintreeCreditCardNonce').value = 'null';\n        startTokenizeCb({\n            error: true,\n            errorCode: 'nonce_is_null'\n        });\n        return;\n    }\n    if (!params.is3dSecureEnabled) {\n        document.querySelector('#braintreeCreditCardNonce').value = response.nonce;\n        startTokenizeCb({\n            error: false,\n            errorCode: 'ok'\n        });\n        return;\n    }\n\n    loader.show();\n\n    var billingData = require('./helper').getBillingAddressFormValues();\n\n    braintree.threeDSecure.create({\n        authorization: bu.clientToken,\n        version: 2\n    }, function (error, threeDSecure) {\n        loader.hide();\n        if (error) {\n            er.show(error);\n            startTokenizeCb({\n                error: true,\n                errorCode: 'bt_3dsecure_create_error',\n                btError: error\n            });\n            return;\n        }\n        bu.threeDSecure = threeDSecure;\n        loader.show();\n        threeDSecure.verifyCard({\n            amount: params.data.amount,\n            nonce: response.nonce,\n            bin: response.details ? response.details.bin : '',\n            email: document.querySelector('#email').value,\n            billingAddress: {\n                givenName: billingData.firstName,\n                surname: billingData.lastName,\n                phoneNumber: billingData.phone,\n                streetAddress: billingData.address1,\n                extendedAddress: billingData.address2,\n                locality: billingData.city,\n                region: billingData.stateCode,\n                postalCode: billingData.postalCode,\n                countryCodeAlpha2: billingData.country\n            },\n            additionalInformation: params.data.shippingAdditionalInfo,\n            onLookupComplete: function (data, next) {\n                next();\n            }\n        }, function (err, data) {\n            loader.hide();\n            if (err) {\n                er.show(err);\n                startTokenizeCb({\n                    error: true,\n                    errorCode: 'bt_3dsecure_verify_error',\n                    btError: err\n                });\n                return;\n            }\n            if (data.liabilityShifted || params.isSkip3dSecureLiabilityResult) {\n                document.querySelector('#braintreeIs3dSecureRequired').value = 'true';\n                document.querySelector('#braintreeCreditCardNonce').value = data.nonce;\n                startTokenizeCb({\n                    error: false,\n                    result: 'ok'\n                });\n                return;\n            }\n            er.show(params.messages.secure3DFailed);\n            startTokenizeCb({\n                error: true,\n                result: 'secure3DFailed'\n            });\n            return;\n        });\n    });\n}\n/**\n * Creates tokenization options for 'tokenize' function.\n * @returns {Object} Object with tokenization options.\n */\nfunction createTokenizationOptions() {\n    var billingData = require('./helper').getBillingAddressFormValues();\n    return {\n        billingAddress: {\n            firstName: billingData.firstName,\n            lastName: billingData.lastName,\n            streetAddress: billingData.address1.split('%20').join(' '),\n            extendedAddress: billingData.address2 ? billingData.address2.split('%20').join(' ') : billingData.address2,\n            locality: billingData.city.includes('%20') ? billingData.city.split('%20').join(' ') : billingData.city,\n            region: billingData.stateCode,\n            postalCode: billingData.postalCode,\n            countryCodeAlpha2: billingData.country.includes('$20') ? billingData.country.split('%20').join(' ') : billingData.country\n        }\n    };\n}\n\nfunction startTokenize(cb, response) {\n    var tokenizationOptions;\n    if (response && response.nonce) {\n        check3dSecureAndSubmit(response, cb);\n        return;\n    }\n    if (!isFormValid()) {\n        cb({\n            error: true,\n            errorCode: 'fields_not_valid'\n        });\n        return;\n    }\n    loader.show();\n\n    if ($('#dwfrm_billing').length > 0) {\n        tokenizationOptions = createTokenizationOptions();\n    } else {\n        tokenizationOptions = {};\n    }\n\n    params.hostedFieldsInstance.tokenize(tokenizationOptions, function (error, data) {\n        loader.hide();\n        if (error) {\n            er.show(error);\n            cb({\n                error: true,\n                errorCode: 'bt_tokenize_error',\n                btError: error\n            });\n            return;\n        }\n        if (data.type === 'CreditCard') {\n            document.querySelector('#braintreeCardType').value = creditcardHelper.convertCardTypeToDwFormat(data.details.cardType);\n            document.querySelector('#braintreeCardMaskNumber').value = '************' + data.details.lastFour;\n            document.querySelector('#braintreeCardExpirationMonth').value = data.details.expirationMonth;\n            document.querySelector('#braintreeCardExpirationYear').value = data.details.expirationYear.substr(2);\n            var creditCardFieldsCardNumber = document.querySelector('input[name=dwfrm_billing_creditCardFields_cardNumber]');\n            if (creditCardFieldsCardNumber) {\n                creditCardFieldsCardNumber.value = '************' + data.details.lastFour;\n            }\n\n            if (document.querySelector('.form-group.braintree_used_creditcard_account')) {\n                var $cardOwner = document.querySelector('#braintreeCardOwner').getAttribute('data-new-cart-value');\n                document.querySelector('#braintreeCardOwnerPh').textContent = $cardOwner;\n                document.querySelector('#braintreeCardNumberPh').textContent = '************' + data.details.lastFour;\n                document.querySelector('#braintreeCvvPh').textContent = '***';\n                document.querySelector('#braintreeExpirationPh').textContent = data.details.expirationMonth + '/' + data.details.expirationYear.substr(2);\n\n                var selectedCard = document.querySelector('#braintreeSessionCreditAccount');\n                selectedCard.classList.remove('used-creditcard-account-hide');\n                selectedCard.setAttribute('data-number', '************' + data.details.lastFour);\n                selectedCard.setAttribute('data-expiration', data.details.expirationMonth + '/' + data.details.expirationYear.substr(2));\n                selectedCard.setAttribute('data-type', creditcardHelper.convertCardTypeToDwFormat(data.details.cardType));\n                selectedCard.setAttribute('data-owner', $cardOwner);\n                selectedCard.setAttribute('data-nonce', data.nonce);\n            }\n        }\n        check3dSecureAndSubmit(data, cb);\n    });\n}\n\nfunction init(initParams) {\n    params = initParams;\n    bu.clientToken = params.clientToken;\n}\n\nfunction initFields(initParams, $container) {\n    params = initParams;\n    params.$container = $container;\n\n    er = bu.createErrorInstance(document.querySelector('#braintreeCreditCardErrorContainer'), creditcardHelper.creditcardErrorContainer);\n    loader = loaderInstance(document.querySelector('#braintreeCreditCardLoader'));\n    bu.clientToken = params.clientToken;\n    $.extend(bu.messages, params.messages);\n\n    creditcardHelper.cardOwnerEvents();\n\n    function getHostedFieldsStyles() {\n        return {\n            input: {\n                'font-size': '12px',\n                color: '#b7802a'\n            },\n            ':focus': {\n                color: 'blue'\n            },\n            '.valid': {\n                color: 'green'\n            },\n            '.invalid': {\n                color: 'red'\n            }\n        };\n    }\n\n    function getHostedFieldsConfig() {\n        return {\n            number: {\n                selector: '#braintreeCardNumber'\n            },\n            cvv: {\n                selector: '#braintreeCvv'\n            },\n            expirationDate: {\n                selector: '#braintreeExpirationDate'\n            }\n        };\n    }\n\n    if (!params.hostedFieldsStyles) {\n        params.hostedFieldsStyles = getHostedFieldsStyles();\n    }\n\n    params.hostedFieldsConfig = getHostedFieldsConfig();\n\n    $.extend(params.hostedFieldsConfig, params.hostedFieldsAdvancedOptions);\n\n    createHostedFields();\n}\n\nmodule.exports = {\n    init,\n    initFields,\n    startTokenize,\n    isFormValid,\n    getHostedFieldInstance: function () {\n        return params ? params.hostedFieldsInstance : null;\n    },\n    updateData: function (data) {\n        params.data = data;\n    },\n    clearHostedFields\n};\n","'use strict';\nvar braintreeUtils = require('./braintreeUtils');\nvar loaderInstance = require('./loaderHelper');\nvar paypalHelper = require('./paypal/paypalHelper');\nvar { showCartErrorMsg } = require('./helper');\n/* global braintreeUtils braintree $ Googlepay */\n\nvar bu = braintreeUtils;\nvar loader;\n\nvar $googlepayCartButton = document.querySelector('.braintree-cart-google-button');\nvar $googlepayBillingButton = document.querySelector('.braintree-billingpage-google-button');\n\nfunction Constructor(initParams, $btn) {\n    this.$btn = $btn;\n    var $errorContainer = document.createElement('div');\n    $errorContainer.className = 'error';\n    var $loaderContainter = document.querySelector('.braintreeGooglepayLoader');\n    loader = loaderInstance($loaderContainter);\n    this.loader = loader;\n    $btn.parentNode.insertBefore($errorContainer, $btn.nextSibling);\n    this.params = initParams;\n    this.er = bu.createErrorInstance($errorContainer);\n}\n\nConstructor.prototype.createGooglepay = function () {\n    var that = this;\n    var params = that.params;\n    this.$braintreeGooglePayDeviceDataInput = document.querySelector('input[name=braintreeGooglePayDeviceDataInput]');\n\n    var paymentsClient = new google.payments.api.PaymentsClient({ // eslint-disable-line no-undef\n        environment: 'TEST' // Or 'PRODUCTION'\n    });\n\n    braintree.client.create({\n        authorization: params.clientToken\n    }, function (clientErr, clientInstance) {\n        if (clientErr) {\n            that.er.show(clientErr);\n            return;\n        }\n        if (params.isFraudToolsEnabled) {\n            braintree.dataCollector.create({\n                client: clientInstance,\n                paypal: true\n            }, function (dataCollectorErr, dataCollectorInstance) {\n                if (dataCollectorErr) {\n                    that.er.show(dataCollectorErr);\n                    return;\n                }\n\n                if (that.$braintreeGooglePayDeviceDataInput) {\n                    that.$braintreeGooglePayDeviceDataInput.value = dataCollectorInstance.deviceData;\n                }\n                that.loader.hide();\n            });\n        }\n        braintree.googlePayment.create({\n            client: clientInstance,\n            googlePayVersion: 2\n        }, function (googlePaymentErr, googlePaymentInstance) {\n            if (googlePaymentErr) {\n                that.er.show(googlePaymentErr);\n                return;\n            }\n            var allowedPaymentMethods = googlePaymentInstance.createPaymentDataRequest().allowedPaymentMethods;\n            paymentsClient.isReadyToPay({\n                // see https://developers.google.com/pay/api/web/reference/object#IsReadyToPayRequest\n                apiVersion: 2,\n                apiVersionMinor: 0,\n                allowedPaymentMethods: allowedPaymentMethods\n            }).then(function (response) {\n                if (response.result) {\n                    function onGooglePaymentButtonClicked() { // eslint-disable-line no-inner-declarations\n                        if (params.options.amount === 0 && !params.options.isAccount) {\n                            var zeroAmountErrorMsg = 'Order total 0 is not allowed for GooglePay';\n                            if ($googlepayCartButton) showCartErrorMsg(zeroAmountErrorMsg);\n                            if ($googlepayBillingButton) paypalHelper.showCheckoutErrorMsg(zeroAmountErrorMsg);\n                            return;\n                        }\n                        loader.show();\n                        var paymentDataRequest = googlePaymentInstance.createPaymentDataRequest({\n                            transactionInfo: {\n                                currencyCode: params.options.currency,\n                                totalPriceStatus: 'FINAL',\n                                totalPrice: String(params.options.amount)\n                            },\n                            shippingAddressRequired: params.options.isShippingAddressRequired,\n                            shippingAddressParameters: {\n                                allowedCountryCodes: ['US'],\n                                phoneNumberRequired: true\n                            },\n                            emailRequired: true\n                        });\n                        var cardPaymentMethod = paymentDataRequest.allowedPaymentMethods[0];\n                        cardPaymentMethod.parameters.billingAddressRequired = true;\n                        cardPaymentMethod.parameters.billingAddressParameters = {\n                            format: 'FULL',\n                            phoneNumberRequired: true\n                        };\n                        paymentsClient.loadPaymentData(paymentDataRequest).then(function (paymentData) {\n                            googlePaymentInstance.parseResponse(paymentData, function (err, result) {\n                                if (err) {\n                                    loader.hide();\n                                    // Handle parsing error\n                                }\n                                params.onTokenizePayment(paymentData, result);\n                            });\n                            loader.hide();\n                        }).catch(function (err) {\n                            loader.hide();\n                            // eslint-disable-next-line no-console\n                            console.log(err);\n                        });\n                    }\n                    const button = paymentsClient.createButton({ onClick: onGooglePaymentButtonClicked });\n                    that.$btn.appendChild(button);\n                    loader.hide();\n                }\n            }).catch(function (err) {\n                loader.hide();\n                // eslint-disable-next-line no-console\n                console.log(err);\n            });\n        });\n        // Set up other Braintree components\n    });\n};\n\nConstructor.prototype.updateAmount = function (amount) {\n    this.params.options.amount = amount;\n};\n\nmodule.exports = {\n    init: function (params, $btn) {\n        bu.clientToken = params.clientToken;\n        return new Constructor(params, $btn);\n    }\n};\n","/* eslint-disable no-use-before-define */\n'use strict';\n\n/* global braintreeUtils braintree $ VenmoSession */\nvar braintreeUtils = require('./braintreeUtils');\nvar loaderInstance = require('./loaderHelper');\nvar paypalHelper = require('./paypal/paypalHelper');\nvar { isValidInputField } = require('./helper');\nvar scrollAnimate = require('base/components/scrollAnimate');\nconst errorText = 'An error occurred. Please try again later or choose different payment method.';\n\nvar bu = braintreeUtils;\nvar loader;\n\nfunction Constructor(initParams, $btn) {\n    this.$btn = $btn;\n    var $errorContainer = document.createElement('div');\n    $errorContainer.className = 'lpm-error';\n    var $loaderContainter = document.querySelector('.lpmLoader');\n    loader = loaderInstance($loaderContainter);\n    this.loader = loader;\n    $btn.parentNode.insertBefore($errorContainer, $btn.nextSibling);\n    this.params = initParams;\n    this.er = bu.createErrorInstance($errorContainer);\n}\n\nConstructor.prototype.createLocalPayment = function () {\n    var that = this;\n    var params = that.params;\n    // Create a client.\n    braintree.client.create({\n        authorization: params.clientToken\n    }).then(function (clientInstance) {\n        // Create a local payment component.\n        return braintree.localPayment.create({\n            client: clientInstance\n        });\n    }).then(function (localPaymentInstance) {\n        function createLocalPaymentClickListener(type) {\n            var emailField = document.querySelector('#email');\n            return function (event) {\n                event.preventDefault();\n                if (params.options.amount === 0) {\n                    paypalHelper.showCheckoutErrorMsg('Order total 0 is not allowed for ' + type);\n                    that.loader.hide();\n                    return;\n                }\n\n                if (emailField && emailField.value !== '' && !isValidInputField(emailField)) {\n                    that.loader.hide();\n                    return;\n                }\n\n                that.loader.show();\n                document.querySelector('.processingMsg').style.display = 'block';\n                $.getJSON(that.params.getOrderInfoUrl)\n                    .then(({ shippingAddress }) => {\n                        const reqData = Object.assign(createRequestData(\n                            shippingAddress, that.params, type),\n                            { onPaymentStart: (_, start) => start() });\n                        // Saving shippingAddress + email in a case if startPayment will return {} details object\n                        that.params.shippingAddress = shippingAddress;\n                        that.params.shippingAddress.email = emailField.value;\n\n                        localPaymentInstance.startPayment(reqData).then(({ nonce, details, correlationId }) => {\n                            var processingMsg = document.querySelector('.processingMsg');\n                            var finalProcessingMsg = document.querySelector('.finalProcessingMsg');\n                            processingMsg.style.display = 'none';\n                            finalProcessingMsg.style.display = 'block';\n                            return $.ajax({\n                                url: params.paymentConfirmUrl,\n                                type: 'POST',\n                                contentType: 'application/json',\n                                data: JSON.stringify({\n                                    nonce: nonce,\n                                    lpmName: type,\n                                    details: jQuery.isEmptyObject(details) ? that.params.shippingAddress : details,\n                                    deviceData: JSON.stringify({ correlation_id: correlationId })\n                                })\n                            });\n                        }).then(({ redirectUrl }) => {\n                            that.loader.hide();\n                            window.location.href = redirectUrl;\n                        }).catch(function (err) {\n                            that.loader.hide();\n                            $('.error-message').show();\n                            $('.error-message-text').text(err.message);\n                            scrollAnimate($('.error-message'));\n                        });\n                    })\n                    .catch(function (err) {\n                        if (err.responseText !== '') { errorText = err.responseText; }\n                        that.loader.hide();\n                        $('.error-message').show();\n                        $('.error-message-text').text(errorText);\n                        scrollAnimate($('.error-message'));\n                    });\n            };\n        }\n        var paymentMethod = that.$btn.dataset.localPaymentMethodName;\n        that.$btn.addEventListener('click', createLocalPaymentClickListener(paymentMethod));\n    });\n};\n\nfunction createRequestData(shippingData, params, type) {\n    var email = document.querySelector('#email').value;\n    var recipientName = shippingData.recipientName.split(' ');\n    shippingData.firstName = recipientName[0];\n    shippingData.lastName = recipientName[1];\n    return {\n        paymentType: type,\n        amount: params.options.amount,\n        fallback: {\n            url: params.fallbackUrl + '?lpmName=' + type + '&email=' + email,\n            buttonText: 'Complete Payment'\n        },\n        currencyCode: params.options.currency,\n        shippingAddressRequired: false,\n        email: email,\n        phone: shippingData && shippingData.phone,\n        givenName: shippingData && shippingData.firstName,\n        surname: shippingData && shippingData.lastName,\n        address: {\n            countryCode: shippingData && shippingData.countryCode\n        }\n    };\n}\nConstructor.prototype.updateShippingData = function () {\n    var localIns = this;\n    localIns.loader.show();\n    return $.getJSON(localIns.params.getOrderInfoUrl);\n};\n\n\nConstructor.prototype.updateShippingAddress = function (data) {\n    if (data) {\n        var recipientName = data.recipientName.split(' ');\n        data.firstName = recipientName[0];\n        data.lastName = recipientName[1];\n        this.shippingData = data;\n    }\n};\n\nConstructor.prototype.updateAmount = function (amount) {\n    this.params.options.amount = amount;\n};\n\nmodule.exports = {\n    init: function (params, $btn) {\n        bu.clientToken = params.clientToken;\n        return new Constructor(params, $btn);\n    }\n};\n","/* eslint-disable no-inner-declarations */\n/* eslint-disable new-cap */\n'use strict';\n\n/* global braintreeUtils braintree paypal $ */\nvar braintreeUtils = require('./braintreeUtils');\nvar loaderInstance = require('./loaderHelper');\nvar paypalHelper = require('./paypal/paypalHelper');\nvar { showCartErrorMsg } = require('./helper');\n\nvar bu = braintreeUtils;\nvar console = bu.console;\n\nvar pid;\nvar uuid;\nvar removeFromCartUrl;\nvar loader;\nvar $price;\nvar sdkUrlConfiguration;\nvar isZeroAmount = false;\nvar $braintreePDPButton = document.querySelector('.braintree_pdp_button');\nvar $miniCartQuantity = document.querySelector('.minicart-quantity');\nvar $addToCartButton = document.querySelector('.add-to-cart') || document.querySelector('.add-to-cart-global');\nvar $paypalCartButton = document.querySelector('.js_braintree_paypal_cart_button');\nvar $paypalBillingButton = document.querySelector('.js_braintree_paypal_billing_button');\n\nfunction Constructor(initParams, $btn) {\n    var params = initParams;\n    this.params = initParams;\n    params.options = params.options || {};\n\n    this.$btn = $btn;\n    var $errorContainer = document.createElement('div');\n    $errorContainer.className = 'error';\n\n    if (params.$errorContainer) {\n        $errorContainer = params.$errorContainer;\n        delete params.$errorContainer;\n    }\n\n    var $loaderContainter = document.querySelector('.braintreePayPalLoader');\n    var $braintreePaypalRiskDataInput = document.querySelector('input[name=braintreePaypalRiskData]');\n\n    if (params.$loaderContainer) {\n        $loaderContainter = params.$loaderContainer;\n    }\n\n    $btn.parentNode.insertBefore($errorContainer, $btn.nextSibling);\n\n    this.er = bu.createErrorInstance($errorContainer);\n    loader = loaderInstance($loaderContainter);\n    this.loader = loader;\n    var that = this;\n\n    if (params.isFraudToolsEnabled) {\n        loader.show();\n        braintree.dataCollector.create({\n            authorization: bu.clientToken,\n            paypal: true,\n            kount: false\n        }, function (error, data) {\n            loader.hide();\n            if (error) {\n                console.log(error);\n                return;\n            }\n            if ($braintreePaypalRiskDataInput) {\n                $braintreePaypalRiskDataInput.value = data.deviceData;\n            }\n            params.riskData = data.deviceData;\n        });\n    }\n\n    if ($braintreePDPButton) {\n        $price = document.querySelector('.price .sales .value');\n        // Check minicart quantity and hide PDPbutton if it is not empty\n        if (($miniCartQuantity && parseInt($miniCartQuantity.textContent, 0) > 0)\n            || ($price && $price.getAttribute('content') === '0.00')) {  // Check if product price is zero\n            paypalHelper.hidePDPButton($braintreePDPButton);\n        }\n    }\n\n    loader.show();\n\n    braintree.client.create({\n        authorization: bu.clientToken\n    }).then(function (clientInstance) {\n        return braintree.paypalCheckout.create({\n            client: clientInstance\n        });\n    }).then(function (paypalCheckoutInstance) {\n        if ($braintreePDPButton) {\n            if ($addToCartButton.disabled) {\n                paypalHelper.hidePDPButton($braintreePDPButton);\n            }\n            $('body').on('cart:update', function () {\n                $miniCartQuantity = parseInt(document.querySelector('.minicart-quantity').textContent, 0);\n                if ($addToCartButton.disabled) {\n                    paypalHelper.hidePDPButton($braintreePDPButton);\n                }\n                if ($miniCartQuantity === 0 && !$addToCartButton.disabled) {\n                    paypalHelper.showPDPButton($braintreePDPButton);\n                }\n            });\n\n            $('body').on('product:afterAddToCart', function () {\n                paypalHelper.hidePDPButton($braintreePDPButton);\n            });\n\n            // Update addToCart button status\n            $('body').on('product:statusUpdate', function () {\n                $miniCartQuantity = parseInt(document.querySelector('.minicart-quantity').textContent, 0);\n                $price = document.querySelector('.price .sales .value');\n                isZeroAmount = false;\n                if ($braintreePDPButton && $price) {\n                    isZeroAmount = $price.getAttribute('content') === '0.00';\n                }\n\n                if ($miniCartQuantity === 0) {\n                    if ($addToCartButton.disabled || isZeroAmount) {\n                        paypalHelper.hidePDPButton($braintreePDPButton);\n                    }\n                    if (!$addToCartButton.disabled && !isZeroAmount) {\n                        paypalHelper.showPDPButton($braintreePDPButton);\n                    }\n                }\n            });\n        }\n\n        var payment = function () {\n            if ($braintreePDPButton && $braintreePDPButton.style.display === '') {\n                that.er.hide();\n                var res = braintreeUtils.pdpOnlickForAsignedPaypalPayment();\n                if (res.cart) {\n                    uuid = res.pliUUID;\n                    removeFromCartUrl = res.cart.actionUrls.removeProductLineItemUrl;\n                    pid = res.pid;\n                    that.params.options.amount = parseFloat(res.cart.totals.grandTotal.replace(/\\$|,/g, ''));\n                } else {\n                    throw new Error(res.message || 'Error occurs');\n                }\n            }\n            return paypalCheckoutInstance.createPayment(that.params.options);\n        };\n\n        var paypalButtonConfig = {\n            locale: params.options.locale,\n            onApprove: function (data) {\n                if (params.options.intent === 'order') {\n                    data.intent = 'order';\n                }\n                return paypalCheckoutInstance.tokenizePayment(data).then(function (payload) {\n                    params.onTokenizePayment(payload, that);\n                });\n            },\n            onCancel: function (a, b) {\n                if (typeof params.options.onCancel === 'function') {\n                    params.options.onCancel(a, b);\n                }\n                if ($braintreePDPButton && $braintreePDPButton.style.display === '') {\n                    var urlParams = {\n                        pid: pid,\n                        uuid: uuid\n                    };\n\n                    $.ajax({\n                        url: paypalHelper.appendToUrl(removeFromCartUrl, urlParams),\n                        type: 'get',\n                        dataType: 'json',\n                        success: function () {\n                            $.spinner().stop();\n                        },\n                        error: function () {\n                            $.spinner().stop();\n                        }\n                    });\n                }\n            },\n            onError: function (err) {\n                that.er.show(err.message.split(/\\r?\\n/g)[0]);\n\n                if ($braintreePDPButton && $braintreePDPButton.style.display === '' && pid) {\n                    var productID = pid;\n                    var urlParams = {\n                        pid: productID,\n                        uuid: uuid\n                    };\n\n                    $.ajax({\n                        url: paypalHelper.appendToUrl(removeFromCartUrl, urlParams),\n                        type: 'get',\n                        dataType: 'json',\n                        success: function () {\n                            $.spinner().stop();\n                        },\n                        error: function () {\n                            $.spinner().stop();\n                        }\n                    });\n                }\n            }\n        };\n\n        isZeroAmount = that.params.options.amount === 0;\n        if (isZeroAmount) {\n            var zeroAmountErrorMsg = 'Order total 0 is not allowed for PayPal';\n            paypalButtonConfig.onClick = function (_, actions) {\n                if ($paypalCartButton) showCartErrorMsg(zeroAmountErrorMsg);\n                if ($paypalBillingButton) paypalHelper.showCheckoutErrorMsg(zeroAmountErrorMsg);\n                return actions.reject();\n            };\n        }\n\n        if (params.options && params.options.flow === 'checkout') {\n            paypalButtonConfig.createOrder = payment;\n            sdkUrlConfiguration = {\n                intent: params.options.intent,\n                currency: params.options.currency,\n                components: 'buttons,messages',\n                commit: false,\n                'disable-funding': 'card,credit'\n            };\n        } else {\n            paypalButtonConfig.createBillingAgreement = payment;\n            sdkUrlConfiguration = {\n                vault: true,\n                components: 'buttons,messages',\n                'disable-funding': 'card,credit'\n            };\n        }\n\n        paypalButtonConfig = $.extend(false, paypalButtonConfig, that.params.paypalConfig);\n        loader.hide();\n\n        if (!window.isPayPalSDKLoaded) {\n            paypalCheckoutInstance.loadPayPalSDK(sdkUrlConfiguration).then(function () {\n                window.isPayPalSDKLoaded = true;\n                return paypal.Buttons(paypalButtonConfig).render(that.$btn);\n            });\n        } else {\n            return paypal.Buttons(paypalButtonConfig).render(that.$btn);\n        }\n    }).catch(function (err) {\n        console.error('Error!', err);\n        loader.hide();\n    });\n}\n\nConstructor.prototype.updateAmount = function (amount) {\n    this.params.options.amount = amount;\n};\n\nConstructor.prototype.updateShippingAddress = function (data) {\n    this.params.options.shippingAddressOverride = data;\n};\n\nmodule.exports = {\n    init: function (params, $btn) {\n        bu.clientToken = params.clientToken;\n        $.extend(bu.messages, params.messages);\n        return new Constructor(params, $btn);\n    }\n};\n","/* eslint-disable no-undef */\n'use strict';\nvar braintreeUtils = require('./braintreeUtils');\nvar loaderInstance = require('./loaderHelper');\nvar bu = braintreeUtils;\nvar loader;\n\nfunction Constructor(initParams, $btn) {\n    this.$btn = $btn;\n    var $errorContainer = document.createElement('div');\n    $errorContainer.className = 'error';\n    var $loaderContainter = document.querySelector('.braintreeSrcLoader');\n    loader = loaderInstance($loaderContainter);\n    this.loader = loader;\n    $btn.parentNode.insertBefore($errorContainer, $btn.nextSibling);\n    this.params = initParams;\n    this.er = bu.createErrorInstance($errorContainer);\n}\n\nConstructor.prototype.loadSrcButton = function () {\n    var that = this;\n    var params = that.params;\n    this.$braintreeSrcDeviceDataInput = document.querySelector('input[name=braintreeSrcDeviceDataInput]');\n\n    that.loader.show();\n    braintree.client.create({\n        authorization: params.clientToken\n    }, function (clientErr, clientInstance) {\n        if (clientErr) {\n            that.er.show(clientErr);\n            that.loader.hide();\n            return;\n        }\n        if (params.isFraudToolsEnabled) {\n            braintree.dataCollector.create({\n                client: clientInstance,\n                paypal: true\n            }, function (dataCollectorErr, dataCollectorInstance) {\n                if (dataCollectorErr) {\n                    that.er.show(dataCollectorErr);\n                    return;\n                }\n\n                if (that.$braintreeSrcDeviceDataInput) {\n                    that.$braintreeSrcDeviceDataInput.value = dataCollectorInstance.deviceData;\n                }\n                that.loader.hide();\n            });\n        }\n        braintree.visaCheckout.create({\n            client: clientInstance\n        }, function (srcPaymentErr, visaCheckoutInstance) {\n            if (srcPaymentErr) {\n                that.er.show(srcPaymentErr);\n                that.loader.hide();\n                return;\n            }\n            var baseInitOptions = {\n                paymentRequest: {\n                    currencyCode: 'USD',\n                    subtotal: params.options.amount\n                },\n                settings: {\n                    locale: params.settings.locale,\n                    payment: {\n                        cardBrands: params.settings.cardBrands,\n                        acceptCanadianVisaDebit: params.settings.acceptCanadianVisaDebit\n                    }\n                }\n            };\n\n            var initOptions = visaCheckoutInstance.createInitOptions(baseInitOptions);\n            initOptions.settings.shipping = {\n                collectShipping: params.options.isShippingAddressRequired\n            };\n            V.init(initOptions);\n            that.loader.hide();\n            V.on('payment.success', function (payment) {\n                visaCheckoutInstance.tokenize(payment, function (tokenizeErr, payload) {\n                    if (tokenizeErr) {\n                        // eslint-disable-next-line no-console\n                        console.error('Error during Visa Checkout tokenization', tokenizeErr);\n                    } else {\n                        var billingAddress = payload.billingAddress;\n                        payload.billingAddressString = JSON.stringify({\n                            recipientName: (billingAddress.firstName + ' ' + billingAddress.lastName),\n                            phone: billingAddress.phoneNumber,\n                            countryCodeAlpha2: billingAddress.countryCode,\n                            streetAddress: billingAddress.streetAddress,\n                            extendedAddress: billingAddress.streetAddress,\n                            locality: billingAddress.locality,\n                            region: billingAddress.region,\n                            postalCode: billingAddress.postalCode,\n                            email: payload.userData.userEmail\n                        });\n                        params.onTokenizePayment(payload);\n                    }\n                });\n            });\n        });\n    });\n};\n\nConstructor.prototype.updateAmount = function (amount) {\n    this.params.options.amount = amount;\n};\n\nmodule.exports = {\n    init: function (params, $btn) {\n        bu.clientToken = params.clientToken;\n        return new Constructor(params, $btn);\n    }\n};\n","'use strict';\n/* global braintree $ */\n/* eslint no-console: 'off' */\nvar { getDebugMode } = require('./helper');\n\nvar isDebugMode = getDebugMode();\n\nif (console && isDebugMode) {\n    var consoleLog = console.log;\n    var consoleError = console.error;\n    console.log = function () {\n        consoleLog.apply(console, arguments);\n    };\n    console.error = function () {\n        consoleError.apply(console, arguments);\n    };\n} else if (!console) {\n    console = { // eslint-disable-line no-global-assign\n        log: function () { },\n        error: function () { },\n        info: function () { }\n    };\n}\n\nvar bu = {\n    pdpOnlickForAsignedPaypalPayment: function () {\n        var $bundleItem = $('.bundle-item');\n        function getOptions($productContainer) {\n            var options = $productContainer\n                .find('.product-option')\n                .map(function () {\n                    var $elOption = $(this).find('.options-select');\n                    var urlValue = $elOption.val();\n                    var selectedValueId = $elOption.find('option[value=\"' + urlValue + '\"]')\n                        .data('value-id');\n                    return {\n                        optionId: $(this).data('option-id'),\n                        selectedValueId: selectedValueId\n                    };\n                }).toArray();\n\n            return JSON.stringify(options);\n        }\n\n        var pid = $('.product-detail:not(\".bundle-item\")').data('pid');\n        var $btn = $('.braintree_pdp_button');\n        var $productContainer = $btn.closest('.product-detail');\n\n        var form = {\n            pid: pid,\n            quantity: $('.quantity-select').val()\n        };\n\n        if (!$bundleItem.length) {\n            form.options = getOptions($productContainer);\n        } else {\n            var items = $bundleItem.map(function () {\n                return {\n                    pid: $(this).find('.product-id').text(),\n                    quantity: parseInt($(this).find('label.quantity').data('quantity'), 10)\n                };\n            });\n            form.childProducts = JSON.stringify(items.toArray());\n        }\n        var response = $.ajax({\n            url: $('.add-to-cart-url').val(),\n            method: 'POST',\n            async: false,\n            data: form\n        }).responseJSON;\n        response.pid = pid;\n        return response;\n    },\n\n    getSelectedData: function (selectEl) {\n        if (!selectEl) {\n            return null;\n        }\n        var options = selectEl.getElementsByTagName('option');\n        var option = null;\n        for (var i = 0; i < options.length; i++) {\n            option = options[i];\n            if (option.selected) {\n                break;\n            }\n        }\n        return option.attributes;\n    },\n\n    postData: function (url, data) {\n        var formData = new FormData();\n\n        for (var key in data) {\n            formData.append(key, data[key]);\n        }\n        $.ajax({\n            url: url,\n            data: formData,\n            processData: false,\n            contentType: false,\n            type: 'POST',\n            success: function (res) {\n                window.location.href = res.redirectUrl;\n            },\n            error: function () {\n                location.reload();\n            }\n        });\n    },\n\n    messages: {},\n\n    errorInstances: [],\n    createErrorInstance: function (containerElement, callback) {\n        if (!containerElement) {\n            console.error('Braintree: No container for showing erros');\n        }\n        function Constructor(cb) {\n            bu.errorInstances.push(this);\n            this.containerEl = containerElement;\n            this.cb = typeof cb === 'function' ? cb : function () { };\n        }\n        Constructor.prototype.show = function (error) {\n            var text = '';\n            if (typeof error === 'string') {\n                text = error;\n            }\n            if (typeof error === 'object') {\n                var msg = bu.messages[error.code];\n                text = msg || error.message;\n                this.cb(this, error);\n                if (error.code === 'PAYPAL_POPUP_CLOSED') {\n                    return;\n                }\n            }\n            this.containerEl.style.display = '';\n            this.containerEl.innerHTML = text;\n        };\n        Constructor.prototype.hide = function () {\n            this.containerEl.innerHTML = '';\n        };\n        return new Constructor(callback);\n    },\n    clientToken: null\n};\n\nbu.console = console;\n\nmodule.exports = bu;\n\n","/* eslint-disable no-use-before-define */\n'use strict';\n\n/* global braintreeUtils braintree $ VenmoSession */\nvar braintreeUtils = require('./braintreeUtils');\nvar loaderInstance = require('./loaderHelper');\n\nvar bu = braintreeUtils;\n\nfunction Constructor(initParams, $btn) {\n    var $errorContainer = document.createElement('div');\n    $errorContainer.className = 'venmo-error';\n    var $loaderContainter = document.createElement('div');\n    $loaderContainter.className = 'braintree-loader';\n    this.$braintreeVenmoRiskDataInput = document.querySelector('input[name=braintreeVenmoRiskData]');\n\n    this.$btn = $btn;\n    this.params = initParams;\n\n    if (initParams.$errorContainer) {\n        $errorContainer = initParams.$errorContainer;\n        delete initParams.$errorContainer;\n    }\n\n    if (initParams.$loaderContainer) {\n        $loaderContainter = initParams.$loaderContainer;\n    }\n\n    $btn.parentNode.insertBefore($errorContainer, $btn.nextSibling);\n\n    this.er = bu.createErrorInstance($errorContainer);\n    this.loader = loaderInstance($loaderContainter);\n}\n\nConstructor.prototype.createVenmo = function () {\n    var that = this;\n    var isBrowserSupported;\n    that.loader.show();\n\n    braintree.client.create({\n        authorization: bu.clientToken\n    }, function (clientErr, clientInstance) {\n            // Stop if there was a problem creating the client.\n            // This could happen if there is a network error or if the authorization\n            // is invalid.\n        if (clientErr) {\n            that.er.show(clientErr);\n            return;\n        }\n\n        braintree.dataCollector.create({\n            client: clientInstance,\n            paypal: true\n        }, function (dataCollectorErr, dataCollectorInstance) {\n            if (dataCollectorErr) {\n                that.er.show(dataCollectorErr);\n                return;\n            }\n\n            if (that.$braintreeVenmoRiskDataInput) {\n                that.$braintreeVenmoRiskDataInput.value = dataCollectorInstance.deviceData;\n            }\n            that.loader.hide();\n        });\n\n        isBrowserSupported = braintree.venmo.isBrowserSupported({\n            allowNewBrowserTab: false,\n            allowDesktop: true\n        });\n        // Verify browser support before proceeding.\n        if (isBrowserSupported) {\n            braintree.venmo.create({\n                client: clientInstance,\n                allowNewBrowserTab: false,\n                ignoreHistoryChanges: true,\n                allowDesktop: true\n            }, function (venmoErr, venmoInstance) {\n                if (venmoErr) {\n                    that.er.show(venmoErr);\n                    return;\n                }\n\n                // Verify browser support before proceeding.\n                if (!venmoInstance.isBrowserSupported()) {\n                    that.params.deviceNotSupportVenmo();\n                    that.loader.hide();\n                    return;\n                }\n\n                that.$btn.addEventListener('click', function () {\n                    if (!that.params.venmoAccountPage && !that.params.onClick()) {\n                        return;\n                    }\n                    venmoInstance.tokenize({ processResultsDelay: 10 }, function (tokenizeErr, payload) {\n                        that.loader.show();\n\n                        if (tokenizeErr) {\n                            handleVenmoError(tokenizeErr);\n                        } else {\n                            handleVenmoSuccess(payload);\n                        }\n                    });\n                    return;\n                });\n            });\n        } else {\n            that.params.deviceNotSupportVenmo();\n            that.loader.hide();\n            return;\n        }\n    });\n\n    function handleVenmoError(err) {\n        that.er.show(err);\n        that.loader.hide();\n    }\n    function handleVenmoSuccess(payload) {\n        that.er.hide();\n        that.params.onTokenizePayment(payload);\n        that.loader.hide();\n    }\n};\n\nmodule.exports = {\n    init: function (params, $btn) {\n        var ins = new Constructor(params, $btn);\n        bu.clientToken = params.clientToken;\n        return ins.createVenmo();\n    }\n};\n","'use strict';\nvar creditCard = require('../braintreeCreditCard');\nvar creditCardFields = require('./creditcardFields');\n\nfunction submitCreditCardForm() {\n    $('.js_braintree_addCreditCardForm').submit(function (e) {\n        var addCreditCardForm = $(this);\n        creditCard.startTokenize(function (result) {\n            if (result.error) {\n                e.preventDefault();\n                return;\n            }\n            addCreditCardForm.spinner().start();\n            $.ajax({\n                url: addCreditCardForm.attr('action'),\n                type: 'post',\n                dataType: 'json',\n                data: addCreditCardForm.serialize(),\n                success: function (data) {\n                    addCreditCardForm.spinner().stop();\n                    if (!data.success) {\n                        document.querySelector('#braintreeCreditCardErrorContainer').textContent = data.error;\n                    } else {\n                        location.href = data.redirectUrl;\n                    }\n                },\n                error: function (err) {\n                    if (err.responseJSON.redirectUrl) {\n                        window.location.href = err.responseJSON.redirectUrl;\n                    }\n                    addCreditCardForm.spinner().stop();\n                }\n            });\n        });\n        return false;\n    });\n}\n\nfunction initAccountAddCreditCard() {\n    creditCardFields.initCreditCardFields();\n    submitCreditCardForm();\n}\n\nmodule.exports = {\n    initAccountAddCreditCard\n};\n","'use strict';\nvar creditCard = require('../braintreeCreditCard');\n\nvar $continueButton = document.querySelector('button.submit-payment');\n\n/**\n * Gets required Additional shipping info for 3ds\n *\n * @param {Object} orderAddress - User's shipping address\n * @returns {Object} an object with required fields\n */\n\nfunction getShippingAdditionalInfo(orderAddress) {\n    return {\n        workPhoneNumber: orderAddress.phone,\n        shippingGivenName: orderAddress.recipientName.split(' ').slice(0, -1).join(' '),\n        shippingSurname: orderAddress.recipientName.split(' ').slice(-1).join(' '),\n        shippingPhone: orderAddress.phone,\n        shippingAddress: {\n            streetAddress: orderAddress.line1,\n            extendedAddress: orderAddress.line2,\n            locality: orderAddress.city,\n            region: orderAddress.state,\n            postalCode: orderAddress.postalCode,\n            countryCodeAlpha2: orderAddress.countryCode\n        }\n    };\n}\n\nfunction updateData() {\n    $.ajax({\n        url: document.querySelector('.js_braintree_getOrderInfoUrl').value,\n        type: 'get',\n        dataType: 'json',\n        success: function (data) {\n            data.shippingAdditionalInfo = data.shippingAddress ? getShippingAdditionalInfo(data.shippingAddress) : null;\n            creditCard.updateData(data);\n        },\n        error: function () {\n            window.location.reload();\n        }\n    });\n}\n\nfunction initCreditCardFields() {\n    document.querySelectorAll('.js_braintree_creditCardFields').forEach(function (el) {\n        var $container = el;\n        if (JSON.parse($container.getAttribute('data-is-inited'))) {\n            return;\n        }\n        var config = JSON.parse($container.getAttribute('data-braintree-config'));\n        if (typeof config !== 'object' || config === null) {\n            // eslint-disable-next-line no-console\n            console.error(el, '.js_braintree_creditCardFields has not valid data-braintree-config');\n            return;\n        }\n        config.continueButton = $continueButton;\n        creditCard.initFields(config, $container);\n        $container.setAttribute('data-is-inited', true);\n    });\n}\n\nmodule.exports = {\n    initCreditCardFields,\n    getShippingAdditionalInfo,\n    updateData\n};\n","'use strict';\nvar braintreeUtils = require('../braintreeUtils');\nvar bu = braintreeUtils;\nvar helper = require('../helper');\n\nvar $creditCardList = document.querySelector('#braintreeCreditCardList');\nvar $saveCreditCard = document.querySelector('#braintreeSaveCreditCard');\nvar $cardOwner = document.querySelector('#braintreeCardOwner');\n\nfunction creditcardErrorContainer(errorIns, errorData) {\n    var error = errorData;\n    if (error.details && error.details.invalidFieldKeys) {\n        for (var i = 0; i < error.details.invalidFieldKeys.length; i++) {\n            var key = error.details.invalidFieldKeys[i];\n            if (key === 'number') {\n                document.querySelector('#braintreeCardNumber').classList.add('braintree-hosted-fields-invalid');\n            }\n            if (key === 'cvv') {\n                document.querySelector('#braintreeCvv').classList.add('braintree-hosted-fields-invalid');\n            }\n            if (key === 'expirationDate') {\n                document.querySelector('#braintreeExpirationDate').classList.add('braintree-hosted-fields-invalid');\n            }\n        }\n    }\n    if (error.code === 'HOSTED_FIELDS_FIELDS_EMPTY') {\n        document.querySelector('#braintreeCardNumber, #braintreeCvv, #braintreeExpirationDate').classList.add('braintree-hosted-fields-invalid');\n    }\n}\n\nfunction convertCardTypeToDwFormat(braintreeType) {\n    switch (braintreeType) {\n        case 'American Express':\n            return 'Amex';\n        case 'MasterCard':\n            return 'Master';\n        default:\n            return braintreeType;\n    }\n}\n\nfunction cardOwnerUpdateClasses() {\n    var value = $cardOwner.value;\n    if (value.length <= parseInt($cardOwner.getAttribute('maxlength'), 10) && value.length !== 0) {\n        $cardOwner.parentNode.classList.add('braintree-hosted-fields-valid');\n    } else {\n        $cardOwner.parentNode.classList.remove('braintree-hosted-fields-valid');\n        $cardOwner.parentNode.classList.remove('braintree-hosted-fields-invalid');\n    }\n}\n\nfunction setCardFields(selectedCard, cacheCardFields) {\n    cacheCardFields.cardNumbeberPh.innerHTML = selectedCard['data-number'].value;\n    cacheCardFields.cardCvvPh.innerHTML = '***';\n    cacheCardFields.cardExpirationPh.innerHTML = selectedCard['data-expiration'].value;\n    cacheCardFields.cardOwnerPh.innerHTML = selectedCard['data-owner'].value;\n    $cardOwner.value = selectedCard['data-owner'].value;\n    document.querySelector('#braintreeCardType').value = selectedCard['data-type'].value;\n    document.querySelector('#braintreeCardMaskNumber').value = selectedCard['data-number'].value;\n}\n\nfunction showCardElements(cardFields) {\n    cardFields.forEach(function (el) {\n        el.style.display = '';\n    });\n}\n\nfunction hideCardElements(cardFields) {\n    cardFields.forEach(function (el) {\n        el.style.display = 'none';\n    });\n}\n\nfunction getCardFieldsPH() {\n    return [\n        document.querySelector('#braintreeCardOwnerPh'),\n        document.querySelector('#braintreeCardNumberPh'),\n        document.querySelector('#braintreeExpirationPh'),\n        document.querySelector('#braintreeCvvPh')\n    ];\n}\n\nfunction getCardFields() {\n    return [\n        document.querySelector('#braintreeCardOwner'),\n        document.querySelector('#braintreeExpirationDate'),\n        document.querySelector('#braintreeCardNumber'),\n        document.querySelector('#braintreeCvv')\n    ];\n}\n\nfunction cardListChange() {\n    var $cardOwnerPh = document.querySelector('#braintreeCardOwnerPh');\n    var $cardNumbeber = document.querySelector('#braintreeCardNumber');\n    var $cardNumbeberPh = document.querySelector('#braintreeCardNumberPh');\n    var $cardCvv = document.querySelector('#braintreeCvv');\n    var $cardCvvPh = document.querySelector('#braintreeCvvPh');\n    var $cardExpiration = document.querySelector('#braintreeExpirationDate');\n    var $cardExpirationPh = document.querySelector('#braintreeExpirationPh');\n    var $braintreeSaveCardContainer = document.querySelector('#braintreeSaveCardContainer');\n    var $creditCardFieldsContainer = document.querySelector('#braintreeCreditCardFieldsContainer');\n    var $braintree3DSecureContainer = document.querySelector('#braintree3DSecureContainer');\n    var changeCardOwnerInput;\n    var selectedCard;\n    var isSaveCard;\n    var cacheCardFields = {\n        cardNumbeberPh: $cardNumbeberPh,\n        cardCvvPh: $cardCvvPh,\n        cardExpirationPh: $cardExpirationPh,\n        cardOwnerPh: $cardOwnerPh\n    };\n    var nonce;\n    if ($cardOwner) {\n        if (typeof (Event) === 'function') {\n            changeCardOwnerInput = new Event('changeCardOwnerInput');\n            $cardOwner.addEventListener('changeCardOwnerInput', function () {\n                'change';\n            }, false);\n        } else {\n            changeCardOwnerInput = document.createEvent('Event');\n            changeCardOwnerInput.initEvent('changeCardOwnerInput', true, true);\n        }\n    }\n\n    if ($creditCardFieldsContainer) {\n        $creditCardFieldsContainer.style.display = '';\n    }\n    if ($braintree3DSecureContainer) {\n        $braintree3DSecureContainer.style.display = 'none';\n    }\n\n    document.querySelector('#braintreeCreditCardErrorContainer').textContent = '';\n\n    if ($creditCardList.value === 'newcard') {\n        hideCardElements(getCardFieldsPH());\n        $cardOwner.value = $cardOwner.getAttribute('data-new-cart-value');\n        $cardOwner.dispatchEvent(changeCardOwnerInput);\n        $cardOwner.parentNode.classList.remove('braintree-hosted-fields-invalid');\n        $cardNumbeber.parentNode.classList.remove('braintree-hosted-fields-invalid');\n        $cardCvv.parentNode.classList.remove('braintree-hosted-fields-invalid');\n        $cardExpiration.parentNode.classList.remove('braintree-hosted-fields-invalid');\n        $cardOwner.disabled = false;\n        showCardElements(getCardFields());\n        cardOwnerUpdateClasses();\n        if ($braintreeSaveCardContainer) {\n            $braintreeSaveCardContainer.style.display = 'block';\n            $saveCreditCard.checked = true;\n        }\n\n        document.querySelector('#braintreeCreditCardNonce').value = '';\n        document.querySelector('#braintreeCardPaymentMethod').value = $creditCardList[0].getAttribute('data-payment-method');\n    } else if ($creditCardList.selectedOptions[0].id === 'braintreeSessionCreditAccount') {\n        selectedCard = bu.getSelectedData($creditCardList);\n        nonce = selectedCard['data-nonce'].value;\n        if ($braintreeSaveCardContainer) {\n            $braintreeSaveCardContainer.style.display = 'block';\n            isSaveCard = JSON.parse(selectedCard['data-save-card'].value);\n            $braintreeSaveCardContainer.checked = isSaveCard;\n            $saveCreditCard.checked = isSaveCard;\n        }\n\n        if (nonce) {\n            document.querySelector('#braintreeCreditCardNonce').value = nonce;\n        }\n\n        setCardFields(selectedCard, cacheCardFields);\n        $cardOwner.dispatchEvent(changeCardOwnerInput);\n        $cardOwner.style.display = 'none';\n        showCardElements(getCardFieldsPH());\n        document.querySelector('#braintreeCardPaymentMethod').value = selectedCard['data-payment-method'].value.toUpperCase();\n    } else {\n        // case for saved card\n        selectedCard = bu.getSelectedData($creditCardList);\n        setCardFields(selectedCard, cacheCardFields);\n        $cardOwner.dispatchEvent(changeCardOwnerInput);\n        showCardElements(getCardFieldsPH());\n        hideCardElements(getCardFields());\n        $cardOwner.disabled = true;\n        if ($braintreeSaveCardContainer) {\n            $braintreeSaveCardContainer.style.display = 'none';\n            $saveCreditCard.checked = false;\n        }\n\n        document.querySelector('#braintreeCreditCardNonce').value = '';\n        document.querySelector('#braintreeCardPaymentMethod').value = selectedCard['data-payment-method'].value.toUpperCase();\n    }\n}\n\nfunction initCardListAndSaveFunctionality() {\n    if ($creditCardList) {\n        $creditCardList.addEventListener('change', function () {\n            cardListChange();\n        });\n    }\n    cardListChange();\n}\n\nfunction cardOwnerEvents() {\n    $cardOwner.addEventListener('focus', function () {\n        $cardOwner.parentNode.classList.add('braintree-hosted-fields-focused');\n    });\n    $cardOwner.addEventListener('blur', function () {\n        $cardOwner.parentNode.classList.remove('braintree-hosted-fields-focused');\n    });\n    $cardOwner.addEventListener('keyup', function () {\n        document.querySelector('#braintreeCardOwner').setAttribute('data-new-cart-value', $cardOwner.value);\n        cardOwnerUpdateClasses();\n    });\n    $cardOwner.addEventListener('change', function () {\n        cardOwnerUpdateClasses();\n    });\n}\n\n/*\n    Update Session account\n**/\nfunction updateSessionAccount() {\n    var sessionOption = helper.getSessionAccountOption({\n        querySelector: '#braintreeCreditCardList',\n        id: 'braintreeSessionCreditAccount'\n    });\n    if (!sessionOption) { return; }\n\n    sessionOption.selected = false;\n    sessionOption.classList.add('used-creditcard-account-hide');\n    sessionOption.classList.remove('used-creditcard-account');\n    sessionOption.text = '';\n    sessionOption.setAttribute('data-session-account', false);\n    sessionOption.setAttribute('data-owner', false);\n    sessionOption.setAttribute('data-expiration', false);\n    sessionOption.setAttribute('data-number', false);\n    sessionOption.setAttribute('data-nonce', false);\n    sessionOption.setAttribute('data-type', false);\n    sessionOption.setAttribute('data-save-card', false);\n}\n\n/*\n    Check if creditcard method was used and change appearance of creditcard tab\n**/\nfunction removeSessionNonce() {\n    updateSessionAccount();\n    document.querySelector('#braintreeCreditCardNonce').value = '';\n    document.querySelector('#cardNumber').value = '';\n    document.querySelector('#braintreeCardMaskNumber').value = '';\n    document.querySelector('#braintreeCardExpirationYear').value = '';\n    document.querySelector('#braintreeCardExpirationMonth').value = '';\n\n    var defaultOption = helper.getOptionByDataDefault('#braintreeCreditCardList');\n    if (defaultOption) {\n        defaultOption.selected = true;\n        var selectedCard = bu.getSelectedData($creditCardList);\n        var cardFieldsPH = {\n            cardNumbeberPh: document.querySelector('#braintreeCardNumberPh'),\n            cardCvvPh: document.querySelector('#braintreeCvvPh'),\n            cardExpirationPh: document.querySelector('#braintreeExpirationPh'),\n            cardOwnerPh: document.querySelector('#braintreeCardOwnerPh')\n        };\n        setCardFields(selectedCard, cardFieldsPH);\n        $cardOwner.disabled = true;\n        $saveCreditCard.checked = false;\n        document.querySelector('#braintreeSaveCardContainer').style.display = 'none';\n    } else {\n        hideCardElements(getCardFieldsPH());\n        showCardElements(getCardFields());\n        var ccAccount = document.querySelector('.form-group.braintree_used_creditcard_account');\n        ccAccount.classList.remove('used-creditcard-account');\n        ccAccount.classList.add('used-creditcard-account-hide');\n    }\n\n    [].forEach.call(document.querySelector('#braintreeCreditCardList'), function (el) {\n        if (el.style.display === 'none') el.style.display = 'block';\n    });\n}\n\nmodule.exports = {\n    creditcardErrorContainer,\n    convertCardTypeToDwFormat,\n    cardOwnerEvents,\n    initCardListAndSaveFunctionality,\n    removeSessionNonce,\n    showCardElements,\n    hideCardElements,\n    setCardFields,\n    getCardFieldsPH,\n    getCardFields,\n    updateSessionAccount\n};\n","'use strict';\n\nvar braintreeUtils = require('../braintreeUtils');\nvar creditCard = require('../braintreeCreditCard');\nvar helper = require('../helper');\nvar creditcardHelper = require('../creditcard/creditcardHelper');\n\nvar $continueButton = document.querySelector('button.submit-payment');\nvar $creditCardList = document.querySelector('#braintreeCreditCardList');\n\nfunction doNotAllowSubmitForm() {\n    helper.continueButtonToggle(false);\n    $continueButton.setAttribute('data-is-allow-submit-form', false);\n}\n\nfunction hide3DSecureContainer() {\n    document.querySelector('#braintreeCreditCardFieldsContainer').style.display = '';\n    document.querySelector('#braintreeSaveCardContainer').style.display = '';\n    document.querySelector('#braintree3DSecureContainer').style.display = 'none';\n    doNotAllowSubmitForm();\n}\n\nfunction updateAccountsList() {\n    var sessionAccount = document.querySelector('#braintreeSessionCreditAccount');\n    var defaultOption = helper.getOptionByDataDefault('#braintreeCreditCardList');\n    if ($creditCardList && $creditCardList.value !== 'newcard') {\n        if (!sessionAccount.selected) {\n            creditcardHelper.updateSessionAccount();\n        }\n        return;\n    }\n\n    var creditCardAccount = document.querySelector('.form-group.braintree_used_creditcard_account');\n    var newCCAccount = document.getElementById('newCardAccount');\n    if (!creditCardAccount.classList.contains('used-creditcard-account')) {\n        creditCardAccount.classList.remove('used-creditcard-account-hide');\n        creditCardAccount.classList.add('used-creditcard-account');\n        sessionAccount.classList.remove('used-creditcard-account-hide');\n        sessionAccount.classList.add('used-creditcard-account');\n    } else {\n        sessionAccount.classList.remove('used-creditcard-account-hide');\n        sessionAccount.classList.add('used-creditcard-account');\n    }\n\n    if (newCCAccount.selected) {\n        var isSavedCard = document.querySelector('#braintreeSaveCreditCard') ? document.querySelector('#braintreeSaveCreditCard').checked : false;\n        sessionAccount.setAttribute('data-session-account', true);\n        sessionAccount.setAttribute('data-save-card', isSavedCard);\n        sessionAccount.textContent = sessionAccount.getAttribute('data-type') + ' ' +\n            sessionAccount.getAttribute('data-number') + ' ' +\n            sessionAccount.getAttribute('data-expiration') + ' ' +\n            document.querySelector('#braintreeCardOwner').getAttribute('data-new-cart-value');\n        sessionAccount.setAttribute('data-nonce', document.querySelector('#braintreeCreditCardNonce').value);\n\n        newCCAccount.removeAttribute('selected');\n        sessionAccount.selected = true;\n    }\n\n    if (!defaultOption) {\n        var selectedCard = braintreeUtils.getSelectedData($creditCardList);\n        var cardFieldsPH = {\n            cardOwnerPh: document.querySelector('#braintreeCardOwnerPh'),\n            cardNumbeberPh: document.querySelector('#braintreeCardNumberPh'),\n            cardCvvPh: document.querySelector('#braintreeCvvPh'),\n            cardExpirationPh: document.querySelector('#braintreeExpirationPh')\n        };\n        creditcardHelper.setCardFields(selectedCard, cardFieldsPH);\n    }\n\n    creditCard.clearHostedFields();\n    creditcardHelper.showCardElements(creditcardHelper.getCardFieldsPH());\n    creditcardHelper.hideCardElements(creditcardHelper.getCardFields());\n    helper.continueButtonToggle(false);\n}\n\nfunction allowSubmitForm(event) {\n    $continueButton.setAttribute('data-is-allow-submit-form', true);\n    updateAccountsList();\n    event.target.click();\n}\n\nfunction isActiveCreditCardTab() {\n    return document\n        .querySelector('.payment-options[role=tablist] a[data-toggle=\"tab\"][href=\"#creditcard-content\"]')\n        .classList\n        .contains('active');\n}\n\nfunction makeCreditCardPayment(event) {\n    if (!isActiveCreditCardTab()) {\n        return;\n    }\n\n    if (JSON.parse($continueButton.getAttribute('data-is-allow-submit-form')) && creditCard.isFormValid()) {\n        return;\n    }\n\n    if ($creditCardList) {\n        var is3dSecureEnabled = JSON.parse(document.querySelector('.js_braintree_creditCardFields').getAttribute('data-braintree-config')).is3dSecureEnabled;\n        if ($creditCardList && $creditCardList.value !== 'newcard') {\n            if (!is3dSecureEnabled) {\n                allowSubmitForm(event);\n                return;\n            }\n\n            if ($creditCardList.value === 'sessioncard') {\n                allowSubmitForm(event);\n                return;\n            }\n\n            var selectedCard = braintreeUtils.getSelectedData($creditCardList);\n            var getNonceUrl = $creditCardList.getAttribute('data-get-payment-nonce-url');\n            var cardUUID = selectedCard['data-id'].value;\n            $.get(`${getNonceUrl}?id=${cardUUID}`, function (response) {\n                creditCard.startTokenize(function (result) {\n                    if (!result.error) {\n                        allowSubmitForm(event);\n                    }\n                }, response);\n            });\n            event.preventDefault();\n            event.stopPropagation();\n            return;\n        }\n    }\n    creditCard.startTokenize(function (result) {\n        if (!result.error) allowSubmitForm(event);\n    });\n    event.preventDefault();\n    event.stopPropagation();\n}\n\nmodule.exports = {\n    doNotAllowSubmitForm,\n    hide3DSecureContainer,\n    makeCreditCardPayment\n};\n","'use strict';\n\nvar googlepay = require('../braintreeGooglepay');\nvar loaderInstance = require('../loaderHelper');\n\nfunction submitAddGooglePayAccountForm() {\n    $('.js_braintree_addGooglePayAccountForm').submit(function () {\n        var $form = $(this);\n        var $btFormErrorContainer = document.querySelector('#braintreeFormErrorContainer');\n        $form.spinner().start();\n\n        $.post($form.attr('action'), $form.serialize())\n            .done(function (data) {\n                $form.spinner().stop();\n                if (!data.success) {\n                    $btFormErrorContainer.style.display = 'block';\n                    $btFormErrorContainer.textContent = data.error;\n                } else {\n                    location.href = data.redirectUrl;\n                }\n            })\n            .fail(function (err) {\n                if (err.responseJSON.redirectUrl) {\n                    window.location.href = err.responseJSON.redirectUrl;\n                }\n                $form.spinner().stop();\n            });\n        return false;\n    });\n}\n\nfunction initAddGooglePayAccount() {\n    var $btn = document.querySelector('.js_braintree_accountgooglepay_button');\n    var $googlepayNonce = document.querySelector('#braintreeGooglePayNonce');\n    var $btGooglePayLoader = document.querySelector('.braintreeGooglepayLoader');\n    var googlepayIns;\n    var loader = loaderInstance($btGooglePayLoader);\n\n    if (JSON.parse($btn.getAttribute('data-is-inited'))) {\n        return;\n    }\n    var config = JSON.parse($btn.getAttribute('data-braintree-config'));\n\n    if (typeof config !== 'object' || config === null) {\n        // eslint-disable-next-line no-console\n        console.error($btn, 'not valid data-braintree-config');\n        return;\n    }\n    loader.show();\n\n    config.onTokenizePayment = function (data, result) {\n        var $btFormErrorContainer = document.querySelector('#braintreeFormErrorContainer');\n        if ($btFormErrorContainer.style.display === 'block') {\n            $btFormErrorContainer.style.display = 'none';\n            $btFormErrorContainer.textContent = '';\n        }\n        if (result.type === 'PayPalAccount') {\n            $btFormErrorContainer.style.display = 'block';\n            $btFormErrorContainer.textContent = config.messages.saving_paypal_account_error;\n\n            return;\n        }\n\n        $googlepayNonce.value = result.nonce;\n\n        document.querySelector('.braintreeGooglePayBtn').click();\n    };\n    googlepayIns = googlepay.init(config, $btn);\n    googlepayIns.createGooglepay();\n    $btn.setAttribute('data-is-inited', true);\n    submitAddGooglePayAccountForm();\n}\n\nmodule.exports = {\n    initAddGooglePayAccount\n};\n/* eslint no-use-before-define: 2 */  // --> ON\n","'use strict';\nvar helper = require('../helper');\n\nvar $googlepayContent = document.querySelector('.js_braintree_googlepayContent');\nvar $btGooglepayAccountsList = document.querySelector('#braintreeGooglepayAccountsList');\nvar $googlepayButton = document.querySelector('.js_braintree_googlepay_button');\nvar $saveGooglePayAccountCheckbox = document.querySelector('#braintreeSaveGooglepayAccount');\nvar $googlepayTab = document.querySelector('.googlepay-tab');\n\nfunction showGooglepayAccount() {\n    var $sessionAccount = document.querySelector('#sessionGPAccount');\n    $sessionAccount.classList.remove('used-googlepay-account-hide');\n    $sessionAccount.classList.add('used-googlepay-account');\n\n    var $gpAccount = document.querySelector('.form-group.braintree_used_googlepay_account');\n    $gpAccount.classList.remove('used-googlepay-account-hide');\n    $gpAccount.classList.add('used-googlepay-account');\n\n    $googlepayButton.style.display = 'none';\n    $googlepayContent.setAttribute('data-paypal-is-hide-continue-button', false);\n    helper.continueButtonToggle(false);\n}\n\nfunction hideShowButtons() {\n    if ($btGooglepayAccountsList.value === 'newaccount') {\n        $googlepayButton.style.display = 'block';\n        if ($googlepayTab.classList.contains('active')) {\n            helper.continueButtonToggle(true);\n        }\n        $googlepayContent.setAttribute('data-paypal-is-hide-continue-button', true);\n        if ($saveGooglePayAccountCheckbox) {\n            $saveGooglePayAccountCheckbox.checked = true;\n        }\n    } else {\n        $googlepayButton.style.display = 'none';\n        helper.continueButtonToggle(false);\n        $googlepayContent.setAttribute('data-paypal-is-hide-continue-button', false);\n        if ($saveGooglePayAccountCheckbox) {\n            $saveGooglePayAccountCheckbox.checked = JSON.parse(document.querySelector('#sessionGPAccount').getAttribute('data-save'));\n        }\n    }\n}\n\nfunction createGooglepayBillingAddressData(data) {\n    var billingData = data.paymentMethodData.info.billingAddress;\n    var billingAddress = {};\n    var recipientName = billingData.name.split(' ');\n\n    billingAddress.firstName = recipientName[0];\n    billingAddress.lastName = recipientName[1];\n    billingAddress.phone = billingData.phoneNumber;\n    billingAddress.countryCodeAlpha2 = billingData.countryCode;\n    billingAddress.streetAddress = billingData.address1;\n    billingAddress.extendedAddress = billingData.address2;\n    billingAddress.locality = billingData.locality;\n    billingAddress.stateCode = billingData.administrativeArea;\n    billingAddress.postalCode = billingData.postalCode;\n    billingAddress.email = data.email;\n\n    return billingAddress;\n}\n\nfunction createGooglepayShippingAddressData(shippingData) {\n    var shippingAddress = {};\n    var recipientName = shippingData.name.split(' ');\n\n    shippingAddress.firstName = recipientName[0];\n    shippingAddress.lastName = recipientName[1];\n    shippingAddress.phone = shippingData.phoneNumber;\n    shippingAddress.countryCodeAlpha2 = shippingData.countryCode;\n    shippingAddress.streetAddress = shippingData.address1;\n    shippingAddress.extendedAddress = shippingData.address2;\n    shippingAddress.locality = shippingData.locality;\n    shippingAddress.region = shippingData.administrativeArea;\n    shippingAddress.postalCode = shippingData.postalCode;\n\n    return shippingAddress;\n}\n\n/*\n    Remove method was used and change appearance of googlepay tab\n**/\nfunction removeSessionNonce() {\n    var $gpAccount = document.querySelector('.form-group.braintree_used_googlepay_account');\n    $gpAccount.classList.remove('used-googlepay-account');\n    $gpAccount.classList.add('used-googlepay-account-hide');\n\n    var $sessionAccount = document.querySelector('#sessionGPAccount');\n    $sessionAccount.classList.add('used-googlepay-account-hide');\n    $sessionAccount.classList.remove('used-googlepay-account');\n    $sessionAccount.value = '';\n    $sessionAccount.text = '';\n    $sessionAccount.setAttribute('data-session-account', false);\n    $sessionAccount.setAttribute('data-save', false);\n\n    document.querySelector('#braintreeGooglePayNonce').value = '';\n    document.querySelector('#braintreeGooglePayBillingAddress').value = '';\n    document.querySelector('#braintreeGooglepayPaymentType').value = '';\n    document.querySelector('#braintreeGooglePayDeviceData').value = '';\n\n    document.querySelector('#newGPAccount').selected = true;\n    hideShowButtons();\n}\n\nmodule.exports = {\n    showGooglepayAccount,\n    createGooglepayBillingAddressData,\n    createGooglepayShippingAddressData,\n    removeSessionNonce,\n    hideShowButtons\n};\n","'use strict';\nvar googlepay = require('../braintreeGooglepay');\nvar { hideShowButtons, createGooglepayBillingAddressData, createGooglepayShippingAddressData, showGooglepayAccount } = require('./googlepayHelper');\nvar { removeActiveSessionPayment, createPaymentFormData, showCartErrorMsg, updateBillingFormValues } = require('../helper');\n\nvar $googlepayButton = document.querySelector('.js_braintree_googlepay_button');\nvar $btGooglepayAccountsList = document.querySelector('#braintreeGooglepayAccountsList');\nvar $googlepayOnCart = document.querySelector('.braintree-cart-google-button');\nvar $googlepayNonce = document.querySelector('#braintreeGooglePayNonce');\nvar $googlepayCardDescription = document.querySelector('#braintreeGooglePayCardDescription');\nvar $braintreeGooglepayPaymentType = document.querySelector('#braintreeGooglepayPaymentType');\nvar $googlePayBillingAddress = document.querySelector('#braintreeGooglePayBillingAddress');\n\nfunction makeGooglepayPayment(continueButton) {\n    var googlepayIns;\n    var config = JSON.parse($googlepayButton.getAttribute('data-braintree-config'));\n    if (typeof config !== 'object' || config === null) {\n        // eslint-disable-next-line no-console\n        console.error($googlepayButton, 'not valid data-braintree-config');\n    }\n\n    if ($btGooglepayAccountsList) {\n        $btGooglepayAccountsList.addEventListener('change', function () {\n            hideShowButtons();\n        });\n        hideShowButtons();\n\n        if ($googlepayCardDescription.value === 'GooglePay') {\n            $googlepayCardDescription.value = $btGooglepayAccountsList.selectedOptions[0].label;\n        }\n    }\n\n    config.onTokenizePayment = function (data, result) {\n        var deviceData = document.querySelector('input[name=braintreeGooglePayDeviceDataInput]').value;\n        var googlepayNonce = result.nonce;\n        var googlepayPaymentType = result.type;\n        var googlepayCardDescription = result.details.cardType + ' ' + result.details.lastFour;\n\n        removeActiveSessionPayment();\n\n        if (data) {\n            var billingAddressData = createGooglepayBillingAddressData(data);\n\n            if ($googlepayOnCart) {\n                var $braintreeCartButtons = document.querySelector('.braintree-cart-buttons-wrap');\n                var placeOrderUrl = $braintreeCartButtons.getAttribute('data-checkout-placeorder-url');\n                var checkoutFromCartUrl = $braintreeCartButtons.getAttribute('data-checkout-from-cart-url');\n                var checkoutFormFields = $braintreeCartButtons.getAttribute('data-checkout-form-fields');\n                var csrfToken = document.querySelector('.braintree-cart-buttons-wrap  #csrf_token');\n                var shippingAddressData = createGooglepayShippingAddressData(data.shippingAddress);\n                var googlepayCheckoutFormData = createPaymentFormData(checkoutFormFields, {\n                    firstName: billingAddressData.firstName,\n                    lastName: billingAddressData.lastName,\n                    address1: billingAddressData.streetAddress,\n                    address2: billingAddressData.extendedAddress || '',\n                    city: billingAddressData.locality,\n                    postalCode: billingAddressData.postalCode,\n                    stateCode: billingAddressData.stateCode,\n                    country: billingAddressData.countryCodeAlpha2,\n                    email: billingAddressData.email,\n                    phone: billingAddressData.phone,\n                    paymentMethod: config.paymentMethodName\n                });\n\n                googlepayCheckoutFormData.append(csrfToken.name, csrfToken.value);\n                googlepayCheckoutFormData.append('braintreeGooglePayNonce', googlepayNonce);\n                googlepayCheckoutFormData.append('braintreeGooglePayDeviceData', deviceData);\n                googlepayCheckoutFormData.append('braintreeGooglePayCardDescription', googlepayCardDescription);\n                googlepayCheckoutFormData.append('braintreeGooglepayPaymentType', googlepayPaymentType);\n                googlepayCheckoutFormData.append('braintreeSaveGooglepayAccount', true);\n                googlepayCheckoutFormData.append('braintreeGooglePayShippingAddress', JSON.stringify(shippingAddressData) || '{}');\n\n                $.ajax({\n                    type: 'POST',\n                    url: checkoutFromCartUrl,\n                    data: googlepayCheckoutFormData,\n                    contentType: false,\n                    processData: false,\n                    success: function (res) {\n                        if (res.error) {\n                            var errorMessage = '';\n                            if (res.fieldErrors.length) {\n                                res.fieldErrors.forEach(function (error, index) {\n                                    var keys = Object.keys(error);\n                                    if (keys.length) {\n                                        errorMessage += `${keys[index].replace('dwfrm_billing_', '').replace('_', ' ')} ${res.fieldErrors[index][keys[index]]}. `;\n                                    }\n                                });\n                                showCartErrorMsg(errorMessage);\n                            }\n\n                            if (res.serverErrors.length) {\n                                res.serverErrors.forEach(function (error) {\n                                    errorMessage += `${error}. `;\n                                });\n                                showCartErrorMsg(errorMessage);\n                            }\n\n                            if (res.cartError) {\n                                window.location.href = res.redirectUrl;\n                            }\n                            return;\n                        }\n\n                        sessionStorage.setItem('pageState', 'cart');\n                        googlepayIns.loader.hide();\n                        window.location.href = placeOrderUrl;\n                    },\n                    error: function (err) {\n                        if (err && err.redirectUrl) {\n                            window.location.href = err.redirectUrl;\n                        }\n                    }\n                });\n\n                return;\n            }\n\n            $googlepayNonce.value = googlepayNonce;\n            $googlepayCardDescription.value = googlepayCardDescription;\n            $braintreeGooglepayPaymentType.value = googlepayPaymentType;\n\n            // Updating Storefront Billing Form data with GooglePay Billing\n            var storeFrontBillingData = JSON.parse(document.querySelector('.braintree-billing-payment-wrap').getAttribute('data-billing-form-fields-names'));\n            storeFrontBillingData.dwfrm_billing_addressFields_firstName = billingAddressData.firstName;\n            storeFrontBillingData.dwfrm_billing_addressFields_lastName = billingAddressData.lastName;\n            storeFrontBillingData.dwfrm_billing_addressFields_address1 = billingAddressData.streetAddress;\n            storeFrontBillingData.dwfrm_billing_addressFields_address2 = billingAddressData.extendedAddress || '';\n            storeFrontBillingData.dwfrm_billing_addressFields_city = billingAddressData.locality;\n            storeFrontBillingData.dwfrm_billing_addressFields_postalCode = billingAddressData.postalCode;\n            storeFrontBillingData.dwfrm_billing_addressFields_states_stateCode = billingAddressData.stateCode;\n            storeFrontBillingData.dwfrm_billing_addressFields_country = billingAddressData.countryCodeAlpha2;\n            storeFrontBillingData.dwfrm_billing_contactInfoFields_email = billingAddressData.email;\n            storeFrontBillingData.dwfrm_billing_contactInfoFields_phone = billingAddressData.phone;\n\n            $googlePayBillingAddress.value = JSON.stringify(billingAddressData);\n\n            updateBillingFormValues(storeFrontBillingData);\n        }\n\n        // selector \"new GooglePay account\" in dropdown list\n        var newGPAccount = document.getElementById('newGPAccount');\n        var sessionGPAccount = document.querySelector('#sessionGPAccount');\n\n        // Selecting Google Pay Session Account\n        sessionGPAccount.text = $googlepayCardDescription.value;\n        newGPAccount.removeAttribute('selected');\n        sessionGPAccount.selected = true;\n        sessionGPAccount.setAttribute('data-session-account', 'true');\n\n        showGooglepayAccount();\n        continueButton.click();\n    };\n\n    googlepayIns = googlepay.init(config, $googlepayButton);\n    googlepayIns.createGooglepay();\n\n    function googlepayUpdateAmount() { // eslint-disable-line require-jsdoc\n        googlepayIns.loader.show();\n        $.ajax({\n            url: config.getOrderInfoUrl,\n            type: 'get',\n            dataType: 'json',\n            success: function (data) {\n                googlepayIns.loader.hide();\n                googlepayIns.updateAmount(data.amount);\n            },\n            error: function () {\n                window.location.reload();\n            }\n        });\n    }\n\n    $('body').on('checkout:updateCheckoutView', googlepayUpdateAmount);\n    $('body').on('braintree:updateCartTotals', googlepayUpdateAmount);\n    googlepayUpdateAmount();\n}\n\nmodule.exports = {\n    makeGooglepayPayment\n};\n","'use strict';\nvar $continueButton = $('button.submit-payment');\n\nfunction initWathcherCartUpdate() {\n    var $grantTotal = document.querySelector('.grand-total');\n    if ($grantTotal) {\n        var currentGrantTotalValue = $grantTotal.textContent;\n        $('body').on('cart:update', function () {\n            var newGrantTotalValue = $grantTotal.textContent;\n            if (newGrantTotalValue !== '' && newGrantTotalValue !== currentGrantTotalValue) {\n                currentGrantTotalValue = newGrantTotalValue;\n                var updateCartTotals = document.createEvent('Event');\n                updateCartTotals.initEvent('updateCartTotals', true, true);\n                document.querySelector('body').addEventListener('updateCartTotals', function () {\n                    'braintree:updateCartTotals';\n                }, false);\n                document.querySelector('body').dispatchEvent(updateCartTotals);\n            }\n        });\n    }\n}\n\nfunction continueButtonToggle(flag) {\n    var stage = window.location.hash.substring(1);\n    if (stage === 'placeOrder' || stage === 'shipping' || stage === null || stage === '') {\n        return;\n    }\n    if (flag) {\n        $continueButton.hide();\n    } else {\n        $continueButton.show();\n    }\n}\n\n\nfunction paymentMethodChangeHandle(currentTab) {\n    document.querySelectorAll('.payment-options[role=tablist] a[data-toggle=\"tab\"]').forEach(function (el) {\n        var $tabContent = document.querySelector(el.getAttribute('href'));\n\n        if (el === currentTab) {\n            $tabContent.querySelectorAll('input, textarea, select').forEach(function (tab) {\n                tab.removeAttribute('disabled', 'disabled');\n            });\n            $tabContent.querySelectorAll('select.no-disable').forEach(function (tab) {\n                tab.setAttribute('disabled', 'disabled');\n            });\n            continueButtonToggle(JSON.parse($tabContent.getAttribute('data-is-hide-continue-button')));\n        } else {\n            $tabContent.querySelectorAll('input, textarea, select').forEach(function (tab) {\n                tab.setAttribute('disabled', 'disabled');\n            });\n        }\n    });\n}\n\nfunction getPaymentMethodToLowerCase(paymentMethodName) {\n    var paymentMethod = paymentMethodName.split('_');\n    if (paymentMethod.length === 1) {\n        return paymentMethodName;\n    }\n    paymentMethod.forEach(function (element, index) {\n        paymentMethod[index] = element.charAt(0) + element.slice(1).toLocaleLowerCase();\n    });\n    return paymentMethod[1] ?\n        paymentMethod[0] + ' ' + paymentMethod[1] :\n        paymentMethod[0];\n}\n\nfunction updateCheckoutView(e, data) {\n    var $paymentSummary = document.querySelector('.summary-details .braintree-payment-details');\n    var htmlToAppend = '';\n    var order = data.order;\n\n    if (order.billing.payment && order.billing.payment.selectedPaymentInstruments\n        && order.billing.payment.selectedPaymentInstruments.length > 0) {\n        htmlToAppend += '<div>' + getPaymentMethodToLowerCase(order.billing.payment.selectedPaymentInstruments[0].paymentMethod) + '</div>';\n        if (order.billing.payment.selectedPaymentInstruments[0].maskedCreditCardNumber) {\n            htmlToAppend += '<div>' + order.billing.payment.selectedPaymentInstruments[0].maskedCreditCardNumber + '</div>';\n        }\n        if (order.billing.payment.selectedPaymentInstruments[0].paymentMethod === 'PayPal') {\n            htmlToAppend += '<div>' + order.billing.payment.selectedPaymentInstruments[0].braintreePaypalEmail + '</div>';\n        }\n        if (order.billing.payment.selectedPaymentInstruments[0].paymentMethod === 'Venmo') {\n            htmlToAppend += '<div>' + order.billing.payment.selectedPaymentInstruments[0].braintreeVenmoUserId + '</div>';\n        }\n        if (order.billing.payment.selectedPaymentInstruments[0].type) {\n            htmlToAppend += '<div>' + order.billing.payment.selectedPaymentInstruments[0].type + '</div>';\n        }\n        if (order.billing.payment.selectedPaymentInstruments[0].formattedAmount) {\n            htmlToAppend += '<div class=\"payment-amount\">' + order.billing.payment.selectedPaymentInstruments[0].formattedAmount + '</div>';\n        }\n    }\n\n    if ($paymentSummary) {\n        $paymentSummary.innerHTML = htmlToAppend;\n    }\n}\n\nfunction isValidInputField(field) {\n    if (!field.checkValidity()) {\n        if (!field.classList.contains('is-invalid')) {\n            field.classList.add('is-invalid');\n        }\n        return false;\n    }\n    if (field.checkValidity() && field.classList.contains('is-invalid')) {\n        field.classList.remove('is-invalid');\n    }\n    return true;\n}\n/*\n    Adding *active* line to the tab-content class in a case if it isn't already active\n    Use case: customer checkout from cart (page) and\n    (under the place Order page) hit the 'edit' button\n**/\nfunction updatePaymentMethodTab() {\n    let paymentMethodName = document.querySelectorAll('[data-braintree-payment-method]')[0].dataset.braintreePaymentMethod;\n    let content = document.querySelector(`.js_braintree_${paymentMethodName.toLowerCase()}Content`).classList.contains('active');\n    if (!content) {\n        document.querySelectorAll(`[data-method-id=${paymentMethodName}]`)[0].children[0].click();\n    }\n}\n\n/**\n * Gets Billing Address Form Values\n *\n * @returns {Object} with Billing Address\n */\nfunction getBillingAddressFormValues() {\n    return $('#dwfrm_billing').serialize().split('&')\n        .map(function (el) {\n            return el.split('=');\n        })\n        .reduce(function (accumulator, item) {\n            var elem = item[0].lastIndexOf('_');\n            if (elem < 0) {\n                accumulator[item[0]] = item[1];\n            } else {\n                elem = item[0].substring(elem + 1);\n                accumulator[elem] = item[1];\n            }\n            return accumulator;\n        }, {});\n}\n\n/**\n * Gets Nonce depending on payment method name\n *\n * @param {string} paymentMethodName - payment method name\n * @returns {boolean} nonce exist\n */\n\nfunction isNonceExist(paymentMethodName) {\n    var $nonce = document.querySelector(`#braintree${paymentMethodName}Nonce`);\n    if (!$nonce) return false;\n\n    var nonceValue = $nonce.value;\n    var $tab = document.querySelector(`.${paymentMethodName.toLowerCase()}-tab`);\n    var isActiveTab;\n    if ($tab) {\n        isActiveTab = $tab.classList.contains('active');\n    }\n\n    return !isActiveTab && nonceValue;\n}\n\nvar loaderInstance = require('./loaderHelper');\nvar accountsLoader;\n\nfunction removeBtPayment(e) {\n    let target = e.target;\n    var $loaderContainter = document.querySelector('#' + target.getAttribute('data-loader'));\n    accountsLoader = loaderInstance($loaderContainter);\n    accountsLoader.show();\n\n    $.get(target.getAttribute('data-url') + '?UUID=' + target.getAttribute('data-id'))\n        .then((data => {\n            $('#uuid-' + data.UUID).remove();\n            if (data.newDefaultAccount) {\n                document.querySelector('#uuid-' + data.newDefaultAccount + ' span').style.fontWeight = 'bold';\n                document.querySelector('#uuid-' + data.newDefaultAccount + ' button.braintree-make-default-card').style.display = 'none';\n            }\n            accountsLoader.hide();\n        }))\n        .fail(() => {\n            location.reload();\n            accountsLoader.hide();\n        });\n}\n\n/**\n * Create formData from fields data\n *\n * @param {Object} paymentFields - fields data values\n * @param {Object} fieldsData - fields data values\n * @returns {Object} cart billing form data\n */\nfunction createPaymentFormData(paymentFields, fieldsData) {\n    var paymentFieldsParsed = JSON.parse(paymentFields);\n\n    return Object.entries(paymentFieldsParsed).reduce(function (formData, entry) {\n        const [key, field] = entry;\n        if (typeof field === 'object') {\n            formData.append(field.name, fieldsData && fieldsData[key] !== null ? fieldsData[key] : field.value);\n        }\n        return formData;\n    }, new FormData());\n}\n\nfunction setDefaultProperty(params) {\n    return $.get(params.url + '?UUID=' + params.id + '&pmID=' + params.paymentMethodID)\n            .then((data) => {\n                document.querySelector('#uuid-' + data.newDefaultProperty + ' span').style.fontWeight = 'bold';\n                document.querySelector('.braintree-make-default-card.uuid-' + data.newDefaultProperty).style.display = 'none';\n                document.querySelector('#uuid-' + data.toRemoveDefaultProperty + ' span').style.fontWeight = 'normal';\n                document.querySelector('.braintree-make-default-card.uuid-' + data.toRemoveDefaultProperty).style.display = 'inline';\n                params.loader.hide();\n            })\n            .fail(() => {\n                params.loader.hide();\n            });\n}\n\nfunction initCardEvents() {\n    if (document.querySelector('.braintreeAddNewCard')) {\n        document.querySelector('.braintreeAddNewCard').addEventListener('click', function () {\n            document.querySelector('.braintreeAddNewCard').style.display = 'none';\n            document.querySelector('.braintreeAddNewCardBlock').style.display = 'block';\n        });\n    }\n    document.querySelector('.creditCard-accounts').onclick = function (e) {\n        if (e.target.classList.contains('remove-bt-payment')) {\n            removeBtPayment(e);\n        } else if (e.target.classList.contains('braintree-make-default-card')) {\n            var target = e.target;\n            var url = target.getAttribute('data-make-default-url');\n            var id = target.getAttribute('data-id');\n            var paymentMethodID = 'CARD';\n            var $loaderContainter = document.querySelector('#' + target.getAttribute('data-loader'));\n            var loader = loaderInstance($loaderContainter);\n            loader.show();\n            setDefaultProperty({\n                url: url,\n                id: id,\n                paymentMethodID: paymentMethodID,\n                loader: loader\n            });\n        }\n    };\n}\n\n/**\n * Checks authenticated customer, account list for default Payment Method\n *\n * @param {string} selector - querySelector\n * @returns {Object} default data attribute or null\n */\nfunction getOptionByDataDefault(selector) {\n    if (!document.querySelector(selector)) { return null; }\n\n    return Array.apply(null, document.querySelector(selector).options).find(function (el) {\n        return el.getAttribute('data-default') ? JSON.parse(el.getAttribute('data-default')) : null;\n    });\n}\n\n/**\n * Checks authenticated customer, account list for session Account\n *\n * @param {Object} params - querySelector + el.id\n * @returns {Object} session account object\n */\nfunction getSessionAccountOption(params) {\n    return Array.apply(null, document.querySelector(params.querySelector).options).find(function (el) {\n        return el.id === params.id && JSON.parse(el.getAttribute('data-session-account'));\n    });\n}\n\n/**\n * Remove Session Active Payment Method\n ** Use helpers to add more Payment Methods\n *\n * @returns {function}function call\n */\nfunction removeActiveSessionPayment() {\n    const activePaymentMethods = [];\n    document.querySelectorAll('.payment-options[role=tablist] li').forEach(function (el) {\n        if (el.dataset.methodId === 'CREDIT_CARD') {\n            el.dataset.methodId = 'CreditCard';\n        }\n        activePaymentMethods.push(el.dataset.methodId);\n    });\n    var helpers = {\n        PayPal: require('./paypal/paypalHelper'),\n        Venmo: require('./venmo/venmoHelper'),\n        GooglePay: require('./googlepay/googlepayHelper'),\n        CreditCard: require('./creditcard/creditcardHelper'),\n        SRC: require('./src/srcHelper'),\n        ApplePay: require('./applepay/applepayHelper')\n\n    };\n    var activePM = activePaymentMethods.find(function (el) {\n        return isNonceExist(el);\n    });\n    if (activePM) {\n        return helpers[activePM].removeSessionNonce();\n    }\n}\n\nfunction showCartErrorMsg(message) {\n    $('.checkout-btn').addClass('disabled');\n    $('.cart-error').append(\n        `<div class=\"alert alert-danger alert-dismissible valid-cart-error fade show cartError\" role=\"alert\">\n            <button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\">\n                <span aria-hidden=\"true\">&times;</span>\n            </button>\n            ${message}\n        </div>`\n    );\n    window.scrollTo(0, 0);\n}\n\n/**\n * Update Checkout Billing form values\n *\n * @param {Object} billingData - fields data values\n */\nfunction updateBillingFormValues(billingData) {\n    var $billingFormFields = document.querySelectorAll('.billing-address select, .billing-address input, .contact-info-block input');\n\n    $billingFormFields.forEach(function (el) {\n        if (billingData[el.name]) {\n            el.value = billingData[el.name];\n        }\n    });\n}\n\n/**\n * Retrieves the value of debug mode from Braintree \n * \n * @returns {boolean} Whether or whether not debug mode is enabled for braintree\n */\nfunction getDebugMode() {\n    if (window && window.braintree && typeof window.braintree.isDebugMode === 'boolean') {\n        return window.braintree.isDebugMode;\n    }\n    return false;\n}\n\nmodule.exports = {\n    initWathcherCartUpdate,\n    paymentMethodChangeHandle,\n    continueButtonToggle,\n    updateCheckoutView,\n    isValidInputField,\n    updatePaymentMethodTab,\n    getBillingAddressFormValues,\n    removeBtPayment,\n    createPaymentFormData,\n    initCardEvents,\n    isNonceExist,\n    setDefaultProperty,\n    getOptionByDataDefault,\n    removeActiveSessionPayment,\n    getSessionAccountOption,\n    showCartErrorMsg,\n    updateBillingFormValues,\n    getDebugMode\n};\n","\nmodule.exports = function (containerElement) {\n    if (!containerElement) {\n        // eslint-disable-next-line no-console\n        console.error('Braintree: No container for showing loaders');\n    }\n    function Constructor() {\n        this.containerEl = containerElement;\n    }\n    Constructor.prototype.show = function () {\n        this.containerEl.style.display = 'block';\n    };\n    Constructor.prototype.hide = function () {\n        this.containerEl.style.display = 'none';\n    };\n    return new Constructor();\n};\n","'use strict';\nvar braintreeLocal = require('../braintreeLocal');\nvar $lpmButton = document.querySelectorAll('.lpmButton');\n\n$lpmButton.forEach(function (el) {\n    var $btn = el;\n    var config = JSON.parse($btn.getAttribute('data-braintree-config'));\n    var localIns = braintreeLocal.init(config, $btn);\n    localIns.createLocalPayment();\n\n    function updateAmountData() { // eslint-disable-line require-jsdoc\n        $.ajax({\n            url: config.getOrderInfoUrl,\n            type: 'get',\n            dataType: 'json',\n            success: function (data) {\n                localIns.updateAmount(data.amount);\n            },\n            error: function () {\n                window.location.reload();\n            }\n        });\n    }\n\n    $('body').on('checkout:updateCheckoutView', updateAmountData);\n});\n","'use strict';\n\nvar paypalHelper = require('./paypalHelper');\nvar payPal = require('../braintreePaypal');\nvar paypalSavedAccountHandler = require('./paypalSavedAccountHandler');\nvar helper = require('../helper');\n\nvar $paypalMinicartButton;\n\nfunction miniCartButton() {\n    document.querySelectorAll('.js_braintree_paypal_cart_button').forEach(function (el) {\n        var $btn = el;\n        if (JSON.parse($btn.getAttribute('data-is-inited'))) {\n            return;\n        }\n        var config = JSON.parse($btn.getAttribute('data-braintree-config'));\n        if (typeof config !== 'object' || config === null) {\n            // eslint-disable-next-line no-console\n            console.error(el, 'not valid data-braintree-config');\n            return;\n        }\n        $paypalMinicartButton = document.querySelector('.paypalMinicartButton');\n        if ($paypalMinicartButton && config.options.amount === 0) {\n            $paypalMinicartButton.style.display = 'none';\n        }\n        config.paypalConfig = config.paypalConfig || {};\n\n        config.onTokenizePayment = function (payload, btnInstance) {\n            var that = btnInstance;\n            var params = btnInstance.params;\n            var paypalCheckoutFormFields = document.querySelector('.braintree-cart-paypal-buttons-wrap').getAttribute('data-paypal-checkout-form-fields');\n            var details = payload.details;\n            if (!details.billingAddress) {\n                that.er.show('Merchant PayPal account does not support the Billing Address retrieving. Contact PayPal for details on eligibility and enabling this feature.');\n                return;\n            }\n            var billingAddressData = paypalHelper.createBillingAddressData(details.billingAddress, details);\n            var paypalCheckoutFormData = helper.createPaymentFormData(paypalCheckoutFormFields, {\n                firstName: billingAddressData.firstName,\n                lastName: billingAddressData.lastName,\n                address1: billingAddressData.streetAddress,\n                address2: billingAddressData.extendedAddress || '',\n                city: billingAddressData.locality,\n                postalCode: billingAddressData.postalCode,\n                stateCode: billingAddressData.state,\n                country: billingAddressData.countryCodeAlpha2,\n                email: billingAddressData.email,\n                phone: billingAddressData.phone,\n                paymentMethod: params.paymentMethodName\n            });\n\n            var csrfToken = document.querySelector('.braintree-cart-paypal-buttons-wrap #csrf_token');\n            paypalCheckoutFormData.append(csrfToken.name, csrfToken.value);\n            paypalCheckoutFormData.append('braintreePaypalNonce', payload.nonce);\n            paypalCheckoutFormData.append('braintreePaypalRiskData', (params || {}).riskData);\n            paypalCheckoutFormData.append('braintreeSavePaypalAccount', true);\n            paypalCheckoutFormData.append('braintreePaypalShippingAddress',\n                details.shippingAddress ?\n                    paypalHelper.createShippingAddressData(details.shippingAddress, details) :\n                    '{}'\n            );\n            paypalCheckoutFormData.append('braintreePaypalBillingAddress', JSON.stringify(billingAddressData));\n\n            $.ajax({\n                type: 'POST',\n                url: params.paypalHandle,\n                data: paypalCheckoutFormData,\n                contentType: false,\n                processData: false,\n                success: function (data) {\n                    if (data.error) {\n                        var errorMessage = '';\n                        if (data.fieldErrors.length) {\n                            data.fieldErrors.forEach(function (error, index) {\n                                var keys = Object.keys(error);\n                                if (keys.length) {\n                                    errorMessage += `${keys[index].replace('dwfrm_billing_', '').replace('_', ' ')} ${data.fieldErrors[index][keys[index]]}. `;\n                                }\n                            });\n                            helper.showCartErrorMsg(errorMessage);\n                        }\n\n                        if (data.serverErrors.length) {\n                            data.serverErrors.forEach(function (error) {\n                                errorMessage += `${error}. `;\n                            });\n                            helper.showCartErrorMsg(errorMessage);\n                        }\n\n                        if (data.cartError) {\n                            window.location.href = data.redirectUrl;\n                        }\n                        return;\n                    }\n\n                    window.location.href = params.redirectUrl;\n                },\n                error: function (err) {\n                    if (err && err.redirectUrl) {\n                        window.location.href = err.redirectUrl;\n                    }\n                }\n            });\n        };\n\n        var paypalIns = payPal.init(config, $btn);\n\n        function updateCartPaypalAmount() { // eslint-disable-line require-jsdoc\n            paypalIns.loader.show();\n            $.ajax({\n                url: config.getOrderInfoUrl,\n                type: 'get',\n                dataType: 'json',\n                success: function (data) {\n                    paypalIns.loader.hide();\n                    paypalIns.updateAmount(data.amount);\n                },\n                error: function () {\n                    window.location.reload();\n                }\n            });\n        }\n        $('body').on('cart:update', function () {\n            $paypalMinicartButton = document.querySelector('.paypalMinicartButton');\n            var $totalPrice = document.querySelector('.sub-total');\n            if ($paypalMinicartButton && $totalPrice) {\n                var isZeroAmount = $totalPrice.innerHTML.substring(1) === '0.00';\n                $paypalMinicartButton.style.display = isZeroAmount ? 'none' : '';\n            }\n        });\n\n        $('body').on('braintree:updateCartTotals', updateCartPaypalAmount);\n        $btn.setAttribute('data-is-inited', true);\n    });\n}\n\nvar observer = new MutationObserver(function (mutations) {\n    mutations.forEach(function (mutation) {\n        if (mutation.addedNodes.length < 2) {\n            return;\n        }\n        miniCartButton();\n        var $staticPaypalButton = document.querySelector('.braintree-static-paypal-button');\n        if ($staticPaypalButton) {\n            $staticPaypalButton.addEventListener('click', paypalSavedAccountHandler.staticImageHandler);\n        }\n    });\n});\n\nmodule.exports = {\n    miniCartButton,\n    observer\n};\n","'use strict';\nvar payPal = require('../braintreePaypal');\nvar paypalHelper = require('./paypalHelper');\nvar helper = require('../helper');\nvar loaderInstance = require('../loaderHelper');\nvar accountsLoader;\n\nfunction initAddPaypalAccount() {\n    var $btn = document.querySelector('.js_braintree_accountPaypalButton');\n    var $paypalErrorContainer = document.querySelector('#paypalAccountErrorContainer');\n    var $paypalLoader = document.querySelector('#braintreePayPalAccLoader');\n\n    if (JSON.parse($btn.getAttribute('data-is-inited'))) {\n        return;\n    }\n    var config = JSON.parse($btn.getAttribute('data-braintree-config'));\n    if (typeof config !== 'object' || config === null) {\n        // eslint-disable-next-line no-console\n        console.error($btn, 'not valid data-braintree-config');\n        return;\n    }\n\n    config.$loaderContainer = $paypalLoader;\n    config.$errorContainer = $paypalErrorContainer;\n    config.onTokenizePayment = function (data) {\n        let accountPaypalButton = document.querySelector('.js_braintree_accountPaypalButton');\n        let paypalAddAccountHandler = accountPaypalButton.getAttribute('data-paypal-add-account-handler');\n        let paypalAccountFormFields = accountPaypalButton.getAttribute('data-paypal-account-form-fields');\n        let paypalBillingAddressData = paypalHelper.createBillingAddressData(data.details.billingAddress, data.details);\n        let paypalAccountFormData = helper.createPaymentFormData(paypalAccountFormFields, {\n            nonce: data.nonce,\n            email: data.details.email,\n            addresses: JSON.stringify(paypalBillingAddressData),\n            shippingAddress: JSON.stringify(data.details.shippingAddress)\n        });\n        let csrfToken = document.querySelector('.js_braintree_accountPaypalButton_wrapper #csrf_token');\n        paypalAccountFormData.append(csrfToken.name, csrfToken.value);\n\n        let $loaderContainter = document.querySelector('#paypalAccountBtLoader');\n        accountsLoader = loaderInstance($loaderContainter);\n        accountsLoader.show();\n        return $.ajax({\n            type: 'POST',\n            url: paypalAddAccountHandler,\n            data: paypalAccountFormData,\n            contentType: false,\n            processData: false\n        })\n            .then((paymentData) => {\n                paypalHelper.hidePaypalAccountBtn();\n                $paypalLoader.style.display = 'none';\n                $paypalErrorContainer.textContent = '';\n                $paypalErrorContainer.style.display = 'none';\n\n                $.get(paymentData.renderAccountsUrl)\n                    .then((tplData => {\n                        accountsLoader.hide();\n                        document.querySelector('.paypal-accounts').innerHTML = tplData;\n                        document.querySelectorAll('.paypal-accounts .remove-bt-payment').forEach(function (el) {\n                            el.addEventListener('click', helper.removeBtPayment);\n                        });\n                    }));\n            })\n            .fail(({ responseJSON }) => {\n                accountsLoader.hide();\n                $paypalLoader.style.display = 'none';\n                $paypalErrorContainer.style.display = 'block';\n                $paypalErrorContainer.textContent = responseJSON.error;\n            });\n    };\n\n    payPal.init(config, $btn);\n    $btn.setAttribute('data-is-inited', true);\n}\n\nfunction initPayPalEvents() {\n    document.querySelector('.add-paypal-account').addEventListener('click', function () {\n        paypalHelper.showPaypalAccountBtn();\n        initAddPaypalAccount();\n    });\n}\n\nfunction initPaypalButtonsEvents() {\n    document.querySelector('.paypal-accounts').onclick = function (e) {\n        if (e.target.classList.contains('remove-bt-payment')) {\n            helper.removeBtPayment(e);\n        } else if (e.target.classList.contains('braintree-make-default-card')) {\n            var target = e.target;\n            var url = target.getAttribute('data-make-default-url');\n            var id = target.getAttribute('data-id');\n            var paymentMethodID = document.querySelector('.paypal-accounts').getAttribute('data-payment-method-id');\n            var $loaderContainter = document.querySelector('#' + target.getAttribute('data-loader'));\n            var loader = loaderInstance($loaderContainter);\n            loader.show();\n            helper.setDefaultProperty({\n                url: url,\n                id: id,\n                paymentMethodID: paymentMethodID,\n                loader: loader\n            });\n        }\n    };\n}\n\nmodule.exports = {\n    initPayPalEvents,\n    initAddPaypalAccount,\n    initPaypalButtonsEvents\n};\n","'use strict';\nvar helper = require('../helper');\n\nvar $addPaypalAccountBtn = document.querySelector('.add-paypal-account');\nvar $paypalAccountWrapper = document.querySelector('.js_braintree_accountPaypalButton_wrapper');\nvar $savePaypalAccountCountainer = document.querySelector('#braintreeSavePaypalAccountContainer');\nvar $savePaypalAccountCheckbox = document.querySelector('#braintreeSavePaypalAccount');\nvar $braintreePayPalNonce = document.querySelector('#braintreePayPalNonce');\nvar $continueButton = document.querySelector('.submit-payment');\n\nvar formValidationConrol = function (validateActions) {\n    var isFormValid = true;\n    if (isFormValid) {\n        validateActions.enable();\n    } else {\n        validateActions.disable();\n    }\n};\n\nfunction getOptionByEmail() {\n    var sessionEmail = document.getElementById('braintreePaypalAccount').value || null;\n    return Array.apply(null, document.querySelector('#braintreePaypalAccountsList').options).find(function (el) {\n        return el.getAttribute('data-id') && sessionEmail && sessionEmail === el.text;\n    });\n}\n\nfunction setSessionAccountOptionDefault() {\n    var savedDefaultOption = helper.getOptionByDataDefault('#braintreePaypalAccountsList');\n    if (!savedDefaultOption) return;\n\n    savedDefaultOption.selected = '';\n    helper.getSessionAccountOption({\n        querySelector: '#braintreePaypalAccountsList',\n        id: 'braintreePaypalAccount'\n    }).selected = 'selected';\n}\n\n/*\n    Check if paypal method was used and change appearance of paypal tab\n**/\nfunction removeSessionNonce() {\n    var sessionOption = helper.getSessionAccountOption({\n        querySelector: '#braintreePaypalAccountsList',\n        id: 'braintreePaypalAccount'\n    });\n    if (sessionOption) {\n        var $paypalContent = document.querySelector('.js_braintree_paypalContent');\n        document.querySelector('#braintreePayPalNonce').value = '';\n        document.querySelector('#braintreePaypalAccount').selected = false;\n        sessionOption.classList.add('used-paypal-account-hide');\n        sessionOption.classList.remove('used-paypal-account');\n        sessionOption.value = '';\n        sessionOption.text = '';\n        sessionOption.setAttribute('data-session-account', false);\n        sessionOption.setAttribute('data-save', false);\n\n        var defaultOption = helper.getOptionByDataDefault('#braintreePaypalAccountsList');\n        if (defaultOption) {\n            defaultOption.selected = true;\n            document.querySelector('#braintreeSavePaypalAccountContainer').style.display = 'none';\n            document.querySelector('.js_braintree_paypal_billing_button').style.display = 'none';\n            $paypalContent.setAttribute('data-paypal-is-hide-continue-button', false);\n        } else {\n            $paypalContent.setAttribute('data-paypal-is-hide-continue-button', true);\n            document.querySelector('.js_braintree_paypal_billing_button').style.display = 'block';\n            var paypalAccount = document.querySelector('.form-group.braintree_used_paypal_account');\n            paypalAccount.classList.remove('used-paypal-account');\n            paypalAccount.classList.add('used-paypal-account-hide');\n        }\n\n        [].forEach.call(document.querySelector('#braintreePaypalAccountsList'), function (el) {\n            if (el.style.display === 'none') el.style.display = 'block';\n        });\n    }\n}\n\nfunction initAccountListAndSaveFunctionality() {\n    var $accountsList = document.querySelector('#braintreePaypalAccountsList');\n\n    function accountsListChange() { // eslint-disable-line require-jsdoc\n        var isSameSessionAccount = getOptionByEmail();\n        $continueButton.removeEventListener('click', removeSessionNonce);\n\n        if ($accountsList.value === 'newaccount') {\n            if ($savePaypalAccountCountainer) {\n                $savePaypalAccountCountainer.style.display = 'block';\n                $savePaypalAccountCheckbox.checked = true;\n            }\n        } else if ($accountsList.selectedOptions[0].id === 'braintreePaypalAccount') {\n            // Case when Session Email already saved under account\n            $braintreePayPalNonce.value = $accountsList.selectedOptions[0].getAttribute('data-nonce');\n            if (isSameSessionAccount) {\n                $savePaypalAccountCountainer.style.display = 'none';\n                $savePaypalAccountCheckbox.checked = false;\n            } else if ($savePaypalAccountCountainer) {\n                $savePaypalAccountCountainer.style.display = 'block';\n                $savePaypalAccountCheckbox.checked = JSON.parse(document.querySelector('#braintreePaypalAccount').getAttribute('data-save'));\n            }\n        } else {\n            $continueButton.addEventListener('click', removeSessionNonce);\n            $braintreePayPalNonce.value = '';\n            if ($savePaypalAccountCountainer) {\n                $savePaypalAccountCheckbox.checked = false;\n                $savePaypalAccountCountainer.style.display = 'none';\n            }\n        }\n    }\n\n    if ($accountsList) {\n        $accountsList.addEventListener('change', accountsListChange);\n        accountsListChange();\n    }\n}\n\nfunction createShippingAddressData(inpShippingAddress, details) {\n    var shippingAddress = inpShippingAddress;\n    if (!shippingAddress.recipientName) {\n        shippingAddress.firstName = details.firstName;\n        shippingAddress.lastName = details.lastName;\n        shippingAddress.recipientName = details.firstName + ' ' + details.lastName;\n    }\n    shippingAddress.email = details.email;\n    shippingAddress.phone = details.phone;\n    shippingAddress.countryCodeAlpha2 = shippingAddress.countryCode;\n    shippingAddress.streetAddress = shippingAddress.line1;\n    shippingAddress.extendedAddress = shippingAddress.line2;\n    shippingAddress.locality = shippingAddress.city;\n    shippingAddress.region = shippingAddress.state;\n    shippingAddress.postalCode = shippingAddress.postalCode;\n    return JSON.stringify(shippingAddress);\n}\n\nfunction createBillingAddressData(inpBillingAddress, details) {\n    var billingAddress = inpBillingAddress;\n    billingAddress.firstName = details.firstName;\n    billingAddress.lastName = details.lastName;\n    billingAddress.email = details.email;\n    billingAddress.phone = details.phone;\n    billingAddress.countryCodeAlpha2 = billingAddress.countryCode;\n    billingAddress.streetAddress = billingAddress.line1;\n    billingAddress.extendedAddress = billingAddress.line2;\n    billingAddress.locality = billingAddress.city;\n    billingAddress.region = billingAddress.state;\n    return billingAddress;\n}\n\nfunction appendToUrl(url, param) {\n    var newUrl = url;\n    newUrl += (newUrl.indexOf('?') !== -1 ? '&' : '?') + Object.keys(param).map(function (key) {\n        return key + '=' + encodeURIComponent(param[key]);\n    }).join('&');\n\n    return newUrl;\n}\n\nfunction showPayPalAccount(braintreePaypalEmail, braintreePaypalNonce) {\n    var braintreePaypalAccount = document.getElementById('braintreePaypalAccount');\n    var paypalAccount = document.querySelector('.form-group.braintree_used_paypal_account');\n    var $paypalContent = document.querySelector('.js_braintree_paypalContent');\n    var $braintreePaypalAccountsList = document.getElementById('braintreePaypalAccountsList');\n    var customerAuthenticated = JSON.parse($braintreePaypalAccountsList.dataset.customerAuthenticated);\n\n    if (customerAuthenticated || (braintreePaypalEmail && braintreePaypalAccount.text !== 'PayPal')) {\n        if (braintreePaypalNonce && $braintreePaypalAccountsList) {\n            return true;\n        }\n\n        document.querySelectorAll('.js_braintree_paypalContent .custom-checkbox').forEach((el) => { el.style.display = 'none'; });\n    }\n\n    braintreePaypalAccount.text = braintreePaypalEmail;\n    if (!paypalAccount.classList.contains('used-paypal-account')) {\n        paypalAccount.classList.remove('used-paypal-account-hide');\n        paypalAccount.classList.add('used-paypal-account');\n    }\n\n    document.querySelector('.js_braintree_paypal_billing_button').style.display = 'none';\n    $paypalContent.setAttribute('data-paypal-is-hide-continue-button', false);\n}\n\nfunction showCheckoutErrorMsg(message) {\n    document.querySelector('.error-message-text').textContent = '';\n    document.querySelector('.error-message').style.display = 'block';\n    document.querySelector('.error-message-text').append(message);\n    window.scrollTo(0, 0);\n}\n\nfunction showPDPButton($braintreePDPButton) {\n    $braintreePDPButton.style.display = '';\n}\n\nfunction hidePDPButton($braintreePDPButton) {\n    $braintreePDPButton.style.display = 'none';\n}\n\nfunction showPaypalAccountBtn() {\n    $addPaypalAccountBtn.style.display = 'none';\n    $paypalAccountWrapper.style.display = 'block';\n}\nfunction hidePaypalAccountBtn() {\n    $addPaypalAccountBtn.style.display = 'block';\n    $paypalAccountWrapper.style.display = 'none';\n}\n\nmodule.exports = {\n    formValidationConrol,\n    initAccountListAndSaveFunctionality,\n    createShippingAddressData,\n    createBillingAddressData,\n    appendToUrl,\n    showPayPalAccount,\n    showCheckoutErrorMsg,\n    showPDPButton,\n    hidePDPButton,\n    getOptionByEmail,\n    removeSessionNonce,\n    setSessionAccountOptionDefault,\n    showPaypalAccountBtn,\n    hidePaypalAccountBtn\n};\n","'use strict';\n\nvar braintreeUtils = require('../braintreeUtils');\nvar loaderInstance = require('../loaderHelper');\nvar {\n    showPDPButton,\n    hidePDPButton,\n    showCartErrorMsg } = require('./paypalHelper');\nvar { createPaymentFormData } = require('../helper');\n\nvar $braintreePDPButton = document.querySelector('.braintree_pdp_button');\n\nfunction staticImageHandler() {\n    var $loaderContainter = document.querySelector('.braintreePayPalLoader');\n    var loader = loaderInstance($loaderContainter);\n    var $staticPaypalButton = document.querySelector('.braintree-static-paypal-button');\n    var checkoutFromCartUrl = $staticPaypalButton.getAttribute('data-checkout-from-cart-url');\n    var placeOrderUrl = $staticPaypalButton.getAttribute('data-paypal-placeorder-url');\n\n    var ppAccountData = JSON.parse($staticPaypalButton.getAttribute('data-paypal-account-data'));\n    var ppAccountAddressData = JSON.parse(ppAccountData.address);\n    var paypalCheckoutFormFields = document.querySelector('.braintree-cart-paypal-buttons-wrap').getAttribute('data-paypal-checkout-form-fields');\n    var paypalCheckoutFormData = createPaymentFormData(paypalCheckoutFormFields, {\n        firstName: ppAccountAddressData.firstName,\n        lastName: ppAccountAddressData.lastName,\n        address1: ppAccountAddressData.streetAddress,\n        address2: ppAccountAddressData.extendedAddress || '',\n        city: ppAccountAddressData.locality,\n        postalCode: ppAccountAddressData.postalCode,\n        stateCode: ppAccountAddressData.state,\n        country: ppAccountAddressData.countryCodeAlpha2,\n        email: ppAccountData.email,\n        phone: ppAccountAddressData.phone.replace('-', ''),\n        paymentMethod: ppAccountData.paymentMethod\n    });\n    paypalCheckoutFormData.append('braintreeSavePaypalAccount', true);\n    paypalCheckoutFormData.append('paymentMethodUUID', ppAccountData.uuid);\n    var csrfToken = document.querySelector('.braintree-cart-paypal-buttons-wrap #csrf_token');\n    paypalCheckoutFormData.append(csrfToken.name, csrfToken.value);\n\n    loader.show();\n    if ($braintreePDPButton && $braintreePDPButton.style.display === '') {\n        var res = braintreeUtils.pdpOnlickForAsignedPaypalPayment();\n        if (res.error) {\n            loader.hide();\n            // eslint-disable-next-line no-unused-expressions\n            window.location.reload;\n            return;\n        }\n    }\n\n    return $.ajax({\n        url: checkoutFromCartUrl,\n        type: 'POST',\n        data: paypalCheckoutFormData,\n        contentType: false,\n        processData: false,\n        success: function (data) {\n            loader.hide();\n            if (data.error) {\n                var errorMessage = '';\n                if (data.fieldErrors.length) {\n                    data.fieldErrors.forEach(function (error, index) {\n                        var keys = Object.keys(error);\n                        if (keys.length) {\n                            errorMessage += `${keys[index].replace('dwfrm_billing_', '').replace('_', ' ')} ${data.fieldErrors[index][keys[index]]}. `;\n                        }\n                    });\n                    showCartErrorMsg(errorMessage);\n                }\n\n                if (data.serverErrors.length) {\n                    data.serverErrors.forEach(function (error) {\n                        errorMessage += `${error}. `;\n                    });\n                    showCartErrorMsg(errorMessage);\n                }\n\n                if (data.cartError) {\n                    window.location.href = data.redirectUrl;\n                }\n                return;\n            }\n\n            sessionStorage.setItem('pageState', 'cart');\n            window.location.href = placeOrderUrl;\n        },\n        error: function (err) {\n            loader.hide();\n            if (err && err.redirectUrl) {\n                window.location.href = err.redirectUrl;\n            }\n        }\n    });\n}\n\nfunction paypalStaticPdpButtonHandler() {\n    if ($braintreePDPButton) {\n        var $price = document.querySelector('.price .sales .value');\n        var isZeroAmount = false;\n        var $miniCartQuantity = document.querySelector('.minicart-quantity');\n        var $addToCartButton = document.querySelector('.add-to-cart') || document.querySelector('.add-to-cart-global');\n\n        // Check minicart quantity and hide PDPbutton if it is not empty\n        if (($miniCartQuantity && parseInt($miniCartQuantity.textContent, 0) > 0)\n            || ($price && $price.getAttribute('content') === '0.00')) {  // Check if product price is zero\n            hidePDPButton($braintreePDPButton);\n        }\n\n        if ($addToCartButton.disabled) {\n            hidePDPButton($braintreePDPButton);\n        }\n\n        $('body').on('product:afterAddToCart', function () {\n            hidePDPButton($braintreePDPButton);\n        });\n\n        $('body').on('cart:update', function () {\n            $miniCartQuantity = parseInt(document.querySelector('.minicart-quantity').textContent, 0);\n            if ($addToCartButton.disabled) {\n                hidePDPButton($braintreePDPButton);\n            }\n            if ($miniCartQuantity === 0 && !$addToCartButton.disabled) {\n                showPDPButton($braintreePDPButton);\n            }\n        });\n\n        $('body').on('product:statusUpdate', function () {\n            $miniCartQuantity = parseInt(document.querySelector('.minicart-quantity').textContent, 0);\n            $price = document.querySelector('.price .sales .value');\n            isZeroAmount = false;\n            if ($price) {\n                isZeroAmount = $price.getAttribute('content') === '0.00';\n            }\n\n            if ($miniCartQuantity === 0) {\n                if ($addToCartButton.disabled || isZeroAmount) {\n                    hidePDPButton($braintreePDPButton);\n                }\n                if (!$addToCartButton.disabled && !isZeroAmount) {\n                    showPDPButton($braintreePDPButton);\n                }\n            }\n        });\n    }\n}\n\nmodule.exports = {\n    staticImageHandler,\n    paypalStaticPdpButtonHandler\n};\n","var src = require('../braintreeSrc');\nvar loaderInstance = require('../loaderHelper');\n\nfunction submitAddSrcAccountForm() {\n    $('.js_braintree_addSrcAccountForm').submit(function () {\n        var $form = $(this);\n        var $btSrcFormErrorContainer = document.querySelector('#braintreeSrcFormErrorContainer');\n        $form.spinner().start();\n\n        $.post($form.attr('action'), $form.serialize())\n            .done(function (data) {\n                $form.spinner().stop();\n                if (!data.success) {\n                    $btSrcFormErrorContainer.style.display = 'block';\n                    $btSrcFormErrorContainer.textContent = data.error;\n                } else {\n                    location.href = data.redirectUrl;\n                }\n            })\n            .fail(function (err) {\n                if (err.responseJSON.redirectUrl) {\n                    window.location.href = err.responseJSON.redirectUrl;\n                }\n                $form.spinner().stop();\n            });\n        return false;\n    });\n}\n\nfunction initAddSrcAccount() {\n    var srcIns;\n    var $btn = document.querySelector('.js_braintree_src_account_button');\n    var $srcNonce = document.querySelector('#braintreeSrcNonce');\n    var $btSrcFormErrorContainer = document.querySelector('#braintreeSrcFormErrorContainer');\n    var $btSrcLoader = document.querySelector('.braintreeSrcLoader');\n    var loader = loaderInstance($btSrcLoader);\n\n    if (JSON.parse($btn.getAttribute('data-is-inited'))) {\n        return;\n    }\n    var config = JSON.parse($btn.getAttribute('data-braintree-config'));\n\n    if (typeof config !== 'object' || config === null) {\n        // eslint-disable-next-line no-console\n        console.error($btn, 'not valid data-braintree-config');\n        return;\n    }\n    loader.show();\n\n    config.onTokenizePayment = function (data) {\n        if ($btSrcFormErrorContainer.style.display === 'block') {\n            $btSrcFormErrorContainer.style.display = 'none';\n            $btSrcFormErrorContainer.textContent = '';\n        }\n        $srcNonce.value = data.nonce;\n        document.querySelector('.braintreeSrcBtn').click();\n    };\n\n    srcIns = src.init(config, $btn);\n    srcIns.loadSrcButton();\n\n    $btn.setAttribute('data-is-inited', true);\n    submitAddSrcAccountForm();\n}\n\nmodule.exports = {\n    initAddSrcAccount\n};\n","var $srcContent = document.querySelector('.js_braintree_srcContent');\nvar $srcSessionAccount = document.querySelector('#sessionSrcAccount');\nvar $srcAccountList = document.querySelector('#braintreeSrcAccountsList');\nvar $srcButton = document.querySelector('.js_braintree_src_button');\nvar $accoutnListBlock = document.querySelector('.braintree_used_src_account');\nvar helper = require('../helper');\nvar $saveSRCAccountCheckbox = document.querySelector('#braintreeSaveSRCAccount');\n\n\nfunction srcUpdateAmount(srcIns, config) { // eslint-disable-line require-jsdoc\n    srcIns.loader.show();\n    $.ajax({\n        url: config.getOrderInfoUrl,\n        type: 'get',\n        dataType: 'json',\n        success: function (data) {\n            srcIns.loader.hide();\n            srcIns.updateAmount(data.amount);\n        },\n        error: function () {\n            window.location.reload();\n        }\n    });\n}\n\nfunction setSessionAccountData(cardDescrition) {\n    $srcSessionAccount.value = cardDescrition;\n    $srcSessionAccount.text = cardDescrition;\n    $srcSessionAccount.selected = true;\n    $accoutnListBlock.style.display = 'block';\n    $srcButton.style.display = 'none';\n    $srcContent.setAttribute('data-paypal-is-hide-continue-button', false);\n    helper.continueButtonToggle(false);\n}\n\nfunction updateSessionAccountDropdown() {\n    if ($srcAccountList.value === 'newaccount') {\n        $srcButton.style.display = 'block';\n        helper.continueButtonToggle(true);\n        $srcContent.setAttribute('data-paypal-is-hide-continue-button', true);\n\n        if ($saveSRCAccountCheckbox) {\n            $saveSRCAccountCheckbox.checked = true;\n        }\n    } else {\n        $srcButton.style.display = 'none';\n        helper.continueButtonToggle(false);\n        $srcContent.setAttribute('data-paypal-is-hide-continue-button', false);\n\n        if ($saveSRCAccountCheckbox) {\n            $saveSRCAccountCheckbox.checked = JSON.parse($srcSessionAccount.getAttribute('data-save'));\n        }\n    }\n}\n\nfunction initSessionAccountDropdownState() {\n    if ($srcAccountList.value === 'newaccount') {\n        $accoutnListBlock.style.display = 'none';\n    } else {\n        helper.continueButtonToggle(false);\n        $srcContent.setAttribute('data-paypal-is-hide-continue-button', false);\n        $srcButton.style.display = 'none';\n    }\n}\n\n/*\n    Remove method was used and change appearance of googlepay tab\n**/\nfunction removeSessionNonce() {\n    var $sessionAccount = document.querySelector('#sessionSrcAccount');\n    $sessionAccount.value = '';\n    $sessionAccount.text = '';\n    $sessionAccount.setAttribute('data-save', false);\n    $accoutnListBlock.style.display = 'none';\n\n    document.querySelector('#braintreeSRCNonce').value = '';\n    document.querySelector('#braintreeSrcBillingAddress').value = '';\n    document.querySelector('#braintreeSrcCardDescription').value = '';\n\n    document.querySelector('#newSrcAccount').selected = true;\n    updateSessionAccountDropdown();\n}\n\nfunction createSrcShippingAddressData(shippingData) {\n    var shippingAddress = {};\n    shippingAddress.recipientName = shippingData.firstName + ' ' + shippingData.lastName;\n    shippingAddress.phone = shippingData.phoneNumber;\n    shippingAddress.countryCodeAlpha2 = shippingData.countryCode;\n    shippingAddress.streetAddress = shippingData.streetAddress;\n    shippingAddress.extendedAddress = shippingData.extendedAddress;\n    shippingAddress.locality = shippingData.locality;\n    shippingAddress.region = shippingData.region;\n    shippingAddress.postalCode = shippingData.postalCode;\n    return JSON.stringify(shippingAddress);\n}\n\nmodule.exports = {\n    srcUpdateAmount,\n    setSessionAccountData,\n    updateSessionAccountDropdown,\n    initSessionAccountDropdownState,\n    removeSessionNonce,\n    createSrcShippingAddressData\n};\n","'use strict';\nvar src = require('../braintreeSrc');\nvar srcHelper = require('./srcHelper');\n\nvar {\n    createPaymentFormData,\n    showCartErrorMsg,\n    updateBillingFormValues\n} = require('./../helper');\n\nvar $srcButton = document.querySelector('.js_braintree_src_button');\nvar $srcNonce = document.querySelector('#braintreeSRCNonce');\nvar $srcCardDescription = document.querySelector('#braintreeSrcCardDescription');\nvar $srcBillingAddress = document.querySelector('#braintreeSrcBillingAddress');\nvar $srcAccountList = document.querySelector('#braintreeSrcAccountsList');\nvar $srcOnCart = document.querySelector('.braintree-cart-src-button');\n\nfunction initSrcButton(continueButton) {\n    var srcIns;\n    var config = JSON.parse($srcButton.getAttribute('data-braintree-config'));\n    if (typeof config !== 'object' || config === null) {\n        // eslint-disable-next-line no-console\n        console.error($srcButton, 'not valid data-braintree-config');\n    }\n\n    if ($srcAccountList) {\n        srcHelper.initSessionAccountDropdownState();\n        $srcAccountList.addEventListener('change', srcHelper.updateSessionAccountDropdown);\n    }\n\n    config.onTokenizePayment = function (response) {\n        require('../helper').removeActiveSessionPayment();\n        var cardDescription = response.details.cardType + ' ' + response.description;\n        var deviceData = document.querySelector('input[name=braintreeSrcDeviceDataInput]').value;\n\n        // Billing Checkout\n        if (!$srcOnCart) {\n            $srcNonce.value = response.nonce;\n            $srcCardDescription.value = cardDescription;\n            srcHelper.setSessionAccountData(cardDescription);\n\n            // Updating Storefront Billing Form data with SRC Billing\n            var scrPayBillingData = response.billingAddress;\n            var storeFrontBillingData = JSON.parse(document.querySelector('.braintree-billing-payment-wrap').getAttribute('data-billing-form-fields-names'));\n            storeFrontBillingData.dwfrm_billing_addressFields_firstName = scrPayBillingData.firstName;\n            storeFrontBillingData.dwfrm_billing_addressFields_lastName = scrPayBillingData.lastName;\n            storeFrontBillingData.dwfrm_billing_addressFields_address1 = scrPayBillingData.streetAddress;\n            storeFrontBillingData.dwfrm_billing_addressFields_address2 = scrPayBillingData.extendedAddress || '';\n            storeFrontBillingData.dwfrm_billing_addressFields_city = scrPayBillingData.locality;\n            storeFrontBillingData.dwfrm_billing_addressFields_postalCode = scrPayBillingData.postalCode;\n            storeFrontBillingData.dwfrm_billing_addressFields_states_stateCode = scrPayBillingData.region;\n            storeFrontBillingData.dwfrm_billing_addressFields_country = scrPayBillingData.countryCode;\n            storeFrontBillingData.dwfrm_billing_contactInfoFields_email = response.userData.userEmail;\n            storeFrontBillingData.dwfrm_billing_contactInfoFields_phone = scrPayBillingData.phoneNumber;\n\n            scrPayBillingData.email = response.userData.userEmail;\n            $srcBillingAddress.value = JSON.stringify(scrPayBillingData);\n\n            updateBillingFormValues(storeFrontBillingData);\n\n            continueButton.click();\n            return;\n        }\n\n        // Cart Checkout\n        var shippingAddressData = srcHelper.createSrcShippingAddressData(response.shippingAddress);\n        var paymentMethodName = JSON.parse($srcButton.getAttribute('data-braintree-config')).paymentMethodName;\n        var $braintreeCartButtons = document.querySelector('.braintree-cart-buttons-wrap');\n        var placeOrderUrl = $braintreeCartButtons.getAttribute('data-checkout-placeorder-url');\n        var checkoutFromCartUrl = $braintreeCartButtons.getAttribute('data-checkout-from-cart-url');\n        var checkoutFormFields = $braintreeCartButtons.getAttribute('data-checkout-form-fields');\n        var srcCheckoutFormData = createPaymentFormData(checkoutFormFields, {\n            firstName: response.userData.userFirstName,\n            lastName: response.userData.userLastName,\n            address1: response.billingAddress.streetAddress,\n            address2: response.billingAddress.extendedAddress || '',\n            city: response.billingAddress.locality,\n            postalCode: response.billingAddress.postalCode,\n            stateCode: response.billingAddress.region,\n            country: response.billingAddress.countryCode,\n            email: response.userData.userEmail,\n            phone: response.billingAddress.phoneNumber,\n            paymentMethod: paymentMethodName\n        });\n\n        var csrfToken = document.querySelector('.braintree-cart-buttons-wrap  #csrf_token');\n        srcCheckoutFormData.append(csrfToken.name, csrfToken.value);\n        srcCheckoutFormData.append('braintreeSrcNonce', response.nonce);\n        srcCheckoutFormData.append('braintreeSrcDeviceDataInput', deviceData);\n        srcCheckoutFormData.append('braintreeSaveSRCAccount', true);\n        srcCheckoutFormData.append('braintreeSrcShippingAddress',\n            shippingAddressData || '{}'\n        );\n        srcCheckoutFormData.append('braintreeSrcCardDescription', cardDescription);\n\n        $.ajax({\n            type: 'POST',\n            url: checkoutFromCartUrl,\n            data: srcCheckoutFormData,\n            contentType: false,\n            processData: false,\n            success: function (data) {\n                if (data.error) {\n                    var errorMessage = '';\n                    if (data.fieldErrors.length) {\n                        data.fieldErrors.forEach(function (error, index) {\n                            var keys = Object.keys(error);\n                            if (keys.length) {\n                                errorMessage += `${keys[index].replace('dwfrm_billing_', '').replace('_', ' ')} ${data.fieldErrors[index][keys[index]]}. `;\n                            }\n                        });\n                        showCartErrorMsg(errorMessage);\n                    }\n\n                    if (data.serverErrors.length) {\n                        data.serverErrors.forEach(function (error) {\n                            errorMessage += `${error}. `;\n                        });\n                        showCartErrorMsg(errorMessage);\n                    }\n\n                    if (data.cartError) {\n                        window.location.href = data.redirectUrl;\n                    }\n                    return;\n                }\n\n                sessionStorage.setItem('pageState', 'cart');\n                srcIns.loader.hide();\n                window.location.href = placeOrderUrl;\n            },\n            error: function (err) {\n                if (err && err.redirectUrl) {\n                    window.location.href = err.redirectUrl;\n                }\n            }\n        });\n    };\n\n    srcIns = src.init(config, $srcButton);\n    srcIns.loadSrcButton();\n\n    $('body').on('checkout:updateCheckoutView', srcHelper.srcUpdateAmount.bind(null, srcIns, config));\n    $('body').on('braintree:updateCartTotals', srcHelper.srcUpdateAmount.bind(null, srcIns, config));\n    srcHelper.srcUpdateAmount(srcIns, config);\n}\n\nmodule.exports = {\n    initSrcButton\n};\n","'use strict';\nvar braintreeVenmo = require('../braintreeVenmo');\nvar venmoHelper = require('./venmoHelper');\nvar helper = require('../helper');\nvar loaderInstance = require('../loaderHelper');\nvar accountsLoader;\n\nfunction initAddVenmoAccount() {\n    var $btn = document.querySelector('.js_braintree_accountVenmoButton');\n    var $venmoErrorContainer = document.querySelector('#venmoAccountErrorContainer');\n    var $venmoLoader = document.querySelector('#braintreeVenmoAccLoader');\n\n    if (JSON.parse($btn.getAttribute('data-is-inited'))) {\n        return;\n    }\n    var config = JSON.parse($btn.getAttribute('data-braintree-config'));\n\n    if (typeof config !== 'object' || config === null) {\n        // eslint-disable-next-line no-console\n        console.error($btn, 'not valid data-braintree-config');\n        return;\n    }\n\n    config.$loaderContainer = $venmoLoader;\n    config.$errorContainer = $venmoErrorContainer;\n    config.deviceNotSupportVenmo = function () {\n        venmoHelper.showVenmoAccountError();\n        $venmoErrorContainer.textContent = config.messages.VENMO_BROWSER_NOT_SUPPORTED;\n    };\n    config.onTokenizePayment = function (data) {\n        let accountVenmoButton = document.querySelector('.js_braintree_accountVenmoButton');\n        let venmoAddAccountHandler = accountVenmoButton.getAttribute('data-venmo-add-account-handler');\n        let venmoAccountFormFields = accountVenmoButton.getAttribute('data-venmo-account-form-fields');\n        let venmoAccountFormData = helper.createPaymentFormData(venmoAccountFormFields, {\n            nonce: data.nonce\n        });\n        let csrfToken = document.querySelector('.js_braintree_accountVenmoButton_wrapper #csrf_token');\n        venmoAccountFormData.append(csrfToken.name, csrfToken.value);\n\n        let $loaderContainter = document.querySelector('#venmoAccountBtLoader');\n        accountsLoader = loaderInstance($loaderContainter);\n        accountsLoader.show();\n        return $.ajax({\n            type: 'POST',\n            url: venmoAddAccountHandler,\n            data: venmoAccountFormData,\n            contentType: false,\n            processData: false\n        })\n            .then((paymentData) => {\n                venmoHelper.hideVenmoAccountBtn();\n                $venmoLoader.style.display = 'none';\n                $venmoErrorContainer.textContent = '';\n                $venmoErrorContainer.style.display = 'none';\n\n                $.get(paymentData.renderAccountsUrl)\n                    .then((tplData => {\n                        accountsLoader.hide();\n                        document.querySelector('.venmo-accounts').innerHTML = tplData;\n                        document.querySelectorAll('.venmo-accounts .remove-bt-payment').forEach(function (el) {\n                            el.addEventListener('click', helper.removeBtPayment);\n                        });\n                    }));\n            })\n            .fail(({ responseJSON }) => {\n                accountsLoader.hide();\n                $venmoLoader.style.display = 'none';\n                $venmoErrorContainer.style.display = 'block';\n                $venmoErrorContainer.textContent = responseJSON.error;\n            });\n    };\n\n    braintreeVenmo.init(config, $btn);\n    $btn.setAttribute('isInited', true);\n}\n\nfunction initVenmoEvents() {\n    let $addVenmoAccountBtn = document.querySelector('.add-venmo-account');\n    $addVenmoAccountBtn.addEventListener('click', function () {\n        venmoHelper.showVenmoAccountBtn();\n        initAddVenmoAccount();\n    });\n}\n\nfunction initVenmoButtonsEvents() {\n    document.querySelector('.venmo-accounts').onclick = function (e) {\n        if (e.target.classList.contains('remove-bt-payment')) {\n            helper.removeBtPayment(e);\n        } else if (e.target.classList.contains('braintree-make-default-card')) {\n            var target = e.target;\n            var url = target.getAttribute('data-make-default-url');\n            var id = target.getAttribute('data-id');\n            var paymentMethodID = document.querySelector('.venmo-accounts').getAttribute('data-payment-method-id');\n            var $loaderContainter = document.querySelector('#' + target.getAttribute('data-loader'));\n            var loader = loaderInstance($loaderContainter);\n            loader.show();\n            helper.setDefaultProperty({\n                url: url,\n                id: id,\n                paymentMethodID: paymentMethodID,\n                loader: loader\n            });\n        }\n    };\n}\n\nmodule.exports = {\n    initVenmoEvents,\n    initAddVenmoAccount,\n    initVenmoButtonsEvents\n};\n","'use strict';\nvar helper = require('../helper');\n\nvar $accountsList = document.querySelector('#braintreeVenmoAccountsList');\nvar $saveVenmoAccountCountainerEl = document.querySelector('#braintreeSaveVenmoAccountContainer');\nvar $saveVenmoAccountEl = document.querySelector('#braintreeSaveVenmoAccount');\n\nvar $venmoButton = document.querySelector('.js_braintree_venmo_button');\nvar $braintreeVenmoAccount = document.getElementById('braintreeVenmoAccount');\nvar $venmoAccount = document.querySelector('.js_braintree_used_venmo_account');\nvar $braintreeVenmoUserId = document.querySelector('#braintreeVenmoUserId');\n\nvar $venmoContent = document.querySelector('.js_braintree_venmoContent');\n\nvar $addVenmoAccountBtn = document.querySelector('.add-venmo-account');\nvar $venmoAccountWrapper = document.querySelector('.js_braintree_accountVenmoButton_wrapper');\n\nfunction showVenmoAccount() {\n    if (!$accountsList) {\n        $venmoAccount.classList.remove('used-venmo-account-hide');\n        $braintreeVenmoAccount.options[0].text = $braintreeVenmoUserId.value;\n    }\n\n    $venmoButton.style.display = 'none';\n    helper.continueButtonToggle(false);\n}\n\nfunction hideShowButtons() {\n    if ($accountsList.value === 'newaccount') {\n        $venmoButton.style.display = 'block';\n        helper.continueButtonToggle(true);\n        $venmoContent.setAttribute('data-paypal-is-hide-continue-button', true);\n    } else {\n        $venmoButton.style.display = 'none';\n        helper.continueButtonToggle(false);\n        $venmoContent.setAttribute('data-paypal-is-hide-continue-button', false);\n        if ($saveVenmoAccountCountainerEl) {\n            $saveVenmoAccountEl.checked = false;\n            $saveVenmoAccountCountainerEl.style.display = 'none';\n        }\n    }\n}\n\nfunction createLoaderContainter($target) {\n    var $loaderContainter = document.createElement('div');\n    $loaderContainter.className = 'venmo-braintree-loader';\n    helper.continueButtonToggle(true);\n\n    return $target.parentNode.insertBefore($loaderContainter, $target);\n}\n\nfunction hideVenmoButton() {\n    $venmoButton.parentElement.firstElementChild.style.display = 'none';\n    document.querySelector('.payment-options[role=tablist] .nav-item[data-method-id=\"Venmo\"]').style.display = 'none'; // Remove the venmo select payment method radiobutton\n}\n\n/**\n * updates the billing address form values within saved billing\n * @param {Object} billingAddress - the billing Address\n */\nfunction updateBillingAddressFormValues(billingAddress) {\n    var form = $('form[name=dwfrm_billing]');\n    var inputNames = ['firstName', 'lastName', 'address1', 'address2', 'city', 'postalCode', 'country'];\n    if (!form) return;\n\n    $.each(inputNames, function (index, value) {\n        $(`input[name$=_${value}]`, form).val(decodeURIComponent(billingAddress[value]));\n    });\n    $('select[name$=_stateCode],input[name$=_stateCode]', form)\n        .val(billingAddress.stateCode);\n}\n\nfunction showVenmoAccountBtn() {\n    $addVenmoAccountBtn.style.display = 'none';\n    $venmoAccountWrapper.style.display = 'block';\n}\nfunction hideVenmoAccountBtn() {\n    $addVenmoAccountBtn.style.display = 'block';\n    $venmoAccountWrapper.style.display = 'none';\n}\nfunction showVenmoAccountError() {\n    $addVenmoAccountBtn.style.display = 'none';\n    $venmoAccountWrapper.style.display = 'block';\n    [].slice.call($venmoAccountWrapper.children).forEach(function (item) {\n        if (!item.classList.contains('error')) {\n            item.style.display = 'none';\n        }\n    });\n}\n\n/*\n    Remove method was used and change appearance of venmo tab\n**/\nfunction removeSessionNonce() {\n    var defaultOption = helper.getOptionByDataDefault('#braintreeVenmoAccountsList');\n    document.querySelector('#braintreeVenmoNonce').value = '';\n    document.querySelector('#braintreeVenmoBilling').value = '';\n    if (defaultOption) {\n        defaultOption.selected = true;\n        hideShowButtons();\n    } else {\n        $venmoAccount.classList.remove('used-venmo-account');\n        $venmoAccount.classList.add('used-venmo-account-hide');\n        $venmoButton.style.display = 'block';\n    }\n}\n\nmodule.exports = {\n    showVenmoAccount,\n    hideShowButtons,\n    createLoaderContainter,\n    hideVenmoButton,\n    updateBillingAddressFormValues,\n    showVenmoAccountBtn,\n    hideVenmoAccountBtn,\n    showVenmoAccountError,\n    removeSessionNonce\n};\n","'use strict';\nvar braintreeVenmo = require('../braintreeVenmo');\nvar venmoHelper = require('./venmoHelper');\nvar loaderInstance = require('../loaderHelper');\nvar helper = require('../helper');\n\nvar $venmoButton = document.querySelector('.js_braintree_venmo_button');\nvar $btVermoAccountsList = document.querySelector('#braintreeVenmoAccountsList');\nvar $braintreeVenmoNonce = document.querySelector('#braintreeVenmoNonce');\nvar $braintreeVenmoUserId = document.querySelector('#braintreeVenmoUserId');\nvar $submitShippingBtn = document.querySelector('.button, .submit-shipping');\nvar $contactEmail = document.querySelector('.contact-info-block [name=dwfrm_billing_contactInfoFields_email]');\nvar $hideVenmoButton = document.querySelector('.braintree-venmo-pay-button');\nvar $billingForm = document.querySelector('.card-body [id=dwfrm_billing]');\nvar $venmoContent = document.querySelector('.js_braintree_venmoContent');\n\nfunction makeVenmoPayment(continueButton) {\n    var config = JSON.parse($venmoButton.getAttribute('data-braintree-config'));\n\n    if (typeof config !== 'object' || config === null) {\n        // eslint-disable-next-line no-console\n        console.error($venmoButton, 'not valid data-braintree-config');\n    }\n\n    if (JSON.parse($hideVenmoButton.getAttribute('data-is-hide-venmo-button')) && $btVermoAccountsList !== 'newaccount') {\n        $venmoButton.style.display = 'none';\n    }\n\n    if ($btVermoAccountsList) {\n        $btVermoAccountsList.addEventListener('change', function () {\n            venmoHelper.hideShowButtons();\n        });\n        venmoHelper.hideShowButtons();\n    }\n\n    config.onClick = function () {\n        if ($billingForm.checkValidity()) {\n            /**\n                * Setting current customer Billing address to form\n                *  For the case when SFCC redirects customer from payment stage to shipping stage\n                *  after successful Venmo app response\n            */\n            document.querySelector('#braintreeVenmoBilling').value = JSON.stringify(helper.getBillingAddressFormValues());\n\n            return true;\n        }\n        $contactEmail.classList.add('is-invalid');\n        return false;\n    };\n    config.deviceNotSupportVenmo = function () {\n        venmoHelper.hideVenmoButton();\n    };\n    config.onTokenizePayment = function (data) {\n        var $loaderContainer = venmoHelper.createLoaderContainter(document.querySelector('.page'));\n        loaderInstance($loaderContainer).show();\n        helper.removeActiveSessionPayment();\n\n        $braintreeVenmoNonce.value = data.nonce;\n        $braintreeVenmoUserId.value = data.details.username;\n\n        if (window.history.state !== 'shipping') {\n            continueButton.click();\n            document.querySelector('.venmo-braintree-loader').remove();\n            return true;\n        }\n\n        venmoHelper.updateBillingAddressFormValues(JSON.parse(document.querySelector('#braintreeVenmoBilling').value));\n\n        // move to stage payment\n        $submitShippingBtn.click();\n        $venmoButton.setAttribute('data-is-valid-stage', true);\n        $venmoButton.setAttribute('data-user-email', $contactEmail.value);\n        document.querySelector('.venmo-braintree-loader').remove();\n    };\n\n    /**\n        *  Init Venmo app with correct URL fragment (hash) to prevent Browser from opening the URL in a new tab.\n        *  Braintree JS SDK is preserving the URL in its entirety and modifies the URL fragment (hash)\n        *  to send back the results from Venmo (e.g. nonce, error message, etc.)\n        *\n    */\n    var hashChange = new MutationObserver(function (mutations) {\n        var correlationId = document.querySelector('#braintreeVenmoDeviceData').value || null;\n        var mutation = mutations.find(function (element) {\n            return element.attributeName === 'data-checkout-stage' && element.target.dataset.checkoutStage === 'payment';\n        });\n\n        if (!mutation) {\n            return false;\n        }\n        if (!correlationId) {\n            braintreeVenmo.init(config, $venmoButton);\n            return true;\n        }\n\n        if ($braintreeVenmoNonce.value && JSON.parse($venmoButton.getAttribute('data-is-valid-stage'))) {\n            $contactEmail.value = $venmoButton.getAttribute('data-user-email') || '';\n            $venmoButton.setAttribute('data-is-valid-stage', false);\n            continueButton.click();\n\n            return true;\n        }\n        if ($venmoContent.classList.contains('active') && mutation.oldValue === 'placeOrder') {\n            venmoHelper.showVenmoAccount();\n            $venmoContent.setAttribute('data-paypal-is-hide-continue-button', false);\n            $hideVenmoButton.setAttribute('data-is-hide-venmo-button', true);\n        }\n    });\n\n    hashChange.observe(document.querySelector('#checkout-main'), { attributeOldValue: true });\n}\n\nmodule.exports = {\n    makeVenmoPayment\n};\n","'use strict';\n\nmodule.exports = function () {\n    var helper = require('braintree/braintree/helper');\n    var applepayHelper = require('braintree/braintree/applepay/applepayHelper');\n    var creditcardHelper = require('braintree/braintree/creditcard/creditcardHelper');\n    var creditcardPayment = require('braintree/braintree/creditcard/creditcardPayment');\n    var creditCardFields = require('braintree/braintree/creditcard/creditcardFields');\n    var creditCardAccount = require('braintree/braintree/creditcard/creditcardAccount');\n    var minicartHelper = require('braintree/braintree/paypal/minicartHelper');\n    var paypalAccount = require('braintree/braintree/paypal/paypalAccount');\n    var paypalPayment = require('irobot/braintree/paypal/paypalPayment');\n    var paypalSavedAccountHandler = require('braintree/braintree/paypal/paypalSavedAccountHandler');\n    var local = require('braintree/braintree/local/localPayment'); // eslint-disable-line no-unused-vars\n    var orderStage = document.getElementById('checkout-main');\n    var pageState = sessionStorage.getItem('pageState');\n\n    var $form = document.querySelector('#dwfrm_billing'); // eslint-disable-line no-unused-vars\n    var $cartPage = document.querySelectorAll('.cart-page');\n    var $continueButton = document.querySelector('button.submit-payment');\n    var $summaryDetails = document.querySelector('.summary-details .payment-details');\n    var $addCreditCardForm = document.querySelector('.js_braintree_addCreditCardForm');\n    var $paypalContent = document.querySelector('.js_braintree_paypalContent');\n    var $creditCardContent = document.querySelector('.js_braintree_creditCardContent');\n    var $applepayContent = document.querySelector('.js_braintree_applepayContent');\n    var $braintreePaypalNonce = document.querySelector('#braintreePayPalNonce');\n    var $minicartPopover = document.querySelector('.minicart .popover');\n    var $creditCardList = document.querySelector('#braintreeCreditCardList');\n    var $staticPaypalButton = document.querySelector('.braintree-static-paypal-button');\n\n    var venmoAccount = require('braintree/braintree/venmo/venmoAccount');\n    var venmoPayment = require('braintree/braintree/venmo/venmoPayment');\n    var $venmoContent = document.querySelector('.js_braintree_venmoContent');\n\n    var googlePayAccount = require('braintree/braintree/googlepay/googlepayAccount');\n    var googlepayPayment = require('braintree/braintree/googlepay/googlepayPayment');\n    var $googlepayContent = document.querySelector('.js_braintree_googlepayContent');\n    var $googlepayOnCart = document.querySelector('.braintree-cart-google-button');\n    var $addGooglePayAccountForm = document.querySelector('.js_braintree_addGooglePayAccountForm');\n    var $braintreeGooglePayNonce = document.querySelector('#braintreeGooglePayNonce');\n\n    var braintreeSrc = require('braintree/braintree/src/srcPayment');\n    var srcAccount = require('braintree/braintree/src/srcAccount');\n    var $addSrcAccountForm = document.querySelector('.js_braintree_addSrcAccountForm');\n    var $srcContent = document.querySelector('.js_braintree_srcContent');\n    var $braintreeSrcNonce = document.querySelector('#braintreeSRCNonce');\n    var $srcOnCart = document.querySelector('.braintree-cart-src-button');\n\n    if (window.NodeList && !NodeList.prototype.forEach) {\n        NodeList.prototype.forEach = Array.prototype.forEach;\n    }\n\n\n    // eslint-disable-next-line consistent-return\n    (function () {\n        if (typeof window.CustomEvent === 'function') return false; // If not IE\n\n        function CustomEvent(event, params) {\n            // eslint-disable-next-line no-param-reassign\n            params = params || { bubbles: false, cancelable: false, detail: undefined };\n            var evt = document.createEvent('CustomEvent');\n            evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n            return evt;\n        }\n\n        CustomEvent.prototype = window.Event.prototype;\n\n        window.CustomEvent = CustomEvent;\n    }());\n\n    if ($cartPage) {\n        helper.initWathcherCartUpdate();\n    }\n\n    if ($addCreditCardForm) {\n        creditCardAccount.initAccountAddCreditCard();\n    }\n\n    if ($addGooglePayAccountForm) {\n        googlePayAccount.initAddGooglePayAccount();\n    }\n    if ($addSrcAccountForm) {\n        srcAccount.initAddSrcAccount();\n    }\n\n    document.addEventListener('DOMContentLoaded', function () {\n        minicartHelper.miniCartButton();\n    });\n\n    if ($minicartPopover) {\n        minicartHelper.observer.observe($minicartPopover, { childList: true });\n    }\n\n    helper.paymentMethodChangeHandle(document.querySelector('.payment-options[role=tablist] a.active[data-toggle=\"tab\"]'));\n\n    if ($cartPage.length) {\n        applepayHelper.initApplepayButton();\n    }\n\n    if ($paypalContent) {\n        paypalPayment.makePaypalPayment($continueButton);\n    }\n\n    if ($creditCardContent) {\n        creditCardFields.initCreditCardFields();\n        creditcardHelper.initCardListAndSaveFunctionality();\n\n        $('body').on('checkout:updateCheckoutView', creditCardFields.updateData);\n\n        creditCardFields.updateData();\n\n        if ($creditCardList) {\n            $creditCardList.addEventListener('change', function () {\n                creditcardPayment.doNotAllowSubmitForm();\n            });\n        }\n        $('body').on('braintree:3dSecure_content_shown', function () {\n            helper.continueButtonToggle(false);\n        });\n\n        $('body').on('braintree:3dSecure_content_removed', function () {\n            setTimeout(function () {\n                creditcardPayment.hide3DSecureContainer();\n            }, 2000);\n        });\n\n        $continueButton.addEventListener('click', function (event) {\n            if (!event.isTrusted) {\n                return;\n            }\n\n            helper.removeActiveSessionPayment();\n            creditcardPayment.makeCreditCardPayment(event);\n        });\n    }\n\n    if ($applepayContent) {\n        applepayHelper.applepayPayment($continueButton);\n    }\n\n    if ($venmoContent) {\n        venmoPayment.makeVenmoPayment($continueButton);\n    }\n\n    if ($googlepayContent || $googlepayOnCart) {\n        googlepayPayment.makeGooglepayPayment($continueButton);\n    }\n\n    if ($srcContent || $srcOnCart) {\n        braintreeSrc.initSrcButton($continueButton);\n    }\n\n    $('.payment-options[role=tablist] a[data-toggle=\"tab\"]').on('shown.bs.tab', function (e) {\n        helper.paymentMethodChangeHandle(e.target);\n        const cardList = document.getElementById('braintreeCreditCardList');\n        const paypalList = document.getElementById('braintreePaypalAccountsList');\n        var changeEvent;\n\n        if (e.target.hash === '#creditcard-content' && cardList) {\n            if (typeof (Event) === 'function') {\n                changeEvent = new Event('changeEvent');\n                cardList.addEventListener('changeEvent', function () {\n                    'change';\n                }, false);\n            } else {\n                changeEvent = document.createEvent('Event');\n                changeEvent.initEvent('changeEvent', true, true);\n            }\n            cardList.dispatchEvent(changeEvent);\n        } else if (e.target.hash === '#paypal-content' && paypalList) {\n            if (typeof (Event) === 'function') {\n                changeEvent = new Event('changeEvent');\n                paypalList.addEventListener('changeEvent', function () {\n                    'change';\n                }, false);\n            } else {\n                changeEvent = document.createEvent('Event');\n                changeEvent.initEvent('changeEvent', true, true);\n            }\n            paypalList.dispatchEvent(changeEvent);\n        }\n    });\n\n    if ($summaryDetails) {\n        $summaryDetails.classList.add('braintree-payment-details');\n    }\n\n    $('body').on('checkout:updateCheckoutView', helper.updateCheckoutView);\n\n    if ((pageState && pageState === 'cart') &&\n        orderStage && orderStage.getAttribute('data-checkout-stage') === 'placeOrder') {\n        helper.updatePaymentMethodTab();\n        sessionStorage.removeItem('pageState');\n    }\n\n    if ($braintreePaypalNonce && $braintreePaypalNonce.value !== '') {\n        document.querySelector('.paypal-tab').click();\n    }\n\n    if ($braintreeGooglePayNonce && $braintreeGooglePayNonce.value !== '') {\n        document.querySelector('.googlepay-tab').click();\n    }\n\n    if ($braintreeSrcNonce && $braintreeSrcNonce.value !== '') {\n        document.querySelector('.src-tab').click();\n    }\n\n    if ($staticPaypalButton) {\n        paypalSavedAccountHandler.paypalStaticPdpButtonHandler();\n        $staticPaypalButton.addEventListener('click', paypalSavedAccountHandler.staticImageHandler);\n    }\n\n    // My account page\n    if (document.querySelector('.add-paypal-account')) {\n        paypalAccount.initPayPalEvents();\n    }\n    if (document.querySelector('.add-venmo-account')) {\n        venmoAccount.initVenmoEvents();\n    }\n    if (document.querySelector('.creditCard-accounts')) {\n        helper.initCardEvents();\n    }\n\n    if (document.querySelector('.paypal-accounts')) {\n        paypalAccount.initPaypalButtonsEvents();\n    }\n    if (document.querySelector('.venmo-accounts')) {\n        venmoAccount.initVenmoButtonsEvents();\n    }\n};\n","'use strict';\nvar paypalHelper = require('braintree/braintree/paypal/paypalHelper');\nvar helper = require('braintree/braintree/helper');\nvar payPal = require('braintree/braintree/braintreePaypal');\n\nvar $paypalContent = document.querySelector('.js_braintree_paypalContent');\nvar $paypalButton = document.querySelector('.js_braintree_paypal_billing_button');\nvar $braintreePaypalAccountsList = document.querySelector('#braintreePaypalAccountsList');\nvar $braintreePaypalNonceInput = document.querySelector('input[name=braintreePaypalNonce]');\nvar $braintreePaypalEmail = document.querySelector('#braintreePaypalEmail');\nvar $braintreePaypalNonce = document.querySelector('#braintreePayPalNonce');\nvar $braintreePaypalBillingAddressInput = document.querySelector('input[name=braintreePaypalBillingAddress]');\n\nfunction makePaypalPayment(continueButton) {\n    var config = JSON.parse($paypalButton.getAttribute('data-braintree-config'));\n    var isSessionAccount = helper.getSessionAccountOption({\n        querySelector: '#braintreePaypalAccountsList',\n        id: 'braintreePaypalAccount'\n    });\n    var isSameSessionAccount = paypalHelper.getOptionByEmail();\n\n    if (typeof config !== 'object' || config === null) {\n        // eslint-disable-next-line no-console\n        console.error($paypalButton, 'not valid data-braintree-config');\n    }\n    // Custom logic added here to  show the PayPal button and disable the checkout button\n    function hideShowButtons() {\n        $paypalContent.setAttribute('data-paypal-is-hide-continue-button', true);\n        continueButton.style.display = 'none';\n        $paypalButton.style.display = '';\n    }\n\n    if ($braintreePaypalAccountsList) {\n        $braintreePaypalAccountsList.addEventListener('change', function () {\n            hideShowButtons();\n        });\n    }\n\n    // Getting same email option as session email, if any found\n    if (JSON.parse($braintreePaypalAccountsList.dataset.customerAuthenticated) && isSessionAccount) {\n        if (isSameSessionAccount) {\n            isSameSessionAccount.style.display = 'none';\n            if (isSessionAccount.classList.contains('used-paypal-account-hide')) {\n                isSessionAccount.classList.add('used-paypal-account');\n                isSessionAccount.classList.remove('used-paypal-account-hide');\n            }\n        }\n\n        paypalHelper.setSessionAccountOptionDefault();\n    }\n\n    paypalHelper.initAccountListAndSaveFunctionality();\n\n    config.onTokenizePayment = function (data) {\n        helper.removeActiveSessionPayment();\n        if ($braintreePaypalNonceInput) {\n            $braintreePaypalNonceInput.value = data.nonce;\n        }\n        $braintreePaypalNonce.value = data.nonce;\n        document.querySelector('#braintreePaypalAccount').setAttribute('data-session-account', 'true');\n        document.querySelector('#braintreePaypalAccount').setAttribute('data-nonce', data.nonce);\n\n        if (data.details) {\n            var details = data.details;\n            $braintreePaypalEmail.value = data.details.email;\n            document.querySelector('#braintreePaypalAccount').value = data.details.email;\n            document.querySelector('#braintreePaypalAccount').text = data.details.email;\n            helper.continueButtonToggle(false);\n            $paypalContent.setAttribute('data-paypal-is-hide-continue-button', false);\n\n            if (details.billingAddress) {\n                // Updating Storefront Billing Form data with PayPal Billing\n                var paypalBillingData = paypalHelper.createBillingAddressData(details.billingAddress, details);\n                var storeFrontBillingData = JSON.parse(document.querySelector('.braintree-billing-payment-wrap').getAttribute('data-billing-form-fields-names'));\n                storeFrontBillingData.dwfrm_billing_addressFields_firstName = paypalBillingData.firstName;\n                storeFrontBillingData.dwfrm_billing_addressFields_lastName = paypalBillingData.lastName;\n                storeFrontBillingData.dwfrm_billing_addressFields_address1 = paypalBillingData.streetAddress;\n                storeFrontBillingData.dwfrm_billing_addressFields_address2 = paypalBillingData.extendedAddress || '';\n                storeFrontBillingData.dwfrm_billing_addressFields_city = paypalBillingData.locality;\n                storeFrontBillingData.dwfrm_billing_addressFields_postalCode = paypalBillingData.postalCode;\n                storeFrontBillingData.dwfrm_billing_addressFields_states_stateCode = paypalBillingData.state;\n                storeFrontBillingData.dwfrm_billing_addressFields_country = paypalBillingData.countryCodeAlpha2;\n                storeFrontBillingData.dwfrm_billing_contactInfoFields_email = paypalBillingData.email;\n                storeFrontBillingData.dwfrm_billing_contactInfoFields_phone = paypalBillingData.phone;\n\n                $braintreePaypalBillingAddressInput.value = JSON.stringify(paypalBillingData);\n                helper.updateBillingFormValues(storeFrontBillingData);\n            }\n\n            if ($braintreePaypalAccountsList && $braintreePaypalAccountsList.value === 'newaccount') {\n                // Custom logic added here, and removed the line of code that disables the PayPal button\n                var paypalAccount = document.querySelector('.form-group.braintree_used_paypal_account');\n                var sessionAccount = document.querySelector('#braintreePaypalAccount');\n                if (!paypalAccount.classList.contains('used-paypal-account')) {\n                    paypalAccount.classList.remove('used-paypal-account-hide');\n                    paypalAccount.classList.add('used-paypal-account');\n                    sessionAccount.classList.remove('used-paypal-account-hide');\n                    sessionAccount.classList.add('used-paypal-account');\n                } else {\n                    sessionAccount.classList.remove('used-paypal-account-hide');\n                    sessionAccount.classList.add('used-paypal-account');\n                }\n            }\n        }\n\n        var newPPAccount = document.getElementById('newPPAccount');\n        if (newPPAccount.selected) {\n            newPPAccount.removeAttribute('selected');\n            document.querySelector('#braintreePaypalAccount').selected = true;\n        }\n\n        // Getting same email option as session email, if any found\n        if (JSON.parse($braintreePaypalAccountsList.dataset.customerAuthenticated) && helper.getSessionAccountOption({\n            querySelector: '#braintreePaypalAccountsList',\n            id: 'braintreePaypalAccount'\n        })) {\n            isSameSessionAccount = paypalHelper.getOptionByEmail();\n            paypalHelper.setSessionAccountOptionDefault();\n\n            if (isSameSessionAccount) {\n                isSameSessionAccount.style.display = 'none';\n                document.getElementById('braintreeSavePaypalAccount').value = false;\n                document.querySelector('#braintreeSavePaypalAccountContainer').style.display = 'none';\n            } else {\n                [].forEach.call(document.querySelector('#braintreePaypalAccountsList'), function (el) {\n                    if (el.style.display === 'none') el.style.display = 'block';\n                });\n            }\n        }\n\n        paypalHelper.showPayPalAccount(data.details.email, data.nonce);\n        continueButton.click();\n        // Added custom logic to ensure the paypal Pay button always displays and disable the checkout button after payment is complete\n        hideShowButtons();\n    };\n\n    config.paypalConfig = config.paypalConfig || {};\n    config.paypalConfig.validate = function (validateActions) {\n        paypalHelper.formValidationConrol(validateActions, true);\n    };\n\n    var paypalIns = payPal.init(config, $paypalButton);\n    if (document.querySelector('.braintree_used_paypal_account').classList.contains('used-paypal-account')) {\n        paypalHelper.showPayPalAccount(document.querySelector('#braintreePaypalEmail').value);\n    }\n    function updateAmountAndShippingData() { // eslint-disable-line require-jsdoc\n        paypalIns.loader.show();\n        $.ajax({\n            url: config.getOrderInfoUrl,\n            type: 'get',\n            dataType: 'json',\n            success: function (data) {\n                var $paypalAddress = document.querySelector('input[name=braintreePaypalShippingAddress]') !== '';\n                paypalIns.loader.hide();\n                paypalIns.updateAmount(data.amount);\n                if (data.shippingAddress) {\n                    paypalIns.updateShippingAddress(data.shippingAddress);\n                }\n                if ($paypalAddress.value) {\n                    var newPayPalAddress = $.extend({}, JSON.parse($paypalAddress.value), data.shippingAddress);\n                    $paypalAddress.value = JSON.stringify(newPayPalAddress);\n                }\n            },\n            error: function () {\n                window.location.reload();\n            }\n        });\n    }\n\n    $('body').on('checkout:updateCheckoutView', updateAmountAndShippingData);\n    updateAmountAndShippingData();\n}\n\nmodule.exports = {\n    makePaypalPayment\n};\n","require('./braintree/braintreeMFRA')();\n","'use strict';\n\nmodule.exports = function (element) {\n    var position = element && element.length ? element.offset().top : 0;\n    $('html, body').animate({\n        scrollTop: position\n    }, 500);\n    if (!element) {\n        $('.logo-home').focus();\n    }\n};\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AClFA;AACA;;;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAVA;AAYA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AAcA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAtCA;AAwCA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAVA;AAYA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;;;;;;;;;;;;ACnPA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AADA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AADA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAFA;AADA;AACA;AAKA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AADA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAVA;AAYA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAVA;AAYA;AACA;AACA;AACA;AACA;AADA;AADA;AAKA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAZA;;;;;;;;;;;;ACnLA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAHA;AAKA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AACA;AACA;AACA;AAnBA;AAqBA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AADA;AAYA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AADA;AAGA;AACA;AADA;AAGA;AACA;AADA;AAXA;AAeA;AACA;AACA;AACA;AACA;AACA;AADA;AAGA;AACA;AADA;AAGA;AACA;AADA;AAPA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;;;;;;;;;;;;AC5SA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAFA;AAIA;AACA;AADA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AAFA;AAIA;AAXA;AAaA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;;;;;;;;;;;;ACrIA;AACA;AAEA;AACA;;;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AAGA;AACA;AACA;AADA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAJA;AAJA;AAWA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AAbA;AAiBA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;;;;;;;;;;;;ACnJA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AADA;AAGA;AACA;AADA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AACA;AAvDA;AA0DA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AALA;;;;;;;;;;;;AChQA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AADA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AADA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AAFA;AAFA;AALA;AAcA;AACA;AACA;AADA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;;;;;;;;;;;;AC3GA;AACA;AACA;AAAA;AACA;;;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAFA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAFA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AAaA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAvHA;AA0HA;AAEA;;;;;;;;;;;;ACpJA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AADA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAFA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AALA;;;;;;;;;;;;AC3HA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAlBA;AAoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;;;;;;;;;;;;AC3CA;AACA;;;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AALA;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAVA;AAYA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;;;;;;;;;;;;AC9DA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AANA;AAQA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AAFA;AACA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;;;;;;;;;;;;AClRA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;;;;;;;;;;;;ACpIA;AACA;;;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AAGA;AAAA;;;;;;;;;;;;AC5EA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AALA;;;;;;;;;;;;ACxGA;AACA;;;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAxCA;AA2CA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAVA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;;;;;;;;;;;;AClLA;AACA;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AASA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAlBA;;;;;;;;;;;AC3VA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;;;;;;;;;;;;AChBA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AACA;AACA;AACA;;;;;;;;;;;;ACzBA;AACA;;;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AAcA;AACA;AACA;AACA;AACA;AACA;AAKA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAtCA;AAwCA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAVA;AAYA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAFA;;;;;;;;;;;;ACrJA;AACA;;;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AALA;AAQA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;;;;;;;;;;;;ACxGA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAFA;AAIA;AAEA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AAFA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAdA;;;;;;;;;;;;AC5MA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AAaA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAzCA;AA2CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;;;;;;;;;;;;;ACnJA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AADA;;;;;;;;;;;ACjEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAVA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;;;;;;;;;;;;AChGA;AACA;;;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AAcA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAxCA;AA0CA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;;;;;;;;;;;;ACnJA;AACA;;;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AADA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AALA;AAQA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;;;;;;;;;;;;AC1GA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;;;;;;;;;;;;AC3GA;AACA;;;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AADA;;;;;;;;;;;;AChHA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AADA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;;;;;;;;;;;;ACrOA;AACA;;;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAlBA;AAoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;;;;;;;;;;;AC7KA;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AAEA;AACA;AACA;AACA;;;;A","sourceRoot":""}