{
    "version": 3,
    "sources": [
        "node_modules/browser-pack/_prelude.js",
        "cartridges/app_tjc/cartridge/js/addedmodal.js",
        "cartridges/app_tjc/cartridge/js/ajax.js",
        "cartridges/app_tjc/cartridge/js/bonus-products-view.js",
        "cartridges/app_tjc/cartridge/js/carousel.js",
        "cartridges/app_tjc/cartridge/js/chunks/main.js",
        "cartridges/app_tjc/cartridge/js/components/lazyload.js",
        "cartridges/app_tjc/cartridge/js/components/menu.js",
        "cartridges/app_tjc/cartridge/js/components/productTileSliders.js",
        "cartridges/app_tjc/cartridge/js/cookieprivacy.js",
        "cartridges/app_tjc/cartridge/js/dialog.js",
        "cartridges/app_tjc/cartridge/js/flyinheader.js",
        "cartridges/app_tjc/cartridge/js/global-content-utils.js",
        "cartridges/app_tjc/cartridge/js/gtm-datalayer.js",
        "cartridges/app_tjc/cartridge/js/jquery-ext.js",
        "cartridges/app_tjc/cartridge/js/main.js",
        "cartridges/app_tjc/cartridge/js/minicart.js",
        "cartridges/app_tjc/cartridge/js/new-form-style.js",
        "cartridges/app_tjc/cartridge/js/newsletter.js",
        "cartridges/app_tjc/cartridge/js/product-slider-tile.js",
        "cartridges/app_tjc/cartridge/js/progress.js",
        "cartridges/app_tjc/cartridge/js/searchsuggest.js",
        "cartridges/app_tjc/cartridge/js/simplesearch.js",
        "cartridges/app_tjc/cartridge/js/sirv.js",
        "cartridges/app_tjc/cartridge/js/sticky.js",
        "cartridges/app_tjc/cartridge/js/tooltip.js",
        "cartridges/app_tjc/cartridge/js/uniform.js",
        "cartridges/app_tjc/cartridge/js/util.js",
        "cartridges/app_tjc/cartridge/js/validator.js",
        "node_modules/browserify/lib/_empty.js",
        "node_modules/ev-emitter/ev-emitter.js",
        "node_modules/imagesloaded/imagesloaded.js",
        "node_modules/jquery-touchswipe/jquery.touchSwipe.min.js",
        "cartridges/app_tjc/cartridge/js/jquery-external.js"
    ],
    "names": [],
    "mappings": "AAAA;ACAA;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;;AC1CA;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;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;;ACnHA;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;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;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;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;;ACvTA;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;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;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;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;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;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;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;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;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;;ACltBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChGA;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;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;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;;AC7OA;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;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;;ACxHA;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;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3QA;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;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;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;;ACrMA;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;;ACvDA;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;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;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;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;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;AACA;;AC3ZA;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;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;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;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;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;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;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;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;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACz0BA;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;;ACjCA;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;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;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;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;;AC1RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;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;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;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;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;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;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;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;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;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;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;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;;ACx1BA;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;;ACzEA;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzLA;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;;AC/BA;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;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;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;;ACvNA;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;;AC9CA;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;;AC1BA;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;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;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;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;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;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;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;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;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;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;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/zBA;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;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;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;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;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;;AC3YA;;ACAA;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;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;;AC7GA;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;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;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;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;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;;AClXA;;ACAA;AACA;AACA",
    "file": "main.js",
    "sourceRoot": "",
    "sourcesContent": [
        "(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()",
        "'use strict';\n\nfunction init() {\n    var url = Urls.cartcount;\n\n    $.ajax({\n        url: url,\n        type: 'GET',\n        success: function (response) {\n            var res = response;\n            $('.added-count').text(res.cartcount);\n            $('.addedModal').show();\n            $('.addedModal .overlay-container').removeClass('overlay-container-off');\n            $('#header').addClass('addtocart-overlay-active');\n\n        },\n\n        error: function (jqXHR, textStatus, errorThrown) {\n\n            //console.log(jqXHR + textStatus + errorThrown);\n\n        }\n\n    });\n\n\n\n    // Close the Overlay by clincking in the \"X\" button\n\n    $('.addedoverlay-close').on('click', function () {\n        $('.addedModal').hide();\n        $('.header').removeClass('addtocart-overlay-active');\n        $('.addedModal .overlay-container').removeClass('overlay-container-off');\n    });\n    $('.addedModal .overlay-container').addClass('overlay-container-on');\n\n}\n\n// Module public functions\nmodule.exports = {\n    init: init\n};\n",
        "'use strict';\n\nvar progress = require(20),\n    util = require(27);\n\nvar currentRequests = [];\n\n/**\n * @function\n * @description Ajax request to get json response\n * @param {Boolean} async  Asynchronous or not\n * @param {String} url URI for the request\n * @param {Object} data Name/Value pair data request\n * @param {Function} callback  Callback function to be called\n */\nvar getJson = function (options) {\n    options.url = util.toAbsoluteUrl(options.url);\n    // return if no url exists or url matches a current request\n    if (!options.url || currentRequests[options.url]) {\n        return;\n    }\n\n    currentRequests[options.url] = true;\n\n    // make the server call\n    /*jslint unparam: true */\n    $.ajax({\n        dataType: 'json',\n        url: options.url,\n        async: (options.async === undefined || options.async === null) ? true : options.async,\n        data: options.data || {}\n    })\n        // success\n        .done(function (response) {\n            if (options.callback) {\n                options.callback(response);\n            }\n        })\n        // failed\n        .fail(function (xhr, textStatus) {\n            if (textStatus === 'parsererror') {\n                /*eslint-disable no-alert */\n                window.alert(Resources.BAD_RESPONSE);\n                /*eslint-enable no-alert */\n            }\n            if (options.callback) {\n                options.callback(null);\n            }\n        })\n        // executed on success or fail\n        .always(function () {\n            // remove current request from hash\n            if (currentRequests[options.url]) {\n                delete currentRequests[options.url];\n            }\n        });\n    /*jslint unparam: false */\n};\n/**\n * @function\n * @description ajax request to load html response in a given container\n * @param {String} url URI for the request\n * @param {Object} data Name/Value pair data request\n * @param {Function} callback  Callback function to be called\n * @param {Object} target Selector or element that will receive content\n */\nvar load = function (options) {\n    options.url = util.toAbsoluteUrl(options.url);\n    // return if no url exists or url matches a current request\n    if (!options.url || currentRequests[options.url]) {\n        return;\n    }\n\n    currentRequests[options.url] = true;\n\n    // make the server call\n    /*jslint unparam: true */\n    $.ajax({\n        dataType: 'html',\n        url: util.appendParamToURL(options.url, 'format', 'ajax'),\n        data: options.data,\n        xhrFields: {\n            withCredentials: true\n        }\n    })\n        .done(function (response) {\n            // success\n            if (options.target) {\n                $(options.target).empty().html(response);\n            }\n            if (options.callback) {\n                options.callback(response);\n            }\n        })\n        .fail(function (xhr, textStatus) {\n            // failed\n            if (textStatus === 'parsererror') {\n                /*eslint-disable no-alert */\n                window.alert(Resources.BAD_RESPONSE);\n                /*eslint-enable no-alert */\n            }\n            options.callback(null, textStatus);\n        })\n        .always(function () {\n            progress.hide();\n            // remove current request from hash\n            if (currentRequests[options.url]) {\n                delete currentRequests[options.url];\n            }\n        });\n    /*jslint unparam: false */\n};\n\nexports.getJson = getJson;\nexports.load = load;\n",
        "'use strict';\n\nvar ajax = require(2),\n    util = require(27);\n\nvar selectedList = [],\n    maxItems = 1,\n    bliUUID = '';\n\n/**\n * @private\n * @function\n * description Gets a list of bonus products related to a promoted product\n */\nfunction getBonusProducts() {\n    var o = {},\n        i,\n        len,\n        p,\n        a,\n        alen,\n        bp,\n        opt;\n    o.bonusproducts = [];\n\n    for (i = 0, len = selectedList.length; i < len; i++) {\n        p = {\n            pid: selectedList[i].pid.toString(),\n            qty: selectedList[i].qty,\n            options: {}\n        };\n        bp = selectedList[i];\n        if (bp.options) {\n            for (a = 0, alen = bp.options.length; a < alen; a++) {\n                opt = bp.options[a];\n                p.options = {optionName: opt.name, optionValue: opt.value};\n            }\n        }\n        o.bonusproducts.push({product: p});\n    }\n    return o;\n}\n\nvar selectedItemTemplate = function (data) {\n    var attributes = '',\n        attrID,\n        attr;\n    for (attrID in data.attributes) {\n        if (data.attributes.hasOwnProperty(attrID)) {\n            attr = data.attributes[attrID];\n            attributes += '<li data-attribute-id=\"' + attrID + '\">\\n';\n            attributes += '<span class=\"display-name\">' + attr.displayName + '</span>: ';\n            attributes += '<span class=\"display-value\">' + attr.displayValue + '</span>\\n';\n            attributes += '</li>';\n        }\n    }\n    attributes += '<li class=\"item-qty\">\\n';\n    attributes += '<span class=\"display-name\">Qty</span>: ';\n    attributes += '<span class=\"display-value\">' + data.qty + '</span>';\n    return [\n        '<li class=\"selected-bonus-item\" data-uuid=\"' + data.uuid + '\" data-pid=\"' + data.pid + '\">',\n        '<i class=\"remove-link fa fa-remove\" title=\"Remove this product\" href=\"#\"></i>',\n        '<div class=\"item-name\">' + data.name + '</div>',\n        '<ul class=\"item-attributes\">',\n        attributes,\n        '<ul>',\n        '<li>'\n    ].join('\\n');\n};\n\n// hide swatches that are not selected or not part of a Product Variation Group\nvar hideSwatches = function () {\n    $('.bonus-product-item .swatches li').not('.selected').not('.variation-group-value').hide();\n    // prevent unselecting the selected variant\n    $('.bonus-product-item .swatches .selected').on('click', function () {\n        return false;\n    });\n};\n\n/**\n * @private\n * @function\n * @description Updates the summary page with the selected bonus product\n */\nfunction updateSummary() {\n    var $bonusProductList = $('#bonus-product-list'),\n        ulList,\n        i,\n        len,\n        item,\n        li,\n        remain;\n    if (selectedList.length === 0) {\n        $bonusProductList.find('li.selected-bonus-item').remove();\n    } else {\n        ulList = $bonusProductList.find('ul.selected-bonus-items').first();\n        for (i = 0, len = selectedList.length; i < len; i++) {\n            item = selectedList[i];\n            li = selectedItemTemplate(item);\n            $(li).appendTo(ulList);\n        }\n    }\n\n    // get remaining item count\n    remain = maxItems - selectedList.length;\n    $bonusProductList.find('.bonus-items-available').text(remain);\n    if (remain <= 0) {\n        $bonusProductList.find('.select-bonus-item').attr('disabled', 'disabled');\n    } else {\n        $bonusProductList.find('.select-bonus-item').removeAttr('disabled');\n    }\n}\n\nfunction initializeGrid() {\n    var $bonusProduct = $('#bonus-product-dialog'),\n        $bonusProductList = $('#bonus-product-list'),\n        bliData = $bonusProductList.data('line-item-detail'),\n        cartItems;\n    maxItems = bliData.maxItems;\n    bliUUID = bliData.uuid;\n\n    if (bliData.itemCount >= maxItems) {\n        $bonusProductList.find('.select-bonus-item').attr('disabled', 'disabled');\n    }\n\n    cartItems = $bonusProductList.find('.selected-bonus-item');\n    cartItems.each(function () {\n        var ci = $(this),\n            product = {\n                uuid: ci.data('uuid'),\n                pid: ci.data('pid'),\n                qty: ci.find('.item-qty').text(),\n                name: ci.find('.item-name').html(),\n                attributes: {}\n            },\n            attributes = ci.find('ul.item-attributes li');\n        attributes.each(function () {\n            var li = $(this);\n            product.attributes[li.data('attributeId')] = {\n                displayName: li.children('.display-name').html(),\n                displayValue: li.children('.display-value').html()\n            };\n        });\n        selectedList.push(product);\n    });\n\n    $bonusProductList.on('click', '.bonus-product-item a[href].swatchanchor', function (e) {\n        e.preventDefault();\n        var url = this.href,\n            $this = $(this);\n        url = util.appendParamsToUrl(url, {\n            'source': 'bonus',\n            'format': 'ajax'\n        });\n        $.ajax({\n            url: url,\n            success: function (response) {\n                $this.closest('.bonus-product-item').empty().html(response);\n                hideSwatches();\n            }\n        });\n    })\n        .on('change', '.input-text', function () {\n            $bonusProductList.find('.select-bonus-item').removeAttr('disabled');\n            $(this).closest('.bonus-product-form').find('.quantity-error').text('');\n        })\n        .on('click', '.select-bonus-item', function (e) {\n            e.preventDefault();\n            if (selectedList.length >= maxItems) {\n                $bonusProductList.find('.select-bonus-item').attr('disabled', 'disabled');\n                $bonusProductList.find('.bonus-items-available').text('0');\n                return;\n            }\n\n            var form = $(this).closest('.bonus-product-form'),\n                detail = $(this).closest('.product-detail'),\n                uuid = form.find('input[name=\"productUUID\"]').val(),\n                qtyVal = form.find('input[name=\"Quantity\"]').val(),\n                qty = (isNaN(qtyVal)) ? 1 : (+qtyVal),\n                product,\n                optionSelects;\n\n            if (qty > maxItems) {\n                $bonusProductList.find('.select-bonus-item').attr('disabled', 'disabled');\n                form.find('.quantity-error').text(Resources.BONUS_PRODUCT_TOOMANY);\n                return;\n            }\n\n            product = {\n                uuid: uuid,\n                pid: form.find('input[name=\"pid\"]').val(),\n                qty: qty,\n                name: detail.find('.product-name').text(),\n                attributes: detail.find('.product-variations').data('attributes'),\n                options: []\n            };\n\n            optionSelects = form.find('.product-option');\n\n            optionSelects.each(function () {\n                product.options.push({\n                    name: this.name,\n                    value: $(this).val(),\n                    display: $(this).children(':selected').first().html()\n                });\n            });\n            selectedList.push(product);\n            updateSummary();\n        })\n        .on('click', '.remove-link', function (e) {\n            e.preventDefault();\n            var container = $(this).closest('.selected-bonus-item'),\n                uuid,\n                i,\n                len;\n            if (!container.data('uuid')) {\n                return;\n            }\n\n            uuid = container.data('uuid');\n            len = selectedList.length;\n            for (i = 0; i < len; i++) {\n                if (selectedList[i].uuid === uuid) {\n                    selectedList.splice(i, 1);\n                    break;\n                }\n            }\n            updateSummary();\n        })\n        .on('click', '.add-to-cart-bonus', function (e) {\n            e.preventDefault();\n            var url = util.appendParamsToUrl(Urls.addBonusProduct, {bonusDiscountLineItemUUID: bliUUID}),\n                bonusProducts = getBonusProducts();\n            if (bonusProducts.bonusproducts[0].product.qty > maxItems) {\n                bonusProducts.bonusproducts[0].product.qty = maxItems;\n            }\n            // make the server call\n            /*jslint unparam: true */\n            $.ajax({\n                type: 'POST',\n                dataType: 'json',\n                cache: false,\n                contentType: 'application/json',\n                url: url,\n                data: JSON.stringify(bonusProducts)\n            })\n                .done(function () {\n                    // success\n                    window.location = Urls.cartShow;\n                })\n                .fail(function (xhr, textStatus) {\n                    // failed\n                    if (textStatus === 'parsererror') {\n                        /*eslint-disable no-alert */\n                        window.alert(Resources.BAD_RESPONSE);\n                        /*eslint-enable no-alert */\n                    } else {\n                        /*eslint-disable no-alert */\n                        window.alert(Resources.SERVER_CONNECTION_ERROR);\n                        /*eslint-enable no-alert */\n                    }\n                })\n                .always(function () {\n                    $bonusProduct.slideUp('slow');\n                });\n            /*jslint unparam: false */\n        });\n}\n\nvar bonusProductsView = {\n    /**\n     * @function\n     * @description Open the list of bonus products selection dialog\n     */\n    show: function (url) {\n        var $bonusProduct = $('#bonus-product-dialog');\n        // create the dialog\n        ajax.load({\n            url: url,\n            target: $bonusProduct,\n            callback: function () {\n                initializeGrid();\n                hideSwatches();\n                $bonusProduct.slideDown('fast');\n                util.scrollBrowser($bonusProduct.offset().top - 50);\n            }\n        });\n    },\n    /**\n     * @function\n     * @description Open bonus product promo prompt dialog\n     */\n    loadBonusOption: function () {\n        var bonusDiscountContainer = document.querySelector('.bonus-discount-container'),\n            uuid = $('.bonus-product-promo').data('lineitemid'),\n            url = util.appendParamsToUrl(Urls.getBonusProducts, {\n                bonusDiscountLineItemUUID: uuid,\n                source: 'bonus'\n            });\n\n        if (!bonusDiscountContainer) {\n            return;\n        }\n        this.show(url);\n\n        // get the html from minicart, then trash it\n        bonusDiscountContainer.parentNode.removeChild(bonusDiscountContainer.outerHTML);\n    }\n};\n\nmodule.exports = bonusProductsView;\n",
        "/*jslint nomen: true */\n'use strict';\n\nvar sirv = require(23),\n    util = require(27),\n    productslidertile = require(19);\nrequire(32);\n\nvar carousel,\n    $window = $(window),\n    prevNext = function (dir, e) {\n        var that = this;\n        if (e) {\n            e.preventDefault();\n            if ($(e.currentTarget).hasClass('disabled')) {\n                return;\n            }\n        }\n\n        if (!that.scrolling) {\n            that.scrolling = true;\n            that.goTo(that.currentIndex + dir).done(function () {\n                that.scrolling = false;\n            });\n        }\n    };\n\nfunction CarouselView() {\n    return {\n        backboneViewFakerInit: function ($el) {\n            var that = this;\n            that.$el = $el;\n            that.$ = function (selector) {\n                that.$el.find(selector);\n            };\n            that.trigger = function (event, data) {\n                that.$el.trigger(event, data);\n            };\n            that.on = function (event) {\n                that.$el.on(event);\n            };\n            for(var event in that.events) {\n                var method = that.events[event];\n                var match;\n                if (typeof method !== 'function') {\n                    method = that[method];\n                }\n                if (method) {\n                    /*jslint regexp: true*/\n                    match = event.match(/^(\\S+)\\s*(.*)$/);\n                    /*jslint regexp: false*/\n                    that.$el.on(match[1], match[2], method.bind(that));\n                }\n            };\n        },\n\n        events: {\n            'click .nav-next': 'next',\n            'click .nav-prev': 'prev',\n            'click .bubble': 'bubbleClick'\n        },\n\n        excludedElements: util.without($.fn.swipe.defaults.excludedElements.split(', '), ['a']).join(', '),\n        itemWidth: null,\n        currentIndex: 0,\n        posAdd: 0,\n        maxItems: 0,\n        maxItemsAll: 0,\n        visibleItems: 1,\n        $carousel: null,\n        $shadowEl: null,\n        $imageItems: null,\n        startSwipeScrollPos: null,\n        scrolling: false,\n        lastWindowWidth: null,\n        automaticChangeTimer: null,\n        bubblesInitiated: false,\n        bubblesActiveIcon: 'fa-circle',\n        bubblesInactiveIcon: 'fa-circle-thin',\n        isInfinite: false,\n        options: {\n            infinite: false,\n            automaticChangeTime: false,\n            showBubbles: false,\n            speed: 500\n        },\n\n        initialize: function (config) {\n            var that = this,\n                $shadowEl = config.$shadowEl,\n                options = config.options;\n            if (options) {\n                $.extend(that.options, config.options);\n            }\n            if ($shadowEl) {\n                this.$shadowEl = $shadowEl;\n            }\n            that.isInfinite = that.options.infinite;\n            that.backboneViewFakerInit(config.$el);\n            that.reinitComplete();\n        },\n        getImageItems: function () {\n            return $('li', this.$carousel);\n        },\n        preReinit: function () {\n            var that = this;\n            if (that.isInfinite) {\n                that.infiniteItems = that.infiniteItems || 1;\n                that.infiniteMin = that.infiniteMin || 2;\n                if (that.$carousel) {\n                    that.getImageItems().filter('.inf').remove();\n                    that.$imageItems = that.getImageItems();\n                }\n            }\n        },\n        reinit: function () {\n            var that = this,\n                $el = that.$el,\n                $carousel = $('.carousel', $el),\n                $imageItems;\n            that.preReinit();\n            that.$carousel = $carousel;\n            $imageItems = that.getImageItems();\n            that.$imageItems = $imageItems;\n            that.currentIndex = 0;\n            that.maxItems = that.maxItemsAll = $imageItems.length;\n            that.reinitBeforeResponsive();\n            that.initResponsive();\n        },\n        reinitBeforeResponsive: function () {\n            if (this.isInfinite) {\n                var that = this,\n                    $imageItems = that.$imageItems,\n                    infiniteItems = that.infiniteItems,\n                    $prependItems,\n                    $appendItems;\n                that.isInfinite = false;\n\n                // maybe this needs to get more complex in the future\n                // Other values can be configured by the view. Save and restore these values first\n                that.posAdd = 0;\n                that.noNavDisable = false;\n\n                if ($imageItems.length > that.infiniteMin - 1) {\n                    that.isInfinite = true;\n                    $prependItems = $imageItems.slice(-infiniteItems).clone();\n                    $appendItems = $imageItems.slice(0, infiniteItems).clone();\n                    $prependItems.add($appendItems).addClass('inf');\n                    that.$carousel.prepend($prependItems).append($appendItems);\n                    that.$imageItems = that.getImageItems();\n                    that.posAdd = infiniteItems;\n                    that.maxItemsAll = that.$imageItems.length;\n                    that.noNavDisable = true;\n                }\n            }\n        },\n        postReinit: function () {\n            var that = this;\n            that.goToInt(0, true);\n            that.initCarousel();\n            that.scrollImages((that.currentIndex + that.posAdd) * that.itemWidth, 0, true);\n        },\n        reinitComplete: function () {\n            this.reinit();\n            this.postReinit();\n        },\n        adjustSizeInt: function () {\n            var that = this,\n                $el = that.$el,\n                $carouselContainerInner = $('.carousel-container-inner', $el),\n                $imageItems = that.$imageItems,\n                $carousel = that.$carousel,\n                $shadowEl = that.$shadowEl,\n                itemWidth;\n            if ($shadowEl) {\n                itemWidth = $('li', $shadowEl).width();\n            } else {\n                $imageItems.add($carousel).css('width', '');\n                $carouselContainerInner.css({\n                    overflow: '',\n                    'transition-duration': 0\n                });\n                itemWidth = $imageItems.width();\n            }\n            $imageItems.width(itemWidth);\n            $carousel.width(itemWidth * that.maxItemsAll);\n            $carouselContainerInner.css({\n                overflow: 'hidden'\n            });\n            that.itemWidth = itemWidth;\n            that.visibleItems = $carouselContainerInner.length ?\n                    Math.round($carouselContainerInner.width() / itemWidth) : 1;\n        },\n        adjustSize: function (triggeredByResizeEvent) {\n            var that = this,\n                windowWidth = $window.width();\n            if (!triggeredByResizeEvent || (windowWidth !== that.lastWindowWidth && that.$el.is(':visible'))) {\n                that.adjustSizeInt();\n                that.bubblesInitiated = false;\n                that.goToInt(that.currentIndex, true);\n                that.lastWindowWidth = windowWidth;\n            }\n        },\n        initResponsive: function () {\n            $window.on('resize', util.debounce(function(){ this.adjustSize(true).bind(this)}.bind(this), 10));\n            this.adjustSize();\n        },\n        initCarousel: function () {\n            var that = this;\n            if (that.maxItems > 1) {\n                /*jslint unparam: true */\n                that.$carousel.swipe({\n                    triggerOnTouchEnd: true,\n                    preventDefaultEvents: false,\n                    swipeStatus: function (event, phase, direction, distance) {\n                        var duration = 0,\n                            currentIndex = that.currentIndex,\n                            itemWidth = that.itemWidth,\n                            posAdd = that.posAdd,\n                            currentIndexPos = itemWidth * (currentIndex + posAdd),\n                            scrollImages = that.scrollImages.bind(that),\n                            isALink,\n                            leftOrRight = direction === 'left' || direction === 'right',\n                            posToGo,\n                            getNewIndexPos = function () {\n                                var newIndexPos = currentIndexPos;\n                                if (direction === 'left') {\n                                    newIndexPos += distance;\n                                } else if (direction === 'right') {\n                                    newIndexPos -= distance;\n                                }\n                                return newIndexPos;\n                            },\n                            theNewIndexPos = getNewIndexPos(),\n                            calculateGoToPos = function () {\n                                var tileToShow = theNewIndexPos / itemWidth,\n                                    posInTile = (tileToShow - Math.floor(tileToShow)) * 100,\n                                    newPos = currentIndexPos;\n                                if (direction === 'left') {\n                                    newPos = posInTile > 25 ? Math.ceil(tileToShow) : Math.floor(tileToShow);\n                                } else if (direction === 'right') {\n                                    newPos = posInTile < 75 ? Math.floor(tileToShow) : Math.ceil(tileToShow);\n                                }\n                                return newPos - posAdd;\n                            };\n                        if (phase === 'start') {\n                            that.startSwipeScrollPos = $window.scrollTop();\n                        }\n                        //If we are moving before swipe, and we are going L or R in X mode, or U or D in Y mode then\n                        //drag.\n                        if (phase === 'move' && leftOrRight) {\n                            scrollImages(theNewIndexPos, duration);\n                        } else if (phase === 'cancel') {\n                            if (currentIndexPos === getNewIndexPos() &&\n                                    $window.scrollTop() === that.startSwipeScrollPos) {\n                                that.$carousel.trigger('carousel:tap');\n                            }\n                            that.startSwipeScrollPos = null;\n                            scrollImages(currentIndexPos, that.options.speed);\n                        } else if (phase === 'end') {\n                            if (leftOrRight) {\n                                posToGo = calculateGoToPos();\n                                if (that.isInfinite) {\n                                    that.goTo(posToGo);\n                                } else {\n                                    that.goTo(posToGo < 0 ? 0 :\n                                            (posToGo > that.maxItems - 1 ? that.maxItems - 1 : posToGo));\n                                }\n                            }\n                            isALink = $(event.target).parentsUntil(that.$el, 'a');\n                            if (isALink.length) {\n                                isALink.one('click', function (e) {\n                                    e.preventDefault();\n                                });\n                            }\n                            that.startSwipeScrollPos = null;\n                        }\n                    },\n                    allowPageScroll: 'vertical',\n                    threshold: 75,\n                    excludedElements: that.excludedElements\n                });\n                /*jslint unparam: false */\n            }\n            that.setNavComponents();\n        },\n        scrollValues: function (cssVals, vals, distance, duration, dontScroll) {\n            //inverse the number we set in the css\n            var value = (distance < 0 ? '' : '-') + Math.abs(distance).toString(),\n                dur;\n            cssVals.transform = 'translate3d(' + value + 'px,0,0)';\n            vals.transform = value;\n            if (!dontScroll) {\n                dur = duration / 1000;\n                cssVals['transition-duration'] = dur.toFixed(1) + 's';\n                vals.duration = dur;\n            } else {\n                vals.duration = 0;\n            }\n        },\n        scrollImages: function (distance, duration, dontScroll) {\n            var cssVals = {},\n                vals = {},\n                $carousel = this.$carousel,\n                deferred = new $.Deferred(),\n                transitionFinished = function () {\n                    $carousel.css('transition-duration', '0s');\n                    deferred.resolve();\n                };\n            this.scrollValues(cssVals, vals, distance, duration, dontScroll);\n            $carousel.css(cssVals);\n            if (dontScroll) {\n                transitionFinished();\n            }\n            $carousel.one('transitionend', transitionFinished);\n            return deferred.promise();\n        },\n        prev: function(event) { prevNext(-1, event); },\n        next: function(event) { prevNext(1, event); },\n        bubbleClick: function (e) {\n            var that = this,\n                $target = $(e.target),\n                targetPage = $target.index();\n            that.goTo(targetPage * that.visibleItems);\n        },\n        stopAutomaticChange: function () {\n            if (this.automaticChangeTimer) {\n                window.clearTimeout(this.automaticChangeTimer);\n            }\n        },\n        startAutomaticChange: function () {\n            var that = this;\n            that.stopAutomaticChange();\n            that.automaticChangeTimer = window.setTimeout(function () {\n                that.next();\n            }, that.options.automaticChangeTime * 1000);\n        },\n        goToInt: function (index, dontScroll) {\n            var that = this,\n                currentIndex = that.enforceBoundaries(index),\n                realIndex = that.getRealGoToPos(index),\n                deferred = new $.Deferred();\n\n            that.stopAutomaticChange();\n            that.currentIndex = realIndex;\n            that.scrollImages(that.itemWidth * (currentIndex + that.posAdd),\n                                dontScroll ? 0 : that.options.speed, dontScroll).done(\n                function () {\n                    if ((!Number.isNaN(currentIndex) && !Number.isNaN(realIndex)) && currentIndex !== realIndex) {\n                        that.goToInt(realIndex, true).done(function () {\n                            deferred.resolve();\n                        });\n                    } else {\n                        deferred.resolve();\n                    }\n                }\n            );\n            that.setNavComponents();\n            return deferred.promise();\n        },\n        goTo: function (index, dontScroll) {\n            var that = this;\n            return that.goToInt(index, dontScroll).done(function () {\n                that.trigger('carousel:selected', that.currentIndex);\n            });\n        },\n        getRealGoToPos: function (index) {\n            if (this.isInfinite) {\n                var realIndex = index,\n                    maxItems = this.maxItems;\n                if (index < 0) {\n                    realIndex = maxItems + index;\n                } else if (index >= maxItems) {\n                    realIndex = index - maxItems;\n                }\n                return realIndex;\n            }\n            return this.enforceBoundaries(index);\n        },\n        getBoundaryMin: function () {\n            if (this.isInfinite) {\n                return -this.posAdd;\n            }\n            return 0;\n        },\n        getBoundaryMax: function () {\n            var that = this;\n            if (that.isInfinite) {\n                return that.maxItems + that.posAdd - that.visibleItems;\n            }\n            return that.maxItems - that.visibleItems;\n        },\n        enforceBoundaries: function (index) {\n            var that = this;\n            return Math.max(Math.min(index, this.getBoundaryMax()), that.getBoundaryMin());\n        },\n        calcUnlimitedIndex: function (index) {\n            var that = this;\n            if (index < that.getBoundaryMin()) {\n                return that.getBoundaryMax();\n            }\n            if (index > that.getBoundaryMax()) {\n                return that.getBoundaryMin();\n            }\n            return index;\n        },\n        getCurrentItem: function () {\n            return this.$imageItems.eq(this.currentIndex + this.posAdd);\n        },\n        setNavComponents: function () {\n            var that = this;\n            that.setNavigation();\n            if (that.options.automaticChangeTime) {\n                that.startAutomaticChange();\n            }\n            if (that.options.showBubbles) {\n                if (!that.bubblesInitiated) {\n                    that.createBubbles();\n                    that.bubblesInitiated = true;\n                }\n                that.$el.find('.bubbles .bubble')\n                    .addClass(that.bubblesInactiveIcon)\n                    .removeClass(that.bubblesActiveIcon)\n                    .eq(Math.floor(that.currentIndex / that.visibleItems))\n                        .addClass(that.bubblesActiveIcon)\n                        .removeClass(that.bubblesInactiveIcon);\n            }\n        },\n        createBubbles: function () {\n            var that = this,\n                $bubbleContainer = that.$el.find('.bubble-ctr'),\n                $bubbleList = $bubbleContainer.find('.bubbles').empty(),\n                $bubble = $('<li/>', {'class': 'bubble fa'}),\n                visibleItems = that.visibleItems <= 0 ? that.maxItems : that.visibleItems,\n                bubbleCount = Math.ceil(that.maxItems / visibleItems),\n                i;\n\n            if ($bubbleContainer.length === 0) {\n                $bubbleContainer = $('<div/>', {'class': 'bubble-ctr'});\n                $bubbleList = $('<ul/>', {'class': 'bubbles'}).appendTo($bubbleContainer);\n            }\n            for (i = 0; i < bubbleCount; i++) {\n                $bubbleList.append($bubble.clone());\n            }\n            that.$el.find('.carousel-container-inner').before($bubbleContainer);\n        },\n        setNavigation: function () {\n            var that = this,\n                classDisabled = 'disabled',\n                $navPrev = $('.nav-prev', that.$el),\n                $navNext = $('.nav-next', that.$el);\n\n            if (that.maxItems <= 1 || that.maxItems <= that.visibleItems) {\n                $navPrev.add($navNext).hide();\n            } else {\n                $navPrev.add($navNext).show();\n            }\n            $navPrev.add($navNext).removeClass(classDisabled);\n\n            if (!that.options.infinite) {\n                if (that.currentIndex === that.getBoundaryMin()) {\n                    $navPrev.addClass(classDisabled);\n                } else if (that.currentIndex === that.getBoundaryMax()) {\n                    $navNext.addClass(classDisabled);\n                }\n            }\n        }\n    };\n}\n\nfunction SwatchCarousel() {\n\t//Custom Slider\n    if($('.product-swatches').length > 0) {\n\t\t\n\t    var swatchSlider = function() {\n            $('.product-swatches').each(function() {\n                var $slider = $(this);\n        \n                var sum = 0;\n                $slider.find('.swatch-list > a, .swatch-list > img, .swatch-list > div').each(function() {\n                    sum += $(this).width();\n                });\n                if (($slider.width() - 36) > sum) {\n                    $slider.addClass('no-scroll');\n                } else {\n                    $slider.removeClass('no-scroll');\n                }\n        \n                var liWidth = 0;\n                var maxliWidth = 0;\n                $slider.find('.slider-tile, .swatch-list .swatch, .swatch-list > img, .swatch-list > div').each(function() {\n                    if (liWidth < $slider.width()) {\n                        maxliWidth = liWidth;\n                    }\n                    liWidth += $(this).outerWidth(true);\n                });\n        \n                // Disable left arrow initially\n                $slider.find('.swatchleft').addClass('disabled');\n        \n                $slider.find('.swatchleft').off('click').on('click', function() {\n                    var $slidercontainer = $(this).closest('.product-swatches').find('.swatch-list');\n                    var scrLeft = $slidercontainer.scrollLeft() - maxliWidth;\n                    $slidercontainer.animate({\n                        scrollLeft: scrLeft\n                    }, 300);\n        \n                    // Check if slider is at the leftmost position\n                    if (scrLeft <= 0) {\n                        $(this).addClass('disabled');\n                    } else {\n                        $(this).removeClass('disabled');\n                    }\n                    // Ensure the right arrow is enabled\n                    $slider.find('.swatchright').removeClass('disabled');\n                });\n        \n                $slider.find('.swatchright').off('click').on('click', function() {\n                    var $slidercontainer = $(this).closest('.product-swatches').find('.swatch-list');\n                    var scrRight = $slidercontainer.scrollLeft() + maxliWidth;\n                    $slidercontainer.animate({\n                        scrollLeft: scrRight\n                    }, 300);\n        \n                    // Check if slider is at the rightmost position\n                    if (scrRight >= $slidercontainer[0].scrollWidth - $slidercontainer.width()) {\n                        $(this).addClass('disabled');\n                    } else {\n                        $(this).removeClass('disabled');\n                    }\n                    // Ensure the left arrow is enabled\n                    $slider.find('.swatchleft').removeClass('disabled');\n                });\n            });\n        };\n\t    \n\t    swatchSlider();\n    \t\n    \t$(window).resize(function(){\n            swatchSlider();\n\t\t});\n    }\n}\n\nfunction CustomCarousel() {\n    //Custom Slider\n    if($('.custom-slider').length > 0) {\n\n        $('.slider-tile').each( function(){\n            if ($(this).find('.product-promo')) {\n                var el = $(this).find('.product-promo').detach();\n                $(this).find('.product-pricing').append(el);\n            }\n        });\n\n        var customSlider = function() {\n            $('.custom-slider').each(function() {\n                var $slider = $(this);\n\n                var sum = 0;\n                $slider.find('.custom-slider-inner > a, .custom-slider-inner > img, .custom-slider-inner > div, .custom-slider-inner > li').each(function() {\n                    sum += $(this).width();\n                });\n                if ($slider.width() > sum || ($slider.hasClass('js-social-bundle') && $(window).width() < 768)) {\n                    $slider.addClass('no-scroll');\n                } else {\n                    $slider.removeClass('no-scroll');\n                }\n\n                var liWidth = 0;\n                var maxliWidth = 0;\n                $slider.find('.slider-tile, .custom-slider-inner .product-tile, .custom-slider-inner > img, .custom-slider-inner > div, .custom-slider-inner > li').each(function() {\n                    if (liWidth < $slider.width()) {\n                        maxliWidth = liWidth;\n                    }\n                    liWidth += $(this).outerWidth(true);\n                });\n\n                // Disable left arrow initially\n                $slider.find('.slideleft').addClass('disabled');\n\n                $slider.find('.slideleft').off('click').on('click', function() {\n                    var $slidercontainer = $(this).closest('.custom-slider').find('.custom-slider-inner');\n                    var scrLeft = $slidercontainer.scrollLeft() - maxliWidth;\n                    $slidercontainer.animate({\n                        scrollLeft: scrLeft\n                    }, 300);\n\n                    // Check if slider is at the leftmost position\n                    if (scrLeft <= 0) {\n                        $(this).addClass('disabled');\n                    } else {\n                        $(this).removeClass('disabled');\n                    }\n                    // Ensure the right arrow is enabled\n                    $slider.find('.slideright').removeClass('disabled');\n                });\n\n                $slider.find('.slideright').off('click').on('click', function() {\n                    var $slidercontainer = $(this).closest('.custom-slider').find('.custom-slider-inner');\n                    var scrRight = $slidercontainer.scrollLeft() + maxliWidth;\n                    $slidercontainer.animate({\n                        scrollLeft: scrRight\n                    }, 300);\n\n                    // Check if slider is at the rightmost position\n                    if (scrRight >= $slidercontainer[0].scrollWidth - $slidercontainer.width()) {\n                        $(this).addClass('disabled');\n                    } else {\n                        $(this).removeClass('disabled');\n                    }\n                    // Ensure the left arrow is enabled\n                    $slider.find('.slideleft').removeClass('disabled');\n                });\n\n                // Add scrollbar drag functionality\n                $slider.find('.custom-slider-inner').off('scroll').on('scroll', function() {\n                    var $slidercontainer = $(this);\n                    var currentScrollLeft = $slidercontainer.scrollLeft();\n\n                    // Check if slider is at the leftmost position\n                    if (currentScrollLeft <= 0) {\n                        $slider.find('.slideleft').addClass('disabled');\n                    } else {\n                        $slider.find('.slideleft').removeClass('disabled');\n                    }\n                    // Check if slider is at the rightmost position\n                    if (currentScrollLeft >= $slidercontainer[0].scrollWidth - $slidercontainer.width()) {\n                        $slider.find('.slideright').addClass('disabled');\n                    } else {\n                        $slider.find('.slideright').removeClass('disabled');\n                    }\n                });\n            });\n        };\n\n        customSlider();\n\n        $(window).resize(function(){\n          customSlider();\n        });\n    }\n}\n\nfunction CustomCarousel2() {\n    //Custom Slider\n    if($('.custom-slider2').length > 0) {\n        var customSlider = function() {\n            $('.custom-slider2').each( function(){\n                var sum = 0;\n                $(this).find('.custom-slider-inner > a, .custom-slider-inner > img, .custom-slider-inner > div').each( function(){\n                    sum += $(this).width();\n                });\n                if($(this).width() > sum) {\n                    $(this).addClass('no-scroll');\n                } else {\n                    $(this).removeClass('no-scroll');\n                }\n            });\n\n            var liWidth = 0;\n            var maxliWidth = 0;\n            var $customSlider = $('.custom-slider2:eq(0)');\n            $customSlider.find('.slider-tile, .custom-slider-inner .product-tile, .custom-slider-inner > img').each(function(i,e) {\n                if (i==0) {\n                maxliWidth =$(this).outerWidth(true);\n                }\n                if (liWidth < $customSlider.width() && i !=0) {\n                maxliWidth = liWidth;\n                }\n\n            liWidth += $(this).outerWidth(true);\n\n            });\n\n            $('.slideleft').off('click').on('click',function() {\n                var $slidercontainer = $(this).closest('.custom-slider2').find('.custom-slider-inner');\n                var scrLeft = $slidercontainer.scrollLeft() - maxliWidth;\n                $slidercontainer.animate( { scrollLeft: scrLeft }, 300);\n            });\n\n            $('.slideright').off('click').on('click',function() {\n                var $slidercontainer = $(this).closest('.custom-slider2').find('.custom-slider-inner');\n                var scrRight = $slidercontainer.scrollLeft() + maxliWidth;\n                $slidercontainer.animate( { scrollLeft: scrRight }, 300);\n            });\n        };\n\n        customSlider();\n\n        $(window).resize(function(){\n          customSlider();\n        });\n    }\n}\n\ncarousel = {\n    init: function () {\n        $('.carousel-container').each(function () {\n            var $el = $(this),\n                options = $el.data();\n            new CarouselView().initialize({$el: $el, options: options});\n            $el.addClass('loaded');\n        });\n        SwatchCarousel();\n        CustomCarousel();\n        CustomCarousel2();\n    }\n};\n\nvar initRecommendationsCarousel = function() {\n    carousel.init();\n    productslidertile.init();\n    if (SitePreferences.SIRV_ENABLED) {\n        sirv.init();\n    }\n};\n\nwindow.carousel = carousel;\nwindow.initRecommendationsCarousel = initRecommendationsCarousel;\n\nmodule.exports = initRecommendationsCarousel;\n",
        "var main = require(15);\n\n\n// initialize main functionality for all pages\n$(document).ready(function () {\n    main.init();\n});",
        "var progress = require(20);\n\nwindow.loadedScripts = {};\n\nfunction loadScriptOnce(id, url, callback) {\n    var scriptId = id ? id : url;\n    if (window.loadedScripts[scriptId]) {\n      return Promise.resolve();\n    }\n  \n    return $.getScript(url)\n        .done(function () {\n            window.loadedScripts[scriptId] = true;\n            document.dispatchEvent(new CustomEvent(scriptId));\n            if (typeof callback === 'function') {\n                callback();\n            }\n        })\n        .fail(function () {\n            console.error(\"Failed to load script:\", url);\n        });\n}\n\nfunction observeLazyLoadingScripts() {\n    // Define the element you want to observe\n    var observer = new IntersectionObserver(function (entries, observer) {\n        entries.forEach(function(entry) {\n            if (entry.isIntersecting) {\n                lazyLoadScript(entry.target);\n                observer.unobserve(entry.target);\n            }\n        });\n    });\n\n    // Define the element you want to observe\n    var elementsToObserve = document.querySelectorAll('.lazyload-script-js:not(.observed)');\n    elementsToObserve.forEach(function (element) {\n        observer.observe(element); \n    });\n\n    $(window).one('scroll', function() {\n        var scriptToLoad = document.querySelectorAll('.lazyload-script-onscroll-js:not(.loaded)');\n        scriptToLoad.forEach(lazyLoadScript);\n    });\n}\n\nfunction lazyLoadScript(element) {\n    $target = $(element);\n    var lazySrc = $target.data('lazysrc');\n    var scriptId = $target.data('id');\n    loadScriptOnce(scriptId, lazySrc);\n\n    $target.addClass('loaded observed');\n}\n\nfunction lazyLoadContent(lazyLoadContainer, callback, showProgressLoader) {\n    if (!lazyLoadContainer.hasClass('loaded')) {\n        lazyLoadContainer.addClass('loaded');\n        if (showProgressLoader) {\n            progress.show();\n        }\n        $.ajax({\n            url: lazyLoadContainer.attr('data-url'),\n            success: function (response) {\n                lazyLoadContainer.replaceWith(response);\n                if(window.yotpoWidgetsContainer){\n                    window.yotpoWidgetsContainer.initWidgets();\n                }\n                window.initRecommendationsCarousel();\n                observeLazyLoadingScripts();\n                window.globalcontentutils.init();\n            },\n            complete: function(){\n                if (typeof callback === 'function') {\n                    callback();\n                }\n            },\n            error: function (error) {\n                console.error(\"Error loading content slots:\", error);\n            }\n        });\n    } else {\n        if (typeof callback === 'function') {\n            callback();\n        }\n    }\n}\n\nwindow.observeLazyLoadingScripts = observeLazyLoadingScripts;\nwindow.loadScriptOnce = loadScriptOnce;\n\nmodule.exports = {\n    observeLazyLoadingScripts: observeLazyLoadingScripts,\n    lazyLoadContent: lazyLoadContent,\n    lazyLoadScript: lazyLoadScript,\n    loadScriptOnce: loadScriptOnce\n};",
        "var searchsuggest = require(21);\nvar util = require(27);\n\n\nvar menu = {\n    init: function () {\n\n        var $header = $('.header'),\n        toggleMobileMenu,\n        hideMobileAccountDropdown,\n        hideMobileSearch,\n        hideMobileMenu,\n        hideMobileMiniCart,\n        hideMiniCart,\n        hideAccountDropdown,\n        hideSearchSuggestions,\n        $searchContainer = $header.find('.header-search');\n\n        //check menu flyouts exceeding pagewidth\n        $header.find('.navigation .menu-category.not-for-mobile .flyout').each(function () {\n            var $flyout = $(this),\n                left;\n            $flyout.css('visibility', 'hidden').show(); //magic so we can properly retrieve the offset\n            if ($flyout.width() + $flyout.offset().left > $header.width() + $header.offset().left) {\n                if ($flyout.width() > $flyout.offset().left) {\n                    // this overwrites the 'left' from 'moved-left' if the flyout is too big\n                    left = $flyout.offset().left - (($header.width() - $flyout.width()) / 2);\n                    $flyout.css('left', '-' + left + 'px');\n                    $flyout.css('right', 'auto');\n                }\n                $flyout.addClass('moved-left');\n            }\n            $flyout.css({visibility: '', display: ''});\n        });\n\n\n        // main menu toggle\n        toggleMobileMenu = function (callback) {\n            $('.wrapper').toggleClass('menu-active');\n            $('.mobile-menu').slideToggle(0, function () {\n                if ($.isFunction(callback)) {\n                    callback();\n                }\n            });\n        };\n\n        hideMobileAccountDropdown = function () {\n            $('.mobile-account-menu').hide();\n            $('.topbar-mobile-account').find('.user-menu').removeClass('opened');\n        };\n\n        hideMobileSearch = function () {\n            $('.mobile-search-wrapper').hide();\n            $('.header-mobile-navitem-icon-trigger').removeClass('active');\n        };\n\n        hideMobileMenu = function () {\n            $('.mobile-menu').hide();\n            $('.menu-toggle').removeClass('active');\n            $('#wrapper').removeClass('menu-active');\n        };\n\n        hideMobileMiniCart = function () {\n            $('.coremenu-mobile').find('.mini-cart-link').removeClass('hover');\n            $('.coremenu-mobile').find('.mini-cart-content').hide();\n        };\n\n        hideSearchSuggestions = function () {\n            searchsuggest.clearResults();\n            $('input[name=\"q\"]').blur();\n        };\n\n        hideMiniCart = function () {\n            $('.header-fullwidth').find('.mini-cart-link').removeClass('hover');\n            $('.header-fullwidth').find('.mini-cart-content').hide();\n        };\n\n        hideAccountDropdown = function () {\n            $('.header-fullwidth').find('.user-account-trigger').removeClass('hover');\n            $('.header-fullwidth').find('.header-account-dropdown-content').hide();\n        };\n\n        var replaceNavigationMenuFlyouts = function() {\n            $.ajax({\n                url: Urls.navigationMenuURL,\n                type: 'GET',\n                success: function (response) {\n                    var navigationMenu = $(response);\n                    $('#navigation .li-level-1').each(function() {\n                        var level1 = $(this);\n                        var categoryId = level1.data('categoryId');\n                        level1.find('.div-level-2').html(navigationMenu.find('.li-level-1[data-category-id='+categoryId+'] .div-level-2').html());\n                    });\n                    util.addToggleEvents($('#navigation'));\n                },\n                error: function (err) {\n                    console.log(err);\n                }\n            });\n        }\n\n        if (window.SitePreferences.EnableLazyNavigation) {\n            $('#navigation').one('mouseover', replaceNavigationMenuFlyouts);\n            $(document).one('click', '.flyinheader-trigger', replaceNavigationMenuFlyouts);\n        }\n            \n        $(document)\n            .on('mouseover', '#navigation .a-level-1', function () {\n                $(this).closest('.has-sub-cats').delay(100).queue(function (next) {\n                    $(this).addClass('hover');\n                    $('.wrapper').addClass('navigation-overlay');\n                    next();\n                });\n            })\n            .on('mouseleave', '#navigation .li-level-1', function () {\n                $(this).queue(function (next) {\n                    $(this).removeClass('hover');\n                    $('.wrapper').removeClass('navigation-overlay');\n                    next();\n                });\n            })\n            .on('touchstart', function () {\n                $('#navigation .li-level-1.hover').removeClass('hover');\n            })\n            .on('touchstart', '#navigation', function (e) {\n                var $target = $(e.target);\n\n                e.stopPropagation();\n                if ($target.closest('.li-level-1').hasClass('hover')) {\n                    return;\n                }\n                if (!$target.closest('.li-level-1').find('.flyout').length) {\n                    return;\n                }\n                e.preventDefault();\n                $('#navigation .li-level-1').removeClass('hover');\n                $target.closest('.li-level-1').toggleClass('hover');\n            });\n\n        $('input[name=\"q\"]').on('focus', function () {\n            hideAccountDropdown();\n            hideMiniCart();\n        });\n\n        $('.menu-toggle').on('click', function () {\n            toggleMobileMenu();\n            window.scrollTo(0, 0);\n            $(this).toggleClass('active');\n            hideMobileAccountDropdown();\n            hideMobileSearch();\n            hideMobileMiniCart();\n        });\n        $('.header-mobile-navitem-icon-trigger').on('click', function (e) {\n            e.preventDefault();\n            $(this).toggleClass('active');\n            $('.mobile-search-wrapper').slideToggle(0);\n            hideMobileAccountDropdown();\n            hideMobileMenu();\n            hideMobileMiniCart();\n        });\n\n        $('.user-account-mobile-trigger').on('click', function () {\n            hideMobileMenu();\n            hideMobileSearch();\n            hideMobileMiniCart();\n            $('.mobile-account-menu').slideToggle(0);\n            $('.user-menu-mobile').toggleClass('opened');\n        });\n\n        $('.user-account-trigger').on('touchstart', function (e) {\n            e.preventDefault();\n            $(this).toggleClass('hover');\n            $('.header-account-dropdown-content').toggle();\n            hideMiniCart();\n            hideSearchSuggestions();\n        }).on('mouseenter', function (e) {\n            e.preventDefault();\n            $(this).addClass('hover');\n            $('.header-account-dropdown-content').show();\n            hideMiniCart();\n            hideSearchSuggestions();\n        });\n\n        $('.header-account-dropdown').on('mouseleave', function () {\n            $('.user-account-trigger').removeClass('hover');\n            $('.header-account-dropdown-content').hide();\n            hideMiniCart();\n            hideSearchSuggestions();\n        });\n\n        $('.mini-cart-link-withitems').on('touchstart', function () {\n            hideAccountDropdown();\n            hideSearchSuggestions();\n        });\n\n        $('.mini-cart').on('mouseenter', function () {\n            if ($('.mini-cart-link-withitems').length) {\n                hideAccountDropdown();\n                hideSearchSuggestions();\n            }\n        });\n\n        $('.nav-common').on('click', function () {\n            if ($(this).find('a').length > 0) {\n                window.location.href = $(this).find('a').attr('href');\n            }\n        });\n\n        $('.js-mobile-toolbar-account').on('click', function (e) {\n            var showAccountMenu = function () {\n                $('.mobile-menu').find('.li-level-1.account > .menu-item-toggle:not(.active)').click();\n            };\n            e.preventDefault();\n            if (!$('.wrapper').hasClass('menu-active')) {\n                toggleMobileMenu(showAccountMenu);\n            } else {\n                showAccountMenu();\n            }\n        });\n\n        $(document).on('click', '.menu-category li .menu-item-toggle', function (e) {\n            e.preventDefault();\n            var $parentLi = $(e.target).closest('li');\n            $parentLi.siblings('li.active').removeClass('active').find('.menu-item-toggle.active').click()\n                .removeClass('fa-minus active').addClass('fa-plus');\n            $parentLi.toggleClass('active');\n\n            $(e.target).toggleClass('active');\n            if ($(e.target).hasClass('fa-minus') || $(e.target).hasClass('fa-plus')){\n                $(e.target).toggleClass('fa-plus fa-minus');\n            }\n        });\n\n        searchsuggest.init($searchContainer, Resources.SIMPLE_SEARCH);\n    }\n}\n\nmodule.exports = menu;",
        "\nfunction productTileSliders() {\n    $(\".product-tile-slider-wrapper\").each(function() {\n        if ($(this).find('.slider .slide').length > 1) {\n            var $wrapper = $(this);\n            var $slider = $wrapper.find('.slider');\n            var $slides = $slider.find(\".slide\");\n    \n            var dataStart = ($(document).width() >= 1280 ? $wrapper.data('startslidedesktop') : $wrapper.data('startslide')) || 0;\n            var isSwiping = false, startX = 0, currentX = 0;\n    \n            \n            var $firstClone = $slides.first().clone().addClass(\"clone\");\n            var $lastClone = $slides.last().clone().addClass(\"clone\");\n    \n            $slider.append($firstClone);\n            $slider.prepend($lastClone);\n    \n            var totalSlides = $slider.find(\".slide\").length; // Include clones\n            var currentIndex = dataStart + 1;\n    \n            function updateSlider(instant = false) {\n                var offset = -currentIndex * 100;\n                $slider.css({\n                    transform: \"translateX(\" + offset + \"%)\",\n                    transition: instant ? \"none\" : \"transform 0.3s ease-in-out\"\n                });\n                updateDots();\n            }\n    \n            function updateDots() {\n                var realIndex = (currentIndex - 1 + $slides.length) % $slides.length;\n                $wrapper.find(\".dot\").removeClass(\"active\").eq(realIndex).addClass(\"active\");\n            }\n    \n            function showNextSlide(event) {\n                if (event) event.preventDefault();\n                currentIndex++;\n                updateSlider();\n    \n                if (currentIndex >= totalSlides - 1) {\n                    setTimeout(function() {\n                        currentIndex = 1;\n                        updateSlider(true);\n                    }, 300);\n                }\n            }\n    \n            function showPrevSlide(event) {\n                if (event) event.preventDefault();\n                currentIndex--;\n                updateSlider();\n    \n                if (currentIndex <= 0) {\n                    setTimeout(function() {\n                        currentIndex = totalSlides - 2;\n                        updateSlider(true);\n                    }, 300);\n                }\n            }\n    \n            function goToSlide(index) {\n                currentIndex = index + 1;\n                updateSlider();\n            }\n    \n            if ($wrapper.data('arrows')) {\n                var $prevButton = $('<div/>').addClass('arrow prev').append($('<div/>').addClass('element'));\n                var $nextButton = $('<div/>').addClass('arrow next').append($('<div/>').addClass('element'));\n    \n                $wrapper.append($prevButton, $nextButton);\n                $prevButton.on(\"click\", showPrevSlide);\n                $nextButton.on(\"click\", showNextSlide);\n            }\n    \n            if ($wrapper.data('dots')) {\n                var $controls = $('<div/>').addClass('controls');\n                for (var i = 0; i < $slides.length; i++) {\n                    $('<span/>').addClass('dot').attr('data-index', i).appendTo($controls);\n                }\n                $wrapper.append($controls);\n    \n                $wrapper.on(\"click\", \".dot\", function(event) {\n                    event.preventDefault();\n                    goToSlide($(this).data(\"index\"));\n                });\n            }\n\n            $slides.swipe({\n                swipeStatus: function (event, phase, direction, distance, duration, fingers) {\n                    if (phase === \"start\") {\n                        isSwiping = true;\n                        startX = event.touches ? event.touches[0].pageX : 0;\n                        $slider.css(\"transition\", \"none\");\n                    } else if (phase === \"move\") {\n                        currentX = event.touches ? event.touches[0].pageX : 0;\n                        var swipeOffset = currentX - startX;\n                        var relativeOffset = (-currentIndex * 100) + (swipeOffset /  $slider .width()) * 100;\n                        $slider.css(\"transform\", \"translateX(\" + relativeOffset + \"%)\");\n                    } else if (phase === \"end\" || phase === \"cancel\") {\n                        isSwiping = false;\n                        if (direction === \"left\" && distance > 50) {\n                            showNextSlide(event);\n                        } else if (direction === \"right\" && distance > 50) {\n                            showPrevSlide(event);\n                        } else {\n                            updateSlider();\n                        }\n                    }\n                },\n                threshold: 50,\n                fingers: \"all\",\n            });\n    \n            // Initialize slider\n            updateSlider(true);\n        }\n    });\n}\n\nmodule.exports = productTileSliders;",
        "'use strict';\n\nvar progress = require(20);\n\n    if (SitePreferences.NEWCOOKIES_ENABLED) {\n\n        module.exports = function () {\n            var $cookieWarning = $('.cookiewarning'),\n            getCookie = function (cname) {\n                var name = cname + '=',\n                    decodedCookie = decodeURIComponent(document.cookie),\n                    ca = decodedCookie.split(';'),\n                    i,\n                    c;\n                for (i = 0; i < ca.length; i++) {\n                    c = ca[i];\n                    while (c.charAt(0) === ' ') {\n                        c = c.substring(1);\n                    }\n                    if (c.indexOf(name) === 0) {\n                        return c.substring(name.length, c.length);\n                    }\n                }\n                return '';\n            },\n\n            isGDPRaccepted = function () {\n                var accepted = getCookie('gdpr_cookies_accepted');\n                return accepted === 'true';\n            },\n\n            createExpiryString = function () {\n                var d = new Date();\n                // a year from now\n                d.setTime(d.getTime() + 31536000000);\n                return 'expires=' + d.toUTCString();\n            },\n            expires = null;\n\n            if ($cookieWarning.length && document.cookie.indexOf('dw_cookies_accepted') < 0) {\n                if (document.cookie.indexOf('dw_cookies_accepted') < 0) {\n                    $cookieWarning.addClass('visible');\n                    $cookieWarning.find('.cookiewarning-close').on('click', function () {\n                        document.cookie = 'dw_cookies_accepted=1; path=/';\n                        $cookieWarning.removeClass('visible');\n                    });\n                }\n            }\n\n            if (document.cookie.indexOf('dw=1') < 0) {\n                document.cookie = 'dw=1; path=/';\n            }\n\n            if (!isGDPRaccepted()) {\n                //Show Cookie popup\n                var cookieSelector = $('.cookie-selector');\n\n                if (cookieSelector.length > 0) {\n                    if (window.dialog) {\n                        window.dialog.open({\n                            html: $('.cookie-selector'),\n                            options:{\n                                dialogClass:'cookie-consent-dialog',\n                                title: \"Cookie consent\",\n                                open: function(){\n                                    $('body').css('overflow','hidden');\n                                    $('.cookie-selector').removeClass('d-none');\n                                    initEvents($('.cookie-selector'));\n\n                                    $('.cookie-selector .manage').on('click', function (e) {\n                                        e.preventDefault();\n\n                                        $.ajax({\n                                            url: $(this).attr('href'),\n                                            type: 'GET',\n                                            success: function (response) {\n                                                $('.cookie-selector').html(response);\n                                                $('.cookie-selector').addClass('p-0');\n                                                $('input[name=statistical_cookie]').prop('checked', true);\n                                                $('input[name=personalisation_cookie]').prop('checked', true);\n                                                $('input[name=marketing_cookie]').prop('checked', true);\n                                                require(26)();\n                                                initEvents($('.cookie-selector'));\n                                            },\n                                            error: function(data) {\n\n                                            }\n                                        });\n                                    });\n\n                                    progress.hide();\n                                },\n                                beforeClose: function(){\n                                    return isGDPRaccepted();\n                                },\n                                close:function() {\n                                    $('body').removeAttr(\"style\");\n                                    $('html').removeAttr(\"style\");\n                                    $('.cookie-selector').addClass('d-none');\n                                }\n                            }\n                        });\n                    }\n                }\n            } else {\n                // load values from cookies\n                if (getCookie('CookiesStats') === 'true') {\n                    $('input[name=statistical_cookie]').prop('checked', true);\n                }\n                if (getCookie('CookiesPers') === 'true') {\n                    $('input[name=personalisation_cookie]').prop('checked', true);\n                }\n                if (getCookie('CookiesMark') === 'true') {\n                    $('input[name=marketing_cookie]').prop('checked', true);\n                }\n            }\n            initEvents($('.cookie-policy'));\n\n            function initEvents(container) {\n                $('.gdpr-checkboxes .info').on('click', function () {\n                    var cookieOverlay = $(this).siblings('.overlay-container');\n                    cookieOverlay.removeClass('overlay-container-off');\n                    cookieOverlay.addClass('overlay-container-on');\n\n                });\n\n                container.find('.allow-all').on('click', function () {\n                    expires = createExpiryString();\n                    document.cookie = 'gdpr_cookies_accepted=true;' + expires + ';path=/';\n                    document.cookie = 'CookiesStats=true;' + expires + ';path=/';\n                    document.cookie = 'CookiesPers=true;' + expires + ';path=/';\n                    document.cookie = 'CookiesMark=true;' + expires + ';path=/';\n                    container.find('.message-sticky').css('display', 'block');\n                    if (window.dialog) {\n                        window.dialog.close();\n                    }\n                    $('.cookie-selector').addClass('d-none');\n                });\n\n                container.find('.message-sticky').find('a.button').on('click', function () {\n                    $(this).parents('.message-sticky').css('display', 'none');\n                });\n\n                $('.gdpr-checkboxes #save').on('click', function () {\n                    expires = createExpiryString();\n                    document.cookie = 'CookiesStats=' +\n                        container.find('input[name=statistical_cookie]').prop('checked') + ';' + expires + ';path=/';\n                    document.cookie = 'CookiesPers=' +\n                        container.find('input[name=personalisation_cookie]').prop('checked') + ';' + expires + ';path=/';\n                    document.cookie = 'CookiesMark=' +\n                        container.find('input[name=marketing_cookie]').prop('checked') + ';' + expires + ';path=/';\n                    document.cookie = 'dw_cookies_accepted=1; path=/';\n                    document.cookie = 'gdpr_cookies_accepted=true;' + expires + ';path=/';\n                    container.find('.message-sticky').css('display', 'block');\n                    if (window.dialog) {\n                        window.dialog.close();\n                    }\n                });\n            }\n        };\n\n    } else {\n\n        module.exports = function () {\n            var $cookieWarning = $('.cookiewarning'),\n                $gdpr = $('.GDPR'),\n\n                getCookie = function (cname) {\n                    var name = cname + '=',\n                        decodedCookie = decodeURIComponent(document.cookie),\n                        ca = decodedCookie.split(';'),\n                        i,\n                        c;\n                    for (i = 0; i < ca.length; i++) {\n                        c = ca[i];\n                        while (c.charAt(0) === ' ') {\n                            c = c.substring(1);\n                        }\n                        if (c.indexOf(name) === 0) {\n                            return c.substring(name.length, c.length);\n                        }\n                    }\n                    return '';\n                },\n\n                isGDPRaccepted = function () {\n                    var accepted = getCookie('gdpr_cookies_accepted');\n                    return accepted === 'true';\n                },\n\n                createExpiryString = function () {\n                    var d = new Date();\n                    // a year from now\n                    d.setTime(d.getTime() + 31536000000);\n                    return 'expires=' + d.toUTCString();\n                },\n                expires = null;\n            if ($cookieWarning.length && document.cookie.indexOf('dw_cookies_accepted') < 0) {\n                if (document.cookie.indexOf('dw_cookies_accepted') < 0) {\n                    $cookieWarning.addClass('visible');\n                    $cookieWarning.find('.cookiewarning-close').on('click', function () {\n                        document.cookie = 'dw_cookies_accepted=1; path=/';\n                        $cookieWarning.removeClass('visible');\n                    });\n                }\n            }\n\n            if (document.cookie.indexOf('dw=1') < 0) {\n                document.cookie = 'dw=1; path=/';\n            }\n\n            if (!isGDPRaccepted()) {\n                $gdpr.css('display', 'flex');\n                $gdpr.find('.gdpr-accept').on('click', function () {\n                    expires = createExpiryString();\n                    document.cookie = 'gdpr_cookies_accepted=true;' + expires + ';path=/';\n                    document.cookie = 'CookiesStats=true;' + expires + ';path=/';\n                    document.cookie = 'CookiesPers=true;' + expires + ';path=/';\n                    document.cookie = 'CookiesMark=true;' + expires + ';path=/';\n                    $gdpr.css('display', 'none');\n                });\n            } else {\n                $gdpr.css('display', 'none');\n            }\n\n            // load values from cookies\n            if (getCookie('CookiesStats') === 'true') {\n                $('input[name=statistical_cookie]').prop('checked', true);\n            }\n            if (getCookie('CookiesPers') === 'true') {\n                $('input[name=personalisation_cookie]').prop('checked', true);\n            }\n            if (getCookie('CookiesMark') === 'true') {\n                $('input[name=marketing_cookie]').prop('checked', true);\n            }\n\n            $('.message-sticky').find('a.button').on('click', function () {\n                $(this).parents('.message-sticky').css('display', 'none');\n            });\n\n            $('.gdpr-checkboxes #save').on('click', function () {\n                expires = createExpiryString();\n                document.cookie = 'CookiesStats=' +\n                    $('input[name=statistical_cookie]').prop('checked') + ';' + expires + ';path=/';\n                document.cookie = 'CookiesPers=' +\n                    $('input[name=personalisation_cookie]').prop('checked') + ';' + expires + ';path=/';\n                document.cookie = 'CookiesMark=' +\n                    $('input[name=marketing_cookie]').prop('checked') + ';' + expires + ';path=/';\n                document.cookie = 'dw_cookies_accepted=1; path=/';\n                document.cookie = 'gdpr_cookies_accepted=true;' + expires + ';path=/';\n                $('.message-sticky').css('display', 'block');\n                $gdpr.css('display', 'none');\n            });\n\n            $('.gdpr-checkboxes .info').on('click', function () {\n                var cookieOverlay = $(this).siblings('.overlay-container');\n                cookieOverlay.removeClass('overlay-container-off');\n                cookieOverlay.addClass('overlay-container-on');\n\n            });\n\n            // if we are on the order confirmation page\n            if ($('.pt_order-confirmation').length > 0) {\n\n            }\n        };\n\n    }",
        "/*jslint nomen: true */\n'use strict';\n\nvar ajax = require(2),\n    util = require(27),\n    imagesLoaded = require(31);\n\nvar dialog = {\n    /**\n     * @function\n     * @description Appends a dialog to a given container (target)\n     * @param {Object} params  params.target can be an id selector or an jquery object\n     */\n    create: function (params) {\n        var $target,\n            id;\n\n        if (util.isString(params.target)) {\n            if (params.target.charAt(0) === '#') {\n                $target = $(params.target);\n            } else {\n                $target = $('#' + params.target);\n            }\n        } else if (params.target instanceof $) {\n            $target = params.target;\n        } else {\n            $target = $('#dialog-container');\n        }\n\n        // if no element found, create one\n        if ($target.length === 0) {\n            if ($target.selector && $target.selector.charAt(0) === '#') {\n                id = $target.selector.substr(1);\n                $target = $('<div>').attr('id', id).addClass('dialog-content').appendTo('body');\n            }\n        }\n\n        // create the dialog\n        this.$container = $target;\n        var options = util.merge({}, this.settings);\n        options = util.merge(options, params.options || {});\n        this.$container.dialog(options);\n    },\n    /**\n     * @function\n     * @description Opens a dialog using the given url (params.url) or html (params.html)\n     * @param {Object} params\n     * @param {Object} params.url should contain the url\n     * @param {String} params.html contains the html of the dialog content\n     */\n    open: function (params) {\n        // close any open dialog\n        this.close();\n        this.create(params);\n        this.replace(params);\n    },\n    /**\n     * @description populate the dialog with html content, then open it\n     **/\n    openWithContent: function (params) {\n        var content, position, callback;\n\n        if (!this.$container) {\n            return;\n        }\n        content = params.content || params.html;\n        if (!content) {\n            return;\n        }\n        this.$container.empty().html(content);\n        if (!this.$container.dialog('isOpen')) {\n            this.$container.dialog('open');\n        }\n\n        $('.ui-widget-overlay').on('click', function () {\n            $('video').trigger('pause');\n            this.$container.dialog('close');\n        }.bind(this));\n\n        if (params.options) {\n            position = params.options.position;\n        }\n        if (!position) {\n            position = this.settings.position;\n        }\n        imagesLoaded(this.$container).on('done', function () {\n            this.$container.dialog('option', 'position', position);\n        }.bind(this));\n\n        callback = (typeof params.callback === 'function') ? params.callback : $.noop;\n        callback();\n    },\n    /**\n     * @description Replace the content of current dialog\n     * @param {object} params\n     * @param {string} params.url - If the url property is provided, an ajax call is performed to get the content to\n                                    replace\n     * @param {string} params.html - If no url property is provided, use html provided to replace\n     */\n    replace: function (params) {\n        if (!this.$container) {\n            return;\n        }\n        if (params.url) {\n            params.url = util.appendParamToURL(params.url, 'format', 'ajax');\n            ajax.load({\n                url: params.url,\n                data: params.data,\n                callback: function (response) {\n                    params.content = response;\n                    this.openWithContent(params);\n                }.bind(this)\n            });\n        } else if (params.html) {\n            this.openWithContent(params);\n        }\n    },\n    /**\n     * @function\n     * @description Closes the dialog\n     */\n    close: function () {\n        if (!this.$container) {\n            return;\n        }\n        this.$container.dialog('close');\n    },\n\n\n    /**\n     * @function\n     * @description Submits the dialog form with the given action\n     * @param {String} The action which will be triggered upon form submit\n     */\n    submit: function (action) {\n        var $form = this.$container.find('form:first'),\n            data,\n            url;\n        // set the action\n        $('<input/>').attr({\n            name: action,\n            type: 'hidden'\n        }).appendTo($form);\n        // serialize the form and get the post url\n        data = $form.serialize();\n        url = $form.attr('action');\n        // make sure the server knows this is an ajax request\n        if (data.indexOf('ajax') === -1) {\n            data += '&format=ajax';\n        }\n        // post the data and replace current content with response content\n        $.ajax({\n            type: 'POST',\n            url: url,\n            data: data,\n            dataType: 'html',\n            success: function (html) {\n                this.$container.html(html);\n            }.bind(this),\n            failure: function () {\n                /*eslint-disable no-alert */\n                window.alert(Resources.SERVER_ERROR);\n                /*eslint-enable no-alert */\n            }\n        });\n    },\n    exists: function () {\n        return this.$container && (this.$container.length > 0);\n    },\n    isActive: function () {\n        return this.exists() && (this.$container.children.length > 0);\n    },\n    settings: {\n        autoOpen: false,\n        height: 'auto',\n        modal: true,\n        overlay: {\n            opacity: 0.75,\n            background: 'black'\n        },\n        resizable: false,\n        title: '',\n        width: '100%',\n        close: function () {\n            $(this).dialog('close');\n        },\n        position: {\n            my: 'center',\n            at: 'center',\n            of: window,\n            collision: 'flipfit'\n        }\n    }\n};\n\nwindow.dialog = dialog;\nmodule.exports = dialog;\n",
        "'use strict';\n\nvar initialized = false,\n    $document = $(document),\n    $html = $('html');\n\nfunction flyinheader() {\n\n    // MENU FLYIN\n    var openCloseFlyinHeader = function (open) {\n        if (open) {\n            $html.addClass('flyinheader-active');\n            $('.header-wrapper').css('position', '').addClass('menu-opened');\n            $('.header-content').css('position', 'unset');\n            $('.header-menu').css('position', 'unset');\n            $('.navigation').css('display', 'flex');\n            if(pageContext.ns == \"cart\" && $('.cart-table tr').length > 0){\n                $('.wrapper.pt_cart').css('overflow','unset');\n            }else{\n                $('.wrapper.pt_cart').css('overflow','hidden');\n            }\n        } else {\n            $html.removeClass('flyinheader-active');\n            $('.header-wrapper').css('position', '').removeClass('menu-opened');\n            $('.header-content').css('position', '');\n            $('.header-menu').css('position', '');\n            $('.navigation').css('display', '');\n            if(pageContext.ns == \"cart\" && $('.cart-table tr').length > 0){\n                $('.wrapper.pt_cart').css('overflow','unset');\n            }else{\n                $('.wrapper.pt_cart').css('overflow','hidden');\n            }\n        }\n    };\n\n    $(document).on('click', '.flyinheader-trigger,.flyinheader-close-trigger', function (e) {\n        openCloseFlyinHeader($(e.currentTarget).hasClass('flyinheader-trigger'));\n    });\n\n    window.matchMedia('(max-width: 1140px)').addListener(function (e) {\n        if (!e.matches && $html.hasClass('flyinheader-active')) {\n            openCloseFlyinHeader(false);\n        }\n    });\n\n    initialized = !initialized;\n\n}\n\nmodule.exports = {\n    init: function () {\n        //if (!initialized) {\n            flyinheader();\n        //}\n    }\n};",
        "// ACCORDION RADIO\nfunction initAccordionEvents() {\n    $(\".accordion-container label\").on('click', function() {\n        var thisContent =  $(this).siblings('.accordion-content');\n\n        $('.accordion-content').not(thisContent).hide();\n        $('.accordion-container').find('.header').not(this).removeClass('active');\n        thisContent.show();\n    });\n}\n\n// ACCORDION HEADER\nfunction initAccordionContentEvents() {\n    $(document).off('click', '.accordion-container .header').on('click', '.accordion-container .header', function() {\n        $('.social-buymoreless').find('span').removeClass('checked');\n        var thisContent = $(this).siblings('.accordion-content');\n\n        $('.accordion-container').find('.header').not(this).removeClass('active');\n        $('.accordion-content').not(thisContent).hide();\n        thisContent.toggle();\n        this.classList.toggle(\"active\");\n    });\n}\n\n// ACCORDION HEADER\nfunction initAccordionCollapsibleEvents() {\n    $(document).off('click', '.collapsible').on('click', '.collapsible', function() {\n        this.classList.toggle(\"active\");\n        var content = this.nextElementSibling;\n        if (content.style.maxHeight) {content.style.maxHeight = null;\n        } else {\n            content.style.maxHeight = content.scrollHeight + \"px\";\n        }\n    });\n}\n\n// TOGGLE MORE OR LESS\nfunction initMoreLessFunction() {\n    $('.moreless-button').click(function (e) {\n        e.preventDefault();\n        $('.moretext').toggle();\n        if ($(this).text() == \"Read Less\") {\n            $(this).text(\"Read More\");\n        } else {\n            $(this).text(\"Read Less\");\n        }\n    });\n}\n\n// TABS\nfunction initTabsEvents() {\n    jQuery('.xtabnav a').on('click', function (e) {\n        var currentAttrValue = jQuery(this).attr('href');\n        jQuery('.xtabs ' + currentAttrValue).show().siblings().hide();\n        jQuery(this).parent('div').addClass('active').siblings().removeClass('active');\n        e.preventDefault();\n    });\n}\n\n// SIZE GUIDE SWITCHING UNITS\nfunction initSwitchUnits() {\n    var inButton = document.getElementById('in-button');\n    var cmButton = document.getElementById('cm-button');\n\n    if (inButton) {\n        inButton.addEventListener('click', function() {\n            switchUnits('inches');\n        });\n    }\n\n    if (cmButton) {\n        cmButton.addEventListener('click', function() {\n            switchUnits('cm');\n        });\n    }\n\n    function switchUnits(unit) {\n        var sizeItems = document.querySelectorAll('.size-guide-item[data-inches]');\n\n        sizeItems.forEach(function(item) {\n            if (unit === 'inches') {\n                item.textContent = item.getAttribute('data-inches');\n            } else {\n                item.textContent = item.getAttribute('data-cm');\n            }\n        });\n\n        if (cmButton) {\n            cmButton.classList.toggle('active', unit === 'cm');\n        }\n        if (inButton) {\n            inButton.classList.toggle('active', unit === 'inches');\n        }\n    }\n\n    if (cmButton || inButton) {\n        switchUnits('cm');\n    }\n}\n\n// MODALS\nfunction initModalEvents() {\n    $(\".js-open-modal\").click(function(){\n        $(\".outer-box\").addClass(\"visible\");\n    });\n\n    $(\".outer-box\").click(function(){\n        $(\".outer-box\").removeClass(\"visible\");\n    });\n}\n\n// TOOLTIP\nfunction initToolTipEvents() {\n    $('[data-toggle=\"tooltip\"]').tooltip();\n    var i = 0;$('.tooltip').hover(function(){\n        $(this).find('.content').toggleClass('active');\n    });\n}\n\nfunction initAnchorLinkOverride() {\n    var anchorLinks = document.querySelectorAll('a[href^=\"#\"]');\n\n    for (var i = 0; i < anchorLinks.length; i++) {\n        anchorLinks[i].addEventListener(\"click\", function(e) {\n            e.preventDefault();\n\n            var targetId = this.getAttribute(\"href\").substring(1);\n            var targetElement = document.getElementById(targetId);\n\n            if (targetElement) {\n                var targetPosition = targetElement.getBoundingClientRect().top + window.pageYOffset;\n                \n                // If you have a fixed header, subtract its height here\n                var headerHeight = document.querySelector('.header-wrapper').offsetHeight;\n                var scrollPosition = targetPosition - headerHeight;\n\n                window.scrollTo({\n                    top: scrollPosition,\n                    behavior: \"smooth\"\n                });\n\n                history.pushState(null, null, \"#\" + targetId);\n            }\n        });\n    }\n}\n\n// ADD TO BAG STICKY ON MOBILE\nfunction initAddToBagSticky() {\n    if ($(window).width() < 768 && $('.button-wrapper-sticky').length > 0) {\n        var observer = new IntersectionObserver(function(entries) {\n            entries.forEach(function(entry) {\n                var hiddenDiv = $(entry.target).find('.button-wrapper');\n                var isAnyAddToCartVisible = isAnyElementInViewport(['.add-all-to-cart-social', '.add-set-items']);\n                hiddenDiv.toggleClass('sticky-buttons', !(entry.isIntersecting || isAnyAddToCartVisible));\n            });\n        });\n\n        function isAnyElementInViewport(selectors) {\n            return selectors.some(function(selector) {\n                var el = $(selector)[0];\n                if (!el) return false;\n                var rect = el.getBoundingClientRect();\n                return rect.top < window.innerHeight && rect.bottom > 0;\n            });\n        }\n\n        observer.observe(document.querySelector('.button-wrapper-sticky'));\n\n        $(window).on('scroll', function() {\n            var isAnyAddToCartVisible = isAnyElementInViewport(['.add-all-to-cart-social', '.add-set-items']);\n            var isButtonWrapperStickyVisible = isAnyElementInViewport(['.button-wrapper-sticky']);\n            $('.button-wrapper').toggleClass('sticky-buttons', !(isAnyAddToCartVisible || isButtonWrapperStickyVisible));\n        });\n    }\n}\n\n// ADD TO BAG STICKY ON MOBILE & TABLET\nfunction initAddToBagOrderConfirmationSticky() {\n    if ($(window).width() < 1024 && $('.product-bundling-container').length > 0) {\n        var observer = new IntersectionObserver(function(entries, observer) {\n            entries.forEach(function(entry) {\n                var $hiddenDiv = $(entry.target).find('.button-wrapper');\n                var $svg = $('<svg width=\"23\" height=\"24\" viewBox=\"0 0 23 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.35427 8.85378H8.36475M14.6462 15.1457H14.6567M15.6949 7.80513L7.30561 16.1944M8.56599 21.0191C8.90969 20.9736 9.25688 21.0669 9.53065 21.2777L10.7925 22.246C11.2095 22.5664 11.7898 22.5664 12.2057 22.246L13.5152 21.2405C13.7599 21.0529 14.0686 20.9702 14.3739 21.011L16.012 21.2265C16.5327 21.2953 17.0349 21.0051 17.2365 20.5192L17.8668 18.9952C17.9845 18.7098 18.2105 18.4838 18.4959 18.366L20.0198 17.7357C20.5057 17.5353 20.7958 17.032 20.7271 16.5112L20.5197 14.9324C20.4742 14.5887 20.5674 14.2415 20.7783 13.9677L21.7466 12.7058C22.0669 12.2887 22.0669 11.7084 21.7466 11.2925L20.741 9.98287C20.5535 9.73821 20.4708 9.42945 20.5116 9.12418L20.7271 7.486C20.7958 6.96517 20.5057 6.463 20.0198 6.26143L18.4959 5.63109C18.2105 5.51341 17.9845 5.28737 17.8668 5.00191L17.2365 3.47791C17.0361 2.99204 16.5327 2.70192 16.012 2.77066L14.3739 2.98621C14.0686 3.02816 13.7599 2.94543 13.5164 2.75901L12.2068 1.7535C11.7898 1.43308 11.2095 1.43308 10.7937 1.7535L9.48409 2.75901C9.23941 2.94543 8.93066 3.02816 8.62541 2.98855L6.98731 2.773C6.46652 2.70425 5.96438 2.99437 5.76282 3.48024L5.13367 5.00424C5.01484 5.28854 4.78881 5.51458 4.50453 5.63342L2.98061 6.26259C2.49477 6.46417 2.20467 6.96634 2.27341 7.48716L2.48895 9.12535C2.52856 9.43062 2.44584 9.73937 2.25943 9.98287L1.25397 11.2925C0.933573 11.7096 0.933573 12.2899 1.25397 12.7058L2.25943 14.0155C2.447 14.2601 2.52972 14.5689 2.48895 14.8741L2.27341 16.5123C2.20467 17.0332 2.49477 17.5353 2.98061 17.737L4.50453 18.3673C4.78998 18.485 5.016 18.7109 5.13367 18.9964L5.76398 20.5204C5.96438 21.0063 6.46769 21.2964 6.98847 21.2277L8.56599 21.0191ZM8.87859 8.85378C8.87859 9.14336 8.64384 9.37811 8.35427 9.37811C8.06469 9.37811 7.82994 9.14336 7.82994 8.85378C7.82994 8.56421 8.06469 8.32945 8.35427 8.32945C8.64384 8.32945 8.87859 8.56421 8.87859 8.85378ZM15.1705 15.1457C15.1705 15.4353 14.9357 15.6701 14.6462 15.6701C14.3567 15.6701 14.1219 15.4353 14.1219 15.1457C14.1219 14.8562 14.3567 14.6214 14.6462 14.6214C14.9357 14.6214 15.1705 14.8562 15.1705 15.1457Z\" stroke=\"black\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>');\n                var $chatButton = $('.embeddedServiceHelpButton .helpButton');\n\n                if (entry.isIntersecting) {\n                    // When the observed element enters the viewport\n                    $hiddenDiv.removeClass('sticky-buttons');\n                    var buttonText = $hiddenDiv.find('.js-add-set-items').val();\n                    $hiddenDiv.find('.js-add-set-items').text(buttonText).find('svg').remove();\n                    $chatButton.addClass('mb-0');\n                } else {\n                    // When the observed element leaves the viewport\n                    $hiddenDiv.addClass('sticky-buttons');\n                    $hiddenDiv.find('.js-add-set-items').text(Resources.ALSO_BUY_SAVE_MORE).append($svg);\n                    $chatButton.removeClass('mb-0');\n                }\n            });\n        });\n\n        // Define the element you want to observe\n        var elementToObserve = document.querySelector('.product-bundling-container');\n\n        // Start observing that element\n        observer.observe(elementToObserve);\n    }\n}\n\n// Function to scroll to the top of the page and handle the back button issue\nfunction initPDPStartFromTop() {\n    if (window.pageContext.ns === \"product\") {\n      // Function to scroll to the top of the page\n      function scrollToTop() {\n        window.scrollTo(0, 0);\n      }\n      // Scroll to top on initial page load\n      scrollToTop();\n      // Scroll to top when navigating back using the browser's back button\n      window.addEventListener('popstate', scrollToTop);\n      // Disable scroll restoration, which interferes with our manual scrolling behavior\n      if ('scrollRestoration' in history) {\n        history.scrollRestoration = 'manual';\n      }\n    }\n}\n\n// Show HTML content only on desktop\nfunction MobileOnlyHTML() {\n    var isDesktop = window.innerWidth >= 768; // Adjust the width as needed for desktop\n    var elementsToRemove = document.getElementsByClassName(\"mobile-only-html\");\n    // Iterate through the array and remove or show each element based on screen size\n    for (var i = elementsToRemove.length - 1; i >= 0; i--) {\n        var element = elementsToRemove[i];\n        if (isDesktop) {\n          element.parentNode.removeChild(element);\n        }\n    }\n}\n\n// Show HTML content only on desktop\nfunction DesktopOnlyHTML() {\n    var isMobile = window.innerWidth <= 767; // Adjust the width as needed for mobile\n    var elementsToRemove = document.getElementsByClassName(\"desktop-only-html\");\n    // Iterate through the array and remove or show each element based on screen size\n    for (var i = elementsToRemove.length - 1; i >= 0; i--) {\n        var element = elementsToRemove[i];\n        if (isMobile) {\n          element.parentNode.removeChild(element);\n        }\n    }\n}\n\n// SLICKJS\nfunction initSlickJSEvents() {\n    $(\".social-ebc-slider\").not('.slick-initialized').slick({\n        dots: true,\n        autoplay: true,\n        autoplaySpeed: 5000,\n        arrows: false,\n        slidesToShow: 1,\n        slidesToScroll: 1\n    });\n\n    $(\".af\").not('.slick-initialized').slick({\n        dots: true,\n        autoplay: true,\n        autoplaySpeed: 5000,\n        fade: true,\n        slidesToShow: 1,\n        slidesToScroll: 1\n    });\n\n    $(\".sitewide\").not('.slick-initialized').slick({\n        autoplay: true,\n        arrows: false,\n        fade: true,\n        slidesToShow: 1,\n        slidesToScroll: 1\n    });\n\n    $(\".sitewideebc\").not('.slick-initialized').slick({\n        arrows: false,\n        autoplay: true,\n        autoplaySpeed: 5000,\n        slidesToShow: 1,\n        slidesToScroll: 1\n    });\n\n    $(\".vertical-slider\").not('.slick-initialized').slick({\n        arrows: false,\n        dots: false,\n        autoplay: true,\n        autoplaySpeed: 3000,\n        slidesToShow: 1,\n        slidesToScroll: 1,\n        vertical: true\n    });\n\n    $('.contentslider').not('.slick-initialized').each(function(){\n        var $this = $(this);\n        var slickOptions = $this.data('slick') || {};\n\n        // Extend default options with additional settings\n        $.extend(slickOptions, {\n            touchThreshold: 50,\n            responsive: [\n                {\n                    breakpoint: 768,\n                    settings: {\n                        slidesToShow: 1,\n                        slidesToScroll: 1\n                    }\n                }\n            ]\n        });\n\n        $this.slick(slickOptions);\n    });\n\n    $('.legacypdpimages').slick({\n        slidesToShow: 1,\n        slidesToScroll: 1,\n        dots: true,\n        mobileFirst: true,\n        responsive: [\n              {\n                breakpoint: 768,\n                settings: 'unslick'\n              }\n        ]\n      });\n}\n\n// CONTENT COUNTDOWN TIMER\nfunction initContentCountDown() {\n    function updateCountdown(t) {\n        function e(t, e) {\n          t.innerHTML = e;\n        }\n        function r() {\n          var r = new Date(),\n            a =\n              new Date(\n                t.getAttribute(\"data-year\"),\n                t.getAttribute(\"data-month\") - 1,\n                t.getAttribute(\"data-day\"),\n                t.getAttribute(\"data-hour\"),\n                t.getAttribute(\"data-minute\"),\n                t.getAttribute(\"data-second\")\n              ) - r;\n            if (a <= 0) {\n                clearInterval(o);\n                if (t.classList.contains(\"dotd-countdown\") && t.classList.contains(\"countdown\")) {\n                    t.classList.add(\"hidden\"); // Add hidden class if both dotd-countdown and countdown classes exist\n                }\n            } else {\n            var n = Math.floor(a / 1e3),\n              l = Math.floor(n / 60),\n              u = Math.floor(l / 60),\n              c = Math.floor(u / 24);\n            (n %= 60),\n              (l %= 60),\n              (u %= 24),\n              0 === c && 0 === u && l <= 59\n                ? t.classList.add(\"last\")\n                : t.classList.remove(\"last\");\n            var d = Math.floor((24 * c + u) / 10),\n              s = (24 * c + u) % 10,\n              i = Math.floor(l / 10),\n              f = l % 10,\n              h = Math.floor(n / 10),\n              y = n % 10;\n            e(t.querySelector(\".hrs1\"), d),\n              e(t.querySelector(\".hrs2\"), s),\n              e(t.querySelector(\".min1\"), i),\n              e(t.querySelector(\".min2\"), f),\n              e(t.querySelector(\".sec1\"), h),\n              e(t.querySelector(\".sec2\"), y);\n          }\n        }\n        r();\n        var o = setInterval(r, 1e3);\n    }\n    var countdownElements = document.querySelectorAll(\".countdown\");\n    countdownElements.forEach(updateCountdown);\n}\n\nvar globalcontentutils = {\n    init: function () {\n        initAccordionEvents();\n        initAccordionContentEvents();\n        initAccordionCollapsibleEvents();\n        initMoreLessFunction();\n        initTabsEvents();\n        initModalEvents();\n        initToolTipEvents();\n        initAddToBagSticky();\n        initAddToBagOrderConfirmationSticky();\n        MobileOnlyHTML();\n        DesktopOnlyHTML();\n        initSlickJSEvents();\n        initSwitchUnits();\n        initContentCountDown();\n        initAnchorLinkOverride();\n    \n        window.addEventListener('load', initPDPStartFromTop);\n    }\n}\n\nwindow.globalcontentutils = globalcontentutils;\nmodule.exports = globalcontentutils;",
        "'use strict';\n\nfunction init() {\n    var userStatus = $('#userStatus').val() === 'true' ? 'Registered user' : 'Guest user';\n    /**\n     * Event listener for GTM dataLayer when an item is added to the cart. The event listener is listening for event triggered from '#add-to-cart'\n     */\n    $(document).on('click', '#add-to-cart, .js-tile-addtocart', function () {\n        try {\n            var $parents = $(this).parents('.gtmListener');\n            var gtmData = $parents.data(\"gtm\");\n            var quantity = $parents.find('#Quantity').val() || '';\n            /*eslint-disable no-undef */\n            window.dataLayer.push({\n                'event': 'addToCart',\n                'ecommerce': {\n                    'currencyCode': '' + gtmData.currency,\n                    'add': { // 'add' actionFieldObject measures.\n                        'products': [{ //  adding a product to a shopping cart.\n                            'name': '' + gtmData.name,\n                            'id': '' + gtmData.id,\n                            'price': '' + gtmData.price,\n                            'brand': '' + gtmData.brand,\n                            'category': '' + gtmData.category,\n                            'google_business_vertical': \"retail\",\n                            'variant': '' + gtmData.variant,\n                            'quantity': parseInt(quantity),\n                            'metric1': parseFloat(gtmData.price * parseInt(quantity)).toFixed(2),\n                            'uniqueEventId':gtmData.uniqueEventId\n                        }]\n                    }\n                }\n            });\n            /*eslint-enable no-undef */\n        } catch (b) {\n           // console.log(b);\n        }\n    });\n\n    $(document).on('click', '.bid-now, .pdp-bid-now, .bid-now-increase, .login-bid-now', function () {\n        try {\n            var gtmData = $(this).attr(\"data-gtmuserinfo\");\n            /*eslint-disable no-undef */\n            window.dataLayer.push({\n                'event': 'raBidNow',\n                'ecommerce': {\n                    'customerId': '' + JSON.parse(gtmData).userId,\n                    'bidNow': { // 'add' actionFieldObject measures.\n                        'items': [{ //  adding a product to a shopping cart.\n                            'item_name': '' + JSON.parse(gtmData).name,\n                            'item_id': '' + JSON.parse(gtmData).id,\n                            'item_brand': '' + JSON.parse(gtmData).brand,\n                            'category': '' + JSON.parse(gtmData).category\n                        }]\n                    }\n                }\n            });\n            /*eslint-enable no-undef */\n        } catch (b) {\n            //console.log(b);\n        }\n    });\n\n    /**\n     * Pushing given data from gtmData object to dataLayer when a product is removed from the cart.\n     * @param {Object} gtmData - Collected data from the product that has been removed.\n     */\n    function pushInfoToDataLayer(gtmData) {\n        try {\n            /*eslint-disable no-undef */\n            window.dataLayer.push({\n                'event': 'removeFromCart',\n                'ecommerce': {\n                    'remove': { // 'remove' actionFieldObject measures.\n                        'products': [{ //  removing a product to a shopping cart.\n                            'name': '' + gtmData.name,\n                            'id': '' + gtmData.id,\n                            'price': '' + gtmData.price,\n                            'brand': '' + gtmData.brand,\n                            'category': '' + gtmData.category,\n                            'variant': '' + gtmData.variant,\n                            'quantity': parseInt(gtmData.quantity)\n                        }]\n                    }\n                }\n            });\n            /*eslint-enable no-undef */\n        } catch (b) {\n            //console.log(b);\n        }\n    }\n\n    /**\n     * Event for GTM dataLayer when an item is removed from the cart. The event listener is listening for event triggered from '.button-remove-item'.\n     */\n    $(document).on('click', '.button-remove-item', function () {\n        try {\n            var $parents = $(this).parents('.cart-row');\n            var gtmData = $parents.data(\"gtm\");\n            /*eslint-disable no-undef */\n            window.dataLayer.push({\n                'event': 'removeFromCart',\n                'ecommerce': {\n                    'remove': { // 'remove' actionFieldObject measures.\n                        'products': [{ //  removing a product to a shopping cart.\n                            'name': '' + gtmData.name,\n                            'id': '' + gtmData.id,\n                            'price': '' + gtmData.price,\n                            'brand': '' + gtmData.brand,\n                            'category': '' + gtmData.category,\n                            'variant': '' + gtmData.variant,\n                            'quantity': parseInt(gtmData.quantity),\n                            'metric1': '-'+parseFloat(gtmData.price * parseInt(gtmData.quantity)).toFixed(2)\n                        }]\n                    }\n                }\n            });\n            /*eslint-enable no-undef */\n        } catch (b) {\n           // console.log(b);\n        }\n    });\n\n    $(document).on('click', '.mini-cart-item-remove-button', function () {\n        var gtmData = $(this).parents('.mini-cart-product').data(\"gtm\");\n        pushInfoToDataLayer(gtmData); // it is already in it. Check\n    });\n\n    /**\n     * Event for GTM dataLayer when an item has been clicked. The event listener is listening when a 'Quickview' button is clicked or the grid of the product.\n     */\n    $(document).on('click', '.product-link, .product-details-button, .quickview ', function () {\n        try {\n            var gtmData = $(this).parents('.grid-tile').data(\"gtm\");\n            /*eslint-disable no-undef */\n            if (gtmData) {\n                window.dataLayer.push({\n                    'event': 'productClick',\n                    'ecommerce': {\n                        'click': {\n                            'actionField': {\n                                'list': 'Search Results'\n                            }, // Optional list property.\n                            'products': [{\n                                'name': gtmData.name, // Name or ID is required.\n                                'id': gtmData.id,\n                                'price': gtmData.price,\n                                'brand': gtmData.brand,\n                                'category': gtmData.category,\n                                'variant': gtmData.variant,\n                                'position': gtmData.position\n                            }]\n                        }\n                    },\n                    'eventCallback': function () {\n                        //document.location = gtmData.attr('href');\n                    }\n                });\n            }\n            /*eslint-enable no-undef */\n        } catch (b) {\n            //console.log(b);\n        }\n    });\n\n    $(document).on('pdp:recommendationsLoaded', function () {\n        try {\n            var recommendedProductsInfo = Array.from($('.gtm-info')).map(function (el) {\n                return JSON.parse(el.value);\n            });\n\n            dataLayer.push({\n                \"ecommerce\": {\n                  \"impressions\": recommendedProductsInfo,\n                },\n            });\n            /*eslint-enable no-undef */\n        } catch (b) {\n            //console.log(b);\n        }\n    });\n\n    /** Checkout: User signUp fails FaceBook | Gmail | Sites */\n    $(document).off('user:SignUpFails').on('user:SignUpFails', function () {\n        try {\n            window.dataLayer.push({\n                'event': 'user-signUp-fail',\n                'method': 'site',\n                'validation-error': $('.email-fileds .error-msg').text().trim()\n            })\n        } catch (b) {\n            //console.log(b);\n        }\n    });\n\n    /**Checkout: Get Promotion code on checkout page */\n    $(document).off('checkout:promoCodeError').on('checkout:promoCodeError', function () {\n        try {\n            window.dataLayer.push({\n                'event': 'checkoutError',\n                'ecommerce': {\n                    'errorText': 'Coupon Error',\n                    'errorMessage': $('.coupon-error-gtm').text().trim(),\n                    'userStatus': userStatus\n                }\n            });\n        } catch (b) {\n           // console.log(b);\n        }\n    });\n\n    /**Checkout: Get Address error on checkout page */\n    $(document).off('checkout:addressError').on('checkout:addressError', function () {\n        try {\n            window.dataLayer.push({\n                'event': 'checkoutError',\n                'ecommerce': {\n                    'errorText': 'address error',\n                    'errorMessage': $(document).find('.type-own-address').text().trim(),\n                    'userStatus': userStatus\n                }\n            });\n        } catch (b) {\n           // console.log(b);\n        }\n    });\n\n    /* Checkout: Add new address */\n    $(document).off('click', '.opcdelivery-addresses .address-create').on('click', '.opcdelivery-addresses .address-create', function () {\n        getCTA_Text('checkout_CTA', $(this).text(), userStatus);\n    });\n\n    /* Checkout: Make defualt address */\n    $(document).off('click', '.buttonlinks.delivery-address .address-make-default').on('click', '.buttonlinks.delivery-address .address-make-default', function () {\n        getCTA_Text('checkout_CTA', $(this).text(), userStatus);\n    });\n\n    /* Checkout: Add new address */\n    $(document).off('click', '.opcDeliveryAddress #addressmodelbox').on('click', '.opcDeliveryAddress #addressmodelbox', function () {\n        getCTA_Text('checkout_CTA', $(this).text(), userStatus);\n    });\n\n    /* Checkout: Delivery Options */\n    $(document).off('checkout:deliveryOption').on('checkout:deliveryOption', function () {\n        var deliveryOption = $('#cart-shippingmethod-form span.checked').closest('.radio');\n        var deliveryOptionName = $(deliveryOption).find('+ label').text();\n        getCTA_Text('checkout_CTA', deliveryOptionName, userStatus);\n    });\n\n    /* Checkout: Payment method Options */\n    $(document).off('checkout:paymentOption').on('checkout:paymentOption', function () {\n        var paymentOption = $('.payment-method-wrapper .payment-method span.checked').closest('.radio');\n        var paymentOptionName = $(paymentOption).find('+ label').text();\n        getCTA_Text('checkout_CTA', paymentOptionName, userStatus);\n    });\n\n    /* Checkout: Place order */\n    $(document).off('click', 'form.xlt-continueCheckout button.xlt-continueCheckout').on('click', 'form.xlt-continueCheckout button.xlt-continueCheckout', function () {\n        getCTA_Text('checkout_CTA', $(this).text(), userStatus);\n    });\n\n    /* Checkout: Enter address manually */\n    $(document).off('click', '.type-address-btn button').on('click', '.type-address-btn button', function () {\n        getCTA_Text('checkout_CTA', $(this).text(), userStatus);\n    });\n\n    /* Login: Connect your TV account */\n    $(document).off('ConnectTVaccount').on('ConnectTVaccount', function () {\n        getCTA_Text('loginCTA', 'Connect your TV account', userStatus);\n    });\n\n\n    try {\n        /**TW-2602: Forgot Password button Clicks Count*/\n        if ($('form#PinResetForm').length && !$('form#PinResetForm').find('.notfounderror').length) {\n            window.dataLayer.push({\n                'event': 'Forgot Password',\n                'userStatus': userStatus,\n                'ecommerce': {\n                    'ForgotPasswordCTA': 'Forgot Password / PIN?'\n                }\n            });\n        }\n\n        /**Forgot Password error*/\n        if ($('form#PinResetForm').length && $('form#PinResetForm').find('.notfounderror').length) {\n            window.dataLayer.push({\n                'event': 'Forgot Password',\n                'subevent': 'user-signin-Forgotpassword-fail',\n                'validation-error': 'Thanks for submitting your email address. Weve sent you an email with the information needed to reset your password. The email might take a couple of minutes to reach your account. Please check your junk mail to ensure you receive it. If you do not receive the message please check your email and try again.'\n            });\n        }\n\n        /**Forgot Password sucess*/\n        if ($('form#PinResetConfirmForm').length) {\n            window.dataLayer.push({\n                'event': 'Forgot Password',\n                'subevent': 'user-signin-Forgotpassword-sucess',\n                'validation-Message': \"Thanks for submitting your email address. We've sent you an email with the link to reset your password.\"\n            });\n        }\n\n        /**tvconnected*/\n        if ($('#tvconnected').length) {\n            window.dataLayer.push({\n                'event': 'user-signin-tv-account-success',\n                'method': 'onsite',\n                'user-id': getCookie('sfcc_customerID')\n            });\n        }\n\n    } catch (b) {\n        //console.log(b);\n    }\n\n    /**Get URL 'registration' parameter value on page load */\n    if(getURLParaValue('registration')) {\n        window.dataLayer.push({\n            'event': 'user-signup-success',\n            'method': 'onsite',\n            'user-id': getCookie('sfcc_customerID')\n        });\n    }\n\n    /**Get 'isGuestUser' parameter value on page load */\n    if(getURLParaValue('isGuestUser')) {\n        window.dataLayer.push({\n            'event': 'GuestUserCTA',\n            'userStatus': 'Guest User'\n        });\n    }\n\n    /**Find SSO login Facebook, Google */\n    if (getCookie('ssloginsource') !='') {\n        var ssloginStatus = getCookie('ssloginStatus');\n        var ssSignUpFailure = getCookie('ssSignUpFailure');\n        var ssSignUpCreated = getCookie('ssSignUpCreated');\n        //Normal login from site\n        if(ssloginStatus == \"true\") {\n            window.dataLayer.push({\n                'event': 'user-signIn-success',\n                'method': getCookie('ssloginsource'),\n                'user-id': getCookie('sfcc_customerID')\n            });\n        } else if(ssSignUpFailure == \"true\") {\n            window.dataLayer.push({\n                'event': 'user-signup-fail',\n                'method': getCookie('ssloginsource'),\n                'validation-error': $('.login-oauth').find('.error-form').text()\n            });\n        } else if(ssSignUpCreated == \"true\") { // No exist account in ams or sfcc SSO gmail, FB\n            window.dataLayer.push({\n                'event': 'user-signup-success',\n                'method': getCookie('ssloginsource'),\n                'user-id': getCookie('sfcc_customerID')\n            });\n        }\n        document.cookie = \"ssloginsource=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;\";\n        document.cookie = \"ssloginStatus=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;\";\n        document.cookie = \"ssSignUpFailure=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;\";\n        document.cookie = \"ssSignUpCreated=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;\";\n    }\n\n    /**Find onsite signup*/\n    if (getCookie('sfcclogin') !='') {\n        if (!$('.login-oauth').length) {\n            window.dataLayer.push({\n                'event': 'user-signin-success',\n                'method': getCookie('sfcclogin'),\n                'user-id': getCookie('sfcc_customerID')\n            });\n            document.cookie = \"sfcclogin=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;\";\n        } else {\n            window.dataLayer.push({\n                'event': 'user-signup-fail',\n                'method': getCookie('sfcclogin'),\n                'validation-error': $('.login-oauth').find('.error-form').text()\n            });\n            document.cookie = \"sfcclogin=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;\";\n        }\n    }\n\n    /**Cart: View item */\n    $(document).off('pdp:viewPdp').on('pdp:viewPdp',function(){\n        try {\n            var data = $(\"#gtm4-view-item\").data('gtm4');\n            if(data){\n                window.dataLayer.push({\n                    'event': 'view_item',\n                    'ecommerce':{\n                        items:[\n                            data\n                        ]\n                    }\n                });\n\n                _etmc.push([\"setUserInfo\", {\n                    \"email\": data.customerEmail,\n                    \"details\": {\n                        \"Gender\": \"\",\n                        \"Age\": \"\",\n                        \"Name\": data.customerName\n                    }\n                }]);\n                _etmc.push([\"trackPageView\", { \"item\": data.item_id }]);\n                var data = $(\"#facebookViewContentEvent\").data(\"request-data\");\n\n                if (data.facebookViewContentEventRequestData) {\n                    var requestData = data.facebookViewContentEventRequestData.requestData;\n                    $.ajax({\n                        url: Urls.facebookViewContentEvent + \"?requestData=\" + JSON.stringify(requestData),\n                        type: 'POST',\n                        success: function () {\n                        },\n                        error: function () {\n                        }\n                    });\n                }\n            } \n        } catch (b) {\n            //console.log(b);\n        }\n    })\n\n    /* Checkout: Payment method Options */\n    $(document).off('wishlist:onVisit').on('wishlist:onVisit', function () {\n        try {\n            var items = [];\n            var wishlistProductID = [];\n            var value = 0;\n            $('.wishilist-gtm4-row').each(function() {\n                var item = $(this).data('gtm4');\n                value+=item.price  ? new Number(item.price) : 0;\n                  items.push(item);\n                wishlistProductID.push(item.item_id);\n            });\n            window.dataLayer.push(\n                {\n                  \"event\": \"view_wishlist\",\n                  \"ecommerce\": {\n                    \"currency\": \"GBP\",\n                    \"Wishlist_total_value\":value.toFixed(2),\n                    \"items\": items\n                  }\n                }\n            );\n\n            _etmc.push([\"trackWishlist\", {\n                \"items\": wishlistProductID\n            }]);\n\n        } catch (b) {\n           // console.log(b);\n        }\n    });\n}\n\nfunction getCTA_Text(eventName, CTA_Text, userStatus) {\n    try {\n        window.dataLayer.push({\n            'event': eventName,\n            'ecommerce': {\n                'CTA': CTA_Text.trim(),\n                'userStatus': userStatus\n            }\n        });\n    } catch (b) {\n        //console.log(b);\n    }\n}\n\n/** Get Parameter value from URL */\nfunction getURLParaValue(paraValue) {\n    try {\n        var url_string = window.location.href;\n        var url = new URL(url_string);\n        return url.searchParams.get(paraValue);\n    } catch (error) {\n        //console.log(error)\n    }\n}\n\n/** Get cookie name */\nfunction getCookie(cname) {\n    try {\n        var name = cname + \"=\";\n        var ca = document.cookie.split(';');\n        for (var i = 0; i < ca.length; i++) {\n            var c = ca[i];\n            while (c.charAt(0) == ' ') {\n                c = c.substring(1);\n            }\n            if (c.indexOf(name) == 0) {\n                return c.substring(name.length, c.length);\n            }\n        }\n        return \"\";\n    } catch (error) {\n        //console.log(error);\n    }\n}\n\n/**\n * Function for pushing data into dataLayer. The function is called in index.js which is used in PDP decorator.\n */\nfunction pushDataToDataLayerForPDP() {\n    try {\n        var gtmData = $('.gtmListener').data('gtm');\n        /*eslint-disable no-undef */\n        window.dataLayer.push({\n            'ecommerce': {\n                'impressions' : [],\n                'detail': {\n                    'actionField': {\n                        'list': gtmData.category\n                    }, // 'detail' actions have an optional list property.\n                    'products': [{\n                        'name': gtmData.name, // Name or ID is required.\n                        'id': gtmData.id,\n                        'price': gtmData.price,\n                        'brand': gtmData.brand,\n                        'category': gtmData.category,\n                        'variant': gtmData.variant,\n                    }]\n                }\n            }\n            /*eslint-enable no-undef */\n        });\n    } catch (b) {\n       // console.log(b);\n    }\n}\n\nfunction pushBundleDataToDataLayer() {\n    try {\n        var $productSetContainer = $('.product-bundling-container');\n        var $productSetItems = $productSetContainer.find('input[name=\"itemSelected\"]:checked').closest('.product-set-item');\n\n        if ($productSetContainer.hasClass('horizontal')) {\n            if ($(document).width() >= 1280) {\n                $productSetItems = $('.container-desktop').find('input[name=\"itemSelected\"]:checked').closest('.product-set-item');\n\n            } else {\n                $productSetItems = $('.container-mobile').find('input[name=\"itemSelected\"]:checked').closest('.product-set-item');\n            }\n        }\n\n        var itemsData = [];\n        var currency;\n\n        $productSetItems.each(function(){\n            var gtmData = $(this).data('gtm');\n            itemsData.push({\n                //  adding a product to a shopping cart.\n                'name': '' + gtmData.name,\n                'id': '' + gtmData.id,\n                'productSetID' : '' + gtmData.productSetID,\n                'page': gtmData.page,\n                'price': '' + gtmData.price,\n                'brand': '' + gtmData.brand,\n                'category': '' + gtmData.category,\n                'google_business_vertical': \"retail\",\n                'variant': '' + gtmData.variant,\n                'quantity': 1,\n                'uniqueEventId':gtmData.uniqueEventId\n            })\n            currency = gtmData.currency;\n        });\n        \n        window.dataLayer.push({\n            'event': 'addToCart',\n            'ecommerce': {\n                'currencyCode': currency,\n                'add': { // 'add' actionFieldObject measures.\n                    'products': itemsData\n                }\n            }\n        });\n    } catch (b) {\n    }\n}\n\n/**\n * Function for pushing data into dataLayer. The function is called in index.js which is used in PLP decorator.\n */\nfunction splitToChunks(array, parts) {\n    var result = [];\n    for (var i = parts; i > 0; i--) {\n        result.push(array.splice(0, Math.ceil(array.length / i)));\n    }\n    return result;\n}\nvar dataListMst = [];\nfunction pushDataToDataLayerForPLP() {\n    var googleTagManagerID = document.getElementById('gtm_id').dataset.gtm;\n\n    var tiles = $('.grid-tile');\n    var currency = '';\n    if (tiles.length > 0) {\n        var infoObject = JSON.parse(tiles[0].getAttribute('data-gtm'));\n        if (infoObject) {\n            currency = infoObject.currency;\n        }\n    }\n\n    var dataList = [];\n    var splitLimit = 40;\n    if(tiles.length>=splitLimit){\n        var splitLength = parseInt(tiles.length/splitLimit);\n        var splitTiles = splitToChunks(tiles, splitLength);\n        $.each(splitTiles, function(index, value){\n            //delete window.dataLayer.ecommerce;\n            var products = [];\n            for (var i = 0; i < value.length; i++) {\n                var filteredInfo = JSON.parse(value[i].getAttribute('data-gtm'));\n                if((undefined != $(value[i]).find('.price-standard')[0])){\n                    var salesPrice = $(value[i]).find('.price-sales')[0].innerHTML;\n                    var standardPrice = $(value[i]).find('.price-standard')[0].innerHTML;\n                    salesPrice = salesPrice.substring(1);\n                    standardPrice = standardPrice.substring(1);\n                    filteredInfo.discount = (parseFloat(standardPrice) - parseFloat(salesPrice)).toFixed(2).toString();\n                }\n                var promotion_one = $(value[i]).find('.pdp-promotional-save-after')[0];\n                var promotion_two = $(value[i]).find('.promotional-message')[0];\n                if((undefined != promotion_one) || (undefined != promotion_two)){\n                    filteredInfo.coupon = ((undefined != promotion_one) && (promotion_one.innerHTML).trim().length > 0) ? (promotion_one.innerHTML).trim() : (promotion_two.innerHTML).trim();\n                }\n                filteredInfo.item_category_name = $('#gtm_viewed_category').data('category_name');\n                filteredInfo.item_macro_category_name = $('#gtm_viewed_category').data('macro_category_name');\n                filteredInfo.item_micro_category_name = $('#gtm_viewed_category').data('micro_category_name');\n                delete filteredInfo.currency;\n                products.push(filteredInfo);\n            }\n            /*eslint-disable no-undef */\n            dataList.push({\n                    'items': products\n            });\n            /*eslint-enable no-undef */\n            //sendDataToGTM(window,document,'script','dataLayer',googleTagManagerID);\n        });\n        $.each(dataList,function(index,value){\n            window.dataLayer.push({\n                'event': \"view_item_list\",\n                'ecommerce': value\n            });\n            //console.log(dataLayer);\n        });\n    }else{\n        var products = [];\n        for (var i = 0; i < tiles.length; i++) {\n                var filteredInfo = JSON.parse(tiles[i].getAttribute('data-gtm'));\n            if (filteredInfo != null && filteredInfo != undefined) {\n                if(undefined != $(tiles[i]).find('.price-standard')[0]){\n                    var salesPrice = $(tiles[i]).find('.price-sales')[0].innerHTML;\n                    var standardPrice = $(tiles[i]).find('.price-standard')[0].innerHTML;\n                    salesPrice = salesPrice.substring(1);\n                    standardPrice = standardPrice.substring(1);\n                    filteredInfo.discount = (parseFloat(standardPrice) - parseFloat(salesPrice)).toFixed(2).toString();\n                }\n                var promotion_one = $(tiles[i]).find('.pdp-promotional-save-after')[0];\n                var promotion_two = $(tiles[i]).find('.promotional-message')[0];\n                if((undefined != promotion_one) || (undefined != promotion_two)){\n                    filteredInfo.coupon = ((undefined != promotion_one) && (promotion_one.innerHTML).trim().length > 0) ? (promotion_one.innerHTML).trim() : (promotion_two.innerHTML).trim();\n                }\n                filteredInfo.item_category_name = $('#gtm_viewed_category').data('category_name');\n                filteredInfo.item_macro_category_name = $('#gtm_viewed_category').data('macro_category_name');\n                filteredInfo.item_micro_category_name = $('#gtm_viewed_category').data('micro_category_name');\n                if (filteredInfo != null && filteredInfo != undefined && filteredInfo !='') {\n                    delete filteredInfo.currency;\n                    products.push(filteredInfo);\n                }\n            }\n        }\n        /*eslint-disable no-undef */\n        dataList.push({\n                'items': products\n        });\n        /*eslint-enable no-undef */\n        $.each(dataList,function(index,value){\n            window.dataLayer.push({\n                'event': \"view_item_list\",\n                'ecommerce': value\n            });\n            //console.log(dataLayer);\n        });\n    }\n    if (_etmc) {\n        _etmc.push([\"trackPageView\", {\n            \"category\" : dataList[0].items[0].categoryID\n        }]);\n    }\n}\n\n//sends data to the gtm after each step is pushed to the datalayer\nfunction sendDataToGTM(w,d,s,l,i) {\n w[l] = w[l] || [];\n w[l].push({\n     'gtm.start': new Date().getTime(),\n     event:'gtm.js'\n });\n var f = d.getElementsByTagName(s)[0],\n j = d.createElement(s),\n dl = l !== 'dataLayer' ? '&l=' + l : '';\n j.async = true;\n j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;\n f.parentNode.insertBefore(j,f);\n}\n\n\nfunction pushDataFromPurchase() {\n    try {\n        var $gtmDataHolder = $('#gtmDataHolder');\n        var purchase = $gtmDataHolder.data('gtmpurchase');\n        var products = $gtmDataHolder.data('gtmproducts');\n        var purchase_ga4 = $gtmDataHolder.data('gtmpurchase1');\n        var products_ga4 = $gtmDataHolder.data('gtmproducts1');\n        var orderCategory = $gtmDataHolder.data('gtmordercategory');\n        var googleTagManagerID = document.getElementById('gtm_id').dataset.gtm;\n\n        /*eslint-disable no-undef */\n        window.dataLayer.push({\n            'event':'purchase',\n            'value':''+purchase.revenue,\n            'ecommerce': {\n                'purchase': {\n                    'actionField': purchase,\n                    'products': products\n                }\n            }\n        });\n        window.dataLayer.push({\n            'event':'purchase_GA4',\n            'ecommerce': {\n                'purchase': {\n                    'order': purchase_ga4,\n                    'items': products_ga4\n                }\n            }\n        });\n        try {\n            var itemsData = [];\n            var product_data = products_ga4;\n            var order_number = purchase_ga4.transaction_id;\n            for(var i=0 ; i < product_data.length ; i++){\n                itemsData.push({\n                    \"item\": product_data[i].item_id,\n                    \"quantity\": product_data[i].quantity,\n                    \"price\": product_data[i].price,\n                    \"unique_id\": product_data[i].item_id\n                });\n            }\n            _etmc.push([\"trackConversion\", {\"cart\": itemsData, \"order_number\": order_number}]);\n        } catch (b) {\n           // console.log(b);\n        }\n        sendDataToGTM(window,document,'script','dataLayer',googleTagManagerID);\n        /*eslint-enable no-undef */\n\n        /*AWIN*/\n        pushToAWINDataLayer(googleTagManagerID, purchase, products, orderCategory);\n        /*AWIN*/\n\n    } catch (b) {\n       // console.log(b);\n    }\n}\n\nfunction pushToAWINDataLayer(googleTagManagerID, purchase, products, orderCategory){\n    try {\n        var productCoupons = (purchase.coupon)?purchase.coupon+\",\":\"\";\n        $(products).each(function(index, value){\n            if(value.coupon){\n                productCoupons += value.coupon;\n                if(index+1 < products.length && productCoupons != \"\"){\n                    productCoupons += \",\";\n                }\n            }\n        });\n        window.dataLayer.push({\n            'transactionTotal':''+purchase.revenue,\n            'transactionCurrency':'GBP',\n            'transactionID':''+purchase.id,\n            'transactionParts':orderCategory+':'+purchase.revenue,\n            'transactionPromoCode':''+productCoupons,\n            'transactionProducts': products,\n            'transactionCustomerGroup': orderCategory\n        });\n        window.dataLayer[0].transactionProducts = products;\n        sendDataToGTM(window,document,'script','dataLayer',googleTagManagerID);\n    } catch (b) {\n        //console.log(b);\n    }\n}\n\n// used primarily in the checkout to send each stage of checkout to gtm\n// JSON is rendered in gtm_chekcout.isml\nfunction pushCheckoutStepToDataLayer (JSON) {\n    var googleTagManagerID = document.getElementById('gtm_id').dataset.gtm;\n    /*eslint-disable no-undef */\n    window.dataLayer.push(JSON);\n    sendDataToGTM(window,document,'script','dataLayer',googleTagManagerID);\n}\n\n// grabs and parses the json data to pass into the gtm\nfunction getGTMData () {\n    var gtmJSON = document.getElementById('gtm_checkout').dataset.gtm;\n    var eventCallback = document.getElementById('gtm_eventCallback').dataset.eventcallback;\n    // we can't pass double quotes into a data variable\n    gtmJSON = gtmJSON.replace(/'/g,'\"');\n    gtmJSON = JSON.parse(gtmJSON);\n    // we cannot store functions in json, so convert the callback function accordingly\n    if (eventCallback !== '') {\n        gtmJSON.ecommerce.eventCallback = function () {\n            document.location = eventCallback;\n        };\n    }\n    return gtmJSON;\n}\n\n// only available on the final step of the checkout process\nfunction getPayNowGTMData () {\n    var gtmJSON = document.getElementById('gtm_checkout-paynow').dataset.gtm;\n    // we can't pass double quotes into a data variable\n    gtmJSON = gtmJSON.replace(/'/g,'\"');\n    gtmJSON = JSON.parse(gtmJSON);\n    return gtmJSON;\n}\n\nvar gtmDatalayer = {\n    init: init,\n    pushDataToDataLayerForPDP: pushDataToDataLayerForPDP,\n    pushDataToDataLayerForPLP: pushDataToDataLayerForPLP,\n    pushBundleDataToDataLayer: pushBundleDataToDataLayer,\n    pushDataFromPurchase: pushDataFromPurchase,\n    pushCheckoutStepToDataLayer: pushCheckoutStepToDataLayer,\n    getGTMData: getGTMData,\n    getPayNowGTMData: getPayNowGTMData,\n    getURLParaValue: getURLParaValue\n};\n\nwindow.gtmDatalayer = gtmDatalayer;\nmodule.exports = gtmDatalayer;",
        "'use strict';\n// jQuery extensions\n\nmodule.exports = function () {\n    // params\n    // toggleClass - required\n    // triggerSelector - optional. the selector for the element that triggers the event handler. defaults to the\n    //                   child elements of the list.\n    // eventName - optional. defaults to 'click'\n    $.fn.toggledList = function (options) {\n        if (!options.toggleClass) {\n            return this;\n        }\n        var list = this;\n        return list.on(options.eventName || 'click', options.triggerSelector || list.children(), function (e) {\n            e.preventDefault();\n            var classTarget = options.triggerSelector ? $(this).parent() : $(this);\n            classTarget.toggleClass(options.toggleClass);\n            // execute callback if exists\n            if (options.callback) {\n                options.callback();\n            }\n        });\n    };\n\n    $.fn.syncHeight = function () {\n        var arr = $.makeArray(this);\n        arr.sort(function (a, b) {\n            return $(a).height() - $(b).height();\n        });\n        return this.height($(arr[arr.length - 1]).height());\n    };\n};\n",
        "'use strict';\n\nvar globalcontentutils = require(12),\n    dialog = require(10),\n    minicart = require(16),\n    simplesearch = require(22),\n    tooltip = require(25),\n    util = require(27),\n    validator = require(28),\n    carousel = require(4),\n    newsletter = require(18),\n    flyinheader = require(11),\n    gtm = require(13),\n    newformstyle = require(17),\n    sticky = require(24),\n    sirv = require(23),\n    lazyload = require(6),\n    menu = require(7);\n\nvar productTileSliders = require(8);\n\nrequire(14)();\nrequire(9)();\nrequire(26)();\n\nfunction initializeEvents() {\n\n    util.addToggleEvents();\n\n    // New back to top functionality\n    $(document).on('ready', function () {\n        if ($(document).height() > 1200) {\n            var $backToTop = $('.backtotop');\n            var scrolledDown = 0;\n            var isScrolling;\n            $(window).scroll(function (event) {\n                var scroller = $(this).scrollTop();\n                if ((scroller > scrolledDown) || (window.scrollY <= 600)) {\n                    $backToTop.removeClass('visible');\n                } else if (scroller < scrolledDown) {\n                    $backToTop.addClass('visible');\n                    window.clearTimeout(isScrolling);\n                    isScrolling = setTimeout(function () {\n                        $backToTop.removeClass('visible');\n                    }, 2500);\n                }\n                scrolledDown = scroller;\n            });\n            $backToTop.on('click', function (event) {\n                event.preventDefault();\n                $('body,html').scrollTop(0);\n            });\n        }\n    });\n\n    $(\".footer-newsletter .newsletter-form-row .newsletter-form-cell-right button\").insertAfter(\".footer-newsletter .newsletter-form-row .newsletter-form-cell-left .field label\");\n\n    /** Functionality for Email Subscription Pop-Up **/\n    var emailSubcriptionPopUp = util.getCookie(\"tjcEmailSubscription\");\n    var isGDPRaccepted = util.getCookie('gdpr_cookies_accepted') === 'true' ? true : false;\n    if (emailSubcriptionPopUp == \"\") {\n        util.showPopup(\"tjcEmailSubscription\", \"no-action\", window.SitePreferences.popupCookieExpiryTime);\n    }\n    emailSubcriptionPopUp = util.getCookie(\"tjcEmailSubscription\");\n    if (isGDPRaccepted && emailSubcriptionPopUp != \"\" && (emailSubcriptionPopUp == \"no-action\" && customer.loginStatusCode == \"0\") && window.SitePreferences.emailSubscriptionFlag && (window.pageContext.ns !== \"mobile_certificate\" && window.pageContext.ns !== \"checkout\")) {\n        var url = Urls.EmailSubscriptionPopUp;\n        setTimeout(function () {\n            if (!($('.qb-no-mobile-popup').length != 0 || $('.hide-other-popup').length != 0)) {\n                dialog.open({\n                    url: url,\n                    options: {\n                        height: 600,\n                        width: 1000,\n                        dialogClass: 'email-subscription-popUp',\n                        open: function (event, ui) {\n                            $('body').toggleClass('no-scroll');\n                            newformstyle.init();\n                            validator.init();\n                            if (window.innerHeight < window.innerWidth) {\n                                $('.ui-dialog.email-subscription-popUp').css('height', '-webkit-fill-available !important');\n                                $('.ui-dialog.email-subscription-popUp .xlt-emailSubscriptionPopUp').css({ 'max-height': window.innerHeight + 'px', 'overflow-y': 'auto', 'overflow-x': 'hidden' });\n                            }\n                            $('.email-subscription-popUp input[id^=\"dwfrm_newsletter_email\"]').trigger('focus');\n                            newsletter.init();\n                            $('.ui-widget-overlay').off('click.close-popUp').on('click.close-popUp', function (e) {\n                                $('.email-subscription-popUp .ui-dialog-titlebar-close').trigger('click');\n                            });\n                        },\n                        close: function () {\n                            $('body').toggleClass('no-scroll');\n                            emailSubcriptionPopUp = util.getCookie(\"tjcEmailSubscription\");\n                            if (emailSubcriptionPopUp == \"no-action\") {\n                                util.showPopup(\"tjcEmailSubscription\", \"canceled\", window.SitePreferences.popupCookieExpiryTime);\n                            }\n                        }\n                    }\n                });\n            }\n        }, 45001);\n    }\n    var lazyLoadContainers = $('.js-lazyload-content:not(.loaded)');\n    if (lazyLoadContainers.length > 0) {\n        $(window).one('scroll', function () {\n            lazyLoadContainers.each(function () {\n                lazyload.lazyLoadContent($(this));\n            });\n        });\n\n        lazyLoadContainers.each(function () {\n            if (util.elementInViewport(this))\n            lazyload.lazyLoadContent($(this));\n        });\n    }\n\n    if (document.querySelectorAll('.Sirv[data-options^=\"video\"]').length > 0) {\n        lazyload.loadScriptOnce('sirv-script', 'https://scripts.sirv.com/sirvjs/v3/sirv.js?v=3.15.1&modules=lazyimage,zoom,video,gallery');\n    }\n}\n/**\n * @private\n * @function\n * @description Adds class ('js') to html for css targeting and loads js specific styles.\n */\nfunction initializeDom() {\n\n    if (SitePreferences.SIRV_ENABLED) {\n        sirv.init();\n    }\n\n    // load js specific styles\n    util.limitCharacters();\n}\n\nfunction handleSubscriptionError() {\n    var smsSubcriptionPopUp = util.getCookie(\"tjcSmsSubscription-\" + customer.number);\n    if (smsSubcriptionPopUp != \"cancelled\") {\n        validator.init();\n        util.setCookie(\"tjcSmsSubscription-\" + customer.number, \"error\", 24);\n    }\n}\n\nfunction smsOptIn() {\n    var url = Urls.smsOptIn;\n    var $form = $('#sms-opt-in-form');\n    $form.validate();\n    if (!$form.valid()) {\n        return;\n    }\n    $('#sms-opt-in-error').addClass('d-none').css({ 'display': 'none' });\n    //progress.show();\n    $.ajax({\n        url: url,\n        type: 'POST',\n        data: {\n            phoneNumber: $('input[type=text].phonenumberwithseven').val()\n        },\n        success: function (response) {\n            //progress.hide();\n            if (response.success) {\n                window.customer.contactPreferenceSMS = true;\n                $('#smsoptin-form-success, #smsoptin-success-ca').removeClass('d-none');\n                $('#smsoptin-form-field, #smsoptin-form-ca').addClass('d-none');\n                $('#sms-optin-close-btn').off('click').on('click', function () {\n                    $('.smsoptin-subscription-popup .ui-dialog-titlebar-close').trigger('click');\n                });\n            } else {\n                handleSubscriptionError();\n            }\n        },\n        error: function (err) {\n            //progress.hide();\n            handleSubscriptionError();\n        }\n    });\n}\n\nfunction handleSmsSubcriptionPopUp() {\n    if (window.pageContext.ns !== \"mobile_certificate\" && window.pageContext.ns !== \"checkout\") {\n        /** Functionality for SMS Subscription Pop-Up **/\n        var smsSubcriptionPopUp;\n        if (customer.loginStatusCode == \"1\") {\n            smsSubcriptionPopUp = util.getCookie(\"tjcSmsSubscription-\" + customer.number);\n            if (smsSubcriptionPopUp == \"\") {\n                util.showPopup(\"tjcSmsSubscription-\" + customer.number, \"no-action\", window.SitePreferences.popupCookieExpiryTime);\n            }\n            smsSubcriptionPopUp = util.getCookie(\"tjcSmsSubscription-\" + customer.number);\n        }\n        if (smsSubcriptionPopUp != \"\" && (smsSubcriptionPopUp == \"no-action\" && customer.loginStatusCode == \"1\" && (customer.contactPreferenceSMS === \"false\" || customer.contactPreferenceSMS === \"null\")) && window.SitePreferences.smsSubscriptionFlag) {\n            var url = Urls.SmsSubscriptionPopUp;\n            var phoneNumber = customer.phoneMobile;\n            setTimeout(function () {\n                if (!($('.qb-no-mobile-popup').length != 0 || $('.hide-other-popup').length != 0)) {\n                    dialog.open({\n                        url: url,\n                        options: {\n                            height: 600,\n                            width: 1000,\n                            dialogClass: 'smsoptin-subscription-popup',\n                            open: function (event, ui) {\n                                $('body').toggleClass('no-scroll');\n                                $('.phonenumberwithseven .label').addClass('focus-active');\n                                if ($('.smsoptin-form-row .error-msg').css(\"display\") == \"block\") {\n                                    $('.subs-message.no-margin').hide();\n                                };\n                                newformstyle.init();\n                                validator.init();\n                                if (window.innerHeight < window.innerWidth) {\n                                    $('.ui-dialog.smsoptin-subscription-popup').css('height', '-webkit-fill-available !important');\n                                    $('.ui-dialog.smsoptin-subscription-popup .mobile-subscription-popup-wrapper').css({\n                                        'max-height': window.innerHeight + 'px',\n                                        'overflow-y': 'auto',\n                                        'overflow-x': 'hidden'\n                                    });\n                                }\n                                newsletter.init();\n                                $('.ui-widget-overlay').off('click.close-popUp').on('click.close-popUp', function (e) {\n                                    $('.smsoptin-subscription-popup .ui-dialog-titlebar-close').trigger('click');\n                                });\n                                if (phoneNumber && phoneNumber !== \"\" && phoneNumber !== \"undefined\" && phoneNumber !== undefined) {\n                                    $('input[type=text].phonenumberwithseven').val(phoneNumber);\n                                    $('.phonenumberwithseven .label').addClass('focus-active');\n                                }\n                                $('#smsSubscriptionForm').off('click').on('click', function (event) {\n                                    event.preventDefault();\n                                    event.stopPropagation();\n                                    smsOptIn();\n                                });\n                            },\n                            close: function () {\n                                $('body').toggleClass('no-scroll');\n                                smsSubcriptionPopUp = util.getCookie(\"tjcSmsSubscription-\" + customer.number);\n                                if (smsSubcriptionPopUp == \"no-action\" && (customer.contactPreferenceSMS === \"false\" || customer.contactPreferenceSMS === \"null\")) {\n                                    util.showPopup(\"tjcSmsSubscription-\" + customer.number, \"canceled\", window.SitePreferences.popupCookieExpiryTime);\n                                }\n                            }\n                        }\n                    });\n                }\n            }, 45001);\n\n        }\n    }\n};\n\nvar main = {\n    init: function () {\n        if (!$('body').hasClass('window-loaded')) {\n            $('body').addClass('window-loaded');\n        }\n\n        if (document.cookie.length === 0) {\n            $('<div/>').addClass('message error-form browser-compatibility-alert').append($('<div/>')\n                .addClass('message-inner').append($('<div/>').addClass('message-content')\n                    .html(Resources.COOKIES_DISABLED))).appendTo('#browser-check');\n        }\n        initializeDom();\n        initializeEvents();\n        handleSmsSubcriptionPopUp();\n\n        menu.init();\n\n        tooltip.init();\n        minicart.init();\n        validator.init();\n        simplesearch.init();\n        carousel();\n        newsletter.init();\n        util.executeJqueryReadyCallbacks();\n        flyinheader.init();\n        util.disguisePassword();\n        util.closeHandlerForErrorMessages();\n        sticky.init();\n        gtm.init();\n        newformstyle.init();\n        // execute page specific initializations\n        util.toggleEvent();\n        globalcontentutils.init();\n        lazyload.observeLazyLoadingScripts();\n        productTileSliders();\n    }\n};\n\nmodule.exports = main;",
        "'use strict';\n\nvar bonusProductsView = require(3);\n\nvar minicart = {\n    init: function () {\n        this.$el = $('.header-bag');\n    },\n    /**\n     * @function\n     * @description Shows the given content in the mini cart\n     * @param {String} A HTML string with the content which will be shown\n     */\n    show: function (html) {\n        this.$el.find('.header-bag-link').html(html);\n        this.$el.addClass('bag-with-products');\n        this.init();\n        bonusProductsView.loadBonusOption();\n    }\n};\n\nmodule.exports = minicart;\n",
        "'use strict';\n\n\n$(document).ready(function () {\n  jQuery.extend(jQuery.validator.messages, {\n    required: 'Cannot be blank'\n  });\n});\n\n\n\nfunction formstylestyle() {\n\n  $('.form-elements input').on('focus', function () {\n    $(\".boxed-alert\").addClass('hidden');\n  });\n\n  $('.form-elements textarea').on('focus', function () {\n    $(\".boxed-alert\").addClass('hidden');\n  });\n\n  $('.form-elements select').on('focus', function () {\n    $(\".boxed-alert\").addClass('hidden');\n  });\n\n  $('.form-elements input').on('blur', function () {\n    $(this).siblings(\".control-label\").removeClass('focus-active');\n    if ($(this).val().length > 0) {\n      $(this).siblings(\".control-label\").addClass('focus-active');\n    }\n  });\n\n  $('.form-elements input').on('focus', function () {\n    $(this).siblings(\".control-label\").addClass('focus-active');\n  });\n\n  $('.form-elements textarea').on('blur', function () {\n    $(this).siblings(\".control-label\").removeClass('focus-active');\n    if ($(this).val().length > 0) {\n      $(this).siblings(\".control-label\").addClass('focus-active');\n    }\n  });\n\n  $('.form-elements textarea').on('focus', function () {\n    $(this).siblings(\".control-label\").addClass('focus-active');\n  });\n\n  //check length of input on focus out the field\n  $('.field input').on('blur', function () {\n    $(\".focus-helper\").hide();\n    $(this).siblings(\".label\").removeClass('focus-active');\n    if ($(this).val().length > 0) {\n      $(this).siblings(\".label\").addClass('focus-active');\n\n    }\n\n  });\n\n\n//Lable appear on top on focus\n$('.field input').on('focus', function() {\n   $(this).siblings(\".focus-helper\").show();\n   $(\".login-box-content .error\").hide();\n   $(this).siblings(\".label\").addClass('focus-active');\n   if (!$(this).siblings(\".error-msg\").hasClass('custom-error')) {\n     $(this).siblings(\".error-msg\").remove(); \n   }\n});\n\n  // Hide error msg on click on focus on login and registration\n  $(\".checkemail-button .button\").click(function () {\n    $('.checkemail-field .error-msg').css('display', 'none');\n  });\n\n  $(\".new-registration\").click(function () {\n    $('.error-msg').css('display', 'none');\n  });\n\n  $(\".input-password\").on('focus', function () {\n    $(this).closest('.field').find('.error-msg').css('display', 'none');\n  });\n\n  //Email helper text\n  $('.new-form-style input[type=password]').on('focus', function () {\n    $(this).siblings(\".focus-helper\").text(\"8 to 12 characters, mix of letters and numbers\");\n  });\n\n\n  // Hide the error msg on focus\n  $('.post-code-field input').on('focus', function () {\n    $('.post-code-field  .error-msg').hide();\n\n  });\n\n\n\n  //Password Focus validation\n\n  $('.input-password').on('blur', function () {\n    var passwordval = $(this).val()\n    if (RegExp(\"^[a-zA-Z0-9!@#\\$%\\^\\&*\\)\\(+=._-]*$\").test(passwordval)) {\n      $(this).closest(\".form-row\").addClass('validation-success');\n      $(this).closest(\".form-row\").removeClass('validation-error');\n\n      if (/\\d/.test(passwordval) && /[a-zA-Z]/.test(passwordval)) {\n        $(this).closest(\".form-row\").addClass('validation-success');\n        $(this).closest(\".form-row\").removeClass('validation-error');\n      }\n\n      else {\n        $(this).closest(\".form-row\").addClass('validation-error');\n        $(this).closest(\".form-row\").removeClass('validation-success');\n        $(this).siblings(\".focus-helper\").show();\n        $(this).siblings(\".focus-helper\").text(\"8 to 12 characters, mix of letters and numbers\");\n\n      }\n    }\n    else {\n      $(this).closest(\".form-row\").addClass('validation-error');\n      $(this).closest(\".form-row\").removeClass('validation-success');\n      $(this).siblings(\".focus-helper\").show();\n      $(this).siblings(\".focus-helper\").text(\"8 to 12 characters, mix of letters and numbers\");\n    }\n\n\n    if ($(this).val().length == 0) {\n      $(this).siblings(\".focus-helper\").hide();\n    }\n\n    if ($(this).val().length > 0) {\n      $(this).closest(\".checkpw-field\").removeClass('validation-error');\n      $(this).closest(\".checkpw-field\").addClass('validation-success');\n    }\n\n  });\n\n\n  //Edit email remove validations\n  $(\".emailEditButton\").click(function () {\n    $('.email-field').removeClass('validation-error');\n    $('.email-field').addClass('validation-success');\n  });\n\n\n  //Password Validation for TV Customers\n  $('.tvcustomerpassword .input-password').on('blur', function () {\n    if (/^\\d+$/.test($(this).val())) {\n      if ($(this).val().length == 4) {\n        $(this).closest(\".form-row\").removeClass('validation-error');\n        $(this).closest(\".form-row\").addClass('validation-success');\n      }\n    }\n  })\n\n\n  //Type my address btn click -> focused function for inside the text box\n  $(\".addresses-select-group .showmore\").click(function () {\n    $(this).closest('.addresses-select').find('.styledSelect').css('pointer-events', 'none');\n\n    $(\".additional-address-fields .input-text\").each(function () {\n      if ($(this).val().length > 0) {\n        $(this).siblings(\".label\").addClass('focus-active');\n        $(this).closest('.form-row').addClass('validation-success');\n      }\n\n    })\n\n  });\n\n\n  //trigger the optinal select box field have a value\n\n  if ($('.birthdate-fields select.input-select').val()) {\n    $('.birthdate-fields select.input-select').trigger('blur');\n  }\n\n\n  if ($('.genderselect select.input-select').val()) {\n    $('.genderselect select.input-select').trigger('blur');\n  }\n\n  $(\".country\").trigger('blur');\n\n  //Select box close for OPC\n  $('.opcdelivery-addresses').click(function () {\n    $('.styledSelect').removeClass('active');\n    $('.optiongroup').hide();\n    $('body').removeClass('selectopen');\n    $('.overlaybg').remove();\n    $('.select-close').remove();\n\n  });\n\n  //Select box close outer click\n  $('.ui-widget-overlay, .AddnewNameFormModal').click(function () {\n    $('.styledSelect').removeClass('active');\n    $('.optiongroup').hide();\n    $('body').removeClass('selectopen');\n    $('.overlaybg').remove();\n    $('.select-close').remove();\n\n  });\n\n//Click type address button\n$('.billingform .type-address-btn').off('click').on('click', function(){\n  var $saveButton = $('.opcAddressListModelPopup').find('.addOPCdeliverylocation');\n  var isFormValid = $(this).closest('form').valid();\n  $saveButton.prop('disabled' , !isFormValid);\n  $('.additional-address-fields input[id^=\"dwfrm_address\"]').each(function(){\n    validateAdditionalAddressFiedinPopup(this);\n  });\n});\n\n\n  $('.type-address-btn-new .button-new').click(function () {\n    $('.addresses-select-group').css('display', 'block');\n    $('.additional-address-fields').removeClass('visually-hidden');\n    $('.additional-address-fields').addClass('visually-un-hidden');\n    $('.addOPCdeliverylocation').removeClass('visually-hidden');\n\n    $('.type-address-btn-new').css('display', 'none');\n    $('.addresses-select-group').css('display', 'none');\n    $('.address-check-btn').css('display', 'none');\n    $('.post-code-field').addClass('full-width-postcode');\n    optionalRemove();\n    $('.additional-address-fields input[id^=\"dwfrm_address\"]').each(function () {\n      validateAdditionalAddressFiedinPopup(this);\n    });\n    if ($('#opcDeliveryAddresses').length > 0) {\n      $('.additional-address-fields input[id^=\"dwfrm_checkoutaddresses_shippingAddress_address\"]').each(function () {\n        validateAdditionalAddressFiedinPopup(this);\n      });\n    }\n\n    $('.additional-address-fields input[id^=\"dwfrm_checkoutaddresses_shippingAddress_address\"]').on('keyup keydown change', function () {\n      validateAdditionalAddressFiedinPopup(this);\n\n    });\n\n  });\n\n\n\n  function optionalRemove() {\n    $(\".address-content .optinal-field input\").each(function () {\n\n      if ($(this).val().length > 0) {\n\n        $(this).closest('.optinal-field').addClass('remove-optional');\n      }\n      else {\n        $(this).closest('.optinal-field').removeClass('remove-optional');\n      }\n    });\n  }\n\n\n  $('.address-check-btn').on('click', function () {\n    $('.type-address-btn-new').hide();\n  });\n\n  $('.enable-find-my-address a').on('click', function () {\n    var $saveButton = $('.opcAddressListModelPopup').find('.addOPCdeliverylocation');\n    $saveButton.prop('disabled', true);\n\n    var $form = $(this).closest('.xlt-addressForm');\n    $('html, body').animate({\n      scrollTop: $form.offset().top\n    }, 200);\n    $form.find('.selected-address-summary').addClass('visually-hidden');\n    $form.find('.addresses-select-group h5').addClass('visually-hidden');\n    $form.find('.selected-address-summary span').empty();\n\n    var $addressSelect = $form.find('.addresses-select');\n    $addressSelect.removeClass(\"visually-hidden\");\n    $addressSelect.removeClass('loqate-select');\n\n    $('.address-check-btn').css('display', 'block');\n    $('.additional-address-fields').addClass('visually-hidden');\n    $('.additional-address-fields').removeClass('visually-un-hidden');\n    $('.type-address-btn-new').show();\n    $('.post-code-field').removeClass('full-width-postcode');\n    $('.type-own-address').remove();\n    $('.guestusershipping .additional-address-fields').removeClass('skip-hide');\n  });\n\n\n  $('body').on('click', '.type-address-btn', function () {\n    $(\".additional-address-fields .input-text\").each(function () {\n      if ($(this).val().length > 0) {\n        $(this).siblings(\".label\").addClass('focus-active');\n        $(this).closest('.form-row').addClass('validation-success');\n      }\n\n    })\n\n    if ($('#opcDeliveryAddresses').length > 0) {\n      $('.additional-address-fields input[id^=\"dwfrm_checkoutaddresses_shippingAddress_address\"]').each(function () {\n        validateAdditionalAddressFiedinPopup(this);\n      });\n    }\n\n    /* $('.address-check-btn').css('display' , 'none');\n    $('.post-code-field').addClass('full-width-postcode');\n    $('.addresses-select-group').css('display' , 'none'); */\n    optionalRemove();\n\n  });\n\n\n  function validateAdditionalAddressFiedinPopup($this) {\n    var countvalue = $($this).attr('maxlength') - $($this).val().length;\n    $($this).closest('.address-content').find('.addresscharacterlength .count').html(countvalue);\n    if (countvalue < 1) {\n      $($this).closest('.address-content').find('.addresscharacterlength').addClass('alert-danger');\n    }\n    else {\n      $($this).closest('.address-content').find('.addresscharacterlength').removeClass('alert-danger');\n    }\n  }\n\n\n\n\n  //Tooptip position\n  $(\".QB-address-heading i\").hover(function () {\n    $('.ui-tooltip').addClass('Toltip-top');\n  });\n\n\n\n  $('.optinal-field input').on('keyup keydown change', function () {\n\n    if ($(this).val().length >= 1) {\n\n      $(this).closest('.optinal-field').addClass('remove-optional');\n    }\n    else {\n      $(this).closest('.optinal-field').removeClass('remove-optional');\n\n    }\n\n  });\n\n\n\n  //Shipping Address section\n\n  $(\".shippingform .address-check-btn .button\").on(\"click\", function () {\n\n    if ($('.shippingform .address-alias').hasClass('validation-success')) {\n      $('.shippingform .addresses-select-group').css('display', 'none');\n    }\n\n    setTimeout(function () {\n      if ($('.shippingform .address-alias').hasClass('validation-error')) {\n      }\n      else {\n        $('.shippingform  .addresses-select .form-row ').removeClass('validation-success');\n        $('.shippingform  .addresses-select .form-row ').removeClass('validation-error');\n        $('.shippingform  .addresses-select .styledSelect').remove();\n        $('.shippingform  .addresses-select .optiongroup').remove();\n        addressselectBoxCustom();\n\n        if ($('.shippingform .addresses-select li').length == 1) {\n          if ($('.shippingform .additional-address-fields').hasClass('visually-hidden')) {\n            $(\".shippingform .address-check-btn .button\").trigger('click');\n          }\n        }\n\n        $('.shippingform .addresses-select-group').css('display', 'block');\n      }\n\n    }, 900);\n\n  });\n\n\n\n  //Billing Address section\n\n  $(\".billingform .address-check-btn .button\").on(\"click\", function () {\n\n\n    if ($('.billingform .address-alias').hasClass('validation-success')) {\n      $('.billingform .addresses-select-group').css('display', 'none');\n    }\n\n    setTimeout(function () {\n      if ($('.billingform .address-alias').hasClass('validation-error')) {\n      }\n      else {\n        $('.billingform  .addresses-select .form-row ').removeClass('validation-success');\n        $('.billingform  .addresses-select .form-row ').removeClass('validation-error');\n        $('.billingform .addresses-select-group').css('display', 'block');\n        $('.billingform  .addresses-select .styledSelect').remove();\n        $('.billingform  .addresses-select .optiongroup').remove();\n\n        billingformselectBox();\n\n        if ($('.billingform .addresses-select li').length == 1) {\n          if ($('.billingform .additional-address-fields').hasClass('visually-hidden')) {\n\n            $(\".billingform .address-check-btn .button\").trigger('click');\n          }\n        }\n\n        if ($('.optiongroup > .optiongroup')) {\n          $('.optiongroup').closest('.optiongroup').find('.optiongroup').removeClass('optiongroup');\n\n        }\n\n      }\n\n    }, 900);\n\n  });\n\n\n\n  //New User Billing Address section\n\n  $(\".opcnewusershipping .address-check-btn .button\").on(\"click\", function () {\n\n    setTimeout(function () {\n      $('.opcnewusershipping  .addresses-select .form-row ').removeClass('validation-success');\n      $('.opcnewusershipping  .addresses-select .form-row ').removeClass('validation-error');\n      $('.opcnewusershipping   .addresses-select-group').css('display', 'block');\n      $('.opcnewusershipping  .addresses-select .styledSelect').remove();\n      $('.opcnewusershipping  .addresses-select .optiongroup').remove();\n      addressselectBoxCustom();\n\n      if ($('.opcnewusershipping .addresses-select li').length == 1) {\n\n        if ($('.opcnewusershipping .additional-address-fields').hasClass('visually-hidden')) {\n\n          $(\".opcnewusershipping .address-check-btn .button\").trigger('click');\n\n        }\n      }\n\n    }, 900);\n\n  });\n\n\n\n  //Guestuser Billing Address section\n\n  $(\".guestuserbilling .address-check-btn .button\").on(\"click\", function () {\n\n    if ($('.guestuserbilling .address-alias').hasClass('validation-success')) {\n      $('.guestuser-checkout .addresses-select-group').css('display', 'none');\n    }\n\n    setTimeout(function () {\n      $('.guestuserbilling  .addresses-select .form-row ').removeClass('validation-success');\n      $('.guestuserbilling  .addresses-select .form-row ').removeClass('validation-error');\n      $('.guestuserbillingt .addresses-select-group').css('display', 'block');\n      $('.guestuserbilling  .addresses-select .styledSelect').remove();\n      $('.guestuserbilling  .addresses-select .optiongroup').remove();\n      billingformselectBox();\n\n      if ($('.guestuserbilling .addresses-select li').length == 1) {\n\n        if ($('.guestuserbilling .additional-address-fields').hasClass('visually-hidden')) {\n\n          $(\".guestuserbilling .address-check-btn .button\").trigger('click');\n\n        }\n      }\n\n    }, 900);\n\n  });\n\n\n\n  //Guestuser Shipping Address section\n\n  $(\".guestusershipping .address-check-btn .button\").on(\"click\", function () {\n\n    if ($('.guestusershipping .address-alias').hasClass('validation-success')) {\n      $('.guestusershipping .addresses-select-group').css('display', 'none');\n    }\n\n    setTimeout(function () {\n      $('.guestusershipping  .addresses-select .form-row ').removeClass('validation-success');\n      $('.guestusershipping  .addresses-select .form-row ').removeClass('validation-error');\n      $('.guestusershipping .addresses-select-group').css('display', 'block');\n      $('.guestusershipping  .addresses-select .styledSelect').remove();\n      $('.guestusershipping  .addresses-select .optiongroup').remove();\n      addressselectBoxCustom();\n\n      if ($('.guestusershipping .addresses-select li').length == 1) {\n        if ($('.guestusershipping .additional-address-fields').hasClass('visually-hidden')) {\n\n          $(\".guestusershipping .address-check-btn .button\").trigger('click');\n\n        }\n      }\n\n\n    }, 900);\n\n  });\n\n\n\n}\n\n\n\n//Selectbox new design\n\nfunction selectBoxCustom(select) {\n\n  var selects = select ? select : $('select:not(.non-custom-select)');\n\n  selects.each(function () {\n    // Cache the number of options\n    var $this = $(this),\n      numberOfOptions = $(this).children('option').length;\n\n    // remove previous dropdown\n    if ($this.parents('.select').find('.optiongroup').length) {\n      $this.parents('.select').find('.optiongroup').remove();\n    }\n\n    if ($this.parents('.select').length === 0) {\n      var a = $(this).find('option:selected').text();\n\n      // Hides the select element\n      $this.addClass('s-hidden');\n      // Wrap the select element in a div\n      var isEngraving = $this.attr('name') && $this.attr('name').indexOf('engraving') > -1;\n      var selectedOption = $(this).find('option:selected').text();\n      var source = new URLSearchParams(window.location.href).get('source');\n      var selectClass = isEngraving && !source && selectedOption.length && selectedOption.indexOf('Select') < 0 ? 'select engravefield-disabled' : 'select';\n\n      $this.wrap($('<div />', {\n        'class': selectClass\n      }));\n\n      // Insert a styled div to sit over the top of the hidden select element\n      $this.after('<div class=\"styledSelect\"></div>');\n    }\n\n    // Cache the styled div\n    var $styledSelect = $this.next('div.styledSelect');\n\n    // Show the first select option in the styled div\n    if ($styledSelect.text() === '') {\n      $styledSelect.html($(this).find('option:selected').text());\n    }\n\n    // Insert an unordered list after the styled div and also cache the list\n    if ($styledSelect.next().hasClass('.options')) {\n\n    }\n    var $list = $('<ul />', {\n      'class': 'options'\n    }).insertAfter($styledSelect);\n\n    // Insert a list item into the unordered list for each select option\n    var $options = $this.children('option');\n    var numberOfOptions = $options.length;\n    for (var i = 0; i < numberOfOptions; i++) {\n      var option = $options.eq(i);\n      var swatchImage = option.data('swatch-image');\n      var selectable = option.data('selectable');\n      var text = swatchImage ? option.text() + '<img loading=\"lazy\" class=\"swatch-image\" src=\"' + swatchImage + '\"/>' : option.text();\n      var value = option.val();\n      var html = text.indexOf('SOLD OUT') > -1 ? text.replace('(SOLD OUT)', '') + '<span class=\"soldout-text\">(SOLD OUT)</span>' : text;\n      $('<li />', {\n        html: html,\n        rel: value,\n        'class': selectable ? 'selectable' : 'unavailable'\n      }).appendTo($list);\n    }\n\n    // Cache the list items\n    var $listItems = $list.children('li');\n\n    // Show the unordered list when the styled div is clicked (also hides it if the div is clicked again)\n    $styledSelect.click(function (e) {\n      e.stopPropagation();\n      $('body').addClass('selectopen');\n      if (!$this.next().hasClass('overlaybg')) {\n        $this.after('<div class=\"overlaybg\"></div>');\n      }\n      $('.options li:first-child').before('<div class=\"select-close\"></div>');\n      $('div.styledSelect.active').each(function () {\n        $(this).removeClass('active').next('.optiongroup').hide();\n      });\n      $(this).toggleClass('active').next('.optiongroup').toggle();\n\n    });\n\n    // Hides the unordered list when a list item is clicked and updates the styled div to show the selected list item\n    // Updates the select element to have the value of the equivalent option\n    $listItems.click(function (e) {\n      e.stopPropagation();\n      $('body').removeClass('selectopen');\n      $('.overlaybg').remove();\n      $('.select-close').remove();\n      $styledSelect.html($(this).html()).removeClass('active');\n      $this.val($(this).attr('rel'));\n      $list.hide();\n      $('.optiongroup').hide();\n      $(this).closest('.select').find('select').trigger(\"change\");\n\n\n    });\n\n    // Hides the unordered list when clicking outside of it\n    $('#wrapper').click(function () {\n      $('.styledSelect').removeClass('active');\n      $list.hide();\n      $('.optiongroup').hide();\n      $('body').removeClass('selectopen');\n      $('.overlaybg').remove();\n      $('.select-close').remove();\n\n\n    });\n\n    $('#qb-activation-page').click(function () {\n      $('.styledSelect').removeClass('active');\n      $list.hide();\n      $('.optiongroup').hide();\n      $('body').removeClass('selectopen');\n      $('.overlaybg').remove();\n      $('.select-close').remove();\n\n    });\n\n\n    $(\".styledSelect\").on(\"click\", function () {\n      $(this).siblings('select').trigger('blur');\n    });\n\n    $(\".options li\").on(\"click\", function () {\n      $(this).parents().siblings('select').trigger('blur');\n    });\n\n  });\n\n  $('ul.options').wrap('<div class=\"optiongroup\"></div>');\n\n  // Restrict more select append\n  if ($('.select > .select')) {\n    $('.select').closest('.select').siblings('.styledSelect').remove();\n    $('.select').closest('.select').siblings('.optiongroup').remove();\n\n  }\n\n  // Auto fucts when text box having a value\n  $(\".input-text\").each(function () {\n    if ($(this).val().length > 0) {\n      $(this).siblings(\".label\").addClass('focus-active');\n    }\n\n  })\n\n  $(\".form-elements .input-textarea\").each(function () {\n    if ($(this).val().length > 0) {\n      $(this).siblings(\".label\").addClass('focus-active');\n    }\n\n  })\n\n\n  // Remove overlapping with new style select in Missed actions page\n  $('.missed-auctions-main .select').removeClass('select');\n  $('.missed-auctions-main .styledSelect').remove();\n  $('.missed-auctions-main .optiongroup').remove();\n\n}\n\n\n\n// Select box new design for shipping address selectbox\n\nfunction addressselectBoxCustom() {\n\n  $('.shippingform .addresses-select select').each(function () {\n    // Cache the number of options\n    var $this = $(this),\n      numberOfOptions = $(this).children('option').length;\n    var a = $(this).find('option:selected').text();\n    // Hides the select element\n    $this.addClass('s-hidden');\n\n    // Insert a styled div to sit over the top of the hidden select element\n    $this.after('<div class=\"styledSelect\"></div>');\n\n    // Cache the styled div\n    var $styledSelect = $this.next('div.styledSelect');\n\n    // Show the first select option in the styled div\n    $styledSelect.text($(this).find('option:selected').text());\n\n\n    // Insert an unordered list after the styled div and also cache the list\n    var $list = $('<ul />', {\n      'class': 'options'\n    }).insertAfter($styledSelect);\n\n    // Insert a list item into the unordered list for each select option\n    for (var i = 0; i < numberOfOptions; i++) {\n      $('<li />', {\n        text: $this.children('option').eq(i).text(),\n        rel: $this.children('option').eq(i).val()\n      }).appendTo($list);\n    }\n\n    // Cache the list items\n    var $listItems = $list.children('li');\n\n    $styledSelect.click(function (e) {\n      e.stopPropagation();\n\n      $('body').addClass('selectopen');\n      $this.after('<div class=\"overlaybg\"></div>');\n      $('.options li:first-child').before('<div class=\"select-close\"></div>');\n      $('div.styledSelect.active').each(function () {\n        $(this).removeClass('active').next('.optiongroup').hide();\n      });\n      $(this).toggleClass('active').next('.optiongroup').toggle();\n\n    });\n\n    $listItems.click(function (e) {\n      e.stopPropagation();\n      $('body').removeClass('selectopen');\n      $('.overlaybg').remove();\n      $('.select-close').remove();\n      $styledSelect.text($(this).text()).removeClass('active');\n      $this.val($(this).attr('rel'));\n      $list.hide();\n      $('.optiongroup').hide();\n      $(this).closest('.select').find('select').trigger(\"change\");\n\n    });\n\n\n    $(\".options li\").on(\"click\", function () {\n      $(this).parents().siblings('select').trigger('blur');\n    });\n\n    $(\".styledSelect\").on(\"click\", function () {\n      $(this).siblings('select').trigger('blur');\n\n    });\n\n\n    $('.shippingform .addresses-select ul.options').wrap('<div class=\"optiongroup\"></div>');\n\n  });\n\n}\n\n\n\n\n// Select box new design for billing address selectbox\n\nfunction billingformselectBox() {\n\n  $('.billingform .addresses-select select').each(function () {\n    // Cache the number of options\n    var $this = $(this),\n      numberOfOptions = $(this).children('option').length;\n    var a = $(this).find('option:selected').text();\n    // Hides the select element\n    $this.addClass('s-hidden');\n\n    // Insert a styled div to sit over the top of the hidden select element\n    $this.after('<div class=\"styledSelect\"></div>');\n\n    // Cache the styled div\n    var $styledSelect = $this.next('div.styledSelect');\n\n    // Show the first select option in the styled div\n    $styledSelect.text($(this).find('option:selected').text());\n\n\n    // Insert an unordered list after the styled div and also cache the list\n    var $list = $('<ul />', {\n      'class': 'options'\n    }).insertAfter($styledSelect);\n\n    // Insert a list item into the unordered list for each select option\n    for (var i = 0; i < numberOfOptions; i++) {\n      $('<li />', {\n        text: $this.children('option').eq(i).text(),\n        rel: $this.children('option').eq(i).val()\n      }).appendTo($list);\n    }\n\n    // Cache the list items\n    var $listItems = $list.children('li');\n\n    $styledSelect.click(function (e) {\n      e.stopPropagation();\n\n      $('body').addClass('selectopen');\n      $this.after('<div class=\"overlaybg\"></div>');\n      $('.options li:first-child').before('<div class=\"select-close\"></div>');\n      $('div.styledSelect.active').each(function () {\n        $(this).removeClass('active').next('.optiongroup').hide();\n      });\n      $(this).toggleClass('active').next('.optiongroup').toggle();\n\n    });\n\n    $listItems.click(function (e) {\n      e.stopPropagation();\n      $('body').removeClass('selectopen');\n      $('.overlaybg').remove();\n      $('.select-close').remove();\n      $styledSelect.text($(this).text()).removeClass('active');\n      $this.val($(this).attr('rel'));\n      $list.hide();\n      $('.optiongroup').hide();\n      $(this).closest('.select').find('select').trigger(\"change\");\n\n    });\n\n\n    $(\".options li\").on(\"click\", function () {\n      $(this).parents().siblings('select').trigger('blur');\n    });\n\n    $(\".styledSelect\").on(\"click\", function () {\n      $(this).siblings('select').trigger('blur');\n\n    });\n\n    $('.billingform .addresses-select ul.options').wrap('<div class=\"optiongroup\"></div>');\n\n  });\n\n}\n\nvar newformstyle = {\n  init: function () {\n    formstylestyle();\n    selectBoxCustom();\n  },\n  selectBoxCustom: selectBoxCustom\n}\n\nwindow.newformstyle = newformstyle;\nmodule.exports = newformstyle;\n",
        "/*global cmCreateElementTag: false */\n'use strict';\n\nvar util = require(27);\n\nvar newsletter = {\n    init: function () {\n        $('.footer-newsletter-submit.js-submit-email, .footer-newsletter-submit.js-submit-mobile').off('click').on('click', function (event) {\n            event.preventDefault();\n\n            // Determine if the clicked button is for email or mobile\n            var isEmailSubmit = $(event.target).hasClass('js-submit-email');\n            var $inputField = $(event.target).closest('.newsletter-form-group').find('input');\n            if (!$inputField.valid() || !$inputField.val()) return;\n\n            if (isEmailSubmit) {\n                $('.newsletter-phone-input-js').val('');\n            } else {\n                $('.newsletter-email-input-js').val('');\n            }\n\n            var $form = $(event.target).closest('.newsletter-form');\n\n            // Handle Google reCAPTCHA or submit newsletter\n            window.SitePreferences.EnableGoogleRecaptchaV3 ? this.handleRecaptcha($form) : this.submitNewsletter($form);\n        }.bind(this));\n    },\n\n    handleRecaptcha: function ($form) {\n        grecaptcha.ready(function () {\n            grecaptcha.execute(window.SitePreferences.SiteKeyGoogleRecaptchaV3, { action: 'formSubmit' }).then(function (token) {\n                 // Append token as a hidden input to the form\n                $(\".grecaptcharesponse-js\").val(token);\n\n                this.submitNewsletter($form);\n            }.bind(this));\n        }.bind(this));\n    },\n\n    submitNewsletter: function ($form) {\n        var $data = $form.serialize();\n        var $postUrl = $form.attr('action');\n        $.ajax({\n            type: 'POST',\n            url: util.ajaxUrl($postUrl),\n            data: $data,\n            success: function (response) {\n                var message = response.responseMessage.replace(/([\\w._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}|\\b07\\d{8,9}\\b)/, '\"$1\"');\n                this.showToasterMessage(message, !response.success);\n            }.bind(this)\n        });\n    },\n\n    showToasterMessage: function (message, isError) {\n        var $toasterMessageBlock = $('.js-toasty-newsletter');\n\n        // Show the toaster message\n        $toasterMessageBlock.removeAttr('style')\n            .addClass((isError ? 'error' : 'success') + ' visible ');\n\n        $toasterMessageBlock.children('.js-message').text(message);\n\n        // Set a timeout to hide the toaster message after 3 seconds\n        setTimeout(function () {\n            $toasterMessageBlock.fadeOut(500, function () {\n                // After fadeOut completes, set display to none\n                $(this).attr('style', 'display: none;').removeClass('visible')\n                    .removeClass(isError ? 'error' : 'success');\n            });\n        }, 3000);\n    }.bind(this),\n};\n\nmodule.exports = newsletter;",
        "'use strict';\n\nvar addedModal = require(1),\n    util = require(27),\n    progress = require(20);\n\n//load the star rating/yotpo widget on the caraousels\nfunction initializeYotpoWidgets() {\n    var intervalId = setInterval(function() {\n        if (window.yotpoWidgetsContainer && typeof window.yotpoWidgetsContainer.initWidgets === 'function') {\n            clearInterval(intervalId);\n            console.log(\"yotpoCarouselIntialize\");\n            window.yotpoWidgetsContainer.initWidgets(false);\n        }\n    }, 2000);\n}\n\nfunction initializeEvents() {\n    $(document).on('click', '.slider-tile .swatch-list .swatch' , function (e) {\n        e.preventDefault();\n        if ($(this).hasClass('selected')) {\n            return;\n        }\n\n        progress.show();\n\n        var $tile = $(this).closest('.slider-tile'),\n            data,\n            $thumb,\n            currentAttrs\n        $(this).closest('.swatch-list').find('.swatch.selected').removeClass('selected');\n        $(this).addClass('selected');\n        $tile.find('.thumb-link').attr('href', $(this).attr('href'));\n        $tile.find('name-link').attr('href', $(this).attr('href'));\n\n        data = $(this).children('img').filter(':first').data('thumb');\n        $thumb = $tile.find('.product-image .thumb-link img').eq(0);\n        currentAttrs = {\n            src: data.src,\n            alt: data.alt,\n            title: data.title\n        };\n        $thumb.attr(currentAttrs);\n        $thumb.data('current', currentAttrs);\n\n        var swatches = $tile.find('.product-swatches');\n        var ratings = $tile.find('.yotpo-widget-instance');\n\n        $.ajax({\n            url: $(this).attr('data-href'),\n            success: function (response) {\n                if (response) {\n                    var $newTile = $(response);\n                    $newTile.find('.product-swatches').replaceWith(swatches);\n                    $newTile.find('.yotpo-widget-instance').replaceWith(ratings);\n                    $tile.replaceWith($newTile);\n                }\n                progress.hide();\n            }\n        });\n    });\n\n\t$(document).off('click', '.slider-addtocart').on('click', '.slider-addtocart', function(e) {\n\t\te.preventDefault();\n\t\t\t$.ajax({\n\t\t\t\ttype: 'GET',\n\t\t\t\tdataType: 'html',\n\t\t\t\turl: util.ajaxUrl(Urls.addProduct)+\"&pid=\"+$(this).data(\"pid\")+\"&Quantity=1&cartAction=add&quickview=isQuickView\",\n\t\t\t\tsuccess: function(response) {\n\t\t\t\t\tif(!window.SitePreferences.EnableSlidingMiniCart){\n\t\t\t\t\t\taddedModal.init();\n\t\t\t\t\t}\n\t\t\t\t\telse{\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tprogress.show();\n\t\t\t\t\t\tvar url = Urls.slidingminicart;\n\t\t\t\t\t\tif (window.dialog) {\n\t\t\t\t\t\t\twindow.dialog.open({ \n\t\t\t\t\t\t\t\turl: url,\n\t\t\t\t\t\t\t\toptions:{\n\t\t\t\t\t\t\t\t\tdialogClass:'sliding-modal',\n\t\t\t\t\t\t\t\t\ttitle: \"Shopping Bag\",\n\t\t\t\t\t\t\t\t\topen: function(event,ui){\n\t\t\t\t\t\t\t\t$('body').css('overflow','hidden');\n\t\t\t\t\t\t\t\t$('.ui-widget-overlay').on('click', function(){\n\t\t\t\t\t\t\t\t\t$('.sliding-modal').find('.ui-dialog-content').dialog('close');\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t$('.sliding-cart-item-remove').off('click').on('click', function(e){\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\tvar pid = $(this).attr(\"data-pid\");\n\t\t\t\t\t\t\t\t\t\tvar url = Urls.removeProductFromSlidingCart;\n\t\t\t\t\t\t\t\t\t\t$.ajax({\n\t\t\t\t\t\t\t\t\t\turl: url + '?pid='+ pid,\n\t\t\t\t\t\t\t\t\t\ttype: 'POST',\n\t\t\t\t\t\t\t\t\t\tsuccess: function (response) { \n\t\t\t\t\t\t\t\t\t\t\t$('.slidingcart_container').html(response);\n\t\t\t\t\t\t\t\t\t\t\t$('.sliding-modal').find('.ui-dialog-content').dialog('close');\n\t\t\t\t\t\t\t\t\t\t\t$('.sliding-modal').find('.ui-dialog-content').dialog('open');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t$('.sliding-cart-item-remove-warranty').off('click').on('click', function(e){\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\tvar warrantypid = $(this).attr(\"data-pid\");\n\t\t\t\t\t\t\t\t\t\tvar url = Urls.removeProductFromSlidingCart;\n\t\t\t\t\t\t\t\t\t\t$.ajax({\n\t\t\t\t\t\t\t\t\t\turl: url + '?pid='+ warrantypid,\n\t\t\t\t\t\t\t\t\t\ttype: 'POST',\n\t\t\t\t\t\t\t\t\t\tsuccess: function (response) { \n\t\t\t\t\t\t\t\t\t\t\t$('.slidingcart_container').html(response);\n\t\t\t\t\t\t\t\t\t\t\t\t\tif ($('.emptybasket').length > 0) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$('.sliding-modal').find('.ui-dialog-content').dialog('close');\n\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$('.sliding-modal').find('.ui-dialog-content').dialog('close');\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$('.sliding-modal').find('.ui-dialog-content').dialog('open');\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tclose:function() {\n\t\t\t\t\t\t\t\t\t\t$('body').removeAttr(\"style\");\n\t\t\t\t\t\t\t\t\t\t$('html').removeAttr(\"style\");\t\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (window.minicart && typeof window.minicart.show === 'function') {\n\t\t\t\t\t\t\twindow.minicart.show(response);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t});\n\n\t$(document).on('click', '.product-wishlist-link' , function (e) {\n        e.preventDefault();\n    \tif($(this).hasClass('login-class')){\n    \t\twindow.location.href = $(this).attr('href');\n    \t}else{\n    \t\twishListAJAX(this);\n    \t}\n    });\n\n\tfunction wishListAJAX($this){\n\t\tvar url = $($this).attr('href'),\n\t\t\t$this = $($this),\n\t\turl = util.appendParamToURL(url,'isNewPDP', true);\n\t\t$.ajax({\n\t\t\turl: url,\n\t\t\ttype: 'GET',\n\t\t\tsuccess: function (response) {\n\t\t\t\tvar responseJSON = JSON.parse(response);\n\t\t\t\tif(responseJSON.success){\n\t\t\t\t\t$($this).attr('href', responseJSON.wishListURL);\n\t\t\t\t\t$($this).attr('class', responseJSON.wishListClass);\n\t\t\t\t\t$($this).find('i').attr('class', responseJSON.wishListSymbolClass);\n\t\t\t\t}\n\t\t\t},\n\t\t\terror: function (jqXHR, textStatus, errorThrown) {\n\t\t\t\tconsole.warn(textStatus + errorThrown);\n\t\t\t}\n\t\t});\n\t}\n}\n\nexports.init = function () {\n    var $tiles = $('.custom-slider-inner .slider-tile');\n    if ($tiles.length === 0) {\n        return;\n    }\n    initializeEvents();\n\t  var yotpoInitialized = false;\n\n    function initializeYotpo() {\n        if (!yotpoInitialized) {\n            initializeYotpoWidgets();\n            yotpoInitialized = true;\n            window.removeEventListener('scroll', initializeYotpo);\n        }\n    }\n\n    window.addEventListener('scroll', initializeYotpo);\n};",
        "'use strict';\n\nvar $loader;\n\n/**\n * @function\n * @description Shows an AJAX-loader on top of a given container\n * @param {Element} container The Element on top of which the AJAX-Loader will be shown\n */\nvar show = function (container) {\n    var target = (!container || $(container).length === 0) ? $('body') : $(container);\n    $loader = $loader || $('.progress-loader');\n\n    if ($loader.length === 0) {\n        $loader = $('<div/>').addClass('progress-loader')\n            .append($('<i/>').addClass('fa fa-spinner fa-pulse'));\n    }\n    return $loader.appendTo(target).show();\n};\n/**\n * @function\n * @description Hides an AJAX-loader\n */\nvar hide = function () {\n    if ($loader) {\n        $loader.hide();\n    }\n};\n\nexports.show = show;\nexports.hide = hide;\n",
        "'use strict';\n\nvar util = require(27);\n\nvar currentQuery = null,\n    lastQuery = null,\n    runningQuery = null,\n    listTotal = -1,\n    listCurrent = -1,\n    delay = 20,\n    $resultsContainer,\n    $searchForm,\n    $headerElement,\n    $searchField,\n    defaultShopContext = 'webshop',\n    contextAuctionShop = 'auctionshop';\n/**\n * @function\n * @description Handles keyboard's arrow keys\n * @param keyCode Code of an arrow key to be handled\n */\nfunction handleArrowKeys(keyCode) {\n    switch (keyCode) {\n    case 38:\n        // keyUp\n        listCurrent = (listCurrent <= 0) ? (listTotal - 1) : (listCurrent - 1);\n        break;\n    case 40:\n        // keyDown\n        listCurrent = (listCurrent >= listTotal - 1) ? 0 : listCurrent + 1;\n        break;\n    default:\n        // reset\n        listCurrent = -1;\n        return false;\n    }\n\n    $resultsContainer.children().removeClass('selected').eq(listCurrent).addClass('selected');\n    $searchField.val($resultsContainer.find('.selected .suggestionterm').first().text());\n    return true;\n}\n\nvar searchsuggest = {\n    /**\n     * @function\n     * @description Configures parameters and required object instances\n     */\n    init: function (container, defaultValue) {\n        var $searchContainer = $(container),\n            fieldDefault = defaultValue,\n            shopContext = $('body').data('shopcontext') || defaultShopContext;\n\n        $searchForm = $searchContainer.find('form[name=\"simpleSearch\"]');\n        $headerElement = $('.html-hook');\n        $searchField = $searchForm.find('input[name=\"q\"]');\n\n        // disable browser auto complete\n        $searchField.attr('autocomplete', 'off');\n\n        if (shopContext === defaultShopContext || shopContext === contextAuctionShop) {\n            // on focus listener (clear default value)\n            $searchField.on('focus', function () {\n                if (!$resultsContainer) {\n                    // create results container if needed\n                    $resultsContainer = $('<div/>').attr('id', 'search-suggestions').appendTo('.header-wrapper');\n                    $resultsContainer\n                        .addClass('empty')\n                        .on('click', '.search-close-btn', function (e) {\n                            e.preventDefault();\n                            lastQuery = null;\n                            this.clearResults();\n                        }.bind(this))\n                        .on('click', function (e) {\n                            e.stopPropagation();\n                        });\n                }\n\n                // Check if the current value is the placeholder\n                if ($searchField.val() === fieldDefault) {\n                    $searchField.val('');\n                }\n            }.bind(this));\n\n            // on blur listener\n            $(window).on('click', function () {\n                lastQuery = null;\n                this.clearResults();\n            }.bind(this));\n\n            // on key up listener\n            $searchField.on('keyup focus', function (e) {\n                // get keyCode (window.event is for IE)\n                var keyCode = e.keyCode || window.event.keyCode;\n\n                // check and treat up and down arrows\n                if (handleArrowKeys(keyCode)) {\n                    return;\n                }\n                // check for an ENTER or ESC\n                if (keyCode === 13 || keyCode === 27) {\n                    this.clearResults();\n                    return;\n                }\n\n                currentQuery = $searchField.val().trim();\n\n                // no query currently running, init a update\n                if (runningQuery === null) {\n                    runningQuery = currentQuery;\n                    setTimeout(this.suggest.bind(this), delay);\n                }\n            }.bind(this));\n        }\n    },\n\n    /**\n     * @function\n     * @description trigger suggest action\n     */\n    suggest: function () {\n        var shopContext = $('body').data('shopcontext') || defaultShopContext;\n        // check whether query to execute (runningQuery) is still up to date and had not changed in the meanwhile\n        // (we had a little delay)\n        if (runningQuery !== currentQuery) {\n            // update running query to the most recent search phrase\n            runningQuery = currentQuery;\n        }\n\n        // if it's empty clear the results box and return\n        if (runningQuery.length === 0) {\n            this.clearResults();\n            runningQuery = null;\n            return;\n        }\n\n        // if the current search phrase is the same as for the last suggestion call, just return\n        if (lastQuery === runningQuery) {\n            runningQuery = null;\n            return;\n        }\n\n        // build the request url\n        var reqUrl = util.appendParamToURL(Urls.searchsuggest, 'q', runningQuery);\n\n        if (shopContext === contextAuctionShop) {\n            reqUrl += '&cgid=auction-navigation';\n        }\n\n        // execute server call\n        $.get(reqUrl, function (data) {\n            /*jslint regexp: false */\n            var suggestionHTML = data,\n                ansLength = suggestionHTML.replace(/<\\!--.*?-->/g, '').trim().length;\n            /*jslint regexp: true */\n            // if there are results populate the results div\n            if (ansLength === 0) {\n                $resultsContainer.addClass('empty');\n            } else {\n                if ($(window).width() <= 767) {\n                    $('body').css('overflow','hidden');\n                }\n                $resultsContainer.removeClass('empty').html(suggestionHTML).fadeIn(0);\n                $searchForm.addClass('suggestions-active');\n                $headerElement.addClass('suggestions-active-wrapper');\n                $('.wrapper').addClass('search-overlay');\n                util.executeJqueryReadyCallbacks();\n            }\n\n            // record the query that has been executed\n            lastQuery = runningQuery;\n            // reset currently running query\n            runningQuery = null;\n\n            // check for another required update (if current search phrase is different from just executed call)\n            if (currentQuery !== lastQuery) {\n                // ... and execute immediately if search has changed while this server call was in transit\n                runningQuery = currentQuery;\n                setTimeout(this.suggest.bind(this), delay);\n            }\n            this.hideLeftPanel();\n        }.bind(this));\n    },\n    /**\n     * @function\n     * @description\n     */\n    clearResults: function () {\n        if (!$resultsContainer) {\n            return;\n        }\n        $resultsContainer.fadeOut(0, function () {\n            $resultsContainer.empty();\n            $('body').css('overflow','unset');\n            $searchForm.removeClass('suggestions-active');\n            $headerElement.removeClass('suggestions-active-wrapper');\n            $('.wrapper').removeClass('search-overlay');\n        });\n    },\n    /**\n     * @function\n     * @description\n     */\n    hideLeftPanel: function () {\n        //hide left panel if there is only a matching suggested custom phrase\n        if ($('.search-suggestion-left-panel-hit').length === 1 && $('.search-phrase-suggestion a').text()\n                .replace(/(^[\\s]+|[\\s]+$)/g, '').toUpperCase() ===\n                    $('.search-suggestion-left-panel-hit a').text().toUpperCase()) {\n            $('.search-suggestion-left-panel').css('display', 'none');\n            $('.search-suggestion-wrapper-full').addClass('search-suggestion-wrapper');\n            $('.search-suggestion-wrapper').removeClass('search-suggestion-wrapper-full');\n        }\n    }\n};\n\nmodule.exports = searchsuggest;\n",
        "'use strict';\n\n/**\n * @private\n * @function\n * @description Binds event to the place holder (.blur)\n */\nfunction initializeEvents() {\n    $('.simple-search-q').on('focus', function () {\n        var input = $(this);\n        if (input.val() === input.attr('placeholder')) {\n            input.val('');\n        }\n    }).on('blur', function () {\n        var input = $(this);\n        if (input.val() === '' || input.val() === input.attr('placeholder')) {\n            input.val(input.attr('placeholder'));\n        }\n    }).blur();\n\n    $('.header-search button').on('click', function (e) {\n        e.preventDefault();\n        var shopContext = $('body').data('shopcontext') || 'webshop',\n            $searchForm = $(this).parents('form'),\n            $searchInput = $(this).closest('form').find('.simple-search-q'),\n            queryValue = $searchInput.val().trim(),\n            queryPlaceholder = $searchInput.attr('placeholder');\n\n        // do not fire search if we have no value or just the placeholder\n        if (!queryValue.length || queryValue === queryPlaceholder) {\n            return;\n        }\n\n        // submit shop context\n        if (shopContext === 'webshop') {\n            $searchForm.append($('<input>', {'type' : 'hidden', 'name' : 'cgid', 'value' : 'shop-navigation'}));\n        } else {\n            $searchForm.append($('<input>', {'type' : 'hidden', 'name' : 'cgid', 'value' : 'auction-navigation'}));\n        }\n\n        // fire search\n        $searchForm.submit();\n    });\n}\n\nexports.init = initializeEvents;\n",
        "'use strict';\n\nfunction lazyLoadSirvImages() {\n    if (SitePreferences.SIRV_ENABLED && window.SirvEnabled) {\n        var observer = new IntersectionObserver(function(entries, self) {\n            entries.forEach(function(entry){\n                if(entry.isIntersecting) {\n                    Sirv.start(entry.target);\n                    self.unobserve(entry.target);\n                }\n            });\n        });\n\n        var sirvImages = document.querySelectorAll('.Sirv.image-main:not(.sirv-image-loaded)');\n\n        sirvImages.forEach(function(img) {\n            observer.observe(img);\n        });\n    }\n}\n\nmodule.exports = {\n    init: function () {\n        lazyLoadSirvImages();\n    }\n};\n",
        "'use strict';\n\nfunction initStickyComponents() {\n    var hasStickyHeader = document.querySelector('.has-sticky-header');\n    if (!hasStickyHeader || window.innerWidth >= 1279) {\n        return;\n    }\n\n    var mainWrapper = document.querySelector('.main-wrapper');\n    var headerWrapper = document.querySelector('.header-wrapper');\n    var filteOuter = document.querySelector('.search-result-content');\n    var filterWrapper = document.querySelector('.filters-and-sorting-outer.fpc');\n    var gridContainer = document.querySelector('.grid-container');\n\n    var lastScrollTop = 0;\n\n    function updateStickyHeader() {\n        var mainWrapperRect = mainWrapper.getBoundingClientRect();\n        var isSticky = mainWrapperRect.top <= 0;\n\n        headerWrapper.classList.toggle('sticky-header', isSticky);\n        hasStickyHeader.classList.toggle('push-header', isSticky);\n    }\n\n    function updateStickyFilter() {\n        if (!filteOuter || !filterWrapper || !gridContainer) return;\n\n        var filteOuterRect = filteOuter.getBoundingClientRect();\n        var isSticky = filteOuterRect.top <= 0;\n\n        filterWrapper.classList.toggle('sticky-filter', isSticky);\n        gridContainer.classList.toggle('push-grid', isSticky);\n    }\n\n    function updateScrollDirection() {\n        if (!headerWrapper.classList.contains('sticky-header')) {\n            headerWrapper.classList.remove('on', 'off');\n            return;\n        }\n\n        var currentScrollTop = window.scrollY || document.documentElement.scrollTop;\n        var isScrollingDown = currentScrollTop > lastScrollTop;\n\n        headerWrapper.classList.toggle('on', !isScrollingDown);\n        headerWrapper.classList.toggle('off', isScrollingDown);\n\n        if (filterWrapper) {\n            filterWrapper.classList.toggle('with-header', !isScrollingDown);\n        }\n\n        lastScrollTop = currentScrollTop;\n    }\n\n    function handleScroll() {\n        requestAnimationFrame(function() {\n            updateStickyHeader();\n            updateStickyFilter();\n            updateScrollDirection();\n        });\n    }\n\n    window.addEventListener('scroll', handleScroll);\n}\n\nexports.init = function () {\n    initStickyComponents();\n};",
        "'use strict';\n\n/**\n * @function\n * @description Initializes the tooltip-content and layout\n */\nexports.init = function () {\n    $(document).tooltip({\n        items: '.tooltip',\n        track: true,\n        content: function () {\n            return $(this).find('.tooltip-content').html();\n        }\n    });\n};\n",
        "/**\n * This module is used to initialize [UniformJS]{@link https://uniformjs.com/}.\n */\n'use strict';\n\nmodule.exports = function () {\n    var sUniformStyled = 'uniformstyled';\n    $(['input:checkbox', 'input:radio', '.opc .existing-card-section #existing-paysafe-card']).each(function () {\n        $(this + ':not(.' + sUniformStyled + ')').not('.no-uniform').addClass(sUniformStyled).uniform();\n    });\n};",
        "/* global Countries */\n/*jslint nomen: true */\n\n'use strict';\n\nvar util = {\n    /**\n     * @function\n     * @description adds generic toggle functionality to all .toggle in a container\n     * @param {jQuery Object} $target The target container for this, defaults to document\n     */\n    addToggleEvents: function ($target) {\n        if ($target === null || $target === undefined) {\n            $target = $(document);\n        }\n        var refinementFlag = false;\n        $target.find('.toggle').on('click', function () {\n            var $toggleTrigger = $(this),\n                $toggleContent = $toggleTrigger.next('.toggle-content');\n            $toggleTrigger.add($toggleContent).toggleClass('expanded').toggleClass('collapsed');\n            $toggleContent.slideToggle();\n        }).each(function (length, value) {\n            var $this = $(this),\n                $toggleContent = $this.next('.toggle-content');\n            if($this.hasClass('refinement-headline') && $this.is(\":visible\")){\n                if(refinementFlag){\n                    //$this.removeClass('expanded').addClass('collapsed');\n                    $this.add($toggleContent).removeClass('expanded').addClass('collapsed');\n                    $toggleContent.hide();\n                }else{\n                    refinementFlag = true;\n                }\n            }\n        });\n    },\n    /**\n     * @function\n     * @description appends the parameter with the given name and value to the given url and returns the changed url\n     * @param {String} url the url to which the parameter will be added\n     * @param {String} name the name of the parameter\n     * @param {String} value the value of the parameter\n     */\n    appendParamToURL: function (url, name, value) {\n        // quit if the param already exists\n        if (url.indexOf(name + '=') !== -1) {\n            return url;\n        }\n        var separator = url.indexOf('?') !== -1 ? '&' : '?';\n        return url + separator + name + '=' + encodeURIComponent(value);\n    },\n    /**\n     * @function\n     * @description appends the parameters to the given url and returns the changed url\n     * @param {String} url the url to which the parameters will be added\n     * @param {Object} params\n     */\n    appendParamsToUrl: function (url, params) {\n        var theUrl = url;\n        $.each(params, function (name, value) {\n            theUrl = this.appendParamToURL(theUrl, name, value);\n        }.bind(this));\n        return theUrl;\n    },\n    isString: function(value) {\n        return typeof value == 'string' || Object.prototype.toString.call(value) === '[object String]';\n    },\n    /**\n     * @param val\n     * @returns {*|boolean}\n     */\n    isMergeableObject: function(val) {\n        var nonNullObject = val && typeof val === 'object';\n        return nonNullObject &&\n            Object.prototype.toString.call(val) !== '[object RegExp]' &&\n            Object.prototype.toString.call(val) !== '[object Date]';\n    },\n    /**\n     * @param val\n     * @returns {*}\n     */\n    emptyTarget: function(val) {\n        return Array.isArray(val) ? [] : {}\n    },\n    /**\n     * @param value\n     * @param optionsArgument\n     * @returns {*}\n     */\n    cloneIfNecessary: function(value, optionsArgument) {\n        var clone = optionsArgument && optionsArgument.clone === true;\n        return (clone && this.isMergeableObject(value)) ? this.merge(this.emptyTarget(value), value, optionsArgument) : value;\n    },\n    /**\n     * @param target\n     * @param source\n     * @param optionsArgument\n     * @returns {*}\n     */\n    defaultArrayMerge: function(target, source, optionsArgument) {\n        var destination = target.slice();\n        source.forEach(function (e, i) {\n            if (typeof destination[i] === 'undefined') {\n                destination[i] = this.cloneIfNecessary(e, optionsArgument);\n            } else if (this.isMergeableObject(e)) {\n                destination[i] = this.merge(target[i], e, optionsArgument);\n            } else if (target.indexOf(e) === -1) {\n                destination.push(this.cloneIfNecessary(e, optionsArgument));\n            }\n        });\n        return destination;\n    },\n    /**\n     * @param target\n     * @param source\n     * @param optionsArgument\n     * @returns {{}}\n     */\n    mergeObject: function (target, source, optionsArgument) {\n        var destination = {};\n        if (this.isMergeableObject(target)) {\n            Object.keys(target).forEach(function (key) {\n                destination[key] = util.cloneIfNecessary(target[key], optionsArgument)\n            })\n        }\n        Object.keys(source).forEach(function (key) {\n            if (!util.isMergeableObject(source[key]) || !target[key]) {\n                destination[key] = util.cloneIfNecessary(source[key], optionsArgument)\n            } else {\n                destination[key] = util.merge(target[key], source[key], optionsArgument)\n            }\n        });\n        return destination\n    },\n    /**\n     * @param target\n     * @param source\n     * @param optionsArgument\n     * @returns {*}\n     */\n    merge: function(target, source, optionsArgument) {\n        var array = Array.isArray(source);\n        var options = optionsArgument || {arrayMerge: this.defaultArrayMerge};\n        var arrayMerge = options.arrayMerge || this.defaultArrayMerge;\n        if (array) {\n            return Array.isArray(target) ? arrayMerge(target, source, optionsArgument) : this.cloneIfNecessary(source, optionsArgument);\n        } else {\n            return this.mergeObject(target, source, optionsArgument);\n        }\n    },\n    without: function(array, elements) {\n        var newArray = [];\n        for(var el in array) {\n            if (elements.indexOf(el) === -1) {\n                newArray.push(el);\n            }\n        }\n        return newArray;\n    },\n    /**\n     * @function\n     * @description extract the query string from URL\n     * @param {String} url the url to extra query string from\n     **/\n    getQueryString: function (url) {\n        var qs,\n            a;\n        if (!this.isString(url)) {\n            return undefined;\n        }\n        a = document.createElement('a');\n        a.href = url;\n        if (a.search) {\n            qs = a.search.substr(1); // remove the leading ?\n        }\n        return qs;\n    },\n    /**\n     * @function\n     * @description\n     * @param {String}\n     */\n    elementInViewport: function (el) {\n        var rect = el.getBoundingClientRect();\n        return (\n            rect.top >= 0 &&\n            rect.left >= 0 &&\n            rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n            rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n        );\n    },\n\n    /**\n     * @function\n     * @description Appends the parameter 'format=ajax' to a given path\n     * @param {String} path the relative path\n     */\n    ajaxUrl: function (path) {\n        return this.appendParamToURL(path, 'format', 'ajax');\n    },\n\n    /**\n     * @function\n     * @description\n     * @param {String} url\n     */\n    toAbsoluteUrl: function (url) {\n        if (url.indexOf('http') !== 0 && url.charAt(0) !== '/') {\n            url = '/' + url;\n        }\n        return url;\n    },\n    /**\n     * @function\n     * @description Loads css dynamically from given urls\n     * @param {Array} urls Array of urls from which css will be dynamically loaded.\n     */\n    loadDynamicCss: function (urls) {\n        var i, len = urls.length;\n        for (i = 0; i < len; i++) {\n            this.loadedCssFiles.push(this.loadCssFile(urls[i]));\n        }\n    },\n\n    /**\n     * @function\n     * @description Loads javascript files dynamically from given url\n     * @param {String} url The url from which css file will be dynamically loaded.\n     */\n    loadScripts: function (scripts) {\n        for (var index = 0; index < scripts.length; index++) {\n            var element = scripts[index];\n            var script = document.createElement('script');\n            script.src = element;\n            script.async = false;\n            document.body.appendChild( script );\n        }\n    },\n\n    /**\n     * @function\n     * @description Loads css file dynamically from given url\n     * @param {String} url The url from which css file will be dynamically loaded.\n     */\n    loadCssFile: function (url) {\n        return $('<link/>').appendTo($('head')).attr({\n            type: 'text/css',\n            rel: 'stylesheet'\n        }).attr('href', url); // for i.e. <9, href must be added after link has been appended to head\n    },\n    // array to keep track of the dynamically loaded CSS files\n    loadedCssFiles: [],\n\n    /**\n     * @function\n     * @description Removes all css files which were dynamically loaded\n     */\n    clearDynamicCss: function () {\n        var i = this.loadedCssFiles.length;\n        while (i-- < 0) {\n            $(this.loadedCssFiles[i]).remove();\n        }\n        this.loadedCssFiles = [];\n    },\n    /**\n     * @function\n     * @description Extracts all parameters from a given query string into an object\n     * @param {String} qs The query string from which the parameters will be extracted\n     */\n    getQueryStringParams: function (qs) {\n        if (!qs || qs.length === 0) {\n            return {};\n        }\n        var params = {},\n            unescapedQS = decodeURIComponent(qs);\n        // Use the String::replace method to iterate over each\n        // name-value pair in the string.\n        /*jslint unparam: true */\n        unescapedQS.replace(new RegExp('([^?=&]+)(=([^&]*))?', 'g'),\n            function ($0, $1, $2, $3) {\n                params[$1] = $3;\n            });\n        /*jslint unparam: false */\n        return params;\n    },\n\n    fillAddressFields: function (address, $form) {\n        var field;\n        for (field in address) {\n            if (address.hasOwnProperty(field)) {\n                /*jslint continue: true */\n                if (field === 'ID' || field === 'UUID' || field === 'key') {\n                    continue;\n                }\n                /*jslint continue: false */\n                // if the key in address object ends with 'Code', remove that suffix\n                // keys that ends with 'Code' are postalCode, stateCode and countryCode\n                $form.find('[name$=\"' + field.replace('Code', '') + '\"]').val(address[field]);\n                // update the state fields\n                if (field === 'countryCode') {\n                    $form.find('[name$=\"country\"]').trigger('change');\n                    // retrigger state selection after country has changed\n                    // this results in duplication of the state code, but is a necessary evil\n                    // for now because sometimes countryCode comes after stateCode\n                    $form.find('[name$=\"state\"]').val(address.stateCode);\n                }\n            }\n        }\n    },\n    /**\n    * @function\n    * @description Adds a error message to a form\n    * @param {jQueryObject} $form The form\n    * @param {String} message The error message\n    */\n    addGeneralFormError: function ($form, message) {\n        var $closeIcon = $('<i/>').addClass('fa fa-times'),\n            $closeButton = $('<a/>', {title: 'Close'}).addClass('button button-icon button-transparent'),\n            $messageContent = $('<div/>').addClass('message-content').text(message),\n            $messageInner = $('<div/>').addClass('message-inner'),\n            $messageErrorForm = $('<div/>').addClass('message error-form');\n\n        $closeButton.append($closeIcon);\n        $messageContent.append($closeButton);\n        $messageInner.append($messageContent);\n        $messageErrorForm.append($messageInner).hide();\n        $form.find('.message.error-form').remove();\n        $messageErrorForm.prependTo($form).fadeIn();\n    },\n    /**\n     * @function\n     * @description Removes the error message to a form\n     * @param {jQueryObject} $form The form\n     */\n    removeGeneralFormError: function ($form) {\n        $form.find('.message.error-form').remove();\n    },\n    /**\n     * @function\n     * @description Updates the states options to a given country\n     * @param {String} countrySelect The selected country\n     */\n    updateStateOptions: function (form) {\n        var $form = $(form),\n            $country = $form.find('select[id$=\"_country\"]'),\n            country = Countries[$country.val()],\n            arrHtml = [],\n            $stateField,\n            $postalField,\n            $stateLabel,\n            $postalLabel,\n            prevStateValue,\n            s,\n            o1;\n        if ($country.length === 0 || !country) {\n            return;\n        }\n        $stateField = $country.data('stateField') || $form.find('select[name$=\"_state\"]');\n        $postalField = $country.data('postalField') || $form.find('input[name$=\"_postal\"]');\n        $stateLabel = ($stateField.length > 0) ? $form.find('label[for=\"' + $stateField[0].id + '\"] span')\n            .not('.required-indicator') : undefined;\n        $postalLabel = ($postalField.length > 0) ? $form.find('label[for=\"' + $postalField[0].id + '\"] span')\n            .not('.required-indicator') : undefined;\n        prevStateValue = $stateField.val();\n        // set the label text\n        if ($postalLabel) {\n            $postalLabel.html(country.postalLabel);\n        }\n        if ($stateLabel) {\n            $stateLabel.html(country.regionLabel);\n        } else {\n            return;\n        }\n        for (s in country.regions) {\n            if (country.regions.hasOwnProperty(s)) {\n                arrHtml.push('<option value=\"' + s + '\">' + country.regions[s] + '</option>');\n            }\n        }\n        // clone the empty option item and add to stateSelect\n        o1 = $stateField.children().first().clone();\n        $stateField.html(arrHtml.join('')).removeAttr('disabled').children().first().before(o1);\n        // if a state was selected previously, save that selection\n        if (prevStateValue && $.inArray(prevStateValue, country.regions)) {\n            $stateField.val(prevStateValue);\n        } else {\n            $stateField[0].selectedIndex = 0;\n        }\n    },\n    /**\n     * @function\n     * @description Updates the number of the remaining character\n     * based on the character limit in a text area\n     */\n    limitCharacters: function () {\n        $('form').find('textarea[data-character-limit]').each(function () {\n            var characterLimit = $(this).data('character-limit'),\n                charCountHtml = String.format(Resources.CHAR_LIMIT_MSG,\n                    '<span class=\"char-remain-count\">' + characterLimit + '</span>',\n                    '<span class=\"char-allowed-count\">' + characterLimit + '</span>'),\n                charCountContainer = $(this).next('div.char-count');\n            if (charCountContainer.length === 0) {\n                charCountContainer = $('<div class=\"char-count\"/>').insertAfter($(this));\n            }\n            charCountContainer.html(charCountHtml);\n            // trigger the keydown event so that any existing character data is calculated\n            $(this).change();\n        });\n    },\n    /**\n     * @function\n     * @description Binds the onclick-event to a delete button on a given container,\n     * which opens a confirmation box with a given message\n     * @param {String} container The name of element to which the function will be bind\n     * @param {String} message The message the will be shown upon a click\n     */\n    setDeleteConfirmation: function (container, message) {\n        /*eslint-disable no-alert */\n        $(container).on('click', '.delete', function () {\n            return window.confirm(message);\n        });\n        /*eslint-enable no-alert */\n    },\n    /**\n     * @function\n     * @description Scrolls a browser window to a given x point\n     * @param {String} The x coordinate\n     */\n    scrollBrowser: function (xLocation) {\n        $('html, body').animate({scrollTop: xLocation}, 500);\n    },\n\n    isMobile: function () {\n        if ($(window).width() < 767) {\n            return true;\n        }\n        var mobileAgentHash = ['mobile', 'tablet', 'phone', 'ipad', 'ipod', 'android', 'blackberry', 'windows ce',\n                'opera mini', 'palm'],\n            idx = 0,\n            isMobile = false,\n            userAgent = (navigator.userAgent).toLowerCase();\n\n        while (mobileAgentHash[idx] && !isMobile) {\n            isMobile = (userAgent.indexOf(mobileAgentHash[idx]) >= 0);\n            idx++;\n        }\n        return isMobile;\n    },\n\n    timer: function () {\n        var id,\n            clear;\n        clear = function () {\n            if (id) {\n                window.clearTimeout(id);\n                id = null;\n            }\n        };\n        return {\n            clear: clear,\n            start: function (duration, callback) {\n                clear();\n                id = setTimeout(callback, duration);\n            }\n        };\n    },\n\n    getCountrySettings : function (countryCode) {\n        var i;\n        if (Countries === undefined || Countries === null || typeof Countries !== 'object') {\n            return null;\n        }\n\n        for (i in Countries) {\n            if (Countries.hasOwnProperty(i)) {\n                if (Countries[i].code === countryCode) {\n                    return Countries[i];\n                }\n            }\n        }\n\n        return null;\n    },\n    disguisePassword : function () {\n        $('.icon-password').on('click', function () {\n            var $this = $(this), $passwordField = $this.closest('.form-row-password').find('.input-text');\n\n            if (!$this.hasClass('show')) {\n                $passwordField.removeAttr('type');\n                $passwordField.prop('type', 'password');\n            } else {\n                $passwordField.removeAttr('type');\n                $passwordField.prop('type', 'text');\n            }\n            $this.toggleClass('show');\n        });\n    },\n    closeHandlerForErrorMessages : function () {\n        $('.message.error-form').on('click', function () {\n            $(this).remove();\n        });\n    },\n    /**\n     * @function\n     * @description Get parameter value from URL\n     * @param {String} \"name\" parameter for which the value need to get\n     * @param {String} \"url\" parameter from where the value must be fetched\n     * @param {String} \"results\" parameter returns the value of the respective name\n     */\n    getParamFromUrl: function (name, url) {\n        var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(url);\n        if(results != null){\n            if(results.length > 0){\n                return results[1];\n            }\n        }\n        return 0;\n    },\n     /**\n     * @function toggleEvent\n     * @description toggle events\n     */\n    toggleEvent: function () {\n        $(document).on('click', '[data-toggle]', function () {\n            var $targetContent = $('#' + $(this).attr('data-toggle-element')),\n                $slideEvent = $(this).attr('data-toggle-slide'),\n                $arrow = $(this).find('[data-toggle-arrow=\"true\"]'),\n                $expandtrue = $targetContent.attr('data-toggle-expand');\n                if ($expandtrue != 'false') {\n                    $slideEvent !== 'false' &&  $slideEvent !== undefined ? $targetContent.slideUp() : '';\n                    $targetContent.attr('data-toggle-expand', 'false');\n                    $(this).attr('data-toggle', 'collapsed');\n                    $arrow.removeClass('fa-chevron-up');\n                } else {\n                    $slideEvent !== 'false' &&  $slideEvent !== undefined ? $targetContent.slideDown() : '';\n                    $targetContent.attr('data-toggle-expand', 'true');\n                    $(this).attr('data-toggle', 'expanded');\n                    $arrow.addClass('fa-chevron-up');\n                }\n        });\n    },\n    setCookie: function(cname, cvalue, exdays, expiresDate) {\n        var d = new Date();\n        d.setTime(d.getTime() + (exdays*24*60*60*1000));\n        var expires = \"expires=\"+ d.toUTCString();\n        if (expiresDate) {\n            expires = \"expires=\"+ expiresDate;\n        }\n        document.cookie = cname + \"=\" + cvalue + \";\" + expires + \";path=/\";\n    },\n    getCookie: function(cname) {\n        var name = cname + \"=\";\n        var decodedCookie = decodeURIComponent(document.cookie);\n        var ca = decodedCookie.split(';');\n        for(var i = 0; i <ca.length; i++) {\n            var c = ca[i];\n            while (c.charAt(0) == ' ') {\n                c = c.substring(1);\n            }\n            if (c.indexOf(name) == 0) {\n                return c.substring(name.length, c.length);\n            }\n        }\n        return \"\";\n    },\n    deleteCookie: function(name) {\n        document.cookie = [name, '=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.', window.location.host.toString()].join('');\n    },\n     showPopup: function(cname, cvalue, exhours) {\n            var d = new Date();\n            d.setTime(d.getTime() + (exhours*60*60*1000));\n            var expires = \"expires=\"+ d.toUTCString();\n            document.cookie = cname + \"=\" + cvalue + \";\" + expires + \";path=/\";\n    },\n    /**\n     * @function\n     * @description get the name of the browser\n     */\n    browsername:function () {\n        if((navigator.userAgent.indexOf(\"Opera\") || navigator.userAgent.indexOf('OPR')) != -1 ) {\n            return 'Opera';\n        } else if(navigator.userAgent.indexOf(\"Chrome\") != -1 ) {\n            return 'Chrome';\n        } else if(navigator.userAgent.indexOf(\"Safari\") != -1) {\n            return 'Safari';\n        } else if(navigator.userAgent.indexOf(\"Firefox\") != -1 ){\n            return 'Firefox';\n        } else if((navigator.userAgent.indexOf(\"MSIE\") != -1 ) || (!!document.documentMode == true )) {\n            return 'IE';//crap\n        } else {\n            return 'Unknown';\n        }\n    },\n    /**\n     * @function\n     * @description custom select box\n     */\n    customSelectBox: function () {\n        $('select:not(.non-custom-select)').each(function () {\n            // Cache the number of options\n            var $this = $(this),\n                numberOfOptions = $(this).children('option').length;\n\n             var a = $(this).find('option:selected').text();\n\n            // Hides the select element\n            $this.addClass('s-hidden');\n\n            // Wrap the select element in a div\n           $this.wrap('<div class=\"select\"></div>');\n\n\n            // Insert a styled div to sit over the top of the hidden select element\n            $this.after('<div class=\"styledSelect\"></div>');\n\n\n            // Cache the styled div\n            var $styledSelect = $this.next('div.styledSelect');\n\n            // Show the first select option in the styled div\n               $styledSelect.html($(this).find('option:selected').text());\n\n               if($(this).closest('.select').find('.styledSelect').text().indexOf('Select')!=0) {\n                $(this).closest('.select').find('.styledSelect').addClass('engravefield-disabled');\n               }\n\n               if ($this.next('div.styledSelect').text().indexOf('Select')==0) {\n                $this.next('div.styledSelect').find('.soldout-text').hide();\n               }\n\n\n            // Insert an unordered list after the styled div and also cache the list\n            var $list = $('<ul />', {\n                'class': 'options'\n            }).insertAfter($styledSelect);\n\n\n            // Insert a list item into the unordered list for each select option\n            for (var i = 0; i < numberOfOptions; i++) {\n                $('<li />', {\n                    text: $this.children('option').eq(i).text(),\n                    rel: $this.children('option').eq(i).val()\n                }).appendTo($list);\n            }\n\n            if ($(this).closest('.engraving-form').length > 0) {\n                $list.find('li').each(function (i) {\n                    $(this).html($(this).text());\n                });\n                $('.soldout-text').closest('li').addClass('disabledLi');\n                //$list.find('li:first').removeClass('disabledLi');\n                //$list.find('li:first .soldout-text').hide();\n               // $styledSelect.html($(this).find('option:selected').text());\n            }\n\n            // Cache the list items\n            var $listItems = $list.children('li');\n\n            // Show the unordered list when the styled div is clicked (also hides it if the div is clicked again)\n            $styledSelect.click(function (e) {\n                e.stopPropagation();\n                $('body').addClass('selectopen');\n                $this.after('<div class=\"overlaybg\"></div>');\n                $('.options li:first-child').before('<div class=\"select-close\"></div>');\n                $('div.styledSelect.active').each(function () {\n                    $(this).removeClass('active').next('.optiongroup').hide();\n                });\n                  $(this).toggleClass('active').next('.optiongroup').toggle();\n\n            });\n\n            // Hides the unordered list when a list item is clicked and updates the styled div to show the selected list item\n            // Updates the select element to have the value of the equivalent option\n            $listItems.click(function (e) {\n                if($(this).hasClass('disabledLi')) {\n                    return false;\n                }\n                e.stopPropagation();\n                  $('body').removeClass('selectopen');\n                  $('.overlaybg').remove();\n                  $('.select-close').remove();\n                 $styledSelect.text($(this).text()).removeClass('active');\n                 $this.val($(this).attr('rel'));\n                  $list.hide();\n                  $('.optiongroup').hide();\n                 $(this).closest('.select').find('select').trigger(\"change\");\n\n\n            });\n\n            // Hides the unordered list when clicking outside of it\n            $('#wrapper').click(function () {\n                $('.styledSelect').removeClass('active');\n                $list.hide();\n                 $('.optiongroup').hide();\n                $('body').removeClass('selectopen');\n                 $('.overlaybg').remove();\n                 $('.select-close').remove();\n\n\n            });\n\n            $('#qb-activation-page').click(function () {\n            $('.styledSelect').removeClass('active');\n            $list.hide();\n            $('.optiongroup').hide();\n            $('body').removeClass('selectopen');\n             $('.overlaybg').remove();\n             $('.select-close').remove();\n\n            });\n\n\n            $(\".styledSelect\").on(\"click\", function(){\n              $(this).siblings('select').trigger('blur');\n           });\n\n          $(\".options li\").on(\"click\", function(){\n           $(this).parents().siblings('select').trigger('blur');\n          });\n\n         });\n\n        $('ul.options').wrap('<div class=\"optiongroup\"></div>');\n\n          // Restrict more select append\n           if( $('.select > .select')) {\n             $('.select').closest('.select').siblings('.styledSelect').remove();\n              $('.select').closest('.select').siblings('.optiongroup').remove();\n\n            }\n\n        // Auto fucts when text box having a value\n        $(\".input-text\").each(function () {\n          if( $(this).val().length > 0 ) {\n                $(this).siblings(\".label\").addClass('focus-active');\n            }\n\n         });\n    },\n    toast: function(element, options) {\n        var fade = options && options.fade ? options.fade : 600;\n        var duration = options && options.duration ? options.duration: 3000;\n        var shake = options && options.shake ? options.shake : false;\n\n        if (element) {\n            element.addClass('toast-show');\n            element.fadeIn(fade);\n            if (shake) {\n                element.addClass('shake');\n            }\n        };\n\n        setTimeout(function() {\n            element.fadeOut(fade || 600, function() {\n                element.removeClass('toast-show');\n                if (shake) {\n                    element.removeClass('shake');\n                }\n            });\n        }, duration);\n    },\n    debounce: function(func, delay, options) {\n        var timerId;\n        var shouldInvoke;\n        var leading = options && options.leading;\n      \n        return function() {\n            var args = Array.prototype.slice.call(arguments);\n            shouldInvoke = true;\n        \n            if (!timerId && leading) {\n                func.apply(this, args);\n                shouldInvoke = false;\n            }\n        \n            clearTimeout(timerId);\n        \n            timerId = setTimeout(function() {\n                if (shouldInvoke) {\n                    func.apply(this, args);\n                }\n            }, delay);\n        };\n    }\n};\n\nutil.executeJqueryReadyCallbacks = function () {\n    if (window.jqueryReadyCallbacks && $.isArray(window.jqueryReadyCallbacks)) {\n        /*jslint unparam: true */\n        $.each(window.jqueryReadyCallbacks, function (i, callback) {\n            if ($.isFunction(callback)) {\n                callback(util);\n            }\n        });\n        /*jslint unparam: false */\n        window.jqueryReadyCallbacks = [];\n    }\n};\n\nutil.countDownTimer = function(container) {\n    var countDownMinutes = container.attr('data-minutes');\n    var date = new Date();\n    var countDownDate = new Date(date.setMinutes(date.getMinutes() + parseInt(countDownMinutes))).getTime();\n\n    function updateTimer() {\n        var timer;\n        var now = new Date().getTime();\n        var distance = countDownDate - now;\n        \n        if (distance <= 0) {\n            distance = 0;\n            clearTimeout(timer);\n        }\n\n        var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\n        var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\n        var seconds = Math.floor((distance % (1000 * 60)) / 1000);\n\n        container.find('.hrs').text(('0' + hours).slice(-2));\n        container.find('.min').text(('0' + minutes).slice(-2));\n        container.find('.sec').text(('0' + seconds).slice(-2));\n\n        if (distance > 0) {\n            var nextTick = 1000 - (now % 1000);\n            timer = setTimeout(updateTimer, nextTick);\n        }\n    }\n\n    setTimeout(updateTimer, 1000 - (new Date().getTime() % 1000));\n}\n\nmodule.exports = util;\n",
        "'use strict';\n\n/*jslint regexp: true */\nvar naPhone = /^\\(?([2-9][0-8][0-9])\\)?[\\-\\. ]?([2-9][0-9]{2})[\\-\\. ]?([0-9]{4})(\\s*x[0-9]+)?$/,\n    regex = {\n        phone: {\n            us: naPhone,\n            ca: naPhone\n        },\n        mobile: /([0-9]*)$/,\n        postal: {\n            us: /^\\d{5}(-\\d{4})?$/,\n            ca: /^[ABCEGHJKLMNPRSTVXY]{1}\\d{1}[A-Z]{1} *\\d{1}[A-Z]{1}\\d{1}$/,\n            gb: new RegExp('^GIR?0AA|[A-PR-UWYZ]([0-9]{1,2}|' +\n                '([A-HK-Y][0-9]|[A-HK-Y][0-9]([0-9]|[ABEHMNPRV-Y]))|[0-9][A-HJKS-UW])?[0-9][ABD-HJLNP-UW-Z]{2}$')\n        },\n        email: /^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$/,\n        name: /^[a-zA-Z \\.']*$/,\n        orderNumber: /^[A-Za-z0-9]{0,12}$/,\n        textArea: /^[a-zA-Z0-9\\s.,?!():]*$/,\n        newEmail: /^\\w+([\\.\\-]?\\w+)*@\\w+([\\.\\-]?\\w+)*(\\.\\w{2,3})+$/,\n        notCC: /^(?!(([0-9 \\-]){13,19})).*$/\n    },\n    overrideErrorClass = 'validation-error',\n    overrideValidClass = 'validation-success',\n    settings = {\n        // global form validator settings\n        errorElement: 'div',\n        errorClass: 'error-msg',\n        highlight: function (element) {\n                $(element).closest('.form-row').addClass(overrideErrorClass);\n                $(element).closest('.form-row').removeClass(overrideValidClass);\n        },\n        unhighlight: function (element) {\n            if (element.value.trim() !== '') { // Check if input has a value\n                var $errorMsg = $(element).closest('.form-row').find('.error-msg');\n                if (!$errorMsg.hasClass('custom-error')) {\n                    $(element).closest('.form-row').removeClass(overrideErrorClass).addClass(overrideValidClass);\n                    $errorMsg.remove();\n                }\n            }\n        },\n        errorPlacement: function (error, element) {\n            if (element.parents('.form-row-birthdate').length > 0) {\n                element.parents('.form-row-birthdate > .field').append(error);\n            } else {\n                element.parents('.form-row:not(.form-row-float) > .field').find('.error-msg').remove();\n                element.parents('.form-row:not(.form-row-float) > .field').append(error);\n            }\n\n            if ($('.registration-alt').length > 0) {\n                var top = (element.outerHeight() / 2) - (error.outerHeight() / 2),\n                    right = -(error.outerWidth() + 25),\n                    position = 'absolute',\n                    $fieldset = error.closest('fieldset'),\n                    errorSiblings = error.siblings('.form-row-float'),\n                    aClass = 'a' + (Math.random() + 1).toString(36).substring(7),\n                    arrowRight;\n\n                if (element.parents('.form-row-with-button').length > 0) {\n                    right -= element.parents('.form-row-with-button').find('.button-container').outerWidth() + 10;\n                }\n\n                error.css('position', position);\n                error.css('top', top);\n                error.css('right', right);\n                error.addClass(aClass);\n\n                setTimeout(function () {\n                    if (($fieldset.position().left + $fieldset.outerWidth() - 10) <\n                            (error.position().left + error.outerWidth())) {\n                        error.css('position', 'relative');\n                        error.css('right', 0);\n                        error.addClass('error-msg-mobile');\n\n                        if (element.parents('.form-row-with-button').length > 0) {\n                            error.css('margin-top', -10);\n                        }\n\n                        if (element.parents('.form-row-with-button').length > 0) {\n                            element.parents('.form-row-with-button').parent().append(error);\n                        }\n\n                        if (errorSiblings.length > 0) {\n                            error.parent().parent().append(error);\n                        }\n\n                        if (element.parents('.form-row-birthdate').length > 0) {\n                            error.parent().parent().append(error);\n                        }\n\n                        arrowRight = ((error.outerWidth() / 2) - 5);\n                    } else {\n                        arrowRight = (error.outerWidth() - 10);\n                    }\n\n                    $('<style>.' + aClass + ':before {right: ' +\n                            arrowRight + 'px !important;}</style>').appendTo('head');\n                }, 1);\n            }\n        },\n        showErrors: function () {\n            this.defaultShowErrors();\n\n            //$('.error-msg').each(function () {\n                //var $this = $(this);\n\n                //if ($this.find('.close-icon').length === 0) {\n                    //$this.append('<span class=\"close-icon fa fa-times\"></span>');\n                //}\n            //});\n        },\n        onkeyup: false,\n        onfocusout: function (element) {\n            if (!this.checkable(element)) {\n                this.element(element);\n            }\n        }\n    };\n/*jslint regexp: false */\n\n/**\n * @function\n * @description Validates a given phone number against the countries phone regex\n * @param {String} value The phone number which will be validated\n * @param {String} el The input field\n */\nvar validatePhone = function (value) {\n    return value.trim() === '' || ($.isNumeric(value) && value.trim().length === 11);\n};\n\n/**\n * @function\n * @description Validates a given phone number against the countries phone regex\n * @param {String} value The phone number which will be validated\n * @param {String} el The input field\n */\n var validatePhoneWithSeven = function (value) {\n    var reg = new RegExp('^(?=0[7])\\\\d{11}$', 'i');\n    return value.trim() === '' || (reg.test(value.trim()) && value.trim().length === 11);\n};\n\n/**\n * @function\n * @description Validates a given mobile number against the UK mobile regex\n * @param {String} value The mobile number which will be validated\n * @param {String} el The input field\n */\nvar validateMobile = function (value) {\n    return value.trim() === '' || (regex.mobile.test(value.trim()) && value.trim().length === 11);\n};\n\n/**\n * @function\n * @description Validates a given email\n * @param {String} value The email which will be validated\n * @param {String} el The input field\n */\nvar validateEmail = function (value, el) {\n    var isOptional = this.optional(el),\n        isValid = regex.email.test($.trim(value));\n    return isOptional || isValid;\n};\n\n/**\n * @function\n * @description Validates a given name\n * @param {String} value The name which will be validated\n * @param {String} el The input field\n */\nvar validateName = function (value, el) {\n    var isOptional = this.optional(el),\n        isValid = regex.name.test($.trim(value));\n    return isOptional || isValid;\n};\n\n/**\n * @function\n * @description Validates a given order number\n * @param {String} value The order number which will be validated\n * @param {String} el The input field\n */\nvar validateOrderNumber = function (value, el) {\n    var isOptional = this.optional(el),\n        isValid = regex.orderNumber.test($.trim(value));\n    return isOptional || isValid;\n};\n\n/**\n * @function\n * @description Validates a given text area\n * @param {String} value Text area which will be validated\n * @param {String} el Text area\n */\nvar validateTextArea = function (value, el) {\n    var isOptional = this.optional(el),\n        isValid = regex.textArea.test($.trim(value));\n    return isOptional || isValid;\n};\n\n/**\n * @function\n * @description Validates a confirmation field against another field\n * @param {String} value The value which will be validated\n * @param {String} el The input field\n */\nvar validateTwoFields = function (value, el) {\n    var $otherField = $('.' + $(el).data('crossvalidationclass'));\n    return value === $otherField.val();\n};\n\n/**\n * @function\n * @description Validates that a credit card owner is not a Credit card number\n * @param {String} value The owner field which will be validated\n * @param {String} el The input field\n */\nvar validateOwner = function (value) {\n    var isValid = regex.notCC.test($.trim(value));\n    return isValid;\n};\n\n/**\n * @function\n * @description Validates that a day is valid against the month and the year\n * @param {String} value The owner field which will be validated\n * @param {String} el The input field\n */\nvar validateDay = function (value, el) {\n    var daysInMonth = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n        $day = $(el),\n        $month = $('.' + $day.data('monthclass')),\n        $year = $('.' + $day.data('yearclass')),\n        isValid = false;\n    if (!value && !$month.val() && !$year.val()) {\n        isValid = true;\n    } else {\n        if (!$year.val() || Number($year.val()) % 4 === 0) {\n            daysInMonth[2] = 29;\n        }\n        if (!$month.val()) {\n            isValid = true;\n        } else if (Number(value) <= daysInMonth[Number($month.val())]) {\n            isValid = true;\n        }\n    }\n    return isValid;\n};\n\n/**\n * @function\n * @description Validates month against the day and the year\n * @param {String} value The owner field which will be validated\n * @param {String} el The input field\n */\nvar validateMonth = function (value, el) {\n    var $month = $(el),\n        $day = $('.' + $month.data('dayclass')),\n        $year = $('.' + $month.data('yearclass')),\n        isValid = false;\n    if ($day.val() || (!$day.val() && !value && !$year.val())) {\n        isValid = true;\n        this.check($day);\n    }\n    return isValid;\n};\n\n/**\n * @function\n * @description Validates the year against the day and the month\n * @param {String} value The owner field which will be validated\n * @param {String} el The input field\n */\nvar validateYear = function (value, el) {\n    var $year = $(el),\n        $day = $('.' + $year.data('dayclass')),\n        $month = $('.' + $year.data('monthclass')),\n        isValid = false;\n    if ($month.val() || (!$day.val() && !$month.val() && !value)) {\n        isValid = true;\n        this.check($month);\n    }\n    return isValid;\n};\n\n\n/**\n * Add phone validation method to jQuery validation plugin.\n * Text fields must have 'phone' css class to be validated as phone\n */\n $.validator.addMethod('phonenumberwithseven', validatePhoneWithSeven, Resources.INVALID_MOBILE);\n\n\n/**\n * Add phone validation method to jQuery validation plugin.\n * Text fields must have 'phone' css class to be validated as phone\n */\n$.validator.addMethod('phone', validatePhone, Resources.INVALID_PHONE);\n\n/**\n * Add mobile validation method to jQuery validation plugin.\n * Text fields must have 'mobile' css class to be validated as mobile\n */\n$.validator.addMethod('mobile', validateMobile, Resources.INVALID_MOBILE);\n\n/**\n * Add email validation method to jQuery validation plugin.\n * Text fields must have 'email' css class to be validated as email\n */\n$.validator.addMethod('email', validateEmail, Resources.INVALID_EMAIL);\n\n/**\n * Add name validation method to jQuery validation plugin.\n * Text fields must have 'contactus-name' css class to be validated as name\n */\n$.validator.addMethod('contactus-name', validateName, Resources.INVALID_NAME);\n\n/**\n * Add order number validation method to jQuery validation plugin.\n * Text fields must have 'order-number' css class to be validated\n */\n$.validator.addMethod('order-number', validateOrderNumber, Resources.INVALID_ORDER);\n\n/**\n * Add text validation method to jQuery validation plugin.\n * Text fields must have 'textarea' css class to be validated\n */\n$.validator.addMethod('textarea', validateTextArea, Resources.INVALID_TEXT);\n\n/**\n * Add cross field validation method to jQuery validation plugin.\n * Text fields must have 'email' css class to be validated as email\n */\n$.validator.addMethod('cross-validation', validateTwoFields, Resources.INVALID_MATCH);\n\n/**\n * Add date validation method to jQuery validation plugin.\n * Text fields must have 'day' css class to be validated as day\n */\n$.validator.addMethod('day', validateDay, Resources.INVALID_DAY);\n\n/**\n * Add date validation method to jQuery validation plugin.\n * Text fields must have 'month' css class to be validated as month\n */\n$.validator.addMethod('month', validateMonth, Resources.INVALID_MONTH);\n\n/**\n * Add date validation method to jQuery validation plugin.\n * Text fields must have 'year' css class to be validated as year\n */\n$.validator.addMethod('year', validateYear, Resources.INVALID_YEAR);\n\n/**\n * Add CCOwner validation method to jQuery validation plugin.\n * Text fields must have 'owner' css class to be validated as not a credit card\n */\n$.validator.addMethod('owner', validateOwner, Resources.INVALID_OWNER);\n\n/**\n * Add gift cert amount validation method to jQuery validation plugin.\n * Text fields must have 'gift-cert-amont' css class to be validated\n */\n$.validator.addMethod('gift-cert-amount', function (value, el) {\n    var isOptional = this.optional(el),\n        isValid = (!isNaN(value)) && (parseFloat(value) >= 5) && (parseFloat(value) <= 5000);\n    return isOptional || isValid;\n}, Resources.GIFT_CERT_AMOUNT_INVALID);\n\n/**\n * Add positive number validation method to jQuery validation plugin.\n * Text fields must have 'positivenumber' css class to be validated as positivenumber\n */\n$.validator.addMethod('positivenumber', function (value) {\n    if ($.trim(value).length === 0) {\n        return true;\n    }\n    return (!isNaN(value) && Number(value) >= 0);\n}, ''); // '' should be replaced with error message if needed\n\nvar validator = {\n    regex: regex,\n    settings: settings,\n    init: function () {\n        var self = this;\n        $('form:not(.suppress)').each(function () {\n            $(this).validate(self.settings);\n        });\n    },\n    initForm: function (f) {\n        $(f).validate(this.settings);\n    }\n};\n\nmodule.exports = validator;\n",
        "",
        "/**\n * EvEmitter v1.0.3\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n  // universal module definition\n  /* jshint strict: false */ /* globals define, module, window */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD - RequireJS\n    define( factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS - Browserify, Webpack\n    module.exports = factory();\n  } else {\n    // Browser globals\n    global.EvEmitter = factory();\n  }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\"use strict\";\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n  if ( !eventName || !listener ) {\n    return;\n  }\n  // set events hash\n  var events = this._events = this._events || {};\n  // set listeners array\n  var listeners = events[ eventName ] = events[ eventName ] || [];\n  // only add once\n  if ( listeners.indexOf( listener ) == -1 ) {\n    listeners.push( listener );\n  }\n\n  return this;\n};\n\nproto.once = function( eventName, listener ) {\n  if ( !eventName || !listener ) {\n    return;\n  }\n  // add event\n  this.on( eventName, listener );\n  // set once flag\n  // set onceEvents hash\n  var onceEvents = this._onceEvents = this._onceEvents || {};\n  // set onceListeners object\n  var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n  // set flag\n  onceListeners[ listener ] = true;\n\n  return this;\n};\n\nproto.off = function( eventName, listener ) {\n  var listeners = this._events && this._events[ eventName ];\n  if ( !listeners || !listeners.length ) {\n    return;\n  }\n  var index = listeners.indexOf( listener );\n  if ( index != -1 ) {\n    listeners.splice( index, 1 );\n  }\n\n  return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n  var listeners = this._events && this._events[ eventName ];\n  if ( !listeners || !listeners.length ) {\n    return;\n  }\n  var i = 0;\n  var listener = listeners[i];\n  args = args || [];\n  // once stuff\n  var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n  while ( listener ) {\n    var isOnce = onceListeners && onceListeners[ listener ];\n    if ( isOnce ) {\n      // remove listener\n      // remove before trigger to prevent recursion\n      this.off( eventName, listener );\n      // unset once flag\n      delete onceListeners[ listener ];\n    }\n    // trigger listener\n    listener.apply( this, args );\n    // get next listener\n    i += isOnce ? 0 : 1;\n    listener = listeners[i];\n  }\n\n  return this;\n};\n\nreturn EvEmitter;\n\n}));\n",
        "/*!\n * imagesLoaded v4.1.1\n * JavaScript is all like \"You images are done yet or what?\"\n * MIT License\n */\n\n( function( window, factory ) { 'use strict';\n  // universal module definition\n\n  /*global define: false, module: false, require: false */\n\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      'ev-emitter/ev-emitter'\n    ], function( EvEmitter ) {\n      return factory( window, EvEmitter );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require(30)\n    );\n  } else {\n    // browser global\n    window.imagesLoaded = factory(\n      window,\n      window.EvEmitter\n    );\n  }\n\n})( window,\n\n// --------------------------  factory -------------------------- //\n\nfunction factory( window, EvEmitter ) {\n\n'use strict';\n\nvar $ = window.jQuery;\nvar console = window.console;\n\n// -------------------------- helpers -------------------------- //\n\n// extend objects\nfunction extend( a, b ) {\n  for ( var prop in b ) {\n    a[ prop ] = b[ prop ];\n  }\n  return a;\n}\n\n// turn element or nodeList into an array\nfunction makeArray( obj ) {\n  var ary = [];\n  if ( Array.isArray( obj ) ) {\n    // use object if already an array\n    ary = obj;\n  } else if ( typeof obj.length == 'number' ) {\n    // convert nodeList to array\n    for ( var i=0; i < obj.length; i++ ) {\n      ary.push( obj[i] );\n    }\n  } else {\n    // array of single index\n    ary.push( obj );\n  }\n  return ary;\n}\n\n// -------------------------- imagesLoaded -------------------------- //\n\n/**\n * @param {Array, Element, NodeList, String} elem\n * @param {Object or Function} options - if function, use as callback\n * @param {Function} onAlways - callback function\n */\nfunction ImagesLoaded( elem, options, onAlways ) {\n  // coerce ImagesLoaded() without new, to be new ImagesLoaded()\n  if ( !( this instanceof ImagesLoaded ) ) {\n    return new ImagesLoaded( elem, options, onAlways );\n  }\n  // use elem as selector string\n  if ( typeof elem == 'string' ) {\n    elem = document.querySelectorAll( elem );\n  }\n\n  this.elements = makeArray( elem );\n  this.options = extend( {}, this.options );\n\n  if ( typeof options == 'function' ) {\n    onAlways = options;\n  } else {\n    extend( this.options, options );\n  }\n\n  if ( onAlways ) {\n    this.on( 'always', onAlways );\n  }\n\n  this.getImages();\n\n  if ( $ ) {\n    // add jQuery Deferred object\n    this.jqDeferred = new $.Deferred();\n  }\n\n  // HACK check async to allow time to bind listeners\n  setTimeout( function() {\n    this.check();\n  }.bind( this ));\n}\n\nImagesLoaded.prototype = Object.create( EvEmitter.prototype );\n\nImagesLoaded.prototype.options = {};\n\nImagesLoaded.prototype.getImages = function() {\n  this.images = [];\n\n  // filter & find items if we have an item selector\n  this.elements.forEach( this.addElementImages, this );\n};\n\n/**\n * @param {Node} element\n */\nImagesLoaded.prototype.addElementImages = function( elem ) {\n  // filter siblings\n  if ( elem.nodeName == 'IMG' ) {\n    this.addImage( elem );\n  }\n  // get background image on element\n  if ( this.options.background === true ) {\n    this.addElementBackgroundImages( elem );\n  }\n\n  // find children\n  // no non-element nodes, #143\n  var nodeType = elem.nodeType;\n  if ( !nodeType || !elementNodeTypes[ nodeType ] ) {\n    return;\n  }\n  var childImgs = elem.querySelectorAll('img');\n  // concat childElems to filterFound array\n  for ( var i=0; i < childImgs.length; i++ ) {\n    var img = childImgs[i];\n    this.addImage( img );\n  }\n\n  // get child background images\n  if ( typeof this.options.background == 'string' ) {\n    var children = elem.querySelectorAll( this.options.background );\n    for ( i=0; i < children.length; i++ ) {\n      var child = children[i];\n      this.addElementBackgroundImages( child );\n    }\n  }\n};\n\nvar elementNodeTypes = {\n  1: true,\n  9: true,\n  11: true\n};\n\nImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {\n  var style = getComputedStyle( elem );\n  if ( !style ) {\n    // Firefox returns null if in a hidden iframe https://bugzil.la/548397\n    return;\n  }\n  // get url inside url(\"...\")\n  var reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\n  var matches = reURL.exec( style.backgroundImage );\n  while ( matches !== null ) {\n    var url = matches && matches[2];\n    if ( url ) {\n      this.addBackground( url, elem );\n    }\n    matches = reURL.exec( style.backgroundImage );\n  }\n};\n\n/**\n * @param {Image} img\n */\nImagesLoaded.prototype.addImage = function( img ) {\n  var loadingImage = new LoadingImage( img );\n  this.images.push( loadingImage );\n};\n\nImagesLoaded.prototype.addBackground = function( url, elem ) {\n  var background = new Background( url, elem );\n  this.images.push( background );\n};\n\nImagesLoaded.prototype.check = function() {\n  var _this = this;\n  this.progressedCount = 0;\n  this.hasAnyBroken = false;\n  // complete if no images\n  if ( !this.images.length ) {\n    this.complete();\n    return;\n  }\n\n  function onProgress( image, elem, message ) {\n    // HACK - Chrome triggers event before object properties have changed. #83\n    setTimeout( function() {\n      _this.progress( image, elem, message );\n    });\n  }\n\n  this.images.forEach( function( loadingImage ) {\n    loadingImage.once( 'progress', onProgress );\n    loadingImage.check();\n  });\n};\n\nImagesLoaded.prototype.progress = function( image, elem, message ) {\n  this.progressedCount++;\n  this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;\n  // progress event\n  this.emitEvent( 'progress', [ this, image, elem ] );\n  if ( this.jqDeferred && this.jqDeferred.notify ) {\n    this.jqDeferred.notify( this, image );\n  }\n  // check if completed\n  if ( this.progressedCount == this.images.length ) {\n    this.complete();\n  }\n\n  if ( this.options.debug && console ) {\n    console.log( 'progress: ' + message, image, elem );\n  }\n};\n\nImagesLoaded.prototype.complete = function() {\n  var eventName = this.hasAnyBroken ? 'fail' : 'done';\n  this.isComplete = true;\n  this.emitEvent( eventName, [ this ] );\n  this.emitEvent( 'always', [ this ] );\n  if ( this.jqDeferred ) {\n    var jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';\n    this.jqDeferred[ jqMethod ]( this );\n  }\n};\n\n// --------------------------  -------------------------- //\n\nfunction LoadingImage( img ) {\n  this.img = img;\n}\n\nLoadingImage.prototype = Object.create( EvEmitter.prototype );\n\nLoadingImage.prototype.check = function() {\n  // If complete is true and browser supports natural sizes,\n  // try to check for image status manually.\n  var isComplete = this.getIsImageComplete();\n  if ( isComplete ) {\n    // report based on naturalWidth\n    this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n    return;\n  }\n\n  // If none of the checks above matched, simulate loading on detached element.\n  this.proxyImage = new Image();\n  this.proxyImage.addEventListener( 'load', this );\n  this.proxyImage.addEventListener( 'error', this );\n  // bind to image as well for Firefox. #191\n  this.img.addEventListener( 'load', this );\n  this.img.addEventListener( 'error', this );\n  this.proxyImage.src = this.img.src;\n};\n\nLoadingImage.prototype.getIsImageComplete = function() {\n  return this.img.complete && this.img.naturalWidth !== undefined;\n};\n\nLoadingImage.prototype.confirm = function( isLoaded, message ) {\n  this.isLoaded = isLoaded;\n  this.emitEvent( 'progress', [ this, this.img, message ] );\n};\n\n// ----- events ----- //\n\n// trigger specified handler for event type\nLoadingImage.prototype.handleEvent = function( event ) {\n  var method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\nLoadingImage.prototype.onload = function() {\n  this.confirm( true, 'onload' );\n  this.unbindEvents();\n};\n\nLoadingImage.prototype.onerror = function() {\n  this.confirm( false, 'onerror' );\n  this.unbindEvents();\n};\n\nLoadingImage.prototype.unbindEvents = function() {\n  this.proxyImage.removeEventListener( 'load', this );\n  this.proxyImage.removeEventListener( 'error', this );\n  this.img.removeEventListener( 'load', this );\n  this.img.removeEventListener( 'error', this );\n};\n\n// -------------------------- Background -------------------------- //\n\nfunction Background( url, element ) {\n  this.url = url;\n  this.element = element;\n  this.img = new Image();\n}\n\n// inherit LoadingImage prototype\nBackground.prototype = Object.create( LoadingImage.prototype );\n\nBackground.prototype.check = function() {\n  this.img.addEventListener( 'load', this );\n  this.img.addEventListener( 'error', this );\n  this.img.src = this.url;\n  // check if image is already complete\n  var isComplete = this.getIsImageComplete();\n  if ( isComplete ) {\n    this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n    this.unbindEvents();\n  }\n};\n\nBackground.prototype.unbindEvents = function() {\n  this.img.removeEventListener( 'load', this );\n  this.img.removeEventListener( 'error', this );\n};\n\nBackground.prototype.confirm = function( isLoaded, message ) {\n  this.isLoaded = isLoaded;\n  this.emitEvent( 'progress', [ this, this.element, message ] );\n};\n\n// -------------------------- jQuery -------------------------- //\n\nImagesLoaded.makeJQueryPlugin = function( jQuery ) {\n  jQuery = jQuery || window.jQuery;\n  if ( !jQuery ) {\n    return;\n  }\n  // set local variable\n  $ = jQuery;\n  // $().imagesLoaded()\n  $.fn.imagesLoaded = function( options, callback ) {\n    var instance = new ImagesLoaded( this, options, callback );\n    return instance.jqDeferred.promise( $(this) );\n  };\n};\n// try making plugin\nImagesLoaded.makeJQueryPlugin();\n\n// --------------------------  -------------------------- //\n\nreturn ImagesLoaded;\n\n});\n",
        "(function(a){if(typeof define===\"function\"&&define.amd&&define.amd.jQuery){define([\"jquery\"],a)}else{if(typeof module!==\"undefined\"&&module.exports){a(require(\"jquery\"))}else{a(jQuery)}}}(function(f){var y=\"1.6.15\",p=\"left\",o=\"right\",e=\"up\",x=\"down\",c=\"in\",A=\"out\",m=\"none\",s=\"auto\",l=\"swipe\",t=\"pinch\",B=\"tap\",j=\"doubletap\",b=\"longtap\",z=\"hold\",E=\"horizontal\",u=\"vertical\",i=\"all\",r=10,g=\"start\",k=\"move\",h=\"end\",q=\"cancel\",a=\"ontouchstart\" in window,v=window.navigator.msPointerEnabled&&!window.navigator.pointerEnabled&&!a,d=(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&!a,C=\"TouchSwipe\";var n={fingers:1,threshold:75,cancelThreshold:null,pinchThreshold:20,maxTimeThreshold:null,fingerReleaseThreshold:250,longTapThreshold:500,doubleTapThreshold:200,swipe:null,swipeLeft:null,swipeRight:null,swipeUp:null,swipeDown:null,swipeStatus:null,pinchIn:null,pinchOut:null,pinchStatus:null,click:null,tap:null,doubleTap:null,longTap:null,hold:null,triggerOnTouchEnd:true,triggerOnTouchLeave:false,allowPageScroll:\"auto\",fallbackToMouseEvents:true,excludedElements:\"label, button, input, select, textarea, a, .noSwipe\",preventDefaultEvents:true};f.fn.swipe=function(H){var G=f(this),F=G.data(C);if(F&&typeof H===\"string\"){if(F[H]){return F[H].apply(this,Array.prototype.slice.call(arguments,1))}else{f.error(\"Method \"+H+\" does not exist on jQuery.swipe\")}}else{if(F&&typeof H===\"object\"){F.option.apply(this,arguments)}else{if(!F&&(typeof H===\"object\"||!H)){return w.apply(this,arguments)}}}return G};f.fn.swipe.version=y;f.fn.swipe.defaults=n;f.fn.swipe.phases={PHASE_START:g,PHASE_MOVE:k,PHASE_END:h,PHASE_CANCEL:q};f.fn.swipe.directions={LEFT:p,RIGHT:o,UP:e,DOWN:x,IN:c,OUT:A};f.fn.swipe.pageScroll={NONE:m,HORIZONTAL:E,VERTICAL:u,AUTO:s};f.fn.swipe.fingers={ONE:1,TWO:2,THREE:3,FOUR:4,FIVE:5,ALL:i};function w(F){if(F&&(F.allowPageScroll===undefined&&(F.swipe!==undefined||F.swipeStatus!==undefined))){F.allowPageScroll=m}if(F.click!==undefined&&F.tap===undefined){F.tap=F.click}if(!F){F={}}F=f.extend({},f.fn.swipe.defaults,F);return this.each(function(){var H=f(this);var G=H.data(C);if(!G){G=new D(this,F);H.data(C,G)}})}function D(a5,au){var au=f.extend({},au);var az=(a||d||!au.fallbackToMouseEvents),K=az?(d?(v?\"MSPointerDown\":\"pointerdown\"):\"touchstart\"):\"mousedown\",ax=az?(d?(v?\"MSPointerMove\":\"pointermove\"):\"touchmove\"):\"mousemove\",V=az?(d?(v?\"MSPointerUp\":\"pointerup\"):\"touchend\"):\"mouseup\",T=az?(d?\"mouseleave\":null):\"mouseleave\",aD=(d?(v?\"MSPointerCancel\":\"pointercancel\"):\"touchcancel\");var ag=0,aP=null,a2=null,ac=0,a1=0,aZ=0,H=1,ap=0,aJ=0,N=null;var aR=f(a5);var aa=\"start\";var X=0;var aQ={};var U=0,a3=0,a6=0,ay=0,O=0;var aW=null,af=null;try{aR.bind(K,aN);aR.bind(aD,ba)}catch(aj){f.error(\"events not supported \"+K+\",\"+aD+\" on jQuery.swipe\")}this.enable=function(){aR.bind(K,aN);aR.bind(aD,ba);return aR};this.disable=function(){aK();return aR};this.destroy=function(){aK();aR.data(C,null);aR=null};this.option=function(bd,bc){if(typeof bd===\"object\"){au=f.extend(au,bd)}else{if(au[bd]!==undefined){if(bc===undefined){return au[bd]}else{au[bd]=bc}}else{if(!bd){return au}else{f.error(\"Option \"+bd+\" does not exist on jQuery.swipe.options\")}}}return null};function aN(be){if(aB()){return}if(f(be.target).closest(au.excludedElements,aR).length>0){return}var bf=be.originalEvent?be.originalEvent:be;var bd,bg=bf.touches,bc=bg?bg[0]:bf;aa=g;if(bg){X=bg.length}else{if(au.preventDefaultEvents!==false){be.preventDefault()}}ag=0;aP=null;a2=null;aJ=null;ac=0;a1=0;aZ=0;H=1;ap=0;N=ab();S();ai(0,bc);if(!bg||(X===au.fingers||au.fingers===i)||aX()){U=ar();if(X==2){ai(1,bg[1]);a1=aZ=at(aQ[0].start,aQ[1].start)}if(au.swipeStatus||au.pinchStatus){bd=P(bf,aa)}}else{bd=false}if(bd===false){aa=q;P(bf,aa);return bd}else{if(au.hold){af=setTimeout(f.proxy(function(){aR.trigger(\"hold\",[bf.target]);if(au.hold){bd=au.hold.call(aR,bf,bf.target)}},this),au.longTapThreshold)}an(true)}return null}function a4(bf){var bi=bf.originalEvent?bf.originalEvent:bf;if(aa===h||aa===q||al()){return}var be,bj=bi.touches,bd=bj?bj[0]:bi;var bg=aH(bd);a3=ar();if(bj){X=bj.length}if(au.hold){clearTimeout(af)}aa=k;if(X==2){if(a1==0){ai(1,bj[1]);a1=aZ=at(aQ[0].start,aQ[1].start)}else{aH(bj[1]);aZ=at(aQ[0].end,aQ[1].end);aJ=aq(aQ[0].end,aQ[1].end)}H=a8(a1,aZ);ap=Math.abs(a1-aZ)}if((X===au.fingers||au.fingers===i)||!bj||aX()){aP=aL(bg.start,bg.end);a2=aL(bg.last,bg.end);ak(bf,a2);ag=aS(bg.start,bg.end);ac=aM();aI(aP,ag);be=P(bi,aa);if(!au.triggerOnTouchEnd||au.triggerOnTouchLeave){var bc=true;if(au.triggerOnTouchLeave){var bh=aY(this);bc=F(bg.end,bh)}if(!au.triggerOnTouchEnd&&bc){aa=aC(k)}else{if(au.triggerOnTouchLeave&&!bc){aa=aC(h)}}if(aa==q||aa==h){P(bi,aa)}}}else{aa=q;P(bi,aa)}if(be===false){aa=q;P(bi,aa)}}function M(bc){var bd=bc.originalEvent?bc.originalEvent:bc,be=bd.touches;if(be){if(be.length&&!al()){G(bd);return true}else{if(be.length&&al()){return true}}}if(al()){X=ay}a3=ar();ac=aM();if(bb()||!am()){aa=q;P(bd,aa)}else{if(au.triggerOnTouchEnd||(au.triggerOnTouchEnd==false&&aa===k)){if(au.preventDefaultEvents!==false){bc.preventDefault()}aa=h;P(bd,aa)}else{if(!au.triggerOnTouchEnd&&a7()){aa=h;aF(bd,aa,B)}else{if(aa===k){aa=q;P(bd,aa)}}}}an(false);return null}function ba(){X=0;a3=0;U=0;a1=0;aZ=0;H=1;S();an(false)}function L(bc){var bd=bc.originalEvent?bc.originalEvent:bc;if(au.triggerOnTouchLeave){aa=aC(h);P(bd,aa)}}function aK(){aR.unbind(K,aN);aR.unbind(aD,ba);aR.unbind(ax,a4);aR.unbind(V,M);if(T){aR.unbind(T,L)}an(false)}function aC(bg){var bf=bg;var be=aA();var bd=am();var bc=bb();if(!be||bc){bf=q}else{if(bd&&bg==k&&(!au.triggerOnTouchEnd||au.triggerOnTouchLeave)){bf=h}else{if(!bd&&bg==h&&au.triggerOnTouchLeave){bf=q}}}return bf}function P(be,bc){var bd,bf=be.touches;if(J()||W()){bd=aF(be,bc,l)}if((Q()||aX())&&bd!==false){bd=aF(be,bc,t)}if(aG()&&bd!==false){bd=aF(be,bc,j)}else{if(ao()&&bd!==false){bd=aF(be,bc,b)}else{if(ah()&&bd!==false){bd=aF(be,bc,B)}}}if(bc===q){if(W()){bd=aF(be,bc,l)}if(aX()){bd=aF(be,bc,t)}ba(be)}if(bc===h){if(bf){if(!bf.length){ba(be)}}else{ba(be)}}return bd}function aF(bf,bc,be){var bd;if(be==l){aR.trigger(\"swipeStatus\",[bc,aP||null,ag||0,ac||0,X,aQ,a2]);if(au.swipeStatus){bd=au.swipeStatus.call(aR,bf,bc,aP||null,ag||0,ac||0,X,aQ,a2);if(bd===false){return false}}if(bc==h&&aV()){clearTimeout(aW);clearTimeout(af);aR.trigger(\"swipe\",[aP,ag,ac,X,aQ,a2]);if(au.swipe){bd=au.swipe.call(aR,bf,aP,ag,ac,X,aQ,a2);if(bd===false){return false}}switch(aP){case p:aR.trigger(\"swipeLeft\",[aP,ag,ac,X,aQ,a2]);if(au.swipeLeft){bd=au.swipeLeft.call(aR,bf,aP,ag,ac,X,aQ,a2)}break;case o:aR.trigger(\"swipeRight\",[aP,ag,ac,X,aQ,a2]);if(au.swipeRight){bd=au.swipeRight.call(aR,bf,aP,ag,ac,X,aQ,a2)}break;case e:aR.trigger(\"swipeUp\",[aP,ag,ac,X,aQ,a2]);if(au.swipeUp){bd=au.swipeUp.call(aR,bf,aP,ag,ac,X,aQ,a2)}break;case x:aR.trigger(\"swipeDown\",[aP,ag,ac,X,aQ,a2]);if(au.swipeDown){bd=au.swipeDown.call(aR,bf,aP,ag,ac,X,aQ,a2)}break}}}if(be==t){aR.trigger(\"pinchStatus\",[bc,aJ||null,ap||0,ac||0,X,H,aQ]);if(au.pinchStatus){bd=au.pinchStatus.call(aR,bf,bc,aJ||null,ap||0,ac||0,X,H,aQ);if(bd===false){return false}}if(bc==h&&a9()){switch(aJ){case c:aR.trigger(\"pinchIn\",[aJ||null,ap||0,ac||0,X,H,aQ]);if(au.pinchIn){bd=au.pinchIn.call(aR,bf,aJ||null,ap||0,ac||0,X,H,aQ)}break;case A:aR.trigger(\"pinchOut\",[aJ||null,ap||0,ac||0,X,H,aQ]);if(au.pinchOut){bd=au.pinchOut.call(aR,bf,aJ||null,ap||0,ac||0,X,H,aQ)}break}}}if(be==B){if(bc===q||bc===h){clearTimeout(aW);clearTimeout(af);if(Z()&&!I()){O=ar();aW=setTimeout(f.proxy(function(){O=null;aR.trigger(\"tap\",[bf.target]);if(au.tap){bd=au.tap.call(aR,bf,bf.target)}},this),au.doubleTapThreshold)}else{O=null;aR.trigger(\"tap\",[bf.target]);if(au.tap){bd=au.tap.call(aR,bf,bf.target)}}}}else{if(be==j){if(bc===q||bc===h){clearTimeout(aW);clearTimeout(af);O=null;aR.trigger(\"doubletap\",[bf.target]);if(au.doubleTap){bd=au.doubleTap.call(aR,bf,bf.target)}}}else{if(be==b){if(bc===q||bc===h){clearTimeout(aW);O=null;aR.trigger(\"longtap\",[bf.target]);if(au.longTap){bd=au.longTap.call(aR,bf,bf.target)}}}}}return bd}function am(){var bc=true;if(au.threshold!==null){bc=ag>=au.threshold}return bc}function bb(){var bc=false;if(au.cancelThreshold!==null&&aP!==null){bc=(aT(aP)-ag)>=au.cancelThreshold}return bc}function ae(){if(au.pinchThreshold!==null){return ap>=au.pinchThreshold}return true}function aA(){var bc;if(au.maxTimeThreshold){if(ac>=au.maxTimeThreshold){bc=false}else{bc=true}}else{bc=true}return bc}function ak(bc,bd){if(au.preventDefaultEvents===false){return}if(au.allowPageScroll===m){bc.preventDefault()}else{var be=au.allowPageScroll===s;switch(bd){case p:if((au.swipeLeft&&be)||(!be&&au.allowPageScroll!=E)){bc.preventDefault()}break;case o:if((au.swipeRight&&be)||(!be&&au.allowPageScroll!=E)){bc.preventDefault()}break;case e:if((au.swipeUp&&be)||(!be&&au.allowPageScroll!=u)){bc.preventDefault()}break;case x:if((au.swipeDown&&be)||(!be&&au.allowPageScroll!=u)){bc.preventDefault()}break}}}function a9(){var bd=aO();var bc=Y();var be=ae();return bd&&bc&&be}function aX(){return !!(au.pinchStatus||au.pinchIn||au.pinchOut)}function Q(){return !!(a9()&&aX())}function aV(){var bf=aA();var bh=am();var be=aO();var bc=Y();var bd=bb();var bg=!bd&&bc&&be&&bh&&bf;return bg}function W(){return !!(au.swipe||au.swipeStatus||au.swipeLeft||au.swipeRight||au.swipeUp||au.swipeDown)}function J(){return !!(aV()&&W())}function aO(){return((X===au.fingers||au.fingers===i)||!a)}function Y(){return aQ[0].end.x!==0}function a7(){return !!(au.tap)}function Z(){return !!(au.doubleTap)}function aU(){return !!(au.longTap)}function R(){if(O==null){return false}var bc=ar();return(Z()&&((bc-O)<=au.doubleTapThreshold))}function I(){return R()}function aw(){return((X===1||!a)&&(isNaN(ag)||ag<au.threshold))}function a0(){return((ac>au.longTapThreshold)&&(ag<r))}function ah(){return !!(aw()&&a7())}function aG(){return !!(R()&&Z())}function ao(){return !!(a0()&&aU())}function G(bc){a6=ar();ay=bc.touches.length+1}function S(){a6=0;ay=0}function al(){var bc=false;if(a6){var bd=ar()-a6;if(bd<=au.fingerReleaseThreshold){bc=true}}return bc}function aB(){return !!(aR.data(C+\"_intouch\")===true)}function an(bc){if(!aR){return}if(bc===true){aR.bind(ax,a4);aR.bind(V,M);if(T){aR.bind(T,L)}}else{aR.unbind(ax,a4,false);aR.unbind(V,M,false);if(T){aR.unbind(T,L,false)}}aR.data(C+\"_intouch\",bc===true)}function ai(be,bc){var bd={start:{x:0,y:0},last:{x:0,y:0},end:{x:0,y:0}};bd.start.x=bd.last.x=bd.end.x=bc.pageX||bc.clientX;bd.start.y=bd.last.y=bd.end.y=bc.pageY||bc.clientY;aQ[be]=bd;return bd}function aH(bc){var be=bc.identifier!==undefined?bc.identifier:0;var bd=ad(be);if(bd===null){bd=ai(be,bc)}bd.last.x=bd.end.x;bd.last.y=bd.end.y;bd.end.x=bc.pageX||bc.clientX;bd.end.y=bc.pageY||bc.clientY;return bd}function ad(bc){return aQ[bc]||null}function aI(bc,bd){bd=Math.max(bd,aT(bc));N[bc].distance=bd}function aT(bc){if(N[bc]){return N[bc].distance}return undefined}function ab(){var bc={};bc[p]=av(p);bc[o]=av(o);bc[e]=av(e);bc[x]=av(x);return bc}function av(bc){return{direction:bc,distance:0}}function aM(){return a3-U}function at(bf,be){var bd=Math.abs(bf.x-be.x);var bc=Math.abs(bf.y-be.y);return Math.round(Math.sqrt(bd*bd+bc*bc))}function a8(bc,bd){var be=(bd/bc)*1;return be.toFixed(2)}function aq(){if(H<1){return A}else{return c}}function aS(bd,bc){return Math.round(Math.sqrt(Math.pow(bc.x-bd.x,2)+Math.pow(bc.y-bd.y,2)))}function aE(bf,bd){var bc=bf.x-bd.x;var bh=bd.y-bf.y;var be=Math.atan2(bh,bc);var bg=Math.round(be*180/Math.PI);if(bg<0){bg=360-Math.abs(bg)}return bg}function aL(bd,bc){var be=aE(bd,bc);if((be<=45)&&(be>=0)){return p}else{if((be<=360)&&(be>=315)){return p}else{if((be>=135)&&(be<=225)){return o}else{if((be>45)&&(be<135)){return x}else{return e}}}}}function ar(){var bc=new Date();return bc.getTime()}function aY(bc){bc=f(bc);var be=bc.offset();var bd={left:be.left,right:be.left+bc.outerWidth(),top:be.top,bottom:be.top+bc.outerHeight()};return bd}function F(bc,bd){return(bc.x>bd.left&&bc.x<bd.right&&bc.y>bd.top&&bc.y<bd.bottom)}}}));",
        "'use strict';\n\nmodule.exports = window.jQuery;"
    ]
}