vendor: 3,662 bytes, lines 1-88
1/******/ (function(modules) { // webpackBootstrap 2/******/ // The module cache 3/******/ var installedModules = {}; 4/******/ 5/******/ // The require function 6/******/ function __webpack_require__(moduleId) { 7/******/ 8/******/ // Check if module is in cache 9/******/ if(installedModules[moduleId]) { 10/******/ return installedModules[moduleId].exports; 11/******/ } 12/******/ // Create a new module (and put it into the cache) 13/******/ var module = installedModules[moduleId] = { 14/******/ i: moduleId, 15/******/ l: false, 16/******/ exports: {} 17/******/ }; 18/******/ 19/******/ // Execute the module function 20/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 21/******/ 22/******/ // Flag the module as loaded 23/******/ module.l = true; 24/******/ 25/******/ // Return the exports of the module 26/******/ return module.exports; 27/******/ } 28/******/ 29/******/ 30/******/ // expose the modules object (__webpack_modules__) 31/******/ __webpack_require__.m = modules; 32/******/ 33/******/ // expose the module cache 34/******/ __webpack_require__.c = installedModules; 35/******/ 36/******/ // define getter function for harmony exports 37/******/ __webpack_require__.d = function(exports, name, getter) { 38/******/ if(!__webpack_require__.o(exports, name)) { 39/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); 40/******/ } 41/******/ }; 42/******/ 43/******/ // define __esModule on exports 44/******/ __webpack_require__.r = function(exports) { 45/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 46/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 47/******/ } 48/******/ Object.defineProperty(exports, '__esModule', { value: true }); 49/******/ }; 50/******/ 51/******/ // create a fake namespace object 52/******/ // mode & 1: value is a module id, require it 53/******/ // mode & 2: merge all properties of value into the ns 54/******/ // mode & 4: return value when already ns object 55/******/ // mode & 8|1: behave like require 56/******/ __webpack_require__.t = function(value, mode) { 57/******/ if(mode & 1) value = __webpack_require__(value); 58/******/ if(mode & 8) return value; 59/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; 60/******/ var ns = Object.create(null); 61/******/ __webpack_require__.r(ns); 62/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); 63/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); 64/******/ return ns; 65/******/ }; 66/******/ 67/******/ // getDefaultExport function for compatibility with non-harmony modules 68/******/ __webpack_require__.n = function(module) { 69/******/ var getter = module && module.__esModule ? 70/******/ function getDefault() { return module['default']; } : 71/******/ function getModuleExports() { return module; }; 72/******/ __webpack_require__.d(getter, 'a', getter); 73/******/ return getter; 74/******/ }; 75/******/ 76/******/ // Object.prototype.hasOwnProperty.call 77/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 78/******/ 79/******/ // __webpack_public_path__ 80/******/ __webpack_require__.p = ""; 81/******/ 82/******/ 83/******/ // Load entry module and return exports 84/******/ return __webpack_require__(__webpack_require__.s = "./cartridges/int_gtm_bathandbody/cartridge/client/default/js/gtm.js"); 85/******/ }) 86/************************************************************************/ 87/******/ ({ 88
89/***/ "./cartridges/int_gtm_bathandbody/cartridge/client/default/js/gtm.js": 90/*!***************************************************************************!*\ 91 !*** ./cartridges/int_gtm_bathandbody/cartridge/client/default/js/gtm.js ***! 92 \***************************************************************************/ 93/*! no static exports found */ 94/***/ (function(module, exports, __webpack_require__) { 95 96"use strict"; 97eval("\n\nvar searchInputValue;\nvar plpgtm = __webpack_require__(/*! ./plp */ \"./cartridges/int_gtm_bathandbody/cartridge/client/default/js/plp.js\");\nvar promotion = __webpack_require__(/*! ./promotion */ \"./cartridges/int_gtm_bathandbody/cartridge/client/default/js/promotion.js\");\n$(document).ready(function () {\n var $doc = $(document);\n window.dataLayer = window.dataLayer || [];\n var pageType = $(\".gtm-page-type\").val();\n var gtmCustomerNumber = sessionStorage.getItem(\"gtm_Customer_Number\");\n var userLogin = sessionStorage.getItem(\"user_loggedin\");\n var userType = sessionStorage.getItem(\"user_type\");\n var customerType = sessionStorage.getItem(\"customer_type\");\n var subscribeStatus = sessionStorage.getItem(\"subscribe_status\");\n var page_type = $('.gtm-page-type').val();\n var bannerName = sessionStorage.getItem('BBW_banner_name');\n if (!bannerName) {\n sessionStorage.setItem('BBW_banner_name', 'NA');\n }\n\n // banner click\n $doc.on('click', '.gtm_banner_bbw', function () {\n var banner_name = $(this).attr('title');\n if (banner_name) {\n sessionStorage.setItem('BBW_banner_name', banner_name);\n }\n });\n\n // onclick show more button \n $doc.on('afterShowMoreBtnClicked', function (context, data) {\n plpgtm._subscribePLP();\n });\n plpgtm._subscribePLP();\n promotion._subscribe();\n\n //Pass section parameter based on the device//\n var sectionClickedStatus;\n $(document).ready(function () {\n if ($(window).width() > 768) {\n sectionClickedStatus = 'top_navigation';\n } else {\n sectionClickedStatus = 'hamburger';\n }\n });\n\n // add to cart event\n $doc.on('product:afterAddToCart', function (context, data) {\n var index = $('.add-to-cart').data('index');\n if (!index) index = 1;\n data.pageDataLayer.ecommerce.items[0].index = parseInt(index, 10);\n data.pageDataLayer.banner_name = bannerName ? bannerName : 'NA';\n data.pageDataLayer.page_type = page_type;\n window.dataLayer.push({\n ecommerce: null\n });\n window.dataLayer.push(data.pageDataLayer);\n window.dataLayer.push(data.pageDataLayerGTMData);\n console.log(\"AddToCartDatalayer\", window.dataLayer);\n });\n var paymentInfoPushed = false;\n $doc.on('checkout:updateCheckoutView', function (context, data) {\n // add_payment_info from CheckoutServices-SubmitPayment\n if (data && data.pageDataLayer && data.pageDataLayer.event === 'add_payment_info') {\n if (!paymentInfoPushed) {\n paymentInfoPushed = true;\n window.dataLayer.push({\n ecommerce: null\n });\n window.dataLayer.push(data.pageDataLayer);\n console.log(\"Datalayer\", window.dataLayer);\n }\n } else if (data && data.pageDataLayer) {\n window.dataLayer.push(data.pageDataLayer);\n console.log(\"Datalayer\", window.dataLayer);\n }\n });\n\n // addProduct to wishlist\n $doc.on(\"wishlist:addProduct\", function (context, data) {\n var breadcrumbs = [];\n $('.breadcrumb').first().find('.breadcrumb-item').each(function (idx) {\n var text = $(this).text().trim();\n if (idx === 0) {\n text = text.toUpperCase();\n }\n breadcrumbs.push(text);\n });\n if (breadcrumbs.length > 0) {\n data.pageDataLayer.breadcrum_sequence = breadcrumbs.join(' > ');\n }\n data.pageDataLayer.banner_name = bannerName ? bannerName : 'NA';\n data.pageDataLayer.page_type = page_type ? page_type : 'PLP_Page';\n window.dataLayer.push(data.pageDataLayer);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // remove product from cart (update product qty in cart)\n $doc.on('cart:update', function (context, data) {\n if (data && data.pageDataLayer) {\n data.pageDataLayer.banner_name = bannerName ? bannerName : 'NA';\n }
97\n if (data && data.pageDataLayerGTMData) {\n window.dataLayer.push(data.pageDataLayerGTMData);\n }\n if (data && data.pageDataLayer && data.pageDataLayer[0] && data.pageDataLayer[0].incredecreLayer) {\n if (data.pageDataLayer[0].incredecreLayer.event) {\n window.dataLayer.push({\n ecommerce: null\n });\n window.dataLayer.push(data.pageDataLayer[0].incredecreLayer);\n }\n if (data.pageDataLayer[0].viewCartLayer && data.pageDataLayer[0].viewCartLayer.event) {\n window.dataLayer.push({\n ecommerce: null\n });\n window.dataLayer.push(data.pageDataLayer[0].viewCartLayer);\n }\n } else if (data && data.pageDataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n window.dataLayer.push(data.pageDataLayer);\n }\n console.log(\"DataLayer\", window.dataLayer);\n });\n\n // Submit customer\n $doc.on(\"CheckoutData:SubmitCustomerData\", function (context, data) {\n // Check if data.pageDataLayer is defined\n if (data.pageDataLayer) {\n data.pageDataLayer.banner_name = bannerName || 'NA';\n window.dataLayer.push(data.pageDataLayer);\n console.log(\"Datalayer\", window.dataLayer);\n } else {\n console.error(\"Error: data.pageDataLayer is undefined\");\n }\n });\n\n // Submit Shipping\n $doc.on(\"CheckoutData:SubmitShippingData\", function (context, data) {\n data.pageDataLayer.banner_name = bannerName ? bannerName : 'NA';\n window.dataLayer.push({\n ecommerce: null\n });\n window.dataLayer.push(data.pageDataLayer);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // submit PaymentInfo\n $doc.on(\"placeOrderData:PaymentInfoData\", function (context, data) {\n if (!data || !data.pageDataLayer || !data.pageDataLayer.event) {\n return;\n }\n if (data.pageDataLayer.event === 'add_payment_info') {\n if (!paymentInfoPushed) {\n paymentInfoPushed = true;\n window.dataLayer.push({\n ecommerce: null\n });\n window.dataLayer.push(data.pageDataLayer);\n console.log(\"Datalayer\", window.dataLayer);\n }\n } else {\n window.dataLayer.push({\n ecommerce: null\n });\n window.dataLayer.push(data.pageDataLayer);\n console.log(\"Datalayer\", window.dataLayer);\n }\n });\n\n // product click\n $doc.on('click', '[data-gtm-enhancedecommerce-onclick]', function () {\n var $gtmOnclickElem = $(this);\n var gtmOnclickObject = $gtmOnclickElem.data('gtm-enhancedecommerce-onclick');\n var index = $(this).data(\"index\");\n if (!index) index = 1;\n var itemObj = gtmOnclickObject.ecommerce.items[0];\n itemObj.index = parseInt(index, 10);\n itemObj.quantity = 1;\n if (itemObj.price) {\n itemObj.price = parseFloat(itemObj.price) || 0;\n }\n\n // Dynamic breadcrumb sequence from visible UI\n var breadcrumbsArr = [];\n $('.breadcrumb').first().find('.breadcrumb-item').each(function (idx) {\n var text = $(this).text().trim();\n if (text) {\n breadcrumbsArr.push(idx === 0 ? text.toUpperCase() : text);\n }\n });\n var uiBreadcrumbSequence = breadcrumbsArr.length > 0 ? breadcrumbsArr.join(' > ') : pageBase.breadcrum_sequence || 'NA';\n var userLoginStatus = sessionStorage.getItem('user_loggedin') || userLogin;\n var userStatusVal = userLoginStatus === 'logged_in' || userLoginStatus === 'true' ? 'logged_in' : 'nonlogged_in';\n gtmOnclickObject.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n var activePageType = window.pageDataLayer && window.pageDataLayer.page_type || window.PLP_page && window.PLP_page.page_type || $('.gtm-page-type').val() || 'PLP_page';\n gtmOnclickObject.page_type = activePageType;\n sessionStorage.setItem('select_item_page_type', activePageType);\n gtmOnclickObject.user_type = userType ? userType : 'NA';\n gtmOnclickObject.customer_type = customerType ? customerType : 'NA';\n gtmOnclickObject.subscription_status = subscribeStatus ? subscribeStatus : 'NA';\n gtmOnclickObject.user_status = userStatusVal;\n gtmOnclickObject.breadcrum_sequence = uiBreadcrumbSequence;\n gtmOnclickObject.banner_name = bannerName ? bannerName : 'NA';
97\n gtmOnclickObject.stock_status = pageBase.stock_status ? pageBase.stock_status : 'in_stock';\n if (!gtmOnclickObject) {\n return;\n }\n window.dataLayer.push({\n ecommerce: null\n });\n window.dataLayer.push(gtmOnclickObject);\n console.log(\"productClick\", window.dataLayer);\n });\n\n // login success\n $doc.on(\"Login:success\", function (context, data) {\n sessionStorage.setItem('gtm_login_success_event', JSON.stringify(data.pageDataLayer));\n });\n\n // login error\n $doc.on(\"Login:error\", function (context, data) {\n window.dataLayer.push(data.pageDataLayer);\n console.log(\"Login:error\", window.dataLayer);\n });\n\n // register:success\n $doc.on(\"login:register:success\", function (context, data) {\n data.pageDataLayer.user_id = data.userId;\n window.dataLayer.push(data.pageDataLayer);\n console.log(\"login:register:success\", window.dataLayer);\n });\n\n // register:error\n // $doc.on(\"login:register:error\", function (context, data) {\n // window.dataLayer.push(data.pageDataLayer);\n // console.log(\"login:register:error\", window.dataLayer);\n // });\n\n // Subscribe Success\n $doc.on(\"Subscribe:Submit:Success\", function (context, data) {\n window.dataLayer.push(data.pageDataLayer);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n //  Need Help  on click Data Layer //\n $doc.on(\"click\", \".need-help-btn\", function () {\n var needHelpData = {};\n needHelpData.event = 'need_help_click';\n needHelpData.user_type = userType ? userType : 'new_user';\n needHelpData.user_status = userLogin ? userLogin : 'nonlogged_in';\n needHelpData.customer_type = customerType ? customerType : 'new_customer';\n needHelpData.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n needHelpData.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!needHelpData) {\n return;\n }\n window.dataLayer.push(needHelpData);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // Mega Menu on click Data Layer //\n $doc.on(\"click\", \"[data-gtm-mega-menu-onclick]\", function () {\n var $gtmOnclickElem = $(this);\n var megaMenuObject = $gtmOnclickElem.data(\"gtm-mega-menu-onclick\");\n megaMenuObject.section = sectionClickedStatus ? sectionClickedStatus : 'NA';\n megaMenuObject.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n megaMenuObject.user_type = userType ? userType : 'new_user';\n megaMenuObject.user_status = userLogin ? userLogin : 'nonlogged_in';\n megaMenuObject.customer_type = customerType ? customerType : 'new_customer';\n megaMenuObject.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n megaMenuObject.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!megaMenuObject) {\n return;\n }\n window.dataLayer.push(megaMenuObject);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // Category Menu on click Data Layer //\n $doc.on(\"click\", \"[data-gtm-mega-menu-category-onclick]\", function () {\n var $gtmOnclickElem = $(this);\n var megaMenuObject = $gtmOnclickElem.data(\"gtm-mega-menu-category-onclick\");\n megaMenuObject.section = sectionClickedStatus ? sectionClickedStatus : 'NA';\n megaMenuObject.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n megaMenuObject.user_type = userType ? userType : 'new_user';\n megaMenuObject.user_status = userLogin ? userLogin : 'nonlogged_in';\n megaMenuObject.customer_type = customerType ? customerType : 'new_customer';\n megaMenuObject.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n megaMenuObject.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!megaMenuObject) {\n return;\n }\n window.dataLayer.push(megaMenuObject);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // Sub Category Menu on click Data Layer //\n $doc.on(\"click\", \"[data-gtm-mega-menu-sub-category-onclick]\", function () {\n var $gtmOnclickElem = $(this);\n var megaMenuObject = $gtmOnclickElem.data(\"gtm-mega-menu-sub-category-onclick\");\n megaMenuObject.section = sectionClickedStatus ? sectionClickedStatus : 'NA';\n megaMenuObject.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n megaMenuObject.user_type = userType ? userType : 'new_user';\n megaMenuObject.user_status = userLogin ? userLogin : 'nonlogged_in';\n megaMenuObject.customer_type = customerType ? customerType : 'new_customer';\n megaMenuObject.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n megaMenuObject.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!megaMenuObject) {\n return;\n }\n window.dataLayer.push(megaMenuObject);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // Log out success click Data Layer //\n $doc.on(\"click\", \"[data-gtm-logout-success-onclick]\", function () {\n var logoutSuccessData = {\n event: 'logout_success',\n user_status_event: 'nonlogged_in',\n user_t
97ype: userType ? userType : 'new_user',\n user_status: 'nonlogged_in',\n customer_type: customerType ? customerType : 'new_customer',\n userID: 'NA',\n subscription_status: subscribeStatus ? subscribeStatus : 'non-subscribed'\n };\n sessionStorage.setItem('gtm_logout_success_event', JSON.stringify(logoutSuccessData));\n });\n $(function () {\n var savedLogoutData = sessionStorage.getItem('gtm_logout_success_event');\n if (savedLogoutData) {\n try {\n var parsedLogoutData = JSON.parse(savedLogoutData);\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push(parsedLogoutData);\n sessionStorage.removeItem('gtm_logout_success_event');\n } catch (e) {\n console.error(\"Error parsing logout success GTM data\", e);\n }\n }\n });\n $(function () {\n var savedLogoutProfileData = sessionStorage.getItem('gtm_my_profile_logout_event');\n if (savedLogoutProfileData) {\n try {\n var parsedLogoutProfileData = JSON.parse(savedLogoutProfileData);\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push(parsedLogoutProfileData);\n sessionStorage.removeItem('gtm_my_profile_logout_event');\n } catch (e) {\n console.error(\"Error parsing logout profile GTM data\", e);\n }\n }\n });\n $(function () {\n var savedLoginData = sessionStorage.getItem('gtm_login_success_event');\n if (savedLoginData) {\n try {\n var parsedLoginData = JSON.parse(savedLoginData);\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push(parsedLoginData);\n sessionStorage.removeItem('gtm_login_success_event');\n } catch (e) {\n console.error(\"Error parsing login success GTM data\", e);\n }\n }\n });\n\n // Logo click Data Layer\n $doc.on(\"click\", \"[data-gtm-logo-click-onclick]\", function () {\n var logoClick = $(this).data(\"gtm-logo-click-onclick\");\n logoClick.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n logoClick.user_type = userType ? userType : 'new_user';\n logoClick.user_status = userLogin ? userLogin : 'nonlogged_in';\n logoClick.customer_type = customerType ? customerType : 'new_customer';\n logoClick.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n logoClick.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!logoClick) {\n return;\n }\n window.dataLayer.push(logoClick);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // Hamburger icon click Data Layer\n $doc.on(\"click\", \"[data-gtm-hamburger-icon-onclick]\", function () {\n var hamburgerClick = $(this).data(\"gtm-hamburger-icon-onclick\");\n hamburgerClick.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n hamburgerClick.user_type = userType ? userType : 'new_user';\n hamburgerClick.user_status = userLogin ? userLogin : 'nonlogged_in';\n hamburgerClick.customer_type = customerType ? customerType : 'new_customer';\n hamburgerClick.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n hamburgerClick.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!hamburgerClick) {\n return;\n }\n window.dataLayer.push(hamburgerClick);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // Hamburger icon click Data Layer\n $doc.on(\"click\", \"[data-gtm-header-click-onclick]\", function () {\n var headerClick = $(this).data(\"gtm-header-click-onclick\");\n headerClick.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n headerClick.user_type = userType ? userType : 'new_user';\n headerClick.user_status = userLogin ? userLogin : 'nonlogged_in';\n headerClick.customer_type = customerType ? customerType : 'new_customer';\n headerClick.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n headerClick.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!headerClick) {\n return;\n }\n window.dataLayer.push(headerClick);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // Top Navigation click Data Layer\n var searchInputValue;\n $doc.on(\"click\", \"[data-gtm-top-navigation-onclick]\", function () {\n if (window.matchMedia(\"(max-width: 767px)\").matches) {\n searchInputValue = $('.search-mobile .search-field').val();\n } else {\n searchInputValue = $('.custom-site-search .search-field').val();\n }\n localStorage.setItem('searchInputValue', searchInputValue);\n var topNavigation = $(this).data(\"gtm-top-navigation-onclick\");\n topNavigation.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n topNavigation.user_type = userType ? userType : 'new_user';\n topNavigation.user_status = userLogin ? userLogin : 'nonlogged_in';\n topNavigation.customer_type = customerType ? customerType : 'new_customer';\n topNavigation.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n topNavigation.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!topNavigation) {\n return;\n }\n window.dataLayer.push(topNavigation);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // Search Option click Data Layer\n $doc.on(\"click\", \"[data-gtm-search-option-onclick]\", function () {\n if (window.matchMedia(\"(max-width: 767px)\").matches) {\n searchInputValue = $('.search-mobile .search-field').val();\n } else {\n searchInputValue = $('.custom-site-search .search-field').val();\n }\n localStorage.setItem('searchInputValue', searchInputValue);\n var searchOption = $(this).data(\"gtm-search-option-onclick\");\n searchOption.search_element = searchInputValue ? searchInputValue : 'NA';\n searchOption.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n searchOption.user_type = userType ? userType : 'new_user';\n searchOption.user_status = userLogin ? userLogin : 'nonlogged_in';\n searchOption.customer_type = customerType ? customerType : 'new_customer';\n searchOption.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n searchOption.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!searchOption) {\n return;\n }\n window.dataLayer.push(searchOption);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // Search Option click Data Layer\n $(\".custom-site-search .search-field\").on(\"keypress\", function (event) {\n if (event.key === \"Enter\") {\n searchInputValue = $('.custom-site-search .search-field').val();\n localStorage.setItem('searchInputValue', searchInputValue);\n }\n });\n $(\".search-mobile .search-field\").on(\"keypress\", function (event) {\n if (event.key === \"Enter\") {\n searchInputValue = $('.search-mobile .search-field').val();\n localStorage.setItem('searchInputValue', searchInputValue);\n }\n });\n // No result search page Data Layer\n $(window).on('load', function () {\n var searchInputValueLocalStorage = localStorage.getItem(\"searchInputValue\");\n var search_count = $('.custom_main_heddingBlocks>p>span').html() ? $('.custom_main_heddingBlocks>p>
97span').html().replace(/\\D/g, '') : null;\n if (searchInputValueLocalStorage) {\n if (pageType == 'PLP_page') {\n if (search_count > 0) {\n var noResultSearchPage = {};\n noResultSearchPage.event = 'search_successfull';\n noResultSearchPage.search_element = searchInputValueLocalStorage ? searchInputValueLocalStorage : 'NA';\n noResultSearchPage.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n noResultSearchPage.user_type = userType ? userType : 'new_user';\n noResultSearchPage.user_status = userLogin ? userLogin : 'nonlogged_in';\n noResultSearchPage.customer_type = customerType ? customerType : 'new_customer';\n noResultSearchPage.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n noResultSearchPage.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!noResultSearchPage) {\n return;\n }\n window.dataLayer.push(noResultSearchPage);\n console.log(\"Datalayer\", window.dataLayer);\n localStorage.removeItem('searchInputValue');\n } else {\n var noResultSearchPage = {};\n noResultSearchPage.event = 'no_result_search_page';\n noResultSearchPage.search_element = searchInputValueLocalStorage ? searchInputValueLocalStorage : 'NA';\n noResultSearchPage.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n noResultSearchPage.user_type = userType ? userType : 'new_user';\n noResultSearchPage.user_status = userLogin ? userLogin : 'nonlogged_in';\n noResultSearchPage.customer_type = customerType ? customerType : 'new_customer';\n noResultSearchPage.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n noResultSearchPage.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!noResultSearchPage) {\n return;\n }\n window.dataLayer.push(noResultSearchPage);\n console.log(\"Datalayer\", window.dataLayer);\n localStorage.removeItem('searchInputValue');\n }\n }\n if (pageType == 'PDP_page') {\n if (search_count == null) {\n var noResultSearchPage = {};\n noResultSearchPage.event = 'search_successfull';\n noResultSearchPage.search_element = searchInputValueLocalStorage ? searchInputValueLocalStorage : 'NA';\n noResultSearchPage.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n noResultSearchPage.user_type = userType ? userType : 'new_user';\n noResultSearchPage.user_status = userLogin ? userLogin : 'nonlogged_in';\n noResultSearchPage.customer_type = customerType ? customerType : 'new_customer';\n noResultSearchPage.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n noResultSearchPage.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!noResultSearchPage) {\n return;\n }\n window.dataLayer.push(noResultSearchPage);\n console.log(\"Datalayer\", window.dataLayer);\n localStorage.removeItem('searchInputValue');\n } else {\n var noResultSearchPage = {};\n noResultSearchPage.event = 'no_result_search_page';\n noResultSearchPage.search_element = searchInputValueLocalStorage ? searchInputValueLocalStorage : 'NA';\n noResultSearchPage.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n noResultSearchPage.user_type = userType ? userType : 'new_user';\n noResultSearchPage.user_status = userLogin ? userLogin : 'nonlogged_in';\n noResultSearchPage.customer_type = customerType ? customerType : 'new_customer';\n noResultSearchPage.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n noResultSearchPage.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!noResultSearchPage) {\n return;\n }\n window.dataLayer.push(noResultSearchPage);\n console.log(\"Datalayer\", window.dataLayer);\n localStorage.removeItem('searchInputValue');\n }\n }\n }\n });\n\n // Login on click page Data Layer\n $doc.on(\"login:fromHeader\", \"[data-gtm-login-onclick]\", function () {\n var loginClick = $(this).data(\"gtm-login-onclick\");\n loginClick.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n loginClick.user_type = userType ? userType : 'new_user';\n loginClick.user_status = userLogin ? userLogin : 'nonlogged_in';\n loginClick.customer_type = customerType ? customerType : 'new_customer';\n loginClick.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n loginClick.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';
97\n if (!loginClick) {\n return;\n }\n window.dataLayer.push(loginClick);\n console.log(\"Datalayer\", window.dataLayer);\n });\n $doc.on('login:cartLogin', '[data-gtm-cart-login-onclick]', function () {\n var loginClick = $(this).data(\"gtm-cart-login-onclick\");\n loginClick.cta_text = 'sign_in_and_checkout';\n loginClick.user_type = userType ? userType : 'new_user';\n loginClick.user_status = userLogin ? userLogin : 'nonlogged_in';\n loginClick.customer_type = customerType ? customerType : 'new_customer';\n loginClick.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n loginClick.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!loginClick) {\n return;\n }\n window.dataLayer.push(loginClick);\n console.log(\"Datalayer\", window.dataLayer);\n });\n $doc.on(\"Edit:Profile:Success\", function (context, data) {\n var editProfileData = {\n event: 'profile_page_save_cta',\n user_id: gtmCustomerNumber || 'NA',\n phone_number: data.phone || 'NA',\n email_address: data.result.email || 'NA',\n gender: 'NA',\n full_name: data.firstName || 'NA',\n date_of_birth: data.dob || 'NA',\n user_type: userType ? userType : 'new_user',\n user_status: userLogin ? userLogin : 'nonlogged_in',\n customer_type: customerType ? customerType : 'new_customer',\n subscription_status: subscribeStatus ? subscribeStatus : 'non-subscribed'\n };\n sessionStorage.setItem('gtm_profile_save_event', JSON.stringify(editProfileData));\n });\n $(function () {\n var savedProfileData = sessionStorage.getItem('gtm_profile_save_event');\n if (savedProfileData) {\n try {\n var parsedProfileData = JSON.parse(savedProfileData);\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push(parsedProfileData);\n sessionStorage.removeItem('gtm_profile_save_event');\n } catch (e) {}\n }\n });\n\n //Below function (event) triggers when edit profile page loads\n $(function () {\n var profileEditClick = $(\"[data-gtm-editprofile-onclick]\").data(\"gtm-editprofile-onclick\");\n if (!profileEditClick) {\n return;\n }\n if (profileEditClick.date_of_birth === 'null null') {\n profileEditClick.date_of_birth = 'NA';\n }\n profileEditClick.user_type = userType ? userType : 'new_user';\n profileEditClick.user_status = 'logged_in';\n profileEditClick.customer_type = customerType ? customerType : 'new_customer';\n profileEditClick.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n window.dataLayer.push(profileEditClick);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // Signup on click page Data Layer\n $doc.on(\"click\", \"[data-gtm-signup-onclick]\", function () {\n var signupClick = $(this).data(\"gtm-signup-onclick\");\n signupClick.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n signupClick.user_type = userType ? userType : 'new_user';\n signupClick.user_status = userLogin ? userLogin : 'nonlogged_in';\n signupClick.customer_type = customerType ? customerType : 'new_customer';\n signupClick.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n signupClick.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!signupClick) {\n return;\n }\n window.dataLayer.push(signupClick);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // Remove Wishlist on click page Data Layer\n $doc.on(\"click\", \"[data-gtm-remove-wishlist-onclick]\", function () {\n var removeWishlist = $(this).data(\"gtm-remove-wishlist-onclick\");\n removeWishlist.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n removeWishlist.user_type = userType ? userType : 'new_user';\n removeWishlist.user_status = userLogin ? userLogin : 'nonlogged_in';\n removeWishlist.customer_type = customerType ? customerType : 'new_customer';\n removeWishlist.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n removeWishlist.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!removeWishlist) {\n return;\n }\n window.dataLayer.push(removeWishlist);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // My Profile Option Click page Data Layer\n $doc.on(\"click\", \"[data-gtm-my-profile-option-onclick]\", function () {\n var myProfileOption = $(this).data(\"gtm-my-profile-option-onclick\");\n myProfileOption.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n myProfileOption.user_type = userType ? userType : 'new_user';\n myProfileOption.user_status = userLogin ? userLogin : 'nonlogged_in';\n myProfileOption.customer_type = customerType ? customerType : 'new_customer';\n myProfileOption.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n myProfileOption.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!myProfileOption) {\n return;\n }\n window.dataLayer.push(myProfileOption);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // my account option onclick\n $doc.on(\"click\", \"[data-gtm-my-account-option-onclick]\", function () {\n var myAccountOption = $(this).data(\"gtm-my-account-option-onclick\");\n myAccountOption.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n myAccountOption.user_type = userType ? userType : 'new_user';\n myAccountOption.user_status = userLogin ? userLogin : 'nonlogged_in';\n myAccountOption.customer_type = customerType ? customerType : 'new_customer';\n myAccountOption.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n myAccountOption.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!myAccountOption) {\n return;\n }\n window.dataLayer.push(myAccountOption);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // Breadcrumb like page Data Layer\n $doc.on(\"click\", \"[data-gtm-breadcrum-click-onclick]\", function () {\n var breadCrumbClick = $(this).data(\"gtm-breadcrum-click-onclick\");\n if (typeof breadCrumbClick === \"string\") {\n var parseBreadCrumbClick = JSON.parse(breadCrumbClick);\n } else {\n parseBreadCrumbClick = breadCrumbClick;\n }
97\n Object.keys(parseBreadCrumbClick).forEach(function (key) {\n if (parseBreadCrumbClick[key] === null) {\n parseBreadCrumbClick[key] = 'NA';\n }\n });\n\n // var decoded = decodeURIComponent(breadCrumbClick);\n parseBreadCrumbClick.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n parseBreadCrumbClick.user_type = userType ? userType : 'new_user';\n parseBreadCrumbClick.user_status = userLogin ? userLogin : 'nonlogged_in';\n parseBreadCrumbClick.customer_type = customerType ? customerType : 'new_customer';\n parseBreadCrumbClick.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n parseBreadCrumbClick.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!parseBreadCrumbClick) {\n return;\n }\n window.dataLayer.push(parseBreadCrumbClick);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // check pincode click dataLayer\n $doc.on(\"click\", \"[data-gtm-check-pincode-onclick]\", function () {\n var checkPincode = $(this).data(\"gtm-check-pincode-onclick\");\n checkPincode.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n checkPincode.user_type = userType ? userType : 'new_user';\n checkPincode.user_status = userLogin ? userLogin : 'nonlogged_in';\n checkPincode.customer_type = customerType ? customerType : 'new_customer';\n checkPincode.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n checkPincode.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!checkPincode) {\n return;\n }\n window.dataLayer.push(checkPincode);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // Bottom Navigation Click Data Layer\n $doc.on(\"click\", \"[data-gtm-bottom-navigation-onclick]\", function () {\n var bottomNavigation = $(this).data(\"gtm-bottom-navigation-onclick\");\n bottomNavigation.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n bottomNavigation.user_type = userType ? userType : 'new_user';\n bottomNavigation.user_status = userLogin ? userLogin : 'nonlogged_in';\n bottomNavigation.customer_type = customerType ? customerType : 'new_customer';\n bottomNavigation.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n bottomNavigation.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!bottomNavigation) {\n return;\n }\n window.dataLayer.push(bottomNavigation);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // product_category_click Data Layer\n $doc.on(\"click\", \"[data-gtm-product-category-click-onclick]\", function () {\n var productCategoryClick = $(this).data(\"gtm-product-category-click-onclick\");\n productCategoryClick.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n productCategoryClick.user_type = userType ? userType : 'new_user';\n productCategoryClick.user_status = userLogin ? userLogin : 'nonlogged_in';\n productCategoryClick.customer_type = customerType ? customerType : 'new_customer';\n productCategoryClick.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n productCategoryClick.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!productCategoryClick) {\n return;\n }\n window.dataLayer.push(productCategoryClick);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // fragrances_we_love_click Data Layer\n $doc.on(\"click\", \"[data-gtm-fragrances-we-love-click-onclick]\", function () {\n var fragrancesWeLoveClick = $(this).data(\"gtm-fragrances-we-love-click-onclick\");\n fragrancesWeLoveClick.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n fragrancesWeLoveClick.user_type = userType ? userType : 'new_user';\n fragrancesWeLoveClick.user_status = userLogin ? userLogin : 'nonlogged_in';\n fragrancesWeLoveClick.customer_type = customerType ? customerType : 'new_customer';\n fragrancesWeLoveClick.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n fragrancesWeLoveClick.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';
97\n if (!fragrancesWeLoveClick) {\n return;\n }\n window.dataLayer.push(fragrancesWeLoveClick);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // show_more_click Data Layer\n $(\".gtm-show-more-onclick\").click(function () {\n var showMoreClick = $(this).data(\"gtm-show-more-onclick\");\n showMoreClick.user_status = userLogin ? userLogin : 'nonlogged_in';\n if (!showMoreClick) {\n return;\n }\n window.dataLayer.push(showMoreClick);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // carrousal_arrow_click Data Layer\n $doc.on(\"click\", \"[data-gtm-carrousal-arrow-onclick]\", function () {\n var carrousalArrow = $(this).data(\"gtm-carrousal-arrow-onclick\");\n carrousalArrow.user_type = userType ? userType : 'new_user';\n carrousalArrow.user_status = userLogin ? userLogin : 'nonlogged_in';\n carrousalArrow.customer_type = customerType ? customerType : 'new_customer';\n carrousalArrow.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n carrousalArrow.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!carrousalArrow) {\n return;\n }\n window.dataLayer.push(carrousalArrow);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // arrow_click Data Layer\n $(\".gtm-arrow-click-onclick\").click(function () {\n var arrowClick = $(this).data(\"gtm-arrow-click-onclick\");\n arrowClick.user_type = userType ? userType : 'new_user';\n arrowClick.user_status = userLogin ? userLogin : 'nonlogged_in';\n arrowClick.customer_type = customerType ? customerType : 'new_customer';\n arrowClick.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n arrowClick.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';
97\n if (!arrowClick) {\n return;\n }\n window.dataLayer.push(arrowClick);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // continue_shopping Data Layer \n $doc.on(\"click\", \"[data-gtm-continue-shopping-onclick]\", function () {\n var continueShopping = $(this).data(\"gtm-continue-shopping-onclick\");\n continueShopping.user_type = userType ? userType : 'new_user';\n continueShopping.user_status = userLogin ? userLogin : 'nonlogged_in';\n continueShopping.customer_type = customerType ? customerType : 'new_customer';\n continueShopping.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n continueShopping.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!continueShopping) {\n return;\n }\n window.dataLayer.push(continueShopping);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // Error Page Load Data Layer //\n $(window).on('load', function () {\n if ($(\"#error_page\").hasClass(\"bbw-main-error\")) {\n var errorPageLoad = {};\n errorPageLoad.event = 'error_page_load';\n errorPageLoad.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n errorPageLoad.user_type = userType ? userType : 'new_user';\n errorPageLoad.user_status = userLogin ? userLogin : 'nonlogged_in';\n errorPageLoad.customer_type = customerType ? customerType : 'new_customer';\n errorPageLoad.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n errorPageLoad.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!errorPageLoad) {\n return;\n }\n window.dataLayer.push(errorPageLoad);\n console.log(\"Datalayer\", window.dataLayer);\n }\n });\n\n // coupon submit click datalayer\n $doc.on(\"click\", \"[data-gtm-coupon-submit-onclick]\", function () {\n var couponCode = $('#couponCode').val();\n if (!couponCode) {\n return;\n }\n var couponSubmitClick = $(this).data(\"gtm-coupon-submit-onclick\");\n couponSubmitClick.coupon_name = couponCode ? couponCode : 'NA';\n couponSubmitClick.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n couponSubmitClick.user_type = userType ? userType : 'new_user';\n couponSubmitClick.user_status = userLogin ? userLogin : 'nonlogged_in';\n couponSubmitClick.customer_type = customerType ? customerType : 'new_customer';\n couponSubmitClick.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n couponSubmitClick.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!couponSubmitClick) {\n return;\n }\n window.dataLayer.push(couponSubmitClick);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // checkout steps click datalayer\n $doc.on(\"click\", \"[data-gtm-checkout-steps-onclick]\", function () {\n var checkoutSteps = $(this).data(\"gtm-checkout-steps-onclick\");\n checkoutSteps.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n checkoutSteps.user_type = userType ? userType : 'new_user';\n checkoutSteps.user_status = userLogin ? userLogin : 'nonlogged_in';\n checkoutSteps.customer_type = customerType ? customerType : 'new_customer';\n checkoutSteps.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n checkoutSteps.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!checkoutSteps) {\n return;\n }\n window.dataLayer.push(checkoutSteps);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // view card click datalayer\n $doc.on(\"click\", \"[data-gtm-view-card-onclick]\", function () {\n var errorPageProductCategory = $(this).data(\"gtm-view-card-onclick\");\n errorPageProductCategory.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n errorPageProductCategory.user_type = userType ? userType : 'new_user';\n errorPageProductCategory.user_status = userLogin ? userLogin : 'nonlogged_in';\n errorPageProductCategory.customer_type = customerType ? customerType : 'new_customer';\n errorPageProductCategory.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n errorPageProductCategory.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!errorPageProductCategory) {\n return;\n }\n window.dataLayer.push(errorPageProductCategory);\n console.log(\"Datalayer\", window.dataLayer);\n });\n $doc.on('checkout:addressSaved', '[data-gtm-checkout-steps-interaction-save]', function () {\n var checkoutInteraction = $(this).data('gtm-checkout-steps-interaction-save');\n if (!checkoutInteraction) return;\n checkoutInteraction.user_status_event = userLogin || 'nonlogged_in';\n checkoutInteraction.user_type = userType || 'new_user';\n checkoutInteraction.user_status = userLogin || 'nonlogged_in';\n checkoutInteraction.customer_type = customerType || 'new_customer';\n checkoutInteraction.userID = gtmCustomerNumber || 'NA';\n checkoutInteraction.subscription_status = subscribeStatus || 'non-subscribed';\n window.dataLayer.push(checkoutInteraction);\n console.log(\"Datalayer pushed on address save\", checkoutInteraction);\n });\n\n // Checkout Interaction click Data Layer\n $doc.on(\"click\", \"[data-gtm-checkout-steps-interaction]\", function () {\n var checkoutInteraction = $(this).data(\"gtm-checkout-steps-interaction\");\n checkoutInteraction.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n checkoutInteraction.user_type = userType ? userType : 'new_user';\n checkoutInteraction.user_status = userLogin ? userLogin : 'nonlogged_in';\n checkoutInteraction.customer_type = customerType ? customerType : 'new_customer';\n checkoutInteraction.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n checkoutInteraction.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n if (!checkoutInteraction) {\n return;\n }\n window.dataLayer.push(checkoutInteraction);\n console.log(\"Datalayer\", window.dataLayer);\n });\n //to fetch edit/cancel dynamically\n $doc.on(\"click\", \"[data-gtm-checkout-steps-interaction-dynamic]\", function () {\n var $this = $(this);\n var checkoutInteraction = $this.data(\"gtm-checkout-steps-interaction-dynamic\") || {};\n var clickedAction = $this.attr(\"data-action\") || $this.text().trim();\n checkoutInteraction.element_title = clickedAction === 'edit' ? 'Edit' : 'Cancel';\n setTimeout(function () {\n var newAction = clickedAction === 'edit' ? 'cancel' : 'edit';\n $this.attr(\"data-action\", newAction);\n }, 0);\n checkoutInteraction.event = checkoutInteraction.event || 'checkout_interaction';\n checkoutInteraction.user_status_event = userLogin || 'nonlogged_in';\n checkoutInteraction.user_type = userType || 'new_user';\n checkoutInteraction.user_status = userLogin || 'nonlogged_in';\n checkoutInteraction.customer_type = customerType || 'new_customer';\n checkoutInteraction.userID = gtmCustomerNumber || 'NA';\n checkoutInteraction.subscription_status = subscribeStatus || 'non-subscribed';\n window.dataLayer.push(checkoutInteraction);\n console.log(\"DataLayer\", checkoutInteraction);\n });\n\n // Store Click Data Layer\n $doc.on(\"click\", \"[data-gtm-store-onclick]\", function () {\n var storeClick = $(this).data(\"gtm-store-onclick\");\n storeClick.user_status_event = userLogin ? userLogin : 'nonlogged_in';\n storeClick.user_type = userType ? userType : 'new_user';\n storeClick.user_status = userLogin ? userLogin : 'nonlogged_in';\n storeClick.customer_type = customerType ? customerType : 'new_customer';\n storeClick.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n storeClick.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';
97\n if (!storeClick) {\n return;\n }\n window.dataLayer.push(storeClick);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // filter_applied click Data Layer\n $doc.on('gtm:filter-applied', function (e, data) {\n var gtmData = data.filter_applied;\n gtmData.user_status_event = userLogin || 'nonlogged_in';\n gtmData.user_type = userType || 'new_user';\n gtmData.user_status = userLogin || 'nonlogged_in';\n gtmData.customer_type = customerType || 'new_customer';\n gtmData.userID = gtmCustomerNumber || 'NA';\n gtmData.subscription_status = subscribeStatus || 'non-subscribed';\n window.dataLayer.push(gtmData);\n // console.log('GTM Filter Event', gtmData);\n });\n\n // On click of continue as a guest Event\n $doc.on(\"click\", \"[data-gtm-continue-guest-onclick]\", function () {\n var continueAsGuest = $(this).data(\"gtm-continue-guest-onclick\");\n if (continueAsGuest) {\n continueAsGuest.user_type = 'new_user';\n continueAsGuest.user_status = 'nonlogged_in';\n continueAsGuest.customer_type = 'new_customer';\n continueAsGuest.userID = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n continueAsGuest.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n } else {\n return;\n }\n window.dataLayer.push(continueAsGuest);\n console.log(\"Datalayer\", window.dataLayer);\n });\n\n // order cancel click data layer\n $doc.on(\"click\", \"[data-gtm-cancelorder-onclick]\", function () {\n var orderCancelClick = $(this).data(\"gtm-cancelorder-onclick\");\n if (!orderCancelClick) {\n return;\n }\n orderCancelClick.element_title = orderCancelClick.element_title || 'Cancel';\n orderCancelClick.product_name = orderCancelClick.product_name || 'NA';\n orderCancelClick.page_type = 'order details';\n orderCancelClick.custom_user_id = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n orderCancelClick.user_type = userType ? userType : 'new_user';\n orderCancelClick.user_status = userLogin ? userLogin : 'nonlogged_in';\n orderCancelClick.customer_type = customerType ? customerType : 'new_customer';\n orderCancelClick.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n window.dataLayer.push(orderCancelClick);\n });\n\n // Order Cancel Modal Interaction Data Layer\n $doc.on(\"click\", \"[data-gtm-cancelorder-popup-onclick]\", function () {\n var cancelOrderPopupInteraction = $(this).data(\"gtm-cancelorder-popup-onclick\");\n if (!cancelOrderPopupInteraction) {\n return;\n }\n cancelOrderPopupInteraction.product_name = $(\"#cancelOrderModal\").attr(\"data-product-name\") || 'NA';\n cancelOrderPopupInteraction.page_type = 'order details';\n cancelOrderPopupInteraction.custom_user_id = gtmCustomerNumber ? gtmCustomerNumber : 'NA';\n cancelOrderPopupInteraction.user_type = userType ? userType : 'new_user';\n cancelOrderPopupInteraction.user_status = userLogin ? userLogin : 'nonlogged_in';\n cancelOrderPopupInteraction.customer_type = customerType ? customerType : 'new_customer';\n cancelOrderPopupInteraction.subscription_status = subscribeStatus ? subscribeStatus : 'non-subscribed';\n window.dataLayer.push(cancelOrderPopupInteraction);\n console.log(cancelOrderPopupInteraction);\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jYXJ0cmlkZ2VzL2ludF9ndG1fYmF0aGFuZGJvZHkvY2FydHJpZGdlL2NsaWVudC9kZWZhdWx0L2pzL2d0bS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2NhcnRyaWRnZXMvaW50X2d0bV9iYXRoYW5kYm9keS9jYXJ0cmlkZ2UvY2xpZW50L2RlZmF1bHQvanMvZ3RtLmpzPzdhMTQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIHNlYXJjaElucHV0VmFsdWU7XHJcbnZhciBwbHBndG0gPSByZXF1aXJlKCcuL3BscCcpO1xyXG52YXIgcHJvbW90aW9uID0gcmVxdWlyZSgnLi9wcm9tb3Rpb24nKTtcclxuXHJcbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciAkZG9jID0gJChkb2N1bWVudCk7XHJcbiAgICB3aW5kb3cuZGF0YUxheWVyID0gd2luZG93LmRhdGFMYXllciB8fCBbXTtcclxuICAgIHZhciBwYWdlVHlwZSA9ICQoXCIuZ3RtLXBhZ2UtdHlwZVwiKS52YWwoKTtcclxuICAgIHZhciBndG1DdXN0b21lck51bWJlciA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJndG1fQ3VzdG9tZXJfTnVtYmVyXCIpO1xyXG4gICAgdmFyIHVzZXJMb2dpbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ1c2VyX2xvZ2dlZGluXCIpO1xyXG4gICAgdmFyIHVzZXJUeXBlID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInVzZXJfdHlwZVwiKTtcclxuICAgIHZhciBjdXN0b21lclR5cGUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwiY3VzdG9tZXJfdHlwZVwiKTtcclxuICAgIHZhciBzdWJzY3JpYmVTdGF0dXMgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwic3Vic2NyaWJlX3N0YXR1c1wiKTtcclxuICAgIHZhciBwYWdlX3R5cGUgPSAkKCcuZ3RtLXBhZ2UtdHlwZScpLnZhbCgpO1xyXG4gICAgdmFyIGJhbm5lck5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdCQldfYmFubmVyX25hbWUnKTtcclxuICAgIGlmKCFiYW5uZXJOYW1lKXtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdCQldfYmFubmVyX25hbWUnLCAnTkEnKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gYmFubmVyIGNsaWNrXHJcbiAgICAkZG9jLm9uKCdjbGljaycsICcuZ3RtX2Jhbm5lcl9iYncnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGJhbm5lcl9uYW1lID0gJCh0aGlzKS5hdHRyKCd0aXRsZScpO1xyXG4gICAgICAgIGlmKGJhbm5lcl9uYW1lKXtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnQkJXX2Jhbm5lcl9uYW1lJywgYmFubmVyX25hbWUpO1xyXG4gICAgICAgI
97H1cclxuICAgIH0pXHJcblxyXG4gICAgLy8gb25jbGljayBzaG93IG1vcmUgYnV0dG9uIFxyXG4gICAgJGRvYy5vbignYWZ0ZXJTaG93TW9yZUJ0bkNsaWNrZWQnLCBmdW5jdGlvbiAoY29udGV4dCxkYXRhKSB7XHJcbiAgICAgICAgcGxwZ3RtLl9zdWJzY3JpYmVQTFAoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHBscGd0bS5fc3Vic2NyaWJlUExQKCk7XHJcblxyXG4gICAgcHJvbW90aW9uLl9zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAvL1Bhc3Mgc2VjdGlvbiBwYXJhbWV0ZXIgYmFzZWQgb24gdGhlIGRldmljZS8vXHJcbiAgICB2YXIgc2VjdGlvbkNsaWNrZWRTdGF0dXM7XHJcbiAgICAgICAgJCggZG9jdW1lbnQgKS5yZWFkeShmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiggJCh3aW5kb3cpLndpZHRoKCkgPiA3NjggKSB7IFxyXG4gICAgICAgICAgICBzZWN0aW9uQ2xpY2tlZFN0YXR1cyA9ICd0b3BfbmF2aWdhdGlvbic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHNlY3Rpb25DbGlja2VkU3RhdHVzID0gJ2hhbWJ1cmdlcic7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gYWRkIHRvIGNhcnQgZXZlbnRcclxuICAgICRkb2Mub24oJ3Byb2R1Y3Q6YWZ0ZXJBZGRUb0NhcnQnLCBmdW5jdGlvbiAoY29udGV4dCxkYXRhKSB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gJCgnLmFkZC10by1jYXJ0JykuZGF0YSgnaW5kZXgnKTtcclxuICAgICAgICBpZighaW5kZXgpIGluZGV4ID0gMTtcclxuICAgICAgICBkYXRhLnBhZ2VEYXRhTGF5ZXIuZWNvbW1lcmNlLml0ZW1zWzBdLmluZGV4ID0gcGFyc2VJbnQoaW5kZXgsIDEwKTtcclxuICAgICAgICBkYXRhLnBhZ2VEYXRhTGF5ZXIuYmFubmVyX25hbWUgPSBiYW5uZXJOYW1lID8gYmFubmVyTmFtZSA6ICdOQSc7XHJcbiAgICAgICAgZGF0YS5wYWdlRGF0YUxheWVyLnBhZ2VfdHlwZSA9IHBhZ2VfdHlwZTtcclxuICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goeyBlY29tbWVyY2U6IG51bGwgfSk7XHJcbiAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKGRhdGEucGFnZURhdGFMYXllcik7XHJcbiAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKGRhdGEucGFnZURhdGFMYXllckdUTURhdGEpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiQWRkVG9DYXJ0RGF0YWxheWVyXCIsd2luZG93LmRhdGFMYXllcik7XHJcbiAgICB9KTtcclxuICAgIFxyXG4gICAgdmFyIHBheW1lbnRJbmZvUHVzaGVkID0gZmFsc2U7XHJcbiAgICAkZG9jLm9uKCdjaGVja291dDp1cGRhdGVDaGVja291dFZpZXcnLCBmdW5jdGlvbiAoY29udGV4dCwgZGF0YSkge1xyXG4gICAgICAgIC8vIGFkZF9wYXltZW50X2luZm8gZnJvbSBDaGVja291dFNlcnZpY2VzLVN1Ym1pdFBheW1lbnRcclxuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnBhZ2VEYXRhTGF5ZXIgJiYgZGF0YS5wYWdlRGF0YUxheWVyLmV2ZW50ID09PSAnYWRkX3BheW1lbnRfaW5mbycpIHtcclxuICAgICAgICAgICAgaWYgKCFwYXltZW50SW5mb1B1c2hlZCkge1xyXG4gICAgICAgICAgICAgICAgcGF5bWVudEluZm9QdXNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKHsgZWNvbW1lcmNlOiBudWxsIH0pO1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKGRhdGEucGFnZURhdGFMYXllcik7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkRhdGFsYXllclwiLCB3aW5kb3cuZGF0YUxheWVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSAmJiBkYXRhLnBhZ2VEYXRhTGF5ZXIpIHtcclxuICAgICAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKGRhdGEucGFnZURhdGFMYXllcik7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRGF0YWxheWVyXCIsIHdpbmRvdy5kYXRhTGF5ZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGFkZFByb2R1Y3QgdG8gd2lzaGxpc3RcclxuICAgICRkb2Mub24oXCJ3aXNobGlzdDphZGRQcm9kdWN0XCIsIGZ1bmN0aW9uIChjb250ZXh0LCBkYXRhKSB7XHJcbiAgICAgICAgdmFyIGJyZWFkY3J1bWJzID0gW107XHJcbiAgICAgICAgJCgnLmJyZWFkY3J1bWInKS5maXJzdCgpLmZpbmQoJy5icmVhZGNydW1iLWl0ZW0nKS5lYWNoKGZ1bmN0aW9uIChpZHgpIHtcclxuICAgICAgICAgICAgdmFyIHRleHQgPSAkKHRoaXMpLnRleHQoKS50cmltKCk7XHJcbiAgICAgICAgICAgIGlmIChpZHggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWRjcnVtYnMucHVzaCh0ZXh0KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoYnJlYWRjcnVtYnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBkYXRhLnBhZ2VEYXRhTGF5ZXIuYnJlYWRjcnVtX3NlcXVlbmNlID0gYnJlYWRjcnVtYnMuam9pbignID4gJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRhdGEucGFnZURhdGFMYXllci5iYW5uZXJfbmFtZSA9IGJhbm5lck5hbWUgPyBiYW5uZXJOYW1lIDogJ05BJztcclxuICAgICAgICBkYXRhLnBhZ2VEYXRhTGF5ZXIucGFnZV90eXBlID0gcGFnZV90eXBlID8gcGFnZV90eXBlOiAnUExQX1BhZ2UnO1xyXG4gICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChkYXRhLnBhZ2VEYXRhTGF5ZXIpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGF0YWxheWVyXCIsIHdpbmRvdy5kYXRhTGF5ZXIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gcmVtb3ZlIHByb2R1Y3QgZnJvbSBjYXJ0ICh1cGRhdGUgcHJvZHVjdCBxdHkgaW4gY2FydClcclxuICAgICRkb2Mub24oJ2NhcnQ6dXBkYXRlJywgZnVuY3Rpb24gKGNvbnRleHQsIGRhdGEpIHtcclxuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnBhZ2VEYXRhTGF5ZXIpIHtcclxuICAgICAgICAgICAgZGF0YS5wYWdlRGF0YUxheWVyLmJhbm5lcl9uYW1lID0gYmFubmVyTmFtZSA/IGJhbm5lck5hbWUgOiAnTkEnO1xyXG4gICAgICAgI
97H1cclxuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnBhZ2VEYXRhTGF5ZXJHVE1EYXRhKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChkYXRhLnBhZ2VEYXRhTGF5ZXJHVE1EYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5wYWdlRGF0YUxheWVyICYmIGRhdGEucGFnZURhdGFMYXllclswXSAmJiBkYXRhLnBhZ2VEYXRhTGF5ZXJbMF0uaW5jcmVkZWNyZUxheWVyKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLnBhZ2VEYXRhTGF5ZXJbMF0uaW5jcmVkZWNyZUxheWVyLmV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goeyBlY29tbWVyY2U6IG51bGwgfSk7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goZGF0YS5wYWdlRGF0YUxheWVyWzBdLmluY3JlZGVjcmVMYXllcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRhdGEucGFnZURhdGFMYXllclswXS52aWV3Q2FydExheWVyICYmIGRhdGEucGFnZURhdGFMYXllclswXS52aWV3Q2FydExheWVyLmV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goeyBlY29tbWVyY2U6IG51bGwgfSk7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goZGF0YS5wYWdlRGF0YUxheWVyWzBdLnZpZXdDYXJ0TGF5ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhICYmIGRhdGEucGFnZURhdGFMYXllcikge1xyXG4gICAgICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goeyBlY29tbWVyY2U6IG51bGwgfSk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChkYXRhLnBhZ2VEYXRhTGF5ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZyhcIkRhdGFMYXllclwiLCB3aW5kb3cuZGF0YUxheWVyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFN1Ym1pdCBjdXN0b21lclxyXG4gICAgJGRvYy5vbihcIkNoZWNrb3V0RGF0YTpTdWJtaXRDdXN0b21lckRhdGFcIiwgZnVuY3Rpb24gKGNvbnRleHQsIGRhdGEpIHtcclxuICAgICAgICAvLyBDaGVjayBpZiBkYXRhLnBhZ2VEYXRhTGF5ZXIgaXMgZGVmaW5lZFxyXG4gICAgICAgIGlmIChkYXRhLnBhZ2VEYXRhTGF5ZXIpIHtcclxuICAgICAgICAgICAgZGF0YS5wYWdlRGF0YUxheWVyLmJhbm5lcl9uYW1lID0gYmFubmVyTmFtZSB8fCAnTkEnO1xyXG4gICAgICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goZGF0YS5wYWdlRGF0YUxheWVyKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJEYXRhbGF5ZXJcIiwgd2luZG93LmRhdGFMYXllcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yOiBkYXRhLnBhZ2VEYXRhTGF5ZXIgaXMgdW5kZWZpbmVkXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFN1Ym1pdCBTaGlwcGluZ1xyXG4gICAgJGRvYy5vbihcIkNoZWNrb3V0RGF0YTpTdWJtaXRTaGlwcGluZ0RhdGFcIiwgZnVuY3Rpb24gKGNvbnRleHQsIGRhdGEpIHtcclxuICAgICAgICBkYXRhLnBhZ2VEYXRhTGF5ZXIuYmFubmVyX25hbWUgPSBiYW5uZXJOYW1lID8gYmFubmVyTmFtZSA6ICdOQSc7XHJcbiAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKHsgZWNvbW1lcmNlOiBudWxsIH0pO1xyXG4gICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChkYXRhLnBhZ2VEYXRhTGF5ZXIpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGF0YWxheWVyXCIsIHdpbmRvdy5kYXRhTGF5ZXIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gc3VibWl0IFBheW1lbnRJbmZvXHJcbiAgICAkZG9jLm9uKFwicGxhY2VPcmRlckRhdGE6UGF5bWVudEluZm9EYXRhXCIsIGZ1bmN0aW9uIChjb250ZXh0LCBkYXRhKSB7XHJcbiAgICAgICAgaWYgKCFkYXRhIHx8ICFkYXRhLnBhZ2VEYXRhTGF5ZXIgfHwgIWRhdGEucGFnZURhdGFMYXllci5ldmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkYXRhLnBhZ2VEYXRhTGF5ZXIuZXZlbnQgPT09ICdhZGRfcGF5bWVudF9pbmZvJykge1xyXG4gICAgICAgICAgICBpZiAoIXBheW1lbnRJbmZvUHVzaGVkKSB7XHJcbiAgICAgICAgICAgICAgICBwYXltZW50SW5mb1B1c2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goeyBlY29tbWVyY2U6IG51bGwgfSk7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goZGF0YS5wYWdlRGF0YUxheWVyKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRGF0YWxheWVyXCIsIHdpbmRvdy5kYXRhTGF5ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKHsgZWNvbW1lcmNlOiBudWxsIH0pO1xyXG4gICAgICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goZGF0YS5wYWdlRGF0YUxheWVyKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJEYXRhbGF5ZXJcIiwgd2luZG93LmRhdGFMYXllcik7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gcHJvZHVjdCBjbGlja1xyXG4gICAgJGRvYy5vbignY2xpY2snLCAnW2RhdGEtZ3RtLWVuaGFuY2VkZWNvbW1lcmNlLW9uY2xpY2tdJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciAkZ3RtT25jbGlja0VsZW0gPSAkKHRoaXMpO1xyXG4gICAgICAgIHZhciBndG1PbmNsaWNrT2JqZWN0ID0gJGd0bU9uY2xpY2tFbGVtLmRhdGEoJ2d0bS1lbmhhbmNlZGVjb21tZXJjZS1vbmNsaWNrJyk7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gJCh0aGlzKS5kYXRhKFwiaW5kZXhcIik7XHJcbiAgICAgICAgaWYgKCFpbmRleCkgaW5kZXggPSAxO1xyXG4gICAgICAgIHZhciBpdGVtT2JqID0gZ3RtT25jbGlja09iamVjdC5lY29tbWVyY2UuaXRlbXNbMF07XHJcbiAgICAgICAgaXRlbU9iai5pbmRleCA9IHBhcnNlSW50KGluZGV4LCAxMCk7XHJcbiAgICAgICAgaXRlbU9iai5xdWFudGl0eSA9IDE7XHJcbiAgICAgICAgaWYgKGl0ZW1PYmoucHJpY2UpIHtcclxuICAgICAgICAgICAgaXRlbU9iai5wcmljZSA9IHBhcnNlRmxvYXQo
97aXRlbU9iai5wcmljZSkgfHwgMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIER5bmFtaWMgYnJlYWRjcnVtYiBzZXF1ZW5jZSBmcm9tIHZpc2libGUgVUlcclxuICAgICAgICB2YXIgYnJlYWRjcnVtYnNBcnIgPSBbXTtcclxuICAgICAgICAkKCcuYnJlYWRjcnVtYicpLmZpcnN0KCkuZmluZCgnLmJyZWFkY3J1bWItaXRlbScpLmVhY2goZnVuY3Rpb24gKGlkeCkge1xyXG4gICAgICAgICAgICB2YXIgdGV4dCA9ICQodGhpcykudGV4dCgpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKHRleHQpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFkY3J1bWJzQXJyLnB1c2goaWR4ID09PSAwID8gdGV4dC50b1VwcGVyQ2FzZSgpIDogdGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB2YXIgdWlCcmVhZGNydW1iU2VxdWVuY2UgPSBicmVhZGNydW1ic0Fyci5sZW5ndGggPiAwID8gYnJlYWRjcnVtYnNBcnIuam9pbignID4gJykgOiAocGFnZUJhc2UuYnJlYWRjcnVtX3NlcXVlbmNlIHx8ICdOQScpO1xyXG5cclxuICAgICAgICB2YXIgdXNlckxvZ2luU3RhdHVzID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXNlcl9sb2dnZWRpbicpIHx8IHVzZXJMb2dpbjtcclxuICAgICAgICB2YXIgdXNlclN0YXR1c1ZhbCA9ICh1c2VyTG9naW5TdGF0dXMgPT09ICdsb2dnZWRfaW4nIHx8IHVzZXJMb2dpblN0YXR1cyA9PT0gJ3RydWUnKSA/ICdsb2dnZWRfaW4nIDogJ25vbmxvZ2dlZF9pbic7XHJcblxyXG4gICAgICAgIGd0bU9uY2xpY2tPYmplY3QudXNlcklEID0gZ3RtQ3VzdG9tZXJOdW1iZXIgPyBndG1DdXN0b21lck51bWJlciA6ICdOQScgO1xyXG4gICAgICAgIHZhciBhY3RpdmVQYWdlVHlwZSA9ICh3aW5kb3cucGFnZURhdGFMYXllciAmJiB3aW5kb3cucGFnZURhdGFMYXllci5wYWdlX3R5cGUpIHx8ICh3aW5kb3cuUExQX3BhZ2UgJiYgd2luZG93LlBMUF9wYWdlLnBhZ2VfdHlwZSkgfHwgJCgnLmd0bS1wYWdlLXR5cGUnKS52YWwoKSB8fCAnUExQX3BhZ2UnO1xyXG4gICAgICAgIGd0bU9uY2xpY2tPYmplY3QucGFnZV90eXBlID0gYWN0aXZlUGFnZVR5cGU7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnc2VsZWN0X2l0ZW1fcGFnZV90eXBlJywgYWN0aXZlUGFnZVR5cGUpO1xyXG4gICAgICAgIGd0bU9uY2xpY2tPYmplY3QudXNlcl90eXBlID0gdXNlclR5cGUgPyB1c2VyVHlwZSA6ICdOQSc7XHJcbiAgICAgICAgZ3RtT25jbGlja09iamVjdC5jdXN0b21lcl90eXBlID0gY3VzdG9tZXJUeXBlID8gY3VzdG9tZXJUeXBlIDogJ05BJztcclxuICAgICAgICBndG1PbmNsaWNrT2JqZWN0LnN1YnNjcmlwdGlvbl9zdGF0dXMgPSBzdWJzY3JpYmVTdGF0dXMgPyBzdWJzY3JpYmVTdGF0dXMgOiAnTkEnO1xyXG4gICAgICAgIGd0bU9uY2xpY2tPYmplY3QudXNlcl9zdGF0dXMgPSB1c2VyU3RhdHVzVmFsO1xyXG4gICAgICAgIGd0bU9uY2xpY2tPYmplY3QuYnJlYWRjcnVtX3NlcXVlbmNlID0gdWlCcmVhZGNydW1iU2VxdWVuY2U7XHJcbiAgICAgICAgZ3RtT25jbGlja09iamVjdC5iYW5uZXJfbmFtZSA9IGJhbm5lck5hbWUgPyBiYW5uZXJOYW1lIDogJ05BJztcclxuICAgICAgICBndG1PbmNsaWNrT2JqZWN0LnN0b2NrX3N0YXR1cyA9IHBhZ2VCYXNlLnN0b2NrX3N0YXR1cyA/IHBhZ2VCYXNlLnN0b2NrX3N0YXR1cyA6ICdpbl9zdG9jayc7XHJcbiAgICAgICAgaWYgKCFndG1PbmNsaWNrT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKHsgZWNvbW1lcmNlOiBudWxsIH0pO1xyXG4gICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChndG1PbmNsaWNrT2JqZWN0KTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcInByb2R1Y3RDbGlja1wiLHdpbmRvdy5kYXRhTGF5ZXIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gbG9naW4gc3VjY2Vzc1xyXG4gICAgJGRvYy5vbihcIkxvZ2luOnN1Y2Nlc3NcIiwgZnVuY3Rpb24gKGNvbnRleHQsIGRhdGEpIHtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdndG1fbG9naW5fc3VjY2Vzc19ldmVudCcsIEpTT04uc3RyaW5naWZ5KGRhdGEucGFnZURhdGFMYXllcikpO1xyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIC8vIGxvZ2luIGVycm9yXHJcbiAgICAkZG9jLm9uKFwiTG9naW46ZXJyb3JcIiwgZnVuY3Rpb24gKGNvbnRleHQsIGRhdGEpIHtcclxuICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goZGF0YS5wYWdlRGF0YUxheWVyKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkxvZ2luOmVycm9yXCIsIHdpbmRvdy5kYXRhTGF5ZXIpO1xyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIC8vIHJlZ2lzdGVyOnN1Y2Nlc3NcclxuICAgICRkb2Mub24oXCJsb2dpbjpyZWdpc3RlcjpzdWNjZXNzXCIsIGZ1bmN0aW9uIChjb250ZXh0LCBkYXRhKSB7XHJcbiAgICAgICAgZGF0YS5wYWdlRGF0YUxheWVyLnVzZXJfaWQgPSBkYXRhLnVzZXJJZDtcclxuICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goZGF0YS5wYWdlRGF0YUxheWVyKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImxvZ2luOnJlZ2lzdGVyOnN1Y2Nlc3NcIiwgd2luZG93LmRhdGFMYXllcik7XHJcbiAgICB9KTtcclxuICAgIFxyXG4gICAgLy8gcmVnaXN0ZXI6ZXJyb3JcclxuICAgIC8vICRkb2Mub24oXCJsb2dpbjpyZWdpc3RlcjplcnJvclwiLCBmdW5jdGlvbiAoY29udGV4dCwgZGF0YSkge1xyXG4gICAgLy8gICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChkYXRhLnBhZ2VEYXRhTGF5ZXIpO1xyXG4gICAgLy8gICAgIGNvbnNvbGUubG9nKFwibG9naW46cmVnaXN0ZXI6ZXJyb3JcIiwgd2luZG93LmRhdGFMYXllcik7XHJcbiAgICAvLyB9KTtcclxuICAgIFxyXG4gICAgLy8gU3Vic2NyaWJlIFN1Y2Nlc3NcclxuICAgICRkb2Mub24oXCJTdWJzY3JpYmU6U3VibWl0OlN1Y2Nlc3NcIiwgZnVuY3Rpb24gKGNvbnRleHQsIGRhdGEpIHtcclxuICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goZGF0YS5wYWdlRGF0YUxheWVyKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkRhdGFsYXllclwiLCB3aW5kb3cuZGF0YUxheWVyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIMKgTmVlZCBIZWxwIMKgb24gY2xpY2sgRGF0YSBMYXllciAvL1xyXG4gICAgJGRvYy5vbihcImNsaWNrXCIsIFwiLm5lZWQtaGVscC1idG5cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgI
97HZhciBuZWVkSGVscERhdGEgPSB7fTtcclxuICAgICAgICBuZWVkSGVscERhdGEuZXZlbnQgPSAnbmVlZF9oZWxwX2NsaWNrJztcclxuICAgICAgICBuZWVkSGVscERhdGEudXNlcl90eXBlID0gdXNlclR5cGUgPyB1c2VyVHlwZSA6ICduZXdfdXNlcic7XHJcbiAgICAgICAgbmVlZEhlbHBEYXRhLnVzZXJfc3RhdHVzPXVzZXJMb2dpbiA/IHVzZXJMb2dpbiA6ICdub25sb2dnZWRfaW4nO1xyXG4gICAgICAgIG5lZWRIZWxwRGF0YS5jdXN0b21lcl90eXBlPWN1c3RvbWVyVHlwZSA/IGN1c3RvbWVyVHlwZSA6ICduZXdfY3VzdG9tZXInO1xyXG4gICAgICAgIG5lZWRIZWxwRGF0YS51c2VySUQgPSBndG1DdXN0b21lck51bWJlciA/IGd0bUN1c3RvbWVyTnVtYmVyIDogJ05BJztcclxuICAgICAgICBuZWVkSGVscERhdGEuc3Vic2NyaXB0aW9uX3N0YXR1cz1zdWJzY3JpYmVTdGF0dXMgPyBzdWJzY3JpYmVTdGF0dXMgOiAnbm9uLXN1YnNjcmliZWQnO1xyXG4gICAgICAgIGlmICghbmVlZEhlbHBEYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2gobmVlZEhlbHBEYXRhKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkRhdGFsYXllclwiLCB3aW5kb3cuZGF0YUxheWVyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIE1lZ2EgIE1lbnUgb24gY2xpY2sgRGF0YSBMYXllciAvL1xyXG4gICAgJGRvYy5vbihcImNsaWNrXCIsIFwiW2RhdGEtZ3RtLW1lZ2EtbWVudS1vbmNsaWNrXVwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyICRndG1PbmNsaWNrRWxlbSA9ICQodGhpcyk7XHJcbiAgICAgICAgdmFyIG1lZ2FNZW51T2JqZWN0ID0gJGd0bU9uY2xpY2tFbGVtLmRhdGEoXCJndG0tbWVnYS1tZW51LW9uY2xpY2tcIik7XHJcbiAgICAgICAgbWVnYU1lbnVPYmplY3Quc2VjdGlvbiA9IHNlY3Rpb25DbGlja2VkU3RhdHVzID8gc2VjdGlvbkNsaWNrZWRTdGF0dXMgOidOQSc7XHJcbiAgICAgICAgbWVnYU1lbnVPYmplY3QudXNlcl9zdGF0dXNfZXZlbnQgPSB1c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBtZWdhTWVudU9iamVjdC51c2VyX3R5cGUgPSB1c2VyVHlwZSA/IHVzZXJUeXBlIDogJ25ld191c2VyJztcclxuICAgICAgICBtZWdhTWVudU9iamVjdC51c2VyX3N0YXR1cz11c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBtZWdhTWVudU9iamVjdC5jdXN0b21lcl90eXBlPWN1c3RvbWVyVHlwZSA/IGN1c3RvbWVyVHlwZSA6ICduZXdfY3VzdG9tZXInO1xyXG4gICAgICAgIG1lZ2FNZW51T2JqZWN0LnVzZXJJRCA9ICBndG1DdXN0b21lck51bWJlciA/IGd0bUN1c3RvbWVyTnVtYmVyIDogJ05BJztcclxuICAgICAgICBtZWdhTWVudU9iamVjdC5zdWJzY3JpcHRpb25fc3RhdHVzPXN1YnNjcmliZVN0YXR1cyA/IHN1YnNjcmliZVN0YXR1cyA6ICdub24tc3Vic2NyaWJlZCc7XHJcbiAgICAgICAgaWYgKCFtZWdhTWVudU9iamVjdCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKG1lZ2FNZW51T2JqZWN0KTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkRhdGFsYXllclwiLCB3aW5kb3cuZGF0YUxheWVyKTtcclxuICAgIH0pO1xyXG5cclxuICAgLy8gQ2F0ZWdvcnkgIE1lbnUgb24gY2xpY2sgRGF0YSBMYXllciAvL1xyXG4gICAgJGRvYy5vbihcImNsaWNrXCIsIFwiW2Rh
97dGEtZ3RtLW1lZ2EtbWVudS1jYXRlZ29yeS1vbmNsaWNrXVwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyICRndG1PbmNsaWNrRWxlbSA9ICQodGhpcyk7XHJcbiAgICAgICAgdmFyIG1lZ2FNZW51T2JqZWN0ID0gJGd0bU9uY2xpY2tFbGVtLmRhdGEoXCJndG0tbWVnYS1tZW51LWNhdGVnb3J5LW9uY2xpY2tcIik7XHJcbiAgICAgICAgbWVnYU1lbnVPYmplY3Quc2VjdGlvbiA9IHNlY3Rpb25DbGlja2VkU3RhdHVzID8gc2VjdGlvbkNsaWNrZWRTdGF0dXMgOidOQSc7XHJcbiAgICAgICAgbWVnYU1lbnVPYmplY3QudXNlcl9zdGF0dXNfZXZlbnQgPSB1c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBtZWdhTWVudU9iamVjdC51c2VyX3R5cGUgPSB1c2VyVHlwZSA/IHVzZXJUeXBlIDogJ25ld191c2VyJztcclxuICAgICAgICBtZWdhTWVudU9iamVjdC51c2VyX3N0YXR1cz11c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBtZWdhTWVudU9iamVjdC5jdXN0b21lcl90eXBlPWN1c3RvbWVyVHlwZSA/IGN1c3RvbWVyVHlwZSA6ICduZXdfY3VzdG9tZXInO1xyXG4gICAgICAgIG1lZ2FNZW51T2JqZWN0LnVzZXJJRCA9ICBndG1DdXN0b21lck51bWJlciA/IGd0bUN1c3RvbWVyTnVtYmVyIDogJ05BJztcclxuICAgICAgICBtZWdhTWVudU9iamVjdC5zdWJzY3JpcHRpb25fc3RhdHVzPXN1YnNjcmliZVN0YXR1cyA/IHN1YnNjcmliZVN0YXR1cyA6ICdub24tc3Vic2NyaWJlZCc7XHJcbiAgICAgICAgaWYgKCFtZWdhTWVudU9iamVjdCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChtZWdhTWVudU9iamVjdCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJEYXRhbGF5ZXJcIiwgd2luZG93LmRhdGFMYXllcik7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBTdWIgQ2F0ZWdvcnkgTWVudSBvbiBjbGljayBEYXRhIExheWVyIC8vXHJcbiAgICAkZG9jLm9uKFwiY2xpY2tcIiwgXCJbZGF0YS1ndG0tbWVnYS1tZW51LXN1Yi1jYXRlZ29yeS1vbmNsaWNrXVwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyICRndG1PbmNsaWNrRWxlbSA9ICQodGhpcyk7XHJcbiAgICAgICAgdmFyIG1lZ2FNZW51T2JqZWN0ID0gJGd0bU9uY2xpY2tFbGVtLmRhdGEoXCJndG0tbWVnYS1tZW51LXN1Yi1jYXRlZ29yeS1vbmNsaWNrXCIpO1xyXG4gICAgICAgIG1lZ2FNZW51T2JqZWN0LnNlY3Rpb24gPSBzZWN0aW9uQ2xpY2tlZFN0YXR1cyA/IHNlY3Rpb25DbGlja2VkU3RhdHVzIDonTkEnO1xyXG4gICAgICAgIG1lZ2FNZW51T2JqZWN0LnVzZXJfc3RhdHVzX2V2ZW50ID0gdXNlckxvZ2luID8gdXNlckxvZ2luIDogJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgbWVnYU1lbnVPYmplY3QudXNlcl90eXBlID0gdXNlclR5cGUgPyB1c2VyVHlwZSA6ICduZXdfdXNlcic7XHJcbiAgICAgICAgbWVnYU1lbnVPYmplY3QudXNlcl9zdGF0dXM9dXNlckxvZ2luID8gdXNlckxvZ2luIDogJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgbWVnYU1lbnVPYmplY3QuY3VzdG9tZXJfdHlwZT1jdXN0b21lclR5cGUgPyBjdXN0b21lclR5cGUgOiAnbmV3X2N1c3RvbWVyJztcclxuICAgICAgICBtZWdhTWVudU9iamVjdC51c2VySUQgPSAgZ3RtQ3VzdG9tZXJOdW1iZXIgPyBndG1DdXN0b21lck51bWJlciA6ICdOQSc7XHJcbiAgICAgICAgbWVnYU1lbnVPYmplY3Quc3Vic2NyaXB0aW9uX3N0YXR1cz1zdWJzY3JpYmVTdGF0dXMgPyBzdWJzY3JpYmVTdGF0dXMgOiAnbm9uLXN1YnNjcmliZWQnO1xyXG4gICAgICAgIGlmICghbWVnYU1lbnVPYmplY3QpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2gobWVnYU1lbnVPYmplY3QpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGF0YWxheWVyXCIsIHdpbmRvdy5kYXRhTGF5ZXIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gIExvZyBvdXQgc3VjY2VzcyBjbGljayBEYXRhIExheWVyIC8vXHJcbiAgICRkb2Mub24oXCJjbGlja1wiLCBcIltkYXRhLWd0bS1sb2dvdXQtc3VjY2Vzcy1vbmNsaWNrXVwiLCBmdW5jdGlvbiAoKSAge1xyXG4gICAgdmFyIGxvZ291dFN1Y2Nlc3NEYXRhID0ge1xyXG4gICAgICAgIGV2ZW50OiAnbG9nb3V0X3N1Y2Nlc3MnLFxyXG4gICAgICAgIHVzZXJfc3RhdHVzX2V2ZW50OiAnbm9ubG9nZ2VkX2luJyxcclxuICAgICAgICB1c2VyX3R5cGU6IHVzZXJUeXBlID8gdXNlclR5cGUgOiAnbmV3X3VzZXInLFxyXG4gICAgICAgIHVzZXJfc3RhdHVzOiAnbm9ubG9nZ2VkX2luJyxcclxuICAgICAgICBjdXN0b21lcl90eXBlOiBjdXN0b21lclR5cGUgPyBjdXN0b21lclR5cGUgOiAnbmV3X2N1c3RvbWVyJyxcclxuICAgICAgICB1c2VySUQ6ICdOQScsXHJcbiAgICAgICAgc3Vic2NyaXB0aW9uX3N0YXR1czogc3Vic2NyaWJlU3RhdHVzID8gc3Vic2NyaWJlU3RhdHVzIDogJ25vbi1zdWJzY3JpYmVkJ1xyXG4gICAgfTtcclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2d0bV9sb2dvdXRfc3VjY2Vzc19ldmVudCcsIEpTT04uc3RyaW5naWZ5KGxvZ291dFN1Y2Nlc3NEYXRhKSk7XHJcbn0pO1xyXG5cclxuJChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgc2F2ZWRMb2dvdXREYXRhID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZ3RtX2xvZ291dF9zdWNjZXNzX2V2ZW50Jyk7XHJcbiAgICBpZiAoc2F2ZWRMb2dvdXREYXRhKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIHBhcnNlZExvZ291dERhdGEgPSBKU09OLnBhcnNlKHNhdmVkTG9nb3V0RGF0YSk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIgPSB3aW5kb3cuZGF0YUxheWVyIHx8IFtdO1xyXG4gICAgICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2gocGFyc2VkTG9nb3V0RGF0YSk7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2d0bV9sb2dvdXRfc3VjY2Vzc19ldmVudCcpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgbG9nb3V0IHN1Y2Nlc3MgR1RNIGRhdGFcIiwgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcbiAgICAkKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2Y
97XIgc2F2ZWRMb2dvdXRQcm9maWxlRGF0YSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2d0bV9teV9wcm9maWxlX2xvZ291dF9ldmVudCcpO1xyXG4gICAgICAgIGlmIChzYXZlZExvZ291dFByb2ZpbGVEYXRhKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VkTG9nb3V0UHJvZmlsZURhdGEgPSBKU09OLnBhcnNlKHNhdmVkTG9nb3V0UHJvZmlsZURhdGEpO1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmRhdGFMYXllciA9IHdpbmRvdy5kYXRhTGF5ZXIgfHwgW107XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2gocGFyc2VkTG9nb3V0UHJvZmlsZURhdGEpO1xyXG4gICAgICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnZ3RtX215X3Byb2ZpbGVfbG9nb3V0X2V2ZW50Jyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGxvZ291dCBwcm9maWxlIEdUTSBkYXRhXCIsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgJChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNhdmVkTG9naW5EYXRhID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZ3RtX2xvZ2luX3N1Y2Nlc3NfZXZlbnQnKTtcclxuICAgICAgICBpZiAoc2F2ZWRMb2dpbkRhdGEpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJzZWRMb2dpbkRhdGEgPSBKU09OLnBhcnNlKHNhdmVkTG9naW5EYXRhKTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIgPSB3aW5kb3cuZGF0YUxheWVyIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKHBhcnNlZExvZ2luRGF0YSk7XHJcbiAgICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdndG1fbG9naW5fc3VjY2Vzc19ldmVudCcpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcGFyc2luZyBsb2dpbiBzdWNjZXNzIEdUTSBkYXRhXCIsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gIExvZ28gY2xpY2sgRGF0YSBMYXllclxyXG4gICAgJGRvYy5vbihcImNsaWNrXCIsIFwiW2Rh
97dGEtZ3RtLWxvZ28tY2xpY2stb25jbGlja11cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBsb2dvQ2xpY2sgPSAkKHRoaXMpLmRhdGEoXCJndG0tbG9nby1jbGljay1vbmNsaWNrXCIpO1xyXG4gICAgICAgIGxvZ29DbGljay51c2VyX3N0YXR1c19ldmVudCA9IHVzZXJMb2dpbiA/IHVzZXJMb2dpbiA6ICdub25sb2dnZWRfaW4nO1xyXG4gICAgICAgIGxvZ29DbGljay51c2VyX3R5cGUgPSB1c2VyVHlwZSA/IHVzZXJUeXBlIDogJ25ld191c2VyJztcclxuICAgICAgICBsb2dvQ2xpY2sudXNlcl9zdGF0dXM9dXNlckxvZ2luID8gdXNlckxvZ2luIDogJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgbG9nb0NsaWNrLmN1c3RvbWVyX3R5cGU9Y3VzdG9tZXJUeXBlID8gY3VzdG9tZXJUeXBlIDogJ25ld19jdXN0b21lcic7XHJcbiAgICAgICAgbG9nb0NsaWNrLnVzZXJJRCA9ICBndG1DdXN0b21lck51bWJlciA/IGd0bUN1c3RvbWVyTnVtYmVyIDogJ05BJztcclxuICAgICAgICBsb2dvQ2xpY2suc3Vic2NyaXB0aW9uX3N0YXR1cz1zdWJzY3JpYmVTdGF0dXMgPyBzdWJzY3JpYmVTdGF0dXMgOiAnbm9uLXN1YnNjcmliZWQnO1xyXG4gICAgICAgIGlmICghbG9nb0NsaWNrKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2gobG9nb0NsaWNrKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkRhdGFsYXllclwiLCB3aW5kb3cuZGF0YUxheWVyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vICBIYW1idXJnZXIgaWNvbiBjbGljayBEYXRhIExheWVyXHJcbiAgICAkZG9jLm9uKFwiY2xpY2tcIiwgXCJbZGF0YS1ndG0taGFtYnVyZ2VyLWljb24tb25jbGlja11cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBoYW1idXJnZXJDbGljayA9ICQodGhpcykuZGF0YShcImd0bS1oYW1idXJnZXItaWNvbi1vbmNsaWNrXCIpO1xyXG4gICAgICAgIGhhbWJ1cmdlckNsaWNrLnVzZXJfc3RhdHVzX2V2ZW50ID0gdXNlckxvZ2luID8gdXNlckxvZ2luIDogJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgaGFtYnVyZ2VyQ2xpY2sudXNlcl90eXBlID0gdXNlclR5cGUgPyB1c2VyVHlwZSA6ICduZXdfdXNlcic7XHJcbiAgICAgICAgaGFtYnVyZ2VyQ2xpY2sudXNlcl9zdGF0dXM9dXNlckxvZ2luID8gdXNlckxvZ2luIDogJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgaGFtYnVyZ2VyQ2xpY2suY3VzdG9tZXJfdHlwZT1jdXN0b21lclR5cGUgPyBjdXN0b21lclR5cGUgOiAnbmV3X2N1c3RvbWVyJztcclxuICAgICAgICBoYW1idXJnZXJDbGljay51c2VySUQgPSAgZ3RtQ3VzdG9tZXJOdW1iZXIgPyBndG1DdXN0b21lck51bWJlciA6ICdOQSc7XHJcbiAgICAgICAgaGFtYnVyZ2VyQ2xpY2suc3Vic2NyaXB0aW9uX3N0YXR1cz1zdWJzY3JpYmVTdGF0dXMgPyBzdWJzY3JpYmVTdGF0dXMgOiAnbm9uLXN1YnNjcmliZWQnO1xyXG4gICAgICAgIGlmICghaGFtYnVyZ2VyQ2xpY2spIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChoYW1idXJnZXJDbGljayk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJEYXRhbGF5ZXJcIiwgd2luZG93LmRhdGFMYXllcik7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyAgSGFtYnVyZ2VyIGljb24gY2xpY2sgRGF0YSBMYXllclxyXG4gICAgJGRvYy5vbihcImNsaWNrXCIsIFwiW2Rh
97dGEtZ3RtLWhlYWRlci1jbGljay1vbmNsaWNrXVwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGhlYWRlckNsaWNrID0gJCh0aGlzKS5kYXRhKFwiZ3RtLWhlYWRlci1jbGljay1vbmNsaWNrXCIpO1xyXG4gICAgICAgIGhlYWRlckNsaWNrLnVzZXJfc3RhdHVzX2V2ZW50ID0gdXNlckxvZ2luID8gdXNlckxvZ2luIDogJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgaGVhZGVyQ2xpY2sudXNlcl90eXBlID0gdXNlclR5cGUgPyB1c2VyVHlwZSA6ICduZXdfdXNlcic7XHJcbiAgICAgICAgaGVhZGVyQ2xpY2sudXNlcl9zdGF0dXM9dXNlckxvZ2luID8gdXNlckxvZ2luIDogJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgaGVhZGVyQ2xpY2suY3VzdG9tZXJfdHlwZT1jdXN0b21lclR5cGUgPyBjdXN0b21lclR5cGUgOiAnbmV3X2N1c3RvbWVyJztcclxuICAgICAgICBoZWFkZXJDbGljay51c2VySUQgPSAgZ3RtQ3VzdG9tZXJOdW1iZXIgPyBndG1DdXN0b21lck51bWJlciA6ICdOQSc7XHJcbiAgICAgICAgaGVhZGVyQ2xpY2suc3Vic2NyaXB0aW9uX3N0YXR1cz1zdWJzY3JpYmVTdGF0dXMgPyBzdWJzY3JpYmVTdGF0dXMgOiAnbm9uLXN1YnNjcmliZWQnO1xyXG4gICAgICAgIGlmICghaGVhZGVyQ2xpY2spIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChoZWFkZXJDbGljayk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJEYXRhbGF5ZXJcIiwgd2luZG93LmRhdGFMYXllcik7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyAgVG9wIE5hdmlnYXRpb24gY2xpY2sgRGF0YSBMYXllclxyXG4gICAgdmFyIHNlYXJjaElucHV0VmFsdWU7XHJcbiAgICAkZG9jLm9uKFwiY2xpY2tcIiwgXCJbZGF0YS1ndG0tdG9wLW5hdmlnYXRpb24tb25jbGlja11cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmKHdpbmRvdy5tYXRjaE1lZGlhKFwiKG1heC13aWR0aDogNzY3cHgpXCIpLm1hdGNoZXMpeyBcclxuICAgICAgICAgICAgc2VhcmNoSW5wdXRWYWx1ZSA9ICQoJy5zZWFyY2gtbW9iaWxlIC5zZWFyY2gtZmllbGQnKS52YWwoKTsgXHJcbiAgICAgICAgfSBlbHNleyBcclxuICAgICAgICBzZWFyY2hJbnB1dFZhbHVlID0gJCgnLmN1c3RvbS1zaXRlLXNlYXJjaCAuc2VhcmNoLWZpZWxkJykudmFsKCk7IFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc2VhcmNoSW5wdXRWYWx1ZScsIHNlYXJjaElucHV0VmFsdWUpO1xyXG4gICAgICAgIHZhciB0b3BOYXZpZ2F0aW9uID0gJCh0aGlzKS5kYXRhKFwiZ3RtLXRvcC1uYXZpZ2F0aW9uLW9uY2xpY2tcIik7XHJcbiAgICAgICAgdG9wTmF2aWdhdGlvbi51c2VyX3N0YXR1c19ldmVudCA9IHVzZXJMb2dpbiA/IHVzZXJMb2dpbiA6ICdub25sb2dnZWRfaW4nO1xyXG4gICAgICAgIHRvcE5hdmlnYXRpb24udXNlcl90eXBlID0gdXNlclR5cGUgPyB1c2VyVHlwZSA6ICduZXdfdXNlcic7XHJcbiAgICAgICAgdG9wTmF2aWdhdGlvbi51c2VyX3N0YXR1cz11c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICB0b3BOYXZpZ2F0aW9uLmN1c3RvbWVyX3R5cGU9Y3VzdG9tZXJUeXBlID8gY3VzdG9tZXJUeXBlIDogJ25ld19jdXN0b21lcic7XHJcbiAgICAgICAgdG9wTmF2aWdhdGlvbi51c2VySUQgPSAgZ3RtQ3VzdG9tZXJOdW1iZXIgPyBndG1DdXN0b21lck51bWJlciA6ICdOQSc7XHJcbiAgICAgICAgdG9wTmF2aWdhdGlvbi5zdWJzY3JpcHRpb25fc3RhdHVzPXN1YnNjcmliZVN0YXR1cyA/IHN1YnNjcmliZVN0YXR1cyA6ICdub24tc3Vic2NyaWJlZCc7XHJcbiAgICAgICAgaWYgKCF0b3BOYXZpZ2F0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2godG9wTmF2aWdhdGlvbik7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJEYXRhbGF5ZXJcIiwgd2luZG93LmRhdGFMYXllcik7XHJcbiAgICB9KTtcclxuICBcclxuICAgIC8vICBTZWFyY2ggT3B0aW9uIGNsaWNrIERhdGEgTGF5ZXJcclxuICAgICRkb2Mub24oXCJjbGlja1wiLCBcIltkYXRhLWd0bS1zZWFyY2gtb3B0aW9uLW9uY2xpY2tdXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZih3aW5kb3cubWF0Y2hNZWRpYShcIihtYXgtd2lkdGg6IDc2N3B4KVwiKS5tYXRjaGVzKXsgXHJcbiAgICAgICAgICAgIHNlYXJjaElucHV0VmFsdWUgPSAkKCcuc2VhcmNoLW1vYmlsZSAuc2VhcmNoLWZpZWxkJykudmFsKCk7IFxyXG4gICAgICAgIH0gZWxzZXsgXHJcbiAgICAgICAgc2VhcmNoSW5wdXRWYWx1ZSA9ICQoJy5jdXN0b20tc2l0ZS1zZWFyY2ggLnNlYXJjaC1maWVsZCcpLnZhbCgpOyBcclxuICAgICAgICB9XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzZWFyY2hJbnB1dFZhbHVlJywgc2VhcmNoSW5wdXRWYWx1ZSk7XHJcbiAgICAgICAgdmFyIHNlYXJjaE9wdGlvbiA9ICQodGhpcykuZGF0YShcImd0bS1zZWFyY2gtb3B0aW9uLW9uY2xpY2tcIik7XHJcbiAgICAgICAgc2VhcmNoT3B0aW9uLnNlYXJjaF9lbGVtZW50ID0gc2VhcmNoSW5wdXRWYWx1ZSA/IHNlYXJjaElucHV0VmFsdWUgOidOQSc7XHJcbiAgICAgICAgc2VhcmNoT3B0aW9uLnVzZXJfc3RhdHVzX2V2ZW50ID0gdXNlckxvZ2luID8gdXNlckxvZ2luIDogJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgc2VhcmNoT3B0aW9uLnVzZXJfdHlwZSA9IHVzZXJUeXBlID8gdXNlclR5cGUgOiAnbmV3X3VzZXInO1xyXG4gICAgICAgIHNlYXJjaE9wdGlvbi51c2VyX3N0YXR1cz11c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBzZWFyY2hPcHRpb24uY3VzdG9tZXJfdHlwZT1jdXN0b21lclR5cGUgPyBjdXN0b21lclR5cGUgOiAnbmV3X2N1c3RvbWVyJztcclxuICAgICAgICBzZWFyY2hPcHRpb24udXNlcklEID0gIGd0bUN1c3RvbWVyTnVtYmVyID8gZ3RtQ3VzdG9tZXJOdW1iZXIgOiAnTkEnO1xyXG4gICAgICAgIHNlYXJjaE9wdGlvbi5zdWJzY3JpcHRpb25fc3RhdHVzPXN1YnNjcmliZVN0YXR1cyA/IHN1YnNjcmliZVN0YXR1cyA6ICdub24tc3Vic2NyaWJlZCc7XHJcbiAgICAgICAgaWYgKCFzZWFyY2hPcHRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgI
97H1cclxuICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goc2VhcmNoT3B0aW9uKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkRhdGFsYXllclwiLCB3aW5kb3cuZGF0YUxheWVyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vICBTZWFyY2ggT3B0aW9uIGNsaWNrIERhdGEgTGF5ZXJcclxuICAgICQoXCIuY3VzdG9tLXNpdGUtc2VhcmNoIC5zZWFyY2gtZmllbGRcIikub24oXCJrZXlwcmVzc1wiLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIikge1xyXG4gICAgICAgICAgICBzZWFyY2hJbnB1dFZhbHVlID0gJCgnLmN1c3RvbS1zaXRlLXNlYXJjaCAuc2VhcmNoLWZpZWxkJykudmFsKCk7XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzZWFyY2hJbnB1dFZhbHVlJywgc2VhcmNoSW5wdXRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBcclxuICAgICQoXCIuc2VhcmNoLW1vYmlsZSAuc2VhcmNoLWZpZWxkXCIpLm9uKFwia2V5cHJlc3NcIiwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBcIkVudGVyXCIpIHtcclxuICAgICAgICAgICAgc2VhcmNoSW5wdXRWYWx1ZSA9ICQoJy5zZWFyY2gtbW9iaWxlIC5zZWFyY2gtZmllbGQnKS52YWwoKTtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3NlYXJjaElucHV0VmFsdWUnLCBzZWFyY2hJbnB1dFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vICBObyByZXN1bHQgc2VhcmNoIHBhZ2UgRGF0YSBMYXllclxyXG4gICAgJCh3aW5kb3cpLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzZWFyY2hJbnB1dFZhbHVlTG9jYWxTdG9yYWdlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJzZWFyY2hJbnB1dFZhbHVlXCIpO1xyXG4gICAgICAgIHZhciBzZWFyY2hfY291bnQgPSAgJCgnLmN1c3RvbV9tYWluX2hlZGRpbmdCbG9ja3M+cD5zcGFuJykuaHRtbCgpID8gJCgnLmN1c3RvbV9tYWluX2hlZGRpbmdCbG9ja3M+cD5zcGFuJykuaHRtbCgpLnJlcGxhY2UoL1xcRC9nLCcnKSA6IG51bGw7XHJcbiAgICAgICAgaWYoc2VhcmNoSW5wdXRWYWx1ZUxvY2FsU3RvcmFnZSl7XHJcbiAgICAgICAgICAgIGlmKHBhZ2VUeXBlID09ICdQTFBfcGFnZScpe1xyXG4gICAgICAgICAgICBpZihzZWFyY2hfY291bnQ+MCl7XHJcbiAgICAgICAgICAgICAgICB2Y
97XIgbm9SZXN1bHRTZWFyY2hQYWdlID0ge307XHJcbiAgICAgICAgICAgICAgICBub1Jlc3VsdFNlYXJjaFBhZ2UuZXZlbnQgPSdzZWFyY2hfc3VjY2Vzc2Z1bGwnO1xyXG4gICAgICAgICAgICAgICAgbm9SZXN1bHRTZWFyY2hQYWdlLnNlYXJjaF9lbGVtZW50ID0gc2VhcmNoSW5wdXRWYWx1ZUxvY2FsU3RvcmFnZSA/IHNlYXJjaElucHV0VmFsdWVMb2NhbFN0b3JhZ2UgOidOQSc7XHJcbiAgICAgICAgICAgICAgICBub1Jlc3VsdFNlYXJjaFBhZ2UudXNlcl9zdGF0dXNfZXZlbnQgPSB1c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICAgICAgICAgIG5vUmVzdWx0U2VhcmNoUGFnZS51c2VyX3R5cGUgPSB1c2VyVHlwZSA/IHVzZXJUeXBlIDogJ25ld191c2VyJztcclxuICAgICAgICAgICAgICAgIG5vUmVzdWx0U2VhcmNoUGFnZS51c2VyX3N0YXR1cz11c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICAgICAgICAgIG5vUmVzdWx0U2VhcmNoUGFnZS5jdXN0b21lcl90eXBlPWN1c3RvbWVyVHlwZSA/IGN1c3RvbWVyVHlwZSA6ICduZXdfY3VzdG9tZXInO1xyXG4gICAgICAgICAgICAgICAgbm9SZXN1bHRTZWFyY2hQYWdlLnVzZXJJRCA9ICBndG1DdXN0b21lck51bWJlciA/IGd0bUN1c3RvbWVyTnVtYmVyIDogJ05BJztcclxuICAgICAgICAgICAgICAgIG5vUmVzdWx0U2VhcmNoUGFnZS5zdWJzY3JpcHRpb25fc3RhdHVzPXN1YnNjcmliZVN0YXR1cyA/IHN1YnNjcmliZVN0YXR1cyA6ICdub24tc3Vic2NyaWJlZCc7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW5vUmVzdWx0U2VhcmNoUGFnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChub1Jlc3VsdFNlYXJjaFBhZ2UpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJEYXRhbGF5ZXJcIiwgd2luZG93LmRhdGFMYXllcik7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnc2VhcmNoSW5wdXRWYWx1ZScpOyBcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB2Y
97XIgbm9SZXN1bHRTZWFyY2hQYWdlID0ge307XHJcbiAgICAgICAgICAgICAgICBub1Jlc3VsdFNlYXJjaFBhZ2UuZXZlbnQgPSdub19yZXN1bHRfc2VhcmNoX3BhZ2UnO1xyXG4gICAgICAgICAgICAgICAgbm9SZXN1bHRTZWFyY2hQYWdlLnNlYXJjaF9lbGVtZW50ID0gc2VhcmNoSW5wdXRWYWx1ZUxvY2FsU3RvcmFnZSA/IHNlYXJjaElucHV0VmFsdWVMb2NhbFN0b3JhZ2UgOidOQSc7XHJcbiAgICAgICAgICAgICAgICBub1Jlc3VsdFNlYXJjaFBhZ2UudXNlcl9zdGF0dXNfZXZlbnQgPSB1c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICAgICAgICAgIG5vUmVzdWx0U2VhcmNoUGFnZS51c2VyX3R5cGUgPSB1c2VyVHlwZSA/IHVzZXJUeXBlIDogJ25ld191c2VyJztcclxuICAgICAgICAgICAgICAgIG5vUmVzdWx0U2VhcmNoUGFnZS51c2VyX3N0YXR1cz11c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICAgICAgICAgIG5vUmVzdWx0U2VhcmNoUGFnZS5jdXN0b21lcl90eXBlPWN1c3RvbWVyVHlwZSA/IGN1c3RvbWVyVHlwZSA6ICduZXdfY3VzdG9tZXInO1xyXG4gICAgICAgICAgICAgICAgbm9SZXN1bHRTZWFyY2hQYWdlLnVzZXJJRCA9ICBndG1DdXN0b21lck51bWJlciA/IGd0bUN1c3RvbWVyTnVtYmVyIDogJ05BJztcclxuICAgICAgICAgICAgICAgIG5vUmVzdWx0U2VhcmNoUGFnZS5zdWJzY3JpcHRpb25fc3RhdHVzPXN1YnNjcmliZVN0YXR1cyA/IHN1YnNjcmliZVN0YXR1cyA6ICdub24tc3Vic2NyaWJlZCc7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW5vUmVzdWx0U2VhcmNoUGFnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChub1Jlc3VsdFNlYXJjaFBhZ2UpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJEYXRhbGF5ZXJcIiwgd2luZG93LmRhdGFMYXllcik7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnc2VhcmNoSW5wdXRWYWx1ZScpOyAgXHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1pZihwYWdlVHlwZSA9PSAnUERQX3BhZ2UnKXtcclxuICAgICAgICAgICAgaWYoc2VhcmNoX2NvdW50ID09ICBudWxsICl7XHJcbiAgICAgICAgICAgICAgICB2Y
97XIgbm9SZXN1bHRTZWFyY2hQYWdlID0ge307XHJcbiAgICAgICAgICAgICAgICBub1Jlc3VsdFNlYXJjaFBhZ2UuZXZlbnQgPSdzZWFyY2hfc3VjY2Vzc2Z1bGwnO1xyXG4gICAgICAgICAgICAgICAgbm9SZXN1bHRTZWFyY2hQYWdlLnNlYXJjaF9lbGVtZW50ID0gc2VhcmNoSW5wdXRWYWx1ZUxvY2FsU3RvcmFnZSA/IHNlYXJjaElucHV0VmFsdWVMb2NhbFN0b3JhZ2UgOidOQSc7XHJcbiAgICAgICAgICAgICAgICBub1Jlc3VsdFNlYXJjaFBhZ2UudXNlcl9zdGF0dXNfZXZlbnQgPSB1c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICAgICAgICAgIG5vUmVzdWx0U2VhcmNoUGFnZS51c2VyX3R5cGUgPSB1c2VyVHlwZSA/IHVzZXJUeXBlIDogJ25ld191c2VyJztcclxuICAgICAgICAgICAgICAgIG5vUmVzdWx0U2VhcmNoUGFnZS51c2VyX3N0YXR1cz11c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICAgICAgICAgIG5vUmVzdWx0U2VhcmNoUGFnZS5jdXN0b21lcl90eXBlPWN1c3RvbWVyVHlwZSA/IGN1c3RvbWVyVHlwZSA6ICduZXdfY3VzdG9tZXInO1xyXG4gICAgICAgICAgICAgICAgbm9SZXN1bHRTZWFyY2hQYWdlLnVzZXJJRCA9ICBndG1DdXN0b21lck51bWJlciA/IGd0bUN1c3RvbWVyTnVtYmVyIDogJ05BJztcclxuICAgICAgICAgICAgICAgIG5vUmVzdWx0U2VhcmNoUGFnZS5zdWJzY3JpcHRpb25fc3RhdHVzPXN1YnNjcmliZVN0YXR1cyA/IHN1YnNjcmliZVN0YXR1cyA6ICdub24tc3Vic2NyaWJlZCc7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW5vUmVzdWx0U2VhcmNoUGFnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChub1Jlc3VsdFNlYXJjaFBhZ2UpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJEYXRhbGF5ZXJcIiwgd2luZG93LmRhdGFMYXllcik7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnc2VhcmNoSW5wdXRWYWx1ZScpOyBcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB2Y
97XIgbm9SZXN1bHRTZWFyY2hQYWdlID0ge307XHJcbiAgICAgICAgICAgICAgICBub1Jlc3VsdFNlYXJjaFBhZ2UuZXZlbnQgPSdub19yZXN1bHRfc2VhcmNoX3BhZ2UnO1xyXG4gICAgICAgICAgICAgICAgbm9SZXN1bHRTZWFyY2hQYWdlLnNlYXJjaF9lbGVtZW50ID0gc2VhcmNoSW5wdXRWYWx1ZUxvY2FsU3RvcmFnZSA/IHNlYXJjaElucHV0VmFsdWVMb2NhbFN0b3JhZ2UgOidOQSc7XHJcbiAgICAgICAgICAgICAgICBub1Jlc3VsdFNlYXJjaFBhZ2UudXNlcl9zdGF0dXNfZXZlbnQgPSB1c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICAgICAgICAgIG5vUmVzdWx0U2VhcmNoUGFnZS51c2VyX3R5cGUgPSB1c2VyVHlwZSA/IHVzZXJUeXBlIDogJ25ld191c2VyJztcclxuICAgICAgICAgICAgICAgIG5vUmVzdWx0U2VhcmNoUGFnZS51c2VyX3N0YXR1cz11c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICAgICAgICAgIG5vUmVzdWx0U2VhcmNoUGFnZS5jdXN0b21lcl90eXBlPWN1c3RvbWVyVHlwZSA/IGN1c3RvbWVyVHlwZSA6ICduZXdfY3VzdG9tZXInO1xyXG4gICAgICAgICAgICAgICAgbm9SZXN1bHRTZWFyY2hQYWdlLnVzZXJJRCA9ICBndG1DdXN0b21lck51bWJlciA/IGd0bUN1c3RvbWVyTnVtYmVyIDogJ05BJztcclxuICAgICAgICAgICAgICAgIG5vUmVzdWx0U2VhcmNoUGFnZS5zdWJzY3JpcHRpb25fc3RhdHVzPXN1YnNjcmliZVN0YXR1cyA/IHN1YnNjcmliZVN0YXR1cyA6ICdub24tc3Vic2NyaWJlZCc7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW5vUmVzdWx0U2VhcmNoUGFnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChub1Jlc3VsdFNlYXJjaFBhZ2UpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJEYXRhbGF5ZXJcIiwgd2luZG93LmRhdGFMYXllcik7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnc2VhcmNoSW5wdXRWYWx1ZScpOyAgXHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBMb2dpbiBvbiBjbGljayBwYWdlIERhdGEgTGF5ZXJcclxuICAgICRkb2Mub24oXCJsb2dpbjpmcm9tSGVhZGVyXCIsIFwiW2RhdGEtZ3RtLWxvZ2luLW9uY2xpY2tdXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2Y
97XIgbG9naW5DbGljayA9ICQodGhpcykuZGF0YShcImd0bS1sb2dpbi1vbmNsaWNrXCIpO1xyXG4gICAgICAgIGxvZ2luQ2xpY2sudXNlcl9zdGF0dXNfZXZlbnQgPSB1c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBsb2dpbkNsaWNrLnVzZXJfdHlwZSA9IHVzZXJUeXBlID8gdXNlclR5cGUgOiAnbmV3X3VzZXInO1xyXG4gICAgICAgIGxvZ2luQ2xpY2sudXNlcl9zdGF0dXMgPSB1c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBsb2dpbkNsaWNrLmN1c3RvbWVyX3R5cGUgPSBjdXN0b21lclR5cGUgPyBjdXN0b21lclR5cGUgOiAnbmV3X2N1c3RvbWVyJztcclxuICAgICAgICBsb2dpbkNsaWNrLnVzZXJJRCA9IGd0bUN1c3RvbWVyTnVtYmVyID8gZ3RtQ3VzdG9tZXJOdW1iZXIgOiAnTkEnO1xyXG4gICAgICAgIGxvZ2luQ2xpY2suc3Vic2NyaXB0aW9uX3N0YXR1cz1zdWJzY3JpYmVTdGF0dXMgPyBzdWJzY3JpYmVTdGF0dXMgOiAnbm9uLXN1YnNjcmliZWQnO1xyXG4gICAgICAgIGlmICghbG9naW5DbGljaykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2gobG9naW5DbGljayk7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiRGF0YWxheWVyXCIsIHdpbmRvdy5kYXRhTGF5ZXIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJGRvYy5vbignbG9naW46Y2FydExvZ2luJywgJ1tkYXRhLWd0bS1jYXJ0LWxvZ2luLW9uY2xpY2tdJywgZnVuY3Rpb24gKCkgeyAgICBcclxuICAgIHZhciBsb2dpbkNsaWNrID0gJCh0aGlzKS5kYXRhKFwiZ3RtLWNhcnQtbG9naW4tb25jbGlja1wiKTtcclxuICAgIGxvZ2luQ2xpY2suY3RhX3RleHQgPSAnc2lnbl9pbl9hbmRfY2hlY2tvdXQnO1xyXG4gICAgbG9naW5DbGljay51c2VyX3R5cGUgPSB1c2VyVHlwZSA/IHVzZXJUeXBlIDogJ25ld191c2VyJztcclxuICAgIGxvZ2luQ2xpY2sudXNlcl9zdGF0dXM9dXNlckxvZ2luID8gdXNlckxvZ2luIDogJ25vbmxvZ2dlZF9pbic7XHJcbiAgICBsb2dpbkNsaWNrLmN1c3RvbWVyX3R5cGU9Y3VzdG9tZXJUeXBlID8gY3VzdG9tZXJUeXBlIDogJ25ld19jdXN0b21lcic7XHJcbiAgICBsb2dpbkNsaWNrLnVzZXJJRCA9ICBndG1DdXN0b21lck51bWJlciA/IGd0bUN1c3RvbWVyTnVtYmVyIDogJ05BJztcclxuICAgIGxvZ2luQ2xpY2suc3Vic2NyaXB0aW9uX3N0YXR1cz1zdWJzY3JpYmVTdGF0dXMgPyBzdWJzY3JpYmVTdGF0dXMgOiAnbm9uLXN1YnNjcmliZWQnO1xyXG4gICAgaWYgKCFsb2dpbkNsaWNrKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChsb2dpbkNsaWNrKTtcclxuICAgIGNvbnNvbGUubG9nKFwiRGF0YWxheWVyXCIsIHdpbmRvdy5kYXRhTGF5ZXIpO1xyXG4gICAgfSk7XHJcbiAgICRkb2Mub24oXCJFZGl0OlByb2ZpbGU6U3VjY2Vzc1wiLCBmdW5jdGlvbiAoY29udGV4dCwgZGF0YSkge1xyXG4gICAgbGV0IGVkaXRQcm9maWxlRGF0YSA9IHtcclxuICAgICAgICBldmVudDogJ3Byb2ZpbGVfcGFnZV9zYXZlX2N0YScsXHJcbiAgICAgICAgdXNlcl9pZDogZ3RtQ3VzdG9tZXJOdW1iZXIgfHwgJ05BJyxcclxuICAgICAgICBwaG9uZV9udW1iZXI6IGRhdGEucGhvbmUgfHwgJ05BJyxcclxuICAgICAgICBlbWFpbF9hZGRyZXNzIDogZGF0YS5yZXN1bHQuZW1haWwgfHwgJ05BJywgICAgIFxyXG4gICAgICAgICBnZW5kZXI6ICdOQScsXHJcbiAgICAgICAgZnVsbF9uYW1lOiBkYXRhLmZpcnN0TmFtZSB8fCAnTkEnLFxyXG4gICAgICAgIGRhdGVfb2ZfYmlydGg6IGRhdGEuZG9iIHx8ICdOQScsXHJcbiAgICAgICAgdXNlcl90eXBlOiB1c2VyVHlwZSA/IHVzZXJUeXBlIDogJ25ld191c2VyJyxcclxuICAgICAgICB1c2VyX3N0YXR1czogdXNlckxvZ2luID8gdXNlckxvZ2luIDogJ25vbmxvZ2dlZF9pbicsXHJcbiAgICAgICAgY3VzdG9tZXJfdHlwZTogY3VzdG9tZXJUeXBlID8gY3VzdG9tZXJUeXBlIDogJ25ld19jdXN0b21lcicsXHJcbiAgICAgICAgc3Vic2NyaXB0aW9uX3N0YXR1czogc3Vic2NyaWJlU3RhdHVzID8gc3Vic2NyaWJlU3RhdHVzIDogJ25vbi1zdWJzY3JpYmVkJ1xyXG4gICAgfTtcclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2d0bV9wcm9maWxlX3NhdmVfZXZlbnQnLCBKU09OLnN0cmluZ2lmeShlZGl0UHJvZmlsZURhdGEpKTtcclxufSk7XHJcbiBcclxuJChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgc2F2ZWRQcm9maWxlRGF0YSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2d0bV9wcm9maWxlX3NhdmVfZXZlbnQnKTtcclxuICAgIGlmIChzYXZlZFByb2ZpbGVEYXRhKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIHBhcnNlZFByb2ZpbGVEYXRhID0gSlNPTi5wYXJzZShzYXZlZFByb2ZpbGVEYXRhKTtcclxuICAgICAgICAgICAgd2luZG93LmRhdGFMYXllciA9IHdpbmRvdy5kYXRhTGF5ZXIgfHwgW107XHJcbiAgICAgICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChwYXJzZWRQcm9maWxlRGF0YSk7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2d0bV9wcm9maWxlX3NhdmVfZXZlbnQnKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICB9XHJcbn1cclxufSk7XHJcbiBcclxuXHJcbiAgICAvL0JlbG93IGZ1bmN0aW9uIChldmVudCkgdHJpZ2dlcnMgd2hlbiBlZGl0IHByb2ZpbGUgcGFnZSBsb2Fkc1xyXG4gICAgJChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHByb2ZpbGVFZGl0Q2xpY2sgPSAkKFwiW2RhdGEtZ3RtLWVkaXRwcm9maWxlLW9uY2xpY2tdXCIpLmRhdGEoXCJndG0tZWRpdHByb2ZpbGUtb25jbGlja1wiKTtcclxuICAgICAgICBpZiAoIXByb2ZpbGVFZGl0Q2xpY2spIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJvZmlsZUVkaXRDbGljay5kYXRlX29mX2JpcnRoID09PSAnbnVsbCBudWxsJykge1xyXG4gICAgICAgICAgICBwcm9maWxlRWRpdENsaWNrLmRhdGVfb2ZfYmlydGggPSAnTkEnO1xyXG4gICAgICAgI
97H1cclxuICAgICAgICBwcm9maWxlRWRpdENsaWNrLnVzZXJfdHlwZSA9IHVzZXJUeXBlID8gdXNlclR5cGUgOiAnbmV3X3VzZXInO1xyXG4gICAgICAgIHByb2ZpbGVFZGl0Q2xpY2sudXNlcl9zdGF0dXMgPSAnbG9nZ2VkX2luJztcclxuICAgICAgICBwcm9maWxlRWRpdENsaWNrLmN1c3RvbWVyX3R5cGUgPSBjdXN0b21lclR5cGUgPyBjdXN0b21lclR5cGUgOiAnbmV3X2N1c3RvbWVyJztcclxuICAgICAgICBwcm9maWxlRWRpdENsaWNrLnN1YnNjcmlwdGlvbl9zdGF0dXMgPSBzdWJzY3JpYmVTdGF0dXMgPyBzdWJzY3JpYmVTdGF0dXMgOiAnbm9uLXN1YnNjcmliZWQnO1xyXG4gICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChwcm9maWxlRWRpdENsaWNrKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkRhdGFsYXllclwiLCB3aW5kb3cuZGF0YUxheWVyKTtcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICAvLyBTaWdudXAgb24gY2xpY2sgcGFnZSBEYXRhIExheWVyXHJcbiAgICAkZG9jLm9uKFwiY2xpY2tcIiwgXCJbZGF0YS1ndG0tc2lnbnVwLW9uY2xpY2tdXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2lnbnVwQ2xpY2sgPSAkKHRoaXMpLmRhdGEoXCJndG0tc2lnbnVwLW9uY2xpY2tcIik7XHJcbiAgICAgICAgc2lnbnVwQ2xpY2sudXNlcl9zdGF0dXNfZXZlbnQgPSB1c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBzaWdudXBDbGljay51c2VyX3R5cGUgPSB1c2VyVHlwZSA/IHVzZXJUeXBlIDogJ25ld191c2VyJztcclxuICAgICAgICBzaWdudXBDbGljay51c2VyX3N0YXR1cz11c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBzaWdudXBDbGljay5jdXN0b21lcl90eXBlPWN1c3RvbWVyVHlwZSA/IGN1c3RvbWVyVHlwZSA6ICduZXdfY3VzdG9tZXInO1xyXG4gICAgICAgIHNpZ251cENsaWNrLnVzZXJJRCA9IGd0bUN1c3RvbWVyTnVtYmVyID8gZ3RtQ3VzdG9tZXJOdW1iZXIgOiAnTkEnO1xyXG4gICAgICAgIHNpZ251cENsaWNrLnN1YnNjcmlwdGlvbl9zdGF0dXM9c3Vic2NyaWJlU3RhdHVzID8gc3Vic2NyaWJlU3RhdHVzIDogJ25vbi1zdWJzY3JpYmVkJztcclxuICAgICAgICBpZiAoIXNpZ251cENsaWNrKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goc2lnbnVwQ2xpY2spO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGF0YWxheWVyXCIsIHdpbmRvdy5kYXRhTGF5ZXIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUmVtb3ZlIFdpc2hsaXN0IG9uIGNsaWNrIHBhZ2UgRGF0YSBMYXllclxyXG4gICAgJGRvYy5vbihcImNsaWNrXCIsIFwiW2Rh
97dGEtZ3RtLXJlbW92ZS13aXNobGlzdC1vbmNsaWNrXVwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHJlbW92ZVdpc2hsaXN0ID0gJCh0aGlzKS5kYXRhKFwiZ3RtLXJlbW92ZS13aXNobGlzdC1vbmNsaWNrXCIpO1xyXG4gICAgICAgIHJlbW92ZVdpc2hsaXN0LnVzZXJfc3RhdHVzX2V2ZW50ID0gdXNlckxvZ2luID8gdXNlckxvZ2luIDogJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgcmVtb3ZlV2lzaGxpc3QudXNlcl90eXBlID0gdXNlclR5cGUgPyB1c2VyVHlwZSA6ICduZXdfdXNlcic7XHJcbiAgICAgICAgcmVtb3ZlV2lzaGxpc3QudXNlcl9zdGF0dXM9dXNlckxvZ2luID8gdXNlckxvZ2luIDogJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgcmVtb3ZlV2lzaGxpc3QuY3VzdG9tZXJfdHlwZT1jdXN0b21lclR5cGUgPyBjdXN0b21lclR5cGUgOiAnbmV3X2N1c3RvbWVyJztcclxuICAgICAgICByZW1vdmVXaXNobGlzdC51c2VySUQgPSBndG1DdXN0b21lck51bWJlciA/IGd0bUN1c3RvbWVyTnVtYmVyIDogJ05BJztcclxuICAgICAgICByZW1vdmVXaXNobGlzdC5zdWJzY3JpcHRpb25fc3RhdHVzPXN1YnNjcmliZVN0YXR1cyA/IHN1YnNjcmliZVN0YXR1cyA6ICdub24tc3Vic2NyaWJlZCc7XHJcbiAgICAgICAgaWYgKCFyZW1vdmVXaXNobGlzdCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKHJlbW92ZVdpc2hsaXN0KTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkRhdGFsYXllclwiLCB3aW5kb3cuZGF0YUxheWVyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIE15IFByb2ZpbGUgT3B0aW9uIENsaWNrIHBhZ2UgRGF0YSBMYXllclxyXG4gICAgJGRvYy5vbihcImNsaWNrXCIsIFwiW2Rh
97dGEtZ3RtLW15LXByb2ZpbGUtb3B0aW9uLW9uY2xpY2tdXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbXlQcm9maWxlT3B0aW9uID0gJCh0aGlzKS5kYXRhKFwiZ3RtLW15LXByb2ZpbGUtb3B0aW9uLW9uY2xpY2tcIik7XHJcbiAgICAgICAgbXlQcm9maWxlT3B0aW9uLnVzZXJfc3RhdHVzX2V2ZW50ID0gdXNlckxvZ2luID8gdXNlckxvZ2luIDogJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgbXlQcm9maWxlT3B0aW9uLnVzZXJfdHlwZSA9IHVzZXJUeXBlID8gdXNlclR5cGUgOiAnbmV3X3VzZXInO1xyXG4gICAgICAgIG15UHJvZmlsZU9wdGlvbi51c2VyX3N0YXR1cz11c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBteVByb2ZpbGVPcHRpb24uY3VzdG9tZXJfdHlwZT1jdXN0b21lclR5cGUgPyBjdXN0b21lclR5cGUgOiAnbmV3X2N1c3RvbWVyJztcclxuICAgICAgICBteVByb2ZpbGVPcHRpb24udXNlcklEID0gZ3RtQ3VzdG9tZXJOdW1iZXIgPyBndG1DdXN0b21lck51bWJlciA6ICdOQSc7XHJcbiAgICAgICAgbXlQcm9maWxlT3B0aW9uLnN1YnNjcmlwdGlvbl9zdGF0dXM9c3Vic2NyaWJlU3RhdHVzID8gc3Vic2NyaWJlU3RhdHVzIDogJ25vbi1zdWJzY3JpYmVkJztcclxuICAgICAgICBpZiAoIW15UHJvZmlsZU9wdGlvbikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKG15UHJvZmlsZU9wdGlvbik7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJEYXRhbGF5ZXJcIiwgd2luZG93LmRhdGFMYXllcik7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBteSBhY2NvdW50IG9wdGlvbiBvbmNsaWNrXHJcbiAgICAkZG9jLm9uKFwiY2xpY2tcIiwgXCJbZGF0YS1ndG0tbXktYWNjb3VudC1vcHRpb24tb25jbGlja11cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBteUFjY291bnRPcHRpb24gPSAkKHRoaXMpLmRhdGEoXCJndG0tbXktYWNjb3VudC1vcHRpb24tb25jbGlja1wiKTtcclxuICAgICAgICBteUFjY291bnRPcHRpb24udXNlcl9zdGF0dXNfZXZlbnQgPSB1c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBteUFjY291bnRPcHRpb24udXNlcl90eXBlID0gdXNlclR5cGUgPyB1c2VyVHlwZSA6ICduZXdfdXNlcic7XHJcbiAgICAgICAgbXlBY2NvdW50T3B0aW9uLnVzZXJfc3RhdHVzPXVzZXJMb2dpbiA/IHVzZXJMb2dpbiA6ICdub25sb2dnZWRfaW4nO1xyXG4gICAgICAgIG15QWNjb3VudE9wdGlvbi5jdXN0b21lcl90eXBlPWN1c3RvbWVyVHlwZSA/IGN1c3RvbWVyVHlwZSA6ICduZXdfY3VzdG9tZXInO1xyXG4gICAgICAgIG15QWNjb3VudE9wdGlvbi51c2VySUQgPSBndG1DdXN0b21lck51bWJlciA/IGd0bUN1c3RvbWVyTnVtYmVyIDogJ05BJztcclxuICAgICAgICBteUFjY291bnRPcHRpb24uc3Vic2NyaXB0aW9uX3N0YXR1cz1zdWJzY3JpYmVTdGF0dXMgPyBzdWJzY3JpYmVTdGF0dXMgOiAnbm9uLXN1YnNjcmliZWQnO1xyXG4gICAgICAgIGlmICghbXlBY2NvdW50T3B0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2gobXlBY2NvdW50T3B0aW9uKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkRhdGFsYXllclwiLCB3aW5kb3cuZGF0YUxheWVyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEJyZWFkY3J1bWIgbGlrZSBwYWdlIERhdGEgTGF5ZXJcclxuICAgICRkb2Mub24oXCJjbGlja1wiLCBcIltkYXRhLWd0bS1icmVhZGNydW0tY2xpY2stb25jbGlja11cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBicmVhZENydW1iQ2xpY2sgPSAkKHRoaXMpLmRhdGEoXCJndG0tYnJlYWRjcnVtLWNsaWNrLW9uY2xpY2tcIik7XHJcblxyXG4gICAgICAgIGlmKHR5cGVvZihicmVhZENydW1iQ2xpY2spID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgdmFyIHBhcnNlQnJlYWRDcnVtYkNsaWNrID0gSlNPTi5wYXJzZShicmVhZENydW1iQ2xpY2spXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHBhcnNlQnJlYWRDcnVtYkNsaWNrID0gYnJlYWRDcnVtYkNsaWNrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBPYmplY3Qua2V5cyhwYXJzZUJyZWFkQ3J1bWJDbGljaykuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcclxuICAgICAgICAgICAgaWYocGFyc2VCcmVhZENydW1iQ2xpY2tba2V5XSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcGFyc2VCcmVhZENydW1iQ2xpY2tba2V5XSA9ICdOQSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICAvLyB2YXIgZGVjb2RlZCA9IGRlY29kZVVSSUNvbXBvbmVudChicmVhZENydW1iQ2xpY2spO1xyXG4gICAgICAgIHBhcnNlQnJlYWRDcnVtYkNsaWNrLnVzZXJfc3RhdHVzX2V2ZW50ID0gdXNlckxvZ2luID8gdXNlckxvZ2luIDogJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgcGFyc2VCcmVhZENydW1iQ2xpY2sudXNlcl90eXBlID0gdXNlclR5cGUgPyB1c2VyVHlwZSA6ICduZXdfdXNlcic7XHJcbiAgICAgICAgcGFyc2VCcmVhZENydW1iQ2xpY2sudXNlcl9zdGF0dXM9dXNlckxvZ2luID8gdXNlckxvZ2luIDogJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgcGFyc2VCcmVhZENydW1iQ2xpY2suY3VzdG9tZXJfdHlwZT1jdXN0b21lclR5cGUgPyBjdXN0b21lclR5cGUgOiAnbmV3X2N1c3RvbWVyJztcclxuICAgICAgICBwYXJzZUJyZWFkQ3J1bWJDbGljay51c2VySUQgPSBndG1DdXN0b21lck51bWJlciA/IGd0bUN1c3RvbWVyTnVtYmVyIDogJ05BJztcclxuICAgICAgICBwYXJzZUJyZWFkQ3J1bWJDbGljay5zdWJzY3JpcHRpb25fc3RhdHVzPXN1YnNjcmliZVN0YXR1cyA/IHN1YnNjcmliZVN0YXR1cyA6ICdub24tc3Vic2NyaWJlZCc7XHJcbiAgICAgICAgaWYgKCFwYXJzZUJyZWFkQ3J1bWJDbGljaykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKHBhcnNlQnJlYWRDcnVtYkNsaWNrKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkRhdGFsYXllclwiLCB3aW5kb3cuZGF0YUxheWVyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGNoZWNrIHBpbmNvZGUgY2xpY2sgZGF0YUxheWVyXHJcbiAgICAkZG9jLm9uKFwiY2xpY2tcIiwgXCJbZGF0YS1ndG0tY2hlY2stcGluY29kZS1vbmNsaWNrXVwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNoZWNrUGluY29kZSA9ICQodGhpcykuZGF0YShcImd0bS1jaGVjay1waW5jb2RlLW9uY2xpY2tcIik7XHJcbiAgICAgICAgY2hlY2tQaW5jb2RlLnVzZXJfc3RhdHVzX2V2ZW50ID0gdXNlckxvZ2luID8gdXNlckxvZ2luIDogJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgY2hlY2tQaW5jb2RlLnVzZXJfdHlwZSA9IHVzZXJUeXBlID8gdXNlclR5cGUgOiAnbmV3X3VzZXInO1xyXG4gICAgICAgIGNoZWNrUGluY29kZS51c2VyX3N0YXR1cz11c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBjaGVja1BpbmNvZGUuY3VzdG9tZXJfdHlwZT1jdXN0b21lclR5cGUgPyBjdXN0b21lclR5cGUgOiAnbmV3X2N1c3RvbWVyJztcclxuICAgICAgICBjaGVja1BpbmNvZGUudXNlcklEID0gZ3RtQ3VzdG9tZXJOdW1iZXIgPyBndG1DdXN0b21lck51bWJlciA6ICdOQSc7XHJcbiAgICAgICAgY2hlY2tQaW5jb2RlLnN1YnNjcmlwdGlvbl9zdGF0dXM9c3Vic2NyaWJlU3RhdHVzID8gc3Vic2NyaWJlU3RhdHVzIDogJ25vbi1zdWJzY3JpYmVkJztcclxuICAgICAgICBpZiAoIWNoZWNrUGluY29kZSkge1xyXG4gICAgICAgI
97HJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKGNoZWNrUGluY29kZSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJEYXRhbGF5ZXJcIiwgd2luZG93LmRhdGFMYXllcik7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBCb3R0b20gTmF2aWdhdGlvbiBDbGljayBEYXRhIExheWVyXHJcbiAgICAkZG9jLm9uKFwiY2xpY2tcIiwgXCJbZGF0YS1ndG0tYm90dG9tLW5hdmlnYXRpb24tb25jbGlja11cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBib3R0b21OYXZpZ2F0aW9uID0gJCh0aGlzKS5kYXRhKFwiZ3RtLWJvdHRvbS1uYXZpZ2F0aW9uLW9uY2xpY2tcIik7XHJcbiAgICAgICAgYm90dG9tTmF2aWdhdGlvbi51c2VyX3N0YXR1c19ldmVudCA9IHVzZXJMb2dpbiA/IHVzZXJMb2dpbiA6ICdub25sb2dnZWRfaW4nO1xyXG4gICAgICAgIGJvdHRvbU5hdmlnYXRpb24udXNlcl90eXBlID0gdXNlclR5cGUgPyB1c2VyVHlwZSA6ICduZXdfdXNlcic7XHJcbiAgICAgICAgYm90dG9tTmF2aWdhdGlvbi51c2VyX3N0YXR1cz11c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBib3R0b21OYXZpZ2F0aW9uLmN1c3RvbWVyX3R5cGU9Y3VzdG9tZXJUeXBlID8gY3VzdG9tZXJUeXBlIDogJ25ld19jdXN0b21lcic7XHJcbiAgICAgICAgYm90dG9tTmF2aWdhdGlvbi51c2VySUQgPSBndG1DdXN0b21lck51bWJlciA/IGd0bUN1c3RvbWVyTnVtYmVyIDogJ05BJztcclxuICAgICAgICBib3R0b21OYXZpZ2F0aW9uLnN1YnNjcmlwdGlvbl9zdGF0dXM9c3Vic2NyaWJlU3RhdHVzID8gc3Vic2NyaWJlU3RhdHVzIDogJ25vbi1zdWJzY3JpYmVkJztcclxuICAgICAgICBpZiAoIWJvdHRvbU5hdmlnYXRpb24pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChib3R0b21OYXZpZ2F0aW9uKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkRhdGFsYXllclwiLCB3aW5kb3cuZGF0YUxheWVyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIHByb2R1Y3RfY2F0ZWdvcnlfY2xpY2sgRGF0YSBMYXllclxyXG4gICAgJGRvYy5vbihcImNsaWNrXCIsIFwiW2Rh
97dGEtZ3RtLXByb2R1Y3QtY2F0ZWdvcnktY2xpY2stb25jbGlja11cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBwcm9kdWN0Q2F0ZWdvcnlDbGljayA9ICQodGhpcykuZGF0YShcImd0bS1wcm9kdWN0LWNhdGVnb3J5LWNsaWNrLW9uY2xpY2tcIik7XHJcbiAgICAgICAgcHJvZHVjdENhdGVnb3J5Q2xpY2sudXNlcl9zdGF0dXNfZXZlbnQgPSB1c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBwcm9kdWN0Q2F0ZWdvcnlDbGljay51c2VyX3R5cGUgPSB1c2VyVHlwZSA/IHVzZXJUeXBlIDogJ25ld191c2VyJztcclxuICAgICAgICBwcm9kdWN0Q2F0ZWdvcnlDbGljay51c2VyX3N0YXR1cz11c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBwcm9kdWN0Q2F0ZWdvcnlDbGljay5jdXN0b21lcl90eXBlPWN1c3RvbWVyVHlwZSA/IGN1c3RvbWVyVHlwZSA6ICduZXdfY3VzdG9tZXInO1xyXG4gICAgICAgIHByb2R1Y3RDYXRlZ29yeUNsaWNrLnVzZXJJRCA9IGd0bUN1c3RvbWVyTnVtYmVyID8gZ3RtQ3VzdG9tZXJOdW1iZXIgOiAnTkEnO1xyXG4gICAgICAgIHByb2R1Y3RDYXRlZ29yeUNsaWNrLnN1YnNjcmlwdGlvbl9zdGF0dXM9c3Vic2NyaWJlU3RhdHVzID8gc3Vic2NyaWJlU3RhdHVzIDogJ25vbi1zdWJzY3JpYmVkJztcclxuICAgICAgICBpZiAoIXByb2R1Y3RDYXRlZ29yeUNsaWNrKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2gocHJvZHVjdENhdGVnb3J5Q2xpY2spO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGF0YWxheWVyXCIsIHdpbmRvdy5kYXRhTGF5ZXIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gZnJhZ3JhbmNlc193ZV9sb3ZlX2NsaWNrIERhdGEgTGF5ZXJcclxuICAgICRkb2Mub24oXCJjbGlja1wiLCBcIltkYXRhLWd0bS1mcmFncmFuY2VzLXdlLWxvdmUtY2xpY2stb25jbGlja11cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBmcmFncmFuY2VzV2VMb3ZlQ2xpY2sgPSAkKHRoaXMpLmRhdGEoXCJndG0tZnJhZ3JhbmNlcy13ZS1sb3ZlLWNsaWNrLW9uY2xpY2tcIik7XHJcbiAgICAgICAgZnJhZ3JhbmNlc1dlTG92ZUNsaWNrLnVzZXJfc3RhdHVzX2V2ZW50ID0gdXNlckxvZ2luID8gdXNlckxvZ2luIDogJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgZnJhZ3JhbmNlc1dlTG92ZUNsaWNrLnVzZXJfdHlwZSA9IHVzZXJUeXBlID8gdXNlclR5cGUgOiAnbmV3X3VzZXInO1xyXG4gICAgICAgIGZyYWdyYW5jZXNXZUxvdmVDbGljay51c2VyX3N0YXR1cz11c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBmcmFncmFuY2VzV2VMb3ZlQ2xpY2suY3VzdG9tZXJfdHlwZT1jdXN0b21lclR5cGUgPyBjdXN0b21lclR5cGUgOiAnbmV3X2N1c3RvbWVyJztcclxuICAgICAgICBmcmFncmFuY2VzV2VMb3ZlQ2xpY2sudXNlcklEID0gZ3RtQ3VzdG9tZXJOdW1iZXIgPyBndG1DdXN0b21lck51bWJlciA6ICdOQSc7XHJcbiAgICAgICAgZnJhZ3JhbmNlc1dlTG92ZUNsaWNrLnN1YnNjcmlwdGlvbl9zdGF0dXM9c3Vic2NyaWJlU3RhdHVzID8gc3Vic2NyaWJlU3RhdHVzIDogJ25vbi1zdWJzY3JpYmVkJztcclxuICAgICAgICBpZiAoIWZyYWdyYW5jZXNXZUxvdmVDbGljaykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKGZyYWdyYW5jZXNXZUxvdmVDbGljayk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJEYXRhbGF5ZXJcIiwgd2luZG93LmRhdGFMYXllcik7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBzaG93X21vcmVfY2xpY2sgRGF0YSBMYXllclxyXG4gICAgJChcIi5ndG0tc2hvdy1tb3JlLW9uY2xpY2tcIikuY2xpY2soIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2Y
97XIgc2hvd01vcmVDbGljayA9ICQodGhpcykuZGF0YShcImd0bS1zaG93LW1vcmUtb25jbGlja1wiKTtcclxuICAgICAgICBzaG93TW9yZUNsaWNrLnVzZXJfc3RhdHVzPXVzZXJMb2dpbiA/IHVzZXJMb2dpbiA6ICdub25sb2dnZWRfaW4nO1xyXG4gICAgICAgIGlmICghc2hvd01vcmVDbGljaykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKHNob3dNb3JlQ2xpY2spO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGF0YWxheWVyXCIsIHdpbmRvdy5kYXRhTGF5ZXIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gY2Fycm91c2FsX2Fycm93X2NsaWNrIERhdGEgTGF5ZXJcclxuICAgICRkb2Mub24oXCJjbGlja1wiLCBcIltkYXRhLWd0bS1jYXJyb3VzYWwtYXJyb3ctb25jbGlja11cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjYXJyb3VzYWxBcnJvdyA9ICQodGhpcykuZGF0YShcImd0bS1jYXJyb3VzYWwtYXJyb3ctb25jbGlja1wiKTtcclxuICAgICAgICBjYXJyb3VzYWxBcnJvdy51c2VyX3R5cGUgPSB1c2VyVHlwZSA/IHVzZXJUeXBlIDogJ25ld191c2VyJztcclxuICAgICAgICBjYXJyb3VzYWxBcnJvdy51c2VyX3N0YXR1cz11c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBjYXJyb3VzYWxBcnJvdy5jdXN0b21lcl90eXBlPWN1c3RvbWVyVHlwZSA/IGN1c3RvbWVyVHlwZSA6ICduZXdfY3VzdG9tZXInO1xyXG4gICAgICAgIGNhcnJvdXNhbEFycm93LnVzZXJJRCA9IGd0bUN1c3RvbWVyTnVtYmVyID8gZ3RtQ3VzdG9tZXJOdW1iZXIgOiAnTkEnO1xyXG4gICAgICAgIGNhcnJvdXNhbEFycm93LnN1YnNjcmlwdGlvbl9zdGF0dXM9c3Vic2NyaWJlU3RhdHVzID8gc3Vic2NyaWJlU3RhdHVzIDogJ25vbi1zdWJzY3JpYmVkJztcclxuICAgICAgICBpZiAoIWNhcnJvdXNhbEFycm93KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goY2Fycm91c2FsQXJyb3cpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGF0YWxheWVyXCIsIHdpbmRvdy5kYXRhTGF5ZXIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gYXJyb3dfY2xpY2sgRGF0YSBMYXllclxyXG4gICAgJChcIi5ndG0tYXJyb3ctY2xpY2stb25jbGlja1wiKS5jbGljayggZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBhcnJvd0NsaWNrID0gJCh0aGlzKS5kYXRhKFwiZ3RtLWFycm93LWNsaWNrLW9uY2xpY2tcIik7XHJcbiAgICAgICAgYXJyb3dDbGljay51c2VyX3R5cGUgPSB1c2VyVHlwZSA/IHVzZXJUeXBlIDogJ25ld191c2VyJztcclxuICAgICAgICBhcnJvd0NsaWNrLnVzZXJfc3RhdHVzPXVzZXJMb2dpbiA/IHVzZXJMb2dpbiA6ICdub25sb2dnZWRfaW4nO1xyXG4gICAgICAgIGFycm93Q2xpY2suY3VzdG9tZXJfdHlwZT1jdXN0b21lclR5cGUgPyBjdXN0b21lclR5cGUgOiAnbmV3X2N1c3RvbWVyJztcclxuICAgICAgICBhcnJvd0NsaWNrLnVzZXJJRCA9IGd0bUN1c3RvbWVyTnVtYmVyID8gZ3RtQ3VzdG9tZXJOdW1iZXIgOiAnTkEnO1xyXG4gICAgICAgIGFycm93Q2xpY2suc3Vic2NyaXB0aW9uX3N0YXR1cz1zdWJzY3JpYmVTdGF0dXMgPyBzdWJzY3JpYmVTdGF0dXMgOiAnbm9uLXN1YnNjcmliZWQnO1xyXG4gICAgICAgIGlmICghYXJyb3dDbGljaykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKGFycm93Q2xpY2spO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGF0YWxheWVyXCIsIHdpbmRvdy5kYXRhTGF5ZXIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gY29udGludWVfc2hvcHBpbmcgRGF0YSBMYXllciBcclxuICAgICRkb2Mub24oXCJjbGlja1wiLCBcIltkYXRhLWd0bS1jb250aW51ZS1zaG9wcGluZy1vbmNsaWNrXVwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNvbnRpbnVlU2hvcHBpbmcgPSAkKHRoaXMpLmRhdGEoXCJndG0tY29udGludWUtc2hvcHBpbmctb25jbGlja1wiKTtcclxuICAgICAgICBjb250aW51ZVNob3BwaW5nLnVzZXJfdHlwZSA9IHVzZXJUeXBlID8gdXNlclR5cGUgOiAnbmV3X3VzZXInO1xyXG4gICAgICAgIGNvbnRpbnVlU2hvcHBpbmcudXNlcl9zdGF0dXM9dXNlckxvZ2luID8gdXNlckxvZ2luIDogJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgY29udGludWVTaG9wcGluZy5jdXN0b21lcl90eXBlPWN1c3RvbWVyVHlwZSA/IGN1c3RvbWVyVHlwZSA6ICduZXdfY3VzdG9tZXInO1xyXG4gICAgICAgIGNvbnRpbnVlU2hvcHBpbmcudXNlcklEID0gZ3RtQ3VzdG9tZXJOdW1iZXIgPyBndG1DdXN0b21lck51bWJlciA6ICdOQSc7XHJcbiAgICAgICAgY29udGludWVTaG9wcGluZy5zdWJzY3JpcHRpb25fc3RhdHVzPXN1YnNjcmliZVN0YXR1cyA/IHN1YnNjcmliZVN0YXR1cyA6ICdub24tc3Vic2NyaWJlZCc7XHJcbiAgICAgICAgaWYgKCFjb250aW51ZVNob3BwaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goY29udGludWVTaG9wcGluZyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJEYXRhbGF5ZXJcIiwgd2luZG93LmRhdGFMYXllcik7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBFcnJvciBQYWdlIExvYWQgRGF0YSBMYXllciAvL1xyXG4gICAgJCh3aW5kb3cpLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICgkKFwiI2Vycm9yX3BhZ2
97VcIikuaGFzQ2xhc3MoXCJiYnctbWFpbi1lcnJvclwiKSkge1xyXG4gICAgICAgIHZhciBlcnJvclBhZ2VMb2FkID0ge307XHJcbiAgICAgICAgZXJyb3JQYWdlTG9hZC5ldmVudCA9J2Vycm9yX3BhZ2VfbG9hZCc7XHJcbiAgICAgICAgZXJyb3JQYWdlTG9hZC51c2VyX3N0YXR1c19ldmVudCA9IHVzZXJMb2dpbiA/IHVzZXJMb2dpbiA6ICdub25sb2dnZWRfaW4nO1xyXG4gICAgICAgIGVycm9yUGFnZUxvYWQudXNlcl90eXBlID0gdXNlclR5cGUgPyB1c2VyVHlwZSA6ICduZXdfdXNlcic7XHJcbiAgICAgICAgZXJyb3JQYWdlTG9hZC51c2VyX3N0YXR1cz11c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBlcnJvclBhZ2VMb2FkLmN1c3RvbWVyX3R5cGU9Y3VzdG9tZXJUeXBlID8gY3VzdG9tZXJUeXBlIDogJ25ld19jdXN0b21lcic7XHJcbiAgICAgICAgZXJyb3JQYWdlTG9hZC51c2VySUQgPSBndG1DdXN0b21lck51bWJlciA/IGd0bUN1c3RvbWVyTnVtYmVyIDogJ05BJztcclxuICAgICAgICBlcnJvclBhZ2VMb2FkLnN1YnNjcmlwdGlvbl9zdGF0dXM9c3Vic2NyaWJlU3RhdHVzID8gc3Vic2NyaWJlU3RhdHVzIDogJ25vbi1zdWJzY3JpYmVkJztcclxuICAgICAgICBpZiAoIWVycm9yUGFnZUxvYWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goZXJyb3JQYWdlTG9hZCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJEYXRhbGF5ZXJcIiwgd2luZG93LmRhdGFMYXllcik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gY291cG9uIHN1Ym1pdCBjbGljayBkYXRhbGF5ZXJcclxuICAgICRkb2Mub24oXCJjbGlja1wiLCBcIltkYXRhLWd0bS1jb3Vwb24tc3VibWl0LW9uY2xpY2tdXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2Y
97XIgY291cG9uQ29kZSA9ICQoJyNjb3Vwb25Db2RlJykudmFsKCk7XHJcbiAgICAgICAgaWYoIWNvdXBvbkNvZGUpe1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb3Vwb25TdWJtaXRDbGljayA9ICQodGhpcykuZGF0YShcImd0bS1jb3Vwb24tc3VibWl0LW9uY2xpY2tcIik7XHJcbiAgICAgICAgY291cG9uU3VibWl0Q2xpY2suY291cG9uX25hbWUgPSBjb3Vwb25Db2RlID8gY291cG9uQ29kZSA6ICdOQSc7XHJcbiAgICAgICAgY291cG9uU3VibWl0Q2xpY2sudXNlcl9zdGF0dXNfZXZlbnQgPSB1c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBjb3Vwb25TdWJtaXRDbGljay51c2VyX3R5cGUgPSB1c2VyVHlwZSA/IHVzZXJUeXBlIDogJ25ld191c2VyJztcclxuICAgICAgICBjb3Vwb25TdWJtaXRDbGljay51c2VyX3N0YXR1cz11c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBjb3Vwb25TdWJtaXRDbGljay5jdXN0b21lcl90eXBlPWN1c3RvbWVyVHlwZSA/IGN1c3RvbWVyVHlwZSA6ICduZXdfY3VzdG9tZXInO1xyXG4gICAgICAgIGNvdXBvblN1Ym1pdENsaWNrLnVzZXJJRCA9IGd0bUN1c3RvbWVyTnVtYmVyID8gZ3RtQ3VzdG9tZXJOdW1iZXIgOiAnTkEnO1xyXG4gICAgICAgIGNvdXBvblN1Ym1pdENsaWNrLnN1YnNjcmlwdGlvbl9zdGF0dXM9c3Vic2NyaWJlU3RhdHVzID8gc3Vic2NyaWJlU3RhdHVzIDogJ25vbi1zdWJzY3JpYmVkJztcclxuICAgICAgICBpZiAoIWNvdXBvblN1Ym1pdENsaWNrKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goY291cG9uU3VibWl0Q2xpY2spO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGF0YWxheWVyXCIsIHdpbmRvdy5kYXRhTGF5ZXIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gY2hlY2tvdXQgc3RlcHMgY2xpY2sgZGF0YWxheWVyXHJcbiAgICAkZG9jLm9uKFwiY2xpY2tcIiwgXCJbZGF0YS1ndG0tY2hlY2tvdXQtc3RlcHMtb25jbGlja11cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjaGVja291dFN0ZXBzID0gJCh0aGlzKS5kYXRhKFwiZ3RtLWNoZWNrb3V0LXN0ZXBzLW9uY2xpY2tcIik7XHJcbiAgICAgICAgY2hlY2tvdXRTdGVwcy51c2VyX3N0YXR1c19ldmVudCA9IHVzZXJMb2dpbiA/IHVzZXJMb2dpbiA6ICdub25sb2dnZWRfaW4nO1xyXG4gICAgICAgIGNoZWNrb3V0U3RlcHMudXNlcl90eXBlID0gdXNlclR5cGUgPyB1c2VyVHlwZSA6ICduZXdfdXNlcic7XHJcbiAgICAgICAgY2hlY2tvdXRTdGVwcy51c2VyX3N0YXR1cz11c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBjaGVja291dFN0ZXBzLmN1c3RvbWVyX3R5cGU9Y3VzdG9tZXJUeXBlID8gY3VzdG9tZXJUeXBlIDogJ25ld19jdXN0b21lcic7XHJcbiAgICAgICAgY2hlY2tvdXRTdGVwcy51c2VySUQgPSBndG1DdXN0b21lck51bWJlciA/IGd0bUN1c3RvbWVyTnVtYmVyIDogJ05BJztcclxuICAgICAgICBjaGVja291dFN0ZXBzLnN1YnNjcmlwdGlvbl9zdGF0dXM9c3Vic2NyaWJlU3RhdHVzID8gc3Vic2NyaWJlU3RhdHVzIDogJ25vbi1zdWJzY3JpYmVkJztcclxuICAgICAgICBpZiAoIWNoZWNrb3V0U3RlcHMpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChjaGVja291dFN0ZXBzKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkRhdGFsYXllclwiLCB3aW5kb3cuZGF0YUxheWVyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIHZpZXcgY2FyZCBjbGljayBkYXRhbGF5ZXJcclxuICAgICRkb2Mub24oXCJjbGlja1wiLCBcIltkYXRhLWd0bS12aWV3LWNhcmQtb25jbGlja11cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBlcnJvclBhZ2VQcm9kdWN0Q2F0ZWdvcnkgPSAkKHRoaXMpLmRhdGEoXCJndG0tdmlldy1jYXJkLW9uY2xpY2tcIik7XHJcbiAgICAgICAgZXJyb3JQYWdlUHJvZHVjdENhdGVnb3J5LnVzZXJfc3RhdHVzX2V2ZW50ID0gdXNlckxvZ2luID8gdXNlckxvZ2luIDogJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgZXJyb3JQYWdlUHJvZHVjdENhdGVnb3J5LnVzZXJfdHlwZSA9IHVzZXJUeXBlID8gdXNlclR5cGUgOiAnbmV3X3VzZXInO1xyXG4gICAgICAgIGVycm9yUGFnZVByb2R1Y3RDYXRlZ29yeS51c2VyX3N0YXR1cz11c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBlcnJvclBhZ2VQcm9kdWN0Q2F0ZWdvcnkuY3VzdG9tZXJfdHlwZT1jdXN0b21lclR5cGUgPyBjdXN0b21lclR5cGUgOiAnbmV3X2N1c3RvbWVyJztcclxuICAgICAgICBlcnJvclBhZ2VQcm9kdWN0Q2F0ZWdvcnkudXNlcklEID0gZ3RtQ3VzdG9tZXJOdW1iZXIgPyBndG1DdXN0b21lck51bWJlciA6ICdOQSc7XHJcbiAgICAgICAgZXJyb3JQYWdlUHJvZHVjdENhdGVnb3J5LnN1YnNjcmlwdGlvbl9zdGF0dXM9c3Vic2NyaWJlU3RhdHVzID8gc3Vic2NyaWJlU3RhdHVzIDogJ25vbi1zdWJzY3JpYmVkJztcclxuICAgICAgICBpZiAoIWVycm9yUGFnZVByb2R1Y3RDYXRlZ29yeSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKGVycm9yUGFnZVByb2R1Y3RDYXRlZ29yeSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJEYXRhbGF5ZXJcIiwgd2luZG93LmRhdGFMYXllcik7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkZG9jLm9uKCdjaGVja291dDphZGRyZXNzU2F2ZWQnLCAnW2RhdGEtZ3RtLWNoZWNrb3V0LXN0ZXBzLWludGVyYWN0aW9uLXNhdmVdJywgZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGNoZWNrb3V0SW50ZXJhY3Rpb24gPSAkKHRoaXMpLmRhdGEoJ2d0bS1jaGVja291dC1zdGVwcy1pbnRlcmFjdGlvbi1zYXZlJyk7XHJcbiAgICBpZiAoIWNoZWNrb3V0SW50ZXJhY3Rpb24pIHJldHVybjtcclxuXHJcbiAgICBjaGVja291dEludGVyYWN0aW9uLnVzZXJfc3RhdHVzX2V2ZW50ID0gdXNlckxvZ2luIHx8ICdub25sb2dnZWRfaW4nO1xyXG4gICAgY2hlY2tvdXRJbn
97RlcmFjdGlvbi51c2VyX3R5cGUgPSB1c2VyVHlwZSB8fCAnbmV3X3VzZXInO1xyXG4gICAgY2hlY2tvdXRJbnRlcmFjdGlvbi51c2VyX3N0YXR1cyA9IHVzZXJMb2dpbiB8fCAnbm9ubG9nZ2VkX2luJztcclxuICAgIGNoZWNrb3V0SW50ZXJhY3Rpb24uY3VzdG9tZXJfdHlwZSA9IGN1c3RvbWVyVHlwZSB8fCAnbmV3X2N1c3RvbWVyJztcclxuICAgIGNoZWNrb3V0SW50ZXJhY3Rpb24udXNlcklEID0gZ3RtQ3VzdG9tZXJOdW1iZXIgfHwgJ05BJztcclxuICAgIGNoZWNrb3V0SW50ZXJhY3Rpb24uc3Vic2NyaXB0aW9uX3N0YXR1cyA9IHN1YnNjcmliZVN0YXR1cyB8fCAnbm9uLXN1YnNjcmliZWQnO1xyXG5cclxuICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChjaGVja291dEludGVyYWN0aW9uKTtcclxuICAgIGNvbnNvbGUubG9nKFwiRGF0YWxheWVyIHB1c2hlZCBvbiBhZGRyZXNzIHNhdmVcIiwgY2hlY2tvdXRJbnRlcmFjdGlvbik7XHJcbn0pO1xyXG5cclxuXHJcbiAgICAvLyBDaGVja291dCBJbnRlcmFjdGlvbiBjbGljayBEYXRhIExheWVyXHJcbiAgICAkZG9jLm9uKFwiY2xpY2tcIiwgXCJbZGF0YS1ndG0tY2hlY2tvdXQtc3RlcHMtaW50ZXJhY3Rpb25dXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgY2hlY2tvdXRJbnRlcmFjdGlvbiA9ICQodGhpcykuZGF0YShcImd0bS1jaGVja291dC1zdGVwcy1pbnRlcmFjdGlvblwiKTtcclxuICAgICAgICBjaGVja291dEludGVyYWN0aW9uLnVzZXJfc3RhdHVzX2V2ZW50ID0gdXNlckxvZ2luID8gdXNlckxvZ2luIDogJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgY2hlY2tvdXRJbnRlcmFjdGlvbi51c2VyX3R5cGUgPSB1c2VyVHlwZSA/IHVzZXJUeXBlIDogJ25ld191c2VyJztcclxuICAgICAgICBjaGVja291dEludGVyYWN0aW9uLnVzZXJfc3RhdHVzPXVzZXJMb2dpbiA/IHVzZXJMb2dpbiA6ICdub25sb2dnZWRfaW4nO1xyXG4gICAgICAgIGNoZWNrb3V0SW50ZXJhY3Rpb24uY3VzdG9tZXJfdHlwZT1jdXN0b21lclR5cGUgPyBjdXN0b21lclR5cGUgOiAnbmV3X2N1c3RvbWVyJztcclxuICAgICAgICBjaGVja291dEludGVyYWN0aW9uLnVzZXJJRCA9IGd0bUN1c3RvbWVyTnVtYmVyID8gZ3RtQ3VzdG9tZXJOdW1iZXIgOiAnTkEnO1xyXG4gICAgICAgIGNoZWNrb3V0SW50ZXJhY3Rpb24uc3Vic2NyaXB0aW9uX3N0YXR1cz1zdWJzY3JpYmVTdGF0dXMgPyBzdWJzY3JpYmVTdGF0dXMgOiAnbm9uLXN1YnNjcmliZWQnO1xyXG4gICAgICAgIGlmICghY2hlY2tvdXRJbnRlcmFjdGlvbikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKGNoZWNrb3V0SW50ZXJhY3Rpb24pO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGF0YWxheWVyXCIsIHdpbmRvdy5kYXRhTGF5ZXIpO1xyXG4gICAgfSk7XHJcbi8vdG8gZmV0Y2ggZWRpdC9jYW5jZWwgZHluYW1pY2FsbHlcclxuICAgICRkb2Mub24oXCJjbGlja1wiLCBcIltkYXRhLWd0bS1jaGVja291dC1zdGVwcy1pbnRlcmFjdGlvbi1keW5hbWljXVwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcclxuICAgICAgICB2Y
97XIgY2hlY2tvdXRJbnRlcmFjdGlvbiA9ICR0aGlzLmRhdGEoXCJndG0tY2hlY2tvdXQtc3RlcHMtaW50ZXJhY3Rpb24tZHluYW1pY1wiKSB8fCB7fTtcclxuICAgICAgICB2YXIgY2xpY2tlZEFjdGlvbiA9ICR0aGlzLmF0dHIoXCJkYXRhLWFjdGlvblwiKSB8fCAkdGhpcy50ZXh0KCkudHJpbSgpO1xyXG5cclxuICAgICAgICBjaGVja291dEludGVyYWN0aW9uLmVsZW1lbnRfdGl0bGUgPSBjbGlja2VkQWN0aW9uID09PSAnZWRpdCcgPyAnRWRpdCcgOiAnQ2FuY2VsJztcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIG5ld0FjdGlvbiA9IGNsaWNrZWRBY3Rpb24gPT09ICdlZGl0JyA/ICdjYW5jZWwnIDogJ2VkaXQnO1xyXG4gICAgICAgICAgICAkdGhpcy5hdHRyKFwiZGF0YS1hY3Rpb25cIiwgbmV3QWN0aW9uKTtcclxuICAgICAgICB9LCAwKTtcclxuICAgICAgICBjaGVja291dEludGVyYWN0aW9uLmV2ZW50ID0gY2hlY2tvdXRJbnRlcmFjdGlvbi5ldmVudCB8fCAnY2hlY2tvdXRfaW50ZXJhY3Rpb24nO1xyXG4gICAgICAgIGNoZWNrb3V0SW50ZXJhY3Rpb24udXNlcl9zdGF0dXNfZXZlbnQgPSB1c2VyTG9naW4gfHwgJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgY2hlY2tvdXRJbnRlcmFjdGlvbi51c2VyX3R5cGUgPSB1c2VyVHlwZSB8fCAnbmV3X3VzZXInO1xyXG4gICAgICAgIGNoZWNrb3V0SW50ZXJhY3Rpb24udXNlcl9zdGF0dXMgPSB1c2VyTG9naW4gfHwgJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgY2hlY2tvdXRJbnRlcmFjdGlvbi5jdXN0b21lcl90eXBlID0gY3VzdG9tZXJUeXBlIHx8ICduZXdfY3VzdG9tZXInO1xyXG4gICAgICAgIGNoZWNrb3V0SW50ZXJhY3Rpb24udXNlcklEID0gZ3RtQ3VzdG9tZXJOdW1iZXIgfHwgJ05BJztcclxuICAgICAgICBjaGVja291dEludGVyYWN0aW9uLnN1YnNjcmlwdGlvbl9zdGF0dXMgPSBzdWJzY3JpYmVTdGF0dXMgfHwgJ25vbi1zdWJzY3JpYmVkJztcclxuXHJcbiAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKGNoZWNrb3V0SW50ZXJhY3Rpb24pO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGF0YUxheWVyXCIsIGNoZWNrb3V0SW50ZXJhY3Rpb24pO1xyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIC8vIFN0b3JlIENsaWNrIERhdGEgTGF5ZXJcclxuICAgICRkb2Mub24oXCJjbGlja1wiLCBcIltkYXRhLWd0bS1zdG9yZS1vbmNsaWNrXVwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHN0b3JlQ2xpY2sgPSAkKHRoaXMpLmRhdGEoXCJndG0tc3RvcmUtb25jbGlja1wiKTtcclxuICAgICAgICBzdG9yZUNsaWNrLnVzZXJfc3RhdHVzX2V2ZW50ID0gdXNlckxvZ2luID8gdXNlckxvZ2luIDogJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgc3RvcmVDbGljay51c2VyX3R5cGUgPSB1c2VyVHlwZSA/IHVzZXJUeXBlIDogJ25ld191c2VyJztcclxuICAgICAgICBzdG9yZUNsaWNrLnVzZXJfc3RhdHVzPXVzZXJMb2dpbiA/IHVzZXJMb2dpbiA6ICdub25sb2dnZWRfaW4nO1xyXG4gICAgICAgIHN0b3JlQ2xpY2suY3VzdG9tZXJfdHlwZT1jdXN0b21lclR5cGUgPyBjdXN0b21lclR5cGUgOiAnbmV3X2N1c3RvbWVyJztcclxuICAgICAgICBzdG9yZUNsaWNrLnVzZXJJRCA9IGd0bUN1c3RvbWVyTnVtYmVyID8gZ3RtQ3VzdG9tZXJOdW1iZXIgOiAnTkEnO1xyXG4gICAgICAgIHN0b3JlQ2xpY2suc3Vic2NyaXB0aW9uX3N0YXR1cz1zdWJzY3JpYmVTdGF0dXMgPyBzdWJzY3JpYmVTdGF0dXMgOiAnbm9uLXN1YnNjcmliZWQnO1xyXG4gICAgICAgIGlmICghc3RvcmVDbGljaykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKHN0b3JlQ2xpY2spO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGF0YWxheWVyXCIsIHdpbmRvdy5kYXRhTGF5ZXIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gZmlsdGVyX2FwcGxpZWQgY2xpY2sgRGF0YSBMYXllclxyXG4gICAkZG9jLm9uKCdndG06ZmlsdGVyLWFwcGxpZWQnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgY29uc3QgZ3RtRGF0YSA9IGRhdGEuZmlsdGVyX2FwcGxpZWQ7XHJcblxyXG4gICAgZ3RtRGF0YS51c2VyX3N0YXR1c19ldmVudCA9IHVzZXJMb2dpbiB8fCAnbm9ubG9nZ2VkX2luJztcclxuICAgIGd0bURhdGEudXNlcl90eXBlID0gdXNlclR5cGUgfHwgJ25ld191c2VyJztcclxuICAgIGd0bURhdGEudXNlcl9zdGF0dXMgPSB1c2VyTG9naW4gfHwgJ25vbmxvZ2dlZF9pbic7XHJcbiAgICBndG1EYXRhLmN1c3RvbWVyX3R5cGUgPSBjdXN0b21lclR5cGUgfHwgJ25ld19jdXN0b21lcic7XHJcbiAgICBndG1EYXRhLnVzZXJJRCA9IGd0bUN1c3RvbWVyTnVtYmVyIHx8ICdOQSc7XHJcbiAgICBndG1EYXRhLnN1YnNjcmlwdGlvbl9zdGF0dXMgPSBzdWJzY3JpYmVTdGF0dXMgfHwgJ25vbi1zdWJzY3JpYmVkJztcclxuXHJcbiAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goZ3RtRGF0YSk7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnR1RNIEZpbHRlciBFdmVudCcsIGd0bURhdGEpO1xyXG59KTtcclxuXHJcblxyXG4gICAgLy8gT24gY2xpY2sgb2YgY29udGludWUgYXMgYSBndWVzdCBFdmVudFxyXG4gICAgJGRvYy5vbihcImNsaWNrXCIsIFwiW2Rh
97dGEtZ3RtLWNvbnRpbnVlLWd1ZXN0LW9uY2xpY2tdXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgY29udGludWVBc0d1ZXN0ID0gJCh0aGlzKS5kYXRhKFwiZ3RtLWNvbnRpbnVlLWd1ZXN0LW9uY2xpY2tcIik7XHJcbiAgICAgICAgaWYgKGNvbnRpbnVlQXNHdWVzdCkge1xyXG4gICAgICAgICAgICBjb250aW51ZUFzR3Vlc3QudXNlcl90eXBlID0gJ25ld191c2VyJztcclxuICAgICAgICAgICAgY29udGludWVBc0d1ZXN0LnVzZXJfc3RhdHVzID0gJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlQXNHdWVzdC5jdXN0b21lcl90eXBlID0gJ25ld19jdXN0b21lcic7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlQXNHdWVzdC51c2VySUQgPSBndG1DdXN0b21lck51bWJlciA/IGd0bUN1c3RvbWVyTnVtYmVyIDogJ05BJztcclxuICAgICAgICAgICAgY29udGludWVBc0d1ZXN0LnN1YnNjcmlwdGlvbl9zdGF0dXM9c3Vic2NyaWJlU3RhdHVzID8gc3Vic2NyaWJlU3RhdHVzIDogJ25vbi1zdWJzY3JpYmVkJzsgICAgICAgICAgICBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChjb250aW51ZUFzR3Vlc3QpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGF0YWxheWVyXCIsIHdpbmRvdy5kYXRhTGF5ZXIpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyBvcmRlciBjYW5jZWwgY2xpY2sgZGF0YSBsYXllclxyXG4gICAgJGRvYy5vbihcImNsaWNrXCIsIFwiW2Rh
97dGEtZ3RtLWNhbmNlbG9yZGVyLW9uY2xpY2tdXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgb3JkZXJDYW5jZWxDbGljayA9ICQodGhpcykuZGF0YShcImd0bS1jYW5jZWxvcmRlci1vbmNsaWNrXCIpO1xyXG5cclxuICAgICAgICBpZiAoIW9yZGVyQ2FuY2VsQ2xpY2spIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgb3JkZXJDYW5jZWxDbGljay5lbGVtZW50X3RpdGxlID0gb3JkZXJDYW5jZWxDbGljay5lbGVtZW50X3RpdGxlIHx8ICdDYW5jZWwnO1xyXG4gICAgICAgIG9yZGVyQ2FuY2VsQ2xpY2sucHJvZHVjdF9uYW1lID0gb3JkZXJDYW5jZWxDbGljay5wcm9kdWN0X25hbWUgfHwgJ05BJztcclxuICAgICAgICBvcmRlckNhbmNlbENsaWNrLnBhZ2VfdHlwZSA9J29yZGVyIGRldGFpbHMnO1xyXG4gICAgICAgIG9yZGVyQ2FuY2VsQ2xpY2suY3VzdG9tX3VzZXJfaWQgPSBndG1DdXN0b21lck51bWJlciA/IGd0bUN1c3RvbWVyTnVtYmVyIDogJ05BJztcclxuICAgICAgICBvcmRlckNhbmNlbENsaWNrLnVzZXJfdHlwZSA9IHVzZXJUeXBlID8gdXNlclR5cGUgOiAnbmV3X3VzZXInO1xyXG4gICAgICAgIG9yZGVyQ2FuY2VsQ2xpY2sudXNlcl9zdGF0dXM9dXNlckxvZ2luID8gdXNlckxvZ2luIDogJ25vbmxvZ2dlZF9pbic7XHJcbiAgICAgICAgb3JkZXJDYW5jZWxDbGljay5jdXN0b21lcl90eXBlPWN1c3RvbWVyVHlwZSA/IGN1c3RvbWVyVHlwZSA6ICduZXdfY3VzdG9tZXInO1xyXG4gICAgICAgIG9yZGVyQ2FuY2VsQ2xpY2suc3Vic2NyaXB0aW9uX3N0YXR1cz1zdWJzY3JpYmVTdGF0dXMgPyBzdWJzY3JpYmVTdGF0dXMgOiAnbm9uLXN1YnNjcmliZWQnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChvcmRlckNhbmNlbENsaWNrKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIE9yZGVyIENhbmNlbCBNb2RhbCBJbnRlcmFjdGlvbiBEYXRhIExheWVyXHJcbiAgICAkZG9jLm9uKFwiY2xpY2tcIiwgXCJbZGF0YS1ndG0tY2FuY2Vsb3JkZXItcG9wdXAtb25jbGlja11cIiwgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB2Y
97XIgY2FuY2VsT3JkZXJQb3B1cEludGVyYWN0aW9uID1cclxuICAgICAgICAgICAgJCh0aGlzKS5kYXRhKFwiZ3RtLWNhbmNlbG9yZGVyLXBvcHVwLW9uY2xpY2tcIik7XHJcblxyXG4gICAgICAgIGlmICghY2FuY2VsT3JkZXJQb3B1cEludGVyYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FuY2VsT3JkZXJQb3B1cEludGVyYWN0aW9uLnByb2R1Y3RfbmFtZSA9ICQoXCIjY2FuY2VsT3JkZXJNb2RhbFwiKS5hdHRyKFwiZGF0YS1wcm9kdWN0LW5hbWVcIikgfHwgJ05BJztcclxuICAgICAgICBjYW5jZWxPcmRlclBvcHVwSW50ZXJhY3Rpb24ucGFnZV90eXBlID0gJ29yZGVyIGRldGFpbHMnO1xyXG4gICAgICAgIGNhbmNlbE9yZGVyUG9wdXBJbnRlcmFjdGlvbi5jdXN0b21fdXNlcl9pZCA9IGd0bUN1c3RvbWVyTnVtYmVyID8gZ3RtQ3VzdG9tZXJOdW1iZXIgOiAnTkEnO1xyXG4gICAgICAgIGNhbmNlbE9yZGVyUG9wdXBJbnRlcmFjdGlvbi51c2VyX3R5cGUgPSB1c2VyVHlwZSA/IHVzZXJUeXBlIDogJ25ld191c2VyJztcclxuICAgICAgICBjYW5jZWxPcmRlclBvcHVwSW50ZXJhY3Rpb24udXNlcl9zdGF0dXMgPSB1c2VyTG9naW4gPyB1c2VyTG9naW4gOiAnbm9ubG9nZ2VkX2luJztcclxuICAgICAgICBjYW5jZWxPcmRlclBvcHVwSW50ZXJhY3Rpb24uY3VzdG9tZXJfdHlwZSA9IGN1c3RvbWVyVHlwZSA/IGN1c3RvbWVyVHlwZSA6ICduZXdfY3VzdG9tZXInO1xyXG4gICAgICAgIGNhbmNlbE9yZGVyUG9wdXBJbnRlcmFjdGlvbi5zdWJzY3JpcHRpb25fc3RhdHVzID0gc3Vic2NyaWJlU3RhdHVzID8gc3Vic2NyaWJlU3RhdHVzIDogJ25vbi1zdWJzY3JpYmVkJztcclxuXHJcbiAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKGNhbmNlbE9yZGVyUG9wdXBJbnRlcmFjdGlvbik7XHJcbiAgICAgICAgY29uc29sZS5sb2coY2FuY2VsT3JkZXJQb3B1cEludGVyYWN0aW9uKTtcclxuICAgIH0pO1xyXG59KTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./cartridges/int_gtm_bathandbody/cartridge/client/default/js/gtm.js\n"); 98 99/***/ }), 100
101/***/ "./cartridges/int_gtm_bathandbody/cartridge/client/default/js/plp.js": 102/*!***************************************************************************!*\ 103 !*** ./cartridges/int_gtm_bathandbody/cartridge/client/default/js/plp.js ***! 104 \***************************************************************************/ 105/*! exports provided: _subscribePLP */ 106/***/ (function(module, __webpack_exports__, __webpack_require__) { 107 108"use strict"; 109eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"_subscribePLP\", function() { return _subscribePLP; });\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n// banner visible on screen \nvar _subscribePLP = function _subscribePLP() {\n var allItems = document.querySelectorAll('.product-tiles-gtm');\n var options = {\n root: null,\n threshold: 0.20\n };\n var itemObserver = new IntersectionObserver(_unsubscribePLP, options);\n allItems.forEach(function (item) {\n itemObserver.observe(item);\n item.classList.add('product-tiles--hidden');\n });\n};\nvar index = 0;\nvar ga4ItemList = [];\nvar ga3ItemList = [];\nvar flushTimer;\nvar _unsubscribePLP = function _unsubscribePLP(entries, observer) {\n entries.forEac
109h(function (entry) {\n if (!entry.isIntersecting) return;\n if (entry.target.closest('.slick-cloned')) {\n observer.unobserve(entry.target);\n return;\n }\n var selectedAnchor = entry.target.querySelector('.image-container-custom-plp a');\n var img1 = entry.target.querySelector('.image-container-custom-plp a .tile-image-1');\n var img2 = entry.target.querySelector('.image-container-custom-plp a .tile-image-2');\n index += 1;\n selectedAnchor.setAttribute('data-index', index);\n var ga4Object = JSON.parse(selectedAnchor.dataset.ga4Scroll);\n ga4Object.ecommerce.index = index;\n ga4Object.ecommerce.price = Number(ga4Object.ecommerce.price);\n ga4ItemList.push(ga4Object.ecommerce);\n var ga3Object = JSON.parse(selectedAnchor.dataset.ga3Scroll);\n ga3Object.ecommerce.position = index;\n ga3ItemList.push(ga3Object.ecommerce);\n entry.target.classList.remove('product-tiles--hidden');\n entry.target.classList.remove('product-tiles-gtm');\n if (entry.target.closest('.slick-slider')) {\n observer.unobserve(entry.target);\n return;\n }\n if (img1.dataset.src) {\n img1.src = img1.dataset.src;\n img1.classList.remove('gtm-tile-img');\n }\n if (img2 && img2.dataset.src) {\n img2.src = img2.dataset.src;\n }\n selectedAnchor.classList.remove('img-view-size');\n observer.unobserve(entry.target);\n });\n clearTimeout(flushTimer);\n flushTimer = setTimeout(function () {\n var ga4gtmObj = _objectSpread({}, _getPageData());
109\n ga4gtmObj.ecommerce = {\n items: _toConsumableArray(ga4ItemList)\n };\n var ga3gtmObj = {};\n ga3gtmObj.ecommerce = {\n currencyCode: _getCurrencyCode(),\n impressions: _toConsumableArray(ga3ItemList)\n };\n if (ga4ItemList.length > 0) {\n window.dataLayer.push({\n ecommerce: null\n });\n window.dataLayer.push(ga4gtmObj);\n window.dataLayer.push(ga3gtmObj);\n }\n ga4ItemList = [];\n ga3ItemList = [];\n // console.clear();\n }, 500);\n};\n\n// product click\nvar $doc = $(document);\n$doc.on('click', '[data-ga4-scroll]', function (e) {\n var $gtmOnclickElem = $(this);\n var index = $gtmOnclickElem.data('index');\n // Storing index as session param to retrive when pdp page loads\n sessionStorage.setItem('itemIndex', index);\n // Trigger GA-4\n var ga4ItemList = [];\n var ga4Object = $gtmOnclickElem.data('ga4-scroll');\n if (!ga4Object || !ga4Object.ecommerce) return;\n var pageBase = _getPageData();\n var activePageType = window.pageDataLayer && window.pageDataLayer.page_type || window.PLP_page && window.PLP_page.page_type || $('.gtm-page-type').val() || pageBase.page_type || 'PLP_page';\n sessionStorage.setItem('select_item_page_type', activePageType);\n\n // Dynamic breadcrumb sequence from visible UI\n var breadcrumbsArr = [];\n $('.breadcrumb').first().find('.breadcrumb-item').each(function (idx) {\n var text = $(this).text().trim();\n if (text) {\n breadcrumbsArr.push(idx === 0 ? text.toUpperCase() : text);\n }\n });\n var uiBreadcrumbSequence = breadcrumbsArr.length > 0 ? breadcrumbsArr.join(' > ') : pageBase.breadcrum_sequence || 'NA';\n\n // User login status check\n var userLoginStatus = sessionStorage.getItem('user_loggedin') || pageBase.user_status;\n var userStatusVal = userLoginStatus === 'logged_in' || userLoginStatus === 'true' ? 'logged_in' : 'nonlogged_in';\n ga4Object.ecommerce.price = Number(ga4Object.ecommerce.price) || 0;\n ga4Object.ecommerce.quantity = 1;\n ga4Object.ecommerce.index = parseInt(index, 10);\n ga4ItemList.push(ga4Object.ecommerce);\n var ga4gtmObj = Object.assign({}, pageBase, {\n event: 'select_item',\n page_type: activePageType,\n userID: sessionStorage.getItem('gtm_Customer_Number') || pageBase.userID || 'NA',\n user_type: sessionStorage.getItem('user_type') || pageBase.user_type || 'NA',\n customer_type: sessionStorage.getItem('customer_type') || pageBase.customer_type || 'NA',\n subscription_status: sessionStorage.getItem('subscribe_status') || pageBase.subscription_status || 'NA',\n user_status: userStatusVal,\n breadcrum_sequence: uiBreadcrumbSequence,\n banner_name: sessionStorage.getItem('BBW_banner_name') || pageBase.banner_name || 'NA',\n stock_status: pageBase.stock_status || 'in_stock',\n ecommerce: {\n items: [].concat(ga4ItemList)\n }\n });\n\n // Trigger GA-3\n var ga3ItemList = [];\n var ga3Object = $gtmOnclickElem.data('ga3-scroll');\n if (ga3Object && ga3Object.ecommerce) {\n ga3Object.ecommerce.position = index;\n ga3ItemList.push(ga3Object.ecommerce);\n }\n var ga3gtmObj = {};
109\n ga3gtmObj.ecommerce = {\n currencyCode: _getCurrencyCode(),\n impressions: [].concat(ga3ItemList)\n };\n if (ga4ItemList.length > 0) {\n window.dataLayer.push({\n ecommerce: null\n });\n window.dataLayer.push(ga4gtmObj);\n if (window.ga3Info) {\n window.dataLayer.push(ga3gtmObj);\n }\n }\n});\nfunction _getPageData() {\n if (window.PLP_page) return window.PLP_page;\n var pageType = $('.gtm-page-type').val();\n return {\n event: 'view_item_list',\n page_type: pageType && pageType !== 'null' ? pageType : 'Home_page',\n userID: sessionStorage.getItem('gtm_Customer_Number') || 'NA',\n user_type: sessionStorage.getItem('user_type') || 'new_user',\n customer_type: sessionStorage.getItem('customer_type') || 'new_customer',\n subscription_status: sessionStorage.getItem('subscribe_status') || 'non-subscribed',\n user_status: sessionStorage.getItem('user_loggedin') || 'nonlogged_in'\n };\n}\nfunction _getCurrencyCode() {\n var currencyElement = document.querySelector('.js-gtm-site-currencycode');\n var currencyCode = currencyElement ? currencyElement.value : \"\";\n return window.ga3Info && window.ga3Info.currencyCode || currencyCode;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jYXJ0cmlkZ2VzL2ludF9ndG1fYmF0aGFuZGJvZHkvY2FydHJpZGdlL2NsaWVudC9kZWZhdWx0L2pzL3BscC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2NhcnRyaWRnZXMvaW50X2d0bV9iYXRoYW5kYm9keS9jYXJ0cmlkZ2UvY2xpZW50L2RlZmF1bHQvanMvcGxwLmpzPzNkYjUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gYmFubmVyIHZpc2libGUgb24gc2NyZWVuIFxyXG5leHBvcnQgY29uc3QgX3N1YnNjcmliZVBMUCA9ICgpID0+IHtcclxuICAgIGNvbnN0IGFsbEl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnByb2R1Y3QtdGlsZXMtZ3RtJyk7XHJcbiAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgIHJvb3Q6IG51bGwsXHJcbiAgICAgICAgdGhyZXNob2xkOiAwLjIwLFxyXG4gICAgfVxyXG4gICAgY29uc3QgaXRlbU9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKF91bnN1YnNjcmliZVBMUCwgb3B0aW9ucyk7XHJcbiAgICBhbGxJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcclxuICAgICAgICBpdGVtT2JzZXJ2ZXIub2JzZXJ2ZShpdGVtKTtcclxuICAgICAgICBpdGVtLmNsYXNzTGlzdC5hZGQoJ3Byb2R1Y3QtdGlsZXMtLWhpZGRlbicpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGxldCBpbmRleD0wO1xyXG4gIGxldCBnYTRJdGVtTGlzdD1bXTtcclxuICBsZXQgZ2EzSXRlbUxpc3Q9W107XHJcbiAgbGV0IGZsdXNoVGltZXI7XHJcbiAgY29uc3QgX3Vuc3Vic2NyaWJlUExQID0gKGVudHJpZXMsIG9ic2VydmVyKSA9PiB7XHJcbiAgICBlbnRyaWVzLmZvckVhY2goZW50cnkgPT4ge1xyXG4gICAgICAgIGlmICghZW50cnkuaXNJbnRlcnNlY3RpbmcpIHJldHVybjtcclxuICAgICAgICBpZiAoZW50cnkudGFyZ2V0LmNsb3Nlc3QoJy5zbGljay1jbG9uZWQnKSkge1xyXG4gICAgICAgICAgICBvYnNlcnZlci51bm9ic2VydmUoZW50cnkudGFyZ2V0KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc2VsZWN0ZWRBbmNob3I9ZW50cnkudGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJy5pbWFnZS1jb250YWluZXItY3VzdG9tLXBscCBhJyk7XHJcbiAgICAgICAgbGV0IGltZzE9ZW50cnkudGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJy5pbWFnZS1jb250YWluZXItY3VzdG9tLXBscCBhIC50aWxlLWltYWdlLTEnKTtcclxuICAgICAgICBsZXQgaW1nMj1lbnRyeS50YXJnZXQucXVlcnlTZWxlY3RvcignLmltYWdlLWNvbnRhaW5lci1jdXN0b20tcGxwIGEgLnRpbGUtaW1hZ2UtMicpO1xyXG4gICAgICAgIGluZGV4Kz0xO1xyXG4gICAgICAgIHNlbGVjdGVkQW5jaG9yLnNldEF0dHJpYnV0ZSgnZGF0YS1pbmRleCcsaW5kZXgpO1xyXG4gICAgICAgIGxldCBnYTRPYmplY3QgPUpTT04ucGFyc2Uoc2VsZWN0ZWRBbmNob3IuZGF0YXNldC5nYTRTY3JvbGwpO1xyXG4gICAgICAgIGdhNE9iamVjdC5lY29tbWVyY2UuaW5kZXg9aW5kZXg7XHJcbiAgICAgICAgZ2E0T2JqZWN0LmVjb21tZXJjZS5wcmljZT1OdW1iZXIoZ2E0T2JqZWN0LmVjb21tZXJjZS5wcmljZSlcclxuICAgICAgICBnYTRJdGVtTGlzdC5wdXNoKGdhNE9iamVjdC5lY29tbWVyY2UpO1xyXG4gICAgIFxyXG4gICAgICAgIGxldCBnYTNPYmplY3QgPUpTT04ucGFyc2Uoc2VsZWN0ZWRBbmNob3IuZGF0YXNldC5nYTNTY3JvbGwpO1xyXG4gICAgICAgIGdhM09iamVjdC5lY29tbWVyY2UucG9zaXRpb249aW5kZXg7XHJcbiAgICAgICAgZ2EzSXRlbUxpc3QucHVzaChnYTNPYmplY3QuZWNvbW1lcmNlKTtcclxuICAgICBcclxuICAgICAgICBlbnRyeS50YXJnZXQuY2xhc3NMaXN0LnJlbW92ZSgncHJvZHVjdC10aWxlcy0taGlkZGVuJyk7XHJcbiAgICAgICAgZW50cnkudGFyZ2V0LmNsYXNzTGlzdC5yZW1vdmUoJ3Byb2R1Y3QtdGlsZXMtZ3RtJyk7XHJcbiAgICAgICAgaWYgKGVudHJ5LnRhcmdldC5jbG9zZXN0KCcuc2xpY2stc2xpZGVyJykpIHtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIudW5vYnNlcnZlKGVudHJ5LnRhcmdldCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoaW1nMS5kYXRhc2V0LnNyYyl7XHJcbiAgICAgICAgICAgIGltZzEuc3JjID0gaW1nMS5kYXRhc2V0LnNyYztcclxuICAgICAgICAgICAgaW1nMS5jbGFzc0xpc3QucmVtb3ZlKCdndG0tdGlsZS1pbWcnKTsgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGltZzIgJiYgaW1nMi5kYXRhc2V0LnNyYyl7XHJcbiAgICAgICAgICAgIGltZzIuc3JjID0gaW1nMi5kYXRhc2V0LnNyYztcclxuICAgICAgICB9XHJcbiAgICAgICAgc2VsZWN0ZWRBbmNob3IuY2xhc3NMaXN0LnJlbW92ZSgnaW1nLXZpZXctc2l6ZScpO1xyXG4gIFxyXG4gIFxyXG4gICAgICAgIG9ic2VydmVyLnVub2JzZXJ2ZShlbnRyeS50YXJnZXQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY2xlYXJUaW1lb3V0KGZsdXNoVGltZXIpO1xyXG4gICAgZmx1c2hUaW1lcj1zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIGxldCBnYTRndG1PYmo9ey4uLl9nZXRQYWdlRGF0YSgpfTtcclxuICAgIGdhNGd0bU9iai5lY29tbWVyY2U9e1xyXG4gICAgICAgIGl0ZW1zOlsuLi5nYTRJdGVtTGlzdF1cclxuICAgIH1cclxuICAgIGxldCBnYTNndG1PYmo9e307XHJcbiAgICBnYTNndG1PYmouZWNvbW1lcmNlPXtcclxuICAgICAgICBjdXJyZW5jeUNvZGU6X2dldEN1cnJlbmN5Q29kZSgpLFxyXG4gICAgICAgIGltcHJlc3Npb25zOlsuLi5nYTNJdGVtTGlzdF1cclxuICAgIH1cclxuICAgIGlmKGdhNEl0ZW1MaXN0Lmxlbmd0aD4wKXtcclxuICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goeyBlY29tbWVyY2U6IG51bGwgfSk7XHJcbiAgICAgICAgd2luZG93LmRh
109dGFMYXllci5wdXNoKGdhNGd0bU9iaik7XHJcbiAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKGdhM2d0bU9iaik7XHJcbiAgICB9XHJcbiAgICBnYTRJdGVtTGlzdD1bXTtcclxuICAgIGdhM0l0ZW1MaXN0PVtdO1xyXG4gICAgLy8gY29uc29sZS5jbGVhcigpO1xyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcbiAgXHJcbiAgXHJcbiAgLy8gcHJvZHVjdCBjbGlja1xyXG4gIHZhciAkZG9jID0gJChkb2N1bWVudCk7XHJcbiAgJGRvYy5vbignY2xpY2snLCAnW2RhdGEtZ2E0LXNjcm9sbF0nLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgdmFyICRndG1PbmNsaWNrRWxlbSA9ICQodGhpcyk7XHJcbiAgICBjb25zdCBpbmRleD0kZ3RtT25jbGlja0VsZW0uZGF0YSgnaW5kZXgnKTtcclxuICAgIC8vIFN0b3JpbmcgaW5kZXggYXMgc2Vzc2lvbiBwYXJhbSB0byByZXRyaXZlIHdoZW4gcGRwIHBhZ2UgbG9hZHNcclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2l0ZW1JbmRleCcsaW5kZXgpO1xyXG4gICAgLy8gVHJpZ2dlciBHQS00XHJcbiAgICBsZXQgZ2E0SXRlbUxpc3Q9W107XHJcbiAgICBsZXQgZ2E0T2JqZWN0ID0kZ3RtT25jbGlja0VsZW0uZGF0YSgnZ2E0LXNjcm9sbCcpO1xyXG4gICAgaWYgKCFnYTRPYmplY3QgfHwgIWdhNE9iamVjdC5lY29tbWVyY2UpIHJldHVybjtcclxuXHJcbiAgICB2YXIgcGFnZUJhc2UgPSBfZ2V0UGFnZURhdGEoKTtcclxuICAgIHZhciBhY3RpdmVQYWdlVHlwZSA9ICh3aW5kb3cucGFnZURhdGFMYXllciAmJiB3aW5kb3cucGFnZURhdGFMYXllci5wYWdlX3R5cGUpIHx8ICh3aW5kb3cuUExQX3BhZ2UgJiYgd2luZG93LlBMUF9wYWdlLnBhZ2VfdHlwZSkgfHwgJCgnLmd0bS1wYWdlLXR5cGUnKS52YWwoKSB8fCBwYWdlQmFzZS5wYWdlX3R5cGUgfHwgJ1BMUF9wYWdlJztcclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3NlbGVjdF9pdGVtX3BhZ2VfdHlwZScsIGFjdGl2ZVBhZ2VUeXBlKTtcclxuXHJcbiAgICAvLyBEeW5hbWljIGJyZWFkY3J1bWIgc2VxdWVuY2UgZnJvbSB2aXNpYmxlIFVJXHJcbiAgICB2YXIgYnJlYWRjcnVtYnNBcnIgPSBbXTtcclxuICAgICQoJy5icmVhZGNydW1iJykuZmlyc3QoKS5maW5kKCcuYnJlYWRjcnVtYi1pdGVtJykuZWFjaChmdW5jdGlvbiAoaWR4KSB7XHJcbiAgICAgICAgdmFyIHRleHQgPSAkKHRoaXMpLnRleHQoKS50cmltKCk7XHJcbiAgICAgICAgaWYgKHRleHQpIHtcclxuICAgICAgICAgICAgYnJlYWRjcnVtYnNBcnIucHVzaChpZHggPT09IDAgPyB0ZXh0LnRvVXBwZXJDYXNlKCkgOiB0ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHZhciB1aUJyZWFkY3J1bWJTZXF1ZW5jZSA9IGJyZWFkY3J1bWJzQXJyLmxlbmd0aCA+IDAgPyBicmVhZGNydW1ic0Fyci5qb2luKCcgPiAnKSA6IChwYWdlQmFzZS5icmVhZGNydW1fc2VxdWVuY2UgfHwgJ05BJyk7XHJcblxyXG4gICAgLy8gVXNlciBsb2dpbiBzdGF0dXMgY2hlY2tcclxuICAgIHZhciB1c2VyTG9naW5TdGF0dXMgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1c2VyX2xvZ2dlZGluJykgfHwgcGFnZUJhc2UudXNlcl9zdGF0dXM7XHJcbiAgICB2YXIgdXNlclN0YXR1c1ZhbCA9ICh1c2VyTG9naW5TdGF0dXMgPT09ICdsb2dnZWRfaW4nIHx8IHVzZXJMb2dpblN0YXR1cyA9PT0gJ3RydWUnKSA/ICdsb2dnZWRfaW4nIDogJ25vbmxvZ2dlZF9pbic7XHJcblxyXG4gICAgZ2E0T2JqZWN0LmVjb21tZXJjZS5wcmljZSA9IE51bWJlcihnYTRPYmplY3QuZWNvbW1lcmNlLnByaWNlKSB8fCAwO1xyXG4gICAgZ2E0T2JqZWN0LmVjb21tZXJjZS5xdWFudGl0eSA9IDE7XHJcbiAgICBnYTRPYmplY3QuZWNvbW1lcmNlLmluZGV4ID0gcGFyc2VJbnQoaW5kZXgsIDEwKTtcclxuICAgIGdhNEl0ZW1MaXN0LnB1c2goZ2E0T2JqZWN0LmVjb21tZXJjZSk7XHJcblxyXG4gICAgbGV0IGdhNGd0bU9iaiA9IE9iamVjdC5hc3NpZ24oe30sIHBhZ2VCYXNlLCB7XHJcbiAgICAgICAgZXZlbnQ6ICdzZWxlY3RfaXRlbScsXHJcbiAgICAgICAgcGFnZV90eXBlOiBhY3RpdmVQYWdlVHlwZSxcclxuICAgICAgICB1c2VySUQ6IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2d0bV9DdXN0b21lcl9OdW1iZXInKSB8fCBwYWdlQmFzZS51c2VySUQgfHwgJ05BJyxcclxuICAgICAgICB1c2VyX3R5cGU6IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzZXJfdHlwZScpIHx8IHBhZ2VCYXNlLnVzZXJfdHlwZSB8fCAnTkEnLFxyXG4gICAgICAgIGN1c3RvbWVyX3R5cGU6IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2N1c3RvbWVyX3R5cGUnKSB8fCBwYWdlQmFzZS5jdXN0b21lcl90eXBlIHx8ICdOQScsXHJcbiAgICAgICAgc3Vic2NyaXB0aW9uX3N0YXR1czogc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnc3Vic2NyaWJlX3N0YXR1cycpIHx8IHBhZ2VCYXNlLnN1YnNjcmlwdGlvbl9zdGF0dXMgfHwgJ05BJyxcclxuICAgICAgICB1c2VyX3N0YXR1czogdXNlclN0YXR1c1ZhbCxcclxuICAgICAgICBicmVhZGNydW1fc2VxdWVuY2U6IHVpQnJlYWRjcnVtYlNlcXVlbmNlLFxyXG4gICAgICAgIGJhbm5lcl9uYW1lOiBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdCQldfYmFubmVyX25hbWUnKSB8fCBwYWdlQmFzZS5iYW5uZXJfbmFtZSB8fCAnTkEnLFxyXG4gICAgICAgIHN0b2NrX3N0YXR1czogcGFnZUJhc2Uuc3RvY2tfc3RhdHVzIHx8ICdpbl9zdG9jaycsXHJcbiAgICAgICAgZWNvbW1lcmNlOiB7XHJcbiAgICAgICAgICAgIGl0ZW1zOiBbLi4uZ2E0SXRlbUxpc3RdXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gVHJpZ2dlciBHQS0zXHJcbiAgICBsZXQgZ2EzSXRlbUxpc3Q9W107XHJcbiAgICBsZXQgZ2EzT2JqZWN0ID0kZ3RtT25jbGlja0VsZW0uZGF0YSgnZ2EzLXNjcm9sbCcpO1xyXG4gICAgaWYgKGdhM09iamVjdCAmJiBnYTNPYmplY3QuZWNvbW1lcmNlKSB7XHJcbiAgICAgICAgZ2EzT2JqZWN0LmVjb21tZXJjZS5wb3NpdGlvbj1pbmRleDtcclxuICAgICAgICBnYTNJdGVtTGlzdC5wdXNoKGdhM09iamVjdC5lY29tbWVyY2UpO1xyXG4gICAgfVxyXG4gICAgbGV0IGdhM2d0bU9iaj17fTtcclxuICAgIGdhM2d0bU9iai5lY29tbWVyY2U9e1xyXG4gICAgICAgIGN1cnJlbmN5Q29kZTpfZ2V0Q3VycmVuY3lDb2RlKCksXHJcbiAgICAgICAgaW1wcmVzc2lvbnM6Wy4uLmdhM0l0ZW1MaXN0XVxyXG4gICAgfVxyXG4gIFxyXG4gICAgaWYoZ2E0SXRlbUxpc3QubGVuZ3RoPjApe1xyXG4gICAgICAgI
109HdpbmRvdy5kYXRhTGF5ZXIucHVzaCh7IGVjb21tZXJjZTogbnVsbCB9KTtcclxuICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goZ2E0Z3RtT2JqKTtcclxuICAgICAgICBpZiAod2luZG93LmdhM0luZm8pIHtcclxuICAgICAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKGdhM2d0bU9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gIFxyXG4gIH0pO1xyXG4gXHJcbiAgZnVuY3Rpb24gX2dldFBhZ2VEYXRhKCkge1xyXG4gICAgaWYgKHdpbmRvdy5QTFBfcGFnZSkgcmV0dXJuIHdpbmRvdy5QTFBfcGFnZTtcclxuICAgIGNvbnN0IHBhZ2VUeXBlID0gJCgnLmd0bS1wYWdlLXR5cGUnKS52YWwoKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZXZlbnQ6ICd2aWV3X2l0ZW1fbGlzdCcsXHJcbiAgICAgICAgcGFnZV90eXBlOiBwYWdlVHlwZSAmJiBwYWdlVHlwZSAhPT0gJ251bGwnID8gcGFnZVR5cGUgOiAnSG9tZV9wYWdlJyxcclxuICAgICAgICB1c2VySUQ6IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2d0bV9DdXN0b21lcl9OdW1iZXInKSB8fCAnTkEnLFxyXG4gICAgICAgIHVzZXJfdHlwZTogc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXNlcl90eXBlJykgfHwgJ25ld191c2VyJyxcclxuICAgICAgICBjdXN0b21lcl90eXBlOiBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdjdXN0b21lcl90eXBlJykgfHwgJ25ld19jdXN0b21lcicsXHJcbiAgICAgICAgc3Vic2NyaXB0aW9uX3N0YXR1czogc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnc3Vic2NyaWJlX3N0YXR1cycpIHx8ICdub24tc3Vic2NyaWJlZCcsXHJcbiAgICAgICAgdXNlcl9zdGF0dXM6IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzZXJfbG9nZ2VkaW4nKSB8fCAnbm9ubG9nZ2VkX2luJyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBfZ2V0Q3VycmVuY3lDb2RlKCkge1xyXG4gICAgY29uc3QgY3VycmVuY3lFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLWd0bS1zaXRlLWN1cnJlbmN5Y29kZScpO1xyXG4gICAgY29uc3QgY3VycmVuY3lDb2RlID0gY3VycmVuY3lFbGVtZW50ID8gY3VycmVuY3lFbGVtZW50LnZhbHVlIDogXCJcIjtcclxuICAgIHJldHVybiAod2luZG93LmdhM0luZm8gJiYgd2luZG93LmdhM0luZm8uY3VycmVuY3lDb2RlKVxyXG4gICAgICAgIHx8IGN1cnJlbmN5Q29kZVxyXG4gIH1cclxuXHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./cartridges/int_gtm_bathandbody/cartridge/client/default/js/plp.js\n"); 110 111/***/ }), 112
113/***/ "./cartridges/int_gtm_bathandbody/cartridge/client/default/js/promotion.js": 114/*!*********************************************************************************!*\ 115 !*** ./cartridges/int_gtm_bathandbody/cartridge/client/default/js/promotion.js ***! 116 \*********************************************************************************/ 117/*! exports provided: _subscribe */ 118/***/ (function(module, __webpack_exports__, __webpack_require__) { 119 120"use strict"; 121eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"_subscribe\", function() { return _subscribe; });\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _commonKeys() {\n return {\n userID: sessionStorage.getItem('gtm_Customer_Number') || 'NA',\n user_type: sessionStorage.getItem('user_type') || 'new_user',\n customer_type: sessionStorage.getItem('customer_type') || 'new_customer',\n subscription_status: sessionStorage.getItem('subscribe_status') || 'non-subscribed',\n user_status: sessionStorage.getItem('user_loggedin') || 'nonlogged_in'\n };\n}\nfunction isProductTile(el) {\n if (!el) return false;\n var node = el;\n while (node && node !== document) {\n if (node.matches) {\n if (node.matches('.product-tile') || node.matches('.product-tiles-gtm') || node.matches('[data-ga4-scroll]') || node.matches('.simple-carousel-section') || node.matches('.einstien-recommend-product') || node.matches('.einstien-slick-carousel') || node.matches('.image-container-custom-plp') || node.matches('.recommendation-item') || node.matches('.product-grid') || node.matches('.product')) {\n return true;\n }\n }\n node = node.parentElement;\n }\n return false;\n}\nfunction getPromoItems() {\n var selector = '[data-gtm-banner-onclick], .experience-commerce_assets-bannerAndLink a, .experience-commerce_assets-ctaButtonAndLink a, .layout-banner a, .banner_background a, .carousel-item a';\n var raw = document.querySelectorAll(selector);\n var items = [];\n Array.prototype.forEach.call(raw, function (el) {\n var anchor = el.matches('a') ? el : el.querySelector('a') || el;\n if (!anchor) return;\n // hidden carousel slides are kept so they are observed and counted in creative_slot\n if (!anchor.closest('.carousel-item') && !(anchor.offsetWidth > 0 || anchor.offsetHeight > 0 || anchor.getClientRects().length > 0)) {\n return;\n }
121\n if (isProductTile(anchor) || isProductTile(el)) {\n return;\n }\n if (items.indexOf(anchor) === -1) {\n items.push(anchor);\n }\n });\n return items;\n}\nfunction getCreativeSlot(elem) {\n if (!elem) return 1;\n var promoItems = getPromoItems();\n var targetAnchor = elem.matches('a') ? elem : elem.querySelector('a') || elem;\n var slot = 1;\n var lastCTABannerHost = null;\n var foundSlot = 1;\n var matched = false;\n for (var index = 0; index < promoItems.length; index++) {\n var item = promoItems[index];\n var ctaHost = item.closest('.experience-commerce_layouts-ctaButtonBanner');\n if (ctaHost) {\n if (lastCTABannerHost !== ctaHost) {\n if (index > 0) {\n slot++;\n }\n lastCTABannerHost = ctaHost;\n }\n } else {\n if (index > 0) {\n slot++;\n }\n lastCTABannerHost = null;\n }\n if (item === targetAnchor || item === elem || item.contains(elem) || elem.contains(item)) {\n foundSlot = slot;\n matched = true;\n break;\n }\n }\n if (!matched && elem) {\n var ctaHostElem = elem.closest('.experience-commerce_layouts-ctaButtonBanner');\n if (ctaHostElem) {\n return getCreativeSlot(ctaHostElem);\n }\n }\n return foundSlot;\n}\n\n// banner visible on screen\nvar _subscribe = function _subscribe() {\n var promoItems = getPromoItems();\n var observedSet = [];\n var options = {\n root: null,\n threshold: 0.20\n };\n var sectionObserver = new IntersectionObserver(_unsubscribe, options);\n Array.prototype.forEach.call(promoItems, function (elem) {\n if (elem && observedSet.indexOf(elem) === -1) {\n observedSet.push(elem);\n // observe the image: an inline <a> only reports a text-line-high box at the image bottom\n sectionObserver.observe(elem);\n elem.classList.add('section--hidden');\n }\n });\n};\nvar _unsubscribe = function _unsubscribe(entries, observer) {\n entries.forEach(function (entry) {\n if (!entry.isIntersecting) return;\n var selectedAnchor = entry.target;\n if (!selectedAnchor || isProductTile(selectedAnchor)) return;\n var $anchor = $(selectedAnchor);\n var rawData = selectedAnchor && selectedAnchor.dataset && selectedAnchor.dataset.gtmBannerOnclick ? selectedAnchor.dataset.gtmBannerOnclick : $anchor.attr(\"data-gtm-banner-onclick\");\n var bannerObject = rawData;\n if (typeof bannerObject === 'string') {\n try {\n bannerObject = JSON.parse(bannerObject.replace(/"/g, '\"'));\n } catch (err) {\n try {\n bannerObject = JSON.parse(bannerObject);\n } catch (err2) {\n bannerObject = null;\n }\n }\n }\n var bannerTitle = $anchor.data(\"title\") || $anchor.attr(\"data-title\") || (selectedAnchor && selectedAnchor.dataset ? selectedAnchor.dataset.title : null) || $anchor.find('img').attr('title') || $anchor.find('img').attr('alt') || 'NA';\n if (!bannerObject) {\n bannerObject = [{\n promotion_id: 'NA',\n promotion_name: bannerTitle,\n creative_name: bannerTitle,\n creative_slot: 0\n }];\n }\n var bannerIndex = getCreativeSlot(selectedAnchor);\n var rawItems = Array.isArray(bannerObject) ? bannerObject : [bannerObject];\n if (!rawItems || !rawItems[0]) {\n rawItems = [{\n promotion_id: 'NA',\n promotion_name: bannerTitle,\n creative_name: bannerTitle,\n creative_slot: 0\n }];\n }\n var items = rawItems.map(function (item) {\n if (item) {\n var newItem = _objectSpread({}, item);\n delete newItem.index;\n var slot = bannerIndex > 0 ? bannerIndex : parseInt(newItem.creative_slot, 10) || 1;\n newItem.creative_slot = slot;\n newItem.promotion_name = newItem.promotion_name || bannerTitle;\n return newItem;\n }\n return item;\n });\n var gtmObj = _objectSpread({}, _commonKeys());
121\n gtmObj.ecommerce = {\n items: items\n };\n gtmObj.event = \"view_promotion\";\n var brandNode = document.querySelector('.border-pink');\n var brand = brandNode && brandNode.dataset && brandNode.dataset.brand ? brandNode.dataset.brand : '';\n gtmObj.banner_name = bannerTitle ? bannerTitle : 'NA';\n gtmObj.banner_type = \"image\";\n gtmObj.page_type = 'Home_page';\n if (gtmObj.ecommerce && gtmObj.ecommerce.items && gtmObj.ecommerce.items[0]) {\n gtmObj.ecommerce.items[0].promotion_name = gtmObj.ecommerce.items[0].promotion_name || gtmObj.banner_name;\n }\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n ecommerce: null\n });\n window.dataLayer.push(gtmObj);\n entry.target.classList.remove('section--hidden');\n observer.unobserve(entry.target);\n });\n};\n\n// Home banner on click Data Layer\nvar $doc = $(document);\nvar bannerSelector = \"[data-gtm-banner-onclick], .layout-banner a, .banner_background a, .carousel-item a\";\n$doc.off(\"click\", bannerSelector).on(\"click\", bannerSelector, function (e) {\n if (isProductTile(this) || e && e.target && isProductTile(e.target)) {\n return;\n }\n if (e && typeof e.stopPropagation === 'function') {\n e.stopPropagation();\n }\n var $gtmOnclickElem = $(this).closest(\"[data-gtm-banner-onclick]\");\n if (!$gtmOnclickElem.length) {\n var $parentSection = $(this).closest('.experience-commerce_assets-bannerAndLink, .experience-commerce_layouts-ctaButtonBanner, .experience-commerce_assets-ctaButtonAndLink, .carousel-homepage-vsfa, .experience-commerce_layouts-carousel, .layout-banner, .banner_background');\n $gtmOnclickElem = $parentSection.find(\"[data-gtm-banner-onclick]\").first();\n if (!$gtmOnclickElem.length) {\n $gtmOnclickElem = $(this);\n }\n }\n var clickedAnchor = $gtmOnclickElem[0];\n var rawData = clickedAnchor && clickedAnchor.dataset && clickedAnchor.dataset.gtmBannerOnclick ? clickedAnchor.dataset.gtmBannerOnclick : $gtmOnclickElem.attr(\"data-gtm-banner-onclick\");\n var bannerObject = rawData;\n if (typeof bannerObject === 'string') {\n try {\n bannerObject = JSON.parse(bannerObject.replace(/"/g, '\"'));\n } catch (err) {\n try {\n bannerObject = JSON.parse(bannerObject);\n } catch (err2) {\n bannerObject = null;\n }\n }\n }\n var bannerTitle = $gtmOnclickElem.data(\"title\") || $gtmOnclickElem.attr(\"data-title\") || (clickedAnchor && clickedAnchor.dataset ? clickedAnchor.dataset.title : null) || $gtmOnclickElem.find('img').attr('title') || $gtmOnclickElem.find('img').attr('alt') || 'NA';\n if (!bannerObject) {\n bannerObject = [{\n promotion_id: 'NA',\n promotion_name: bannerTitle,\n creative_name: bannerTitle,\n creative_slot: 0\n }];\n }\n var rawItems = Array.isArray(bannerObject) ? bannerObject : [bannerObject];\n if (!rawItems || !rawItems[0]) {\n rawItems = [{\n promotion_id: 'NA',\n promotion_name: bannerTitle,\n creative_name: bannerTitle,\n creative_slot: 0\n }];\n }\n var bannerIndex = getCreativeSlot(clickedAnchor || $(this)[0]);\n var items = rawItems.map(function (item) {\n if (item) {\n var newItem = _objectSpread({}, item);\n delete newItem.index;\n var slot = bannerIndex > 0 ? bannerIndex : parseInt(newItem.creative_slot, 10) || 1;\n newItem.creative_slot = slot;\n return newItem;\n }\n return item;\n });\n var gtmObj = _objectSpread({}, _commonKeys());
121\n gtmObj.ecommerce = {\n items: items\n };\n gtmObj.event = \"select_promotion\";\n var brandNode = document.querySelector('.border-pink');\n var brand = brandNode && brandNode.dataset && brandNode.dataset.brand ? brandNode.dataset.brand : '';\n // let brandMap = { 'victorias-Secrets': 'victoriassecret', 'pink': 'Pink', 'beauty': 'beauty' };\n\n if (bannerTitle && bannerTitle !== 'NA') {\n sessionStorage.setItem('VS_banner_name', bannerTitle);\n }\n gtmObj.banner_name = bannerTitle ? bannerTitle : 'NA';\n gtmObj.banner_type = \"image\";\n gtmObj.page_type = 'Home_page';\n if (gtmObj.ecommerce && gtmObj.ecommerce.items && gtmObj.ecommerce.items[0]) {\n gtmObj.ecommerce.items[0].promotion_name = gtmObj.ecommerce.items[0].promotion_name || gtmObj.banner_name;\n }\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n ecommerce: null\n });\n window.dataLayer.push(gtmObj);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jYXJ0cmlkZ2VzL2ludF9ndG1fYmF0aGFuZGJvZHkvY2FydHJpZGdlL2NsaWVudC9kZWZhdWx0L2pzL3Byb21vdGlvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2NhcnRyaWRnZXMvaW50X2d0bV9iYXRoYW5kYm9keS9jYXJ0cmlkZ2UvY2xpZW50L2RlZmF1bHQvanMvcHJvbW90aW9uLmpzPzQzNTciXSwic291cmNlc0NvbnRlbnQiOlsiXHJcbmZ1bmN0aW9uIF9jb21tb25LZXlzKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB1c2VySUQ6IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2d0bV9DdXN0b21lcl9OdW1iZXInKSB8fCAnTkEnLFxyXG4gICAgICAgIHVzZXJfdHlwZTogc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXNlcl90eXBlJykgfHwgJ25ld191c2VyJyxcclxuICAgICAgICBjdXN0b21lcl90eXBlOiBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdjdXN0b21lcl90eXBlJykgfHwgJ25ld19jdXN0b21lcicsXHJcbiAgICAgICAgc3Vic2NyaXB0aW9uX3N0YXR1czogc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnc3Vic2NyaWJlX3N0YXR1cycpIHx8ICdub24tc3Vic2NyaWJlZCcsXHJcbiAgICAgICAgdXNlcl9zdGF0dXM6IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzZXJfbG9nZ2VkaW4nKSB8fCAnbm9ubG9nZ2VkX2luJ1xyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNQcm9kdWN0VGlsZShlbCkge1xyXG4gICAgaWYgKCFlbCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgdmFyIG5vZGUgPSBlbDtcclxuICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT09IGRvY3VtZW50KSB7XHJcbiAgICAgICAgaWYgKG5vZGUubWF0Y2hlcykge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBub2RlLm1hdGNoZXMoJy5wcm9kdWN0LXRpbGUnKSB8fFxyXG4gICAgICAgICAgICAgICAgbm9kZS5tYXRjaGVzKCcucHJvZHVjdC10aWxlcy1ndG0nKSB8fFxyXG4gICAgICAgICAgICAgICAgbm9kZS5tYXRjaGVzKCdbZGF0YS1nYTQtc2Nyb2xsXScpIHx8XHJcbiAgICAgICAgICAgICAgICBub2RlLm1hdGNoZXMoJy5zaW1wbGUtY2Fyb3VzZWwtc2VjdGlvbicpIHx8XHJcbiAgICAgICAgICAgICAgICBub2RlLm1hdGNoZXMoJy5laW5zdGllbi1yZWNvbW1lbmQtcHJvZHVjdCcpIHx8XHJcbiAgICAgICAgICAgICAgICBub2RlLm1hdGNoZXMoJy5laW5zdGllbi1zbGljay1jYXJvdXNlbCcpIHx8XHJcbiAgICAgICAgICAgICAgICBub2RlLm1hdGNoZXMoJy5pbWFnZS1jb250YWluZXItY3VzdG9tLXBscCcpIHx8XHJcbiAgICAgICAgICAgICAgICBub2RlLm1hdGNoZXMoJy5yZWNvbW1lbmRhdGlvbi1pdGVtJykgfHxcclxuICAgICAgICAgICAgICAgIG5vZGUubWF0Y2hlcygnLnByb2R1Y3QtZ3JpZCcpIHx8XHJcbiAgICAgICAgICAgICAgICBub2RlLm1hdGNoZXMoJy5wcm9kdWN0JylcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnRFbGVtZW50O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQcm9tb0l0ZW1zKCkge1xyXG4gICAgdmFyIHNlbGVjdG9yID0gJ1tkYXRhLWd0bS1iYW5uZXItb25jbGlja10sIC5leHBlcmllbmNlLWNvbW1lcmNlX2Fzc2V0cy1iYW5uZXJBbmRMaW5rIGEsIC5leHBlcmllbmNlLWNvbW1lcmNlX2Fzc2V0cy1jdGFCdXR0b25BbmRMaW5rIGEsIC5sYXlvdXQtYmFubmVyIGEsIC5iYW5uZXJfYmFja2dyb3VuZCBhLCAuY2Fyb3VzZWwtaXRlbSBhJztcclxuICAgIHZhciByYXcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcclxuICAgIHZhciBpdGVtcyA9IFtdO1xyXG5cclxuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwocmF3LCBmdW5jdGlvbiAoZWwpIHtcclxuICAgICAgICB2Y
121XIgYW5jaG9yID0gZWwubWF0Y2hlcygnYScpID8gZWwgOiAoZWwucXVlcnlTZWxlY3RvcignYScpIHx8IGVsKTtcclxuICAgICAgICBpZiAoIWFuY2hvcikgcmV0dXJuO1xyXG4gICAgICAgIC8vIGhpZGRlbiBjYXJvdXNlbCBzbGlkZXMgYXJlIGtlcHQgc28gdGhleSBhcmUgb2JzZXJ2ZWQgYW5kIGNvdW50ZWQgaW4gY3JlYXRpdmVfc2xvdFxyXG4gICAgICAgIGlmICghYW5jaG9yLmNsb3Nlc3QoJy5jYXJvdXNlbC1pdGVtJykgJiYgIShhbmNob3Iub2Zmc2V0V2lkdGggPiAwIHx8IGFuY2hvci5vZmZzZXRIZWlnaHQgPiAwIHx8IGFuY2hvci5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCA+IDApKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzUHJvZHVjdFRpbGUoYW5jaG9yKSB8fCBpc1Byb2R1Y3RUaWxlKGVsKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtcy5pbmRleE9mKGFuY2hvcikgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goYW5jaG9yKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBpdGVtcztcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q3JlYXRpdmVTbG90KGVsZW0pIHtcclxuICAgIGlmICghZWxlbSkgcmV0dXJuIDE7XHJcbiAgICB2YXIgcHJvbW9JdGVtcyA9IGdldFByb21vSXRlbXMoKTtcclxuICAgIHZhciB0YXJnZXRBbmNob3IgPSBlbGVtLm1hdGNoZXMoJ2EnKSA/IGVsZW0gOiAoZWxlbS5xdWVyeVNlbGVjdG9yKCdhJykgfHwgZWxlbSk7XHJcblxyXG4gICAgdmFyIHNsb3QgPSAxO1xyXG4gICAgdmFyIGxhc3RDVEFCYW5uZXJIb3N0ID0gbnVsbDtcclxuICAgIHZhciBmb3VuZFNsb3QgPSAxO1xyXG4gICAgdmFyIG1hdGNoZWQgPSBmYWxzZTtcclxuXHJcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgcHJvbW9JdGVtcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICB2Y
121XIgaXRlbSA9IHByb21vSXRlbXNbaW5kZXhdO1xyXG4gICAgICAgIHZhciBjdGFIb3N0ID0gaXRlbS5jbG9zZXN0KCcuZXhwZXJpZW5jZS1jb21tZXJjZV9sYXlvdXRzLWN0YUJ1dHRvbkJhbm5lcicpO1xyXG5cclxuICAgICAgICBpZiAoY3RhSG9zdCkge1xyXG4gICAgICAgICAgICBpZiAobGFzdENUQUJhbm5lckhvc3QgIT09IGN0YUhvc3QpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBzbG90Kys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsYXN0Q1RBQmFubmVySG9zdCA9IGN0YUhvc3Q7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzbG90Kys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGFzdENUQUJhbm5lckhvc3QgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGl0ZW0gPT09IHRhcmdldEFuY2hvciB8fCBpdGVtID09PSBlbGVtIHx8IGl0ZW0uY29udGFpbnMoZWxlbSkgfHwgZWxlbS5jb250YWlucyhpdGVtKSkge1xyXG4gICAgICAgICAgICBmb3VuZFNsb3QgPSBzbG90O1xyXG4gICAgICAgICAgICBtYXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghbWF0Y2hlZCAmJiBlbGVtKSB7XHJcbiAgICAgICAgdmFyIGN0YUhvc3RFbGVtID0gZWxlbS5jbG9zZXN0KCcuZXhwZXJpZW5jZS1jb21tZXJjZV9sYXlvdXRzLWN0YUJ1dHRvbkJhbm5lcicpO1xyXG4gICAgICAgIGlmIChjdGFIb3N0RWxlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0Q3JlYXRpdmVTbG90KGN0YUhvc3RFbGVtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZvdW5kU2xvdDtcclxufVxyXG5cclxuLy8gYmFubmVyIHZpc2libGUgb24gc2NyZWVuXHJcbmV4cG9ydCBjb25zdCBfc3Vic2NyaWJlID0gKCkgPT4ge1xyXG4gICAgdmFyIHByb21vSXRlbXMgPSBnZXRQcm9tb0l0ZW1zKCk7XHJcbiAgICB2YXIgb2JzZXJ2ZWRTZXQgPSBbXTtcclxuICAgIHZhciBvcHRpb25zID0ge1xyXG4gICAgICAgIHJvb3Q6IG51bGwsXHJcbiAgICAgICAgdGhyZXNob2xkOiAwLjIwLFxyXG4gICAgfTtcclxuICAgIHZhciBzZWN0aW9uT2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoX3Vuc3Vic2NyaWJlLCBvcHRpb25zKTtcclxuXHJcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHByb21vSXRlbXMsIGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICBpZiAoZWxlbSAmJiBvYnNlcnZlZFNldC5pbmRleE9mKGVsZW0pID09PSAtMSkge1xyXG4gICAgICAgICAgICBvYnNlcnZlZFNldC5wdXNoKGVsZW0pO1xyXG4gICAgICAgICAgICAvLyBvYnNlcnZlIHRoZSBpbWFnZTogYW4gaW5saW5lIDxhPiBvbmx5IHJlcG9ydHMgYSB0ZXh0LWxpbmUtaGlnaCBib3ggYXQgdGhlIGltYWdlIGJvdHRvbVxyXG4gICAgICAgICAgICBzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZShlbGVtKTtcclxuICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QuYWRkKCdzZWN0aW9uLS1oaWRkZW4nKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufTtcclxuXHJcbmNvbnN0IF91bnN1YnNjcmliZSA9IChlbnRyaWVzLCBvYnNlcnZlcikgPT4ge1xyXG4gICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSkge1xyXG4gICAgICAgIGlmICghZW50cnkuaXNJbnRlcnNlY3RpbmcpIHJldHVybjtcclxuICAgICAgICBsZXQgc2VsZWN0ZWRBbmNob3IgPSBlbnRyeS50YXJnZXQ7XHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZEFuY2hvciB8fCBpc1Byb2R1Y3RUaWxlKHNlbGVjdGVkQW5jaG9yKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgJGFuY2hvciA9ICQoc2VsZWN0ZWRBbmNob3IpO1xyXG4gICAgICAgIGxldCByYXdEYXRhID0gKHNlbGVjdGVkQW5jaG9yICYmIHNlbGVjdGVkQW5jaG9yLmRhdGFzZXQgJiYgc2VsZWN0ZWRBbmNob3IuZGF0YXNldC5ndG1CYW5uZXJPbmNsaWNrKVxyXG4gICAgICAgICAgICA/IHNlbGVjdGVkQW5jaG9yLmRhdGFzZXQuZ3RtQmFubmVyT25jbGlja1xyXG4gICAgICAgICAgICA6ICRhbmNob3IuYXR0cihcImRhdGEtZ3RtLWJhbm5lci1vbmNsaWNrXCIpO1xyXG5cclxuICAgICAgICBsZXQgYmFubmVyT2JqZWN0ID0gcmF3RGF0YTtcclxuICAgICAgICBpZiAodHlwZW9mIGJhbm5lck9iamVjdCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGJhbm5lck9iamVjdCA9IEpTT04ucGFyc2UoYmFubmVyT2JqZWN0LnJlcGxhY2UoLyZxdW90Oy9nLCAnXCInKSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBiYW5uZXJPYmplY3QgPSBKU09OLnBhcnNlKGJhbm5lck9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFubmVyT2JqZWN0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGJhbm5lclRpdGxlID0gJGFuY2hvci5kYXRhKFwidGl0bGVcIilcclxuICAgICAgICAgICAgfHwgJGFuY2hvci5hdHRyKFwiZGF0YS10aXRsZVwiKVxyXG4gICAgICAgICAgICB8fCAoc2VsZWN0ZWRBbmNob3IgJiYgc2VsZWN0ZWRBbmNob3IuZGF0YXNldCA/IHNlbGVjdGVkQW5jaG9yLmRhdGFzZXQudGl0bGUgOiBudWxsKVxyXG4gICAgICAgICAgICB8fCAkYW5jaG9yLmZpbmQoJ2ltZycpLmF0dHIoJ3RpdGxlJylcclxuICAgICAgICAgICAgfHwgJGFuY2hvci5maW5kKCdpbWcnKS5hdHRyKCdhbHQnKVxyXG4gICAgICAgICAgICB8fCAnTkEnO1xyXG5cclxuICAgICAgICBpZiAoIWJhbm5lck9iamVjdCkge1xyXG4gICAgICAgICAgICBiYW5uZXJPYmplY3QgPSBbe1xyXG4gICAgICAgICAgICAgICAgcHJvbW90aW9uX2lkOiAnTkEnLFxyXG4gICAgICAgICAgICAgICAgcHJvbW90aW9uX25hbWU6IGJhbm5lclRpdGxlLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRpdmVfbmFtZTogYmFubmVyVGl0bGUsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGl2ZV9zbG90OiAwXHJcbiAgICAgICAgICAgI
121H1dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGJhbm5lckluZGV4ID0gZ2V0Q3JlYXRpdmVTbG90KHNlbGVjdGVkQW5jaG9yKTtcclxuICAgICAgICBsZXQgcmF3SXRlbXMgPSBBcnJheS5pc0FycmF5KGJhbm5lck9iamVjdCkgPyBiYW5uZXJPYmplY3QgOiBbYmFubmVyT2JqZWN0XTtcclxuICAgICAgICBpZiAoIXJhd0l0ZW1zIHx8ICFyYXdJdGVtc1swXSkge1xyXG4gICAgICAgICAgICByYXdJdGVtcyA9IFt7XHJcbiAgICAgICAgICAgICAgICBwcm9tb3Rpb25faWQ6ICdOQScsXHJcbiAgICAgICAgICAgICAgICBwcm9tb3Rpb25fbmFtZTogYmFubmVyVGl0bGUsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGl2ZV9uYW1lOiBiYW5uZXJUaXRsZSxcclxuICAgICAgICAgICAgICAgIGNyZWF0aXZlX3Nsb3Q6IDBcclxuICAgICAgICAgICAgfV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbXMgPSByYXdJdGVtcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIGxldCBuZXdJdGVtID0geyAuLi5pdGVtIH07XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3SXRlbS5pbmRleDtcclxuICAgICAgICAgICAgICAgIGxldCBzbG90ID0gYmFubmVySW5kZXggPiAwID8gYmFubmVySW5kZXggOiAocGFyc2VJbnQobmV3SXRlbS5jcmVhdGl2ZV9zbG90LCAxMCkgfHwgMSk7XHJcbiAgICAgICAgICAgICAgICBuZXdJdGVtLmNyZWF0aXZlX3Nsb3QgPSBzbG90O1xyXG4gICAgICAgICAgICAgICAgbmV3SXRlbS5wcm9tb3Rpb25fbmFtZSA9IG5ld0l0ZW0ucHJvbW90aW9uX25hbWUgfHwgYmFubmVyVGl0bGU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3SXRlbTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbGV0IGd0bU9iaiA9IHsgLi4uX2NvbW1vbktleXMoKSB9O1xyXG4gICAgICAgIGd0bU9iai5lY29tbWVyY2UgPSB7XHJcbiAgICAgICAgICAgIGl0ZW1zOiBpdGVtc1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgZ3RtT2JqLmV2ZW50ID0gXCJ2aWV3X3Byb21vdGlvblwiO1xyXG4gICAgICAgIGxldCBicmFuZE5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYm9yZGVyLXBpbmsnKTtcclxuICAgICAgICBsZXQgYnJhbmQgPSBicmFuZE5vZGUgJiYgYnJhbmROb2RlLmRhdGFzZXQgJiYgYnJhbmROb2RlLmRhdGFzZXQuYnJhbmQgPyBicmFuZE5vZGUuZGF0YXNldC5icmFuZCA6ICcnO1xyXG4gICAgICAgIGd0bU9iai5iYW5uZXJfbmFtZSA9IGJhbm5lclRpdGxlID8gYmFubmVyVGl0bGUgOiAnTkEnO1xyXG4gICAgICAgIGd0bU9iai5iYW5uZXJfdHlwZSA9IFwiaW1hZ2VcIjtcclxuICAgICAgICBndG1PYmoucGFnZV90eXBlID0gJ0hvbWVfcGFnZSc7XHJcbiAgICAgICAgaWYgKGd0bU9iai5lY29tbWVyY2UgJiYgZ3RtT2JqLmVjb21tZXJjZS5pdGVtcyAmJiBndG1PYmouZWNvbW1lcmNlLml0ZW1zWzBdKSB7XHJcbiAgICAgICAgICAgIGd0bU9iai5lY29tbWVyY2UuaXRlbXNbMF0ucHJvbW90aW9uX25hbWUgPSBndG1PYmouZWNvbW1lcmNlLml0ZW1zWzBdLnByb21vdGlvbl9uYW1lIHx8IGd0bU9iai5iYW5uZXJfbmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2luZG93LmRhdGFMYXllciA9IHdpbmRvdy5kYXRhTGF5ZXIgfHwgW107XHJcbiAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKHsgZWNvbW1lcmNlOiBudWxsIH0pO1xyXG4gICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChndG1PYmopO1xyXG4gICAgICAgIGVudHJ5LnRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCdzZWN0aW9uLS1oaWRkZW4nKTtcclxuICAgICAgICBvYnNlcnZlci51bm9ic2VydmUoZW50cnkudGFyZ2V0KTtcclxuICAgIH0pO1xyXG59O1xyXG5cclxuLy8gSG9tZSBiYW5uZXIgb24gY2xpY2sgRGF0YSBMYXllclxyXG52YXIgJGRvYyA9ICQoZG9jdW1lbnQpO1xyXG52YXIgYmFubmVyU2VsZWN0b3IgPSBcIltkYXRhLWd0bS1iYW5uZXItb25jbGlja10sIC5sYXlvdXQtYmFubmVyIGEsIC5iYW5uZXJfYmFja2dyb3VuZCBhLCAuY2Fyb3VzZWwtaXRlbSBhXCI7XHJcblxyXG4kZG9jLm9mZihcImNsaWNrXCIsIGJhbm5lclNlbGVjdG9yKS5vbihcImNsaWNrXCIsIGJhbm5lclNlbGVjdG9yLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKGlzUHJvZHVjdFRpbGUodGhpcykgfHwgKGUgJiYgZS50YXJnZXQgJiYgaXNQcm9kdWN0VGlsZShlLnRhcmdldCkpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlICYmIHR5cGVvZiBlLnN0b3BQcm9wYWdhdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyICRndG1PbmNsaWNrRWxlbSA9ICQodGhpcykuY2xvc2VzdChcIltkYXRhLWd0bS1iYW5uZXItb25jbGlja11cIik7XHJcbiAgICBpZiAoISRndG1PbmNsaWNrRWxlbS5sZW5ndGgpIHtcclxuICAgICAgICB2Y
121XIgJHBhcmVudFNlY3Rpb24gPSAkKHRoaXMpLmNsb3Nlc3QoJy5leHBlcmllbmNlLWNvbW1lcmNlX2Fzc2V0cy1iYW5uZXJBbmRMaW5rLCAuZXhwZXJpZW5jZS1jb21tZXJjZV9sYXlvdXRzLWN0YUJ1dHRvbkJhbm5lciwgLmV4cGVyaWVuY2UtY29tbWVyY2VfYXNzZXRzLWN0YUJ1dHRvbkFuZExpbmssIC5jYXJvdXNlbC1ob21lcGFnZS12c2ZhLCAuZXhwZXJpZW5jZS1jb21tZXJjZV9sYXlvdXRzLWNhcm91c2VsLCAubGF5b3V0LWJhbm5lciwgLmJhbm5lcl9iYWNrZ3JvdW5kJyk7XHJcbiAgICAgICAgJGd0bU9uY2xpY2tFbGVtID0gJHBhcmVudFNlY3Rpb24uZmluZChcIltkYXRhLWd0bS1iYW5uZXItb25jbGlja11cIikuZmlyc3QoKTtcclxuICAgICAgICBpZiAoISRndG1PbmNsaWNrRWxlbS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgJGd0bU9uY2xpY2tFbGVtID0gJCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGNsaWNrZWRBbmNob3IgPSAkZ3RtT25jbGlja0VsZW1bMF07XHJcbiAgICB2YXIgcmF3RGF0YSA9IChjbGlja2VkQW5jaG9yICYmIGNsaWNrZWRBbmNob3IuZGF0YXNldCAmJiBjbGlja2VkQW5jaG9yLmRhdGFzZXQuZ3RtQmFubmVyT25jbGljaylcclxuICAgICAgICA/IGNsaWNrZWRBbmNob3IuZGF0YXNldC5ndG1CYW5uZXJPbmNsaWNrXHJcbiAgICAgICAgOiAkZ3RtT25jbGlja0VsZW0uYXR0cihcImRhdGEtZ3RtLWJhbm5lci1vbmNsaWNrXCIpO1xyXG5cclxuICAgIHZhciBiYW5uZXJPYmplY3QgPSByYXdEYXRhO1xyXG4gICAgaWYgKHR5cGVvZiBiYW5uZXJPYmplY3QgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYmFubmVyT2JqZWN0ID0gSlNPTi5wYXJzZShiYW5uZXJPYmplY3QucmVwbGFjZSgvJnF1b3Q7L2csICdcIicpKTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGJhbm5lck9iamVjdCA9IEpTT04ucGFyc2UoYmFubmVyT2JqZWN0KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyMikge1xyXG4gICAgICAgICAgICAgICAgYmFubmVyT2JqZWN0ID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIgYmFubmVyVGl0bGUgPSAkZ3RtT25jbGlja0VsZW0uZGF0YShcInRpdGxlXCIpXHJcbiAgICAgICAgfHwgJGd0bU9uY2xpY2tFbGVtLmF0dHIoXCJkYXRhLXRpdGxlXCIpXHJcbiAgICAgICAgfHwgKGNsaWNrZWRBbmNob3IgJiYgY2xpY2tlZEFuY2hvci5kYXRhc2V0ID8gY2xpY2tlZEFuY2hvci5kYXRhc2V0LnRpdGxlIDogbnVsbClcclxuICAgICAgICB8fCAkZ3RtT25jbGlja0VsZW0uZmluZCgnaW1nJykuYXR0cigndGl0bGUnKVxyXG4gICAgICAgIHx8ICRndG1PbmNsaWNrRWxlbS5maW5kKCdpbWcnKS5hdHRyKCdhbHQnKVxyXG4gICAgICAgIHx8ICdOQSc7XHJcblxyXG4gICAgaWYgKCFiYW5uZXJPYmplY3QpIHtcclxuICAgICAgICBiYW5uZXJPYmplY3QgPSBbe1xyXG4gICAgICAgICAgICBwcm9tb3Rpb25faWQ6ICdOQScsXHJcbiAgICAgICAgICAgIHByb21vdGlvbl9uYW1lOiBiYW5uZXJUaXRsZSxcclxuICAgICAgICAgICAgY3JlYXRpdmVfbmFtZTogYmFubmVyVGl0bGUsXHJcbiAgICAgICAgICAgIGNyZWF0aXZlX3Nsb3Q6IDBcclxuICAgICAgICB9XTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcmF3SXRlbXMgPSBBcnJheS5pc0FycmF5KGJhbm5lck9iamVjdCkgPyBiYW5uZXJPYmplY3QgOiBbYmFubmVyT2JqZWN0XTtcclxuICAgIGlmICghcmF3SXRlbXMgfHwgIXJhd0l0ZW1zWzBdKSB7XHJcbiAgICAgICAgcmF3SXRlbXMgPSBbe1xyXG4gICAgICAgICAgICBwcm9tb3Rpb25faWQ6ICdOQScsXHJcbiAgICAgICAgICAgIHByb21vdGlvbl9uYW1lOiBiYW5uZXJUaXRsZSxcclxuICAgICAgICAgICAgY3JlYXRpdmVfbmFtZTogYmFubmVyVGl0bGUsXHJcbiAgICAgICAgICAgIGNyZWF0aXZlX3Nsb3Q6IDBcclxuICAgICAgICB9XTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgYmFubmVySW5kZXggPSBnZXRDcmVhdGl2ZVNsb3QoY2xpY2tlZEFuY2hvciB8fCAkKHRoaXMpWzBdKTtcclxuXHJcbiAgICBsZXQgaXRlbXMgPSByYXdJdGVtcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICBsZXQgbmV3SXRlbSA9IHsgLi4uaXRlbSB9O1xyXG4gICAgICAgICAgICBkZWxldGUgbmV3SXRlbS5pbmRleDtcclxuICAgICAgICAgICAgbGV0IHNsb3QgPSBiYW5uZXJJbmRleCA+IDAgPyBiYW5uZXJJbmRleCA6IChwYXJzZUludChuZXdJdGVtLmNyZWF0aXZlX3Nsb3QsIDEwKSB8fCAxKTtcclxuICAgICAgICAgICAgbmV3SXRlbS5jcmVhdGl2ZV9zbG90ID0gc2xvdDtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld0l0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IGd0bU9iaiA9IHsgLi4uX2NvbW1vbktleXMoKSB9O1xyXG4gICAgZ3RtT2JqLmVjb21tZXJjZSA9IHtcclxuICAgICAgICBpdGVtczogaXRlbXNcclxuICAgIH07XHJcbiAgICBndG1PYmouZXZlbnQgPSBcInNlbGVjdF9wcm9tb3Rpb25cIjtcclxuICAgIGxldCBicmFuZE5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYm9yZGVyLXBpbmsnKTtcclxuICAgIGxldCBicmFuZCA9IGJyYW5kTm9kZSAmJiBicmFuZE5vZGUuZGF0YXNldCAmJiBicmFuZE5vZGUuZGF0YXNldC5icmFuZCA/IGJyYW5kTm9kZS5kYXRhc2V0LmJyYW5kIDogJyc7XHJcbiAgICAvLyBsZXQgYnJhbmRNYXAgPSB7ICd2aWN0b3JpYXMtU2VjcmV0cyc6ICd2aWN0b3JpYXNzZWNyZXQnLCAncGluayc6ICdQaW5rJywgJ2JlYXV0eSc6ICdiZWF1dHknIH07XHJcblxyXG4gICAgaWYgKGJhbm5lclRpdGxlICYmIGJhbm5lclRpdGxlICE9PSAnTkEnKSB7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnVlNfYmFubmVyX25hbWUnLCBiYW5uZXJUaXRsZSk7XHJcbiAgICB9XHJcbiAgICBndG1PYmouYmFubmVyX25hbWUgPSBiYW5uZXJUaXRsZSA/IGJhbm5lclRpdGxlIDogJ05BJztcclxuICAgIGd0bU9iai5iYW5uZXJfdHlwZSA9IFwiaW1hZ2VcIjtcclxuICAgIGd0bU9iai5wYWdlX3R5cGUgPSAnSG9tZV9wYWdlJztcclxuICAgIGlmIChndG1PYmouZWNvbW1lcmNlICYmIGd0bU9iai5lY29tbWVyY2UuaXRlbXMgJiYgZ3RtT2JqLmVjb21tZXJjZS5pdGVtc1swXSkge1xyXG4gICAgICAgIGd0bU9iai5lY29tbWVyY2UuaXRlbXNbMF0ucHJvbW90aW9uX25hbWUgPSBndG1PYmouZWNvbW1lcmNlLml0ZW1zWzBdLnByb21vdGlvbl9uYW1lIHx8IGd0bU9iai5iYW5uZXJfbmFtZTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5kYXRhTGF5ZXIgPSB3aW5kb3cuZGF0YUxheWVyIHx8IFtdO1xyXG4gICAgd2luZG93LmRh
121dGFMYXllci5wdXNoKHsgZWNvbW1lcmNlOiBudWxsIH0pO1xyXG4gICAgd2luZG93LmRhdGFMYXllci5wdXNoKGd0bU9iaik7XHJcbn0pO1xyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./cartridges/int_gtm_bathandbody/cartridge/client/default/js/promotion.js\n"
vendor: 26 bytes, lines 121-125
121); 122 123/***/ }) 124 125/******/ });
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.